Ratifies the Mosaic Stack PRD rev1 (Jason Woltje, 2026-09-01) as project source of truth and installs the GOV.1 lifecycle model: - docs/PRD.md becomes a permanent shim (kind: shim, current_rev -> docs/PRDs/2026-08-31_PRD_rev1/). Its path never changes again. - docs/PRDs/2026-08-26_PRD_rev0/PRD.md archives the 2026-08-26 North Star verbatim (sha256 60cc2f98...36afdf unchanged). Archive, never delete. - docs/PRDs/2026-08-31_PRD_rev1/ is the frozen rev1 bundle: 18 sectioned documents (VIS, DATA, AUTHN, AUTHZ, SEAT, ROLE, HARN, PROV, SESS, UI, CLI, GOV.1-5) consolidating rev0 D1-D15, the fleet north star, the agent-runtime L1/L2 contracts and the control-plane-surfaces lane findings, with a single decision map (GOV.3) and a closed open-questions frontier (GOV.5, grill rounds 1-8). Drafting inputs (_source-* snapshots) are not shipped. Consequences of the ratified rulings carried in the same change: - Q-T1 (ruling B, "shipped but frozen"): D3 amended in GOV.3/VIS.1; federation M1-M3 acknowledged as shipped behind tier === 'federated', excluded from the v1 bar and frozen, with a security re-audit gate before any resumption. docs/MISSION-MANIFEST.md, docs/federation/MISSION-MANIFEST.md and docs/scratchpads/mvp-20260312.md get status: superseded + banners (content preserved verbatim); docs/guides/deployment.md gains a "Relationship to the PRD (D15)" section. NORTH_STAR.yaml adds dormant workstream M (projects no goals by design); NORTH_STAR.md regenerated. - Q-G2 (distinct registry prefixes): every citation of the operator DECISION-REGISTER in the bundle reads OD-nn; the stack registry stays D1-D15; L1-Dnn/L2-Dnn untouched. Prefix rule recorded in GOV.1. Follow-ups (not in this PR): CI parity drift-gate witness (Q-C1); brain-side DECISION-REGISTER rename to OD- with redirect table on its next touch.
5.9 KiB
id, status, ratified
| id | status | ratified |
|---|---|---|
| UI.1 | ratified | 2026-09-01 (Jason Woltje; PRD rev1 ratification PR) |
UI.1 — WebUI control-plane surfaces (all functions of the site)
The complete function inventory of the WebUI control plane. Every page obeys the governing rules; every control ultimately calls the same engine as the CLI.
Governing rules
- Full CLI parity — every aspect of the
mosaicCLI surfaces in the WebUI (CLI.1-parity carries the matrix obligation). - One canonical API (L2-D14; register OD-53) — CLI, TUI, WebUI, API, and automation share one CLI-backed schema, resolver, planner, authorization, transaction, validation, and audit engine. The WebUI holds no separate logic.
- The webUI sits OVER official tooling (D8/D12 hard rule) — no page ever reaches the database or filesystem around the tooling; a missing tool means the gap is "blocked on tooling" and the tool is built first.
- Strict surface separation — seat pages never modify role config; role pages never modify seat config (ROLE.1-role-governance).
- No direct settings-file authorship — settings are generated projections (L2-D19; DATA.1-record-authority).
- Agents can never reach these surfaces (L2-D13; the API refuses agent identity — the enforcement is not the page's absence).
- WebUI drafts (register OD-54) — draft configuration is revisioned server-side desired-state; drafts have no effect until planned and applied.
Interaction conventions
Logically separated pages; dropdowns, activate/deactivate buttons, drag-drop actions performed on-page.
Page inventory
| Page | Section doc | Functions |
|---|---|---|
| Seat configuration | SEAT.1-seat-profile | harness, model, reasoning, workdir, auth account, overlay; separated role-binding section |
| Role configuration | ROLE.1-role-governance | manifest editing, revision create/diff/activate/rollback, role links, projection status |
| Harness configuration | HARN.1-harness-config | install (button), enable/disable, available-models allowlist, reasoning defaults, provider link, linked accounts |
| Provider configuration | PROV.1-providers | provider dropdown, named instances, OAuth/API mode, local providers, activate/deactivate |
| Authentication | AUTHN.1-auth-accounts | in-browser OAuth establishment, account list, force renew, deactivate, allowed harnesses |
| Authorization audit | below | effective grants, escapation potential, drift |
Page: Authorization audit (closes gap G3)
Surfaces, per seat, to the user:
- Effective capability grant — the live intersection (role ∩ assignment ∩ lease ∩ workflow ∩ target policy ∩ backend).
- Misdirection potential — which seats hold capabilities that would let another seat's work be routed around its own role lane.
- Escalation potential — any path that would add capability. Should be provably empty; the audit's job is proving it stays empty.
- Drift — seats whose on-disk projection diverges from their active role
revision (
role checkclass). - Failure/blocked surfacing (register OD-64) — the canonical alert stream's WebUI adapter.
Implementation choice (dedicated auditor agent vs mechanical tooling) and the auditor-identity problem are on the grill: GOV.5-open-questions Q-A1/Q-A2.
Cross-cutting requirement
Every change made through these pages — or the CLI — automatically reconciles
authentication, settings.json, and required symlinks
(DATA.1-record-authority §reconciliation; removal-fast / addition-attested
per L2-D17). The user never touches a file.
Measured 2026-08-31 (CLI.1-parity Artifacts 2–3): the shipped WebUI
already contains two D12 violations — the admin role/ban toggles and the stored
harness/provider/model selection mutate state with no backing CLI command.
Remediation, not precedent. The server-side hierarchy/grants CRUD surface
(hierarchy.controller.ts) is the natural backing for the authorization audit
page below, but needs a CLI face and an audit read-path first.
E2 inputs (triage 2026-08-31; see GOV.2-docs-inventory)
Canonical ground truth: USER-GUIDE/product/web-dashboard.md (route-by-route
current state, incl. explicit gaps — no New Project/Task UI),
webui/PHASE-P-STRUCTURE.md (Next→Vite SPA migration).
Pending pulls: DRAFT S2 onboarding-wizard.md (D4/D11/D8),
tool-gateway-mapping.md (the D8/D12 gate made concrete), api-artifacts.md.
S2 contract feed (extraction 2026-08-31)
Full extraction record: lane S2-EXTRACTION-2026-08-31.md (per-contract cores, dependency edges, ruling cross-checks). Pulls binding on this section:
- Contract 5 verbatim-affirms the parity rule: "The webUI is a Gateway client only"; "No webUI-only command exists; a Gateway command without CLI exposure is a conformance gap." "Blocked on tooling" closure is mandatory; UI workarounds (direct DB/filesystem, legacy endpoints, domain logic in the web app) are non-conformant. This is the ratifiable D8/D12 text this section's violation findings measure against.
- Legacy non-substitutes barred from backing any P1 surface, frozen for
new consumers:
/api/projects,/api/tasksCRUD,POST /api/workspaces,/api/teamsreads,POST /api/bootstrap/setup, MCPbrain_*mutations. - Onboarding wizard (contract 3) is the reference pattern for every config page this section specifies: pure client-side composition of Gateway commands, exactly one disclosed server-side composed transaction (bootstrap finalize), wizard state always derived from canonical state — never a persisted answer file that can drift.
- Company visibility (
privatedefault vsdirectory) is a UI-facing disclosure control with a bounded existence-only carve-out. - P1 build rank order (T10): hierarchy → hierarchy RBAC → typed kanban → agent enrollment → authorized roll-up → onboarding orchestration.