Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Present final results to the user for acceptance. Shows evaluation results, evaluator screenshots, and asks for confirmation. Explicit invocation only — use /gm-accept.
.claude/skills/randallliuxin-gm-accept/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 20% | 0% |
$ARGUMENTS
You are presenting the current tag's completed work to the user for acceptance. This is a per-tag gate — accepting now does NOT mean the whole game is done; it means this tag (vX.Y.Z) is ready to be sealed, archived, and git-tagged by /gm-finalize. The user can choose to continue to the next tag (/gm-gdd again) or stop the project here.
FIRST ACTION — before anything else: Write accept to .godotmaker/current_role. Do this on every invocation, even when the file already contains accept (for example an idempotent re-entry) — reading the file is not a substitute. The write must actually happen and must be your first action.
Read .godotmaker/stage.jsonl (treat as empty if missing) — each line is {"role": X, "ts": Y}. Also read .godotmaker/evaluation.json.
role == "evaluate" exists anywhere in the file OR evaluation.json does not exist → STOP. Tell user to run /gm-evaluate first.evaluation.json result is "reject" → STOP. Tell user to run /gm-fixgap first.role == "accept" AND its decision == "accept" → STOP. Tell the user:> "Accept already recorded at {timestamp}. Recommended next: /gm-finalize. > If you need to redo this step or have other plans, just tell me."
fix or done decision).Read these files:
.godotmaker/evaluation.json — evaluator results (mandatory)PLAN.md — task completion statusMEMORY.md — known issues and discoveriesGDD.md — original requirementsDo NOT capture new screenshots. Use the screenshots already captured by the Evaluator:
e2e/screenshots/ for scene_{name}.png filesreferences/scene_{name}.pngFormat a clear summary:
## Tag Summary — {Tag from PLAN.md}
**Project:** {name}
**Tag delivers:** {one-liner from ROADMAP.md entry for this tag}
### What This Tag Built
- {N} new systems, {M} new components added in this tag
- Tag mechanics delivered: {Tag Mechanics list from PLAN.md, all PASS per evaluation.json `tag_mechanics`}
- Inherited mechanics still passing: {list each `<prev>-MN: pass` from evaluation.json `inherited_mechanics`}
### Test Results
- Unit tests: {from gm-verify results or PLAN.md}
- E2E suite: {evaluation.json `e2e_tests.passed`/`e2e_tests.total` — single suite covering both this tag's mechanics and inherited mechanics}
### Evaluation Result: APPROVED
- Mandatory checks: all passed
- Visual checks: {summary}
- Gameplay issues: {from evaluation.json, or "none"}
### Known Limitations
- {from MEMORY.md and evaluation minor_issues}
### Reviewer Triage Decisions for This Tag
(Read MEMORY.md "Reviewer Triage Log" section, filter to entries whose
Tag matches the current tag from PLAN.md. If none → write "(none)".)
| Time | File/Area | Severity | Decision | Finding | Reason | Citation |
|------|-----------|----------|----------|---------|--------|----------|
| ... | ... | ... | ... | ... | ... | ... |
(If the user thinks any REJECT or SKIP was wrong, they choose "Fix
issues" in Step 4 and tell me which finding to revisit; gm-fixgap will
pick it up.)
### How to Run
{instructions}
### Screenshots
{show evaluator screenshots side-by-side with references}
### What's Next
- After /gm-finalize this tag will be archived to docs/tags/{Tag}/ and `git tag {Tag}` will be created.
- Remaining tags in ROADMAP.md: {list of unshipped tags}
- To start the next tag, re-run /gm-gdd; to stop here, just don't.Use AskUserQuestion to ask:
Do NOT proceed until the user replies. Their reply drives the When Done branch below.
Always append a trace event to .godotmaker/stage.jsonl recording the user's decision, regardless of which branch was chosen. From the project root run:
python tools/append_stage_event.py accept --decision=<accept|fix|done>This appends a {"role": "accept", "ts": "<server-generated UTC>", "decision": "<accept|fix|done>"} line. Do NOT hand-write the JSON or the timestamp — the helper exists so the timestamp comes from the system clock, not your own output.
Then: git add -A && git commit -m "chore(accept): <Tag> <decision>".
Then, based on the decision:
Accepted. Recommended next: /gm-finalize/gm-fixgap with specific fix instructionsProgress saved; resume any timeNote: only events with decision == "accept" count as the role having truly completed for /gm-finalize's prerequisite check. The fix and done events are kept as audit trail.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 9,781 | 5,636 | -42% | 1 | 1 | 0% | 1,543 | 1,699 | +10% | 0 | 0 | — |
case-02 | fail→fail | 13,029 | 19,873 | +53% | 1 | 1 | 0% | 2,382 | 1,526 | -36% | 0 | 0 | — |
case-03 | fail→fail | 11,652 | 5,303 | -54% | 1 | 1 | 0% | 1,981 | 1,649 | -17% | 0 | 0 | — |
case-04 | pass→fail | 10,153 | 4,787 | -53% | 1 | 1 | 0% | 1,508 | 1,641 | +9% | 0 | 0 | — |
case-05 | fail→fail | 7,014 | 5,915 | -16% | 1 | 1 | 0% | 1,105 | 1,744 | +58% | 0 | 0 | — |
case-06 | fail→fail | 8,736 | 6,390 | -27% | 1 | 1 | 0% | 1,484 | 1,831 | +23% | 0 | 0 | — |
case-07 | fail→fail | 5,328 | 4,776 | -10% | 1 | 1 | 0% | 803 | 1,567 | +95% | 0 | 0 | — |
case-08 | fail→pass | 10,778 | 13,172 | +22% | 1 | 1 | 0% | 1,739 | 2,886 | +66% | 0 | 0 | — |
case-09 | fail→fail | 2,574 | 2,375 | -8% | 1 | 1 | 0% | 484 | 1,790 | +270% | 0 | 0 | — |
case-10 | fail→fail | 11,904 | 5,235 | -56% | 1 | 1 | 0% | 2,043 | 1,849 | -9% | 0 | 0 | — |
case-11 | fail→pass | 10,818 | 3,164 | -71% | 1 | 1 | 0% | 1,727 | 1,851 | +7% | 0 | 0 | — |
case-12 | fail→fail | 11,741 | 4,344 | -63% | 1 | 1 | 0% | 1,765 | 2,141 | +21% | 0 | 0 | — |
case-13 | fail→fail | 8,289 | 2,001 | -76% | 1 | 1 | 0% | 1,316 | 1,676 | +27% | 0 | 0 | — |
case-14 | fail→fail | 10,844 | 7,772 | -28% | 1 | 1 | 0% | 1,645 | 1,809 | +10% | 0 | 0 | — |
case-15 | fail→pass | 10,790 | 4,244 | -61% | 1 | 1 | 0% | 1,583 | 1,919 | +21% | 0 | 0 | — |
case-16 | fail→pass | 10,738 | 3,225 | -70% | 1 | 1 | 0% | 1,680 | 1,894 | +13% | 0 | 0 | — |
case-17 | fail→pass | 9,713 | 2,315 | -76% | 1 | 1 | 0% | 1,464 | 1,759 | +20% | 0 | 0 | — |
case-18 | fail→fail | 8,239 | 8,255 | +0% | 1 | 1 | 0% | 1,369 | 1,939 | +42% | 0 | 0 | — |
case-19 | fail→pass | 5,283 | 2,788 | -47% | 1 | 1 | 0% | 864 | 1,887 | +118% | 0 | 0 | — |
case-20 | pass→fail | 2,650 | 5,782 | +118% | 1 | 1 | 0% | 382 | 1,616 | +323% | 0 | 0 | — |
case-21 | pass→pass | 11,985 | 21,987 | +83% | 1 | 1 | 0% | 2,143 | 4,758 | +122% | 0 | 0 | — |
case-22 | pass→fail | 6,339 | 7,573 | +19% | 1 | 1 | 0% | 1,371 | 1,894 | +38% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 11 counted toward the lift figure. The other 11 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +14 percentage points is the difference between those two pass rates over the 11 comparable cases. 7 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.