Commit Graph

531 Commits

Author SHA1 Message Date
rUv df87b0db33 chore(release): 3.41.2 — memory index protection, daemon consent, sibling disclosure (#3283)
#3224 — a curate may now grow or reorder MEMORY.md and never shrink it. The
bridge rebuilt the index from its own topic files and overwrote whatever was
there; the #1556 guard only skipped the write when nothing matched, but the
bridge writes the first topic file itself, so after the first insight a
hand-maintained index was replaced with a stub. A smaller generated view now goes
beside the file instead, and the bridge says it declined.

#3278 — autoStart:false is honoured. The disable check read
claude-flow.config.json daemon.autostart while init generates
.claude/settings.json claudeFlow.daemon.autoStart: a different file and a
different capital S, so the setting a fresh project ships was never consulted,
under a comment saying it exists to prevent unintended token consumption.

#3228 (half) — retrieve, search and an empty list now disclose the sibling
AgentDB store. 3.41.1 shipped that disclosure in `memory list` alone, so the
other three kept returning a confident negative while the rows sat in the file
they do not read.


Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67
2026-09-10 19:45:24 +00:00
rUv cda8b04f6a chore(release): 3.41.1 — memory path identity and Seraphina truncation (#3273)
Two fixes, both found by someone hitting them rather than by us.

#3196: an explicit database path now selects that database. The bridge cached one
registry globally, so the first caller decided the file for the whole process and
every later caller's --path or CLAUDE_FLOW_DB_PATH was accepted and then silently
ignored. A CLI write and an MCP write landed in two files, both reporting success,
and neither interface could see the other's rows. The 'memory list' command also
stopped
printing a confident total for one store while rows sat unread in its sibling —
it now names the store it did not read. Reported downstream by pacphi/agentic-kit#213.

#3267: Seraphina no longer passes a truncated reasoning dump off as coordination
guidance. The routed model spent its whole token budget reasoning and never
emitted its JSON, and the empty result read as "the swarm needs nothing" — the
one conclusion a coordinator must never reach by accident.


Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67
2026-09-10 14:39:52 +00:00
ruv cb10bf617e chore(release): 3.41.0 — open swarm federation CLI/MCP, channels, Seraphina
@claude-flow/cli, claude-flow, ruflo -> 3.41.0 (lockstep).

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_015y2UjPSd3VX1CYnPstZJ5D
2026-09-10 07:59:09 -04:00
rUv 6f29819fe6 fix(metaharness): bump the darwin pin to 0.10.2 so pin-drift and clean-install go green on main (#3262)
main is red on two required gates: @metaharness/darwin is declared ~0.9.0 while
npm latest is 0.10.2, so check-metaharness-pins reports STALE. The drift predates
#3256 — it merged with these gates already failing — but it is on main now.

Checked the bump rather than assuming it: unpacked both tarballs and compared.
0.9.0 and 0.10.2 ship the same bin (metaharness-darwin), the same exports (. and
./gepa), and the same gepa symbols this repo imports (loadCand6Genome,
CAND6_GENOME_PATH). Nothing we call was removed.

MH_DARWIN_PIN moves with it, since the mechanical oracle shells out to
npx @metaharness/darwin@<pin> and an out-of-range pin is its own drift failure.
pnpm lockfile regenerated in the same commit — v3 is a separate pnpm workspace
and a stale lockfile takes the frozen-lockfile jobs down.

Verified: check-metaharness-pins exits 0 with every pin reported current.


Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67
2026-09-10 03:53:20 +00:00
rUv dbf450a927 feat(federation): ruflo CLI + MCP integration for x.ruv.io, and Seraphina (swarm queen) (#3256)
* feat(federation): ruflo CLI + MCP integration for x.ruv.io, and Seraphina (swarm queen)

Integrate the open swarm federation into ruflo itself, and add Seraphina —
a primary-coordinator / swarm-queen guidance tool in the style of the ruOS
assistant terminal (invoked from a terminal or any MCP client).

MCP tools (src/mcp-tools/x-federation-tools.ts), registered in the barrel and
the in-process registry so `callMCPTool` and the MCP server both see them:
  x_federation_sync / roster / claims / registry   (open reads)
  x_federation_publish / invite_mint / admit       (gateway-identity writes,
    require RUFLO_X_ADMIN_TOKEN; fail closed with no network call)
Each description follows ADR-112 ("Use when … wrong because …").

Seraphina (src/mcp-tools/seraphina-tools.ts): `seraphina_guidance { goal }`
gathers the live roster, claims board and recent messages from the x.ruv.io
gateway, compacts them (dedupe by from|type, cap 15 — a cheap tier drowns in
repeated PeerHellos), and asks the cognitum meta-llm gateway
(https://api.cognitum.one/v1/messages, model cognitum-auto by default with a
tier override) using a queen system prompt that treats message content as
data, respects one-owner-per-resource claims, and returns
{ guidance, proposals[], risks[] }. Proposals are advisory. JSON is extracted
by slicing the outermost object so fenced/prose-wrapped answers still parse.
Key from SERAPHINA_METALLM_KEY (GCP secret seraphina-metallm-api-key).

CLI: `ruflo federation sync|roster|claims|registry|invite|admit|publish`
(src/commands/federation.ts), thin over the same tools.

Skill: .agents/skills/open-federation/SKILL.md documents CLI, tools,
Seraphina, the claims rules, the canonical NIP-42 relay-tag gotcha, and
onboarding.

Tests: 11 (x-federation: RPC shaping, SSE parse, resource mapping, fail-closed
admin gating, isError surfacing; seraphina: registration, fail-closed key,
context gathering + queen prompt + x-api-key, tier override, fenced-JSON
extraction). Project typechecks at 0 errors.

Verified live: Seraphina against the real 3-node federation returned 3
structured proposals + 4 risks via cognitum-auto (routed to a cheap tier).

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67

* fix(federation): ADR-125 env-var precedence — URL config takes a flag/arg, credentials registered env-only

The env-var-precedence audit correctly flagged the new process.env reads.
Config URLs now have a precedence path: `ruflo federation --gateway` feeds a
`gatewayUrl` tool arg (and Seraphina takes `metaLlmUrl`/`gatewayUrl`) that
wins over RUFLO_X_GATEWAY_URL / SERAPHINA_METALLM_URL, documented per ADR-125.
Credentials (RUFLO_X_ADMIN_TOKEN, SERAPHINA_METALLM_KEY) are registered as
env-only escape hatches with rationale: a secret must never be a CLI flag.
+1 test (arg precedence, arg not forwarded upstream). Audit passes locally.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67

* feat(federation): `ruflo federation join --code` — self-service invite access with your own key

The user-facing path into the open swarm. Decentralized by design: the user
generates/holds THEIR OWN Nostr key (~/.ruflo/nostr.key, 0600), redeems an
invite code with a NIP-98-signed claim directly against the relay (no admin in
the loop), proves membership via NIP-42, and can then publish as themselves.
The gateway never signs for a user.

- src/mcp-tools/x-federation-join.ts: x_federation_join { code, relayHttp?,
  relayWs?, keyFile? } — validates the code shape before any network call,
  loads/creates the key, NIP-98 claim, NIP-42 verify, returns pubkey + role.
  ADR-125: args take precedence over RUFLO_X_RELAY_HTTP / RUFLO_X_RELAY_WS /
  RUFLO_NOSTR_KEY_FILE.
- CLI: `ruflo federation join --code v2.…`
- nostr-tools added as an optionalDependency (secp256k1/Schnorr is not in
  node:crypto); the tool degrades with an install hint when absent. pnpm
  lockfile regenerated in this PR (frozen-lockfile CI).
- 4 tests: 0600 key create/reuse, valid NIP-98 header (kind 27235, verifies,
  bound to url+method+payload hash), malformed code rejected pre-network,
  ADR-112 description. Suite: 16/16; tsc 0; env-var audit passes.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67

* fix(federation): default relay -> wss://relay.ruv.io; join test tolerates missing nostr-tools

- x-federation-join defaults now point at the canonical relay.ruv.io host (Cloud Run
  domain mapping for buzz-relay); the raw run.app host stays routable for old clients.
- Validate the invite-code shape before the optional-dependency check so a bad code
  fails fast whether or not nostr-tools is installed.
- The root Test Suite runs the CLI tests via root npm ci, which never installs the
  CLI's optionalDependencies: the crypto cases are it.skipIf(!nostr-tools) so the
  file no longer trips the CI test ratchet.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67
2026-09-10 02:51:40 +00:00
ruv 2629de628b chore(release): 3.39.3 -> 3.40.0
Ship cross-host federation (agentbbs) + claims. New MCP tools:
federation_bbs_{identity,peer_add,peers,serve,register,publish,sync,watch}.
Signed Ed25519 envelopes, registry-anchored pinning, HTTP pull transport.
Includes the memory-search recall fix (#3252).

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67
2026-09-09 19:15:49 -04:00
ruvnet e855ae2e4e chore(release): 3.39.2 -> 3.39.3
Ships #3250: the agentbbs MCP tools gated on `await import('agentbbs')`, but the
published package is a CLI-only launcher with no importable entry point, so all
four federation_bbs_* tools reported degraded regardless of install state.
Replaced with a subprocess probe.

Includes the follow-up hardening: the probe's shell is now gated to win32
instead of always on. The probed binary comes from AGENTBBS_BIN, and under a
shell that argument is command-interpreted, so a crafted value executed a
trailing command (verified locally). POSIX now spawns without a shell.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013u4pmL9ZUAXb6usVQgNo67
2026-09-09 16:26:04 -04:00
rUv 498a238799 fix(security): make the fast-uri CVE fix actually reach shipped packages (#3222) — 3.39.2 (#3247)
* fix(security): make the fast-uri CVE fix actually reach shipped packages (#3222)

3.39.1 bumped fast-uri only in the ROOT package.json. Post-publish validation
caught that this never reached users: a fresh `npm install ruflo@3.39.1`
still resolved fast-uri@3.1.5, squarely inside the advisory range
(GHSA-5jgf-p345-68v8, high, CVSS 7.5, >=3.1.3 <3.1.6).

Root cause: v3/@claude-flow/cli/package.json carried its own hard pin
"fast-uri": "3.1.5" in dependencies, and that is the package that actually
ships. The root bump did not override it -- the #2112 lesson recorded in
CLAUDE.md, that root overrides do NOT propagate to the published ruflo
wrapper, applies to the CLI package too.

- v3/@claude-flow/cli: fast-uri 3.1.5 -> ^3.1.6 (the shipping dependency)
- ruflo: add "fast-uri": ">=3.1.6" override so the wrapper cannot regress
  independently of the CLI

Verified by fresh-installing the published tarball rather than trusting the
lockfile: that is what surfaced the gap in the first place.

Refs #3222, #2112

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01JJnDvpYYk2rTvjkudQUoCk

* fix(ci): refresh v3 pnpm lockfile for the fast-uri bump

The 3.39.2 fast-uri change touched v3/@claude-flow/cli/package.json but only
the npm lockfile was regenerated. v3/ is a separate pnpm workspace and CI runs
pnpm install --frozen-lockfile with working-directory: v3, which rejected the
mismatch (ERR_PNPM_OUTDATED_LOCKFILE) and cascaded into 34 failing checks --
every one an install failure, not a real regression.

Diff is 6 lines, fast-uri only: specifier 3.1.5 -> ^3.1.6, resolved 3.1.7.
Verified pnpm install --frozen-lockfile now exits 0.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01JJnDvpYYk2rTvjkudQUoCk
2026-09-09 13:29:58 +00:00
rUv d55b1bfeac fix(memory): stop reporting a gated native bridge as the active backend (#3228) + fast-uri CVE (#3245)
* fix(memory): stop reporting a gated native bridge as the active backend (#3228)

On Windows the #3024 kill-switch makes getRegistry() return null, so every
memory read/write silently falls back to the sql.js store (memory.db) instead
of the AgentDB corpus (agentdb-memory.db) the bridge would have opened. The
reporter measured the consequence: a canary store/retrieve round-trip SUCCEEDS
because both halves use the same unintended file, while an existing live-store
key returns found:false against 31,673 real rows.

The status surface hid the substitution. getHNSWStatus() gated its bridge
branch on whether the bridge MODULE was loaded -- which it is, even when the
registry is gated off -- so describeBackend() printed "sqlite (bridge,
brute-force cosine)" for a store the bridge never touched.

Gate on whether the bridge is permitted to be the active path rather than on
whether the module resolved. shouldDisableNativeBridge() is sync and a pure
function of platform + env, so it is a faithful discriminator and needs no
warm registry. describeBackend() now names the gate and its reason, so an
upgrade that changes which file receives writes says so.

This does not fix the opt-in allocation abort (#2948) or reroute the fallback
to the AgentDB corpus; both need Windows validation. It makes the silent case
loud, which is what the report asks for first.

Also bumps fast-uri 3.1.5 -> ^3.1.6 (resolves 3.1.7), clearing
GHSA-5jgf-p345-68v8 (high, host confusion via skipped IDN canonicalization)
and the ajv high that inherited it. Same change as #3222 by @aeonframework,
applied here because CI was never authorized to run on that PR.

Refs #3228, #3222, #2948, #3024

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01JJnDvpYYk2rTvjkudQUoCk

* chore(release): 3.39.0 -> 3.39.1

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01JJnDvpYYk2rTvjkudQUoCk
2026-09-09 12:55:02 +00:00
ruv e341ec8c4a chore(release): 3.38.23 -> 3.39.0
Ships the ADR-322C receipt number-domain fix (#3229 / #3235).

MINOR rather than patch: receipt output changes shape (fractional
candidatePolicy values become scale-12 decimal strings) and
policySchemaVersion moves v1 -> v2, so pre-fix receipts refuse promotion
with 'policy schema changed'. Not MAJOR because no CLI surface or MCP tool
signature changed.

Existing signed receipts stay valid as history and are deliberately NOT
migrated — re-encoding changes the content, hence the ID, hence invalidates
the signature. Re-establish a champion through the explicit reset path,
which already requires confirmation and a recorded reason.

Validated end to end against the built dist before publishing: a receipt
carrying the exact candidatePolicy from #3229 encodes to
{"alpha":"0.3","subjectWeight":1,"mmrLambda":"0.5","bodyWeight":"1.5",
"typePenaltyFactor":"0.5"}, contains zero fractional JSON numbers anywhere
in the payload, and verifies VALID.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01J2s8oQsAZjJtJ6inoYRFPj
2026-09-08 12:51:23 -04:00
ruvnet 384b923986 chore(release): 3.38.21 -> 3.38.23
Patch release covering the six commits landed since 3.38.21:
- #3221 gate EnhancedModelRouter's forwarded modelId on tier match
- #3169 wire embedding-cosine into SmartRetrieval's MMR step
- #3184 wire real cold-start measurement, drop the fabricated V2-vs-V3 benchmark
- #3177 bound two ReDoS patterns, stateless PII regexes, O(P) confidence pass
- #3204 fix two stale main-tree Test Suite failures
- #3203 add v3/@claude-flow/mcp to the root npm workspaces

3.38.22 is intentionally skipped: @claude-flow/cli's publish for that version
stuck in npm's "staged" state (published umbrellas, cli 404) and the registry
refused to republish over it even after unpublish, so all three packages moved
to .23 together to restore version lockstep.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01Ff2xRKvYrqXJhefvcapfE1
2026-09-07 13:41:18 -04:00
ruv db4991967c chore(release): 3.38.20 -> 3.38.21
Publishes the #3155 fix (fix(memory): stop seeding the bridge's
ControllerRegistry with the sql.js dbPath, PR #3156) and the CI-fixing
PR #3059 (agentic-flow-agent duration-assertion flake) to npm.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_011N1hncQ1p4pVt15q2VqaQD
2026-09-02 09:40:25 -04:00
ruv e21aa352fd chore(release): 3.38.19 -> 3.38.20
Publishes PR #3092 (fix(statusline): stop pinning intelligence to a
hardcoded 0%).

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01BGiC4SoXiGcUHxs4TsFCeh
2026-08-24 15:45:21 -04:00
ruv 68a9c9f6a4 chore(release): 3.38.18 -> 3.38.19 (supersedes broken 3.38.17/3.38.18)
A subagent I spawned earlier (intended only to relay a status message)
went out of scope and independently ran its own full fix/verify/publish
cycle in parallel with mine on this same checkout, racing my edits. Between
its publish and a set of stale-cached `claude-flow daemon` background
processes self-healing package.json mid-write (#3005), @claude-flow/cli
was published twice in a row (3.38.17, 3.38.18) with a broken
`@claude-flow/mcp` dependency pin, and 3.38.18 additionally shipped
entirely missing the `@claude-flow/memory` dependency. claude-flow and
ruflo were published at 3.38.18 too, inheriting the same defect.

3.38.19 is the verified-correct cut: @claude-flow/mcp repinned to
^3.0.0-alpha.9 (published, has the #2990 fixes), @claude-flow/memory
present at ^3.0.0-alpha.23 (has the #2977 fix). Deprecating 3.38.17/3.38.18
on npm as a follow-up; this commit does not touch the doc/metadata files
that raced independently of the version bump.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_018ZkgSrVRWNMcXmaFiMZ7Z8
2026-08-22 12:35:58 -04:00
ruv 127a6546c4 chore(release): 3.38.17 -> 3.38.18, @claude-flow/memory 3.0.0-alpha.22 -> alpha.23
3.38.17 was published by a concurrent session mid-race with a stale
package.json (the @claude-flow/mcp pin had been reverted to the broken
3.0.0-alpha.10 by a background helper-refresh process just before publish;
see #3005). npm forbids republishing over an existing version, so cutting
3.38.18 with the verified-correct pin instead of trying to fix 3.38.17.

Also discovered @claude-flow/memory is NOT in @claude-flow/cli's
bundleDependencies (unlike @claude-flow/mcp/codex/security/plugin-agent-federation)
-- it's resolved from the registry via a normal ^3.0.0-alpha.22 semver range,
and that exact version is what's currently published, without the #2977 fix
from 8a8500194. Bumping @claude-flow/memory to 3.0.0-alpha.23 and re-pinning
@claude-flow/cli to ^3.0.0-alpha.23 so the fix actually reaches users --
otherwise 3.38.18 would ship pointing at an unfixed memory dependency.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_018ZkgSrVRWNMcXmaFiMZ7Z8
2026-08-22 12:27:01 -04:00
ruv 16b0dc4d5b chore(release): 3.38.16 → 3.38.17
Fixes #2990's root cause at the publish layer: v3/@claude-flow/cli and the
claude-flow umbrella both pinned @claude-flow/mcp to 3.0.0-alpha.10, a
version that was never published (npm registry tops out at alpha.9). Since
@claude-flow/mcp is bundled (bundleDependencies) via a pnpm workspace link,
this didn't affect the monorepo build, but it broke plain `npm install`
against the published packages and left package.json/pnpm-lock.yaml
out of sync with what's actually resolvable. Repinned to ^3.0.0-alpha.9
(the real latest, which already carries the protocolVersion-string fix)
and regenerated v3/pnpm-lock.yaml accordingly.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_018ZkgSrVRWNMcXmaFiMZ7Z8
2026-08-22 12:18:30 -04:00
rUv 5234333c34 chore(release): 3.38.15 → 3.38.16 (#3081)
Cuts a release train off main after the 3 dream cycles landed unversioned:
- #3062 dream(swarm): bound MessageBus retry attempts, fix unreachable
        message.failed (closes #3061)
- #3057 dream(memory): hybridSearch controller reachable via explicit
        opt-in — was silently null-returning despite config flag
        (closes #3056)
- #3049 dream(intelligence): discounted Thompson sampling for
        model-router bandit — opt-in prior decay recovers faster after
        workload shift (closes #3048)

No code changes in this commit — just the version bump across all three
publishable package.jsons.


Claude-Session: https://claude.ai/code/session_0118jMsYhwHD5dx2vStENsEB
2026-08-21 11:22:12 -04:00
rUv b291ac4049 dream(intelligence): #3048 discounted Thompson sampling for model-router bandit (evaluated, ACCEPT-scoped) (#3049)
* dream(intelligence): discounted Thompson sampling for model-router bandit

Adds an opt-in `priorDecay` config field (default 1 = disabled, fully
backward compatible) to ModelRouter's Beta-Bernoulli bandit. When enabled,
every bucket/model's alpha/beta decays geometrically once per
recordOutcome() call before that round's reward is added (arXiv
2305.10718 discounted Thompson sampling), so accumulated routing history
from a long-running persisted state file no longer permanently dominates
the posterior after a real-world model-quality shift.

Benchmark (n=30 paired trials, seeded PRNG, identical stream baseline vs
candidate): non-stationary regime-shift recovery 26.5 -> 21.9 rounds
(-17.6%, t=7.24); post-shift correct-routing rate +1.3pp (t=6.10);
stationary-workload invariant held (delta +0.02pp, not a regression).
Receipt: v3/@claude-flow/cli/benchmarks/results/prior-decay-receipt.json.

Mirrors the epsilon-decay pattern q-learning-router.ts already applies to
its own exploration rate -- an internal-consistency fix, not an imported
pattern. Evaluation and adversarial critique in progress; this commit is
the checkpointed, test-passing candidate + its baseline/candidate receipt.

Co-Authored-By: RuFlo <ruv@ruv.net>

* dream(intelligence): #3048 fix adversarial-critique findings, add gist + ledger

Independent adversarial critique found and this commit fixes: a paired-t
statistics bug (population vs sample stddev inflated every t-value by
n/(n-1)), an unguarded priorDecay input (NaN/negative could silently poison
persisted .swarm/model-router-state.json forever, bypassing sampleBeta's
own defensive fallback), and a single-bucket benchmark blind spot (now
covers low + med complexity buckets -- the med bucket shows no significant
effect, disclosed rather than hidden).

Also adds the research gist and backfills 3 missing ledger rows for
2026-08-14/15/16 (real PRs/issues existed for those nights but the ledger
table wasn't updated) plus tonight's own row.

Co-Authored-By: RuFlo <ruv@ruv.net>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-21 11:21:27 -04:00
rUv 87bacd5582 chore(release): 3.38.14 → 3.38.15 (#3080)
Cuts a release train off main after the following PRs landed unversioned:
- #3060 fix(cli): honor MCP tool selection when listing (closes #3055)
- #3076 fix: resolve Claude Code launches on Windows (closes #3071)
- #3077 fix(hooks): persist real session-end state (closes #3063)
- #3044 dream(security): #3043 advisory scanner for untrusted settings.json
        hooks/allow-rules — CVE-2025-59536-class defense-in-depth,
        advisory-only (non-blocking), hardened against 6 concrete critic
        bypasses.

No code changes in this commit — just the version bump across all three
publishable package.jsons.


Claude-Session: https://claude.ai/code/session_0118jMsYhwHD5dx2vStENsEB
2026-08-21 10:40:29 -04:00
rUv 703e7741d7 fix(memory): #3051 memory_store tags lost via write-through cache (3.38.14) (#3079)
Root cause: bridgeStoreEntry's post-write cache set stored only a partial
entry shape — { id, key, namespace, content, embedding } — with no `tags`,
no timestamps, no metadata, no access_count. The DB row itself had the
tags JSON-serialized correctly. But any subsequent bridgeGetEntry hit the
cache first and returned `tags: cached.tags || []` = `[]`, so
`memory_store({ tags })` → `memory_retrieve()` looked like it silently
dropped tags.

Fix: replace the partial write-through with cache invalidation. The next
read then re-fetches the row via the DB reader (which correctly parses
the tags JSON column) and repopulates the cache from the full shape.
Cleaner than expanding the write-through payload — future entry-shape
fields don't need to remember to update the cache-write signature.

Regression test verifies: store {tags:[a,b,c]} → get returns {tags:[a,b,c]}.
Proven to catch the bug: pre-fix the test fails (tags: [] returned);
post-fix it passes.

The same defect would have caused reads to see access_count stuck at 0
and drifted createdAt/updatedAt timestamps from the moment the cache
was first populated until eviction; cache invalidation fixes those too.

Release
- Bumps @claude-flow/cli, claude-flow, ruflo: 3.38.13 → 3.38.14 (PATCH).


Claude-Session: https://claude.ai/code/session_0118jMsYhwHD5dx2vStENsEB
2026-08-21 10:30:08 -04:00
rUv 0f3c45101b fix: address #3045 #3064 #3065 + new ruflo-deepseek-harness plugin (3.38.13) (#3078)
Bug fixes
- #3045 statusline.cjs: getGitInfo() runs the 5-command git chain per render;
  on large repos with concurrent Claude Code sessions this queued subprocesses
  faster than they finished (reporter observed hundreds of orphan children +
  load-avg in the hundreds). Added a per-cwd tmp file cache with 5s TTL —
  dirty status still feels live, pileup is bounded.

- #3064 hooks post-task: the narrow ad-hoc regex /^[a-zA-Z0-9_-]+$/ silently
  dropped every colon-namespaced plugin agent (ruflo-core:reviewer,
  feature-dev:code-explorer, ...) — i.e. every Claude Code plugin agent. The
  canonical validateIdentifier() upstream already allows ':' and '.', so the
  redundant regex is removed. Regression test locks in 4 agent-shape cases,
  proven to catch the bug: 2 pass / 2 fail on revert, 4 pass with fix.

- #3065 harness-gepa SKILL.md: unquoted colon in `description` broke YAML
  parsing in `npx skills add`. Quoted the description; rephrased the bare
  "(default:" to avoid the leading colon.

New plugin: ruflo-deepseek-harness
- plugins/ruflo-deepseek-harness/: sibling to ruflo-metaharness (ADR-150
  shape). Two skills: `deepseek-chat` (non-reasoning) and `deepseek-reason`
  (surfaces reasoning_content separately). Reads DEEPSEEK_API_KEY from env;
  degrades gracefully (exit 0 with `{status: 'degraded', reason, hint}`)
  when the key is missing or the API is unreachable. `--alert-on-error`
  flag opts into hard exit 1 for CI gates. Smoke-tested locally.

Release
- Bump @claude-flow/cli, claude-flow, ruflo: 3.38.12 → 3.38.13 (PATCH:
  bug fixes; the new plugin is scaffolding under plugins/ and not part of
  the npm-published CLI packages).

Not fixed
- #3051 memory_store tags: current source's memory_store handler passes
  tags straight through to storeEntry; a maintainer already verified live
  round-trip works on fa13ee4ad. Reporter has not yet supplied the
  ruflo/@claude-flow/cli version that hosted the affected MCP server,
  so the affected release path is unknown. Left as-is pending that reply.


Claude-Session: https://claude.ai/code/session_0118jMsYhwHD5dx2vStENsEB
2026-08-21 10:10:13 -04:00
ruv 13cbd697db fix(release): enforce CI and idle assignment safety 2026-08-15 11:14:06 -04:00
ruv 21f7c0adb8 fix(release): align bundled runtime metadata 2026-08-14 19:21:33 -04:00
ruv 392e71912e fix(mcp): rate-limit authenticated HTTP routes 2026-08-14 19:04:54 -04:00
ruv 2ec82b0cd1 chore(release): prepare stable 3.38.10 train 2026-08-14 17:35:47 -04:00
dajiaohuang 2dbb790a0b fix(mcp): restore HTTP protocol and CLI tools 2026-08-14 17:10:34 -04:00
ruv cc5d9c5fe7 chore(release): bump to 3.38.9 — path-validator symlinked-prefix fix 2026-08-13 08:41:11 -04:00
ruv 5efd5937e5 chore(release): bump to 3.38.8 — provider/model config propagation fix (#2962)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-08-12 18:30:46 -04:00
ruv 0d9a4f7e85 chore(release): bump to 3.38.7 — HNSW status honesty fix, cache-fingerprint follow-up 2026-08-12 17:48:11 -04:00
ruv c76bbdcb16 chore(release): bump to 3.38.6 — codex stdin fix, intelligence cache staleness fix, daemon config restore fix 2026-08-12 16:49:23 -04:00
ruv 506264a9d7 chore(release): bump to 3.38.5 — .brain skip, --repo passthrough, secret regex
Ships #2994 (#2911 — ruvnet-brain clones no longer poison ADR
indexing), #2995 (#2963 — github_issue_track passes --repo to gh),
#2996 (#2931 — hardcoded-secret regex catches shorter/embedded
Stripe/OpenAI-shaped keys).

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-08-12 15:46:13 -04:00
ruv 7c738174c1 chore(release): bump to 3.38.4 — init flag fix + graph edge race fix
Ships #2989 (init --all-agents/--skip-claude/--only-claude/--cloud-mcp
were dead kebab-case flag reads) and #2991 (CLI hooks post-task
dropped the ADR-130 reinforced-by graph edge due to an unawaited
fire-and-forget write racing process.exit(0)).

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-08-12 14:45:16 -04:00
ruv f14453c3b7 chore(release): bump to 3.38.3 — hooks intelligence --train fix
Ships #2988: `hooks intelligence --train` now actually distills
(#2940) instead of printing a canned success message with no state
change behind it.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-08-12 14:15:15 -04:00
ruv 8082fbc0f8 chore(release): bump to 3.38.2 — removed-agent restore + mcp http foreground fix
Publishes #2986 (fix(migrate): correct removed-agent install suggestion
and add `migrate fix --agents` restore, #2985) and #2987 (fix(mcp): mcp
start -t http exits after false-success table + doc drift, #2984). Pure
bug fixes, no breaking changes -> PATCH per repo semver policy.

@claude-flow/cli, claude-flow, ruflo published in lockstep at 3.38.2,
all three dist-tags (latest/alpha/v3alpha) verified against the live
registry, published tarball pulled and confirmed to contain both fixes.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-08-12 11:43:40 -04:00
ruv 711ca3f6fe chore(release): bump to 3.38.1 — memory search truncation + persistence honesty fixes
Publishes the #2983 fixes (#2982/#2976 unordered LIMIT truncation in
memory search, #2968 sql.js persistence honesty). Pure bug fixes, no
API/behavior additions -> PATCH per repo semver policy.

Also corrects package-lock.json's top-level version field, which had
drifted to a stale 3.35.0 independent of this bump.

@claude-flow/cli, claude-flow, ruflo published in lockstep at 3.38.1,
all three dist-tags (latest/alpha/v3alpha) verified against the live
registry.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-08-12 10:08:34 -04:00
ruv 6b01dc5a68 chore(release): bump to 3.38.0 — ADR-382 init scaffold drift remediation
Parts A/B/C: pinned ruflo-core's marketplace-plugin MCP launch path
(local-bin-first resolver, mirroring hook-handler.cjs), registered 3
plugins missing from marketplace.json, implemented ADR-128's promised
`ruflo migrate` removed-agent detection, and shipped a warn-only CI
guard (scripts/smoke-init-scaffold-references.mjs) plus a deterministic
remap of 701 dead `npx claude-flow` references across 142 scaffold files.

Ref: #2971, ADR-382
2026-08-11 18:41:34 -04:00
ruv 6ce18b5a7f chore(release): bump to 3.37.0 — proxy fixes + new config flags
Minor bump (not patch) because #2927/#2928 add backward-compatible CLI
flags (--routing-mode, --passthrough), not just bug fixes:

- fix(proxy): bump pinned meta-proxy release 0.4.0 -> 0.7.3 (#2925)
- fix(proxy): fall back to tar when Expand-Archive fails on Windows (#2926)
- fix(proxy): disclose what enabling cloud routing decides, --routing-mode (#2927)
- fix(proxy): make the passthrough plane reachable again after cloud routing (#2928)

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-08-11 13:05:13 -04:00
ruv efd0406e7a chore: sync committed versions to already-published 3.36.0 / memory@alpha.22
@claude-flow/cli, claude-flow, and ruflo were published at 3.36.0 (and
@claude-flow/memory at 3.0.0-alpha.22, carrying the #2887 durability fix)
without the version bump landing back in git — this just reconciles the
committed package.json versions with what's actually live on npm, and bumps
the cli's @claude-flow/memory floor to the version that has the fix.

No code changes.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-08-11 08:56:05 -04:00
rUv f35c545fbe feat(metaharness): pull in @metaharness/turn-credit + fix stale router/darwin pins (#2958)
* feat(metaharness): pull in @metaharness/turn-credit + fix stale router/darwin pins (post metaharness#176)

metaharness#176 shipped @metaharness/turn-credit (ADR-248, recursive
turn-level credit assignment) and bumped darwin to 0.9.0 (ADR-249 signal
seams) + router to 0.4.0 (calibration module). This brings ruflo's
dependency contract back in sync and makes the new package available:

- Add @metaharness/turn-credit ~0.1.0 as a new optionalDependency,
  following the same "must be installable, not peer-only" pattern
  darwin/flywheel/radio already use (ADR-150) — dependency-free, 64.9K
  unpacked, zero lifecycle scripts, same profile as the other three.
- Bump @metaharness/darwin ~0.8.3 -> ~0.9.0 and the paired MH_DARWIN_PIN
  constant in distill-oracle.ts (was already out of range: tilde only
  absorbs patches, and 0.9.0 is a minor bump).
- Bump @metaharness/router peer range ^0.3.2 -> ^0.4.0 (still deliberately
  peer-only + triple-gated behind CLAUDE_FLOW_ROUTER_NEURAL=1, per
  neural-router.ts — that design choice is unchanged, only the stale
  range is fixed) and update the matching manual-install hint in neural.ts.
- scripts/check-metaharness-pins.mjs + scripts/metaharness-clean-install-test.mjs:
  add turn-credit to the watched/contract-checked package list.
- .github/workflows/no-cli-optdep-bloat-2561.yml: CLI_MAX 10 -> 13. The
  prior bump (PR #2956) left zero slack (budget == count exactly), which a
  code review flagged as a latent trap — the very next unrelated optional
  dep would trip this guard. This bump leaves real headroom (11 declared
  today, budget 13) instead of repeating that mistake.
- Also fixes a live ReferenceError in distill-oracle.test.ts (MH_DARWIN_PIN
  used but never imported) — a gap from the prior release's test fix that
  somehow didn't surface in that PR's CI; caught here while touching the
  same file.

Co-Authored-By: RuFlo <ruv@ruv.net>

* fix: regenerate v3/pnpm-lock.yaml — was out of sync with package.json edits

The previous commit edited v3/@claude-flow/cli/package.json directly
(darwin/router/turn-credit pin changes) without regenerating the pnpm
workspace lockfile, so every CI job running `pnpm install --frozen-lockfile`
failed immediately with ERR_PNPM_OUTDATED_LOCKFILE — cascading into every
downstream smoke/test job that depends on that install step.

Regenerated with pnpm@8.15.9 (matching CI's pinned version) in an isolated
worktree to avoid the lockfile-version drift a newer local pnpm would
introduce.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-08-10 15:08:06 -02:30
rUv 4af1cfdded chore(release): bump to 3.35.0 — MetaHarness dependency-contract fix + ADR-381 sequential-evidence governance (#2957)
Minor bump: this release folds in PR #2956 (MetaHarness hardening — repair
the dependency contract, strict sequential promotion evidence, ADR-381) plus
a follow-up commit on that PR fixing 3 concurrency/epoch-boundary bugs found
during review that could silently violate the <=5% family-wise
false-promotion guarantee. All backward-compatible additions (new
optionalDependencies, new doctor checks, new CLI/MCP surface) — no breaking
changes, hence minor not major.

Also fixes a stale test assertion in distill-oracle.test.ts: the darwin
bench-run command now embeds the pinned @metaharness/darwin version
(MH_DARWIN_PIN) per the #2561 cold-npx regression guard, so the test's bare
'darwin bench run' substring check no longer matched the intentional pinned
output ('darwin@0.8.3 bench run').
2026-08-10 11:48:19 -02:30
rUv 0b3cfb77d6 MetaHarness hardening: repair the dependency contract + strict sequential promotion evidence (#2956)
* feat(metaharness): repair dependency contract + strict sequential promotion evidence

Item 1 — dependency & compatibility repair (the contract was silently broken):
- @metaharness/darwin ^0.8.3, @metaharness/flywheel ^0.1.10, and
  @metaharness/radio ^0.1.0 are now explicit optionalDependencies of
  @claude-flow/cli (optional PEER deps are never auto-installed, so a clean
  ruflo install shipped with zero MetaHarness packages on disk)
- check-metaharness-pins.mjs now searches dependencies, optionalDependencies,
  AND peerDependencies; UNDECLARED and PEER-ONLY (for installable pins) are
  fatal drift instead of silently passing; radio added to the watch list;
  --require-installed asserts the real published symbol contracts
  (RefineMutator, withSequentialEvidence, RadioBus, ...)
- new scripts/metaharness-clean-install-test.mjs: installs the declared
  ranges into a pristine temp dir and asserts every advertised export;
  wired as a MANDATORY clean-install job in metaharness-ci.yml
- doctor: new "MetaHarness declared packages" check FAILS (not warns) when a
  declared optional dep does not resolve at runtime; --component metaharness
  now runs upstream + declared-deps + integration checks
- MH_DARWIN_PIN bumped 0.8.0 → 0.8.3 in lock-step with the declared range

Item 2 — strict promotion evidence at the transaction authority:
- receipts now carry task-level pairedOutcomes (taskId + per-task baseline/
  candidate scores) behind heldOutDeltas; verifyFlywheelReceipt refuses rows
  that cannot reproduce their aggregate; evaluateFlywheelCandidate populates
  them; pre-existing receipts still verify byte-identically
- new flywheel-sequential-evidence.ts: anytime-valid e-process over
  discordant paired outcomes (testing-by-betting) composed with per-candidate
  alpha allocation (alpha_k = alpha_total * 6/(pi^2 k^2)), so the family-wise
  false-promotion probability across an ADAPTIVE candidate stream is bounded
  by alpha_total = 5%
- promoteFlywheelCandidate requires paired evidence by DEFAULT — aggregate-
  only receipts are refused, never silently downgraded (the upstream
  withSequentialEvidence fallback hole); explicit
  --allow-aggregate-evidence / allowAggregateEvidence escape hatch for
  pre-upgrade receipts; alpha spend is persisted per receiptId in the
  transaction state (looking spends alpha; retries reuse their index)
- acceptance test: 1,000 null-improvement streams (20 adaptive candidates x
  40 worst-case discordant pairs) — measured family-wise false promotion
  0.6%, within the <=5% budget

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01FKWLVWewYaWmcUg2q8Y9wy

* chore: gitignore node-compile-cache build artifact

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01FKWLVWewYaWmcUg2q8Y9wy

* fix(ci): satisfy #2561 guard, dep-overlap audit, and smoke contract for metaharness optional deps

Three CI failures from the dependency-contract repair, three fixes:

- tilde-pin @metaharness/{darwin,flywheel,radio} (~0.8.3 / ~0.1.10 / ~0.1.0)
  per the ADR-150 anti-caret rule enforced by smoke step 17z73 — upstream is
  unstable, tilde absorbs patches but never minors
- remove the three from peerDependencies/peerDependenciesMeta: an entry in
  BOTH optionalDependencies and peerDependencies crashes npm 11.x arborist
  on dedupe (#1147/#2018 dep-overlap audit); optionalDependencies alone is
  the declaration that actually installs
- update the #2561 cold-startup guard per its own escape clause: budget
  8 → 10 and drop @metaharness/darwin from the forbidden list — that entry
  dated from the pre-0.8 heavy-tree era; darwin@0.8.3 is 1.8M unpacked with
  ZERO dependencies and no lifecycle scripts (all three packages combined:
  2.3M, 753ms cold install into an empty dir, measured 2026-08-10; the
  clean-install CI job re-verifies on every pin change)
- smoke.sh 17h now accepts the componentMap ARRAY form
  ('metaharness': [checkMetaharness, ...]) introduced with the
  declared-packages doctor check

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01FKWLVWewYaWmcUg2q8Y9wy

* fix(ci): remove apostrophe that broke the single-quoted guard script

The #2561 guard runs as `node -e '...'` inside bash; an apostrophe in a
comment ("guard's") terminated the quoted string and bash tried to execute
the next // comment line (exit 126, '//: Is a directory'). Verified by
executing the extracted run block end-to-end: all three checks OK, exit 0.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01FKWLVWewYaWmcUg2q8Y9wy

* feat(flywheel): ADR-381 — alpha-stream governance, reset epochs, accept/v2+seq

Completes the sequential-evidence governance PR #2956 opened:

ADR-381 (new) records the decisions:
- the ADR-322 promotion ledger IS the alpha stream (per project root) —
  receipt lineageIds default to fresh UUIDs and cannot scope the control
- evidence epochs: resetSequentialEvidence({confirm, reason}) archives the
  spend into an append-only sequentialResets audit trail, EXPIRES every
  outstanding evaluated receipt (fresh-data enforcement — old-epoch
  evidence cannot be replayed against a reopened budget), and increments
  evidenceEpoch; surfaced as `flywheel evidence-reset --reason … --confirm`
  (CLI) and the metaharness_flywheel MCP op, both behind the same policy
  gate as promotion
- accept/v2+seq: the ADR-176 generations loop now decides each bundle with
  a third conjunct — the e-process over the bundle's own embedded per-task
  holdout at alpha_k for its position in the attempts stream — with the
  full verdict recorded in the bundle and independently replayed by
  verifyReceiptBundle (v1 bundles keep v1 semantics; versions pin per
  bundle); flywheelStatus surfaces next test index / threshold / minimum
  pairs / remaining budget so exhaustion reads as plateau, not mystery
- two-layer pre-flight: evaluateFlywheelCandidate annotates (never blocks)
  when the promotion holdout cannot clear the next threshold on a perfect
  sweep; promoteFlywheelCandidate refuses size-inviable receipts BEFORE
  allocating an alpha index — sample size is ancillary, so the refusal
  looks at no evidence and spends no budget

Tests: reset semantics (archive/expire/epoch/fresh-promote), alpha-free
size refusal vs alpha-spending e-process refusal, v2 promote/reject/replay
including tamper + index-shopping detection, v1 compat, helper math
anchors (min pairs = 9 at test 1), budget monotonicity. 82 tests green
across the eight affected suites; tsc build clean.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_01FKWLVWewYaWmcUg2q8Y9wy

* fix(flywheel): close 3 concurrency/epoch gaps in ADR-381 sequential evidence

Code review of this PR found three real correctness bugs that can silently
violate the <=5% family-wise false-promotion guarantee that is the PR's own
core deliverable:

- flywheel-transaction.ts: resetSequentialEvidence's "fresh data only"
  guarantee only expired receipts already registered at reset time; a
  receipt whose evidence predates a reset but is registered afterward was
  silently admitted into the new, cheaper epoch (index shopping). Now
  tracks evidenceEpochStartedAt and promoteFlywheelCandidate refuses any
  receipt whose payload.issuedAt predates it, before allocating an alpha
  index.

- harness-flywheel-generations.ts: the daemon generations loop computed its
  sequential-evidence testIndex via an unlocked loadAttempts(root).length+1
  read before appending. Two overlapping runFlywheelGeneration calls on the
  same root could be assigned the same test index and spend the same
  alpha_k twice. The read-index -> build-bundle -> append critical section
  now runs under the same O_EXCL lock pattern flywheel-transaction.ts
  already uses.

- harness-flywheel.ts: evaluateFlywheelCandidate's sequentialPreflight
  (backing the `promotable` flag) was computed from an unlocked snapshot
  taken before the async retrieval/scoring work, so it could go stale by
  the time promoteFlywheelCandidate allocates the real index under its own
  lock. Moved to the latest possible read (after receipt registration) to
  minimize the window; documented as advisory, since promoteFlywheelCandidate
  remains the sole authority.

Added a regression test for the epoch-boundary refusal and a concurrency
test proving two racing generations get distinct sequential test indices.

Co-Authored-By: RuFlo <ruv@ruv.net>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-10 11:32:40 -02:30
ruv 9668fd1085 chore(release): bump to 3.34.0 — AGNTCY/Outshift runtime integration
Three-package lockstep bump (@claude-flow/cli, claude-flow, ruflo) per
CLAUDE.md's Publishing Rules, backed by scripts/audit-umbrella-version-lockstep.mjs.
CHANGELOG.md documents ADR-378/379/380 (AGNTCY runtime, npm Trusted
Publishing workflow, statusline segments) and the SLIM alpha-pin fix,
carried in main since the 3.33.0 release.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-07-31 11:51:07 -04:00
rUv 30d49c6fe2 fix(agntcy): pin @agntcy/slim-bindings to the confirmed-working alpha (#2888)
The SLIM maintainers confirmed (agntcy/slim#1916) they've moved off
uniffi-bindgen-react-native onto @ubjs/core/@ubjs/node (compiled output,
not raw TypeScript) in the alpha dist-tag (2.0.0-alpha.4+), not yet
promoted to latest.

Verified live: a real server bring-up + client connect + graceful
shutdown against @agntcy/slim-bindings@2.0.0-alpha.5 succeeds under
plain Node with zero errors — no ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING.
Verified detectAgntcyRuntime() itself (not a mock) now returns
configured: true when RUFLO_AGNTCY_SLIM_ENDPOINT is set, exactly as its
existing graceful-degradation design predicted it would once the
upstream bug was fixed — zero logic changes needed to that function.

Pinned to the exact alpha version (not a caret range — deliberate for
a pre-release channel) rather than latest, until the fix is promoted.
Added detectAgntcyRuntime()'s optional packageName parameter so the
"package genuinely not installed" fallback path stays covered by a
real regression test now that the real package resolves.

pnpm-lock.yaml regenerated (scoped to this one dependency).
2026-07-31 10:11:41 -04:00
rUv 791d24b36f ADR-380 correction: real @agntcy/slim-bindings package + 2 upstream bugs filed (#2880)
* fix(agntcy): correct SLIM package name to the real @agntcy/slim-bindings

ADR-380's original scaffold guessed a placeholder package name
(@claude-flow/agntcy) and concluded no SLIM SDK existed anywhere — that
check only tried guessed names. The real SLIM Node.js bindings are
published as @agntcy/slim-bindings (v1.4.1 stable), documented for exactly
this plain-Node use case.

It currently fails to load, but for a specific, verified, upstream reason
rather than "doesn't exist": a transitive dependency
(uniffi-bindgen-react-native) ships raw, uncompiled TypeScript as its
package.json "main" with no build output and no exports field — works
inside a bundler (Metro, its primary React Native use case), not plain
Node require/import. Reproduced and confirmed the exact failure
(ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING, not MODULE_NOT_FOUND) via a
real install in isolation. Filed upstream:
- agntcy/slim#1916 (downstream impact — their own README's plain-Node
  example is currently broken)
- jhugman/uniffi-bindgen-react-native#422 (root cause)

detectAgntcyRuntime()'s existing graceful-degradation design already
handles this correctly with zero logic changes needed: its catch-all
branch (anything other than MODULE_NOT_FOUND) surfaces the real error and
falls back to local transport — verified this is exactly what happens
today. Once the upstream packaging bug is fixed, this same code path
starts succeeding with no changes needed here.

Added @agntcy/slim-bindings to optionalDependencies (real package now,
matching ADR-150's optional-only rule ADR-380 §1 follows).

* docs(adr): ADR-380 update section — correct the false 'no packages exist' claim

Documents both real corrections in-place (this repo's convention for a
still-Proposed ADR) rather than silently rewriting history: real
@agntcy/slim-bindings and agntcy-dir packages exist; Directory is now
live-integrated; SLIM is blocked by a specific, filed, upstream packaging
bug, not a missing SDK. Synced to the plugin-bundled copy.

* fix(ci): regenerate v3/pnpm-lock.yaml for the new @agntcy/slim-bindings optionalDependency

'pnpm install --frozen-lockfile' (what CI actually runs) failed after the
previous commit's hand-edit to package.json, since pnpm-lock.yaml was never
regenerated: ERR_PNPM_OUTDATED_LOCKFILE, cascading into ~20 unrelated-looking
CI job failures (every job that installs deps first).

Used a scoped 'pnpm install @agntcy/slim-bindings --lockfile-only --save-optional'
(not a full lockfile regeneration) specifically to avoid an unrelated,
pre-existing issue: @claude-flow/codex is pinned to 3.0.3 in package.json but
only 3.0.2 is actually published, which breaks a full-tree re-resolution but
doesn't block a scoped single-package update. Verified 'pnpm install
--frozen-lockfile' now succeeds cleanly from the correct v3/ workspace root
(the one CI's failing jobs were actually running from — this repo has two
separate pnpm workspaces, root and v3/, and I'd initially checked the wrong
one). As a side effect, the frozen-lockfile install's postinstall step
rebuilt @claude-flow/security's stale dist/, which also cleared the
pre-existing 19 unrelated tsc errors noted throughout this session's earlier
verification passes — tsc --noEmit is now fully clean, not just clean of
agntcy-related errors.
2026-07-31 00:32:45 -04:00
rUv 491c75a6fa chore(release): 3.33.0 — ADR-377 AgentDB Retrieval Security Layer (#2876) 2026-07-30 15:37:51 -04:00
rUv ad8d071d16 fix: stop daemon autostart in non-Ruflo projects (#2853)
* fix(daemon): require durable project marker for autostart

* chore(release): prepare v3.32.38
2026-07-29 15:50:37 -04:00
rUv 401e02d511 fix: complete reports and consistent initialization for v3.32.37 (#2851)
* fix(metaharness): preserve readiness verdict payloads

* test(metaharness): cover blocked genome verdicts

* fix(adr): parse bullet metadata and relationships (#2659)

* fix(adr): align adr-create with AgentDB schema (#2651)

* fix(adr): make index updates idempotent (#2660)

* fix(memory): bound session-end graph consolidation (#2628)

* fix(memory): align active row visibility (#2652)

* fix(memory): honor database path during init

* fix(hooks): keep all shim fallback tags aligned

* fix(codex): omit unbacked full-template skills

* fix(init): generate complete native dual projects

* test(memory): isolate path and legacy-row regressions

* chore(release): prepare v3.32.37
2026-07-29 15:40:17 -04:00
rUv 67ff9898c0 fix: resolve current runtime and verification defects for v3.32.36 (#2850)
* fix(cli): make runtime status and learning signals truthful

* fix(metaharness): accept padded scan severities

* fix(codex): make core hooks and status skill native

* fix(security): make witness verification hermetic

* fix(metrics): expose grounded learning outcomes

* fix(hooks): deduplicate project and plugin events

* fix(verification): preserve security audit payloads

* fix(runtime): stabilize dual memory skills and MCP schemas

* fix(cli): harden helper signing and reflexion health

* test(release): align helper and container invariants

* chore(release): prepare v3.32.36

* test(funnel): align gates with cold-start seed pool

* fix(ci): document MCP environment precedence
2026-07-29 15:08:51 -04:00
rUv 3d9bca6d44 chore(release): prepare v3.32.35 (#2849) 2026-07-29 13:56:33 -04:00
rUv c3cf2d0ea9 chore(release): harden memory migration for v3.32.34 (#2846) 2026-07-29 09:29:39 -04:00