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
7.9 KiB
Agent Test Spec: release-manager
Agent Summary
- Domain: Release pipeline (Build → Test → Cert → Submit → Verify → Launch), platform certification checklists scoped by
platform.cert_tier, store submission and store page management, age ratings, semantic version numbering and release tags, release-day coordination, post-release monitoring - Does NOT own: Game design, feature and scope decisions (producer), QA test strategy and test case design (qa-lead), build pipelines and CI/CD (devops-engineer), marketing copy (community-manager)
- Gate IDs: None; spawned by
/team-releasefor the release candidate and the Go/No-Go sign-off. Its blocking output is aNOT READYGo/No-Go verdict from the preloaded/release-checklist, reported to producer
Static Assertions (Structural)
description:field is present and domain-specific (references release pipeline, certification, store submission)tools:readsRead, Glob, Grep, Write, Edit, Bash— Bash for release tagging ("Version tags must be applied to the git repository at every release point")skills:preloadsrelease-checklist,changelogandpatch-notes- Model tier is
inherit— frontmattermodel:reads exactlyinherit(tiers:.claude/docs/model-tiers.md) - Agent definition does not claim authority over QA strategy, game design, or build infrastructure
- Its next-step offer runs
/patch-notes [version]itself and hands the result to community-manager for the announcement — never a brief for community-manager to write the patch notes - The pipeline's Test step takes the release gate's tier: QA sign-off at
workflow: full(recommended atstandard), no open S1 at any tier, no open S2 or S3 either atfull
Test Cases
Case 1: In-domain request — certification checklist for a console submission
Input context: project.yaml sets platform.cert_tier: console; the game ships on Nintendo Switch.
Input: "Generate the certification checklist for our Nintendo Switch submission."
Expected behavior:
- Emits the console certification block its preloaded
/release-checklistdefines forcert_tier: console— TRC/TCR/Lotcheck requirements checklist, first-party submission, achievement/trophy integration, parental controls, save-data rules (corruption, full storage, user switching), age ratings — plus the console device requirements (controller prompts, suspend/resume, user switching, connectivity loss, storage full) - Tracks every requirement individually with pass / fail / not-applicable status (Platform Certification Requirements)
- Emits no itch.io or Steamworks certification rows — the certification block follows
cert_tier, not the platform named in the request - Ends with the Go / No-Go line in
/release-checklist's three words (READY / NOT ASSESSED / NOT READY, first match wins) — here NOT ASSESSED or NOT READY, never READY, because the fixture supplies no build or test evidence — and asks "May I write this toproduction/releases/release-checklist-[version].md?" before writing
Case 2: Out-of-domain request — design test cases
Input: "Write test cases for our save system to make sure it passes certification." Expected behavior:
- Does not produce test case specifications
- Routes test design to
qa-lead, which its Delegation Map names for quality gates, test results, and release readiness sign-off - Offers what it does own: the save-data certification requirements the tests must cover (the console block's "Save-data rules compliant (corruption, full storage, user switching)"), as input for qa-lead
Case 3: Domain boundary — age-rating rejection blocks the release
Input: "Our build was rejected by the ESRB. The rejection cites content not reflected in our rating submission: a hidden profanity string in debug output that appeared in a screenshot." Expected behavior:
- Treats the rejection as blocking: the pipeline halts at the failed step until the issue is resolved ("No step may be skipped. If a step fails, the pipeline halts and the issue is resolved before proceeding")
- Returns the Go / No-Go verdict as NOT READY, listing the rating issue as a blocking item with an estimated time to resolve (
/release-checklistGo / No-Go rationale) - Identifies the action required: remove all debug output containing the content, then resubmit the rating questionnaire and track receipt of the new certificate (Store Page Management: age ratings)
- Does NOT minimize the issue or propose launching around it — a rating rejection is a blocking event, not an advisory
- Reports the delay's impact on the release date to producer, which it reports to for scheduling
Case 4: Version numbering conflict — hotfix vs. release branch
Input: "Our release branch is at v1.2.0. A hotfix was applied directly on main and tagged v1.2.1. Now the release branch also has changes that need to ship as v1.2.1 but they're different changes." Expected behavior:
- Identifies the conflict: two different changesets have been assigned the same version
- Resolves it with semantic versioning:
v1.2.1stays with the build it already tags, and the release branch's changes, being fixes, ship as the next PATCH (v1.2.2) — its Version Numbering rule for two changesets claiming one version - Does NOT accept a state where one version number names two different builds — "an applied tag is never moved or reused", and internal builds stay distinguishable by
MAJOR.MINOR.PATCH.BUILD - Coordinates the hotfix-branch side with
lead-programmer, which its Delegation Map names for hotfix branch management
Case 5: Context pass — release date constraint and certification lead time
Input context: Target release date is 2026-06-01. Current date is 2026-04-06. Nintendo Lotcheck typically takes 4-6 weeks. Input: "What should we prioritize on the certification checklist given our timeline?" Expected behavior:
- Works from the supplied dates and lead time, not placeholders: 8 weeks to release, so the first Lotcheck submission is due between 2026-04-20 (if it takes 6 weeks) and 2026-05-04 (if it takes 4) — before any resubmission
- Keeps the pipeline order and every step — Build → Test → Cert → Submit → Verify → Launch, "No step may be skipped" — and schedules backward from the release date rather than compressing or dropping a step to fit
- Plans for at least one certification iteration (Cert is "Submit to platform certification, track feedback, iterate") and flags that a single rejection would consume the remaining buffer
- Recommends an order but hands the schedule call to
producer— it reports to producer for scheduling and prioritization, and cutting scope is producer's ("Decide what features to include or exclude (escalate to producer)")
Protocol Compliance
- Stays within declared domain (release pipeline, certification checklists, version numbering, store submission)
- Routes test case design requests to qa-lead without producing test specs
- Returns NOT READY for a certification or rating failure and halts the pipeline — does not downgrade to advisory
- Applies semantic versioning and never lets one version number name two builds
- Scopes certification to
platform.cert_tierand schedules from provided dates without skipping pipeline steps
Coverage Notes
- Case 3 (NOT READY on a rating rejection) is the most critical test — this agent's primary safety output is blocking bad launches
- Case 1 assumes
platform.cert_tier: console; with the key unset, the expected output is a question about which platforms are in scope orNOT ASSESSED — cert tier unknown, never every certification track - Case 5 requires current date and release date context; verify the agent uses actual dates, not placeholder estimates
- Certification requirements change over time — flag if the agent produces specific requirement IDs that may be outdated
- No automated runner; review manually or via
/skill-test