Repository navigation
Conversation
Deicyde
left a comment
There was a problem hiding this comment.
The immutable-plan and atomic-exchange core looks sound, but I found four correctness gaps before this should merge:
-
parent_changedis sampled before workspace cleanup (render.py:791) and reused afterward. If the output-parent pathname is replaced during cleanup,render_sitereturns success withwarnings=[]even thoughreport.output_dirno longer exists there; the publication is under the renamed old parent. Reverify the retained parent after cleanup before reporting success. -
_is_generated_pathcase-folds root filenames, so an authoredblueprint/Progress.md(alsoDependencies.md,Structure.md, etc.) is silently excluded on a case-sensitive filesystem. The source remains, but neither that page nor its bytes appear in the publication inventory. Reject noncanonical aliases explicitly, or exclude only the exact generated spelling and let collision validation fail closed. -
Ordinary pre-commit failures leak staging directories.
_open_workspace_directoryruns before the enclosingtry, and a materialization failure occurs beforestage_cleanup_inventoryis assigned. InjectedEMFILEleft an empty workspace; injectedENOSPCleft a partial staged tree. Both are known pre-commit states and should be cleaned through retained descriptors, not accumulate on retries. -
The new provenance fields are not actually bound together. Lean/blueprint bytes are captured, then
HEADis detected independently; the final guard checks only working-tree generations. With stable dirty Lean, links use captured line numbers against different committed bytes. With an untracked source note, publication suppresses the local copy and emits ablob/<HEAD>/...URL that 404s. This is the ref-binding defect already raised on #28, but #35's exact-generation claim and manifest pairing depend on its fix.
Validation on the exact head: focused render/graph tests passed (140); full suite passed (714, 4 skipped).
Summary
Depends on #28. The reviewable change is commit
aa789e4; earlier commits belong to the dependency stack.Validation
make lintmake check-examplegit diff --check