LearnNewsExamplesServices
Frontmatter
id12635
titleRelax wakeSuppressed to cover FYI/awareness peer messages
stateClosed
labels
enhancementai
assigneesneo-opus-grace
createdAtJun 6, 2026, 3:46 PM
updatedAtJun 6, 2026, 6:53 PM
githubUrlhttps://github.com/neomjs/neo/issues/12635
authorneo-opus-grace
commentsCount0
parentIssue11829
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 6, 2026, 6:53 PM

Relax wakeSuppressed to cover FYI/awareness peer messages

neo-opus-grace
neo-opus-grace commented on Jun 6, 2026, 3:46 PM

Context

@tobiu flagged A2A wake-noise: peers wake each other for awareness-only broadcasts ("opened a PR — you're not the reviewer", "claimed lane X", acks) that don't warrant a turn. After weighing a new wake: boolean param, the operator converged on reusing the existing wakeSuppressed param — relax it from session-sunset-only to also cover FYI/awareness peer messages: "if we have wakeSuppressed already => relax it to e.g. 'fyi' messages... peers see it inside list_messages. less noise."

This is the outgoing-message complement to the incoming-prompt classification in Sub C (#12633) / #12619 — vega's awareness | actionable prompt-typing. Same axis (does this deserve a turn?), two surfaces (outgoing add_message here; incoming Stop-hook prompt-typing there). Shared vocab intended.

The Problem

wakeSuppressed already exists and mechanically already does what FYI needs — it suppresses the wake while the message still persists and stays visible in list_messages. The blocker is purely contract: the param's schema description currently forbids FYI use —

"STRICT: only for mailbox-only session-sunset handovers... DO NOT use for 'observer/FYI', coordination threads, status updates, or acknowledgments — those must still wake recipients."

So agents correctly obeying the contract wake peers for every FYI. Relaxing the contract unlocks the noise-control with no mechanism change.

The Architectural Reality

wakeSuppressed is honored at two verified read-sites — both already gate the wake correctly:

  • ai/daemons/bridge/daemon.mjs:338if (messageNode.properties?.wakeSuppressed) return null; (drops the message from the wake digest)
  • ai/services/memory-core/WakeSubscriptionService.mjs:1066... && !messageNode.properties?.wakeSuppressed; (gates the subscription wake)

The param is persisted onto the MESSAGE node by the add_message write-path and survives suppression — so an FYI-suppressed message is still delivered to the mailbox and surfaced by list_messages (exactly the operator's "peers see it, no wake" goal). The mechanism is complete; only the contract is strict.

The Fix

  1. Relax the add_message wakeSuppressed schema description: remove the FYI prohibition; bless FYI/awareness use (persist + list_messages-visible, no wake). Keep session-sunset as a still-valid superset.
  2. Update agent-facing guidance to the convention: actionable peer messages (you're the reviewer, I claimed your lane, REQUEST_CHANGES) wake; awareness-only broadcasts (FYI PR-opened, lane-progress, acks) set wakeSuppressed. (Primary surface: AGENTS.md §mailbox/A2A-notification guidance; §1b note: any .agents/skills/peer-role·lead-role touch is a minimal convention line referencing the relaxed contract — no router/Progressive-Disclosure change.)
  3. Keep the vocab consistent with vega's incoming awareness | actionable classifier (#12633 / #12619) so both surfaces speak one axis.
  4. No change to the two honor-sites (they already work); no new param (operator converged on reusing wakeSuppressed, not adding wake).

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Evidence
add_message.wakeSuppressed (tool schema description) @tobiu "relax to fyi"; this ticket Description relaxed: valid for FYI/awareness, not session-sunset-only Session-sunset use stays valid (superset); default still false (= wakes) current desc "DO NOT use for observer/FYI..." (verified, add_message schema)
ai/daemons/bridge/daemon.mjs:338 existing honor-site Unchanged — already drops suppressed from digest n/a daemon.mjs:338 (verified)
ai/services/memory-core/WakeSubscriptionService.mjs:1066 existing honor-site Unchanged — already gates the wake n/a WakeSubscriptionService.mjs:1066 (verified)
AGENTS.md / peer-role / lead-role FYI guidance this ticket Add awareness→wakeSuppressed / actionable→wake convention n/a guidance substrate

Decision Record impact

none — relaxes an existing param's contract; no ADR conflict. Aligned with Epic #11829's delivery/noise-control layer.

Acceptance Criteria

  • add_message wakeSuppressed schema description relaxed to bless FYI/awareness use (FYI persists + is list_messages-visible + does not wake); session-sunset documented as a still-valid superset.
  • Agent-facing guidance states the awareness→suppress / actionable→wake convention, vocab-aligned with the incoming awareness | actionable classifier (#12633 / #12619).
  • No change to the two honor-sites (daemon.mjs:338, WakeSubscriptionService.mjs:1066) — verified they already suppress correctly.
  • A focused test or doc-assertion confirms an FYI-suppressed message still delivers to the mailbox (no wake, still list_messages-visible).
  • PR documents why no new wake param was added (operator converged on reusing wakeSuppressed).

Out of Scope

  • Daemon idle-out / heartbeat pulse content enrichment — that's #12612 / #11909 (GraphLog pulses, not MESSAGE nodes; different mechanism).
  • Incoming-prompt classification at the Stop hook — that's #12633 / #12619 (the other surface of the same axis).
  • Adding a new wake boolean or wakePolicy enum (operator converged on reusing wakeSuppressed).
  • Wake-subscription trigger / delivery plumbing.

Related

  • Parent epic: #11829 (multi-strategy wake-driver substrate)
  • Same awareness/actionable axis (incoming surface): #12633 (Sub C), #12619 (persist-memory hook classifier)
  • Daemon-layer siblings (explicitly different mechanism): #12612, #11909
  • #12612's Out-of-Scope section explicitly defers this work to here.

Live latest-open sweep: checked latest 20 open issues 2026-06-06; no equivalent found (only #12612, which defers this).

Origin Session ID: 0f6d0fa0-327f-42ec-b970-e32f388699b4

Retrieval Hint: wakeSuppressed FYI awareness peer message noise add_message relax; awareness actionable wake axis outgoing add_message

Authored by @neo-opus-grace (Claude Code).

tobiu referenced in commit 6166623 - "feat(memory-core): relax wakeSuppressed to cover FYI/awareness peer messages (#12635) (#12641) on Jun 6, 2026, 6:53 PM
tobiu closed this issue on Jun 6, 2026, 6:53 PM