[ { "id": "T001", "description": "Inventory captures every live reference to `resolveServicePeriod` in recurring billing execution paths", "implemented": true, "featureIds": [ "F003" ] }, { "id": "T002", "description": "Inventory captures every live reference to `billing_cycle_alignment` in runtime, models, schemas, UI, and tests", "implemented": true, "featureIds": [ "F003", "F090" ] }, { "id": "T003", "description": "Inventory captures every persisted reader of `service_period_start` and `service_period_end` outside the billing engine", "implemented": true, "featureIds": [ "F004", "F005" ] }, { "id": "T004", "description": "Inventory captures recurring timing dependencies in credits, prepayment, and negative-invoice flows", "implemented": true, "featureIds": [ "F005" ] }, { "id": "T005", "description": "Parity fixture matrix includes monthly, quarterly, semi-annual, annual, advance, arrears, mid-start, and mid-end scenarios", "implemented": true, "featureIds": [ "F007", "F010" ] }, { "id": "T006", "description": "Parity fixture matrix includes pricing schedules, discounts, PO, bucket, product, and license recurring scenarios", "implemented": true, "featureIds": [ "F007", "F010" ] }, { "id": "T007", "description": "Parity harness can execute old and new recurring timing for a representative client-cadence billing run", "implemented": true, "featureIds": [ "F008" ] }, { "id": "T008", "description": "Parity harness reports blocking versus non-blocking differences explicitly", "implemented": true, "featureIds": [ "F009" ] }, { "id": "T009", "description": "Out-of-scope matrix explicitly lists time, usage, materials, and manual-only flows with compatibility notes", "implemented": true, "featureIds": [ "F006" ] }, { "id": "T010", "description": "Recurring timing fixture builders can create cadence-owner-aware scenarios without invoice side effects", "implemented": true, "featureIds": [ "F010", "F020" ] }, { "id": "T011", "description": "Canonical service-period type preserves cadence owner, source obligation, and period boundaries without billing-engine-specific leakage", "implemented": true, "featureIds": [ "F011" ] }, { "id": "T012", "description": "Canonical invoice-window type remains distinct from service-period type in type checks and unit tests", "implemented": true, "featureIds": [ "F012" ] }, { "id": "T013", "description": "Cadence-owner enum defaults are explicit and serializable across shared, server, and package types", "implemented": true, "featureIds": [ "F013", "F083" ] }, { "id": "T014", "description": "Boundary-generator interface supports client and contract strategies with identical output contracts", "implemented": true, "featureIds": [ "F014" ] }, { "id": "T015", "description": "Activity-window intersection trims start boundaries correctly under inclusive and exclusive date rules", "implemented": true, "featureIds": [ "F015", "F018" ] }, { "id": "T016", "description": "Activity-window intersection trims end boundaries correctly under inclusive and exclusive date rules", "implemented": true, "featureIds": [ "F015", "F018" ] }, { "id": "T017", "description": "Partial-period settlement produces stable coverage factors without a separate proration subsystem", "implemented": true, "featureIds": [ "F016" ] }, { "id": "T018", "description": "Advance and arrears due-position mapping operate on the same service period rather than creating alternative service periods", "implemented": true, "featureIds": [ "F017" ] }, { "id": "T019", "description": "Inclusive and exclusive date semantics remain consistent across billing cycles, assignment dates, and invoice detail persistence", "implemented": true, "featureIds": [ "F018" ] }, { "id": "T020", "description": "Invoice detail persistence contract for recurring lines can be asserted without generating a full invoice document", "implemented": true, "featureIds": [ "F019", "F020" ] }, { "id": "T021", "description": "Monthly client-cadence generation reproduces current anchored periods for a mid-month anchor such as the 10th", "implemented": true, "featureIds": [ "F021" ] }, { "id": "T022", "description": "Monthly client-cadence generation reproduces current month-boundary periods when no custom anchor exists", "implemented": true, "featureIds": [ "F021" ] }, { "id": "T023", "description": "Quarterly client-cadence generation reproduces current anchor month and day behavior", "implemented": true, "featureIds": [ "F022" ] }, { "id": "T024", "description": "Semi-annual client-cadence generation reproduces current anchor month and day behavior", "implemented": true, "featureIds": [ "F023" ] }, { "id": "T025", "description": "Annual client-cadence generation reproduces current anchor month and day behavior", "implemented": true, "featureIds": [ "F024" ] }, { "id": "T026", "description": "Weekly client-cadence generation preserves [start, end) semantics and due-window alignment", "implemented": true, "featureIds": [ "F025" ] }, { "id": "T027", "description": "Bi-weekly client-cadence generation preserves [start, end) semantics and due-window alignment", "implemented": true, "featureIds": [ "F026" ] }, { "id": "T028", "description": "Anchor changes on future non-invoiced cycles preserve current transition-period behavior under the canonical generator", "implemented": true, "featureIds": [ "F027" ] }, { "id": "T029", "description": "Historical billing cycles remain deterministic when billing settings changed after prior invoices were created", "implemented": true, "featureIds": [ "F029" ] }, { "id": "T030", "description": "Legacy or partial client-billing-cycle data falls back predictably without generating overlapping service periods", "implemented": true, "featureIds": [ "F030" ] }, { "id": "T031", "description": "Advance timing maps the current service period onto the current invoice window for client cadence", "implemented": true, "featureIds": [ "F031" ] }, { "id": "T032", "description": "Arrears timing maps the previous service period onto the current invoice window for client cadence", "implemented": true, "featureIds": [ "F032" ] }, { "id": "T033", "description": "Mid-period start on a recurring line produces a partial first service period rather than bespoke proration logic", "implemented": true, "featureIds": [ "F033", "F035" ] }, { "id": "T034", "description": "Mid-period end on a recurring line produces a partial final service period rather than bespoke proration logic", "implemented": true, "featureIds": [ "F034", "F035" ] }, { "id": "T035", "description": "Product and license recurring lines use the same partial-period settlement rules as fixed recurring lines", "implemented": true, "featureIds": [ "F036", "F040" ] }, { "id": "T036", "description": "Newly activated recurring lines have explicit first-period behavior under advance timing", "implemented": true, "featureIds": [ "F037" ] }, { "id": "T037", "description": "Newly activated recurring lines have explicit first-period behavior under arrears timing", "implemented": true, "featureIds": [ "F037" ] }, { "id": "T038", "description": "Terminated recurring lines have explicit final-period behavior under advance timing", "implemented": true, "featureIds": [ "F038" ] }, { "id": "T039", "description": "Terminated recurring lines have explicit final-period behavior under arrears timing", "implemented": true, "featureIds": [ "F038" ] }, { "id": "T040", "description": "Zero-coverage or empty service periods never emit duplicate or spurious recurring charges", "implemented": true, "featureIds": [ "F039", "F040" ] }, { "id": "T041", "description": "Fixed recurring charge calculation no longer depends on `resolveServicePeriod` after cutover", "implemented": true, "featureIds": [ "F041", "F042" ] }, { "id": "T042", "description": "Fixed recurring parity holds for a full-period monthly client-cadence contract", "implemented": true, "featureIds": [ "F041", "F050" ] }, { "id": "T043", "description": "Fixed recurring parity holds for a mid-start monthly client-cadence contract", "implemented": true, "featureIds": [ "F041", "F050" ] }, { "id": "T044", "description": "Fixed recurring parity holds for a mid-end monthly client-cadence contract", "implemented": true, "featureIds": [ "F041", "F050" ] }, { "id": "T045", "description": "Arrears-specific skip logic is absent from the migrated fixed recurring execution path", "implemented": true, "featureIds": [ "F043" ] }, { "id": "T046", "description": "Advance termination credit behavior is reproduced through canonical partial-period settlement instead of a special branch", "implemented": true, "featureIds": [ "F044" ] }, { "id": "T047", "description": "FMV allocation totals remain unchanged when fixed recurring timing switches to canonical service periods", "implemented": true, "featureIds": [ "F045" ] }, { "id": "T048", "description": "Pricing schedule overrides still take precedence over contract-level base rates under fixed recurring cutover", "implemented": true, "featureIds": [ "F046" ] }, { "id": "T049", "description": "Contract-level custom-rate overrides still apply correctly under fixed recurring cutover", "implemented": true, "featureIds": [ "F047" ] }, { "id": "T050", "description": "Fixed recurring invoice detail rows persist canonical service-period metadata without subtotal drift", "implemented": true, "featureIds": [ "F049", "F050" ] }, { "id": "T051", "description": "Tax allocation for fixed recurring charges remains stable when timing source changes to canonical service periods", "implemented": true, "featureIds": [ "F048" ] }, { "id": "T052", "description": "Tax-region selection for fixed recurring charges remains stable when timing source changes to canonical service periods", "implemented": true, "featureIds": [ "F048" ] }, { "id": "T053", "description": "PO-required recurring charges remain associated to the correct invoice lines after fixed recurring cutover", "implemented": true, "featureIds": [ "F049", "F059" ] }, { "id": "T054", "description": "Pricing schedule effective-date boundaries are evaluated correctly against canonical recurring periods", "implemented": true, "featureIds": [ "F046", "F055" ] }, { "id": "T055", "description": "Discount start and end applicability still produces the same recurring discount coverage under canonical timing", "implemented": true, "featureIds": [ "F054" ] }, { "id": "T056", "description": "Bucket or allowance recurring lines map their included units to the correct canonical service period", "implemented": true, "featureIds": [ "F051" ] }, { "id": "T057", "description": "Bucket rollover behavior remains correct when recurring period boundaries become canonical and explicit", "implemented": true, "featureIds": [ "F052" ] }, { "id": "T058", "description": "Bucket overage charges still attach to the correct invoice window after recurring timing cutover", "implemented": true, "featureIds": [ "F053" ] }, { "id": "T059", "description": "Negative recurring totals and credit-generating allocations behave predictably under canonical service periods", "implemented": true, "featureIds": [ "F057" ] }, { "id": "T060", "description": "Out-of-scope bucket, time, and usage behaviors are documented explicitly rather than left implicit in the plan", "implemented": true, "featureIds": [ "F060" ] }, { "id": "T061", "description": "Recurring product charge paths that currently depend on late-stage proration are fully inventoried before migration", "implemented": true, "featureIds": [ "F061" ] }, { "id": "T062", "description": "Recurring product charges derive timing from canonical service periods under client cadence", "implemented": true, "featureIds": [ "F062" ] }, { "id": "T063", "description": "Recurring product charges preserve catalog-price versus contract-override precedence after cutover", "implemented": true, "featureIds": [ "F063" ] }, { "id": "T064", "description": "Recurring product tax behavior remains unchanged after moving products to canonical service periods", "implemented": true, "featureIds": [ "F064" ] }, { "id": "T065", "description": "Recurring license charge paths that currently depend on late-stage proration are fully inventoried before migration", "implemented": true, "featureIds": [ "F065" ] }, { "id": "T066", "description": "Recurring license charges derive timing from canonical service periods under client cadence", "implemented": true, "featureIds": [ "F066" ] }, { "id": "T067", "description": "Recurring license quantity and price sourcing remain correct after cutover", "implemented": true, "featureIds": [ "F067" ] }, { "id": "T068", "description": "Recurring license tax behavior remains unchanged after moving licenses to canonical service periods", "implemented": true, "featureIds": [ "F068" ] }, { "id": "T069", "description": "Recurring product invoice detail rows persist canonical service-period metadata correctly", "implemented": true, "featureIds": [ "F069" ] }, { "id": "T070", "description": "Recurring license invoice detail rows persist canonical service-period metadata correctly", "implemented": true, "featureIds": [ "F070" ] }, { "id": "T071", "description": "Invoice generation selects due recurring service periods for a billing cycle instead of deriving them ad hoc in each charge path", "implemented": true, "featureIds": [ "F071" ] }, { "id": "T072", "description": "Invoice header billing_period_start and billing_period_end remain stable after recurring service-period cutover", "implemented": true, "featureIds": [ "F072" ] }, { "id": "T073", "description": "Invoice subtotal and total calculations remain unchanged for client-cadence recurring invoices after cutover", "implemented": true, "featureIds": [ "F071", "F072" ] }, { "id": "T074", "description": "Invoice finalization and status transitions continue to function after recurring service-period-first billing lands", "implemented": true, "featureIds": [ "F073" ] }, { "id": "T075", "description": "Invoice detail readers return canonical recurring service-period metadata without breaking existing query contracts", "implemented": true, "featureIds": [ "F019", "F125" ] }, { "id": "T076", "description": "One-cycle invoice preview uses canonical service periods and still matches expected recurring totals", "implemented": true, "featureIds": [ "F075" ] }, { "id": "T077", "description": "Recurring invoice generation for a cycle containing no eligible recurring service periods produces the expected empty-result behavior", "implemented": true, "featureIds": [ "F071", "F080" ] }, { "id": "T078", "description": "Billing-period end dates used for billed-through calculations remain correct after canonical service-period selection", "implemented": true, "featureIds": [ "F080" ] }, { "id": "T079", "description": "Invoice workflow events continue to describe recurring invoice creation and updates correctly after cutover", "implemented": true, "featureIds": [ "F079", "F128" ] }, { "id": "T080", "description": "Canonical recurring service-period metadata remains stable through invoice reload and reread paths", "implemented": true, "featureIds": [ "F073", "F125" ] }, { "id": "T081", "description": "Automatic recurring billing runs select the correct due recurring service periods under client cadence", "implemented": true, "featureIds": [ "F074" ] }, { "id": "T082", "description": "Automatic recurring billing runs do not double-bill recurring service periods when rerun idempotently", "implemented": true, "featureIds": [ "F074", "F080" ] }, { "id": "T083", "description": "Recurring invoice preview and generate-one-cycle flows surface canonical service periods in preview state", "implemented": true, "featureIds": [ "F075" ] }, { "id": "T084", "description": "Manual invoice creation remains uncoupled from recurring service-period generation", "implemented": true, "featureIds": [ "F076" ] }, { "id": "T085", "description": "Manual invoice editing and viewing continue to work when invoice detail rows include canonical recurring periods", "implemented": true, "featureIds": [ "F076", "F126" ] }, { "id": "T086", "description": "Duplicate-invoice prevention still blocks a second invoice for the same recurring due window", "implemented": true, "featureIds": [ "F080" ] }, { "id": "T087", "description": "Billed-through detection for recurring lines remains correct after service-period-first cutover", "implemented": true, "featureIds": [ "F080" ] }, { "id": "T088", "description": "Client invoice preview used by portal or pay flows remains stable when recurring detail periods are canonical", "implemented": true, "featureIds": [ "F126", "F140" ] }, { "id": "T089", "description": "Recurring invoice selection remains stable when non-recurring charges are present on the same invoice", "implemented": true, "featureIds": [ "F071", "F076" ] }, { "id": "T090", "description": "Invoice detail queries used by dashboard dialogs still return expected recurring line ordering and metadata", "implemented": true, "featureIds": [ "F125", "F126" ] }, { "id": "T091", "description": "Credit application still applies against invoices generated from canonical recurring service periods", "implemented": true, "featureIds": [ "F077" ] }, { "id": "T092", "description": "Credit reconciliation still works when recurring invoice detail rows carry more explicit service periods", "implemented": true, "featureIds": [ "F078" ] }, { "id": "T093", "description": "Credit expiration still interprets recurring invoice timing correctly after service-period cutover", "implemented": true, "featureIds": [ "F078" ] }, { "id": "T094", "description": "Negative invoice creation remains valid when the originating recurring charges use canonical service periods", "implemented": true, "featureIds": [ "F077" ] }, { "id": "T095", "description": "Negative-invoice follow-on positive invoice reconciliation remains valid after recurring service-period cutover", "implemented": true, "featureIds": [ "F077", "F078" ] }, { "id": "T096", "description": "Prepayment invoice generation still produces correct recurring prepayment behavior under canonical service periods", "implemented": true, "featureIds": [ "F058" ] }, { "id": "T097", "description": "Prepayment invoice updates across multiple cycles remain consistent after recurring timing cutover", "implemented": true, "featureIds": [ "F058" ] }, { "id": "T098", "description": "Credit-related invoice detail readers and summaries remain stable after canonical recurring periods are introduced", "implemented": true, "featureIds": [ "F078", "F125" ] }, { "id": "T099", "description": "PO-related invoice flows continue to operate when credits and recurring service periods intersect", "implemented": true, "featureIds": [ "F059", "F131" ] }, { "id": "T100", "description": "Recurring timing changes do not break credit or prepayment integration tests that previously depended on client billing cycles alone", "implemented": true, "featureIds": [ "F077", "F078", "F058" ] }, { "id": "T101", "description": "Cadence-owner persistence location is explicit and covered by schema, type, and repository tests", "implemented": true, "featureIds": [ "F081", "F082", "F083" ] }, { "id": "T102", "description": "Existing recurring records default to client cadence without write-time ambiguity", "implemented": true, "featureIds": [ "F082", "F089" ] }, { "id": "T103", "description": "Shared interfaces serialize and deserialize cadence_owner consistently across packages", "implemented": true, "featureIds": [ "F083" ] }, { "id": "T104", "description": "Repository readers and writers preserve cadence_owner while staging billing_cycle_alignment deprecation", "implemented": true, "featureIds": [ "F084", "F090" ] }, { "id": "T105", "description": "Server API schemas accept cadence_owner and reject unsupported values or combinations", "implemented": true, "featureIds": [ "F085", "F088" ] }, { "id": "T106", "description": "Action-layer writes for recurring lines, presets, templates, and wizards persist cadence_owner correctly", "implemented": true, "featureIds": [ "F086" ] }, { "id": "T107", "description": "Fixture builders and test helpers create valid client-cadence and contract-cadence recurring scenarios with stable defaults", "implemented": true, "featureIds": [ "F087", "F134" ] }, { "id": "T108", "description": "Compatibility readers preserve client-cadence behavior when cadence_owner is absent on legacy records", "implemented": true, "featureIds": [ "F089" ] }, { "id": "T109", "description": "billing_cycle_alignment remains readable for staged rollout while no longer being required for new writes", "implemented": true, "featureIds": [ "F090", "F137" ] }, { "id": "T110", "description": "Schema and defaulting migrations do not mutate existing invoice outputs for untouched tenants", "implemented": true, "featureIds": [ "F082", "F114", "F135" ] }, { "id": "T111", "description": "Recurring contract line configuration UI presents cadence owner in business language without exposing internal engine jargon", "implemented": true, "featureIds": [ "F091" ] }, { "id": "T112", "description": "Contract wizard captures cadence_owner for new recurring lines and preserves it across step transitions", "implemented": true, "featureIds": [ "F092" ] }, { "id": "T113", "description": "Contract wizard resume and draft flows preserve cadence_owner and recurring timing defaults", "implemented": true, "featureIds": [ "F092", "F144" ] }, { "id": "T114", "description": "Template wizard and template detail configuration capture cadence-owner defaults for recurring lines", "implemented": true, "featureIds": [ "F093" ] }, { "id": "T115", "description": "Fixed recurring configuration panels explain partial-period coverage rather than proration-as-workaround", "implemented": true, "featureIds": [ "F094" ] }, { "id": "T116", "description": "Billing dashboard quick-start and overview copy no longer teaches users to infer timing primarily via proration", "implemented": true, "featureIds": [ "F095" ] }, { "id": "T117", "description": "Client billing schedule preview clarifies that client cadence is a cadence owner choice rather than the only recurring timing model", "implemented": true, "featureIds": [ "F096", "F122" ] }, { "id": "T118", "description": "Preset-based recurring line creation carries cadence-owner defaults without relying on billing_cycle_alignment", "implemented": true, "featureIds": [ "F123" ] }, { "id": "T119", "description": "Template-authored recurring defaults clone cadence-owner safely into instantiated contract lines", "implemented": true, "featureIds": [ "F138" ] }, { "id": "T120", "description": "Draft and resume flows across contract and template creation keep cadence-owner and timing defaults stable end to end", "implemented": true, "featureIds": [ "F123", "F138", "F144" ] }, { "id": "T337", "description": "Resuming a recurring draft returns cadence_owner and partial-period defaults together from the contract wizard reread action", "implemented": true, "featureIds": [ "F144" ] }, { "id": "T338", "description": "Resaving a resumed recurring draft preserves cadence_owner and partial-period defaults on the emitted draft payload", "implemented": true, "featureIds": [ "F144" ] }, { "id": "T121", "description": "Client portal invoice detail dialogs render canonical recurring service-period metadata correctly", "implemented": true, "featureIds": [ "F097", "F140" ] }, { "id": "T122", "description": "Client portal plan or contract-line detail dialogs render canonical recurring service periods correctly", "implemented": true, "featureIds": [ "F097", "F130" ] }, { "id": "T123", "description": "Recent-client-invoice and billing-overview actions preserve correct recurring period interpretation after cutover", "implemented": true, "featureIds": [ "F126", "F130" ] }, { "id": "T333", "description": "Client-portal billing overview cards surface canonical recurring service-period summaries instead of invoice-header-only timing copy", "implemented": true, "featureIds": [ "F140" ] }, { "id": "T334", "description": "Client-portal payment-success views surface canonical recurring service-period summaries for the paid invoice", "implemented": true, "featureIds": [ "F140" ] }, { "id": "T124", "description": "Remaining bucket unit reporting aligns to the intended canonical recurring period semantics", "implemented": true, "featureIds": [ "F130" ] }, { "id": "T125", "description": "Revenue report behavior remains correct when recurring invoices are interpreted through canonical service periods", "implemented": true, "featureIds": [ "F098", "F129" ] }, { "id": "T126", "description": "Expiration or reconciliation reports do not regress when recurring period semantics are clarified", "implemented": true, "featureIds": [ "F098", "F129" ] }, { "id": "T127", "description": "Accounting export repository outputs stable service-period fields after cutover", "implemented": true, "featureIds": [ "F099", "F127" ] }, { "id": "T128", "description": "QuickBooks export adapters still map the intended recurring service date semantics after cutover", "implemented": true, "featureIds": [ "F099" ] }, { "id": "T129", "description": "Xero and CSV export adapters still map the intended recurring service date semantics after cutover", "implemented": true, "featureIds": [ "F099" ] }, { "id": "T130", "description": "Invoice template preview and sample invoice data render canonical recurring service periods correctly in previews and designer flows", "implemented": true, "featureIds": [ "F133" ] }, { "id": "T335", "description": "Company-sync and accounting mapping services remain free of invoice-header or service-period field assumptions after recurring cutover", "implemented": true, "featureIds": [ "F141" ] }, { "id": "T336", "description": "Accounting export validation preserves canonical export-line service-period context while rejecting mapping or realm issues", "implemented": true, "featureIds": [ "F141" ] }, { "id": "T131", "description": "Monthly contract-cadence generation emits assignment-anniversary service periods for a start date on the 8th", "implemented": true, "featureIds": [ "F101" ] }, { "id": "T132", "description": "Quarterly contract-cadence generation emits assignment-anniversary service periods across quarter boundaries", "implemented": true, "featureIds": [ "F102" ] }, { "id": "T133", "description": "Semi-annual contract-cadence generation emits assignment-anniversary service periods across six-month boundaries", "implemented": true, "featureIds": [ "F103" ] }, { "id": "T134", "description": "Annual contract-cadence generation emits assignment-anniversary service periods across yearly boundaries", "implemented": true, "featureIds": [ "F104" ] }, { "id": "T135", "description": "Future-start assignments under contract cadence do not emit due service periods before the assignment starts", "implemented": true, "featureIds": [ "F105" ] }, { "id": "T136", "description": "Renewed or renewed-in-place contracts under contract cadence continue cadence behavior according to the documented rule", "implemented": true, "featureIds": [ "F105" ] }, { "id": "T137", "description": "First invoice behavior for contract-cadence lines starting mid-client-cycle matches the documented rule", "implemented": true, "featureIds": [ "F106" ] }, { "id": "T138", "description": "Final invoice behavior for contract-cadence lines ending mid-period matches the documented rule", "implemented": true, "featureIds": [ "F107" ] }, { "id": "T139", "description": "Contract-cadence recurring product and license lines inherit the same contract-anniversary service-period model", "implemented": true, "featureIds": [ "F101", "F102", "F103", "F104" ] }, { "id": "T140", "description": "Contract-cadence recurring invoice detail rows persist contract-owned service-period boundaries correctly", "implemented": true, "featureIds": [ "F101", "F125" ] }, { "id": "T141", "description": "Mixed cadence-owner recurring lines due in the same invoice window follow the documented grouping rule", "implemented": true, "featureIds": [ "F108", "F110" ] }, { "id": "T142", "description": "Mixed cadence-owner recurring lines due in different windows follow the documented grouping rule", "implemented": true, "featureIds": [ "F109", "F110" ] }, { "id": "T143", "description": "Unsupported mixed-cadence combinations fail fast in the action layer with clear validation errors", "implemented": true, "featureIds": [ "F088", "F136" ] }, { "id": "T144", "description": "Unsupported mixed-cadence combinations fail fast in API schemas with clear validation errors", "implemented": true, "featureIds": [ "F085", "F136" ] }, { "id": "T145", "description": "Unsupported mixed-cadence combinations surface clear validation in UI configuration flows", "implemented": true, "featureIds": [ "F091", "F136" ] }, { "id": "T146", "description": "Recurring run selection remains deterministic when both cadence owners are present on one client", "implemented": true, "featureIds": [ "F110" ] }, { "id": "T147", "description": "Portal and export consumers remain stable when invoices contain mixed cadence-owner recurring lines", "implemented": true, "featureIds": [ "F097", "F099", "F110" ] }, { "id": "T148", "description": "Mixed cadence-owner disputes can be traced using the documented runbook and persisted metadata", "implemented": true, "featureIds": [ "F149" ] }, { "id": "T149", "description": "End-exclusive overlap semantics remain correct when mixed cadence owners coexist", "implemented": true, "featureIds": [ "F145" ] }, { "id": "T150", "description": "No recurring execution path mixes legacy and canonical timing models on the same line during staged rollout", "implemented": true, "featureIds": [ "F143" ] }, { "id": "T151", "description": "Rollout plan keeps client-cadence parity enabled before any contract-cadence capability is exposed", "implemented": true, "featureIds": [ "F111" ] }, { "id": "T152", "description": "DB-backed pre-cutover validation proves monthly client-cadence recurring invoices are unchanged under the new engine", "implemented": true, "featureIds": [ "F112" ] }, { "id": "T153", "description": "DB-backed pre-cutover validation proves quarterly or annual client-cadence recurring invoices are unchanged under the new engine", "implemented": true, "featureIds": [ "F112" ] }, { "id": "T154", "description": "Rollout controls or safety gates allow comparison mode without mutating live invoice outputs", "implemented": true, "featureIds": [ "F113" ] }, { "id": "T155", "description": "Cadence-owner backfill writes safe defaults to existing recurring records", "implemented": true, "featureIds": [ "F114", "F135" ] }, { "id": "T156", "description": "Cadence-owner backfill does not mutate invoice behavior for untouched client-cadence tenants", "implemented": true, "featureIds": [ "F114", "F135" ] }, { "id": "T157", "description": "Guardrails keep time, usage, materials, and manual-only paths outside the first hard cutover", "implemented": true, "featureIds": [ "F115" ] }, { "id": "T158", "description": "Partial rollout protection prevents fixed recurring from using canonical timing while product or license recurring still use legacy timing on the same execution path", "implemented": true, "featureIds": [ "F143" ] }, { "id": "T159", "description": "End-exclusive query behavior remains correct in billing-engine selection logic after helper removal", "implemented": true, "featureIds": [ "F145" ] }, { "id": "T160", "description": "Operational runbook covers parity checks, mixed-cadence troubleshooting, and rollback posture clearly enough for execution handoff", "implemented": true, "featureIds": [ "F119", "F149" ] }, { "id": "T161", "description": "billing_cycle_alignment is no longer required for new recurring writes after cutover staging lands", "implemented": true, "featureIds": [ "F090", "F137" ] }, { "id": "T162", "description": "billing_cycle_alignment no longer changes live recurring execution for migrated paths", "implemented": true, "featureIds": [ "F116", "F137" ] }, { "id": "T163", "description": "Source grep shows resolveServicePeriod is absent from migrated recurring charge execution paths", "implemented": true, "featureIds": [ "F117", "F146" ] }, { "id": "T164", "description": "Source grep shows duplicated proration implementations are absent from migrated recurring fixed, product, and license paths", "implemented": true, "featureIds": [ "F117", "F146" ] }, { "id": "T165", "description": "Source grep shows obsolete recurring timing terminology is removed from migrated UI copy and docs where appropriate", "implemented": true, "featureIds": [ "F142" ] }, { "id": "T166", "description": "Database and source validation prove live recurring outputs no longer depend on billing_cycle_alignment", "implemented": true, "featureIds": [ "F116", "F146" ] }, { "id": "T167", "description": "Database and source validation prove live recurring outputs no longer depend on resolveServicePeriod", "implemented": true, "featureIds": [ "F117", "F146" ] }, { "id": "T168", "description": "Follow-on boundaries for advanced service-period ledger extensions are captured explicitly instead of leaking into v1 implementation", "implemented": true, "featureIds": [ "F147" ] }, { "id": "T169", "description": "Follow-on boundaries for time and usage unification are captured explicitly instead of leaking into v1 implementation", "implemented": true, "featureIds": [ "F148" ] }, { "id": "T170", "description": "Feature-to-subsystem mapping remains internally consistent so implementation progress can be tracked across all affected surfaces", "implemented": true, "featureIds": [ "F150" ] }, { "id": "T171", "description": "DB-backed sanity: existing monthly client-cadence recurring invoice generation succeeds unchanged after service-period-first cutover", "implemented": true, "featureIds": [ "F112", "F118" ] }, { "id": "T172", "description": "DB-backed sanity: existing quarterly client-cadence recurring invoice generation succeeds unchanged after service-period-first cutover", "implemented": true, "featureIds": [ "F112", "F118" ] }, { "id": "T173", "description": "DB-backed sanity: recurring product invoices continue to generate correctly under client cadence after cutover", "implemented": true, "featureIds": [ "F062", "F118" ] }, { "id": "T174", "description": "DB-backed sanity: recurring license invoices continue to generate correctly under client cadence after cutover", "implemented": true, "featureIds": [ "F066", "F118" ] }, { "id": "T175", "description": "DB-backed sanity: contract-cadence monthly recurring billing succeeds for a contract starting mid-month", "implemented": true, "featureIds": [ "F101", "F118" ] }, { "id": "T176", "description": "DB-backed sanity: mixed cadence-owner client billing follows documented grouping rules in an integration scenario", "implemented": true, "featureIds": [ "F108", "F109", "F118" ] }, { "id": "T177", "description": "DB-backed sanity: credits and negative invoices still reconcile correctly after recurring service-period-first cutover", "implemented": true, "featureIds": [ "F077", "F078", "F118" ] }, { "id": "T178", "description": "DB-backed sanity: accounting export readers produce stable service-period fields after recurring cutover", "implemented": true, "featureIds": [ "F099", "F127", "F118" ] }, { "id": "T179", "description": "Plan scratchpad and PRD explicitly capture the system-wide blast radius and recursive decomposition instead of only engine-level goals", "implemented": true, "featureIds": [ "F002", "F150" ] }, { "id": "T180", "description": "Plan artifacts remain valid after expansion and keep enough granularity to manage a multi-pass implementation safely", "implemented": true, "featureIds": [ "F150" ] }, { "id": "T181", "description": "Recurring run execution identity supports client-cadence scheduling without relying only on billingCycleId", "implemented": true, "featureIds": [ "F151", "F155" ] }, { "id": "T182", "description": "Recurring run execution identity supports contract-cadence scheduling as a first-class path", "implemented": true, "featureIds": [ "F151", "F156" ] }, { "id": "T183", "description": "Background job payloads can select due recurring service periods without requiring a raw billingCycleId input", "implemented": true, "featureIds": [ "F152" ] }, { "id": "T184", "description": "Recurring run retries remain idempotent when due service periods rather than billingCycleId drive execution", "implemented": true, "featureIds": [ "F153" ] }, { "id": "T185", "description": "Comparison-mode execution records preserve enough identity metadata to compare legacy and canonical recurring outputs safely", "implemented": true, "featureIds": [ "F154" ] }, { "id": "T186", "description": "Client-cadence due-work selection remains deterministic when billing settings or anchors changed historically", "implemented": true, "featureIds": [ "F155" ] }, { "id": "T187", "description": "Contract-cadence due-work selection remains deterministic around assignment-start anchors and boundary crossings", "implemented": true, "featureIds": [ "F156" ] }, { "id": "T188", "description": "Due service periods split into separate invoices when grouping would violate single-contract invoice constraints", "implemented": true, "featureIds": [ "F157" ] }, { "id": "T189", "description": "Due service periods split into separate invoices when purchase-order scope requires it", "implemented": true, "featureIds": [ "F158" ] }, { "id": "T190", "description": "Due service periods split into separate invoices when tax-source, currency, or export constraints require it", "implemented": true, "featureIds": [ "F159", "F160" ] }, { "id": "T191", "description": "A recurring invoice can persist one parent charge with multiple canonical detail periods and readers hydrate both levels correctly", "implemented": true, "featureIds": [ "F161", "F162" ] }, { "id": "T192", "description": "Historical invoices with no canonical detail rows still hydrate correctly through the same invoice readers", "implemented": true, "featureIds": [ "F164", "F169" ] }, { "id": "T193", "description": "Invoice APIs expose canonical recurring detail periods for new invoices without breaking existing consumer payloads", "implemented": true, "featureIds": [ "F163", "F169" ] }, { "id": "T194", "description": "Preview rows reflect multi-detail recurring charges according to the documented projection contract", "implemented": true, "featureIds": [ "F165", "F168" ] }, { "id": "T195", "description": "Invoice rendering adapters flatten or expand canonical recurring detail periods according to the documented policy", "implemented": true, "featureIds": [ "F166", "F168" ] }, { "id": "T196", "description": "Client-portal invoice detail readers project canonical recurring periods according to the documented omission and flattening rules", "implemented": true, "featureIds": [ "F167", "F168" ] }, { "id": "T197", "description": "Ordering and aggregation of multi-period recurring charges remain stable across invoice reads, previews, and rendering flows", "implemented": true, "featureIds": [ "F168" ] }, { "id": "T198", "description": "Old-shape and new-shape invoice payloads remain schema-compatible across shared interfaces and API readers", "implemented": true, "featureIds": [ "F169" ] }, { "id": "T199", "description": "Workflow events and audit records retain recurring detail provenance after service-period-first cutover", "implemented": true, "featureIds": [ "F170" ] }, { "id": "T200", "description": "Invoice consumers can distinguish authoritative recurring detail periods from header grouping metadata after hydration", "implemented": true, "featureIds": [ "F161", "F163", "F169" ] }, { "id": "T201", "description": "Billed-through readers derive recurring enforcement from canonical detail periods instead of invoice header periods", "implemented": true, "featureIds": [ "F171" ] }, { "id": "T202", "description": "Contract-line edit and remove guards respect canonical detail periods when determining whether a recurring line has already been invoiced", "implemented": true, "featureIds": [ "F172" ] }, { "id": "T203", "description": "Renewal and replacement flows respect previously persisted recurring detail periods on the superseded line", "implemented": true, "featureIds": [ "F173" ] }, { "id": "T204", "description": "Mid-cycle termination and end-date shortening honor partial or future canonical service periods correctly", "implemented": true, "featureIds": [ "F174" ] }, { "id": "T205", "description": "Deletion and cancellation safeguards behave correctly when recurring detail periods exist on draft and finalized invoices", "implemented": true, "featureIds": [ "F175" ] }, { "id": "T206", "description": "Invoice recalculation preserves canonical recurring detail periods rather than rebuilding timing from invoice headers", "implemented": true, "featureIds": [ "F176" ] }, { "id": "T207", "description": "Manual edits to recurring invoice charges preserve or update canonical detail provenance according to policy", "implemented": true, "featureIds": [ "F177" ] }, { "id": "T208", "description": "Rerender and preview-refresh flows use canonical recurring detail periods after invoice persistence", "implemented": true, "featureIds": [ "F178" ] }, { "id": "T209", "description": "Percentage-discount and net-total recalculation remains correct on recurring invoices backed by canonical detail periods", "implemented": true, "featureIds": [ "F179" ] }, { "id": "T210", "description": "Zero-dollar recurring invoices finalize or remain intentionally non-finalized according to the documented service-period-first policy", "implemented": true, "featureIds": [ "F180" ] }, { "id": "T211", "description": "Manual invoice lines follow the documented policy for canonical service-period fields", "implemented": true, "featureIds": [ "F181" ] }, { "id": "T212", "description": "Manual and recurring charges can coexist on one invoice without corrupting canonical recurring detail semantics", "implemented": true, "featureIds": [ "F181", "F177" ] }, { "id": "T213", "description": "Manual lines tied to recurring contract-line provenance preserve that linkage according to policy", "implemented": true, "featureIds": [ "F182" ] }, { "id": "T214", "description": "Prepayment invoices follow the documented non-service service-period policy", "implemented": true, "featureIds": [ "F183" ] }, { "id": "T215", "description": "Negative invoices offset recurring work according to the documented canonical service-period semantics", "implemented": true, "featureIds": [ "F184" ] }, { "id": "T216", "description": "Credit memo issuance preserves lineage and date semantics when source invoices are detail-period-backed", "implemented": true, "featureIds": [ "F185" ] }, { "id": "T217", "description": "Credit application behaves correctly when applying credits to invoices backed by canonical recurring detail periods", "implemented": true, "featureIds": [ "F186" ] }, { "id": "T218", "description": "Credit expiration and reconciliation flows use the documented date basis after recurring timing cutover", "implemented": true, "featureIds": [ "F187" ] }, { "id": "T219", "description": "Credit transfer and reporting maintain correct lineage when credits originate from detail-period-backed recurring invoices", "implemented": true, "featureIds": [ "F188" ] }, { "id": "T339", "description": "Dashboard and portal views make non-service financial artifacts explicit when recurring service-period metadata is absent", "implemented": true, "featureIds": [ "F189" ] }, { "id": "T340", "description": "DB-backed validation proves recurring invoice generation still succeeds after dropped recurrence-related tables are removed from the live schema", "implemented": true, "featureIds": [ "F221" ] }, { "id": "T341", "description": "Shared recurring timing types define the persisted service-period record contract with identifiers, obligation linkage, cadence owner, boundaries, provenance, and lifecycle state", "implemented": true, "featureIds": [ "F231" ] }, { "id": "T342", "description": "Persisted recurring service-period migration creates schedule lookup, obligation-state, and due-selection indexes alongside the physical ledger table", "implemented": true, "featureIds": [ "F232" ] }, { "id": "T220", "description": "Financial artifacts with missing canonical period metadata follow the documented fallback and failure-handling behavior", "implemented": true, "featureIds": [ "F190" ] }, { "id": "T221", "description": "Billing overview and finance reporting surfaces use the documented invoice-date versus service-period date basis", "implemented": true, "featureIds": [ "F191", "F192" ] }, { "id": "T222", "description": "Contract revenue, expiration, and reconciliation reporting use the documented canonical recurring date basis where required", "implemented": true, "featureIds": [ "F191", "F193" ] }, { "id": "T223", "description": "Financial analytics remain semantically stable when invoice dates and recurring service periods diverge under mixed cadence ownership", "implemented": true, "featureIds": [ "F194" ] }, { "id": "T224", "description": "Accounting export repositories read canonical recurring detail periods authoritatively and fall back only for historical invoices", "implemented": true, "featureIds": [ "F195" ] }, { "id": "T225", "description": "Stored export batches can be reread when they contain a mix of historical flat invoices and canonical detail-backed recurring invoices", "implemented": true, "featureIds": [ "F196" ] }, { "id": "T226", "description": "Export batch replay and retry remain stable after service-period-first cutover", "implemented": true, "featureIds": [ "F197" ] }, { "id": "T227", "description": "QuickBooks export mapping handles recurring ranges, single dates, and null-period fallbacks according to the documented adapter policy", "implemented": true, "featureIds": [ "F198" ] }, { "id": "T228", "description": "Xero export mapping handles recurring ranges, description flattening, and null-period fallbacks according to the documented adapter policy", "implemented": true, "featureIds": [ "F199" ] }, { "id": "T229", "description": "Internal and external tax reconciliation consumers use the documented date semantics after recurring detail periods become available", "implemented": true, "featureIds": [ "F200" ] }, { "id": "T230", "description": "Portal and dashboard metrics use the documented date basis rather than silently inheriting invoice-header assumptions", "implemented": true, "featureIds": [ "F192", "F194" ] }, { "id": "T231", "description": "Contract wizard writes cadence-owner and timing defaults consistently with the canonical authoring policy", "implemented": true, "featureIds": [ "F201", "F202" ] }, { "id": "T232", "description": "Inline contract-line editing writes cadence-owner and timing defaults consistently with the canonical authoring policy", "implemented": true, "featureIds": [ "F201", "F203" ] }, { "id": "T233", "description": "Custom recurring-line creation writes cadence-owner and timing defaults consistently with the canonical authoring policy", "implemented": true, "featureIds": [ "F201", "F204" ] }, { "id": "T234", "description": "Preset creation, editing, and reuse preserve canonical recurring cadence semantics across create-time propagation", "implemented": true, "featureIds": [ "F205" ] }, { "id": "T235", "description": "Template-line authoring persists canonical recurring cadence semantics wherever template support exists in v1", "implemented": true, "featureIds": [ "F206", "F212" ] }, { "id": "T236", "description": "Template-to-contract cloning propagates cadence-owner and recurring timing semantics explicitly", "implemented": true, "featureIds": [ "F207" ] }, { "id": "T237", "description": "Post-clone contract editing remains independent from template edits with no recurring-cadence ambiguity", "implemented": true, "featureIds": [ "F208" ] }, { "id": "T238", "description": "Authoring previews explain first invoice behavior correctly for client-cadence recurring lines", "implemented": true, "featureIds": [ "F209" ] }, { "id": "T239", "description": "Authoring previews explain first invoice behavior correctly for contract-cadence recurring lines", "implemented": true, "featureIds": [ "F209" ] }, { "id": "T240", "description": "Unsupported authoring combinations fail early with clear validation by line type, cadence owner, timing mode, and billing frequency", "implemented": true, "featureIds": [ "F210" ] }, { "id": "T241", "description": "The recurrence-storage model is internally consistent across live contract lines, template lines, presets, and shared interfaces", "implemented": true, "featureIds": [ "F211", "F220" ] }, { "id": "T242", "description": "Template-line cadence_owner schema and backfill behavior are correct wherever template recurrence semantics are supported", "implemented": true, "featureIds": [ "F212" ] }, { "id": "T243", "description": "Preset-backed recurrence defaults carry cadence_owner semantics correctly through backfill or create-time propagation", "implemented": true, "featureIds": [ "F213" ] }, { "id": "T244", "description": "billing_timing defaults are standardized across wizard, custom-line, preset, template, and repository write paths", "implemented": true, "featureIds": [ "F214" ] }, { "id": "T245", "description": "Legacy billing_cycle_alignment defaults are normalized consistently before execution deprecation", "implemented": true, "featureIds": [ "F215" ] }, { "id": "T246", "description": "Repository and model write paths no longer silently drop or normalize recurrence fields inconsistently", "implemented": true, "featureIds": [ "F216" ] }, { "id": "T247", "description": "Dropped recurrence-related tables are no longer joined or read by live models before service-period-first work begins", "implemented": true, "featureIds": [ "F217", "F221" ] }, { "id": "T248", "description": "Documentation and models no longer describe superseded recurrence-storage tables or assumptions as authoritative", "implemented": true, "featureIds": [ "F218" ] }, { "id": "T249", "description": "Compatibility readers and writers handle partially migrated recurrence records across authoring and read-model surfaces", "implemented": true, "featureIds": [ "F219" ] }, { "id": "T250", "description": "The documented recurrence field source-of-truth matrix matches actual table, repository, action, and API behavior", "implemented": true, "featureIds": [ "F220" ] }, { "id": "T251", "description": "Source and DB validation prove authoritative recurring readers prefer canonical detail periods over invoice header periods when both exist", "implemented": true, "featureIds": [ "F222" ] }, { "id": "T252", "description": "Source and DB validation prove contract-cadence execution paths are not blocked on billingCycleId-only assumptions", "implemented": true, "featureIds": [ "F223" ] }, { "id": "T253", "description": "Reader-first then writer and scheduler cutover stages preserve compatibility while historical invoices and new invoices coexist", "implemented": true, "featureIds": [ "F224" ] }, { "id": "T254", "description": "Reporting, portal, and export cutover stages preserve compatibility after the canonical recurring read-model contract lands", "implemented": true, "featureIds": [ "F225" ] }, { "id": "T255", "description": "Rollback posture is defined and works when historical flat invoices and canonical detail-backed invoices coexist for an extended period", "implemented": true, "featureIds": [ "F226" ] }, { "id": "T256", "description": "The projection-mismatch runbook is sufficient to diagnose header-versus-detail recurring period disagreements", "implemented": true, "featureIds": [ "F227" ] }, { "id": "T257", "description": "The authoring-default drift runbook is sufficient to diagnose divergence across templates, presets, wizard flows, and custom lines", "implemented": true, "featureIds": [ "F228" ] }, { "id": "T258", "description": "Persisted recurring execution records remain explicitly out of scope unless the documented follow-on boundary is invoked", "implemented": true, "featureIds": [ "F229" ] }, { "id": "T259", "description": "Long-lived dual-shape invoice support remains explicitly bounded by the documented invoice-schema versioning follow-on", "implemented": true, "featureIds": [ "F230" ] }, { "id": "T260", "description": "DB-backed sanity: mixed historical and canonical invoices remain queryable through the same invoice APIs during staged rollout", "implemented": true, "featureIds": [ "F164", "F169", "F226" ] }, { "id": "T261", "description": "Mixed cadence due work still respects the documented single-contract invoice invariant during grouping", "implemented": true, "featureIds": [ "F157", "F109" ] }, { "id": "T262", "description": "PO-required and non-PO recurring charges split according to policy even when their due service periods coincide", "implemented": true, "featureIds": [ "F158" ] }, { "id": "T263", "description": "Currency or tax-source grouping constraints force invoice splits according to policy when due work would otherwise combine", "implemented": true, "featureIds": [ "F159" ] }, { "id": "T264", "description": "generateInvoice to persistence to getFullInvoiceById round-trips canonical recurring detail periods correctly", "implemented": true, "featureIds": [ "F162", "F163" ] }, { "id": "T265", "description": "Invoice query actions preserve canonical recurring detail periods through dashboard-level invoice reads", "implemented": true, "featureIds": [ "F163", "F178" ] }, { "id": "T266", "description": "Manual invoice actions remain stable when operating on invoices that also contain canonical recurring detail-backed charges", "implemented": true, "featureIds": [ "F177", "F181" ] }, { "id": "T267", "description": "Client-portal invoice detail dialogs intentionally render or omit canonical recurring detail periods according to policy", "implemented": true, "featureIds": [ "F167", "F189" ] }, { "id": "T268", "description": "Invoice rendering adapters produce stable output for invoices containing canonical recurring detail-backed charges", "implemented": true, "featureIds": [ "F166", "F178" ] }, { "id": "T269", "description": "Client-cadence parity validation still holds at the report-output level after detail-period-aware readers land", "implemented": true, "featureIds": [ "F112", "F191", "F192" ] }, { "id": "T270", "description": "Validation catches header-versus-detail recurring period drift before it leaks into downstream readers or exports", "implemented": true, "featureIds": [ "F222", "F227" ] }, { "id": "T271", "description": "Source validation shows no live contract-cadence scheduler path depends on billingCycleId as its only execution identity", "implemented": true, "featureIds": [ "F151", "F223" ] }, { "id": "T272", "description": "Source validation shows authoritative recurring readers no longer fall back to header-period fields when canonical detail periods exist", "implemented": true, "featureIds": [ "F171", "F222" ] }, { "id": "T273", "description": "Zero-dollar recurring invoice handling is covered explicitly so the existing finalization seam cannot survive cutover unnoticed", "implemented": true, "featureIds": [ "F180" ] }, { "id": "T274", "description": "QuickBooks and Xero adapter behaviors remain correct for mixed-cadence recurring invoices with canonical detail periods", "implemented": true, "featureIds": [ "F198", "F199" ] }, { "id": "T275", "description": "Canonical recurring detail periods survive recalculation and remain visible in export preview and downstream inspection flows", "implemented": true, "featureIds": [ "F176", "F195", "F197" ] }, { "id": "T276", "description": "DB-backed sanity: a monthly contract-cadence recurring line starting on the 8th completes scheduling, grouping, invoice generation, and hydration correctly", "implemented": true, "featureIds": [ "F151", "F156", "F157", "F162" ] }, { "id": "T277", "description": "DB-backed sanity: an annual contract-cadence recurring line completes scheduling, grouping, invoice generation, and hydration correctly", "implemented": true, "featureIds": [ "F151", "F156", "F162" ] }, { "id": "T278", "description": "DB-backed sanity: mixed cadence-owner invoices remain stable across export and portal readers when historical and canonical invoices coexist", "implemented": true, "featureIds": [ "F167", "F195", "F226" ] }, { "id": "T279", "description": "Plan artifacts remain valid after the second decomposition pass and preserve feature-to-subsystem traceability at implementation-grade depth", "implemented": true, "featureIds": [ "F150", "F220" ] }, { "id": "T280", "description": "The expanded plan now carries hundreds of implementation-grade features and tests across runtime, storage, APIs, UI, and downstream consumers", "implemented": true, "featureIds": [ "F150", "F220", "F224" ] }, { "id": "T281", "description": "Persisted service-period records store obligation linkage, cadence owner, boundaries, provenance, and lifecycle state coherently", "implemented": true, "featureIds": [ "F231", "F233", "F234" ] }, { "id": "T282", "description": "Database constraints prevent invalid persisted service-period records from being written", "implemented": true, "featureIds": [ "F232" ] }, { "id": "T283", "description": "Generated, edited, skipped, locked, billed, and superseded lifecycle states transition according to the documented model", "implemented": true, "featureIds": [ "F233" ] }, { "id": "T284", "description": "Persisted provenance records distinguish generated periods from user-edited periods and retain the reason for divergence", "implemented": true, "featureIds": [ "F234" ] }, { "id": "T285", "description": "Generation horizon replenishes future persisted service periods without creating overlaps or gaps", "implemented": true, "featureIds": [ "F235" ] }, { "id": "T286", "description": "Existing client-cadence recurring lines backfill persisted future service periods without altering billed history", "implemented": true, "featureIds": [ "F236", "F244" ] }, { "id": "T343", "description": "Client-cadence materialization turns generated service periods into persisted future record candidates with canonical invoice-window mapping", "implemented": true, "featureIds": [ "F236" ] }, { "id": "T287", "description": "Contract-cadence recurring lines materialize future service periods correctly once contract-owned cadence is enabled", "implemented": true, "featureIds": [ "F237" ] }, { "id": "T288", "description": "Regeneration refreshes future unedited service periods when source recurrence rules change", "implemented": true, "featureIds": [ "F238", "F254" ] }, { "id": "T289", "description": "Regeneration preserves user-edited future service periods instead of silently overwriting them", "implemented": true, "featureIds": [ "F239" ] }, { "id": "T290", "description": "Locked or billed persisted service periods cannot be edited except through explicitly allowed corrective flows", "implemented": true, "featureIds": [ "F240" ] }, { "id": "T291", "description": "Persisted service periods link cleanly to resulting invoice detail rows after invoice generation", "implemented": true, "featureIds": [ "F241" ] }, { "id": "T344", "description": "Persisted due-selection query contract filters eligible unlinked service-period records by schedule key, exact invoice window, and lifecycle state before runtime cutover", "implemented": true, "featureIds": [ "F242" ] }, { "id": "T345", "description": "Boundary adjustment is the minimal supported v1 edit operation and creates an explicit edited revision before broader continuity or UI passes land", "implemented": true, "featureIds": [ "F245" ] }, { "id": "T346", "description": "Skip and defer create explicit superseding revisions with preserved service-period provenance before broader continuity validation lands", "implemented": true, "featureIds": [ "F246" ] }, { "id": "T347", "description": "Split and merge remain explicitly unsupported v1 edit operations while boundary adjustment, skip, and defer stay available", "implemented": true, "featureIds": [ "F247" ] }, { "id": "T348", "description": "Future persisted service periods have an explicit listing query independent from due selection or invoice generation", "implemented": true, "featureIds": [ "F250" ] }, { "id": "T349", "description": "Edit transport surfaces return explicit persisted-record provenance on success and structured validation feedback on failure before dashboard editing lands", "implemented": true, "featureIds": [ "F251" ] }, { "id": "T292", "description": "Invoice generation selects due persisted service periods rather than deriving schedule boundaries on demand", "implemented": true, "featureIds": [ "F242", "F256" ] }, { "id": "T293", "description": "Parity comparison surfaces differences between legacy derived timing and persisted service-period schedules before cutover", "implemented": true, "featureIds": [ "F243" ] }, { "id": "T294", "description": "Backfill initializes future persisted service periods for existing recurring lines under parity-safe rules", "implemented": true, "featureIds": [ "F244" ] }, { "id": "T295", "description": "Boundary-adjustment edits to future persisted service periods are validated and saved explicitly", "implemented": true, "featureIds": [ "F245", "F248", "F251" ] }, { "id": "T296", "description": "Skip or defer operations mark future persisted service periods without corrupting continuity or invoice linkage", "implemented": true, "featureIds": [ "F246", "F248" ] }, { "id": "T297", "description": "If split or merge operations are supported in v1, they preserve continuity, provenance, and due-selection semantics", "implemented": true, "featureIds": [ "F247", "F248" ] }, { "id": "T298", "description": "User edits that create overlaps, gaps, or invalid continuity are rejected with clear validation", "implemented": true, "featureIds": [ "F248" ] }, { "id": "T299", "description": "Source-rule changes that conflict with user-edited future periods surface explicit conflict handling rather than silent corruption", "implemented": true, "featureIds": [ "F249" ] }, { "id": "T300", "description": "Billing staff can list future persisted service periods independently of invoice generation", "implemented": true, "featureIds": [ "F250", "F257" ] }, { "id": "T301", "description": "Billing staff can edit future persisted service periods through documented APIs and UI flows with provenance preserved", "implemented": true, "featureIds": [ "F251", "F252" ] }, { "id": "T302", "description": "Service-period UI states clearly differentiate generated, edited, skipped, locked, billed, and superseded periods", "implemented": true, "featureIds": [ "F252" ] }, { "id": "T303", "description": "Permissions and audit logs cover viewing, editing, skipping, regenerating, and correcting persisted service periods", "implemented": true, "featureIds": [ "F253" ] }, { "id": "T304", "description": "Contract-line edits trigger persisted service-period regeneration according to the documented rules", "implemented": true, "featureIds": [ "F254" ] }, { "id": "T305", "description": "Billing schedule changes trigger persisted service-period regeneration according to the documented rules", "implemented": true, "featureIds": [ "F254" ] }, { "id": "T306", "description": "The boundary between source recurrence rules and service-period overrides remains understandable and queryable after edits", "implemented": true, "featureIds": [ "F255" ] }, { "id": "T307", "description": "Fixed, product, and license recurring runtime all consume persisted service-period records consistently", "implemented": true, "featureIds": [ "F256", "F261" ] }, { "id": "T308", "description": "Schedule previews and explainers show future materialized service periods before a contract line is saved", "implemented": true, "featureIds": [ "F258" ] }, { "id": "T309", "description": "Administrative regeneration or repair flows can restore missing or corrupt future persisted service periods safely", "implemented": true, "featureIds": [ "F259", "F268" ] }, { "id": "T310", "description": "Historical invoices without persisted service-period records coexist correctly with future schedules that have them", "implemented": true, "featureIds": [ "F260" ] }, { "id": "T311", "description": "Bucket or allowance semantics remain coherent when users edit, skip, or regenerate future persisted service periods", "implemented": true, "featureIds": [ "F262" ] }, { "id": "T312", "description": "Billed-through, renewal, and replacement logic uses persisted service periods coherently after materialization", "implemented": true, "featureIds": [ "F263" ] }, { "id": "T313", "description": "Template, preset, and new-line authoring still produce predictable future persisted service-period schedules after creation", "implemented": true, "featureIds": [ "F264" ] }, { "id": "T314", "description": "Editing future persisted service periods can move work across invoice windows and grouping responds according to policy", "implemented": true, "featureIds": [ "F265" ] }, { "id": "T315", "description": "Client-facing explanations and support tooling surface service-period edits and provenance clearly enough to explain invoice outcomes", "implemented": true, "featureIds": [ "F266" ] }, { "id": "T316", "description": "DB-backed validation proves persisted service-period generation, editing, regeneration, and invoice linkage stay coherent during staged rollout", "implemented": true, "featureIds": [ "F267" ] }, { "id": "T317", "description": "Operator runbook is sufficient to diagnose service-period generation failures and override conflicts", "implemented": true, "featureIds": [ "F268" ] }, { "id": "T318", "description": "Advanced mass-edit or bulk schedule transform capabilities remain explicitly out of v1 unless the documented follow-on boundary is invoked", "implemented": true, "featureIds": [ "F269" ] }, { "id": "T319", "description": "Extending the materialized service-period ledger to time, usage, or other billing domains remains explicitly out of this recurring v1 plan", "implemented": true, "featureIds": [ "F270" ] }, { "id": "T320", "description": "DB-backed sanity: a user can inspect future persisted service periods for a client-cadence monthly recurring line before invoice generation", "implemented": true, "featureIds": [ "F236", "F250", "F257" ] }, { "id": "T321", "description": "DB-backed sanity: editing a future client-cadence service-period boundary affects due selection without rewriting billed history", "implemented": true, "featureIds": [ "F245", "F242", "F240" ] }, { "id": "T322", "description": "DB-backed sanity: skipping a future service period prevents invoice generation for that period while preserving later continuity", "implemented": true, "featureIds": [ "F246", "F242" ] }, { "id": "T323", "description": "DB-backed sanity: regeneration after a contract-line change updates only eligible future periods and preserves edited ones", "implemented": true, "featureIds": [ "F238", "F239", "F254" ] }, { "id": "T324", "description": "DB-backed sanity: billed persisted service periods become immutable after invoice linkage is created", "implemented": true, "featureIds": [ "F240", "F241" ] }, { "id": "T325", "description": "DB-backed sanity: future contract-cadence service periods can be inspected and edited before invoice generation", "implemented": true, "featureIds": [ "F237", "F245", "F250" ] }, { "id": "T326", "description": "DB-backed sanity: mixed cadence-owner recurring obligations materialize distinct future period ledgers without collision", "implemented": true, "featureIds": [ "F236", "F237", "F248" ] }, { "id": "T327", "description": "DB-backed sanity: invoice detail rows retain traceable links back to persisted service-period records after generation", "implemented": true, "featureIds": [ "F241", "F267" ] }, { "id": "T328", "description": "DB-backed sanity: runtime no longer needs to derive live recurring periods on demand once persisted service-period selection is active", "implemented": true, "featureIds": [ "F242", "F256" ] }, { "id": "T329", "description": "Plan artifacts now treat materialized service periods as in-scope v1 behavior rather than a deferred follow-on", "implemented": true, "featureIds": [ "F231", "F242", "F250" ] }, { "id": "T330", "description": "The expanded plan preserves implementation-grade detail after adding materialized service periods and editable future billing objects", "implemented": true, "featureIds": [ "F150", "F231", "F267" ] }, { "id": "T331", "description": "Contract line mapping and disambiguation helpers keep cadence_owner explicit instead of inferring recurring timing from billing_cycle_alignment or enable_proration", "implemented": true, "featureIds": [ "F124" ] }, { "id": "T332", "description": "Billing dashboard overview and invoice-generation tabs explain automatic, manual, and prepayment flows in service-period-first language", "implemented": true, "featureIds": [ "F139" ] } ]