Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
323 lines
9.2 KiB
JSON
323 lines
9.2 KiB
JSON
[
|
|
{
|
|
"id": "F001",
|
|
"description": "Define ticket watch-list attribute contract in `tickets.attributes.watch_list` with normalized email and active state.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"Data / API / Integrations"
|
|
]
|
|
},
|
|
{
|
|
"id": "F002",
|
|
"description": "Implement watch-list parsing that tolerates null/legacy attribute shapes and produces normalized entries.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Non-functional Requirements",
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F003",
|
|
"description": "Deduplicate watch-list entries by normalized email during parse/merge operations.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F004",
|
|
"description": "Support watcher metadata fields (name/source/timestamps) without breaking minimum contract.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Data / API / Integrations"
|
|
]
|
|
},
|
|
{
|
|
"id": "F005",
|
|
"description": "Add a Watch List section to ticket properties UI with recipient list visibility.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"UX / UI Notes"
|
|
]
|
|
},
|
|
{
|
|
"id": "F006",
|
|
"description": "Add manual watcher email entry with validation and duplicate handling.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"UX / UI Notes"
|
|
]
|
|
},
|
|
{
|
|
"id": "F007",
|
|
"description": "Add watcher active/inactive checkbox behavior in UI and persist it to ticket attributes.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"UX / UI Notes"
|
|
]
|
|
},
|
|
{
|
|
"id": "F008",
|
|
"description": "Add watcher removal action in UI and persist deletion to ticket attributes.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"UX / UI Notes"
|
|
]
|
|
},
|
|
{
|
|
"id": "F009",
|
|
"description": "Wire Watch List UI actions to existing ticket update action flow with permission enforcement.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Security / Permissions",
|
|
"Data / API / Integrations"
|
|
]
|
|
},
|
|
{
|
|
"id": "F010",
|
|
"description": "Derive inbound watcher candidates from `To` and `CC` recipient lists during email ingestion.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"Users and Primary Flows"
|
|
]
|
|
},
|
|
{
|
|
"id": "F011",
|
|
"description": "Exclude sender and configured provider mailbox from inbound watcher candidate set.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F012",
|
|
"description": "Seed watch-list attributes on new ticket creation from inbound email recipients.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"Data / API / Integrations"
|
|
]
|
|
},
|
|
{
|
|
"id": "F013",
|
|
"description": "Upsert watch-list recipients on reply-to-existing-ticket inbound paths.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"Users and Primary Flows"
|
|
]
|
|
},
|
|
{
|
|
"id": "F014",
|
|
"description": "Reactivate inactive watcher entries when the same email appears again in inbound `To`/`CC`.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F015",
|
|
"description": "Read active watcher emails in ticket email subscriber from ticket attributes for outbound fan-out.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Data / API / Integrations",
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F016",
|
|
"description": "Send watcher notifications for ticket-created events using customer-visible context.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F017",
|
|
"description": "Send watcher notifications for ticket-updated events in both accumulator and non-accumulator paths.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F018",
|
|
"description": "Send watcher notifications for ticket-assigned events when customer-visible assignment notifications are emitted.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F019",
|
|
"description": "Send watcher notifications for ticket-comment-added events only when the comment is customer-visible.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F020",
|
|
"description": "Send watcher notifications for ticket-closed events with customer-visible context.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F021",
|
|
"description": "Deduplicate watcher recipients against existing recipients for each event send path.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F022",
|
|
"description": "Ensure comment-author suppression applies to watcher sends for public comment notifications.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F023",
|
|
"description": "Guarantee watcher delivery mode is separate individual emails (no outbound CC batching).",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Summary",
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F024",
|
|
"description": "Allow any email, including technician/internal addresses, to be included as watchers via email-based list management.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Goals",
|
|
"Users and Primary Flows"
|
|
]
|
|
},
|
|
{
|
|
"id": "F025",
|
|
"description": "Extend watch-list entry contract to support optional `entity_type` (`user|contact`) and `entity_id` metadata while preserving email-based canonical behavior.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Data / API / Integrations",
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F026",
|
|
"description": "Update watch-list parse/merge utilities to round-trip and merge entity metadata for duplicate emails without breaking existing legacy entries.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"Non-functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F027",
|
|
"description": "Add an internal-user picker add path in Watch List UI to create watcher entries from selected internal users.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"UX / UI Notes",
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F028",
|
|
"description": "Add a client-first contact picker add path in Watch List UI that defaults to contacts for the ticket's associated client.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"UX / UI Notes",
|
|
"Users and Primary Flows"
|
|
]
|
|
},
|
|
{
|
|
"id": "F029",
|
|
"description": "Add a secondary `Search all contacts` path to select active cross-client contacts when the default client-scoped contact list is insufficient.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"UX / UI Notes",
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F030",
|
|
"description": "Prevent persistence when picker-selected user/contact has no valid email and surface a clear validation error.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"Acceptance Criteria (Definition of Done)"
|
|
]
|
|
},
|
|
{
|
|
"id": "F031",
|
|
"description": "Wire new watch-list picker data and handlers through TicketDetails -> TicketProperties -> TicketWatchListCard without regressing existing ticket properties behavior.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Data / API / Integrations",
|
|
"UX / UI Notes"
|
|
]
|
|
},
|
|
{
|
|
"id": "F032",
|
|
"description": "Add all-tenant active-contact lookup action(s) for watch-list fallback search using shared ticket-client contact query layer.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Data / API / Integrations",
|
|
"Functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F033",
|
|
"description": "Keep manual email add path intact and fully interoperable with picker-added watchers in dedupe/reactivation flows.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"Non-functional Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F034",
|
|
"description": "Persist picker-added watcher metadata (`name`, `entity_type`, `entity_id`, `source=manual`) alongside normalized email and active state.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"Data / API / Integrations"
|
|
]
|
|
},
|
|
{
|
|
"id": "F035",
|
|
"description": "Display picker-added watcher identity hints (name and optional type badge) in the Watch List row UI while always showing recipient email.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"UX / UI Notes"
|
|
]
|
|
},
|
|
{
|
|
"id": "F036",
|
|
"description": "Preserve outbound watcher send behavior as email-based fan-out; entity metadata must not alter send eligibility beyond existing active email logic.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"Data / API / Integrations"
|
|
]
|
|
},
|
|
{
|
|
"id": "F037",
|
|
"description": "Do not auto-disable watcher sends when linked user/contact becomes inactive; keep stored-email behavior unless user edits watch-list entry.",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Functional Requirements",
|
|
"Non-goals"
|
|
]
|
|
}
|
|
]
|