Skip to content

Commit 3aea56b

Browse files
rynfarStiensWoutt3-code[bot]UtkarshUsernamejuliusmarminge
authored
chore(upstream): adopt the 2026-08-15 T3 Code batch (#42)
* perf(desktop): speed up Windows update installation (#6169) (cherry picked from commit c9063f03ea1c16e0239e1996a9b6ef611679995d) * fix(web): style sidebar action tooltips (#6371) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> (cherry picked from commit 196c8ea0d642acd1db66bd57f5d98abe81d8da6e) * refactor(web): simplify global styling (#6381) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit 9885a845c97325b1099b095011da8385485616f5) * fix(server): handle files named HEAD in git status (#6397) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> (cherry picked from commit f0719072a1c6435b5a91243afc57bc8bf1f3e2b6) * fix(web): bound OKLCH gamut mapping (#6485) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> (cherry picked from commit 74f7b434865c2d758c7b1cd5f52f4c96b76d03fb) * feat(web): open remote environments in your local editor over SSH (#6572) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 57a299a7852b430613dfdd97ba76249ee9f374d5) * feat(web): older chat timestamps show the date, not just the time (#6654) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 48ddb3d469d245363dba723f774ba449e4d950c5) * fix(web): align pull request action menu rows (#6534) Co-authored-by: Nickolas Kyryliuk <nickolaskyryliuk@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> (cherry picked from commit 8c628f14993cb159d467e7a0f8c52578dde77005) * fix(web): restore selected themes in dark mode (#6665) (cherry picked from commit 6ae9662d8ed215476e697adc12403ce035500828) * fix(web): improve Codex usage graph contrast (#6669) (cherry picked from commit f0ebc628c6dd83fd0c7963078ad7778ce6028d0c) * fix(desktop): app zoom no longer zooms the preview browser (#6649) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> (cherry picked from commit d8a6dfd31539a86d08bd4fbd030f8252b3c405ac) * fix(server): keep provider notification consumers alive past startSession (#6538) Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com> (cherry picked from commit afca73d3683c99057ea8af1ad7d77511a0faf680) * fix(server): treat removed Bitbucket permissions endpoint as unknown, not blocking (#6525) (cherry picked from commit 75472802bc5ddaba860dc652000223600e529937) * fix(ssh): let cold remote servers finish starting (#6168) (cherry picked from commit 672216d7e152241213a8757892f281e1f4434e8a) * fix(web): preserve Claude insight line breaks (#4344) (cherry picked from commit 1e87029261f9b81061a2a7420849b9eeaf1a2ebe) * feat(web): accept file drops across the chat workspace (#6636) (cherry picked from commit a6ac27e7fd965f26ee0c61946e056f0fd889818c) * fix(web): widen ordered-list marker gutter for 3+ digit item numbers (#6527) (cherry picked from commit eaa6c4712fe11f0396e549b1873f163dc202d229) * fix(server): bound thread activity hydration (#6153) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> (cherry picked from commit 71c6f8248775066ebaf4bfc6680d3e2acb4bb2d1) * fix(web): restore the Archive action in the default sidebar thread menu (#6526) (cherry picked from commit 48cba7d93c8c63508f31cce2544d480ace86f929) * fix(web): open diff files from nested projects (#6174) (cherry picked from commit 9f26656cb958853f90f7215387d604c098937db8) * fix(mobile): use tryOpenExternalUrl for markdown links in ThreadFeed (#5872) Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit b277cc65e045899e7aa941e92d04f2b4996f27bb) * fix(web): open the file a bare filename reference names (#6297) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> (cherry picked from commit 2cb1a26f061fa9029ccbe2a614f02bb14b22dd45) * fix(server): stop the provider title mirror from overwriting real thread titles (#5941) (cherry picked from commit ddee418a8d6d3e242ca26a8053a886ecc3b56b53) * fix(shared): match source-control providers by DNS label (#6175) (cherry picked from commit 178da6bc3210b82c4a83f33c8b149f623a3375e1) * feat(desktop): Chrome-style hold-to-quit (#5508) (cherry picked from commit b7dbbbaf6c394621cba57cf58dfcc1845f445ef6) * fix(gitlab): submit review comments on context lines (#6348) (cherry picked from commit d94fbda344398bd266b9f6645e531eb17d3c9e4e) * fix(mobile): recover the QR pairing scanner when camera access is denied (#6487) (cherry picked from commit 3bc4fdf05b6b748a7b506c81dc125f3504f35278) * fix(web): keep a long path from running under the folder picker button (#4823) Co-authored-by: Sy-D <8460326+Sy-D@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit a38cac81d82b82a6967eaf8cb90ed2770c514f3c) * fix(terminal): right-click paste works in the terminal (#5240) (cherry picked from commit 270489b887420db3319898ab4046516e4c457711) * fix(mobile): explain iOS-only settings on Android (#4981) (cherry picked from commit 4db50757c0b618293997a7f81bcfe30b68356969) * fix(web): stop counting a workflow coordinator as a working agent (#6672) (cherry picked from commit 9bdd91293316038d6a50f8bb19afcd73c25ad102) * fix(web): keep floating preview anchored after panel closes (#6547) (cherry picked from commit 6e6d1b49412d064ccbde7daae2e287f9b62efd7d) * fix(web): unstick /connect after in-modal sign-in by redirecting to the authorize endpoint (#5133) (cherry picked from commit a7c5ad5db167b3a172ccb26408b0638c99b2a459) * fix(web): keep send reachable while a turn is running on mobile (#4781) Co-authored-by: AMohamedAakhil <hello@takaitech.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 7afa184a99b266d466cc9517c147a75c3d839ad7) * fix(web): reject unsupported composer image types at attach time (#6574) (cherry picked from commit 34a12bc33f5fba02b0b398e7dff35ca041a87dc7) * Make ClaudeTextGeneration tests hermetic on Windows (#4508) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 5ffbf3ce4a4e8d14f8f37fae304167ad6c1e5218) * fix(web): show command output in work log (#4083) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 143f713c79103b8039a7e83cc16124aadcffa424) * fix(web): reserve sibling column width when resizing the right panel (#6279) (cherry picked from commit 06dd9993b6292e61de8890956a3ce3c50495a6eb) * fix(web): replace whitespace in new ref names with dashes (#6270) (cherry picked from commit 9e61d0f127cad164702ca37aad6f5f38babc1ac7) * fix(client-runtime): branch list no longer resets while paging through refs (#5858) (cherry picked from commit c7b14a8666dc44ee426f8d139e0493af9fe4b6db) * fix(web): support Shift+Insert terminal paste (#5982) (cherry picked from commit b0de3857775b7d1407372cde031326e15a9d4119) * fix(web): keep the composer glass aligned with the context strip at any interface font size (#5703) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit d79f975d0b39805c443e97accfcd4aa60786f13f) * fix(codex): keep background memory out of chats (#5468) (cherry picked from commit 135dc156e3f600a79a415b06e4c234677aa318d0) * fix(server): treat a missing Codex rollout as a recoverable resume error (#6671) (cherry picked from commit 51c6daa3bd1d65e809b5196bf63333013427338a) * fix(web): hide provider Update toast action while an update is running (#6544) Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit 3cde99b259249a02e50079f326a00b5ba38e7235) * fix(desktop): agent shells inherit a UTF-8 locale on macOS (#6236) (cherry picked from commit e204f5a5d34c753399531e772fbb11420caeea09) * fix(server): ignore Claude command lifecycle messages (#6606) (cherry picked from commit 474cc5fb017a13dbdb403dd3bf714ddbf867205a) * docs: mention Bitbucket user read scope needed by auth probe (#6291) Co-authored-by: Gerwin Bisschop <gerwin@regeljelease.nl> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 402c9e0748ced0125c1b40793f7d170efb9b6b2a) * fix(server): return valid preview action results (#5966) Co-authored-by: duncan-vc <247855047+duncan-vc@users.noreply.github.com> (cherry picked from commit 551f4c99c1c42c767daea1f2920cfc8fbc78a1cb) * fix(claude): make "Always allow for session" stick, and only for the session (#5041) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit e9e46972fbabdee0eb39cbd86470a5b5f5f26910) * fix(ssh): surface a failed remote t3 install instead of a silent 0-byte server.log (#5132) (cherry picked from commit 9d0f2fc212858290e79710b44c0635a28dd92c2f) * perf(server): persist the wire projection for streaming tool.updated data (#6675) Co-authored-by: mInrOz <14320143+mInrOz@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit f075a58119f392137d699cefe5290b2aa6e55935) * fix(web): stop wrapping partial code block selections in markdown fences (#5069) (cherry picked from commit c4556ab237515cea8ec6f482351c58da730ad495) * fix(web): hide T3 Connect toggle in web app settings (#5068) (cherry picked from commit efe1773e9c5222857b88c006d47215b023703a04) * fix(web): show provider account accent badge in sidebar rows and hover card (#5980) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit a5d35321bd620400dc03ddf7a42ee2672b225ac3) * fix(server): wait for concurrent SQLite writers instead of failing with SQLITE_BUSY (#5134) (cherry picked from commit c0f9d917c1ab08d30f2b3715dd25d2175a6d2ecf) * fix(web): reject oversized prompts before provider turn start (#6602) (cherry picked from commit 7c55e86320aac9c68ae53a7bc15682b7e14f98bf) * feat(web): collapse the question prompt from its header (#6773) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> (cherry picked from commit 40ab7bf32a81a66b20571ed280dc238c2276dc61) * fix(shared): degrade an unknown system time zone to UTC in usage windows (#6670) (cherry picked from commit 684d703b0a8a0632a18c8453277f7e5e6312b200) * fix(claude): discover repo-local .agents/skills in skill discovery (#5488) (cherry picked from commit ad47d2347c6917f7db33e6e3902e1e8e5d5281ec) * fix(server): let slow provider CLIs raise their discovery probe budget (#6223) Co-authored-by: Julius Marminge <jmarminge@gmail.com> (cherry picked from commit d715c2e56bb718d2225cc0f07cc65e6c637dc229) * fix(web): retain terminal PR badges after checkout switch (#4755) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit d5465aebf2746b8d5f327be3b2424d9412a29075) * fix(web): show selected model in context window tooltip (#4772) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit ca37b19cf8d3882f0b4eee1b9e49050494f30422) * fix(web): scale command details with code font (#6510) (cherry picked from commit 5e147371527154be385f28e57339a71521e528c6) * fix(web): preserve XML-like tags in user messages (#4133) Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> (cherry picked from commit cf7bfd1c93974428262ab1419d11c972d01d65fa) * fix(desktop): route mouse thumb buttons to the in-app browser (#4459) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> (cherry picked from commit 7c8848ebb054c1f4c1279f634633cddc37cb1fac) * fix(web): keep the final segment of directory paths with a trailing separator (#5460) Co-authored-by: jorvarea <jorvarea@users.noreply.github.com> (cherry picked from commit f915320914d1bc446e60cbcfe4cd7d75bad4dc2a) * Keep block code plain when copying from rendered markdown (#4468) (cherry picked from commit 7083bce26aa89fedfc482ad44cf61c5508a58db7) * fix(web): add web app manifest so installed app keeps its scope (#4306) (cherry picked from commit 21b6fb528d6b2d3b3e333b2bd4455d6cdf7d7a41) * Skip user hooks during Claude capability probes (#4466) (cherry picked from commit db02c6b9c9d5714ae3d519328cdd68c746f4cbad) * fix(mobile): use Android monospace font family (#4609) (cherry picked from commit 31d0fb6ca7e31e5505d4e69063cb50d1e59ca1dc) * fix(desktop): timestamps follow the OS locale instead of en-US (#6190) (cherry picked from commit b72d5d79889ad9b4c022060be9eccdfa64733d18) * fix(web): keep multi-select questions open after the first click (#6646) (cherry picked from commit 1a5ff424cee104e1e8bbcf9bbf5414bbad843be3) * fix(web): stop clipping the changed-files expand hover on Windows (#6545) Co-authored-by: Cursor <cursoragent@cursor.com> (cherry picked from commit d550b829bd169fa8973b17df940ef2fbf2e69f37) * fix(server): allow long-running git pushes (#6499) (cherry picked from commit 86fb47afd724ea28e96c4657a0e99b66af926b87) * fix(desktop): keep probing backend readiness while the process is alive (#5526) (cherry picked from commit 160c76c6d1c5ab78441e21503cd10e7942b917f6) * fix(server): allow install scripts in npm-global provider updates (#5646) (cherry picked from commit dc0ff8f13eaa9753fdf0de60203c9e819f1cee27) * fix: detect SSH remotes with non-git user prefixes (e.g. gitlab@) (#3649) (cherry picked from commit 7ce4194707e2a883ccd6a44fd2e07eba08f5369a) * fix(web): describe what Ultracode does in the Reasoning picker (#6092) (cherry picked from commit 39167eb1a586ee9e060d6ec3314617e14e0259c0) * fix(server): settle pending user-input requests when a Claude session stops (#5127) Co-authored-by: Capxul Agent <agent@capxul.dev> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 3b54a2a574b061a1ce80d7130e0776f4f5c95e20) * fix(server): stop replaying a command receipt for a different aggregate (#5246) (cherry picked from commit 4fc80fcbdc1ed33c46296dbad08517f2968856e6) * fix(server): settle snoozed threads immediately (#5379) (cherry picked from commit 07e668dc48ce58fc9244ceeef62b9af929293a2a) * fix(mobile): local-checkout threads record their branch so PR badges show (#4986) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit f8bb92b51b720dd6feba654e6ae50d2b575c0328) * fix(web): contain long approval commands (#6503) (cherry picked from commit 62bb97428a1bd007f4a83cdb1fcb8bbde2cdeef3) * feat(web): make right panel maximize bindable (#5091) (cherry picked from commit e17f244e0d411422dacaa0a43669fb4e8436347d) * fix(server): respect inherited OPENCODE_CONFIG_CONTENT (#4242) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 61b2e744df378b7a8d534494114cf59b26cbe6ca) * fix(marketing): detect Mac chip on homepage download button (#4197) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 04f23098e13410a325fd2b997cbf7144e872470e) * Keep the server alive when a response write hits a dead socket (#4470) (cherry picked from commit 931e91527c285c49d8482328877c93c8c684591a) * Limit physical key fallback to non-Latin layout output (#4469) (cherry picked from commit 664499c92e838f36a0ff8187bc2cd95d7b8ef9d5) * fix(clients): default clone destination to folder plus repo name (#5989) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit ec141c125726ae70f31f392e780afa8de446fdc4) * fix(web): keep timestamp date and time in the same locale (#7081) Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit 20a70420a85aecab0bde1a58921197f423e401cc) * feat(desktop): add signal macOS DMG installer background (#6201) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> (cherry picked from commit ad117235b544e23545fe39143812db2ddd41af1f) * feat(web): send PR line requests to agent (#6597) (cherry picked from commit a5e29edeec34fdfab1d44e643b0d12bb924fd261) * chore(branding): keep adopted upstream work Pylon-first The 2026-08-15 upstream batch brought in surfaces that still carried T3 identity or T3-specific values: - the new macOS DMG installer backgrounds shipped a "T3 CODE" wordmark and "Drag T3 Code to Applications" copy; - the new web app manifest hardcoded T3's #161616, which would flash against Pylon's #0a0a0a app background on an installed PWA, and named nothing; - two docs/user pages picked up "T3 Code" in shipped-product voice. Upstream also retired apps/desktop/resources/icon.*, since desktop packaging and the macOS launcher now read icons straight from assets/<channel>/. Pylon's icon exporter was still emitting those three files, so it now stops, and renderIcns goes with them. * fix(web): repair three conflict resolutions from the upstream batch Typecheck and lint caught three places where resolving a cherry-pick conflict left the tree inconsistent: - AgentsPanel imported Button twice, because upstream's new import applied cleanly and the conflict resolution added it again. - ComposerPrimaryActions' new running-state test helper did not pass Pylon's required canQueueFollowUp/onQueueFollowUp. false is the right value there: those cases cover the plain send fallback shown when a provider has no session input queue. - ThreadStatusIndicators imported TerminalIcon, which upstream renders for a running terminal but Pylon does not: Pylon draws that indicator with DotMatrix state="terminal" instead of a pulsing lucide icon. * fix(deps): restore the lockfile entries the batch needs Resolving the styling-refactor conflict reverted pnpm-lock.yaml to its origin/pylon state, which undid the entries the Windows update-install commit had added one pick earlier. The branch was left requiring msgpackr-extract (apps/server) and @electron/asar (scripts) without locking either. Regenerated with Pylon's pinned pnpm rather than taking upstream's lockfile. The @ff-labs/fff-node patch hash resolves to the same value as upstream because the hash is over the patch content, which this batch also updates. Also updates a Pylon ingestion assertion that encoded the pre-projection shape: streaming tool.updated now persists the wire projection, so provider-private keys like `pid` are dropped on the way in while item.completed keeps data whole. * chore: keep the UI-consistency review agent, drop upstream PR screenshots Two corrections to what the batch pulled in. The styling refactor ships a Macroscope UI-consistency check-run agent, which was dropped as T3 tooling. That was wrong: Pylon already runs the sibling effect-service-conventions agent, and this one is generic — it reviews web changes against the shared component system and Tailwind ownership, with no T3-specific content. Keeping it. Two commits also carried .github/pr-assets screenshots of the T3 Code UI as upstream's PR evidence. Nothing references them, the directory did not exist in Pylon, and they are 308 KB of base64. * docs(upstream): record the 2026-08-15 batch and advance the cursor 93 of 99 candidates adopted, 6 skipped, cursor moves to a5e29edee. The deferred register stays empty. * test(web): cover the queue-follow-up branch of the running composer Folding Pylon's queue affordance together with upstream's send fallback added precedence logic that nothing exercised: every existing case passes canQueueFollowUp: false, so only the fallback was covered — on origin/pylon too. Since supportsSessionInputQueueFollowUp defaults to true, the queue branch is what a running turn normally takes, which left the common path untested. Adds three cases: queue beside stop on a queue-capable provider, queue winning over the send fallback rather than both rendering, and the queue button staying visible but disabled with an empty composer. --------- Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Simone <lucenz@proton.me> Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Nickolas Kyryliuk <nickolaskyryliuk@gmail.com> Co-authored-by: Tyler <tyler@southboundsoftware.com> Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com> Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com> Co-authored-by: Guilherme Barros <gbarros1095@gmail.com> Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com> Co-authored-by: David Balderston <dbalders@gmail.com> Co-authored-by: mohamedmastouri-hue <mohamed.mastouri@ensi-uma.tn> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com> Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: Ulises Britos <45952970+repparw@users.noreply.github.com> Co-authored-by: Taras <Taras.Fomin@gmail.com> Co-authored-by: JJ <93147993+hey-jj@users.noreply.github.com> Co-authored-by: Simon Doba <simon.doba@hotmail.de> Co-authored-by: Sy-D <8460326+Sy-D@users.noreply.github.com> Co-authored-by: Daniel Vernon <danpvernon@gmail.com> Co-authored-by: Rishet11 <154429365+Rishet11@users.noreply.github.com> Co-authored-by: Akshar Patel <123344143+AksharP5@users.noreply.github.com> Co-authored-by: Torben Wetter <github@torben.id> Co-authored-by: BootesVoid <78485654+AMohamedAakhil@users.noreply.github.com> Co-authored-by: AMohamedAakhil <hello@takaitech.com> Co-authored-by: mohammed shazeb <mohammedshazeb10@gmail.com> Co-authored-by: Mihnea Peteu <mihneanob@gmail.com> Co-authored-by: LikoKiko Tech <145937091+LikoKiko@users.noreply.github.com> Co-authored-by: Vividh Mahajan <82711162+Lasdw6@users.noreply.github.com> Co-authored-by: Jorge Pineda <jorgepineda0310@gmail.com> Co-authored-by: abhwshek <67309069+a20hek@users.noreply.github.com> Co-authored-by: aoright <102943475+aoright@users.noreply.github.com> Co-authored-by: Williawar <28518115+Williawar@users.noreply.github.com> Co-authored-by: Mark Griffin <mrmg@deflexion.net> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Linus Boehm <linus.boehm@finto.de> Co-authored-by: Naveed Iqbal <naveediqbal949@gmail.com> Co-authored-by: Gerwin <9853101+thamrx@users.noreply.github.com> Co-authored-by: Gerwin Bisschop <gerwin@regeljelease.nl> Co-authored-by: duncan-vc <duncan@ommsocial.co.za> Co-authored-by: duncan-vc <247855047+duncan-vc@users.noreply.github.com> Co-authored-by: Joaquin Navarro <alfian1991@gmail.com> Co-authored-by: Martin Bergo <martin.n.bergo@gmail.com> Co-authored-by: mInrOz <14320143+mInrOz@users.noreply.github.com> Co-authored-by: Tai Nguyen <87302343+JoeJoeflyn@users.noreply.github.com> Co-authored-by: Vitaly Iegorov <vitalyiegorov@gmail.com> Co-authored-by: Ostap <33957189+ostapondo@users.noreply.github.com> Co-authored-by: Jaroslav Brtis <6890442+Jardo-51@users.noreply.github.com> Co-authored-by: Roshan Mhatre <officialroshanm@gmail.com> Co-authored-by: Carlos Jimenez <cjimenez@r21digital.com> Co-authored-by: Julius Marminge <jmarminge@gmail.com> Co-authored-by: sebbonit <36650750+sebbonit@users.noreply.github.com> Co-authored-by: nqrwhal <81386789+nqrwhal@users.noreply.github.com> Co-authored-by: CursedApple <36764254+Serendeep@users.noreply.github.com> Co-authored-by: John Surles <outsightszs@Outlook.com> Co-authored-by: Akos Balogh <hello.akosb@gmail.com> Co-authored-by: jorvarea <47249803+jorvarea@users.noreply.github.com> Co-authored-by: jorvarea <jorvarea@users.noreply.github.com> Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com> Co-authored-by: Alex Brodsky <122503996+Albro3459@users.noreply.github.com> Co-authored-by: Harshith Goka <harshith9399@gmail.com> Co-authored-by: Paul <paul@brzz.dev> Co-authored-by: RaitP1 <150583432+RaitP1@users.noreply.github.com> Co-authored-by: Dev Talan <chaudhary.dev.talan@gmail.com> Co-authored-by: Luis Gustavo Couto Wacker <luis.wacker@pagar.me> Co-authored-by: JackatDJL <71508487+JackatDJL@users.noreply.github.com> Co-authored-by: delltrak <78751023+delltrak@users.noreply.github.com> Co-authored-by: Aaron Abu Usama <50079365+AaronAbuUsama@users.noreply.github.com> Co-authored-by: Capxul Agent <agent@capxul.dev> Co-authored-by: Kevin Bravo <79945749+0bkevin@users.noreply.github.com> Co-authored-by: Zeus-Deus <100132710+Zeus-Deus@users.noreply.github.com> Co-authored-by: El-Hussein Abdelraouf <hussein@raoufs.me> Co-authored-by: Jono <jono@foodnotblogs.com> Co-authored-by: Mahdi Ben Messaoud <mahdibenmassoud98@gmail.com> Co-authored-by: Inaya Yousfi <zied.essaber@gmail.com>
1 parent a682347 commit 3aea56b

331 files changed

Lines changed: 12905 additions & 2462 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/upstream-review.md

Lines changed: 102 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
---
22
remote: t3code-upstream
33
branch: main
4-
reviewed-through: "1add47b322ab1dfb5010bb363613650176b88088"
5-
reviewed-through-date: "2026-08-14"
4+
reviewed-through: "a5e29edeec34fdfab1d44e643b0d12bb924fd261"
5+
reviewed-through-date: "2026-08-15"
66
---
77

88
# T3 upstream review log
@@ -1132,6 +1132,106 @@ identical to upstream, which rules out patch divergence as the cause.
11321132

11331133
Deferred register: unchanged and still empty.
11341134

1135+
## 2026-08-15 (full batch) — `1add47b322ab1dfb5010bb363613650176b88088..a5e29edeec34fdfab1d44e643b0d12bb924fd261`
1136+
1137+
One hundred upstream commits. `277a7cb44` / `#4899` was already adopted out of band
1138+
earlier the same day (the targeted review above), leaving 99 candidates. **93 adopted**
1139+
onto `upstream/2026-08-15-batch`, **6 skipped**. The developer's decision was "everything
1140+
except Tier C, Pylon branding wins any conflict", so the table below records the two
1141+
Pylon-first departures from a mechanical adoption rather than a per-commit list.
1142+
1143+
This is the largest batch adopted so far and it is overwhelmingly repair: **86 of the 99
1144+
candidates are `fix`**. Upstream spent the day merging its backlog of old community pull
1145+
requests, which is why so many #4xxx/#5xxx numbers land at once.
1146+
1147+
Grouped decisions, by area rather than by commit — every candidate not named as skipped
1148+
was adopted:
1149+
1150+
- **Server and orchestration (12)** — bounded thread activity hydration, the wire
1151+
projection for streaming `tool.updated`, the provider title mirror no longer clobbering
1152+
real titles, receipt replay scoped to its own aggregate, snoozed threads settling
1153+
immediately, SQLite `busy_timeout` instead of `SQLITE_BUSY`, surviving a write to a dead
1154+
socket, valid MCP preview results, a raisable discovery probe budget, install scripts in
1155+
npm-global provider updates, long-running git pushes, and files named `HEAD`.
1156+
- **Providers (11)** — six Claude fixes (session-scoped "Always allow", pending user-input
1157+
settling on stop, command lifecycle messages ignored, hooks skipped during capability
1158+
probes, repo-local `.agents/skills` discovery, hermetic Windows tests), two Codex, one
1159+
spanning Codex/Cursor/Grok, OpenCode config inheritance, and the Ultracode description.
1160+
- **Web (38)** — the global styling refactor, panels, sidebar, theme, markdown, transcript,
1161+
and eight composer fixes.
1162+
- **Desktop (7)**, **mobile (5)**, **source control and pull requests (7)**, **SSH (2)**,
1163+
**terminal (2)**, **marketing (1)**, **shared (1)**.
1164+
1165+
Four Pylon-authored commits close the batch: `70fd3fa2b` rebrands what the batch dragged
1166+
in, `46abbcf18` repairs three conflict resolutions, `d50270899` restores the lockfile, and
1167+
`998848720` corrects two keep/drop calls.
1168+
1169+
**The lockfile nearly shipped broken.** Resolving the styling-refactor conflict reverted
1170+
`pnpm-lock.yaml` to its `origin/pylon` state, silently undoing what the Windows
1171+
update-install pick had added one commit earlier. The branch was then requiring
1172+
`msgpackr-extract` and `@electron/asar` without locking either, and recording the _old_
1173+
`@ff-labs/fff-node` patch hash against the _new_ patch file — the one that fixes asar
1174+
unpacking. `@t3tools/scripts` failed to typecheck and all 53 of its tests failed to load.
1175+
Regenerated with Pylon's pinned pnpm in `d50270899`. **Whenever a conflict resolution runs
1176+
`git add -A`, check `pnpm-lock.yaml` separately.**
1177+
1178+
**Watch item for the next batch:** upstream `e58cbb9e7` / `#6663` amends `#6665`, which
1179+
this batch adopted, tightening the theme selector to
1180+
`html[data-theme-id]:not([data-theme-id=""])`. It sits just past this cursor. No Pylon code
1181+
path was found that sets `data-theme-id` to the empty string, so this is drift-closing
1182+
rather than a known defect.
1183+
1184+
| Change set | Upstream | Decision | Pylon reference | Rationale or revisit condition |
1185+
| ---------- | ----------------------------------- | -------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1186+
| G1 | `d7abd7f3b` + `804cba430` / `#6657` | skipped | `` | A feature and its own revert, both inside this range. Verified they cancel exactly (`git diff d7abd7f3b^ 804cba430` is empty), so adopting the pair is 32 conflicting files for a net no-op. |
1187+
| G2 | `e25021af7` / `#4128` | skipped | `` | AUR packaging: `t3code-bin` / `t3code-nightly-bin` PKGBUILDs pointing at `pingdotgg/t3code` releases, plus a publish workflow needing T3's AUR SSH secrets. Entirely T3 distribution infrastructure. Revisit only as a Pylon-owned `pylon-bin`. |
1188+
| G3 | `e9ae134c5` | skipped | `` | Routes feature requests to `pingdotgg/t3code` Discussions. T3 repository governance; Pylon's README and CONTRIBUTING are its own. |
1189+
| G4 | `2fc676239` / `#3929` | skipped | `` | Strips a stray newline from the `CLAUDE.md` symlink target. Pylon's symlink is already 9 bytes (`AGENTS.md`, no trailing newline), so this is already true here. |
1190+
| G5 | `db3278f97` / `#4542` | skipped | `` | **Pylon already fixed this.** Upstream lifts the mobile hero's Grok mark clear of the headline by moving it to `top: 44px` centred; Pylon did the same thing independently in `ad1693bb3` at `top: 150px` left-aligned, tuned against Pylon's own resized hero (`b732d74ed`). Taking upstream's coordinates would apply T3's geometry to different artwork. The cherry-pick reduced to empty and was dropped. |
1191+
| G6 | `ad117235b` (partial) / `#6201` | adopted | `dc7fcfafa` | DMG installer backgrounds and the production macOS icon pipeline. **Mechanism adopted, artwork rebranded** in `70fd3fa2b`: upstream's SVGs carry a "T3 CODE" wordmark and "Drag T3 Code to Applications". The pipeline itself is correct for Pylon unchanged, because `assets/prod/black-macos-1024.png` is already Pylon artwork despite the compatibility-named file. Upstream's retirement of `apps/desktop/resources/icon.*` was taken with it. |
1192+
1193+
Two further Pylon-first departures inside adopted commits, both recorded here because a
1194+
future reader will otherwise read them as mistakes:
1195+
1196+
- **`7afa184a9` / `#4781`** ("keep send reachable while a turn is running on mobile").
1197+
Upstream removes its early `if (isRunning) return stopButton` and shows the real send
1198+
button beside stop on mobile viewports. Pylon already solved the same problem
1199+
differently, with a dedicated queue-follow-up button shown on _every_ viewport — but
1200+
gated on `supportsSessionInputQueueFollowUp`, a **provider capability**, so providers
1201+
without a session input queue still had upstream's bug. The two were composed rather
1202+
than chosen between: the running branch now prefers Pylon's queue affordance and falls
1203+
back to upstream's plain send when the provider has no queue. Upstream's stop-button
1204+
sizing condition (`showSendWhileRunning && hasSendableContent`) was taken as-is; it now
1205+
also governs the queue case, so on a mobile viewport with a queue-capable provider and
1206+
an empty composer, stop renders 32px beside a disabled 36px queue button. Pre-existing
1207+
mismatch, narrowed rather than introduced — worth tidying if the row ever looks wrong.
1208+
- **`d5465aebf` / `#4755`** ("retain terminal PR badges after checkout switch"). Upstream's
1209+
import of lucide's `TerminalIcon` was taken during conflict resolution and then removed:
1210+
Pylon renders that indicator as `DotMatrix state="terminal"`, not a lucide glyph with
1211+
`animate-status-pulse`, which Pylon's taste rules forbid.
1212+
1213+
**Verification.** Typecheck clean across all nine packages (`t3`, web, contracts, shared,
1214+
client-runtime, mobile, desktop, scripts, marketing). `vp lint` exits 0 with three warnings,
1215+
all in upstream-authored code and none in a Pylon resolution. `vp fmt --check` clean over
1216+
2,898 files. Tests: web 2,758 in 283 files; client-runtime 658; shared 355; contracts 342;
1217+
scripts 53; server orchestration/provider/persistence/vcs/pullRequest/mcp/sourceControl.
1218+
`node scripts/export-pylon-brand-icons.mjs --check` reports 39 files current.
1219+
1220+
Two test notes for whoever runs these next:
1221+
1222+
- **`apps/server/src/provider/accountDrainEndToEnd.test.ts` hangs for 120s and fails.** It
1223+
fails **identically on a clean `origin/pylon` worktree**, so it is pre-existing and not
1224+
batch fallout. Not investigated further here.
1225+
- **`scripts/build-desktop-artifact.test.ts` fails when run from inside Pylon.** The
1226+
cross-architecture probe test asserts no spawned command carries
1227+
`ELECTRON_RUN_AS_NODE=1`, but an Electron host exports that variable and the code under
1228+
test spreads `process.env`. Run it with `env -u ELECTRON_RUN_AS_NODE`; 53/53 pass. CI is
1229+
unaffected.
1230+
1231+
**No integration pass in a real client.** No browser, desktop, or mobile run — the batch
1232+
touches the composer, sidebar, theme, DMG chrome, and the PWA manifest, so a web pass is
1233+
the obvious next step.
1234+
11351235
## Deferred register
11361236

11371237
_The register is currently empty. DEF-1 and DEF-2 were adopted on 2026-08-11
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
---
2+
title: UI Consistency
3+
model: claude-opus-5
4+
effort: high
5+
input: full_diff
6+
tools:
7+
- browse_code
8+
- git_tools
9+
- github_api_read_only
10+
- modify_pr
11+
include:
12+
- "apps/web/src/**/*.ts"
13+
- "apps/web/src/**/*.tsx"
14+
- "apps/web/src/**/*.css"
15+
conclusion: failure
16+
showToolCalls: true
17+
---
18+
19+
# UI consistency review
20+
21+
Review changed web UI code and directly affected call sites for consistency with the shared component system, Tailwind ownership, and the behavioral constraints below. Apply these rules when a pull request creates, moves, or modifies controls or styling. Do not demand unrelated repository-wide cleanup.
22+
23+
The goal is not to minimize CSS or class counts at any cost. The goal is to put each behavior in the smallest correct owner while preserving interaction, theming, accessibility, layout, and browser behavior.
24+
25+
## Shared controls and variants
26+
27+
- Prefer the core UI primitives in `apps/web/src/components/ui` over native controls or locally reconstructed primitives. In ordinary product UI, a raw `<button>` that recreates `Button`, a raw input that recreates `Input` or `InputGroup`, or a local trigger that recreates `Select`, `Toggle`, or `Menu` is a concrete finding.
28+
- Do not flag raw elements that intentionally implement a semantic row, tab, resize handle, swatch, image target, editor surface, or another interaction whose behavior or geometry differs from the core primitive.
29+
- When multiple call sites repeat the same durable geometry or treatment, prefer a named primitive size or variant. Examples include compact controls, micro icon actions, muted ghost actions, and glass actions. Keep contextual layout, width, and color at the call site.
30+
- Flag large call-site class strings that override a primitive's core height, radius, padding, focus ring, cursor, hit target, or base state colors. Prefer extending the primitive contract when the same pattern is genuinely shared.
31+
- Preserve accessibility and interaction semantics during migrations: focus-visible rings, disabled behavior, loading state, keyboard behavior, pointer cursor, `aria-*`, Base UI or Radix render/close props, and coarse-pointer hit targets.
32+
- Do not require tests for a tiny visual-only class migration. Require focused tests when primitive composition changes behavior, prop forwarding, state transitions, keyboard handling, or width/defaulting logic.
33+
34+
## CSS and Tailwind ownership
35+
36+
- Ordinary one-owner presentation belongs in the owning TS or TSX module as static Tailwind classes or owner-level CSS variables. Examples include local geometry, spacing, typography, backgrounds, borders, simple vendor pseudo-elements, and component-only positioning.
37+
- Keep global CSS when it is genuinely reusable or behaviorally complex: generated markdown or imperative DOM, custom elements and shadow roots, masks, shared or complex pseudo-elements, animations, glass composition, runtime theme variables, safe-area calculations, scrollbar-lane preservation, Electron drag regions, and browser/vendor integration. Simple owner-local pseudo-elements may still belong in the owning module.
38+
- Before calling a selector dead, trace literal, dynamic, generated, imperative, test, custom-element, and shadow-root consumers. Search both the emitted class string and any class-valued field names through their final DOM sink. A helper returning a class is not proof that it is rendered, and a missed downstream property read can make a deletion unsafe.
39+
- Flag duplicate declarations only after comparing cascade layer, selector specificity, inheritance, runtime theme scope, media/variant scope, and the final owning element. Textually identical declarations are not necessarily behaviorally redundant.
40+
- When moving CSS into Tailwind, preserve selector scope and cascade ownership. A utility at the owner is preferable to a fragile global override that depends on stylesheet order.
41+
- Do not request moving complex global behavior into arbitrary Tailwind merely to reduce `index.css`. Do not preserve ordinary one-owner CSS merely because it already exists globally.
42+
43+
## Themes and generated CSS
44+
45+
- Use the project variants for theme-only declarations:
46+
- dark-only declarations use `@variant dark`;
47+
- light-only declarations use `@variant light`;
48+
- raw `.dark` should remain only in the `dark` and `light` custom-variant definitions.
49+
- Preserve custom themes and runtime token bridges. Removing a variable or selector is safe only when all runtime, inspector, generated, and theme-palette consumers are accounted for.
50+
- Inspect emitted production CSS after unusual variants, arbitrary selectors, nested pseudo-elements, or attribute matching. Source syntax that looks valid is insufficient.
51+
- Flag malformed or empty emitted selectors such as empty `:is()` or `:not(:is())`, selector branches that can never match their own class attribute, and transformations that silently drop the intended rule.
52+
- Prefer source-level logic over clever selectors when behavior depends on consumer-provided class strings. Preserve `MenuPopup`'s current defaulting contract: a string `className` containing a `w-*`, `min-w-*`, or `max-w-*` utility after variant prefixes are stripped suppresses `min-w-32`; a string without one and a functional/non-string `className` keep the default. Arbitrary width values count as width utilities, and the consumer class must be merged last so it retains control. Do not replace this with a raw class-attribute substring selector.
53+
- Do not fail solely because a valid emitted selector is verbose or because a source rule uses an intentional custom property.
54+
55+
## Scroll and virtualized lists
56+
57+
- `ScrollArea` owns and masks its Base UI viewport. A virtualized list usually owns a native scrolling element and cannot automatically reuse viewport-specific `ScrollArea` behavior.
58+
- Repeated native or virtualized overflow fades should use the shared virtualized-scroll-fade contract rather than component-named mask selectors.
59+
- Preserve runtime top and bottom overflow state. Do not replace dynamic fades with an always-on static mask.
60+
- Preserve fade geometry and keep the native scrollbar lane opaque so the track and thumb stay visible and usable. A visually similar mask that fades the scrollbar is a regression.
61+
- Verify actual scroll behavior when changing virtualizers, masks, overflow ownership, or scrollbar selectors. Source-level class comparison is not enough.
62+
63+
## Visual and layout preservation
64+
65+
- Preserve responsive geometry, titlebar insets, panel and inline-preview modes, desktop Electron layout, light and dark contrast, clipping, radius, and composable shadows.
66+
- For meaningful visual changes, prefer available real-app evidence using the actual component and state. A mock recreation does not validate the real component. Light and dark evidence is useful when theme-sensitive styles change, but missing or inaccessible evidence alone is not a finding; report only a concrete regression supported by the diff, code, or available artifacts.
67+
- Do not treat a screenshot as proof of keyboard, overflow, scrollbar, responsive, or runtime-theme behavior. Pair visual evidence with source, computed-style, emitted-CSS, or interaction checks as appropriate.
68+
- Be alert to shared primitive color indirection. When a primitive routes icon color through a CSS variable, ensure migrated contextual icons retain their intended tone, including pressed and disabled states.
69+
70+
## Change discipline
71+
72+
- Review the pull request's changed scope and directly affected consumers. Do not turn a focused PR into a demand for unrelated legacy cleanup.
73+
- Prefer the smallest durable contract over a component-specific workaround or a broad abstraction with one consumer.
74+
- Preserve intentional exceptions and comments that explain browser, virtualizer, theme, or Electron constraints.
75+
- If a proposed cleanup cannot prove ownership or semantic equivalence, ask for evidence or leave it unchanged rather than guessing.
76+
- Select verification gates according to the changed behavior: typecheck or focused tests for typing and interaction contracts, production build and emitted-CSS inspection for Tailwind or selector transformations, and real-app evidence for meaningful visual behavior when available. These gates are complementary when applicable, but do not require every gate for tiny visual-only migrations or fail solely because an artifact the configured tools cannot produce is absent.
77+
78+
## Reporting
79+
80+
Report only concrete violations introduced by changed lines or behavior, plus pre-existing behavior that the patch directly makes relevant or worsens. Touching a large file does not make unrelated retained issues reportable. Prefer precise inline comments on the smallest relevant line range. Explain the broken behavior or ownership rule, not merely the preferred syntax, and state the smallest expected fix. A clear consistency or regression risk may fail the check. Do not fail for optional aesthetic preferences, harmless class ordering, or unrelated legacy code.
81+
82+
This check defaults to failure. When there are no findings, stop immediately and make the entire final response exactly `All clear` on one line. Do not add a title, explanation, punctuation, Markdown, JSON, or trailing analysis, and do not continue reasoning after deciding the review is clean.

0 commit comments

Comments
 (0)