opencode-swarm 7.200.11 → 7.200.13

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 (77) hide show
  1. package/.opencode/skills/test-file-split/SKILL.md +6 -1
  2. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  3. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  4. package/dist/cli/{attest-task-y0n69zgb.js → attest-task-pvwft49v.js} +26 -26
  5. package/dist/cli/{auto-checkpoint-hyaksmtg.js → auto-checkpoint-d42tskyk.js} +4 -4
  6. package/dist/cli/{checkpoint-t0p781sc.js → checkpoint-ga9vbvb1.js} +8 -8
  7. package/dist/cli/{coder-settlement-nh88s6es.js → coder-settlement-rbhdzxs0.js} +4 -4
  8. package/dist/cli/{config-doctor-sf7hc0q4.js → config-doctor-qh3aba3c.js} +7 -7
  9. package/dist/cli/{core-p168fw3r.js → core-vx7fxf4y.js} +1 -1
  10. package/dist/cli/{curator-5ayzhk7v.js → curator-0nv1asjc.js} +26 -26
  11. package/dist/cli/{curator-drift-jx9kyndc.js → curator-drift-4e5nsjec.js} +5 -5
  12. package/dist/cli/{curator-llm-factory-ytfkvtxs.js → curator-llm-factory-cn47pa0k.js} +26 -26
  13. package/dist/cli/{doctor-knowledge-receipt-phase-id-2gjvxndy.js → doctor-knowledge-receipt-phase-id-5qs5w6jz.js} +4 -4
  14. package/dist/cli/{evidence-summary-service-972sqht5.js → evidence-summary-service-fbhdnww1.js} +10 -10
  15. package/dist/cli/{gate-evidence-n1m842gj.js → gate-evidence-44bzkpnp.js} +3 -3
  16. package/dist/cli/{guardrail-explain-6yv78gmk.js → guardrail-explain-ga6m57w3.js} +27 -27
  17. package/dist/cli/{guardrail-log-z5pzgkcv.js → guardrail-log-aekacstp.js} +3 -3
  18. package/dist/cli/{guardrail-reset-w0nxcs6a.js → guardrail-reset-ezjd8vtv.js} +26 -26
  19. package/dist/cli/{hive-promoter-3q0738xg.js → hive-promoter-r8z673jn.js} +26 -26
  20. package/dist/cli/{index-ssp4t8g6.js → index-0g2nvyn9.js} +28 -28
  21. package/dist/cli/{index-nnc23ddw.js → index-165v1k07.js} +3 -3
  22. package/dist/cli/{index-ve74c3a8.js → index-1nnrz6yd.js} +6 -6
  23. package/dist/cli/{index-0g0x9ets.js → index-1w9mc5ck.js} +26 -26
  24. package/dist/cli/{index-yq73sd3w.js → index-3jewj7q3.js} +1 -1
  25. package/dist/cli/{index-mq4eyhtf.js → index-6kdyc1s7.js} +1 -1
  26. package/dist/cli/{index-2vj8d8te.js → index-6tpmpc0f.js} +1 -1
  27. package/dist/cli/{index-jt9j02tm.js → index-6xaft4r3.js} +1 -1
  28. package/dist/cli/{index-8g9rn3rp.js → index-7811ftfy.js} +5 -5
  29. package/dist/cli/{index-krjamprc.js → index-8az4qgz7.js} +2 -2
  30. package/dist/cli/{index-ke881z7m.js → index-8kta0a96.js} +2 -2
  31. package/dist/cli/{index-kzr3nby8.js → index-9v10n049.js} +2 -2
  32. package/dist/cli/{index-0an54fza.js → index-9zw7mh20.js} +3 -3
  33. package/dist/cli/{index-ce6qarfq.js → index-a01knv2b.js} +276 -133
  34. package/dist/cli/{index-814q5t5s.js → index-cc2vkpg7.js} +1 -1
  35. package/dist/cli/{index-gkvk9et2.js → index-dkg8meb8.js} +3 -3
  36. package/dist/cli/{index-njg8zvqe.js → index-ffz00br0.js} +3 -3
  37. package/dist/cli/{index-5k88v1e7.js → index-fh22ndnh.js} +1 -1
  38. package/dist/cli/{index-nzhfhpng.js → index-fxnj2qd5.js} +1 -1
  39. package/dist/cli/{index-ra3erqpk.js → index-h59n1rx5.js} +2 -2
  40. package/dist/cli/{index-r097ettz.js → index-h8ta8mva.js} +1 -1
  41. package/dist/cli/{index-bv9tqmpm.js → index-hs96g7xz.js} +1 -1
  42. package/dist/cli/{index-hhzwfyd7.js → index-krrn8eg3.js} +1 -1
  43. package/dist/cli/{index-x8sh8v4a.js → index-nfjwshs6.js} +1 -1
  44. package/dist/cli/{index-yn6jrxen.js → index-pxf512yn.js} +3 -3
  45. package/dist/cli/{index-2n7a184b.js → index-q0gtj1px.js} +2 -2
  46. package/dist/cli/{index-qdz6zysj.js → index-qg38v82w.js} +4 -4
  47. package/dist/cli/{index-bnbhqvsn.js → index-sx4fm1d2.js} +1 -1
  48. package/dist/cli/{index-aj41bscz.js → index-v4g6rm68.js} +3 -3
  49. package/dist/cli/{index-xht6gprr.js → index-x9gyt21k.js} +2 -2
  50. package/dist/cli/{index-h1chaf63.js → index-xfdx40ba.js} +5 -5
  51. package/dist/cli/index.js +27 -27
  52. package/dist/cli/{knowledge-escalator-2e92rdsx.js → knowledge-escalator-t29wynav.js} +7 -7
  53. package/dist/cli/{knowledge-events-gzqwr94e.js → knowledge-events-pqn56zk8.js} +5 -5
  54. package/dist/cli/{knowledge-store-6j8d1gm4.js → knowledge-store-tset38av.js} +1 -1
  55. package/dist/cli/{knowledge-validator-wt2tcfg7.js → knowledge-validator-6p132rab.js} +2 -2
  56. package/dist/cli/{mcp-ky6xn6ys.js → mcp-j2zpg3pg.js} +1 -1
  57. package/dist/cli/{model-preflight-ajt55s59.js → model-preflight-0n10a18z.js} +26 -26
  58. package/dist/cli/{pending-delegations-wry31649.js → pending-delegations-qsvc60qb.js} +2 -2
  59. package/dist/cli/{pr-subscriptions-dsdjbfr4.js → pr-subscriptions-zx205zj2.js} +1 -1
  60. package/dist/cli/{pr-workflow-gate-0vcq1m95.js → pr-workflow-gate-04ypha5r.js} +26 -26
  61. package/dist/cli/{scan-cursor-1zgrg7kp.js → scan-cursor-6zb8bjmp.js} +2 -2
  62. package/dist/cli/{schema-q9xbwkec.js → schema-9spe6r4w.js} +1 -1
  63. package/dist/cli/{scope-persistence-4wwmytwh.js → scope-persistence-7b330a4k.js} +5 -5
  64. package/dist/cli/{server-q8ydxk7z.js → server-q54h8edd.js} +26 -26
  65. package/dist/cli/{skill-generator-b1eqcxej.js → skill-generator-k6gtr0fh.js} +8 -8
  66. package/dist/cli/{snapshot-coordination-init-0yva5015.js → snapshot-coordination-init-namz3ae3.js} +26 -26
  67. package/dist/cli/{speckit-checkoff-sh9w7j5b.js → speckit-checkoff-40evtzf3.js} +3 -3
  68. package/dist/cli/{workflow-wal-file-a2c8e920.js → workflow-wal-file-qjez91sg.js} +2 -2
  69. package/dist/cli/{worktree-collision-ownership-xr6crt8c.js → worktree-collision-ownership-k471ygv7.js} +2 -2
  70. package/dist/cli/{worktree-isolation-0126b5e7.js → worktree-isolation-5tbcb2j9.js} +26 -26
  71. package/dist/hooks/guardrails/cmd-delete-grammar.d.ts +17 -0
  72. package/dist/hooks/skill-propagation-gate.d.ts +13 -0
  73. package/dist/index.js +70 -70
  74. package/dist/turbo/lean/planner.d.ts +8 -5
  75. package/dist/turbo/lean/runner.d.ts +3 -0
  76. package/dist/turbo/lean/upstream-committed.d.ts +94 -0
  77. package/package.json +1 -1
@@ -95,11 +95,14 @@ export interface LeanTurboLanePlan {
95
95
  * redesign). When supplied, a cross-batch dependency (a `depends:`
96
96
  * upstream not present in this planning call's task set — typically
97
97
  * completed in a prior phase) is treated as satisfied **only** if
98
- * the predicate returns `true`. Production callers build this from
99
- * `buildIsUpstreamCommitted(directory)` so the check resolves to
100
- * "is there a `swarm(task <id>)` commit in HEAD". When undefined
101
- * the planner falls back to its legacy behavior (cross-batch deps
102
- * are implicitly satisfied) for backward compatibility.
98
+ * the predicate returns `true`. Production lean callers supply it via
99
+ * `resolveLeanRule3Predicate(directory, taskIds)`
100
+ * (`src/turbo/lean/upstream-committed.ts`) ONLY while an Epic is open
101
+ * for the project — `swarm(task <id>):` landing commits exist only
102
+ * under Epic Mode, so wiring it unconditionally would wrongly degrade
103
+ * every healthy pure-lean cross-phase dependent. When undefined (no
104
+ * open Epic) the planner falls back to its legacy behavior (cross-batch
105
+ * deps are implicitly satisfied) for backward compatibility.
103
106
  * @returns Complete lane plan with lanes, degraded tasks, and counters
104
107
  */
105
108
  export declare function planLeanTurboLanes(directory: string, phaseNumber: number, plan: {
@@ -29,6 +29,7 @@ import { attemptMergeBackFromDirty, getMergeStrategy, mergeLaneBranch, postMerge
29
29
  import { planLeanTurboLanes } from './planner';
30
30
  import type { LeanTurboDegradedTask, LeanTurboLane } from './state';
31
31
  import { loadLeanTurboRunState, saveLeanTurboRunState } from './state';
32
+ import { resolveLeanRule3Predicate } from './upstream-committed';
32
33
  import { assertCleanWorkingTree, provisionWorktree, removeLaneProfileFromDiskReal, removeWorktree } from './worktree';
33
34
  /**
34
35
  * Shape of the OpencodeClient session API used by the runner.
@@ -216,6 +217,8 @@ export declare class LeanTurboRunner {
216
217
  static _internals: {
217
218
  loadPlanJsonOnly: typeof loadPlanJsonOnly;
218
219
  planLeanTurboLanes: typeof planLeanTurboLanes;
220
+ /** Issue #2962: epic-gated Rule-3 upstream-commit predicate for lane planning. */
221
+ resolveLeanRule3Predicate: typeof resolveLeanRule3Predicate;
219
222
  acquireLaneLocks: typeof acquireLaneLocks;
220
223
  releaseLaneLocks: typeof releaseLaneLocks;
221
224
  loadLeanTurboRunState: typeof loadLeanTurboRunState;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Lean Turbo Rule-3 upstream-commit predicate (issue #2962).
3
+ *
4
+ * `planLeanTurboLanes` reserves an optional `isUpstreamCommitted` predicate
5
+ * (greenfield-smart Rule 3): when supplied, a cross-batch `depends:` upstream
6
+ * (a dep not present in this planning call's task set — typically completed in
7
+ * a prior phase) counts as satisfied only when the predicate proves the
8
+ * upstream's work landed in git. Before this module existed, neither
9
+ * production caller supplied it, so `makeDependencySatisfactionChecker`
10
+ * (`partition-common.ts`) treated every cross-batch dep as implicitly
11
+ * satisfied — a dependent task was dispatched in a parallel lane against work
12
+ * that never reached HEAD.
13
+ *
14
+ * The predicate is EPIC-GATED: `swarm(task <id>):` landing commits exist only
15
+ * under Epic Mode (`src/epic/plan-key.ts` → `task-landing.ts`/`residue-commit.ts`;
16
+ * `src/plan/manager.ts` performs no git writes). In pure Lean Turbo no such
17
+ * commits ever exist, so this helper returns `undefined` (the planner's
18
+ * byte-identical legacy branch) unless an Epic is open for the project.
19
+ *
20
+ * Evidence reuses the CURRENT Epic marker machinery — never a re-implemented
21
+ * subject scanner: coder landings are `git merge --no-ff` MERGE commits (the
22
+ * log read is merge-inclusive), task ids repeat across plans (the
23
+ * `Swarm-Plan:` trailer filters by planKey), and ids are scrubbed in subjects
24
+ * (`scrubTaskIdForGitSubject` mapping handled inside `findTaskCommits`).
25
+ *
26
+ * Failure taxonomy:
27
+ * - Unreadable Epic state → Epic reads as OFF (same direction as
28
+ * `isEpicOpenForProject`): `undefined` + operator-visible warn.
29
+ * - Epic closed between the reads → `undefined`, no warn (not an error).
30
+ * - Unborn HEAD (positively
31
+ * classified) → defined predicate, EMPTY committed set
32
+ * (nothing has landed yet).
33
+ * - Genuine git failure (log read
34
+ * fails with HEAD resolvable, or
35
+ * the probe itself fails) → disclosed permissive fallback
36
+ * (`() => true`): legacy degradation,
37
+ * NOT continued Rule-3 enforcement — wave
38
+ * ordering never covers cross-batch deps.
39
+ *
40
+ * This module is the Lean-owned side of a documented Lean→Epic seam (see
41
+ * `src/epic/README.md`, upstream consumers): `src/epic/lifecycle.ts` and
42
+ * `src/epic/markers.ts` import nothing from `src/turbo/lean/`, so the edge is
43
+ * acyclic, and Epic-off costs exactly the sentinel `existsSync` inside
44
+ * `isEpicOpenForProject` (Epic rule zero).
45
+ */
46
+ import { getOpenEpic, isEpicOpenForProject } from '../../epic/lifecycle.js';
47
+ import { epicCommitRange, findTaskCommits } from '../../epic/markers.js';
48
+ import * as logger from '../../utils/logger.js';
49
+ /** Three-way HEAD probe outcome. */
50
+ export type HeadCommitState = 'exists' | 'unborn' | 'unknown';
51
+ /**
52
+ * Bounded HEAD classification. `'exists'` when `git rev-parse --verify HEAD`
53
+ * resolves (exit 0). `'unborn'` ONLY when positively classified: rev-parse
54
+ * fails AND `git symbolic-ref -q HEAD` still resolves the branch (we are on a
55
+ * branch that simply has no commits yet — the structural unborn shape; stderr
56
+ * text varies by git version, so the ref probe is the classifier). Every other
57
+ * outcome — spawn error, timeout, other exit, detached/corrupt HEAD — yields
58
+ * `'unknown'` so a probe failure can never masquerade as "nothing committed".
59
+ */
60
+ declare function headCommitExistsReal(directory: string): HeadCommitState;
61
+ /**
62
+ * Warn once per (resolved directory, failure class). The class key keeps the
63
+ * two semantically distinct degradations from suppressing each other (#2962
64
+ * review PRR-006): an unreadable-Epic warning must not silence a later
65
+ * git-log-failure warning for the same project, and vice versa. The key is
66
+ * the canonical lexical root so path-spelling variants dedup to one entry.
67
+ */
68
+ declare function warnOnceReal(directory: string, failureClass: 'epic-unreadable' | 'rule3-git-failure', message: string): void;
69
+ /**
70
+ * Resolve the Rule-3 predicate for a Lean Turbo planning call.
71
+ *
72
+ * @param directory - Project root directory.
73
+ * @param taskIds - The plan's full task-id set (all phases) — the candidate
74
+ * cross-batch upstreams the marker read scans for. One bounded git
75
+ * call per planning pass; never on the plugin-init path.
76
+ * @returns `undefined` when no Epic is open for the project (pure-lean
77
+ * legacy semantics, byte-identical placement), otherwise a predicate
78
+ * answering "does this task id have a `swarm(task <id>):` landing in
79
+ * the open Epic's commit range for the current plan?".
80
+ */
81
+ export declare function resolveLeanRule3Predicate(directory: string, taskIds: readonly string[]): ((taskId: string) => boolean) | undefined;
82
+ /** DI seam (AGENTS.md invariant 7). Restore in `afterEach`. */
83
+ export declare const _internals: {
84
+ isEpicOpenForProject: typeof isEpicOpenForProject;
85
+ getOpenEpic: typeof getOpenEpic;
86
+ epicCommitRange: typeof epicCommitRange;
87
+ findTaskCommits: typeof findTaskCommits;
88
+ headCommitExists: typeof headCommitExistsReal;
89
+ warnOnce: typeof warnOnceReal;
90
+ criticalWarn: typeof logger.criticalWarn;
91
+ /** Test-reset surface for the module-level dedup registry (lifecycle.ts precedent). */
92
+ warnedDirectories: Set<string>;
93
+ };
94
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-swarm",
3
- "version": "7.200.11",
3
+ "version": "7.200.13",
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",