0.2.20
Behavior changes
- The PWA run-graph editor can start a new graph on an editable canvas: add nodes from the palette (drag or tap), connect outcome edges (ok, rework, fail), edit node properties, mark start and end nodes, check it with a separate validate button, and save it.
- The PWA run-graph editor can run a saved graph as a demo run (operator only, built-in side-effect-free recipes) and colours each node on the canvas as it runs, finishes or fails.
- In PWA chat, picking a skill from the
$picker after typing a task now builds/run-skill <skill> <task>so the skill actually runs instead of sending a plain prompt. - TUI
/helpfits its overlay on wide terminals again (adds columns before falling back to the chat log), so Esc closes it. elanous retro facts --since 24h --jsonlists retrospective facts from the log store: draft PR births and supersede deaths, supervisor stop reasons and task-agent outcomes (read-only).- In the PWA graph editor, each node keeps its demo-run state on the canvas (running, done, failed) as a coloured ring and a word after the run ends.
- A harness run that ends parked now records the parked outcome by editing its single PR status comment instead of posting a second comment, so the PR author gets one notification email per PR.
- The release screen and away alerts say a gate shard is running past its plan instead of showing «0 minutes left».
- PWA chat no longer turns a multi-line message that starts with the harness trigger phrase into a one-line harness ask; it stays a normal chat turn.
- On the PWA loop activity map, a launch edge with no run edge for the same ref after 10 minutes is now labelled a ghost (ghost, no run ledger for N minutes) with a red dotted line and no moving packet, so it no longer looks like it is running.
- The PWA loop map no longer marks every launch older than 10 minutes as a ghost: the edges API now attaches the bound run id to a launch edge, and only a launch with no bound run and no same-ref run edge after 10 minutes is shown as ghost.
- The PWA release strip no longer shows a red "blocked" line for a failed node in a run whose status is done; it shows an amber "node failure reported, run finished" warning instead (running and failed runs keep the blocked line). Run-list start times carry a KST label.
- The PWA decisions screen gains a notices and opinions tab: it lists messages that seats and loops sent to the CEO inbox (read-only; the CEO cursor is not advanced), and a reply is posted to the original sender's inbox. The route
/v1/ops-board/noticesrequires owner auth and answers only on localhost or tailnet hosts. elanous config driftandelanous config explain <key>show, read-only, which config keys differ between the production config and derived test-universe copies (counts and example paths, unreadable configs reported separately, secret values masked).- Telegram /runs lists running harness runs like the TUI.
- When a harness PR merges, open harness sibling PRs that touch the same files are told right away: a live owning run gets one rebase-and-regate memo in its control inbox, and a PR with no live run gets the
elanous:needs-rebaselabel (no PR comments, at most 10 siblings per merge). - Sibling resync after a harness merge no longer fetches the file list of every open harness PR: already-marked PRs are skipped, branches sharing path tokens with the merged files go first, at most
harness.siblingResync.maxFetch(default 40) file lists are fetched per merge with 6 in flight, and the summary event records files fetched, skipped counts and duration. - Harness runs that stop (merge held, implement aborted, blocked draft PR open failed, nonzero Pod exit, or a task-launched child exiting nonzero right after launch) now append one
stopline to the run ledger with a closed class, a one-line cause of at most 120 characters, an evidence reference and a next move; existing ledger entries, PR bodies and log events are unchanged.
Plus 73 internal changes.