opencode-swarm 7.109.4 → 7.110.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.
@@ -6,7 +6,10 @@ description: >
6
6
  requested changes, CI/check failures, merge conflicts, stale PR branches, or
7
7
  PR follow-up work that must close all known issues without dropping findings.
8
8
  Supports multi-round bot reviews (the repository's bot posts a new review
9
- after every push) via the iterative pattern documented in the body.
9
+ after every push) via the iterative pattern documented in the body. Stage A
10
+ (structural pre-checks) and Stage B (reviewer + test_engineer) gates and the
11
+ reviewer + critic closeout gate are MANDATORY for any change made as part of
12
+ this process.
10
13
  ---
11
14
 
12
15
  # Swarm PR Feedback
@@ -16,6 +19,12 @@ Use this skill to close known PR feedback. This is not a fresh broad PR review.
16
19
  feedback surfaces, verifies each claim, clusters related problems, fixes confirmed
17
20
  issues, validates the branch, and reports closure status for every item.
18
21
 
22
+ **Mandatory gate contract.** Stage A (structural pre-checks) and Stage B
23
+ (reviewer + test_engineer) gates and the reviewer + critic closeout gate are
24
+ MANDATORY for any change made as part of this process. No fix lands, no closure
25
+ ledger row is marked FIXED, and no PR is published until all three gates pass on
26
+ the current diff. See "Mandatory Gates" below for the full protocol.
27
+
19
28
  When the work starts from a prior `swarm-pr-review` run, ingest the review's
20
29
  handoff artifact (for example
21
30
  `.swarm/pr-review/<run_id>/feedback-handoff.md` or `.json`) before triage.
@@ -188,11 +197,11 @@ tree:
188
197
  filesystem (`Read`/`Glob`/`Grep`), and fixes must land on the PR branch — without a
189
198
  checkout you would verify and patch the base branch's code instead. Record the
190
199
  `base_ref..head_ref` range for diff-scoped inspection.
191
- - Pass the `base_ref..head_ref` commit range in every read-only verification or
192
- explorer/advisory-lane delegation so lane agents can inspect specific revisions
193
- with `git show` when needed.
200
+ - Pass the `base_ref..head_ref` commit range in every read-only verification or
201
+ explorer/advisory-lane delegation so lane agents can inspect specific revisions
202
+ with `git show` when needed.
194
203
  - If no PR reference was provided (a pasted-feedback session on the current branch),
195
- confirm the current branch is the intended PR branch before editing.
204
+ confirm the current branch is the intended PR branch before editing.
196
205
 
197
206
  When a verification lane result includes `output_ref`, treat `output` as a
198
207
  preview and call `retrieve_lane_output` before using it to classify, resolve,
@@ -481,25 +490,85 @@ or compatibility policy, mark the item `NEEDS_USER_DECISION` and ask.
481
490
  and let the merge queue perform final current-base validation. Still resolve real
482
491
  merge conflicts and SHA-dependent review threads before queuing.
483
492
 
484
- ## Validation
493
+ ## Mandatory Gates
494
+
495
+ **Stage A and Stage B gates and the reviewer + critic closeout gate are
496
+ MANDATORY for any change made as part of the PR-feedback process.** No fix
497
+ lands, no closure ledger row is marked FIXED, and no PR is published until all
498
+ three gates pass on the current diff. This section uses the repository's
499
+ established Stage A/B meaning: Stage A = `pre_check_batch`-equivalent structural
500
+ pre-checks; Stage B = `reviewer` + `test_engineer` per-task gates (consistent
501
+ with `execute`, `plan`, `specify`, `brainstorm`, `docs/swarm-briefing.md`, and
502
+ `docs/council/README.md`).
503
+
504
+ If a gate failure is suspected pre-existing, prove it on the base branch or
505
+ label it `UNVERIFIED`. Do not call the branch green while required checks are
506
+ non-green.
507
+
508
+ ### Stage A — structural pre-checks (mandatory before Stage B)
509
+
510
+ Run for every changed surface. No "where relevant" — every PR-feedback change
511
+ runs these; if a surface is genuinely untouched, state that explicitly rather
512
+ than skipping silently.
513
+
514
+ - `bun run build` (or the repository's build command) — must succeed.
515
+ - typecheck — must pass.
516
+ - lint/format (e.g. `biome ci .`) — must pass.
517
+ - `git diff --check` — no whitespace or merge-marker errors.
518
+ - exact failing CI/test command reproduced locally when a ledger item is rooted
519
+ in a CI/test failure — the reproduction must fail on the pre-fix tree and pass
520
+ after the fix.
521
+
522
+ ### Stage B — reviewer + test_engineer (mandatory after Stage A passes)
523
+
524
+ Two independent agents on the Stage-A-green diff:
525
+
526
+ - **reviewer** — independent (fresh context, not the implementer, not a continued
527
+ conversation). Validates each fix on the current diff against the feedback
528
+ item it closes. Verdict per item: APPROVE / NEEDS_REVISION / BLOCKED.
529
+ - **test_engineer** — writes and runs the falsification probe or regression test
530
+ that proves each fix actually resolves its item (tests for changed behavior or
531
+ newly covered gaps). Verdict per item: PASS / FAIL / BLOCKED.
485
532
 
486
- Run targeted validation for every changed surface:
533
+ Address every NEEDS_REVISION / BLOCKED / FAIL, then re-run the affected agent on
534
+ the current diff.
487
535
 
488
- - exact failing CI/test command when reproducing a failure,
489
- - tests for changed behavior or newly covered gaps,
490
- - lint/format/typecheck/build where relevant,
491
- - `git diff --check`,
492
- - PR metadata checks after push: head SHA, check status, mergeability/conflicts,
493
- and unresolved feedback state.
536
+ ### Closeout gate reviewer + critic (mandatory after Stage B)
537
+
538
+ A *separate* reviewer + critic pair on the Stage-B-approved diff. This is the
539
+ swarm closeout contract (see `../swarm/SKILL.md` "Mandatory implementation
540
+ closeout gate"); because this skill edits code, docs, release notes, or skill files it applies in full — Stage B
541
+ alone does not satisfy it.
542
+
543
+ - **independent reviewer** (fresh context, separate from the Stage B reviewer)
544
+ → APPROVE / NEEDS_REVISION / BLOCKED per item.
545
+ - **final critic** (separate fresh context, not a continued conversation with
546
+ the reviewer, dispatched after the reviewer returns APPROVE) → APPROVE /
547
+ NEEDS_REVISION / BLOCKED per item. The critic challenges: is every original
548
+ feedback item actually resolved? Any requirement drift, weak evidence, missing
549
+ sibling-file checks, stale approvals, anything unwired or silently deferred?
550
+
551
+ Address every NEEDS_REVISION / BLOCKED item, re-review with the reviewer if the
552
+ critic surfaces correctness issues, then re-critic. **Any edit after the
553
+ reviewer's or critic's approval invalidates that approval** — re-run the
554
+ affected gate on the current diff before publishing.
555
+
556
+ Record both closeout verdicts (reviewer + critic, with HEAD/diff) in
557
+ `.claude/session/tasks/<slug>/gates.md` per the `durable-session-state` skill
558
+ (`.swarm/` is the plugin's runtime state — never write task artifacts there).
559
+
560
+ ### Post-publish verification (mandatory after the PR is pushed)
561
+
562
+ These checks run after the fix lands on the remote — they are NOT Stage A
563
+ pre-checks and must not be folded into Stage A.
564
+
565
+ - PR metadata checks after push: head SHA, check status,
566
+ mergeability/conflicts, and unresolved feedback state.
494
567
  - After conflict fixes, verify remote mergeability is clean (`MERGEABLE` /
495
568
  `CLEAN`), not only that local conflict markers disappeared.
496
569
  - For current-head CI, prefer run-level details when PR checks look stale:
497
570
  `gh run view <run-id> --json headSha,status,conclusion,jobs,url`.
498
571
 
499
- If a validation failure is suspected pre-existing, prove it on the base branch or
500
- label it `UNVERIFIED`. Do not call the branch green while required checks are
501
- non-green.
502
-
503
572
  ## Publishing And Communication
504
573
 
505
574
  After fixes, update the PR body or comment with a closure ledger:
@@ -11,7 +11,7 @@ import {
11
11
  runCuratorInit,
12
12
  runCuratorPhase,
13
13
  writeCuratorSummary
14
- } from "./index-y3nx3ss0.js";
14
+ } from "./index-1mc2yfc2.js";
15
15
  import"./index-d3txrx5q.js";
16
16
  import"./index-mtzjbaaa.js";
17
17
  import"./index-c8s9a3zh.js";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  createCuratorLLMDelegate
4
- } from "./index-y3nx3ss0.js";
4
+ } from "./index-1mc2yfc2.js";
5
5
  import"./index-d3txrx5q.js";
6
6
  import"./index-mtzjbaaa.js";
7
7
  import"./index-c8s9a3zh.js";
@@ -1,8 +1,8 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-zh3qh6m7.js";
5
- import"./index-y3nx3ss0.js";
4
+ } from "./index-xhsba2sn.js";
5
+ import"./index-1mc2yfc2.js";
6
6
  import"./index-d3txrx5q.js";
7
7
  import"./index-mtzjbaaa.js";
8
8
  import"./index-c8s9a3zh.js";
@@ -5,7 +5,7 @@ import {
5
5
  isHiveEligible,
6
6
  promoteFromSwarm,
7
7
  promoteToHive
8
- } from "./index-y3nx3ss0.js";
8
+ } from "./index-1mc2yfc2.js";
9
9
  import"./index-d3txrx5q.js";
10
10
  import"./index-mtzjbaaa.js";
11
11
  import"./index-c8s9a3zh.js";
@@ -5008,8 +5008,10 @@ var BUNDLED_PROJECT_SKILLS = [
5008
5008
  "swarm-implement",
5009
5009
  "design-docs",
5010
5010
  "swarm-pr-review",
5011
+ "swarm",
5011
5012
  "swarm-pr-feedback",
5012
5013
  "swarm-pr-subscribe",
5014
+ "swarm-ci-monitor",
5013
5015
  "issue-ingest",
5014
5016
  "plan",
5015
5017
  "critic-gate",
@@ -7269,11 +7271,11 @@ var _internals7 = {
7269
7271
  return KnowledgeConfigSchema2.parse({});
7270
7272
  },
7271
7273
  applyCuratorKnowledgeUpdates: async (directory, recommendations, knowledgeConfig) => {
7272
- const { applyCuratorKnowledgeUpdates } = await import("./curator-zn1kmwmz.js");
7274
+ const { applyCuratorKnowledgeUpdates } = await import("./curator-4qqzpd85.js");
7273
7275
  return applyCuratorKnowledgeUpdates(directory, recommendations, knowledgeConfig);
7274
7276
  },
7275
7277
  checkHivePromotions: async (entries, knowledgeConfig) => {
7276
- const { checkHivePromotions } = await import("./hive-promoter-j81yj97d.js");
7278
+ const { checkHivePromotions } = await import("./hive-promoter-wvxqyayt.js");
7277
7279
  return checkHivePromotions(entries, knowledgeConfig);
7278
7280
  },
7279
7281
  applyProposalTriage: async (directory, triage) => {
@@ -16647,8 +16649,8 @@ var _internals21 = {
16647
16649
  loadCuratorDeps: async () => {
16648
16650
  const [{ CuratorConfigSchema }, curator, { createCuratorLLMDelegate: createCuratorLLMDelegate2 }] = await Promise.all([
16649
16651
  import("./schema-5vmb5dh8.js"),
16650
- import("./curator-zn1kmwmz.js"),
16651
- import("./curator-llm-factory-3hf9xpnd.js")
16652
+ import("./curator-4qqzpd85.js"),
16653
+ import("./curator-llm-factory-y4kvr1ph.js")
16652
16654
  ]);
16653
16655
  return { CuratorConfigSchema, curator, createCuratorLLMDelegate: createCuratorLLMDelegate2 };
16654
16656
  }
@@ -17144,7 +17146,7 @@ import { fileURLToPath } from "url";
17144
17146
  // package.json
17145
17147
  var package_default = {
17146
17148
  name: "opencode-swarm",
17147
- version: "7.109.4",
17149
+ version: "7.110.0",
17148
17150
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
17149
17151
  main: "dist/index.js",
17150
17152
  types: "dist/index.d.ts",
@@ -17199,8 +17201,10 @@ var package_default = {
17199
17201
  ".opencode/skills/swarm-implement",
17200
17202
  ".opencode/skills/design-docs",
17201
17203
  ".opencode/skills/swarm-pr-review",
17204
+ ".opencode/skills/swarm",
17202
17205
  ".opencode/skills/swarm-pr-feedback",
17203
17206
  ".opencode/skills/swarm-pr-subscribe",
17207
+ ".opencode/skills/swarm-ci-monitor",
17204
17208
  ".opencode/skills/issue-ingest",
17205
17209
  ".opencode/skills/plan",
17206
17210
  ".opencode/skills/critic-gate",
@@ -31867,7 +31871,7 @@ function buildDetailedHelp(commandName, entry) {
31867
31871
  async function handleHelpCommand(ctx) {
31868
31872
  const targetCommand = ctx.args.join(" ");
31869
31873
  if (!targetCommand) {
31870
- const { buildHelpText } = await import("./index-nvmy7xmj.js");
31874
+ const { buildHelpText } = await import("./index-khj0knr0.js");
31871
31875
  return buildHelpText();
31872
31876
  }
31873
31877
  const tokens = targetCommand.split(/\s+/);
@@ -31876,7 +31880,7 @@ async function handleHelpCommand(ctx) {
31876
31880
  return _internals46.buildDetailedHelp(resolved.key, resolved.entry);
31877
31881
  }
31878
31882
  const similar = _internals46.findSimilarCommands(targetCommand);
31879
- const { buildHelpText: fullHelp } = await import("./index-nvmy7xmj.js");
31883
+ const { buildHelpText: fullHelp } = await import("./index-khj0knr0.js");
31880
31884
  if (similar.length > 0) {
31881
31885
  return `Command '/swarm ${targetCommand}' not found.
31882
31886
 
@@ -32009,7 +32013,7 @@ var COMMAND_REGISTRY = {
32009
32013
  },
32010
32014
  "guardrail explain": {
32011
32015
  handler: async (ctx) => {
32012
- const { handleGuardrailExplain } = await import("./guardrail-explain-hjz1k6w0.js");
32016
+ const { handleGuardrailExplain } = await import("./guardrail-explain-10hh57cr.js");
32013
32017
  return handleGuardrailExplain(ctx.directory, ctx.args);
32014
32018
  },
32015
32019
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-zh3qh6m7.js";
4
+ } from "./index-xhsba2sn.js";
5
5
  import {
6
6
  handleGuardrailLog
7
7
  } from "./index-p5vm9gy9.js";
@@ -80,7 +80,7 @@ import {
80
80
  handleWriteRetroCommand,
81
81
  normalizeSwarmCommandInput,
82
82
  resolveCommand
83
- } from "./index-y3nx3ss0.js";
83
+ } from "./index-1mc2yfc2.js";
84
84
  import"./index-d3txrx5q.js";
85
85
  import"./index-mtzjbaaa.js";
86
86
  import"./index-c8s9a3zh.js";
@@ -12,7 +12,7 @@ import {
12
12
  detectPosixWrites,
13
13
  detectWindowsWrites,
14
14
  resolveWriteTargets
15
- } from "./index-y3nx3ss0.js";
15
+ } from "./index-1mc2yfc2.js";
16
16
  import {
17
17
  checkFileAuthority,
18
18
  classifyFile,
package/dist/cli/index.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  getPluginLockFilePaths,
8
8
  package_default,
9
9
  resolveCommand
10
- } from "./index-y3nx3ss0.js";
10
+ } from "./index-1mc2yfc2.js";
11
11
  import"./index-d3txrx5q.js";
12
12
  import"./index-mtzjbaaa.js";
13
13
  import"./index-c8s9a3zh.js";
@@ -1,4 +1,4 @@
1
- export declare const BUNDLED_PROJECT_SKILLS: readonly ["brainstorm", "specify", "clarify-spec", "resume", "clarify", "discover", "consult", "pre-phase-briefing", "council", "deep-dive", "deep-research", "codebase-review-swarm", "swarm-implement", "design-docs", "swarm-pr-review", "swarm-pr-feedback", "swarm-pr-subscribe", "issue-ingest", "plan", "critic-gate", "execute", "phase-wrap", "loop", "writing-tests", "running-tests", "engineering-conventions", "commit-pr", "worktree-retry-cleanup", "skill-edit-validation", "merge-queue-readiness", "gate-attribution", "ci-failure-batching"];
1
+ export declare const BUNDLED_PROJECT_SKILLS: readonly ["brainstorm", "specify", "clarify-spec", "resume", "clarify", "discover", "consult", "pre-phase-briefing", "council", "deep-dive", "deep-research", "codebase-review-swarm", "swarm-implement", "design-docs", "swarm-pr-review", "swarm", "swarm-pr-feedback", "swarm-pr-subscribe", "swarm-ci-monitor", "issue-ingest", "plan", "critic-gate", "execute", "phase-wrap", "loop", "writing-tests", "running-tests", "engineering-conventions", "commit-pr", "worktree-retry-cleanup", "skill-edit-validation", "merge-queue-readiness", "gate-attribution", "ci-failure-batching"];
2
2
  interface CopyState {
3
3
  files: number;
4
4
  bytes: number;