Pre-Publish Checklist
Arguments
--skip <check>— skip a specific check by name. Can be repeated. Valid values:skill-lint,version-sync,code-review,tests,ci
Process
Step 1 — Detect repo types
Scan the repo root for the following signals. Collect all matches — a repo can be multiple types simultaneously.
| Signal (file at repo root) | Repo Type |
|---|---|
SKILL.md | Agent Skill |
pyproject.toml / setup.py / setup.cfg | Python program |
package.json | Node.js program |
go.mod | Go program |
Cargo.toml | Rust program |
pom.xml / build.gradle | Java program |
build.gradle.kts / settings.gradle.kts | Kotlin program |
project.clj / deps.edn / build.clj | Clojure program |
*.sln / *.csproj (any at root) | C# program |
*.fsproj (any at root) | F# program |
CMakeLists.txt / meson.build / configure.ac | C/C++ program |
If no signals match, report "unknown repo type — cannot determine which checks to run" and stop.
Step 2 — Run checks
Run every applicable check. Skip any whose name matches a --skip argument.
Agent Skill checks (when SKILL.md detected)
-
Skill lint (
--skip skill-lintto skip)- Invoke the
William-Yeh/agent-skill-linterskill:/skill-lint check - Linter errors → BLOCKING
- Linter warnings only → WARNING
- Invoke the
-
Version sync (
--skip version-syncto skip)- Run:
git tag --listto check if the repo has any existing git tags. - If no tags exist, skip this check (nothing to compare against).
- If tags exist, get the latest tag:
git describe --tags --abbrev=0 - Parse the
versionfield from the SKILL.md frontmatter. - Strip any leading
vprefix from the git tag before comparing (e.g.v0.1.0→0.1.0). - Compare SKILL.md version against the latest git tag:
- If SKILL.md version == latest tag → BLOCKING: "Version not bumped — SKILL.md
<version>matches existing tag<tag>. Increment the version before publishing." - If SKILL.md version < latest tag → BLOCKING: "SKILL.md version
<version>is older than existing tag<tag>." - If SKILL.md version > latest tag → PASS
- If SKILL.md version == latest tag → BLOCKING: "Version not bumped — SKILL.md
- Run:
Program source code checks (when any language build manifest detected)
-
Code review (
--skip code-reviewto skip)- Invoke the
William-Yeh/common-code-reviewerskill:/common-code-reviewer - Reviewer verdict "REQUEST CHANGES" → BLOCKING
- Reviewer verdict "APPROVE WITH COMMENTS" → WARNING
- Reviewer verdict "APPROVE" → pass
- Invoke the
-
Local tests (
--skip teststo skip)-
Run the test command for each detected language:
Repo type Test command Python uv run pytestNode.js npm testGo go test ./...Rust cargo testJava ./mvnw testor./gradlew testKotlin ./gradlew testClojure lein testorclojure -T:build testC# / F# dotnet testC/C++ cmake --build . --target testormake test -
Any test failure → BLOCKING
-
-
CI status (
--skip cito skip)- Run:
gh run list --branch $(git branch --show-current) --limit 1 - Latest run status is not
completedwithsuccessconclusion → BLOCKING
- Run:
Step 3 — Report
Output a consolidated report:
## Pre-Publish Checklist
Detected types: <comma-separated list>
### <Type>
- [x] <check name>: PASSED
- [WARNING] <check name>: <reason>
- [BLOCKING] <check name>: <reason>
---
Verdict: BLOCKED — N blocking issue(s) must be resolved before publishing.
Blocking issues:
1. <description>
Warnings (non-blocking):
1. <description>
When all checks pass or only warnings remain, the verdict is:
Verdict: READY TO PUBLISH
Step 4 — Handoff
- No blocking issues: Offer to invoke
commit-commands:commit-push-prto complete the publish step. - Blocking issues remain: Display them clearly. Do not proceed.