Upstream integration cycle: catch-up through 6c583620 (2026-09-09) #414
Description
Activity
Pricing port resumed and landed as a PR — 2026-09-08
Resumed the unfinished usage pricing work per the handoff. The recorded worktree was intact:
all 32 task files hash-matchedagent-handoffs/t3-upstream/20260908T174425Z/manifest.json, so
nothing was replayed or overwritten.State
- Committed the prepared work and rebased onto freshly fetched
origin/pylon(c316b4281a).
One conflict, inapps/server/src/environment/ServerEnvironment.test.ts: feat(threads): persist active order across clients #413's
threadActiveReorderassertion and this port'susagePriceOverridesassertion landed on the
same line. Kept both. - Branch
upstream/2026-09-07-usage-prices, head2f1b3c790406ff1f3126cd397078008a97bf31e7. - PR feat(usage): refresh rates on demand and edit custom model prices #416 open against
pylon. All 14 CI checks pass, 3 conditionally skipped. - The three pricing sources (
2b745efe,394e8470,84b99f37) are prepared and pushed, not
merged. Do not count them as adopted until feat(usage): refresh rates on demand and edit custom model prices #416 lands.
Verification completed (the gaps the handoff named)
- 262 tests across 17 files: the 11 changed test files plus adjacent regressions the earlier run
had not covered (usageAggregation,apps/web/src/state/usage,client-runtime/state/server,
turnCosts,usageScanCache,UsageLimitSources). - All seven affected packages typecheck clean. The two failures in the old
types1/types2logs
(the obsoleteRpcSessionmember and the missing table primitive) are genuinely fixed. - Scoped lint and format clean across all 32 files. Note:
vp lint <multi-file list>silently
matched nothing on the first attempt and still exited 0 — the no-opAGENTS.mdwarns about.
Confirmed the linter was live by checking it flags a deliberate violation. - Combined-diff review across eight dimensions with adversarial verification of every finding.
Client verification — fixture correction worth recording
The handoff said to isolate provider homes before opening Usage. The settings path it implied was
wrong: the dev runner passes the base dir explicitly, sostateDiris<base>/userdata, not
<base>/dev. Settings written to.t3/dev/settings.jsonare ignored, and Usage scans the real
~/.claudeand~/.codex. Writing to.t3/userdata/settings.jsonand clearing
usage-scan-cache.jsonfixes it. No real usage data was captured or uploaded.Verified against synthetic transcripts:
[1m]context variant priced at base tier; custom price
took an unpriced model from$0.00to$1.11matching hand-computation; blank cache rates
inherit the input rate; reset / undo / discard all present with the environment selector locked
while edits are staged; negative and non-numeric prices rejected;server.refreshUsageRates
confirmed in the server trace; and a second paired client recalculated to$1.97on its own,
live-updating its open editor.Two new deferred entries — inherited upstream defects, adopted as-is
Both were confirmed by adversarial review and are not porting errors:
UsagePriceOverrides.tsxis byte-identical to upstream84b99f3, and the refresh sequencing
matches upstream #9202's deliberate design. Adopting upstream's finished behaviour rather than
forking, and recording instead:- DEF-17 — A staged price edit is stranded if another client resets the same model while the
dialog is open: the row stops rendering while the footer still offers to save it, saving
silently re-creates the override, and a half-filled draft blocks Save with a validation message
that has no on-screen render site.apps/web/src/components/usage/UsagePriceOverrides.tsx:131.
Revisit trigger: an upstream fix touching that file, or a maintainer decision to fork it. - DEF-18 — Refresh feedback is deferred when the rate table is unreachable: the rescan is
chained onto the rate-refresh RPC, so the spinner returns immediately and rows update ~10s
later. Pylon's pre-adoption code refreshed synchronously, so this is a real behaviour change
for Pylon even though it is upstream's intent.apps/mobile/src/state/usage.ts:118and
apps/web/src/state/usage.ts:113. Revisit trigger: an upstream change to that sequencing, or a
complaint about refresh responsiveness.
Unchanged
Frozen upstream head
062987b2and cursorbeae2147are untouched — the cursor stays put until
#416 merges. DEF-16, DEF-7 and WATCH-1/2/3 were not re-checked this cycle and keep their recorded
triggers. Release and install status still unverified; the new code is neither released nor
installed. After #416 merges, 75 source candidates remain in the frozen range.Next action: maintainer approval to merge #416.
- Committed the prepared work and rebased onto freshly fetched
PR #416 merged — 2026-09-08
Merged at
e0037b844027b9d1b9fefe7730f7c7f975ad1b27;pylonnow points there. Remote branch
upstream/2026-09-07-usage-pricesdeleted. All 14 checks passed on the merged head
2f1b3c790406ff1f3126cd397078008a97bf31e7, 3 conditionally skipped.These three sources are now adopted:
2b745efe57cddc1753d3007d081c64bd20e3ab79(#9202) explicit rate refresh and context-variant pricing394e8470c89927a06575e08c434006b2320f1781(#9774) custom prices and cross-client recalculation84b99f3fb7bbc759fcbb589d031920e76edf4746(#9861) staged price table and selected-environment writes
Cursor unchanged.
reviewed-throughstays atbeae2147a9487ec47ac992319f2216914b4cb62d: the
75 remaining candidates in the frozen062987b2range still have no authorized disposition, so
the cursor cannot advance regardless of this merge. Merging is not cursor advancement.DEF-17 and DEF-18 shipped unfixed, by decision. Both are inherited upstream behaviour, not
porting errors, and were adopted rather than forked. They are live inpylonnow. Their triggers
stand as recorded in the previous comment.Not released, not installed. Release status was not reverified and this code is in neither a
release nor an install. Per the skill, validate one release covering the completed cycle rather
than releasing per PR.Local cleanup: the isolated dev server started for client verification has been stopped (ports
15406 and 7366 are free). The worktree/Users/rynfar/repos/pylon-usage-prices-0907is left in
place on the now-deleted branch, along with its.t3fixture, in case the environment is still
wanted; it can be removed withgit worktree removewhen it is not.DEF-17 and DEF-18 retired — fixed rather than deferred (PR #418)
Correcting the previous comment: both entries were recorded as deferred on the reasoning
that they were upstream's code and fixing them meant forking files upstream still owns.
That was the wrong call. Once the adoption merged, Pylon owns the behaviour, and DEF-17 in
particular could silently re-create an override a user had just removed elsewhere. Both fits
were small and local, so both are fixed in PR #418 instead.- DEF-17 — retired.
UsagePriceOverridesderived rows only from models present in the
selected environments' settings, so a live settings change from another client stranded a
staged draft: invisible row, Save still enabled, silent re-creation on save, and a
validation message with no render site. A draft whose model has left settings now keeps
its row until saved or discarded. The derivation moved intousagePriceRowsin
apps/web/src/components/usage/usagePriceTable.ts, which made it unit-testable. - DEF-18 — retired.
useUsagenow exposes arefreshingflag covering the rate refetch
that precedes the rescan, with an in-flight guard, mirroring the existing
useRefreshLimits. Mobile ORs it into the pull spinner; the web refresh button spins its
icon, gated to the transient state and disabled under reduce-motion. Refetch-then-rescan
ordering is unchanged, and the rescan still runs whether or not the refetch succeeds.
Verification on #418: 43 tests across 5 files, 3 of them new and each confirmed to fail with
its fix reverted.@t3tools/weband@t3tools/mobiletypecheck clean — wideningUsageView
broke aUsagePage.test.tsxmock that the tests themselves did not catch. Lint and format
clean across 9 changed files. No contract, server or migration changes.Neither entry needs a revisit trigger; do not carry them forward.
Worktree cleanup. The 13 merged, clean upstream worktrees from this cycle and their local
branches have been removed. Preserved:pylon-astra-0905andpylon-upstream-0903(both
dirty) and the unmergedpylon-catchup-0905,pylon-keyboard-reference-0907,
pylon-mobile-foundation-0907andpylon-settings-foundation-0907.
pylon-price-fixes-0908stays until #418 lands.Cursor and frozen head are unchanged:
beae2147through062987b2, 75 candidates still
without a disposition.- DEF-17 — retired.
PR #418 merged — 2026-09-08
Merged at
f24356d943874ef291d5a21abc4612451cf2b683;pylonnow points there and the branch is deleted. All 14 checks passed on984d7fc4d3, 3 conditionally skipped.DEF-17 and DEF-18 are fixed and live. Neither carries a revisit trigger; do not reopen them.
Worktree
pylon-price-fixes-0908and its branch are removed. Remaining worktrees are the two dirty ones (pylon-astra-0905,pylon-upstream-0903) and four unmerged ones (pylon-catchup-0905,pylon-keyboard-reference-0907,pylon-mobile-foundation-0907,pylon-settings-foundation-0907), all deliberately preserved.Cycle state is otherwise unchanged: cursor
beae2147, frozen head062987b2, 75 candidates still without a disposition. Nothing is released or installed.Catch-up resumed — 2026-09-08 (post-#418)
Working the frozen
062987b2range again. Two groups prepared and open:- PR feat(projects): automatically pull clean default branches #419 — automatic pull of clean default branches. Sources
ba3cb07738(#9277) andf6db4206(#9763). Migration renumbered 045 → 058 (Pylon already uses 045 forAuthSessionClientConnection; its lineage runs one ahead since id 36 was retired). The pull was moved inside Pylon'swithRemoteWriteLock, which upstream does not have — the pull writes to the checkout, so it must not race the status refresh. Dropped an unrelated upstream test asserting an exportedgetAutoBootstrapThreadModelSelectionthat Pylon keeps private; it predates #9277 and is not part of this feature. 62 tests, 3 packages typecheck clean, lint/format clean, migration lineage validated. - PR feat(web): recall sent prompts with the up arrow #420 — recall sent prompts with the up arrow. Sources
fd773172e7(#9173) and14bf3f6d16(#9644), one unit. Dropped upstream's relocated## Prompt stashheading, which would have duplicated Pylon's existing section with an empty body. 16 tests, web typechecks clean, lint/format clean.
That takes the group to 4 of the 75 remaining sources prepared, none merged yet.
Deliberately not taken yet, with reasons
2e688a53/9e1fb459(docs #9755/#9756) — ~6,400 lines rewriting internals and user guides that Pylon has deliberately diverged on, and9e1fb459editsproviders-antigravity.mdfor a provider Pylon has not adopted. Needs a deliberate docs pass, not a mechanical port.1587f248(#9132 provider turn token usage) — 3,865 insertions across every provider adapter plusProviderService. High-conflict against Pylon's adapter divergence; deserves its own dedicated pass.- The Antigravity series (~16 sources) is a whole new provider. That is a product decision about whether Pylon ships Google Antigravity, not compatible catch-up, so it needs a maintainer call before any porting effort goes into it.
Separate defect found
docs/user/composer.mdsays "T3 Code" in seven places predating this work — visible product copy that should read Pylon. Not folded into #420; it will follow as its own docs change.Cursor
beae2147and frozen head062987b2unchanged. Upstream now has 94 arrivals past the frozen head (was 14 when last observed); they belong to the next cycle.- PR feat(projects): automatically pull clean default branches #419 — automatic pull of clean default branches. Sources
Four PRs merged, and an inventory defect found — 2026-09-08
Merged into
pylon:- feat(projects): automatically pull clean default branches #419
00eccccccf— automatic pull of clean default branches (ba3cb07738#9277,f6db4206#9763) - feat(web): recall sent prompts with the up arrow #420
02bf6f30d4— recall sent prompts with the up arrow (fd773172e7#9173,14bf3f6d16#9644) - fix(web): preserve mention text and keep the slash menu visible #421
ab1823b579— preserve mention text, keep slash menu visible (761d4bac1c#10100,120fab18d8#9625) - docs(user): say Pylon where the docs describe Pylon #422
2b62f2272f— user-guide branding: ten "T3 Code" → "Pylon" where the docs describe Pylon's own behaviour (two deliberate coexistence references ininstall.mdkept). Not an upstream source; a defect found during feat(web): recall sent prompts with the up arrow #420.
All four went in with 14 checks passing and 3 conditionally skipped.
pylonis now at2b62f2272f.Six upstream sources adopted this pass.
The candidate list is incomplete — do not trust the count
While preparing
f12d39359f(#9561, unify loading and refresh feedback), the cherry-pick failed to build because upstream's newSpinnerimports~/lib/visibleAnimationand uses avisible-animate-spinutility. Neither exists in Pylon. Both come from:ce4712d5b0— fix: restore UX after performance improvements (#9799), 31 files, 1,511 insertions
ce4712d5b0is after the cursor and an ancestor of the frozen head, so it is squarely inside this cycle's range — but it does not appear anywhere in this issue's candidate list. So the "78 candidates" figure (now 75, then 69) is not a complete enumeration of the range, and neither is any count derived from it. The list is usable as a work queue, but it must not be reported as the remaining total, and a group must have its dependencies checked against the actual tree before porting rather than assumed from the list.The #9561 cherry-pick was aborted rather than left half-resolved; nothing from it is committed. Adopting it means taking
ce4712d5b0first as a dependency series, roughly 73 files combined.Worth noting for whoever takes it: #9561 supersedes the DEF-18 fix from #418. Upstream moves refresh into a shared
refreshUsageinclient-runtimethat awaits the rescan itself, aborts when an environment disconnects, and invalidates the query on failure — strictly better than the per-clientrefreshingflag #418 added. Take upstream's version and drop ours; do not layer them. Likewise upstream'sSpinner(motion-safe:visible-animate-spinplus a visibility observer) is a better fit for the "nothing repaints at rest" rule than the ad-hocanimate-spin motion-reduce:animate-none#418 used.Still needing a maintainer decision
The Antigravity series (~16 sources) adds Google Antigravity as a Pylon provider. That is a product decision about what Pylon ships, not compatible catch-up, and no porting effort should go into it until it is made.
Cursor
beae2147and frozen head062987b2unchanged. Upstream has 94 arrivals past the frozen head, belonging to the next cycle.- feat(projects): automatically pull clean default branches #419
Antigravity port — approved, underway, and precisely scoped
Maintainer approved shipping Antigravity on 2026-09-08. Recording the real shape of the work,
because it is not what the candidate list implied.Do not replay the source commits
06336460c9is 169 files, +21,470/−1,388, and cherry-picking it conflicts in 64 files. It
is not a self-contained provider addition — it refactors shared provider/ACP infrastructure that
Pylon has diverged on. The tractable approach, which the skill explicitly allows, is a manual
port of the final behaviour at the frozen head; that also folds in all 16 follow-up fixes for
free.Correct file selection is
git show --diff-filter=A <sha>on the source commit, not a search
for antigravity-named files. My first pass used the name heuristic and silently missed five files
the commit adds under generic names —ProviderAuthService(service, layer, test) and
providerInstallation(source, test). One unresolved import from those accounted for a 77-error
cluster.A blind diff application deletes Prime
Diffing Pylon against the frozen head shows
PRIME_AGENT_DRIVER_KINDand its
DEFAULT_MODEL_BY_PROVIDERentry as removals, because Prime is Pylon-only. Only
Antigravity-specific lines may be taken from any shared file. Prime was verified intact after
every contracts edit in this branch.Branch:
upstream/2026-09-08-antigravity-serverBased on
upstream/2026-09-08-custom-model-names(PR #423, the prerequisite — Antigravity's
settings referenceCustomModelSetting). Four WIP commits, pushed.Server typecheck errors: 232 → 137 → 126 → 69 → 26, never touching a pre-existing Pylon file.
Done: 29 new server files;
providerSetup.tsand its index export;ANTIGRAVITY_DEFAULT_MODEL
and the provider display name; theAntigravitySettingsschema plusselectcontrol and
ProviderSettingsFormOption;supportsTextGenerationandsetuponServerProvider; the
approval-optionwarning;authandrefreshModelsonProviderInstance.Pylon divergences already reconciled, each of which a mechanical port would have got wrong:
ProviderApprovalOptionlives inbaseSchemas.ts, notorchestration.ts(Pylon #8058).supportsConversationRollbackis required on Pylon presentations, optional upstream.supportsTextGeneration(upstream, resolved per snapshot) is kept alongside Pylon's
supportsBackgroundTextGeneration(static, per driver). Related but not the same mechanism;
folding them would be wrong.value/allowCustomAnsweralready existed in Pylon from an earlier adoption.
The 26 that remain
yauzlis a new runtime dependency (^3.4.0, plus@types/yauzl), used by
AntigravityInstallationto unpack the managed runtime. Pylon does not have it. This is the
first dependency addition in this catch-up and needs a deliberate decision — 5 errors.- ACP event-model drift — Pylon's ACP event union lacks
ConfigOptionsUpdatedand
AvailableCommandsUpdated, and theconfigOptions/availableCommands/approvalOptions
fields. Needs the Antigravity commit'sAcpRuntimeModel/AcpCoreRuntimeEventshunks — ~8
errors acrossAntigravityDriver.tsandAntigravityAdapter.ts. manifestDefaultModelmissing fromModelManifest— 1 error, one hunk.- Remaining test-file errors follow from 2 and 3.
Then: register the driver in
builtInDrivers/ProviderRegistry/server.ts, run the affected
tests, and verify repo-wide —Checkrunsknip:checkandvp check, and package-scoped
typechecks miss both.Client work is a separate PR
45 client/docs integration points remain (10 web settings, 9 web chat, 4 mobile threads, 3 mobile
state, 3 mobile lib, docs, marketing). Antigravity settings default toenabled: false, so the
server PR landing without the client is a safe intermediate state.PR #423 merged at
fde6799297499329600b7a8b7c7882f75087f9a8— 14 checks pass, 4 conditionally skipped.pylonis at that commit and the branch is deleted.5a433244d0(#9807) is adopted. The Antigravity prerequisite is satisfied.upstream/2026-09-08-antigravity-serverhas been rebased onto the merged prerequisite and force-pushed; its four WIP commits are intact and it no longer carries #9807's changes as its own. Remaining work is unchanged from the handoff above — theyauzldependency decision, ACP event-model drift,manifestDefaultModel, then driver registration and repo-wide verification.Antigravity adopted — PR #425 merged
Merged at
275de5ef1dbf876de7e7280226b406c814be1873. 14 checks pass, 4 conditionally skipped.17 sources adopted in one PR:
06336460c9(#9348) plus1e051873,2120fbc1,0aae1e2a,ef4cc608,e01c153c,f25e4428,baf67b6e,eb334ca5,8ea52c8f,f8a14b28,2675e3c7,6349a0e6,c8872fd2,ab67795d,912276bc,d487dfbf.Ported as the finished behaviour at the frozen head, not by replaying commits —
06336460c9alone conflicts in 64 of its 169 files because it refactors shared provider/ACP infrastructure. Correct file selection isgit show --diff-filter=A, not a search for antigravity-named files; the name heuristic missed five files the commit adds under generic names, and one unresolved import from those drove a 77-error cluster.yauzl@^3.4.0added for the managed-runtime unpacker. First dependency in this cycle.Pylon divergences reconciled — a mechanical port would have got each of these wrong:
- Prime would have been deleted.
PRIME_AGENT_DRIVER_KINDand itsDEFAULT_MODEL_BY_PROVIDERentry read as removals against upstream. Verified intact after every contracts edit. - The manifest validator only accepted
codexandclaudeAgent, so adding Antigravity made the entire manifest fail validation and silently fall back to defaults. conversationRollbackis a mode union here, not a boolean — registered"unsupported".supportsTextGenerationkept alongsidesupportsBackgroundTextGeneration; different mechanisms.ProviderApprovalOptionlives inbaseSchemas.ts(#8058).agent_thought_chunkalready mapped toContentDeltawith payload-derivedreasoning_text.
Three shared ACP runtime gaps fixed, which Grok and OpenCode also benefit from: startup metadata published during session setup was dropped;
session/resumewas unimplemented so agents' resume handlers never fired; and config option changes only updated a ref instead of reaching adapters.Deferred to the client PR:
ProviderAuthServiceLivewiring andANTIGRAVITY_AUTH_METHODSexport, plus the adapter'scompactiondeclaration which needs #10112. 45 client/docs integration points remain; Antigravity defaults toenabled: falseso the server half is safe alone.Count
51 candidates remain in the frozen
062987b2range. Upstream has moved to2a30353530with 105 arrivals past the frozen head, belonging to the next cycle. The 81-item list is still not a complete enumeration —ce4712d5b0was missing from it and is being adopted in #426.- Prime would have been deleted.
- changed the title
[-]Upstream integration cycle: resume approved catch-up through 062987b2[/-][+]Upstream integration cycle: catch-up through 6c583620 (2026-09-09)[/+]on Sep 9, 2026 Cycle re-bounded to
6c583620ff— note for whoever holds this cycleI refreshed this issue's body on 2026-09-09 while fixing an unrelated composer regression. All prior comments are untouched; only the body was rewritten, because it still described the usage-pricing port as unfinished after that port had merged.
What changed in the body:
- Frozen head moved from
062987b2fbto6c583620ff(2026-09-09). Review cursor is unchanged atbeae2147a9. - Sources that landed since the 2026-09-08 handoff were subtracted: 31 of the previous 78 shipped via feat(usage): refresh rates on demand and edit custom model prices #416–feat: add custom model names and option descriptors #423 and feat(providers): add Google Antigravity via the official ACP agent (server) #425–feat(mobile): back swipe from scroll edges, Android text selection, terminal paste #427.
- Remaining inventory is now 153 unclassified sources in
beae2147a9..6c583620ff— 47 carried over from the old frozen range plus 106 new arrivals after062987b2fb. None of the 106 are covered by any merged Pylon PR. - Added the maintainer's standing preference on duplicated features, now also recorded in the skill itself via docs(agents): discuss upstream features that duplicate Pylon's own #431.
In-flight work is not counted as adopted. Open PRs #429, #430, #432 and #433 remain listed as unclassified sources. #430 (manual context compaction) claims three of the listed 47 —
c5ba51d629(#9293),5f878d2a85(#9623) and5fa35d211682(#10112). Do not re-port those; strike them from the inventory when #430 merges.Also merged today, Pylon-original rather than upstream: #428 restored the composer context window indicator that #402's adoption of upstream #9190 had silently defaulted off.
- Frozen head moved from
Handoff — live activity motion and skeleton pulse (2026-09-10)
Maintainer is handing upstream work to a different agent after this. No unfinished worktree:
t3code-e7f6ef3ais clean onupstream/2026-09-10-skeleton-pulse, everything below is pushed, and nothing needs recovery from local scratch.Frozen state
- Upstream head unchanged:
6c583620ff7ad3235b135af7107c0543467eecfa. Review cursor unchanged:beae2147a9487ec47ac992319f2216914b4cb62d. - Pylon head checked:
390ba78a17cafad18e04eefbe2dfb21484a1834a, which already contains feat(work-log): native app and browser icons, honest failure and idle states #444, fix(web): adopt twenty-two upstream web corrections #446, fix(mobile,desktop): adopt ten upstream client corrections #447, fix(server,relay): adopt eleven upstream corrections #449 and feat(markdown,usage): adopt five remaining upstream corrections #450. The leftover localupstream/2026-09-10-{web,mobile-desktop,server,misc}-fixesrefs are merged, not pending.
New standing maintainer preference (2026-09-10)
Theming and styling follow upstream; only the logo and product branding stay Pylon's. Stated directly by the maintainer when choosing #9448. This settles visual divergences in upstream's favour by default and is narrower than the earlier "preserve Pylon styling" reading. Behavior, features and compatibility keep the existing Pylon-first default.
Open: #451 — skeleton pulse (ready)
#451, head
1185177e7431019ac414e1bf253e18484cad81cc. Cherry-pick of21b9dda5afb00a33e228a68d2ccc885bba7285dc(#9448), MERGEABLE against the head above, CI in flight at handoff.Retires
ghost-pulseand the swept gradient band; every loading state uses one stepped opacity pulse. Upstream's new@keyframes skeletonwas byte-identical to Pylon's existingghost-pulse, so the animation count drops rather than changes. Two Pylon resolutions: the detail ghost keeps its!seedgate, and UsagePage keeps Pylon's own fill-in timing sentence. Ledger row is in the PR. Next action: confirm CI, then merge.Open: #445 — obsolete, recommend closing
#445, head
eb471a6d50d18cb13a8bf62630e1fb1c22604aa7, now CONFLICTING. It restoredlive-tool-shine(which #426 had silently paused by adding #9799'sanimation-play-stategate with no observer) and ported #9799'sActivityShimmerOverlay.#444 reached the same destination by a different route and got there first. On
390ba78a17: the overlay exists withref={observeVisibleAnimation},visibleAnimation.tsalready gaineddocument.hasFocus()plus window focus/blur listeners, andlive-tool-shineanddata-animation-activeare gone from the repo entirely. #445's substance is therefore already landed, and rebasing it would re-introduce a utility Pylon just deleted. Only its guard test and onedocs/user/tool-activity.mdline are unique. Awaiting the maintainer's call on closing.Findings worth a decision, not yet acted on
- Pylon dropped
live-tool-shine; upstream still uses it. Upstream'sLiveActivityRowrenders the overlay only foractive && shimmerand passesshimmersolely fromThinkingTimelineRow, keeping the gradient shine for tool labels viaactive={animated && !shimmer}. Pylon's feat(work-log): native app and browser icons, honest failure and idle states #444 gives everyactiverow the marquee overlay and deleted the shine. Under the new styling preference this is a divergence to reconcile — checkapps/web/src/components/chat/MessagesTimeline.tsxaroundLiveActivityRowagainstt3code-upstream/main. docs/user/tool-activity.mdis now stale onpylon. Its last paragraph still says "only the active tool label shines", which no longer describes the overlay-for-every-active-row behavior.- Guard test available to reuse.
visibleAnimation.test.tson fix(web): restore the live activity shimmer and shine #445's branch parses every@utilityinindex.cssthat reads--visible-animation-stateand fails when a file applying it never attaches the observer. It catches both failure modes fix(ui): unify loading and refresh feedback across clients #426 produced — a gated utility with no observer, and a gated utility with no consumer at all — and would still protectlive-activity-focustoday. Verified to fail on the real regression, not just tautologically. Worth lifting into whichever PR touches that area next.
Verification completed
- fix(web): unify skeleton loading animations on one pulse #451: 339 focused tests (
UsagePage.test.tsxplus all ofcomponents/pullRequest/),tsgo --noEmitinapps/web, scoped lint and format. Grepped for leftoverghost-pulse/--skeleton-highlightconsumers — none. - fix(web): restore the live activity shimmer and shine #445: 160 focused tests, web typecheck, scoped lint/format. Typecheck and lint invocations were each confirmed non-vacuous with a deliberate failure first.
- Neither PR has browser evidence. Both are motion changes and AGENTS.md asks for a short video; the maintainer has not authorized driving a browser in this session.
Remaining scope
Unchanged from the inventory above apart from the sources #444/#446/#447/#449/#450 landed and #9448 in #451. DEF-7, DEF-16 and WATCH-1/2/3 keep their recorded triggers; their external state was not re-polled here. The
work-log tool iconsgroup (#9093 + #9606) that was queued next is already landed by #444 — do not start it.- Upstream head unchanged:
Correction and update — live activity parity (2026-09-10)
Two corrections to my handoff comment above, and one new PR.
Correction 1: the guard test claim was overstated
I wrote that the guard test "catches both failure modes #426 produced" and was "verified to fail on the real regression". That was true on #445's branch, where
MessagesTimeline.tsxhad exactly oneobserveVisibleAnimationusage, so removing the row's ref removed the import too. It is not true against currentpylon: the file now registers the observer inWorkingTimelineRowas well, so a file-level check still passes with the row's ref deleted. I re-ran that negative control today and it did not fail.The version now in #452 states its own granularity in a comment and adds a second, exact guard that does fail on a real mutation.
Correction 2: Pylon was diverged in a way that also broke spinners
The divergence I flagged as "worth a decision" turned out to carry a live regression.
cdde7f3150deleted@utility visible-animate-spinalong withlive-tool-shine, butspinner.tsxandrefresh-icon.tsxstill applymotion-safe:visible-animate-spin, andindex.cssis the only stylesheet in the web app. Tailwind emits nothing for an undefined utility, so every spinner and refresh glyph in Pylon web has been static since that commit. Not theming — simply broken.Open: #452 — live activity parity (supersedes #445)
#452, head
aad0257bfd, branched from390ba78a17. CI in flight at time of writing.Restores upstream's exact arrangement: the overlay is for label-only rows (
active && shimmer, passed only byThinkingTimelineRow),live-tool-shinereturns for tool labels, the observer ref sits on the animated row rather than the overlay, worktree setup and compaction shimmer again, and both CSS utilities are byte-identical to upstream in upstream's order. The live activity components now differ fromt3code-upstream/mainby one retained prop comment.visible-animate-spinrestored.Preserved deliberately, and both are behavior rather than theming: Pylon's
workingStepLabel, and thedocument.hasFocus()gate that AGENTS.md requires and upstream lacks.#445 should be closed as superseded — #452 covers the same area correctly against the current head.
Maintainer direction, restated
The maintainer was explicit today: diverge only for branding, which right now is only the icon, and get back in step with upstream on this kind of visual code. Treat a Pylon-authored visual deviation as a defect to reconcile unless it is branding or a documented AGENTS.md requirement.
Upstream check and lane claims (2026-09-10)
Range
- Frozen head unchanged:
6c583620ff7ad3235b135af7107c0543467eecfa. Review cursor unchanged:beae2147a9487ec47ac992319f2216914b4cb62d. - Pylon head checked:
1e1a43d5761cf93d0008527a7d376ba723c55d05. - Upstream fetched at
2afa02a280acb0db4868d36409ba9bf7eae286c1: 41 commits past the frozen head. They belong to the next cycle and are not in any lane below.
Reconciled inventory
Of the 153 sources listed in the body, 54 have landed (51 by cherry-picked subject, plus
6cf0c6ea55,00f8b7c280andc3b8825bf4ported manually in #444).6f405370c8(#9543) landed and was then reverted inffd5df2d3ebecause its bundledDev tests fail, so it counts as remaining. It is paired withfee2e0ff81(#9558), which edits that same test file.99 sources remain, all assigned below. Re-triage against the head above: 6 apply cleanly, 93 conflict (many in a single file or only in the lockfile).
b5d89038aeis an empty duplicate ofbde39d4d79. Upstream version bumps8de9169f07,1d1bf50405andb28471567care planned skips, because Pylon versions independently.Lanes
Parallel feature lanes are partitioned by surface. Each opens its own PR and does not merge; merges follow an adversarial review. Do not start work on these sources in another session.
mobile-drafts — 19 sources — branch
upstream/2026-09-10-mobile-drafts— in flightc0bf35466c8aa1862572dfa84b51b6fe30fc82d6— feat(mobile): show new-task drafts alongside pending tasks in the thread list (#10260)8e129a0dfb35ac2c03a7320245b5bfb976f5d3bf— feat(mobile): allow several new-task drafts per project (#10327)95d99373b74edfb3bfd092c61a15999a95727423— fix(clients): show feedback results in composer banners (#10398)66a24d6c1a008430eebd855cd5640607d5aef38c— feat(mobile): queue a message while its attachment is still uploading (#10404)d6aa179ad2afe0424e1410cbafbb119bbd5f7809— feat(mobile): show when an existing thread has a message waiting in the outbox (#10405)e1230d6031bc55a21668818d0b585d8887b88579— fix(mobile): keep pending messages in the chat timeline (#10449)5b68b2c8e1e971e4ee6956157a1698646ef52a55— feat(mobile): open the thread screen as soon as a new task is submitted (#10435)7dda0b1c0a95603f1954b81a9fee699be92668f0— feat(mobile): start a new thread on an existing branch (#10359)71297974c666b0db50a3e3b1a861742f2cdd4d7d— fix(mobile): prevent chat from disappearing when scrolling (#10479)b248f5ad566a8cd3ea2d7d678c1e8aa49c748879— fix(mobile): smooth composer status pill resizing (#10484)c0d4e95c0d921b5960ad04c7f8abec459ee3c59e— fix(mobile): release initial scroll target after dragging (#10483)e32dd42f8ba0daa2d0c6d6d2e474b7af6b3eb7b4— fix(mobile): animate thread lifecycle transitions consistently (#10487)b7175371d9f32f3b759a922cdbf727a3214c99a2— fix(mobile): restore assistant message bottom padding (#10491)dc39615aec702ea6d402168f80b4d1613f4f2e0f— fix(mobile): preserve chat rows when toggling commands (#10492)357b8d5217cd62826767b6ce6d7c47915f2777d2— fix(mobile): match Working status color to desktop8d7f78121660eb8599d4c5ff40cb4394159abfab— fix(mobile): wait for native thread scroll before reveal (#10486)2c8e95a4b641898322c7312cb67535612606745e— fix(mobile): show the provider account badge on thread rows (#9899)3e6f856f2359421958a3aa046f2c393e00f3dc6a— fix(mobile): tolerate native Headers without getSetCookie (#10851)2a303535305d7d224a750fdee78c66e2a52ab3ab— feat(mobile): arrange threads with drag handles (#10496)
mobile-android — 10 sources — branch
upstream/2026-09-10-mobile-android— in flight9eb4d71681dc7d002082db2f8b4bacf7614412f4— fix(mobile): remove provider setup (#9721)1d1bf50405ccca8fdb8b57879d9def379e27a550— chore(mobile): bump app version to 1.1.0c0cad74bfaddf153c3adaaf4f78af2be9260c4c1— fix(mobile): restore brand artwork in the Android adaptive icon (#10598)02443335b155e46248f96d80e037603abc742a61— fix(mobile): configure iOS Keychain access group (#3665)892de47f0625183edd111dd36df45b156185bbf2— fix(mobile): fit the Android splash icon to its circular mask (#10620)b28471567cebe20347205059bbbdb3efe1213528— chore(mobile): bump app version to 1.1.1579266caa89238611ddb974ffebe9968c6a6e5d5— feat(mobile): use Android wallpaper colors (#10691)4664c572a78231611491f63f677f0e007ebaab03— feat(mobile): add optional Material You layout (#10692)1862686f9e42bf1d77e7f2ad03e24d7b0c7908f1— fix(relay): use current APNs registration routing for queued jobs (#10859)6c583620ff7ad3235b135af7107c0543467eecfa— feat(mobile): add Android agent notifications and ongoing activity (#10416)
web-onboarding — 9 sources — branch
upstream/2026-09-10-web-onboarding— in flight09aac71563c66a4f65f6fbe701aa9596cb677767— feat(web): first-run welcome wizard with agent setup and project import (#5362)d92dca74eb7b7c6068619752f5b9a55c0e36f352— fix(web): resume imported custom-provider threads (#10184)82689782eee0f0cf27d5601e1d533381587b64f8— fix(web): explain hosted connection prerequisites (#10129)c2c4185e175daea86f8fd6336fd8839a81cc616e— fix(web): onboarding installs agents without needing Node or npm (#10402)ec36176e4f25fac7e3c380f6a4b646116e4ccf3d— fix(web): onboarding wizard now supports light mode (#10432)95f9b14f873c7b119f0ffb6dbd194c7063293aa2— fix(server): import transcripts with oversized tool records (#10430)f729e8fd837e4d6de86781351c3aee5a4ea19ab3— fix(web): make onboarding a shared multi-computer wizard (#10465)8b2838e0e8a73d3fa6476940445c372e47b99db4— feat(web): group onboarding project import by repository (#10493)62fbbe08aa854fcbd8044cd971a45a54edafcb98— fix(web): tolerate servers that predate git identity in project import (#10547)
web-project-defaults — 8 sources — branch
upstream/2026-09-10-web-project-defaults— in flight9f40b2f563c662b43887b11ff99c466fe871c1af— feat(settings): add shared project defaults and scoped overrides (#9754)420fd76f60433fe05b8d2c76f4fbde430dc49968— feat(connections): balance new threads across connected machines (#9895)2d6a3799978659e349faf8ff4297098ffb782ebb— fix(web): only show auto balance errors after failed checks (#10407)efeac144289d0f64bcfe3b9274c616499893be91— fix(web): show load balancing note for a single machine (#10433)c8ec7df12415140c6413372f53e3be4fe2e959f8— fix(web): make settings project scopes searchable and scrollable (#10570)15193df9fb915837f7215909a7d741789db0a273— fix(web): update machines together in auto balance (#10596)7d9aaf6a7eb22d5e85b0e3b21686cc437fe68576— feat(web): add pull request merge defaults (#8088)eb115063634c416c6362cc407f8572cb0c136ddf— refactor(web): pass the project record to ProjectFavicon so icons cannot drift (#10714)
web-composer — 12 sources — branch
upstream/2026-09-10-web-composer— in flight (may split out `upstream/2026-09-10-question-attachments`)2c3353578098a9e55e203a72217abe993f97987e— fix(web): keep timestamp tooltip dates in English (#10256)aea9ecbc482a3d2c14d1828cb5eeaaa9294d1320— fix(web): make task row states readable (#10128)076d753ae6cb97136b6b4199fb8fc0b379282dba— perf(web): skip checkpoint map rebuilds while streaming (#10118)b919d6389929698ddf223d35d20139f01c8bc899— fix(web): keep composer toolbar controls anchored during transitions (#10478)dadba6d95d2c4515956a6c7fef184378987e13b7— fix(web): remember Composer Fast mode across new chats (#2981)09e8de9c655ae85410bf6b00446f272a01da81c7— Add stop thread keybinding command (#4308)8588d7f63bf57e6285daafe035708cc22a99619c— fix(web): open proactive panels when entering threads (#10610)50a76cee7c56ac22568e549dc855248967bfb9ab— fix(web): keep scroll-to-end button close to composer (#10543)7220dfe2c949476eaa7d21eccbcd3a0ce0eddb49— feat(chat): attach files to question answers (#9871)134b7194b125dd4881ff6040f66997b23489b72e— feat(web): add previous/next turn navigation in minimap (#8531)de545c41737aca08359244b7778ab52e55934f17— fix(web): stop the bar under the composer popping in after threads load (#10727)7fbc545ae8c7866ac2b39648120cb2a17250d8b4— fix(web): keep the composer footer still while thread data loads (#10768)
web-panels — 10 sources — branch
upstream/2026-09-10-web-panels— in flight1587f248dd81ed45e214d476451ebf16dbfadb1a— feat(server): measure provider turn token usage (#9132)d64335bb5913c21869633a4236d9409911e3da52— fix(codex): name the usage limit and its reset instead of relaying "out of credits" (#10473)ea2983afbbcd5ad6ee2e7db80c2a9270ff4964a9— fix(web): copy selected pull request link from PR page (#10615)d081ab7abc16a21570d3d96948acb6c1f8d847a4— fix(web): open pull request markdown links in the panel (#10623)6df0add6e65b7c0040b5774635f794e4ff802ddd— fix(web): navigate markdown images as galleries (#10625)bc4b00666272188027d086361fa5ae01cda53bd2— fix: generate thread titles with the selected model across connections (#10526)1f14d6d10afbcc99ec255b23544ee25c08dea321— fix(usage): keep account columns aligned across limit rows (#10690)bde39d4d7977ce85d6ea396a983d6b6a25bf7e07— feat(web): accept file drops into sidebar threads (#7892)b5d89038ae72142038dfa8cf69d49b7a607fe98e— feat(web): accept file drops into sidebar threads (#7892)772ea1473a4a8f8fb0e0a5c9ba6d7a2ef14eac6e— fix(web): honor terminal link browser overrides (#10060)
desktop-capture — 10 sources — branch
upstream/2026-09-10-desktop-capture— in flight (may split out `upstream/2026-09-10-desktop-fixes`)8de9169f078fdafedf47d8c299cb8e2c79fda6fb— chore(release): prepare v0.0.40299404a754f52c02c69634528d8856b3c93b378c— feat(desktop): add cross-platform window capture (#8103)9fe4d6568b5e4852f6085d3a22dbc5aa3a632408— fix(native): wait for the KDE feedback test listener (#10645)a01b227d6f37d1cfed7a2f47aaace2f72ea76ce3— fix(desktop): resolve local media linked from remote threads (#10619)9e37f0c291974d084a59d7b9f165a1cb056e6043— fix(preview): transfer recordings to the agent environment (#10572)b5f7fa0ede2a0d791226e6474c9cc4374dd89cc9— fix(desktop): enable context menus in the browser (#10670)991526383f95eefdd66ffd2853136c6dd34ae008— feat(desktop): refresh macOS installer with aurora artwork (#10632)061543e9e5b54ec0048725c37d52fef2962df173— fix(mcp): keep preview snapshots usable by the agent and let it save them (#10501)5d14c0e9686d8bedf47dd93dd3811fd639255c7e— fix(desktop): use official logo in macOS installer (#10819)0fe4c99ee6df4cbb7a9064d2d86ece65ecef5eb3— fix(desktop): neutral artwork for stable macOS installer (#10820)
phase2-wizard-consolidation — 1 sources — branch
—— sequenced: needs web-onboarding and desktop-capture merged3faeee49ac67dfd9534369f1e1c627c0356b75ac— refactor(web): consolidate setup wizards into shared components (#10832)
phase2-toolchain — 18 sources — branch
—— sequenced last: Effect rc.112 / knip hunks edit files the feature lanes create194f838e7636f97739c440c7855aed195dbd7f52— chore: audit lint directives and move plugin allowlists into config (#9300)3b2de9da1c8763602e283e8d14b41b5d57a9d0c7— chore: dedupe lightningcss and tailwind node bindings (#9331)f5fbb1bcb0db378c61addd5b49ef2d95bd888168— chore: upgrade vite-plus to 0.3.0 (#9327)6f405370c8e552da9dcfdd6922e85789fd918340— fix(dev): keep shared dev reloads and hot updates working (#9543)fee2e0ff8168b82ab19f496fcc874c1f3871f522— test(web): fix flaky startup and Tailwind tests (#9558)5b8a69c7b90b751507d0ab762dd77aaa2048408b— refactor(desktop): classify backend exports (#10265)5a853a4b4513467fd1be3d62fe7dc974cea07c3c— refactor(desktop): classify electron exports (#10266)89dd9ab32b4aaba6f34689353cb14fa6549e34fc— refactor(desktop): classify app exports (#10267)b491e41da366beb03c54b585745318553f1239c5— ci(knip): enforce desktop exports (#10269)a37c66406830525888465b2eaebf34df2265de86— chore: upgrade to TypeScript 7.0.2 (#10663)bd56e920b7309e859d0b1a099d53e816628ea75e— chore(deps): upgrade Effect to rc.112 and Alchemy to beta.76 (#10652)458f5029882d6da3f2279893d6c9fffaf7748b5c— chore(refs): sync Effect reference to rc.112 (#10653)9d345fa957cf22806171c8037432eec8d9ed496d— chore(refs): sync Alchemy reference to beta.76 (#10654)6f4cd07b900299629b9f2f9a9336f5c090556a51— refactor(server): classify runtime exports (#10274)161715b1e4fa6d20fe3eb1cb9c91904bf83ca4c1— refactor(server): classify service exports (#10276)77d9ffc822ac4c1f3600dc6c97e92fc94e9e12a3— refactor(server): classify telemetry exports (#10277)060c576f8922703725f0dbdd01443ed88ecc9baa— refactor(server): classify provider exports (#10278)7d620506a1fecf07aa2d623e72059d551709ae3a— ci(knip): enforce server exports (#10282)
phase2-docs — 2 sources — branch
—— sequenced last: restructures docs the feature lanes edit2e688a53cf8fc7a9caa9fd5070148bfcd3d5a741— docs: keep internal guides focused on architecture (#9755)9e1fb459a985d13c1d4e57080f49d70dabf3b681— docs: focus user guides on features and workflows (#9756)
Deferred and watch triggers (checked once this cycle)
- WATCH-1 #8097: still open upstream, so no action.
- DEF-16: the only upstream change in its paths within the range is
7fbc545ae8, a one-line capability entry inClaudeProvider.ts. It adds no model-identifying overage data, so the trigger is unmet. - DEF-7, WATCH-2 and WATCH-3 are not due before 2026-11-01.
- Frozen head unchanged:
Progress: parallel feature lanes (2026-09-11)
The frozen head and review cursor are unchanged from the 2026-09-10 lane-claims comment above.
Landed (8 of 9 lane PRs, 75 of 78 lane sources)
Each lane got its own CI run and an adversarial review with fixes before landing. Where that was faster, reviewed lane heads landed through integration PRs that ran CI once on the combined code; GitHub marks the lane PRs merged.
Lane PR Landed via Sources #458 web panels, usage, turn-token telemetry #458 10 (9 adopted, 1 empty duplicate covered) #460 mobile drafts, outbox and send flow #460 19 #459 first-run welcome wizard and transcript import #467 9 #455 project defaults, machine load balancing, PR merge defaults #467 8 #456 Android notifications, Material You, mobile provider setup removal #467 8 adopted or covered, 2 version bumps skipped #457 chat view, composer and timeline fixes #468 11 #462 desktop remote media, recording transfer, browser menus, installer art #468 7 adopted, 1 release bump skipped #463 attach files to question answers #477 1 Cross-lane fixes applied during integration:
- Imported projects inherit the machine default model (#9754's WelcomeWizard hunk).
- Relay cookie assertion restored.
- Three server test collisions between onboarding and project defaults reconciled.
- fix(web): port upstream chat view, composer and timeline fixes #457's revert-button guard narrowed to optimistic sends, since feat(mobile): keep new-task drafts and queued sends visible #460 moved feedback into banners.
- Deleted threads' browser artifacts are removed by feat(chat): attach files to question answers #463's faster cleanup, including when their listing fails.
- The cleanup restart point is limited to projectors that record cleanup.
Maintainer decisions taken on 2026-09-10: Electron 44 (drops macOS 12, with an update gate so Monterey stays on its current build) and the Linux desktop entry rename to
com.pylon.code[.nightly|.dev].desktop.In flight
- feat(desktop): capture other app windows into the composer #461 cross-platform window capture (#8103 and #10645, plus #9001 and #8626's
websqlremoval)- Review fixes and a verification review are done.
- It is now merging
pylon, then running a final CI pass.
- fix(clients): name Pylon in desktop activation, update and setup messages #478 branding. User-visible "T3 Code" copy from earlier ports now names Pylon: desktop activation, the
t3 appCLI, desktop updates, Antigravity setup, and the web boot error.
Remaining after #461
- Phase 2, sequenced (21 sources)
- Toolchain: vite-plus 0.3.0 with #9543 and #9558, TypeScript 7.0.2, Effect rc.112 and Alchemy beta.76 with reference syncs, knip export classification.
- Docs restructure: #9755, #9756.
- Wizard consolidation: #10832.
- Carry-forward: the rc.112 Effect patch must keep #10851's
getSetCookiefix.
- Record gap before the cursor. An audit found 20 upstream sources before
reviewed-throughbeae2147a9that were never ported or recorded. #8626 and #9001 are absorbed into feat(desktop): capture other app windows into the composer #461. The other 18 still need a disposition before the cursor can be trusted:- release bumps
- CodeRabbit and Macroscope config
- #8733, #8840, #8932, #8851
- #8085, remote web session cookie isolation
- #8936, #9010, #8367, #9033, #9076, #8925, #9092
- New arrivals. 41 upstream commits past the frozen head belong to the next cycle.
Handoff: remaining work in this cycle (2026-09-11)
Frozen upstream head
6c583620ff7ad3235b135af7107c0543467eecfa; ledger cursor stillbeae2147a9487ec47ac992319f2216914b4cb62d.pylonis at4fa8a964685005c155c8221aeed43c080daeb2af. All nine lane PRs and both early phase-2 PRs (#478 branding, #481 pre-cursor gaps) are merged. Two PRs remain, then the cursor and this issue.Verify everything below against Git and GitHub before acting; this comment is a snapshot.
1. #483 integration-4 — CI green, now conflicts with
pylon- Head
c43ea26231ede974dc0499ab69bb83137f841dc4. All checks pass on that head (Test, Test Server 1–3, Check, Rust, Release Smoke, Desktop Prime Packaged Smoke linux/win). - It merges the reviewed heads of refactor(web): share one setup wizard and finish Antigravity setup from model pickers #479 (
9503961c4d) and docs: keep internal guides on architecture and user guides on workflows #482 (50e57bc9c9) unchanged, so merging chore(upstream): land the wizard consolidation and docs restructure together #483 marks both merged. pylonmoved after that CI run: fix(prime): verify current and historical publication policies #484–fix(prime): stop delivered work and preserve recovered answers #495 landed from other sessions (Prime work plus docs: simplify agent instructions and skill routing #494docs: simplify agent instructions and skill routing, which rewroteAGENTS.mddown to 33 lines and moved detail into.agents/references/).mergeStateStatusis nowDIRTY.git merge-treesays the only conflict isAGENTS.md. docs: keep internal guides on architecture and user guides on workflows #482's twoAGENTS.mdhunks edited sections docs: simplify agent instructions and skill routing #494 deleted:- the hosted-origin sentence (
app.t3.codes→app.pylon-code.com). The surfaces section is gone;app.t3.codessurvives only indocs/internals/remote.md,docs/internals/t3-connect.mdanddocs/operations/release.md. Confirmapp.pylon-code.comis actually Pylon's hosted origin before re-asserting it anywhere — it came from the docs: keep internal guides on architecture and user guides on workflows #482 lane, not from infra. - the "## Documentation" rules block.
AGENTS.md:33onpylonnow carries a one-line version; the fuller rules, if still wanted, belong in.agents/references/contributing.md, not back inAGENTS.md. - Recommended resolution: take
pylon'sAGENTS.mdwhole, then re-home the documentation rules in.agents/references/contributing.mdif they add something docs: simplify agent instructions and skill routing #494 dropped.
- the hosted-origin sentence (
- The merge pulls in a lot of new Prime server code, so re-run CI on the merge commit before merging; do not merge on the strength of the pre-merge run.
- Worktree:
/Users/rynfar/repos/pylon-integration-4-0911(branchupstream/2026-09-11-integration-4). After merging, deleteupstream/2026-09-11-integration-4,upstream/2026-09-11-wizards-docs,upstream/2026-09-11-docs-restructureand their worktrees (pylon-integration-4-0911,pylon-wizards-docs-0911,pylon-docs-restructure-0911).
2. #480 toolchain — needs its final rebase, then merge with the relay deploy
The subagent that owned this lane is gone; whoever picks this up owns the rebase.
- Branch
upstream/2026-09-11-toolchainat1d79d809c2, worktree/Users/rynfar/repos/pylon-toolchain-0911, clean. Scope: vite-plus 0.3.0, TypeScript 7.0.2, Effect4.0.0-rc.112, Alchemy beta.76, knip export gates (18 sources). - Rebase onto the latest
pylonafter chore(upstream): land the wizard consolidation and docs restructure together #483 lands.git merge-treecurrently predicts conflicts in.agents/upstream-review.md,apps/server/src/auth/EnvironmentAuth.tsandapps/server/src/environment/ServerEnvironment.ts— the last two are chore(upstream): isolate remote session cookies and settle pre-cursor gap sources #481's newexport const make. Tag both@publicfor knip, or make them private if nothing consumes them. - Redo the mechanical steps rather than hand-resolving; they are in the PR body:
vp fmtafter the vite-plus 0.3.0 commit;git grep -lz -w 'TaggedErrorClass' -- apps packages infra scripts oxlint-plugin-t3code | xargs -0 perl -pi -e 's/\bTaggedErrorClass\b/TaggedError/g' && vp fmtinside the Effect rc.112 commit — the Prime commits that landed since add new error classes, so re-running this is required, not optional;- regenerate the lockfile with
vp i, then prove it withvp i --frozen-lockfile.
- Keep #10851's
getSetCookiehunk inpatches/effect@4.0.0-rc.112.patchorapps/mobile/src/lib/http-response.test.tsfails. - Re-run
vp run knip:check, affected typechecks and focused tests, then CI. - Merging deploys the relay. The maintainer chose "Merge, auto-deploy on" after a relay-safety review found no resource replaces and an in-place
relay_migrationstable conversion..github/workflows/deploy-relay.ymlruns on every push topylon. Watch the "Deploy Pylon Connect relay" run and report the result, including the[RelayNeonProject]update and therelay_migrationsconversion. Never deploy by hand.
3. Close the cycle
- With chore(upstream): land the wizard consolidation and docs restructure together #483 and chore(deps): upgrade to vite-plus 0.3.0, TypeScript 7 and Effect rc.112 #480 merged, confirm every upstream source through
6c583620ffhas a disposition in.agents/upstream-review.md— including refactor(web): share one setup wizard and finish Antigravity setup from model pickers #479 completing #9348's client remainder and #9647, and chore(upstream): isolate remote session cookies and settle pre-cursor gap sources #481's 18 pre-cursor sources. - Advance
reviewed-throughto the frozen head in a small ledger PR (it must not move while anything is unclassified). - Update and close this issue per the skill, and open the next cycle from the new arrivals past the frozen head — 41 were recorded here, a later count saw 52. Re-count after a fresh
git fetch t3code-upstreaminstead of trusting either number.
4. Small follow-up still open
apps/desktop/src/backend/DesktopBackendConfiguration.ts:570points atdocs/architecture/resource-telemetry.md; the file isdocs/internals/resource-telemetry.md.Operating context
- Standing maintainer decisions this cycle: Electron 44 (drops macOS 12, update gate keeps Monterey on its current build); Linux desktop entry renamed to
com.pylon.code[.nightly|.dev].desktop; chore(deps): upgrade to vite-plus 0.3.0, TypeScript 7 and Effect rc.112 #480 merges with the relay auto-deploy on. - Working rules: port every upstream feature while keeping Pylon's; keep a divergence only where upstream genuinely cannot do what Pylon does; theming follows upstream, only logo and product naming stay Pylon's; an adversarial review plus green CI before anything is called done; decide reversible in-scope calls instead of asking.
- Scratch material lives outside the worktree in
/tmp/pylon-upstream-0910/:BRIEF.mdandREVIEW-BRIEF.md(lane and review briefs),review-guard.py(mechanical port guard),lanes/*.tsv(per-lane source lists),INTEGRATION-FOLLOWUPS.md(follow-up and merge log),int4-body.md,new-arrivals-41.tsv.
- Head
Closing audit in progress — source traceability
The frozen range remains
beae2147a9487ec47ac992319f2216914b4cb62d..6c583620ff7ad3235b135af7107c0543467eecfa(797 commits). Git/PR reconciliation found a recoverable disposition record for every source. The cursor is still unchanged while #480 awaits its final CI and merge.#483 merged as
2bb2c523cff94823ef79228b7827d8f520a4bb10after fresh CI passed on2863392ce000a5f81f1bdfa53efa43b43d057e99. #479 and #482 are marked merged. All three requested integration/wizards/docs branches and worktrees have been removed after verifying clean state and merged ancestry. The stale desktop telemetry documentation link is fixed.#480 is rebased onto that Pylon merge and pushed at
a6087ab9e4b0f7459f72b59ca843a5881915bddd. Local verification: 909 tests, 11 affected package typechecks, knip, formatting, scoped lint, regenerated lockfile and frozen install. The newer Prime publication-test export conflict was fixed. Final CI is running. Its approved relay auto-deploy is still pending the merge.The active index omitted links to several intervening merged ports. #425 records the final Antigravity implementation and its 16 follow-ups; #433/#440/#479 complete its contract and client portions, with the explicitly retained mobile/catalog exception in #479. #446, #447, #449 and #450 accidentally listed Pylon port commit SHAs as upstream source SHAs. Their source lists are now corrected: all original port commits are merged ancestors, and source/port changes match; eight patch-ID differences are surrounding-context differences. #449's reverted #9543 is completed by #480 instead.
The following 118 additional sources have explicit provenance in merged Pylon commits. This table makes those records recoverable from the index without relying on temporary lane inventories. Existing source-specific partial/superseded decisions remain authoritative; this is a provenance map, not a claim that every source was adopted verbatim.
118 source-to-merged-port mappings
Frozen upstream source Merged Pylon port Owning PR 04efa7907e9ec207e2d6af459ce3b2ffd55f610702076a64903b8b3c7db2d921fca529f5fb0c1a76#260 b21d87243ea637fbb6fb50667e9a8547e1b6c4e8847ba8995c587e3d37a1a147c1bcf2640a5e1059#260 08aad594f0059d28dd23914f9d37ad4e695fff75b91dd14fd01fd1838ebbbf89f733dcea0d211293#260 98725df00a729ba226ae8610a3488e5b9168029fce34c733747008b760595a40163134d47b51ac81#260 9a7b1e21e51609266adf657bcab0b43b6bcd445c1cd72917e4a71c064bb36fe2b2573d5fe83dc5e6#260 ea71a19d4181ce13b0e8f374f45ba9237ee4a9ce434ba6ea2594b547888e8171a5ba4084a489c53a#260 feb3ea7ebf83de2e301adb1f20300b262773ec547217a80af1300c7177ceb644ceac1ede35a7045c#260 c2283ce14628127ef1758974ddab4f5b1f89d47a2e349a97c6e55029c240441fcd0733d55dd76228#260 7e460f429b740180cd72730418262a2df971ba5498a84624a151065621450e9ee36d406d55d90c4f#261 6866fd6b5ccff82333ad4386ce68cdec03531b682a474e4459144a9726c8d568c44f825db958c880#260 fc53b273039cf5e0a932582b1fbb56e7223ad4ab3846feb2c7bd808ce3199980705c2886ae64b207#260 5014e5fcdd6e5f4a53d0fea4cbecba733821a854c3cee8324f9aa3cbb1eede67e6f005e0ae42b1ff#260 8efd4e95fcb08478c9c6e8eee384bfca559f62cc50c258836bb73df99843a92a99b2066ec5d352b4#261 0e77fbd3d0d79eec5247e75583a04590a17851332d53d9b9b71713c0013e85fa43a63d405f5d8bfd#261 d0b19b32e01d7abc8829c01353d759fed3d304ed5e243cb2c4fe5b8f318ea58c5e01dece1179c182#261 cdbf324aa043b1bc5705159127d2b55f186d1b9b3ae8a72dbad9b923b27313e669cfe9353f61399c#260 083d4de5b0fd33efa28363546b6ed89e191c5200c1b28f017a341db9b1d7310cded74b6fa705518e#261 a434677eca737771dd64703545c13eb11ba92ce2f870bfd98de9abf0569c15921ed6863c67174dbb#261 80c708a1fa8986bce0b2d1ba4d35e79d9e4094baa761ee50a27ee681c6e5aaaef96fff8c0c0b8fe3#260 b2f25d390a8546e42eb6186115b673a53b8c38dc5af7a209e0ece48e4db7dd73325d96763a01d054#261 c37fd136edf546fd58daeac146548436c1fa38c2df8999cb9387546eb528992d0ce983e55720b9f7#260 0e1570bde5b64458449a45989f1b56d6fd6518835e4755d93ffc5dc7a4603e34c574b34bfcbe7c96#261 8401f4d85887786fbb773d3fd41b8f07a77624b8dcb75420e9929cc102668180ac41b0004a0a0fda#260 f2a914b8588bf3038472c14b129fbc5ddb3a2992760d2282e91056058c2c9eee28f184a0d0e07ab0#260 f46a709ee487e1e6e04423fcb7032a26eb10312931df0a3f1c4bcc700475b221184375888ab6f28b#261 d937e30759ceae421bf3cc1b84414de4b67df76c288f0079413a5fa2d5bfa4b9210bf6d2f8c13895#261 fea1af81fdab64a19353224d60b4efa60f929740e8a4b9d8a5c3fb61413989074a258305a7df6144#260 47a95332a2b8fe47da9fb0af97fd6f0b542a18ee9720d93157fcf9a440636d8d5c9cf745bd3cdf50#261 9fdafdf114a88bd7309883b4578e74cbe786d04dc9559473a9388f98d93437a17f09041f39700c74#260 2ab7973fe06eecf8b0a0d1da8481d926fca1ee1b62c433647257397381c80305a5ca4402560fbd81#260 e7deb2aaf4d4d089618dc0c8f393fa0b8b6c77e969c8e640ca350a3f51f650deeed86cefe70fe10a#261 941acb4f919bcef337d4d9e1623101bdc30d36161592795c4e7df42c26618a152af594dce711afad#260 a1a2bb1cd9f000f53fbeae752ed5c38f152eadf2b5104c0d255e8ba23d938f08544d30a1529a8626#260 cde12790d721ab2a90471750fd75d9f5bf13f57dcefa8e9b71c0d11963abe3dc81658f03e26007df#260 133db22fae34cfb2e62a806e99d22674b0376f351599a1758b422048a64f8888d7d3f69660686c9d#260 c15735dd8894f829ce396c922ce4b5a48073f05ab6441e63bf4c433e81bd79d814fb25e8ae1e0481#260 43bafd4674841fb8782f5174033b684aa0d83f671c41173e3e8d985732755ade91daafe24623d77d#260 082358f9ef6feaadfaafd59a7512da26beb00100fab01c292920d3d9d671249deda67de25c83463e#261 0681d854994ec0ceed0562ae74549ccf8ef2ec41f1397eff6c09232a4884cd913d3014b68f7a3413#260 f9d1c65d475807f70d29deff71b16a922a61c4c05ba1ab6b31b20e515b0dad0d5e073eefff879f51#260 535c83dea5025e49df12df4a14b4d1dfb7d373cea2a85a65505a39f3fda08f83a922c8dea6e08d35#260 5392c9bb99c4be1f1c3fd78743df62885fd214dd51d6bfafe144b26bc70288651962e40faf9cf79e#261 827345a07a3d2348abc63e5215e57184024078d8a8d11c40c6dccd28ea5c85d7ac77a853b62dfc98#260 d2042d288eaf7aaf7feda85eb7d1a6f546302c1218c32f5108bf709c9f30a09ec0548b35c9c23375#260 4116db9807cb37b49d3db35c7a45301f5e851b018eff40e18f7bccb5f7710969f27d46c1a160bff3#260 a56b0cd7178dfef299aa49b26773a80a34abe20545400e9f6bb7c6ff2b7f5a7b19b8f11a9695bab4#260 a81a52afbb4e03ba82b2743801772151ed8c7d70e3bb6eea6f37b98a3c97c233346c6acbb9f5cb42#260 6ff537f03c4df500da7283c0566fe6f8feca709b80befb9b5d8fd84b85d3c43a651f666197179fd7#260 9e646ad84c9d5008187eabf479e85619df9de8ca5077da7b171e4bde5333dfc87bd75c62a0ccb9ad#260 dd6879ffea24da9fc16cb62d7d6072d2c5b2bae3da77de8adb9bd8e2ddbfaf0f4bc248424596a38f#260 14f15cfed48bc7519e8e5eeac03f483f4b11ef3a7e2a1bc9cf18a1aec5c4bc1d36bcddafb5737251#260 7e9d5a7efa70f92f91d960a4f50243ba44d805dace4af84d643fd6ef10ac04e9182e06a867107ed3#260 f14f41b894448298a86865c9114e6700245356e7c0a355e9155f01dca17521c98b91ce7d66b0d5a6#260 70cd258d8aac43ea57494527b00bf36de3efa6c0ae4e91a7711a90334ff3e6e9649fc014d1ed7e1f#260 bc918e74ace5dbb4fe1ce73b59d06a9ca1be9ed392e0ae6e7c4a75d404f35c305cb620c676d0de74#260 6e3bac3722d19b2e2cb736c2e789568eaf151032002c2264d1c9f31e74982c86f3fd60e10b2dbf1d#260 57a66608b918d673eeec7e6c94ea5906b756fcd03c85e32feec3a323aea11682370aa61bea999239#260 2a7a449cca3c7760b689a54b3aa02476a206dbc9950bf6521695403f0fece9664a1b8ffdf081960b#261 9159b808d35a88e74fc91e11070f3270cdb321f91d55596dec5e75f51cbad5fa2ede96f0b6a61451#260 8d5b712de3cbd84118327808c403756e8894014a4d813775c74b049136cfb19166b947fe2c228ab1#260 b57726ca842624b713572529109ac49b17c93fb35d34054298274fc92ef7e28a3c8c1a3be622bdbd#260 f90e2f2bd26e22b77ccf781cccdf95afd3c3ac1cb89039b0f075565e1947d290ffe1ceaf9b058ad3#261 62c68dc41f9d9d7ecaf5193a6a8d997ebf671a619fdc2d03facff2f2f7bd4b7c2d5e3c387c0beecc#261 5a9b56291f82b9269346053594d8b5dfca736976b3030550f19103c33204a2a882a7a75ffff5d5d0#261 28ddaf75917140e5e4355d4386bc5d14d9dad7b6b37cdf6c8282eccf37a8e4032cf627ad6a45f96f#260 ca63d42d670837b918081d1fc1ebada553814b4c272de2d10343f238bb403f61a830036ef8a3b640#260 ba3cb0773859334fe9f75016295bb3893c9e6044a66198b81624d12ce2e0e185df541c40b1dba1de#419 064392ffc7fc58fcc3018fd2ba2df33fbb21f1de2ced6925ea9eb05c6b423125e79cd7154fa34521#260 994bd7373cf3a335c204a617604e690ed4c00cba0911991cffa358c6599ea65ecd06a18912a33f81#260 4ba39a6f408bdee468df2e3ffdf7d5dc08e7b59d129717ac4b876fa18ee54110824f9c52805743c5#261 dbc7bfa3f36cc61a3f1a2015e47d71ae9dee54211c806bd761aa0f5202c5795d1488c15075e76d79#260 e94603adfac7d8734f9af01e33f67e776daf482d4f33eb90db811cae1568d638c86ed3563cfb3a30#261 ef6cc0b362019f32152470ed96c1aa1b813fb7f6d7ee1775baa84c792244612c310c7ac92f516b9e#261 355fbd96d5e90b52961ac5f1e035112fc3bad4a9d2d174cab1cb534e02d2623e28bc74ac84fd1f38#260 9ebbeda5a03fd8fce7be147b65ea396e50721c68eb77ce8efc11f4e54219b6f90911a138563e6c80#261 31eeb443305a4e11c8b20a7c8ff2b3f5e841eb0fe643d9d0443bbb0888969110635f8cc79c8a7f89#260 b9b1b8fdddf9d006fdb820af770063e1f968345bcb10c155ef59632b25039cb4bd2eb046dedc198d#261 66419a1d1b80110c9702edae641bddcc2888fc9816e4acbdfa026ebe7a0bdcdcec67b668bb2e35db#260 12f1fc427efad4b683835a72bda6f74bebb5d64179c452bf5c08c693c2a9baef58f7ab8e68d93889#260 5f84efa1ec2fb3cd6f6c54545cc34bb77ac1ddb85b8eee2be391b9c6d8cf674bbc11ae3ac65ef641#261 d42254dfb462e4ab23a42d4bef53b1ce00a723968b8ab286a75a029cc325248eb7bd90c9a163dad1#260 6a5a18cb1bc9ea878afa1146950439b5d4744110c83c4c42dc9012b5fe02efce1700d9b8292034e7#260 1575ada305b9686b9771df2dca304f391e85a76e3b5302049a2dca40d028c731d407087b415b07cf#260 0bc59bbae391ee45ab3a7cfb2dc703c8b27e57725aefb0a1e8186318f5d6a548cf264c3f7472a5ea#261 48ba76bc26337f23d1f0991bbac51f996a3333dcaaa57b63944878a89fcd7a22e8ff0065ee45813a#260 9f9359bd8132c425493720080149dcc0d3da943695c55a2752fa4e363c8b5e9778135a85fad47d7f#260 b5f4e8137b3cbd657fbe2b698f9db4e321acbc3deb2a04300eba54b811882d5d091ed2534ecd539a#260 d4bd8923ad8cab346a854967015b06d9e5cd77f7d372b9da7513adff5e64b9981e117a182a1dcdb9#261 5eb4f452ee0fcde7b5bbc93d62de9118b70a33b2d77e58c47cfce5a75763a0488274388a123fc7c6#260 c89e3e12a41e13e09e0103d08a41d0688a99fb497303426bd0945c2a1a95dac61b34d375be3890c3#261 cf0bb4c3571badbc5aaa8189cd5cbe3563ec73c144b1a9bc7b12f113e2770ec0facd1aef2091f60f#261 18573d60aab1344bf124a044b01445086e910c4ca2b93c48f87f6fb93cc1b7db5bc55a5c759afcda#260 2b745efe57cddc1753d3007d081c64bd20e3ab792f1b3c790406ff1f3126cd397078008a97bf31e7#416 fff33f9e851912363c5b1f3ac65598be35eb5f0dbfe19b5b2e70cfe26dd5c65068d3d25b7c977fa8#261 098bf5329727fcd7d973bf842e6b4d50d6e7b92408353245471864a05ba51b5c83d5420e824638f0#260 57626eb6eaa436b22260068d23f4e3df5f389cd101da6f5e3e5ffbb3462e2980334e689ac3a48ccc#260 80b53730d1e821563e5c348fdf4f5fc7616a49f799285084bf4378cd1109c980855bbcfd243b2184#428 d76b24dd15a219666941ab1b4967d8f738adcda04a203cd9806932c5d045acc760558d4ccd5621a0#391 c5ba51d629b3813182cf3e161cc3f23b1e541dc3c4e2064a49f4bd6c4169f59445edd1dec30257ce#430 5f878d2a85807618a4c8571cdef5daa3124672d695c67e4e8aa7f33b11eed759df10965fe482b340#430 09d13de4381925fa2a6dea74eff8185fa301e90599285084bf4378cd1109c980855bbcfd243b2184#428 14bf3f6d1644a37029be58429e8f0138e1ceb743334e268bc2aa9cb039d2b54d59b04858afca2e52#420 d5b94100863057fb4629f9ad4a35753d1691792499285084bf4378cd1109c980855bbcfd243b2184#428 120fab18d84f1eb993ecc7fa858a8dd21274707909d5267a7c46e5e9da7c20a79b00e1584d605613#421 f6db4206258b0ef30e8dd8949627acfd209bf33873bd93ee4561faee009921d7e04da11fa4e901fe#419 394e8470c89927a06575e08c434006b2320f17812f1b3c790406ff1f3126cd397078008a97bf31e7#416 5a433244d0b827176df8b76a05959cd1a7a98ce295a30f61795768374d7cffcab64c8f00c34108f5#423 84b99f3fb7bbc759fcbb589d031920e76edf47462f1b3c790406ff1f3126cd397078008a97bf31e7#416 fd773172e7f26f2d98de3eb572f3317b0ad8d44307f3d18c96bebdef14285630dff2051fda2cabca#420 761d4bac1c238ea7af4dd36b56719ad5e30771c3c162323ac3d2529fad90a897d9b32305e0f62401#421 e2e6ce6a29451e9fac612ab83f7a104b6d6475a348a84d0f36bafb77913d98b5509c56dff27fe0bd#392 7451d17a69ff7585f302933beeae1037d2c708a8a7bf97f5abdabc0bb362d222a194bcbd2db0ff47#392 d0f855bfa91b1d961a17a02ec3e383f9671caba104e3031036f189299a0e2075a08393f329d70b3d#392 e63ddb48e2fd23854a0b4a480b32cbf33e6019819a32929558df73193dbcffe04d3c6115d2d81f84#391 5fa35d211682ee02e34fba0711838ca431ed003ba6ea646eb000ce5c6c9964bacfee378e09624bc7#430 7ac93e300ee17a4ee5e92192264fcfd438805b6f846821017fd423bc38aa5ea0a1ba0d71bbb3709b#391 7112697e8be2d6f231726a91eb565e00ddbeebec94d6ba2a1c72daeeb48523afbac27c0a33c403ec#391 bc3dc2694b5d15613ef610d693d18ebd904b0d563a14944504d444b728414d172aa09c4cfd3b23d8#383 The 18 pre-cursor gap sources are accounted for by merged #481; the two additional pre-cursor Electron sources are recorded in #461. DEF-7, DEF-16 and the watch-list triggers remain unchanged.
Cycle complete
- chore(upstream): land the wizard consolidation and docs restructure together #483 merged at
2bb2c523cff94823ef79228b7827d8f520a4bb10, after fresh CI passed on its final conflict-resolution head. refactor(web): share one setup wizard and finish Antigravity setup from model pickers #479 and docs: keep internal guides on architecture and user guides on workflows #482 are merged. The three requested branches/worktrees are deleted. Compact AGENTS.md is retained, the full documentation rules are in the contribution reference, and the desktop telemetry link is fixed. - chore(deps): upgrade to vite-plus 0.3.0, TypeScript 7 and Effect rc.112 #480 rebased onto that Pylon head and merged at
ae27742ce14c112cc0c310e8aa5d780c5ad19205, after adversarial review, 909 focused tests, 11 affected package typechecks, knip/format/lint/frozen-install verification, and fresh CI. Its task branch/worktree are also deleted. - The automatic production relay deploy succeeded (
applied): 3 planned updates, 16 no-ops, no resource replacements.[RelayNeonProject],[RelayHyperdrive]and[Api]all updated. The successful Neon update executes beta.76’s checked migration path, including in-place conversion of legacyrelay_migrationswith applied history retained; the workflow emits no separate per-table conversion log, and no independent live-schema query was made. No manual deployment. - docs(upstream): close the frozen integration cycle and advance the cursor #498 merged as
f3402be466efd50bc70e00d7245bb3ed4efe927eafter green CI onfcb1318d9bb1c5714dc2c0bb4771f17c57003b3dand advances the ledger cursor to frozen head6c583620ff7ad3235b135af7107c0543467eecfa. All 797 sources in the prior range have recoverable dispositions; the audit and corrected PR source lists preserve the missing provenance links. Pre-cursor gaps and remaining exclusions/triggers are retained. - Next cycle: Upstream integration cycle: catch-up through 4a4c6dd2 (2026-09-11) #497. Fresh upstream head
4a4c6dd2adc350a68ba18bb28b24b5a7e4660dab; 98 sources past the old bound, 571 unique changed paths, zero patch equivalents. All 98 remain for bounded review there.
Merged code and the production relay are updated. No desktop/mobile release or device installation was performed in this continuation.
- chore(upstream): land the wizard consolidation and docs restructure together #483 merged at
Continue the maintainer-approved upstream catch-up using the repository's
.agents/skills/review-t3-upstream/SKILL.mdand its continuation reference. Claude and Codex share this skill;CLAUDE.mdimportsAGENTS.mdand.claude/skillslinks to.agents/skills.The previous cycle's handoff work is complete. The cycle is re-bounded to a fresh upstream head as of 2026-09-09.
Cycle and authorization
6c583620ff7ad3235b135af7107c0543467eecfa(2026-09-09), replacing the previous062987b2fb0ef48cc7776d654931bd9f3bcf1f9f.beae2147a9487ec47ac992319f2216914b4cb62d, unchanged; keep it until every intervening source has an authorized disposition.76db4b541e8f805b87787e07dbcfb97efbc03c93.beae2147a9..6c583620ff: 47 carried over from the previous frozen range, 106 newly arrived after062987b2fb. These are source counts, not counts of missing fixes or exact feature groups.Standing maintainer preference (added 2026-09-09)
When upstream ships a feature Pylon has already implemented independently, do not silently keep Pylon's version. Surface the overlap and discuss it: if upstream's implementation is better, Pylon should be willing to take theirs and remove its own. Preserving Pylon behavior remains the default for adaptations and conflicts; this applies specifically to duplicated features, where the choice is a product call for the maintainer rather than an automatic preservation.
Landed since the previous handoff
Merged: #416 (usage rate refresh and custom model prices), #417 (Codex subscription capacity), #418 (price edit visibility and refresh progress), #419 (automatic clean-branch pull), #420 (prompt recall), #421 (mention text and slash menu), #422 (docs voice), #423 (custom model names and option descriptors), #425 (Antigravity provider, server), #426 (unified loading and refresh feedback), #427 (mobile back swipe, Android selection, terminal paste).
The unfinished usage pricing port from the previous handoff is complete: sources
2b745efe57,394e8470c8and84b99f3fb7landed in #416 with #418 as a follow-up. Itspylon-usage-prices-0907worktree no longer holds unfinished work; leave any cleanup to the maintainer.Also merged, Pylon-original rather than upstream: #428 restored the composer context window indicator, which #402's adoption of upstream #9190 had turned off by default. It retires
contextWindowMeterEnabledforcontextWindowIndicatorEnabled, because desktop persists a full settings document and a stale explicitfalsesurvives a schema default change. Recorded in.agents/durable-facts.jsonlas2026-09-09-client-settings-default-flip-needs-fresh-key.Still open: #424 (desktop native notifications for agent attention).
Remaining exceptions and release status
19d8ab2ae9fc562ee7b216a0d72903fbfafa9572#9507 remains partially adopted. Native Claudeseven_day_overage_includedlacks an explicit model identifier. Preserve Pylon cached OAuth reads and account-wide pushes.33b650a5b#8243 unsigned anonymous macOS preview distribution was intentionally reverted. Earliest revisit 2026-11-01.Preserve other unfinished worktrees, Prime worktrees, and unrelated dev servers. Locate exact paths with
git worktree list; do not clean by pattern.Remaining inventory (153 sources)
Each source needs a final disposition. Group by finished behavior and dependencies, including later fixes and reverts.
Carried over from
beae2147a9..062987b2fb(47)194f838e7636f97739c440c7855aed195dbd7f52— chore: audit lint directives and move plugin allowlists into config (#9300)3b2de9da1c8763602e283e8d14b41b5d57a9d0c7— chore: dedupe lightningcss and tailwind node bindings (#9331)f5fbb1bcb0db378c61addd5b49ef2d95bd888168— chore: upgrade vite-plus to 0.3.0 (#9327)6cf0c6ea55d281f65c80502ec1871b0adf472025— feat: display native app and browser icons in work logs (#9093)21b9dda5afb00a33e228a68d2ccc885bba7285dc— fix(web): unify skeleton loading animations on one pulse (#9448)6f405370c8e552da9dcfdd6922e85789fd918340— fix(dev): keep shared dev reloads and hot updates working (#9543)c5ba51d629b3813182cf3e161cc3f23b1e541dc3— feat(providers): add context compaction command (#9293)5989de44a24888dab02854477ea1d0f50ac3a4a6— fix(mobile): keep store screenshots free of system banners and show dictation (#9548)fee2e0ff8168b82ab19f496fcc874c1f3871f522— test(web): fix flaky startup and Tailwind tests (#9558)07891e9569c88457516b44c08c820471762969e8— fix(web): bound disconnected send toasts (#9592)00f8b7c28056188e3c5630160806a0afe51c9010— fix: show idle subagent batches without completion marks (#9616)c3b8825bf476cbce5e061c0f99570cf1f6723b89— fix: preserve tool icons on failed calls (#9606)5f878d2a85807618a4c8571cdef5daa3124672d6— fix(web,mobile): fold context compaction under settled turn folds (#9623)1587f248dd81ed45e214d476451ebf16dbfadb1a— feat(server): measure provider turn token usage (#9132)9eb4d71681dc7d002082db2f8b4bacf7614412f4— fix(mobile): remove provider setup (#9721)2e688a53cf8fc7a9caa9fd5070148bfcd3d5a741— docs: keep internal guides focused on architecture (#9755)9e1fb459a985d13c1d4e57080f49d70dabf3b681— docs: focus user guides on features and workflows (#9756)4f1092cec2ebaa6ed0e49821238dfe6f1add362d— fix(web): keep worktree origin preference visible (#9846)caf4981e32f4fd3c9adb8339b5bec2d95d09b7aa— fix(web): reload saved colors when reopening the theme editor (#9847)bc8584bf8e967ecc1cd215d42bd7a47faf51a862— fix(web): give the browser keybinding notice breathing room (#9964)09aac71563c66a4f65f6fbe701aa9596cb677767— feat(web): first-run welcome wizard with agent setup and project import (#5362)d92dca74eb7b7c6068619752f5b9a55c0e36f352— fix(web): resume imported custom-provider threads (#10184)bfba7781681eaa03eb465ce3d9a4ec07bf952b78— fix(mobile): keep the new-task draft when switching environment (#10247)2c3353578098a9e55e203a72217abe993f97987e— fix(web): keep timestamp tooltip dates in English (#10256)9f40b2f563c662b43887b11ff99c466fe871c1af— feat(settings): add shared project defaults and scoped overrides (#9754)420fd76f60433fe05b8d2c76f4fbde430dc49968— feat(connections): balance new threads across connected machines (#9895)272d6d747ef214f50dbd9d0051120de12ffa3591— feat(markdown): show the GitHub mark for github.com links (#10324)aea9ecbc482a3d2c14d1828cb5eeaaa9294d1320— fix(web): make task row states readable (#10128)82689782eee0f0cf27d5601e1d533381587b64f8— fix(web): explain hosted connection prerequisites (#10129)076d753ae6cb97136b6b4199fb8fc0b379282dba— perf(web): skip checkpoint map rebuilds while streaming (#10118)5fa35d211682ee02e34fba0711838ca431ed003b— refactor(server): let adapters declare context compaction (#10112)36c48a6b7c03c9a9adbc3e55d4d9ae77eae6f816— fix(mobile): keep pending tasks queued when a send fails in flight (#10245)c0bf35466c8aa1862572dfa84b51b6fe30fc82d6— feat(mobile): show new-task drafts alongside pending tasks in the thread list (#10260)8e129a0dfb35ac2c03a7320245b5bfb976f5d3bf— feat(mobile): allow several new-task drafts per project (#10327)98469159dd9e162a9c2f5cc4bbb2fbe89b3c4f67— fix(mobile): slide settled threads out before collapsing (#10345)f729e8fd837e4d6de86781351c3aee5a4ea19ab3— fix(web): make onboarding a shared multi-computer wizard (#10465)95f9b14f873c7b119f0ffb6dbd194c7063293aa2— fix(server): import transcripts with oversized tool records (#10430)efeac144289d0f64bcfe3b9274c616499893be91— fix(web): show load balancing note for a single machine (#10433)ec36176e4f25fac7e3c380f6a4b646116e4ccf3d— fix(web): onboarding wizard now supports light mode (#10432)d6aa179ad2afe0424e1410cbafbb119bbd5f7809— feat(mobile): show when an existing thread has a message waiting in the outbox (#10405)66a24d6c1a008430eebd855cd5640607d5aef38c— feat(mobile): queue a message while its attachment is still uploading (#10404)2d6a3799978659e349faf8ff4297098ffb782ebb— fix(web): only show auto balance errors after failed checks (#10407)c2c4185e175daea86f8fd6336fd8839a81cc616e— fix(web): onboarding installs agents without needing Node or npm (#10402)95d99373b74edfb3bfd092c61a15999a95727423— fix(clients): show feedback results in composer banners (#10398)e1230d6031bc55a21668818d0b585d8887b88579— fix(mobile): keep pending messages in the chat timeline (#10449)5b68b2c8e1e971e4ee6956157a1698646ef52a55— feat(mobile): open the thread screen as soon as a new task is submitted (#10435)7dda0b1c0a95603f1954b81a9fee699be92668f0— feat(mobile): start a new thread on an existing branch (#10359)New arrivals
062987b2fb..6c583620ff(106)b919d6389929698ddf223d35d20139f01c8bc899— fix(web): keep composer toolbar controls anchored during transitions (#10478)f57d3832c0219b4f6fbe2e86f824fedd232492c0— fix(web): resize the floating preview from any edge (#10467)71297974c666b0db50a3e3b1a861742f2cdd4d7d— fix(mobile): prevent chat from disappearing when scrolling (#10479)b248f5ad566a8cd3ea2d7d678c1e8aa49c748879— fix(mobile): smooth composer status pill resizing (#10484)c0d4e95c0d921b5960ad04c7f8abec459ee3c59e— fix(mobile): release initial scroll target after dragging (#10483)e32dd42f8ba0daa2d0c6d6d2e474b7af6b3eb7b4— fix(mobile): animate thread lifecycle transitions consistently (#10487)b7175371d9f32f3b759a922cdbf727a3214c99a2— fix(mobile): restore assistant message bottom padding (#10491)dc39615aec702ea6d402168f80b4d1613f4f2e0f— fix(mobile): preserve chat rows when toggling commands (#10492)8b2838e0e8a73d3fa6476940445c372e47b99db4— feat(web): group onboarding project import by repository (#10493)fe07ffe7c0bf1858ba4d1cd1ce0a67b10802a747— fix(web): remove inserted citations on cancel (#10518)357b8d5217cd62826767b6ce6d7c47915f2777d2— fix(mobile): match Working status color to desktop8d7f78121660eb8599d4c5ff40cb4394159abfab— fix(mobile): wait for native thread scroll before reveal (#10486)1d1bf50405ccca8fdb8b57879d9def379e27a550— chore(mobile): bump app version to 1.1.062fbbe08aa854fcbd8044cd971a45a54edafcb98— fix(web): tolerate servers that predate git identity in project import (#10547)72d94087b460e8d3d76572ed59fe935b80eb41a1— fix(web): restore settled PR colors on hover (#10023)9cc9839545c05c998fc97f2323f691043a1a3686— fix(web): keep popup triggers steady when pressed (#10468)0d34579d674920cc47fc5c908494f51ed3895204— fix(web): keep project favicon shape consistent across sizes (#10502)3bf74eb6dce3e1372cfafc2ca84825f4b13bae6a— fix(claude): report usage limits on retried turns (#10549)5b8a69c7b90b751507d0ab762dd77aaa2048408b— refactor(desktop): classify backend exports (#10265)5a853a4b4513467fd1be3d62fe7dc974cea07c3c— refactor(desktop): classify electron exports (#10266)89dd9ab32b4aaba6f34689353cb14fa6549e34fc— refactor(desktop): classify app exports (#10267)e279e402c12b002cedcd8c4ea19476fc33783dac— refactor(desktop): classify preview exports (#10268)b491e41da366beb03c54b585745318553f1239c5— ci(knip): enforce desktop exports (#10269)577b6cc221d411cfed31cba0e6d3861de2640a55— fix(web): remove excess sidebar thread spacing (#10569)c8ec7df12415140c6413372f53e3be4fe2e959f8— fix(web): make settings project scopes searchable and scrollable (#10570)5ec6f77ec0acc6a1fc9e9be5e1126a5199e9efe7— fix(web): usetabular-numswith the ui font for sidebar timer (#10592)12f5604442564d3e8c1cb23135b27b37ab4af1cf— fix(web): correct pending question attachment message (#10599)c0cad74bfaddf153c3adaaf4f78af2be9260c4c1— fix(mobile): restore brand artwork in the Android adaptive icon (#10598)02443335b155e46248f96d80e037603abc742a61— fix(mobile): configure iOS Keychain access group (#3665)dadba6d95d2c4515956a6c7fef184378987e13b7— fix(web): remember Composer Fast mode across new chats (#2981)95834d68aa475a8afe4b2b14eaedffb35b590dab— fix(server): disable executable capabilities in Claude metadata generation (#4169)09e8de9c655ae85410bf6b00446f272a01da81c7— Add stop thread keybinding command (#4308)2c8e95a4b641898322c7312cb67535612606745e— fix(mobile): show the provider account badge on thread rows (#9899)d64335bb5913c21869633a4236d9409911e3da52— fix(codex): name the usage limit and its reset instead of relaying "out of credits" (#10473)ea2983afbbcd5ad6ee2e7db80c2a9270ff4964a9— fix(web): copy selected pull request link from PR page (#10615)d67157a09c28883d7856d03d2b1d3aecdbf1b890— fix(web): keep ref picker steady when opening (#9472)569a8cd2c3303f55fd869687eb31359b5658cc78— fix(web): play pull request videos inline (#10617)8de9169f078fdafedf47d8c299cb8e2c79fda6fb— chore(release): prepare v0.0.40e0e0bcb115fa29a2afc670b817fcb4463b620923— fix(desktop): preserve browser editing shortcuts (#10621)d081ab7abc16a21570d3d96948acb6c1f8d847a4— fix(web): open pull request markdown links in the panel (#10623)892de47f0625183edd111dd36df45b156185bbf2— fix(mobile): fit the Android splash icon to its circular mask (#10620)299404a754f52c02c69634528d8856b3c93b378c— feat(desktop): add cross-platform window capture (#8103)8588d7f63bf57e6285daafe035708cc22a99619c— fix(web): open proactive panels when entering threads (#10610)9fe4d6568b5e4852f6085d3a22dbc5aa3a632408— fix(native): wait for the KDE feedback test listener (#10645)a01b227d6f37d1cfed7a2f47aaace2f72ea76ce3— fix(desktop): resolve local media linked from remote threads (#10619)b7c002f918b94b8ce13c44bddcd29b8443e4af41— fix(web): add bottom padding to project actions header (#10634)15193df9fb915837f7215909a7d741789db0a273— fix(web): update machines together in auto balance (#10596)9e37f0c291974d084a59d7b9f165a1cb056e6043— fix(preview): transfer recordings to the agent environment (#10572)f0bd43eaf9d8b5e3df2b913532bbee74bba58314— Add 'macroscope-review' label to conventions5a18fb95e49ea8352963329f32d5e85cf3125e24— Add 'macroscope-review' label to UI consistency6df0add6e65b7c0040b5774635f794e4ff802ddd— fix(web): navigate markdown images as galleries (#10625)a37c66406830525888465b2eaebf34df2265de86— chore: upgrade to TypeScript 7.0.2 (#10663)6ba15c027a6d411c7f75cc0ca59b601a295c3633— fix: hide email-bearing account labels in usage limits (#10668)50a76cee7c56ac22568e549dc855248967bfb9ab— fix(web): keep scroll-to-end button close to composer (#10543)bd56e920b7309e859d0b1a099d53e816628ea75e— chore(deps): upgrade Effect to rc.112 and Alchemy to beta.76 (#10652)458f5029882d6da3f2279893d6c9fffaf7748b5c— chore(refs): sync Effect reference to rc.112 (#10653)9d345fa957cf22806171c8037432eec8d9ed496d— chore(refs): sync Alchemy reference to beta.76 (#10654)bc4b00666272188027d086361fa5ae01cda53bd2— fix: generate thread titles with the selected model across connections (#10526)b5f7fa0ede2a0d791226e6474c9cc4374dd89cc9— fix(desktop): enable context menus in the browser (#10670)bc88fdf6ae53de3c9362665336d6d9daec7a49e9— fix(desktop): stop generating declarations during bundling (#10679)349ce3014233352e073a5fc1b3f12bd786160913— fix(desktop): restore layout control hit targets (#10673)7220dfe2c949476eaa7d21eccbcd3a0ce0eddb49— feat(chat): attach files to question answers (#9871)991526383f95eefdd66ffd2853136c6dd34ae008— feat(desktop): refresh macOS installer with aurora artwork (#10632)430fbd1ffc98378f6a6a41027ddc6004a79b2e7b— fix(server): give completed turns a full session idle window (#10689)7d9aaf6a7eb22d5e85b0e3b21686cc437fe68576— feat(web): add pull request merge defaults (#8088)1f14d6d10afbcc99ec255b23544ee25c08dea321— fix(usage): keep account columns aligned across limit rows (#10690)11601da846e7d82db63a6f4773e3a02421619b60— fix(web): chat text no longer shows through a 1px gap under composer banners (#10635)6f4cd07b900299629b9f2f9a9336f5c090556a51— refactor(server): classify runtime exports (#10274)0af04f1801ea75119c74fd406ced7da6c9c71721— refactor(server): classify orchestration exports (#10275)161715b1e4fa6d20fe3eb1cb9c91904bf83ca4c1— refactor(server): classify service exports (#10276)77d9ffc822ac4c1f3600dc6c97e92fc94e9e12a3— refactor(server): classify telemetry exports (#10277)060c576f8922703725f0dbdd01443ed88ecc9baa— refactor(server): classify provider exports (#10278)3b6ce931cc225b4b743daaa063e0bc9875555582— refactor(server): classify source control exports (#10279)7cdeb696e699309b827c1d1b613397f9bcd73b3d— refactor(server): classify source control registry API (#10280)1f0a14cf7f1bb1b6167fca475e9b7183bc8ec8af— refactor(server): classify preview toolkit exports (#10281)b28471567cebe20347205059bbbdb3efe1213528— chore(mobile): bump app version to 1.1.17d620506a1fecf07aa2d623e72059d551709ae3a— ci(knip): enforce server exports (#10282)134b7194b125dd4881ff6040f66997b23489b72e— feat(web): add previous/next turn navigation in minimap (#8531)d6dbe8dd67facf4a43030993bebb58cc7e7ac141— fix(web): stop the settings sidebar shifting when switching pages (#10705)83b865fec704b177804aa6b9b695aefea4ccd04a— fix(web): copy terminal selection with Ctrl+Insert (#8541)82451eeb7277b0b7fb5a7cb53156c83f948f32c1— fix(web): show the same project icon in the command palette as everywhere else (#10712)d7a59c63c6a227ac295041660228a4aaa427ead0— fix(web): stop sidebar rows flashing and shifting on click (#10713)eb115063634c416c6362cc407f8572cb0c136ddf— refactor(web): pass the project record to ProjectFavicon so icons cannot drift (#10714)bde39d4d7977ce85d6ea396a983d6b6a25bf7e07— feat(web): accept file drops into sidebar threads (#7892)b5d89038ae72142038dfa8cf69d49b7a607fe98e— feat(web): accept file drops into sidebar threads (#7892)061543e9e5b54ec0048725c37d52fef2962df173— fix(mcp): keep preview snapshots usable by the agent and let it save them (#10501)47eed9face4186635488fba5f2494eddd13f6491— fix(server): stop Windows terminal processes when closing (#10771)579266caa89238611ddb974ffebe9968c6a6e5d5— feat(mobile): use Android wallpaper colors (#10691)4664c572a78231611491f63f677f0e007ebaab03— feat(mobile): add optional Material You layout (#10692)12391bd0d38eef6655b7a9f8945d0cb5febadc2b— feat(web): show project favicon in new-thread project picker (#10790)5d14c0e9686d8bedf47dd93dd3811fd639255c7e— fix(desktop): use official logo in macOS installer (#10819)772ea1473a4a8f8fb0e0a5c9ba6d7a2ef14eac6e— fix(web): honor terminal link browser overrides (#10060)0fe4c99ee6df4cbb7a9064d2d86ece65ecef5eb3— fix(desktop): neutral artwork for stable macOS installer (#10820)5e6cc2b89534a8e01772bf647b79a1f2da2f9664— fix(web): restore text-only draft project title (#10821)3faeee49ac67dfd9534369f1e1c627c0356b75ac— refactor(web): consolidate setup wizards into shared components (#10832)de545c41737aca08359244b7778ab52e55934f17— fix(web): stop the bar under the composer popping in after threads load (#10727)7fbc545ae8c7866ac2b39648120cb2a17250d8b4— fix(web): keep the composer footer still while thread data loads (#10768)20e2e899ecded6b30e12fa23c8f18847c2bf12e1— fix(desktop): defer keyring loading until macOS cookie import (#10667)fdf34c4018352df41aa22fbaa774c25c6c1ff7da— fix(relay): share notification policy and prioritize waiting agents (#10848)3dfc134e6c1e2359400c56ea415e74fecf9d5c12— fix(relay): recheck queued iOS alerts and retain fast completions (#10849)9d6c43f32ed2b4d0f21f1d15b2c671b0c07be991— fix(mobile): respect notification permission when tokens rotate (#10850)3e6f856f2359421958a3aa046f2c393e00f3dc6a— fix(mobile): tolerate native Headers without getSetCookie (#10851)1862686f9e42bf1d77e7f2ad03e24d7b0c7908f1— fix(relay): use current APNs registration routing for queued jobs (#10859)08463e2c401ce87858aaaebcb70ed86fb002fb5f— fix(server): release consumed event replay pages (#10777)2a303535305d7d224a750fdee78c66e2a52ab3ab— feat(mobile): arrange threads with drag handles (#10496)6c583620ff7ad3235b135af7107c0543467eecfa— feat(mobile): add Android agent notifications and ongoing activity (#10416)