coilysiren-pull-all skips every repo because .claude/ files chronically drift #4
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally filed by @coilysiren on 2026-05-23T01:28:28Z - https://github.com/coilysiren/infrastructure/issues/289
Symptom
A manual
coily systemctl start coilysiren-pull-all.serviceon kai-server today loggedpulled=0 skipped=34 failed=0. Every single coilysiren repo got skipped, each with[<name>] SKIP: working tree dirty. The daily timer has the same outcome - it sweeps 34 repos and pulls zero of them.Cause
coily setup/coily lockdownregenerates two tracked files in every coilysiren checkout on kai-server:The drift is the
agent-guard hook→coily hookmigration (exec coily hook pre-tool-usevs the committedexec agent-guard hook pre-tool-use) plus a one-linecoily ops gcloudaddition to the allow list. The committed versions never got bumped to match what current coily emits, so every repo is permanently dirty, andcoilysiren-pull-all.shcorrectly refuses to pull on a dirty tree.Spot-check on
eco-mods(verified viacoily ssh kai-server -- coily --cwd=...eco-mods git diff --stat):infrastructureshows the same two files dirty.Impact
coilysiren-pull-all.timeris that running services on kai-server (personal-dashboard, eco-mods rsync deploys, etc.) read fresh checkouts. They've been reading frozen ones.git lfs installintocoilysiren-pull-all.shso the daily pull would handle eco-mods cleanly. The wiring works, but the verification ("manual pull-all run handles eco-mods cleanly") can't actually pass while every repo is skipped.Fix candidates
.claude/lockdown-deny.sh+.claude/settings.jsonshape into every coilysiren repo (cross-repo sweep). One-time clean-up, but anything that bumps the generated shape again re-dirties everything.coilysiren-pull-all.shaware of the auto-generated.claude/*paths and treat them as "ignore for dirty-check" (e.g.git status --porcelain -- ':!.claude/lockdown-deny.sh' ':!.claude/settings.json'). Local-only fix, no cross-repo churn..claude/lockdown-deny.sh+.claude/settings.jsonin repos and rely oncoily lockdownto regenerate them on demand. Most invasive but kills the drift class entirely.Surfaced while landing coilysiren/infrastructure#286.