Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions evidence/dm-initial-publication-20261008/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/`.
3 changes: 3 additions & 0 deletions src/toad/mounted_message_history.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand Down
12 changes: 12 additions & 0 deletions tests/channel_partial_paint_pilot.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
Loading