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

2064 lines
55 KiB
JSON

[
{
"id": "T001",
"description": "Functional: Extend ContractWizardData with renewal mode, notice period, term months, and override toggle fields.",
"implemented": true,
"featureIds": [
"F001"
]
},
{
"id": "T002",
"description": "Functional: Initialize renewal fields in ContractWizard default state for new contracts.",
"implemented": true,
"featureIds": [
"F002"
]
},
{
"id": "T003",
"description": "Functional: Hydrate renewal fields when resuming draft contracts in the wizard.",
"implemented": true,
"featureIds": [
"F003"
]
},
{
"id": "T004",
"description": "Functional: Hydrate renewal fields when editing existing contracts in the wizard.",
"implemented": true,
"featureIds": [
"F004"
]
},
{
"id": "T005",
"description": "Functional: Render Renewal Settings card in ContractBasicsStep when end date is present.",
"implemented": true,
"featureIds": [
"F005"
]
},
{
"id": "T006",
"description": "Functional: Render Evergreen Review settings card in ContractBasicsStep when end date is absent.",
"implemented": true,
"featureIds": [
"F006"
]
},
{
"id": "T007",
"description": "Functional: Show renewal mode selector with values none/manual/auto in ContractBasicsStep.",
"implemented": true,
"featureIds": [
"F007"
]
},
{
"id": "T008",
"description": "Functional: Show notice period selector/input in ContractBasicsStep for renewal-enabled modes.",
"implemented": true,
"featureIds": [
"F008"
]
},
{
"id": "T009",
"description": "Functional: Show renewal term behavior input in ContractBasicsStep for auto-renew mode.",
"implemented": true,
"featureIds": [
"F009"
]
},
{
"id": "T010",
"description": "Functional: Hide auto-renew-specific term controls when renewal mode is not auto.",
"implemented": true,
"featureIds": [
"F010"
]
},
{
"id": "T011",
"description": "Functional: Validate renewal mode is required when an end date is set.",
"implemented": true,
"featureIds": [
"F011"
]
},
{
"id": "T012",
"description": "Functional: Validate notice period is a non-negative integer within configured bounds.",
"implemented": true,
"featureIds": [
"F012"
]
},
{
"id": "T013",
"description": "Functional: Validate renewal term months is positive when explicitly provided.",
"implemented": true,
"featureIds": [
"F013"
]
},
{
"id": "T014",
"description": "Functional: Show inline validation errors for invalid renewal settings before wizard progression.",
"implemented": true,
"featureIds": [
"F014"
]
},
{
"id": "T015",
"description": "Functional: Include renewal fields in contract summary preview in ContractBasicsStep.",
"implemented": true,
"featureIds": [
"F015"
]
},
{
"id": "T016",
"description": "Functional: Include renewal fields in review step payload preview before submit.",
"implemented": true,
"featureIds": [
"F016"
]
},
{
"id": "T017",
"description": "Functional: Persist renewal fields in ClientContractWizardSubmission payload builder.",
"implemented": true,
"featureIds": [
"F017"
]
},
{
"id": "T018",
"description": "Functional: Persist renewal fields when saving draft contracts from wizard.",
"implemented": true,
"featureIds": [
"F018"
]
},
{
"id": "T019",
"description": "Functional: Add tenant default renewal mode field to default billing settings model.",
"implemented": true,
"featureIds": [
"F019"
]
},
{
"id": "T020",
"description": "Functional: Add tenant default notice period days field to default billing settings model.",
"implemented": true,
"featureIds": [
"F020"
]
},
{
"id": "T021",
"description": "Functional: Add tenant default due-date action policy field to default billing settings model.",
"implemented": true,
"featureIds": [
"F021"
]
},
{
"id": "T022",
"description": "Functional: Add tenant default renewal ticket board field to default billing settings model.",
"implemented": true,
"featureIds": [
"F022"
]
},
{
"id": "T023",
"description": "Functional: Add tenant default renewal ticket status field to default billing settings model.",
"implemented": true,
"featureIds": [
"F023"
]
},
{
"id": "T024",
"description": "Functional: Add tenant default renewal ticket priority field to default billing settings model.",
"implemented": true,
"featureIds": [
"F024"
]
},
{
"id": "T025",
"description": "Functional: Add tenant default renewal ticket assignee field to default billing settings model.",
"implemented": true,
"featureIds": [
"F025"
]
},
{
"id": "T026",
"description": "Functional: Expose renewal defaults in getDefaultBillingSettings action response.",
"implemented": true,
"featureIds": [
"F026"
]
},
{
"id": "T027",
"description": "Functional: Persist renewal defaults in updateDefaultBillingSettings action writes.",
"implemented": true,
"featureIds": [
"F027"
]
},
{
"id": "T028",
"description": "Functional: Add use-tenant-defaults toggle to contract renewal settings payload.",
"implemented": true,
"featureIds": [
"F028"
]
},
{
"id": "T029",
"description": "Functional: Apply tenant defaults to contract assignment when override toggle is enabled.",
"implemented": true,
"featureIds": [
"F029"
]
},
{
"id": "T030",
"description": "Functional: Apply explicit contract-level override values when override toggle is disabled.",
"implemented": true,
"featureIds": [
"F030"
]
},
{
"id": "T031",
"description": "Functional: Enforce deterministic fallback precedence when override fields are partially missing.",
"implemented": true,
"featureIds": [
"F031"
]
},
{
"id": "T032",
"description": "Functional: Expose effective renewal settings in contract assignment read APIs.",
"implemented": true,
"featureIds": [
"F032"
]
},
{
"id": "T033",
"description": "Functional: Compute decision_due_date for fixed-term assignments using end_date minus notice_period_days.",
"implemented": true,
"featureIds": [
"F033"
]
},
{
"id": "T034",
"description": "Functional: Compute next evergreen review anchor date from active contract anniversary rules.",
"implemented": true,
"featureIds": [
"F034"
]
},
{
"id": "T035",
"description": "Functional: Compute evergreen decision_due_date using anchor date minus notice_period_days.",
"implemented": true,
"featureIds": [
"F035"
]
},
{
"id": "T036",
"description": "Functional: Normalize decision_due_date calculations to date-only semantics used by client_contracts.",
"implemented": true,
"featureIds": [
"F036"
]
},
{
"id": "T037",
"description": "Functional: Recompute decision_due_date when contract end_date changes.",
"implemented": true,
"featureIds": [
"F037"
]
},
{
"id": "T038",
"description": "Functional: Recompute decision_due_date when notice period changes.",
"implemented": true,
"featureIds": [
"F038"
]
},
{
"id": "T039",
"description": "Functional: Recompute decision_due_date when renewal mode changes between none/manual/auto.",
"implemented": true,
"featureIds": [
"F039"
]
},
{
"id": "T040",
"description": "Functional: Recompute decision_due_date when evergreen anchor basis changes.",
"implemented": true,
"featureIds": [
"F040"
]
},
{
"id": "T041",
"description": "Functional: Skip decision_due_date generation for terminated/expired contract assignments.",
"implemented": true,
"featureIds": [
"F041"
]
},
{
"id": "T042",
"description": "Functional: Skip decision_due_date generation when renewal mode is none and no evergreen review is configured.",
"implemented": true,
"featureIds": [
"F042"
]
},
{
"id": "T043",
"description": "Functional: Create one renewal cycle key per contract assignment cycle for deduplication.",
"implemented": true,
"featureIds": [
"F043"
]
},
{
"id": "T044",
"description": "Functional: Prevent duplicate active renewal work items for same tenant/client_contract_id/cycle key.",
"implemented": true,
"featureIds": [
"F044"
]
},
{
"id": "T045",
"description": "Functional: Persist cycle_start and cycle_end boundaries for each generated renewal cycle.",
"implemented": true,
"featureIds": [
"F045"
]
},
{
"id": "T046",
"description": "Functional: Expose days_until_due as derived queue field for UI sorting and badges.",
"implemented": true,
"featureIds": [
"F046"
]
},
{
"id": "T047",
"description": "Functional: Clamp past-due decision calculations into queue visibility without negative date corruption.",
"implemented": true,
"featureIds": [
"F047"
]
},
{
"id": "T048",
"description": "Functional: Add renewals tab value and metadata to billing tab configuration.",
"implemented": true,
"featureIds": [
"F048"
]
},
{
"id": "T049",
"description": "Functional: Add Renewals Tabs.Content route to BillingDashboard tab host.",
"implemented": true,
"featureIds": [
"F049"
]
},
{
"id": "T050",
"description": "Functional: Add Renewals queue page component under billing dashboard components.",
"implemented": true,
"featureIds": [
"F050"
]
},
{
"id": "T051",
"description": "Functional: Load renewal queue rows from server action on Renewals page mount.",
"implemented": true,
"featureIds": [
"F051"
]
},
{
"id": "T052",
"description": "Functional: Render default 90-day horizon rows in Renewals queue.",
"implemented": true,
"featureIds": [
"F052"
]
},
{
"id": "T053",
"description": "Functional: Render bucket quick filters for 0-30, 31-60, and 61-90 days.",
"implemented": true,
"featureIds": [
"F053"
]
},
{
"id": "T054",
"description": "Functional: Render owner filter for assigned user in Renewals queue.",
"implemented": true,
"featureIds": [
"F054"
]
},
{
"id": "T055",
"description": "Functional: Render status filter for pending/renewing/non_renewing/snoozed/completed.",
"implemented": true,
"featureIds": [
"F055"
]
},
{
"id": "T056",
"description": "Functional: Render renewal mode filter for none/manual/auto.",
"implemented": true,
"featureIds": [
"F056"
]
},
{
"id": "T057",
"description": "Functional: Render contract type filter for fixed-term versus evergreen entries.",
"implemented": true,
"featureIds": [
"F057"
]
},
{
"id": "T058",
"description": "Functional: Sort queue by decision_due_date ascending by default.",
"implemented": true,
"featureIds": [
"F058"
]
},
{
"id": "T059",
"description": "Functional: Show days-remaining visual state for due-soon and overdue entries.",
"implemented": true,
"featureIds": [
"F059"
]
},
{
"id": "T060",
"description": "Functional: Add Upcoming Renewals summary widget to ClientContractsTab.",
"implemented": true,
"featureIds": [
"F060"
]
},
{
"id": "T061",
"description": "Functional: Show 90-day bucket counts in ClientContractsTab upcoming renewals widget.",
"implemented": true,
"featureIds": [
"F061"
]
},
{
"id": "T062",
"description": "Functional: Navigate from upcoming renewals widget to Renewals tab preserving filter context.",
"implemented": true,
"featureIds": [
"F062"
]
},
{
"id": "T063",
"description": "Functional: Refresh widget counts after queue action mutations complete.",
"implemented": true,
"featureIds": [
"F063"
]
},
{
"id": "T064",
"description": "Functional: Define queue status enum values pending/renewing/non_renewing/snoozed/completed in renewal work-item model.",
"implemented": true,
"featureIds": [
"F064"
]
},
{
"id": "T065",
"description": "Functional: Implement mark-renewing action that transitions pending entries to renewing.",
"implemented": true,
"featureIds": [
"F065"
]
},
{
"id": "T066",
"description": "Functional: Implement mark-non-renewing action that transitions pending entries to non_renewing.",
"implemented": true,
"featureIds": [
"F066"
]
},
{
"id": "T067",
"description": "Functional: Implement create-renewal-draft action for eligible queue entries.",
"implemented": true,
"featureIds": [
"F067"
]
},
{
"id": "T068",
"description": "Functional: Implement snooze action that sets status to snoozed with snoozed_until date.",
"implemented": true,
"featureIds": [
"F068"
]
},
{
"id": "T069",
"description": "Functional: Implement assign-owner action to set assigned_to on renewal work item.",
"implemented": true,
"featureIds": [
"F069"
]
},
{
"id": "T070",
"description": "Functional: Implement unsnooze transition back to pending when snooze period elapses.",
"implemented": true,
"featureIds": [
"F070"
]
},
{
"id": "T071",
"description": "Functional: Persist action actor user id on each queue mutation.",
"implemented": true,
"featureIds": [
"F071"
]
},
{
"id": "T072",
"description": "Functional: Persist action timestamp on each queue mutation.",
"implemented": true,
"featureIds": [
"F072"
]
},
{
"id": "T073",
"description": "Functional: Persist action reason/note text on queue mutation when provided.",
"implemented": true,
"featureIds": [
"F073"
]
},
{
"id": "T074",
"description": "Functional: Prevent invalid transition from completed back to pending without explicit reopen action.",
"implemented": true,
"featureIds": [
"F074"
]
},
{
"id": "T075",
"description": "Functional: Prevent invalid transition from non_renewing to renewing without explicit override action.",
"implemented": true,
"featureIds": [
"F075"
]
},
{
"id": "T076",
"description": "Functional: Enforce snooze date must be in the future on action validation.",
"implemented": true,
"featureIds": [
"F076"
]
},
{
"id": "T077",
"description": "Functional: Expose queue row action availability based on current status.",
"implemented": true,
"featureIds": [
"F077"
]
},
{
"id": "T078",
"description": "Functional: Show optimistic UI state while queue actions are in-flight.",
"implemented": true,
"featureIds": [
"F078"
]
},
{
"id": "T079",
"description": "Functional: Refresh affected queue row state after successful action response.",
"implemented": true,
"featureIds": [
"F079"
]
},
{
"id": "T080",
"description": "Functional: Include linked draft contract id in queue row once renewal draft is created.",
"implemented": true,
"featureIds": [
"F080"
]
},
{
"id": "T081",
"description": "Functional: Include linked ticket id in queue row once due-date ticket is created.",
"implemented": true,
"featureIds": [
"F081"
]
},
{
"id": "T082",
"description": "Functional: Mark work item completed when renewed contract activation is confirmed.",
"implemented": true,
"featureIds": [
"F082"
]
},
{
"id": "T083",
"description": "Functional: Mark work item completed when non-renewal finalization is confirmed.",
"implemented": true,
"featureIds": [
"F083"
]
},
{
"id": "T084",
"description": "Functional: Create scheduled renewal processor that scans due decision windows for active contracts.",
"implemented": true,
"featureIds": [
"F084"
]
},
{
"id": "T085",
"description": "Functional: Upsert renewal work items during scheduled processing for newly eligible cycles.",
"implemented": true,
"featureIds": [
"F085"
]
},
{
"id": "T086",
"description": "Functional: Respect tenant default due-date action policy during scheduled processing.",
"implemented": true,
"featureIds": [
"F086"
]
},
{
"id": "T087",
"description": "Functional: Respect contract-level override due-date action policy during scheduled processing.",
"implemented": true,
"featureIds": [
"F087"
]
},
{
"id": "T088",
"description": "Functional: Create internal ticket at decision due date when effective policy is create_ticket.",
"implemented": true,
"featureIds": [
"F088"
]
},
{
"id": "T089",
"description": "Functional: Call workflow runtime tickets.create action for renewal ticket creation path.",
"implemented": true,
"featureIds": [
"F089"
]
},
{
"id": "T090",
"description": "Functional: Populate renewal ticket title with client and contract context.",
"implemented": true,
"featureIds": [
"F090"
]
},
{
"id": "T091",
"description": "Functional: Populate renewal ticket description with due date and renewal settings context.",
"implemented": true,
"featureIds": [
"F091"
]
},
{
"id": "T092",
"description": "Functional: Populate renewal ticket routing fields from effective renewal ticket defaults.",
"implemented": true,
"featureIds": [
"F092"
]
},
{
"id": "T093",
"description": "Functional: Persist created ticket id on renewal work item after successful ticket creation.",
"implemented": true,
"featureIds": [
"F093"
]
},
{
"id": "T094",
"description": "Functional: Use idempotency key per tenant/client_contract_id/cycle key for ticket creation.",
"implemented": true,
"featureIds": [
"F094"
]
},
{
"id": "T095",
"description": "Functional: Skip duplicate ticket creation when idempotent renewal cycle already has linked ticket.",
"implemented": true,
"featureIds": [
"F095"
]
},
{
"id": "T096",
"description": "Functional: Record automation_error on work item when ticket creation fails.",
"implemented": true,
"featureIds": [
"F096"
]
},
{
"id": "T097",
"description": "Functional: Allow manual retry action to re-attempt ticket creation for failed work items.",
"implemented": true,
"featureIds": [
"F097"
]
},
{
"id": "T098",
"description": "Functional: Ensure due-date automation supports queue-only policy without creating tickets.",
"implemented": true,
"featureIds": [
"F098"
]
},
{
"id": "T099",
"description": "Functional: Publish/emit renewal-upcoming domain event payloads compatible with queue creation semantics.",
"implemented": true,
"featureIds": [
"F099"
]
},
{
"id": "T100",
"description": "Functional: Generate renewal queue entries for evergreen contracts based on annual review cycle.",
"implemented": true,
"featureIds": [
"F100"
]
},
{
"id": "T101",
"description": "Functional: Display evergreen contract type badge in queue rows.",
"implemented": true,
"featureIds": [
"F101"
]
},
{
"id": "T102",
"description": "Functional: Show evergreen cycle anchor date in queue row details.",
"implemented": true,
"featureIds": [
"F102"
]
},
{
"id": "T103",
"description": "Functional: Support mark-renewing action for evergreen queue entries.",
"implemented": true,
"featureIds": [
"F103"
]
},
{
"id": "T104",
"description": "Functional: Support mark-non-renewing action for evergreen queue entries.",
"implemented": true,
"featureIds": [
"F104"
]
},
{
"id": "T105",
"description": "Functional: Support create-renewal-draft action for evergreen queue entries.",
"implemented": true,
"featureIds": [
"F105"
]
},
{
"id": "T106",
"description": "Functional: Roll evergreen cycle forward to next annual window after completion.",
"implemented": true,
"featureIds": [
"F106"
]
},
{
"id": "T107",
"description": "Functional: Prevent duplicate evergreen cycle entries for the same annual period.",
"implemented": true,
"featureIds": [
"F107"
]
},
{
"id": "T108",
"description": "Functional: Respect evergreen-specific notice period overrides on decision date computation.",
"implemented": true,
"featureIds": [
"F108"
]
},
{
"id": "T109",
"description": "Functional: Include evergreen entries in upcoming renewals widget counts.",
"implemented": true,
"featureIds": [
"F109"
]
},
{
"id": "T110",
"description": "Functional: Extend contract expiration report action to expose decision_due_date alongside end_date where available.",
"implemented": true,
"featureIds": [
"F110"
]
},
{
"id": "T111",
"description": "Functional: Include renewal mode in expiration report row payload.",
"implemented": true,
"featureIds": [
"F111"
]
},
{
"id": "T112",
"description": "Functional: Include queue status in expiration report row payload when work item exists.",
"implemented": true,
"featureIds": [
"F112"
]
},
{
"id": "T113",
"description": "Functional: Keep existing expiration report rows for fixed-term contracts without renewal config.",
"implemented": true,
"featureIds": [
"F113"
]
},
{
"id": "T114",
"description": "Functional: Keep existing expiration report sort compatibility for existing report consumers.",
"implemented": true,
"featureIds": [
"F114"
]
},
{
"id": "T115",
"description": "Functional: Expose at-risk count based on decision_due_date windows for dashboard usage.",
"implemented": true,
"featureIds": [
"F115"
]
},
{
"id": "T116",
"description": "Functional: Align contract reports tab expiration copy to reference renewal decisions as well as expiration.",
"implemented": true,
"featureIds": [
"F116"
]
},
{
"id": "T117",
"description": "Functional: Ensure legacy auto_renew display derives from new renewal mode values.",
"implemented": true,
"featureIds": [
"F117"
]
},
{
"id": "T118",
"description": "Functional: Register renewal scheduled processing job in pg-boss on-prem scheduling path.",
"implemented": true,
"featureIds": [
"F118"
]
},
{
"id": "T119",
"description": "Functional: Register renewal scheduled processing workflow in Temporal hosted/EE scheduling path.",
"implemented": true,
"featureIds": [
"F119"
]
},
{
"id": "T120",
"description": "Functional: Use shared renewal processing core logic callable from both pg-boss and Temporal adapters.",
"implemented": true,
"featureIds": [
"F120"
]
},
{
"id": "T121",
"description": "Functional: Keep effective behavior parity for queue creation between pg-boss and Temporal runners.",
"implemented": true,
"featureIds": [
"F121"
]
},
{
"id": "T122",
"description": "Functional: Keep effective behavior parity for ticket creation idempotency between pg-boss and Temporal runners.",
"implemented": true,
"featureIds": [
"F122"
]
},
{
"id": "T123",
"description": "Functional: Honor existing JobRunnerFactory runtime selection without forcing edition-specific code forks in business logic.",
"implemented": true,
"featureIds": [
"F123"
]
},
{
"id": "T124",
"description": "Functional: Fallback gracefully to supported runner path when temporal bootstrap is unavailable.",
"implemented": true,
"featureIds": [
"F124"
]
},
{
"id": "T125",
"description": "Functional: Preserve tenant-scoped execution semantics in both runtime paths.",
"implemented": true,
"featureIds": [
"F125"
]
},
{
"id": "T126",
"description": "Functional: Enforce billing read permission on renewals queue list endpoints.",
"implemented": true,
"featureIds": [
"F126"
]
},
{
"id": "T127",
"description": "Functional: Enforce billing update permission on queue mutation endpoints.",
"implemented": true,
"featureIds": [
"F127"
]
},
{
"id": "T128",
"description": "Functional: Enforce billing settings update permission on renewal defaults update endpoints.",
"implemented": true,
"featureIds": [
"F128"
]
},
{
"id": "T129",
"description": "Functional: Apply tenant filter to all renewal work-item reads by default.",
"implemented": true,
"featureIds": [
"F129"
]
},
{
"id": "T130",
"description": "Functional: Apply tenant filter to all renewal work-item writes by default.",
"implemented": true,
"featureIds": [
"F130"
]
},
{
"id": "T131",
"description": "Functional: Audit renewal state transitions with actor id and transition metadata.",
"implemented": true,
"featureIds": [
"F131"
]
},
{
"id": "T132",
"description": "Functional: Audit ticket automation linkage with actor type system and timestamp metadata.",
"implemented": true,
"featureIds": [
"F132"
]
},
{
"id": "T133",
"description": "Functional: Audit renewal draft creation linkage with actor id and timestamp metadata.",
"implemented": true,
"featureIds": [
"F133"
]
},
{
"id": "T134",
"description": "Functional: Reject cross-tenant identifiers during queue mutation validation.",
"implemented": true,
"featureIds": [
"F134"
]
},
{
"id": "T135",
"description": "Functional: Sanitize user-provided action notes before persistence and render.",
"implemented": true,
"featureIds": [
"F135"
]
},
{
"id": "T136",
"description": "Linkage correctness: 'Hydrate renewal fields when resuming draft contracts in the wizard.' stores created draft contract id on work item",
"implemented": true,
"featureIds": [
"F003"
]
},
{
"id": "T137",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Render Evergreen Review settings card in ContractBasicsStep when end date is absent.'",
"implemented": true,
"featureIds": [
"F006"
]
},
{
"id": "T138",
"description": "Validation negative-path: Validate renewal mode is required when an end date is set.",
"implemented": true,
"featureIds": [
"F011"
]
},
{
"id": "T139",
"description": "Validation negative-path: Validate notice period is a non-negative integer within configured bounds.",
"implemented": true,
"featureIds": [
"F012"
]
},
{
"id": "T140",
"description": "Validation negative-path: Validate renewal term months is positive when explicitly provided.",
"implemented": true,
"featureIds": [
"F013"
]
},
{
"id": "T141",
"description": "Linkage correctness: 'Persist renewal fields when saving draft contracts from wizard.' stores created draft contract id on work item",
"implemented": true,
"featureIds": [
"F018"
]
},
{
"id": "T142",
"description": "Idempotency: repeated execution of 'Add tenant default renewal ticket board field to default billing settings model.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F022"
]
},
{
"id": "T143",
"description": "Idempotency: repeated execution of 'Add tenant default renewal ticket status field to default billing settings model.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F023"
]
},
{
"id": "T144",
"description": "Idempotency: repeated execution of 'Add tenant default renewal ticket priority field to default billing settings model.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F024"
]
},
{
"id": "T145",
"description": "Idempotency: repeated execution of 'Add tenant default renewal ticket assignee field to default billing settings model.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F025"
]
},
{
"id": "T146",
"description": "Validation negative-path: Enforce deterministic fallback precedence when override fields are partially missing.",
"implemented": true,
"featureIds": [
"F031"
]
},
{
"id": "T147",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Compute next evergreen review anchor date from active contract anniversary rules.'",
"implemented": true,
"featureIds": [
"F034"
]
},
{
"id": "T148",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Compute evergreen decision_due_date using anchor date minus notice_period_days.'",
"implemented": true,
"featureIds": [
"F035"
]
},
{
"id": "T149",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Recompute decision_due_date when evergreen anchor basis changes.'",
"implemented": true,
"featureIds": [
"F040"
]
},
{
"id": "T150",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Skip decision_due_date generation when renewal mode is none and no evergreen review is configured.'",
"implemented": true,
"featureIds": [
"F042"
]
},
{
"id": "T151",
"description": "UI behavior: Expose days_until_due as derived queue field for UI sorting and badges. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F046"
]
},
{
"id": "T152",
"description": "UI behavior: Clamp past-due decision calculations into queue visibility without negative date corruption. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F047"
]
},
{
"id": "T153",
"description": "UI behavior: Add Renewals queue page component under billing dashboard components. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F050"
]
},
{
"id": "T154",
"description": "UI behavior: Load renewal queue rows from server action on Renewals page mount. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F051"
]
},
{
"id": "T155",
"description": "UI behavior: Render default 90-day horizon rows in Renewals queue. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F052"
]
},
{
"id": "T156",
"description": "UI behavior: Render bucket quick filters for 0-30, 31-60, and 61-90 days. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F053"
]
},
{
"id": "T157",
"description": "UI behavior: Render owner filter for assigned user in Renewals queue. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F054"
]
},
{
"id": "T158",
"description": "UI behavior: Render status filter for pending/renewing/non_renewing/snoozed/completed. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F055"
]
},
{
"id": "T159",
"description": "Date constraint: snooze action rejects non-future dates for 'Render status filter for pending/renewing/non_renewing/snoozed/completed.'",
"implemented": true,
"featureIds": [
"F055"
]
},
{
"id": "T160",
"description": "UI behavior: Render renewal mode filter for none/manual/auto. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F056"
]
},
{
"id": "T161",
"description": "UI behavior: Render contract type filter for fixed-term versus evergreen entries. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F057"
]
},
{
"id": "T162",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Render contract type filter for fixed-term versus evergreen entries.'",
"implemented": true,
"featureIds": [
"F057"
]
},
{
"id": "T163",
"description": "UI behavior: Sort queue by decision_due_date ascending by default. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F058"
]
},
{
"id": "T164",
"description": "UI behavior: Navigate from upcoming renewals widget to Renewals tab preserving filter context. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F062"
]
},
{
"id": "T165",
"description": "UI behavior: Refresh widget counts after queue action mutations complete. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F063"
]
},
{
"id": "T166",
"description": "UI behavior: Define queue status enum values pending/renewing/non_renewing/snoozed/completed in renewal work-item model. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F064"
]
},
{
"id": "T167",
"description": "Date constraint: snooze action rejects non-future dates for 'Define queue status enum values pending/renewing/non_renewing/snoozed/completed in renewal work-item model.'",
"implemented": true,
"featureIds": [
"F064"
]
},
{
"id": "T168",
"description": "UI behavior: Implement create-renewal-draft action for eligible queue entries. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F067"
]
},
{
"id": "T169",
"description": "Linkage correctness: 'Implement create-renewal-draft action for eligible queue entries.' stores created draft contract id on work item",
"implemented": true,
"featureIds": [
"F067"
]
},
{
"id": "T170",
"description": "Date constraint: snooze action rejects non-future dates for 'Implement snooze action that sets status to snoozed with snoozed_until date.'",
"implemented": true,
"featureIds": [
"F068"
]
},
{
"id": "T171",
"description": "Date constraint: snooze action rejects non-future dates for 'Implement unsnooze transition back to pending when snooze period elapses.'",
"implemented": true,
"featureIds": [
"F070"
]
},
{
"id": "T172",
"description": "UI behavior: Persist action actor user id on each queue mutation. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F071"
]
},
{
"id": "T173",
"description": "UI behavior: Persist action timestamp on each queue mutation. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F072"
]
},
{
"id": "T174",
"description": "UI behavior: Persist action reason/note text on queue mutation when provided. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F073"
]
},
{
"id": "T175",
"description": "Validation negative-path: Enforce snooze date must be in the future on action validation.",
"implemented": true,
"featureIds": [
"F076"
]
},
{
"id": "T176",
"description": "Date constraint: snooze action rejects non-future dates for 'Enforce snooze date must be in the future on action validation.'",
"implemented": true,
"featureIds": [
"F076"
]
},
{
"id": "T177",
"description": "UI behavior: Expose queue row action availability based on current status. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F077"
]
},
{
"id": "T178",
"description": "UI behavior: Show optimistic UI state while queue actions are in-flight. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F078"
]
},
{
"id": "T179",
"description": "UI behavior: Refresh affected queue row state after successful action response. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F079"
]
},
{
"id": "T180",
"description": "UI behavior: Include linked draft contract id in queue row once renewal draft is created. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F080"
]
},
{
"id": "T181",
"description": "Linkage correctness: 'Include linked draft contract id in queue row once renewal draft is created.' stores created draft contract id on work item",
"implemented": true,
"featureIds": [
"F080"
]
},
{
"id": "T182",
"description": "UI behavior: Include linked ticket id in queue row once due-date ticket is created. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F081"
]
},
{
"id": "T183",
"description": "Idempotency: repeated execution of 'Include linked ticket id in queue row once due-date ticket is created.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F081"
]
},
{
"id": "T184",
"description": "Idempotency: repeated execution of 'Create internal ticket at decision due date when effective policy is create_ticket.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F088"
]
},
{
"id": "T185",
"description": "Idempotency: repeated execution of 'Call workflow runtime tickets.create action for renewal ticket creation path.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F089"
]
},
{
"id": "T186",
"description": "Parity: 'Call workflow runtime tickets.create action for renewal ticket creation path.' behaves equivalently under pg-boss and Temporal paths",
"implemented": true,
"featureIds": [
"F089"
]
},
{
"id": "T187",
"description": "Idempotency: repeated execution of 'Populate renewal ticket title with client and contract context.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F090"
]
},
{
"id": "T188",
"description": "Idempotency: repeated execution of 'Populate renewal ticket description with due date and renewal settings context.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F091"
]
},
{
"id": "T189",
"description": "Idempotency: repeated execution of 'Populate renewal ticket routing fields from effective renewal ticket defaults.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F092"
]
},
{
"id": "T190",
"description": "Idempotency: repeated execution of 'Persist created ticket id on renewal work item after successful ticket creation.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F093"
]
},
{
"id": "T191",
"description": "Idempotency: repeated execution of 'Use idempotency key per tenant/client_contract_id/cycle key for ticket creation.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F094"
]
},
{
"id": "T192",
"description": "Idempotency: repeated execution of 'Skip duplicate ticket creation when idempotent renewal cycle already has linked ticket.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F095"
]
},
{
"id": "T193",
"description": "Idempotency: repeated execution of 'Record automation_error on work item when ticket creation fails.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F096"
]
},
{
"id": "T194",
"description": "Idempotency: repeated execution of 'Allow manual retry action to re-attempt ticket creation for failed work items.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F097"
]
},
{
"id": "T195",
"description": "UI behavior: Ensure due-date automation supports queue-only policy without creating tickets. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F098"
]
},
{
"id": "T196",
"description": "Idempotency: repeated execution of 'Ensure due-date automation supports queue-only policy without creating tickets.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F098"
]
},
{
"id": "T197",
"description": "UI behavior: Publish/emit renewal-upcoming domain event payloads compatible with queue creation semantics. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F099"
]
},
{
"id": "T198",
"description": "UI behavior: Generate renewal queue entries for evergreen contracts based on annual review cycle. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F100"
]
},
{
"id": "T199",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Generate renewal queue entries for evergreen contracts based on annual review cycle.'",
"implemented": true,
"featureIds": [
"F100"
]
},
{
"id": "T200",
"description": "UI behavior: Display evergreen contract type badge in queue rows. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F101"
]
},
{
"id": "T201",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Display evergreen contract type badge in queue rows.'",
"implemented": true,
"featureIds": [
"F101"
]
},
{
"id": "T202",
"description": "UI behavior: Show evergreen cycle anchor date in queue row details. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F102"
]
},
{
"id": "T203",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Show evergreen cycle anchor date in queue row details.'",
"implemented": true,
"featureIds": [
"F102"
]
},
{
"id": "T204",
"description": "UI behavior: Support mark-renewing action for evergreen queue entries. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F103"
]
},
{
"id": "T205",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Support mark-renewing action for evergreen queue entries.'",
"implemented": true,
"featureIds": [
"F103"
]
},
{
"id": "T206",
"description": "UI behavior: Support mark-non-renewing action for evergreen queue entries. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F104"
]
},
{
"id": "T207",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Support mark-non-renewing action for evergreen queue entries.'",
"implemented": true,
"featureIds": [
"F104"
]
},
{
"id": "T208",
"description": "UI behavior: Support create-renewal-draft action for evergreen queue entries. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F105"
]
},
{
"id": "T209",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Support create-renewal-draft action for evergreen queue entries.'",
"implemented": true,
"featureIds": [
"F105"
]
},
{
"id": "T210",
"description": "Linkage correctness: 'Support create-renewal-draft action for evergreen queue entries.' stores created draft contract id on work item",
"implemented": true,
"featureIds": [
"F105"
]
},
{
"id": "T211",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Roll evergreen cycle forward to next annual window after completion.'",
"implemented": true,
"featureIds": [
"F106"
]
},
{
"id": "T212",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Prevent duplicate evergreen cycle entries for the same annual period.'",
"implemented": true,
"featureIds": [
"F107"
]
},
{
"id": "T213",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Respect evergreen-specific notice period overrides on decision date computation.'",
"implemented": true,
"featureIds": [
"F108"
]
},
{
"id": "T214",
"description": "Cycle rollover: evergreen behavior remains correct across year boundary for 'Include evergreen entries in upcoming renewals widget counts.'",
"implemented": true,
"featureIds": [
"F109"
]
},
{
"id": "T215",
"description": "UI behavior: Include queue status in expiration report row payload when work item exists. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F112"
]
},
{
"id": "T216",
"description": "UI behavior: Keep existing expiration report sort compatibility for existing report consumers. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F114"
]
},
{
"id": "T217",
"description": "Parity: 'Register renewal scheduled processing job in pg-boss on-prem scheduling path.' behaves equivalently under pg-boss and Temporal paths",
"implemented": true,
"featureIds": [
"F118"
]
},
{
"id": "T218",
"description": "Parity: 'Register renewal scheduled processing workflow in Temporal hosted/EE scheduling path.' behaves equivalently under pg-boss and Temporal paths",
"implemented": true,
"featureIds": [
"F119"
]
},
{
"id": "T219",
"description": "Parity: 'Use shared renewal processing core logic callable from both pg-boss and Temporal adapters.' behaves equivalently under pg-boss and Temporal paths",
"implemented": true,
"featureIds": [
"F120"
]
},
{
"id": "T220",
"description": "UI behavior: Keep effective behavior parity for queue creation between pg-boss and Temporal runners. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F121"
]
},
{
"id": "T221",
"description": "Parity: 'Keep effective behavior parity for queue creation between pg-boss and Temporal runners.' behaves equivalently under pg-boss and Temporal paths",
"implemented": true,
"featureIds": [
"F121"
]
},
{
"id": "T222",
"description": "Idempotency: repeated execution of 'Keep effective behavior parity for ticket creation idempotency between pg-boss and Temporal runners.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F122"
]
},
{
"id": "T223",
"description": "Parity: 'Keep effective behavior parity for ticket creation idempotency between pg-boss and Temporal runners.' behaves equivalently under pg-boss and Temporal paths",
"implemented": true,
"featureIds": [
"F122"
]
},
{
"id": "T224",
"description": "Parity: 'Honor existing JobRunnerFactory runtime selection without forcing edition-specific code forks in business logic.' behaves equivalently under pg-boss and Temporal paths",
"implemented": true,
"featureIds": [
"F123"
]
},
{
"id": "T225",
"description": "Parity: 'Fallback gracefully to supported runner path when temporal bootstrap is unavailable.' behaves equivalently under pg-boss and Temporal paths",
"implemented": true,
"featureIds": [
"F124"
]
},
{
"id": "T226",
"description": "Parity: 'Preserve tenant-scoped execution semantics in both runtime paths.' behaves equivalently under pg-boss and Temporal paths",
"implemented": true,
"featureIds": [
"F125"
]
},
{
"id": "T227",
"description": "Validation negative-path: Enforce billing read permission on renewals queue list endpoints.",
"implemented": true,
"featureIds": [
"F126"
]
},
{
"id": "T228",
"description": "UI behavior: Enforce billing read permission on renewals queue list endpoints. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F126"
]
},
{
"id": "T229",
"description": "Validation negative-path: Enforce billing update permission on queue mutation endpoints.",
"implemented": true,
"featureIds": [
"F127"
]
},
{
"id": "T230",
"description": "UI behavior: Enforce billing update permission on queue mutation endpoints. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F127"
]
},
{
"id": "T231",
"description": "Validation negative-path: Enforce billing settings update permission on renewal defaults update endpoints.",
"implemented": true,
"featureIds": [
"F128"
]
},
{
"id": "T232",
"description": "UI behavior: Apply tenant filter to all renewal work-item reads by default. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F129"
]
},
{
"id": "T233",
"description": "UI behavior: Apply tenant filter to all renewal work-item writes by default. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F130"
]
},
{
"id": "T234",
"description": "Idempotency: repeated execution of 'Audit ticket automation linkage with actor type system and timestamp metadata.' does not create duplicate tickets",
"implemented": true,
"featureIds": [
"F132"
]
},
{
"id": "T235",
"description": "Linkage correctness: 'Audit renewal draft creation linkage with actor id and timestamp metadata.' stores created draft contract id on work item",
"implemented": true,
"featureIds": [
"F133"
]
},
{
"id": "T236",
"description": "Validation negative-path: Reject cross-tenant identifiers during queue mutation validation.",
"implemented": true,
"featureIds": [
"F134"
]
},
{
"id": "T237",
"description": "UI behavior: Reject cross-tenant identifiers during queue mutation validation. persists after refresh/navigation",
"implemented": true,
"featureIds": [
"F134"
]
},
{
"id": "T238",
"description": "E2E fixed-term renewal: create contract with end date + manual renewal, verify queue row appears in correct 90-day bucket and can be marked renewing.",
"implemented": true,
"featureIds": [
"F005",
"F033",
"F052",
"F065"
]
},
{
"id": "T239",
"description": "E2E evergreen renewal: create evergreen contract with annual review settings, verify queue entry generation and annual cycle rollover after completion.",
"implemented": true,
"featureIds": [
"F006",
"F100",
"F106"
]
},
{
"id": "T240",
"description": "E2E due-date automation ticketing: due entry creates exactly one ticket and links ticket id on renewal work item.",
"implemented": true,
"featureIds": [
"F088",
"F093",
"F094"
]
},
{
"id": "T241",
"description": "E2E queue action flow: mark renewing auto-creates draft, open editor, then complete work item after activation.",
"implemented": true,
"featureIds": [
"F065",
"F067",
"F082"
]
},
{
"id": "T242",
"description": "E2E permissions: billing-read can view queue but cannot mutate, billing-update can execute queue actions.",
"implemented": true,
"featureIds": [
"F126",
"F127"
]
},
{
"id": "T243",
"description": "E2E defaults and overrides: tenant default create-ticket policy applies, then per-contract override to queue-only suppresses ticket creation.",
"implemented": true,
"featureIds": [
"F021",
"F030",
"F098"
]
},
{
"id": "T244",
"description": "Integration: latest migrations create required renewal queue status/audit columns on client_contracts.",
"implemented": true,
"featureIds": [
"F136"
]
},
{
"id": "T245",
"description": "Integration: latest migrations create required renewal-cycle columns on client_contracts.",
"implemented": true,
"featureIds": [
"F137"
]
},
{
"id": "T246",
"description": "Integration: latest migrations create required renewal automation/policy columns on client_contracts.",
"implemented": true,
"featureIds": [
"F138"
]
},
{
"id": "T247",
"description": "Integration: latest migrations create required renewal default/policy columns on default_billing_settings.",
"implemented": true,
"featureIds": [
"F140"
]
},
{
"id": "T248",
"description": "Integration: migration backfill initializes deterministic renewal state for existing active client_contract rows.",
"implemented": true,
"featureIds": [
"F141"
]
},
{
"id": "T249",
"description": "Integration: listRenewalQueueRows executes successfully against migrated schema and no longer throws missing-column SQL errors.",
"implemented": true,
"featureIds": [
"F136",
"F137",
"F139",
"F143"
]
},
{
"id": "T250",
"description": "Integration: snoozeRenewalQueueItem updates status/snoozed_until and persists last_action audit fields for migrated rows.",
"implemented": true,
"featureIds": [
"F136",
"F139"
]
},
{
"id": "T251",
"description": "Integration: markRenewalQueueItemRenewing transitions pending->renewing and persists actor/timestamp metadata.",
"implemented": true,
"featureIds": [
"F136"
]
},
{
"id": "T252",
"description": "Integration: processRenewalQueueHandler computes and persists decision_due_date/cycle fields for eligible contracts.",
"implemented": true,
"featureIds": [
"F137",
"F139",
"F141"
]
},
{
"id": "T253",
"description": "Integration: processRenewalQueueHandler creates/links at most one renewal ticket per tenant+client_contract+cycle key when policy=create_ticket.",
"implemented": true,
"featureIds": [
"F138",
"F140",
"F142"
]
},
{
"id": "T254",
"description": "Integration (guard case): renewal schema readiness guard rejects access with actionable error when required columns are intentionally absent.",
"implemented": true,
"featureIds": [
"F143"
]
},
{
"id": "T255",
"description": "Integration (happy path): renewal schema readiness guard passes after migrations and renewals queue endpoints remain operational.",
"implemented": true,
"featureIds": [
"F143",
"F144"
]
}
]