Spec the v0 agency dashboard surface (Phase 0 dogfood — Dossier's own .claude/agents team on Dossier's own OKF; daily-standup / approve-ship loop)

task-agency-dashboard-v0-spec

task confidence asserted status review 2026-06-18 owner product-owner
source log-auditor — surfaced recording 0052-agentic-agency-in-a-box-and-adoption-ladder, whose Phase 0 dogfood IS the review gate (asserted→verified) and which lists a product-owner v0 dashboard spec as named follow-up work. Board globbed before filing — no open task covered the agency dashboard / daily-standup-approve-ship surface (task-board-site-surface is done = the read-only production /board; task-preview-inline-client-board is the dev-only preview inline board; neither is the agency dashboard with the approve/ship governance loop).

Spec the v0 agency dashboard surface (Phase 0 dogfood)

One loop, three faces — ship an agentic Digital Experience Agency "in a box" (the Agency) plus an adoption-ladder readout product (the Ladder) over the OKF Company Brain, dogfood-first sequenced the agentic agency dogfood-first: Phase 0 = run Dossier's own .claude/agents team on Dossier's own OKF, through a daily-standup / approve-ship loop, before any client rollout — and that Phase 0 dogfood is the named review gate that would promote DEC-0052 from asserted to verified. This task is the Product Owner v0 spec for the dashboard surface that makes Phase 0 real.

The work (v0 spec, not the build)

State the Phase-0 done-definition explicitly so it can be checked against DEC-0052's review gate: one real unit dispatched → executed → human-approved → compounded back via reconcile into git.

Why a task, not a fix-in-place

Owning what / for-whom / why / when + acceptance + success metrics for a new product surface is the Product Owner's job, not a hygiene fix. confidence: inferred (agent-filed from DEC-0052's named follow-up).

Coordinate, don't duplicate

Ordering-hint dependency on Author the agentic-agency runtime topology DEC + spec (OKF→persona/runbook/team; coordinator/dispatch; per-tenant fleet isolation; Atrium+board+reconcile+MCP composition) (the dashboard surfaces the runtime's dispatch/governance, so the topology should be specified alongside). Board globbed before filing: Render the board as a derived `/board` surface in @dossier/site is done (the read-only production /board) and Render the client's REAL board inline on the dev-only preview (the board sibling of DEC-0047's inline graph) is the dev-only inline preview board — neither is the agency dashboard with the approve/ship governance loop.

v0 BUILT (2026-06-20, forward-deployed-engineer) — status: review for product-owner acceptance

The spec asked for the surface; the operator chose working v0 code, and it is built + proven. The v0 agency governance dashboard ships as a non-prerendered (operator) SvelteKit route group (/operator) — see Build DEC-0064 Option D into running code — the v0 agency governance dashboard is a non-prerendered `(operator)` route group that reuses dispose.ts, gated behind DOSSIER_OPERATOR, which implements Governed disposition lives with the operator control plane (CLI now, local dashboard optional, deployed siloed service deferred) — the public `/board` deploy stays read-only and holds no mutation authority's Option D. It satisfies the spec's invariants:

  • Read the board for review work + each unit's diff: the dashboard reads the live tenant board via the runtime listReviewQueue, rendering each review task with the context to judge it (what the agent did = the task body narrative; what it proposes = the drain-emitted proposed_atoms diff; provenance = owner/assignee/source/confidence/sovereign-file).
  • Approve / ship / watch, human-governed: real approve/reject affordances drive the SAME approveTask/rejectTask the CLI uses (SSOT, no fork). Approve = review→done + compound into the tenant's git history; reject = review→backlog with a recorded reason.
  • Read-only-then-governed invariant: the read is always allowed; mutation is gated behind DOSSIER_OPERATOR so the public read-only /board never gains mutation authority — never an un-approved autonomous write (Inv 3 holds, the human disposes).
  • Compounding return made visible: an approve produces a real git commit in the org's own history (dossier(board): approve … → done — compounded by human), proven live against the RBA dogfood tenant.

NOT in v0 (carried forward): the per-team/per-action autonomy dial (deterministic→self-guided) and the daily-report digest ("what it did, and what it wants to do next" as a narrative) — v0 is the approve/ship/watch queue; the dial + digest are the product-owner's next slice. The deployed siloed control-plane service stays deferred behind Governed disposition lives with the operator control plane (CLI now, local dashboard optional, deployed siloed service deferred) — the public `/board` deploy stays read-only and holds no mutation authority's trigger.

WATCH face BUILT (2026-06-20, forward-deployed-engineer) — daily-report digest slice landed

The carried-forward watch / daily-report digest is now built as a read-only (operator)/activity ledger — see The WATCH face — a read-only compounding-return ledger over the board snapshot + the tenant git trail. It narrates the loop's compounding return over time from two REAL sources joined by one new runtime read (readActivityLedger, the SSOT — the app never re-derives): the board snapshot (status + approved-by/claimed_by provenance) + the tenant's own git log (dossier(board): commits). The digest narrative ("since , N compounded, M awaiting you, …") + counter tiles + the per-task ledger + the git trail are all derived purely from real state (never invented; non-derivable → null). Provenance honored (human vs agent disposition shown — Inv 3 visible). Proven live on RBA: an approve compounded task-data-estate-assessment-northwind → done (commit fb5cf00, compounded by dakota), and the watch surface reflected it (2 compounded · 1 approve event · the green HUMAN trail row), then the tenant was restored to baseline. STILL carried forward: the per-team/per-action autonomy dial (explicitly a LATER slice, DEC-0052) — the watch surface is the readout, not the control.