flow-workflows 0.67.0 → 0.69.0

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.
Files changed (38) hide show
  1. package/README.md +1 -0
  2. package/adapters/codex/CORE.md +65 -5
  3. package/adapters/codex/skills/flow-bug-ship/SKILL.md +3 -1
  4. package/adapters/codex/skills/flow-bug-validate/SKILL.md +2 -2
  5. package/adapters/codex/skills/flow-doctor/SKILL.md +11 -5
  6. package/adapters/codex/skills/flow-feat-ship/SKILL.md +3 -1
  7. package/adapters/codex/skills/flow-feat-validate/SKILL.md +2 -2
  8. package/adapters/codex/skills/flow-work-green/SKILL.md +3 -3
  9. package/adapters/codex/skills/flow-work-watch/SKILL.md +2 -2
  10. package/adapters/gemini/CORE.md +65 -5
  11. package/adapters/gemini/commands/flow/bug/ship.toml +3 -1
  12. package/adapters/gemini/commands/flow/bug/validate.toml +2 -2
  13. package/adapters/gemini/commands/flow/doctor.toml +11 -5
  14. package/adapters/gemini/commands/flow/feat/ship.toml +3 -1
  15. package/adapters/gemini/commands/flow/feat/validate.toml +2 -2
  16. package/adapters/gemini/commands/flow/work/green.toml +3 -3
  17. package/adapters/gemini/commands/flow/work/watch.toml +2 -2
  18. package/adapters/hermes/CORE.md +65 -5
  19. package/adapters/hermes/skills/flow-bug-ship/SKILL.md +3 -1
  20. package/adapters/hermes/skills/flow-bug-validate/SKILL.md +2 -2
  21. package/adapters/hermes/skills/flow-doctor/SKILL.md +11 -5
  22. package/adapters/hermes/skills/flow-feat-ship/SKILL.md +3 -1
  23. package/adapters/hermes/skills/flow-feat-validate/SKILL.md +2 -2
  24. package/adapters/hermes/skills/flow-work-green/SKILL.md +3 -3
  25. package/adapters/hermes/skills/flow-work-watch/SKILL.md +2 -2
  26. package/adapters/opencode/CORE.md +65 -5
  27. package/adapters/opencode/commands/flow-bug-ship.md +3 -1
  28. package/adapters/opencode/commands/flow-bug-validate.md +2 -2
  29. package/adapters/opencode/commands/flow-doctor.md +11 -5
  30. package/adapters/opencode/commands/flow-feat-ship.md +3 -1
  31. package/adapters/opencode/commands/flow-feat-validate.md +2 -2
  32. package/adapters/opencode/commands/flow-work-green.md +3 -3
  33. package/adapters/opencode/commands/flow-work-watch.md +2 -2
  34. package/bin/cli.mjs +15 -0
  35. package/package.json +1 -1
  36. package/plugins/flow/.claude-plugin/plugin.json +1 -1
  37. package/plugins/flow/CHANGELOG.md +58 -0
  38. package/plugins/flow/examples/FLOW.template.md +14 -6
@@ -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.67.0",
6
+ "version": "0.69.0",
7
7
  "author": {
8
8
  "name": "Alberto Vioque",
9
9
  "email": "mashware@gmail.com"
@@ -5,6 +5,64 @@ plugin and is what `/flow:news` reads to show you what changed since your previo
5
5
 
6
6
  The canonical, richest notes live in the [GitHub Releases](https://github.com/mashware/flow-workflows/releases).
7
7
 
8
+ ## v0.69.0 — Waiting on the pipeline was paid for at the main thread's price · 2026-09-21
9
+
10
+ **In short**
11
+ - **A wait is delegated now, not sat through.** A running pipeline, a deploy that has not landed and a suite measured in tens of minutes go to one supervisor subagent with an interval, a deadline and every terminal state; this thread ends its turn instead of polling.
12
+ - **What comes back is evidence, never a verdict** — failing job names, exit codes, the log tail, the run URL, the SHA it watched. Whether a red job is flaky, whether a threshold is close enough, whether the branch can merge is still decided on the main thread.
13
+ - **`models.supervisors`** names the model for it, falling back to `models.agents` and then to inheritance. An empty section behaves exactly as before, and the dispatch says in one line that the wait inherits this thread's model — an unattended wait is where an unpriced default runs longest.
14
+ - **Applied where the flow actually waits**: `/flow:work:green` §2.3 and its re-trigger, `/flow:work:watch` §1, both `validate` commands for a long suite, and both `ship` commands for the pipeline the push starts.
15
+ - **Delegating a wait is mechanics**, so it is on the never-ask list: `manual` still asks whatever the evidence turns out to call for, once it is back.
16
+
17
+ Every command that waited, waited on the thread holding the whole conversation. `green` offered to
18
+ poll a running pipeline every two or three minutes; `watch` polled for a deploy that had not landed
19
+ yet; `validate` ran the full suite in the background and stayed with it. None of that reads a diff
20
+ or weighs a finding — it reads `pending` — and each cycle resends the entire context to do it. A
21
+ forty-minute pipeline could cost more to watch than the diff cost to write, and the cost was
22
+ invisible because waiting looks like nothing happening.
23
+
24
+ The delegation is bounded on purpose. The brief names the exact run rather than "the CI", every
25
+ terminal state rather than the first red job, and a deadline after which the supervisor returns what
26
+ it has instead of waiting forever. It writes its evidence to a path before it replies, like every
27
+ other brief, so a report lost in transit is recoverable for the cost of one `ls`. And it counts
28
+ against `agents.budget_max` like any other subagent, relaunches included.
29
+
30
+ What it must never do is rule. Handing the judgement to whoever is cheapest to ask is how a pipeline
31
+ ends up declared green by a model that was hired to watch a clock — the machine version of the
32
+ green-washing `/flow:work:green` refuses in every autonomy mode. The supervisor reports; the triage,
33
+ the merge verdict and the decision to push stay exactly where they were.
34
+
35
+ Not every wait is worth a brief either: a suite that finishes in ninety seconds costs more to
36
+ delegate than to run, and anything the phase must react to mid-wait was never a wait — it is the
37
+ work.
38
+
39
+ ## v0.68.0 — The block written to be pasted was the configuration · 2026-09-21
40
+
41
+ **In short**
42
+ - **A fenced block in a FLOW file is an example again.** `- key:` lines inside triple backticks (or tildes) are skipped by `bin/cli.mjs` and by flow-core §0, so the two resolve the same configuration. Until now they were read as the config they illustrate.
43
+ - **This was found in a live repo, not imagined.** `agents.exec_cmd` was set from the fenced example of a file whose prose argued, at length, that it was deliberately unset — so every review round took the one-shot path that prose warned against, and nothing anywhere said so.
44
+ - **`/flow:doctor` reports keys found inside a fence**, names the file and says what to do: move the line out to make it real, leave it to keep it an illustration.
45
+ - **`script/tests/flow-config.sh`** pins it — fenced values never leak, `~~~` and four-backtick blocks are fences, a closed fence does not swallow the keys after it. Every case fails against the old reader.
46
+ - **Two tests now actually run in CI**: the new one and `tier.sh`, which existed and was wired into nothing.
47
+
48
+ A `FLOW.md` is prose with keys in it, and that is the point of it: the keys are the contract, the
49
+ prose is why the value is what it is. What decides which is which is shape alone — a `- key:` line
50
+ under a `## section` — and shape is exactly what a documented example shares with the thing it
51
+ documents. `docs/CONFIGURATION.md` teaches keys in fenced blocks. The template's own comments do.
52
+ So does every real `FLOW.md` that explains an option before enabling it.
53
+
54
+ The repo where this surfaced had a Claude overlay with three paragraphs on why `agents.exec_cmd`
55
+ stays unset — cost against the panel that had been finding the defects — followed by a block
56
+ introduced with *"to try it once, add both blocks below and take them out again afterwards"*. The
57
+ block was live from the moment it was written: `exec_cmd` set, `quality.reviewers` masked with four
58
+ role descriptions instead of the four agents the base names. The file and its configuration said
59
+ opposite things, and both looked right.
60
+
61
+ Nothing warns about that class of mistake, because the file is valid and the round it produces is
62
+ green. So the reader changes: fenced regions are skipped, by the CLI and by the command pages that
63
+ read the file themselves, and `doctor` reports what it found in one — a reader who pasted a block
64
+ to enable it needs to be told why it does nothing, which is the mirror of the same problem.
65
+
8
66
  ## v0.67.0 — Every layer of the review was argued from judgement, and none was ever checked · 2026-09-21
9
67
 
10
68
  **In short**
@@ -239,11 +239,19 @@ subagent ignores the value and the step says so once, in one line.
239
239
  - `workers:` # the parallel fan-out rounds ONLY: approach panel (design §1.5.3), hypothesis sweep
240
240
  # (investigate §3.A), finding skeptics (review §6 / §5), the deferred-work skeptic
241
241
  # (ship). Empty = falls back to `agents`, then to what the command runs on.
242
-
243
- **Two keys, not one per kind of step.** There used to be five — `study`, `code`, `test`, `review` —
244
- named after phases. They promised a granularity no harness delivers: the main agent cannot switch
245
- its own model, so the phases those keys named ran on whatever you launched, and the value only ever
246
- reached the subagents. These two name what can actually be set.
242
+ - `supervisors:` # the ONE subagent a command hands a long wait to instead of polling it from the main thread
243
+ # (flow-core §6.5): a running pipeline (green §2.3, §6), a deploy that has not landed yet
244
+ # (watch §1), a suite measured in tens of minutes (validate §2). It watches, times out and
245
+ # brings back status plus evidence — job names, exit codes, log tail, run URL — and never
246
+ # rules on it: triage and the merge verdict stay on the main thread whatever this says.
247
+ # Empty = falls back to `agents`, then to what the command runs on, and the dispatch says so
248
+ # in one line — an unattended wait is the one place an unpriced default runs longest.
249
+
250
+ **Three keys, one per kind of subagent — not one per kind of step.** There used to be five —
251
+ `study`, `code`, `test`, `review` — named after phases. They promised a granularity no harness
252
+ delivers: the main agent cannot switch its own model, so the phases those keys named ran on whatever
253
+ you launched, and the value only ever reached the subagents. These three name what can actually be
254
+ set: the improvised agent, the fan-out round, and the wait.
247
255
 
248
256
  Two limits, stated here because they bound what these keys can promise:
249
257
 
@@ -255,7 +263,7 @@ question in `guided`/`auto` and never a gate.
255
263
 
256
264
  **A named agent keeps its own model.** If `agents.<role>` names a real agent, that agent's own
257
265
  definition wins — you configured it, and it is not overridden from two places. `/flow:doctor` prints
258
- both keys resolved, with who decided each.
266
+ the three keys resolved, with who decided each.
259
267
 
260
268
  ## data
261
269
  How this repo lets you look at a query's **plan** instead of arguing about it. Read by