diff --git a/.abcd/work/decisions/dcn-2610180720362692-a-dependency-is-a-depends-on-line-in-the.md b/.abcd/work/decisions/dcn-2610180720362692-a-dependency-is-a-depends-on-line-in-the.md new file mode 100644 index 000000000..fe06cc5fe --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720362692-a-dependency-is-a-depends-on-line-in-the.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720362692 +slug: a-dependency-is-a-depends-on-line-in-the +date: 2026-10-18 +--- +2026-10-18 — A dependency is a Depends-On line in the pull request's body (facilitator-on-delegation, itd-2610170634394993 planning prep): a branch's wait on another change is written as Depends-On: #N, which land writes from the agent's declaration and the pass enforces, and the session's short status line mirrors it as a hint only; a field on the claim is not used, since a reservation is per record and per person while a dependency belongs to a change, and the line's exact spelling is plumbing for the brief (grounds: docs.mergify.com/merge-protections/builtin; Zuul's Depends-On footer; itd-2609091034175565) diff --git a/.abcd/work/decisions/dcn-2610180720366282-the-coordination-pass-runs-on-demand.md b/.abcd/work/decisions/dcn-2610180720366282-the-coordination-pass-runs-on-demand.md new file mode 100644 index 000000000..fa93e0007 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720366282-the-coordination-pass-runs-on-demand.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720366282 +slug: the-coordination-pass-runs-on-demand +date: 2026-10-18 +--- +2026-10-18 — The coordination pass runs on demand (facilitator-on-delegation, itd-2610170634394993 planning prep): land, build, drain and status run the pass from the records they have just fetched before they act; there is no timer lease and no process that must stay alive, and every deadline and expiry is derived when the records are read, as a reservation's release already is (grounds: the draft's research note on controllers; kubernetes.io/docs/concepts/architecture/controller; brief invariant 7; itd-2609151838312703 decision 14; itd-2609091034175565 decision 13) diff --git a/.abcd/work/decisions/dcn-2610180720369860-a-waiting-branch-is-rebuilt-by-merging.md b/.abcd/work/decisions/dcn-2610180720369860-a-waiting-branch-is-rebuilt-by-merging.md new file mode 100644 index 000000000..d37c30b2d --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720369860-a-waiting-branch-is-rebuilt-by-merging.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720369860 +slug: a-waiting-branch-is-rebuilt-by-merging +date: 2026-10-18 +--- +2026-10-18 — A waiting branch is rebuilt by merging, not restacking (facilitator-on-delegation, itd-2610170634394993 planning prep): once its dependency lands, the dependent branch takes the default branch merged in and is never rewritten, because the merge queue lands by merge so the dependency's commits keep their ids, and a restack would break the reachability of resolved_by stamps (RS002, RS003); a restack is used only when the dependency was squash- or rebase-merged by hand, which the review ruleset allows; each rebuild needs a fresh preflight receipt and so takes a load slot (grounds: .abcd/work/rulesets/main-protection.json; main-review.json; AGENTS.md RS002 and RS003; git-spice) diff --git a/.abcd/work/decisions/dcn-2610180720376153-the-machine-budget-is-the-load-gate-s.md b/.abcd/work/decisions/dcn-2610180720376153-the-machine-budget-is-the-load-gate-s.md new file mode 100644 index 000000000..c59aee475 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720376153-the-machine-budget-is-the-load-gate-s.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720376153 +slug: the-machine-budget-is-the-load-gate-s +date: 2026-10-18 +--- +2026-10-18 — The machine budget is the load gate's slots, weighted per job (facilitator-on-delegation, itd-2610170634394993 planning prep): preflights, race runs and every other heavy job draw on one pool, the load gate's existing slots (load.preflights), each job weighted, with a dead holder's slot reclaimed as it is now; no second pool is added (grounds: principles/one-canonical-primitive.md; airflow.apache.org pools; internal/core/implement/load_slots.go) diff --git a/.abcd/work/decisions/dcn-2610180720379757-the-model-budget-stays-a-fixed-count-per.md b/.abcd/work/decisions/dcn-2610180720379757-the-model-budget-stays-a-fixed-count-per.md new file mode 100644 index 000000000..b26d80b3b --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720379757-the-model-budget-stays-a-fixed-count-per.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720379757 +slug: the-model-budget-stays-a-fixed-count-per +date: 2026-10-18 +--- +2026-10-18 — The model budget stays a fixed count per abcd run (facilitator-on-delegation, itd-2610170634394993 planning prep): the sub-agent budget remains itd-2610100704270254's count per run from the repository's config, neither shared across sessions nor sized from rate-limit headers, since the product thinker ruled 'each abcd run' on 2026-10-10 and agent work is delegated to the host, so abcd never sees the provider's headers; the draft's press release and model-budget scope condition are to be narrowed to match, which is put to the product thinker to confirm because it edits their confirmed text (grounds: itd-2610100704270254; AGENTS.md host-delegated by default) diff --git a/.abcd/work/decisions/dcn-2610180720379765-an-autonomous-session-s-credential-is-a.md b/.abcd/work/decisions/dcn-2610180720379765-an-autonomous-session-s-credential-is-a.md new file mode 100644 index 000000000..71cb50498 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720379765-an-autonomous-session-s-credential-is-a.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720379765 +slug: an-autonomous-session-s-credential-is-a +date: 2026-10-18 +--- +2026-10-18 — An autonomous session's credential is a GitHub App token (facilitator-on-delegation, itd-2610170634394993 planning prep): each session gets a token the repository's App mints for it, short-lived and scoped by repository and permission; a fine-grained personal token is not used, because none can be created through an API and none expires with the session (grounds: docs.github.com authenticating-as-a-github-app-installation; docs.github.com managing-your-personal-access-tokens) diff --git a/.abcd/work/decisions/dcn-2610180720382472-the-release-cut-s-hold-is-the.md b/.abcd/work/decisions/dcn-2610180720382472-the-release-cut-s-hold-is-the.md new file mode 100644 index 000000000..05cd74146 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720382472-the-release-cut-s-hold-is-the.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720382472 +slug: the-release-cut-s-hold-is-the +date: 2026-10-18 +--- +2026-10-18 — The release cut's hold is the announcements intent's reservation (facilitator-on-delegation, itd-2610170634394993 planning prep): this intent adds no lease of its own for a release being cut; the merge path already reads the release reservation (grounds: itd-2609151838312703 C7 and decision 2; internal/core/landing/releasehold.go) diff --git a/.abcd/work/decisions/dcn-2610180720389352-a-hold-is-a-reservation-a-merging.md b/.abcd/work/decisions/dcn-2610180720389352-a-hold-is-a-reservation-a-merging.md new file mode 100644 index 000000000..334971945 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720389352-a-hold-is-a-reservation-a-merging.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720389352 +slug: a-hold-is-a-reservation-a-merging +date: 2026-10-18 +--- +2026-10-18 — A hold is a reservation; a merging announcement informs (facilitator-on-delegation, itd-2610170634394993 planning prep): the pass enforces holds only through reservations and reads a merging announcement as information, so the short status line carries no hold field (grounds: itd-2609151838312703 decisions 2 and 4) diff --git a/.abcd/work/decisions/dcn-2610180720389628-registering-the-app-takes-one-step-in.md b/.abcd/work/decisions/dcn-2610180720389628-registering-the-app-takes-one-step-in.md new file mode 100644 index 000000000..ea184fa55 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720389628-registering-the-app-takes-one-step-in.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720389628 +slug: registering-the-app-takes-one-step-in +date: 2026-10-18 +--- +2026-10-18 — Registering the App takes one step in the browser (facilitator-on-delegation, itd-2610170634394993 planning prep): creating a GitHub App needs the person on the website once, through the manifest flow, so the draft states it as a step only the person can take, as the checklist draft already lists it, and never promises setup without manual steps (grounds: docs.github.com registering-a-github-app-from-a-manifest; itd-2610170638184486) diff --git a/.abcd/work/decisions/dcn-2610180720390166-pushes-stay-well-inside-the-forge-s-rate.md b/.abcd/work/decisions/dcn-2610180720390166-pushes-stay-well-inside-the-forge-s-rate.md new file mode 100644 index 000000000..a89db85cf --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720390166-pushes-stay-well-inside-the-forge-s-rate.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720390166 +slug: pushes-stay-well-inside-the-forge-s-rate +date: 2026-10-18 +--- +2026-10-18 — Pushes stay well inside the forge's rate (facilitator-on-delegation, itd-2610170634394993 planning prep): renewals stay at half the two-hour lease, hourly, the short status line is pushed only when it changes, and a refused push backs off, so ten sessions stay far below six pushes a minute (grounds: itd-2609091034175565; internal/core/claim/renewdue.go; docs.github.com repository-limits) diff --git a/.abcd/work/decisions/dcn-2610180720397774-one-central-view-line-per-working-copy.md b/.abcd/work/decisions/dcn-2610180720397774-one-central-view-line-per-working-copy.md new file mode 100644 index 000000000..c6d0ee7f6 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720397774-one-central-view-line-per-working-copy.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720397774 +slug: one-central-view-line-per-working-copy +date: 2026-10-18 +--- +2026-10-18 — One central-view line per working copy (facilitator-on-delegation, itd-2610170634394993 planning prep): a session in the view is a working copy, keyed on the reservation's existing copy key, since the checkout is the unit of isolation (grounds: itd-2609091034175565 decision 33; AGENTS.md concurrent sessions; internal/core/claim/message.go) diff --git a/.abcd/work/decisions/dcn-2610180720397970-the-claim-s-generation-number-is-its-tip.md b/.abcd/work/decisions/dcn-2610180720397970-the-claim-s-generation-number-is-its-tip.md new file mode 100644 index 000000000..909e97f75 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720397970-the-claim-s-generation-number-is-its-tip.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720397970 +slug: the-claim-s-generation-number-is-its-tip +date: 2026-10-18 +--- +2026-10-18 — The claim's generation number is its tip commit (facilitator-on-delegation, itd-2610170634394993 planning prep): every act goes through a fast-forward push, which is already a compare-and-swap, and a take-over moves the tip, so no separate counter is added; the forge enforces the fence only on a push, so for queueing and tagging the criterion says abcd refuses the act, and whether one atomic push can carry the work branch and the renewal together is left to probe at planning (grounds: internal/core/claim/claim.go; internal/core/implement/loop/reservation.go; Chubby section 2.4; git-scm.com/docs/git-push --atomic) diff --git a/.abcd/work/decisions/dcn-2610180720402007-a-session-s-state-line-is-fixed-form.md b/.abcd/work/decisions/dcn-2610180720402007-a-session-s-state-line-is-fixed-form.md new file mode 100644 index 000000000..1b3675cb9 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720402007-a-session-s-state-line-is-fixed-form.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720402007 +slug: a-session-s-state-line-is-fixed-form +date: 2026-10-18 +--- +2026-10-18 — A session's state line is fixed-form (facilitator-on-delegation, itd-2610170634394993 planning prep): the line's state is a stage from a fixed list plus the record ids it waits on, carried on the person's existing abcd-status branch, never free text, and no branch per session is added (grounds: itd-2609151838312703 C3 and decisions 1 and 9; internal/core/claim/stage.go) diff --git a/.abcd/work/decisions/dcn-2610180720402361-a-session-s-line-carries-its-own-expiry.md b/.abcd/work/decisions/dcn-2610180720402361-a-session-s-line-carries-its-own-expiry.md new file mode 100644 index 000000000..ab1a7a19c --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720402361-a-session-s-line-carries-its-own-expiry.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720402361 +slug: a-session-s-line-carries-its-own-expiry +date: 2026-10-18 +--- +2026-10-18 — A session's line carries its own expiry (facilitator-on-delegation, itd-2610170634394993 planning prep): a line is renewed and expires on its own, counted from its first fetch, so a session that holds no reservation still shows as live or gone (grounds: itd-2609151838312703 C9; kubernetes.io node leases) diff --git a/.abcd/work/decisions/dcn-2610180720407459-a-re-submitting-agent-is-given-the.md b/.abcd/work/decisions/dcn-2610180720407459-a-re-submitting-agent-is-given-the.md new file mode 100644 index 000000000..22643a598 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720407459-a-re-submitting-agent-is-given-the.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720407459 +slug: a-re-submitting-agent-is-given-the +date: 2026-10-18 +--- +2026-10-18 — A re-submitting agent is given the merged pull requests that touch its footprint (facilitator-on-delegation, itd-2610170634394993 planning prep): the draft's criterion asking for a summary of what landed becomes the list of pull requests merged since the branch's merge base that touch its footprint, which a test can check (grounds: the draft's research note on multi-agent coding, Xia et al.) diff --git a/.abcd/work/decisions/dcn-2610180720412979-the-mechanism-s-baseline-is-the-shipped.md b/.abcd/work/decisions/dcn-2610180720412979-the-mechanism-s-baseline-is-the-shipped.md new file mode 100644 index 000000000..61ae1b11f --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720412979-the-mechanism-s-baseline-is-the-shipped.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720412979 +slug: the-mechanism-s-baseline-is-the-shipped +date: 2026-10-18 +--- +2026-10-18 — The mechanism's baseline is the shipped coordination (facilitator-on-delegation, itd-2610170634394993 planning prep): the falsifier compares a run of three or more headless agents against the same run with only reservations and the load gate, not against agents coordinating by message, which headless agents cannot do (grounds: the draft's Mechanism and Why This Matters sections) diff --git a/.abcd/work/decisions/dcn-2610180720415625-branch-deletion-is-refused-by-rulesets.md b/.abcd/work/decisions/dcn-2610180720415625-branch-deletion-is-refused-by-rulesets.md new file mode 100644 index 000000000..35a9ed169 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720415625-branch-deletion-is-refused-by-rulesets.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720415625 +slug: branch-deletion-is-refused-by-rulesets +date: 2026-10-18 +--- +2026-10-18 — Branch deletion is refused by rulesets, not by the token (facilitator-on-delegation, itd-2610170634394993 planning prep): a token able to push can also delete branches, so the criterion that a session cannot delete a branch it did not create is narrowed to the protected prefixes the rulesets already guard, and other branches stay deletable (grounds: docs.github.com permissions-required-for-github-apps; brief invariant 16; .abcd/work/rulesets/reservations-protection.json) diff --git a/.abcd/work/decisions/dcn-2610180720415626-refusing-a-newer-coordination-record.md b/.abcd/work/decisions/dcn-2610180720415626-refusing-a-newer-coordination-record.md new file mode 100644 index 000000000..66670e451 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720415626-refusing-a-newer-coordination-record.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720415626 +slug: refusing-a-newer-coordination-record +date: 2026-10-18 +--- +2026-10-18 — Refusing a newer coordination record starts with the release that adds a version (facilitator-on-delegation, itd-2610170634394993 planning prep): readers already shipped ignore an unknown trailer, so the criterion's refusal can hold only from the release that adds a version field, and the criterion says so (grounds: internal/core/claim/message.go; kubernetes.io version-skew-policy) diff --git a/.abcd/work/decisions/dcn-2610180720427437-the-coordination-stance-has-a-bound.md b/.abcd/work/decisions/dcn-2610180720427437-the-coordination-stance-has-a-bound.md new file mode 100644 index 000000000..a5c1467b9 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720427437-the-coordination-stance-has-a-bound.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720427437 +slug: the-coordination-stance-has-a-bound +date: 2026-10-18 +--- +2026-10-18 — The coordination stance has a bound (facilitator-on-delegation, itd-2610170634394993 planning prep): the principle that coordination never lives only in conversation governs facts one agent relies on from another (holds, waits, turns, budgets); a question put to a person, such as the pre-run blocker sweep the product thinker placed in the checklist draft, may travel by message and lands in each session's checklist (grounds: the draft's decision 2; itd-2610170638184486 scope split) diff --git a/.abcd/work/decisions/dcn-2610180720541206-a-session-s-mode-shows-on-its.md b/.abcd/work/decisions/dcn-2610180720541206-a-session-s-mode-shows-on-its.md new file mode 100644 index 000000000..e4d472479 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720541206-a-session-s-mode-shows-on-its.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720541206 +slug: a-session-s-mode-shows-on-its +date: 2026-10-18 +--- +2026-10-18 — A session's mode shows on its central-view line (facilitator-on-delegation, itd-2610170634394993 planning prep): the line carries the session's state from the checklist draft's fixed set: working; waiting, with what it waits on and when it next looks; or stopped, which is allowed only while the person is present and is flagged. While the person is away a session with work never stops, and one with nothing it can do is waiting with its next look, so no session reads as idle. This follows the product thinker's ruling that the person must never wrongly believe agents are working or waiting (grounds: the draft's decision 6; itd-2610170638184486 modes) diff --git a/.abcd/work/decisions/dcn-2610180720548066-a-waiting-session-wakes-before-half-its.md b/.abcd/work/decisions/dcn-2610180720548066-a-waiting-session-wakes-before-half-its.md new file mode 100644 index 000000000..f2f669303 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180720548066-a-waiting-session-wakes-before-half-its.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180720548066 +slug: a-waiting-session-wakes-before-half-its +date: 2026-10-18 +--- +2026-10-18 — A waiting session wakes before half its lease (facilitator-on-delegation, itd-2610170634394993 planning prep): since no process stays alive and a branch is rebuilt only when its agent asks to land, a session waiting on a dependency wakes, through the checklist draft's timed wake, at an interval shorter than half its reservations' lease, so an idle waiter's reservations are renewed rather than lapsing after two hours and being taken over (grounds: itd-2609091034175565 two-hour lease, renewed at half; itd-2610170638184486 timed wake; the draft's take-over criterion) diff --git a/.abcd/work/decisions/dcn-2610180723332655-an-autonomous-session-acts-on-the-forge.md b/.abcd/work/decisions/dcn-2610180723332655-an-autonomous-session-acts-on-the-forge.md new file mode 100644 index 000000000..42b337eb2 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180723332655-an-autonomous-session-acts-on-the-forge.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180723332655 +slug: an-autonomous-session-acts-on-the-forge +date: 2026-10-18 +--- +2026-10-18 — An autonomous session acts on the forge as the person, through the App (facilitator-on-delegation, itd-2610170634394993 planning prep): every commit stays authored by the person, since the attribution gate refuses a machine as author or committer; the session pushes and opens pull requests with a token the repository's App mints for the person, limited to the permissions both the App and the person hold and expiring after eight hours, so its work shows the person's name marked as made through the App; the App's own bot identity is not used, because the forge's who-am-I endpoint does not answer for it, so a cloud session could no longer resolve its reservation holder; this meets the product thinker's ruling of a weaker credential of the session's own, which concerns the credential, not the name (grounds: the draft's decision 5; AGENTS.md attribution; scripts/check-attribution.sh; brief invariant 10; docs.github.com generating-a-user-access-token-for-a-github-app; docs.github.com endpoints-available-for-github-app-installation-access-tokens) diff --git a/.abcd/work/decisions/dcn-2610180723342596-the-central-view-is-abcd-status.md b/.abcd/work/decisions/dcn-2610180723342596-the-central-view-is-abcd-status.md new file mode 100644 index 000000000..371591d32 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180723342596-the-central-view-is-abcd-status.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180723342596 +slug: the-central-view-is-abcd-status +date: 2026-10-18 +--- +2026-10-18 — The central view is abcd status (facilitator-on-delegation, itd-2610170634394993 planning prep): the view of what every session holds, does and waits on is shown by abcd status, which the product thinker named the people's view of what everyone else is doing; abcd peers keeps the meaning they reserved for it, the sessions running now seen locally and later over a private network, which this intent's decision 4 dropped (grounds: itd-2609151838312703 decision 21; the draft's decisions 3 and 4) diff --git a/.abcd/work/decisions/dcn-2610180905283806-the-overnight-stall-fix-ships-first.md b/.abcd/work/decisions/dcn-2610180905283806-the-overnight-stall-fix-ships-first.md new file mode 100644 index 000000000..5f1c5a561 --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180905283806-the-overnight-stall-fix-ships-first.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180905283806 +slug: the-overnight-stall-fix-ships-first +date: 2026-10-18 +--- +2026-10-18 — The overnight-stall fix ships first, ahead of the coordination intent (facilitator-on-delegation, itd-2610170634394993 planning prep): the fix for the critical overnight stall (an autonomous mode abcd holds, and a stop check that refuses to end a turn with owed work) sits in the checklist draft, which owns a session's modes, waits and stop check; it needs nothing on the shared remote, so it ships as the bundle's first slice, without waiting on this intent, and the security and bug-fix cut waits on that slice alone; this intent then adds what the stall's record asks for across sessions, the idle time a coordinator sees, through the central view's derived state and last-seen time in abcd status rather than in abcd peers as the record's remedy words it, per the decision naming abcd status as the central view (grounds: iss-2610170619247185 remedy; itd-2610170638184486 scope split; the draft's decisions 3 and 6) diff --git a/.abcd/work/decisions/dcn-2610180905291297-a-declared-dependency-constrains-only.md b/.abcd/work/decisions/dcn-2610180905291297-a-declared-dependency-constrains-only.md new file mode 100644 index 000000000..6de0dfdad --- /dev/null +++ b/.abcd/work/decisions/dcn-2610180905291297-a-declared-dependency-constrains-only.md @@ -0,0 +1,6 @@ +--- +id: dcn-2610180905291297 +slug: a-declared-dependency-constrains-only +date: 2026-10-18 +--- +2026-10-18 — A declared dependency constrains only the landing (facilitator-on-delegation, itd-2610170634394993 planning prep): a branch that waits on an open pull request is held only from being queued; its merge from the default branch, its fixes, its review and its preflight run now, and only its landing waits for the dependency, so the stop check counts a stacked branch with an open base as owed work (grounds: iss-2610170619247185, second instance; the draft's first acceptance criterion; the decision that a waiting branch is rebuilt by merging)