Skip to content

Commit 1a1aeec

Browse files
committed
chore(upstream): record the 2026-08-18 T3 Code review batch
1 parent 4719407 commit 1a1aeec

1 file changed

Lines changed: 100 additions & 3 deletions

File tree

.agents/upstream-review.md

Lines changed: 100 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
---
22
remote: t3code-upstream
33
branch: main
4-
reviewed-through: "bab4b6f02b8bdaf15fd32636a97f69ff657cec50"
5-
reviewed-through-date: "2026-08-16"
4+
reviewed-through: "82b8a9380298509d68170961d9717be62836e490"
5+
reviewed-through-date: "2026-08-18"
66
---
77

88
# T3 upstream review log
@@ -1431,10 +1431,107 @@ dies with `no such column: continued_from_thread_id`. Pylon's own runtime home,
14311431
40 PinOrderKey sequence. A fresh database built by this branch applied 37–44 cleanly with 36
14321432
retired, so the renumbering holds end to end.
14331433

1434+
## 2026-08-18 — `bab4b6f02b8bdaf15fd32636a97f69ff657cec50..82b8a9380298509d68170961d9717be62836e490`
1435+
1436+
Eleven upstream commits, eleven change sets, one PR each. **All eleven adopted** onto
1437+
`upstream/2026-08-18-batch`. `git cherry` reported every one absent from Pylon, so nothing
1438+
was patch-equivalent. The deferred register was empty going in and stays empty.
1439+
1440+
**N1 (`#6466`) is the most valuable change here and applied without a single conflict.**
1441+
One GitHub pull request detail load was spending 104 GraphQL points: it asked for 100
1442+
replies per review thread, followed every reply cursor, and refreshed every minute. The
1443+
commit adds an Effect cooldown service keyed by provider **plus host**, native rate-limit
1444+
detection for GitHub, GitLab, Bitbucket, and Azure DevOps, a GitHub GraphQL cost budget
1445+
that reserves the last 10% for interactive actions, and 10-reply pagination behind a **Load
1446+
more comments** button. Upstream measured 104 → 14 points on a 44-thread pull request.
1447+
Pylon shipped the multi-provider pull requests page in `9a886cc9d`, so this is quota
1448+
protection for a surface users already have. **Three behavior changes ride along and were
1449+
accepted deliberately:** long threads paginate instead of loading eagerly, live refresh
1450+
slows from 1 minute to 5, and the idle cutoff moves from 5 minutes to 6.
1451+
1452+
**N3 (`#7209`) carried the only real integration cost.** It adds a
1453+
`t3code/no-native-title-tooltip` oxlint rule at **error** severity and migrates 33 native
1454+
`title` tooltips to `Tooltip`/`TooltipTrigger`/`TooltipPopup`. Because the rule lands at
1455+
error, upstream's migration is not sufficient on its own — the rule also fires on
1456+
Pylon-only surfaces upstream cannot see. Running it found **four sites in one Pylon-only
1457+
file**, `ProviderUsageMatrix.tsx`, fixed in `18fbcc8d5`. Three became styled tooltips; the
1458+
row-label cell carries `whitespace-nowrap` **without** truncation, so its `title` only
1459+
repeated text already fully visible, and it was dropped rather than converted. Predicting
1460+
the violation set by grep was unreliable — a naive scan over-reported by flagging type
1461+
annotations (`<void>`, `<typeof>`) and `title` props on custom components. Running the rule
1462+
is the only trustworthy count.
1463+
1464+
**N5 (`#7083`) is stacked on N4 (`#7082`)** and its three conflicts against `origin/pylon`
1465+
all evaporated once N4 was applied first: they were only ever "this file does not exist
1466+
yet". Applying strictly in upstream chronological order also made N6 (`#7077`) clean, which
1467+
conflicts on two files when probed on its own because N3 rewrites them first.
1468+
1469+
Conflicts and adaptations, all resolved Pylon-first:
1470+
1471+
- **`ServerUpdateAction.tsx`** (N3) — upstream replaced the same span with a plain
1472+
destructive dot. Kept Pylon's `<DotMatrix state="error">`, took the tooltip wrapper.
1473+
- **`Sidebar.tsx`** (N3) — the "Dismiss Woke notification" pill. Upstream's version carries
1474+
`text-amber-700 dark:text-amber-300`; Pylon's themed `text-warning` token stays. Only the
1475+
tooltip was adopted. Verified no amber/warning drift landed elsewhere in the file.
1476+
- **`BrowserDeviceToolbar.tsx`** (N3) — Pylon's aspect-ratio lock button from `#6509`.
1477+
Upstream's `cn(aspectRatio !== null && …)` guards are constant inside each ternary branch,
1478+
so they say exactly what Pylon's direct classes say; Pylon's plainer form was kept.
1479+
- **`SettingsPanels.logic.test.ts`** (N4) — both sides append `describe` blocks at the file
1480+
tail, so the merge misaligned the closing braces. Both blocks kept.
1481+
- **`CodexSessionRuntime.test.ts`** (N5) — branding. Upstream turned the
1482+
`CODEX_DEFAULT_MODE_DEVELOPER_INSTRUCTIONS` constant into
1483+
`codexDefaultModeDeveloperInstructions(hasBrowserTools)`. Took the function, kept Pylon's
1484+
`/Pylon/` assertion.
1485+
1486+
**Two Pylon-first fixes beyond conflict resolution** (`979d9558c`):
1487+
1488+
1. `#7083` added `NodeAssert.doesNotMatch(instructions, /T3 Code collaborative browser/)`.
1489+
Pylon renamed that heading to "Pylon collaborative browser" long ago, so the assertion
1490+
passed **vacuously** — it proved the absence of a string that is never present on any
1491+
code path. Repointed at Pylon's actual heading, where it now has teeth. Note the sibling
1492+
`/t3-code/` assertion is correct as-is: that is the MCP **server name**, a compatibility
1493+
identifier, not product copy.
1494+
2. The new `IntegrationsSettings.tsx` module comment named T3 Code. Rebranded.
1495+
1496+
`routeTree.gen.ts` is generated, so its diff was checked rather than trusted: the route
1497+
imports in the merged file match the route files on disk exactly, `settings.integrations`
1498+
included. `pnpm-lock.yaml` is untouched by this batch — no change set adds a dependency.
1499+
1500+
| Change set | Upstream | Decision | Pylon reference | Rationale or revisit condition |
1501+
| ---------- | --------------------- | -------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1502+
| N1 | `ba46f922a` / `#6466` | adopted | `08c8b390d` | Shared per-provider/host rate-limit cooldown, GitHub GraphQL cost budget reserving the final 10% for user actions, and paginated review-thread replies. 104 → 14 GraphQL points on a 44-thread PR. Clean cherry-pick across 41 files. Contract change: new `pullRequests.threadComments` RPC. |
1503+
| N2 | `82b8a9380` / `#7172` | adopted | `5f5efc3fa` | A late `task.progress` carrying no `status` was re-adding an already-idle task to the live set, leaving the sidebar on **Working** with zero live agents. Status-free progress can now refresh a live task but never resurrect a dead one. |
1504+
| N3 | `fee10def1` / `#7209` | adopted | `3dde64f61` | New `no-native-title-tooltip` oxlint rule at error severity plus the migration of 33 sites. Three Pylon conflicts above; four Pylon-only violations fixed separately in `18fbcc8d5`. |
1505+
| N4 | `949feb61e` / `#7082` | adopted | `0e3fd4617` | New **Settings → Integrations** page: default preview viewport, zoom, appearance, and floating-preview auto-show. Renders disabled on web clients because these are desktop-local Chromium preferences — the correct multi-surface call, made upstream. |
1506+
| N5 | `cd096b9ad` / `#7083` | adopted | `cf36558bd` | **Agent browser access** toggle, on by default. Withholds the MCP credential in `prepareMcpSession`, the single place one is minted, so one branch covers all five providers. Takes effect on new sessions only; a running agent keeps its credential for up to 24h. |
1507+
| N6 | `c7e6d711d` / `#7077` | adopted | `9f208cab3` | A review verdict becomes a first-class timeline row with the reviewer's avatar instead of a grey lowercase word inside a collapsed comments group, and the empty markdown block beneath an approval is gone. `COMMENTED`-only reviews still group as conversation. |
1508+
| N7 | `cebac353d` / `#7321` | adopted | `03579737e` | Mobile rendered structured-input options as label-only chips while web and desktop showed descriptions the contract already carried. Closes a multi-surface gap. |
1509+
| N8 | `33a8b07dd` / `#7276` | adopted | `a6b9659a0` | `SymbolView` does not redraw when only the SF Symbol name changes, so the Snoozed and Settled shelf chevrons froze at first render pointing opposite directions. Now one `chevron.down` plus a state-driven 180° transform. No continuous animation. |
1510+
| N9 | `a4cc1367b` / `#7219` | adopted | `c9815194a` | The usage breakdown table was `.slice(0, 8)` over a window that can hold 90 periods, with nothing on screen saying so. Cap removed, newest first. |
1511+
| N10 | `13458e651` / `#7296` | adopted | `05c123968` | One `mx-0!` class centering the context usage meter's SVG. |
1512+
| N11 | `3723722f7` / `#7364` | adopted | `1d1851a91` | Bot cleanup removing a second `expect(only()).toBe(true)`. Verified genuinely redundant — `claimWorkspaceBasenameLookup` returns a pure comparison, so the repeat asserts nothing new. Adopted only to keep the file aligned with upstream and conflict-free later. |
1513+
1514+
### Verification
1515+
1516+
Typecheck clean across `contracts`, `shared`, `client-runtime`, `web`, `desktop`, `server`
1517+
(exit 0; remaining output is pre-existing Effect `suggestion` diagnostics) and `mobile`
1518+
separately. Targeted tests: **server 35 files / 707 tests**, **web 32 files / 245 tests**,
1519+
**desktop 1 / 7**, **oxlint plugin 1 / 11** — all passing. `vp lint` over the touched trees
1520+
reports **0 errors**; `vp fmt --check` clean over 2595 files.
1521+
1522+
One new lint warning arrived with N5 and was removed in `4719407a6`: `#7083` imports
1523+
`EnvironmentId` into `ProviderService.test.ts` without using it. Confirmed dead upstream too,
1524+
so it is worth reporting rather than a merge artifact.
1525+
1526+
**Not verified in a real client.** This batch was integrated and checked statically only. The
1527+
user-visible surfaces that would most repay a pass are the new Settings → Integrations panel
1528+
(N4/N5), the pull request detail (N1's Load more comments and N6's verdict rows), and the two
1529+
mobile changes (N7, N8).
1530+
14341531
## Deferred register
14351532

14361533
_The register is currently empty. DEF-1 and DEF-2 were adopted on 2026-08-11
1437-
(see the sixth batch above); every batch since, through 2026-08-16, deferred
1534+
(see the sixth batch above); every batch since, through 2026-08-18, deferred
14381535
nothing new. Entries are removed once adopted or skipped, so an
14391536
empty register means nothing is waiting._
14401537

0 commit comments

Comments
 (0)