# User journeys — mod-cms

Audience: AI coding agents first.

Journey contracts for `apps/mod-cms`. Format and protocol: see `02-format.md`.

Gate (run from the monorepo root, `/home/user/Projects/platform`):

```text
node ~/.claude/skills/create-journeys/scripts/validate-journeys.mjs apps/mod-cms/docs/user_journeys --project-root .
```

## Catalog

| ID | Title | Actors | Surface | Readiness | Canonical | Canonical file |
|---|---|---|---|---|---|---|
| UJ-001 | First-run install claims the site and creates the only admin | anonymous-operator | install-wizard | blocked | false | `UJ-001-first-run-install.md` |

## Readiness

- **UJ-001 — blocked on SP-001, SP-002.** The contract is gate-`VALID` and every known hop is traced;
  it is blocked only on two harness seams that do not exist (post-commit response-loss fault,
  concurrency barrier). Both are recorded in `scan-problems.md` and are the work list. The H1/A1/A2/A3
  branches are derivable and runnable today against the ops-gated fresh-branch fixture.

No journey has been verified by execution yet — no derived E2E test exists. Per the skill, a journey
is a hypothesis until its test runs.

## Next ranks (not yet authored)

Ranked by blast radius; reasons recorded in `scan-problems.md`.

1. Admin authenticates and reaches the dashboard (`POST /api/admin/session`) — authn boundary.
2. Admin grants/revokes/disables another principal's access (`/api/admin/users/*`) — authority boundary.
3. Content transitions draft → scheduled → published (`/api/admin/publish`, `schedule`, `unpublish`, `visibility`) — durable state machine.
4. Anonymous visitor submits the contact form (`POST /api/contact`) — multi-step durable side-effect.
