From ca5adfab8161756901672ad4bed80d6c8cd0fa09 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 8 Oct 2026 08:52:35 -0400 Subject: [PATCH 1/2] Record delivered channel labels and removed sidebar reflows --- .../dm-initial-publication-20261008/README.md | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/evidence/dm-initial-publication-20261008/README.md b/evidence/dm-initial-publication-20261008/README.md index 26ad41b8e..7bcc942ee 100644 --- a/evidence/dm-initial-publication-20261008/README.md +++ b/evidence/dm-initial-publication-20261008/README.md @@ -760,3 +760,34 @@ the header layout epoch unchanged, changed activity still reorders members, original widget identities/pins and unchanged prepared resource preserved. Raw: `/home/ts/.cache/agent-scratch/channel-label-owner-20261008/source-app.log`. Installed latency remains to be measured; no broad pacing pass claimed. + +## Channel label fix delivered + +Toad573 merged; exact96f961acd cohort built with retained nativec330/Core09a. +954assets/69packages/2857RECORD/native package matched. Installed original +activity-order check passed including pin/counts and unchanged header epoch. + +Installed same160-wheel/20-message/16-recipient burst: ordered delivery, +channel-header Layout48 to0 and all other sidebar-source Layout to0. Remaining +layout sources are message captions/disclosures/bodies/window. This proves the +competing header writer caused the wasted work. Aggregate pacing still FAIL: +wheel median19.52ms/p95218.63/max257.07; final backlog2.21ms; framep95105.79/ +max277.09; loopmax114.78. One run does not establish overall speedup. + +Original frontend publisher selected channel-label-owner-delivery runtime for +NEW launches, preserving backend defaults/route/native/running owners. Receipt: +`.artifacts/channel-label-owner-delivery-20261008/live-publication.json`. Raw +source/build/installed/publication are under +`/home/ts/.cache/agent-scratch/channel-label-owner-20261008/`. Existing user +windows retain loaded modules. + +Native121 descriptor review is integrated separately: cursor shape alone is +paint-only, enums remain conservative and custom pointer-reading renderers +remain measurement-sensitive. This cohort retains c330 and does not claim the +later cursor fix installed. Next rendering pass targets the empty collapsed +notification content resource, preserving native input and actual expanded +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. From 5e96022d381927ee5ccf033d0c8f59f8f1fd0eb7 Mon Sep 17 00:00:00 2001 From: Tristan Simas Date: Thu, 8 Oct 2026 08:59:04 -0400 Subject: [PATCH 2/2] Acquire notification contents only when disclosed --- src/toad/widgets/message_notifications.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/toad/widgets/message_notifications.py b/src/toad/widgets/message_notifications.py index 7229c77f1..ab9125d39 100644 --- a/src/toad/widgets/message_notifications.py +++ b/src/toad/widgets/message_notifications.py @@ -3,6 +3,7 @@ from collections import Counter from agent_comms.presentation import MessageNotification +from textual.app import ComposeResult from textual.content import Content from textual.widgets import Collapsible, Static @@ -26,15 +27,18 @@ def __init__(self) -> None: self._details: Static | None = None super().__init__(title="Notification status not checked", collapsed=True) + def compose(self) -> ComposeResult: + yield self._title + if self._details is not None: + yield self.Contents(self._details) + @property def details(self) -> Static: """Acquire the original disclosure body only when it is requested.""" if self._details is None: self._details = Static(markup=False) if self.is_mounted: - self.query_one(self.Contents).mount(self._details) - else: - self._contents_list.append(self._details) + self.mount(self.Contents(self._details)) self._details.update(self._detail_text()) return self._details