mirror of
https://github.com/Donchitos/Claude-Code-Game-Studios.git
synced 2026-10-16 10:17:06 +00:00
Fix release for 1.1.2: the 14 longest skills keep their later phases after a compaction, a question nobody answered is never taken as an answer, settings read the same from a subfolder, the commit check works for a project in a subfolder of a larger repository, every skill opens with a title, and the shipped allow rules no longer approve deleting a branch or writing files without asking. Details in CHANGELOG.md; upgrade steps in UPGRADING.md (v1.1.2 → v1.1.3). Refs #83 Refs #133 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0185en4t76fPn7315q4c3nko
122 lines
5.8 KiB
Markdown
122 lines
5.8 KiB
Markdown
# /story-done — Phase 6: Present the Completion Report
|
|
|
|
> Part of `/story-done`. `SKILL.md` names when to read this file; the settings it
|
|
> resolved and the rules under its later headings still apply here.
|
|
|
|
## Phase 6: Present the Completion Report
|
|
|
|
**In this file:**
|
|
|
|
- The completion report template
|
|
- Verdict definitions
|
|
- `NOT ASSESSED` and verdict precedence
|
|
|
|
Before updating any files, present the full report:
|
|
|
|
```markdown
|
|
## Story Done: [Story Name]
|
|
**Story**: [file path]
|
|
**Date**: [today]
|
|
|
|
### Acceptance Criteria: [X/Y passing]
|
|
- [x] [Criterion 1] — auto-verified (test file present)
|
|
- [x] [Criterion 2] — confirmed
|
|
- [ ] [Criterion 3] — FAILS: [reason]
|
|
- [?] [Criterion 4] — DEFERRED: requires playtest
|
|
|
|
### Test-Criterion Traceability
|
|
| Criterion | Test | Status |
|
|
|-----------|------|--------|
|
|
| AC-1: [text] | [test file::test name] | COVERED |
|
|
| AC-2: [text] | Manual confirmation | COVERED |
|
|
| AC-3: [text] | — | UNTESTED |
|
|
|
|
### Test Evidence
|
|
**Story Type**: [Logic | Integration | Visual/Feel | UI | Config/Data | Not declared]
|
|
**Required evidence**: [unit test file | integration test or playtest | screenshot + sign-off | screenshot of each screen touched | smoke check pass]
|
|
**Evidence found**: [YES — `[path]` | NO — BLOCKING | NO — ADVISORY]
|
|
|
|
### Deviations
|
|
[NONE] OR:
|
|
- BLOCKING: [description] — [GDD/ADR reference]
|
|
- ADVISORY: [description] — user accepted / flagged for tech debt
|
|
|
|
### Scope
|
|
[All changes within stated scope] OR:
|
|
- Extra files touched: [list] — [note whether valid or scope creep]
|
|
|
|
### Verdict: COMPLETE / COMPLETE WITH NOTES / NOT ASSESSED / BLOCKED
|
|
```
|
|
|
|
**Verdict definitions:**
|
|
- **COMPLETE**: all criteria pass, no blocking deviations
|
|
- **COMPLETE WITH NOTES**: every criterion passes or is `DEFERRED` (Phase 3 —
|
|
evaluable, awaiting a playtest), with advisory deviations or deferred criteria
|
|
documented — list each DEFERRED criterion so it is not lost
|
|
- **NOT ASSESSED**: one or more acceptance criteria could not be evaluated at
|
|
all — name which, and why
|
|
- **BLOCKED**: failing criteria or blocking deviations must be resolved first
|
|
|
|
**`NOT ASSESSED` — the story nobody could verify.** Rank: it **outranks COMPLETE
|
|
and COMPLETE WITH NOTES** (a review that could not evaluate a criterion has not
|
|
shown the criterion is met) and **ranks below BLOCKED** (a criterion known to
|
|
fail is more actionable than one nobody could check, and demoting it would bury
|
|
it). It is not a gentler BLOCKED: "this acceptance criterion fails" and "I could
|
|
not tell whether it passes" send the reader to different fixes.
|
|
|
|
**Verdict precedence — first matching rule wins**, evaluated in this order:
|
|
**BLOCKED**, then **NOT ASSESSED**, then **COMPLETE WITH NOTES**, then
|
|
**COMPLETE**. A run with both a failing criterion and an unassessable one is
|
|
BLOCKED. Stating the order mechanically, rather than leaving it to be inferred
|
|
from the rank sentence, is what keeps two reviewers from grading the same story
|
|
differently.
|
|
|
|
Emit it when any of:
|
|
|
|
- An acceptance criterion **cannot be evaluated at all** — it names no observable
|
|
outcome, so no evidence could settle it either way.
|
|
> **Not the same as Phase 3's `DEFERRED`.** A criterion that is evaluable but
|
|
> needs a playtest is `DEFERRED — requires playtest session`, it does **not**
|
|
> block, and Phase 3 keeps ownership of it. This trigger is for a criterion no
|
|
> session could ever settle as written. If Phase 3 already marked it DEFERRED,
|
|
> that classification stands and this trigger does not fire.
|
|
- A criterion the user answered **`Not tested yet`** (Phase 3) — it could be
|
|
checked, but nobody has. Name it and what would settle it: launch the build,
|
|
check it, then re-run `/story-done`.
|
|
- QL-TEST-COVERAGE or LP-CODE-REVIEW returned **NOT ASSESSED** and the input it
|
|
named was not supplied.
|
|
- The **test evidence is present but unreadable or unclassifiable** — corrupt,
|
|
empty, or of a type that cannot be determined.
|
|
> **Absent evidence is Phase 3's, not this trigger's.** Phase 3 resolves a
|
|
> missing file through `testing.strict`: BLOCKING types produce **BLOCKED**,
|
|
> ADVISORY types produce **COMPLETE WITH NOTES**. Both outrank or are already
|
|
> decided, so re-routing "absent" here would silently override an explicit
|
|
> advisory ruling. *Unreadable* is the genuinely unassessable case, and it is
|
|
> the only one this trigger claims.
|
|
- **`/test-evidence-review` returned `NOT ASSESSED`** for this story — applicable
|
|
only when that skill was actually run against it, which this skill does not do
|
|
itself. It
|
|
propagates: that skill's whole point is that "could not check" is not
|
|
"checked and fine", and collapsing its unknown into a COMPLETE here would undo
|
|
the distinction one skill downstream. `coding-standards.md` marks Logic and
|
|
Integration evidence BLOCKING, so this is the path where an unverifiable story
|
|
would otherwise acquire a verdict saying somebody verified it.
|
|
- A **deviation's severity cannot be determined** because the GDD or ADR it
|
|
would be judged against is missing.
|
|
|
|
A `NOT ASSESSED` verdict takes the same Phase 7 path as BLOCKED: do not
|
|
automatically proceed, list what could not be checked and what would make it
|
|
checkable. Closing anyway remains the user's explicit call, and stays gated by
|
|
Phase 7's `scope_changes` always-ask rule.
|
|
|
|
If the verdict is **BLOCKED**: do not *automatically* proceed to Phase 7. List
|
|
what must be fixed and offer to help fix the blocking items. This is the
|
|
default path, not an absolute stop — the user may still explicitly ask to
|
|
close the story anyway despite the blockers. That request is what routes to
|
|
Phase 7's menu below, and Phase 7's own `scope_changes` always-ask rule is
|
|
exactly what stands between that request and a silent close in autonomous
|
|
mode. Do not treat "do not automatically proceed" as "Phase 7 is now
|
|
unreachable" — it is reachable, on request, and gated when reached.
|
|
|
|
---
|