Conversation
The OSC 777/99 grammars, the speech queue's bounds and timeout, and the push device-list fencing each constrain one module, so they now live as comments there while alert.md keeps the one-line rule and its `Source of truth:` pointer. Await, Live Workspace transfer, and Alarm settings lose repeated framing and a tour of stores they do not own; transaction order defers to standalone.md, which states it. Front matter now names what the spec defers, and the retired bell no longer rings in the Await absorption rule. No behavior change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The await grace window resolves idle unless output or a command start cancels it; delivery on a transferred Workspace resumes only when adopt_done succeeds; and transport.md carries the alert-store relay messages, not the alert:await contract, which stays here. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Deploying mouseterm with
|
| Latest commit: |
c829570
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://3a6e7e02.mouseterm.pages.dev |
| Branch Preview URL: | https://alert-spec-compress.mouseterm.pages.dev |
dormouse-bot
left a comment
There was a problem hiding this comment.
Feedback on work in progress, not a merge verdict — mark ready when you want the full review.
The speech-queue bullet keeps the pointer but drops the rule. AGENTS.md → Specs: mechanism constraining a single module lives as a comment at that code, "the spec keeping the one-line rule and a Source of truth: pointer". alert.md now carries only "Queue bounds, the engine timeout, and callback-identity revocation live at SpeechQueue." — no rule survives that sentence, so nothing above the fold says the queue is bounded at all. Compare what this PR did with OSC 777/99, where a bolded one-line rule stayed and only the grammar moved. The numbers (64, 60 s) are the module's mechanism and belong in the TSDoc where you put them; "bound the queue, cancel a stalled attempt, never retry" is the rule.
The ratchet has no room for it. alert.md is at 6,749 words against the new 6,750, so the suggestion below lands at 6,768 and needs node scripts/spec-lint.mjs --ratchet docs/specs/alert.md in the same PR — budget 6,750 → 6,800, still well under the 7,050 it started at.
| - **Must bound pending jobs at 64**, rejecting later admissions while full. **Must cancel an engine attempt after 60 seconds without completion** and advance the queue; detached late callbacks cannot change the new attempt. No automatic retry follows failed, expired, or overflowed delivery. | ||
| - **Must revoke callback identity before engine cancellation**, including synchronous callbacks. Teardown cancels the current engine utterance and drops pending jobs. | ||
| - **Must admit only one utterance at a time to Web Speech per renderer**, Settings tests included, and **must remove resolved, disabled, or suspended pending jobs before engine admission** without cutting another pane's current utterance. Pinned by `never admits a resolved queued alarm to the speech engine` in `lib/src/lib/alert-speech.test.ts`. | ||
| - **No automatic retry follows failed, expired, or overflowed delivery**, and teardown cancels the current engine utterance and drops pending jobs. Queue bounds, the engine timeout, and callback-identity revocation live at `SpeechQueue`. |
There was a problem hiding this comment.
| - **No automatic retry follows failed, expired, or overflowed delivery**, and teardown cancels the current engine utterance and drops pending jobs. Queue bounds, the engine timeout, and callback-identity revocation live at `SpeechQueue`. | |
| - **Must bound pending jobs and cancel a stalled engine attempt**, advancing the queue and revoking callback identity before every cancel, and **never retry a failed, expired, or overflowed delivery**. Teardown cancels the current engine utterance and drops pending jobs. The bound, the timeout, and the revocation mechanism live at `SpeechQueue`. |
Stacked on #717. Docs plus code comments; no behavior change.
AGENTS.md→ Specs: mechanism that constrains one module lives as a comment at that code, the spec keeps the one-line rule and aSource of truth:pointer.alert.mdviolated that in several places. This PR moves:lib/src/lib/terminal-protocol.ts(theOSC 9;4table stays; it is cross-module behavior);lib/src/lib/speech-queue.ts;lib/src/remote/burrow/alert-push.ts(mostly already there);A second reviewer pass restored three conditions the first cut had dropped (the grace window resolves
idleunless cancelled; delivery resumes only whenadopt_donesucceeds; transport.md carries the relay messages, not thealert:awaitcontract). Front matter now names what the spec defers and to whom.alert.mdbudget 7050 → 6750. EverySource of truth:symbol verified by spec-lint check 12.🤖 Generated with Claude Code