flow-workflows 0.65.0-rc.3 → 0.65.0-rc.4

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,7 +17,7 @@ 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.3`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.65.0-rc.4`.** Compare it once, at the start of the session, against
21
21
  `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
22
22
  is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
23
23
  — which is exactly what happens when a branch or a release candidate is loaded over an installed
@@ -27,6 +27,16 @@ a command relies on is simply absent in that session, and nothing else will repo
27
27
 
28
28
  ## 0. Effective FLOW config — base plus harness overlay
29
29
 
30
+ - **Look before you read.** The first thing a phase does about configuration is list what is there:
31
+ `ls <root>/FLOW*.md` (the root being the one the next bullet resolves). One call, and it is not
32
+ optional — **an overlay you did not list is an overlay you did not read**, and nothing downstream
33
+ will notice. This is not a hypothetical: every command below, and every artifact they write,
34
+ refers to the effective configuration as "`FLOW.md`", which is a file that exists, so reading it
35
+ and stopping feels finished. Two real sessions in a row read the base in full and never went
36
+ looking for the overlay sitting beside it — the models it set were silently the defaults, and
37
+ both runs reported the keys as unset with no way to tell that apart from a repo that never set
38
+ them. **Name the files this listing found the first time a phase reports any configured value**,
39
+ so a missed overlay is visible in the artifact rather than invisible everywhere.
30
40
  - Read `FLOW.md` at the repo root as the base, then the optional overlay for the harness running
31
41
  this command: `FLOW.claude.md`, `FLOW.codex.md`, `FLOW.opencode.md`, `FLOW.gemini.md`, or
32
42
  `FLOW.hermes.md`. The
@@ -50,7 +60,8 @@ a command relies on is simply absent in that session, and nothing else will repo
50
60
  to the normal empty-key fallback — this is how Codex can inherit its session model while a legacy
51
61
  `FLOW.md` still names a Claude model. A list-valued key is replaced as a whole, never appended.
52
62
  `conventions` is the one unkeyed section: its overlay lines are added after the base lines, so
53
- both sets apply. Keep the source file of every effective value; `doctor` reports it and later
63
+ both sets apply. **Every value carries the file it came from**, and a phase that prints a value
64
+ prints that file with it — "`agents: opus` (`FLOW.claude.md`)", never the value alone. `doctor` reports it and later
54
65
  edits preserve it.
55
66
  - The sections in either file are tracker, git, autonomy, quality, agents, models, data,
56
67
  conventions, notes, knowledge, and observability. Both files missing, or an effective empty key
@@ -162,7 +162,7 @@ Cost line: count every subagent this command launched — reviewers = §2.1 buil
162
162
  - Measured cost: <what the harness reported for this round, when it reported anything — `flow review --record` writes it to `meta.json.cost[]` and `$flow-work-status` and `flow cost` read it back. A harness that reports no figure is recorded as "not reported": the subagent count above is a headcount, not a cost, and a guess is worse than a gap.>
163
163
  - Effective size: <diff size (N changed lines) vs `meta.json.size`, which the tier used, and — when the diff landed within 10% under a tier threshold — that fact (§2.0)>
164
164
  - Review path: <the two paths this round actually took: `flow bundle` or git for the material, `flow review` or the agentic panel for the reviewers — each with the reason when it was the fallback (no CLI, non-zero exit, `agents.exec_cmd` empty, every role empty). Without this line a round that skipped the CLI reads exactly like one that used it.>
165
- - Agent models: <the value of `models.workers`/`models.agents` when set; otherwise "inherited from this thread"; agents named in `agents.<role>` keep their own definition's model>
165
+ - Agent models: <the value of `models.workers`/`models.agents` **with the file each came from** (flow-core §0) when set; otherwise "inherited from this thread", naming the config files you listed; agents named in `agents.<role>` keep their own definition's model>
166
166
  - Defaults used: <every empty `FLOW.md` key this round resolved with its default — one per line as `key → default` — or "none". In `guided`/`auto` each is also an entry in `meta.json.defaults_used[]` (flow-core §0); in `manual` the phase may offer one of them at its stop.>
167
167
  - Skipped for budget: <phases dropped by §2.0's give-up order, or "none">
168
168
  - Blockers: N
@@ -310,7 +310,7 @@ Write `.claude/work/<TICKET>/06-review.md`. The `Cost:` line of `## Summary` is
310
310
  - Review tier: <full | proportional | light — which reviewers ran, at what built-in effort (medium/high/xhigh/max), and why, per §2.0>
311
311
  - Effective size: <diff size (N changed lines) vs `meta.json.size`, which of the two the tier used, and — when the diff pointed higher — that the work may be misclassified. When the diff landed within 10% under a tier threshold, say so here (§2.0).>
312
312
  - Review path: <the two paths this round actually took: `flow bundle` or git for the material, `flow review` or the agentic panel for the reviewers — each with the reason when it was the fallback (no CLI, non-zero exit, `agents.exec_cmd` empty, every role empty). Without this line a round that skipped the CLI reads exactly like one that used it.>
313
- - Agent models: <the value of `models.workers`/`models.agents` when set; otherwise "inherited from this thread" — plus, when the panel ran, that agents named in `agents.<role>` kept the model their own definition sets. The values as they are, no judgement on them>
313
+ - Agent models: <the value of `models.workers`/`models.agents` **with the file each came from** (flow-core §0) when set; otherwise "inherited from this thread", naming the config files you listed — "unset" without them reads the same whether the overlay was empty or never opened — plus, when the panel ran, that agents named in `agents.<role>` kept the model their own definition sets. The values as they are, no judgement on them>
314
314
  - Cost: <n>/<budget_max> subagents launched (<k> reviewers · <m> reinforcements · <s> skeptics), tier <light|proportional|full>, effort <medium|high|xhigh|max>
315
315
  - Measured cost: <what the harness reported for this round, when it reported anything — `flow review --record` writes it to `meta.json.cost[]` and `$flow-work-status` and `flow cost` read it back. A harness that reports no figure is recorded as "not reported": the subagent count above is a headcount, not a cost, and a guess is worse than a gap.>
316
316
  - Agents launched: <ran vs defined — `N/M` of the `review_skill`/`reviewers` roster, naming any that did not run (with the reason) and any substitution; "built-in only" if §2.0 selected no panel>
@@ -16,7 +16,7 @@ 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.3`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.65.0-rc.4`.** Compare it once, at the start of the session, against
20
20
  `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
21
21
  is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
22
22
  — which is exactly what happens when a branch or a release candidate is loaded over an installed
@@ -26,6 +26,16 @@ a command relies on is simply absent in that session, and nothing else will repo
26
26
 
27
27
  ## 0. Effective FLOW config — base plus harness overlay
28
28
 
29
+ - **Look before you read.** The first thing a phase does about configuration is list what is there:
30
+ `ls <root>/FLOW*.md` (the root being the one the next bullet resolves). One call, and it is not
31
+ optional — **an overlay you did not list is an overlay you did not read**, and nothing downstream
32
+ will notice. This is not a hypothetical: every command below, and every artifact they write,
33
+ refers to the effective configuration as "`FLOW.md`", which is a file that exists, so reading it
34
+ and stopping feels finished. Two real sessions in a row read the base in full and never went
35
+ looking for the overlay sitting beside it — the models it set were silently the defaults, and
36
+ both runs reported the keys as unset with no way to tell that apart from a repo that never set
37
+ them. **Name the files this listing found the first time a phase reports any configured value**,
38
+ so a missed overlay is visible in the artifact rather than invisible everywhere.
29
39
  - Read `FLOW.md` at the repo root as the base, then the optional overlay for the harness running
30
40
  this command: `FLOW.claude.md`, `FLOW.codex.md`, `FLOW.opencode.md`, `FLOW.gemini.md`, or
31
41
  `FLOW.hermes.md`. The
@@ -49,7 +59,8 @@ a command relies on is simply absent in that session, and nothing else will repo
49
59
  to the normal empty-key fallback — this is how Codex can inherit its session model while a legacy
50
60
  `FLOW.md` still names a Claude model. A list-valued key is replaced as a whole, never appended.
51
61
  `conventions` is the one unkeyed section: its overlay lines are added after the base lines, so
52
- both sets apply. Keep the source file of every effective value; `doctor` reports it and later
62
+ both sets apply. **Every value carries the file it came from**, and a phase that prints a value
63
+ prints that file with it — "`agents: opus` (`FLOW.claude.md`)", never the value alone. `doctor` reports it and later
53
64
  edits preserve it.
54
65
  - The sections in either file are tracker, git, autonomy, quality, agents, models, data,
55
66
  conventions, notes, knowledge, and observability. Both files missing, or an effective empty key
@@ -158,7 +158,7 @@ Cost line: count every subagent this command launched — reviewers = §2.1 buil
158
158
  - Measured cost: <what the harness reported for this round, when it reported anything — `flow review --record` writes it to `meta.json.cost[]` and `/flow:work:status` and `flow cost` read it back. A harness that reports no figure is recorded as "not reported": the subagent count above is a headcount, not a cost, and a guess is worse than a gap.>
159
159
  - Effective size: <diff size (N changed lines) vs `meta.json.size`, which the tier used, and — when the diff landed within 10% under a tier threshold — that fact (§2.0)>
160
160
  - Review path: <the two paths this round actually took: `flow bundle` or git for the material, `flow review` or the agentic panel for the reviewers — each with the reason when it was the fallback (no CLI, non-zero exit, `agents.exec_cmd` empty, every role empty). Without this line a round that skipped the CLI reads exactly like one that used it.>
161
- - Agent models: <the value of `models.workers`/`models.agents` when set; otherwise "inherited from this thread"; agents named in `agents.<role>` keep their own definition's model>
161
+ - Agent models: <the value of `models.workers`/`models.agents` **with the file each came from** (flow-core §0) when set; otherwise "inherited from this thread", naming the config files you listed; agents named in `agents.<role>` keep their own definition's model>
162
162
  - Defaults used: <every empty `FLOW.md` key this round resolved with its default — one per line as `key → default` — or "none". In `guided`/`auto` each is also an entry in `meta.json.defaults_used[]` (flow-core §0); in `manual` the phase may offer one of them at its stop.>
163
163
  - Skipped for budget: <phases dropped by §2.0's give-up order, or "none">
164
164
  - Blockers: N
@@ -306,7 +306,7 @@ Write `.claude/work/<TICKET>/06-review.md`. The `Cost:` line of `## Summary` is
306
306
  - Review tier: <full | proportional | light — which reviewers ran, at what built-in effort (medium/high/xhigh/max), and why, per §2.0>
307
307
  - Effective size: <diff size (N changed lines) vs `meta.json.size`, which of the two the tier used, and — when the diff pointed higher — that the work may be misclassified. When the diff landed within 10% under a tier threshold, say so here (§2.0).>
308
308
  - Review path: <the two paths this round actually took: `flow bundle` or git for the material, `flow review` or the agentic panel for the reviewers — each with the reason when it was the fallback (no CLI, non-zero exit, `agents.exec_cmd` empty, every role empty). Without this line a round that skipped the CLI reads exactly like one that used it.>
309
- - Agent models: <the value of `models.workers`/`models.agents` when set; otherwise "inherited from this thread" — plus, when the panel ran, that agents named in `agents.<role>` kept the model their own definition sets. The values as they are, no judgement on them>
309
+ - Agent models: <the value of `models.workers`/`models.agents` **with the file each came from** (flow-core §0) when set; otherwise "inherited from this thread", naming the config files you listed — "unset" without them reads the same whether the overlay was empty or never opened — plus, when the panel ran, that agents named in `agents.<role>` kept the model their own definition sets. The values as they are, no judgement on them>
310
310
  - Cost: <n>/<budget_max> subagents launched (<k> reviewers · <m> reinforcements · <s> skeptics), tier <light|proportional|full>, effort <medium|high|xhigh|max>
311
311
  - Measured cost: <what the harness reported for this round, when it reported anything — `flow review --record` writes it to `meta.json.cost[]` and `/flow:work:status` and `flow cost` read it back. A harness that reports no figure is recorded as "not reported": the subagent count above is a headcount, not a cost, and a guess is worse than a gap.>
312
312
  - Agents launched: <ran vs defined — `N/M` of the `review_skill`/`reviewers` roster, naming any that did not run (with the reason) and any substitution; "built-in only" if §2.0 selected no panel>
@@ -17,7 +17,7 @@ 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.3`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.65.0-rc.4`.** Compare it once, at the start of the session, against
21
21
  `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
22
22
  is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
23
23
  — which is exactly what happens when a branch or a release candidate is loaded over an installed
@@ -27,6 +27,16 @@ a command relies on is simply absent in that session, and nothing else will repo
27
27
 
28
28
  ## 0. Effective FLOW config — base plus harness overlay
29
29
 
30
+ - **Look before you read.** The first thing a phase does about configuration is list what is there:
31
+ `ls <root>/FLOW*.md` (the root being the one the next bullet resolves). One call, and it is not
32
+ optional — **an overlay you did not list is an overlay you did not read**, and nothing downstream
33
+ will notice. This is not a hypothetical: every command below, and every artifact they write,
34
+ refers to the effective configuration as "`FLOW.md`", which is a file that exists, so reading it
35
+ and stopping feels finished. Two real sessions in a row read the base in full and never went
36
+ looking for the overlay sitting beside it — the models it set were silently the defaults, and
37
+ both runs reported the keys as unset with no way to tell that apart from a repo that never set
38
+ them. **Name the files this listing found the first time a phase reports any configured value**,
39
+ so a missed overlay is visible in the artifact rather than invisible everywhere.
30
40
  - Read `FLOW.md` at the repo root as the base, then the optional overlay for the harness running
31
41
  this command: `FLOW.claude.md`, `FLOW.codex.md`, `FLOW.opencode.md`, `FLOW.gemini.md`, or
32
42
  `FLOW.hermes.md`. The
@@ -50,7 +60,8 @@ a command relies on is simply absent in that session, and nothing else will repo
50
60
  to the normal empty-key fallback — this is how Codex can inherit its session model while a legacy
51
61
  `FLOW.md` still names a Claude model. A list-valued key is replaced as a whole, never appended.
52
62
  `conventions` is the one unkeyed section: its overlay lines are added after the base lines, so
53
- both sets apply. Keep the source file of every effective value; `doctor` reports it and later
63
+ both sets apply. **Every value carries the file it came from**, and a phase that prints a value
64
+ prints that file with it — "`agents: opus` (`FLOW.claude.md`)", never the value alone. `doctor` reports it and later
54
65
  edits preserve it.
55
66
  - The sections in either file are tracker, git, autonomy, quality, agents, models, data,
56
67
  conventions, notes, knowledge, and observability. Both files missing, or an effective empty key
@@ -162,7 +162,7 @@ Cost line: count every subagent this command launched — reviewers = §2.1 buil
162
162
  - Measured cost: <what the harness reported for this round, when it reported anything — `flow review --record` writes it to `meta.json.cost[]` and `/flow-work-status` and `flow cost` read it back. A harness that reports no figure is recorded as "not reported": the subagent count above is a headcount, not a cost, and a guess is worse than a gap.>
163
163
  - Effective size: <diff size (N changed lines) vs `meta.json.size`, which the tier used, and — when the diff landed within 10% under a tier threshold — that fact (§2.0)>
164
164
  - Review path: <the two paths this round actually took: `flow bundle` or git for the material, `flow review` or the agentic panel for the reviewers — each with the reason when it was the fallback (no CLI, non-zero exit, `agents.exec_cmd` empty, every role empty). Without this line a round that skipped the CLI reads exactly like one that used it.>
165
- - Agent models: <the value of `models.workers`/`models.agents` when set; otherwise "inherited from this thread"; agents named in `agents.<role>` keep their own definition's model>
165
+ - Agent models: <the value of `models.workers`/`models.agents` **with the file each came from** (flow-core §0) when set; otherwise "inherited from this thread", naming the config files you listed; agents named in `agents.<role>` keep their own definition's model>
166
166
  - Defaults used: <every empty `FLOW.md` key this round resolved with its default — one per line as `key → default` — or "none". In `guided`/`auto` each is also an entry in `meta.json.defaults_used[]` (flow-core §0); in `manual` the phase may offer one of them at its stop.>
167
167
  - Skipped for budget: <phases dropped by §2.0's give-up order, or "none">
168
168
  - Blockers: N
@@ -310,7 +310,7 @@ Write `.claude/work/<TICKET>/06-review.md`. The `Cost:` line of `## Summary` is
310
310
  - Review tier: <full | proportional | light — which reviewers ran, at what built-in effort (medium/high/xhigh/max), and why, per §2.0>
311
311
  - Effective size: <diff size (N changed lines) vs `meta.json.size`, which of the two the tier used, and — when the diff pointed higher — that the work may be misclassified. When the diff landed within 10% under a tier threshold, say so here (§2.0).>
312
312
  - Review path: <the two paths this round actually took: `flow bundle` or git for the material, `flow review` or the agentic panel for the reviewers — each with the reason when it was the fallback (no CLI, non-zero exit, `agents.exec_cmd` empty, every role empty). Without this line a round that skipped the CLI reads exactly like one that used it.>
313
- - Agent models: <the value of `models.workers`/`models.agents` when set; otherwise "inherited from this thread" — plus, when the panel ran, that agents named in `agents.<role>` kept the model their own definition sets. The values as they are, no judgement on them>
313
+ - Agent models: <the value of `models.workers`/`models.agents` **with the file each came from** (flow-core §0) when set; otherwise "inherited from this thread", naming the config files you listed — "unset" without them reads the same whether the overlay was empty or never opened — plus, when the panel ran, that agents named in `agents.<role>` kept the model their own definition sets. The values as they are, no judgement on them>
314
314
  - Cost: <n>/<budget_max> subagents launched (<k> reviewers · <m> reinforcements · <s> skeptics), tier <light|proportional|full>, effort <medium|high|xhigh|max>
315
315
  - Measured cost: <what the harness reported for this round, when it reported anything — `flow review --record` writes it to `meta.json.cost[]` and `/flow-work-status` and `flow cost` read it back. A harness that reports no figure is recorded as "not reported": the subagent count above is a headcount, not a cost, and a guess is worse than a gap.>
316
316
  - Agents launched: <ran vs defined — `N/M` of the `review_skill`/`reviewers` roster, naming any that did not run (with the reason) and any substitution; "built-in only" if §2.0 selected no panel>
@@ -16,7 +16,7 @@ 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.3`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.65.0-rc.4`.** Compare it once, at the start of the session, against
20
20
  `version` in `~/.claude/flow/.claude-plugin/plugin.json`. The two differing means the session
21
21
  is running a **mixture** — the commands from one copy of the plugin, these shared rules from another
22
22
  — which is exactly what happens when a branch or a release candidate is loaded over an installed
@@ -26,6 +26,16 @@ a command relies on is simply absent in that session, and nothing else will repo
26
26
 
27
27
  ## 0. Effective FLOW config — base plus harness overlay
28
28
 
29
+ - **Look before you read.** The first thing a phase does about configuration is list what is there:
30
+ `ls <root>/FLOW*.md` (the root being the one the next bullet resolves). One call, and it is not
31
+ optional — **an overlay you did not list is an overlay you did not read**, and nothing downstream
32
+ will notice. This is not a hypothetical: every command below, and every artifact they write,
33
+ refers to the effective configuration as "`FLOW.md`", which is a file that exists, so reading it
34
+ and stopping feels finished. Two real sessions in a row read the base in full and never went
35
+ looking for the overlay sitting beside it — the models it set were silently the defaults, and
36
+ both runs reported the keys as unset with no way to tell that apart from a repo that never set
37
+ them. **Name the files this listing found the first time a phase reports any configured value**,
38
+ so a missed overlay is visible in the artifact rather than invisible everywhere.
29
39
  - Read `FLOW.md` at the repo root as the base, then the optional overlay for the harness running
30
40
  this command: `FLOW.claude.md`, `FLOW.codex.md`, `FLOW.opencode.md`, `FLOW.gemini.md`, or
31
41
  `FLOW.hermes.md`. The
@@ -49,7 +59,8 @@ a command relies on is simply absent in that session, and nothing else will repo
49
59
  to the normal empty-key fallback — this is how Codex can inherit its session model while a legacy
50
60
  `FLOW.md` still names a Claude model. A list-valued key is replaced as a whole, never appended.
51
61
  `conventions` is the one unkeyed section: its overlay lines are added after the base lines, so
52
- both sets apply. Keep the source file of every effective value; `doctor` reports it and later
62
+ both sets apply. **Every value carries the file it came from**, and a phase that prints a value
63
+ prints that file with it — "`agents: opus` (`FLOW.claude.md`)", never the value alone. `doctor` reports it and later
53
64
  edits preserve it.
54
65
  - The sections in either file are tracker, git, autonomy, quality, agents, models, data,
55
66
  conventions, notes, knowledge, and observability. Both files missing, or an effective empty key
@@ -160,7 +160,7 @@ Cost line: count every subagent this command launched — reviewers = §2.1 buil
160
160
  - Measured cost: <what the harness reported for this round, when it reported anything — `flow review --record` writes it to `meta.json.cost[]` and `/flow-work-status` and `flow cost` read it back. A harness that reports no figure is recorded as "not reported": the subagent count above is a headcount, not a cost, and a guess is worse than a gap.>
161
161
  - Effective size: <diff size (N changed lines) vs `meta.json.size`, which the tier used, and — when the diff landed within 10% under a tier threshold — that fact (§2.0)>
162
162
  - Review path: <the two paths this round actually took: `flow bundle` or git for the material, `flow review` or the agentic panel for the reviewers — each with the reason when it was the fallback (no CLI, non-zero exit, `agents.exec_cmd` empty, every role empty). Without this line a round that skipped the CLI reads exactly like one that used it.>
163
- - Agent models: <the value of `models.workers`/`models.agents` when set; otherwise "inherited from this thread"; agents named in `agents.<role>` keep their own definition's model>
163
+ - Agent models: <the value of `models.workers`/`models.agents` **with the file each came from** (flow-core §0) when set; otherwise "inherited from this thread", naming the config files you listed; agents named in `agents.<role>` keep their own definition's model>
164
164
  - Defaults used: <every empty `FLOW.md` key this round resolved with its default — one per line as `key → default` — or "none". In `guided`/`auto` each is also an entry in `meta.json.defaults_used[]` (flow-core §0); in `manual` the phase may offer one of them at its stop.>
165
165
  - Skipped for budget: <phases dropped by §2.0's give-up order, or "none">
166
166
  - Blockers: N
@@ -308,7 +308,7 @@ Write `.claude/work/<TICKET>/06-review.md`. The `Cost:` line of `## Summary` is
308
308
  - Review tier: <full | proportional | light — which reviewers ran, at what built-in effort (medium/high/xhigh/max), and why, per §2.0>
309
309
  - Effective size: <diff size (N changed lines) vs `meta.json.size`, which of the two the tier used, and — when the diff pointed higher — that the work may be misclassified. When the diff landed within 10% under a tier threshold, say so here (§2.0).>
310
310
  - Review path: <the two paths this round actually took: `flow bundle` or git for the material, `flow review` or the agentic panel for the reviewers — each with the reason when it was the fallback (no CLI, non-zero exit, `agents.exec_cmd` empty, every role empty). Without this line a round that skipped the CLI reads exactly like one that used it.>
311
- - Agent models: <the value of `models.workers`/`models.agents` when set; otherwise "inherited from this thread" — plus, when the panel ran, that agents named in `agents.<role>` kept the model their own definition sets. The values as they are, no judgement on them>
311
+ - Agent models: <the value of `models.workers`/`models.agents` **with the file each came from** (flow-core §0) when set; otherwise "inherited from this thread", naming the config files you listed — "unset" without them reads the same whether the overlay was empty or never opened — plus, when the panel ran, that agents named in `agents.<role>` kept the model their own definition sets. The values as they are, no judgement on them>
312
312
  - Cost: <n>/<budget_max> subagents launched (<k> reviewers · <m> reinforcements · <s> skeptics), tier <light|proportional|full>, effort <medium|high|xhigh|max>
313
313
  - Measured cost: <what the harness reported for this round, when it reported anything — `flow review --record` writes it to `meta.json.cost[]` and `/flow-work-status` and `flow cost` read it back. A harness that reports no figure is recorded as "not reported": the subagent count above is a headcount, not a cost, and a guess is worse than a gap.>
314
314
  - Agents launched: <ran vs defined — `N/M` of the `review_skill`/`reviewers` roster, naming any that did not run (with the reason) and any substitution; "built-in only" if §2.0 selected no panel>
package/bin/cli.mjs CHANGED
@@ -271,6 +271,17 @@ function configRoot(repo) {
271
271
  return main !== repo && existsSync(join(main, 'FLOW.md')) ? main : repo
272
272
  }
273
273
 
274
+ // Which config files a run actually read. The pack says so out loud because the failure it
275
+ // makes visible is silent by nature: a phase that read the base and never looked for the
276
+ // overlay reports every key it set as unset, which is what a repo with no overlay reports too.
277
+ function configFiles(repo, harness) {
278
+ const root = configRoot(repo)
279
+ const names = ['FLOW.md', harness && `FLOW.${harness}.md`].filter(Boolean)
280
+ const found = names.filter((n) => existsSync(join(root, n)))
281
+ const where = root === repo ? '' : ` (from ${root})`
282
+ return found.length ? found.join(' + ') + where : `none found${where || ` in ${repo}`}`
283
+ }
284
+
274
285
  // Base file plus the overlay of the harness running this, exactly as flow-core §0 resolves
275
286
  // it: a key present in the overlay replaces the base value.
276
287
  function flowConfig(repo, harness) {
@@ -387,6 +398,7 @@ function buildBundle(argv) {
387
398
  out.push(`# flow bundle — ${branch}`)
388
399
  out.push('')
389
400
  out.push(`Base \`${base}\` · merge base \`${from.slice(0, 12)}\` · generated by \`flow bundle\`.`)
401
+ out.push(`Config read: ${configFiles(repo, flag('--harness'))}.`)
390
402
  out.push('Committed and uncommitted changes together. Nothing here is parsed or summarised.')
391
403
  out.push('')
392
404
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flow-workflows",
3
- "version": "0.65.0-rc.3",
3
+ "version": "0.65.0-rc.4",
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.3",
6
+ "version": "0.65.0-rc.4",
7
7
  "author": {
8
8
  "name": "Alberto Vioque",
9
9
  "email": "mashware@gmail.com"
@@ -88,7 +88,19 @@ to the main checkout, which `--git-common-dir` locates from anywhere. And **a qu
88
88
  quotes**, so the `- '*.lock'` the template itself documents became a pathspec matching a filename
89
89
  with quotes in it — `git.diff_exclude` excluded nothing for anyone who copied the example.
90
90
 
91
- None of the three could be seen from the repo, and none of them failed. That is the argument for
91
+ The third candidate then found the one that had been hiding behind them. A harness overlay —
92
+ `FLOW.claude.md` and its siblings, where a model id belongs so it never reaches another harness —
93
+ **was never read**. Not once, in two full runs, on two different models: both read the base file in
94
+ full and neither went looking for the overlay beside it, so the models it set were silently the
95
+ defaults and both artifacts reported the keys as *unset* — which is exactly what a repo that never
96
+ set them reports. The instruction to merge an overlay has always been there; what was missing was
97
+ anything that made a phase **look**. Every command, and every artifact they write, calls the
98
+ effective configuration "`FLOW.md`", and that is a real file, so reading it and stopping feels
99
+ finished. Step 0 now begins by listing `FLOW*.md` — one call, not optional — every printed value
100
+ carries the file it came from, and `bundle` states in its header which files the run read, so an
101
+ overlay that was never opened is a line in the pack instead of nothing at all.
102
+
103
+ None of the four could be seen from the repo, and none of them failed. That is the argument for
92
104
  driving a candidate through a real work rather than reading it: the run that found them is also the
93
105
  one whose review then read the diff from git and caught five blocking defects anyway, because the
94
106
  fallback is a real path and not an apology.