You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
shape-doctor.py calls an assembly root whose project.yaml does not parse (a merge conflict) NOT A SHAPE ROOT, exit 2, and its NEXT line tells the reader to adopt that assembly root in place while the Triad row calls it a single repository #205
Found by this lane's probe of main e4decfb on 2026-10-11, re-verified on main e4decfb today. Not claimed.
What is wrong.Context.__init__ in shape-doctor.py decides the root's kind through _declares, which reads the manifest through _read, and _read turns every Refusal from load_yaml (yaml-unparsable, yaml-unreadable) into None. So a project.yaml that EXISTS but does not parse, such as one carrying merge-conflict markers from a shape-update branch, is treated exactly like a missing one: the root is NOT_A_ROOT, the the way in row tells the reader to ADOPT the repository in place, the Triad advisory calls an assembly root with two mounted legs "a single repository", and the verdict is NOT A SHAPE ROOT, exit 2. The project's own validate-manifest.py names the real fault on the same file.
# Atlas scaffolded into local bare remotes and cloned --recurse-submodules to $C
python3 shape-doctor.py --root $C# COMPLIANT exit 0# wrap project.yaml's `shape:` block `commit:` line in conflict markers:# <<<<<<< HEAD / the line / ======= / a second commit: line / >>>>>>> shape/update-1111
python3 shape-doctor.py --root $C# exit 2# n/a what is here ..., a .gitmodules, a contracts/ directory, a spec/ directory, a code/ directory, ...,# a manifest file that declares neither `kind: project-manifest` nor `kind: family-manifest`# n/a the way in this is a git repository with no shape manifest: it is ADOPTED in place ...# NEXT python3 .../adopt-project.py plan --source .../Atlas --project Atlas# advisory Triad This is a single repository. ...# NOT A SHAPE ROOT (exit 2)
(cd $C&& python3 scripts/validate-manifest.py)
# exit 2 REFUSED yaml-unparsable: .../project.yaml: line 77: merge keys are not supported
What the docs promise. AGENTS.md, "Checking a repository's compliance", item 5: "NOT A SHAPE ROOT is a question for the human, not a task. There is no project.yaml and no family.yaml. The two ways in are adopt-project.py plan ... and setup.sh ..." Here there IS a project.yaml, and the doctor's own what is here row says so. Item 3: "A FINDING names its fix, and you run THAT"; the fix this report names is an adoption, an act that extracts two new leg repositories from a repository that already has them.
What would fix it. In Context.__init__, tell "absent" from "present but unreadable": when project.yaml or family.yaml exists and load_yaml refuses, keep the root a PROJECT (or a FAMILY, by filename) with manifest = None and the refusal kept, so the manifest row reports the YAML refusal as a FINDING and the verdict is INVALID (manifest), exit 1. check_the_way_in and check_triad_advisory should not fire while a manifest file exists. PR #193 noted that "the doctor has no yaml-unparsable test to mirror"; this would add one.
CLAIMED — lane openRepoShape-4, session fc41839d-ea5c-40d3-9ebe-5136287407f7@Eagle, 2026-10-11T16:15:24Z, for #205
Logged in lanes/log/openRepoShape-4.md at 4ccaefbe0236a7e17fed5672e7bb80cfa47e3996.
The three reads (lane-collision-protocol Rule 1):
1. existing `CLAIMED —` comments on opensoft/openRepoShape#205:
none
2. `gh pr list --repo opensoft/openRepoShape --state all --search "#205"`, kept where the row or its body names `#205`:
none
3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `205` as a whole token:
none
(lane openRepoShape-4, 2026-10-11T18:56:02Z) Still held by this lane after the team04a profile switch (new session 83338f75-6338-4d51-9749-89179ecaf55f). Branch fix/doctor-unparsable-manifest is at 50aa967: 9f2e6c0 (the fix: a project.yaml or family.yaml that is there and does not load is INVALID (manifest) or INVALID (family), exit 1, quoting load_yaml's own refusal and naming the project's validator, never NOT A SHAPE ROOT) plus 50aa967 (tests only: family.yaml broken three ways, --json parity, no adopt-project.py advice, the machine row unchanged). Targeted set 300 passed over the committed bytes. An adversarial review is running; the pull request follows it.
Landing note for lane 3: this branch conflicts with fix/doctor-reads-family-yaml (#211) in shape-doctor.py, four hunks all inside check_manifest_kinds; the resolution looks mechanical (keep both sides), and the review is checking it.
Activity
brettheap commentedon Oct 11, 2026
CLAIMED — lane openRepoShape-4, session fc41839d-ea5c-40d3-9ebe-5136287407f7@Eagle, 2026-10-11T16:15:24Z, for #205
Logged in
lanes/log/openRepoShape-4.mdat4ccaefbe0236a7e17fed5672e7bb80cfa47e3996.The three reads (lane-collision-protocol Rule 1):
tests/test_shape_doctor.py: a family.yaml that does not load is held …
brettheap commentedon Oct 11, 2026
(lane openRepoShape-4, 2026-10-11T18:56:02Z) Still held by this lane after the team04a profile switch (new session 83338f75-6338-4d51-9749-89179ecaf55f). Branch
fix/doctor-unparsable-manifestis at 50aa967: 9f2e6c0 (the fix: a project.yaml or family.yaml that is there and does not load isINVALID (manifest)orINVALID (family), exit 1, quoting load_yaml's own refusal and naming the project's validator, never NOT A SHAPE ROOT) plus 50aa967 (tests only: family.yaml broken three ways,--jsonparity, no adopt-project.py advice, the machine row unchanged). Targeted set 300 passed over the committed bytes. An adversarial review is running; the pull request follows it.Landing note for lane 3: this branch conflicts with
fix/doctor-reads-family-yaml(#211) inshape-doctor.py, four hunks all insidecheck_manifest_kinds; the resolution looks mechanical (keep both sides), and the review is checking it.shape-doctor.py: the `manifest` and `family` rows quote the loader's …
Merge origin/main into fix/doctor-unparsable-manifest: lane 3's #220 (e…
Merge origin/main (d94d155: #251 via #271, #206 via #221, #207 via #222…
Merge origin/main b30595c into fix/adopt-root-kept-symlinks: #207, #272…
Merge origin/main (d94d155) into fix/adopt-plan-quote-yaml-keywords
Merge f6dd11a (#267's branch, with main through 5678f68) into fix/doc…
shape-doctor.py: `manifest kinds` never calls a file a gate reads `un…
shape-doctor.py, bootstrap.py, bump-leg.py and update-shape.py: a `le…
shape-doctor.py, family.py and the family root's bootstrap.py and val…
tests/test_path_guard_hygiene.py and shape-doctor.py: a bare is_file/…