research-document
Root Case-Collision Canonicalization
Root Case-Collision Canonicalization
Problem
Git tracked three case-only path pairs:
README.mdandReadme.mdCURRENT-STATE.mdandcurrent-state.mdROADMAP.mdandroadmap.md
On the repository’s case-insensitive macOS filesystem, each pair resolves to one working-tree path. An edit intended for the canonical file therefore appeared as a modification to both tracked entries. This undermined canonical state, cross-platform behavior, and evaluation reproducibility.
Evidence
At commit 9b96b13, each pair had identical SHA-256 content:
| Pair | SHA-256 |
|---|---|
| README variants | 7fcff95318b7fdfee7a51256d26b7d77e7dd349125562c5cc392c1d01dde9ebf |
| current-state variants | 7f148d10c54123824d4942f1c72a0b72c4f76659c861b6b8c9e9c886216fa77c |
| roadmap variants | ec9f095b3043c4e7d2e6134a762865aa34e2e83e2e9e4f4b1f806cbde4f7cd6b |
The bootstrap manifest, import audit, constitution, and agent instructions name the uppercase variants as canonical.
Decision
Keep:
README.mdCURRENT-STATE.mdROADMAP.md
Remove the lowercase/camelcase variants from the Git index with git rm --cached. The working files remain, and all prior content and provenance remain recoverable from Git history.
Validation
python3 tools/evaluation/evalctl.py repo-audit must report no case collisions.
Reversal
If a case-sensitive environment reveals distinct content that was not captured by the identical-blob audit, recover it from commit 9b96b13 into a clearly named archive file rather than recreating case-only collisions.