tmux-amq/workplans/TAMQ-WP-0007-terminal-output-notifications.md
tegwick 27816a707a
Some checks failed
tamq-ci / test (push) Failing after 6s
docs: plan terminal output notifications
Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a03397-4d51-7fd1-8ff2-946eb22ea2bc
2026-08-24 22:10:04 +02:00

3.1 KiB

id type title domain repo status owner topic_slug planning_priority planning_order created updated
TAMQ-WP-0007 workplan Target-pane terminal output notifications communication tmux-amq active codex coulomb-social P0 12 2026-08-24 2026-08-24

Target-pane terminal output notifications

Make a durably routed message visibly appear in its target repository terminal without turning any bytes into input for the pane occupant.

Required operator contract

tamq flex-auth audit-core
# in flex-auth
@audit-core: Some message!

The audit-core pane receives terminal output equivalent to:

#flex-auth: Some message! [m-...]

Tamq resolves the target pane's pseudo-terminal through tmux and writes a sanitized notification to that device's output queue. It never uses send-keys, never sends Enter, and never alters the foreground process's stdin. The notification may visually interleave with a prompt or be redrawn by a full-screen program; the durable inbox remains authoritative.

Messages remain pending after display until tamq ack or a successful explicit inbox filter. A persisted display timestamp prevents successful notifications from being emitted repeatedly after broker polls or restarts.

Specify and isolate the output channel

id: TAMQ-WP-0007-T01
status: progress
priority: high

Define terminal-output delivery separately from legacy pane-input injection. Resolve only tmux-reported /dev/pts/<number> character devices owned by the current user, sanitize terminal control bytes, use bounded non-blocking writes, and document visual interleaving as a display limitation rather than an input safety failure.

Persist one-time display state

id: TAMQ-WP-0007-T02
status: todo
priority: high

Add a migration-safe displayed_at marker. Claim a pending message before output, record successful display and release its lease atomically, retain its pending acknowledgement state, and make broker restart/poll behavior idempotent after a successful write.

Make terminal output the normal managed-session mode

id: TAMQ-WP-0007-T03
status: todo
priority: high

Register ordinary started sessions in output mode and advertise the required broker capability. Preserve --tap --command as explicit pane-input mode, provide --no-display for durable inbox-only operation, and restart an older broker before registering the new mode.

Prove output without input

id: TAMQ-WP-0007-T04
status: todo
priority: high

Use a real pseudo-terminal and real tmux acceptance to prove the notification appears in pane output, never reaches foreground-process stdin, remains pending for acknowledgement, emits only once across polls, handles multiline/control content safely, retries failed output, and retains manual and explicit tap modes.

Install and document the operator workflow

id: TAMQ-WP-0007-T05
status: todo
priority: high

Update help, README, SCOPE, and installed-package acceptance. Install the verified build, recreate or re-register a live two-repository session, exchange and acknowledge one visible smoke message, and record State Hub evidence.