Commit Graph
11 Commits
Author SHA1 Message Date
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
ruv 6029b0aa2c chore(mods): drop provably unused hasSecret/tidy, swarm PLUGIN_NAME, ruos parseProbe; fix guidance screen header
Review 2026-10 #13. Patch bumps: ruflo-mods 0.3.5, ruflo-swarm 0.3.3, ruflo-ruos 0.1.1.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 02:28:30 -04:00
ruv c150ac7582 fix(ruflo-ruos): jobs API 400 is non-retryable; cancelled (exit 143) is a stop
From the ruOS lane's live e2e of ADR-105 (fleet 64261be):
- 400 (e.g. a Lite machine target) maps to invalid-input, never retried
- DELETE 200 ends the job cancelled with exit 143 and keeps prior output;
  the adapter drains output for up to 15 s after a cancel and reports
  cancelled as stopped, never failed (exec-poll: a runner we killed is
  stopped, not lost)
- ADR-405: ruOS validated the contract live; ruflo's JobsApiTransport is
  contract-tested against it, not called live by ruflo

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 18:51:53 -04:00
ruv 1dd984d04a fix(ruflo-ruos): align JobsApiTransport with the live ADR-105 jobs API
ruos-desktop #380 (fleet 64261be) is live. Contract deltas applied:
- POST 202 new / 200 idempotent_replay (reuse job_id) / 409 same key with a
  different request = client bug, surfaced, never retried / 429 cap with no
  server queue -> swarm-side backoff; timeout_secs clamped to 21600
- GET with wait_ms=20000 long-poll (adapter skips its own sleep, guarded
  against instant answers); 503 retried 1s/2s/4s; running=true while queued
- exited carries any exit code: only 0 is completed
- tests mock the exact live codes and fields; ADR-405 says JobsApi is
  contract-tested against the live spec but not exercised live (no
  control-scoped token; would need spend approval)

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 18:39:25 -04:00
ruv c957086f3b feat(ruflo-ruos): mod part — ruos status segment via $.ruflo.segment
ruflo-mods landed the flat segment API (#3608, ADR-404). The ruflo-ruos mod
reads only .claude-flow/ruos/hosts.json and sets $.ruflo.segment({id:'ruos',
text}) on session start, each prompt and every 15 s; try/catch, no feature
detection, no network, no $.ruos dependency. Vendored $.ruflo type with a
parity test; claude plugin validate + 3 claude plugin tests pass; smoke runs
them when the claude CLI is present. CI baseline lists the two new test files.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 18:13:29 -04:00
ruv e1bf696d1a fix(ruflo-ruos): echo-proof nonce markers, CI ratchet entries, ISO heartbeat
- every remote command gets a fresh 64-bit nonce; markers print as
  RUOS<nonce>_NAME via printf 'RUOS%s_NAME' '<nonce>', so the token never
  appears in the command or its desktop_exec echo; parsers accept only
  whole lines with that command's nonce (test replays raw echoes that
  contain every marker name)
- test that poll command + 2 KiB slice fit the ~4 KiB cap, echo counted
- pid file holds digits only; audit hash masks the nonce (stable)
- scripts/ci-test-baseline.txt: the 6 node:test files (run by smoke.sh)
  that root vitest reports as 'No test suite found' (lead-authorized)
- hosts.json heartbeatAt is ISO for the swarm pane (#3607)

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 18:02:46 -04:00
ruv 30cd360b6b feat(ruflo-ruos): JobTransport (exec-poll + ruOS jobs API), live-run fixes, ruOS design rules
Live E2E on rUv's Work Desktop (2026-10-01) found that desktop_exec echoes
the command it ran and head-caps stdout at ~4 KiB:
- strip the exec frame and match every marker as a whole line (the echo
  contains the marker names and would always false-match)
- poll slices drop to 2 KiB

Design rules from the ruOS lane:
- JobTransport with ExecPollTransport (now) and JobsApiTransport (ADR-105,
  feature-detected; run id = idempotency key; 404 never retried; capacity
  backoff), adaptive 1s->10s polling, attach to re-read after a restart
- fleet MCP is stateless and the only external transport; SSH :2222 is
  in-tenant only; credentials from env or @cognitum/ruos file, redacted;
  read-only tokens degrade with insufficient-scope
- never issue desktop_delete/secret_delete (runtime guard + static test)
- llm_route_get before launch; per-run audit record; Lite browsers filtered;
  128-bit run ids; 23:00 stopAt recorded in swarm state; deploy read-only
- ADR-405 updated incl. TOFU accepted risk and live evidence

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 17:58:01 -04:00
ruv 8ab1703158 fix(ruflo-ruos): merge hosts.json, detect a killed runner, never skip bytes on a truncated poll
- hosts.json is read-merge-write: discovery keeps agent placements and a
  run keeps the other hosts; finished agents are removed
- poll reports runner liveness (kill -0); a dead runner without an exit
  code fails fast instead of waiting out the timeout
- only whole base64 quanta are decoded, so a truncated tool result never
  advances the offset past bytes it did not deliver
- the 23:00 auto-stop window applies to cloud desktops only

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 17:44:40 -04:00
ruv 56e847b79e feat(ruflo-ruos): README, local overhead benchmark, typecheck in smoke
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 17:39:26 -04:00
ruv 92ff48b7b5 feat(ruflo-ruos): commands, skill, agent, smoke contract, deploy-info, ADR-405
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 17:38:09 -04:00
ruv bd228c68ad feat(ruflo-ruos): host adapter, audited command builder, fleet MCP + SSH transports
Optional plugin core for running ruflo swarm agents on the user's own ruOS
desktops (ADR-405). Fleet MCP (tenant-authenticated) and per-tenant SSH :2222
only; the :17870 executor is never contacted. Swarm state flows through
ruflo's existing agent_* and claims_* tools in-process.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 17:34:38 -04:00