Files
Claude-Code-Game-Studios/CCGS Skill Testing Framework/skills/utility/soak-test.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

8.1 KiB

Skill Test Spec: /soak-test

Skill Summary

/soak-test [duration] [focus] generates an observation protocol for an extended play session — the human plays, the skill writes the plan. Duration is 30m, 1h, 2h or 4h (default 1h); focus is memory, stability, balance or all (default all). It reads engine.name and performance.* from project.yaml (falling back to technical-preferences.md), the game concept or brief, the latest playtest and QA plan, then builds timed checkpoints for the duration and engine-specific memory guidance whose alert thresholds are relative to the session's own T+0 baseline, in units recorded as displayed. The engine tool and counter names it gives are not covered by docs/engine-reference/, so they are marked NOT SOURCEABLE — pointers the tester confirms at T+0, recording the tool actually used.

The protocol document carries a Verdict section with PASS / PASS WITH CONCERNS / NOT ASSESSED / FAIL for the tester to fill in after the session; a short soak cannot return PASS. The skill asks "May I write this soak test protocol to production/qa/soak-test-[date]-[duration].md?" before writing, and never runs the soak itself. No director gates apply.


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
  • Has ≥2 phase headings
  • Contains verdict keywords: PASS, PASS WITH CONCERNS, NOT ASSESSED, FAIL
  • Contains "May I write" collaborative protocol language before writing the protocol
  • Has a next-step handoff (/bug-triage sprint after the session; /smoke-check after fixing a FAIL)

Director Gate Checks

None. /soak-test is a QA planning utility. No director gates apply.


Test Cases

Case 1: Happy Path — 2-hour, all-focus soak on Godot

Fixture:

  • project.yaml has engine.name: Godot and performance.target_framerate: 60
  • design/gdd/game-concept.md states the intended session length
  • The user approves the write

Input: /soak-test 2h all

Expected behavior:

  1. Skill loads context: engine, performance budgets, concept, latest playtest and QA plan
  2. Checkpoints for 2h: T+0, T+20, T+40, T+60, T+80, T+100, T+120
  3. Godot memory items: the Debugger's memory monitors, Static Memory (unit as displayed), Object Count, Orphan Nodes — names marked NOT SOURCEABLE, since docs/engine-reference/godot/ does not cover them, for the tester to confirm at T+0; alert when memory grows > 20% from T+0 after the first 15 minutes; Orphan Nodes must return to its T+0 value after a scene unload
  4. Stability items (60 fps target) and balance/fatigue items are both included
  5. Protocol document has Pre-Session Setup, Baseline (T+0), a Checkpoint Log per checkpoint, Post-Session Analysis, and a Verdict section left for the tester
  6. Skill asks "May I write this soak test protocol to production/qa/soak-test-[date]-2h.md?"
  7. After writing, prints the run steps ending with /bug-triage sprint

Assertions:

  • Checkpoints are exactly T+0, T+20, T+40, T+60, T+80, T+100, T+120
  • Memory thresholds are relative to T+0, and the unit is recorded as displayed (no unit assumed)
  • The Godot tool and counter names are marked NOT SOURCEABLE, not presented as verified, and Pre-Session Setup asks for the tool actually used
  • Memory, stability and balance observation items are all present (focus all)
  • "May I write" is asked with production/qa/soak-test-[date]-2h.md
  • The skill issues no verdict itself — the protocol's Verdict section is left for the tester

Case 2: No Arguments — Defaults applied

Fixture:

  • No arguments provided; engine configured

Input: /soak-test

Expected behavior:

  1. Duration defaults to 1h, focus to all — no questions are needed to start
  2. Checkpoints: T+0, T+15, T+30, T+45, T+60
  3. Protocol header records Duration: 1h and Focus: all
  4. Skill asks "May I write this soak test protocol to production/qa/soak-test-[date]-1h.md?"

Assertions:

  • Duration 1h and focus all are used when no argument is given
  • Checkpoints are exactly T+0, T+15, T+30, T+45, T+60
  • The output path ends -1h.md
  • Nothing is written before the "May I write" approval

Case 3: Narrow Focus on Unreal — 4-hour memory soak

Fixture:

  • project.yaml has engine.name: Unreal

Input: /soak-test 4h memory

Expected behavior:

  1. Checkpoints for 4h: T+0, T+30, T+60, T+90, T+120, T+180, T+240
  2. Unreal memory items: a memory readout at each checkpoint — stat memory, marked NOT SOURCEABLE since docs/engine-reference/unreal/ does not cover it; record Physical Memory Used and Available (units as displayed)
  3. Alert threshold: Physical Memory Used growth > 20% over the full soak, against this run's T+0 — no absolute MB threshold
  4. Balance/fatigue observation items are not generated (focus is memory)
  5. Output path production/qa/soak-test-[date]-4h.md

Assertions:

  • Checkpoints are exactly T+0, T+30, T+60, T+90, T+120, T+180, T+240
  • The Unreal threshold is a relative > 20% growth, not an absolute size
  • stat memory is marked NOT SOURCEABLE, a pointer to confirm rather than a verified command
  • Balance/fatigue items are omitted for focus memory
  • "May I write" names the -4h.md path

Case 4: No Performance Budgets — "not set", never invented

Fixture:

  • project.yaml has engine.name: Unity and no performance block
  • technical-preferences.md Performance Budgets are [TO BE CONFIGURED]

Input: /soak-test 30m memory

Expected behavior:

  1. Skill falls back from project.yaml to technical-preferences.md for budgets
  2. Budget notes read Memory ceiling: not set, Target FPS: not set, Frame budget: not set — no number is supplied in their place
  3. Checkpoints: T+0, T+10, T+20, T+30
  4. Unity memory items: a memory profiler, marked NOT SOURCEABLE (not covered by docs/engine-reference/unity/); record Total Reserved Memory, GC Allocated, Object Count (units as displayed); alert when GC Allocated grows monotonically across 3+ checkpoints
  5. Skill asks "May I write" before writing production/qa/soak-test-[date]-30m.md

Assertions:

  • Missing budgets are recorded as "not set", not filled with defaults
  • Checkpoints are exactly T+0, T+10, T+20, T+30
  • The Unity threshold is the unit-free monotonic-growth check
  • "May I write" is asked before the file is written

Case 5: Director Gate Check — No gate; soak-test is a planning utility

Fixture:

  • Engine configured; valid duration and focus provided

Input: /soak-test 1h stability

Expected behavior:

  1. Skill generates and writes the soak test protocol
  2. No director agents are spawned
  3. No gate IDs appear in output

Assertions:

  • No director gate is invoked
  • No gate skip messages appear
  • The run ends at "Protocol written." with the run steps — no gate verdict, and no soak verdict issued by the skill

Protocol Compliance

  • Parses [duration] [focus], defaulting to 1h and all
  • Uses the Phase 3 checkpoint table for the chosen duration
  • Memory alert thresholds are ratios or deltas against T+0; units are recorded as displayed
  • Engine tool names not covered by docs/engine-reference/ are marked NOT SOURCEABLE; a memory tool the tester cannot find leaves the verdict NOT ASSESSED
  • The protocol's Verdict section offers PASS / PASS WITH CONCERNS / NOT ASSESSED / FAIL and states a short soak cannot return PASS
  • Asks "May I write" before creating production/qa/soak-test-[date]-[duration].md
  • Never attempts to run the soak itself

Coverage Notes

  • The stability and balance focus values follow Case 3's pattern with the other observation groups; not separately tested.
  • At rigor: minimal the skill reads design/game-brief.md instead of the game concept; not separately tested.
  • Executing the protocol is outside this skill's scope — it generates the plan, a human runs it.