Commit Graph
1038 Commits
Author SHA1 Message Date
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 ce18551073 Merge pull request #3943 from proffesor-for-testing/fix/console-leftovers-3822-3823
fix(console): bound CLI numbers at the reader, keep unreadable counts visible, and a resume by Claude keeps hand-out counts
2026-10-10 12:19:26 -07:00
rUv 3d2c16dd23 Merge pull request #3986 from ruvnet/sec/optional-modules-own-install
fix(cli,plugins): resolve executed optional modules from the tool's own install (replaces #3954; security review in PR body)

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-10 11:44:57 -07: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
Dragan SpiridonovandRuflo & AQE 31c288db71 fix(console): bound CLI numbers at the reader, keep unreadable counts visible, and a resume by Claude keeps hand-out counts
Leftovers of #3817/#3822 and #3818/#3823.

Numbers from CLI JSON (#3822). JSON.parse('1e999') is Infinity; a count can
also be negative, fractional or absurd. Bounded where read with data/safe.ts
countOf / ratioOf and a new measureOf (finite, within +-1e12):
- secure.ts scanReader: every severity count and the total are at least
  the listed findings, so a summary never reads CLEAN beside a listed
  finding. A count or total the tool printed but no reader can trust stays
  UNKNOWN (SecFindings.unreadable / isTotalUnknown), with the listed
  findings only as its lower bound: "critical ?" / "high ≥2 ?",
  "? findings (total unreadable)", COUNTS UNREADABLE. securityBand() is the
  one rule for the band (views/bar.ts) and the menu badge (menu-style.ts):
  it warns on high/critical ("N+" when anything is unknown) and on any
  unknown count or total. Threat confidence via ratioOf, composition score via measureOf.
  The verdict-exit judgement (#3934, SCAN_FOUND/countsWith) is unchanged.
- Same class swept in perf.ts, mh-lab.ts (labLines cells, gepa chars,
  genome ids, receipts), neural.ts, memory-lines.ts,
  data/evolve.ts, data/research.ts and data/cli.ts.

Mission resume (#3823). setPaused takes who resumed. The mission-resume
palette entry built inside Claude's console_run (state.control.viaModel)
resumes as 'model': hand-out counts are kept and an advisor stop-the-line
is not re-opened, so an exhausted task gets no new billed hand-out. The
person's resume (page buttons, palette, a typed /ruflo run) still gives
every task its hand-outs back.

Co-Authored-By: Ruflo & AQE
Claude-Session: https://claude.ai/code/session_01CGoza3gyxBjpaiMPhGHcHs
2026-10-10 10:57:58 -04:00
Dragan Spiridonov 4c95a6a1b6 fix(cli,plugins): resolve executed optional modules from the tool's own install
The CLI, two MCP tools and two plugin scripts imported or ran code found
relative to the cwd, which is the opened project:
- doctor (metaharness check), `metaharness` command and metaharness MCP
  tools: plugins/ruflo-metaharness/scripts under the cwd;
- testgen MCP tools: plugins/ruflo-testgen/scripts under the cwd, reached
  on every published install because that plugin is not bundled;
- init: <cwd>/node_modules/@claude-flow/codex;
- embeddings: <cwd>/node_modules, <cwd>/../node_modules and a fixed
  /workspaces/claude-flow path for agentic-flow;
- ruflo-ruos ledger: the CLI's mcp-client resolved from the cwd;
- cost-tracker compact.mjs: @claude-flow/integration resolved from the cwd.

Each now resolves from the tool's own install (module location /
createRequire(import.meta.url)), plus the user's marketplace checkout for
the plugin scripts. The project remains the data/scoring target.

Test: optional-module-resolution-trust.test.ts (10 cases, all fail on main).
2026-10-10 10:45:48 -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
Dragan SpiridonovandRuflo & AQE b9086fc471 fix(console): mission create retries only real lock timeouts, undoes and reads back on abort, reports run outcomes in lastResult
On a project whose policy state is large, every `ruflo mcp exec` waits on the
policy state lock and some calls fail with policy-state-lock-timeout
(#3164, #3892). Mission create made 15 sequential task_create calls; one
transient failure aborted the whole mission, cleanup cancels were
fire-and-forget (orphan pending tasks while the page said they were
cancelled), the CLI mission record was left planned, and the reason was never
shown. The outcome of a run that reports for itself (mission create, ADR
writes) never reached console_state.lastResult. resultOf also read the
`Parameters:` object the CLI prints before any `Result:` line as the answer.

- data/mcp-run.ts: read only after the CLI's own `Result:` line (string-aware
  bracket matching); the failure reason from data/failure.ts. Transient only
  on exactly policy-state-lock-timeout, the caller's own structured time
  limit, or a non-zero exit with stdout and stderr both empty. Any answer,
  any other error line (a denial mentioning a timeout, command not found)
  and any host rejection are final.
- mission-create.ts: retries after 1, 2, 4 s. task_create has no request id:
  after each wait, and once more after the last failed try (a lost answer),
  the store is read for exactly this step's task (description and both
  tags carry the new mission id; a 5 min skew window); one is used, several
  stop the chain, an unreadable store stops a retry. Strict time: no call,
  wait or read starts after its deadline (3 min, cleanup 2 min more), each is
  cut to the time left, and a call the host never answers is let go then.
  One create at a time per console; unique request ids. On abort: cancel
  every open task of the mission in the store (not only acknowledged ones),
  cancel the mission record (again at the revision a conflict names; also
  when mission_plan is refused), then READ BACK the store and the mission
  observation and report what they show, and what was left for lack of time.
- ActionSpec.run may answer a RunReport; the runner keeps it as the console
  outcome when the run ends, unless the outcome slot was replaced meanwhile
  (another action reported; then it goes to the Events feed). The
  verdict-exit judgement in runner.ts is unchanged. Mission create and ADR
  init/propose/status writes answer theirs.
- tests: real `ruflo mcp exec` transcripts (ruflo 3.56.1) as fixtures.

Co-Authored-By: Ruflo & AQE
Claude-Session: https://claude.ai/code/session_01CGoza3gyxBjpaiMPhGHcHs
2026-10-10 10:35:47 -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 f047a545f0 fix(console): fold the Sessions list, honest wording, read budget for first reads, Codex sub-agent lineage
- Sessions list starts folded; jumping from the queue opens it.
- First reads past a pass's byte budget wait for the next pass ("not read yet").
- A Codex sub-agent rollout's trailing parent session_meta is lineage, not a second identity.
- ADR/CHANGELOG/README say discovery spawns nothing; the only write is the four-count summary.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 17:24:09 -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 39a6792f01 fix(x-gateway): escape every slash in scoped npm names (CodeQL js/incomplete-sanitization)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 14:51:37 -04:00
randRuFlo 733596cc1f feat(x-gateway): read-only GitHub/npm query tools on /mcp (ADR-485)
Adds ruv_github_search, ruv_github_repo, ruv_github_file and ruv_registry_latest
to the legacy /mcp surface: allowlisted owner (default ruvnet), public repos only,
SSRF-pinned URLs, redirects refused, size/time caps, TTL+ETag cache, per-client
and shared upstream budgets, results fenced as untrusted GitHub data. Directory
profiles (/chatgpt/mcp, /claude/mcp) are unchanged at twelve tools.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 14:28:35 -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
r dbbd1b14bc Merge remote-tracking branch 'origin/main' into w3942 2026-10-09 12:48:34 -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 df6aea0a46 Merge origin/main into fix/console-display-truth
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 12:13:19 -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
r 56ea638508 Merge remote-tracking branch 'origin/main' into w3934 2026-10-09 12:09:34 -04:00
rUv 5400cdf938 Merge pull request #3932 from proffesor-for-testing/fix/task-status-enum
fix(task,console): task_update accepts only the five statuses; "complete" is never re-dispatched or shown as pending
2026-10-09 09:09:19 -07: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
randRuFlo e2c7cfe221 fix(ai-team): keep portable allowed-tools: Read (repo frontmatter audit requires the field)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 10:57:11 -04:00
randRuFlo 339e99c36b feat(ruflo-ai-team): surface-neutral tool references, clearer skills and README (0.3.0)
- feat: skills name connector tools in plain language; allowed-tools with Claude Code namespaced identifiers removed so claude.ai and Cowork read them correctly
- feat: lifecycle skill covers run_complete; skills state real statuses, template ids, budget range
- feat: README examples per surface, auth and data section, troubleshooting
- fix: descriptions lead with what and when, no angle brackets
- chore: smoke asserts tool names, descriptions, README examples and directory bundle parity; directory bundle 0.2.0

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 10:33:31 -04:00
Dragan SpiridonovandRuflo & AQE a6608e8c84 fix(console,swarm): linear ADR scope matcher, ADR titles refused not cut, ADR digest validated and framed, prototype-safe What's new
- adr-scope: each `*` became a stacked `[^/]*`, so an ADR scope entry with
  many stars hung the console (10 stars: 8-15 s, ~6x per star) during verify
  and goal suggestions. A segment-wise glob matcher with the same semantics.
- ADR-481: a title over 120 is refused with the count at the proposal itself
  (page field, adr-propose palette, console_run); a mission-objective draft
  title that is shortened says so on the confirm card; cuts and counts are in
  code points (no lone surrogates; 120 emoji read back whole).
- ruflo-swarm: .claude-flow/console/adr-digest.json (committable by a cloned
  repo) was appended to every subagent prompt unframed. The reader now accepts
  only the console's shape (statuses, file identity, washed text, no
  duplicates), quotes each record's text with marker words neutralised, and
  frames the block as project data. A model-level mitigation, not a boundary.
- What's new: plugin-name maps are null-prototype with own-key lookups;
  __proto__/constructor/prototype never enter seen, toasted, pinned or
  dismissed records.

Co-Authored-By: Ruflo & AQE
Claude-Session: https://claude.ai/code/session_01CGoza3gyxBjpaiMPhGHcHs
2026-10-09 16:27:56 +02: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 a457cbf4dc fix(plugins): clean claude.ai plugin-validator findings (nested manifest, unknown keys, XML tags in skill descriptions)
- ruflo-plugin-creator 0.4.2: mod template manifest is plugin.json.tmpl (no nested plugin); scripts/scaffold-mod.mjs + test-scaffold-mod.mjs validate and test a scaffolded mod
- ruflo-workflows 0.6.5 / ruflo-arena 0.2.4 / ruflo-graph-intelligence 0.2.0-alpha.5: drop unused components / categories keys
- ruflo-metaharness 0.2.5: seven harness-* descriptions use {braces}, not angle brackets
- ruflo-ai-team 0.2.3 (+directory 0.1.1) / ruflo-x-gateway 0.9.5 (+directory 0.8.2): documentationUrl points at main, not the feat branch; store-listing keys kept (the directory reads them)
- scripts/check-plugin-manifests.mjs wired into all-plugins-smoke

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-09 10:18:04 -04:00
Dragan SpiridonovandRuflo & AQE 3c3ed992d0 fix(console): show times as times, a swarm's own agents, and labels that match the gate
- AgentDB mod panel read updatedMs through countOf, whose 1e12 cap (added
  in 44b157b52) clamps every epoch-ms time to 2001-09-09: "written 9161d ago
  (an earlier session)" for a file written minutes before. Times are read as
  times; implausible ones (before 2000, more than a day ahead) read n/a.
- Overview/Swarm/Workflows/status bar/topology credited a swarm with the whole
  agent store ("running · max 3 · 259 agents" for a swarm with 0 agents) and
  disagreed on its status (running vs finished). One helper
  (data/swarm-status.ts) gives each page the swarm's own listed/found count
  and its age; "stale" only on evidence (old record, no busy member, no
  recent member). An empty fresh swarm is still its own Workflows run; the
  roster of unlisted agents keeps the run id saved views and pins used.
- mission-goal's label said "(nothing is written)" but it is a write action;
  perf-bottleneck/optimize were gated as delete (needs full) because their
  note said the probe file is "removed". Labels and notes now match the gate.

Co-Authored-By: Ruflo & AQE
Claude-Session: https://claude.ai/code/session_01CGoza3gyxBjpaiMPhGHcHs
2026-10-09 16:14:47 +02:00
Dragan SpiridonovandRuflo & AQE df7af622ab fix(console): a verdict command's "found something" exit is an answer, and a failure names its real reason
security defend / scan / channel-scan / scan-plan and the metaharness alert
scripts exit non-zero to say "found something" while printing a valid JSON
verdict. The runner treated every non-zero exit as a failure, so exactly when
a safety check caught something, Claude (console_run / console_state) was told
it failed and got no verdict. Failure reasons took the first stderr line, which
on many installs is "[WARN] Skipped helper auto-refresh", hiding the [ERROR].

- ActionSpec.findings = { exits, isAnswer, found } per entry, taken from the
  CLI source: such an exit is an answer only when stdout holds a complete
  answer of that command's shape, judged on its top-level keys (a hostile span
  quoting "[ERROR]" or a nested failure cannot flip it), the answer says it
  found something, and nothing outside it (trailing stdout, stderr) reports a
  failure. A banner object before the verdict is skipped.
- The one-line outcome carries the verdict ("answered: UNSAFE · 2 threats").
- data/failure.ts: one failure-reason helper (wrapped MCP isError, top-level
  error, [ERROR] line, error-naming line; [WARN]/[INFO]/Parameters skipped),
  used by the runner, CLI probes and mission verify notes.

Co-Authored-By: Ruflo & AQE
Claude-Session: https://claude.ai/code/session_01CGoza3gyxBjpaiMPhGHcHs
2026-10-09 16:12:36 +02:00
Dragan SpiridonovandRuflo & AQE bc14216777 fix(task,console): task_update accepts only the five statuses; a task stored as "complete" is never shown pending or re-dispatched
task_update stored any string as a task's status, so an agent writing
"complete" left a finished task every reader misread: the ruflo-console
Automation kanban listed it under PENDING (offering assign/cancel), and
Mission Control derived it as ready, so nextTask() would hand finished work
to Claude again as a new billed turn.

CLI (mcp-tools/task-tools.ts)
- statusOf(): trimmed, case-insensitive, aliases complete/done/canceled/
  running/in-progress; anything else (incl. "" and prototype keys) is
  refused with the allowed list and the task is left unchanged.
- No schema enum on purpose: the HTTP/WebSocket registry validates enums
  before the handler, which would refuse aliases there but not over stdio.
- Completing through task_update now finishes the task as task_complete
  does (progress 100, completedAt, worker idle and counted once per
  hand-out); cancelling frees workers as failing already did. Worker
  effects run after the task store is saved.

Console
- taskStatusOf() reads the spellings older CLIs already stored; used by the
  kanban lanes and verbs, Mission Control derive (no re-dispatch), mission
  cancel, workflow links and the workflow guide.

Co-Authored-By: Ruflo & AQE
Claude-Session: https://claude.ai/code/session_01CGoza3gyxBjpaiMPhGHcHs
2026-10-09 15:54:18 +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
randRuFlo 3b58ab7de7 feat(ruflo-cost-tracker): 0.28.0, flag Grok list prices approximate
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-08 16:54:14 -04:00
randRuFlo e2575090c8 chore(plugins): ruflo-ddd and ruflo-sparc 0.3.4 changelog entries for native Codex hooks
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-08 16:53:35 -04:00
Stuart Kerr 24a83b3297 fix(plugins): allow native freeform inputs and version Codex hook repair 2026-10-08 16:52:49 -04:00
Mathew Beane 0e098e9307 feat(ruflo-cost-tracker): add Grok usage.json reader to cost-ledger
Read ~/.grok/sessions/<urlencoded-cwd>/<id>/usage.json (GROK_HOME override)
into the multi-provider ledger alongside Claude and Codex. One row per turn
when turns[] is present, else session totals; cached input treated as a subset
of inputTokens. Add grok-4.7-build / grok-4.6-build / grok-4.7 / grok-4.6 and
family fallback prices from docs.x.ai (Build Fast rates marked approx).
2026-10-08 16:52:42 -04:00
Stuart Kerr b968e34970 fix(plugins): add native Codex adapters for ADR DDD and SPARC mods 2026-10-08 16:52:42 -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 2a08b54a4c Merge origin/main into fix/console-input-truncation
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 18:14:01 -04:00
ruv dd180a29ed test: stronger wrap checks 2026-10-07 18:10:29 -04:00
ruv 7483d28f3c test(console): full-text helpers and input classes (ADR-481)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 18:09:56 -04:00
ruv 5d3d145ac9 wip(console): inputs never cut: chokepoints raised, refusals counted (ADR-481)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 18:02:19 -04:00
ruv bf67d3e304 wip(console): full-text helpers, mission goal never truncated (ADR-481)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 17:44:12 -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 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 578a1d3686 wip(console,swarm): ADR registry, page, mission/swarm integration (ADR-480)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 16:54:03 -04:00
ruv 7670a02849 docs(plugins): CHANGELOG.md for every plugin in the ADR-478 format, derived from git history
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 14:37:29 -04:00