On a case-insensitive filesystem, a project may legitimately contain a Lean
library directory named Blueprint/. scaffold_project currently checks and
writes lowercase managed paths through ordinary Path.exists()/path joins, so
blueprint/roadmap can resolve into that unrelated Lean library.
PR #14 correctly makes read-only project inspection recognize optional
Autoform scaffold paths only at their exact portable spellings. The write path
needs its own fail-closed collision check; making inspection reject every
near-case name caused real formal-math inspection to fail.
Acceptance criteria:
- Before writing a managed scaffold path, enumerate the exact parent directory
entry and reject any distinct casefold/NFC collision.
- Cover at least
blueprint, mkdocs.yml, .github, workflows, and the two
managed workflow filenames.
- Return a clear
ScaffoldError and leave the project byte-for-byte unchanged.
- Add a platform-independent regression harness plus a real case-insensitive
filesystem test when available.
On a case-insensitive filesystem, a project may legitimately contain a Lean
library directory named
Blueprint/.scaffold_projectcurrently checks andwrites lowercase managed paths through ordinary
Path.exists()/path joins, soblueprint/roadmapcan resolve into that unrelated Lean library.PR #14 correctly makes read-only project inspection recognize optional
Autoform scaffold paths only at their exact portable spellings. The write path
needs its own fail-closed collision check; making inspection reject every
near-case name caused real
formal-mathinspection to fail.Acceptance criteria:
entry and reject any distinct casefold/NFC collision.
blueprint,mkdocs.yml,.github,workflows, and the twomanaged workflow filenames.
ScaffoldErrorand leave the project byte-for-byte unchanged.filesystem test when available.