opencode-swarm 7.88.2 → 7.88.3

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.
@@ -126,14 +126,31 @@ The tool will automatically write the retrospective to \`.swarm/evidence/retro-{
126
126
  - If `auto-proceed: off` AND `nudge: false`: after the user confirms the phase transition, suggest enabling auto-proceed. Use the swarm_command tool to record the user's answer: `swarm_command({ command: "auto-proceed", args: ["on"] })` for yes, `swarm_command({ command: "auto-proceed", args: ["off"] })` for no. Either call sets nudge to true and prevents re-nudging.
127
127
  - If `auto-proceed: off` AND `nudge: true`: Ask "Ready for Phase [N+1]?" and wait for user confirmation before proceeding.
128
128
 
129
+ 5.59. **Required agent dispatch for phase_complete**: Before calling `phase_complete`, the architect MUST have dispatched each of the active swarm's standard agents at least once during this phase. By default, `phase_complete` requires these agents:
130
+
131
+ | Agent | When required | Where dispatched during normal task execution |
132
+ |---|---|---|
133
+ | `coder` | Always | Task implementation (coder) |
134
+ | `reviewer` | Always | Task review (reviewer) |
135
+ | `test_engineer` | Always | Test verification (test_engineer) |
136
+ | `docs` | When `require_docs: true` in QA gate profile | Documentation updates |
137
+
138
+ If any required agent is missing, `phase_complete` returns `{ success: false, status: 'incomplete', message: 'Phase N incomplete: missing required agents: <list>', agentsMissing: [...] }` and the phase is not closed. Dispatch each agent during normal task execution (not only inside optional Phase/Final Councils in steps 5.65/5.7) so the closeout gate is satisfied.
139
+
140
+ The `docs` agent is only required when `require_docs: true` in the effective QA gate profile (visible via `get_qa_gate_profile`). For most small plans and feedback cycles, `docs` is NOT required and can be skipped. For multi-task implementation plans, `docs` is typically required.
141
+
142
+ The `coder` and `test_engineer` agents are required because every phase that modifies source code or tests must have at least one implementation and one test-verification delegation. For pure documentation or retrospective phases, these may be waived by the user explicitly.
143
+
144
+ This is a hard enforcement mechanism, not a suggestion. `phase_complete` will not return `status: success` if any required agent is missing from `agentsDispatched`.
145
+
129
146
  CATASTROPHIC VIOLATION CHECK — ask yourself at EVERY phase boundary (MODE: PHASE-WRAP):
130
- "Have I delegated to the active swarm's reviewer agent at least once this phase?"
131
- If the answer is NO: you have a catastrophic process violation.
147
+ "Have I delegated to each of the active swarm's required agents (coder, reviewer, test_engineer, plus docs if required) at least once this phase?"
148
+ If the answer is NO for any of them: you have a catastrophic process violation.
132
149
  STOP. Do not proceed to the next phase. Inform the user:
133
- "⛔ PROCESS VIOLATION: Phase [N] completed with zero reviewer-agent delegations in the active swarm.
134
- All code changes in this phase are unreviewed. Recommend retrospective review before proceeding."
135
- This is not optional. Zero active-swarm reviewer calls in a phase is always a violation.
136
- There is no project where code ships without review.
150
+ "⛔ PROCESS VIOLATION: Phase [N] completed with missing required-agent delegations in the active swarm: [list missing agents].
151
+ All code changes in this phase are unreviewed/untested/undocumented. Recommend retrospective review before proceeding."
152
+ This is not optional. Missing required-agent calls in a phase is always a violation.
153
+ There is no project where code ships without review, tests, and required documentation.
137
154
 
138
155
  ### Blockers
139
156
  Mark [BLOCKED] in plan.md, skip to next unblocked task, inform user.
@@ -134,8 +134,38 @@ tree:
134
134
  filesystem (`Read`/`Glob`/`Grep`), and fixes must land on the PR branch — without a
135
135
  checkout you would verify and patch the base branch's code instead. Record the
136
136
  `base_ref..head_ref` range for diff-scoped inspection.
137
- - If no PR reference was provided (a pasted-feedback session on the current branch),
138
- confirm the current branch is the intended PR branch before editing.
137
+ - If no PR reference was provided (a pasted-feedback session on the current branch),
138
+ confirm the current branch is the intended PR branch before editing.
139
+
140
+ When a verification lane result includes `output_ref`, treat `output` as a
141
+ preview and call `retrieve_lane_output` before using it to classify, resolve,
142
+ disprove, or group feedback items. If the result is `output_degraded`,
143
+ `transcript_incomplete`, or truncated without a usable ref, keep the affected
144
+ ledger items as `NEEDS_MORE_EVIDENCE` or re-dispatch a narrower read-only lane.
145
+
146
+ ## Pre-flight: Dirty Worktree Handling
147
+
148
+ Before staging any files for the PR commit, check the working tree state:
149
+
150
+ **The problem:** `git add -A` stages every uncommitted change in the working tree,
151
+ including pre-existing changes from other branches or prior work. This was hit twice
152
+ in one session during PR #1472 review, producing a 59-file commit instead of the
153
+ intended 2-file targeted fix.
154
+
155
+ **The check:** Run `git status --porcelain` first. If output is non-empty, identify
156
+ which files are PR-related vs pre-existing uncommitted changes.
157
+
158
+ **The rule:** Stage files explicitly by path when the working tree contains files
159
+ unrelated to the PR. For example:
160
+
161
+ ```bash
162
+ git add src/foo.ts tests/foo.test.ts
163
+ ```
164
+
165
+ Never use `git add -A` when the working tree has pre-existing changes from other
166
+ branches or prior work sessions.
167
+
168
+ *Reference: Caught during PR #1472 Round 1 closure.*
139
169
 
140
170
  ## Intake Surfaces
141
171
 
@@ -172,12 +202,6 @@ Missing, stale, cancelled, or failed lanes remain explicit ledger limitations.
172
202
  If `dispatch_lanes_async` is unavailable, use blocking verification and record
173
203
  that async advisory lanes were unavailable.
174
204
 
175
- When a verification lane result includes `output_ref`, treat `output` as a
176
- preview and call `retrieve_lane_output` before using it to classify, resolve,
177
- disprove, or group feedback items. If the result is `output_degraded`,
178
- `transcript_incomplete`, or truncated without a usable ref, keep the affected
179
- ledger items as `NEEDS_MORE_EVIDENCE` or re-dispatch a narrower read-only lane.
180
-
181
205
  ### CI matrix cascade check (do this before fixing)
182
206
 
183
207
  When the PR's `unit` job is a matrix across multiple OSes and downstream jobs
@@ -1,8 +1,8 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-09smngfp.js";
5
- import"./index-y72bw1wb.js";
4
+ } from "./index-ds057q5k.js";
5
+ import"./index-g6f4tt38.js";
6
6
  import"./index-g00qm2gf.js";
7
7
  import"./index-yhsmmv2z.js";
8
8
  import"./index-32axfg6h.js";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-09smngfp.js";
4
+ } from "./index-ds057q5k.js";
5
5
  import {
6
6
  handleGuardrailLog
7
7
  } from "./index-vjsr9bqt.js";
@@ -76,7 +76,7 @@ import {
76
76
  handleWriteRetroCommand,
77
77
  normalizeSwarmCommandInput,
78
78
  resolveCommand
79
- } from "./index-y72bw1wb.js";
79
+ } from "./index-g6f4tt38.js";
80
80
  import"./index-g00qm2gf.js";
81
81
  import"./index-yhsmmv2z.js";
82
82
  import"./index-32axfg6h.js";
@@ -12,7 +12,7 @@ import {
12
12
  detectPosixWrites,
13
13
  detectWindowsWrites,
14
14
  resolveWriteTargets
15
- } from "./index-y72bw1wb.js";
15
+ } from "./index-g6f4tt38.js";
16
16
  import {
17
17
  checkFileAuthority,
18
18
  classifyFile,
@@ -899,7 +899,7 @@ var init_executor = __esm(() => {
899
899
  // package.json
900
900
  var package_default = {
901
901
  name: "opencode-swarm",
902
- version: "7.88.2",
902
+ version: "7.88.3",
903
903
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
904
904
  main: "dist/index.js",
905
905
  types: "dist/index.d.ts",
@@ -29934,7 +29934,7 @@ function buildDetailedHelp(commandName, entry) {
29934
29934
  async function handleHelpCommand(ctx) {
29935
29935
  const targetCommand = ctx.args.join(" ");
29936
29936
  if (!targetCommand) {
29937
- const { buildHelpText } = await import("./index-tjr1m8wf.js");
29937
+ const { buildHelpText } = await import("./index-0rt5aamg.js");
29938
29938
  return buildHelpText();
29939
29939
  }
29940
29940
  const tokens = targetCommand.split(/\s+/);
@@ -29943,7 +29943,7 @@ async function handleHelpCommand(ctx) {
29943
29943
  return _internals45.buildDetailedHelp(resolved.key, resolved.entry);
29944
29944
  }
29945
29945
  const similar = _internals45.findSimilarCommands(targetCommand);
29946
- const { buildHelpText: fullHelp } = await import("./index-tjr1m8wf.js");
29946
+ const { buildHelpText: fullHelp } = await import("./index-0rt5aamg.js");
29947
29947
  if (similar.length > 0) {
29948
29948
  return `Command '/swarm ${targetCommand}' not found.
29949
29949
 
@@ -30076,7 +30076,7 @@ var COMMAND_REGISTRY = {
30076
30076
  },
30077
30077
  "guardrail explain": {
30078
30078
  handler: async (ctx) => {
30079
- const { handleGuardrailExplain } = await import("./guardrail-explain-qd243wrm.js");
30079
+ const { handleGuardrailExplain } = await import("./guardrail-explain-eqypvw60.js");
30080
30080
  return handleGuardrailExplain(ctx.directory, ctx.args);
30081
30081
  },
30082
30082
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
package/dist/cli/index.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  getPluginLockFilePaths,
8
8
  package_default,
9
9
  resolveCommand
10
- } from "./index-y72bw1wb.js";
10
+ } from "./index-g6f4tt38.js";
11
11
  import"./index-g00qm2gf.js";
12
12
  import"./index-yhsmmv2z.js";
13
13
  import"./index-32axfg6h.js";
package/dist/index.js CHANGED
@@ -69,7 +69,7 @@ var package_default;
69
69
  var init_package = __esm(() => {
70
70
  package_default = {
71
71
  name: "opencode-swarm",
72
- version: "7.88.2",
72
+ version: "7.88.3",
73
73
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
74
74
  main: "dist/index.js",
75
75
  types: "dist/index.d.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-swarm",
3
- "version": "7.88.2",
3
+ "version": "7.88.3",
4
4
  "description": "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",