Hermes 284313f908
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
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

555 lines
14 KiB
JSON

[
{
"id": "T001",
"description": "Unit: parsing watch list from null attributes returns empty array.",
"implemented": true,
"featureIds": [
"F001",
"F002"
]
},
{
"id": "T002",
"description": "Unit: parsing watch list from legacy string email array normalizes into active entries.",
"implemented": true,
"featureIds": [
"F002"
]
},
{
"id": "T003",
"description": "Unit: parser normalizes mixed-case emails to lowercase.",
"implemented": true,
"featureIds": [
"F001",
"F002"
]
},
{
"id": "T004",
"description": "Unit: duplicate watcher entries collapse to a single normalized email entry.",
"implemented": true,
"featureIds": [
"F003"
]
},
{
"id": "T005",
"description": "Unit: merge preserves optional metadata when available and non-empty.",
"implemented": true,
"featureIds": [
"F004"
]
},
{
"id": "T006",
"description": "Unit: merge adds new watcher entry with active=true by default.",
"implemented": true,
"featureIds": [
"F001",
"F003"
]
},
{
"id": "T007",
"description": "Unit: merge reactivates existing inactive watcher when recipient is re-seen.",
"implemented": true,
"featureIds": [
"F014"
]
},
{
"id": "T008",
"description": "Unit: serialization removes `watch_list` key when resulting list is empty.",
"implemented": true,
"featureIds": [
"F001",
"F002"
]
},
{
"id": "T009",
"description": "Unit: inbound recipient builder includes both To and CC entries with source tags.",
"implemented": true,
"featureIds": [
"F010"
]
},
{
"id": "T010",
"description": "Unit: inbound recipient builder excludes sender/provider mailbox/excluded addresses.",
"implemented": true,
"featureIds": [
"F011"
]
},
{
"id": "T011",
"description": "UI: ticket properties render Watch List card and existing watchers.",
"implemented": true,
"featureIds": [
"F005"
]
},
{
"id": "T012",
"description": "UI: adding a valid manual watcher triggers persistence callback and refreshes displayed list.",
"implemented": true,
"featureIds": [
"F006",
"F009"
]
},
{
"id": "T013",
"description": "UI: adding invalid email shows validation error and does not persist.",
"implemented": true,
"featureIds": [
"F006"
]
},
{
"id": "T014",
"description": "UI: adding existing inactive watcher reactivates instead of creating duplicate row.",
"implemented": true,
"featureIds": [
"F006",
"F014"
]
},
{
"id": "T015",
"description": "UI: unchecking watcher updates active=false and persists.",
"implemented": true,
"featureIds": [
"F007",
"F009"
]
},
{
"id": "T016",
"description": "UI: checking inactive watcher updates active=true and persists.",
"implemented": true,
"featureIds": [
"F007",
"F009"
]
},
{
"id": "T017",
"description": "UI: removing watcher deletes row and persists attribute update.",
"implemented": true,
"featureIds": [
"F008",
"F009"
]
},
{
"id": "T018",
"description": "UI: watcher save controls disable while request is in-flight to prevent double submits.",
"implemented": true,
"featureIds": [
"F005",
"F009"
]
},
{
"id": "T019",
"description": "Inbound unit: new ticket path includes watch-list attributes from To/CC recipients.",
"implemented": true,
"featureIds": [
"F012",
"F010"
]
},
{
"id": "T020",
"description": "Inbound unit: new ticket watch-list seed excludes sender email.",
"implemented": true,
"featureIds": [
"F011",
"F012"
]
},
{
"id": "T021",
"description": "Inbound unit: new ticket watch-list seed excludes provider mailbox.",
"implemented": true,
"featureIds": [
"F011",
"F012"
]
},
{
"id": "T022",
"description": "Inbound unit: reply-token path calls watch-list upsert for existing ticket.",
"implemented": true,
"featureIds": [
"F013"
]
},
{
"id": "T023",
"description": "Inbound unit: thread-header path calls watch-list upsert for existing ticket.",
"implemented": true,
"featureIds": [
"F013"
]
},
{
"id": "T024",
"description": "Inbound unit: when no To/CC recipients remain after exclusions, no watch-list upsert is attempted.",
"implemented": true,
"featureIds": [
"F010",
"F011",
"F013"
]
},
{
"id": "T025",
"description": "DB integration (happy path): upsert watch-list recipients writes expected JSON in `tickets.attributes.watch_list`.",
"implemented": true,
"featureIds": [
"F001",
"F013"
]
},
{
"id": "T026",
"description": "DB integration (guard case): upsert with only excluded/invalid recipients performs no ticket attribute mutation.",
"implemented": true,
"featureIds": [
"F011",
"F013"
]
},
{
"id": "T027",
"description": "Subscriber unit: active watcher extraction ignores inactive entries.",
"implemented": true,
"featureIds": [
"F015"
]
},
{
"id": "T028",
"description": "Subscriber unit: ticket-created sends watcher notification with customer-visible context.",
"implemented": true,
"featureIds": [
"F016"
]
},
{
"id": "T029",
"description": "Subscriber unit: ticket-updated accumulator path includes watchers in accumulation set.",
"implemented": true,
"featureIds": [
"F017"
]
},
{
"id": "T030",
"description": "Subscriber unit: ticket-updated non-accumulator path sends watcher notifications immediately.",
"implemented": true,
"featureIds": [
"F017"
]
},
{
"id": "T031",
"description": "Subscriber unit: ticket-assigned sends watcher notifications once per unique recipient.",
"implemented": true,
"featureIds": [
"F018",
"F021"
]
},
{
"id": "T032",
"description": "Subscriber unit: public internal-agent comment sends watcher notifications.",
"implemented": true,
"featureIds": [
"F019"
]
},
{
"id": "T033",
"description": "Subscriber unit: internal comment does not send watcher notifications.",
"implemented": true,
"featureIds": [
"F019"
]
},
{
"id": "T034",
"description": "Subscriber unit: public client-authored comment does not trigger watcher sends when customer-visible rule requires agent-authored updates.",
"implemented": true,
"featureIds": [
"F019"
]
},
{
"id": "T035",
"description": "Subscriber unit: ticket-closed sends watcher notifications with customer-visible context.",
"implemented": true,
"featureIds": [
"F020"
]
},
{
"id": "T036",
"description": "Subscriber unit: watcher recipients dedupe against primary contact/client recipient.",
"implemented": true,
"featureIds": [
"F021"
]
},
{
"id": "T037",
"description": "Subscriber unit: watcher recipients dedupe against assigned/additional resource recipients.",
"implemented": true,
"featureIds": [
"F021"
]
},
{
"id": "T038",
"description": "Subscriber unit: comment author is suppressed for watcher sends when author email matches watcher entry.",
"implemented": true,
"featureIds": [
"F022"
]
},
{
"id": "T039",
"description": "Subscriber unit: watcher send function issues one send call per watcher email (no aggregated CC payload).",
"implemented": true,
"featureIds": [
"F023"
]
},
{
"id": "T040",
"description": "End-to-end notification test: watcher receives ticket-created email as separate message.",
"implemented": true,
"featureIds": [
"F016",
"F023"
]
},
{
"id": "T041",
"description": "End-to-end notification test: watcher receives ticket-updated email as separate message.",
"implemented": true,
"featureIds": [
"F017",
"F023"
]
},
{
"id": "T042",
"description": "End-to-end notification test: watcher receives public comment email and not internal-note email.",
"implemented": true,
"featureIds": [
"F019",
"F023"
]
},
{
"id": "T043",
"description": "End-to-end notification test: watcher receives ticket-closed email as separate message.",
"implemented": true,
"featureIds": [
"F020",
"F023"
]
},
{
"id": "T044",
"description": "Compatibility test: technician/internal email can be added manually as watcher and remains persisted/active.",
"implemented": true,
"featureIds": [
"F024",
"F006"
]
},
{
"id": "T045",
"description": "Unit: parser accepts watch-list entry objects that include `entity_type` and `entity_id` metadata.",
"implemented": true,
"featureIds": [
"F025",
"F026"
]
},
{
"id": "T046",
"description": "Unit: merge preserves existing entity metadata when duplicate email is re-added from another path.",
"implemented": true,
"featureIds": [
"F025",
"F026",
"F033"
]
},
{
"id": "T047",
"description": "Unit: merge fills missing entity metadata on an existing watcher when duplicate email is added from picker with metadata.",
"implemented": true,
"featureIds": [
"F026",
"F034"
]
},
{
"id": "T048",
"description": "UI: Watch List renders internal-user add controls in addition to existing manual email add controls.",
"implemented": true,
"featureIds": [
"F027",
"F033"
]
},
{
"id": "T049",
"description": "UI: selecting an internal user and clicking add persists watcher with normalized email plus `entity_type=user` and `entity_id`.",
"implemented": true,
"featureIds": [
"F027",
"F034"
]
},
{
"id": "T050",
"description": "UI: Watch List renders client-scoped contact quick-add controls using ticket-associated client contacts as default source.",
"implemented": true,
"featureIds": [
"F028",
"F031"
]
},
{
"id": "T051",
"description": "UI: adding a contact from client-scoped quick picker persists watcher metadata (`entity_type=contact`, `entity_id`, name).",
"implemented": true,
"featureIds": [
"F028",
"F034"
]
},
{
"id": "T052",
"description": "UI: `Search all contacts` path is hidden/secondary and not required for standard ticket-client contact adds.",
"implemented": true,
"featureIds": [
"F029",
"F028"
]
},
{
"id": "T053",
"description": "UI: triggering `Search all contacts` lazily loads active all-tenant contacts and allows selecting a cross-client contact.",
"implemented": true,
"featureIds": [
"F029",
"F032"
]
},
{
"id": "T054",
"description": "UI: selected internal user without valid email shows validation error and does not call persist callback.",
"implemented": true,
"featureIds": [
"F030",
"F027"
]
},
{
"id": "T055",
"description": "UI: selected contact without valid email shows validation error and does not call persist callback.",
"implemented": true,
"featureIds": [
"F030",
"F028"
]
},
{
"id": "T056",
"description": "UI: dedupe prevents duplicate watcher row when same email is added via manual input and picker paths.",
"implemented": true,
"featureIds": [
"F033",
"F026"
]
},
{
"id": "T057",
"description": "Component integration: TicketDetails/TicketProperties pass client contacts, all-contact fallback hooks, and internal users into TicketWatchListCard without prop regression.",
"implemented": true,
"featureIds": [
"F031"
]
},
{
"id": "T058",
"description": "Server action unit: all-contact lookup returns active contacts sorted by full name for watch-list global search.",
"implemented": true,
"featureIds": [
"F032"
]
},
{
"id": "T059",
"description": "Server action guard: all-contact lookup excludes inactive contacts by default.",
"implemented": true,
"featureIds": [
"F032"
]
},
{
"id": "T060",
"description": "DB integration (happy path): upsertTicketWatchListRecipients persists entity metadata in `tickets.attributes.watch_list` for picker-added entries.",
"implemented": true,
"featureIds": [
"F034",
"F025"
]
},
{
"id": "T061",
"description": "DB integration (guard case): upsert ignores recipient inputs that include entity metadata but no valid email.",
"implemented": true,
"featureIds": [
"F030",
"F034"
]
},
{
"id": "T062",
"description": "Subscriber regression: watcher recipient extraction/sending remains email-driven and unaffected by presence of entity metadata fields.",
"implemented": true,
"featureIds": [
"F036",
"F025"
]
},
{
"id": "T063",
"description": "Subscriber regression: watcher with linked inactive/deleted identity metadata still sends when watcher entry is active and email is valid.",
"implemented": true,
"featureIds": [
"F037",
"F036"
]
},
{
"id": "T064",
"description": "UI: watcher row shows name/type hint for picker-added entries while continuing to display canonical email.",
"implemented": true,
"featureIds": [
"F035"
]
}
]