Release 1.1.2 — the default path works end to end

Fix release for 1.1.1: the minimal path end to end, engine commands that
run on Godot, Unity and Unreal, hook warnings you can see, and verdicts
that say when they could not check. Details in CHANGELOG.md; upgrade
steps in UPGRADING.md (v1.1.1 → v1.1.2).

Fixes #67
Fixes #131

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WuJn2FdynEybfL5KC697nJ
This commit is contained in:
Donchitos
2026-09-29 21:32:19 +10:00
co-authored by Claude Opus 5.5
parent 7ed2c3e9c4
commit b21fa0f7f2
383 changed files with 22888 additions and 10618 deletions
+115 -12
View File
@@ -3,7 +3,7 @@ name: help
description: "What should I do next? Use when stuck or you don't know what to do."
argument-hint: "[optional: what you just finished, e.g. 'finished design-review' or 'stuck on ADRs']"
user-invocable: true
allowed-tools: Read, Glob, Grep, Bash, Bash(bash "*/.claude/skills/help/../../hooks/yaml-helper.sh" resolve_config *)
allowed-tools: Read, Glob, Grep, Bash(bash "*/.claude/skills/help/../../hooks/yaml-helper.sh" resolve_config *), Bash(bash "*/.claude/skills/help/../../scripts/story-status.sh"), Bash(bash .claude/scripts/story-status.sh*), Bash(bash .claude/scripts/artifact-check.sh *), Bash(bash ".claude/scripts/artifact-check.sh" *), Bash(bash ./.claude/scripts/artifact-check.sh *), Bash(git log *)
model: haiku
---
@@ -19,14 +19,12 @@ gap analysis, use `/project-stage-detect`.
!`bash "${CLAUDE_SKILL_DIR}/../../hooks/yaml-helper.sh" resolve_config --keys project.stage,workflow`
!`echo "Latest sprint: $(ls -t production/sprints/*.md 2>/dev/null | head -1 || echo 'none')"; echo "Session state: $(head -5 production/session-state/active.md 2>/dev/null || echo 'none')"`
Both blocks are resolved before this skill runs. Use them as-is:
These are resolved before this skill runs. Use them as-is:
- **`project.stage`** from the config block is the authoritative phase for Step 2
— it already applies the `project.yaml` → `production/stage.txt` fallback, and
preserves values containing spaces (`Systems Design`).
- **`workflow`** from the config block is the tier for Step 5 — do not re-read it.
- **`workflow`** from the config block is the tier for Steps 2 and 5 — do not re-read it.
- If no config block rendered, shell preprocessing is disabled; fall back to the
defaults in `.claude/docs/config-resolution.md`.
@@ -65,7 +63,15 @@ skills in production/polish, etc.).
## Step 2: Determine Current Phase
Check in this order:
**First, take `workflow` from the config block above.** If it is `minimal`, the
project is on the minimal path, not the phase ladder: skip the rest of this step,
read the session context (**Step 3**), then go to **Step 4m**. At that tier, do
not map `project.stage` — nothing on the minimal path runs `/gate-check`, so
the stage reads Concept however far the
project has got, and walking the Concept phase would send a project that already
has stories back to the concept doc, art bible and systems map.
Otherwise, check in this order:
1. **Take `project.stage` from the config block above** — it is already resolved. Map its value to a catalog phase key:
- "Concept" → `concept`
@@ -84,7 +90,7 @@ Check in this order:
- `design/gdd/game-concept.md` (or `design/game-brief.md`) exists → `concept`
- Nothing → `concept` (fresh project)
3. **Take `workflow` from the config block above** (per
3. **`workflow`** was taken at the top of this step (per
`.claude/docs/workflow-modes.md`). It controls whether optional docs are
surfaced as next steps (Step 5).
@@ -92,13 +98,20 @@ Check in this order:
## Step 3: Read Session Context
Read `production/session-state/active.md` if it exists — it is append-only and grows unbounded, and only the latest block is relevant, so read just the tail rather than the whole file: grep the last heading (`Grep pattern="^## (Session Extract|STATUS)" path="production/session-state/active.md" output_mode="content" -n`, take the highest line number) and `Read(offset=that line)`. Extract:
Read `production/session-state/active.md` if it exists — but only its STATUS
and CHECKPOINT blocks (schema: `.claude/docs/templates/session-state.md`); the
narrative below them can be long. Find the markers
(`Grep pattern="<!-- /?(STATUS|CHECKPOINT) -->" path="production/session-state/active.md" output_mode="content" -n`)
and `Read` from the first to the last. A file with no markers predates the schema: read its
last `## Session Extract` block instead. Extract:
- What was most recently worked on
- Any in-progress tasks or open questions
- Current epic/feature/task from STATUS block (if present)
This tells you what the user just finished or is stuck on — use it to personalize
the output.
the output. It runs at every tier: at `minimal` it is the only read of the
checkpoint Step 4m relies on (a checkpoint saying "Next step: /story-done" means
the work is written). From here, `minimal` goes to **Step 4m**, not Step 4.
---
@@ -114,6 +127,10 @@ For each step in the current phase (from the catalog):
Bash: bash .claude/scripts/artifact-check.sh --phase [current-phase]
```
Run it exactly as written, here and below: from the project root, with the
relative path — no absolute path, no `cd`, no `2>&1`. This skill's permission
grant matches that form; any other asks the user to approve it.
It evaluates every `glob`, `pattern`, `min_count` and `any_of` in the catalog
against the working tree and reports one line per step. Map its statuses:
@@ -157,6 +174,69 @@ Label these differently — show what's been detected, then note it may be ongoi
---
## Step 4m: The Minimal Path (`workflow: minimal` only)
At `minimal` the route is the catalog's `paths.minimal`, not a phase: engine →
`design/game-brief.md` → stories → `/dev-story` ↔ `/story-done`. Resolve it in
one call:
```
Bash: bash .claude/scripts/artifact-check.sh --path minimal
```
Map the statuses exactly as in Step 4. `implement` and `story-done` are
`NO_CHECK` by design — the story status lines below are their check. The next
step is the first of these that applies:
1. `engine-setup` not PRESENT → `/setup-engine`
2. `game-brief` not PRESENT → `/brainstorm` (at `minimal` it writes the one-page brief)
3. `create-stories` not PRESENT → `/create-stories` with no argument (at
`minimal` it builds the stories straight from the brief's MVP list)
4. Stories exist → the list below was printed by `.claude/scripts/story-status.sh`
before you read this skill: one line per unfinished story, **already in
the route's order** — `IN_REVIEW`, then `IN_PROGRESS`, then `TODO` (a
`Ready` or `Not Started` story) in build order — then `BLOCKED`, `OTHER`,
`NO_STATUS` and the `COMPLETE` count:
!`bash "${CLAUDE_SKILL_DIR}/../../scripts/story-status.sh"`
**Next up is the story on the first `IN_REVIEW`, `IN_PROGRESS` or `TODO`
line.** The list is already current; do not run the script again, and do
not re-read or re-rank the story files:
an `In Review` story is closed before an `In Progress` one continues — its
work is written, and `/story-done` is quick.
- `IN_REVIEW` → its work is written and waiting to be closed:
`/story-done [path]`
- `IN_PROGRESS` → it is **not** done — whatever the code or commits
suggest, only `/story-done` makes a story Complete. Recommend
`/story-done [path]` only if the user, `active.md` or the git log says
its implementation is written; otherwise `/dev-story [path]` to carry on
- `TODO` → `/dev-story [path]`
- a `BLOCKED` story → name it and its blocker; it is never Next up
- **no `IN_REVIEW`, `IN_PROGRESS` or `TODO` line, but `BLOCKED`, `OTHER` or
`NO_STATUS` lines remain** → nothing can be built next, and the build
order is **not** done. Name each of those stories with its status as
written, and a blocked story's blocker (read it from that story's file).
Next up is clearing the first of them: resolve its blocker, or give an
`OTHER` or `NO_STATUS` story a `Status:` line the route reads (`Ready`
once it can be built)
- **every story `Complete` (or `Done`)** → the brief's build order is done.
Say so, and offer three ways on: play the build; add the next stories from
the brief with `/create-stories`; or, if the game has outgrown a one-page
brief, `/settings` to raise `modes.rigor`.
**At `minimal`, never present any of these as required or as a blocker:** the
game concept doc, art bible, systems map, GDDs, `/create-epics`, a sprint plan,
`/gate-check`, or sprint close-out (`/smoke-check`, `/team-qa`,
`/retrospective`). The brief replaces the design docs and its build order
replaces the sprint plan (`.claude/docs/workflow-modes.md` — `minimal` floor).
Every one of them still runs if the user asks for it; mention one only when the
user's argument asks about it.
Then skip Steps 5 and 8, and present with the `minimal` shape in Step 7.
---
## Step 5: Find Position and Identify Next Steps
From the completion data, determine:
@@ -168,8 +248,7 @@ From the completion data, determine:
before or alongside the blocker. **Surface these per the workflow tier**: at
`full`, list all of them; at `standard`, list an optional doc only if it is
required for the current system/phase (do not flag genuinely-optional docs as
gaps); at `minimal`, do not surface optional docs at all — once the brief,
engine, and a sprint plan exist, the next step is code
gaps). At `minimal` this step does not run — Step 4m replaces it
4. **Upcoming required steps** — required steps after the current blocker
(show as "coming up" so user can plan ahead)
@@ -215,6 +294,27 @@ Command: `[/command]`
Approaching **[next phase]** gate → run `/gate-check` when ready.
```
**At `minimal`** use this shape instead — no phase label, no gate line. `N`
counts only stories whose status line says `Complete` or `Done`, and only those
go under ✓ Done. `N` and `M` are the two numbers on the `COMPLETE` line; it
names no finished story, so ✓ Done gives their count, not their titles:
```
## Where You Are: Minimal path — [N] of [M] stories complete
**In progress:** [from active.md, if any]
### ✓ Done
- Engine: [engine] · Game brief · [N] stories
### → Next up
**[Story NNN: title]** — [what it delivers]
Command: `/story-done [story-path]` for an In Review story, or an In Progress one whose work is written; otherwise `/dev-story [story-path]`
### Coming up after that
- [the next Ready stories in build order, at most 3]
```
**Formatting rules:**
- `✓` for confirmed complete
- `→` for the current required next step (only one — the first blocker)
@@ -229,6 +329,8 @@ Verdict: **COMPLETE** — next steps identified.
## Step 8: Gate Warning (if close)
Skip this step at `minimal` — the minimal path has no phase gates.
After the current phase's steps, check if the user is likely approaching a gate:
- If all required steps in the current phase are complete (or nearly complete),
add: "You're close to the **[Current] → [Next]** gate. Run `/gate-check` when ready."
@@ -258,7 +360,8 @@ Only show this if the user's input suggested confusion (e.g. "I don't know", "st
"lost", "not sure"). Don't show it for simple "what's next?" queries. Show the
`/settings` rigor line only when a `settings-guidance.md § 4` trigger actually
fires — the user sounds overwhelmed (and rigor isn't already `minimal`), or the
project has outgrown its tier — not on every confused query.
project has outgrown its tier — not on every confused query. At `minimal`, leave
out the `/gate-check` line: the minimal path has no phase gates (Step 4m).
---