Repository navigation
Description
The read-across follow-up and the contracts/ rule's reason should name legs.spec_path and legs.code_path by key, so the hand edit the tool itself asks for leaves no plan-time path behind in check's output, the split commit's message or the pull request body.
From the checklist triage of 2026-10-15; Brett Heap approved its recommendations at 2026-10-15T16:49:38Z. One pull request covers the lines below.
Lines
- L2-18: after the hand edit of
legs.spec_pathorlegs.code_paththat the tool asks for, the read-across follow-up keeps plan-time paths. Where: adopt-project.pycross_leg_references(:1726-1728),follow_ups_for. Effort S; all. On main26c1600: At 26c1600planrenders the list once (:3401), with{code_path}/…and../{spec_path}/…values (:1726-1728), andcheck(:5837) andexecute(:8294) read it back from the plan; open adopt-project.py: the Makefile blockexecuteappends and the cross-leg follow-up name each leg where the plan mounts it, so--spec-path legs/specexports aCONTRACTS_DIRthat exists and a nested--code-pathgets the right../path (#522) #572 at 22ce69b rewrites only the Makefile line to namelegs.spec_pathand still renders this line from the plan-time values. (source)
Rides along (backlog; tick it here if the same change covers it)
- L2-19: the
contracts/rule'sreason:says../spec/contractsfromcode/, which is false for a nested plan. Where: contracts/path-classification.yaml:299-300. Effort S; all. On main26c1600: Unchanged at 26c1600 (:299-300); contracts/path-classification.yaml: a source's ownsingle-repository.yamlis asked drop or root, drop by default, under its own rule, soadopt-project.py planno longer asks a record no leg reads thespec,codeorrootquestion (#528) #566 edits this file only at its header and in a new rule (hunks at :33 and :419), and adopt-project.py: the Makefile blockexecuteappends and the cross-leg follow-up name each leg where the plan mounts it, so--spec-path legs/specexports aCONTRACTS_DIRthat exists and a nested--code-pathgets the right../path (#522) #572 does not touch it, so the fix waits for contracts/path-classification.yaml: a source's ownsingle-repository.yamlis asked drop or root, drop by default, under its own rule, soadopt-project.py planno longer asks a record no leg reads thespec,codeorrootquestion (#528) #566. (source)
Each line above is marked → this issue on its tracking issue. Tick it there too when this closes.
The lines as written on the tracking issues
L2-18 (P3; adopt-project.py, #572 review): after the hand edit of
legs.spec_pathorlegs.code_paththat the tool itself asks for, the read-across follow-up thatplanwrote still names the plan-time paths.
follow_ups_for(adopt-project.py:1733) callscross_leg_references(:1618-1693) once, atplan(:1751), at 9ddb7ef.MOUNT_REMEDIATION(:7311-7324) tells the person to changelegs.spec_pathorlegs.code_path, andplan-leg-path-collidessays the answers "are edited afterplanwrites them" (:1979-1984).executethen mounts the legs at the edited paths.- So
check's output, the split commit's message and the pull request body keep sayingcode/...and../spec/contracts/for a layout that no longer has them. Probe:review572-9ddb7ef/tools/l2rv522-handedit.py. The same on main bfed143. adopt-project.py: the Makefile blockexecuteappends and the cross-leg follow-up name each leg where the plan mounts it, so--spec-path legs/specexports aCONTRACTS_DIRthat exists and a nested--code-pathgets the right../path (#522) #572's review F1 covers the Makefile line of the same follow-up list (it names the key); this is the other line, and adopt-project.py: the tracking branch defaults to the source's default branch, topics are set before the pull request, and NEXT names scripts/bootstrap.py when the shape's Makefile went aside (#479, #480, #481) #493-F3's staleness for the leg paths.- Direction: name the keys and not their values, as adopt-project.py: the tracking branch defaults to the source's default branch, topics are set before the pull request, and NEXT names scripts/bootstrap.py when the shape's Makefile went aside (#479, #480, #481) #493-F3 did for
tracking_branch(:1745-1750), or haveexecuterender the list from the plan it reads.
L2-19 (nit; contracts/path-classification.yaml, #572 review): the
contracts/rule'sreason:says../spec/contractsfromcode/, and every matching plan entry copies it.
contracts/path-classification.yaml:299-300at 9ddb7ef: "spec/contractsfrom the root,../spec/contractsfromcode/".- For a nested plan, such as
--spec-path legs/spec --code-path impl/code, the entry's reason contradicts the corrected follow-up a few lines below it. It was there before adopt-project.py: the Makefile blockexecuteappends and the cross-leg follow-up name each leg where the plan mounts it, so--spec-path legs/specexports aCONTRACTS_DIRthat exists and a nested--code-pathgets the right../path (#522) #572.- Direction: path-free wording in the reason ("read across the assembly-root mount"). contracts/path-classification.yaml: a source's own
single-repository.yamlis asked drop or root, drop by default, under its own rule, soadopt-project.py planno longer asks a record no leg reads thespec,codeorrootquestion (#528) #566 also edits this file (the policy header at:30-35), so sequence it after contracts/path-classification.yaml: a source's ownsingle-repository.yamlis asked drop or root, drop by default, under its own rule, soadopt-project.py planno longer asks a record no leg reads thespec,codeorrootquestion (#528) #566.
Activity
brettheap commentedon Oct 15, 2026
CLAIMED — lane openRepoShape-2, session 81650e29-c906-4fe8-96c9-55580bfe0c44@Eagle, 2026-10-15T18:21:18Z, for #600
Logged in
lanes/log/openRepoShape-2.mdatde584552a0ed32dde63d09ee75e98322e1efc6bf.The three reads (lane-collision-protocol Rule 1):
Merge origin/main 8f453d0 into fix/600-adopt-leg-keys
adopt-project.py: `check`'s "mount the legs at" line and the split me…
adopt-project.py: the read-across follow-up names `legs.code_path` an…
Merge origin/main (de92614) into l3-563-docs
README.md, the handbook and the v1.1.0 notes: the adopted repository …