From 55c4611e0123f44e39176834b4daf18caf8dde14 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 8 Oct 2026 09:10:23 -0400 Subject: [PATCH 1/2] Record delivered wire body reader publication and pacing limits --- .../dm-initial-publication-20261008/README.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/evidence/dm-initial-publication-20261008/README.md b/evidence/dm-initial-publication-20261008/README.md index 514fc5cb1..6b20db475 100644 --- a/evidence/dm-initial-publication-20261008/README.md +++ b/evidence/dm-initial-publication-20261008/README.md @@ -814,3 +814,32 @@ Installed for new launches through the original frontend publisher: 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/`. + +## Body extent publication — delivered + +Toad575 separates prepared-text extent publication from row-page mutation. +IRCMessageText now borrows HistoryWindow.reader_anchor/preserve_history with +the actual body as mutation root, then checks the existing follow policy. +No rows are added/removed/trimmed during this operation, so whole-page protected +selection/trim scans and the history-wide fence are gone. Paging retains them. +All other methods are AST equal;705 production/test modules parse/0 omissions. + +Actual private App partial-painted-read control passed. Source and installed +reader controls passed body growth above the reader with stable visible offset, +tail replacement, and released mutation custody. Initial control errors were +fixture eagerness, missing spawn entry protection and failure to release tail +mode before row exploration; negatives remain in the original scratch folder. +No production guard/bound/assertion was weakened to correct those fixtures. + +The candidate also includes reviewed merged native122 title initialization. +Installed burst:160 ordered wheels/20 messages/16 recipients/provider0; +wheel median2.54/p95128.30/max193.79ms;final backlog7.57ms; +framep95107.27/max193.32;loopmax86.75. Aggregate pacing still FAIL. +Title52/notification40/IRC40 Layout requests remain; initialization deletion +does not establish that all later native title layouts are redundant. + +Published for NEW launches with original frontend owner, preserving backend, +route and existing loaded windows: +`.artifacts/dm-body-publication-delivery-20261008/live-publication.json`. +Raw source/installed/build/burst/publication: +`/home/ts/.cache/agent-scratch/dm-body-publication-20261008/`. From 1cee43a9d5286bdb113336887996cff2762adbe0 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 8 Oct 2026 09:25:47 -0400 Subject: [PATCH 2/2] Start painted read work only while original receipts remain --- src/toad/mounted_message_history.py | 3 +++ tests/channel_partial_paint_pilot.py | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/toad/mounted_message_history.py b/src/toad/mounted_message_history.py index 1caada325..7bd3902f8 100644 --- a/src/toad/mounted_message_history.py +++ b/src/toad/mounted_message_history.py @@ -397,6 +397,9 @@ async def publish(self, read: HistoryReadResult) -> bool: def mark_visible(self) -> None: if self.ack_inflight or not self.is_attached: return + if (self.tail_receipt is None and not self.channel_receipts + and not self.historical_receipts): + return self.ack_inflight = True self.view.run_worker(self.mark_painted(self.source_snapshot()), group="comms-painted-read") diff --git a/tests/channel_partial_paint_pilot.py b/tests/channel_partial_paint_pilot.py index e504901d2..262fd2661 100644 --- a/tests/channel_partial_paint_pilot.py +++ b/tests/channel_partial_paint_pilot.py @@ -77,6 +77,18 @@ async def checked_mark(chat, page, original_page, *, snapshot): while message.seq not in comms.bus.reads.seen_sequences(viewer, comms.registry.snapshot()): await pilot.pause(.02) assert comms.bus.reads.seen_sequences(viewer, comms.registry.snapshot()) == {row.seq for row in rows} + # Scrolling an acknowledged page has no read receipt to + # publish. Do not schedule another worker/route read merely + # because native geometry supplied another visible cohort. + history = chat.message_history + async with asyncio.timeout(5): + while history.ack_inflight: + await pilot.pause(.02) + assert not history.channel_receipts and not history.historical_receipts + assert history.tail_receipt is None + for _ in range(50): + history.mark_visible() + assert not history.ack_inflight recorded = tuple(message.view_key for message, _ in chat.message_history.rows) await pilot.press('ctrl+t') async with asyncio.timeout(5):