Observation
boot.sh and site/install are kept identical by convention ("edit boot.sh, run cp boot.sh site/install") with a test failing on drift. That works, but it converts every bootstrap change into a two-file edit with a tripwire, and three of the currently-planned changes (#6 version gate, #7 clone path, #9 installer pinning) all touch it. The copy exists only because the website serves a static file from the repo.
Proposal
Once #9's release process exists (RELEASING.md, tags), fold this in: site/install becomes a build artifact produced at release time (a one-line make/just step: cp boot.sh site/install) rather than a tracked twin — or the site serves boot.sh directly (a redirect/symlink at the webhost, removing the second copy entirely). Either way the drift class disappears instead of being tested for. Keep the sync test until then.
Scope
Future release; sequenced after #9. Simplicity.
🤖 Generated with Claude Code
Observation
boot.shandsite/installare kept identical by convention ("edit boot.sh, runcp boot.sh site/install") with a test failing on drift. That works, but it converts every bootstrap change into a two-file edit with a tripwire, and three of the currently-planned changes (#6 version gate, #7 clone path, #9 installer pinning) all touch it. The copy exists only because the website serves a static file from the repo.Proposal
Once #9's release process exists (RELEASING.md, tags), fold this in:
site/installbecomes a build artifact produced at release time (a one-line make/just step:cp boot.sh site/install) rather than a tracked twin — or the site serves boot.sh directly (a redirect/symlink at the webhost, removing the second copy entirely). Either way the drift class disappears instead of being tested for. Keep the sync test until then.Scope
Future release; sequenced after #9. Simplicity.
🤖 Generated with Claude Code