Skip to content

Commit 879cf55

Browse files
committed
docs: record the 2026-08-12 eighth upstream batch and advance the cursor
1 parent 7725de3 commit 879cf55

1 file changed

Lines changed: 99 additions & 4 deletions

File tree

.agents/upstream-review.md

Lines changed: 99 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
remote: t3code-upstream
33
branch: main
4-
reviewed-through: "c196f422ed387a1cc2cdb671b0472782e5610339"
4+
reviewed-through: "b73232bdd31e83914a8a943960c7dc4b6390b39b"
55
reviewed-through-date: "2026-08-12"
66
---
77

@@ -699,11 +699,106 @@ function that silently returns nothing for some file queries. It fails as a
699699
false negative, not an error, which makes "I searched and found nothing" claims
700700
unsafe. Use `/usr/bin/grep` when a negative result is load-bearing.
701701

702+
## 2026-08-12 (eighth batch) — `c196f422ed387a1cc2cdb671b0472782e5610339..b73232bdd31e83914a8a943960c7dc4b6390b39b`
703+
704+
Twelve upstream commits, twelve independent change sets — no dependency chains
705+
this round. Eleven adopted onto `upstream/2026-08-12-batch`, one skipped. Ten
706+
cherry-picked clean; only `O1` conflicted.
707+
708+
The deferred register was empty going in, so there was nothing to re-evaluate,
709+
and nothing new was deferred — it stays empty.
710+
711+
Upstream is in polish mode: nine of the twelve are `fix`, mostly single-file
712+
alignment and overlap repairs. `git merge-tree` against `pylon` predicted the
713+
conflict set up front, which made the split between clean picks and manual work
714+
cheap to decide.
715+
716+
**`O1` is a product-direction change wearing a `feat` label.** It collapses the
717+
sidebar footer's three labeled rows into one icon row and turns the update pill
718+
into a round icon button that doubles as Check for updates. Ported by hand
719+
because it collided with Pylon three ways: it deletes `useCanGoBack` and makes
720+
Back always navigate to `/`, **reverting Pylon's own fix** for Back landing
721+
somewhere the user never came from; Pylon's `SidebarAccountDrainPill` has no
722+
upstream counterpart and had to stay in the footer stack; and the file also
723+
holds `PylonMark`, so a careless resolution was a branding risk. Upstream's
724+
removal of "Dismiss until next launch" was taken along with it — the pill is no
725+
longer a full-width banner competing with the sidebar, so there is nothing left
726+
to dismiss. `SidebarUpdatePill.tsx` was still byte-identical to upstream's
727+
parent, so that half was taken wholesale rather than merged.
728+
729+
`animate-spin` on the refresh icon was kept rather than converted to DotMatrix.
730+
It runs only while a check is actually in flight, so it is a bounded progress
731+
indicator rather than the continuous idle repaint Pylon's motion rules forbid
732+
(contrast `E3`, where upstream's forever-pulsing `animate-status-pulse` dot
733+
_was_ replaced).
734+
735+
**`O7` shipped with a real defect, fixed on this branch rather than carried
736+
in.** The new right-panel launcher claims bare B/T/F/D/P/A on a capture-phase
737+
`window` listener and treated an empty contenteditable as "not typing". Pylon's
738+
composer is a Lexical `ContentEditable` that is empty at rest, so with a thread
739+
open and the right panel empty, a message starting with any of those six
740+
letters lost its first keystroke to a surface opening instead — and
741+
`stopPropagation` meant nothing downstream could recover it. A focused text
742+
surface now always keeps its own keystrokes; the shortcuts still work when
743+
focus is outside a text surface, which is the case the feature is for.
744+
745+
`O9` is a genuine upstream bug fix (`#5051`) but **inert in Pylon** until Pylon
746+
owns a Clerk application — `E21` was skipped precisely so a fresh clone does not
747+
point at T3 infrastructure. Taken for drift reduction in shared code. Its added
748+
prose landed in a section Pylon had not rewritten, so the "Pylon Connect"
749+
rebranding and the removed `.env.example` recipe both survived; the bare `#5051`
750+
was qualified as an upstream issue link so it does not read as a Pylon issue.
751+
752+
Verification: typecheck clean across web, mobile, shared, and contracts. The
753+
server package reports **0 errors** — only `effect` diagnostic _suggestions_, all
754+
in files this batch does not touch. Note the pre-existing
755+
`HostPowerMonitor.ts(69,9)` error recorded under the 2026-08-07 second batch is
756+
gone; something since then fixed it. Tests: **web 2324 (244 files)**, **mobile
757+
657 (105 files)**, shared `connectAuth` 7, server `publicConfig` 12 — all
758+
passing. `vp lint` clean over all 33 changed TypeScript files and
759+
`vp fmt --check` clean over all 36 changed files.
760+
761+
`O11`'s bundled test asserts ≥4.5:1 contrast across every built-in palette, and
762+
it **passes against Pylon's F10-tuned palettes** rather than only upstream's —
763+
that was the open question when this was recommended, and it is closed. `O2`'s
764+
test reads `index.css` and regex-matches it; Pylon's `index.css` diverges
765+
(DotMatrix keyframes replaced `status-pulse`), but both markers it slices
766+
between survive, and it passes.
767+
768+
**Not verified in a real client.** `O1`'s compacted footer, `O7`'s launcher and
769+
its guard fix, `O11`'s themed Clerk surfaces, and `O12`'s double-click reset all
770+
have had no browser pass, and no mobile pass ran for `O3`/`O6`. `O1` and `O7`
771+
are the two worth looking at, since both changed interaction rather than only
772+
layout.
773+
774+
Tooling note: `vp lint` exits **0 even when it reports warnings**, so its exit
775+
code proves nothing. This session confirmed the command reports real findings by
776+
feeding it a deliberate unused variable before trusting a clean result on the
777+
changed files — worth repeating rather than reading silence as success. Separately,
778+
`vitest` parses a leading-dash test filter (`-chatIndexTitlebar`) as a CLI flag
779+
and dies; drop the dash.
780+
781+
| Change set | Upstream | Decision | Pylon reference | Rationale or revisit condition |
782+
| ---------- | --------------------- | -------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
783+
| O1 | `52e5a75a8` / `#6210` | adopted | `b0b11d966` | Sidebar footer compaction; update pill becomes a round icon button that also checks for updates. **Manual port** — kept Pylon's history-preferring Back and `SidebarAccountDrainPill`, dropped upstream's now-pointless dismiss. Revisit if the icon-only footer proves less discoverable than the labeled rows. |
784+
| O2 | `560d4a456` / `#6246` | adopted | `fecd9adb9` | The sidebar brand stopped rendering at the sidebar's own minimum width. Pylon's mark plus "Pylon" is narrower than T3's wordmark, so removing the container gate is strictly better here. |
785+
| O3 | `d37a9b09b` / `#6253` | adopted | `bda835962` | Mobile gains thread title regeneration, closing a real multi-surface gap — web and the server capability (`threadTitleRegeneration`) already shipped it. Touches `docs/user/thread-sidebar.md`, which is the right home. |
786+
| O4 | `63e6faef6` / `#6259` | skipped | `` | Vouches a T3 contributor in `.github/VOUCHED.td`. T3 contributor governance, no Pylon meaning. Same class as `F24` and `G4`. |
787+
| O5 | `5a8461480` / `#6252` | adopted | `60fdedec0` | Composer model picker aligns with prompt text. Landed inside `ChatComposer.tsx`, a deliberate Pylon divergence since `C14`, but merged clean. |
788+
| O6 | `e1378a1f4` / `#6154` | adopted | `6304fa2b9` | Android ordered lists stop escaping user bubbles. Gated to Android, where the shrink-to-fit layout bug lives. |
789+
| O7 | `b54bfc931` / `#6258` | adopted | `bbcb22eb4`, `560436ebd` | Right-panel empty state becomes a keyboard-first card launcher. Adopted, then its shortcut guard fixed on this branch — see the note above. Revisit if bare-letter shortcuts collide with anything else that lands in the panel. |
790+
| O8 | `6fd088af9` / `#6293` | adopted | `773487b9a` | The hosted onboarding header uses the shared `workspace-topbar` geometry instead of its own padding. |
791+
| O9 | `849bac894` / `#6285` | adopted | `59fe87506` | CLI OAuth parameters survive Clerk's sign-in redirect; the loopback flow routes through the hosted `/connect` page and rejects a corrupted port rather than silently downgrading. **Inert until Pylon owns a Clerk application** — taken for drift reduction. Revisit as part of any Pylon-owned Connect work, alongside `E21`. |
792+
| O10 | `e321667b1` / `#6314` | adopted | `31258d334` | The changed-files header stops overlapping its own controls; `sm:` breakpoints become `@[24rem]/changed-files` container queries, which is correct for a panel that is not viewport-width. |
793+
| O11 | `f131228a5` / `#6300` | adopted | `69acfbafc`, `7725de30a` | Clerk sign-in and profile surfaces inherit the live theme palette through CSS variables, so theme changes reach portaled Clerk UI without a remount. Its contrast test passes against Pylon's F10-tuned palettes. The doc comment's "T3 Code palette" was rebranded. |
794+
| O12 | `b73232bdd` / `#6320` | adopted | `78e415f87` | Double-clicking the sidebar rail resets its width — the reverse of drag-to-resize. Keeps upstream's `console.error` in the reset's catch; it is an error report rather than debug output, but flagged since the repo bans stray console calls. |
795+
702796
## Deferred register
703797

704-
_The register is currently empty: DEF-1 and DEF-2 were adopted on 2026-08-11
705-
(see the sixth batch above). Entries are removed once adopted or skipped, so an
706-
empty register means nothing is waiting._
798+
_The register is currently empty. DEF-1 and DEF-2 were adopted on 2026-08-11
799+
(see the sixth batch above), and the 2026-08-12 eighth batch deferred nothing
800+
new. Entries are removed once adopted or skipped, so an empty register means
801+
nothing is waiting._
707802

708803
Upstream work that has been reviewed and consciously _not_ adopted yet, with
709804
the condition that should trigger a fresh look. Entries stay here until they

0 commit comments

Comments
 (0)