Skip to content

operator: echo the loop/observation trigger into the panel#380

Merged
edwin-zvs merged 1 commit into
mainfrom
operator-panel-quiet
Jun 6, 2026
Merged

operator: echo the loop/observation trigger into the panel#380
edwin-zvs merged 1 commit into
mainfrom
operator-panel-quiet

Conversation

@edwin-zvs

Copy link
Copy Markdown
Contributor

Problem. The operator panel showed the operator's response to each ambient/observation turn (noted, Worked, a finding) but not the input that triggered it — the observation is a Message event, never rendered to the panel's PTY. So watching the panel you saw context-free noted / Worked / noted … and couldn't tell what was being noted.

Two stale-string facts behind this (both from #376):

  • The ambient-turn suppression (meant to hide ambient chatter) keyed on "...ambient operator loop tick", but the loop's observation became "...ambient fleet monitor flagged" — so it never fired and responses leaked into the panel.
  • The intent has since shifted: responses should be visible (per request), just with their trigger shown.

Change

Before the response streams, the operator echoes the OBSERVATION: trigger into the panel (dim), with the monitor's instruction boilerplate stripped so only the substance shows. The panel now reads question → answer:

│ ambient monitor flagged:
│ s277f8d4 "minibuffer…": blocked waiting at a prompt — "› Write tests for @filename"
noted
* Worked (2s)

Also removes the dead ambient-turn PTY/message suppression — it never fired, contradicts the "show responses" intent, and was a trap (fixing its string would have silently hidden the responses the user wants).

  • observation_panel_echo() formats the trigger (strips OBSERVATION: + the monitor boilerplate, dims each line); emitted as PTY before the user Message. Fires for fleet-event observations too, so those replies get context as well.
  • Removed ambient_turn detection + both emit_pty=false/emit_messages=false blocks.

The typewriter monolog (#379) is unaffected — it consumes the response Message stream; this echo is PTY-only.

Tests

observation_panel_echo unit-tested (strips marker/boilerplate, keeps substance, None for real user input). 38 interactive tests pass; full build clean. Spec 0024 added.

Visual best confirmed live — after restart, an operator tick shows its trigger then the reply in the panel.

… suppression

The operator panel showed the operator's response to each ambient/observation
turn ("noted", "Worked", a finding) but not the INPUT that triggered it -- the
observation is a Message event, never rendered to the panel's PTY. So a user
watching the panel saw context-free "noted / Worked / noted ..." and couldn't
tell what was being noted.

Now, before the response streams, the operator echoes the OBSERVATION trigger
into the panel (dim), with the monitor's instruction boilerplate stripped so
only the substance shows -- an ambient monitor finding or a fleet event. The
panel reads question -> answer.

Also removes the dead ambient-turn PTY/message suppression: it keyed on the
stale "ambient operator loop tick" string (the loop's observation became
"ambient fleet monitor flagged" in #376), so it never fired -- and the intent
is now to SHOW responses with their trigger, not hide them. Leaving it was a
trap (fixing its string would have hidden the wanted responses).

The typewriter monolog (#379) is unaffected -- it consumes the response Message
stream; the echo is PTY-only.

- interactive.rs: observation_panel_echo() + emit it before the user Message;
  removed ambient_turn detection + both suppression blocks.
- Test: observation_panel_echo strips the marker/boilerplate, keeps substance,
  returns None for real user input. 38 interactive tests pass. Spec 0024.
@edwin-zvs
edwin-zvs merged commit a7c8643 into main Jun 6, 2026
1 check passed
@edwin-zvs
edwin-zvs deleted the operator-panel-quiet branch June 6, 2026 20:04
@edwin-zvs edwin-zvs mentioned this pull request Jun 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant