From 38b6a20e07099833263806105ecdb39b3f94b759 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 8 Oct 2026 09:01:02 -0400 Subject: [PATCH 1/2] Record delivered lazy notification contents and remaining pacing failure --- .../dm-initial-publication-20261008/README.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/evidence/dm-initial-publication-20261008/README.md b/evidence/dm-initial-publication-20261008/README.md index 7bcc942ee..514fc5cb1 100644 --- a/evidence/dm-initial-publication-20261008/README.md +++ b/evidence/dm-initial-publication-20261008/README.md @@ -791,3 +791,26 @@ feedback rather than bypassing requests. The initial evidence append was refused by the shell pre-execution parser on a quotation in documentation; no command ran. The original tracked bytes were materialized and this edit applied through the ordinary file patch tool. + +## Deferred empty notification contents — delivered + +Toad574 now creates the original native Contents only when the notification +body is acquired. Native title/toggle/focus/collapsed styling retain their +existing owners. General Collapsible child lifetimes are unchanged. The body +is retained across close/reopen and recomposed with its original notification. +Only compose/details change; all other methods are AST equal. Full288 production +and417 test modules parsed without omissions. Mouse/keyboard disclosure, live +error, collapsed update, reopen, recomposition and pre-mount acquisition passed +in the actual native App against source and the installed wheel. + +The installed160-wheel/20-message/16-recipient burst recorded zero Contents +layout requests (previous40). Input stayed ordered. Wheel median4.25ms, +p95101.22/max145.45; final backlog10.32ms; framep95104.79/max152.90; +loopmax75.78. Frame pacing still fails the requested responsiveness. Native121 +is also included; a single combined run does not isolate aggregate gains. + +Installed for new launches through the original frontend publisher: +`.artifacts/dm-empty-disclosure-delivery-20261008/live-publication.json`. +Core/backend defaults, route and running owners are preserved. Existing windows +retain loaded modules. Raw checks/build/burst/publication: +`/home/ts/.cache/agent-scratch/dm-empty-disclosure-20261008/`. From 45c780ab17b74a15a83a9a66796a56497c896b19 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 8 Oct 2026 09:06:09 -0400 Subject: [PATCH 2/2] Publish prepared wire bodies through their own reader mutation --- src/toad/widgets/irc_message.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/toad/widgets/irc_message.py b/src/toad/widgets/irc_message.py index fd25632c8..5d4992a83 100644 --- a/src/toad/widgets/irc_message.py +++ b/src/toad/widgets/irc_message.py @@ -78,10 +78,14 @@ async def preparation_publication(self, *, layout: bool): async with super().preparation_publication(layout=layout): yield else: - # Worker completion changes this original row's measured extent. - # The mounted history already owns compensation and held readers. - async with history.native_publication(tuple(history.rows)): + # Prepared text changes this body's extent, not the page's row + # membership. Borrow the window's original reader without acquiring + # page trimming/selection protection or fencing unrelated rows. + window = history.window + anchor = window.reader_anchor(self) + async with window.preserve_history(anchor, root=self): yield + window.check_follow() class WireMarkdownMessage(CoreEventReceiver, ConversationBlock, VerticalGroup):