Files
Devika Verma eeb3c04d91 fix(gui): the turn summary counts changes that worked, and pairs results by call id (OPE-238)
Review of the first version against 366 recorded runs found four defects and one
semantic gap, all fixed here.

- Two same-named calls in one batch swapped results, exit codes, origins and audit
  links in the live view: the finished event was matched to the LAST pending item by
  name. `tool_proposed` now carries the tool call id and the GUI matches on it.
- A command's exit status was read from the 300-character result preview; a long
  command pushed it out, and a timed-out command showed a green dot. The exit code,
  time-out and background flags now ride on `tool_finished` and on the persisted
  display sidecar.
- After a reload every non-denied call replayed as "ok", so a failed write showed as
  done. The status is persisted with the result and replayed.
- A notice inside a turn (compaction, continuation, a saved memory) split the summary
  in two and showed the first half while the turn was still running. One block per
  turn now, emitted after the answer.

The header reads "N changes auto-approved" and the count means "things that changed
state and that nobody approved": the engine stamps each cardless call's effect
("change" or "read", from its risk class and tier) and the summary counts failed
attempts and read-only actions apart. Several edits of one file collapse into one row;
background commands are labelled; after 25 rows the list offers the rest.

`turn_summary` gains `failed` and `reads`, and per-action effect, tier and shell
outcome; docs/headless.md describes the fields.
2026-10-29 14:08:30 +05:30
..