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

243 lines
7.7 KiB
JSON

[
{
"id": "T001",
"description": "Contract: Microsoft webhook ingress builds pointer-only queue job payload with required tenant/provider/message identifiers",
"implemented": true,
"featureIds": ["F001", "F002", "F018"]
},
{
"id": "T002",
"description": "Contract: Google webhook ingress builds pointer-only queue job payload with required tenant/provider/history identifiers",
"implemented": true,
"featureIds": ["F001", "F003", "F018"]
},
{
"id": "T003",
"description": "Contract: IMAP listener ingress builds pointer-only queue job payload with required tenant/provider/mailbox pointer identifiers",
"implemented": true,
"featureIds": ["F001", "F004", "F018"]
},
{
"id": "T004",
"description": "Ingress behavior: Microsoft callback returns success only after durable enqueue succeeds",
"implemented": true,
"featureIds": ["F002", "F006"]
},
{
"id": "T005",
"description": "Ingress behavior: Google callback returns success only after durable enqueue succeeds",
"implemented": true,
"featureIds": ["F003", "F006"]
},
{
"id": "T006",
"description": "Ingress behavior: IMAP listener records success only after durable enqueue succeeds",
"implemented": true,
"featureIds": ["F004", "F006"]
},
{
"id": "T007",
"description": "Failure path: enqueue error returns non-2xx response in webhook ingress paths",
"implemented": true,
"featureIds": ["F007"]
},
{
"id": "T008",
"description": "Integration: IMAP delivery retries when server ingress returns non-2xx",
"implemented": true,
"featureIds": ["F007"]
},
{
"id": "T009",
"description": "Consumer: worker can claim and process queued Microsoft pointer jobs",
"implemented": true,
"featureIds": ["F008", "F024"]
},
{
"id": "T010",
"description": "Consumer: worker can claim and process queued Google pointer jobs",
"implemented": true,
"featureIds": ["F008", "F024"]
},
{
"id": "T011",
"description": "Consumer: worker can claim and process queued IMAP pointer jobs",
"implemented": true,
"featureIds": ["F008", "F024"]
},
{
"id": "T012",
"description": "Consumer fetch: Microsoft pointer resolves to full email payload before processing",
"implemented": true,
"featureIds": ["F009", "F024"]
},
{
"id": "T013",
"description": "Consumer fetch: Google pointer resolves to full email payload before processing",
"implemented": true,
"featureIds": ["F009", "F024"]
},
{
"id": "T014",
"description": "Consumer fetch: IMAP pointer resolves to full email payload before processing",
"implemented": true,
"featureIds": ["F009", "F024"]
},
{
"id": "T015",
"description": "Idempotency: first consume of message identity processes successfully and records consume marker",
"implemented": true,
"featureIds": ["F010", "F017"]
},
{
"id": "T016",
"description": "Idempotency: duplicate consume of same message identity no-ops downstream processing",
"implemented": true,
"featureIds": ["F010", "F017"]
},
{
"id": "T017",
"description": "Consumer execution: successful fetch invokes processInboundEmailInApp with full normalized email payload",
"implemented": true,
"featureIds": ["F011"]
},
{
"id": "T018",
"description": "Queue semantics: successful processing ACKs job and removes it from pending state",
"implemented": true,
"featureIds": ["F012"]
},
{
"id": "T019",
"description": "Queue semantics: processing failure does not ACK job and job is eligible for retry",
"implemented": true,
"featureIds": ["F013", "F014"]
},
{
"id": "T020",
"description": "Queue semantics: unacknowledged job resurfaces after claim timeout and is reprocessed",
"implemented": true,
"featureIds": ["F013", "F014"]
},
{
"id": "T021",
"description": "Retry policy: attempt count increments on each failed consume",
"implemented": true,
"featureIds": ["F014"]
},
{
"id": "T022",
"description": "Retry policy: job moves to DLQ when max attempts are exceeded",
"implemented": true,
"featureIds": ["F015"]
},
{
"id": "T023",
"description": "Source drift handling: IMAP message unavailable at consume time is marked skipped with deterministic reason",
"implemented": true,
"featureIds": ["F016"]
},
{
"id": "T024",
"description": "Source drift handling: skipped-source-unavailable path does not cause infinite retries",
"implemented": true,
"featureIds": ["F016", "F014"]
},
{
"id": "T025",
"description": "Payload guard: queue job payload schema excludes attachment bytes and raw MIME fields",
"implemented": true,
"featureIds": ["F018"]
},
{
"id": "T026",
"description": "Regression: legacy IMAP in-memory queue path is not used when unified queue mode is enabled",
"implemented": true,
"featureIds": ["F019", "F021"]
},
{
"id": "T027",
"description": "Security: Microsoft webhook validation/auth behavior remains enforced in enqueue-only mode",
"implemented": true,
"featureIds": ["F020"]
},
{
"id": "T028",
"description": "Security: Google webhook JWT verification remains enforced in enqueue-only mode",
"implemented": true,
"featureIds": ["F020"]
},
{
"id": "T029",
"description": "Security: IMAP webhook secret verification remains enforced in enqueue-only mode",
"implemented": true,
"featureIds": ["F020"]
},
{
"id": "T030",
"description": "Config: unified queue feature flag switches callbacks/listener to enqueue-only path",
"implemented": true,
"featureIds": ["F021", "F023"]
},
{
"id": "T031",
"description": "Config: disabling unified queue flag preserves previous behavior for controlled rollback",
"implemented": true,
"featureIds": ["F021"]
},
{
"id": "T032",
"description": "Logs: enqueue success/failure events include tenant/provider/pointer identifiers",
"implemented": true,
"featureIds": ["F022"]
},
{
"id": "T033",
"description": "Logs: consumer retry, ack, skip, and DLQ events include attempt counts and terminal reason",
"implemented": true,
"featureIds": ["F022"]
},
{
"id": "T034",
"description": "DB integration happy path: consume-time idempotency record is persisted for newly processed message",
"implemented": true,
"featureIds": ["F010", "F017"]
},
{
"id": "T035",
"description": "DB integration guard path: duplicate consume attempt is blocked by idempotency persistence constraint/check",
"implemented": true,
"featureIds": ["F010", "F017"]
},
{
"id": "T036",
"description": "E2E: Microsoft callback enqueues pointer and worker creates expected ticket/comment/documents through shared processing path",
"implemented": true,
"featureIds": ["F002", "F009", "F011"]
},
{
"id": "T037",
"description": "E2E: Google callback enqueues pointer and worker creates expected ticket/comment/documents through shared processing path",
"implemented": true,
"featureIds": ["F003", "F009", "F011"]
},
{
"id": "T038",
"description": "E2E: IMAP listener enqueues pointer and worker creates expected ticket/comment/documents through shared processing path",
"implemented": true,
"featureIds": ["F004", "F009", "F011"]
},
{
"id": "T039",
"description": "E2E: duplicate provider deliveries produce only one processed message outcome due to consume-time idempotency",
"implemented": true,
"featureIds": ["F010", "F017"]
},
{
"id": "T040",
"description": "Docs: scratchpad/runbook captures queue architecture, flags, and local validation steps",
"implemented": true,
"featureIds": ["F025"]
}
]