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>
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>
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>
- 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>
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>
- 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>
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>