The ledger was stored under one machine-wide key, so the active mission
of one project was shown, and injected into the prompt, in every other
project, and sessions in different projects overwrote each other's
ledger. Store it under mission-ledger:<cwd> like the UI view, record cwd
on new missions, and read the old shared key only as a fallback without
adopting its active mission or missions recorded for another project.
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>
* fix: bump @metaharness/darwin pin from ~0.10.2 to ~0.12.0 (#3219)
npm published 0.11.0 and 0.12.0 after the last pin bump, leaving the
optionalDependencies range, MH_DARWIN_PIN, and the plugin helper's
DARWIN_PIN_VERSION all stale. scripts/check-metaharness-pins.mjs now
reports clean (was: STALE), and the metaharness-pin-drift CI gate,
which runs on every PR touching these files, was failing repo-wide
as a result.
Verified: check-metaharness-pins.mjs exits 0; plugin test-pin-alignment.mjs
(12/12) and test-no-tool-time-npx.mjs (26/26) pass against the new pin.
Co-Authored-By: RuFlo <ruv@ruv.net>
* fix: update v3/pnpm-lock.yaml for the @metaharness/darwin ~0.12.0 bump
Minimal surgical patch (specifier/version + the resolution block's
version/integrity), not a full pnpm regen — a full `pnpm install
--no-frozen-lockfile` here also drags in unrelated transitive bumps
(ruvector 0.2.27->0.2.41, vite 7.3.0->8.3.4, etc.) that don't belong
in a pin-drift fix. Verified with `pnpm install --frozen-lockfile`.
Co-Authored-By: RuFlo <ruv@ruv.net>
---------
Co-authored-by: r <r@x>
* fix(ruflo-agentdb): stop the secret screen treating a hyphen-named memory key as a credential field
assignmentSecret() ran the KEY_NAME key-assignment check on every match, so
any entry whose name starts with auth (auth-flow-notes) plus up to 40 name
characters looked like a config field, and keyedSecret()/plausibleSecret()
then judged the entry's value as a credential: a write of
{ key: 'auth-flow-notes', value: 'getUser-not-getSession' } was refused
(#4202). A key that is itself a multi-word hyphenated name is an entry's
name, not a field, so the keyed check now skips it; the secret shapes still
screen the whole text, and single-word credential keys (auth, api_key,
token) keep blocking keyed literals.
Synced to the 39 plugin copies with scripts/sync-mod-screen.mjs.
Fixes#4202
Assisted-by: AI (automated contributor session, disclosed on the issue)
* chore(ci): exclude plugins/ruflo-agentdb/tests/guard-keys.test.ts from the root vitest run
The new test imports claude-code/testing like its six siblings, so the root
ratchet run (scripts/ci-test-ratchet.mjs) cannot collect it outside Claude
Code; list it in scripts/ci-test-excluded.txt per the documented convention
so ci.yml stays green until 'claude plugin test plugins/ruflo-agentdb' runs
it in all-plugins-smoke.
Follow-up to #4202
Assisted-by: AI (automated contributor session, disclosed on the issue)
The ADR-404 parity test (mods-route) compares the mod's route context with hook-handler.cjs.
#4172 changed intelligence.cjs scoring (inflection variants, IDF weights, coverage >= 0.15),
leaving the mod's trigram-Jaccard copy behind, so the parity job failed. Same algorithm now in
plugins/ruflo-mods/hooks/route/ranked-context.ts; ruflo-mods 0.6.1 -> 0.6.2.
Co-Authored-By: RuFlo <ruv@ruv.net>
The go prompt (: or /) takes an action as well as a page. A name is matched
literally against the console's palette entries (id, or name containing the
typed words, or a text command keyword), never fuzzily. A read runs at once
through Host.run (ruflo CLI by argv only); a change raises the console's own
state.pending card, pinned under the page bar, and runs only on a lone y while
every row of the card is on screen (state.shownCard). Paste, Enter, "yes", a
card too tall for the window or a replaced card run nothing; n/Esc drops it.
The console's own verdict on the run is pinned for 20 s.
- tui/pinned.ts: the card and result rows
- session: palette(), answer(), pending(), cardShown(), pinned()
- parity table wording, ADR-489 phase 6, guide; key line says "ask first"
- tests/tui-actions.spec.ts with a CLI stand-in recording the argv
Co-Authored-By: RuFlo <ruv@ruv.net>
- tui/parity.ts: a recorded decision for each of the console's views
(same / partial / equivalent / claude-only); tests/tui-parity.spec.ts fails
when a view in VIEWS has no decision or no row in ADR-489
- 0 opens the main menu (its keys open entries), : or / goes to a page by
name, Esc/Backspace is Back, --view takes any page; the console terminal
opens the AI page and the Room says on one screen that it needs Claude Code
- terminal renderer: a Box's width is honoured (the board's two groups side by
side) and the board's entry labels are drawn (they were blank)
- --mouse (opt-in, SGR): click a page chip, wheel scrolls; off by default,
switched off on exit, report bytes ignored without the flag
- CLI: --view validates against the loaded bundle's page list, --mouse flag
Co-Authored-By: RuFlo <ruv@ruv.net>
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>
Verified: convert gives every unit-norm input tanh(0.5)=0.4621171572, and
distance on unit-norm/off-ball points was acosh of a NaN or huge value that
serialised to null with success:true. Distance now uses the curvature-correct
formula and returns success:false outside the ball.
Co-Authored-By: RuFlo <ruv@ruv.net>
ruvllm_status now carries wasm.hint and the init error names the install
command; verified on a throwaway global ruflo 3.56.9 that
npm i -g @ruvector/ruvllm-wasm makes ruvllm_chat_format work.
Co-Authored-By: RuFlo <ruv@ruv.net>
0.2.25 ships without dist/core/onnx/pkg, so embed text failed and the
ruvector-onnx-embeddings-wasm remedy never fixed it. Verified in a throwaway
prefix that 0.3.3 embeds 384 dims with no add-on; refreshed the limitation
tables against 0.3.3 and bumped the plugin to 0.3.6.
Co-Authored-By: RuFlo <ruv@ruv.net>
agentdb_causal-edge returns readable:false plus a warning when graph_edges is RFE1-encrypted;
k-hop names the encrypted store instead of a generic unavailable backend; kg-traverse and
graph-navigator use agentdb_graph-query / agentdb_graph-pathfinder and stop calling
context-synthesize on entity records. ruflo-knowledge-graph 0.3.6.
Co-Authored-By: RuFlo <ruv@ruv.net>
0.40.2 wrapped Approvals and a mission's objective; the Mission Control page still cut its own prose at
the edge: the kind description, the empty-goal hint, the lifecycle line and each planned task line.
They now use paragraph(). Tests first: tests/narrow-width.spec.ts (4 new cases fail without the change).
Co-Authored-By: RuFlo <ruv@ruv.net>
- #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>