Skip to content

Upstream integration cycle: catch-up through 6c583620 (2026-09-09) #414

Description

@rynfar

Continue the maintainer-approved upstream catch-up using the repository's .agents/skills/review-t3-upstream/SKILL.md and its continuation reference. Claude and Codex share this skill; CLAUDE.md imports AGENTS.md and .claude/skills links 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

  • Frozen upstream head: 6c583620ff7ad3235b135af7107c0543467eecfa (2026-09-09), replacing the previous 062987b2fb0ef48cc7776d654931bd9f3bcf1f9f.
  • Review cursor: beae2147a9487ec47ac992319f2216914b4cb62d, unchanged; keep it until every intervening source has an authorized disposition.
  • Pylon checked head: 76db4b541e8f805b87787e07dbcfb97efbc03c93.
  • 153 source candidates remain unclassified in beae2147a9..6c583620ff: 47 carried over from the previous frozen range, 106 newly arrived after 062987b2fb. These are source counts, not counts of missing fixes or exact feature groups.
  • Compatible catch-up, Pylon-preserving adaptations and green PR merges have standing maintainer approval. No per-commit quota or repeated approval prompts.
  • Prior authorization includes integrated browser/iOS verification with isolated fixtures. Do not use live application data or launch real provider turns as test fixtures.

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, 394e8470c8 and 84b99f3fb7 landed in #416 with #418 as a follow-up. Its pylon-usage-prices-0907 worktree 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 contextWindowMeterEnabled for contextWindowIndicatorEnabled, because desktop persists a full settings document and a stale explicit false survives a schema default change. Recorded in .agents/durable-facts.jsonl as 2026-09-09-client-settings-default-flip-needs-fresh-key.

Still open: #424 (desktop native notifications for agent attention).

Remaining exceptions and release status

  • DEF-16: 19d8ab2ae9fc562ee7b216a0d72903fbfafa9572 #9507 remains partially adopted. Native Claude seven_day_overage_included lacks an explicit model identifier. Preserve Pylon cached OAuth reads and account-wide pushes.
  • DEF-7: 33b650a5b #8243 unsigned anonymous macOS preview distribution was intentionally reverted. Earliest revisit 2026-11-01.
  • WATCH-1 #8097, WATCH-2 #6573 and WATCH-3 #7986 keep their recorded triggers. Their external state was not re-polled during this status refresh; check once during the next cycle.
  • Release status is unverified. The last observed Nightly predates the recently merged groups. Do not report the new code as released or installed.

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 desktop
  • 8d7f78121660eb8599d4c5ff40cb4394159abfab — fix(mobile): wait for native thread scroll before reveal (#10486)
  • 1d1bf50405ccca8fdb8b57879d9def379e27a550 — chore(mobile): bump app version to 1.1.0
  • 62fbbe08aa854fcbd8044cd971a45a54edafcb98 — 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): use tabular-nums with 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.40
  • e0e0bcb115fa29a2afc670b817fcb4463b620923 — 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 conventions
  • 5a18fb95e49ea8352963329f32d5e85cf3125e24 — Add 'macroscope-review' label to UI consistency
  • 6df0add6e65b7c0040b5774635f794e4ff802ddd — 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.1
  • 7d620506a1fecf07aa2d623e72059d551709ae3a — 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)

Activity

  1. rynfar commented on Sep 8, 2026

    @rynfar
    CollaboratorAuthor

    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-matched agent-handoffs/t3-upstream/20260908T174425Z/manifest.json, so
    nothing was replayed or overwritten.

    State

    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/types2 logs
      (the obsolete RpcSession member 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-op AGENTS.md warns 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, so stateDir is <base>/userdata, not
    <base>/dev. Settings written to .t3/dev/settings.json are ignored, and Usage scans the real
    ~/.claude and ~/.codex. Writing to .t3/userdata/settings.json and clearing
    usage-scan-cache.json fixes 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.00 to $1.11 matching 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.97 on 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.tsx is byte-identical to upstream 84b99f3, 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:118 and
      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 062987b2 and cursor beae2147 are 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.

  2. rynfar commented on Sep 8, 2026

    @rynfar
    CollaboratorAuthor

    PR #416 merged — 2026-09-08

    Merged at e0037b844027b9d1b9fefe7730f7c7f975ad1b27; pylon now points there. Remote branch
    upstream/2026-09-07-usage-prices deleted. 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 pricing
    • 394e8470c89927a06575e08c434006b2320f1781 (#9774) custom prices and cross-client recalculation
    • 84b99f3fb7bbc759fcbb589d031920e76edf4746 (#9861) staged price table and selected-environment writes

    Cursor unchanged. reviewed-through stays at beae2147a9487ec47ac992319f2216914b4cb62d: the
    75 remaining candidates in the frozen 062987b2 range 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 in pylon now. 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-0907 is left in
    place on the now-deleted branch, along with its .t3 fixture, in case the environment is still
    wanted; it can be removed with git worktree remove when it is not.

  3. rynfar commented on Sep 8, 2026

    @rynfar
    CollaboratorAuthor

    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. UsagePriceOverrides derived 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 into usagePriceRows in
      apps/web/src/components/usage/usagePriceTable.ts, which made it unit-testable.
    • DEF-18 — retired. useUsage now exposes a refreshing flag 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/web and @t3tools/mobile typecheck clean — widening UsageView
    broke a UsagePage.test.tsx mock 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-0905 and pylon-upstream-0903 (both
    dirty) and the unmerged pylon-catchup-0905, pylon-keyboard-reference-0907,
    pylon-mobile-foundation-0907 and pylon-settings-foundation-0907.
    pylon-price-fixes-0908 stays until #418 lands.

    Cursor and frozen head are unchanged: beae2147 through 062987b2, 75 candidates still
    without a disposition.

  4. rynfar commented on Sep 8, 2026

    @rynfar
    CollaboratorAuthor

    PR #418 merged — 2026-09-08

    Merged at f24356d943874ef291d5a21abc4612451cf2b683; pylon now points there and the branch is deleted. All 14 checks passed on 984d7fc4d3, 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-0908 and 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 head 062987b2, 75 candidates still without a disposition. Nothing is released or installed.

  5. rynfar commented on Sep 8, 2026

    @rynfar
    CollaboratorAuthor

    Catch-up resumed — 2026-09-08 (post-#418)

    Working the frozen 062987b2 range again. Two groups prepared and open:

    • PR feat(projects): automatically pull clean default branches #419 — automatic pull of clean default branches. Sources ba3cb07738 (#9277) and f6db4206 (#9763). Migration renumbered 045 → 058 (Pylon already uses 045 for AuthSessionClientConnection; its lineage runs one ahead since id 36 was retired). The pull was moved inside Pylon's withRemoteWriteLock, 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 exported getAutoBootstrapThreadModelSelection that 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) and 14bf3f6d16 (#9644), one unit. Dropped upstream's relocated ## Prompt stash heading, 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, and 9e1fb459 edits providers-antigravity.md for 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 plus ProviderService. 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.md says "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 beae2147 and frozen head 062987b2 unchanged. Upstream now has 94 arrivals past the frozen head (was 14 when last observed); they belong to the next cycle.

  6. rynfar commented on Sep 8, 2026

    @rynfar
    CollaboratorAuthor

    Four PRs merged, and an inventory defect found — 2026-09-08

    Merged into pylon:

    All four went in with 14 checks passing and 3 conditionally skipped. pylon is now at 2b62f2272f.

    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 new Spinner imports ~/lib/visibleAnimation and uses a visible-animate-spin utility. Neither exists in Pylon. Both come from:

    • ce4712d5b0 — fix: restore UX after performance improvements (#9799), 31 files, 1,511 insertions

    ce4712d5b0 is 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 ce4712d5b0 first 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 refreshUsage in client-runtime that awaits the rescan itself, aborts when an environment disconnects, and invalidates the query on failure — strictly better than the per-client refreshing flag #418 added. Take upstream's version and drop ours; do not layer them. Likewise upstream's Spinner (motion-safe:visible-animate-spin plus a visibility observer) is a better fit for the "nothing repaints at rest" rule than the ad-hoc animate-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 beae2147 and frozen head 062987b2 unchanged. Upstream has 94 arrivals past the frozen head, belonging to the next cycle.

  7. rynfar commented on Sep 9, 2026

    @rynfar
    CollaboratorAuthor

    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

    06336460c9 is 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_KIND and its
    DEFAULT_MODEL_BY_PROVIDER entry 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-server

    Based on upstream/2026-09-08-custom-model-names (PR #423, the prerequisite — Antigravity's
    settings reference CustomModelSetting). 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.ts and its index export; ANTIGRAVITY_DEFAULT_MODEL
    and the provider display name; the AntigravitySettings schema plus select control and
    ProviderSettingsFormOption; supportsTextGeneration and setup on ServerProvider; the
    approval-option warning; auth and refreshModels on ProviderInstance.

    Pylon divergences already reconciled, each of which a mechanical port would have got wrong:

    • ProviderApprovalOption lives in baseSchemas.ts, not orchestration.ts (Pylon #8058).
    • supportsConversationRollback is 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 / allowCustomAnswer already existed in Pylon from an earlier adoption.

    The 26 that remain

    1. yauzl is a new runtime dependency (^3.4.0, plus @types/yauzl), used by
      AntigravityInstallation to 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.
    2. ACP event-model drift — Pylon's ACP event union lacks ConfigOptionsUpdated and
      AvailableCommandsUpdated, and the configOptions / availableCommands / approvalOptions
      fields. Needs the Antigravity commit's AcpRuntimeModel / AcpCoreRuntimeEvents hunks — ~8
      errors across AntigravityDriver.ts and AntigravityAdapter.ts.
    3. manifestDefaultModel missing from ModelManifest — 1 error, one hunk.
    4. 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 — Check runs knip:check and vp 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 to enabled: false, so the
    server PR landing without the client is a safe intermediate state.

  8. rynfar commented on Sep 9, 2026

    @rynfar
    CollaboratorAuthor

    PR #423 merged at fde6799297499329600b7a8b7c7882f75087f9a8 — 14 checks pass, 4 conditionally skipped. pylon is at that commit and the branch is deleted.

    5a433244d0 (#9807) is adopted. The Antigravity prerequisite is satisfied.

    upstream/2026-09-08-antigravity-server has 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 — the yauzl dependency decision, ACP event-model drift, manifestDefaultModel, then driver registration and repo-wide verification.

  9. rynfar commented on Sep 9, 2026

    @rynfar
    CollaboratorAuthor

    Antigravity adopted — PR #425 merged

    Merged at 275de5ef1dbf876de7e7280226b406c814be1873. 14 checks pass, 4 conditionally skipped.

    17 sources adopted in one PR: 06336460c9 (#9348) plus 1e051873, 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 — 06336460c9 alone conflicts in 64 of its 169 files because it refactors shared provider/ACP infrastructure. Correct file selection is git 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.0 added 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_KIND and its DEFAULT_MODEL_BY_PROVIDER entry read as removals against upstream. Verified intact after every contracts edit.
    • The manifest validator only accepted codex and claudeAgent, so adding Antigravity made the entire manifest fail validation and silently fall back to defaults.
    • conversationRollback is a mode union here, not a boolean — registered "unsupported".
    • supportsTextGeneration kept alongside supportsBackgroundTextGeneration; different mechanisms.
    • ProviderApprovalOption lives in baseSchemas.ts (#8058).
    • agent_thought_chunk already mapped to ContentDelta with payload-derived reasoning_text.

    Three shared ACP runtime gaps fixed, which Grok and OpenCode also benefit from: startup metadata published during session setup was dropped; session/resume was unimplemented so agents' resume handlers never fired; and config option changes only updated a ref instead of reaching adapters.

    Deferred to the client PR: ProviderAuthServiceLive wiring and ANTIGRAVITY_AUTH_METHODS export, plus the adapter's compaction declaration which needs #10112. 45 client/docs integration points remain; Antigravity defaults to enabled: false so the server half is safe alone.

    Count

    51 candidates remain in the frozen 062987b2 range. Upstream has moved to 2a30353530 with 105 arrivals past the frozen head, belonging to the next cycle. The 81-item list is still not a complete enumeration — ce4712d5b0 was missing from it and is being adopted in #426.

  10. 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
  11. rynfar commented on Sep 9, 2026

    @rynfar
    CollaboratorAuthor

    Cycle re-bounded to 6c583620ff — note for whoever holds this cycle

    I 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:

    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) and 5fa35d211682 (#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.

  12. rynfar commented on Sep 10, 2026

    @rynfar
    CollaboratorAuthor

    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-e7f6ef3a is clean on upstream/2026-09-10-skeleton-pulse, everything below is pushed, and nothing needs recovery from local scratch.

    Frozen state

    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 of 21b9dda5afb00a33e228a68d2ccc885bba7285dc (#9448), MERGEABLE against the head above, CI in flight at handoff.

    Retires ghost-pulse and the swept gradient band; every loading state uses one stepped opacity pulse. Upstream's new @keyframes skeleton was byte-identical to Pylon's existing ghost-pulse, so the animation count drops rather than changes. Two Pylon resolutions: the detail ghost keeps its !seed gate, 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 restored live-tool-shine (which #426 had silently paused by adding #9799's animation-play-state gate with no observer) and ported #9799's ActivityShimmerOverlay.

    #444 reached the same destination by a different route and got there first. On 390ba78a17: the overlay exists with ref={observeVisibleAnimation}, visibleAnimation.ts already gained document.hasFocus() plus window focus/blur listeners, and live-tool-shine and data-animation-active are 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 one docs/user/tool-activity.md line are unique. Awaiting the maintainer's call on closing.

    Findings worth a decision, not yet acted on

    1. Pylon dropped live-tool-shine; upstream still uses it. Upstream's LiveActivityRow renders the overlay only for active && shimmer and passes shimmer solely from ThinkingTimelineRow, keeping the gradient shine for tool labels via active={animated && !shimmer}. Pylon's feat(work-log): native app and browser icons, honest failure and idle states #444 gives every active row the marquee overlay and deleted the shine. Under the new styling preference this is a divergence to reconcile — check apps/web/src/components/chat/MessagesTimeline.tsx around LiveActivityRow against t3code-upstream/main.
    2. docs/user/tool-activity.md is now stale on pylon. Its last paragraph still says "only the active tool label shines", which no longer describes the overlay-for-every-active-row behavior.
    3. Guard test available to reuse. visibleAnimation.test.ts on fix(web): restore the live activity shimmer and shine #445's branch parses every @utility in index.css that reads --visible-animation-state and 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 protect live-activity-focus today. 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.tsx plus all of components/pullRequest/), tsgo --noEmit in apps/web, scoped lint and format. Grepped for leftover ghost-pulse / --skeleton-highlight consumers — 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 icons group (#9093 + #9606) that was queued next is already landed by #444 — do not start it.

  13. rynfar commented on Sep 10, 2026

    @rynfar
    CollaboratorAuthor

    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.tsx had exactly one observeVisibleAnimation usage, so removing the row's ref removed the import too. It is not true against current pylon: the file now registers the observer in WorkingTimelineRow as 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. cdde7f3150 deleted @utility visible-animate-spin along with live-tool-shine, but spinner.tsx and refresh-icon.tsx still apply motion-safe:visible-animate-spin, and index.css is 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 from 390ba78a17. CI in flight at time of writing.

    Restores upstream's exact arrangement: the overlay is for label-only rows (active && shimmer, passed only by ThinkingTimelineRow), live-tool-shine returns 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 from t3code-upstream/main by one retained prop comment. visible-animate-spin restored.

    Preserved deliberately, and both are behavior rather than theming: Pylon's workingStepLabel, and the document.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.

  14. rynfar commented on Sep 11, 2026

    @rynfar
    CollaboratorAuthor

    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, 00f8b7c280 and c3b8825bf4 ported manually in #444). 6f405370c8 (#9543) landed and was then reverted in ffd5df2d3e because its bundledDev tests fail, so it counts as remaining. It is paired with fee2e0ff81 (#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). b5d89038ae is an empty duplicate of bde39d4d79. Upstream version bumps 8de9169f07, 1d1bf50405 and b28471567c are 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 flight
    • 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)
    • 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 desktop
    • 8d7f78121660eb8599d4c5ff40cb4394159abfab — 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 flight
    • 9eb4d71681dc7d002082db2f8b4bacf7614412f4 — fix(mobile): remove provider setup (#9721)
    • 1d1bf50405ccca8fdb8b57879d9def379e27a550 — chore(mobile): bump app version to 1.1.0
    • c0cad74bfaddf153c3adaaf4f78af2be9260c4c1 — 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.1
    • 579266caa89238611ddb974ffebe9968c6a6e5d5 — 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 flight
    • 09aac71563c66a4f65f6fbe701aa9596cb677767 — 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 flight
    • 9f40b2f563c662b43887b11ff99c466fe871c1af — 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 flight
    • 1587f248dd81ed45e214d476451ebf16dbfadb1a — 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.40
    • 299404a754f52c02c69634528d8856b3c93b378c — 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 merged
    • 3faeee49ac67dfd9534369f1e1c627c0356b75ac — 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 create
    • 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)
    • 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 edit
    • 2e688a53cf8fc7a9caa9fd5070148bfcd3d5a741 — 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 in ClaudeProvider.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.
  15. rynfar commented on Sep 11, 2026

    @rynfar
    CollaboratorAuthor

    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:

    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

    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 getSetCookie fix.
    • Record gap before the cursor. An audit found 20 upstream sources before reviewed-through beae2147a9 that 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.
  16. rynfar commented on Sep 12, 2026

    @rynfar
    CollaboratorAuthor

    Handoff: remaining work in this cycle (2026-09-11)

    Frozen upstream head 6c583620ff7ad3235b135af7107c0543467eecfa; ledger cursor still beae2147a9487ec47ac992319f2216914b4cb62d. pylon is at 4fa8a964685005c155c8221aeed43c080daeb2af. 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

    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-toolchain at 1d79d809c2, worktree /Users/rynfar/repos/pylon-toolchain-0911, clean. Scope: vite-plus 0.3.0, TypeScript 7.0.2, Effect 4.0.0-rc.112, Alchemy beta.76, knip export gates (18 sources).
    • Rebase onto the latest pylon after chore(upstream): land the wizard consolidation and docs restructure together #483 lands. git merge-tree currently predicts conflicts in .agents/upstream-review.md, apps/server/src/auth/EnvironmentAuth.ts and apps/server/src/environment/ServerEnvironment.ts — the last two are chore(upstream): isolate remote session cookies and settle pre-cursor gap sources #481's new export const make. Tag both @public for knip, or make them private if nothing consumes them.
    • Redo the mechanical steps rather than hand-resolving; they are in the PR body:
      • vp fmt after 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 fmt inside 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 with vp i --frozen-lockfile.
    • Keep #10851's getSetCookie hunk in patches/effect@4.0.0-rc.112.patch or apps/mobile/src/lib/http-response.test.ts fails.
    • 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_migrations table conversion. .github/workflows/deploy-relay.yml runs on every push to pylon. Watch the "Deploy Pylon Connect relay" run and report the result, including the [RelayNeonProject] update and the relay_migrations conversion. Never deploy by hand.

    3. Close the cycle

    1. 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 6c583620ff has 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.
    2. Advance reviewed-through to the frozen head in a small ledger PR (it must not move while anything is unclassified).
    3. 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-upstream instead of trusting either number.

    4. Small follow-up still open

    apps/desktop/src/backend/DesktopBackendConfiguration.ts:570 points at docs/architecture/resource-telemetry.md; the file is docs/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.md and REVIEW-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.
  17. rynfar commented on Sep 12, 2026

    @rynfar
    CollaboratorAuthor

    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 2bb2c523cff94823ef79228b7827d8f520a4bb10 after fresh CI passed on 2863392ce000a5f81f1bdfa53efa43b43d057e99. #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
    04efa7907e9ec207e2d6af459ce3b2ffd55f6107 02076a64903b8b3c7db2d921fca529f5fb0c1a76 #260
    b21d87243ea637fbb6fb50667e9a8547e1b6c4e8 847ba8995c587e3d37a1a147c1bcf2640a5e1059 #260
    08aad594f0059d28dd23914f9d37ad4e695fff75 b91dd14fd01fd1838ebbbf89f733dcea0d211293 #260
    98725df00a729ba226ae8610a3488e5b9168029f ce34c733747008b760595a40163134d47b51ac81 #260
    9a7b1e21e51609266adf657bcab0b43b6bcd445c 1cd72917e4a71c064bb36fe2b2573d5fe83dc5e6 #260
    ea71a19d4181ce13b0e8f374f45ba9237ee4a9ce 434ba6ea2594b547888e8171a5ba4084a489c53a #260
    feb3ea7ebf83de2e301adb1f20300b262773ec54 7217a80af1300c7177ceb644ceac1ede35a7045c #260
    c2283ce14628127ef1758974ddab4f5b1f89d47a 2e349a97c6e55029c240441fcd0733d55dd76228 #260
    7e460f429b740180cd72730418262a2df971ba54 98a84624a151065621450e9ee36d406d55d90c4f #261
    6866fd6b5ccff82333ad4386ce68cdec03531b68 2a474e4459144a9726c8d568c44f825db958c880 #260
    fc53b273039cf5e0a932582b1fbb56e7223ad4ab 3846feb2c7bd808ce3199980705c2886ae64b207 #260
    5014e5fcdd6e5f4a53d0fea4cbecba733821a854 c3cee8324f9aa3cbb1eede67e6f005e0ae42b1ff #260
    8efd4e95fcb08478c9c6e8eee384bfca559f62cc 50c258836bb73df99843a92a99b2066ec5d352b4 #261
    0e77fbd3d0d79eec5247e75583a04590a1785133 2d53d9b9b71713c0013e85fa43a63d405f5d8bfd #261
    d0b19b32e01d7abc8829c01353d759fed3d304ed 5e243cb2c4fe5b8f318ea58c5e01dece1179c182 #261
    cdbf324aa043b1bc5705159127d2b55f186d1b9b 3ae8a72dbad9b923b27313e669cfe9353f61399c #260
    083d4de5b0fd33efa28363546b6ed89e191c5200 c1b28f017a341db9b1d7310cded74b6fa705518e #261
    a434677eca737771dd64703545c13eb11ba92ce2 f870bfd98de9abf0569c15921ed6863c67174dbb #261
    80c708a1fa8986bce0b2d1ba4d35e79d9e4094ba a761ee50a27ee681c6e5aaaef96fff8c0c0b8fe3 #260
    b2f25d390a8546e42eb6186115b673a53b8c38dc 5af7a209e0ece48e4db7dd73325d96763a01d054 #261
    c37fd136edf546fd58daeac146548436c1fa38c2 df8999cb9387546eb528992d0ce983e55720b9f7 #260
    0e1570bde5b64458449a45989f1b56d6fd651883 5e4755d93ffc5dc7a4603e34c574b34bfcbe7c96 #261
    8401f4d85887786fbb773d3fd41b8f07a77624b8 dcb75420e9929cc102668180ac41b0004a0a0fda #260
    f2a914b8588bf3038472c14b129fbc5ddb3a2992 760d2282e91056058c2c9eee28f184a0d0e07ab0 #260
    f46a709ee487e1e6e04423fcb7032a26eb103129 31df0a3f1c4bcc700475b221184375888ab6f28b #261
    d937e30759ceae421bf3cc1b84414de4b67df76c 288f0079413a5fa2d5bfa4b9210bf6d2f8c13895 #261
    fea1af81fdab64a19353224d60b4efa60f929740 e8a4b9d8a5c3fb61413989074a258305a7df6144 #260
    47a95332a2b8fe47da9fb0af97fd6f0b542a18ee 9720d93157fcf9a440636d8d5c9cf745bd3cdf50 #261
    9fdafdf114a88bd7309883b4578e74cbe786d04d c9559473a9388f98d93437a17f09041f39700c74 #260
    2ab7973fe06eecf8b0a0d1da8481d926fca1ee1b 62c433647257397381c80305a5ca4402560fbd81 #260
    e7deb2aaf4d4d089618dc0c8f393fa0b8b6c77e9 69c8e640ca350a3f51f650deeed86cefe70fe10a #261
    941acb4f919bcef337d4d9e1623101bdc30d3616 1592795c4e7df42c26618a152af594dce711afad #260
    a1a2bb1cd9f000f53fbeae752ed5c38f152eadf2 b5104c0d255e8ba23d938f08544d30a1529a8626 #260
    cde12790d721ab2a90471750fd75d9f5bf13f57d cefa8e9b71c0d11963abe3dc81658f03e26007df #260
    133db22fae34cfb2e62a806e99d22674b0376f35 1599a1758b422048a64f8888d7d3f69660686c9d #260
    c15735dd8894f829ce396c922ce4b5a48073f05a b6441e63bf4c433e81bd79d814fb25e8ae1e0481 #260
    43bafd4674841fb8782f5174033b684aa0d83f67 1c41173e3e8d985732755ade91daafe24623d77d #260
    082358f9ef6feaadfaafd59a7512da26beb00100 fab01c292920d3d9d671249deda67de25c83463e #261
    0681d854994ec0ceed0562ae74549ccf8ef2ec41 f1397eff6c09232a4884cd913d3014b68f7a3413 #260
    f9d1c65d475807f70d29deff71b16a922a61c4c0 5ba1ab6b31b20e515b0dad0d5e073eefff879f51 #260
    535c83dea5025e49df12df4a14b4d1dfb7d373ce a2a85a65505a39f3fda08f83a922c8dea6e08d35 #260
    5392c9bb99c4be1f1c3fd78743df62885fd214dd 51d6bfafe144b26bc70288651962e40faf9cf79e #261
    827345a07a3d2348abc63e5215e57184024078d8 a8d11c40c6dccd28ea5c85d7ac77a853b62dfc98 #260
    d2042d288eaf7aaf7feda85eb7d1a6f546302c12 18c32f5108bf709c9f30a09ec0548b35c9c23375 #260
    4116db9807cb37b49d3db35c7a45301f5e851b01 8eff40e18f7bccb5f7710969f27d46c1a160bff3 #260
    a56b0cd7178dfef299aa49b26773a80a34abe205 45400e9f6bb7c6ff2b7f5a7b19b8f11a9695bab4 #260
    a81a52afbb4e03ba82b2743801772151ed8c7d70 e3bb6eea6f37b98a3c97c233346c6acbb9f5cb42 #260
    6ff537f03c4df500da7283c0566fe6f8feca709b 80befb9b5d8fd84b85d3c43a651f666197179fd7 #260
    9e646ad84c9d5008187eabf479e85619df9de8ca 5077da7b171e4bde5333dfc87bd75c62a0ccb9ad #260
    dd6879ffea24da9fc16cb62d7d6072d2c5b2bae3 da77de8adb9bd8e2ddbfaf0f4bc248424596a38f #260
    14f15cfed48bc7519e8e5eeac03f483f4b11ef3a 7e2a1bc9cf18a1aec5c4bc1d36bcddafb5737251 #260
    7e9d5a7efa70f92f91d960a4f50243ba44d805da ce4af84d643fd6ef10ac04e9182e06a867107ed3 #260
    f14f41b894448298a86865c9114e6700245356e7 c0a355e9155f01dca17521c98b91ce7d66b0d5a6 #260
    70cd258d8aac43ea57494527b00bf36de3efa6c0 ae4e91a7711a90334ff3e6e9649fc014d1ed7e1f #260
    bc918e74ace5dbb4fe1ce73b59d06a9ca1be9ed3 92e0ae6e7c4a75d404f35c305cb620c676d0de74 #260
    6e3bac3722d19b2e2cb736c2e789568eaf151032 002c2264d1c9f31e74982c86f3fd60e10b2dbf1d #260
    57a66608b918d673eeec7e6c94ea5906b756fcd0 3c85e32feec3a323aea11682370aa61bea999239 #260
    2a7a449cca3c7760b689a54b3aa02476a206dbc9 950bf6521695403f0fece9664a1b8ffdf081960b #261
    9159b808d35a88e74fc91e11070f3270cdb321f9 1d55596dec5e75f51cbad5fa2ede96f0b6a61451 #260
    8d5b712de3cbd84118327808c403756e8894014a 4d813775c74b049136cfb19166b947fe2c228ab1 #260
    b57726ca842624b713572529109ac49b17c93fb3 5d34054298274fc92ef7e28a3c8c1a3be622bdbd #260
    f90e2f2bd26e22b77ccf781cccdf95afd3c3ac1c b89039b0f075565e1947d290ffe1ceaf9b058ad3 #261
    62c68dc41f9d9d7ecaf5193a6a8d997ebf671a61 9fdc2d03facff2f2f7bd4b7c2d5e3c387c0beecc #261
    5a9b56291f82b9269346053594d8b5dfca736976 b3030550f19103c33204a2a882a7a75ffff5d5d0 #261
    28ddaf75917140e5e4355d4386bc5d14d9dad7b6 b37cdf6c8282eccf37a8e4032cf627ad6a45f96f #260
    ca63d42d670837b918081d1fc1ebada553814b4c 272de2d10343f238bb403f61a830036ef8a3b640 #260
    ba3cb0773859334fe9f75016295bb3893c9e6044 a66198b81624d12ce2e0e185df541c40b1dba1de #419
    064392ffc7fc58fcc3018fd2ba2df33fbb21f1de 2ced6925ea9eb05c6b423125e79cd7154fa34521 #260
    994bd7373cf3a335c204a617604e690ed4c00cba 0911991cffa358c6599ea65ecd06a18912a33f81 #260
    4ba39a6f408bdee468df2e3ffdf7d5dc08e7b59d 129717ac4b876fa18ee54110824f9c52805743c5 #261
    dbc7bfa3f36cc61a3f1a2015e47d71ae9dee5421 1c806bd761aa0f5202c5795d1488c15075e76d79 #260
    e94603adfac7d8734f9af01e33f67e776daf482d 4f33eb90db811cae1568d638c86ed3563cfb3a30 #261
    ef6cc0b362019f32152470ed96c1aa1b813fb7f6 d7ee1775baa84c792244612c310c7ac92f516b9e #261
    355fbd96d5e90b52961ac5f1e035112fc3bad4a9 d2d174cab1cb534e02d2623e28bc74ac84fd1f38 #260
    9ebbeda5a03fd8fce7be147b65ea396e50721c68 eb77ce8efc11f4e54219b6f90911a138563e6c80 #261
    31eeb443305a4e11c8b20a7c8ff2b3f5e841eb0f e643d9d0443bbb0888969110635f8cc79c8a7f89 #260
    b9b1b8fdddf9d006fdb820af770063e1f968345b cb10c155ef59632b25039cb4bd2eb046dedc198d #261
    66419a1d1b80110c9702edae641bddcc2888fc98 16e4acbdfa026ebe7a0bdcdcec67b668bb2e35db #260
    12f1fc427efad4b683835a72bda6f74bebb5d641 79c452bf5c08c693c2a9baef58f7ab8e68d93889 #260
    5f84efa1ec2fb3cd6f6c54545cc34bb77ac1ddb8 5b8eee2be391b9c6d8cf674bbc11ae3ac65ef641 #261
    d42254dfb462e4ab23a42d4bef53b1ce00a72396 8b8ab286a75a029cc325248eb7bd90c9a163dad1 #260
    6a5a18cb1bc9ea878afa1146950439b5d4744110 c83c4c42dc9012b5fe02efce1700d9b8292034e7 #260
    1575ada305b9686b9771df2dca304f391e85a76e 3b5302049a2dca40d028c731d407087b415b07cf #260
    0bc59bbae391ee45ab3a7cfb2dc703c8b27e5772 5aefb0a1e8186318f5d6a548cf264c3f7472a5ea #261
    48ba76bc26337f23d1f0991bbac51f996a3333dc aaa57b63944878a89fcd7a22e8ff0065ee45813a #260
    9f9359bd8132c425493720080149dcc0d3da9436 95c55a2752fa4e363c8b5e9778135a85fad47d7f #260
    b5f4e8137b3cbd657fbe2b698f9db4e321acbc3d eb2a04300eba54b811882d5d091ed2534ecd539a #260
    d4bd8923ad8cab346a854967015b06d9e5cd77f7 d372b9da7513adff5e64b9981e117a182a1dcdb9 #261
    5eb4f452ee0fcde7b5bbc93d62de9118b70a33b2 d77e58c47cfce5a75763a0488274388a123fc7c6 #260
    c89e3e12a41e13e09e0103d08a41d0688a99fb49 7303426bd0945c2a1a95dac61b34d375be3890c3 #261
    cf0bb4c3571badbc5aaa8189cd5cbe3563ec73c1 44b1a9bc7b12f113e2770ec0facd1aef2091f60f #261
    18573d60aab1344bf124a044b01445086e910c4c a2b93c48f87f6fb93cc1b7db5bc55a5c759afcda #260
    2b745efe57cddc1753d3007d081c64bd20e3ab79 2f1b3c790406ff1f3126cd397078008a97bf31e7 #416
    fff33f9e851912363c5b1f3ac65598be35eb5f0d bfe19b5b2e70cfe26dd5c65068d3d25b7c977fa8 #261
    098bf5329727fcd7d973bf842e6b4d50d6e7b924 08353245471864a05ba51b5c83d5420e824638f0 #260
    57626eb6eaa436b22260068d23f4e3df5f389cd1 01da6f5e3e5ffbb3462e2980334e689ac3a48ccc #260
    80b53730d1e821563e5c348fdf4f5fc7616a49f7 99285084bf4378cd1109c980855bbcfd243b2184 #428
    d76b24dd15a219666941ab1b4967d8f738adcda0 4a203cd9806932c5d045acc760558d4ccd5621a0 #391
    c5ba51d629b3813182cf3e161cc3f23b1e541dc3 c4e2064a49f4bd6c4169f59445edd1dec30257ce #430
    5f878d2a85807618a4c8571cdef5daa3124672d6 95c67e4e8aa7f33b11eed759df10965fe482b340 #430
    09d13de4381925fa2a6dea74eff8185fa301e905 99285084bf4378cd1109c980855bbcfd243b2184 #428
    14bf3f6d1644a37029be58429e8f0138e1ceb743 334e268bc2aa9cb039d2b54d59b04858afca2e52 #420
    d5b94100863057fb4629f9ad4a35753d16917924 99285084bf4378cd1109c980855bbcfd243b2184 #428
    120fab18d84f1eb993ecc7fa858a8dd212747079 09d5267a7c46e5e9da7c20a79b00e1584d605613 #421
    f6db4206258b0ef30e8dd8949627acfd209bf338 73bd93ee4561faee009921d7e04da11fa4e901fe #419
    394e8470c89927a06575e08c434006b2320f1781 2f1b3c790406ff1f3126cd397078008a97bf31e7 #416
    5a433244d0b827176df8b76a05959cd1a7a98ce2 95a30f61795768374d7cffcab64c8f00c34108f5 #423
    84b99f3fb7bbc759fcbb589d031920e76edf4746 2f1b3c790406ff1f3126cd397078008a97bf31e7 #416
    fd773172e7f26f2d98de3eb572f3317b0ad8d443 07f3d18c96bebdef14285630dff2051fda2cabca #420
    761d4bac1c238ea7af4dd36b56719ad5e30771c3 c162323ac3d2529fad90a897d9b32305e0f62401 #421
    e2e6ce6a29451e9fac612ab83f7a104b6d6475a3 48a84d0f36bafb77913d98b5509c56dff27fe0bd #392
    7451d17a69ff7585f302933beeae1037d2c708a8 a7bf97f5abdabc0bb362d222a194bcbd2db0ff47 #392
    d0f855bfa91b1d961a17a02ec3e383f9671caba1 04e3031036f189299a0e2075a08393f329d70b3d #392
    e63ddb48e2fd23854a0b4a480b32cbf33e601981 9a32929558df73193dbcffe04d3c6115d2d81f84 #391
    5fa35d211682ee02e34fba0711838ca431ed003b a6ea646eb000ce5c6c9964bacfee378e09624bc7 #430
    7ac93e300ee17a4ee5e92192264fcfd438805b6f 846821017fd423bc38aa5ea0a1ba0d71bbb3709b #391
    7112697e8be2d6f231726a91eb565e00ddbeebec 94d6ba2a1c72daeeb48523afbac27c0a33c403ec #391
    bc3dc2694b5d15613ef610d693d18ebd904b0d56 3a14944504d444b728414d172aa09c4cfd3b23d8 #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.

  18. rynfar commented on Sep 12, 2026

    @rynfar
    CollaboratorAuthor

    Cycle complete

    Merged code and the production relay are updated. No desktop/mobile release or device installation was performed in this continuation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions