[ { "id": "F001", "description": "Define the hard-cutover invariant that recurring invoice execution identity is service-period/execution-window based only and never requires `billing_cycle_id`.", "implemented": true }, { "id": "F002", "description": "Document the retained role of `client_billing_cycles` as cadence/source-rule infrastructure and optional historical metadata only.", "implemented": true }, { "id": "F003", "description": "Remove mixed-schema missing-table/missing-column guards from recurring invoice code paths.", "implemented": true }, { "id": "F004", "description": "Remove compatibility due-work synthesis from `client_billing_cycles` for recurring invoice-ready rows.", "implemented": true }, { "id": "F005", "description": "Remove `missing_service_period_materialization` fallback behavior that fabricates recurring compatibility rows instead of surfacing a repairable failure.", "implemented": true }, { "id": "F006", "description": "Make the recurring due-work reader source all ready recurring work exclusively from `recurring_service_periods`.", "implemented": true }, { "id": "F007", "description": "Represent client-cadence recurring due work from canonical recurring service-period records without requiring a `billing_cycle_id` bridge.", "implemented": true }, { "id": "F008", "description": "Remove bridge-only fields from recurring due-work row identity contracts where they are still required for execution.", "implemented": true }, { "id": "F009", "description": "Retain optional billing-cycle context on recurring due-work rows only as passive display metadata if still useful.", "implemented": true }, { "id": "F010", "description": "Remove recurring run-target builders that start from `getAvailableBillingPeriods(...)` or raw cycle IDs.", "implemented": true }, { "id": "F011", "description": "Make recurring batch/run target selection operate only on canonical recurring due-work rows.", "implemented": true }, { "id": "F012", "description": "Make recurring job payloads use canonical execution-window or service-period identity only.", "implemented": true }, { "id": "F013", "description": "Remove recurring job-handler fallback logic that reconstructs live recurring work from `billing_cycle_id`.", "implemented": true }, { "id": "F014", "description": "Remove `billingCycleId` as a required field from shared recurring execution identity contracts.", "implemented": true }, { "id": "F015", "description": "Redefine client-cadence recurring execution identity using canonical schedule/window/service-period identity rather than cycle UUIDs.", "implemented": true }, { "id": "F016", "description": "Remove bridge-vs-execution-window branching from recurring identity helpers.", "implemented": true }, { "id": "F017", "description": "Remove legacy recurring comparison-mode branches that only exist to preserve bridge-era behavior.", "implemented": true }, { "id": "F018", "description": "Make recurring duplicate detection key off canonical execution-window/service-period identity and linked recurring rows only.", "implemented": true }, { "id": "F019", "description": "Stop preferring `invoices.billing_cycle_id` as the duplicate key for recurring client-cadence invoices.", "implemented": true }, { "id": "F020", "description": "Ensure rerun/retry behavior for recurring invoices is driven by canonical recurring identity rather than invoice header bridge fields.", "implemented": true }, { "id": "F021", "description": "Remove recurring preview request shapes that accept `billing_cycle_id` as a first-class recurring input.", "implemented": true }, { "id": "F022", "description": "Remove recurring generate request shapes that accept `billing_cycle_id` as a first-class recurring input.", "implemented": true }, { "id": "F023", "description": "Make recurring preview browser actions use canonical selector input only.", "implemented": true }, { "id": "F024", "description": "Make recurring generate browser actions use canonical selector input only.", "implemented": true }, { "id": "F025", "description": "Remove recurring API/controller naming and semantics that still frame preview/generate around billing cycles.", "implemented": true }, { "id": "F026", "description": "Remove recurring API compatibility wrappers that preserve `billing_cycle_id` as a recurring contract.", "implemented": true }, { "id": "F027", "description": "Keep or introduce separate non-recurring/client-cycle APIs where legitimate client billing schedule operations still need them.", "implemented": true }, { "id": "F028", "description": "Update shared recurring timing interfaces to remove bridge-only fields such as required `billingCycleId` and `hasBillingCycleBridge`.", "implemented": true }, { "id": "F029", "description": "Update shared recurring due-selection interfaces to make recurring identity fully canonical and bridge-free.", "implemented": true }, { "id": "F030", "description": "Update invoice preview/generation error contracts so recurring diagnostics do not depend on `billingCycleId`.", "implemented": true }, { "id": "F031", "description": "Remove recurring invoice DTO semantics that classify or explain recurring behavior through `billing_cycle_id`.", "implemented": true }, { "id": "F032", "description": "Preserve `billing_cycle_id` on invoice DTOs only as optional historical/client-context metadata if still needed.", "implemented": true }, { "id": "F033", "description": "Make invoice list/detail/read models derive recurring semantics from canonical recurring summary/detail data instead of `invoices.billing_cycle_id`.", "implemented": true }, { "id": "F034", "description": "Remove recurring invoice classification branches that infer cadence or execution-window kind from billing-cycle bridge presence.", "implemented": true }, { "id": "F035", "description": "Make recurring invoice detail rows canonical-first, using linked recurring detail/service-period data instead of bridge-era projection layers.", "implemented": true }, { "id": "F036", "description": "Remove or collapse `recurring_projection`-style compatibility layers where they only preserve bridge-shaped recurring reads.", "implemented": true }, { "id": "F037", "description": "Make recurring history queries invoice/service-period based rather than billing-cycle based.", "implemented": true }, { "id": "F038", "description": "Remove recurring history APIs or action names that present recurring invoices as invoiced billing cycles.", "implemented": true }, { "id": "F039", "description": "Make recurring reverse/delete flows operate on invoice-linked recurring service-period records, not billing-cycle handles.", "implemented": true }, { "id": "F040", "description": "Remove recurring reversal logic that branches on whether `billingCycleId` is present to choose the primary object to mutate.", "implemented": true }, { "id": "F041", "description": "Repair recurring service-period lifecycle state after reverse/delete using canonical linkage only.", "implemented": true }, { "id": "F042", "description": "Make recurring invoice-to-service-period linkage canonical and bridge-independent for all cadence owners.", "implemented": true }, { "id": "F043", "description": "Remove invoice-linkage matching rules that widen or narrow based on `invoice.billing_cycle_id` presence.", "implemented": true }, { "id": "F044", "description": "Remove recurring invoice-linkage schema-probing fallback logic that is only needed for mixed recurring schemas.", "implemented": true }, { "id": "F045", "description": "Ensure recurring charge/detail persistence carries enough canonical obligation and period identity to repair linkage without a billing-cycle bridge.", "implemented": true }, { "id": "F046", "description": "Reclassify invoice kinds explicitly so prepayment and similar behaviors no longer use null/non-null `billing_cycle_id` as a proxy.", "implemented": true }, { "id": "F047", "description": "Fix invoice finalization/modification logic that misclassifies bridge-less recurring invoices as prepayments.", "implemented": true }, { "id": "F048", "description": "Keep manual/prepayment invoice behavior correct after recurring bridge removal.", "implemented": true }, { "id": "F049", "description": "Remove recurring use of `client_billing_cycles` inside the billing engine as a source of recurring truth.", "implemented": true }, { "id": "F050", "description": "Keep client cadence source-rule resolution in the billing engine only as input to recurring service-period materialization.", "implemented": true }, { "id": "F051", "description": "Remove recurring engine paths that auto-create or load billing-cycle rows to execute recurring work.", "implemented": true }, { "id": "F052", "description": "Validate recurring invoice windows against canonical recurring service periods instead of cycle-row mutation semantics.", "implemented": true }, { "id": "F053", "description": "Make client billing schedule changes regenerate future recurring service periods instead of defining future recurring work by mutating future cycle rows.", "implemented": true }, { "id": "F054", "description": "Keep legitimate client billing schedule management flows for non-recurring/client-cadence administration.", "implemented": true }, { "id": "F055", "description": "Update bucket recurring period resolution to derive from canonical recurring service periods instead of preferring `client_billing_cycles`.", "implemented": true }, { "id": "F056", "description": "Make hourly and usage recurring execution continue to bill by canonical service window after bridge removal.", "implemented": true }, { "id": "F057", "description": "Remove recurring accounting export fallback provenance states that preserve canonical-vs-header bridge period logic.", "implemented": true }, { "id": "F058", "description": "Make accounting export use canonical recurring detail/service-period data only for recurring invoices.", "implemented": true }, { "id": "F059", "description": "Treat invoices lacking canonical recurring detail as non-recurring/periodless in export paths instead of preserving recurring fallback provenance.", "implemented": true }, { "id": "F060", "description": "Remove recurring UI row-action requirements that depend on `billing_cycle_id` existence.", "implemented": true }, { "id": "F061", "description": "Update recurring UI copy to describe service-period/execution-window objects directly instead of billing cycles.", "implemented": true }, { "id": "F062", "description": "Keep explicit UX defaults for `cadence_owner` only as product defaults, not as runtime fallback semantics.", "implemented": true }, { "id": "F063", "description": "Remove rollout-era authoring helpers that still resolve unspecified recurring cadence to implicit client fallback behavior.", "implemented": true }, { "id": "F064", "description": "Remove recurring metadata compatibility shims in authoring/storage helpers where old-table fallback is no longer supported.", "implemented": true }, { "id": "F065", "description": "Retain canonical recurring service-period inspection/management surfaces as the operator tool for recurring troubleshooting.", "implemented": true }, { "id": "F066", "description": "Turn missing recurring materialization into explicit operator-visible repair actions rather than compatibility due-work rows.", "implemented": true }, { "id": "F067", "description": "Document and enforce that recurring service-period structures are required schema, not optional rollout-era schema.", "implemented": true }, { "id": "F068", "description": "Remove recurring code comments and runbook language that still present the billing-cycle bridge as a normal recurring model.", "implemented": true }, { "id": "F069", "description": "Update recurring workflow/event diagnostics to use canonical recurring execution identity only.", "implemented": true }, { "id": "F070", "description": "Remove diagnostic/event payload fields whose only purpose is to preserve recurring billing-cycle bridge semantics.", "implemented": true }, { "id": "F071", "description": "Audit and clean invoice queries so recurring invoice period summaries do not rely on billing-cycle bridge assumptions.", "implemented": true }, { "id": "F072", "description": "Audit and clean API schemas so only legitimate client billing schedule endpoints still expose billing-cycle-specific recurring request shapes.", "implemented": true }, { "id": "F073", "description": "Audit and clean package/shared interfaces so client billing cycle models are separated from recurring execution models.", "implemented": true }, { "id": "F074", "description": "Define a deprecation posture for `invoices.billing_cycle_id` in recurring code, including whether it remains passive metadata or has a later removal path.", "implemented": true }, { "id": "F075", "description": "Add a migration/read-side strategy for historically incomplete recurring linkage so live recurring logic can still drop the bridge assumptions.", "implemented": true }, { "id": "F076", "description": "Remove billing-cycle-specific recurring tests that only preserve replaced behaviors.", "implemented": true }, { "id": "F077", "description": "Add canonical recurring tests proving client-cadence recurring invoicing works entirely through service periods.", "implemented": true }, { "id": "F078", "description": "Add canonical recurring tests proving contract-cadence recurring invoicing remains bridge-free end to end.", "implemented": true }, { "id": "F079", "description": "Add regression coverage proving explicit invoice kind classification prevents bridge-less recurring invoices from being misclassified as prepayments.", "implemented": true }, { "id": "F080", "description": "Add hard-cutover documentation and runbook guidance describing the final recurring model and the removed bridge assumptions.", "implemented": true } ]