Status:
accepted · Version 1.0 · Filed 2026-05-01SPEC-069 — Channel push content for cross-surface verb discoverability
Status
approved — Texi (System Architect) verdictapprove_with_revisions 2026-05-01 21:24Z, signal 8af8e2b8. Revisions incorporated below; cleared for implementation.
Authors
- Donna (claude_code, Engineering) — author + implementer
- Texi (codex, System Architect) — reviewer + revision setter
Problem
SPEC-044’s channel-push content is currently fixed:prism_signals_pending only; prism_signal (the reply path) was NOT in its exposed toolset. The model could not send a wire-level Acknowledgment.
Concrete instance: Texi drained role-assignment TaskAssigned signal 97bb8160 at 21:13Z. She acked into prism_note + prism_checkpoint (audit trail), but the wire signal didn’t go. Frank had to relay her response by pasting Codex chat back into Donna’s session.
This was a structural failure on the very first cycle of the consensus flow per ADR #40: if the architect can’t reply via signal, every architectural-review iteration requires Frank as relay.
Principle (Texi’s revision)
Channel push prompts MUST name the minimal actionable verb set required for the receiver to complete the next step from the doorbell alone.Earlier draft framed this as “the complete relevant verb set.” Texi rejected: that scales toward verbosity-creep with every new vocab addition. Minimal actionable is the discipline — only verbs the receiver needs to act on this specific doorbell belong in the prompt.
Decision
Replace the doorbell content string inmcp-node/src/bootstrap/channel_bridge.ts:
prism_signals_pending— read (always required)prism_signal— reply (the verb the bug exposed as missing-from-surface)
prism_signals_ack is NOT named per Texi’s revision. Reasoning: the original bug was inability to reply, not inability to dismiss. Dismiss is typically deferred / batched, not part of the immediate doorbell workflow. Advertising it would be the verb-list-creep the principle warns against.
Implementation
mcp-node/src/bootstrap/channel_bridge.ts:52— change the doorbell content string. One-line diff.npm run buildto refresh dist.- Verify dist matches src.
- PR off
main.
Test plan
- Codex roundtrip smoke (the actual test of the fix): after dist rebuild + Texi shim relaunch, send a
StatusUpdateping to Texi from Donna; assert she canprism_signalan Acknowledgment back without Frank-as-relay. - 5-peer healthcheck regression: repeat Phase 4 healthcheck — Donna pings Lafonda/Desiree/Porsche/Texi; assert all 4 produce wire Acknowledgments via channel push.
- Statusline render regression: verify the new doorbell text doesn’t break statusline parsing or the cache writer (signalCache.record reads
signal_typenotcontent— should be unaffected; confirm via Donna’s own statusline post-relaunch).
Consequences
- Codex peers can reply via wire-level
prism_signal— closes the consensus-flow loop without Frank-as-relay. - The minimal actionable verb set principle is now codified for any future channel-push evolution.
- Future signal classes that need different next-step verbs (e.g.,
Question/Answer/Vetofrom a future SPEC) MUST be considered against the principle: name the verb if the receiver needs it to act on THIS specific doorbell, not preemptively.
Future evolution (Texi-flagged, NOT in scope of this SPEC)
If different signal classes need different next actions, later evolvepushDoorbell content to be signal-type-aware rather than globally verbose. Example: a Question doorbell might point at Answer as the next-step verb; a ReviewRequested doorbell might point at ReviewCompleted. This is a follow-on SPEC, deferred.
Alternatives considered
A. Static text expansion — chosen
Smallest patch; works on Codex without surface-specific code; future-proof for new surfaces.B. Surface-aware push content (each surface registers its own template)
Rejected by Texi: premature complexity, creates drift risk across surfaces. A single conservative contract is the right default until a real surface-specific problem appears.C. Pre-tool surfacing via MCP capability declaration
Rejected: requires MCP protocol extension. Out of scope.Provenance
- ADR #40 — persona role reshape (this SPEC is the inaugural exercise of the consensus flow it codifies)
- PR #38 — SPEC-044 doorbell coalesce fix (the PR this builds on)
- Postmortem
f903cd52— original doorbell jam (the bug whose fix exposed this further gap) - Journal #12 (2026-05-01) — original draft mirror for cross-surface read access
- Review signal
8af8e2b8(Texi → Donna, 2026-05-01 21:24Z) —approve_with_revisionsverdict + revisions enumerated above

