# Status — where the project actually is

> Last verified: 2026-08-02 against commit `b876490`. Populated by phase 4 of the
> [documentation clean-up chain](../../archive/clarify-chain/README.md).

This is the page you open after two weeks away. "What's left?" now has one honest answer instead of five
unreconciled ledgers.

## The picture in one table

| | Count |
| --- | --- |
| Flows: built · partial · mocked · not started | 1 · 15 · 7 · 0 (of 23) |
| Business areas covered (of 14) | 14 — none orphaned; **area 13 (Tax, Invoicing & Legal) is weakest** |
| Backlog items — open + deferred | **262** (`BL-001`…`BL-262`) |
| — blocker | 18 |
| — major | 86 |
| — minor | 115 |
| — deferred (has a pull-trigger) | 43 |
| Backlog items — closed this phase | 88 |
| Raw candidate rows harvested (pre-dedup, across 10 sources) | ~700 |

Full detail: [backlog.md](backlog.md) (open) · [backlog-closed.md](backlog-closed.md) (closed) ·
[implemented.md](implemented.md) (business-area overlay) · [decisions.md](decisions.md) (the ADR log).

## The five things standing between here and a usable product

1. **Admin RBAC is structurally dead ([BL-001](backlog.md#blockers-18)/[BL-002](backlog.md#blockers-18)).**
   `DynamicPermissionService` grants only the literal role `admin`, which no seeded account holds — every
   admin surface 403s. This one root cause independently degrades **11 of 14 business areas**
   ([implemented.md](implemented.md#cross-cutting-the-rbac-finding)). Highest leverage fix in the backlog.
2. **The two real money rails both dead-end before completion.** Card payment redirects to a host that
   doesn't exist and nothing fires the PSP webhook locally ([BL-005](backlog.md#blockers-18)); no BNPL
   gateway is ever seeded, so every BNPL call 400s, and the wizard's own mock cross-imports a store that
   404s on any real booking id ([BL-007](backlog.md#blockers-18)/[BL-008](backlog.md#blockers-18)). Neither
   money path can be walked end-to-end from a browser today.
3. **Five domains are 100% client-mocked while a working server sits behind them** — verification, refunds,
   nurse payouts, patient/care records, and the entire partner-center portal
   ([BL-009](backlog.md#blockers-18), [BL-010](backlog.md#blockers-18), [BL-011](backlog.md#blockers-18),
   [BL-012](backlog.md#blockers-18), [BL-013](backlog.md#blockers-18)). Three of the five would also *break*
   on a naive flip — the client and server DTO shapes have drifted.
4. **The booking payment window lies to the customer.** Deadline timestamps ship with no timezone, so in
   Tehran a 30-minute countdown renders as ~4 hours and the request silently expires while the timer still
   shows time left ([BL-006](backlog.md#blockers-18)).
5. **Two pre-launch security items are live right now.** The repo's committed credentials (DB `sa`, both
   encryption-key halves, three third-party API keys) have never been rotated
   ([BL-003](backlog.md#blockers-18)), and a Development-only OTP-read endpoint is reachable on the
   production domain because the deployment runs as Development
   ([BL-004](backlog.md#blockers-18)).

## Where to go next

| Question | Answer |
| --- | --- |
| Is flow X built? | [docs/flows/index.md](../flows/index.md) — the status table, 23 flows |
| How do I test it? | [docs/flows/testing-setup.md](../flows/testing-setup.md) |
| What's the client↔server contract? | [docs/integration/index.md](../integration/index.md) |
| What are the hard rules? | [docs/rules/index.md](../rules/index.md) |
| What's open, and how bad is it? | [backlog.md](backlog.md) |
| What's already closed? | [backlog-closed.md](backlog-closed.md) |
| Which business area is built vs. mocked? | [implemented.md](implemented.md) |
| Why was X built that way? | [decisions.md](decisions.md) |
| What's next, in order? | [docs/roadmap/index.md](../roadmap/index.md) |

## How this file's numbers were produced

Five ledgers — the [hardening issues list](../../archive/post-phase/hardening/issues.md) (18 items, all
unticked since 2026-07-16), the [67-REQ contract ledger](../../archive/build-chain/working-context/frontend/requests/for-backend.md),
53 phase reports' own "Follow-ups" sections, 22 backend hand-off files' deferrals, and two rounds of raw
manual-testing notes — were harvested in full, then every hardening item, every REQ, and every manual-testing
bullet was **re-verified against the code at `b876490`**, not trusted as filed. Phase 3's **283
already-verified flow gaps** (each with a live code trace, several walked against a booted server) are this
phase's primary, freshest input and form the backbone of [backlog.md](backlog.md). Nothing here is copied
from a stale document without a fresh check — the phase-chain's own rule (["verify, don't
copy"](../../archive/clarify-chain/README.md#non-negotiables-for-every-phase)) held throughout.
