[ { "id": "T001", "description": "Static validation: recurring due-work reader contains no compatibility merge with `client_billing_cycles` rows.", "implemented": true, "featureIds": ["F004", "F006"] }, { "id": "T002", "description": "Integration: ready recurring work comes only from `recurring_service_periods` for a client-cadence recurring line.", "implemented": true, "featureIds": ["F006", "F007"] }, { "id": "T003", "description": "Integration: ready recurring work comes only from `recurring_service_periods` for a contract-cadence recurring line.", "implemented": true, "featureIds": ["F006"] }, { "id": "T004", "description": "Failure case: missing recurring service-period materialization raises an explicit repairable error instead of synthesizing a compatibility row.", "implemented": true, "featureIds": ["F005", "F066", "F067"] }, { "id": "T005", "description": "Static validation: recurring due-work code no longer catches missing-table/missing-column errors as an accepted recurring fallback path.", "implemented": true, "featureIds": ["F003", "F067"] }, { "id": "T006", "description": "Unit: client-cadence recurring due-work row identity can be built without `billingCycleId`.", "implemented": true, "featureIds": ["F007", "F014", "F015"] }, { "id": "T007", "description": "Unit: recurring execution identity keys are stable and bridge-free for client cadence.", "implemented": true, "featureIds": ["F014", "F015", "F016"] }, { "id": "T008", "description": "Unit: recurring execution identity keys are stable and bridge-free for contract cadence.", "implemented": true, "featureIds": ["F014", "F016"] }, { "id": "T009", "description": "Static validation: shared recurring identity interfaces no longer require `billingCycleId` or `hasBillingCycleBridge`.", "implemented": true, "featureIds": ["F028", "F029", "F073"] }, { "id": "T010", "description": "UI: `AutomaticInvoices` can render and act on a client-cadence recurring row whose bridge metadata is null.", "implemented": true, "featureIds": ["F007", "F060", "F061"] }, { "id": "T011", "description": "UI: `AutomaticInvoices` can render and act on a contract-cadence recurring row without any billing-cycle bridge.", "implemented": true, "featureIds": ["F006", "F060", "F061"] }, { "id": "T012", "description": "UI: recurring preview action sends canonical selector input only and no `billing_cycle_id`.", "implemented": true, "featureIds": ["F021", "F023"] }, { "id": "T013", "description": "UI: recurring generate action sends canonical selector input only and no `billing_cycle_id`.", "implemented": true, "featureIds": ["F022", "F024"] }, { "id": "T014", "description": "Integration: recurring preview endpoint rejects recurring requests that attempt to send `billing_cycle_id` as the recurring selector.", "implemented": true, "featureIds": ["F021", "F025", "F026"] }, { "id": "T015", "description": "Integration: recurring generate endpoint rejects recurring requests that attempt to send `billing_cycle_id` as the recurring selector.", "implemented": true, "featureIds": ["F022", "F025", "F026"] }, { "id": "T016", "description": "Integration: recurring preview succeeds for a client-cadence selector input with no billing-cycle bridge.", "implemented": true, "featureIds": ["F007", "F023"] }, { "id": "T017", "description": "Integration: recurring preview succeeds for a contract-cadence selector input.", "implemented": true, "featureIds": ["F023"] }, { "id": "T018", "description": "Integration: recurring generation succeeds for a client-cadence selector input with no billing-cycle bridge.", "implemented": true, "featureIds": ["F007", "F024", "F013"] }, { "id": "T019", "description": "Integration: recurring generation succeeds for a contract-cadence selector input with no billing-cycle bridge.", "implemented": true, "featureIds": ["F024"] }, { "id": "T020", "description": "Integration: duplicate prevention blocks rerunning the same client-cadence recurring window without consulting `invoices.billing_cycle_id`.", "implemented": true, "featureIds": ["F018", "F019", "F020"] }, { "id": "T021", "description": "Integration: duplicate prevention blocks rerunning the same contract-cadence recurring window without consulting `invoices.billing_cycle_id`.", "implemented": true, "featureIds": ["F018", "F020"] }, { "id": "T022", "description": "Static validation: duplicate-detection queries in recurring invoice generation do not prefer `invoices.billing_cycle_id`.", "implemented": true, "featureIds": ["F018", "F019"] }, { "id": "T023", "description": "Unit: recurring retry/rerun payloads are keyed only by canonical recurring execution identity.", "implemented": true, "featureIds": ["F012", "F020", "F069"] }, { "id": "T024", "description": "Integration: recurring run target selection uses only canonical due-work rows and does not call `getAvailableBillingPeriods(...)`.", "implemented": true, "featureIds": ["F010", "F011"] }, { "id": "T025", "description": "Unit: recurring job payload schema for invoice generation does not require `billingCycleId`.", "implemented": true, "featureIds": ["F012", "F069", "F070"] }, { "id": "T026", "description": "Integration: recurring invoice job handler executes a client-cadence recurring row using canonical selector identity only.", "implemented": true, "featureIds": ["F012", "F013"] }, { "id": "T027", "description": "Integration: recurring invoice job handler executes a contract-cadence recurring row using canonical selector identity only.", "implemented": true, "featureIds": ["F012", "F013"] }, { "id": "T028", "description": "Static validation: recurring run action names/contracts no longer accept raw `billingCycleIds` for recurring execution.", "implemented": true, "featureIds": ["F010", "F011"] }, { "id": "T029", "description": "Integration: recurring invoice charge/detail linkage succeeds for a client-cadence invoice with null `billing_cycle_id`.", "implemented": true, "featureIds": ["F042", "F043", "F045"] }, { "id": "T030", "description": "Integration: recurring invoice charge/detail linkage succeeds for a contract-cadence invoice.", "implemented": true, "featureIds": ["F042", "F045"] }, { "id": "T031", "description": "Static validation: invoice-linkage code no longer widens or narrows matching rules based on `invoice.billing_cycle_id`.", "implemented": true, "featureIds": ["F043"] }, { "id": "T032", "description": "Static validation: invoice-linkage code no longer contains mixed-schema fallback guards for recurring service-period relations.", "implemented": true, "featureIds": ["F003", "F044"] }, { "id": "T033", "description": "Integration: recurring reverse/delete repairs recurring service-period linkage for a client-cadence invoice without mutating a billing-cycle primary object.", "implemented": true, "featureIds": ["F039", "F040", "F041"] }, { "id": "T034", "description": "Integration: recurring reverse/delete repairs recurring service-period linkage for a contract-cadence invoice.", "implemented": true, "featureIds": ["F039", "F041"] }, { "id": "T035", "description": "UI: recurring history row actions remain available for a recurring invoice whose bridge metadata is null.", "implemented": true, "featureIds": ["F037", "F039", "F060"] }, { "id": "T036", "description": "UI: recurring history copy and labels refer to service periods/execution windows instead of billing cycles.", "implemented": true, "featureIds": ["F038", "F061"] }, { "id": "T037", "description": "Static validation: billing-cycle-specific recurring history action names are removed or renamed.", "implemented": true, "featureIds": ["F038"] }, { "id": "T038", "description": "Integration: invoice list/read classification derives recurring kind and cadence from canonical recurring summary data, not `invoices.billing_cycle_id`.", "implemented": true, "featureIds": ["F033", "F034"] }, { "id": "T039", "description": "Integration: recurring invoice detail response includes canonical recurring periods even when billing-cycle metadata is absent.", "implemented": true, "featureIds": ["F031", "F035"] }, { "id": "T040", "description": "Static validation: recurring invoice DTOs no longer require bridge-only recurring fields.", "implemented": true, "featureIds": ["F031", "F032"] }, { "id": "T041", "description": "Static validation: recurring DTOs treat `billing_cycle_id` only as optional historical/client-context metadata.", "implemented": true, "featureIds": ["F032", "F074"] }, { "id": "T042", "description": "Integration: recurring invoice read path does not infer client cadence simply because `billing_cycle_id` is present.", "implemented": true, "featureIds": ["F033", "F034"] }, { "id": "T043", "description": "Integration: recurring invoice read path still surfaces passive billing-cycle metadata when historical invoices have it.", "implemented": true, "featureIds": ["F032", "F074"] }, { "id": "T044", "description": "Static validation: recurring preview/generation error contracts no longer expose `billingCycleId` as the primary recurring diagnostic key.", "implemented": true, "featureIds": ["F030"] }, { "id": "T045", "description": "Integration: recurring preview/generation errors map back to canonical execution-window identity only.", "implemented": true, "featureIds": ["F030", "F069"] }, { "id": "T046", "description": "Integration: invoice modification/finalization does not classify a bridge-less recurring invoice as a prepayment.", "implemented": true, "featureIds": ["F046", "F047"] }, { "id": "T047", "description": "Integration: true prepayment invoice behavior still works after explicit invoice-kind classification is introduced.", "implemented": true, "featureIds": ["F046", "F048"] }, { "id": "T048", "description": "Static validation: recurring/prepayment classification logic no longer keys off null/non-null `billing_cycle_id`.", "implemented": true, "featureIds": ["F046", "F047"] }, { "id": "T049", "description": "Integration: billing engine executes a client-cadence recurring invoice without loading or creating `client_billing_cycles` as recurring truth.", "implemented": true, "featureIds": ["F049", "F050", "F051"] }, { "id": "T050", "description": "Integration: billing engine executes a contract-cadence recurring invoice without consulting `client_billing_cycles`.", "implemented": true, "featureIds": ["F049", "F051"] }, { "id": "T051", "description": "Static validation: billing engine no longer auto-creates or loads cycle rows to execute recurring work.", "implemented": true, "featureIds": ["F049", "F051"] }, { "id": "T089", "description": "Integration: selector-input recurring preview/generate rejects execution windows that do not match persisted recurring service periods.", "implemented": true, "featureIds": ["F052"] }, { "id": "T052", "description": "Integration: client billing schedule change regenerates future recurring service periods beyond billed boundaries rather than defining future recurring work by mutating future cycle rows.", "implemented": true, "featureIds": ["F053"] }, { "id": "T053", "description": "Static validation: client billing schedule management code remains available for legitimate client cadence administration.", "implemented": true, "featureIds": ["F054"] }, { "id": "T054", "description": "Integration: bucket recurring period resolution follows canonical recurring service periods for client cadence.", "implemented": true, "featureIds": ["F055"] }, { "id": "T055", "description": "Integration: bucket recurring period resolution follows canonical recurring service periods for contract cadence.", "implemented": true, "featureIds": ["F055"] }, { "id": "T056", "description": "Integration: hourly recurring billing still bills content inside canonical service windows after bridge removal.", "implemented": true, "featureIds": ["F056", "F077"] }, { "id": "T057", "description": "Integration: usage recurring billing still bills content inside canonical service windows after bridge removal.", "implemented": true, "featureIds": ["F056", "F077"] }, { "id": "T058", "description": "Integration: accounting export uses canonical recurring detail periods for a client-cadence recurring invoice.", "implemented": true, "featureIds": ["F057", "F058"] }, { "id": "T059", "description": "Integration: accounting export uses canonical recurring detail periods for a contract-cadence recurring invoice.", "implemented": true, "featureIds": ["F057", "F058"] }, { "id": "T060", "description": "Integration: invoice lacking canonical recurring detail is exported as non-recurring/periodless rather than using recurring header fallback provenance.", "implemented": true, "featureIds": ["F057", "F059", "F075"] }, { "id": "T061", "description": "Static validation: recurring accounting export no longer emits `invoice_header_fallback` or equivalent mixed canonical/fallback recurring provenance for live recurring paths.", "implemented": true, "featureIds": ["F057", "F058"] }, { "id": "T062", "description": "UI: authoring still defaults `cadence_owner` explicitly if desired, but stored/runtime recurring behavior does not rely on unresolved client fallback semantics.", "implemented": true, "featureIds": ["F062", "F063"] }, { "id": "T063", "description": "Static validation: rollout-era recurring authoring helpers no longer resolve unspecified cadence by implicit runtime fallback.", "implemented": true, "featureIds": ["F062", "F063"] }, { "id": "T064", "description": "Static validation: recurring authoring/storage helpers no longer contain old-table fallback logic in normal read/write paths.", "implemented": true, "featureIds": ["F064"] }, { "id": "T065", "description": "UI: recurring service-period management surface remains available for troubleshooting and repair after compatibility due-work rows are removed.", "implemented": true, "featureIds": ["F065", "F066"] }, { "id": "T066", "description": "UI: missing recurring materialization is presented as an explicit repair action instead of a fallback-ready invoice row.", "implemented": true, "featureIds": ["F066"] }, { "id": "T067", "description": "Static validation: recurring diagnostics/events no longer emit bridge-specific recurring payload fields.", "implemented": true, "featureIds": ["F069", "F070"] }, { "id": "T068", "description": "Integration: recurring workflow or job events identify runs entirely by canonical recurring execution identity.", "implemented": true, "featureIds": ["F069"] }, { "id": "T069", "description": "Static validation: recurring invoice queries no longer rely on billing-cycle bridge assumptions when summarizing service periods.", "implemented": true, "featureIds": ["F071"] }, { "id": "T070", "description": "Static validation: only legitimate client billing schedule API schemas still expose billing-cycle-specific request contracts.", "implemented": true, "featureIds": ["F027", "F072"] }, { "id": "T071", "description": "Static validation: shared package/server interfaces clearly separate client billing cycle models from recurring execution models.", "implemented": true, "featureIds": ["F073"] }, { "id": "T072", "description": "Documentation: hard-cutover runbook explains the final recurring model and no longer describes compatibility due-work rows as normal behavior.", "implemented": true, "featureIds": ["F080"] }, { "id": "T073", "description": "Documentation: final recurring architecture notes explain that `client_billing_cycles` remain cadence infrastructure only.", "implemented": true, "featureIds": ["F002", "F080"] }, { "id": "T074", "description": "Design validation: the codebase has an explicit deprecation posture for `invoices.billing_cycle_id` in recurring code.", "implemented": true, "featureIds": ["F074"] }, { "id": "T075", "description": "Integration: historical recurring invoice with incomplete canonical linkage remains readable without reintroducing live recurring bridge logic.", "implemented": true, "featureIds": ["F032", "F075"] }, { "id": "T076", "description": "Regression: recurring client-cadence invoicing remains end-to-end functional after all live bridge assumptions are removed.", "implemented": true, "featureIds": ["F077"] }, { "id": "T077", "description": "Regression: recurring contract-cadence invoicing remains end-to-end functional after all live bridge assumptions are removed.", "implemented": true, "featureIds": ["F078"] }, { "id": "T078", "description": "Regression: recurring history, reverse, and reissue flows remain functional for client cadence after the hard cutover.", "implemented": true, "featureIds": ["F037", "F039", "F077"] }, { "id": "T079", "description": "Regression: recurring history, reverse, and reissue flows remain functional for contract cadence after the hard cutover.", "implemented": true, "featureIds": ["F037", "F039", "F078"] }, { "id": "T080", "description": "Regression: no live recurring path requires `billing_cycle_id` to discover, preview, generate, reverse, or explain recurring work.", "implemented": true, "featureIds": ["F001", "F006", "F021", "F022", "F037"] }, { "id": "T081", "description": "Static validation: legacy recurring tests that only preserve compatibility fallback behavior are removed or rewritten.", "implemented": true, "featureIds": ["F076"] }, { "id": "T082", "description": "DB-backed sanity: a migrated schema with required recurring-service-period structures is treated as mandatory, not optional, by recurring invoice code.", "implemented": true, "featureIds": ["F003", "F067"] }, { "id": "T083", "description": "DB-backed sanity: client billing schedule records can still be managed independently of recurring invoice execution after the hard cutover.", "implemented": true, "featureIds": ["F002", "F054"] }, { "id": "T084", "description": "DB-backed sanity: canonical recurring service-period linkage is sufficient to rebuild recurring invoice history for a bridge-less recurring invoice.", "implemented": true, "featureIds": ["F035", "F037", "F042"] }, { "id": "T085", "description": "DB-backed sanity: deleting a recurring invoice reopens or repairs linked recurring service periods without mutating a billing-cycle object.", "implemented": true, "featureIds": ["F039", "F041"] }, { "id": "T086", "description": "DB-backed sanity: changing a client cadence source rule regenerates future recurring service periods while leaving historical recurring invoices readable.", "implemented": true, "featureIds": ["F053", "F075"] }, { "id": "T087", "description": "DB-backed sanity: a client-cadence recurring invoice can persist with null `billing_cycle_id` and still remain fully operable as recurring work.", "implemented": true, "featureIds": ["F007", "F032", "F077"] }, { "id": "T088", "description": "DB-backed sanity: invoices that still carry `billing_cycle_id` remain readable as historical context without affecting recurring classification.", "implemented": true, "featureIds": ["F032", "F074"] } ]