diff --git a/STATUS.md b/STATUS.md index 8aed106..ce94f13 100644 --- a/STATUS.md +++ b/STATUS.md @@ -68,7 +68,7 @@ header stacks instead of overlapping the title). | --- | --- | | `npm install` | clean | | `npm run typecheck` (root + workspaces) | clean, no errors | -| `npm test` (`vitest run`) | **416 tests pass across 85 files** (5 Postgres-gated skipped) | +| `npm test` (`vitest run`) | **473 tests pass across 94 files** (5 Postgres-gated skipped) | The 416 figure is the live `vitest run` count measured 2026-07-19; the suite has grown from the D18 go-live cluster through the D20–D33 work (tickets, module fields, diff --git a/apps/hq-web/src/pages/ClientDetail.tsx b/apps/hq-web/src/pages/ClientDetail.tsx index c9e78b5..70994a0 100644 --- a/apps/hq-web/src/pages/ClientDetail.tsx +++ b/apps/hq-web/src/pages/ClientDetail.tsx @@ -1391,9 +1391,10 @@ function SecretField(props: { cm: ClientModule; field: FieldDef; managerial: boo * module status (installed/live) exactly as before. Three steps instead hand off to a * dialog the parent (`ClientDetail`) owns, because each needs data this component does * not hold: - * - the advance/balance **payment** steps call `onTickPayment` → `PaymentPickerDialog`, - * which links a real ledger payment (`setMilestone(..., paymentId)`) rather than - * stamping a bare date; + * - the **payment** step (`payment_received`, plus the legacy `advance_payment` / + * `balance_payment` keys on un-migrated projects) calls `onTickPayment` → + * `PaymentPickerDialog`, which links a real ledger payment + * (`setMilestone(..., paymentId)`) rather than stamping a bare date; * - the `account_creation` **credentials** step calls `onTickCreds` → * `CredentialsDialog`, which captures the module's provider/username/password * (managerial gate) at the moment the account actually exists; @@ -1439,7 +1440,10 @@ function StatusLine(props: { const done = ms?.filter((m) => m.done).length ?? 0 // current = first not-done step const currentKey = ms?.find((m) => !m.done)?.key - const isPaymentStep = (key: string) => key === 'advance_payment' || key === 'balance_payment' + // `payment_received` is the key every shipped template uses; advance_/balance_payment are + // legacy keys that still exist on projects not yet run through the onboarding migration. + const isPaymentStep = (key: string) => + key === 'payment_received' || key === 'advance_payment' || key === 'balance_payment' const isCredsStep = (key: string) => key === 'account_creation' const isDocumentStep = (key: string) => key === 'quotation_sent'