|
1 | 1 | --- |
2 | 2 | remote: t3code-upstream |
3 | 3 | branch: main |
4 | | -reviewed-through: "c196f422ed387a1cc2cdb671b0472782e5610339" |
| 4 | +reviewed-through: "b73232bdd31e83914a8a943960c7dc4b6390b39b" |
5 | 5 | reviewed-through-date: "2026-08-12" |
6 | 6 | --- |
7 | 7 |
|
@@ -699,11 +699,106 @@ function that silently returns nothing for some file queries. It fails as a |
699 | 699 | false negative, not an error, which makes "I searched and found nothing" claims |
700 | 700 | unsafe. Use `/usr/bin/grep` when a negative result is load-bearing. |
701 | 701 |
|
| 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 | + |
702 | 796 | ## Deferred register |
703 | 797 |
|
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._ |
707 | 802 |
|
708 | 803 | Upstream work that has been reviewed and consciously _not_ adopted yet, with |
709 | 804 | the condition that should trigger a fresh look. Entries stay here until they |
|
0 commit comments