← All needs

[Feature] progress-board: a generated, never-drifting PROGRESS.md for the design phase

## Summary An optional script + skill, `progress-board`, that **derives** a one-page visual status file (`PROGRESS.md`) from the files CCGS already maintains — `project.yaml`, `design/gdd/systems-index.md` and `docs/architecture/adr-*.md` — so a solo developer can see at a glance where the project stands, **which systems are ready to start, and what the others are waiting for**. I have been running a richer version of this on my own CCGS project for two weeks (regenerated on every commit). Before sending a PR I'm opening this issue, as CONTRIBUTING asks, to check the direction is wanted. It is the design-phase counterpart of #82 (board-sync, which projects *stories* onto a GitHub board): same principle — a derived view that cannot drift — but offline, for systems/GDDs, and with no GitHub dependency. ## Type - [ ] New agent - [x] New skill (slash command) - [x] Other: a helper script in `.claude/scripts/` ## Problem / Motivation During Systems Design, "where are we?" is answered by reading five places: the stage in `project.yaml`, the Status column of the systems index, each GDD's status, the ADR headers, and the Dependency Map. `/project-stage-detect` and `/help` answer it on demand, but they spend a model call each time and give prose, not a picture. The usual stand-in is a hand-maintained summary table, which drifts the moment a status changes. The question that matters most day to day is not even "how far along are we", but **"what can I start next?"** — i.e. which Not Started systems have all their dependencies approved. The data is already in the systems index (`Depends On` column); nothing surfaces it. ## Proposed Solution **`.claude/scripts/progress-board.sh`** — bash + POSIX awk, no `python`/`jq` dependency, `grep -E` only, works on Windows Git Bash / Linux / macOS. - default: prints the board to stdout - `--write`: writes `PROGRESS.md` (fully generated — no hand-edited zones) - `--check`: exits 1 if `PROGRESS.md` is stale (usable in CI or an opt-in git pre-commit hook — documented, never installed by default) - fails loudly, never guesses: a `Depends On` name that is not a system in the table is an error naming the row **`/progress` skill** — runs the script, shows the board, and asks before writing `PROGRESS.md` (Collaborative Principle). Reference docs updated (skills-reference, the helpers list in context-management). **What the board shows** (sample from a fictional project): ``` Stage 1 Concept ██████████████████████████████ done ▶ 2 Systems Design ███████░░░░░░░░░░░░░░░░░░░░░░░ 4 / 12 approved (33 %) 3 Technical Setup ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ... MVP Player Controller ████████████ Approved Camera ████████████ Approved Combat █████████░░░ In Review Enemy AI ██████░░░░░░ In Design Inventory ░░░░░░░░░░░░ Not Started 🟢 ready Save / Load ░░░░░░░░░░░░ Not Started 🔴 waits for Combat (In Review) Vertical Slice Crafting ░░░░░░░░░░░░ Not Started 🔴 waits for Inventory (Not Started) World Map ░░░░░░░░░░░░ Not Started 🟢 ready Unblocks the most Combat → 3 (Save / Load, Boss ; then Achievements) Inventory → 2 (Crafting ; then Shop) ADRs 4 written, 3 Accepted ``` **Readiness rule**: a Not Started system is 🟢 ready iff every system in its `Depends On` cell is `Approved` or `Implemented`; otherwise 🔴, and the missing dependencies are named with their status. ## Alternatives Considered - **A skill only (Claude reads and writes the file)** — no code to maintain, but the output is neither deterministic nor checkable in CI, which is the whole point of a derived view. - **Python** — easier to write, but CCGS ships no `.py` files and must work without Python installed. - **Extending `statusline.sh`** — one line cannot show readiness per system. ## Additional Context Testing plan for the PR: fixture systems-index files (valid, unknown dependency name, missing column), run on Windows Git Bash and Linux; macOS noted as untested unless someone can run it. Happy to adjust names, output format or scope to fit the framework's direction.