Files
Claude-Code-Game-Studios/CCGS Skill Testing Framework/skills/utility/day-one-patch.md
T
DonchitosandClaude Opus 5.5 b21fa0f7f2 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
2026-09-29 21:32:19 +10:00

10 KiB

Skill Test Spec: /day-one-patch

Skill Summary

/day-one-patch runs a fix-only mini-sprint for known issues found after the gold master: scope → rollback plan → fixes → lightweight QA gate → patch record. It runs only when the user types it (disable-model-invocation: true).

Phase 1 reads project.stage (project.yaml, fallback production/stage.txt) and requires Release or Polish; reads the most recent record in production/gate-checks/ and verifies the release gate passed rather than inferring it from the stage; and loads bugs from production/qa/bugs/*.md with Status Open or Fixed — Pending Verification, plus the latest sprint and security audit. Phase 2 classifies each bug for inclusion (S1/S2, P1, fix under 4 hours, data/config-only and cert requirements go in; architecture changes and new code paths are deferred to 1.1; S3/S4 only if a trivial config fix) and asks the user to approve the scope, with [C] No day-one patch needed as an exit.

Before any fix, release-manager drafts a rollback plan written to production/releases/rollback-plan-[version].md. Code fixes go through lead-programmer, which first returns each fix and the files it would change while writing nothing; the skill then asks once for the set — "May I apply these fixes? [BUG-ID → files]" — before any code changes, and qa-tester verifies each fix. Targeted and broader tests run with commands.test from project.yaml (unset → Tests: NOT RUN per fix, and the broader regression NOT ASSESSED). Config/data fixes are made directly, after a "May I edit" ask naming the file and the value change. qa-lead decides the QA scope (/smoke-check, or the affected systems' tests in the engine's test root); the patch QA verdict must be PASS or PASS WITH WARNINGS to proceed — FAIL defers the fix to 1.1 and NOT ASSESSED is never a pass. The patch record is written to production/releases/day-one-patch-[version].md after a "May I write" ask. No director gates are spawned.


Static Assertions (Structural)

Checked against the SKILL.md by /skill-test spec — no fixture needed.

  • Has required frontmatter fields: name, description, argument-hint, user-invocable, allowed-tools
  • Frontmatter sets disable-model-invocation: true
  • Has ≥2 phase headings
  • Contains verdict keywords: PASS, PASS WITH WARNINGS, NOT ASSESSED, FAIL
  • Contains "May I write" language for both the rollback plan and the patch record, and "May I edit" for a direct config/data fix
  • Has a next-step handoff (/patch-notes, /bug-report verify, /retrospective [milestone-name] for the launch milestone)

Director Gate Checks

None of the director-tier agents (creative-director, technical-director, producer, art-director) is spawned. The skill spawns working agents — release-manager (rollback plan), lead-programmer and qa-tester (fixes), qa-lead (patch QA scope) — and checks the existing release-gate record in production/gate-checks/; it does not run /gate-check itself.


Test Cases

Case 1: Happy Path — Scope, rollback plan first, fixes, patch record

Fixture:

  • project.yaml has project.stage: Release
  • The most recent file in production/gate-checks/ records a release-gate PASS
  • production/qa/bugs/ holds three Open bugs:
    • BUG-0010 — S2, P1, code fix estimated at 2 hours
    • BUG-0011 — S3, a one-value config/data fix
    • BUG-0012 — S2, fix requires an architecture change

Input: /day-one-patch

Expected behavior:

  1. Phase 1 confirms Release stage and a passing release gate
  2. Phase 2 proposes including BUG-0010 and BUG-0011 and deferring BUG-0012 ("Fix requires architecture change — defer to 1.1"); AskUserQuestion offers Approve / Adjust / No day-one patch needed
  3. After approval, release-manager drafts the rollback plan and the skill asks "May I write this rollback plan to production/releases/rollback-plan-[version].md?" — no fix work starts before it is written
  4. lead-programmer returns BUG-0010's minimal fix and the files it would change, writing nothing; the skill asks "May I apply these fixes? [BUG-0010 → files]", and only on yes does lead-programmer implement it and run targeted tests with commands.test; qa-tester verifies it. BUG-0011's config change is made directly without a programmer agent, after the skill asks "May I edit [config file] — [key]: [old value] → [new value]?"
  5. qa-lead sets the QA scope; the QA verdict is PASS
  6. Skill asks "May I write this patch record to production/releases/day-one-patch-[version].md?"
  7. Record lists BUG-0010 and BUG-0011 under Bugs Fixed and BUG-0012 under Deferred to 1.1 with its reason
  8. Next steps offer /patch-notes

Assertions:

  • BUG-0012 is deferred to 1.1 because it needs an architecture change
  • Scope is approved via AskUserQuestion before any work
  • The rollback plan is written before any fix is attempted
  • No code file changes before the one "May I apply these fixes?" ask is approved, and lead-programmer writes nothing while proposing
  • BUG-0011 is fixed without spawning lead-programmer
  • The config file is not edited before a "May I edit" ask naming the file and the value change is approved
  • "May I write" names production/releases/day-one-patch-[version].md
  • Next steps include /patch-notes

Case 2: Critical Bug That Cannot Be Fixed Safely — Accepted risk, rollback trigger

Fixture:

  • Release stage; release-gate PASS on record
  • production/qa/bugs/ holds BUG-0020 — S1 (save-file data loss) whose fix needs an architecture change — and BUG-0021 — S2, P1, 1-hour fix

Input: /day-one-patch

Expected behavior:

  1. BUG-0020 is S1 but its fix requires an architecture change, so it is proposed for deferral to 1.1; BUG-0021 is included
  2. The user approves the scope; the patch proceeds for BUG-0021
  3. After the patch record is written, the skill warns: "S1 bugs remain open and were not patched. These are accepted risks. Document them in the rollback plan trigger conditions — if they occur at scale, rollback may be preferable to a follow-up patch."

Assertions:

  • BUG-0020 appears in the deferred table with its reason (architecture change)
  • BUG-0021 is still patched — the S1 does not block the rest of the patch
  • The "S1 bugs remain open" warning is shown after the record is written
  • The warning points to the rollback plan's trigger conditions

Case 3: No Release-Gate Record — NOT ASSESSED, not assumed

Fixture:

  • project.yaml has project.stage: Release
  • production/gate-checks/ is empty (no release-gate record)
  • Open bugs exist in production/qa/bugs/

Input: /day-one-patch

Expected behavior:

  1. Phase 1 finds no release-gate record
  2. Reports Release gate: NOT ASSESSED — no gate-check record found
  3. States that the reduced QA scope depends on a gate nobody can find
  4. Asks whether to run /gate-check first or proceed with a full QA pass instead
  5. Does not proceed silently to scoping or fixes

Assertions:

  • Release gate: NOT ASSESSED — no gate-check record found is reported
  • project.stage: Release alone is not treated as proof the gate passed
  • User is offered /gate-check first or a full QA pass
  • No rollback plan, fix or patch record is produced before the user answers

Case 4: Nothing Worth Patching — User selects "No day-one patch needed"

Fixture:

  • Release stage; release-gate PASS on record
  • production/qa/bugs/ holds only two S4 cosmetic bugs that need code changes

Input: /day-one-patch

Expected behavior:

  1. Both S4 bugs are proposed for deferral (S3/S4 only if a trivial config fix)
  2. Scope question is asked; user selects [C] No day-one patch needed
  3. Skill outputs "No day-one patch required. Proceed to /launch-checklist." and stops
  4. No rollback plan, no agents, no patch record

Assertions:

  • Both S4 bugs are listed as deferred, not included
  • On [C], "No day-one patch required. Proceed to /launch-checklist." is shown
  • Skill stops without writing any file
  • No release-manager, lead-programmer or qa-lead is spawned

Case 5: Director Gate Check — Patch QA NOT ASSESSED is not a pass

Fixture:

  • project.yaml: modes.rigor: standard (so a project with no game tests gets NOT ASSESSED, not WAIVED)
  • Release stage; release-gate PASS on record; one included S2/P1 fix implemented
  • qa-lead chooses a targeted smoke check; /smoke-check returns NOT ASSESSED — no game tests found

Input: /day-one-patch

Expected behavior:

  1. The skill does not treat NOT ASSESSED as PASS or PASS WITH WARNINGS
  2. It either obtains a real result (following what the verdict says would make it runnable) or defers the fix to 1.1
  3. No director-tier agent is spawned at any point and /gate-check is not run
  4. The patch record, if written, shows the QA verdict and fills "Not assessed" with what could not be checked and why

Assertions:

  • NOT ASSESSED does not let the patch proceed as if it passed
  • The fix is either re-verified with a real result or deferred to 1.1
  • No creative-director, technical-director, producer or art-director is spawned
  • Any written record states the QA verdict and what was not assessed

Protocol Compliance

  • Confirms Release/Polish stage and verifies the release-gate record before scoping
  • Loads bugs from production/qa/bugs/*.md
  • Gets user approval of the scope before any work
  • Writes the rollback plan before any fix
  • Asks once — "May I apply these fixes?" — before lead-programmer changes any code
  • Runs tests with commands.test, never a runner line from memory; with the key unset, says so (the broader regression is NOT ASSESSED)
  • Requires PASS or PASS WITH WARNINGS to proceed; FAIL defers the fix; NOT ASSESSED is never a pass
  • Asks "May I write" before the rollback plan and before the patch record, and "May I edit" before a direct config/data change

Coverage Notes

  • A stage other than Release/Polish ("Day-one patch prep is for Release-stage projects") is not separately tested.
  • A most-recent gate record of FAIL, CONCERNS or NOT ASSESSED (name it and stop) is not separately tested.
  • The >1 day scope warning and the cert-feedback scope argument are not separately tested.