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

459 lines
12 KiB
JSON

[
{
"id": "T001",
"description": "Migration creates ticket_response_state enum type with correct values",
"implemented": true,
"featureIds": ["F001"]
},
{
"id": "T002",
"description": "Migration adds response_state column to tickets table as nullable",
"implemented": true,
"featureIds": ["F002"]
},
{
"id": "T003",
"description": "Migration creates index on (tenant, response_state)",
"implemented": true,
"featureIds": ["F003"]
},
{
"id": "T004",
"description": "Existing tickets have null response_state after migration",
"implemented": true,
"featureIds": ["F002"]
},
{
"id": "T005",
"description": "ITicket type includes response_state: TicketResponseState",
"implemented": true,
"featureIds": ["F004"]
},
{
"id": "T006",
"description": "TicketResponseState type allows 'awaiting_client' | 'awaiting_internal' | null",
"implemented": true,
"featureIds": ["F004"]
},
{
"id": "T007",
"description": "Staff creates client-visible comment → response_state becomes awaiting_client",
"implemented": true,
"featureIds": ["F005"]
},
{
"id": "T008",
"description": "Staff creates client-visible comment on ticket already awaiting_client → state unchanged",
"implemented": true,
"featureIds": ["F005"]
},
{
"id": "T009",
"description": "Staff creates client-visible comment on ticket awaiting_internal → state becomes awaiting_client",
"implemented": true,
"featureIds": ["F005"]
},
{
"id": "T010",
"description": "Client creates comment → response_state becomes awaiting_internal",
"implemented": true,
"featureIds": ["F006"]
},
{
"id": "T011",
"description": "Client creates comment on ticket already awaiting_internal → state unchanged",
"implemented": true,
"featureIds": ["F006"]
},
{
"id": "T012",
"description": "Client creates comment on ticket awaiting_client → state becomes awaiting_internal",
"implemented": true,
"featureIds": ["F006"]
},
{
"id": "T013",
"description": "Staff creates internal note → response_state does not change from null",
"implemented": true,
"featureIds": ["F007"]
},
{
"id": "T014",
"description": "Staff creates internal note on awaiting_client ticket → state remains awaiting_client",
"implemented": true,
"featureIds": ["F007"]
},
{
"id": "T015",
"description": "Staff creates internal note on awaiting_internal ticket → state remains awaiting_internal",
"implemented": true,
"featureIds": ["F007"]
},
{
"id": "T016",
"description": "Comment creation and response state update occur in same transaction",
"implemented": true,
"featureIds": ["F008"]
},
{
"id": "T017",
"description": "If comment creation fails, response_state is not updated",
"implemented": true,
"featureIds": ["F008"]
},
{
"id": "T018",
"description": "updateTicket with response_state='awaiting_client' updates ticket",
"implemented": true,
"featureIds": ["F009"]
},
{
"id": "T019",
"description": "updateTicket with response_state='awaiting_internal' updates ticket",
"implemented": true,
"featureIds": ["F009"]
},
{
"id": "T020",
"description": "updateTicket with response_state=null clears response state",
"implemented": true,
"featureIds": ["F009"]
},
{
"id": "T021",
"description": "Manual response state change creates audit log entry",
"implemented": false,
"featureIds": ["F010"]
},
{
"id": "T022",
"description": "Closing ticket via is_closed=true sets response_state to null",
"implemented": true,
"featureIds": ["F011"]
},
{
"id": "T023",
"description": "Closing ticket that was awaiting_client clears response_state",
"implemented": true,
"featureIds": ["F011"]
},
{
"id": "T024",
"description": "Closing ticket that was awaiting_internal clears response_state",
"implemented": true,
"featureIds": ["F011"]
},
{
"id": "T025",
"description": "Closing ticket with null response_state keeps response_state null",
"implemented": true,
"featureIds": ["F011"]
},
{
"id": "T026",
"description": "Reopening closed ticket does not set response_state",
"implemented": true,
"featureIds": ["F012"]
},
{
"id": "T027",
"description": "Ticket list renders awaiting_client badge on status pill",
"implemented": true,
"featureIds": ["F013"]
},
{
"id": "T028",
"description": "Ticket list renders awaiting_internal badge on status pill",
"implemented": true,
"featureIds": ["F014"]
},
{
"id": "T029",
"description": "awaiting_client badge has correct icon",
"implemented": true,
"featureIds": ["F013"]
},
{
"id": "T030",
"description": "awaiting_internal badge has correct icon",
"implemented": true,
"featureIds": ["F014"]
},
{
"id": "T031",
"description": "Response state badge shows tooltip on hover with full description",
"implemented": true,
"featureIds": ["F015"]
},
{
"id": "T032",
"description": "Tickets with null response_state render status without badge",
"implemented": true,
"featureIds": ["F016"]
},
{
"id": "T033",
"description": "Ticket list filter dropdown includes Response State option",
"implemented": true,
"featureIds": ["F017"]
},
{
"id": "T034",
"description": "Filtering by 'Awaiting Client Response' shows only awaiting_client tickets",
"implemented": true,
"featureIds": ["F018"]
},
{
"id": "T035",
"description": "Filtering by 'Awaiting Internal Response' shows only awaiting_internal tickets",
"implemented": true,
"featureIds": ["F019"]
},
{
"id": "T036",
"description": "Filtering by 'No Response State' shows only null response_state tickets",
"implemented": true,
"featureIds": ["F020"]
},
{
"id": "T037",
"description": "Response State filter combined with status filter returns intersection",
"implemented": true,
"featureIds": ["F021"]
},
{
"id": "T038",
"description": "Response State filter combined with assignee filter returns intersection",
"implemented": true,
"featureIds": ["F021"]
},
{
"id": "T039",
"description": "Ticket detail view shows awaiting_client response state",
"implemented": true,
"featureIds": ["F022"]
},
{
"id": "T040",
"description": "Ticket detail view shows awaiting_internal response state",
"implemented": true,
"featureIds": ["F022"]
},
{
"id": "T041",
"description": "Ticket detail view shows no response state indicator when null",
"implemented": true,
"featureIds": ["F022"]
},
{
"id": "T042",
"description": "Ticket detail view has manual override dropdown/button",
"implemented": true,
"featureIds": ["F023"]
},
{
"id": "T043",
"description": "Manual override dropdown shows 'Awaiting Client' option",
"implemented": true,
"featureIds": ["F024"]
},
{
"id": "T044",
"description": "Manual override dropdown shows 'Awaiting Internal' option",
"implemented": true,
"featureIds": ["F024"]
},
{
"id": "T045",
"description": "Manual override dropdown shows 'Clear' option",
"implemented": true,
"featureIds": ["F024"]
},
{
"id": "T046",
"description": "Selecting manual override option updates ticket response_state",
"implemented": true,
"featureIds": ["F023"]
},
{
"id": "T047",
"description": "Posting comment updates response state badge without page reload",
"implemented": true,
"featureIds": ["F025"]
},
{
"id": "T048",
"description": "Client portal ticket list displays response_state",
"implemented": true,
"featureIds": ["F026"]
},
{
"id": "T049",
"description": "Client portal shows 'Awaiting Your Response' for awaiting_client",
"implemented": true,
"featureIds": ["F027"]
},
{
"id": "T050",
"description": "Client portal shows 'Awaiting Support Response' for awaiting_internal",
"implemented": true,
"featureIds": ["F028"]
},
{
"id": "T051",
"description": "Client portal ticket detail shows response state",
"implemented": true,
"featureIds": ["F029"]
},
{
"id": "T052",
"description": "Client portal does not render manual override controls",
"implemented": true,
"featureIds": ["F030"]
},
{
"id": "T053",
"description": "Client API requests to update response_state are rejected",
"implemented": true,
"featureIds": ["F030"]
},
{
"id": "T054",
"description": "TICKET_RESPONSE_STATE_CHANGED event type exists in EventTypeEnum",
"implemented": true,
"featureIds": ["F031"]
},
{
"id": "T055",
"description": "Event schema validates tenantId, ticketId, userId, previousState, newState, trigger",
"implemented": true,
"featureIds": ["F035"]
},
{
"id": "T056",
"description": "Creating client-visible comment fires TICKET_RESPONSE_STATE_CHANGED event",
"implemented": true,
"featureIds": ["F032"]
},
{
"id": "T057",
"description": "Comment-triggered event has trigger='comment'",
"implemented": true,
"featureIds": ["F036"]
},
{
"id": "T058",
"description": "Manual override fires TICKET_RESPONSE_STATE_CHANGED event",
"implemented": true,
"featureIds": ["F033"]
},
{
"id": "T059",
"description": "Manual override event has trigger='manual'",
"implemented": true,
"featureIds": ["F036"]
},
{
"id": "T060",
"description": "Closing ticket fires TICKET_RESPONSE_STATE_CHANGED event when state was not null",
"implemented": true,
"featureIds": ["F034"]
},
{
"id": "T061",
"description": "Close event has trigger='close'",
"implemented": true,
"featureIds": ["F036"]
},
{
"id": "T062",
"description": "Closing ticket with null response_state does not fire event",
"implemented": true,
"featureIds": ["F034"]
},
{
"id": "T063",
"description": "Event includes correct previousState value",
"implemented": true,
"featureIds": ["F035"]
},
{
"id": "T064",
"description": "Event includes correct newState value",
"implemented": true,
"featureIds": ["F035"]
},
{
"id": "T065",
"description": "Event userId is null for client-triggered events in client portal",
"implemented": true,
"featureIds": ["F035"]
},
{
"id": "T066",
"description": "Automation Hub shows TICKET_RESPONSE_STATE_CHANGED in event type dropdown",
"implemented": true,
"featureIds": ["F037"]
},
{
"id": "T067",
"description": "Workflow trigger can be created for TICKET_RESPONSE_STATE_CHANGED event",
"implemented": true,
"featureIds": ["F037"]
},
{
"id": "T068",
"description": "Workflow trigger fires when response state changes",
"implemented": true,
"featureIds": ["F037"]
},
{
"id": "T069",
"description": "Event mappings can access previousState field",
"implemented": true,
"featureIds": ["F038"]
},
{
"id": "T070",
"description": "Event mappings can access newState field",
"implemented": true,
"featureIds": ["F038"]
},
{
"id": "T071",
"description": "Event mappings can access trigger field",
"implemented": true,
"featureIds": ["F038"]
},
{
"id": "T072",
"description": "TICKET_COMMENT_ADDED event payload includes author_type",
"implemented": true,
"featureIds": ["F039"]
},
{
"id": "T073",
"description": "User in tenant A cannot see response_state of ticket in tenant B",
"implemented": true,
"featureIds": ["F040"]
},
{
"id": "T074",
"description": "User in tenant A cannot update response_state of ticket in tenant B",
"implemented": true,
"featureIds": ["F040"]
},
{
"id": "T075",
"description": "Events for tenant A are not delivered to tenant B workflows",
"implemented": true,
"featureIds": ["F040"]
},
{
"id": "T076",
"description": "Internal note does not fire TICKET_RESPONSE_STATE_CHANGED event",
"implemented": true,
"featureIds": ["F007", "F032"]
}
]