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).
- 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.
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>
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>
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>
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>
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
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>
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>
`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>
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>
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>
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>
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>
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>