Read-only scripted audit across homelab/pbs/docker/root domains: git auditability + .git ownership/dubious, .env perms (0660/devprojects), inline compose secrets, non-git dirs, uv-init stubs, compose naming, master-vs-main default, dirty trees, worktrees, herbygitea residue, doc presence. Emits text/json/md findings mapped to remediation-plan phases. SKILL.md + scripts/audit.py (stdlib-only) + references + packed .skill. First run: 39 repos, 62 findings, ruff-clean.
1.9 KiB
Session — build repo-hygiene-audit skill (2026-05-22)
Phase 7 of repo-hygiene-remediation (trellis thread "dev-setup-and-hygiene" #272): make the 2026-05-19/20 audit repeatable. Decisions going in: weekly cadence, manual trigger, full skill with scripted checks.
What was built
- New repo
pbs/repo-hygiene-audit-skillfollowing the repo-per-skill house style (a-review-skill / session-notes-skill / Claude-Code-Scaffolding-Skill). repo-hygiene-audit/SKILL.md— trigger description + 5-step workflow over the 4 domains.repo-hygiene-audit/scripts/audit.py— pure-stdlib, read-only check engine.references/check-catalog.md,references/findings-format.md.
Checks implemented
git auditability + .git ownership/dubious + group drift; .env perms (0660 /
devprojects target); inline compose secrets; non-git dirs with content;
uv-init stubs; docker-compose.yml→compose.yml naming; master-vs-main default;
leftover docs-audit branches; dirty trees; stray worktrees; unpushed/no-upstream;
herbygitea residue; stale review docs; missing/bloated docs.
First-run results (39 repos, 4 domains)
high=11, medium=19, low=23, info=9 (total 62). Matched the known audit backlog: root-owned non-git docker stacks (authelia/traefik), world-readable .env (trellis-mcp, vault-mcp, ob1-deploy, python-uv .env.local), master defaults (authentik, pbsii, zero-check-pipeline, docker-container, ssh-login-alerter, hunyuan3d-sunnie, instamesh-docker), uv-init stubs (zero-check-pipeline, wiki-context), GEMINI.md in work-index-dashboard, herbygitea residue in workstation-ansible/CLAUDE.md + sshkm. Ruff clean.
Open for Travis
- Remote: not chosen. Commit is local-only. Likely GitHub-destined (manual push).
- Second deliverable: canonical CLAUDE.md skeleton folded into Claude-Code-Scaffolding-Skill (template only; not wired into scaffold.py).
- Cadence automation deferred (
--fail-onis the hook when ready).