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

637 lines
19 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[
{
"id": "T001",
"description": "The PRD and scratchpad explicitly state that multiple concurrent active `client_contracts` assignments for one client are allowed.",
"implemented": true,
"featureIds": [
"F001",
"F048"
]
},
{
"id": "T002",
"description": "The PRD and scratchpad explicitly state that invoices remain scoped to exactly one `client_contract_id` even when a client has multiple active contracts.",
"implemented": true,
"featureIds": [
"F002",
"F003",
"F048"
]
},
{
"id": "T003",
"description": "Plan/runbook notes explicitly record that historical schema/migrations never enforced a single-active-contract uniqueness rule at the database layer.",
"implemented": true,
"featureIds": [
"F004",
"F048"
]
},
{
"id": "T004",
"description": "The mixed-currency rule has an explicit documented disposition in the plan instead of remaining an accidental side effect of the singleton rule.",
"implemented": true,
"featureIds": [
"F005",
"F048"
]
},
{
"id": "T005",
"description": "Wizard basics allows selecting a client that already has another active contract.",
"implemented": true,
"featureIds": [
"F006"
]
},
{
"id": "T006",
"description": "Quick-add/edit contract dialog allows selecting a client that already has another active contract.",
"implemented": true,
"featureIds": [
"F007"
]
},
{
"id": "T007",
"description": "Wizard UI no longer shows the warning instructing users to terminate the current contract or save as draft before creating another active contract.",
"implemented": true,
"featureIds": [
"F008"
]
},
{
"id": "T008",
"description": "Quick-add/edit dialog no longer disables submit because another active contract exists for the selected client.",
"implemented": true,
"featureIds": [
"F009"
]
},
{
"id": "T009",
"description": "ClientContractsTab restore flow succeeds even when the client already has another active contract.",
"implemented": true,
"featureIds": [
"F010"
]
},
{
"id": "T010",
"description": "ClientContractsTab set-to-active flow succeeds even when the client already has another active contract.",
"implemented": true,
"featureIds": [
"F011"
]
},
{
"id": "T011",
"description": "Alternate `Contracts.tsx` restore/set-active actions no longer reject solely because another active contract exists.",
"implemented": true,
"featureIds": [
"F012"
]
},
{
"id": "T012",
"description": "Static/wiring coverage proves no live billing UI flow still passes active-contract-derived `disabledClientIds` or singleton checks to block client selection.",
"implemented": true,
"featureIds": [
"F006",
"F007",
"F013",
"F048"
]
},
{
"id": "T013",
"description": "`updateContract(... status: 'active')` no longer rejects because another active contract exists for one of the assigned clients.",
"implemented": true,
"featureIds": [
"F014"
]
},
{
"id": "T014",
"description": "Expired contract reactivation no longer rejects because a different active contract exists for the same client.",
"implemented": true,
"featureIds": [
"F015"
]
},
{
"id": "T015",
"description": "Static or unit coverage proves `hasActiveContractForClient(...)` is removed or no longer used by activation/write flows as a business invariant.",
"implemented": true,
"featureIds": [
"F016",
"F023",
"F048"
]
},
{
"id": "T016",
"description": "Static or unit coverage proves `getClientIdsWithActiveContracts(...)` is removed or no longer used to block product flows.",
"implemented": true,
"featureIds": [
"F017",
"F013",
"F048"
]
},
{
"id": "T017",
"description": "Billing contract model wrappers around singleton helper functions are removed or reduced to non-blocking diagnostics-only behavior.",
"implemented": true,
"featureIds": [
"F018"
]
},
{
"id": "T018",
"description": "Billing wizard create path and clients assignment path both allow the same concurrent active assignment state instead of diverging by entry point.",
"implemented": true,
"featureIds": [
"F019",
"F023"
]
},
{
"id": "T019",
"description": "Shared assignment create flow allows overlapping active assignments for the same client when all other invariants are satisfied.",
"implemented": true,
"featureIds": [
"F020"
]
},
{
"id": "T020",
"description": "Shared assignment update flow allows overlapping active assignments for the same client when all other invariants are satisfied.",
"implemented": true,
"featureIds": [
"F021"
]
},
{
"id": "T021",
"description": "Existing invoiced-period guard still blocks moving assignment dates across already invoiced service periods after singleton rule removal.",
"implemented": true,
"featureIds": [
"F022"
]
},
{
"id": "T022",
"description": "Packages/clients create/update code delegates to the shared assignment validation path instead of maintaining duplicate overlap/singleton enforcement.",
"implemented": true,
"featureIds": [
"F023"
]
},
{
"id": "T023",
"description": "`packages/clients` assignment selection state supports two active rows with the same `contract_id` because identity is keyed by `client_contract_id`.",
"implemented": true,
"featureIds": [
"F024"
]
},
{
"id": "T024",
"description": "Assignment create/apply flow uses the returned `client_contract_id` instead of re-finding the first assignment by `contract_id`.",
"implemented": true,
"featureIds": [
"F025"
]
},
{
"id": "T025",
"description": "DB-backed integration proves client contract-line reads are assignment-scoped and do not duplicate or cross-associate rows when two active assignments share the same `contract_id`.",
"implemented": true,
"featureIds": [
"F026"
]
},
{
"id": "T026",
"description": "Contract-line add flow carries explicit `client_contract_id` context from UI to action layer.",
"implemented": true,
"featureIds": [
"F027",
"F028"
]
},
{
"id": "T027",
"description": "Contract-line edit flow is explicit about assignment scope versus shared line scope and no longer presents assignment-scoped editing on top of line-scoped mutation implicitly.",
"implemented": true,
"featureIds": [
"F027",
"F028"
]
},
{
"id": "T028",
"description": "Contract-line remove flow targets the intended active assignment and cannot silently act on a sibling active assignment.",
"implemented": true,
"featureIds": [
"F027",
"F028"
]
},
{
"id": "T029",
"description": "BillingConfiguration and related clients screens refresh lines and overlap data immediately after assignment create/edit/deactivate actions.",
"implemented": true,
"featureIds": [
"F029"
]
},
{
"id": "T030",
"description": "Assignment detail dialogs, line counts, and line names derive from the selected `client_contract_id` only.",
"implemented": true,
"featureIds": [
"F030"
]
},
{
"id": "T031",
"description": "Disambiguation help/copy no longer promises a hidden most-recent-assignment fallback.",
"implemented": true,
"featureIds": [
"F031"
]
},
{
"id": "T032",
"description": "Audit coverage or focused tests prove no remaining targeted `packages/clients` UI flow relies on `contract_id` as the unique active assignment identity.",
"implemented": true,
"featureIds": [
"F032"
]
},
{
"id": "T033",
"description": "Recurring due-work returns separate invoice candidates for two active assignments on the same client and invoice window.",
"implemented": true,
"featureIds": [
"F033"
]
},
{
"id": "T034",
"description": "Previewing one selected client-cadence recurring candidate includes only charges for its `client_contract_id`.",
"implemented": true,
"featureIds": [
"F034",
"F038"
]
},
{
"id": "T035",
"description": "Generating one selected client-cadence recurring candidate creates an invoice only for its `client_contract_id`.",
"implemented": true,
"featureIds": [
"F035",
"F038"
]
},
{
"id": "T036",
"description": "Regression coverage proves recurring preview no longer re-expands a selected candidate into all due work for the same client and invoice window.",
"implemented": true,
"featureIds": [
"F034"
]
},
{
"id": "T037",
"description": "Regression coverage proves recurring generation no longer re-expands a selected candidate into all due work for the same client and invoice window.",
"implemented": true,
"featureIds": [
"F035"
]
},
{
"id": "T038",
"description": "Fixed recurring charges from concurrent assignments that share the same base contract/template line stay separated by `client_contract_id` and do not collapse onto the first assignment.",
"implemented": true,
"featureIds": [
"F036"
]
},
{
"id": "T039",
"description": "A client-cadence materialization gap on one assignment blocks only that assignments candidate and not unrelated candidates for the same client window.",
"implemented": true,
"featureIds": [
"F037"
]
},
{
"id": "T040",
"description": "If mixed-assignment charges accidentally reach invoice generation, the preserved single-assignment invariant fails explicitly with a user-readable error rather than silent misattribution.",
"implemented": true,
"featureIds": [
"F038"
]
},
{
"id": "T041",
"description": "Recurring preview rendering distinguishes concurrent contracts that share the same display name.",
"implemented": true,
"featureIds": [
"F039"
]
},
{
"id": "T042",
"description": "Invoice query and contract-detail surfaces continue to show a generated invoice under the correct contract assignment for a client with multiple active contracts.",
"implemented": true,
"featureIds": [
"F040"
]
},
{
"id": "T043",
"description": "PO overage and consumption remain tied to `invoice.client_contract_id` and are unaffected by sibling active assignments for the same client.",
"implemented": true,
"featureIds": [
"F003",
"F040"
]
},
{
"id": "T044",
"description": "Recurring due-work grouping continues to use `purchaseOrderScopeKey = client_contract_id` so contract-scoped invoices remain separable for multi-active clients.",
"implemented": true,
"featureIds": [
"F002",
"F003",
"F033"
]
},
{
"id": "T045",
"description": "BillingCycles summary shows multiple active assignments or an explicit multi-assignment representation instead of collapsing to the first active contract row.",
"implemented": true,
"featureIds": [
"F041"
]
},
{
"id": "T046",
"description": "Bucket usage with multiple overlapping eligible assignments fails explicitly or requires disambiguation instead of silently choosing the latest-start assignment.",
"implemented": true,
"featureIds": [
"F042"
]
},
{
"id": "T047",
"description": "Contract report/dashboard wording is updated where assignment counts were previously mislabeled as billable clients or singular contracts.",
"implemented": true,
"featureIds": [
"F043"
]
},
{
"id": "T048",
"description": "Audit notes and focused tests record which reporting/export/accounting surfaces are already assignment-safe and confirm no hidden active-contract selector remains in the targeted files.",
"implemented": true,
"featureIds": [
"F044",
"F048"
]
},
{
"id": "T049",
"description": "`createFixedPlanAssignment` or equivalent billing fixture helper can explicitly seed concurrent assignments with header and assignment lifecycle knobs.",
"implemented": true,
"featureIds": [
"F045"
]
},
{
"id": "T050",
"description": "A dedicated test helper can create two or more concurrent assignments for one client via direct DB inserts or `TestContext.createEntity(...)` without guarded production APIs.",
"implemented": true,
"featureIds": [
"F046"
]
},
{
"id": "T051",
"description": "Legacy tests that query `where({ client_id }).first()` or depend on latest-assignment semantics are updated to assert explicit assignment IDs instead.",
"implemented": true,
"featureIds": [
"F047"
]
},
{
"id": "T052",
"description": "Static guard coverage fails if new billing or clients code reintroduces singleton UI/action patterns such as active-contract client disabling or 'already has an active contract' write blockers.",
"implemented": true,
"featureIds": [
"F048"
]
},
{
"id": "T053",
"description": "`docs/billing/billing.md` no longer states that assigning a contract to a client must ensure no overlap with other active contracts.",
"implemented": true,
"featureIds": [
"F048"
]
},
{
"id": "T054",
"description": "The contract purchase order plan/runbook language is updated to reflect preserved single-assignment invoice scope without treating 'single active contract per client' as a prerequisite.",
"implemented": true,
"featureIds": [
"F003",
"F048"
]
},
{
"id": "T055",
"description": "End-to-end billing flow: both the full wizard and quick-add path can create a second active contract for the same client.",
"implemented": true,
"featureIds": [
"F006",
"F007",
"F008",
"F009",
"F019"
]
},
{
"id": "T056",
"description": "End-to-end clients billing flow: two active assignments for the same client render separately and remain independently selectable even when they share the same base `contract_id`.",
"implemented": true,
"featureIds": [
"F024",
"F025",
"F026",
"F030",
"F032"
]
},
{
"id": "T057",
"description": "Adding a line to one active assignment does not leak that line into a sibling assignments rendered line set.",
"implemented": true,
"featureIds": [
"F026",
"F027",
"F028"
]
},
{
"id": "T058",
"description": "Editing or removing a line in one active assignment does not unexpectedly mutate sibling assignment rendering or targeting.",
"implemented": true,
"featureIds": [
"F027",
"F028",
"F029",
"F030"
]
},
{
"id": "T059",
"description": "Client service overlap matrix or equivalent overlap rendering shows explicit assignment identity for concurrent assignments instead of a collapsed contract view.",
"implemented": true,
"featureIds": [
"F026",
"F029",
"F030",
"F032"
]
},
{
"id": "T060",
"description": "A same-client pair of active contracts using different cadence ownership models both materialize and remain independently invoiceable without candidate contamination.",
"implemented": true,
"featureIds": [
"F033",
"F034",
"F035",
"F037",
"F040"
]
},
{
"id": "T061",
"description": "Invoice preview, generation, and invoice history for a client with two active contracts show two separate invoices linked back to the correct contract assignments.",
"implemented": true,
"featureIds": [
"F034",
"F035",
"F040"
]
},
{
"id": "T062",
"description": "The mixed-currency rule behavior matches the plans documented decision and no longer piggybacks implicitly on the removed single-active-contract guard.",
"implemented": true,
"featureIds": [
"F005",
"F019",
"F048"
]
},
{
"id": "T063",
"description": "Repo-wide static or search-based coverage proves no live write/activation path still uses `hasActiveContractForClient(...)` to block concurrent active assignments.",
"implemented": true,
"featureIds": [
"F016",
"F023",
"F048"
]
},
{
"id": "T064",
"description": "Repo-wide static or search-based coverage proves no live product flow still uses `getClientIdsWithActiveContracts(...)` to disable selection or submission.",
"implemented": true,
"featureIds": [
"F017",
"F013",
"F048"
]
},
{
"id": "T065",
"description": "BillingCycles ordering and summary rendering do not hide sibling active assignments for the same client when one starts later than the other.",
"implemented": true,
"featureIds": [
"F041"
]
},
{
"id": "T066",
"description": "Bucket usage ambiguity failure includes enough assignment/context information for a user or engineer to resolve the conflict instead of silently billing the wrong contract.",
"implemented": true,
"featureIds": [
"F042"
]
},
{
"id": "T067",
"description": "Recurring preview/grouping with same-named concurrent contracts remains visually distinct through explicit assignment or contract context labels.",
"implemented": true,
"featureIds": [
"F039"
]
},
{
"id": "T068",
"description": "DB-backed integration proves billing-flow-created and clients-flow-created concurrent active assignments persist with the same final allowed state and no hidden asymmetry.",
"implemented": true,
"featureIds": [
"F019",
"F023"
]
},
{
"id": "T069",
"description": "Contract header activation/reactivation continues to work based on header and assignment lifecycle state and is not blocked by sibling active assignments.",
"implemented": true,
"featureIds": [
"F014",
"F015"
]
},
{
"id": "T070",
"description": "The wizards mixed-currency behavior is explicitly covered by tests or documented non-goal handling rather than remaining an incidental blocker of multi-active contracts.",
"implemented": true,
"featureIds": [
"F005",
"F019"
]
},
{
"id": "T071",
"description": "Runbook/migration notes explicitly record that invoice tables already snapshot `client_contract_id`, so removing the singleton rule does not require a schema redesign to preserve single-assignment invoices.",
"implemented": true,
"featureIds": [
"F002",
"F003",
"F004",
"F048"
]
},
{
"id": "T072",
"description": "Assignment-safe reporting/export/accounting surfaces show no functional regression after singleton rule removal and only receive wording updates where necessary.",
"implemented": true,
"featureIds": [
"F043",
"F044"
]
}
]