flow-workflows 0.65.0-rc.1 → 0.65.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,6 +17,14 @@ Every `$flow-*` command assumes these rules. They are stated once, here, so a co
17
17
  carries what is specific to its phase. Read this once per session; a command that says "load
18
18
  `flow-core`" means this file.
19
19
 
20
+ **This file belongs to flow `0.65.0-rc.2`.** Compare it once, at the start of the session, against
21
+ `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
22
+ is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
23
+ — which is exactly what happens when a branch or a release candidate is loaded over an installed
24
+ copy that stays enabled: the harness resolves a command from the one and a skill from the other,
25
+ silently. Name both numbers at the first stop and say which half is which; a rule this file adds and
26
+ a command relies on is simply absent in that session, and nothing else will report it.
27
+
20
28
  ## 0. Effective FLOW config — base plus harness overlay
21
29
 
22
30
  - Read `FLOW.md` at the repo root as the base, then the optional overlay for the harness running
@@ -28,8 +28,8 @@ Read `~/.claude/flow/CORE.codex.md` first (shared rules: `FLOW.md` step 0, model
28
28
  - **A premise left open by `fix` §2.2 is an input to this review, not a note.** Every row of "Premises the fix depends on" whose verdict is `unsettled` enters §5 as an **ambiguous finding** and is named in §7 whether or not that gate opened — in a bug it is usually the claim that the root cause was the whole cause, which is exactly what the regression test cannot prove.
29
29
  - Require `fix` in `phases_done`; for `size` ≥ S also require `validate`.
30
30
  - `git diff` shows no changes → warn and stop.
31
- - **Gather the material once, not once per reviewer.** `npx flow-workflows bundle --checks` prints
32
- one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
31
+ - **Gather the material once, not once per reviewer.** `npx flow-workflows@<version> bundle --checks`
32
+ prints one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
33
33
  in full, the raw output of `quality.static_analysis`, and the work's handoff — in a single call.
34
34
  Read that instead of rediscovering it, and **pass it to the briefs of §2-§5**: a panel where every
35
35
  member runs its own `git diff` and opens the same files pays for that material once per agent, and
@@ -39,8 +39,15 @@ Read `~/.claude/flow/CORE.codex.md` first (shared rules: `FLOW.md` step 0, model
39
39
  What is not optional is the `Review path` line of §7: a round that skipped the pack and one that
40
40
  used it are indistinguishable from the artifact otherwise, which is how a phase quietly stops
41
41
  paying for itself.
42
+ - **`<version>` is this plugin's own, in every `flow-workflows` call on this page.** Read it once
43
+ from `version` in `~/.claude/flow/.claude-plugin/plugin.json` and substitute it. Left
44
+ unpinned, the fetcher resolves whatever the registry calls newest, which while a release candidate
45
+ is under test is the **previous** release: the page then describes subcommands and flags the CLI
46
+ that actually runs does not carry, every call exits non-zero, and the round takes the documented
47
+ fallback for a reason nobody can see. The version the plugin asks for and the version that answers
48
+ are the same number by construction, or the `Review path` line of §8 says which one failed.
42
49
  - **`agents.exec_cmd` set → the panel runs from the CLI.** Not a choice to weigh: run
43
- `npx flow-workflows review`, which spawns that command once per role over the pack above — **one
50
+ `npx flow-workflows@<version> review`, which spawns that command once per role over the pack above — **one
44
51
  turn each instead of an agentic loop each** — and returns the findings already deduplicated, with
45
52
  the reviewers it dropped for `agents.budget_max` named. Exactly three things send the round to the
46
53
  agentic panel below: the key is empty (the default — nothing changes without it), the CLI is
@@ -226,12 +226,22 @@ refuse) · **degraded** (it runs, quietly worse than the config promises), plus
226
226
  numbers with the count of panel members `quality.review_skill`/`quality.reviewers` defines, so
227
227
  the widest command's cost is visible before it is paid, not after.
228
228
  - **The `flow-workflows` CLI, which `review` reaches for before it composes a panel**:
229
- `npx flow-workflows --version` answers, and the number matches this plugin's. Unreachable — no
230
- node, no network, a machine that installs nothing — is **not** a failure: say so in one line, and
231
- that the review falls back to reading the diff from git, paying for that material once per
232
- reviewer. A version *behind* the plugin's is the one that misleads, because the commands then
233
- describe flags the installed CLI does not have: report both numbers and let the reader decide.
234
- This is the only check here about something no install step of ours puts on the machine.
229
+ `npx flow-workflows@<version> --version` answers, with `<version>` read from `version` in
230
+ `~/.claude/flow/.claude-plugin/plugin.json` — the same pin `review` uses, so the number that
231
+ answers cannot be behind the plugin's. Unreachable — no node, no network, a machine that installs
232
+ nothing — is **not** a failure: say so in one line, and that the review falls back to reading the
233
+ diff from git, paying for that material once per reviewer. What this check catches is a pin that
234
+ **cannot be fetched at all**: a candidate withdrawn from the registry, or a plugin loaded from a
235
+ branch whose version was never published, where every `flow-workflows` call will fail for the whole
236
+ session. Report the version asked for and what came back. This is the only check here about
237
+ something no install step of ours puts on the machine.
238
+ - **The plugin is one copy, not two.** The version in `~/.claude/flow/.claude-plugin/plugin.json`
239
+ and the one the loaded `flow-core` states (its opening lines) are the same number. They differ →
240
+ this session resolves its commands from one copy of the plugin and its shared rules from another,
241
+ which is what loading a branch or a candidate over an installed copy does when the installed one is
242
+ left enabled. Name both numbers and the fix: disable the installed plugin for the session, or stop
243
+ loading the second copy. A mixture is worth a `warn` rather than a `fail` — everything still runs,
244
+ which is precisely why it goes unnoticed.
235
245
  - The `flow-core` skill file exists under the plugin root: `~/.claude/flow/CORE.codex.md`.
236
246
  Missing → every phase command runs without its shared rules; fix: reinstall or update the plugin.
237
247
 
@@ -28,8 +28,8 @@ Mandatory review phase. **`$flow-feat-ship` cannot run without passing through h
28
28
  - **A premise left open by `build` §2.1bis is an input to this review, not a note.** Every row of "Premises the change depends on" whose verdict is `unsettled` enters §6 as an **ambiguous finding** (it rests, by construction, on code outside the diff) and is named in §7 whether or not the gate opened. A premise the build could not settle and the review does not mention is one the MR/PR ships as a fact.
29
29
  - Require `build` in `phases_done`. **In a multi-MR/PR work** (`meta.json.mrs` has >1 entry) require `build` in the **current `in_progress` MR/PR's** own `phases_done` (its `mrs[]` entry) — a previous MR/PR's `build` does not count. If missing, send the user to `$flow-feat-build` and stop.
30
30
  - Check that `git diff` has real changes. None → warn and stop.
31
- - **Gather the material once, not once per reviewer.** `npx flow-workflows bundle --checks` prints
32
- one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
31
+ - **Gather the material once, not once per reviewer.** `npx flow-workflows@<version> bundle --checks`
32
+ prints one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
33
33
  in full, the raw output of `quality.static_analysis`, and the work's handoff — in a single call.
34
34
  Read that instead of rediscovering it, and **pass it to the briefs of §2-§6**: a panel where every
35
35
  member runs its own `git diff` and opens the same files pays for that material once per agent, and
@@ -39,8 +39,15 @@ Mandatory review phase. **`$flow-feat-ship` cannot run without passing through h
39
39
  What is not optional is the `Review path` line of §8: a round that skipped the pack and one that
40
40
  used it are indistinguishable from the artifact otherwise, which is how a phase quietly stops
41
41
  paying for itself.
42
+ - **`<version>` is this plugin's own, in every `flow-workflows` call on this page.** Read it once
43
+ from `version` in `~/.claude/flow/.claude-plugin/plugin.json` and substitute it. Left
44
+ unpinned, the fetcher resolves whatever the registry calls newest, which while a release candidate
45
+ is under test is the **previous** release: the page then describes subcommands and flags the CLI
46
+ that actually runs does not carry, every call exits non-zero, and the round takes the documented
47
+ fallback for a reason nobody can see. The version the plugin asks for and the version that answers
48
+ are the same number by construction, or the `Review path` line of §8 says which one failed.
42
49
  - **`agents.exec_cmd` set → the panel runs from the CLI.** Not a choice to weigh: run
43
- `npx flow-workflows review`, which spawns that command once per role over the pack above — **one
50
+ `npx flow-workflows@<version> review`, which spawns that command once per role over the pack above — **one
44
51
  turn each instead of an agentic loop each** — and returns the findings already deduplicated, with
45
52
  the reviewers it dropped for `agents.budget_max` named. Exactly three things send the round to the
46
53
  agentic panel below: the key is empty (the default — nothing changes without it), the CLI is
@@ -16,6 +16,14 @@ Every `/flow:*` command assumes these rules. They are stated once, here, so a co
16
16
  carries what is specific to its phase. Read this once per session; a command that says "load
17
17
  `flow-core`" means this file.
18
18
 
19
+ **This file belongs to flow `0.65.0-rc.2`.** Compare it once, at the start of the session, against
20
+ `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
21
+ is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
22
+ — which is exactly what happens when a branch or a release candidate is loaded over an installed
23
+ copy that stays enabled: the harness resolves a command from the one and a skill from the other,
24
+ silently. Name both numbers at the first stop and say which half is which; a rule this file adds and
25
+ a command relies on is simply absent in that session, and nothing else will report it.
26
+
19
27
  ## 0. Effective FLOW config — base plus harness overlay
20
28
 
21
29
  - Read `FLOW.md` at the repo root as the base, then the optional overlay for the harness running
@@ -24,8 +24,8 @@ Read `~/.claude/flow/CORE.gemini.md` first (shared rules: `FLOW.md` step 0, mode
24
24
  - **A premise left open by `fix` §2.2 is an input to this review, not a note.** Every row of "Premises the fix depends on" whose verdict is `unsettled` enters §5 as an **ambiguous finding** and is named in §7 whether or not that gate opened — in a bug it is usually the claim that the root cause was the whole cause, which is exactly what the regression test cannot prove.
25
25
  - Require `fix` in `phases_done`; for `size` ≥ S also require `validate`.
26
26
  - `git diff` shows no changes → warn and stop.
27
- - **Gather the material once, not once per reviewer.** `npx flow-workflows bundle --checks` prints
28
- one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
27
+ - **Gather the material once, not once per reviewer.** `npx flow-workflows@<version> bundle --checks`
28
+ prints one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
29
29
  in full, the raw output of `quality.static_analysis`, and the work's handoff — in a single call.
30
30
  Read that instead of rediscovering it, and **pass it to the briefs of §2-§5**: a panel where every
31
31
  member runs its own `git diff` and opens the same files pays for that material once per agent, and
@@ -35,8 +35,15 @@ Read `~/.claude/flow/CORE.gemini.md` first (shared rules: `FLOW.md` step 0, mode
35
35
  What is not optional is the `Review path` line of §7: a round that skipped the pack and one that
36
36
  used it are indistinguishable from the artifact otherwise, which is how a phase quietly stops
37
37
  paying for itself.
38
+ - **`<version>` is this plugin's own, in every `flow-workflows` call on this page.** Read it once
39
+ from `version` in `~/.claude/flow/.claude-plugin/plugin.json` and substitute it. Left
40
+ unpinned, the fetcher resolves whatever the registry calls newest, which while a release candidate
41
+ is under test is the **previous** release: the page then describes subcommands and flags the CLI
42
+ that actually runs does not carry, every call exits non-zero, and the round takes the documented
43
+ fallback for a reason nobody can see. The version the plugin asks for and the version that answers
44
+ are the same number by construction, or the `Review path` line of §8 says which one failed.
38
45
  - **`agents.exec_cmd` set → the panel runs from the CLI.** Not a choice to weigh: run
39
- `npx flow-workflows review`, which spawns that command once per role over the pack above — **one
46
+ `npx flow-workflows@<version> review`, which spawns that command once per role over the pack above — **one
40
47
  turn each instead of an agentic loop each** — and returns the findings already deduplicated, with
41
48
  the reviewers it dropped for `agents.budget_max` named. Exactly three things send the round to the
42
49
  agentic panel below: the key is empty (the default — nothing changes without it), the CLI is
@@ -222,12 +222,22 @@ refuse) · **degraded** (it runs, quietly worse than the config promises), plus
222
222
  numbers with the count of panel members `quality.review_skill`/`quality.reviewers` defines, so
223
223
  the widest command's cost is visible before it is paid, not after.
224
224
  - **The `flow-workflows` CLI, which `review` reaches for before it composes a panel**:
225
- `npx flow-workflows --version` answers, and the number matches this plugin's. Unreachable — no
226
- node, no network, a machine that installs nothing — is **not** a failure: say so in one line, and
227
- that the review falls back to reading the diff from git, paying for that material once per
228
- reviewer. A version *behind* the plugin's is the one that misleads, because the commands then
229
- describe flags the installed CLI does not have: report both numbers and let the reader decide.
230
- This is the only check here about something no install step of ours puts on the machine.
225
+ `npx flow-workflows@<version> --version` answers, with `<version>` read from `version` in
226
+ `~/.claude/flow/.claude-plugin/plugin.json` — the same pin `review` uses, so the number that
227
+ answers cannot be behind the plugin's. Unreachable — no node, no network, a machine that installs
228
+ nothing — is **not** a failure: say so in one line, and that the review falls back to reading the
229
+ diff from git, paying for that material once per reviewer. What this check catches is a pin that
230
+ **cannot be fetched at all**: a candidate withdrawn from the registry, or a plugin loaded from a
231
+ branch whose version was never published, where every `flow-workflows` call will fail for the whole
232
+ session. Report the version asked for and what came back. This is the only check here about
233
+ something no install step of ours puts on the machine.
234
+ - **The plugin is one copy, not two.** The version in `~/.claude/flow/.claude-plugin/plugin.json`
235
+ and the one the loaded `flow-core` states (its opening lines) are the same number. They differ →
236
+ this session resolves its commands from one copy of the plugin and its shared rules from another,
237
+ which is what loading a branch or a candidate over an installed copy does when the installed one is
238
+ left enabled. Name both numbers and the fix: disable the installed plugin for the session, or stop
239
+ loading the second copy. A mixture is worth a `warn` rather than a `fail` — everything still runs,
240
+ which is precisely why it goes unnoticed.
231
241
  - The `flow-core` skill file exists under the plugin root: `~/.claude/flow/CORE.gemini.md`.
232
242
  Missing → every phase command runs without its shared rules; fix: reinstall or update the plugin.
233
243
 
@@ -24,8 +24,8 @@ Mandatory review phase. **`/flow:feat:ship` cannot run without passing through h
24
24
  - **A premise left open by `build` §2.1bis is an input to this review, not a note.** Every row of "Premises the change depends on" whose verdict is `unsettled` enters §6 as an **ambiguous finding** (it rests, by construction, on code outside the diff) and is named in §7 whether or not the gate opened. A premise the build could not settle and the review does not mention is one the MR/PR ships as a fact.
25
25
  - Require `build` in `phases_done`. **In a multi-MR/PR work** (`meta.json.mrs` has >1 entry) require `build` in the **current `in_progress` MR/PR's** own `phases_done` (its `mrs[]` entry) — a previous MR/PR's `build` does not count. If missing, send the user to `/flow:feat:build` and stop.
26
26
  - Check that `git diff` has real changes. None → warn and stop.
27
- - **Gather the material once, not once per reviewer.** `npx flow-workflows bundle --checks` prints
28
- one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
27
+ - **Gather the material once, not once per reviewer.** `npx flow-workflows@<version> bundle --checks`
28
+ prints one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
29
29
  in full, the raw output of `quality.static_analysis`, and the work's handoff — in a single call.
30
30
  Read that instead of rediscovering it, and **pass it to the briefs of §2-§6**: a panel where every
31
31
  member runs its own `git diff` and opens the same files pays for that material once per agent, and
@@ -35,8 +35,15 @@ Mandatory review phase. **`/flow:feat:ship` cannot run without passing through h
35
35
  What is not optional is the `Review path` line of §8: a round that skipped the pack and one that
36
36
  used it are indistinguishable from the artifact otherwise, which is how a phase quietly stops
37
37
  paying for itself.
38
+ - **`<version>` is this plugin's own, in every `flow-workflows` call on this page.** Read it once
39
+ from `version` in `~/.claude/flow/.claude-plugin/plugin.json` and substitute it. Left
40
+ unpinned, the fetcher resolves whatever the registry calls newest, which while a release candidate
41
+ is under test is the **previous** release: the page then describes subcommands and flags the CLI
42
+ that actually runs does not carry, every call exits non-zero, and the round takes the documented
43
+ fallback for a reason nobody can see. The version the plugin asks for and the version that answers
44
+ are the same number by construction, or the `Review path` line of §8 says which one failed.
38
45
  - **`agents.exec_cmd` set → the panel runs from the CLI.** Not a choice to weigh: run
39
- `npx flow-workflows review`, which spawns that command once per role over the pack above — **one
46
+ `npx flow-workflows@<version> review`, which spawns that command once per role over the pack above — **one
40
47
  turn each instead of an agentic loop each** — and returns the findings already deduplicated, with
41
48
  the reviewers it dropped for `agents.budget_max` named. Exactly three things send the round to the
42
49
  agentic panel below: the key is empty (the default — nothing changes without it), the CLI is
@@ -17,6 +17,14 @@ Every `/flow-*` command assumes these rules. They are stated once, here, so a co
17
17
  carries what is specific to its phase. Read this once per session; a command that says "load
18
18
  `flow-core`" means this file.
19
19
 
20
+ **This file belongs to flow `0.65.0-rc.2`.** Compare it once, at the start of the session, against
21
+ `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
22
+ is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
23
+ — which is exactly what happens when a branch or a release candidate is loaded over an installed
24
+ copy that stays enabled: the harness resolves a command from the one and a skill from the other,
25
+ silently. Name both numbers at the first stop and say which half is which; a rule this file adds and
26
+ a command relies on is simply absent in that session, and nothing else will report it.
27
+
20
28
  ## 0. Effective FLOW config — base plus harness overlay
21
29
 
22
30
  - Read `FLOW.md` at the repo root as the base, then the optional overlay for the harness running
@@ -28,8 +28,8 @@ Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, mode
28
28
  - **A premise left open by `fix` §2.2 is an input to this review, not a note.** Every row of "Premises the fix depends on" whose verdict is `unsettled` enters §5 as an **ambiguous finding** and is named in §7 whether or not that gate opened — in a bug it is usually the claim that the root cause was the whole cause, which is exactly what the regression test cannot prove.
29
29
  - Require `fix` in `phases_done`; for `size` ≥ S also require `validate`.
30
30
  - `git diff` shows no changes → warn and stop.
31
- - **Gather the material once, not once per reviewer.** `npx flow-workflows bundle --checks` prints
32
- one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
31
+ - **Gather the material once, not once per reviewer.** `npx flow-workflows@<version> bundle --checks`
32
+ prints one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
33
33
  in full, the raw output of `quality.static_analysis`, and the work's handoff — in a single call.
34
34
  Read that instead of rediscovering it, and **pass it to the briefs of §2-§5**: a panel where every
35
35
  member runs its own `git diff` and opens the same files pays for that material once per agent, and
@@ -39,8 +39,15 @@ Read `~/.claude/flow/CORE.hermes.md` first (shared rules: `FLOW.md` step 0, mode
39
39
  What is not optional is the `Review path` line of §7: a round that skipped the pack and one that
40
40
  used it are indistinguishable from the artifact otherwise, which is how a phase quietly stops
41
41
  paying for itself.
42
+ - **`<version>` is this plugin's own, in every `flow-workflows` call on this page.** Read it once
43
+ from `version` in `~/.claude/flow/.claude-plugin/plugin.json` and substitute it. Left
44
+ unpinned, the fetcher resolves whatever the registry calls newest, which while a release candidate
45
+ is under test is the **previous** release: the page then describes subcommands and flags the CLI
46
+ that actually runs does not carry, every call exits non-zero, and the round takes the documented
47
+ fallback for a reason nobody can see. The version the plugin asks for and the version that answers
48
+ are the same number by construction, or the `Review path` line of §8 says which one failed.
42
49
  - **`agents.exec_cmd` set → the panel runs from the CLI.** Not a choice to weigh: run
43
- `npx flow-workflows review`, which spawns that command once per role over the pack above — **one
50
+ `npx flow-workflows@<version> review`, which spawns that command once per role over the pack above — **one
44
51
  turn each instead of an agentic loop each** — and returns the findings already deduplicated, with
45
52
  the reviewers it dropped for `agents.budget_max` named. Exactly three things send the round to the
46
53
  agentic panel below: the key is empty (the default — nothing changes without it), the CLI is
@@ -226,12 +226,22 @@ refuse) · **degraded** (it runs, quietly worse than the config promises), plus
226
226
  numbers with the count of panel members `quality.review_skill`/`quality.reviewers` defines, so
227
227
  the widest command's cost is visible before it is paid, not after.
228
228
  - **The `flow-workflows` CLI, which `review` reaches for before it composes a panel**:
229
- `npx flow-workflows --version` answers, and the number matches this plugin's. Unreachable — no
230
- node, no network, a machine that installs nothing — is **not** a failure: say so in one line, and
231
- that the review falls back to reading the diff from git, paying for that material once per
232
- reviewer. A version *behind* the plugin's is the one that misleads, because the commands then
233
- describe flags the installed CLI does not have: report both numbers and let the reader decide.
234
- This is the only check here about something no install step of ours puts on the machine.
229
+ `npx flow-workflows@<version> --version` answers, with `<version>` read from `version` in
230
+ `~/.claude/flow/.claude-plugin/plugin.json` — the same pin `review` uses, so the number that
231
+ answers cannot be behind the plugin's. Unreachable — no node, no network, a machine that installs
232
+ nothing — is **not** a failure: say so in one line, and that the review falls back to reading the
233
+ diff from git, paying for that material once per reviewer. What this check catches is a pin that
234
+ **cannot be fetched at all**: a candidate withdrawn from the registry, or a plugin loaded from a
235
+ branch whose version was never published, where every `flow-workflows` call will fail for the whole
236
+ session. Report the version asked for and what came back. This is the only check here about
237
+ something no install step of ours puts on the machine.
238
+ - **The plugin is one copy, not two.** The version in `~/.claude/flow/.claude-plugin/plugin.json`
239
+ and the one the loaded `flow-core` states (its opening lines) are the same number. They differ →
240
+ this session resolves its commands from one copy of the plugin and its shared rules from another,
241
+ which is what loading a branch or a candidate over an installed copy does when the installed one is
242
+ left enabled. Name both numbers and the fix: disable the installed plugin for the session, or stop
243
+ loading the second copy. A mixture is worth a `warn` rather than a `fail` — everything still runs,
244
+ which is precisely why it goes unnoticed.
235
245
  - The `flow-core` skill file exists under the plugin root: `~/.claude/flow/CORE.hermes.md`.
236
246
  Missing → every phase command runs without its shared rules; fix: reinstall or update the plugin.
237
247
 
@@ -28,8 +28,8 @@ Mandatory review phase. **`/flow-feat-ship` cannot run without passing through h
28
28
  - **A premise left open by `build` §2.1bis is an input to this review, not a note.** Every row of "Premises the change depends on" whose verdict is `unsettled` enters §6 as an **ambiguous finding** (it rests, by construction, on code outside the diff) and is named in §7 whether or not the gate opened. A premise the build could not settle and the review does not mention is one the MR/PR ships as a fact.
29
29
  - Require `build` in `phases_done`. **In a multi-MR/PR work** (`meta.json.mrs` has >1 entry) require `build` in the **current `in_progress` MR/PR's** own `phases_done` (its `mrs[]` entry) — a previous MR/PR's `build` does not count. If missing, send the user to `/flow-feat-build` and stop.
30
30
  - Check that `git diff` has real changes. None → warn and stop.
31
- - **Gather the material once, not once per reviewer.** `npx flow-workflows bundle --checks` prints
32
- one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
31
+ - **Gather the material once, not once per reviewer.** `npx flow-workflows@<version> bundle --checks`
32
+ prints one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
33
33
  in full, the raw output of `quality.static_analysis`, and the work's handoff — in a single call.
34
34
  Read that instead of rediscovering it, and **pass it to the briefs of §2-§6**: a panel where every
35
35
  member runs its own `git diff` and opens the same files pays for that material once per agent, and
@@ -39,8 +39,15 @@ Mandatory review phase. **`/flow-feat-ship` cannot run without passing through h
39
39
  What is not optional is the `Review path` line of §8: a round that skipped the pack and one that
40
40
  used it are indistinguishable from the artifact otherwise, which is how a phase quietly stops
41
41
  paying for itself.
42
+ - **`<version>` is this plugin's own, in every `flow-workflows` call on this page.** Read it once
43
+ from `version` in `~/.claude/flow/.claude-plugin/plugin.json` and substitute it. Left
44
+ unpinned, the fetcher resolves whatever the registry calls newest, which while a release candidate
45
+ is under test is the **previous** release: the page then describes subcommands and flags the CLI
46
+ that actually runs does not carry, every call exits non-zero, and the round takes the documented
47
+ fallback for a reason nobody can see. The version the plugin asks for and the version that answers
48
+ are the same number by construction, or the `Review path` line of §8 says which one failed.
42
49
  - **`agents.exec_cmd` set → the panel runs from the CLI.** Not a choice to weigh: run
43
- `npx flow-workflows review`, which spawns that command once per role over the pack above — **one
50
+ `npx flow-workflows@<version> review`, which spawns that command once per role over the pack above — **one
44
51
  turn each instead of an agentic loop each** — and returns the findings already deduplicated, with
45
52
  the reviewers it dropped for `agents.budget_max` named. Exactly three things send the round to the
46
53
  agentic panel below: the key is empty (the default — nothing changes without it), the CLI is
@@ -16,6 +16,14 @@ Every `/flow-*` command assumes these rules. They are stated once, here, so a co
16
16
  carries what is specific to its phase. Read this once per session; a command that says "load
17
17
  `flow-core`" means this file.
18
18
 
19
+ **This file belongs to flow `0.65.0-rc.2`.** Compare it once, at the start of the session, against
20
+ `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
21
+ is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
22
+ — which is exactly what happens when a branch or a release candidate is loaded over an installed
23
+ copy that stays enabled: the harness resolves a command from the one and a skill from the other,
24
+ silently. Name both numbers at the first stop and say which half is which; a rule this file adds and
25
+ a command relies on is simply absent in that session, and nothing else will report it.
26
+
19
27
  ## 0. Effective FLOW config — base plus harness overlay
20
28
 
21
29
  - Read `FLOW.md` at the repo root as the base, then the optional overlay for the harness running
@@ -26,8 +26,8 @@ Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, mo
26
26
  - **A premise left open by `fix` §2.2 is an input to this review, not a note.** Every row of "Premises the fix depends on" whose verdict is `unsettled` enters §5 as an **ambiguous finding** and is named in §7 whether or not that gate opened — in a bug it is usually the claim that the root cause was the whole cause, which is exactly what the regression test cannot prove.
27
27
  - Require `fix` in `phases_done`; for `size` ≥ S also require `validate`.
28
28
  - `git diff` shows no changes → warn and stop.
29
- - **Gather the material once, not once per reviewer.** `npx flow-workflows bundle --checks` prints
30
- one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
29
+ - **Gather the material once, not once per reviewer.** `npx flow-workflows@<version> bundle --checks`
30
+ prints one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
31
31
  in full, the raw output of `quality.static_analysis`, and the work's handoff — in a single call.
32
32
  Read that instead of rediscovering it, and **pass it to the briefs of §2-§5**: a panel where every
33
33
  member runs its own `git diff` and opens the same files pays for that material once per agent, and
@@ -37,8 +37,15 @@ Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, mo
37
37
  What is not optional is the `Review path` line of §7: a round that skipped the pack and one that
38
38
  used it are indistinguishable from the artifact otherwise, which is how a phase quietly stops
39
39
  paying for itself.
40
+ - **`<version>` is this plugin's own, in every `flow-workflows` call on this page.** Read it once
41
+ from `version` in `~/.claude/flow/.claude-plugin/plugin.json` and substitute it. Left
42
+ unpinned, the fetcher resolves whatever the registry calls newest, which while a release candidate
43
+ is under test is the **previous** release: the page then describes subcommands and flags the CLI
44
+ that actually runs does not carry, every call exits non-zero, and the round takes the documented
45
+ fallback for a reason nobody can see. The version the plugin asks for and the version that answers
46
+ are the same number by construction, or the `Review path` line of §8 says which one failed.
40
47
  - **`agents.exec_cmd` set → the panel runs from the CLI.** Not a choice to weigh: run
41
- `npx flow-workflows review`, which spawns that command once per role over the pack above — **one
48
+ `npx flow-workflows@<version> review`, which spawns that command once per role over the pack above — **one
42
49
  turn each instead of an agentic loop each** — and returns the findings already deduplicated, with
43
50
  the reviewers it dropped for `agents.budget_max` named. Exactly three things send the round to the
44
51
  agentic panel below: the key is empty (the default — nothing changes without it), the CLI is
@@ -224,12 +224,22 @@ refuse) · **degraded** (it runs, quietly worse than the config promises), plus
224
224
  numbers with the count of panel members `quality.review_skill`/`quality.reviewers` defines, so
225
225
  the widest command's cost is visible before it is paid, not after.
226
226
  - **The `flow-workflows` CLI, which `review` reaches for before it composes a panel**:
227
- `npx flow-workflows --version` answers, and the number matches this plugin's. Unreachable — no
228
- node, no network, a machine that installs nothing — is **not** a failure: say so in one line, and
229
- that the review falls back to reading the diff from git, paying for that material once per
230
- reviewer. A version *behind* the plugin's is the one that misleads, because the commands then
231
- describe flags the installed CLI does not have: report both numbers and let the reader decide.
232
- This is the only check here about something no install step of ours puts on the machine.
227
+ `npx flow-workflows@<version> --version` answers, with `<version>` read from `version` in
228
+ `~/.claude/flow/.claude-plugin/plugin.json` — the same pin `review` uses, so the number that
229
+ answers cannot be behind the plugin's. Unreachable — no node, no network, a machine that installs
230
+ nothing — is **not** a failure: say so in one line, and that the review falls back to reading the
231
+ diff from git, paying for that material once per reviewer. What this check catches is a pin that
232
+ **cannot be fetched at all**: a candidate withdrawn from the registry, or a plugin loaded from a
233
+ branch whose version was never published, where every `flow-workflows` call will fail for the whole
234
+ session. Report the version asked for and what came back. This is the only check here about
235
+ something no install step of ours puts on the machine.
236
+ - **The plugin is one copy, not two.** The version in `~/.claude/flow/.claude-plugin/plugin.json`
237
+ and the one the loaded `flow-core` states (its opening lines) are the same number. They differ →
238
+ this session resolves its commands from one copy of the plugin and its shared rules from another,
239
+ which is what loading a branch or a candidate over an installed copy does when the installed one is
240
+ left enabled. Name both numbers and the fix: disable the installed plugin for the session, or stop
241
+ loading the second copy. A mixture is worth a `warn` rather than a `fail` — everything still runs,
242
+ which is precisely why it goes unnoticed.
233
243
  - The `flow-core` skill file exists under the plugin root: `~/.claude/flow/CORE.opencode.md`.
234
244
  Missing → every phase command runs without its shared rules; fix: reinstall or update the plugin.
235
245
 
@@ -26,8 +26,8 @@ Mandatory review phase. **`/flow-feat-ship` cannot run without passing through h
26
26
  - **A premise left open by `build` §2.1bis is an input to this review, not a note.** Every row of "Premises the change depends on" whose verdict is `unsettled` enters §6 as an **ambiguous finding** (it rests, by construction, on code outside the diff) and is named in §7 whether or not the gate opened. A premise the build could not settle and the review does not mention is one the MR/PR ships as a fact.
27
27
  - Require `build` in `phases_done`. **In a multi-MR/PR work** (`meta.json.mrs` has >1 entry) require `build` in the **current `in_progress` MR/PR's** own `phases_done` (its `mrs[]` entry) — a previous MR/PR's `build` does not count. If missing, send the user to `/flow-feat-build` and stop.
28
28
  - Check that `git diff` has real changes. None → warn and stop.
29
- - **Gather the material once, not once per reviewer.** `npx flow-workflows bundle --checks` prints
30
- one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
29
+ - **Gather the material once, not once per reviewer.** `npx flow-workflows@<version> bundle --checks`
30
+ prints one context pack for this branch — worklist, the diff (minus `git.diff_exclude`), the changed files
31
31
  in full, the raw output of `quality.static_analysis`, and the work's handoff — in a single call.
32
32
  Read that instead of rediscovering it, and **pass it to the briefs of §2-§6**: a panel where every
33
33
  member runs its own `git diff` and opens the same files pays for that material once per agent, and
@@ -37,8 +37,15 @@ Mandatory review phase. **`/flow-feat-ship` cannot run without passing through h
37
37
  What is not optional is the `Review path` line of §8: a round that skipped the pack and one that
38
38
  used it are indistinguishable from the artifact otherwise, which is how a phase quietly stops
39
39
  paying for itself.
40
+ - **`<version>` is this plugin's own, in every `flow-workflows` call on this page.** Read it once
41
+ from `version` in `~/.claude/flow/.claude-plugin/plugin.json` and substitute it. Left
42
+ unpinned, the fetcher resolves whatever the registry calls newest, which while a release candidate
43
+ is under test is the **previous** release: the page then describes subcommands and flags the CLI
44
+ that actually runs does not carry, every call exits non-zero, and the round takes the documented
45
+ fallback for a reason nobody can see. The version the plugin asks for and the version that answers
46
+ are the same number by construction, or the `Review path` line of §8 says which one failed.
40
47
  - **`agents.exec_cmd` set → the panel runs from the CLI.** Not a choice to weigh: run
41
- `npx flow-workflows review`, which spawns that command once per role over the pack above — **one
48
+ `npx flow-workflows@<version> review`, which spawns that command once per role over the pack above — **one
42
49
  turn each instead of an agentic loop each** — and returns the findings already deduplicated, with
43
50
  the reviewers it dropped for `agents.budget_max` named. Exactly three things send the round to the
44
51
  agentic panel below: the key is empty (the default — nothing changes without it), the CLI is
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flow-workflows",
3
- "version": "0.65.0-rc.1",
3
+ "version": "0.65.0-rc.2",
4
4
  "description": "Guided feat/bug workflows (start→ship), post-deploy monitoring and multi-agent code review, stack-agnostic. Each repo uses a shared FLOW.md plus optional harness overlay.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -3,7 +3,7 @@
3
3
  "name": "flow",
4
4
  "displayName": "Flow — guided dev workflows",
5
5
  "description": "Guided feat/bug workflows (start→ship), post-deploy monitoring and multi-agent code review, stack-agnostic. Each repo uses a shared FLOW.md plus optional harness overlay.",
6
- "version": "0.65.0-rc.1",
6
+ "version": "0.65.0-rc.2",
7
7
  "author": {
8
8
  "name": "Alberto Vioque",
9
9
  "email": "mashware@gmail.com"
@@ -11,7 +11,7 @@ The canonical, richest notes live in the [GitHub Releases](https://github.com/ma
11
11
  - **A round gathers its material once.** `npx flow-workflows bundle` prints one context pack — worklist, diff, changed files, the repo's own analysis output, the work's handoff — instead of every reviewer paying to rediscover it.
12
12
  - **The panel can run outside the agentic loop.** With `agents.exec_cmd` set, `npx flow-workflows review` runs one reviewer per role in **one turn each**, deduplicated — and that is what runs when the key is there, not one option among two.
13
13
  - **What a phase spent is written down.** `meta.json.cost[]` records the figure the harness reported, `"not reported"` when it reported none and never an estimate; `flow cost`, `/flow:work:status` and the review artifact read it back.
14
- - **A change can be run before it is tagged.** Release candidates publish under the `next` channel, so `latest` never moves for a candidate, and four ways to run a branch on a real repo are written down.
14
+ - **A change can be run before it is tagged — and the candidate's own code is what runs.** Candidates publish under the `next` channel so `latest` never moves; the commands pin the CLI to the plugin's own version, so a candidate's commands can never be served by the previous release's CLI; and a session that has ended up with two copies of the plugin says so instead of running a mixture.
15
15
  - **Two claims stopped being promises.** The preflight now refuses a line that *depends* on one ecosystem, and a test pins the four answer shapes the review CLI has to unwrap.
16
16
 
17
17
  A phase costs turns times context. The API keeps no state, so ten calls spent finding out what
@@ -56,6 +56,24 @@ at all under `bin/`. And a change to the flow can now be installed before it is
56
56
  publishes under `next`, `claude --plugin-dir` loads a branch over the release you use daily, and npm
57
57
  serves a branch straight from git for the other harnesses.
58
58
 
59
+ The first candidate then proved that last sentence half-true, in the only way that counts — a real
60
+ work, driven end to end, on a real repo. Two things a page of prose could not have found. The
61
+ commands call the CLI unpinned, so an unpinned fetch resolves the channel a candidate deliberately
62
+ does not move: the candidate's own commands were served the **previous** release's CLI, `bundle` came
63
+ back *"Unknown command"*, and the round took the documented fallback — correctly, silently, for a
64
+ reason that had nothing to do with the machine. Every `flow-workflows` call now carries the plugin's
65
+ own version, and the preflight refuses a tree where the manifest, the npm package and `flow-core`
66
+ do not state the same number, because a pin is only worth having if the number it asks for was
67
+ published. And loading a branch over an installed copy leaves **two** plugins of the same name: the
68
+ session took its commands from the branch and its shared rules from the release, ran perfectly, and
69
+ recorded the wrong thing. `flow-core` now states which version it belongs to, so any session can
70
+ compare it against the plugin it is running and name both numbers at its first stop; `/flow:doctor`
71
+ checks it outright, and `RELEASING.md` says to disable the installed copy rather than rely on either.
72
+
73
+ What made all of this visible was the `Review path` line added above — a round that fell back and a
74
+ round that did not are one line apart in the artifact, and without that line this release would have
75
+ shipped believing its own notes.
76
+
59
77
  ## v0.64.0 — Announcing the next step was how the run ended · 2026-09-16
60
78
 
61
79
  **In short**