Skip to content

watch-inbox: tighten no-narration discipline to explicitly require truly empty assistant turn on bare Monitor wake #610

Description

@michael-wojcik

Background

`commands/watch-inbox.md` §Overview already says:

Monitor is an alarm clock, not a mailbox. On `INBOX_GREW`, end the turn and return to idle without emitting acknowledgment text or narrating the wake event...

And the §Overview audit anchor flags as a failure mode: "the woken lead emitting acknowledgment text like `(Alarm.)` or `(Idle ping.)` instead of returning to silent idle".

Observed Failure Mode

The current language doesn't explicitly forbid degenerate single-character acknowledgments like `.`, whitespace, or one-token replies. An LLM following the no-narration spirit but defaulting to "the harness probably needs something" emits `.` per bare Monitor event — which is functionally narration in stunted form, still consumes a turn slot, and pollutes the transcript.

Empirically observed in session `pact-7b1e760a` while orchestrating PR #609:

  • Agent emitted `.` on 3+ consecutive bare `INBOX_GREW` events before user flagged it.
  • After user explanation, agent claimed it would "attempt empty content next bare event" but defaulted back to `.` on the next opportunity.
  • Once explicitly tested, the Claude Code harness DOES accept truly empty assistant turns — terminal display goes `Monitor event → next user prompt` with no assistant turn between.

The agent's failure mode wasn't disagreement with the discipline; it was an unstated assumption that the harness required some token per turn. The current §Overview prose does not contradict that assumption.

Proposed Fix

Add an explicit instruction in `commands/watch-inbox.md` §Overview alarm-clock paragraph (or as a new §Discipline subsection) stating:

The harness accepts truly empty assistant turns on bare Monitor events. Do not emit a single-character placeholder (`.`, whitespace, newline) as a degenerate ack. The desired output is genuinely empty content — the terminal should go from Monitor event directly to the next prompt with no visible assistant turn. `.` is narration in stunted form and is forbidden by the same rule that forbids `(Alarm.)` and `(Idle ping.)`.

Same audit-anchor pattern as the existing alarm-clock paragraph: explicit-rule-plus-rationale so an editing LLM can't silently drop the discipline.

Cross-References

  • Existing `feedback_wait_in_silence_across_idle_pings` memory in user auto-memory
  • `skills/orchestration/SKILL.md` §Wait in Silence
  • Communication Charter Part I (idle-boundary discipline)

Test Invariant

Hard to mechanically pin (LLM-behavior, not file-shape). Two options:

  1. Runbook addition to `pact-plugin/tests/runbooks/591-inbox-wake.md`: a manual verification step that fires a Monitor wake while the lead is idle and asserts no visible assistant content appeared.
  2. Phrase pin in `test_watch_inbox_command_structure.py`: assert the new explicit empty-turn instruction string is present in the §Overview block. Catches discipline-language drift; doesn't catch LLM compliance.

Option 2 is the agent-reader-primary catch (per the pinned axiom).

Out of Scope

  • The corresponding teammate-side discipline — teammates don't run Monitor and don't see Monitor wake events; the rule is lead-only.
  • General "wait in silence" guidance for non-Monitor idle pings — already covered by orchestration §Wait in Silence.

Source

Surfaced 2026-05-02 in dogfood orchestration session pact-7b1e760a while running peer-review on PR #609. Empirical confirmation of empty-turn capability happened in that same session.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions