Repository navigation
T017: A tree record that names no absolute path makes its lane UNREAD, so a sync and a reconcile keep the lane's rows instead of swapping the tree's row for one keyed by the record's id (opensoft/openRepoTools#302) (part of opensoft/openRepoTools#186) - #9
Merged
Merged
Conversation
…lane UNREAD, so a sync and a reconcile keep the lane's rows instead of swapping the tree's row for one keyed by the record's id This is the T017 continuation, in this leg (opensoft/openRepoTools-spec), of the original opensoft/openRepoTools branch fix/pathless-tree-record-302 at 01c83b70ebf3a91adea40cf76fe4f1d8a2eecf48, issue opensoft/openRepoTools#302. The original is stacked on fix/control-root-unsearchable-291 (opensoft/openRepoTools#291, head 3e97ae51445), so its own change is its head against that head, and it has no merge of main. Spec-leg part of its own change: docs/README-lanes.md (+22 -9: the path and branch row, the keyed-by-path sentence, the paragraphs on which lane gets its own UNREAD line and on the lane-wide hold, and the marker sentence). Its other paths (lanes-edit.sh, lanes-index, tests/test_lanes_index.py and tests/test_pathless_tree_record_302.py) belong to the code leg and are the paired commit there; the leg table sends docs/ to this leg with no rename. This continuation stacks on the one for opensoft/openRepoTools#291, as the original does; the apply was clean, with no offset. The subjects below are quoted from the originals; a bare #N in them is opensoft/openRepoTools#N. Old-to-new receipt, the original's own non-merge commits in opensoft/openRepoTools (3e97ae5..01c83b7): e094080de29f Add the tests that a tree record that is read and names no absolute path holds its lane's rows in the inventory index, as part F holds a record that could not be read (#302) d035807239e7 lanes-edit.sh worktrees names a lane UNREAD beside a tree record that was read and names no absolute path, so a sync keeps the lane's rows instead of swapping the tree's row for one keyed by the record's id (#302) e7f86b6fe02d The README and the lanes-index comments no longer say a sidecar with no path: is a tree with an empty path, and the README says what a record that names no absolute path costs its lane (#302) 01c83b70ebf3 Add the tests that the UNREAD line names every tree record that names no absolute path, and that the clause holds its own lane and no other (#302) Lane: openRepoTools-4 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Reviewer's GuideDocumentationUpdate the lane inventory documentation to explain when a tree record makes its lane UNREAD, how that holds the entire lane’s rows, and how absolute-path records are handled.
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
This was referenced Nov 7, 2026
brettheap
changed the base branch from
fix/control-root-unsearchable-291
to
main
November 8, 2026 13:48
brettheap
marked this pull request as ready for review
November 8, 2026 13:48
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
This is the T017 continuation, in this leg (opensoft/openRepoTools-spec), of the
opensoft/openRepoToolsbranchfix/pathless-tree-record-302at01c83b70ebf3, for opensoft/openRepoTools#302 (part of opensoft/openRepoTools#186). The original tree and branch stay as the archived original (lane 4's decision, opensoft/openRepoTools#186 comment 6548343086). One commit here,7c80dc826965, carries it.It carries the spec-leg part of that branch's own change, which is its head against
3e97ae5, the head offix/control-root-unsearchable-291it is stacked on, with no merge of main:docs/README-lanes.md, +22 −9. The change's other four paths (lanes-edit.sh,lanes-index,tests/test_lanes_index.pyandtests/test_pathless_tree_record_302.py) are the paired commit in opensoft/openRepoTools-code. It is stacked on the spec PR for opensoft/openRepoTools#291 (#8), as the original is; the patch applied without conflict, at no offset.What was wrong and what changed
What was wrong
The manual still said that a tree's path can be empty (a sidecar with no
path:), which has been stale since opensoft/openRepoTools#252: a record with nopath:line is not a whole record, and the helper lists it under its own id. It also said nothing of what a tree record that names no absolute path costs its lane. opensoft/openRepoTools#302's code now names such a laneUNREAD, beside the record's row, so thatlanes-index syncandreconcile --source inventoryhold the lane's rows instead of swapping the tree's row for one keyed by the record's id or by the relative text; one such record holds every row of its lane until it is put right.What changed
docs/README-lanes.md, +22 −9, four hunks at git's default context, in the order of the file:pathandbranchrow: namesmalformed sidecar(A lane sidecar passes validation on itsschema:line alone, so a truncatedschema: 1record is read AND replaced openRepoTools#115), says each kind keeps the path it names and has the record's id where it names none, says that the lane of a record that could not be read, or that was read and names no absolute path (none, an empty one, or a relative one), isUNREADbeside its row, and states the cost: one such record holds every row of its lane, while one that names an absolute path keeps its key, is rewritten in place and holds nothing.path:".UNREADline: adds a lane that holds a record that was read and names no absolute path (nopath:line, an empty one or a relative one, in a record that is not whole or is of another schema).path:; it no longer says that a tree's path can be empty.UNREADline.The manual's added text keeps the original's bare issue numbers, such as
(#N), byte for byte. In this leg's manual they name opensoft/openRepoTools issues, as its other pre-split text does.Not in this PR
worktree_rows, the oneUNREADline per lane, thelanes-indexcomments and the tests.Old to new: the receipt
The original's own non-merge commits in
opensoft/openRepoTools(3e97ae5..01c83b7), 4 in all, are carried by one commit in this leg,7c80dc826965. The list is the commit's own body, and it equals the original's non-merge commits read from the chain'srefs/root/ref (checked).The subjects are the original's, byte for byte; a bare
(#N)in them names the root issue.Of these, the commit that touches
docs/README-lanes.md(the original's range on that path) ise7f86b6fe02d. The others change code-leg paths only, and their part is the paired code PR's.Resolutions
None. The patch applied clean, with no offset, onto the commit for opensoft/openRepoTools#291.
The pairing
The code part of this change is the commit
4ed3fd2ad6feonfix/pathless-tree-record-302in opensoft/openRepoTools-code, its own PR, opensoft/openRepoTools-code#6 (basefix/control-root-unsearchable-291). The code leg's checks read the manual throughOPENREPOTOOLS_SPEC_ROOT:tests/test_repo_hygiene.pyreadsdocs/README-lanes.md(call sites at lines 1373, 1404, 1423, 3139 and 3572 of the code leg'smain; 1404 is the tuple of surfaces that a loop reads throughdoc()) andtests/test_test_roots.pypins which manual a run reads. The code leg's own CI (OPENREPOTOOLS_COMPOSED: '0', no spec leg beside the checkout) skips those checks, so they bind only in a composed run or with the variable set to a spec clone. A search of the manual lines this change touches for the strings those checks pin (the rung-count heading, the two settlement quotes,every lane on this workstation, the exit-code section's two markers andlane-end <lane> --retire) finds none: read, not run. So the two PRs are one change in two repositories, and they land together, as a pair. The code PR goes first, so that the manual never describes behaviour the code lacks: the paired code PR, opensoft/openRepoTools-code#6, first, then this one. The state that order passes through, the code chain's tip beside the spec leg'smain, passed-k test_repo_hygienein the independent review (run (e) under Tests: 223 passed, 14 skipped; that run read the chains' tips, not this commit alone). The other order's state, the spec tip beside the code leg'smain, was not run. I found no check that turns either order red; that is a reading, not a run.Tests
The manual is tested from the code leg, not here: this leg has no code and no CI workflow of its own.
tests/test_repo_hygiene.pyreadsdocs/README-lanes.mdthroughOPENREPOTOOLS_SPEC_ROOT(tests/test_test_roots.pypins which manual a run reads). The pair isfix/pathless-tree-record-302in opensoft/openRepoTools-code, commit4ed3fd2ad6fe.The pair's hygiene runs, from lane 4's independent paired review (2026-10-31), with
OPENREPOTOOLS_SPEC_ROOTset to the spec clone shown (env -i,TMPDIR=/tmp). They read the spec chain's tip, which carries this PR's commit with the later commits of the chain; none read the manual at this commit alone. The letters are the review report's own: (c) is the shell-suite run, in the paired code PR, and (d) was skipped.-k test_repo_hygiene5f2995d43893+ spec tip8104f2cf965c-k test_repo_hygiene, baselinemain2a057a6+ specmain9f8b21a-k test_repo_hygiene5f2995d43893+ specmain9f8b21aThe pair runs read the chains' tips as they were before the message amend (code
5f2995d43893, spec8104f2cf965c). The amend kept every tree (git difffrom each old commit to its new one is empty), so the runs stand for the amended tips, code2c15aa6613c3and spec430ea20784ac. No failure is new at the tips.Release notes (v1.2.0)
The release-notes lines for this change are in the paired code PR, opensoft/openRepoTools-code#6 (
fix/pathless-tree-record-302in opensoft/openRepoTools-code), once, in the PR that carries the code change. This PR repeats none.Review
READY, lane 4's independent paired review of both chains, 2026-10-31. It found no MUST and no SHOULD against the commits, and three NITs. Report sha256:
4ac9e5441affc6aeac48e6d73419580f6786440dc0e5dd32722cc40b8070a682. The review read the chains before the message amend (tips5f2995d43893and8104f2cf965c, the same trees as the amended tips).lanes-indexlines 1904 to 1905, docstring only:lane_generation's docstring reads as the full list oflane-state's 10s, but since A lane control root that cannot be searched reads as "no trees", so an inventory sync removes its rows (from #289's review) openRepoTools#291 there is a third, a blocked lookup; optional, and the same text would arise when the root branches land.rc_tree_idlacks the 180-character cap, so the shell suite fails when the run root is longer than about 111 characters, and the shell suite does not setXDG_STATE_HOME, so run (c) left two files outside its run root.The original's recorded review, from the root repository; the comment ids are copied from the root draft and were not re-read (no network): lane 3's design review (comment 6352328413, PROCEED) ruled R4, "revise the existing test and the stale README sentence, with 524's three passages added and the cost stated"; its review of the finished code (comment 6371844475, READY AFTER FIXES) found R4 and 524 done, and asked for two tests only; its re-check of the last head (comment 6375703768) is READY TO LAND, with no finding. The manual's commit (
e7f86b6) is in this PR's single commit.Landing
It lands only on Brett Heap's word, PR by PR; nothing in this text is a landing.
fix/control-root-unsearchable-291(the spec PR for A lane control root that cannot be searched reads as "no trees", so an inventory sync removes its rows (from #289's review) openRepoTools#291, T017: A lane control root that cannot be searched is read as not read, not as no trees: lane-state and lane-trees exit 10, the listing says UNREAD, and a sync keeps the lane's rows (opensoft/openRepoTools#291) (part of opensoft/openRepoTools#186) #8), which lands before it, as the original is stacked on A lane control root that cannot be searched reads as "no trees", so an inventory sync removes its rows (from #289's review) openRepoTools#291's.fix/control-root-unsearchable-291, the branch of T017: A lane control root that cannot be searched is read as not read, not as no trees: lane-state and lane-trees exit 10, the listing says UNREAD, and a sync keeps the lane's rows (opensoft/openRepoTools#291) (part of opensoft/openRepoTools#186) #8.mainshowsMerge pull request #1). A merge commit keeps this commit's message and its receipt byte for byte, and the stacked chain lands as built, each PR after the one its base names. A PR stacked on this one is retargeted tomainbefore this PR's branch is deleted: deleting a merged base branch first closes the dependent PR.33ce26dinto the branch at open", with its push and the PR's own CI record:33ce26dis the root's frozenmain, and this leg's ownmainis the base here (the head is the commit above, with nothing merged in).[REFRESH AT PR TIME ...]and[REFRESH AT LAND TIME ...]brackets, which name the root's own CI runs and the root landing; this leg's own checks at open are recorded when the PR is opened; the leg has no CI workflow of its own.Closes #Nline and itsgh pr merge --squash --match-head-commit --body-filesteps, with theland-ort4.shandland-ort3.shnotes: the commit's own message stands in, byte for byte, andCloses #Nbecomes "part of", with no closing keyword.Lane: openRepoTools-4
Claim: opensoft/openRepoTools#302 (comment 6349903174)
🤖 Generated with Claude Code
Summary by Sourcery
Clarify lane inventory semantics so records without absolute paths preserve their lane’s rows during synchronization and reconciliation until they are fixed.
Enhancements:
Documentation:
UNREADlane behavior and reconciliation consequences for tree records without absolute paths.