gm-finalize
Seal the current tag: snapshot the per-tag working docs into docs/tags/<Tag>/, write a CHANGELOG entry, run `git tag`, and reset per-tag runtime state for the next /gm-gdd round. Does NOT package a release — that lives in a separate skill. Explicit invocation only — use /gm-finalize.
Install / Use
npx skills add RandallLiuXin/GodotMaker --skill gm-finalizeInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
OtherSupported Platforms
Our assessment of gm-finalize
gm-finalize scores 92/100 on our quality scale, 31st of 241 Other skills we index (top 13%).
Its SKILL.md is 15 KB long, well organised into 25 sections with 8 code examples: a thorough specification that gives an agent plenty to work with.
It has 549 GitHub stars, a meaningful sign that others use it.
Maintenance, license and trust
- The repository was last updated 16 days ago, so gm-finalize is actively maintained.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 88/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
gm-finalize compared with similar skills
All 4 of these similar skills score higher than gm-finalize; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| gm-finalize (this skill)by RandallLiuXin | 92 | 549 | 16d ago | SKILL.md |
| Agent-Reachby Panniantong | 100 | 89.8k | 18d ago | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 11d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 11d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 130.2k | 12d ago | SKILL.md |
Frequently asked questions
- How do I install gm-finalize?
- Run
npx skills add RandallLiuXin/GodotMaker --skill gm-finalize. The install tabs above show the steps for each supported agent. - Which AI agents does gm-finalize work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is gm-finalize safe to use?
- It declares no license and scores 88/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is gm-finalize still maintained?
- The repository was last updated 16 days ago, so gm-finalize is actively maintained.
Skill content
View source on GitHubname: gm-finalize
description: |
Seal the current tag: snapshot the per-tag working docs into
docs/tags/<Tag>/, write a CHANGELOG entry, run git tag, and reset
per-tag runtime state for the next /gm-gdd round. Does NOT package a
release — that lives in a separate skill.
Explicit invocation only — use /gm-finalize.
disable-model-invocation: true
GodotMaker Finalize
$ARGUMENTS
You are sealing the current tag (vX.Y.Z) so the next /gm-gdd round can start cleanly. This is a per-tag operation, not a "the game is finished" operation. The user may continue to the next tag right after, or stop here — either way, this tag's deliverables are now archived and git-tagged.
Session Setup
FIRST ACTION — before anything else: Write finalize to .godotmaker/current_role.
Resume Check
Read .godotmaker/stage.jsonl (treat as empty if missing) — each line is {"role": X, "ts": Y, ...}.
- If
PLAN.mddoes not exist or is missing the**Tag:**header → STOP. Tell the user the project is in a bad state; re-run/gm-gddto regenerate the current tag's working docs. - If no event with
role == "accept"anddecision == "accept"exists anywhere in the file → STOP. Tell user to run/gm-acceptfirst. (Events withdecision == "fix"ordecision == "done"are trace records, not completions.) - If
.godotmaker/final_report.jsonexists andgit tag <Tag>already exists → STOP. Tell the user:"Tag {Tag} already finalized. Run /gm-gdd to start the next tag, or stop here. If you need to redo this step or have other plans, just tell me."
- Otherwise → proceed.
Resume condition for a half-finished archive. docs/tags/<Tag>/evidence/manifest.json records whether the archive is sealed:
| Archive state | Meaning | What to do |
|---|---|---|
| directory absent | finalize never reached Step 4 | run Step 4 normally |
| manifest absent, or "sealed": false | a previous run died mid-finalize | re-run Steps 4→6b; both commands overwrite a partial archive |
| "sealed": true | the tag is already sealed | do NOT re-archive — archive / index exit 3 on purpose |
"sealed": true is written after every other file inside the archive, so an interrupted finalize always lands in the resumable row — there is no state where the tag reads as sealed but the archive is incomplete. If the tag is sealed but docs/tags/README.md does not list it, the seal succeeded and only the index write failed: run python tools/seal_tag.py reindex, not archive or index.
Never pass --force to work around exit 3. A sealed archive is immutable; if the user genuinely wants to reseal, say so explicitly and get their confirmation first.
Resolve godot binary
Read godot_path from .claude/godotmaker.yaml and substitute it
verbatim for <godot_path> in every godot --headless … command
below. The path was validated at publish time and is the source of
truth for which Godot binary this project uses.
If .claude/godotmaker.yaml is missing the godot_path field, fall
back to plain godot (PATH lookup). If THAT also fails, STOP and tell
the user Godot binary not configured — re-run tools/publish.py to set godot_path in .claude/godotmaker.yaml. Do NOT spelunk through PATH
directories or guess install locations.
Process
1. Read the current tag
Read PLAN.md, extract **Tag:** header value (e.g. v0.2.0). All later steps refer to this as <Tag>.
2. Quick Sanity Check
"<godot_path>" --headless --quit 2>&1— builds cleanPLAN.md— nopendingorin_progresstasks; allverified.godotmaker/evaluation.jsonexists withresult: "approve"
If any check fails, STOP and tell the user which one — finalize must not seal a broken tag.
3. Document Consistency Check (current tag scope)
Run these fast gates before archiving. For passing gates, continue silently. For failures, update the root doc to match reality and remember the path for doc_updates.
- PLAN.md: All tasks are
verified; Tag Mechanics and Inherited Mechanics sections exist. - STRUCTURE.md:
extends Componentandextends Systemfilenames undersrc/appear in the component/system listings. - ASSETS.md: Asset paths for current-tag generated rows exist under
assets/orreferences/. - SCENES.md: Scene paths referenced for this tag exist on disk.
- MEMORY.md: Confirm it contains only current architecture decisions and project constraints; update it only if the final implementation changed one.
Apply documentation fixes only. Finalize does not change code.
4. Archive into docs/tags/<Tag>/
From the project root run:
python tools/seal_tag.py archive <Tag>
The helper copies per-tag working docs, the memory/ subtree and best-effort runtime evidence:
| Destination | Source |
|---|---|
| docs/tags/<Tag>/GDD-snapshot.md | GDD.md |
| docs/tags/<Tag>/PLAN.md | PLAN.md |
| docs/tags/<Tag>/STRUCTURE.md | STRUCTURE.md |
| docs/tags/<Tag>/DESIGN.md | DESIGN.md |
| docs/tags/<Tag>/SCENES.md | SCENES.md |
| docs/tags/<Tag>/MEMORY.md | MEMORY.md |
| docs/tags/<Tag>/memory/ | memory/ |
| docs/tags/<Tag>/evaluation-final.json | .godotmaker/evaluation.json |
| docs/tags/<Tag>/evidence/e2e/ | e2e/ excluding e2e/screenshots/ |
| docs/tags/<Tag>/evidence/screenshots/ | e2e/screenshots/ |
| docs/tags/<Tag>/evidence/manifest.json | generated by tools/seal_tag.py archive |
memory/ is archived alongside MEMORY.md so the frozen architecture index still resolves inside the archive. The helper then link-checks the archived MEMORY.md:
- A
memory/…link with no archived target, an absolute path, or a link escaping the archive → exit 2. The archive is left in place but unsealed. Fix the rootMEMORY.md(or restore the missingmemory/file) and re-run this step. - A link to a live project file that is deliberately not archived (
src/player.gd) → recorded in the manifest'slink_warnings, not a blocker.
Other exit codes: 2 if any required document source is missing, 1 if a required document copy fails, 3 if the tag is already sealed.
Then verify the archive landed — list docs/tags/<Tag>/ and confirm all document destination files are present. If a required document destination is missing or has stale content (size or mtime mismatching the source), STOP and report to the user.
Do not Edit/Write these destinations yourself.
Do NOT archive ASSETS.md, .godotmaker/stage.jsonl, metrics.jsonl, or traces/. Caches and temp files (__pycache__/, *.pyc, *.tmp, *.log, …) are filtered out by the helper.
5. Generate docs/tags/<Tag>/CHANGELOG.md
From the project root run:
python tools/seal_tag.py bundle <Tag>
The bundle JSON on stdout has:
roadmap_entry(heading + body from ROADMAP.md for<Tag>)plan_tag_mechanics(list of<Tag>-MnIDs)previous_tag+git_log_since_previous_tag(--onelineslice)test_count.unit(count oftest/**/*.gd) +test_count.e2e(count ofe2e/**/test_*.py)evidence.archive_path,evidence.e2e_files,evidence.screenshots,evidence.warnings
Combine that with PLAN.md task table and evaluation.json minor_issues, and write docs/tags/<Tag>/CHANGELOG.md directly. Keep the entry concise. Use this format:
# Changelog — <Tag>
**Released:** <UTC ISO date>
**Theme:** <ROADMAP headline>
## Delivered mechanics
- [<Tag>-M1] <description>
- [<Tag>-M2] ...
## Added systems / scenes / assets
- <bulleted list pulled from PLAN.md>
## Refactored from prior tags (if any)
- <files / systems modified that belonged to a previous tag, with one-line reason>
## Known limitations
- <minor issues from evaluation.json that ship as-is>
6. Generate Final Report
Field sources for the schema below:
summary.tag_mechanics— bundleplan_tag_mechanics(from step 5)summary.test_count.unit— bundletest_count.unit(direct)summary.test_count.e2e_tag+e2e_regression— split bundletest_count.e2eby which test files were added this tag (use PLAN's task table / git log to decide)summary.systems_added+components_added— PLAN task table (already in context from step 3)known_limitations—evaluation.jsonminor_issuesdoc_updates— root docs you edited in step 3evidence— bundleevidenceobject
Write .godotmaker/final_report.json:
{
"status": "tag_sealed",
"tag": "<Tag>",
"completed_at": "UTC timestamp",
"archive_path": "docs/tags/<Tag>/",
"git_tagged": true,
"summary": {
"tag_mechanics": ["<Tag>-M1", ...],
"systems_added": [...],
"components_added": [...],
"test_count": {"unit": N, "e2e_tag": M, "e2e_regression": K}
},
"evidence": {
"archive_path": "docs/tags/<Tag>/evidence/",
"e2e_files": N,
"screenshots": M
},
"doc_updates": ["list of root docs updated in step 3"],
"known_limitations": ["from evaluation minor_issues"]
}
final_report.json is per-tag overwritten — only the latest tag's report is kept at this path. Historical reports are recoverable from the docs/tags/<Tag>/ archives via git history if needed.
6b. Seal the archive
From the project root run:
python tools/seal_tag.py index <Tag>
This is the step that marks the tag sealed. It writes, deterministically:
| File | What it is |
|---|---|
| docs/tags/<Tag>/SUMMARY.md | Bounded retrieval summary — tag / release date / source revision / theme, pointers to the canonical documents, verification verdict and test counts, delivered mechanics, systems-scenes-assets changed, known limitations |
| docs/tags/<Tag>/README.md | Navigation page — per-file role table, reading order, completeness status, immutability note |
| docs/tags/<Tag>/evidence/manifest.json | Every archived file with its archive-relative path, category, byte size and SHA-256, plus source revision and generator version, and "sealed": true |
| docs/tags/README.md | Parent index of every sealed tag, in version order |
Run it after Step 5 and Step 6 — SUMMARY.md is generated from the archived CHANGELOG.md, evaluation-final.json, PLAN.md and this tag's final_report.json. It deliberately does not read .godotmaker/traces/, worker output or MEMORY.md: SUMMARY.md is a retrieval index over confirmed deliverables, not a second source of truth.
Exit codes: 2 if the archive or CHANGELOG.md is missing, or if the archived MEMORY.md still has unresolvable links; 3 if the tag is already sealed; 1 on an fs failure.
"sealed": true is committed by a single atomic manifest write, after SUMMARY.md and the tag README.md and before the parent docs/tags/README.md, which is derived purely from the manifests already on disk. Read the stderr message to know which recovery applies:
- "is left UNSEALED" — the failure landed at or before the seal commit. The parent index was not touched. Re-run
index <Tag>; never--force. - "sealed, but refreshing docs/tags/README.md failed" — the tag IS sealed and correct; only the index is stale. Run
python tools/seal_tag.py reindex. Do NOT re-runindex— the tag is sealed, so it exits 3.
Neither branch can leave docs/tags/README.md listing a tag that is not sealed.
Do not Edit/Write SUMMARY.md, either README.md, or the manifest yourself. If the generated summary is wrong, the CHANGELOG or evaluation it was generated from is wrong — fix that and re-run.
7. Commit pre-tag state
git add -A && git commit -m "chore(finalize): seal <Tag>"
This is the commit git tag <Tag> will point at — it includes the archive (step 4), CHANGELOG (step 5), final_report.json (step 6), the sealed index files (step 6b), and the full pre-truncation .godotmaker/stage.jsonl for this tag.
8. Run git tag <Tag>
git tag <Tag>
If the tag already exists locally, skip silently. If git is unavailable in the project, log the gap and continue.
Do NO
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
89.8kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
130.2kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
