Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
c45a452
docs: the triad split's lane-tooling side, surface by surface (T006, …
brettheap Oct 9, 2026
2aa8a59
WIP (untested): T018 worktree visibility for triad legs — the legs re…
brettheap Oct 9, 2026
5fcdf6a
T018 (a): the triad guidance for the sweep and lane-end's gate — READ…
brettheap Oct 9, 2026
8e2227e
WIP (untested): T018 (a) tests — tests/test_triad_lane_tooling.py and…
brettheap Oct 9, 2026
96da9af
WIP (untested): T010 docs — the §4.14 CI sketch exits 4 under #190's …
brettheap Oct 9, 2026
30f9dc0
T018 (c): the daily report counts each leg of an assembly as a checko…
brettheap Oct 9, 2026
13cb52d
T018 (d): lane-worktrees add records the leg it made a tree from, and…
brettheap Oct 9, 2026
4e39854
T018 (b): lane-handoff sees a triad's legs — the paired trees polled,…
brettheap Oct 9, 2026
9a5bbe2
T018 (b): lane-reconcile reads a triad's legs — each leg's worktree r…
brettheap Oct 11, 2026
e153361
Merge feat/triad-lane-tooling-handoff (T018 (b), writer 2): lane-hand…
brettheap Oct 11, 2026
b71e547
WIP (untested): T018 (b) guidance — README-lanes says what lane-hando…
brettheap Oct 11, 2026
9991d69
WIP (untested): T018 (d) — add's refusal on an unreadable manifest is…
brettheap Oct 11, 2026
8cb1368
Merge main f87fd5a into feat/triad-lane-tooling (T018): test the bran…
brettheap Oct 11, 2026
941330a
T018 docs: a parked paired tree is not the lane's to the sweep (§7 it…
Oct 13, 2026
4d4957d
T018 (b), pre-PR review M1 option (a): lane-handoff polls the paired …
Oct 13, 2026
6658396
T018 docs: README-lanes and the analysis say what M1 (a), S1 and S2 c…
Oct 13, 2026
7757eaa
Merge main aaa7bc8 into feat/triad-lane-tooling (T018): test the bran…
Oct 17, 2026
9f23a6b
WIP (untested): T018: lane-reconcile reports a leg whose .git git can…
Oct 17, 2026
bf2a220
WIP (untested): T018: lane-handoff counts a leg git cannot read as un…
Oct 17, 2026
cf7db4a
Merge main 2732d59 into feat/triad-lane-tooling (T018)
Oct 17, 2026
5d2c1c8
T018: lane-handoff withholds only a tree that could be an unreadable …
Oct 17, 2026
9a8f175
T018 docs: record lane 1's rulings of comment 6240800023 in the analy…
Oct 17, 2026
107958c
Merge main 83d2690 into feat/triad-lane-tooling (T018)
Oct 18, 2026
69f0017
Merge main f595e44 into feat/triad-lane-tooling (T018)
Oct 18, 2026
a4e0b17
T018: the daily report lists a leg that is also a canonical clone onc…
Oct 18, 2026
a60cf1c
T018 docs: the analysis spells bench paths ~/projects/..., as the hyg…
Oct 18, 2026
88ee9d9
Merge main f5c3bcd into feat/triad-lane-tooling (T018)
Oct 18, 2026
3d0642c
T018: verify 88ee9d9: 224 passed, 1 failed (test_the_lane_helper_suit…
Oct 18, 2026
ea4db0d
T018 tests: the unreadable-leg tests ask the git under test what it s…
Oct 18, 2026
5dd0df0
Re-run CI on main fe58808: refs/pull/246/merge was stale on 14239b9
Oct 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
192 changes: 191 additions & 1 deletion docs/README-lanes.md

Large diffs are not rendered by default.

712 changes: 712 additions & 0 deletions docs/triad-lane-tooling-analysis.md

Large diffs are not rendered by default.

39 changes: 39 additions & 0 deletions lane-end
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,10 @@
# <lane>/`, that the table does not name as a tree, scratch or a cache is
# RESIDUE - ignored leftovers the sweep's rows never reach - and refuses
# even where the sweep answered 0, as a cache row does.
# Where the lane's checkout is an ASSEMBLY (T018, opensoft/openRepoTools#186)
# the sweep also prints a `leg` row per leg checkout: one it counts is named
# as a leg checkout whose remedy is a person's — no sweep acts on a leg — and
# one that holds work and is not this lane's is listed and NOT counted.
# `--inventory-only` is the one way past it, and `--sweep` is not built.
#
# THE HANDOFF FRAGMENT
Expand Down Expand Up @@ -1971,6 +1975,7 @@ fi

gate_holder=""; gate_refused=""; gate_lines=""; gate_named=""
gate_trees=0; gate_branches=0; gate_scratch=0; gate_caches=0; gate_residue=0; gate_foreign=0
gate_legs=0; gate_leg_lines="" # T018: an assembly's leg checkouts, counted and listed
gate_person=0 # counted rows `--yes` leaves too: a person's to settle
gate_lf='
'
Expand Down Expand Up @@ -2012,6 +2017,25 @@ while IFS="$TAB" read -r g_kind g_a g_b g_c g_d g_e g_f; do
gate_named="${gate_named}$(gate_real "$g_path")${gate_lf}"
gate_caches=$((gate_caches + 1))
gate_lines="${gate_lines} cache ${g_a} ${g_path} (${g_e:-0} bytes)${gate_lf}" ;;
# T018 (opensoft/openRepoTools#186): A LEG CHECKOUT OF AN ASSEMBLY — only
# where the lane's checkout is one; a single repository prints no such row.
# The sweep counts it (`retire`) where its HEAD's own Lane: trailer is this
# lane's and it holds work origin lacks or edits no commit carries, or
# where it could not be read; one that holds work and is not this lane's
# is listed below the table and counted for nobody, as the assembly's own
# checkout is. No sweep acts on one, so its remedy is a person's.
leg)
g_path="$(printf '%b' "${g_c:-}")"
g_head="${g_e:-?}"
if [ "${g_b:-}" = retire ]; then
gate_legs=$((gate_legs + 1))
gate_lines="${gate_lines} leg ${g_a} ${g_path} [${g_d:-?} ${g_head:0:12}]${gate_lf} ${g_f:-}${gate_lf}"
else
case "${g_a:-}" in
clean | absent) : ;;
*) gate_leg_lines="${gate_leg_lines} leg ${g_a} ${g_path} [${g_d:-?} ${g_head:0:12}]${gate_lf} ${g_f:-}${gate_lf}" ;;
esac
fi ;;
esac
done <<GATE
$gate_out
Expand Down Expand Up @@ -2073,6 +2097,7 @@ gate_part "$gate_branches" "branch(es)"
gate_part "$gate_scratch" "scratch dir(s)"
gate_part "$gate_caches" "cache(s)"
gate_part "$gate_residue" "residue path(s)"
gate_part "$gate_legs" "leg checkout(s)"

# THE VERDICT. 0 passes only with nothing named and nothing unread beside it;
# 3 and 2 never pass; anything else is the gate nobody read.
Expand All @@ -2096,6 +2121,10 @@ fi

if [ "$gate_pass" = 1 ]; then
step "close-out gate: nothing of lane $LANE's is left on disk ($gate_shown --dry-run answered 0)"
if [ -n "$gate_leg_lines" ]; then
note "the assembly's leg checkout(s) below hold work that is not this lane's by its HEAD's own Lane: trailer; they are listed and NOT counted, as the assembly's own checkout is not:"
printf '%s' "$gate_leg_lines" >&2
fi
if [ "$inventory_only" = 1 ]; then
note "--inventory-only changed nothing: the close-out gate passed, so the lane ends as any other does"
fi
Expand All @@ -2114,6 +2143,10 @@ else
*) note "lane $LANE is NOT ended: the close-out gate could not be read — \`$gate_shown --dry-run --porcelain\` exited $gate_rc, and a read that failed is never an answer (Amendment 7(d))." ;;
esac
if [ -n "$gate_lines" ]; then printf '%s' "$gate_lines" >&2; fi
if [ -n "$gate_leg_lines" ]; then
note "and the assembly's leg checkout(s) below hold work that is not this lane's by its HEAD's own Lane: trailer; they are listed and NOT counted:"
printf '%s' "$gate_leg_lines" >&2
fi
if [ "$gate_foreign" -gt 0 ]; then
note "($gate_foreign FOREIGN tree(s) beside these are not this lane's, and were not counted.)"
fi
Expand All @@ -2129,6 +2162,9 @@ else
gate_act=0
if [ "$gate_rc" = 3 ]; then gate_act=1; fi
if [ "$gate_rc" = 0 ] && [ "$gate_caches" -gt 0 ]; then gate_act=1; fi
# T018: A LEG IS NO SWEEP'S TO RETIRE, so where legs are all that is
# counted the act offered is the person's, not `--yes`.
if [ "$gate_legs" -gt 0 ] && [ $((gate_trees + gate_branches + gate_scratch + gate_caches)) = 0 ]; then gate_act=0; fi
if [ "$gate_act" = 1 ]; then
note "the one act that retires them (--yes removes only what is on origin or in a bundle, never a live writer's tree):"
if [ "$gate_holder" = live ]; then
Expand All @@ -2143,6 +2179,9 @@ else
if [ "$gate_residue" -gt 0 ]; then
note "residue is no sweep's to retire: move it to \${XDG_STATE_HOME:-~/.local/state}/openRepoTools/lanes/$LANE/scratch/ or remove it by hand"
fi
if [ "$gate_legs" -gt 0 ]; then
note "a leg checkout is the assembly's and no sweep acts on one: commit and push its work from inside it (git -C <leg> status, git -C <leg> push), then end the lane again"
fi
note "or end the lane and leave them where they are, in its inventory, with the reason written down:"
note " $prog $LANE$rflag$fflag --inventory-only"
exit "$gate_exit"
Expand Down
Loading
Loading