release-ci-guardrails
Skill3 starsChanged 4 months agoMITView on GitHub
XUUnity Light Unity MCP release, tag, and CI-failure guardrails; use for version bumps, release tags, GitHub Actions failures, and follow-up fixes after CI catches platform-only regressions.
- Commits and pushes
In this repository7 other files it gives its agents.
- AGENTS.mdAGENTS.md
- llms.txtllms.txt
- atomic-ipc-filesSkill
- cross-platform-pythonSkill
- cross-platform-shellSkill
- editor-main-threadSkill
- safe-process-managementSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. About 0 are common, 9 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Use this skill before creating a release/tag and whenever GitHub Actions reports a platform-only failure.
- Distinctive: line 13
Run release checks after the final edit, not before:
- Distinctive: line 18
Run the host Python suite after the final edit:
- Distinctive: line 20
If docs/site files changed, run:
- Distinctive: line 38
Run it before the tag; the release commit is the only commit it accepts a version bump from.
- Distinctive: line 44
Create the release commit before the annotated tag.
- Very specific: line 47
After pushing master and before pushing the tag, run python3 scripts/testing/check_release_ci_gates.py --wait-seconds 1800.
- Very specific: line 59
Write the changelog and GitHub Release notes with docs/operations/RELEASE_NOTES_STYLE.md.
- Very specific: line 63
After the annotated tag is pushed, wait for the tag-triggered Release Tag Gate to finish successfully.
- Very specific: line 77
Do not assume HOME, USERPROFILE, HOMEDRIVE, or HOMEPATH exist in CI.
- Very specific: line 81
Add a regression for home-sensitive code by clearing os.environ and mocking Path.home() to raise RuntimeError("Could not determine home …
- Very specific: line 83
Do not compare raw platform path strings in tests.
- Distinctive: line 95
Add or tighten a regression that simulates the platform invariant directly instead of relying on the current host OS to reproduce it.
- Distinctive: line 97
Run the focused failing tests, then the relevant file-level suite, then the full host suite before committing.
- Distinctive: line 99
Keep follow-up CI fixes small and separate from broad release/content edits.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Release and CI Guardrails
Use this skill before creating a release/tag and whenever GitHub Actions reports a platform-only failure.
Release Checklist
- Run release checks after the final edit, not before:
python3 scripts/testing/check_release_version_consistency.pypython3 scripts/testing/check_release_docs_freshness.pypython3 scripts/testing/check_public_release_safety.pypython3 scripts/testing/check_release_commit_shape.py --range origin/master..HEAD
- Run the host Python suite after the final edit:
scripts/testing/run_host_python_tests.sh
- If docs/site files changed, run:
scripts/testing/run_site_ui_checks.sh
- Clean generated artifacts before staging:
node_modules,__pycache__,playwright-report,test-results
- Land the work and the release as separate commits. A release is never one
commit.
- One or more work commits: the product change with its tests and the
documentation that describes it, each self-contained, each describing
itself under
## Unreleasedin the changelog. A work commit must not bump any version. - Then exactly one release commit whose subject starts with
release:, carrying only whatscripts/tools/sync_release_version.pywrites plus the changelog section it opens: package and lock metadata, both package manifests, theSERVER_INFOversion line, the release docs, and the retro registry or design-plan history when their release bookkeeping changed. It must not carry package C#, server logic, tests, scripts or smoke runners. python3 scripts/testing/check_release_commit_shape.py --range origin/master..HEADenforces both halves and names the files to move. Run it before the tag; the release commit is the only commit it accepts a version bump from.- Why: the monolith loses bisect and revert granularity, makes the changelog the only description of the change, and lets a version bump ride inside a feature commit unnoticed. Reverting a release must not revert the product change with it.
- One or more work commits: the product change with its tests and the
documentation that describes it, each self-contained, each describing
itself under
- Create the release commit before the annotated tag. If CI fails after a tag was created or pushed, prefer a follow-up fix commit unless the maintainer explicitly asks to retag.
- After pushing master and before pushing the tag, run
python3 scripts/testing/check_release_ci_gates.py --wait-seconds 1800. It blocks the tag until every required workflow has a completed successfulpush/workflow_dispatchrun for the release SHA. Failed, pending, missing, or unverifiable gates all block; never bypass by tagging anyway. The tag-pushRelease Tag Gateworkflow re-verifies the same contract in CI. - A workflow that cannot run at all (no runner license, infrastructure gone)
may be suspended in the gate's
WAIVED_GATEStable — with a reason, the evidence gap, and a restore condition — instead of being dropped from the required set. The run then reportsstatus=ok_with_waived_gates, and the release notes must carry the gap. Never silently delete a gate.Unity Package CIis waived today: no runner Unity license. - Write the changelog and GitHub Release notes with
docs/operations/RELEASE_NOTES_STYLE.md. Run the fact review before the language review. The notes must explain the developer pain, the concrete behavior change, the practical benefit, exact validation, and every waiver. - After the annotated tag is pushed, wait for the tag-triggered
Release Tag Gateto finish successfully. Then create a non-draft, non-prerelease GitHub Release for the existing tag withgh release create --verify-tag. Verify the published object withgh release view; a Git tag without a GitHub Release is not a completed public release. - Complete every host-declared downstream closeout after the GitHub Release: update consumer package pins, resolve and validate their package locks, and sync the external product site. Keep private project names and filesystem paths in host automation only, never in this public skill or release notes. A downstream failure does not rewrite release history; report the exact incomplete lane and recovery step.
Windows CI Assumptions
- Do not assume
HOME,USERPROFILE,HOMEDRIVE, orHOMEPATHexist in CI.Path.home()can raiseRuntimeError. Code that only builds plans, reviews, helper targets, recovery commands, or optional config paths must use a safe fallback and must not crash when the host home directory is unavailable. - Add a regression for home-sensitive code by clearing
os.environand mockingPath.home()to raiseRuntimeError("Could not determine home directory."). - Do not compare raw platform path strings in tests. For structured payload paths
that are not shell commands, compare separator-normalized suffixes or resolved
Pathequality. - For shell-facing commands, do not normalize the assertion after the fact; assert that the emitted command already uses POSIX-safe separators and contains no unintended backslashes.
CI Failure Fix Loop
- Classify the failure as product bug, test bug, platform assumption, or release metadata drift.
- Reproduce the exact failing test locally when possible.
- Add or tighten a regression that simulates the platform invariant directly instead of relying on the current host OS to reproduce it.
- Run the focused failing tests, then the relevant file-level suite, then the full host suite before committing.
- Keep follow-up CI fixes small and separate from broad release/content edits.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

