Skip to content

Commit c5f579d

Browse files
committed
feat: bridge Codex v0.4.4 (user-owned playtest focus contract)
Port the user-owned playtest focus contract from Codex Game Studios v0.4.4 (upstream commit ddb184c, 2026-07-09) into the OpenCode-native port. - playtest-report/SKILL.md: Test Focus expanded to hypothesis/setup-build/ observation prompts/verdict-evidence; gap-statement guidance in Phase 2B; follow-up playtest-focus routing in Phase 5 - session-continuity.md: new User-Owned Playtest Focus section; Pause Procedure step 3 carries the preserved Playtest focus: brief - AGENTS.md: playtest-focus sub-bullet in the closeout contract - audit.sh: new run_playtest_focus validator (audit.sh playtest / all) checking AGENTS.md, session-continuity.md, and playtest-report/SKILL.md - VERSION 0.4.0 -> 0.4.1; CHANGELOG v0.4.1 entry; README badge, version line, status bullet, and structure comment updated (also fixes stale 0.3.0 README badge) Verification: audit.sh playtest, audit.sh all, and audit.sh release all pass with 0 errors.
1 parent 8ce6fae commit c5f579d

7 files changed

Lines changed: 114 additions & 7 deletions

File tree

.opencode/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.4.0
1+
0.4.1

.opencode/audit.sh

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# skills Validate skill files
1111
# closeout Check closeout-routing contract on completion skills
1212
# checkpoint Check active.md silent-checkpoint contract on skills/agents
13+
# playtest Check playtest-focus contract on root/continuity/skill surfaces
1314
# runtime Check for stale references
1415
# config Validate opencode.json
1516
# hooks Test hook scripts
@@ -26,7 +27,7 @@ command="${1:-all}"
2627
while [ "$#" -gt 0 ]; do
2728
case "$1" in
2829
--root) root="$(cd "$2" && pwd -P)"; shift 2 ;;
29-
all|agents|skills|runtime|config|hooks|smoke|release|closeout|checkpoint) command="$1"; shift ;;
30+
all|agents|skills|runtime|config|hooks|smoke|release|closeout|checkpoint|playtest) command="$1"; shift ;;
3031
*) shift ;;
3132
esac
3233
done
@@ -218,6 +219,44 @@ PY
218219
fi
219220
}
220221

222+
run_playtest_focus() {
223+
printf '\n── Playtest Focus Contract ────────────────────────────────\n'
224+
local -a surfaces=(
225+
"AGENTS.md"
226+
".opencode/docs/session-continuity.md"
227+
".opencode/skills/playtest-report/SKILL.md"
228+
)
229+
local -a phrases=(
230+
"user-owned playtest"
231+
"Playtest focus:"
232+
"hypothesis"
233+
"setup/build"
234+
"2-4 observation"
235+
"verdict/evidence"
236+
)
237+
local checked=0
238+
local rel
239+
for rel in "${surfaces[@]}"; do
240+
local f="$root/$rel"
241+
checked=$((checked + 1))
242+
[ -f "$f" ] || { fail "$rel (missing file)"; continue; }
243+
local missing=() p
244+
for p in "${phrases[@]}"; do
245+
if ! grep -qiF "$p" "$f" 2>/dev/null; then missing+=("$p"); fi
246+
done
247+
# session-continuity also requires the Session Worklist reference
248+
if [ "$rel" = ".opencode/docs/session-continuity.md" ]; then
249+
if ! grep -qiF "Session Worklist" "$f" 2>/dev/null; then missing+=("Session Worklist"); fi
250+
fi
251+
if [ "${#missing[@]}" -eq 0 ]; then
252+
pass "$rel (playtest focus contract)"
253+
else
254+
fail "$rel missing: ${missing[*]}"
255+
fi
256+
done
257+
printf ' %d playtest-focus surfaces checked\n' "$checked"
258+
}
259+
221260
run_runtime() {
222261
printf '\n── Runtime References ──────────────────────────────────────\n'
223262
# Check for stale Claude references
@@ -364,6 +403,7 @@ case "$command" in
364403
run_skills
365404
run_closeout
366405
run_checkpoint
406+
run_playtest_focus
367407
run_runtime
368408
run_config
369409
run_hooks
@@ -373,12 +413,13 @@ case "$command" in
373413
skills) run_skills ;;
374414
closeout) run_closeout ;;
375415
checkpoint) run_checkpoint ;;
416+
playtest) run_playtest_focus ;;
376417
runtime) run_runtime ;;
377418
config) run_config ;;
378419
hooks) run_hooks ;;
379420
smoke) run_smoke ;;
380421
release) run_release ;;
381-
*) printf 'Unknown command: %s\nAvailable: all, agents, skills, closeout, checkpoint, runtime, config, hooks, smoke, release\n' "$command" >&2; exit 2 ;;
422+
*) printf 'Unknown command: %s\nAvailable: all, agents, skills, closeout, checkpoint, playtest, runtime, config, hooks, smoke, release\n' "$command" >&2; exit 2 ;;
382423
esac
383424

384425
printf '\n── Result: %d error(s) ──\n' "$errors"

.opencode/docs/session-continuity.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,24 @@ The checkpoint exception is narrow. It never authorizes new design, game-feel,
2626
balance, architecture, source, registry, index, status-file, commit, push,
2727
branch, build, boot-smoke, mutating `gh`, or additional file changes.
2828

29+
## User-Owned Playtest Focus
30+
31+
When owed verification or the next valid lane is a user-owned playtest, preserve
32+
a concrete focus brief in both the closeout and any `## Session Worklist` entry.
33+
Use the label `Playtest focus:` and include:
34+
35+
- **Hypothesis**: what feeling, behavior, or evidence the playtest is probing.
36+
- **Setup/build**: the build, command, save state, or scenario to use when
37+
known.
38+
- **Observation prompts**: 2-4 observation prompts for specific things the
39+
user should watch for.
40+
- **Verdict/evidence to return**: the user-owned pass/fail/needs-rethink
41+
verdict plus the notes, screenshots, logs, or playtest report path needed to
42+
make the evidence usable.
43+
44+
The brief narrows the test; it does not make the game-feel, balance, keep,
45+
revert, or tune decision for the user.
46+
2947
## Pause Procedure
3048

3149
Before pausing a meaningful work unit, check whether the invoked workflow still
@@ -44,6 +62,8 @@ decision, blocker, or true stop point.
4462
clear next lane:
4563
`Next action:` then `1. (Recommended) [action label] - [brief reason /
4664
command]`. The user can reply with `1`.
65+
If that lane is a user-owned playtest, include the preserved `Playtest
66+
focus:` brief before the next-action prompt.
4767
4. Preserve exact next commands only when they are known to be useful.
4868
5. Keep local-only notes out of tracked docs unless they are project state.
4969
6. Suggest `/handoff [short-label]` when installed and the next session would

.opencode/skills/playtest-report/SKILL.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,14 @@ Generate this template and output it to the user:
4141
- **Session Type**: [First time / Returning / Targeted test]
4242

4343
## Test Focus
44-
[What specific features or flows were being tested]
44+
- **Hypothesis**: [What feeling, behavior, or evidence this playtest is probing]
45+
- **Setup/build**: [Build, commit, command, save state, or scenario if known]
46+
- **Observation prompts**:
47+
1. [Specific thing to watch for]
48+
2. [Specific thing to watch for]
49+
3. [Optional specific thing to watch for]
50+
4. [Optional specific thing to watch for]
51+
- **Verdict/evidence to return**: [User-owned pass/fail/needs-rethink verdict plus notes, screenshots, logs, or report path]
4552

4653
## First Impressions (First 5 minutes)
4754
- **Understood the goal?** [Yes/No/Partially]
@@ -96,6 +103,12 @@ Generate this template and output it to the user:
96103

97104
Read the raw notes at the provided path. Cross-reference with existing design documents. Fill in the template above with structured findings. Flag any playtest observations that conflict with design intent.
98105

106+
If the notes omit a specific hypothesis or focus, state that gap before
107+
analysis and ask for or infer only a provisional `Playtest focus:` from the
108+
notes. Do not route the user to another manual playtest without a concrete
109+
hypothesis, setup/build if known, 2-4 observation prompts, and the
110+
verdict/evidence the user should return.
111+
99112
---
100113

101114
## Phase 3: Action Routing
@@ -146,3 +159,7 @@ Verdict: **COMPLETE** — playtest report generated.
146159
- Act on the highest-priority finding category first.
147160
- After addressing design changes: re-run `/design-review` on the updated GDD.
148161
- After fixing bugs: re-run `/bug-triage` to update priorities.
162+
- If another user-owned playtest is the routed next step, include `Playtest
163+
focus:` with the specific hypothesis, setup/build if known, 2-4 observation
164+
prompts, and the verdict/evidence the user should return. The focus brief
165+
narrows the test but leaves game-feel and balance decisions to the user.

AGENTS.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ verification-first implementation.
4141
`Next action:` then `1. (Recommended) [action label] - [brief reason /
4242
command]`. Base that next action on the `## Session Worklist` when
4343
`production/session-state/active.md` exists. The user can reply with `1`.
44+
- When the next action or owed verification is a user-owned playtest, include
45+
`Playtest focus:` with the hypothesis, setup/build if known, 2-4 observation
46+
prompts, and the verdict/evidence the user should return.
4447

4548
## Available OpenCode Subagents
4649

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
# Changelog
22

3+
## v0.4.1 - 2026-07-09
4+
5+
Bridged Codex Game Studios v0.4.4 (user-owned playtest focus contract) into
6+
the OpenCode-native port.
7+
8+
- Added a user-owned playtest focus contract so closeouts and owed verification
9+
include a `Playtest focus:` brief (hypothesis, setup/build, 2-4 observation
10+
prompts, verdict/evidence) instead of generic playtest requests, while
11+
leaving game-feel and balance verdicts with the user.
12+
- Updated `/playtest-report` templates and routing so new reports and follow-up
13+
playtests carry a concrete hypothesis before sending the user back to play.
14+
- Updated `AGENTS.md` and `session-continuity.md` to preserve the playtest
15+
focus brief in closeouts and `## Session Worklist` entries.
16+
- Added a `run_playtest_focus` validator to `.opencode/audit.sh` (run via
17+
`audit.sh playtest` or as part of `audit.sh all`) that enforces the
18+
playtest-focus contract across root instructions, continuity docs, and the
19+
playtest-report workflow.
20+
321
## v0.4.0 - 2026-07-09
422

523
Bridged Codex Game Studios v0.4.2–v0.4.3 (silent active-session checkpoints,

README.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<a href=".opencode/skills"><img src="https://img.shields.io/badge/skills-77-green" alt="77 Skills"></a>
1414
<a href=".opencode/commands"><img src="https://img.shields.io/badge/commands-77-yellow" alt="77 Commands"></a>
1515
<a href=".opencode/hooks"><img src="https://img.shields.io/badge/hooks-12-orange" alt="12 Hooks"></a>
16-
<a href=".opencode/VERSION"><img src="https://img.shields.io/badge/version-0.3.0-blue" alt="v0.3.0"></a>
16+
<a href=".opencode/VERSION"><img src="https://img.shields.io/badge/version-0.4.1-blue" alt="v0.4.1"></a>
1717
<a href="https://opencode.ai"><img src="https://img.shields.io/badge/built%20for-OpenCode-f5f5f5" alt="Built for OpenCode"></a>
1818
</p>
1919

@@ -69,9 +69,17 @@ first brainstorm to launch.
6969

7070
## Current Status
7171

72-
Package version: `0.3.0` (see [`.opencode/VERSION`](.opencode/VERSION)).
72+
Package version: `0.4.1` (see [`.opencode/VERSION`](.opencode/VERSION)).
7373

7474
This release includes:
75+
- User-owned playtest focus routing: when owed verification or the next action
76+
is a manual playtest, closeouts include a `Playtest focus:` brief with the
77+
hypothesis, setup/build, observation prompts, and verdict/evidence to return.
78+
`/playtest-report` templates and follow-up routing now require concrete
79+
hypotheses before sending the user back to play, while preserving the user's
80+
ownership of game-feel and balance verdicts. A `run_playtest_focus` validator
81+
keeps the contract present in root instructions, session-continuity docs, and
82+
the playtest-report workflow.
7583
- Session Worklist routing cache (`## Session Worklist` + `## Phase Guard` in
7684
`production/session-state/active.md`); `/resume-from-handoff` compiles it,
7785
post-work closeouts read it, and `/studio-next` is now a deprecated manual
@@ -364,7 +372,7 @@ opencode.json # Permissions, plugin ref, instruction file
364372
uninstall.sh # Coexistence-aware uninstaller
365373
audit.sh # Validation dispatcher
366374
release.sh # Version management + GitHub releases
367-
VERSION # Package version (0.3.0)
375+
VERSION # Package version (0.4.1)
368376
design/ # GDDs, narrative docs (AGENTS.md + registry/)
369377
docs/ # Technical docs, ADRs, engine reference
370378
production/ # Sprint plans, milestones, session state

0 commit comments

Comments
 (0)