Skip to content

Follow-ups to #240: family.yaml value shapes, two layouts of one family, a stale record found by id, and two test gaps #243

Closed

Description

@brettheap

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: from Quill/Quill/scripts, Quill/Quill and Quill, park --dry-run answers the holder; from inside the member Quill/Alpha it 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 for id: quill: park writes one record per family, named for the id. test_resume_names_the_repository_the_holders_family_yaml_gives reaches the on-disk read through it. The realistic spelling is resume quill against quill.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

  1. brettheap commented on Oct 18, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoTools-1, session df82f553-7803-49c4-8ddf-3f9acdcb8ee0@Eagle, 2026-10-18T14:09:57Z, for #243

    Logged in lanes/log/openRepoTools-1.md at ae6e79fbd06c688e3b1017bf8a355b0cf25cc0ea.

    The three reads (lane-collision-protocol Rule 1):

    1. existing `CLAIMED —` comments on opensoft/openRepoTools#243:
       none
    2. `gh pr list --repo opensoft/openRepoTools --state all --search "#243"`, kept where the row or its body names `#243`:
    240	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)	fix/family-folder-repository-name-236	MERGED
    3. `git ls-remote --heads git@github.com:opensoft/openRepoTools` branches naming `243` as a whole token:
       none
    
  2. brettheap commented on Oct 18, 2026

    @brettheap
    ContributorAuthor

    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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions