Repository navigation
The log's lifecycle follow-up reads a lane snapshot nobody can search as no snapshot, and can say "another act got there first" when no other act ran (follow-up to #309) #317
Copy link
Copy link
Open
Milestone
Description
From lane 4's #309 design (6350724542, its R6) and lane 3's review of it (#309 6352329119, ruling R6). It is filed on Brett Heap's approval, "File a v1.2.0 issue now (Recommended)", given in lane 3's session on the morning of 2026-10-23.
#309 fixes this reading in set-lane-state, set-lane-tree and rename-lane. This issue is the same reading in the follow-up that moves a lane's snapshot after a lifecycle line. #309 leaves it out because act 2 rewrites the functions it lives in.
What is wrong (at 33ce26d)
These facts come from reading the code, and lane 3's reviewer confirmed them by reading. Nobody has run them.
lane_state_fingerprint(lanes-edit.sh:13629–13635) answersnone/0/none, which means "this lane has no snapshot", for any file that[ -e ]cannot see. Alane-state.yamlunder a directory nobody can search is one of those.lane_state_preimage(:13773–13778) also answersnone/0/nonewhenlane_control_rootfails, whatever the reason.- The two reads.
write_eventtakes the pre-image before its line lands (:6131), andretire_rowstakes one for each lane it sweeps (:12901).lane_state_follow(:13817–13867) then reads the snapshot again under the mutex, and compares the two answers (:13847–13848):- when both reads are blocked, the answers agree. The follow-up tries to write, the write fails, and its note says so (
:13865); - when only one read is blocked, the answers differ. The note then says "Another act got there first — a recovery, or a second handoff" (
:13850), which is false. Nothing is written.
- when both reads are blocked, the answers agree. The follow-up tries to write, the write fails, and its note says so (
lane_state_followreturns without a word whenlane_control_rootfails (:13830). So a blocked lookup reads as a lane with no control root, which is the ordinary case before the cutover.- The three functions are byte-identical at
3e97ae5, A lane control root that cannot be searched reads as "no trees", so an inventory sync removes its rows (from #289's review) #291's branch, where they start at:13695,:13843and:13887.
Direction
- Tell "cannot be seen" from "not there" in all three functions, with A lane control root that cannot be searched reads as "no trees", so an inventory sync removes its rows (from #289's review) #291's
lookup_blocked. A blocked read is neithernone/0/nonenor a match.- The follow-up then writes nothing, and names the blocked directory as A control root nobody can search reads as an empty one in two writers: rename-lane leaves the lifecycle records behind without a word, and set-lane-state's fence says 7 for a race that never happened (from #291) #309's notes do.
- It says the snapshot is one act behind until the next transition.
- It never says that another act got there first.
- Keep the follow-up's contract: it never fails the event.
log's exit status does not change, and the new words are notes on stderr. The callers this reaches are:lane-start:4178, itslogcall;lane-end:2487, itslogcall;retire-rows.
- Order. It lands after act 2's slice 1a (Every register write goes through its lane's own checkout <W>-lanes/<lane>/, where lane-start and lane-end read the lane's row; a LANES_REPO naming W refuses; locks name their holder's container; refresh-workspace fast-forwards W (Amendment 23) (#198) #282), which rewrites
lane_state_follow, and slice 1b (Amendment 23 slice 1b: every writer fetches and fast-forwards under its lock or refuses with nothing written, pushes with no pull and reads origin back, a refused push replays the one edit, andcommitwith nothing staged is the publish act (#198) #307), which rewriteswrite_event. It also lands after A lane control root that cannot be searched reads as "no trees", so an inventory sync removes its rows (from #289's review) #291 and A control root nobody can search reads as an empty one in two writers: rename-lane leaves the lifecycle records behind without a word, and set-lane-state's fence says 7 for a race that never happened (from #291) #309, whose helper and wording it reuses. - Review.
lanes-edit.shis lane 3's tooling, so lane 3 reviews the design before any code. Lane 3's refined lock-lines term (Triad migration (feature 004-migrate-to-triad): execution tracking under Brett Heap's word of 2026-10-07 #186 6352336244) applies.
Not started: v1.2.0 work waits for the v1.1.0 tag and Brett's word.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity