|
2 | 2 |
|
3 | 3 | All notable changes to the flow-next. |
4 | 4 |
|
| 5 | +Flow-Next changed shape with 5.0.0. One command, `/flow-next:flow`, reads whatever you have and picks the route, and `flow --auto` runs the same route unattended. If you are arriving from 4.x, start with [the 5.0.0 entry](#flow-next-500---2026-09-12) and [the flow skill](plugins/flow-next/skills/flow-next-flow/SKILL.md) before reading the items below. |
| 6 | + |
5 | 7 | ## Unreleased |
6 | 8 |
|
7 | 9 | ## [flow-next 5.3.0] - 2026-09-14 |
8 | 10 |
|
9 | | -Teams whose specs depend on each other stop waiting on merges. A dependent spec used to sit until its parent's pull request landed, so every layer of a dependency chain cost one human merge before the next could start and the build loop idled in between. Now the dependent spec builds as soon as its parent is built, its pull request shows only its own layer, GitHub links the layers into a stack, and land drains the chain from the bottom without a hand rebase. Nothing is configured: the dependency graph a plan already records is the only input, and a spec with no dependencies behaves exactly as before. |
| 11 | +Teams whose specs depend on each other stop waiting on merges. A dependent spec used to sit until its parent's pull request landed, so every layer of a dependency chain cost one human merge before the next could start and the build loop idled in between. Now the dependent spec builds as soon as its parent is built, its pull request shows only its own layer, GitHub links the layers into one of its [stacked pull requests](https://docs.github.com/en/pull-requests/get-started/about-stacked-prs) (in public preview since 2026-07-30, [announcement](https://github.blog/changelog/2026-07-30-stacked-pull-requests-are-now-in-public-preview/)), and land drains the chain from the bottom without a hand rebase. Off GitHub, or when the preview is unavailable on a repository, the same chain works as plain dependent PRs; only the stack map and GitHub's own retarget are GitHub-only. Nothing is configured: the dependency graph a plan already records is the only input, and a spec with no dependencies behaves exactly as before. |
10 | 12 |
|
11 | 13 | The reviewer's journey changes in one place. Instead of one large PR after a serial wait, they get a chain of small ones, each with its own cognitive-aid body and a stack map in the merge box, reviewed and merged from the bottom up. Merge judgment stays theirs: nothing in this release merges on its own, and land still needs its existing consent and gates. The release's own two pull requests, #432 and #433, were the first live chain, built on 2026-09-13, linked into GitHub stack #434, and merged from the stack UI. |
12 | 14 |
|
13 | 15 | ### Added |
14 | 16 |
|
15 | 17 | - **Dependent specs build on their parent's branch instead of waiting for its merge (fn-152).** When a parent spec's tasks are all done and its branch is on origin, the dependent spec becomes selectable in `flow --auto` (ready and backlog mode), in the attended ladder, and under a direct `/flow-next:work`. Work forks the spec branch from the parent's remote tip, make-pr opens the PR against the parent's branch and, on GitHub, links it into the parent's stack, and chained layers with nothing open are created ready so a human can merge them from the stack UI. A spec whose parent is still in progress, a spec with two open parents, or a second child of an already-chained parent parks with a stated reason and no strike. Linear chains only; no configuration key. |
16 | | -- **Land drains chains and GitHub stacks one frontier at a time (fn-149).** A dependent PR, with or without a GitHub stack over it, no longer breaks land or gets closed when its parent merges. Each tick classifies every PR from GitHub's stack object and its base ref and merges only the lowest open layer. On a stack it uses GitHub's asynchronous stack merge with a server-enforced head pin (a stale pin is refused before anything merges, verified live). A review verdict survives a rebase when the stable patch-id of the diff is unchanged, so a reviewer's clean comment on the original head keeps counting through GitHub's retargets and land's own. Above a merged parent on a plain chain, land rewrites the open layers bottom-up in a prepare-then-publish cascade with a leased push per layer and a resumable record, and it never deletes a merged branch while an open PR still targets it, which was the 2026-08-27 failure. Standalone PRs keep byte-identical verdicts, merge arguments, tail order, and ledger writes. |
| 18 | +- **Land drains chains and GitHub stacks one frontier at a time (fn-149).** A dependent PR, with or without a GitHub stack over it, no longer breaks land or gets closed when its parent merges. Each tick classifies every PR from GitHub's stack object and its base ref and merges only the lowest open layer. On a stack it uses GitHub's [asynchronous stack merge](https://docs.github.com/en/rest/pulls/pulls#merge-a-pull-request-asynchronously) with a server-enforced head pin (a stale pin is refused before anything merges, verified live). A review verdict survives a rebase when the stable patch-id of the diff is unchanged, so a reviewer's clean comment on the original head keeps counting through GitHub's retargets and land's own. Above a merged parent on a plain chain, land rewrites the open layers bottom-up in a prepare-then-publish cascade with a leased push per layer and a resumable record, and it never deletes a merged branch while an open PR still targets it, which was the 2026-08-27 failure. Standalone PRs keep byte-identical verdicts, merge arguments, tail order, and ledger writes. |
17 | 19 |
|
18 | 20 | ### Under the hood |
19 | 21 |
|
20 | 22 | - One read-only predicate, `flowctl spec chain <id>`, owns chain eligibility (parent open, all tasks done, branch on origin, linear, one `git ls-remote` at most, a failed remote read never reported as an absent branch); flowctl's spec-level task-admission gate (`ready --spec`, `next`, `ready --all`) treats the chain parent as satisfied, and every skill consumer calls the predicate instead of duplicating it. `pilot-log append` gains an optional `--reason` so the backlog decision-log row carries the `chained on <parent>; ` prefix. |
21 | | -- Make-pr detects a chain from history, the merge-base of HEAD with the parent's branch tip or merged-PR head, never from a scratch file; a merged parent is rewritten onto the chain base from that boundary on a create run only (`--dry-run` and `--update` never rewrite); stack linking uses the stacks REST API with integer-typed payloads and degrades to a plain chain layer with one stderr line on 404, 409, 422, or a transport error. |
| 23 | +- Make-pr detects a chain from history, the merge-base of HEAD with the parent's branch tip or merged-PR head, never from a scratch file; a merged parent is rewritten onto the chain base from that boundary on a create run only (`--dry-run` and `--update` never rewrite); stack linking uses the [stacks REST API](https://docs.github.com/en/rest/pulls/stacks) with integer-typed payloads (the [gh-stack extension](https://github.com/github/gh-stack) is never required) and degrades to a plain chain layer with one stderr line on 404, 409, 422, or a transport error. |
22 | 24 | - Land's ledger gains one evidence binding per PR (verdict head, base, patch-id, window anchor), a pending merge-async uuid, a top-level `pending_branch_deletes` map swept at the start of every tick, and a `cascade` record that survives a lost lease or a lost write; an unread children count keeps the branch. The Codex mirror and the glossary (`chain`, `stack`, `layer`, `frontier`) are updated; the 2026-08-27 recovery memory now points at the chain rules. Details: [`chains-and-stacks.md`](plugins/flow-next/skills/flow-next-land/references/chains-and-stacks.md). |
23 | 25 | - Tests: flowctl chain states and admission gates over a bare origin; fence fixtures for every consumer under `set -e` with a stubbed `gh`; land fixtures for every shape, a three-layer chain with multi-commit squash parents, lease and lost-write resumption, the stale pin, and the janitor across four ticks; the merge-fence shell test now states its children count. |
24 | 26 |
|
|
0 commit comments