Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

1.5 KiB

Recurring Service-Period Edit Conflicts

F249 defines the first explicit conflict surface between preserved user edits and later source-rule regeneration.

Conflict Rule

When regeneration encounters a preserved user-edited override, it must not silently overwrite the row and it must not silently discard the conflict either.

shared/billingClients/regenerateRecurringServicePeriods.ts now surfaces explicit conflict records while still preserving the edited row.

Conflict Kinds

The first v1 conflict kinds are:

  • missing_candidate
  • service_period_mismatch
  • invoice_window_mismatch
  • activity_window_mismatch

These conflicts mean:

  • no current regenerated candidate still maps to the preserved override slot
  • or the regenerated candidate now disagrees with the preserved override on canonical service-period or due-window boundaries

Current Handling

The v1 handling rule is conservative:

  • preserved user edits remain active
  • conflicting source candidates are not allowed to overwrite them
  • regeneration surfaces the conflict record so later UI/API or operator tooling can explain why the override now diverges from source rules

This makes the disagreement explicit instead of leaving it as silent candidate discard.

Deliberate Boundary

This checkpoint still does not define:

  • operator-facing repair UI
  • automatic merge rules between source changes and user edits
  • bulk conflict resolution across many schedules

Those remain sequenced behind F250-F259.