Commit Graph
9072 Commits
Author SHA1 Message Date
randRuFlo 9ff0ae3d69 fix(scripts): unbiased canary id generation in the compact live driver (CodeQL)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 17:48:37 -04:00
randRuFlo f9627d8f3b docs(mods): live canary evidence for compactCarry (ADR-451 item 7) and ADR-488 compactKeep design
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 17:48:37 -04:00
rUv ce18551073 Merge pull request #3943 from proffesor-for-testing/fix/console-leftovers-3822-3823
fix(console): bound CLI numbers at the reader, keep unreadable counts visible, and a resume by Claude keeps hand-out counts
2026-10-10 12:19:26 -07:00
rUv 570392602a Merge pull request #3952 from ruvnet/fix/user-settings-pin-home-helpers
fix(init): pin user-level hook and statusline commands to $HOME helpers (security review in PR comments)

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 11:54:50 -07:00
rUv fce696e51e Merge pull request #3948 from ruvnet/fix/plugin-registry-trust-fail-closed
fix(plugins): fail closed when the plugin registry is not verified (security review in PR comments)

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 11:54:46 -07:00
rUv 3a03b524c2 Merge pull request #3969 from rudycelekli/fix/active100-mcp-task-cancel-20261010
fix(mcp): preserve cancellation when an aborted executor resolves
2026-10-10 11:50:02 -07:00
rUv 3d2c16dd23 Merge pull request #3986 from ruvnet/sec/optional-modules-own-install
fix(cli,plugins): resolve executed optional modules from the tool's own install (replaces #3954; security review in PR body)

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 11:44:57 -07:00
rUv 559ccedc34 Merge pull request #3977 from ruvnet/dream/2026-10-10-performance
dream(performance): #3976 fallbackLouvain() communityTotal O(n²)→O(n·deg) incremental fix (evaluated, ACCEPT)
2026-10-10 10:20:24 -07:00
rUv c252cb676f Merge pull request #3980 from Devesh-Maheshwari/fix/status-agents-list
fix(cli): show registered agents in status agents
2026-10-10 09:19:14 -07:00
rUv c6bb662f0b Merge pull request #3946 from proffesor-for-testing/fix/console-mission-create-transient
fix(console): mission create retries only real lock timeouts, undoes and reads back on abort, reports run outcomes in lastResult
2026-10-10 09:05:38 -07:00
rUv ca74bd4f79 Merge pull request #3967 from rudycelekli/fix/active100-ruflo-screen-20261010
fix(tasks): synchronize workers when task_update reassigns a task
2026-10-10 08:03:12 -07:00
randRuFlo 9a70d78e5a chore(console): 0.42.2 version and changelog for #3822 and #3823
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 10:58:58 -04:00
Dragan SpiridonovandRuflo & AQE 31c288db71 fix(console): bound CLI numbers at the reader, keep unreadable counts visible, and a resume by Claude keeps hand-out counts
Leftovers of #3817/#3822 and #3818/#3823.

Numbers from CLI JSON (#3822). JSON.parse('1e999') is Infinity; a count can
also be negative, fractional or absurd. Bounded where read with data/safe.ts
countOf / ratioOf and a new measureOf (finite, within +-1e12):
- secure.ts scanReader: every severity count and the total are at least
  the listed findings, so a summary never reads CLEAN beside a listed
  finding. A count or total the tool printed but no reader can trust stays
  UNKNOWN (SecFindings.unreadable / isTotalUnknown), with the listed
  findings only as its lower bound: "critical ?" / "high ≥2 ?",
  "? findings (total unreadable)", COUNTS UNREADABLE. securityBand() is the
  one rule for the band (views/bar.ts) and the menu badge (menu-style.ts):
  it warns on high/critical ("N+" when anything is unknown) and on any
  unknown count or total. Threat confidence via ratioOf, composition score via measureOf.
  The verdict-exit judgement (#3934, SCAN_FOUND/countsWith) is unchanged.
- Same class swept in perf.ts, mh-lab.ts (labLines cells, gepa chars,
  genome ids, receipts), neural.ts, memory-lines.ts,
  data/evolve.ts, data/research.ts and data/cli.ts.

Mission resume (#3823). setPaused takes who resumed. The mission-resume
palette entry built inside Claude's console_run (state.control.viaModel)
resumes as 'model': hand-out counts are kept and an advisor stop-the-line
is not re-opened, so an exhausted task gets no new billed hand-out. The
person's resume (page buttons, palette, a typed /ruflo run) still gives
every task its hand-outs back.

Co-Authored-By: Ruflo & AQE
Claude-Session: https://claude.ai/code/session_01CGoza3gyxBjpaiMPhGHcHs
2026-10-10 10:57:58 -04:00
Dragan Spiridonov 16bd4ac948 fix(init): re-pin every legacy project-helper command form in user scope
pinToUserHelpers() only recognised the #1943 probes, the exact git-root
statusline and the git-root ESM import without argv.splice, so
`init --upgrade --settings` on the home directory left older shipped forms
that always run the opened project's helper:
- pre-#1943 `sh -c 'exec node "${CLAUDE_PROJECT_DIR:-.}/.claude/helpers/<x>" <sub>'`
  and the Windows `cmd /c node %CLAUDE_PROJECT_DIR%/.claude/helpers/<x> <sub>`;
- ADR-059 git-root node -e forms (CJS and ESM, with argv.splice);
- relative `node .claude/helpers/<x> [sub]` hooks and statusline.

It now re-pins any command whose target is a known ruflo helper under
.claude/helpers reached through CLAUDE_PROJECT_DIR, %CLAUDE_PROJECT_DIR%,
`git rev-parse --show-toplevel` or a relative path, keeping the subcommand.
Commands with redirects/chaining, other scripts, or already pinned to HOME
are left alone.

executeUpgrade() created a missing settings.json with
generateSettings(DEFAULT_INIT_OPTIONS), whose targetDir is the module-load
cwd; it now passes the upgrade's targetDir.

Tests: one case per legacy form, a user-authored/already-pinned case, an
upgrade-merge case, and an executeUpgrade missing-settings case.
2026-10-10 16:51:20 +02:00
Dragan Spiridonov d1d9df0891 fix(init): pin user-level hook and statusline commands to $HOME helpers
Settings written to ~/.claude/settings.json apply to every project the user
opens. The #1943 probe ran `$CLAUDE_PROJECT_DIR/.claude/helpers/<script>`
whenever that file existed, so in user-level settings the opened project
decided which helper code ran.

helper-commands.ts now owns the hook/statusline command forms:
- project-level settings keep the #1943 project-first probe, unchanged;
- user-level settings (init target is the home directory) get commands
  pinned to $HOME/.claude/helpers with no project lookup;
- `init --upgrade --settings` on the home directory re-pins the probe and
  git-root forms ruflo generated earlier and leaves user-authored commands.

The #1943/#1948 fix invariants now point at helper-commands.ts.

Test: settings-user-level-helpers.test.ts (8 cases).
2026-10-10 16:51:20 +02:00
Dragan Spiridonov 5bd949dfde fix(plugins): review follow-ups for registry trust fail-closed
- smoke-plugin-registry-signature.mjs: follow the verifier rename to
  registrySignatureFailure and require the fail-closed call site
  `if (failure) return this.fallbackToBuiltIn(`, keeping full #1922 coverage.
- verifyEd25519Signature verifies in RFC 8032 strict mode, and
  isPlaceholderSigningKey rejects every small-order or off-curve key, not
  only the all-zero one.
- An unverified registry claims no official plugins and no verified
  authors; MCP transfer_plugin-* results carry the registry status.
- Tests no longer assume the shipped trust anchor stays a placeholder.
- Document the strict-mode asymmetry for unlisted packages in --help.
2026-10-10 16:51:15 +02:00
Dragan Spiridonov c4c66b2c7b fix(plugins): fail closed when the plugin registry is not verified
The live plugin registry CID is unsigned, so discovery always fell back to
the built-in plugin list, whose entries all claim trustLevel "official".
`plugins install` passed that claim on as registry trust, which runs npm
lifecycle scripts and skips the permission gate (#3557) for any listed
plugin, with nothing actually verified.

- Discovery reports `verified` + `unverifiedReason`; only a registry whose
  signature verifies against the pinned key keeps its trust labels. The
  built-in fallback and a registry fetched with requireVerification off are
  reported with every entry as 'unverified'.
- A placeholder pinned key (missing, malformed, all-zero) is never used to
  verify: the all-zero key is small-order and accepts a forged signature.
- CLAUDE_FLOW_STRICT_PLUGINS=true (ADR-145): no fallback to the built-in
  list, and `plugins install` refuses unless --allow-unverified is passed.
- `plugins install` passes registry trust, permissions and checksum only
  for a verified registry entry; `plugins list`/`info` show registry status.
- PluginIntegrityVerifier (@claude-flow/security) skips placeholder anchors,
  such as the all-zero one in trust-anchors.json, and verifies in RFC 8032
  strict mode, which rejects small-order keys.
2026-10-10 16:51:15 +02:00
rUv 24774b9087 Merge pull request #3951 from ruvnet/fix/plugin-upgrade-trust-gate
fix(plugins): apply the #3557 trust policy on plugins upgrade (security review in PR comments)

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 07:51:09 -07:00
rUv c75a1ed34c Merge pull request #3955 from ruvnet/fix/node24-better-sqlite3-abort
fix(memory): open AgentDB with our better-sqlite3 so Node 24 does not abort
2026-10-10 07:50:41 -07:00
rUv 2145a31f0d Merge pull request #3958 from ruvnet/fix/agentic-flow-root-import
fix(cli,integration): never import the agentic-flow root entry (it runs agentic-flow's CLI)
2026-10-10 07:50:39 -07:00
rUv 840c716115 Merge pull request #3947 from ruvnet/chore/retire-legacy-agentic-qe-plugin
chore(plugins): retire legacy agentic-qe shim and fabricated demo registry entry
2026-10-10 07:50:35 -07:00
randRuFlo eadc4adfe3 fix(cli,plugins): stop plugin-dir walk-ups at the node_modules boundary; drop embeddings hunk
A project-local install lives at <project>/node_modules/@claude-flow/cli, so the
8-level walk-up from import.meta.url used by the testgen/metaharness locators and
doctor crossed node_modules and reached <project>/plugins/ruflo-*, i.e. code the
opened repository supplies. ownInstallAncestors()/ownPluginDirs() now stop at the
first node_modules directory. Source-checkout dev layouts are unaffected.

The @claude-flow/embeddings hunk is dropped from this change: that package cannot
ship from main until its alpha branch is reconciled, so it needs its own change.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 10:45:48 -04:00
Dragan Spiridonov 4c95a6a1b6 fix(cli,plugins): resolve executed optional modules from the tool's own install
The CLI, two MCP tools and two plugin scripts imported or ran code found
relative to the cwd, which is the opened project:
- doctor (metaharness check), `metaharness` command and metaharness MCP
  tools: plugins/ruflo-metaharness/scripts under the cwd;
- testgen MCP tools: plugins/ruflo-testgen/scripts under the cwd, reached
  on every published install because that plugin is not bundled;
- init: <cwd>/node_modules/@claude-flow/codex;
- embeddings: <cwd>/node_modules, <cwd>/../node_modules and a fixed
  /workspaces/claude-flow path for agentic-flow;
- ruflo-ruos ledger: the CLI's mcp-client resolved from the cwd;
- cost-tracker compact.mjs: @claude-flow/integration resolved from the cwd.

Each now resolves from the tool's own install (module location /
createRequire(import.meta.url)), plus the user's marketplace checkout for
the plugin scripts. The project remains the data/scoring target.

Test: optional-module-resolution-trust.test.ts (10 cases, all fail on main).
2026-10-10 10:45:48 -04:00
rUv 4f91a6e363 Merge pull request #3968 from rudycelekli/fix/active100-workflow-validator-20261010
fix(workflows): validate the agent bindings used by the runtime
2026-10-10 07:42:44 -07:00
rUv ad916b455b Merge pull request #3970 from rudycelekli/fix/active100-sampling-timer-20261010
fix(mcp): clear sampling deadlines after provider settlement
2026-10-10 07:42:41 -07:00
rUv aade0c3a7e Merge pull request #3974 from rudycelekli/campaign/ruflo-resource-cache-invalidation-20261010
fix(mcp): invalidate notified resource caches without subscribers
2026-10-10 07:42:38 -07:00
rUv 9ee164db34 Merge pull request #3975 from rudycelekli/campaign/ruflo-tool-override-index-20261010
fix(mcp): remove stale discovery indexes when overriding tools
2026-10-10 07:42:35 -07:00
randRuFlo 3c21c3ad1b test(cli): differential test for fallbackLouvain vs the pre-fix rebuild
Adds 1800 seeded random graphs (unit, small-integer and fractional weights,
disconnected, self-loops, parallel edges, unknown endpoints) asserting exact
equality with the frozen pre-fix implementation. Mutation-checked: dropping
the subtract-from-source update fails all three groups.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 10:42:10 -04:00
randRuFlo b35caec0f3 chore(console): 0.42.1 version and changelog for #3945
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 10:38:02 -04:00
Dragan SpiridonovandRuflo & AQE b9086fc471 fix(console): mission create retries only real lock timeouts, undoes and reads back on abort, reports run outcomes in lastResult
On a project whose policy state is large, every `ruflo mcp exec` waits on the
policy state lock and some calls fail with policy-state-lock-timeout
(#3164, #3892). Mission create made 15 sequential task_create calls; one
transient failure aborted the whole mission, cleanup cancels were
fire-and-forget (orphan pending tasks while the page said they were
cancelled), the CLI mission record was left planned, and the reason was never
shown. The outcome of a run that reports for itself (mission create, ADR
writes) never reached console_state.lastResult. resultOf also read the
`Parameters:` object the CLI prints before any `Result:` line as the answer.

- data/mcp-run.ts: read only after the CLI's own `Result:` line (string-aware
  bracket matching); the failure reason from data/failure.ts. Transient only
  on exactly policy-state-lock-timeout, the caller's own structured time
  limit, or a non-zero exit with stdout and stderr both empty. Any answer,
  any other error line (a denial mentioning a timeout, command not found)
  and any host rejection are final.
- mission-create.ts: retries after 1, 2, 4 s. task_create has no request id:
  after each wait, and once more after the last failed try (a lost answer),
  the store is read for exactly this step's task (description and both
  tags carry the new mission id; a 5 min skew window); one is used, several
  stop the chain, an unreadable store stops a retry. Strict time: no call,
  wait or read starts after its deadline (3 min, cleanup 2 min more), each is
  cut to the time left, and a call the host never answers is let go then.
  One create at a time per console; unique request ids. On abort: cancel
  every open task of the mission in the store (not only acknowledged ones),
  cancel the mission record (again at the revision a conflict names; also
  when mission_plan is refused), then READ BACK the store and the mission
  observation and report what they show, and what was left for lack of time.
- ActionSpec.run may answer a RunReport; the runner keeps it as the console
  outcome when the run ends, unless the outcome slot was replaced meanwhile
  (another action reported; then it goes to the Events feed). The
  verdict-exit judgement in runner.ts is unchanged. Mission create and ADR
  init/propose/status writes answer theirs.
- tests: real `ruflo mcp exec` transcripts (ruflo 3.56.1) as fixtures.

Co-Authored-By: Ruflo & AQE
Claude-Session: https://claude.ai/code/session_01CGoza3gyxBjpaiMPhGHcHs
2026-10-10 10:35:47 -04:00
Rudy Celekli 02f4c87dd9 fix(tasks): validate reassignment and preserve retained worker ownership
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
2026-10-10 10:30:31 -04:00
Devesh Maheshwari 33d063de48 fix(cli): show registered agents in status agents 2026-10-10 03:18:15 -05:00
Dragan Spiridonov a46e49cbc5 test(memory): apply each agentdb mock change before queueing the next
vitest applies queued doMock/doUnmock entries for one path in resolve order,
so an afterEach doUnmock could win over the next test's doMock and the
stale-lock retry test saw the real agentdb (CI: 0 fake instances).
2026-10-10 10:05:30 +02:00
Dragan Spiridonov c536e77fda fix(memory): reroute the stale-lock retry AgentDB too; memory 3.0.4
Rebased onto main, where ControllerRegistry and AgentDBBackend build AgentDB
inside withAgentdbLockRecovery(); useHostSqliteDriver() now runs inside that
closure right after each `new AgentDB`, so the instance a stale-lock retry
creates also opens its handle with getHostSqliteDriver(). Tests drive the
retry path for both sites.

@claude-flow/memory 3.0.3 was published by 3.56.3 without the driver, so
this ships as 3.0.4 and the CLI pins 3.0.4. The #3693 memory-owner test
now reports a skip when no native addon is available instead of passing.
2026-10-10 09:49:07 +02:00
Dragan Spiridonov 197bfb7272 test(cli): shared-sqlite identity test follows the installed @claude-flow/memory
The root CI job resolves the published @claude-flow/memory 3.0.2, which does
not route AgentDB through its own driver; there the owner must stay agentdb.
2026-10-10 09:44:50 +02:00
Dragan Spiridonov d4458abdff fix(memory,cli): keep the CLI's better-sqlite3 handles on AgentDB's copy
Follow-up to the AgentDB driver change. shared-sqlite.ts (#3693/#3883)
resolved better-sqlite3 from agentdb's location so CLI handles share
AgentDB's native copy. With AgentDB now opened through
@claude-flow/memory's better-sqlite3, that put graph-edge-writer, the
memory-initializer repair paths, backup restore, distillation, tuning and
the attestation log back on agentdb's nested 11.x: `hooks post-task` still
loaded both addons (and aborted on Node 24), and mixing copies on one file
can delete the -wal/-shm sidecars under AgentDB's live handle.

- @claude-flow/memory exports getHostSqliteDriver(), the one source of the
  constructor; useHostSqliteDriver() opens AgentDB with it and reports
  whether it replaced the loader.
- shared-sqlite resolves better-sqlite3 from @claude-flow/memory when the
  installed memory carries agentdb-native-driver.js, else from agentdb as
  before, so either memory version keeps one copy per process.
- @claude-flow/memory 3.0.3, CLI pin 3.0.3 (leaf-publish gate).

Tests: identity between AgentDB's handle constructor and
loadBetterSqlite3(); #3693 owner model for the memory holder and the
pre-3.0.3 fallback; both AgentDB construction sites; routing against a
real nested copy; a drift guard on agentdb's initializeDatabase contract.
2026-10-10 09:44:50 +02:00
Dragan Spiridonov b1645c6f47 fix(memory): open AgentDB with our better-sqlite3 so Node 24 does not abort
On Node 24.19+, `memory search`, `memory_store` and the AgentDB MCP tools
abort intermittently with `Assertion failed: (env) != nullptr` in
node::RemoveEnvironmentCleanupHook, from Statement::~Statement() in
agentdb/node_modules/better-sqlite3 (exit 134 / "Connection closed").

agentdb 3.0.0-alpha.x pins better-sqlite3 ^11.8.1. 11.x has no Node 24
prebuild, so npm compiles it against the local Node headers, and 24.19+
headers carry a partial ObjectWrap cleanup-hook backport
(nodejs/node#65446) that aborts when a Statement is collected outside an
Environment. Our own better-sqlite3 12.x ships a Node 24 prebuild built
before that header change. The `better-sqlite3` override in the published
package.json files does not reach agentdb: npm ignores overrides in a
dependency, and `npm i -g ruflo` still installs the nested 11.10.0.

ControllerRegistry and AgentDBBackend now replace the AgentDB instance's
initializeDatabase() so its handle is opened with this package's
better-sqlite3; AgentDB's own loader stays as the fallback and forceWasm
is untouched.
2026-10-10 09:44:50 +02:00
ClaudeandRuFlo 985bdcddac dream(performance): #3976 fix CI timeout on the new complexity-growth test
CI: "Test Suite (ubuntu-latest)" failed on 1a5c8b83 -- root-caused, fixed.

ci-test-ratchet's summary showed an opaque `Error: STACK_TRACE_ERROR` for
"scales near-linearly with node count..." Reproduced the exact CI
invocation locally (CI=1 node node_modules/vitest/vitest.mjs run ... from
repo root, the same command scripts/ci-test-ratchet.mjs spawns, after
`npm install` at root) and got the real error: the legacy O(n^2)
algorithm's warmup+3 trials at n=1600, for both algorithms at both sizes,
exceeded vitest's default 5000ms per-test timeout on this invocation path
-- the same failure class PR #3754 (2026-10-05) hit and fixed the same way.

Fix: explicit 30000ms timeout on the test, trial count 3->2 to trim real
wall-clock cost further. Re-verified against the exact CI invocation:
4/4 tests pass, ~3s total (comfortably inside the new budget). Measured
growth ratios in this run are consistent with the range already disclosed
in the gist/issue/PR -- no change to the reported evidence, only to the
test's own timeout margin.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01JL2GEEWf9ezZo1X1wQ2Ls6
2026-10-10 06:47:01 +00:00
ClaudeandRuFlo 1a5c8b834e dream(performance): #3976 update dream-cycle ledger for 2026-10-10
Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01JL2GEEWf9ezZo1X1wQ2Ls6
2026-10-10 06:32:49 +00:00
ClaudeandRuFlo 0aa99cd5aa dream(performance): #3976 fallbackLouvain() communityTotal O(n^2)->O(n*deg) incremental fix
fallbackLouvain()'s local-moving loop rebuilt a communityTotal map via a
full scan of every node, once per node, once per pass (O(n^2) per pass),
instead of maintaining it incrementally like networkx's Stot/python-louvain's
status.degrees (O(1) per accepted move). loadRuVector() never resolves real
native acceleration against any published ruvector/@ruvector/wasm version,
so this fallback is the only community-detection path that ever runs,
reachable via the shipped `claude-flow analyze modules` command.

New test file proves byte-identical correctness against a frozen copy of
the pre-fix algorithm plus a complexity-growth regression guard; a
standalone tsx probe shows per-N speedup growing 2.1x->37.5x as N grows
8x, the signature of a complexity-class fix. Full @claude-flow/cli suite
and tsc --noEmit byte-identical to baseline outside the new test file.

Evaluated: ACCEPT. Independently adversarially reviewed: CONFIRMED, no
blocking caveats. Darwin skipped (binary correctness-preserving fix, no
tunable parameter).

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01JL2GEEWf9ezZo1X1wQ2Ls6
2026-10-10 06:28:09 +00:00
Rudy Celekli f9261f0b9b fix(mcp): invalidate notified resources without subscribers
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
2026-10-10 00:06:59 -04:00
Rudy Celekli 55e439d063 fix(mcp): remove stale discovery indexes when overriding tools
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
2026-10-10 00:06:59 -04:00
Rudy Celekli 819b757a8a fix(mcp): clear sampling deadlines after provider settlement
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
2026-10-09 22:46:39 -04:00
Rudy Celekli a0866ccf24 fix(mcp): preserve cancellation when an aborted executor resolves
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
2026-10-09 22:46:38 -04:00
Rudy Celekli 7ce0efe815 fix(workflows): validate the agent bindings used by the runtime
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
2026-10-09 22:46:36 -04:00
Rudy Celekli 3b66a3abbd fix(tasks): synchronize workers when task_update reassigns a task
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
2026-10-09 22:46:34 -04:00
rUv 6c046548e2 Merge pull request #3957 from ruvnet/feat/ruvnet-brain-grounding
feat(console,mods): optional detect-only ruvnet-brain grounding (ADR-487)
2026-10-09 19:40:35 -07:00
rUv 7819992df6 Merge pull request #3961 from ruvnet/release/swarm-3.0.2
chore(release): @claude-flow/swarm 3.0.2
@claude-flow/swarm@3.0.2
2026-10-09 17:53:48 -07:00
randRuFlo c09d44cfd5 chore(release): @claude-flow/swarm 3.0.2 (carries #3929 broadcast-retry fix)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 20:40:29 -04:00
rUv 5696d1e6b2 Merge pull request #3929 from ruvnet/dream/2026-10-09-swarm
dream(swarm): #3928 MessageBus broadcast-retry re-queues under real subscriber, not 'broadcast' sentinel (evaluated, ACCEPT)
2026-10-09 15:22:16 -07:00