[Story-1082] Clients catalog + detail → forum gold-standard parity

Story 1082Epic None28 files · +1139/−1341

PR #254 · pramaan-io/pramaan-app · merged 2026-06-08

Why this matters

One careless delete orphans fourteen matters.

Active, archived, and erased clients sat in the same list.

Optimistic UI + unguarded delete = silent data loss.

The fix — Archive to shelve, never erase what's in use.

How it flows

sequenceDiagram
  autonumber
  participant user as Front desk (UI)
  participant cache as Guest ledger (cache)
  participant api as Reception server (API)
  user->>cache: click Archive
  cache->>cache: flip status → archived
  cache->>api: POST /archive
  api->>api: assertContract (HR-21)
  api->>cache: 200 OK
  user->>user: router.refresh()
  user-->>api: Delete (in-use)
  api->>api: re-emit 409 pramaan.client.in_use

Files changed (28)

File±
docs/walkthroughs/story-1082-walkthrough.html+177
messages/en.json+11 −1
messages/hi.json+11 −1
src/app/[locale]/(workspace)/clients/clients-client.test.tsx ★+127
src/app/[locale]/(workspace)/clients/clients-client.tsx ★+108 −12
src/app/[locale]/(workspace)/clients/clients-table-row.tsx+62 −4
src/app/[locale]/(workspace)/clients/clients-table.tsx+19 −2
src/app/[locale]/(workspace)/clients/clients-tabs.tsx+0 −41
src/app/[locale]/(workspace)/clients/clients-view.tsx+81 −4
src/app/[locale]/(workspace)/clients/presentation.ts+27 −12
src/app/api/internal/clients/[clientId]/archive/route.ts+29
src/app/api/internal/clients/[clientId]/route.ts+96
src/app/api/internal/clients/[clientId]/unarchive/route.ts+29
src/components/clients/ArchiveClientDialog.stories.tsx+0 −60
src/components/clients/ArchiveClientDialog.tsx+0 −106
src/components/clients/ClientsListPage.stories.tsx+0 −150
src/components/clients/ClientsListPage.test.tsx+0 −138
src/components/clients/ClientsListPage.tsx+0 −657
src/components/clients/README.md+0 −9
src/components/clients/client-detail-actions.tsx ★+147
src/components/clients/client-detail-header.tsx+3 −6
src/components/clients/client-row.stories.tsx+0 −19
src/components/clients/client-row.tsx+0 −64
src/components/clients/clients-cache-pilot.stories.tsx+7 −1
src/components/clients/clients-table.stories.tsx+98 −7
src/components/clients/clients-table.tsx+0 −47
src/lib/clients/gateway.ts+100
src/lib/kubb-client.ts+7