#9106 (b520120cf169ce63a5606447a292451e97622c9a, 27 files) is the largest
remaining commit from the 2026-09-03 upstream batch and the hub that gates at
least two others. Seven of its eight conflicted files are already resolved
and saved at /tmp/pylon-9106/ (see below). One file needs real design work.
The blocker
apps/mobile/src/features/threads/thread-work-log.tsx — Pylon 567 lines,
upstream 1055. #9106 does not modify this component, it replaces its
architecture:
| Upstream introduces |
Pylon has |
ThreadWorkGroupList with scroll anchoring |
flat View list |
resolveWorkGroupScrollAnchor, shouldFollowThreadWorkGroupAppend |
— |
WorkLogIcon wrapper |
direct SymbolView with tintColorClassName |
THREAD_WORK_ROW_MIN_HEIGHT, workLogRowsHeight(activities, rowHeight) |
WORK_ROW_HEIGHT = 32, collapsedWorkLogHeight() |
renderImage: MarkdownImageRenderer, onToggleRow(rowId, anchorKey) |
onToggleRow(rowId), compactActivityDetail |
The largest conflict region is 141 lines of Pylon rendering against 13 lines of
upstream's new component call.
This must not be rushed. AGENTS.md names this file as the reference for
gated animation — "an unbounded animation that survives all three gates pegs
the GPU on high-refresh displays". Pylon's shimmer gate here is deliberate and
is exactly what an architectural port is most likely to drop.
Already resolved (restore over the conflicted files after re-picking)
apps/mobile/src/lib/threadActivity.ts — took upstream's active/live
shape. latestActiveActivity already encodes Pylon's gate (isWorking &&
unsettled turn && inProgress), so upstream's shimmer: active preserves
Pylon's shimmer discipline rather than loosening it.
apps/mobile/src/lib/threadActivity.test.ts — upstream rewrote the
"respects the %s lifecycle of trailing task progress" body to a single
shimmer assertion; Pylon's other tests in that block are kept.
apps/web/src/components/chat/MessagesTimeline.tsx — six regions. Kept
Pylon's groupLabel/GroupContainer aria wrapper, missingResponse /
turnSettled / neutral+success indicators, and the chevron/failed block.
Took upstream's icon rendering (Pylon's WorkEntryIconSvg and
showEntryIcon no longer exist after the commit's clean hunks) and its
richer canExpand. Renamed isExpandedToolGroupEntry -> isExpandedToolGroup.
apps/web/src/components/chat/MessagesTimeline.logic.ts — #9106 moves
normalizeCompactToolLabel, toolGroupAction, workLogEntryIsLocalCodeSearch,
summarizeToolGroup, omitSupersededLifecycleMarkers, toolGroupSummaryKind
and the ToolGroupSummaryKind type into client-runtime. Pylon's local copies
were verified identical apart from WorkLogEntry vs WorkLogPresentationEntry
and removed.
apps/web/src/components/sidebar/SidebarChrome.tsx — Pylon-first: upstream
reverts to T3Wordmark, Pylon keeps PylonMark. Never restore T3 branding.
packages/client-runtime/src/work-log/presentation.ts — union of Pylon's
detail? and upstream's toolData?.
packages/client-runtime/package.json — union of Pylon's ./rollback and
upstream's ./work-log/scroll-anchor export.
Web typechecks clean with these applied; only the mobile file remains.
Unblocks
#9172 8339508f5c align failed task progress test
#9359 24799de4f8 size expanded tool groups correctly
Both were confirmed chained on this commit.
Context
#9106(b520120cf169ce63a5606447a292451e97622c9a, 27 files) is the largestremaining commit from the 2026-09-03 upstream batch and the hub that gates at
least two others. Seven of its eight conflicted files are already resolved
and saved at
/tmp/pylon-9106/(see below). One file needs real design work.The blocker
apps/mobile/src/features/threads/thread-work-log.tsx— Pylon 567 lines,upstream 1055.
#9106does not modify this component, it replaces itsarchitecture:
ThreadWorkGroupListwith scroll anchoringViewlistresolveWorkGroupScrollAnchor,shouldFollowThreadWorkGroupAppendWorkLogIconwrapperSymbolViewwithtintColorClassNameTHREAD_WORK_ROW_MIN_HEIGHT,workLogRowsHeight(activities, rowHeight)WORK_ROW_HEIGHT = 32,collapsedWorkLogHeight()renderImage: MarkdownImageRenderer,onToggleRow(rowId, anchorKey)onToggleRow(rowId),compactActivityDetailThe largest conflict region is 141 lines of Pylon rendering against 13 lines of
upstream's new component call.
This must not be rushed.
AGENTS.mdnames this file as the reference forgated animation — "an unbounded animation that survives all three gates pegs
the GPU on high-refresh displays". Pylon's shimmer gate here is deliberate and
is exactly what an architectural port is most likely to drop.
Already resolved (restore over the conflicted files after re-picking)
apps/mobile/src/lib/threadActivity.ts— took upstream'sactive/liveshape.
latestActiveActivityalready encodes Pylon's gate (isWorking &&unsettled turn && inProgress), so upstream's
shimmer: activepreservesPylon's shimmer discipline rather than loosening it.
apps/mobile/src/lib/threadActivity.test.ts— upstream rewrote the"respects the %s lifecycle of trailing task progress" body to a single
shimmer assertion; Pylon's other tests in that block are kept.
apps/web/src/components/chat/MessagesTimeline.tsx— six regions. KeptPylon's
groupLabel/GroupContaineraria wrapper,missingResponse/turnSettled/ neutral+success indicators, and the chevron/failed block.Took upstream's icon rendering (Pylon's
WorkEntryIconSvgandshowEntryIconno longer exist after the commit's clean hunks) and itsricher
canExpand. RenamedisExpandedToolGroupEntry->isExpandedToolGroup.apps/web/src/components/chat/MessagesTimeline.logic.ts—#9106movesnormalizeCompactToolLabel,toolGroupAction,workLogEntryIsLocalCodeSearch,summarizeToolGroup,omitSupersededLifecycleMarkers,toolGroupSummaryKindand the
ToolGroupSummaryKindtype into client-runtime. Pylon's local copieswere verified identical apart from
WorkLogEntryvsWorkLogPresentationEntryand removed.
apps/web/src/components/sidebar/SidebarChrome.tsx— Pylon-first: upstreamreverts to
T3Wordmark, Pylon keepsPylonMark. Never restore T3 branding.packages/client-runtime/src/work-log/presentation.ts— union of Pylon'sdetail?and upstream'stoolData?.packages/client-runtime/package.json— union of Pylon's./rollbackandupstream's
./work-log/scroll-anchorexport.Web typechecks clean with these applied; only the mobile file remains.
Unblocks
#91728339508f5calign failed task progress test#935924799de4f8size expanded tool groups correctlyBoth were confirmed chained on this commit.
Context
.agents/upstream-review.md