Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
1.9 KiB
1.9 KiB
Recurring Service-Period Coexistence
F260 defines how tenants coexist with historical invoices that were created before persisted service periods existed while future schedules and post-cutover invoices use the new ledger.
Historical Versus Future Boundary
The coexistence rule is explicit:
- historical invoices may have no persisted recurring service-period records
- future recurring schedules may still materialize persisted periods for the same tenant
- the system does not backfill historical invoices into synthetic persisted future-period rows just to make the ledger look uniform
This keeps migration additive instead of rewriting billed history.
Reader Behavior During Coexistence
Readers must continue to distinguish:
- canonical recurring detail periods when they exist
- historical invoice-header or flat-row fallback timing when canonical detail periods do not exist
- future persisted schedule rows that have not yet produced an invoice
That lets support and finance inspect future billing intent without pretending older invoices were produced from the same persistence model.
Migration And Regeneration Rule
During coexistence:
- backfill/materialization starts from the future billed-history boundary, not from the tenant’s entire invoice history
- regeneration affects only eligible future periods
- historical invoice reads stay on the earlier dual-shape compatibility contract
The future ledger and the historical invoice reader therefore move together without requiring retroactive invoice mutation.
Deliberate Boundary
This checkpoint still does not define:
- historical invoice backfill into persisted service-period records
- one-shot schema-version collapse that removes dual-shape invoice support
- archival policy for long-lived tenants with both historical flat invoices and large future ledgers
Those remain sequenced behind F267-F270.