Install
openclaw skills install @escoffier-labs/publish-readinessUse before making a private repository public, before the first push of a new public repo, or when the user asks "is this safe to publish", "check for leaks", or wants a pre-publication scan. Also use after discovering identifying content already leaked into a public repo's history.
openclaw skills install @escoffier-labs/publish-readinessThe gate between a private repo and a public one. Working-tree scans catch today's leaks; history is where leaks hide. Verdict at the end: ship or fix first, with exact commands.
Run every check. Report each as pass/fail with evidence.
Search tracked files for:
grep -rE for common prefixes like AKIA, ghp_, sk-, AIza, -----BEGIN, plus password\s*=)10\., 172\.(1[6-9]|2[0-9]|3[01])\., 192\.168\.). Docs and examples should use RFC 5737 (192.0.2.x, 198.51.100.x, 203.0.113.x) or RFC 2544 (198.18.0.0/15) ranges instead..claude/, .codex/, memory handoffs, transcriptsA policy-driven scanner beats ad hoc grep; content-guard does this with a pre-push hook. Scan only tracked files (git ls-files), not node_modules/.
The tree being clean means nothing if a secret was committed and later deleted:
git log --all -p | grep -nE '<patterns from check 1>'
git log --all --pretty=format:'%s%n%b' | grep -nE '<same>' # commit messages too
.gitignore covers .claude/, .codex/, env files, build artifactsgit ls-remote origin 'refs/heads/backup/*'When check 2 fails, forward-only "scrub commits" do not fix it; old content stays reachable. The recipe:
.git somewhere outside the repo (the only real safety net; local backup branches get rewritten too).old==>new per line, longest matches first.git filter-repo --replace-text <file> --force (also --replace-message if commit messages quoted the strings).Hard truth about GitHub: after a force-push, the old commits remain fetchable by their full SHA until GitHub's internal GC runs, which can take weeks and cannot be triggered. If the leaked content is genuinely sensitive, the instant fix is delete-and-recreate the repo (new object store, old SHAs 404 immediately; costs stars and created-date) and rotate any leaked credential regardless. A credential that touched a public repo is burned; rotation is not optional.
## publish-readiness: <repo> (<date>)
| Check | Result | Evidence |
|-------|--------|----------|
**Verdict:** SHIP / FIX FIRST
(if FIX FIRST: numbered fix list with exact commands, blocking items marked)