You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .agents/upstream-review.md
+84-10Lines changed: 84 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1511,6 +1511,66 @@ included. `pnpm-lock.yaml` is untouched by this batch — no change set adds a d
1511
1511
| N10 |`13458e651` / `#7296`| adopted |`05c123968`| One `mx-0!` class centering the context usage meter's SVG. |
1512
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
1513
1514
+
### Inherited defects found by review, deferred to a follow-up
1515
+
1516
+
An `xhigh` review of the integration branch confirmed all five Pylon-first
1517
+
resolutions are clean — including the `BrowserDeviceToolbar` equivalence claim,
1518
+
which holds: upstream's `cn(aspectRatio !== null && …)` guards are constant
1519
+
inside each ternary branch. It also surfaced two defects that arrived **with**
1520
+
the upstream commits and exist in upstream `main` too. Both were verified
1521
+
against the source and consciously **not** fixed in this batch, so the adoption
1522
+
stays faithful and the fixes get their own review. Tracked as DEF-3 and DEF-4.
1523
+
1524
+
1.**`#6466` narrowed `truncated` without narrowing what reads it.** Review-thread
1525
+
comments went from `first: 100` plus cursor-following to `first: 10`
1526
+
(`gitHubPullRequestJson.ts:696`), so `truncated`
1527
+
(`GitHubPullRequestCli.ts:1589`) now means "some thread has an 11th reply"
1528
+
rather than "the conversation is short of the host". Three readers were
1529
+
written against the old meaning:
1530
+
-`PullRequestDetailPanel.tsx:1088` gates `approvalCount` on
1531
+
`!detail.commentsTruncated`, so **`#7077`'s approval badge disappears** on
1532
+
any pull request with one long thread. The verdicts it counts come from
1533
+
`gh pr view --json reviews`, which the provider's own comment
1534
+
(`GitHubPullRequestProvider.ts:348`) says is never truncated — the gate
1535
+
keys on a signal unrelated to the data it guards.
1536
+
-`pullRequestDetail.logic.ts:634` appends the truncation notice to the
1537
+
handoff prompt on those same pull requests.
1538
+
-`pullRequestDetail.logic.ts:449` serialises `thread.comments` into the
1539
+
agent prompt, now the **oldest 10** of a thread where it used to be up to 1000. `#6466`'s new paging is UI-only state inside `ReviewThreadCard` and
1540
+
never reaches the prompt builder, so "Fix in a thread" hands the agent the
1541
+
opening of a discussion and not its resolution.
1542
+
1543
+
Note the gate is defensible for GitLab, Bitbucket, and Azure DevOps, whose
1544
+
`commentsTruncated` derives from conversation reads that do carry verdicts —
1545
+
so the fix belongs at GitHub's `truncated`, not at the shared gate.
1546
+
1547
+
2.**`#6466`'s GraphQL cost estimate only ratchets upward.**`query` reserves the
1548
+
_previous_ query's cost (`githubGraphQlBudget.ts:96`) and `observe` discards
1549
+
any response whose `remaining` is `>=` the stored value
1550
+
(`githubGraphQlBudget.ts:126`). Reserving always pushes the local figure
1551
+
below GitHub's true remaining, so an honest response always looks "higher"
1552
+
and is thrown away with its `cost`, `limit`, and `remaining`. The estimate
1553
+
updates only when a query costs _more_ than the last, so the 12-point
1554
+
review-threads read poisons every subsequent 1-point read for the window.
1555
+
The out-of-order guard is right in intent; it just compares against a
1556
+
reserved value rather than the last observed one. A failed `gh` call leaks
1557
+
its reservation outright, since `observe` runs only on the success path.
1558
+
Bounded by the hourly reset, and it fails safe — reads pause early rather
1559
+
than quota being overspent.
1560
+
1561
+
**One review finding was dismissed.** A task whose first liveness event is a
1562
+
status-free `progress` cannot register under `#7172`'s new guard
1563
+
(`ThreadBackgroundLiveness.ts:136`). That matches the module's documented
1564
+
intent — "After a server restart the registry is empty until new task events
1565
+
arrive, which matches reality: orphaned background work is not live" — so it is
1566
+
behavior, not a defect.
1567
+
1568
+
**One nit accepted.** The `<td>` row label whose `title` was dropped in
1569
+
`18fbcc8d5` cannot clip in its own cell, but the table sits inside a
1570
+
`w-[min(25rem,calc(100vw-2rem))]` popover with `overflow-clip`, so at three or
1571
+
more accounts on a narrow viewport it can be cut off with no tooltip to recover
1572
+
it. Low severity; folded into the DEF-3/DEF-4 follow-up if convenient.
1573
+
1514
1574
### Verification
1515
1575
1516
1576
Typecheck clean across `contracts`, `shared`, `client-runtime`, `web`, `desktop`, `server`
@@ -1523,17 +1583,29 @@ One new lint warning arrived with N5 and was removed in `4719407a6`: `#7083` imp
1523
1583
`EnvironmentId` into `ProviderService.test.ts` without using it. Confirmed dead upstream too,
1524
1584
so it is worth reporting rather than a merge artifact.
1525
1585
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).
1586
+
**Browser pass**, against the branch with a database seeded from `~/.pylon-code` and live
1587
+
GitHub data. Confirmed: the new **Settings → Integrations** page lists in the nav, with
1588
+
`#7083`'s **Agent browser access** enabled and `#7082`'s four client-local defaults dimmed
1589
+
as one block reading "Only available in the desktop app." — the intended split, since one is
1590
+
a `ServerSetting` and the others are desktop-local Chromium preferences. `#7209` was checked
1591
+
at runtime rather than by lint alone: **zero** native `title` attributes remain on intrinsic
1592
+
elements in the rendered DOM. `#7077`'s Reviewers row renders above the conversation and the
1593
+
Summary/Timeline/Code tabs load.
1594
+
1595
+
**Two items were not reachable.**`#7219`'s usage breakdown never finished loading against
1596
+
the seeded 334 MB database (the page reported one request waiting longer than 15s), and no
1597
+
pull request in reach carried either an approval or an 11-comment thread, so `#6466`'s **Load
1598
+
more comments** and `#7077`'s verdict rows were not exercised — which is also why DEF-3's
1599
+
visible symptom could not be reproduced live and rests on source reading.
1600
+
1601
+
**Mobile (N7, N8) was not exercised at all.**
1530
1602
1531
1603
## Deferred register
1532
1604
1533
-
_The register is currently empty. DEF-1 and DEF-2 were adopted on 2026-08-11
1534
-
(see the sixth batch above); every batch since, through 2026-08-18, deferred
1535
-
nothing new. Entries are removed once adopted or skipped, so an
1536
-
empty register means nothing is waiting._
1605
+
_DEF-1 and DEF-2 were adopted on 2026-08-11 (see the sixth batch above). The
1606
+
register was empty from then through 2026-08-18, when the batch review added
1607
+
DEF-3 and DEF-4 — both inherited upstream defects, not upstream work awaiting a
1608
+
decision. Entries are removed once adopted or skipped._
1537
1609
1538
1610
Upstream work that has been reviewed and consciously _not_ adopted yet, with
1539
1611
the condition that should trigger a fresh look. Entries stay here until they
@@ -1544,5 +1616,7 @@ Every review must read this register before reporting new candidates,
1544
1616
re-evaluate each `Revisit when` against the current upstream head, and report
1545
1617
the outcome. See Phase 2.5 of the `review-t3-upstream` skill.
1546
1618
1547
-
| ID | Upstream | Deferred on | Revisit when | Why deferred |
| DEF-3 |`ba46f922a` / `#6466` + `c7e6d711d` / `#7077`| 2026-08-18 | Immediately — this is queued Pylon work, not a wait on upstream. Close it when a Pylon branch narrows GitHub's `truncated` to the thread-list cursor and feeds the full thread to the prompt builder, or when `git log bab4b6f02..t3code-upstream/main -- apps/server/src/pullRequest/GitHubPullRequestCli.ts apps/web/src/components/pullRequest/pullRequestDetail.logic.ts` shows upstream fixed it first. |`truncated` narrowed to "a thread has an 11th reply" while three readers still treat it as "the conversation is short of the host": the approval badge is suppressed, the handoff prompt gains a spurious notice, and the agent receives only a thread's oldest 10 comments. Deferred to keep the adoption PR faithful; see the 2026-08-18 batch notes. |
1622
+
| DEF-4 |`ba46f922a` / `#6466`| 2026-08-18 | Same follow-up branch as DEF-3. Also re-check on any upstream change to `apps/server/src/sourceControl/githubGraphQlBudget.ts`. |`observe` compares GitHub's true `remaining` against a locally-reserved figure, so honest responses are always discarded and the cost estimate only ratchets upward; a failed call leaks its reservation. Fails safe and resets hourly, which is why it is queued rather than blocking. |
0 commit comments