docs: make standing release windows explicit graphs

Add the mint-time membership call, the sink/source/subset invariants, and the release note while the contradictory successor-count criterion awaits triage clarification.\n\nCloses #292.
This commit is contained in:
Andriujose 2026-08-04 17:12:48 +00:00
parent 97cc00e268
commit 830a643a4b
3 changed files with 17 additions and 0 deletions

View file

@ -74,6 +74,13 @@ interleaving unrelated windows blurs both the release story and the evidence
behind it. Gates open windows; they do not silently admit members, so builders behind it. Gates open windows; they do not silently admit members, so builders
still see one deliberately ordered queue. still see one deliberately ordered queue.
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.
Every member reaches that sink; ordering edges live on members, while the sink
records membership only; and the `ready` set is exactly the graph's sources.
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
provably non-overlapping clusters. The declaration names the boundary and any provably non-overlapping clusters. The declaration names the boundary and any

View file

@ -98,6 +98,13 @@ Every issue you mint carries, in this order:
edge with `Blocked by #N`, naming the newest open carrier; there is no edge with `Blocked by #N`, naming the newest open carrier; there is no
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
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,
adding or re-pointing every downstream member's dependency to the new issue
(inserting X into A → B makes A → X → B, never a fan), and adding the new
issue to the release issue's gate; collision and window edges are
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)).

3
changelog.d/292.md Normal file
View file

@ -0,0 +1,3 @@
### Changed
- Standing release windows are dependency DAGs: every mint is placed in the window or behind it, and only current sources are `ready` (#292).