Repository navigation
Description
Found by the independent review of #240 (review 5561239588), at head 85a49d9. #240 widened is_family_folder to accept a folder named for family.yaml's repository: as well as its name:, and made resume name the holder's repository from the holder it resolved. Nothing below blocks that; these are the loose ends the review named and the round did not take.
Line numbers are at 85a49d9. The estate resolver is byte-identical across park, resume and status, so each row gives the three copies (park, resume, status).
1. The bash reader and openRepoShape v1.1.0's reader disagree on two value shapes
is_family_folder (park:269, resume:252, status:390) reads repository: with yaml_scalar and trim_unquote (park:172, resume:155, status:293). openRepoShape's parse_yaml (scripts/repo_shape.py:1039) and repo_basename (scripts/repo_shape.py:2399) at 190133d (v1.1.0, opensoft/openRepoShape#629) give different answers on the same text:
family.yaml line |
v1.1.0 | is_family_folder |
|---|---|---|
repository: testorg/Quill # the holder |
basename Quill |
rejected: the value keeps the comment |
repository: "testorg/Quill" # the holder |
basename Quill |
rejected |
repository: null in a folder named null |
no repository, falls back to name: |
accepted: null is read as text |
Everything else the review tried agreed: quotes, single quotes, CRLF, a bare Quill with no slash, an https or ssh url, an empty value, "", ~, a trailing slash, .git, case, either key order. kind: and name: already have the same comment gap, family.py never writes a comment, and a folder named null is not a real case, so nothing here is urgent. The fix belongs in the shared trim_unquote: a strip inside is_family_folder alone would leave the quotes on the quoted-with-comment form.
2. Both layouts of one family are found and nothing de-duplicates them
Quill/Quill (the repository rule) and QuillWorks/QuillWorks (the name rule) are different directories, so each is found by its own name and neither shadows the other. list_estates (park:346, resume:329, status:467) and the sweeps built on it list two rows, and walk each holder once. Before #240 only QuillWorks was visible.
Both parks write under the same record key, the family id, so the later park is expected to replace the first one's member blocks (AGENTS.md: "a park anywhere else rewrites the whole block"). That was not run. A person ends up with both layouts by resuming a record parked from one layout on a machine that has the other. Decide whether to de-duplicate by family.yaml's id:, or only to say it in AGENTS.md.
3. Finding a holder by its id, when the record is stale
After a person follows make siblings' own mv QuillWorks/QuillWorks Quill/Quill, the record is stale until the next park (root: QuillWorks/Alpha). resume Quill now names the right repository (#240). But resume quill, the id, which is how park files the record, finds no estate: estate_by_name "$NAME" (resume:1141) misses it, MANIFEST_DIRNAME is the record's QuillWorks (resume:1200), and the second lookup (resume:1235) misses too. So it says absent cloning testorg/QuillWorks -> ~/projects/QuillWorks/QuillWorks (resume:1310) although the family is on disk at Quill/Quill. Main does the same for any folder-against-record mismatch. The fix is to find the holder by family.yaml's id: against the record's family:, which is a different change.
4. Test gaps (none hides a defect today)
- The cwd walk-up (
estate_walk_up:park:325,resume:308,status:446) is untested for a repository-named family. The review checked it by hand: fromQuill/Quill/scripts,Quill/QuillandQuill,park --dry-runanswers the holder; from inside the memberQuill/Alphait answers that member, nearest wins, as intended. named_apart's second record (tests/test_park_resume_commands.py:625,quillworks.yaml) is a file park never writes forid: quill: park writes one record per family, named for the id.test_resume_names_the_repository_the_holders_family_yaml_givesreaches the on-disk read through it. The realistic spelling isresume quillagainstquill.yaml; park, resume and status find a family folder named for its repository or its display name, and resume names the holder's repository from family.yaml where it is on disk (#236) #240 now has a test of that for the stale record, so this fixture could drop the second record and the on-disk test could use the realistic one.
No closing keywords: this lists work, and #240 lands without it.
🤖 Generated with Claude Code
Activity
brettheap commentedon Oct 18, 2026
CLAIMED — lane openRepoTools-1, session df82f553-7803-49c4-8ddf-3f9acdcb8ee0@Eagle, 2026-10-18T14:09:57Z, for #243
Logged in
lanes/log/openRepoTools-1.mdatae6e79fbd06c688e3b1017bf8a355b0cf25cc0ea.The three reads (lane-collision-protocol Rule 1):
family_folders_with_id lists one holder once however many spellings o…
family.yaml values are read the way openRepoShape v1.1.0 reads them, …
brettheap commentedon Oct 18, 2026
RELEASED — lane openRepoTools-1, session df82f553-7803-49c4-8ddf-3f9acdcb8ee0@Eagle, 2026-10-18T18:26:24Z, for #243 — PR #251 landed as a059c1a (Fixes #243) and #243 is closed; tree ort-family-followups-243 removed