docs: distinguish window fan-out from collision chains

This commit is contained in:
Andriujose 2026-08-04 17:23:03 +00:00
parent 830a643a4b
commit 630fd116c2
2 changed files with 16 additions and 9 deletions

View file

@ -76,10 +76,15 @@ still see one deliberately ordered queue.
While a window stands — an open release-labeled issue with a non-empty While a window stands — an open release-labeled issue with a non-empty
enumerated gate — its members form a DAG whose sink is the release issue. enumerated gate — its members form a DAG whose sink is the release issue.
Every member reaches that sink; ordering edges live on members, while the sink Every member reaches that sink. Members declare only their immediate
records membership only; and the `ready` set is exactly the graph's sources. predecessors; ordering edges live on members, while the sink records membership
It follows that every `ready` issue is a gate member. `epic` and `post-merge` only; and the `ready` set is exactly the graph's current sources. Every close
issues are exempt because neither is claimable (#292). releases exactly its declared successors, and that whole set is concurrently
claimable: a member may have multiple successors, while the collision rule
already orders any that share a deliverable. Insertion re-points downstream
edges rather than merely appending membership at the sink. It follows that
every `ready` issue is a gate member. `epic` and `post-merge` issues are exempt
because neither is claimable (#292).
The operator may declare a parallel track at init when its footprint is The operator may declare a parallel track at init when its footprint is
disjoint from the primary window: another repository, another artifact, or disjoint from the primary window: another repository, another artifact, or

View file

@ -99,11 +99,13 @@ Every issue you mint carries, in this order:
alternative for disjoint regions. This keeps every `ready` issue alternative for disjoint regions. This keeps every `ready` issue
concurrently claimable and makes each close release one successor (#288). concurrently claimable and makes each close release one successor (#288).
During a standing release window, every mint also gets a binary membership During a standing release window, every mint also gets a binary membership
call in the same tick. A non-member names the release issue as its blocker. call in the same tick. A non-member names the release issue as its blocker
A member is placed by naming its member predecessors on the new issue, in its own Dependencies. A member is placed with three writes: the new issue
adding or re-pointing every downstream member's dependency to the new issue names its immediate member predecessors; every downstream member adds or
(inserting X into A → B makes A → X → B, never a fan), and adding the new re-points its dependency to the new issue, dropping any predecessor the new
issue to the release issue's gate; collision and window edges are issue now reaches (inserting X into A → B makes A → X → B, so B drops A);
and the release issue adds the new issue to its gate, recording membership
only. A member may have multiple successors. Collision and window edges are
independent, so write both when both apply (#292). independent, so write both when both apply (#292).
- **Labels**: type (`bug`/`enhancement`/`documentation`), `scope:*`, and - **Labels**: type (`bug`/`enhancement`/`documentation`), `scope:*`, and
exactly one of `ready` / `blocked` (see [LABELS.md](LABELS.md)). exactly one of `ready` / `blocked` (see [LABELS.md](LABELS.md)).