Skip to content

Commit 68823f1

Browse files
committed
chore(upstream): record the review findings for the 2026-08-18 batch
1 parent 1a1aeec commit 68823f1

1 file changed

Lines changed: 84 additions & 10 deletions

File tree

.agents/upstream-review.md

Lines changed: 84 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1511,6 +1511,66 @@ included. `pnpm-lock.yaml` is untouched by this batch — no change set adds a d
15111511
| N10 | `13458e651` / `#7296` | adopted | `05c123968` | One `mx-0!` class centering the context usage meter's SVG. |
15121512
| 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. |
15131513

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+
15141574
### Verification
15151575

15161576
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
15231583
`EnvironmentId` into `ProviderService.test.ts` without using it. Confirmed dead upstream too,
15241584
so it is worth reporting rather than a merge artifact.
15251585

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.**
15301602

15311603
## Deferred register
15321604

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._
15371609

15381610
Upstream work that has been reviewed and consciously _not_ adopted yet, with
15391611
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,
15441616
re-evaluate each `Revisit when` against the current upstream head, and report
15451617
the outcome. See Phase 2.5 of the `review-t3-upstream` skill.
15461618

1547-
| ID | Upstream | Deferred on | Revisit when | Why deferred |
1548-
| --- | -------- | ----------- | ------------ | ------------ |
1619+
| ID | Upstream | Deferred on | Revisit when | Why deferred |
1620+
| ----- | --------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1621+
| 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

Comments
 (0)