chore: ignore macOS Finder metadata — and make the guard it broke read git instead of the filesystem - #442
Conversation
…he tree Three `.DS_Store` files were sitting untracked in the root, `src/` and `src/packages/`. None was tracked by git, so nothing is removed from history — they were deleted from the working tree and the pattern added. The root one is what made `03-validate-root-cleanliness` exit 1 locally throughout the GT-622/656/657 work, surfacing as the single non-zero command in `41-validate-evidence-commands --execute` while CI, which checks out fresh, never saw it. Verified rather than assumed: with the rule in place, a planted `.DS_Store` in the root and in `src/` leaves `git status --porcelain` with 0 entries. Known and NOT fixed here: `03-validate-root-cleanliness` reads the filesystem, not git, so it still exits 1 while a `.DS_Store` exists on disk — measured by planting one after adding the rule. Deleting is therefore not durable; the next Finder window recreates the file and the guard goes red again. Making the guard skip what git ignores is the durable fix and is a change to a CI guard, so it is left as a separate decision rather than folded into a chore. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
📊 Bilingual Coverage ImpactPR Changes
Repository Coverage
✅ Good: All EN changes have ES counterparts. Generated by GitHub Actions |
… what the OS leaves lying around
The durable half of the .DS_Store chore, measured in the same change: adding the
ignore rule did NOT stop `03-validate-root-cleanliness` exiting 1, because it
reads the filesystem rather than git. Deleting the files was therefore not a
fix — the next Finder window recreates them and the guard goes red again on a
developer's machine, for a reason no commit can address. CI always checks out
fresh and never saw it, which is why it survived this long.
What git ignores is by definition not in the repository, so it is not what "root
cleanliness" governs. Entries git reports as ignored are skipped.
This does not weaken the taxonomy. An unauthorized file that git does NOT ignore
still fails — which is every file a commit could actually introduce — and both
directions are observed rather than argued:
planted .DS_Store -> exit 0, "35 read, 2 ignored by git, 33 checked"
planted unauthorized file -> exit 1, named in the failure list
planted unauthorized dir -> exit 1, named in the failure list
Two paranoia rules, because this set SUBTRACTS from what is checked and a bogus
answer would hollow the guard out silently:
- `git check-ignore` exit 128 (no git, not a work tree) falls back to the
EMPTY set, so every entry stays under the taxonomy, and it warns rather than
degrading quietly. The failure of an optional query must never widen what a
guard forgives.
- An answer claiming package.json, .github or .harness is ignored stops the
run. Those are tracked by construction, so such an answer is a broken query,
not an unusual repository.
The pass line now reports read / ignored / checked separately, so the denominator
that matters is visible instead of implied.
Guards 03, 39, 40, 42 (denominators) and 43 (negative fixtures) all exit 0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Follow-up: the durable half is now inThe PR body said deleting was not durable and left the guard fix as a separate decision. It is now in this branch.
What git ignores is by definition not in the repository, so it is not what "root cleanliness" governs. Ignored entries are skipped. Both directions observed, not argued:
The taxonomy is not weakened: every file a commit could actually introduce is still checked. Two paranoia rules, because this set subtracts from what is checked and a bogus answer would hollow the guard out silently:
The pass line now reports read / ignored / checked separately, so the denominator that matters is visible instead of implied. Guards 03, 39, 40, 42 and 43 exit 0. 🤖 Generated with Claude Code |
Three
.DS_Storefiles were sitting untracked in the root,src/andsrc/packages/. None was tracked by git, so nothing leaves history — deleted from the working tree, pattern added to.gitignore.The root one is what made
03-validate-root-cleanlinessexit 1 locally throughout the GT-622 / GT-656 / GT-657 work, showing up as the single non-zero command in41-validate-evidence-commands --execute. CI checks out fresh and never saw it.Verified rather than assumed: with the rule in place, planting a
.DS_Storein the root and insrc/leavesgit status --porcelainwith 0 entries.Known, and deliberately not fixed here
03-validate-root-cleanlinessreads the filesystem, not git — measured by planting a.DS_Storeafter adding the ignore rule, where the guard still exits 1. So deleting is not durable: the next Finder window recreates the file and the guard goes red again on someone's laptop.The durable fix is to have the guard skip entries git ignores — a gitignored file is by definition not in the repository, so it is not what "root cleanliness" governs. That is a change to a CI guard with its own fixture and classification requirements, so it is left as a separate decision rather than folded into a chore.
🤖 Generated with Claude Code