Commit Graph
395 Commits
Author SHA1 Message Date
rUv 2ec9c05104 Merge pull request #4181 from ruvnet/g3/skills-contracts
fix: skills, plugin contracts and ruvector/neural/kg surfaces (#4126 #4133 #4135 #4149 #4156 #4157 #4158 #4159 #4161)
2026-10-14 05:25:24 -07:00
randRuFlo 08fa73eadb fix(ruflo-adr): read the leading status keyword, skip index/template files, report Unknown in adr-verify (#4126)
ruflo-adr 0.5.8.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-14 05:37:35 -04:00
randRuFlo b98935f34f fix(core,cli): record failed tool outcomes, run hooks from the project root, keep telemetry off the tool path
- #4127: PostToolUseFailure registered for Bash and Write|Edit|MultiEdit and forwarded with -s false and the real exit code (builds on #4170 by @rudycelekli; payload shape verified against Claude Code 2.1.289)
- #4176: the hook shim starts the CLI from CLAUDE_PROJECT_DIR; the CLI only adopts a proven config in a directory that carries ruflo init's markers, not a bare .claude/ that Claude Code created
- #4128: the shim starts the CLI detached and returns at once (about 25 ms instead of 0.2-4 s per hook), bounded to 4 concurrent telemetry CLIs per project, Stop never dropped, RUFLO_HOOK_SYNC=1 for the old path
- ruflo-core 0.2.9

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-14 05:28:12 -04:00
Muhammad Zubair 20b9451f8d test(skills): check that every MCP tool a shipped skill names exists in the registry (#4141) 2026-10-13 13:38:45 +05:00
r dcf79b15bc Merge origin/main into pr-4112 2026-10-12 15:34:02 -04:00
rUv c4bfd1d47a Merge pull request #3522 from rudycelekli/codex-mcp-backend
fix(bridge): retire unsupported Codex MCP backend without startup stall
2026-10-12 12:10:55 -07:00
Dragan SpiridonovandRuflo & AQE d89973b4dc fix(console): draw pictures on Claude Code Desktop as Svg, decide by surface
On Claude Code Desktop every picture was missing: no banner, no title
art, no topology, map, gauge or chart, and not even the text lines meant
to stand in for them. The host completes every resolved table with every
element name, and on the desktop its Raster draws an empty fragment, so
`kit.Raster !== undefined` always held and the console drew empty boxes.

- kitForSurface(): the terminal gets its Raster and no Svg; every other
  surface (desktop, vscode, mobile) gets Svg and no Raster. Applied to the
  Pane and the band. On the terminal nothing changes: the same Rasters,
  keys, text and fallbacks.
- gfx/svg.ts: the same Grid as one SVG document. Every Block Elements
  glyph (U+2580 to U+259F) and every braille glyph is drawn as
  rectangles; other glyphs are placed cell by cell (a control character,
  a value past Unicode or a character XML cannot hold is a blank cell);
  colours are kept, the default background stays transparent, text is
  escaped. A picture that would pass the host's 131,072-character Svg
  limit is not sent, so one large picture cannot invalidate the whole
  tree; it then falls back as on a surface with no pictures (its text line
  where it has one).
- A surface that draws Svg gets still frames, since nothing blits an Svg:
  nothing strikes in and the motion stops, as with fps 0, and the
  decorative light (the header's sweep, the title's shimmer, the palette's
  sweep) is off instead of caught mid-way. The boot keeps its real time so
  its progress shows, and a picture of data is drawn as of the render. The
  terminal keeps its moving light, with fps 0 too.
- art(): one helper for every picture site (header, title art, boot,
  Orbital art, picture(), learning, memmap, palette). An Svg's alt is the
  picture's fallback line without "needs a terminal".
- The frame loop runs while the view has pictures, as before, so the
  menu entry and the Learning pulse still move on the desktop; it only
  rebuilds and blits when a Raster is mounted, so the desktop no longer
  rebuilds every picture per frame and blits keys that were never mounted.
  The band's mark animates on the terminal only.
- tests: svg-pictures.spec.ts (vitest) for the writer, the kit, the still
  frames (on every page in every look: header, title and palette the same
  at any moment, every other picture equal to fps 0's) and the frame loop
  by surface; surface-pictures.test.ts mounts the 33 main views and the
  agent drill-down of a fixture agent in the bbs, plain and orbital looks
  on terminal and desktop (7 tests, all fail on the parent commit). It
  imports claude-code/testing, so it is listed in
  scripts/ci-test-excluded.txt with the console's other kit tests. The old desktop test only asserted "no Raster",
  which held while every picture was gone; it now asserts the Svgs arrive.

Fixes #4111

Co-Authored-By: Ruflo & AQE
2026-10-12 19:38:12 +02:00
rUv ba93ca51a3 Merge branch 'main' into fix/codex-mcp-backend-retirement 2026-10-12 10:38:11 -07:00
r f183b82e13 Merge pull request #4005 (rudycelekli) into batch 2026-10-12 13:32:49 -04:00
r 2814a10881 Merge pull request #3994 (rudycelekli) into batch 2026-10-12 13:32:49 -04:00
r aec93509e9 Merge pull request #3993 (rudycelekli) into batch 2026-10-12 13:32:49 -04:00
rUv f2ae86269b Merge pull request #4103 from ruvnet/docs/readme-tui
docs: mention the optional standalone ruflo tui (README, user guide, animated SVGs)
2026-10-12 09:44:23 -07:00
rUv 740d17f71e Merge pull request #4097 from ruvnet/fix/oct12-verified-issues
fix: accurate coverage reports and reliable SPARC/TDD workflow instructions
2026-10-12 08:56:43 -07:00
r 1ed13b37c9 Merge origin/main into docs/readme-tui 2026-10-12 11:56:41 -04:00
randRuFlo 72c3905e4d docs: mention the optional standalone ruflo tui in the README, with a user-guide section and animated SVGs
README gets a short optional pointer (npx ruflo tui, --plain) and one small animated SVG. docs/USERGUIDE.md gets a
Terminal UI (optional) section: requirements, commands, keys, exit codes, what each page shows, the AI page's ask-first
card and its Codex/OpenRouter rules, the honest limits and a pointer to the Orbital theme. Both SVGs are built from real
frames of ruflo-tui 3.56.7 in a throwaway sample project; scripts/render-tui-svg.mjs rebuilds them (CSS animation only,
no scripts or external references, prefers-reduced-motion shows the first frame).

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-12 11:41:11 -04:00
randRuFlo c84a6d0a18 chore(shared): 3.0.4 (RVF tail recovery + runtime dependencies), CLI/root pins, fresh-consumer smoke
Carries #4031 (rudycelekli) and #4091 (proffesor-for-testing); oversized-tail and permission-safe
recovery per rUv's review and martinvlad's fresh-consumer finding. Adds scripts/smoke-shared-fresh-consumer.mjs
(packed tarball, plain Node) and a CI step for it.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-12 11:21:58 -04:00
RuFlo b4cbd4be9f review(#4097): CI test ratchet exclusion, coverage report size cap and count clamping, sparc 0.3.5 / testgen 0.3.3, sanitize receipts
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-12 11:15:50 -04:00
randRuFlo 7718a142b4 feat(tui): the AI page: ask Codex (read-only, pinned) or OpenRouter, each question after a card (ADR-489 phase 3)
Page 6. Reuses harness.send and the conversation bridge's sendTo, not a second harness. Host.spawn runs only the pinned Codex 0.162.0
release (never current or PATH), read-only, from a fixed argument allow-list; Host.httpSend sends only https POST to openrouter.ai or a
convoTargets host, never follows a redirect, and a key is read by variable name and never drawn. Enter shows a card of exactly what would be
sent; a lone y answers it only while it was drawn in full (#3983); spend cap from the provider-reported cost. e2e host matrix gets a tui leg
(keyless in CI, live gated). Not in this PR: the workspace-write toggle.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 16:54:16 -04:00
rUv 228d578173 Merge pull request #4072 from ruvnet/fix/memory-purge-native-4057-hooklog-4056
fix(memory,hooks): keep on-disk format on sql.js write-back (#4057); command-recording off switch, redaction, expired-row cleanup (#4056)
2026-10-11 12:40:18 -07:00
rUv f9732f1c81 Merge pull request #4073 from ruvnet/feat/mods-hardening-toast
feat(mods): doctor repairs that repair, --strict, atomic install, startup self-check (mods 0.6.0) + toast spike
2026-10-11 12:25:06 -07:00
RuFlo 5061ae1ef0 chore(ci): list the node:test shim test in ci-test-excluded (it has its own runner)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 14:25:59 -04:00
randRuFlo 33cbdc76fe chore(ci): keep the new ruflo-mods kit test out of the root vitest
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 14:12:33 -04:00
randRuFlo 2bf5b1c9c9 chore(e2e): report the CI-only init observation as flaky with evidence; record it in ADR-490
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 13:40:10 -04:00
randRuFlo e8adb06a11 chore(e2e): replay the initializer's exact which-codex call in the sandbox env
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 13:35:40 -04:00
randRuFlo 4f00df535a chore(e2e): allow one row to carry long evidence
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 13:28:17 -04:00
randRuFlo 7e30957a32 chore(e2e): include the tail of init output in the failing plugin-install row
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 13:28:07 -04:00
randRuFlo 5b2390912d chore(e2e): record what the sandbox shell resolves for codex when the init row fails
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 13:10:04 -04:00
randRuFlo 760b4cd0b3 chore(e2e): show the Codex lines of init output when the plugin install row fails
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 13:06:45 -04:00
randRuFlo 589111a20f chore(e2e): say why the init --dual plugin install row failed
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 12:59:56 -04:00
randRuFlo 9022af133e chore(e2e): build the status regex instead of a literal with an interpolation
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 12:43:48 -04:00
r b0a35764f3 Merge remote-tracking branch 'origin/main' into feat/e2e-host-matrix 2026-10-11 12:43:22 -04:00
randRuFlo 3da68a735a chore(e2e): use an obviously fake stub key so secret scanners stay quiet
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 12:43:22 -04:00
randRuFlo 98f2eb5213 feat(e2e): three-host integration loop (Claude Code, Codex, OpenRouter); fix MCP resources capability and Codex plugin clone budget
ADR-490 (loop), ADR-491 (mods host integration, Proposed). The loop's first run found two defects, fixed test-first:
- ruflo mcp start advertised resources but answered resources/* with -32601 (3 stdio servers).
- init --dual's marketplace clone ran under a 20 s budget (17.5 s measured), swallowing the real error.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 12:43:14 -04:00
randRuFlo bb6a958c53 fix(plugins): review of 9 plugins (group D) - verified against the real CLI/MCP, bump versions
Checked every CLI command, flag and MCP tool the skills tell the model to use
against ruflo 3.56.5 and the tool registry. Fixed what was false:

- workflows 0.6.6: MCP tool names with underscores that do not exist; gaia-bench
  has no --dry-run/--task-id (unknown flags are ignored, so the documented cost
  estimate started a billed run); opt-in guard for native workflows; stale smoke
- security-audit 0.3.4: non-existent `security report`, wrong `audit` usage,
  scan depth table that described phases the scanner lacks; --fix gated
- swarm 0.3.7: `swarm watch/health/shutdown` do not exist; swarm-watch.mjs poller
- rag-memory 0.3.5: `ruflo recall`/`memory bridge` do not exist; shell-quoting
  of user text in /recall
- testgen 0.3.2: tdd-repair now enforces that the test is not edited; shell
  quoting; invalid --limit
- rvf 0.3.6: export went through the public IPFS marketplace; now memory export
- ruvllm 0.3.4: provider claims and persistence claims corrected
- observability 0.3.4: no invented traces when nothing wrote spans
- plugin-creator 0.4.3: required plugin.json fields and tool existence check

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 11:33:24 -04:00
rUv 47ad62e5af Merge pull request #4054 from ruvnet/fix/win-hooks-4045
fix(init): Windows hooks launch through node -e, not cmd /c (#4045)
2026-10-11 07:48:54 -07:00
randRuFlo a606b3cfeb fix(init): Windows hooks launch through node -e, not cmd /c (#4045)
Under Git Bash MSYS rewrote the /c of the generated cmd /c IF EXIST hook, so cmd
started interactively, executed the hook's stdin JSON and created zero-byte files
from text after a >. The Windows hook is now a single node -e with no cmd, no
%VAR%, and none of < > | & $ or inner double quotes. It keeps the project-first
then user-profile fallback (#1943), user scope never reads the project, and the
helper runs as a child with inherited stdio so stdin and the exit status pass
through. pinToUserHelpers recognises the new form (exact match only) as well as
the old ones.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 09:31:30 -04:00
randRuFlo 57c71dbbd1 test: exclude the node:test codex-swarm manifest test from root vitest
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 09:30:22 -04:00
rUv ba26d996bb Merge pull request #4038 from ruvnet/docs/compact-live-validation
docs(mods): compactCarry live canary evidence + ADR-488 compactKeep design
2026-10-10 17:24:01 -07:00
rUv ebea43a793 Merge pull request #3990 from ruvnet/sec/helper-cli-from-helper-root
fix(helpers): resolve the ruflo CLI from the helper root, not the project (replaces #3953)
2026-10-10 15:54:07 -07:00
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
Rudy Celekli d38c56337a fix(metaharness): fail unreadable oracle pin audits
Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
2026-10-10 11:36:33 -04:00
Rudy Celekli 41dfba5245 Merge current main to recheck Codex MCP backend retirement
Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com>
2026-10-10 11:30:31 -04:00
Rudy Celekli 2c23959367 fix(scripts): run tool guard through symlinked paths
Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
2026-10-10 11:23:58 -04:00
Rudy Celekli 84f1b14390 fix(release): reject missing umbrella package identities
Signed-off-by: Rudy Celekli <rudy@gradiahq.com>
2026-10-10 11:20:45 -04:00
randRuFlo 72d895a81d fix(helpers): never interpolate a shell-active install-root path; run the delegation smoke from a helper root
The statusline now builds shell command lines from HELPER_ROOT (the checkout's
directory, chosen by whoever made it). A directory named p$(...) was expanded
inside the double-quoted command; shell-active paths are now skipped.

The statusline-generator delegation smoke ran the generated helper from tmpdir,
so with CLI resolution moved to the helper root it fell through to the registry's
published CLI (intelligencePct null). It now writes the helper into a throwaway
helper root whose v3/@claude-flow/cli is the repo's built CLI.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 10:54:15 -04: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