Commit Graph
329 Commits
Author SHA1 Message Date
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
ruv baf97eb242 merge origin/main into the sentry/results PR (excluded-test list: keep both sides) 2026-10-05 18:53:49 -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
ruv 86f4032195 fix(ruflo-agentdb): live-verified recall (0.4.1) + live harness and validation report
Run against a real initialised AgentDB with real MCP servers and headless haiku
(v3/docs/validation/agentdb-recall-live-2026-10.md, scripts/live-agentdb-recall.sh).

Defects found by the live run and fixed:
- status.json only flushed on attach/block: skipped, timed-out, cached and error
  counters were invisible; add lastReader and lastError
- a permission-refused or failing reader call was swallowed and read as "nothing
  relevant"; now counted in errors/lastError
- memory_search (the only semantic reader) was never used; it is now the first
  reader, whole prompt only, and its 60-character value cut is completed with
  memory_retrieve before the screen and the frame
- ruvector scores arrive as strings and are noise (-0.10..0.10); read numeric
  strings and skip results scoring under 0.25
- an all-unsafe answer ended the search, hiding a clean memory behind a poisoned
  one; the walk continues and dropped counts each note once
- readers were cached even when none was connected
- add directed-at-the-assistant phrasing rules (plugin-local): haiku followed 6 of
  10 injected directives that passed the shared screen, whatever the frame said

41 plugin tests (was 26), smoke 19/19, claude plugin validate passes.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 22:48:04 -04:00
ruv d9bc8539ec Merge remote-tracking branch 'origin/main' into loop/cap-audit 2026-10-04 22:44:39 -04:00
rUv a4b990e88f Merge pull request #3721 from ruvnet/loop/adr-index
docs(adr): mod-system ADR index (404, 406–451), status/date/cross-link corrections, and an ADR link + duplicate-number check
2026-10-04 19:44:32 -07:00
ruv ed6af7710e Merge remote-tracking branch 'origin/main' into loop/cap-audit 2026-10-04 22:22:39 -04:00
ruv ebf229a12b Merge remote-tracking branch 'origin/main' into loop/adr-index 2026-10-04 22:21:39 -04:00
ruv b545645d41 Merge remote-tracking branch 'origin/main' into loop/guard-hardening
# Conflicts:
#	scripts/probe-mod-guards.known-holes.json
2026-10-04 22:11:05 -04:00
ruv a959998417 docs(adr): mod-system ADR index, status/date/cross-link corrections, ADR link check
Index of ADRs 404-451 with status, builds-on, PR and tests. Corrects ADR-404/444/447
statuses that contradicted shipped code, 444-446 dates (committed 2026-10-04), stale
follow-ups in 446/448, adds superseded-in-part back-links (422, 424, 430 amendments)
and scripts/check-adr-links.mjs (+node:test) for broken links and duplicate numbers.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 22:03:45 -04:00
ruv e117918a6f test(mods): regenerate the guard-probe baseline and report against main (key-name / budget fixes landed in #3708/#3710)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 21:34:29 -04:00
ruv 41358126ab Merge remote-tracking branch 'origin/main' into loop/guard-probe 2026-10-04 21:29:59 -04:00
ruv a98f66344f docs(mods): capability review 2026-10 and matrix generator
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 21:19:34 -04:00
ruv c4116f2377 ruflo-console 0.33.2: Room and Mods UX — clickable Mods detail, blocked filter, jump from feed entries
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 21:17:55 -04:00
ruv b1a6243a86 Merge remote-tracking branch 'origin/main' into loop/screen-vendor
# Conflicts:
#	.github/workflows/all-plugins-smoke.yml
2026-10-04 21:06:45 -04:00
ruv 53de5bb936 fix(mods): one iterative textsOf in the shared screen — depth, sibling, size caps, object keys and the invisible-character set fixed at the root (ADR-445)
Replaces 37 copy-pasted recursive walkers with a shared breadth-first one (keys as key=value, overlapping windows for long strings, node and char budgets) and widens INVISIBLE (soft hyphen, bidi isolates, Mongolian separator, more). Probe holes 788 -> 0.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 20:51:39 -04:00
ruv cb889f86df Merge branch 'loop/guard-probe' into loop/guard-hardening 2026-10-04 20:39:26 -04:00
ruv 5d8ab06dc4 test(mods): guard probe timing is a hang gate (median of 3 > 1000 ms), 50 ms/50x advisory; bare --known-holes; wider watchdog
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 20:34:20 -04:00
ruv b39cf24273 bench(mods): per-event hook latency across the plugin mods; measured, no optimization justified
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 19:47:20 -04:00