flow-workflows 0.69.0 → 0.71.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.
- package/README.md +4 -2
- package/adapters/codex/CORE.md +84 -12
- package/adapters/codex/skills/flow-bug-fix/SKILL.md +33 -3
- package/adapters/codex/skills/flow-bug-investigate/SKILL.md +1 -1
- package/adapters/codex/skills/flow-bug-postmortem/SKILL.md +1 -1
- package/adapters/codex/skills/flow-bug-review/SKILL.md +1 -1
- package/adapters/codex/skills/flow-bug-ship/SKILL.md +3 -3
- package/adapters/codex/skills/flow-bug-start/SKILL.md +2 -2
- package/adapters/codex/skills/flow-bug-validate/SKILL.md +1 -1
- package/adapters/codex/skills/flow-doctor/SKILL.md +1 -0
- package/adapters/codex/skills/flow-feat-build/SKILL.md +38 -6
- package/adapters/codex/skills/flow-feat-design/SKILL.md +1 -1
- package/adapters/codex/skills/flow-feat-plan/SKILL.md +2 -2
- package/adapters/codex/skills/flow-feat-review/SKILL.md +1 -1
- package/adapters/codex/skills/flow-feat-ship/SKILL.md +3 -3
- package/adapters/codex/skills/flow-feat-start/SKILL.md +4 -4
- package/adapters/codex/skills/flow-feat-validate/SKILL.md +1 -1
- package/adapters/codex/skills/flow-next/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-README/SKILL.md +9 -7
- package/adapters/codex/skills/flow-work-abandon/SKILL.md +2 -2
- package/adapters/codex/skills/flow-work-clean/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-daily/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-green/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-query/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-respond/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-resume/SKILL.md +3 -3
- package/adapters/codex/skills/flow-work-status/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-try/SKILL.md +1 -1
- package/adapters/codex/skills/flow-work-watch/SKILL.md +3 -3
- package/adapters/gemini/CORE.md +84 -12
- package/adapters/gemini/commands/flow/bug/fix.toml +33 -3
- package/adapters/gemini/commands/flow/bug/investigate.toml +1 -1
- package/adapters/gemini/commands/flow/bug/postmortem.toml +1 -1
- package/adapters/gemini/commands/flow/bug/review.toml +1 -1
- package/adapters/gemini/commands/flow/bug/ship.toml +3 -3
- package/adapters/gemini/commands/flow/bug/start.toml +2 -2
- package/adapters/gemini/commands/flow/bug/validate.toml +1 -1
- package/adapters/gemini/commands/flow/doctor.toml +1 -0
- package/adapters/gemini/commands/flow/feat/build.toml +38 -6
- package/adapters/gemini/commands/flow/feat/design.toml +1 -1
- package/adapters/gemini/commands/flow/feat/plan.toml +2 -2
- package/adapters/gemini/commands/flow/feat/review.toml +1 -1
- package/adapters/gemini/commands/flow/feat/ship.toml +3 -3
- package/adapters/gemini/commands/flow/feat/start.toml +4 -4
- package/adapters/gemini/commands/flow/feat/validate.toml +1 -1
- package/adapters/gemini/commands/flow/next.toml +1 -1
- package/adapters/gemini/commands/flow/work/README.toml +9 -7
- package/adapters/gemini/commands/flow/work/abandon.toml +2 -2
- package/adapters/gemini/commands/flow/work/clean.toml +1 -1
- package/adapters/gemini/commands/flow/work/daily.toml +1 -1
- package/adapters/gemini/commands/flow/work/green.toml +1 -1
- package/adapters/gemini/commands/flow/work/query.toml +1 -1
- package/adapters/gemini/commands/flow/work/respond.toml +1 -1
- package/adapters/gemini/commands/flow/work/resume.toml +3 -3
- package/adapters/gemini/commands/flow/work/status.toml +1 -1
- package/adapters/gemini/commands/flow/work/try.toml +1 -1
- package/adapters/gemini/commands/flow/work/watch.toml +3 -3
- package/adapters/hermes/CORE.md +84 -12
- package/adapters/hermes/skills/flow-bug-fix/SKILL.md +33 -3
- package/adapters/hermes/skills/flow-bug-investigate/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-bug-postmortem/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-bug-review/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-bug-ship/SKILL.md +3 -3
- package/adapters/hermes/skills/flow-bug-start/SKILL.md +2 -2
- package/adapters/hermes/skills/flow-bug-validate/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-doctor/SKILL.md +1 -0
- package/adapters/hermes/skills/flow-feat-build/SKILL.md +38 -6
- package/adapters/hermes/skills/flow-feat-design/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-feat-plan/SKILL.md +2 -2
- package/adapters/hermes/skills/flow-feat-review/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-feat-ship/SKILL.md +3 -3
- package/adapters/hermes/skills/flow-feat-start/SKILL.md +4 -4
- package/adapters/hermes/skills/flow-feat-validate/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-next/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-README/SKILL.md +9 -7
- package/adapters/hermes/skills/flow-work-abandon/SKILL.md +2 -2
- package/adapters/hermes/skills/flow-work-clean/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-daily/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-green/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-query/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-respond/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-resume/SKILL.md +3 -3
- package/adapters/hermes/skills/flow-work-status/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-try/SKILL.md +1 -1
- package/adapters/hermes/skills/flow-work-watch/SKILL.md +3 -3
- package/adapters/opencode/CORE.md +84 -12
- package/adapters/opencode/commands/flow-bug-fix.md +33 -3
- package/adapters/opencode/commands/flow-bug-investigate.md +1 -1
- package/adapters/opencode/commands/flow-bug-postmortem.md +1 -1
- package/adapters/opencode/commands/flow-bug-review.md +1 -1
- package/adapters/opencode/commands/flow-bug-ship.md +3 -3
- package/adapters/opencode/commands/flow-bug-start.md +2 -2
- package/adapters/opencode/commands/flow-bug-validate.md +1 -1
- package/adapters/opencode/commands/flow-doctor.md +1 -0
- package/adapters/opencode/commands/flow-feat-build.md +38 -6
- package/adapters/opencode/commands/flow-feat-design.md +1 -1
- package/adapters/opencode/commands/flow-feat-plan.md +2 -2
- package/adapters/opencode/commands/flow-feat-review.md +1 -1
- package/adapters/opencode/commands/flow-feat-ship.md +3 -3
- package/adapters/opencode/commands/flow-feat-start.md +4 -4
- package/adapters/opencode/commands/flow-feat-validate.md +1 -1
- package/adapters/opencode/commands/flow-next.md +1 -1
- package/adapters/opencode/commands/flow-work-README.md +9 -7
- package/adapters/opencode/commands/flow-work-abandon.md +2 -2
- package/adapters/opencode/commands/flow-work-clean.md +1 -1
- package/adapters/opencode/commands/flow-work-daily.md +1 -1
- package/adapters/opencode/commands/flow-work-green.md +1 -1
- package/adapters/opencode/commands/flow-work-query.md +1 -1
- package/adapters/opencode/commands/flow-work-respond.md +1 -1
- package/adapters/opencode/commands/flow-work-resume.md +3 -3
- package/adapters/opencode/commands/flow-work-status.md +1 -1
- package/adapters/opencode/commands/flow-work-try.md +1 -1
- package/adapters/opencode/commands/flow-work-watch.md +3 -3
- package/package.json +1 -1
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow/CHANGELOG.md +60 -0
|
@@ -35,9 +35,9 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
|
|
|
35
35
|
## Principles
|
|
36
36
|
|
|
37
37
|
- **Shared rules live in the `flow-core` skill** (`skills/flow-core/SKILL.md`): configuration merge,
|
|
38
|
-
`models`, autonomy and hard gates, never-a-question list, stop header,
|
|
38
|
+
`models`, autonomy and hard gates, never-a-question list, stop header, the live panel,
|
|
39
39
|
`00-summary.md`. Every command loads it once per session.
|
|
40
|
-
- **One folder per ticket**: `.claude/work/{TICKET}/` holds `meta.json`, `00-summary.md`,
|
|
40
|
+
- **One folder per ticket**: `.claude/work/{TICKET}/` holds `meta.json`, `00-summary.md`, the numbered markdown artifacts and — where the terminal offers no panel tools — `panel.json`.
|
|
41
41
|
- **Numbered artifacts**: each phase writes a `NN-phase.md` that the next step reads.
|
|
42
42
|
- **`evidence/`**: what `/flow-*-validate` actually observed when it drove the running app — a screenshot, a response body, a log excerpt, one file per criterion, with a **before** where the change alters something already visible. `/flow-*-ship` attaches it to the MR/PR description. `quality.evidence: off` disables both halves.
|
|
43
43
|
- **`meta.json` is the source of truth** for state (current phase, size, branch). Without it, commands refuse to continue.
|
|
@@ -62,7 +62,7 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
|
|
|
62
62
|
- **Commits follow the autonomy mode** (`/flow-feat-build` §2.2, `/flow-bug-fix` §2.1): changes **always reported before anything is recorded**. `manual`: **no `git commit` on its own**. `guided`: asks **once**. `auto`: WIP commit per step, cut by step (§2.3) — **`autonomy.mode: auto` plus typing the command is the explicit authorization**. WIP commits on the work branch **only**; push and MR/PR creation stay hard gates in every mode.
|
|
63
63
|
- **A named next command is not a handoff**: each `## Close` carries the **autonomy handoff** — `manual` proposes the next command with one `AskUserQuestion`; `guided`/`auto` **chain in the same turn**. Never chained: `ship` (hard gate in every mode) and anything downstream of a red gate.
|
|
64
64
|
- **Every stop opens with where you are** (flow-core §3): stop header, then ≤ ~10 product-altitude lines. Own process → the artifact; subagent notifications never earn a turn.
|
|
65
|
-
- **The stop is also
|
|
65
|
+
- **The stop is also published to the live panel** ([document below](#the-panel-document), flow-core §4): through the terminal's `panel_set` / `panel_patch` tools where they exist, and `.claude/work/<work>/panel.json` **overwritten whole, never patched** where they do not. Published **before** a long stretch, never after, with an honest `updated_at`.
|
|
66
66
|
- **What is never a question is as binding as what always is**: hard gates stop in **every** mode; in `guided`/`auto` flow mechanics, WIP commits, the train's next MR/PR, size confirmation and anything already decided are never asked (flow-core §2). Only new evidence reopens a decision.
|
|
67
67
|
- **A correction is a convention, and a convention is written down**: when the user overrides something a phase proposed and the same correction would apply to an unrelated ticket in this repo, it becomes a `meta.json.conventions_candidates[]` row and a `## Conventions learned` line in the phase artifact, asking nothing (flow-core §8). `review`'s idiom audit reads them in the same work; `ship` offers them to `FLOW.md` once, at Close, in every mode. What is about *this* ticket stays in the artifact and goes no further.
|
|
68
68
|
- **Work you decide not to do is recorded, not narrated**: every "idea for a separate ticket", out-of-scope piece, unmitigated risk, unchecked edge case and prevention action becomes a `meta.json.followups[]` entry (flow-core §7) alongside its artifact section. Written without asking, and only when it clears the bar of §7 (a named subject, a path someone has actually seen, waiting costing more than doing it). Triaged **once** at `ship`'s Close, behind a skeptic: 3 or more candidates go to an agent whose job is to refute that each deserves a ticket, and only the strongest `tracker.followup_ask_max` (empty → **2**) become questions (**Do it** / **Not worth it** / **Later**). The rest are logged. Published in the MR/PR description while still open, and surfaced by `status`/`daily`/`next` — from `_archive/` too — until decided. Creating the tracker issue for an accepted one is outward-facing: **asks in every mode**. Two kinds are not deferred work: a **`decision`** the diff depends on is asked when it surfaces (in every mode) and only a deferred one is recorded; a **`tooling`** gap is recorded with no question at all and never goes to the tracker.
|
|
@@ -155,9 +155,9 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
|
|
|
155
155
|
|
|
156
156
|
**`00-summary.md`** (flow-core §5): **≤ 15 lines, overwritten whole at every `## Close`**, read first by every phase (with `meta.json`) before any full artifact. Contents: what the work is (one line), size and current MR/PR, standing decisions (one line each), contracts declared or received (names and where the literal shape lives), what is pending, what the next phase must open in full. Missing (older work) → read the artifacts, write it at Close.
|
|
157
157
|
|
|
158
|
-
##
|
|
158
|
+
## The panel document
|
|
159
159
|
|
|
160
|
-
`meta.json` is the *state machine*;
|
|
160
|
+
`meta.json` is the *state machine*; the panel is the *view* a reader outside the chat watches. Optional: a work that never publishes it still resolves from `meta.json` alone. Writer rules (order, when, ceiling) and the two transports — the terminal's `panel_set` / `panel_patch` / `panel_get` tools, or `.claude/work/<work>/panel.json` — are flow-core §4. The document below is the same either way.
|
|
161
161
|
|
|
162
162
|
```json
|
|
163
163
|
{
|
|
@@ -188,11 +188,13 @@ This system **orchestrates** the project's existing sub-agents and skills (it do
|
|
|
188
188
|
- **`style`** — `normal` · `dim` · `title` · `accent` · `ok` · `warn` · `error`; semantic names, the reader owns the palette.
|
|
189
189
|
- **`header`** — `true` (default): the reader draws ticket, type, phase and age, which never belong in `lines`. `false` hands every line to the writer.
|
|
190
190
|
- **`phase`** — the phase running **right now** (`meta.json.phase` advances only at close); the reader prefers it.
|
|
191
|
-
- **`updated_at`** — local ISO-8601 with offset from the real clock, never carried over; lets the reader flag a stale snapshot.
|
|
191
|
+
- **`updated_at`** — local ISO-8601 with offset from the real clock, never carried over; lets the reader flag a stale snapshot. Over the tools the app stamps each delivery itself.
|
|
192
|
+
- **`attention`** *(tools only)* — `wait` · `block` · `done`, beside `phase`, absent while simply working: the pane's claim on the user's attention, which the app never deduces from a line's `mark`. A tab's card shows the strongest claim among its panes, so an uncleared `wait` flags that tab for ever.
|
|
193
|
+
- **`key`** *(tools only)* — a unique, never-painted name on any line a later `panel_patch` may replace or delete (`title`, `mr-1`, `now`, `next`, `decision`, `block-1`).
|
|
192
194
|
|
|
193
195
|
**No headings over the train.** A shipped MR/PR is *open, waiting to merge*; `mark` says it per entry — `wait` shipped, `current` being worked, `done` only merged.
|
|
194
196
|
|
|
195
|
-
**Who
|
|
197
|
+
**Who publishes it.** The 18 phase commands (flow-core §4); `/flow-feat-ship` and `/flow-bug-ship` the instant an MR/PR URL exists; `/flow-feat-plan` when the train is populated — a new train is a new shape, so a full republish; `/flow-work-resume` (§5), after reading what is on screen; `/flow-work-watch` every cycle; `/flow-work-abandon` with a terminal state. Read-only `status`, `daily`, `config`, `doctor`, `news` never publish; `/flow-work-clean` archives the folder with any panel file inside.
|
|
196
198
|
|
|
197
199
|
## Shortcuts by size
|
|
198
200
|
|
|
@@ -16,7 +16,7 @@ description: Close a work without shipping (discarded feature, non-issue, etc.)
|
|
|
16
16
|
> - `/model <value>` → opencode's model picker (`/models`).
|
|
17
17
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared in `opencode.json` (see this adapter's `opencode.json` for the domain-memory example).
|
|
18
18
|
|
|
19
|
-
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
19
|
+
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
20
20
|
|
|
21
21
|
Clean closure for works that will not reach the base branch: a feature discarded after `design`, a bug that is not one (expected behavior, external problem, user misconfiguration), a work absorbed by another ticket.
|
|
22
22
|
|
|
@@ -89,7 +89,7 @@ Ask the user what to do with the branch — do not decide alone:
|
|
|
89
89
|
- Update `meta.json`: `phase = "abandoned"`; `phases_done` not touched (it reflects what was actually done); `notes` += abandonment reason; `updated_at` updated.
|
|
90
90
|
- Overwrite `00-summary.md` whole (≤15 lines, flow-core §5).
|
|
91
91
|
- **Tracker: move to won't-do** (never "done" — this work did not ship). Only if `tracker.tool` is not `none`/empty, `tracker.abandon_cmd` is set, and `meta.json.ticket` is a **real tracker id** (skip for local-only slugs). Run `tracker.abandon_cmd` substituting `{TICKET}` = `meta.json.ticket`. Same contract as `/flow-feat-start §6.5`: **best-effort, idempotent, gated** (ask once in `autonomy.mode: manual`; automatic in `guided`/`auto`); failure or already-in-state ticket → warn and continue, never block. `tracker.abandon_cmd` empty → do nothing (the user closes the ticket by hand if they want).
|
|
92
|
-
-
|
|
92
|
+
- Panel published for this work (flow-core §4) → publish a terminal state before archiving: the title, one `block` line saying the work was abandoned and why, no `Decision` line, and `attention` cleared where the panel tools carry it — nothing is waiting on anyone any more.
|
|
93
93
|
- Move the folder to `.claude/work/_archive/` **keeping its directory name** (`_archive/<work-dir>/`, the folder located in §1 — e.g. `<TICKET>-<slug>`) so `/flow-work-status` no longer lists it.
|
|
94
94
|
- Report to the user: ticket abandoned, reason, what was done with the branch.
|
|
95
95
|
|
|
@@ -16,7 +16,7 @@ description: Sweep what finished work left behind — merged worktrees, dead bra
|
|
|
16
16
|
> - `/model <value>` → opencode's model picker (`/models`).
|
|
17
17
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared in `opencode.json` (see this adapter's `opencode.json` for the domain-memory example).
|
|
18
18
|
|
|
19
|
-
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
19
|
+
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
20
20
|
|
|
21
21
|
The forge (`git.cli`) is **best-effort**: CLI missing, unauthenticated, or over ~5s → fall back to the local evidence in §4 and say so in one line; never block.
|
|
22
22
|
|
|
@@ -16,7 +16,7 @@ description: Your work assistant — a Scrum-style daily standup across all your
|
|
|
16
16
|
> - `/model <value>` → opencode's model picker (`/models`).
|
|
17
17
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared in `opencode.json` (see this adapter's `opencode.json` for the domain-memory example).
|
|
18
18
|
|
|
19
|
-
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
19
|
+
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
20
20
|
|
|
21
21
|
External sources (tracker, forge, `knowledge`) are all **best-effort**: a CLI missing/unauthenticated, an MCP failing, or a call over ~3s → continue without that source and note it in a single line; **never block**.
|
|
22
22
|
|
|
@@ -30,7 +30,7 @@ Usage: `/flow-work-green [mr-iid-or-url]` — optional; default is the MR/PR of
|
|
|
30
30
|
|
|
31
31
|
Extract from `git`: `host`, `cli` (empty → the default for that host), `default_base`. The term MR/PR follows `host`. From `tracker`: `tool`, `prefix`. From `quality`: `test`, `test_one`, `static_analysis`, `style_fix` (local reproduce/verify commands, §5; empty → auto-discover from Makefile / npm / composer scripts), `review_skill` (§5, non-trivial fixes). `agents`: expert sub-agents to delegate fixes to. `knowledge.search` set → `knowledge.search` in §3.
|
|
32
32
|
|
|
33
|
-
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
33
|
+
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`; the wait it delegates takes `models.supervisors`.**
|
|
34
34
|
|
|
35
35
|
**Autonomy.** Modes as in flow-core §2; `guided`/`auto` record their choices in `09-ci.md` (e.g. a pure formatter auto-fix). **Hard gates — ALWAYS stop and ask, in every mode, no exceptions:**
|
|
36
36
|
1. **Any push** (§6).
|
|
@@ -16,7 +16,7 @@ description: Put a data-access query on trial — schema, indexes, execution pla
|
|
|
16
16
|
> - `/model <value>` → opencode's model picker (`/models`).
|
|
17
17
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared in `opencode.json` (see this adapter's `opencode.json` for the domain-memory example).
|
|
18
18
|
|
|
19
|
-
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
19
|
+
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: the subagents it launches take `models.agents`; its parallel rounds take `models.workers`.**
|
|
20
20
|
|
|
21
21
|
**A query is approved by its plan, not by prose.** Fact sheet → challenger attacks → each point settled with a **plan or a number**. **Cross-cutting** (feat or bug), **repeatable**, does **not** advance `meta.json.phase`; runs with or without a work folder.
|
|
22
22
|
|
|
@@ -26,7 +26,7 @@ Cross-cutting (`feat` or `bug` MR/PR alike), repeatable (one invocation per revi
|
|
|
26
26
|
|
|
27
27
|
Extract from `git`: `host`, `cli` (empty → the default for that host), `assignee`. The term MR/PR follows `host`. From `tracker`: `tool` and `prefix`. From `quality`: `review_skill` (§6, non-trivial rounds). If `knowledge.search` is set, `knowledge.search` runs in §3.
|
|
28
28
|
|
|
29
|
-
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
29
|
+
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: this command runs with the model it was launched with (no `models` key).**
|
|
30
30
|
|
|
31
31
|
**Autonomy.** Modes as in flow-core §2 (`autonomy.mode`: `manual` | `guided` | `auto`; empty = `manual`); `guided`/`auto` record their choices in `08-feedback.md`. **Hard gates — ALWAYS stop and ask, in every mode, no exceptions:**
|
|
32
32
|
1. **Posting any comment/reply** to the MR/PR (§7).
|
|
@@ -16,7 +16,7 @@ description: Resume the work associated with the current branch and suggest the
|
|
|
16
16
|
> - `/model <value>` → opencode's model picker (`/models`).
|
|
17
17
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared in `opencode.json` (see this adapter's `opencode.json` for the domain-memory example).
|
|
18
18
|
|
|
19
|
-
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
19
|
+
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
20
20
|
|
|
21
21
|
Use when returning to a work after a break (next morning, another session).
|
|
22
22
|
|
|
@@ -90,7 +90,7 @@ With what is new (there is already work on disk):
|
|
|
90
90
|
|
|
91
91
|
## 5. Rebuild the live panel
|
|
92
92
|
|
|
93
|
-
After a break
|
|
93
|
+
After a break the panel is most likely stale, and a resumed session is exactly where flow-core §4 asks for `panel_get` **before** publishing: read what is on screen, then publish the whole document from the state just rebuilt (`meta.json`, git, the ticket) — `panel_set` where the terminal offers the panel tools, `.claude/work/<work>/panel.json` overwritten whole where it does not:
|
|
94
94
|
|
|
95
95
|
```json
|
|
96
96
|
{
|
|
@@ -118,4 +118,4 @@ After a break `.claude/work/<work>/panel.json` is most likely stale. Overwrite i
|
|
|
118
118
|
- `Decision` marked `wait` is always set after a resume — nothing is running, the next move is the user's.
|
|
119
119
|
- `block` lines for the blockers §4 surfaced (`contract_handoff` `pending` in a sibling repo, a red pipeline, an unmerged dependency).
|
|
120
120
|
- Train: one entry per `meta.json.mrs[]`, not-started collapsed into one `#a–#z` line; omit without `mrs`.
|
|
121
|
-
- `updated_at` from `date -Iseconds
|
|
121
|
+
- `updated_at` from `date -Iseconds` when the panel goes to the file; every fact from `meta.json` and the artifacts; language of the work's artifacts.
|
|
@@ -16,7 +16,7 @@ description: Summary of all open works in .claude/work/
|
|
|
16
16
|
> - `/model <value>` → opencode's model picker (`/models`).
|
|
17
17
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared in `opencode.json` (see this adapter's `opencode.json` for the domain-memory example).
|
|
18
18
|
|
|
19
|
-
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
19
|
+
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
20
20
|
|
|
21
21
|
Overview of works in progress; detects divergences between artifacts and actual git state.
|
|
22
22
|
|
|
@@ -16,7 +16,7 @@ description: Point the main checkout at a branch to test it (then return), re-sy
|
|
|
16
16
|
> - `/model <value>` → opencode's model picker (`/models`).
|
|
17
17
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared in `opencode.json` (see this adapter's `opencode.json` for the domain-memory example).
|
|
18
18
|
|
|
19
|
-
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads,
|
|
19
|
+
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, autonomy, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session.
|
|
20
20
|
|
|
21
21
|
Temporarily point the **main checkout** at another branch to test it against this checkout's live environment (running stack, DB, containers), then return — a generic `make wt-try`/`wt-back` pair. The git switch is built in; the project-specific re-sync (e.g. migrations) comes from `git.worktree_resync` in `FLOW.md`. Operates **in place**; never creates or touches worktrees.
|
|
22
22
|
|
|
@@ -16,7 +16,7 @@ description: Monitor the observability platform after a deploy and alert on erro
|
|
|
16
16
|
> - `/model <value>` → opencode's model picker (`/models`).
|
|
17
17
|
> - `knowledge.*` roles → whatever tools `FLOW.md` names there; an MCP tool keeps its name, its server is declared in `opencode.json` (see this adapter's `opencode.json` for the domain-memory example).
|
|
18
18
|
|
|
19
|
-
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads,
|
|
19
|
+
Read `~/.claude/flow/CORE.opencode.md` first (shared rules: `FLOW.md` step 0, models, autonomy modes and hard gates, how a stop reads, the live panel, `00-summary.md`) — skip if you already read it in this session. **Models: this command runs with the model it was launched with; the wait it delegates takes `models.supervisors`.**
|
|
20
20
|
|
|
21
21
|
**Autopiloted post-deploy monitoring**: signals **scoped to the change** over a window (default 30 min), against a baseline; alert on errors or performance regressions from the deploy.
|
|
22
22
|
|
|
@@ -127,7 +127,7 @@ Over `[last cycle, now]`, scoped to the surface. **Default thresholds** (tunable
|
|
|
127
127
|
|
|
128
128
|
After each cycle: update `monitor.md` (accumulated state — no repeated alerts, feeds the final summary) and **reschedule with `ScheduleWakeup`** (~270-300s, or the chosen interval) passing the same `/flow-work-watch {PREFIX}XXXXX` until `T_end`. Platform fails or slow → retry next cycle, never break.
|
|
129
129
|
|
|
130
|
-
**Refresh the live panel every cycle** (only with a `<work-dir>` from §1)
|
|
130
|
+
**Refresh the live panel every cycle** (only with a `<work-dir>` from §1), by the transport flow-core §4 selects — the panel tools where the terminal has them, `.claude/work/<work>/panel.json` overwritten **whole** where it does not:
|
|
131
131
|
|
|
132
132
|
```json
|
|
133
133
|
{
|
|
@@ -168,7 +168,7 @@ Write the summary to `<work-dir>/monitor.md` (§1) and present it:
|
|
|
168
168
|
- **Evidence strength**: low traffic (§4) → say it ("green, but the flow barely executed during the window: weak evidence"). Never sell a zero-traffic green as a guarantee.
|
|
169
169
|
- **Honest limits**: no slow leaks, no regressions needing input not exercised in the window. A first-hour safety net.
|
|
170
170
|
|
|
171
|
-
Final verdict to
|
|
171
|
+
Final verdict to the panel too — `mark: "info"` plus `style: ok|warn|error` for 🟢/🟡/🔴 — and a `Now` line reading `nothing — the watch window is over`. On 🔴, a `Decision` line marked `wait` pointing at `/flow-bug-start`.
|
|
172
172
|
|
|
173
173
|
`knowledge.stage` is set → `knowledge.stage` relevant findings (measured baselines, low-traffic signals, error patterns) for this branch's staging.
|
|
174
174
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flow-workflows",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.71.0",
|
|
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.
|
|
6
|
+
"version": "0.71.0",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Alberto Vioque",
|
|
9
9
|
"email": "mashware@gmail.com"
|
|
@@ -5,6 +5,66 @@ 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.71.0 — The panel was a file because nothing better was listening · 2026-09-22
|
|
9
|
+
|
|
10
|
+
**In short**
|
|
11
|
+
- **The live panel is published to the terminal now, not written to disk**, wherever the terminal exposes `panel_set` / `panel_patch` / `panel_get`: the first publication claims the pane for the session, and every change after it is a patch carrying the one line that moved.
|
|
12
|
+
- **Nothing changes for anyone else.** The document is identical, so a harness without those tools keeps writing `.claude/work/<work>/panel.json`, overwritten whole with an honest `updated_at`, exactly as before.
|
|
13
|
+
- **`attention` says what the pane wants from you** — `wait`, `block`, `done`, or absent while simply working. The app never deduces it from a line, a tab's card shows the strongest claim among its panes, and an uncleared `wait` flags that tab for ever.
|
|
14
|
+
- **A `key` on every line that may change later** makes a patch addressable, and `panel_get` before publishing is now the rule after a compaction, a restart or a resumed work.
|
|
15
|
+
- **A stop can carry buttons.** `actions` paints up to eight, each sending literal text to this session's own prompt — so "Approve the design" answers without the user typing.
|
|
16
|
+
- **`/flow:doctor` says which transport this session gets**, in one line, and neither is a fault.
|
|
17
|
+
|
|
18
|
+
The panel was designed against a reader that polled a file, and every rule it carries came from that:
|
|
19
|
+
overwrite whole because a partial write is a lie, never patch because two writers cannot agree, a
|
|
20
|
+
timestamp in the document because the file cannot say when it arrived. None of that was the panel —
|
|
21
|
+
it was the file. The terminal that draws the panel now serves it over MCP, and while a pane is
|
|
22
|
+
claimed it does not read the file at all.
|
|
23
|
+
|
|
24
|
+
What the MCP buys is the line. A phase that moves `Now` from "unit suite" to "shipping #2" no longer
|
|
25
|
+
republishes the train, the title and the blockers to say it; it sends one op. The shape is published
|
|
26
|
+
once, with `panel_set`, and republished only when the shape itself changes — a new MR/PR train, a
|
|
27
|
+
different body. Either the whole op list applies or none of it does, so a patch is safe to send
|
|
28
|
+
without reading first, and a patch whose answer never arrived is safe to send again.
|
|
29
|
+
|
|
30
|
+
`attention` exists because the app must not guess. A `mark: "wait"` inside `lines` is body text: it
|
|
31
|
+
says a line is waiting, not that the pane is waiting on the person reading it. The claim is made at
|
|
32
|
+
the top level, deliberately, and clearing it is the writer's job — a tab that flags itself for ever
|
|
33
|
+
is worse than one that never flags at all.
|
|
34
|
+
|
|
35
|
+
## v0.70.0 — The plan each MR/PR was built from belonged to the feature · 2026-09-21
|
|
36
|
+
|
|
37
|
+
**In short**
|
|
38
|
+
- **`/flow:feat:build` §2.0ter plans the MR/PR it is about to build**: numbered steps, each with its file and the test that proves it, plus the point of no return and what is out of scope. Gated on the entry already in `meta.json.mrs` — `lines_est > 150` or `files_est > 5` — so a small MR/PR never pays for a planning round.
|
|
39
|
+
- **`/flow:bug:fix` §2.0bis gives the same shape to a fix of more than two steps**, and leads it with the bug flow's own rule: the regression test is a step, and it comes first when it can fail before the fix.
|
|
40
|
+
- **`TaskCreate` seeds from that plan** instead of the design's implementation order, which was written before `/flow:feat:plan` split anything and handed each MR/PR its siblings' steps.
|
|
41
|
+
- **A compaction gives the contract back.** The `SessionStart` hook reads the event's `source`, and on `compact` prints the brief and plan from `05-implementation.md` or `04-fix.md` instead of "where was I" — and never invites a resume of work that never stopped.
|
|
42
|
+
- **`manual`/`guided` stop on the plan with one question; `auto` prints it and builds.** No plan-mode primitive is used, so every harness gets the same step.
|
|
43
|
+
|
|
44
|
+
`03-design.md` writes its implementation plan before the delivery split exists, so its steps never
|
|
45
|
+
knew which MR/PR they would land in — and `build` seeded its task list from that same list all the
|
|
46
|
+
same. Between the business brief, which says what the user gets and never in which file, and the
|
|
47
|
+
first edit, there was nothing that named a path. On a large MR/PR the work was being discovered
|
|
48
|
+
while it was typed, and the record of it arrived afterwards.
|
|
49
|
+
|
|
50
|
+
The gate reuses numbers that were already there. `/flow:feat:plan` estimates `lines_est` and
|
|
51
|
+
`files_est` per MR/PR, `§2.3` already measures the real diff against them, and the same pair now
|
|
52
|
+
decides whether a plan is worth writing. A bug has no `mrs[]` to estimate against — and an M bug is
|
|
53
|
+
often three lines in a hard place — so there the trigger stays the one the fix flow already used,
|
|
54
|
+
more than two steps, and a fix that turns into a third step mid-way comes back and writes it then.
|
|
55
|
+
|
|
56
|
+
The order is the decision being asked about, which is why the plan stops for one. On a bug that is
|
|
57
|
+
sharpest: `validate` is what proves a fix and `review` refuses to run without it above size S, so a
|
|
58
|
+
plan that leaves the regression test until last puts the one step that can still refute the root
|
|
59
|
+
cause after everything has been built on it.
|
|
60
|
+
|
|
61
|
+
Keeping a plan in context is a separate problem from writing one, and it is the hook's, not the
|
|
62
|
+
phase's. Re-reading the plan at every checkpoint spends tokens on the turns that lost nothing;
|
|
63
|
+
`SessionStart` already ran after every compaction and answered with the wrong thing, so the cost
|
|
64
|
+
now falls only on the compactions that actually happen. What it prints is labelled as a record of
|
|
65
|
+
what was agreed rather than an instruction — a hook's stdout arrives as context, and a stale plan
|
|
66
|
+
read as an order outranks the decision that replaced it.
|
|
67
|
+
|
|
8
68
|
## v0.69.0 — Waiting on the pipeline was paid for at the main thread's price · 2026-09-21
|
|
9
69
|
|
|
10
70
|
**In short**
|