flow-workflows 0.65.0-rc.6 → 0.65.0-rc.7

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.6`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.65.0-rc.7`.** 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
@@ -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.6`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.65.0-rc.7`.** 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
@@ -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.6`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.65.0-rc.7`.** 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
@@ -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.6`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.65.0-rc.7`.** 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
package/bin/cli.mjs CHANGED
@@ -263,14 +263,16 @@ function parseFlow(text) {
263
263
  // resolve every key to its fallback and say nothing. Prefer the root we are in (a repo that
264
264
  // commits its config gets it in every worktree, and a worktree may legitimately differ), and
265
265
  // fall back to the main checkout, which `--git-common-dir` points into from anywhere.
266
- function configRoot(repo) {
267
- if (existsSync(join(repo, 'FLOW.md'))) return repo
266
+ function rootHolding(repo, probe) {
267
+ if (existsSync(join(repo, probe))) return repo
268
268
  const common = git(['rev-parse', '--path-format=absolute', '--git-common-dir'], repo).trim()
269
269
  if (!common) return repo
270
270
  const main = dirname(common)
271
- return main !== repo && existsSync(join(main, 'FLOW.md')) ? main : repo
271
+ return main !== repo && existsSync(join(main, probe)) ? main : repo
272
272
  }
273
273
 
274
+ const configRoot = (repo) => rootHolding(repo, 'FLOW.md')
275
+
274
276
  // The overlay names flow-core §0 recognises. A `--harness` outside this set reads no
275
277
  // overlay and looks exactly like a repo that has none, so it stops the run instead: a typo
276
278
  // here is worth one error message and never worth a review round nobody can trust.
@@ -322,8 +324,12 @@ function flowConfig(repo, harness) {
322
324
  return base
323
325
  }
324
326
 
327
+ // `.claude/work` is git-ignored like the FLOW files, so a worktree does not carry it either — and
328
+ // the two things that read it fail silently when it is missing: the pack drops its `## Work`
329
+ // section, which it advertises and no reviewer knows to miss, and `--record` writes the figure
330
+ // nowhere and exits 0. Same resolution as the config: here first, the main checkout otherwise.
325
331
  function workFolder(repo, branch) {
326
- const root = join(repo, '.claude', 'work')
332
+ const root = join(rootHolding(repo, join('.claude', 'work')), '.claude', 'work')
327
333
  if (!existsSync(root)) return null
328
334
  for (const entry of readdirSync(root, { withFileTypes: true })) {
329
335
  if (!entry.isDirectory() || entry.name === '_archive') continue
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flow-workflows",
3
- "version": "0.65.0-rc.6",
3
+ "version": "0.65.0-rc.7",
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.6",
6
+ "version": "0.65.0-rc.7",
7
7
  "author": {
8
8
  "name": "Alberto Vioque",
9
9
  "email": "mashware@gmail.com"
@@ -123,7 +123,21 @@ and re-opening its file would pay for the same words twice; the folder is where
123
123
  call separates a round that was lost from a round that was never done, and only the second is worth
124
124
  another agent.
125
125
 
126
- None of the six could be seen from the repo, and none of them failed. That is the argument for
126
+ The first real run of the CLI panel — the half of this release nothing had exercised — found the
127
+ last one, and it is the worktree bug again in the place nobody looked. **`.claude/work` is
128
+ git-ignored exactly like the FLOW files**, so a phase running in a worktree does not have it
129
+ either: `bundle` silently dropped the `## Work` section it advertises, sending every reviewer a
130
+ pack with no handoff and no `meta.json`, and `review --record` wrote the figure nowhere and exited
131
+ 0 — which is indistinguishable from a harness that reported no cost. The work folder now resolves
132
+ the way the config does: here first, the main checkout otherwise.
133
+
134
+ That same run is the argument for the whole release. Four one-shot reviewers, four and a half
135
+ minutes, **$4.24 measured** over a 1 360-line diff, and they found a major regression the agentic
136
+ panel had missed on the same branch: `Option<&RawValue>` collapses a JSON `null` into "key absent",
137
+ so a reply that carried an explicit null lost the distinction the code around it documents. Not
138
+ found by reading the plugin — found by running it.
139
+
140
+ None of the seven could be seen from the repo, and none of them failed. That is the argument for
127
141
  driving a candidate through a real work rather than reading it: the run that found them is also the
128
142
  one whose review then read the diff from git and caught five blocking defects anyway, because the
129
143
  fallback is a real path and not an apology.