flow-workflows 0.85.0 → 0.85.1

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.85.0`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.85.1`.** 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
@@ -258,7 +258,8 @@ assumed:
258
258
  recommended one first), title, body, reason and summary are written into the work folder
259
259
  (`ask-question.md`, `ask-options.md`, `publish-title.md`, `publish-body.md`, `blocked-reason.md`,
260
260
  `done-summary.md`) — or a `mktemp -d` directory before the folder exists — and passed by path. A
261
- backtick or a quote in a ticket title must never meet a shell.
261
+ backtick or a quote in a ticket title must never meet a shell. `publish-title.md` holds **one
262
+ line**, the title alone — no `#`, no second line: the orchestrator refuses a title file with two.
262
263
  - **The orchestrator pushes and opens the MR/PR; the run never does.** No `git push`, no `gh`, no
263
264
  `glab`, no tracker write in this mode — not before `ship`, not in it. The orchestrator also keeps,
264
265
  between runs, the work folder as the run left it and the work branch at the commit where it
@@ -31,7 +31,7 @@ it hands the finished MR/PR to the orchestrator, which pushes the branch and ope
31
31
  place it would ask:
32
32
 
33
33
  - **The MR/PR itself (§3–§4)** — no confirmation and no forge. §2's title and description are
34
- written to `publish-title.md` and `publish-body.md` in the work folder; the body gains one line
34
+ written to `publish-title.md` (one line, the title alone) and `publish-body.md` in the work folder; the body gains one line
35
35
  saying an unattended run prepared it and nobody confirmed its brief. §4.0's branch check still
36
36
  runs (never the base; the name starts with `<ticket>-`) — and an upstream on the base is unset
37
37
  (`git branch --unset-upstream`), with no push after it. §4.1–§4.3 do not: no push, no
@@ -38,7 +38,7 @@ of truth, and an argument that disagrees with it is ignored and named in the log
38
38
  - Run `<cmd> why`. It fails, or prints anything but `start`, `answer`, `review`, `pipeline` or
39
39
  `merged` → print what it returned and its stderr in the §3 header and end. No closing order: an
40
40
  orchestrator that cannot say why it launched the run cannot take one either.
41
- - Run `<cmd> ticket --json` and keep `number`, `title`, `base` and `kind` (`kind` absent → `feat`).
41
+ - Run `<cmd> ticket --json` and keep `number`, `title`, `base` and `kind` (`kind` absent or `null` → `feat`: the tracker could not tell, so flow decides). `kind` is re-read on every run; only `start` uses it — once the work exists, its folder says feat or bug.
42
42
  It fails or prints no `number` → `blocked` (flow-core §2.1).
43
43
  - Find the work: the `meta.json` under `.claude/work/` whose `ticket` equals `number` (archive
44
44
  excluded). None is not an error — it is the "none" of the table below.
@@ -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.85.0`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.85.1`.** 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
@@ -257,7 +257,8 @@ assumed:
257
257
  recommended one first), title, body, reason and summary are written into the work folder
258
258
  (`ask-question.md`, `ask-options.md`, `publish-title.md`, `publish-body.md`, `blocked-reason.md`,
259
259
  `done-summary.md`) — or a `mktemp -d` directory before the folder exists — and passed by path. A
260
- backtick or a quote in a ticket title must never meet a shell.
260
+ backtick or a quote in a ticket title must never meet a shell. `publish-title.md` holds **one
261
+ line**, the title alone — no `#`, no second line: the orchestrator refuses a title file with two.
261
262
  - **The orchestrator pushes and opens the MR/PR; the run never does.** No `git push`, no `gh`, no
262
263
  `glab`, no tracker write in this mode — not before `ship`, not in it. The orchestrator also keeps,
263
264
  between runs, the work folder as the run left it and the work branch at the commit where it
@@ -27,7 +27,7 @@ it hands the finished MR/PR to the orchestrator, which pushes the branch and ope
27
27
  place it would ask:
28
28
 
29
29
  - **The MR/PR itself (§3–§4)** — no confirmation and no forge. §2's title and description are
30
- written to `publish-title.md` and `publish-body.md` in the work folder; the body gains one line
30
+ written to `publish-title.md` (one line, the title alone) and `publish-body.md` in the work folder; the body gains one line
31
31
  saying an unattended run prepared it and nobody confirmed its brief. §4.0's branch check still
32
32
  runs (never the base; the name starts with `<ticket>-`) — and an upstream on the base is unset
33
33
  (`git branch --unset-upstream`), with no push after it. §4.1–§4.3 do not: no push, no
@@ -34,7 +34,7 @@ of truth, and an argument that disagrees with it is ignored and named in the log
34
34
  - Run `<cmd> why`. It fails, or prints anything but `start`, `answer`, `review`, `pipeline` or
35
35
  `merged` → print what it returned and its stderr in the §3 header and end. No closing order: an
36
36
  orchestrator that cannot say why it launched the run cannot take one either.
37
- - Run `<cmd> ticket --json` and keep `number`, `title`, `base` and `kind` (`kind` absent → `feat`).
37
+ - Run `<cmd> ticket --json` and keep `number`, `title`, `base` and `kind` (`kind` absent or `null` → `feat`: the tracker could not tell, so flow decides). `kind` is re-read on every run; only `start` uses it — once the work exists, its folder says feat or bug.
38
38
  It fails or prints no `number` → `blocked` (flow-core §2.1).
39
39
  - Find the work: the `meta.json` under `.claude/work/` whose `ticket` equals `number` (archive
40
40
  excluded). None is not an error — it is the "none" of the table below.
@@ -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.85.0`.** Compare it once, at the start of the session, against
20
+ **This file belongs to flow `0.85.1`.** 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
@@ -258,7 +258,8 @@ assumed:
258
258
  recommended one first), title, body, reason and summary are written into the work folder
259
259
  (`ask-question.md`, `ask-options.md`, `publish-title.md`, `publish-body.md`, `blocked-reason.md`,
260
260
  `done-summary.md`) — or a `mktemp -d` directory before the folder exists — and passed by path. A
261
- backtick or a quote in a ticket title must never meet a shell.
261
+ backtick or a quote in a ticket title must never meet a shell. `publish-title.md` holds **one
262
+ line**, the title alone — no `#`, no second line: the orchestrator refuses a title file with two.
262
263
  - **The orchestrator pushes and opens the MR/PR; the run never does.** No `git push`, no `gh`, no
263
264
  `glab`, no tracker write in this mode — not before `ship`, not in it. The orchestrator also keeps,
264
265
  between runs, the work folder as the run left it and the work branch at the commit where it
@@ -31,7 +31,7 @@ it hands the finished MR/PR to the orchestrator, which pushes the branch and ope
31
31
  place it would ask:
32
32
 
33
33
  - **The MR/PR itself (§3–§4)** — no confirmation and no forge. §2's title and description are
34
- written to `publish-title.md` and `publish-body.md` in the work folder; the body gains one line
34
+ written to `publish-title.md` (one line, the title alone) and `publish-body.md` in the work folder; the body gains one line
35
35
  saying an unattended run prepared it and nobody confirmed its brief. §4.0's branch check still
36
36
  runs (never the base; the name starts with `<ticket>-`) — and an upstream on the base is unset
37
37
  (`git branch --unset-upstream`), with no push after it. §4.1–§4.3 do not: no push, no
@@ -38,7 +38,7 @@ of truth, and an argument that disagrees with it is ignored and named in the log
38
38
  - Run `<cmd> why`. It fails, or prints anything but `start`, `answer`, `review`, `pipeline` or
39
39
  `merged` → print what it returned and its stderr in the §3 header and end. No closing order: an
40
40
  orchestrator that cannot say why it launched the run cannot take one either.
41
- - Run `<cmd> ticket --json` and keep `number`, `title`, `base` and `kind` (`kind` absent → `feat`).
41
+ - Run `<cmd> ticket --json` and keep `number`, `title`, `base` and `kind` (`kind` absent or `null` → `feat`: the tracker could not tell, so flow decides). `kind` is re-read on every run; only `start` uses it — once the work exists, its folder says feat or bug.
42
42
  It fails or prints no `number` → `blocked` (flow-core §2.1).
43
43
  - Find the work: the `meta.json` under `.claude/work/` whose `ticket` equals `number` (archive
44
44
  excluded). None is not an error — it is the "none" of the table below.
@@ -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.85.0`.** Compare it once, at the start of the session, against
19
+ **This file belongs to flow `0.85.1`.** 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
@@ -257,7 +257,8 @@ assumed:
257
257
  recommended one first), title, body, reason and summary are written into the work folder
258
258
  (`ask-question.md`, `ask-options.md`, `publish-title.md`, `publish-body.md`, `blocked-reason.md`,
259
259
  `done-summary.md`) — or a `mktemp -d` directory before the folder exists — and passed by path. A
260
- backtick or a quote in a ticket title must never meet a shell.
260
+ backtick or a quote in a ticket title must never meet a shell. `publish-title.md` holds **one
261
+ line**, the title alone — no `#`, no second line: the orchestrator refuses a title file with two.
261
262
  - **The orchestrator pushes and opens the MR/PR; the run never does.** No `git push`, no `gh`, no
262
263
  `glab`, no tracker write in this mode — not before `ship`, not in it. The orchestrator also keeps,
263
264
  between runs, the work folder as the run left it and the work branch at the commit where it
@@ -29,7 +29,7 @@ it hands the finished MR/PR to the orchestrator, which pushes the branch and ope
29
29
  place it would ask:
30
30
 
31
31
  - **The MR/PR itself (§3–§4)** — no confirmation and no forge. §2's title and description are
32
- written to `publish-title.md` and `publish-body.md` in the work folder; the body gains one line
32
+ written to `publish-title.md` (one line, the title alone) and `publish-body.md` in the work folder; the body gains one line
33
33
  saying an unattended run prepared it and nobody confirmed its brief. §4.0's branch check still
34
34
  runs (never the base; the name starts with `<ticket>-`) — and an upstream on the base is unset
35
35
  (`git branch --unset-upstream`), with no push after it. §4.1–§4.3 do not: no push, no
@@ -36,7 +36,7 @@ of truth, and an argument that disagrees with it is ignored and named in the log
36
36
  - Run `<cmd> why`. It fails, or prints anything but `start`, `answer`, `review`, `pipeline` or
37
37
  `merged` → print what it returned and its stderr in the §3 header and end. No closing order: an
38
38
  orchestrator that cannot say why it launched the run cannot take one either.
39
- - Run `<cmd> ticket --json` and keep `number`, `title`, `base` and `kind` (`kind` absent → `feat`).
39
+ - Run `<cmd> ticket --json` and keep `number`, `title`, `base` and `kind` (`kind` absent or `null` → `feat`: the tracker could not tell, so flow decides). `kind` is re-read on every run; only `start` uses it — once the work exists, its folder says feat or bug.
40
40
  It fails or prints no `number` → `blocked` (flow-core §2.1).
41
41
  - Find the work: the `meta.json` under `.claude/work/` whose `ticket` equals `number` (archive
42
42
  excluded). None is not an error — it is the "none" of the table below.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flow-workflows",
3
- "version": "0.85.0",
3
+ "version": "0.85.1",
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.85.0",
6
+ "version": "0.85.1",
7
7
  "author": {
8
8
  "name": "Alberto Vioque",
9
9
  "email": "mashware@gmail.com"
@@ -5,6 +5,15 @@ 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.85.1 — An unattended run reads the orchestrator's answers as agent-runner sends them · 2026-10-01
9
+
10
+ **In short**
11
+ - **A ticket whose tracker cannot tell feat from bug starts as a feature.** agent-runner sends
12
+ `kind: null` in that case; `/flow:work:run` now reads it the same as a missing `kind`.
13
+ - **The PR title goes to the orchestrator as one line.** agent-runner refuses a title file with two
14
+ lines; flow now says so where the run writes it.
15
+ - Nothing changes in `manual`, `guided` or `auto`. Follows #177.
16
+
8
17
  ## v0.85.0 — An unattended run answers its reviewers and fixes its own pipeline · 2026-10-01
9
18
 
10
19
  **In short**