Skip to content

In the no-estate sweep, park skips a root that has no Speckit git overlay instead of counting it as a refusal #6

Closed
opensoft/openBenches
#39

Description

@brettheap

Lane: openreposhape-2 (openRepoShape-2)

Ruling: opensoft/openRepoShape#92 (comment) — Brett Heap, 2026-09-10, verbatim: "rule on the #92 open item: skip roots without the overlay."

What is wrong today

openRepoShape #91/#93 (landed there as d090a7a, carved here by its #94 and living in this repository since PR #1) made bare park — no <Name>, no --repo, no estate around the cwd — park EVERY estate under the projects directory, in name order, continuing past a refusal.

On Eagle that sweep exits 1 and always will: four roots (MedxEHR, MedxGlass, openDox, openXdox) carry no Speckit git overlay, so each one's own make park refuses with exit 2 —

make park needs the Speckit worktree overlay; install it with: setup-openspeckit

— which the sweep counts as a refusal. A root that was never given the overlay is not a park that FAILED; it is a park there was never anything to run. Counting it as a failure makes the one summary line that matters unreadable: a person who has one genuinely refused estate cannot see it among four roots that were never park-able.

The semantics to implement

  1. The sweep only. In park_every_estate / run_one_estate, before running make park in a standalone root, test the overlay THE SAME WAY THE MAKEFILE TESTS IT — -x <root>/.specify/extensions/git/scripts/bash/park.sh, which is templates/assembly-root/Makefile's own test -x $(PARK) || … exit 2 with OVERLAY_MISSING. Absent: print ONE line in that estate's report block —

      SKIPPED (no Speckit overlay; install it with: setup-openspeckit)
    

    — count it under a new skipped tally, run nothing there, and do not let it touch the exit code. A family holder is run as it is today: its own templates/family-root/Makefile has no such test, it fans out to the members with siblings.py --make, and a member's own refusal is the holder's to report — so members are NOT pre-checked here, and the code says so in a comment.

  2. Explicit is unchanged. park <Name>, park --repo <owner/name> and the walk-up inside an estate keep today's behaviour: the Makefile's exit 2 refusal is relayed, verbatim, naming setup-openspeckit. A person who NAMES a root gets the refusal; only the sweep, which named nothing, skips.

  3. The summary gains the skipped count, and only when there is one, so the Crash-consistent lane worktree recovery: canonical inventory and RUNNING → SWAPPING → SWAPPED lifecycle #91 line is untouched on a workstation where every estate has the overlay:

    park: 3 estate(s) parked, 0 refused or with findings, 4 skipped (no overlay)
    

    The exit code is computed over NON-SKIPPED estates only: 0 when every non-skipped estate parked, 1 when any refused or was left with findings — which is Crash-consistent lane worktree recovery: canonical inventory and RUNNING → SWAPPING → SWAPPED lifecycle #91's rule with the skipped ones simply not counted. If EVERY estate was skipped: exit 0, and a line that says so and names the installer.

  4. --dry-run prints would skip (no Speckit overlay; install it with: setup-openspeckit) for such a root, and creates nothing.

  5. The documents. README.md's and AGENTS.md's bare-park sentences (from Crash-consistent lane worktree recovery: canonical inventory and RUNNING → SWAPPING → SWAPPED lifecycle #91) gain the skip clause, and so does the header comment in park. The byte-identical shared estate resolver between park and resume is NOT touched — test_the_two_verbs_carry_the_same_estate_resolver_byte_for_byte holds that still, and this change belongs above it, in park-everything's own section.

resume does not change: the ruling is park-only, and resume's bare form still refuses.

Tests

In tests/test_park_resume_commands.py, in the #91 section's style: a sweep over two roots WITH the overlay stub and two WITHOUT (both parked, both SKIPPED, exit 0, the summary line); the all-skipped case (exit 0, and it says so); a skipped root beside a REAL refusal (exit 1, both lines); --dry-run says would skip; explicit park <Name> on an overlay-less root still exits non-zero with the Makefile's own refusal; a family holder in the sweep is still RUN and never pre-checked. The existing #91 sweep tests get the overlay stub their standalone roots now need, which is the fixture telling the truth about what a park-able root is.

Where this lands

Here, in opensoft/openRepoTools — the command's home since openRepoShape #94 — never in openRepoShape. workBenches re-vendors park afterwards.

Activity

  1. brettheap commented on Sep 10, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openreposhape-2 (openRepoShape-2), session 8fa66b30-4cf5-4b80-b40c-ac3640cf45ab, 2026-09-10T21:03Z, for the whole of this issue, branch feat/park-skips-roots-without-overlay, based on fe00a63ae7502461a042ebb5723ffc1909a25349 (origin/main).

    Brett Heap's word is the RULING linked above (opensoft/openRepoShape#92, 2026-09-10, "rule on the #92 open item: skip roots without the overlay"), relayed to this repository by this lane. Do not merge without his word; this claim covers authoring, the pull request and the review round only.

    Reads before claiming:

    1. gh issue list --repo opensoft/openRepoTools --state all: Bump the pinned openRepoShape submodule to 0fa73b7, past the park/resume carve #2 and The --help sentence naming what --install places beside this file reads like it's missing a word #3, both CLOSED and unrelated (a pin bump and a --help wording fix). No open issue, and none about the sweep.
    2. gh pr list --repo opensoft/openRepoTools --state all: park and resume move here from openRepoShape, with their own openRepoTools --install, their own suite, and the openRepoShape commit they were verified against pinned as a submodule (opensoft/openRepoShape#92) #1, openRepoTools --help: fix the sentence naming what --install places beside this file #4 and Bump the pinned openRepoShape submodule to 0fa73b7, past the park/resume carve #5, all MERGED. Nothing open, so nothing else is touching park.
    3. git ls-remote --heads origin: main only, at fe00a63 — no other lane has a branch here.
    4. The record this implements: park and resume carve out into opensoft/openRepoTools: its own installer, its own suite, pinned to the openRepoShape commit it was verified against; workBenches pins both standards by vendored copy (follows #77, #82) openRepoShape#92, its OPEN ITEM of 2026-09-10T16:32Z and the RULING comment of 20:59Z. openRepoShape's own Crash-consistent lane worktree recovery: canonical inventory and RUNNING → SWAPPING → SWAPPED lifecycle #91/Amendment 19: a closed or dormant lane leaves the listing, one sweep retires a repository's dormant rows on a word, and a retired position is never reissued #93 wrote the sweep being changed; nothing of this lands there.
    5. The files: park whole (the sweep's all_estate_dirs, park_every_estate, run_one_estate, refuse), resume (unchanged — the ruling is park-only), tests/test_park_resume_commands.py, tests/conftest.py, tests/test_repo_hygiene.py, README.md, AGENTS.md, and the pinned upstream/openRepoShape/templates/{assembly-root,family-root}/Makefile — the assembly root's test -x $(PARK) || … exit 2 is the test this change copies, and the family holder's siblings.py --make park is why a holder is never pre-checked.
  2. brettheap commented on Sep 10, 2026

    @brettheap
    ContributorAuthor

    PR OPEN, NOT MERGED — lane openreposhape-2 (openRepoShape-2), session 8fa66b30, 2026-09-10T21:18Z: #7, head 7053d362ac02f670904bee1b3c531af13dc28288, based on fe00a63.

    All five checks green on that head (tests, tests-macos, tests-windows, tests-no-submodule, SonarCloud); Sourcery review reports skipping. 140 -> 147 tests. Reviews: Copilot approval recommended, one nit — the sweep's kind test was != family and is now = standalone, so a kind nobody has invented yet is RUN and answered by its own Makefile rather than silently skipped (7053d36, replied on the thread). Codex declined (usage limits) and Sourcery's own review is rate-limited for ~3h, so only Copilot has read the diff. shellcheck is not installed on this machine and CI does not run it; bash -n park passes everywhere, including the macOS job's bash 3.2.

    Awaiting Brett Heap's word to merge. workBenches re-vendors park afterwards.

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