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 pin_restore: a conflicted shape pin sends every copy to a hand merge, and a leg pin broken in its bump commit is restored to the old pin #547
From the v1.1.0 triage of the v1.0.0 known limits on #460. One pull request covers the lines below.
Lines
L2-8: with the shape pin conflicted, every conflicted copy goes to a hand merge, even copies neither side edited. Where: shape-doctor.py pin_restore (unmerged branch). Effort M; all. On main 3121945: A plausible team flow where nothing is lost; main still lists every conflicted pinned copy in left_for_a_person, with no test for "neither side edited" (sd.py:2829-2860). (source)
L2-9: restoring a leg pin broken in its bump commit restores the OLD pin, then DRIFTED. Where: shape-doctor.py pin_restore (committed branch). Effort S; all. On main 3121945: Uncommon and mended on a re-run; checkout <sha>~1, whose why says only "Commit that", is unchanged (sd.py:2915-2919). (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-8: With #496, when contracts/shape-pin.yaml is conflicted, every conflicted copy the taken side's pin lists goes to a person to merge by hand, including a copy neither side edited: in "two applies to different targets" the conflicting copies are often pure tool output on both sides (validators, workflows, AGENTS-shape.md, a naming copy changed by two standard versions). Before #496 one pasted NEXT took them whole to COMPLIANT, which was right for them and wrong only for a copy kept with --accept-local. Now each is a hand merge, and keeping both sides of a hunk, then --accept-local, pins a stale line as the project's own edit, so every later upgrade of that copy is a both. Nothing is lost; the work and the risk of a hybrid copy are new for that flow. Direction: take a conflicted copy whole with the pin where each side's stage equals the standard's own file at that side's pinned commit (neither side then holds a project edit), or have the note say that a copy neither side edited is merged by taking the pin's side. Evidence: probe X1 in handoffs/xFactory/attachments/lane-openRepoShape-2/review496-565f920/ (opensoft/brett-wip), at #496's 565f920.
— #460, comment
L2-9: shape-doctor.py's manifest kinds NEXT for a leg pin that does not load and was broken in a commit (restore: committed, pin_restore, shape-doctor.py:2709-2728) is git -C <root> checkout '<sha>~1' -- contracts/<role>-pin.yaml, which checks only that the older pin reads. When the breaking commit is the bump's own (bump-leg.py --to X, then the commit is amended with a slip in the pin), <sha>~1 holds the pin for the OLD leg commit, so after the NEXT the doctor says DRIFTED (pinspin-gitlink-mismatch, legschecked out at X, pinned at Y). #495 (5e02abe, #478) now names the closing step, but only in the pins reason on the next run: bump-leg.py --root <root> --leg <role> --to <gitlink>, or --to <pin> to undo. Run before the restored pin is committed, either is refused bump-leg-root-dirty; committed first, --to <gitlink> ends COMPLIANT (measured). The manifest kinds note says none of it. Direction: have the note say "commit it, then run the pins row's bump-leg.py line", or restore only a pin whose commit: equals the gitlink at HEAD. Nothing is lost. Repro: tools/probes358.py <tree> <scratch> <tag> p4 in handoffs/xFactory/attachments/lane-openRepoShape-2/followups-8165/ (opensoft/brett-wip). Seen at cc8f2da (main, after #358 landed).
— #460, comment
CLAIMED — lane openRepoShape-4, session 11c6c0ef-495a-4a05-94cf-811b7b0a1012@Eagle, 2026-10-14T16:50:49Z, for #547
Logged in lanes/log/openRepoShape-4.md at 1db5767f1aba89959fc119f94f01afb837f97b8d.
The three reads (lane-collision-protocol Rule 1):
1. existing `CLAIMED —` comments on opensoft/openRepoShape#547:
none
2. `gh pr list --repo opensoft/openRepoShape --state all --search "#547"`, kept where the row or its body names `#547`:
none
3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `547` as a whole token:
none
Activity
brettheap commentedon Oct 14, 2026
CLAIMED — lane openRepoShape-4, session 11c6c0ef-495a-4a05-94cf-811b7b0a1012@Eagle, 2026-10-14T16:50:49Z, for #547
Logged in
lanes/log/openRepoShape-4.mdat1db5767f1aba89959fc119f94f01afb837f97b8d.The three reads (lane-collision-protocol Rule 1):
shape-doctor.py: a conflicted copy whose two sides hold different mod…
Merge main 70331aa into fix/posix-paste-lines: the seven § Starting m…