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
453 lines
13 KiB
JSON
453 lines
13 KiB
JSON
[
|
|
{
|
|
"id": "T001",
|
|
"description": "Unit: ISlaBackend interface has all required method signatures",
|
|
"implemented": true,
|
|
"featureIds": ["F001"]
|
|
},
|
|
{
|
|
"id": "T002",
|
|
"description": "Unit: SlaBackendFactory returns PgBossSlaBackend when isEnterprise is false",
|
|
"implemented": true,
|
|
"featureIds": ["F002"]
|
|
},
|
|
{
|
|
"id": "T003",
|
|
"description": "Unit: SlaBackendFactory returns TemporalSlaBackend when isEnterprise is true and Temporal available",
|
|
"implemented": true,
|
|
"featureIds": ["F002"]
|
|
},
|
|
{
|
|
"id": "T004",
|
|
"description": "Unit: SlaBackendFactory falls back to PgBossSlaBackend when Temporal unavailable in EE",
|
|
"implemented": true,
|
|
"featureIds": ["F002", "F033", "F034"]
|
|
},
|
|
{
|
|
"id": "T005",
|
|
"description": "Unit: PgBossSlaBackend.startSlaTracking() returns without error",
|
|
"implemented": true,
|
|
"featureIds": ["F003", "F047"]
|
|
},
|
|
{
|
|
"id": "T006",
|
|
"description": "Unit: PgBossSlaBackend.pauseSla() calls slaPauseService.pauseSla()",
|
|
"implemented": true,
|
|
"featureIds": ["F003"]
|
|
},
|
|
{
|
|
"id": "T007",
|
|
"description": "Unit: PgBossSlaBackend.resumeSla() calls slaPauseService.resumeSla()",
|
|
"implemented": true,
|
|
"featureIds": ["F003"]
|
|
},
|
|
{
|
|
"id": "T008",
|
|
"description": "Unit: PgBossSlaBackend.completeSla('response') calls slaService.recordFirstResponse()",
|
|
"implemented": true,
|
|
"featureIds": ["F003"]
|
|
},
|
|
{
|
|
"id": "T009",
|
|
"description": "Unit: PgBossSlaBackend.completeSla('resolution') calls slaService.recordResolution()",
|
|
"implemented": true,
|
|
"featureIds": ["F003"]
|
|
},
|
|
{
|
|
"id": "T010",
|
|
"description": "Unit: PgBossSlaBackend.cancelSla() returns without error",
|
|
"implemented": true,
|
|
"featureIds": ["F003", "F048"]
|
|
},
|
|
{
|
|
"id": "T011",
|
|
"description": "Unit: PgBossSlaBackend.getSlaStatus() delegates to slaService.getSlaStatus()",
|
|
"implemented": true,
|
|
"featureIds": ["F003", "F049"]
|
|
},
|
|
{
|
|
"id": "T012",
|
|
"description": "Unit: SlaTicketWorkflow initializes with correct input parameters",
|
|
"implemented": true,
|
|
"featureIds": ["F004", "F005"]
|
|
},
|
|
{
|
|
"id": "T013",
|
|
"description": "Unit: SlaTicketWorkflow initial state has currentPhase='response' and empty notifiedThresholds",
|
|
"implemented": true,
|
|
"featureIds": ["F006"]
|
|
},
|
|
{
|
|
"id": "T014",
|
|
"description": "Unit: SlaTicketWorkflow calculates correct sleep duration for 50% threshold",
|
|
"implemented": true,
|
|
"featureIds": ["F007"]
|
|
},
|
|
{
|
|
"id": "T015",
|
|
"description": "Unit: SlaTicketWorkflow calculates correct sleep duration for 75% threshold",
|
|
"implemented": true,
|
|
"featureIds": ["F007"]
|
|
},
|
|
{
|
|
"id": "T016",
|
|
"description": "Unit: SlaTicketWorkflow calculates correct sleep duration for 90% threshold",
|
|
"implemented": true,
|
|
"featureIds": ["F007"]
|
|
},
|
|
{
|
|
"id": "T017",
|
|
"description": "Unit: SlaTicketWorkflow calculates correct sleep duration for 100% threshold",
|
|
"implemented": true,
|
|
"featureIds": ["F007"]
|
|
},
|
|
{
|
|
"id": "T018",
|
|
"description": "Unit: SlaTicketWorkflow pause signal sets pauseStartedAt timestamp",
|
|
"implemented": true,
|
|
"featureIds": ["F008"]
|
|
},
|
|
{
|
|
"id": "T019",
|
|
"description": "Unit: SlaTicketWorkflow resume signal clears pauseStartedAt and increments totalPauseMinutes",
|
|
"implemented": true,
|
|
"featureIds": ["F009"]
|
|
},
|
|
{
|
|
"id": "T020",
|
|
"description": "Unit: SlaTicketWorkflow resume signal recalculates next wake time with updated pause minutes",
|
|
"implemented": true,
|
|
"featureIds": ["F009"]
|
|
},
|
|
{
|
|
"id": "T021",
|
|
"description": "Unit: SlaTicketWorkflow completeResponse signal transitions to resolution phase",
|
|
"implemented": true,
|
|
"featureIds": ["F010"]
|
|
},
|
|
{
|
|
"id": "T022",
|
|
"description": "Unit: SlaTicketWorkflow completeResolution signal terminates workflow with success",
|
|
"implemented": true,
|
|
"featureIds": ["F011"]
|
|
},
|
|
{
|
|
"id": "T023",
|
|
"description": "Unit: SlaTicketWorkflow cancel signal terminates workflow without breach",
|
|
"implemented": true,
|
|
"featureIds": ["F012"]
|
|
},
|
|
{
|
|
"id": "T024",
|
|
"description": "Unit: SlaTicketWorkflow getState query returns current status and remaining time",
|
|
"implemented": true,
|
|
"featureIds": ["F013"]
|
|
},
|
|
{
|
|
"id": "T025",
|
|
"description": "Unit: calculateNextWakeTime returns correct wall-clock time for 8am-5pm Mon-Fri schedule",
|
|
"implemented": true,
|
|
"featureIds": ["F014"]
|
|
},
|
|
{
|
|
"id": "T026",
|
|
"description": "Unit: calculateNextWakeTime advances to Monday when start is Friday 4pm and target is 2 hours",
|
|
"implemented": true,
|
|
"featureIds": ["F014", "F015"]
|
|
},
|
|
{
|
|
"id": "T027",
|
|
"description": "Unit: calculateNextWakeTime skips holidays in calculation",
|
|
"implemented": true,
|
|
"featureIds": ["F014"]
|
|
},
|
|
{
|
|
"id": "T028",
|
|
"description": "Unit: calculateNextWakeTime handles recurring holidays correctly",
|
|
"implemented": true,
|
|
"featureIds": ["F014"]
|
|
},
|
|
{
|
|
"id": "T029",
|
|
"description": "Unit: calculateNextWakeTime subtracts pause minutes from elapsed time",
|
|
"implemented": true,
|
|
"featureIds": ["F016"]
|
|
},
|
|
{
|
|
"id": "T030",
|
|
"description": "Unit: calculateNextWakeTime returns immediate time for 24x7 schedule",
|
|
"implemented": true,
|
|
"featureIds": ["F014", "F050"]
|
|
},
|
|
{
|
|
"id": "T031",
|
|
"description": "Unit: sendSlaNotification activity calls slaNotificationService.sendSlaNotification()",
|
|
"implemented": true,
|
|
"featureIds": ["F017"]
|
|
},
|
|
{
|
|
"id": "T032",
|
|
"description": "Unit: checkAndEscalate activity calls escalationService.checkEscalationNeeded()",
|
|
"implemented": true,
|
|
"featureIds": ["F018"]
|
|
},
|
|
{
|
|
"id": "T033",
|
|
"description": "Unit: checkAndEscalate activity calls escalationService.escalateTicket() when threshold exceeded",
|
|
"implemented": true,
|
|
"featureIds": ["F018"]
|
|
},
|
|
{
|
|
"id": "T034",
|
|
"description": "Unit: updateSlaStatus activity updates ticket sla_response_met field",
|
|
"implemented": true,
|
|
"featureIds": ["F019"]
|
|
},
|
|
{
|
|
"id": "T035",
|
|
"description": "Unit: updateSlaStatus activity updates ticket sla_resolution_met field",
|
|
"implemented": true,
|
|
"featureIds": ["F019"]
|
|
},
|
|
{
|
|
"id": "T036",
|
|
"description": "Unit: recordSlaAuditLog activity inserts entry with correct event type",
|
|
"implemented": true,
|
|
"featureIds": ["F020"]
|
|
},
|
|
{
|
|
"id": "T037",
|
|
"description": "Unit: TemporalSlaBackend.startSlaTracking() starts workflow with correct ID",
|
|
"implemented": true,
|
|
"featureIds": ["F021", "F022"]
|
|
},
|
|
{
|
|
"id": "T038",
|
|
"description": "Unit: TemporalSlaBackend workflow ID follows format sla-ticket-{tenantId}-{ticketId}",
|
|
"implemented": true,
|
|
"featureIds": ["F022"]
|
|
},
|
|
{
|
|
"id": "T039",
|
|
"description": "Unit: TemporalSlaBackend.pauseSla() sends pause signal to workflow",
|
|
"implemented": true,
|
|
"featureIds": ["F023"]
|
|
},
|
|
{
|
|
"id": "T040",
|
|
"description": "Unit: TemporalSlaBackend.resumeSla() sends resume signal to workflow",
|
|
"implemented": true,
|
|
"featureIds": ["F024"]
|
|
},
|
|
{
|
|
"id": "T041",
|
|
"description": "Unit: TemporalSlaBackend.completeSla('response') sends completeResponse signal",
|
|
"implemented": true,
|
|
"featureIds": ["F025"]
|
|
},
|
|
{
|
|
"id": "T042",
|
|
"description": "Unit: TemporalSlaBackend.completeSla('resolution') sends completeResolution signal",
|
|
"implemented": true,
|
|
"featureIds": ["F025"]
|
|
},
|
|
{
|
|
"id": "T043",
|
|
"description": "Unit: TemporalSlaBackend.cancelSla() sends cancel signal to workflow",
|
|
"implemented": true,
|
|
"featureIds": ["F026"]
|
|
},
|
|
{
|
|
"id": "T044",
|
|
"description": "Unit: TemporalSlaBackend.getSlaStatus() queries workflow state",
|
|
"implemented": true,
|
|
"featureIds": ["F027"]
|
|
},
|
|
{
|
|
"id": "T045",
|
|
"description": "Unit: slaService.startSlaForTicket() calls backend.startSlaTracking()",
|
|
"implemented": true,
|
|
"featureIds": ["F028"]
|
|
},
|
|
{
|
|
"id": "T046",
|
|
"description": "Unit: slaPauseService.pauseSla() calls backend.pauseSla()",
|
|
"implemented": true,
|
|
"featureIds": ["F029"]
|
|
},
|
|
{
|
|
"id": "T047",
|
|
"description": "Unit: slaPauseService.resumeSla() calls backend.resumeSla()",
|
|
"implemented": true,
|
|
"featureIds": ["F030"]
|
|
},
|
|
{
|
|
"id": "T048",
|
|
"description": "Unit: slaService.recordFirstResponse() calls backend.completeSla('response')",
|
|
"implemented": true,
|
|
"featureIds": ["F031"]
|
|
},
|
|
{
|
|
"id": "T049",
|
|
"description": "Unit: slaService.recordResolution() calls backend.completeSla('resolution')",
|
|
"implemented": true,
|
|
"featureIds": ["F032"]
|
|
},
|
|
{
|
|
"id": "T050",
|
|
"description": "Unit: TemporalSlaBackend.startSlaTracking() handles duplicate workflow ID without error",
|
|
"implemented": true,
|
|
"featureIds": ["F035"]
|
|
},
|
|
{
|
|
"id": "T051",
|
|
"description": "Unit: CE stub TemporalSlaBackend throws 'only available in Enterprise Edition'",
|
|
"implemented": true,
|
|
"featureIds": ["F046"]
|
|
},
|
|
{
|
|
"id": "T052",
|
|
"description": "Integration: New ticket in EE starts Temporal workflow",
|
|
"implemented": true,
|
|
"featureIds": ["F004", "F021", "F028"]
|
|
},
|
|
{
|
|
"id": "T053",
|
|
"description": "Integration: Workflow sends notification at 50% threshold",
|
|
"implemented": true,
|
|
"featureIds": ["F038"]
|
|
},
|
|
{
|
|
"id": "T054",
|
|
"description": "Integration: Workflow sends notification at 75% threshold",
|
|
"implemented": true,
|
|
"featureIds": ["F039"]
|
|
},
|
|
{
|
|
"id": "T055",
|
|
"description": "Integration: Workflow sends notification at 90% threshold",
|
|
"implemented": true,
|
|
"featureIds": ["F040"]
|
|
},
|
|
{
|
|
"id": "T056",
|
|
"description": "Integration: Workflow marks breach at 100% threshold",
|
|
"implemented": true,
|
|
"featureIds": ["F041"]
|
|
},
|
|
{
|
|
"id": "T057",
|
|
"description": "Integration: Workflow checks escalation at each threshold",
|
|
"implemented": true,
|
|
"featureIds": ["F042"]
|
|
},
|
|
{
|
|
"id": "T058",
|
|
"description": "Integration: Pausing ticket pauses workflow timer",
|
|
"implemented": true,
|
|
"featureIds": ["F008", "F023", "F029"]
|
|
},
|
|
{
|
|
"id": "T059",
|
|
"description": "Integration: Resuming ticket resumes workflow timer with adjusted time",
|
|
"implemented": true,
|
|
"featureIds": ["F009", "F024", "F030"]
|
|
},
|
|
{
|
|
"id": "T060",
|
|
"description": "Integration: First response transitions workflow to resolution phase",
|
|
"implemented": true,
|
|
"featureIds": ["F010", "F031"]
|
|
},
|
|
{
|
|
"id": "T061",
|
|
"description": "Integration: Resolution completes workflow",
|
|
"implemented": true,
|
|
"featureIds": ["F011", "F032"]
|
|
},
|
|
{
|
|
"id": "T062",
|
|
"description": "Integration: Ticket deletion cancels workflow",
|
|
"implemented": true,
|
|
"featureIds": ["F012", "F036"]
|
|
},
|
|
{
|
|
"id": "T063",
|
|
"description": "Integration: SLA policy change cancels old workflow and starts new one",
|
|
"implemented": true,
|
|
"featureIds": ["F037"]
|
|
},
|
|
{
|
|
"id": "T064",
|
|
"description": "Integration: New ticket in CE does not start Temporal workflow",
|
|
"implemented": true,
|
|
"featureIds": ["F002", "F003"]
|
|
},
|
|
{
|
|
"id": "T065",
|
|
"description": "Integration: CE sla-timer job continues to process tickets normally",
|
|
"implemented": true,
|
|
"featureIds": ["F003"]
|
|
},
|
|
{
|
|
"id": "T066",
|
|
"description": "Integration: Temporal worker loads SlaTicketWorkflow on startup",
|
|
"implemented": true,
|
|
"featureIds": ["F043", "F044"]
|
|
},
|
|
{
|
|
"id": "T067",
|
|
"description": "Integration: Temporal worker loads SLA activities on startup",
|
|
"implemented": true,
|
|
"featureIds": ["F045"]
|
|
},
|
|
{
|
|
"id": "T068",
|
|
"description": "E2E: Full ticket lifecycle in EE - create, 50% notification, pause, resume, first response, 50% resolution notification, resolve",
|
|
"implemented": true,
|
|
"featureIds": ["F004", "F008", "F009", "F010", "F011", "F038"]
|
|
},
|
|
{
|
|
"id": "T069",
|
|
"description": "E2E: Full ticket lifecycle in CE - create, poll-based 50% notification, pause, resume, first response, resolve",
|
|
"implemented": true,
|
|
"featureIds": ["F003"]
|
|
},
|
|
{
|
|
"id": "T070",
|
|
"description": "E2E: EE fallback to pgboss when Temporal unavailable",
|
|
"implemented": true,
|
|
"featureIds": ["F033", "F034"]
|
|
},
|
|
{
|
|
"id": "T071",
|
|
"description": "Unit: calculateNextWakeTime handles timezone correctly for America/New_York",
|
|
"implemented": true,
|
|
"featureIds": ["F014"]
|
|
},
|
|
{
|
|
"id": "T072",
|
|
"description": "Unit: calculateNextWakeTime handles timezone correctly for Europe/London",
|
|
"implemented": true,
|
|
"featureIds": ["F014"]
|
|
},
|
|
{
|
|
"id": "T073",
|
|
"description": "Unit: calculateNextWakeTime handles DST transition correctly",
|
|
"implemented": true,
|
|
"featureIds": ["F014"]
|
|
},
|
|
{
|
|
"id": "T074",
|
|
"description": "Unit: SlaTicketWorkflow handles workflow replay correctly (deterministic)",
|
|
"implemented": true,
|
|
"featureIds": ["F004"]
|
|
},
|
|
{
|
|
"id": "T075",
|
|
"description": "Unit: SlaTicketWorkflow survives worker restart and continues from correct state",
|
|
"implemented": true,
|
|
"featureIds": ["F004"]
|
|
}
|
|
]
|