160 Commits
Author SHA1 Message Date
rUvandr e8c98eb916 feat(ruflo-console): ruRE page in TOOLS — static reverse engineering from the console (ADR-494) (#4430)
* feat(ruflo-console): ruRE page in TOOLS — static reverse engineering from the console (ADR-494)

A TOOLS page for the six rure_* tools of ruflo-rure, built the way the Sandbox
page is: six Dev Tools entries (dt-re-*) drawn on a page of their own, so they
share the confirm gate, palette ids and result panel. Five rows are $0 reads;
UNPACK .ASAR writes outside the project and asks first. A new 'sample' field
takes only a project-relative path. Results are the analyzed file's own text
and pass plain() so a hostile binary cannot put an escape on the terminal; a
number that is not a measurement reads n/a. A CLI without the tools says to
update. Enter in a ruRE field runs that page's row.

Tests: rure-page.spec.ts (catalog vs real schemas, readers vs real captured CLI
output, hostile answers, page, guide, palette, Enter routing) and
rure-e2e.spec.ts (every row's argv through the built CLI on real files,
including a hostile ELF; fails with plain() removed). Console 0.44.7 -> 0.45.0;
ruflo-rure 0.4.1 -> 0.4.2 (docs only).

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

* test(ruflo-console): ruRE e2e accepts either AIDefence outcome (CI has no AIDefence)

The .NET e2e asserted a string literal was 'hidden by AIDefence', true only
where the optional package is installed. In CI the tool reports screened:false
and the page says 'not screened: AIDefence was unavailable'. Both are honest;
the test now pins that the screening state is always on screen.

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

* fix(ruflo-console): ruRE EVM result no longer shows a doubled ellipsis

plain() already marks a clipped value; the reader added a second one to the
event topic and the IPFS hash. Test pins it.

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

---------

Co-authored-by: r <r@x>
2026-10-23 12:02:36 -04:00
rUvandr 98c3808276 fix(console): find the project folder on Windows for ADRs, exports and transcript save (#4358)
Three sites hardcoded `base.startsWith('/')` / `root.startsWith('/')`
as their "is the project folder known" guard. On Windows `state.cwd`
is a drive path (`C:\Users\...`), which never starts with `/`, so
each one refused regardless of settings:

- adr.ts discover() — the ADRs page never found a project's folder
- event-export.ts resolveTarget() — Events/Timeline export
- wf-file.ts resolveExportPath() — the Workflows page's saved-view
  write path, and (transitively) the AI terminal's transcript save

All three now use the existing isAbsolutePath() helper (#4175 already
fixed the same bug class in register.ts). Two follow-on fixes were
needed once the guard was fixed:

- resolveTarget()/resolveExportPath() both forced a POSIX-style
  leading `/` onto the reconstructed path after splitting on `/`,
  discarding a Windows drive or UNC prefix. Now the leading `/` is
  only added back when the original absolute path was POSIX-style.
- wf-file.ts's own containment filter (`inside`) had the identical
  startsWith('/') bug, independently excluding every Windows root.
- wf-convo-live.ts's saveTranscript() pre-joined state.cwd into the
  string passed to resolveExportPath(), which refuses any backslash
  in its input — so a Windows cwd tripped that guard even after the
  above fixes. It now passes the relative file name only, matching
  resolveTarget()'s cleaner two-argument contract.

Fixes #4356 (reported by @marioja, with exact file/line citations and
a correct root-cause diagnosis for the ADRs page; this also fixes the
two related sites the report flagged as worth checking).

Validated: new windows-drive-path-sites.spec.ts (7/7), the full
plugin unit suite (219 files / 3340 tests), and the ADRs + export-
adjacent UI harness suites (adrs, labs, missions, watch — 27/27).

Co-authored-by: r <r@x>
2026-10-21 11:31:41 -04:00
rUvandr 4401c87d6d feat(ruflo-console): separate the nav's menu, groups, search and pages with a bar (0.25.1) (#3664)
The compact nav (ADR 424) ran its groups together with a gap. A dim bar now sits between the menu, each group and the search on the first row, and between the pages on each row below. The width check counts the bars, so the search still moves to its own row when it does not fit. Presentation only: groups, pages, hotkeys and search are unchanged.

Co-authored-by: r <r@x>
2026-10-20 03:26:25 -04:00
rUvandr d529a38a7c release: 3.58.0 (#4306)
* chore(release): 3.58.0 version bumps and changelog

Minor release: new memory peek command, Codex activity viewer, configurable
MCP rate limits, plus the #4303 install-breaking fix and a round of
correctness fixes merged since 3.57.2. Also bumps ruflo-console 0.44.4 ->
0.44.5 for the #4305 TUI fix, which shipped to main without a plugin version
bump (the same gap already documented as a past mistake in the console's own
changelog for 0.44.3/0.44.4).

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

* fix(ruflo-console): update smoke.sh's hardcoded version check to 0.44.5

The plugin.json version bump to 0.44.5 (for the #4305 TUI fix) broke the
smoke contract's own hardcoded expectation of 0.44.4 in step 1. Update the
step name and grep pattern to match.

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

* fix(ci): sync the smoke-workflow regression test to the real 15-minute timeout

#3950 bumped .github/workflows/all-plugins-smoke.yml's smoke-all job from
timeout-minutes 10 to 15 (the job now also checks out and smokes the first
external git-subdir marketplace entry, agentic-qe-fleet) but never updated
this test's hardcoded expectation of 10, breaking the Test Suite job on
every PR since.

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

* fix(memory): resolve sql.js's wasm dist path directly, not via package.json

fts5.test.ts located sql-wasm.wasm via require.resolve('sql.js/package.json')
then string-replaced the suffix. sql.js 1.14 tightened its exports map to
"." and "./dist/*" only, so that package.json subpath resolve throws
ERR_PACKAGE_PATH_NOT_EXPORTED even though the wasm file is present on disk —
caught by the existing try/catch and misreported as "sql.js isn't installed",
failing all 4 SqlJsBackend FTS5 tests with "sql.js/dist/sql-wasm.wasm not
found". Resolve 'sql.js/dist/sql-wasm.wasm' directly instead, which the
"./dist/*" export already permits.

Verified: 6/6 passing locally (was 4 failed before the fix).

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

* fix(ci): move pod-tick.test.mjs to the node:test exclusion list

Same fix as #4308: this file imports test() from node:test (not vitest)
and documents itself as "Run with: node --test" in its own header, but
was miscategorized into ci-test-baseline.txt. Running it under vitest's
shared worker process correlates strongly with the ERR_IPC_CHANNEL_CLOSED
crash hit 4/6 times on this PR's own CI (#4307). Applying here directly so
this release doesn't wait on #4308 to merge first.

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

* fix(ci): cap the ratchet's vitest worker count to 2

#4307: Test Suite (ubuntu-latest) intermittently crashes with tinypool's
ERR_IPC_CHANNEL_CLOSED at three different, unrelated points across 7 runs
on this PR, after ruling out any specific file as the cause (one
candidate, pod-tick.test.mjs, was fixed separately for an unrelated
reason and the crash still recurred at a different file). The pattern
(crash location varies, happens ~60-90s into a ~9500-test run) is more
consistent with cumulative memory pressure across the default fork
pool (one fork per CPU, ~4 on a standard runner) than a single bad
test. Capping workers at 2 trades some wall-clock time for headroom
while the real cause is still open in #4307.

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

* fix(graph-intelligence): build the optional cli import specifier from parts

#4307 investigation, round 8: once the worker-cap fix (3739f3a9) stopped
the random tinypool crash, Test Suite started failing deterministically
on plugins/ruflo-graph-intelligence/tests/phase4-adapters.spec.ts —
"./src/memory/graph-edge-writer.js" is not exported, even though that
spec file's own tests never execute the real GraphEdgesSource.listEdges()
(they all use inline fake listEdges() test doubles). The spec file does
statically import knowledge-graph-adapter.ts at module level, though, so
vitest's module-graph crawl sees the string literal and (CI-only, not
reproduced locally in 2/2 attempts) appears to eagerly resolve it outside
this method's own try/catch during collection.

Build both the primary and fallback specifiers from joined array parts
instead of literals, so no bundler's static import-specifier scan can
find and pre-resolve them — the actual resolution still only happens at
the real `await import(...)` call site, same as before.

Verified: full plugin suite green, 104/104 (was 8/8 on the one affected
file already — this closes the only CI-only gap).

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

* fix(ci): baseline token-optimizer.test.ts — real, pre-existing, unrelated bug

v3/@claude-flow/integration/src/token-optimizer.ts calls
this.agentBooster.editCode(...), but the real agentic-flow/agent-booster
module's AgentBooster/EnhancedAgentBooster class has no editCode method
at all (its real API is apply/applyBatch/prefetch/...). Confirmed by
enumerating the class prototype directly. Not a version-pin issue, not
caused by anything in this release — @claude-flow/integration isn't even
part of the release train. Filed as #4311 with the real-fix suggestion
(rewrite optimizedEdit() against the actual API) for whoever owns that
integration layer; baselining here so the Test Suite ratchet reflects
reality instead of blocking an unrelated release on pre-existing debt.

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

* docs(changelog): record the CI-reliability fixes found validating 3.58.0

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

---------

Co-authored-by: r <r@x>
2026-10-20 02:11:26 -04:00
Mathew BeaneandRuFlo ffc2b08279 fix(ruflo-console): stop pre-#4237 missions leaking into every project (#4254)
#4242 keyed the mission ledger by project, but a project with no ledger of
its own still took in every mission from the old shared key that had no cwd
(all of them, since cwd was only recorded from #4237 on), and the first save
copied them into the project's own key.

- Missions with no project are offered in Mission Control (adopt here / not
  this project) instead of taken in; until adopted they are not picked,
  handed to Claude or put in the prompt.
- Adopt stamps the project's cwd and removes them from the shared key;
  dismiss is remembered per project.
- A shared-key mission recorded for this project is taken in and pruned.
- A 0.44.3 copy with no project in a project key is offered the same way.
- loadLedger clears missions and active when the State's cwd changes
  (session.start reuses the State).
- Ledger storage moves to hooks/mission-ledger.ts (mission-control.ts would
  pass 500 lines); mission-control.ts re-exports it unchanged.
- Console 0.44.4: #4242 shipped under 0.44.3, so plugin update never
  offered it.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-19 12:55:40 -04:00
Korjavin Ivanandkorjavin 584bad756b fix(console): the rest of Mission Control's prose wraps at 80 columns (#3899) 0.44.3 (#4225)
0.40.2 and 0.43.7 wrapped Approvals, a mission's objective and the Plan tab's
own prose; some mission text still ended in "…" at 80 columns (tmux):

- launch steps: a detail that does not fit beside its label (Claude's
  guidance note, the screen verdict, the next task) wraps on rows under
  the step; "Create the mission and its tasks" no longer runs into its detail
- record: the expanded mission's state/plan/evidence/executor/blocked lines,
  the stale and attention notes, the legend and the observation note wrap
- Mission options: the "not offered by this session" hint wraps

Tests first: tests/narrow-width.spec.ts (2 new cases fail without the change).

Co-authored-by: korjavin <148765+korjavin@users.noreply.github.com>
2026-10-17 16:35:25 +01:00
randRuFlo 00002568a2 Merge main into fix/console-windows-rooted-4175; renumber console bump to 0.44.2
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-14 10:22:43 -04:00
randRuFlo fcd0fa59dd chore(console): 0.44.1 for the TUI Stage B and C changes
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-14 09:51:00 -04:00
randRuFlo 1e8d37e03a feat(tui): ruflo tui draws the console's pictures, looks and motion (console 0.44.0, ADR-489 phase 4)
The standalone terminal UI now leads each page with the same title art and
pictures the console draws, as coloured cells (Raster in the terminal kit),
in the console's looks (Classic BBS default, Orbital, plain), moving at
--fps with only the changed rows redrawn.

- tui/ansi.ts: Raster; control/escape/invisible/wide code points become
  spaces, malformed or oversized cells draw nothing
- looks: --look, t key; --boot; --fps, --no-anim, --no-pictures
- focus reporting pauses the animation clock; NO_COLOR, dumb terminals,
  and widths under 44 fall back to the words
- guide: flags, looks, the t key; corrects the confirm-card sentence
- ADR-489: phase 4 recorded, parity table skeleton
- README/guide SVGs regenerated from real frames (leak-checked)

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-14 05:44:48 -04:00
randRuFlo 9405bed863 fix(console): read the project on Windows: a drive path is absolute, so the cwd is not prefixed twice (#4175)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-14 05:21:33 -04:00
RuFlo 263826b0ef fix(console): hints name the skills pin from PINNED_SKILLS, limits documented; console 0.43.5 (#4113)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-12 15:42:40 -04:00
RuFlo 5caaa53a1b chore(console): 0.43.3 for the console_state expired flag (#4067)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-12 13:55:22 -04:00
randRuFlo 29714a9e4a fix(console,cli): ruflo tui page bar marks the AI page, help says 1-6, policy-trust path never relative to cwd (console 0.43.1)
- tui: the page bar was painted from session.state.view, which the AI page never sets, so on page 6 it kept the previous page lit; it now follows session.page (9 tests, 4 failed first)
- tui --help and the console README said keys 1-5; they are 1-6 and o c s e m a (test holds the help text)
- cli: policyTrustRoot() no longer joins an empty or relative $HOME, which put the anchor mirror and key under the working directory; falls back to the account home or refuses (2 tests, 1 failed first)
- docs: ruflo-tui-walkthrough.svg re-recorded from real frames with the AI page and its ask-first card, 6 AI marked

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-12 12:55:08 -04:00
RuFlo 6c79bcab76 Merge branch 'codex/console-orbital-theme' of https://github.com/ruvnet/ruflo into pr-4079 2026-10-11 23:45:37 -04:00
RuFlo 79f2199367 perf(console): land mask for the Orbital globe, theme bench, adversarial theme specs
- orbitalGlobe reads a one-degree land mask built once (0.407 -> 0.268 ms at 140x24, 0.176 -> 0.120 ms at 100x16; 0.16% of globe glyphs differ along coastlines); palette parsed once per theme
- scripts/bench-theme.mjs: per-tick cost of the animated pictures, Classic vs Orbital
- tests/themes-adversarial.spec.ts: 45 specs on import, store and model-facing text

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 23:45:27 -04:00
rUv edee18c62e perf(console): exclude inactive SVG frames from rendering 2026-10-11 20:28:28 -07:00
rUv 8c3192c306 fix(console): replay header entrance motion on demo navigation 2026-10-11 20:26:40 -07:00
rUv ddadeaae6c fix(console): draw missing SVG icons and align animated glyph cells 2026-10-11 20:26:39 -07:00
RuFlo dc38c094ae chore(console): port the SVG demo exporter from Python to Node
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 23:25:09 -04:00
r 2b3dc7f7d4 Merge branch 'codex/console-orbital-theme' of https://github.com/ruvnet/ruflo into pr-4079 2026-10-11 23:24:41 -04:00
RuFlo dc4a519a2a fix(console): Theme Studio boot line, help guide, by-name nav, 0.43.0, no Python, files under 500 lines
- boot log + self-check area + help guide for the themes view; nav test lists it as by-name
- bump console to 0.43.0 (plugin.json UTF-8 restored, CHANGELOG, version.ts, smoke pin)
- remove render-theme-demo.py (repo rule: no Python); README points at frames.json
- generate-console-theme skill: allowed-tools: Read
- split pane icons and startup loads out of pane.ts/controller.ts (both back under 500 lines)

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 23:24:30 -04:00
rUv b23b053d63 feat(console): export theme workflow as native animated SVG vectors 2026-10-11 20:19:04 -07:00
rUv 3fb35a5a0f test(console): add reproducible theme workflow demo and video export 2026-10-11 20:13:12 -07:00
randRuFlo 9cf03b3ab9 ci(tui): build the TUI bundle for the e2e matrix with an esbuild installed on its own (RUFLO_ESBUILD_DIR)
A root npm install crashes in arborist on this workspace; the tui leg only needs esbuild. build-tui.mjs looks in the repo first, then in RUFLO_ESBUILD_DIR.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 17:04:46 -04:00
randRuFlo ba6f9273a3 feat(tui): Swarm, Events and Missions pages, page bar and keys, resize, and no Claude-only chrome (ADR-489 phase 2)
Five pages (Overview, Cost, Swarm, Events, Missions) with keys 1-5 / o c s e m / Tab / Shift-Tab, a page bar, a key line that
shortens with the width, clear-and-redraw on resize, a position bar under 60 columns and a notice under 40. Room is left out on
purpose (a message box and Claude sessions this host does not have).

state.isStandalone is the capability flag: on this host the shared chrome is not drawn (no tab bar, footer buttons, Launch,
Ask Claude, Claude control card); a button nobody can press is not drawn, a state chip and a section title are. Missions reads
the ADR-406 record only. Under Claude Code nothing changes. Console 0.42.7.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 16:24:56 -04:00
randRuFlo c11b5461f5 feat(cli,console): ruflo tui, the console in a terminal of its own (ADR-489, phase 1)
Adds a standalone host for the ruflo-console views: a Node Host adapter
(confined reads, CLI-only run, everything engine-bound refused), a zero
dependency terminal renderer that is also the escape/secret chokepoint, and
`ruflo tui [--view overview|cost]` which draws the mod's own paneView.
Read-only; headless prints one plain frame. No hooks/ file changed, no
version bump, publish path untouched (bundle staging is a decision in the ADR).

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-11 09:47:49 -04:00
randRuFlo 4fce7223f1 chore(console): 0.42.6 version and changelog for #3979
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 21:00:18 -04:00
randRuFlo 91aa4eef59 fix(console): bind every confirm route to the card the person saw (#3983), version 0.42.5
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 20:58:55 -04:00
randRuFlo c5e4d40e36 chore(console): 0.42.4 version and changelog for #3984
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 18:09:17 -04:00
randRuFlo 02a0bb4bfa chore(console,mods): console 0.42.3 and mods 0.5.1 versions and changelogs for #3981
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 15:19:36 -04:00
randRuFlo 9a70d78e5a chore(console): 0.42.2 version and changelog for #3822 and #3823
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 10:58:58 -04:00
randRuFlo b35caec0f3 chore(console): 0.42.1 version and changelog for #3945
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 10:38:02 -04: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 0e99d1961a chore(console,swarm): console 0.40.8 and swarm 0.3.6 changelog and versions; merge main
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 12:49:55 -04:00
randRuFlo 5e6e454ee5 chore(console): 0.40.7 changelog; merge main
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 12:33:15 -04:00
r 88bdd80977 Merge remote-tracking branch 'origin/main' into w3939 2026-10-09 12:32:12 -04:00
randRuFlo f407072f35 chore(console): 0.40.6 changelog; keep perf probe entries gated as delete (do not lower the gate); reduce instead of Math.max spread
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 12:14:54 -04:00
randRuFlo 41b2175901 chore(console): 0.40.5 changelog; bound the answer scan on unclosed openers; merge main
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 12:11:58 -04:00
randRuFlo 555ee880e7 chore(console): 0.40.4 changelog and version, drop regex fallback in isOpenTask, test wf-links isOpen
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 11:43:41 -04:00
Dragan SpiridonovandRuflo & AQE f598890888 fix(console): disk writes work on macOS/BSD (append, exclusive create, create-with-folders, copy)
The console wrote every file through GNU-only argv: dd oflag=append
iflag=fullblock, dd conv=excl, install -D and cp --no-clobber. BSD dd,
install and cp (macOS) refuse all of them, so on a Mac events never
persisted ("345 waiting to write · write failed: the write exited 1"), ADR
initialise/propose never created a file (and blamed a race), exports and
first-time state files failed, the autopilot journal was never appended or
rotated, and its cross-session kill switch was never written.

- data/write-flavor.ts detects the platform once (uname -s, own 3 s
  deadline, process.platform fallback) before the controller exists; every
  flavor-dependent write awaits it and its builder requires the flavor.
- Linux keeps the GNU argv byte for byte.
- macOS/BSD use a frozen set of seven constant sh scripts with the path as
  "$1" (and "$2" for the copy source), never interpolated: each sets its
  umask, refuses a link or a non-regular target, uses noclobber for
  exclusive creates and creates missing folders. smoke.sh enforces the set.
- adr.ts reports the real write failure; worktree /proc specs skip off Linux.

Co-Authored-By: Ruflo & AQE
Claude-Session: https://claude.ai/code/session_01CGoza3gyxBjpaiMPhGHcHs
2026-10-09 16:23:20 +02:00
randRuFlo ba810a05fb fix(console): approvals badge counts only rows with an approve/deny action (0.40.3, #3920)
A refused mod or a permission deny has no action, so it held 'n to approve' up
with nothing to press. The band, menu badge, change notices and the Approvals
header now count waitingApprovalsOf(); notices stay listed, named apart.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-08 22:54:19 -04:00
3991f40670 fix(console): card-bound confirm, one model-facing sanitiser, linear escape stripping, own-key lookups, wrapped Approvals (0.40.2)
- A Yes runs only the card it was pressed on: every pending card has an id,
  the Yes / Always allow / Always accept buttons carry it, runner.confirm(seen)
  runs nothing (and says so) when another card took its place. A card Claude
  raised is re-checked against the level and Stop when it lands and when the
  Yes arrives.
- Everything returned to the model goes through modelLine (escapes, then
  control and invisible characters removed, cut, withheld whole when it holds
  a secret shape or an invite code) and every answer leaves through
  modelLines; a version such as v2.1.0-beta.3 is not an invite.
- ESCAPES is linear: an unterminated OSC ends at the next introducer or the
  end of the text (7.7 s on the old pattern became milliseconds on 1 MB).
- Mission state/status, hive role, audit severity and Settings plugin names
  that are Object.prototype keys read as unknown (own()).
- Approvals and a mission objective wrap at 80 columns instead of being cut
  with an ellipsis (#3899).

Specs ported from #3820, #3821 and #3822, adapted to main.

Co-authored-by: Dragan Spiridonov <spiridonovdragan@gmail.com>
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-08 17:38:02 -04:00
ruv 56a638190d fix(console): CLI launcher resolution and cold-start handling for settings writes (fixes #3914)
With the ruflo CLI option on npx, a confirmed action ran a cold online npx under the 90 s default and aborted with 'still running after 90000ms'. Resolve ruflo on PATH, a project-local bin or the cached npx copy first; give a cold download a 300 s limit and a first-run label; turn a timeout or ENOTCACHED into an error naming the fix. Console 0.40.1; ADR-407 update.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-08 15:25:08 -04:00
ruv aeaa51e99a feat(console): advisor checkpoints for mission loops (ADR-483)
Default-off Settings rows: a read-only claude -p consult (asked first, exact argv, turn budget, mission spend cap) before a plan locks, when the same check fails twice in a row, and before done; a third failure pauses the mission. Honest about not being the in-session advisor tool. Console 0.40.0.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-08 12:20:26 -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 aed428c43e feat(console,adr): ADR management registry, page and mission/loop/swarm integration (ADR-480)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 17:08:41 -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 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 5a0e5bff4a feat(console): Settings puts Claude control and spending first, folds ruflo config and plugin options to the end
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 10:29:40 -04:00