Commit Graph
349 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 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
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
randRuFlo 72f789254e feat(console,mods): optional detect-only ruvnet-brain grounding (ADR-487)
Console 0.42.0: Overview "Grounding" line (on / not installed / installed, disabled / unknown), a default-on nudge setting that adds one fixed line pointing at search_ruvnet to the mission context when the brain is on and the mission names the ruvnet stack (through modelLine, nothing interpolated), and a default-off, dismissible once-per-session install hint. Mods 0.5.0: option `grounding` (default off) adds a read-only /ruflo-mods row.

Detect-only: never calls, installs, gates, blocks or copies anything of the third-party plugin; ruflo behaves identically without it (smoke steps console 20, mods 15).

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 18:02:44 -04:00
randRuFlo c53bed71e3 feat(console,mods): session workspace on the Room: attention queue, session browser, preview (ADR-486)
Needs-you queue (approvals, questions, failures, finished-unread) across Claude Code, Codex and Ruflo
sessions, a browser grouped by repository and worktree, and a preview of the selected session. Local,
read-only discovery (no model call, no process); ambiguous identity goes to an unassigned bucket;
finished work clears only after its preview was drawn; transcript text never reaches a model, the
state, the disk or a text answer. ruflo-mods gains an optional counts-only attention row.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 17:18:27 -04:00
randRuFlo 733596cc1f feat(x-gateway): read-only GitHub/npm query tools on /mcp (ADR-485)
Adds ruv_github_search, ruv_github_repo, ruv_github_file and ruv_registry_latest
to the legacy /mcp surface: allowlisted owner (default ruvnet), public repos only,
SSRF-pinned URLs, redirects refused, size/time caps, TTL+ETag cache, per-client
and shared upstream budgets, results fenced as untrusted GitHub data. Directory
profiles (/chatgpt/mcp, /claude/mcp) are unchanged at twelve tools.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 14:28:35 -04:00
randRuFlo a457cbf4dc fix(plugins): clean claude.ai plugin-validator findings (nested manifest, unknown keys, XML tags in skill descriptions)
- ruflo-plugin-creator 0.4.2: mod template manifest is plugin.json.tmpl (no nested plugin); scripts/scaffold-mod.mjs + test-scaffold-mod.mjs validate and test a scaffolded mod
- ruflo-workflows 0.6.5 / ruflo-arena 0.2.4 / ruflo-graph-intelligence 0.2.0-alpha.5: drop unused components / categories keys
- ruflo-metaharness 0.2.5: seven harness-* descriptions use {braces}, not angle brackets
- ruflo-ai-team 0.2.3 (+directory 0.1.1) / ruflo-x-gateway 0.9.5 (+directory 0.8.2): documentationUrl points at main, not the feat branch; store-listing keys kept (the directory reads them)
- scripts/check-plugin-manifests.mjs wired into all-plugins-smoke

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 10:18:04 -04:00
rUv 54628be615 Merge branch 'main' into fix/console-0.40.2-security 2026-10-08 15:02:44 -07:00
randRuFlo 5db1c788b6 ci: run the native Codex hook tests with node --test, not the root vitest ratchet
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-08 17:52:51 -04:00
Stuart Kerr 24a83b3297 fix(plugins): allow native freeform inputs and version Codex hook repair 2026-10-08 16:52:49 -04:00
Stuart Kerr b968e34970 fix(plugins): add native Codex adapters for ADR DDD and SPARC mods 2026-10-08 16:52:42 -04:00
Rudy Celekli 5ca1540fec Merge current main and pin the already-published matching CLI
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
2026-10-07 21:52:47 -04:00
ruv 817dcfe0e3 fix(console): manually entered text is never silently truncated (ADR-481)
The mission goal was cut at 500 characters and drawn on one clipped line; the host Input is one line and hides the rest. A live mirror
under every field shows all lines, views draw text in full with an explicit marker, limits are checked before sending with the exact
count, and every silent slice/plain cap on typed text is removed or made a counted refusal. console 0.39.1.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 18:20:32 -04:00
ruv b62b7d334c fix(console): keep the swarm ADR digest true to the active mission; verify's confirm names its git reads; real-pane ADRs test (ADR-480)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 17:16:11 -04:00
ruv 9cef4cb070 feat(console): What's new page under TOOLS, plugin changelog parser and marker (ADR-478), console 0.38.0
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 14:37:28 -04:00
ruv 9fc4d3226a Merge origin/main into feat/mod-toasts 2026-10-07 12:53:12 -04:00
ruv 146febd999 feat(mods): shared toast system with levels, dedupe, persistence and Settings (ADR-477)
One dependency-free policy (canonical in ruflo-mods, byte-identical copies in console,
swarm and protector, checked by scripts/sync-toast-policy.mjs and each smoke.sh): level
prefixes, one washed line of at most 120 characters, 60 s de-duplication, four toasts a
minute per source with errors held and counted, the person's all/important/off setting and
per-source mute (console Settings, mirrored to a file the others read), and a digest of
every toast kept for the console's Events page. All call sites migrated; new toasts for a
mission that finishes or fails and a swarm subagent that fails or a loop that is stuck.

Versions: console 0.37.0, swarm 0.3.4, protector 0.1.1, mods 0.3.16.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 12:50:30 -04:00
rUv 7decc3e5ab Merge pull request #3339 from ruvnet/dream/2026-09-16-security
fix(security): gate hive-mind remote callers without breaking local users (ADR-476, #3338)
2026-10-07 09:42:42 -07:00
ruv a65be10ed4 feat(mods): shared toast policy and its call sites (ADR-477), work in progress
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 12:40:10 -04:00
rUv 63ccf010c1 fix(ci): register RUFLO_HIVE_BOOTSTRAP_SECRET as an env-only escape hatch
Supersedes the accidental "test" commit above, which pushed placeholder
content for this file while I was isolating a git-push transport issue
(repeated 500s from the smart-HTTP receive-pack endpoint led me to try
the REST push_files path, and a literal test payload went through
before I'd swapped in the real content).

The audit-env-var-precedence check (#1902/#1903/#1904 job) flagged
hive-mind-tools.ts's readBootstrapSecret() as an undocumented env read.
It's a server-side operator credential (ADR-476), same category as
RUFLO_ADMIN_TOKEN/RUFLO_X_ADMIN_TOKEN/SERAPHINA_METALLM_KEY already in
KNOWN_ESCAPE_HATCHES: a secret must never be a CLI flag, and it configures
the server rather than one invocation.

Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_0154oN1EzxHHtaHEKXyXxpmc
2026-10-07 08:13:05 -07:00
rUv 194bae20e3 test 2026-10-07 08:10:42 -07:00
rUv 211a94a27a Merge branch 'main' into fix/plugins-prefer-installed-cli 2026-10-07 07:03:25 -07:00
Rudy Celekli c4d2421d46 Merge remote-tracking branch 'origin/main' into repair/ruflo3438-feedback-20261005
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>

# Conflicts:
#	ruflo/package.json
2026-10-06 18:15:37 -04:00
ruv baf97eb242 merge origin/main into the sentry/results PR (excluded-test list: keep both sides) 2026-10-05 18:53:49 -04:00
Rudy Celekli 7f8dcfb1f2 Merge remote-tracking branch 'origin/main' into repair/ruflo3438-feedback-20261005
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>

# Conflicts:
#	ruflo/package.json
2026-10-05 16:57:51 -04:00
ruv aa1825d7b6 ci: the protector kit tests run under claude plugin test, not root vitest
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 15:49:09 -04:00
ruv 3fc617f0d3 ci: the new result-display kit test runs under claude plugin test, not root vitest
It imports claude-code/testing, which only exists inside Claude Code, so the ratchet reported it as an unexpected failing file. It joins the
excluded list (scripts/ci-test-excluded.txt) like every other plugin kit test.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 15:48:53 -04:00
Mak Allenandruflo 5971e3099e ci(audit): register RUFLO_PLUGIN_SKIP_{LOCAL,PATH}_CLI as test-only escape hatches (#3558)
The plugin CLI resolvers added for #3558 read two test seams that force
the PATH and npx fallbacks. Plugin scripts have no CLI-flag surface, so
they follow the RUFLO_METAHARNESS_SKIP_LOCAL precedent (Option B) rather
than growing a flag. Fixes the 'Plugin package install-safety' job.

Co-Authored-By: ruflo <ruv@ruv.net>
2026-10-05 10:48:03 -07:00
ruv 668ee8d1e9 fix(ci): the test ratchet no longer runs files vitest cannot run (71 plugin kit tests and node:test files)
`Test Suite (ubuntu-latest)` failed with "71 unexpected failing file(s)": 66 plugin kit tests that import `claude-code/testing` (only
resolvable inside Claude Code) and 5 node:test files vitest finds no suite in. None is a regression; each has its own gate
(`claude plugin test` in every plugin smoke, `node --test` in all-plugins-smoke). They are now listed in scripts/ci-test-excluded.txt and
passed to vitest as excludes. A listed file that no longer exists fails the ratchet, and the baseline stays untouched and shrink-only.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 13:21:43 -04:00
ruv 8d32e0f642 test(mods): tripwire against forwarding a mod status file into model context (ADR-450 T7)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 05:37:46 -04:00
ruv edcc32f494 test(ruflo-mods): live verification of capabilityProbe and sessionRollup against real headless sessions
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 04:36:37 -04:00
ruv 0bae1e47e7 fix(mods): a domain plugin's refusal of another plugin's memory_store no longer claims the write (variant B, review #8)
Every guard still refuses exactly the same inputs (4752-case A/B against origin/main: 0 decision diffs, 744 message-only diffs).
When music, neural-trader, migrations, observability, rvf or ruvector refuse a memory_store whose namespace they do not own, the
message now says a secret-shaped value was found in a memory write and which namespace was targeted (short plain text, stripped and cut,
dropped if secret-shaped), never an owner and never content. Patch bumps: music 0.2.3, neural-trader 0.3.4, migrations 0.3.3,
observability 0.3.3, rvf 0.3.5, ruvector 0.3.4.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 04:07:46 -04:00
rUv 3de4a21ae3 Merge pull request #3762 from ruvnet/loop/live-writers
docs(agentdb): live proof the four new guarded writers refuse secrets; memory_import gap documented
2026-10-05 00:32:15 -07:00
ruv 620ce56fff test(agentdb): live check that the four newly guarded writers refuse a secret in a real session
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 03:07:59 -04:00
ruv e1e6762a85 test(ruflo-mods): measure agentTrim token saving and dispatch behaviour live
Adds scripts/live-ruflo-mods-trim.sh and the measured report: 4,236 fewer prompt tokens with 59 of 69 types hidden; an unnamed hidden type is refused at dispatch; a prompt-named type is not offered in a headless listing.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 02:53:23 -04:00
ruv 41be093926 test(mods): live headless proof of ruflo-mods route, deny, heartbeat and /ruflo-mods paths
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 01:56:36 -04:00
ruv 9f2e76bcb0 Merge origin/main into loop/ux-room; console 0.33.8
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 01:21:14 -04:00
rUv 5ac2886bc9 Merge pull request #3734 from ruvnet/loop/cap-r4
fix(mods): refuse input past the screen budgets in every guard; known holes 32 -> 0
2026-10-04 21:56:07 -07:00
rUv 67a3e7e108 Merge pull request #3733 from ruvnet/loop/live-mods
fix(ruflo-mods): live validation of toolHints/agentTrim; correct agentTrim text (0.3.2)
2026-10-04 21:39:45 -07:00
ruv d06b0122be fix(mods): shared textsOf reports truncation and every guard fails closed on it
The walker dropped input past its node, character and per-string budgets
silently, so 32 guards passed a secret placed after the cap. textsOf now
appends a TRUNCATED marker; names/hasSecretIn treat it as a finding. Regenerated
the 38 copies, bumped the 39 plugins, emptied the known-holes baseline.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 00:27:13 -04:00
ruv c9f47b7232 Merge remote-tracking branch 'origin/main' into loop/live-mods 2026-10-05 00:26:24 -04:00
ruv ebe2f82146 ruflo-mods 0.3.2: live validation of toolHints/agentTrim/status, correct the agentTrim option text
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 00:25:30 -04:00
ruv d855f75264 Merge remote-tracking branch 'origin/main' into loop/cap-r3 2026-10-05 00:14:43 -04:00
ruv 1ff11ce4e8 test(mods): fleet guard probe covers structured credentials and walker budgets
Adds structured (name/value pair) and budget (past the node and character
caps) probe classes. Finds 32 guards that pass a secret past the 25000-node
walker budget; recorded in the known-holes baseline, not fixed here (the
root cause is the vendored shared region owned by the sync generator).

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 00:11:15 -04:00
ruv 21adb5ce28 feat(mods): vendor the flag option parser from one origin with the screen sync and drift check (review #2)
Extend scripts/sync-mod-screen.mjs to a second kit: the flag() helper in hooks/options.ts of 38 mods now sits between SHARED FLAG markers and is
rewritten/checked from ruflo-agentdb. Drift, a lost marker or zero copies fails --check. Bump the 39 touched plugin versions and their version pins.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 23:46:06 -04:00
ruv fc10f0be2a Merge remote-tracking branch 'origin/main' into loop/hook-latency 2026-10-04 23:13:55 -04:00
rUv dd6d201246 Merge pull request #3724 from ruvnet/loop/live-recall
fix(ruflo-agentdb): live-verified recall (0.4.1) + live harness and report
2026-10-04 20:08:36 -07:00
ruv fd3fade675 Merge origin/main into loop/live-recall
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 22:50:32 -04:00