---
name: construct-help
description: "Read-only Constitution status dashboard — independently re-derives the trackers' numbers (board-integrity check), then reports current lifecycle phase, progress snapshot, registry roll-ups, open backlogs, and decisions awaiting a human, then an interactive next-action prompt. Writes nothing itself; hands off to /construct-run or the completeness-sweep skill on your pick. Usage: /construct-help"
argument-hint: "(no arguments)"
model: sonnet
---
> **Specialization:** Read `CLAUDE.md` first and bind every `<…>` placeholder and every "per `CLAUDE.md`" reference from it (project/module names, paths, registries, journeys, naming grammar, the prototype location + its conditional/state idiom, the built-UI root + route-declaration idiom, the stub-marker idiom, the deferral-ticket grammar). This file hard-codes no project value. If a needed value is missing from `CLAUDE.md`, STOP-and-ask. See `SPECIALIZE.md`.

You are producing a **read-only status dashboard** for this project's Constitution-Kit build. The dashboard itself **writes nothing** — touch no file, edit no tracker. You emit the report below, then ask the user which action to take next and hand off to the corresponding command (which does any writing, never you).

> **The stance that makes this command worth running: the trackers are evidence, not testimony.** A board records what an integration *claimed*, and its derived sections (roll-ups, totals, "next", "blocked") are written once and inherited forward — so they rot silently while the rows beside them stay correct. A dashboard that merely re-prints a board faithfully re-prints its errors, and is most confident exactly when it is most wrong. **So you re-derive before you report** (§0), and any divergence leads the report.

## Sources to read (read-only)
- `CLAUDE.md` §1 ("Current state") — the one-line project state; and its module map.
- `CONSTITUTION.md` §2 — the lifecycle table (phase → gate to advance); **§9** — the gates and the "what a gate cannot see" caveat.
- `docs/PROGRESS.md` — the durable-status block at the top, and the newest dated entries. The file is large; read the top block + the first one or two dated sections only.
- `docs/SCREEN_REGISTRY.md` — per-screen lifecycle counts (☐ ◐ ✅), roll-up, working set, any drift section.
- `docs/WORKFLOW_REGISTRY.md` — the "Roll-up" and "Working set" sections (sweep board `E B G R I`).
- `docs/INTERACTION_REGISTRY.md` — affordance-closure roll-up, if present.
- The project's reconstruction-backlog and design-sync-plan docs (named in `CLAUDE.md`, if maintained).
- The **design-backlog board** + its design-prompts companion — net-new screens with **no prototype source yet**: `☐ Needs Design` rows, the Must-have subset, each row's lane.
- The **build-backlog board** (if maintained) — work whose design already exists: reconstruction gaps (authored-but-unreproduced), wiring gaps (drawn-but-inert), and the data-seam ticket ledger.
- `docs/APPROVAL_INBOX/` — every file is a parked decision; read each one's heading/first lines.
- **The session ledger, if wired** (per `CLAUDE.md` / `.claude/session-ledger.config.json`; default `docs/runs/RUN_STATE.*.json`, `docs/journal/`, `docs/STATUS.md`) — every `RUN_STATE` shard is a session: an **ACTIVE foreign session with write-claims is a finding that LEADS the report** (Law 3 — coordinate before recommending any board-writing action); a session that closed `(no story)` is surfaced under "Decisions to be made" (its journal envelope holds the reconstructable asks); `STATUS.md` is derived — cross-check its stamp HEAD against the current HEAD and flag it stale if behind. Absent the ledger: report `n/a - not configured in CLAUDE.md`.

## Detect current phase (shared routine — also used by /construct-run)
Infer the active lifecycle phase from the trackers, do not assume:
1. **Phase 4 (Found)** is ✅ when `WORKFLOW_REGISTRY` Roll-up shows the foundation (phase 4) complete.
2. **Phase 2 (Reconstruct)** of the original screen set is ✅ when `SCREEN_REGISTRY` shows every original-route row ✅ **and §0's branch-coverage check (C3) is clean**. Track drift screens as a **phase-2 overlay backlog**, not as "phase 2 incomplete".
3. **Phase 5 (Build)** is the active phase when foundation ✅ **and** original reconstruction ✅ **and** ☐ workflows remain in `WORKFLOW_REGISTRY`.
4. **Phase 6 (Harden)** is active only when no ☐ workflows remain and deferred-to-Harden items exist.
5. **Phases 0/1** are historical (PRD + prototype exist).

Report the active phase **plus** any drift/backlog overlay. **If §0 found a divergence that changes the phase answer, report the re-derived phase and say the board disagrees** — do not defer to the board.

---

## §0. Board integrity — re-derive before you report (run this FIRST)

Eleven mechanical checks, from the `completeness-sweep` skill (Part A). They are greps and arithmetic — cheap enough to run every time. Read that skill for the full method and its false-positive traps; bind each idiom from `CLAUDE.md`. C9–C11 depend on optional kit capabilities and degrade to `n/a` rather than fail when a project's `CLAUDE.md` does not bind them.

Emit a compact table: check · `✅ consistent` or `⚠ <divergence>` · the two numbers you compared.

| # | Check | Re-derive by |
|---|---|---|
| **C1** | **Arithmetic** — do the roll-ups sum? | Sum each board's per-module/per-row column; compare to its stated total. A total that no longer sums also means the prose beside it is likely stale. |
| **C2** | **Corpus vs registry** — one row per built surface? | Count route declarations under the built-UI root; compare to registry rows. Then glob for **route-less surfaces** (modals / overlays / dialogs) — systematically invisible to a registry that counts routes, and **a surface with no row reads as "done" to every downstream gate**. Also diff the module set on disk against `CLAUDE.md`'s module map. |
| **C3** | **Branch coverage** — does each reconstructed screen reproduce its source's states? | For the `R ✅` rows: count the prototype state keys a screen owns vs the conditional branches the built file renders. **This is the check a render / HTTP-200 gate structurally cannot perform** — an unreproduced branch renders as a perfectly clean page. |
| **C4** | **Marker census** — does the code know about work the boards don't? | Count distinct in-code deferral tickets + visible stub markers; compare to open backlog rows. A large asymmetry *is* the finding. Filter ticket-shaped false positives (event names, SKUs, format templates) before reporting a count. |
| **C5** | **Staleness** — is any board asserting what the log contradicts? | Read each board's header / working-set / "next" / "blocked" **prose** (not just its rows) against the newest progress entries. Flag any "blocked on X" the log records as delivered, any "next" naming an exited phase, and any in-code file header describing shipped work as pending. |
| **C6** | **Backlog charter** — is every row on the board that owns it? | For each design-backlog row, grep the prototype for the state key behind its affordance. **A row with a prototype anchor is misfiled** — it is a reconstruction gap, and re-designing it would overwrite the contract (Law 1). Run the inverse on build-backlog rows. |
| **C7** | **Measured tests** — is the asserted count a measurement or a copy? | Run the project's test command; report actual pass/fail with the output. Distinguish ticketed red from new red. A copied count drifts as fast as a fabricated one. |
| **C8** | **Corpus ground truth** — does every claimed unit have tracked source? | Count build units with tracked source (a directory of ignored build residue is not a unit), cross-check solution membership, diff against `CLAUDE.md`'s module map. |
| **C9** | **Graph freshness** — is the code index behind the newest merge? | Query the graph MCP's index status; compare to the newest merge. `n/a — not configured in CLAUDE.md` if no graph is bound. |
| **C10** | **Metrics written** — has the quantitative memory been appended to? | Check the metrics dir for any written line. Empty after N sweeps means the retry-graduation trigger is inert. `n/a — not configured in CLAUDE.md` if unbound. |
| **C11** | **Kit + contracts drift** — is the framework where it says it is? | Installed kit vs manifest vs declared overrides; contracts snapshot `approved ⊆ generated`. `n/a — not configured in CLAUDE.md` if unbound. |

**Reporting rules for §0:**
- **A divergence is a finding, not something to quietly reconcile.** Report both numbers and let the human see the gap.
- **If any check trips, §0 leads the report** — above "Where we are" — and say plainly which board is wrong.
- If all eleven are clean, collapse §0 to one line: `Board integrity: 11/11 consistent (C1…C11)`.
- Name any check you could not run and why (an idiom missing from `CLAUDE.md`, an unreadable corpus). **An unrun check is never a passing check.**
- You remain read-only: these are greps. **Do not fix what you find** — route it into the next-action prompt.

---

## The report — emit these five informational sections, then ask for the next action

### 1. Where we are
The active lifecycle phase (with its `CONSTITUTION.md §2` gate-to-advance) + the one-line state from `CLAUDE.md §1`. Note any overlay drift, and any §0 divergence that changes this answer.

### 2. Progress snapshot
Distilled from `PROGRESS.md`: foundation status; reconstruction (X/Y screens + drift count); build (N sweeps complete / total workflows, naming the completed ones); then the **3 newest** dated activity-log lines verbatim-ish (trimmed). **Where §0 re-derived a number, show the re-derived one and mark the board's claim as stale.**

### 3. Registry roll-up
- `SCREEN_REGISTRY`: counts of ☐ / ◐ / ✅ (and the drift subset).
- `WORKFLOW_REGISTRY`: sweeps complete (I ✅), in progress (◐), blocked (⚠), total; plus the golden-journey status.

### 4. Backlogs
- **Design backlog** — `☐ Needs Design` rows: count + Must-have subset + suggested lane. Net-new screens with **no prototype source yet**.
- **Build backlog** (if maintained) — open rows by class: **reconstruction gaps** (authored in the prototype, never reproduced — Law-1 defects, not future features), **wiring gaps** (drawn but inert), **data-seam tickets**. Name the highest-**fan-out** blocking item: one unbuilt surface commonly blocks several rows across several screens, and that is what to build first.
- **Reconstruction backlog / drift** — the design-sync-plan waves + any new/drift modules.
- **Deferred-to-Harden** — items lifted from the PROGRESS working set (live e2e / a11y / visual / perf / security).

### 5. Decisions to be made
Every file in `docs/APPROVAL_INBOX/` (ignore `.gitkeep`) as a one-line bullet: filename → one-line gist → **pending** or **resolved**. Surface here any prototype-vs-spec conflict, plus any **honesty defect** §0 or the build backlog flagged — an input captured then silently dropped, or a real write over an unmarked fixture. Those outrank ordinary backlog rows: they want a ruling, not a queue position.

## Then — ask for the next action (interactive)
After the sections, do **not** just print a recommendation as text. Derive 2–4 concrete next actions from the **live state you just read** and present them with the **AskUserQuestion** tool (header: `Next action`; question: "What would you like to do next?"):
- **First option = the recommended action**, suffixed " (Recommended)", with a one-line rationale and the exact command it maps to.
- **If §0 tripped, the recommended action is to close that gap**, not to advance the phase — *a phase gate evaluated against a board known to be wrong is not a gate.* Offer the full `completeness-sweep` (Part B: corpus classification) when C2/C3/C4 diverge; the specific board fix when C1/C5/C6 diverge.
- **Alternatives drawn from what is actually open** — *Build the next ☐ workflow* → `/construct-run 5`; *Clear the next drift wave* → `/construct-run 2`; *Specify the next module* → `/construct-run 3`; *Design the next backlog screens (in-repo lane)* → `/design-build next` (or `must-have`), which dispatches the `design-builder` agent over scaffold-conforming rows, with console-lane rows pointing at the design-prompts board + `/promote-design`; *Reconstruct the highest-fan-out reconstruction gap* → `/reconstruct <route>` (re-sync mode, wiring preserved); *Resolve a parked decision* → name the specific `docs/APPROVAL_INBOX/` file.
- **Always include** a "Just the dashboard — do nothing now" option.

On the user's choice, hand off immediately:
- A build / specify / reconstruct / sweep action → invoke the corresponding command or skill so it proceeds.
- "Resolve a parked decision" → open the named `docs/APPROVAL_INBOX/` file and walk the user through it.
- "Do nothing" → end the turn.

## Invariants
- **Read-only dashboard.** You edit no file yourself — §0 included. The only thing you *do* is ask the user to pick a next action and hand off; that target does any writing, never this command.
- **Never present a board's number you did not re-derive or explicitly mark as unverified.** "The registry says N (not re-derived this run)" is acceptable; presenting N as fact is not.
- Keep it scannable: short bullets, real numbers (Law 12 voice — numbers + units, sentence case).
- Every claim traces to a source file you actually read this run; if a source is missing or stale, say so rather than inventing a status.
- **A clean §0 is not proof of completeness** — it is eleven cheap checks passing (`CONSTITUTION.md §9`, "what a gate cannot see"). Before a phase-exit gate, say so and recommend the full `completeness-sweep`.
