---
name: progress-report
description: "File a dated, immutable progress snapshot — Part A board integrity re-derived, findings classified and routed, gate blind spots named — then recommend the next action. Writes exactly one report artifact plus its index line; proposes board rows but files none. Usage: /progress-report [--depth boards|full] [--kind status|progress|gate]"
argument-hint: "[--depth boards|full] [--kind status|progress|gate] (omit both for --depth boards --kind progress)"
model: sonnet
---
> **Specialization:** Read `CLAUDE.md` first and bind every `<…>` placeholder and every "per `CLAUDE.md`" reference from it (the reports directory `<reports-dir>`, the lessons file `<lessons-file>`, the progress log, the board paths, the test command, the built-UI root, and — where bound — the code-discovery graph project id, the metrics directory, and the kit-manifest path used by `completeness-sweep`'s `A7`–`A11`). This file hard-codes no project value. If a needed value is missing from `CLAUDE.md`, STOP-and-ask. See `SPECIALIZE.md`.

You are a **thin dispatcher**, not the author of the report. The `progress-reporting` skill carries the eleven-section structure, the depth × kind contract, and the ten discipline invariants; this command carries only the orchestration around it — parse the flags, run Part A, optionally fan out Part B, hand the assembled evidence to the skill to file, then close with a recommended next action. Every rule about *what* the report contains lives in the skill, not here — if this command's body ever starts paraphrasing that contract instead of pointing at it, the two will drift.

## 0. Orient

Read, in order: `CONSTITUTION.md` §2 (lifecycle table) and §9/§10 (gates + the memory trio), `CLAUDE.md` (bind every placeholder this run needs), the progress log's durable header block plus its 3 newest dated entries, and the lessons file's most recent rows. This is the same orientation every report opens with in its header block (branch, commit, distance from the previous snapshot) — do it before Part A, not after.

## 1. Load the `progress-reporting` skill

Load it now, in full. It is the source of the depth × kind contract, the eleven mandatory sections, the `REPORT_TEMPLATE.md` skeleton, and the ten discipline invariants (§2 Coverage mandatory at every depth, every finding `file:line`-cited, orchestrator-verifies-before-filing, anchor-test every design-gap candidate, no un-re-derived number presented unmarked, systemic classes before individual defects, blocking graph ranked by fan-out, the Law-6-style amendment table mandatory on `gate` kind, immutable once filed, boundary-anchor every count regex). This command dispatches that discipline; it does not restate it.

## 2. Run Part A (`A1`…`A11`) via the `completeness-sweep` skill

Always. This is the floor — the eleven board-integrity checks (arithmetic, corpus-vs-registry, branch coverage, marker census, staleness, backlog charter, measured tests, corpus ground truth, graph freshness, metrics written, kit + contracts drift), each re-derived, never quoted from a board unverified.

If `--depth` was not supplied on `$ARGUMENTS`, ask the depth question now with **AskUserQuestion** — `boards` (minutes, the floor) vs `full` (hours, every affordance and displayed value classified). **Recommend `full`** when Part A tripped on anything compliance-bearing (a fail-closed authorization gap, a security-relevant divergence, anything `CLAUDE.md` marks as compliance-tagged) and say why; never escalate silently — depth is a cost the user spends deliberately, per the skill's escalation rule.

If `--kind` was not supplied, default to `progress` (the skill's default) unless the orientation step (§0) surfaces a clear signal for `status` or `gate` — say which, and why, before proceeding.

## 3. Optional Part B fan-out (`--depth full` only)

Fan out the existing read-only auditors (`completeness-sweep` Part B and its peers — `interaction-auditor`, `journey-auditor`, `edge-auditor`, per `CLAUDE.md`'s roster) over the built surface, batched by module or affinity per the project's wave-width cap. Every affordance **and every displayed value** gets classified; every design-gap candidate is anchor-tested against the prototype (or design source of record) before it is filed as one — a candidate with a real anchor is a reconstruction gap, not a design gap. Verify every returned finding at `file:line` yourself before it feeds the report (discipline invariant 3 — this step is not delegable).

## 4. Write the snapshot

Assemble the evidence from steps 2–3 into the skill's eleven sections (use `REPORT_TEMPLATE.md`) and file it at `<reports-dir>/{yyyy-mm-dd}-{kind}.md`. **Never overwrite an existing snapshot** — if a report of the same kind already exists for today, take the `-2` suffix (`{yyyy-mm-dd}-{kind}-2.md`), and so on. Prepend exactly one newest-first line to `<reports-dir>/README.md` describing what was filed and its one-line headline.

## 5. Recommend the next action

Close with **AskUserQuestion** (header: `Next action`), deriving 2–4 concrete options from what this run actually found, in this precedence order:
1. **Unresolved Part A divergence first** — a phase gate evaluated against a board known to be wrong is not a gate.
2. **Compliance or honesty defects** — anything the report's Part A or Part B pass flagged as compliance-bearing.
3. **The project's phase-interleaving rule** (per `CLAUDE.md`/`CONSTITUTION.md` §2) — the next unit the lifecycle actually calls for.
4. **New work** — only once 1–3 are clear.

Every option carries one line of rationale plus its real cost (not just its benefit). **Always include a do-nothing option** ("Just the report — no further action now").

## 6. Invariants

- Writes **exactly one** report artifact plus **one** index line in this run. Nothing else changes.
- **Proposes board rows; files none.** The report's task-pack section is a proposal list until a separate, approved action lands a row on its owning board (Law 3 — single writer).
- **Never re-indexes** a code-discovery graph, search index, or any other cache — name the staleness and recommend the re-index, do not perform it.
- **Never fixes a finding** — inventory and remediation are separate passes, run separately.
- **Never presents an un-re-derived number unmarked.** A board's figure quoted without re-derivation this run is labeled "not re-derived this run," never stated as fact.
