diff --git a/.agents/upstream-review.md b/.agents/upstream-review.md index 62b7d8d5a9..813fc13bc8 100644 --- a/.agents/upstream-review.md +++ b/.agents/upstream-review.md @@ -17,6 +17,41 @@ The maintainer authorized compatible catch-up and routine adaptations that prese [Upstream catch-up cycle #865](https://github.com/pylon-code/pylon/issues/865) is active. Its frozen range is `e67abcf798f8c4d8458755e3b4dde02c2c1f628b..ab099178a7b7f9728843e90fc95ed90bb61d710d` (127 sources at the 2026-09-27 fetch). The issue owns the next source dispositions; this cursor does not classify that new range. Later T3 arrivals belong to a later cycle. Oh My Pi remains explicitly excluded. +## Cycle #865 progress through `0fcd5f9061` + +The cycle covers the original bound `ab099178a7b7f9728843e90fc95ed90bb61d710d` (127 sources) and the separately frozen successor `0fcd5f90611451cca842689faea53b5450c022da` (32 sources). Earlier groups and their dispositions are in the [issue](https://github.com/pylon-code/pylon/issues/865). The groups below landed on 2026-09-30, each with green final-head CI; none had a rendered-client pass. Release-only sources `2cbc24fcae2b5649d7b60b68da72053a37fa82d5` and `ff1db030b179ef712cacc0098366d976e2877f45` and the CodeRabbit config `63b61e647c8d973e4378a360cbf576d914f5564d` are skipped; the Cursor Keychain follow-ups `d6802b4acfbb6bfb669e0fa225539920622f7670` and `679c34c096193446ceed62e633387d91fe2cfff8` stay with the deferred Cursor account-history reader. + +| Group | Sources | Outcome and remaining scope | Pylon PR / verification | +| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Local-path remotes, OTLP configuration, Grok crash retirement | `38f3c62304bfe79ea6c9f75a17afb732b555f48d`, `fd996d15e220144ac6e66670169aa87d074ce846`, `2598ce7a5ab0b25e32e0b67b084a9ec23cd8144f`, `74ee5153e05eb183dabec413ff9025d83d2058e4`, `294dd123410c77eead2810a052c31fb0cfd3e0c1`, `050cfad04f673fb092630614b8f7e82000b43ea5` | All adopted. Legacy PR link projection ignores local filesystem remotes; standard OTLP endpoint/header/protocol variables, per-signal `none`, desktop and WSL variables, and trace-proxy self-tracing suppression; crashed Grok sessions retire before a deliberate resume with Pylon incarnation ownership kept. Desktop main metrics stay disabled. | [#920](https://github.com/pylon-code/pylon/pull/920), [#921](https://github.com/pylon-code/pylon/pull/921), [#923](https://github.com/pylon-code/pylon/pull/923); test-only follow-up [#922](https://github.com/pylon-code/pylon/pull/922). Final-head CI green. | +| Web idle work | `6989856aa630611dd7d6dcc8cfe9f97456816284`, `ed57bed8e71b2e89a9350c94bda0dacc71cd4817` | Adopted; the modifier guard lives in a DOM-free tracker because Pylon's web tests have no jsdom. Upstream's latency figure is not claimed. | [#926](https://github.com/pylon-code/pylon/pull/926); focused test, web typecheck. | +| Web chat, workspace and file links | `29abbf9b424b122c52bb20dccffac68bee367c09`, `eeea71a88108c375c04853f58c298a518a54acaf`, `dd582dee36976ccfd2a896cf50c3ee957ca7b9be`, `916ec94f93da686303f878d506a760efd13506c1`, `88fbc2cac77ff2bf0d406c44754ecd8014976f5f`, `55ec55b1fb2e65f2736ff8420ae0373210c1911e` | All adopted or adapted: stable collapsed composer labels, draggable empty workspace, offline servers no longer read as updates, question text on user-input rows, model ids stay out of file chips, workspace-root links open the explorer. | [#924](https://github.com/pylon-code/pylon/pull/924); 329 focused tests. | +| Chat terminal action and chat width | `66129c6fd518aa01d873ebb47060b41c17312d60`, `04c15f34b756aadbff4c93ff07a217fa2398e5d5`, `295d7cba09bb4b4084482a74b5a42a0cac72a0b1` | First two adopted (Run in terminal through `runProjectScript`; Chat width setting, default Comfortable). `295d7cba09` not applicable: it fixes upstream's client-side queue (`cc839c42b1`, deferred product decision in #736); Pylon's server follow-up queue already delivers with the thread closed. | [#925](https://github.com/pylon-code/pylon/pull/925); 873 focused tests. | +| PR badges, tooltips, agents banner, usage summary | `0fcd5f90611451cca842689faea53b5450c022da`, `60cb7d180d9ebdd1010460ccd94cdfad1ec83042`, `df9826f0806cc4874cd79f24a42a1e9e506030c2`, `2a23c30ea60854cb17bec1a9d248032207c5d6b2`, `d15210cd3da79f9a1a495a6309d912d76362a046`, `d2c9281b8112dc3b2991642c4bdb985e4b08b9bb`, `ed809f7ad274ebccdfbf029ccfd7ff2582fd486a` | Five adopted/adapted. `d2c9281b81` already covered (Pylon's control carries `text-xs`). `ed809f7ad2` adopted with the token migration in #942 (`text-4xs`/`text-5xs`). | [#927](https://github.com/pylon-code/pylon/pull/927), [#942](https://github.com/pylon-code/pylon/pull/942). | +| Usage keyboard navigation and accessibility | `daafcc4a972b25eb762962cb72575b1a2e583d61`, `393d595984f66df08504e1659997e12ad551bce9` | Adapted without jsdom. `393d595984` partial: `ConnectionFormField` (upstream #12364) is absent, so labels are fixed inline; the jsdom switch test is excluded. Default `Mod+Shift+3/4` period shortcuts collide with macOS screenshots (upstream default, rebindable). | [#938](https://github.com/pylon-code/pylon/pull/938); 1,035 web tests. | +| Sync status timing and sorting | `ab70c8943f48c08e67e3597f62941c169bc58c16`, `6f97b0f66a51fbafabd54a5616da8827ebdf6020` | Adopted: 400ms show/minimum-visible sync status with raw phase kept for gating; precomputed sort keys shared by web and mobile. | [#935](https://github.com/pylon-code/pylon/pull/935); 289 focused tests. | +| Mobile feed, composer, Connect removal copy | `ecd3237b184e87af5d744a9dc28422cc1eb68e1a`, `dab9561cae8817bea24442c1dc7e28996de9c52e`, `ba79610d166dcc7a9b8beb013d18304bc6261307`, `525af2d1ad4b6de847ea658c37a081fd7afe8ef6`, `595a1e1f537f403eba408817c2aba35e61c2ac29` | First three adopted/adapted with Pylon Connect copy. `525af2d1ad` deferred and `595a1e1f53` not applicable: both need upstream's LegendList v2 Home (`151324b2c0`, deferred in #736). | [#928](https://github.com/pylon-code/pylon/pull/928); 184 focused tests. | +| Android usage widget, text-size scaling, native autolinks | `59abcd67ac2c54bd63a422e92fa2e31b2c667b6d`, `7a12aff471ffe2b22b9fee495b04b32c43f45a37`, `fe6388f01d5ae9f9db43079c6f5b2c31869067ca`, `81e0491d2bdec153bf1ee12d4e1deab3909b7428` | Widget adapted (scrolling list on 12L+, older Android keeps the fitted layout). Scaling partial: Pylon sizing helper only; `Material*` hunks need `e106fe95cc` (skipped as a Pylon product choice in #736). Autolink patch adopted on registry 0.5.8 — the `deps/` tarball override is npm-only and unused by pnpm; needs a native build. | [#930](https://github.com/pylon-code/pylon/pull/930), [#933](https://github.com/pylon-code/pylon/pull/933); 403 mobile tests; Kotlin not compiled locally. | +| Per-thread auto-settle switch | `0109670411d13b9e380766e98b386b2f756ecf5b` | Adapted: migration 067, `threadAutoSettleOptOut` capability, default unchanged on replay. | [#931](https://github.com/pylon-code/pylon/pull/931); 87 server tests, six typechecks. | +| node-pty upgrade, Windows terminal startup, Linux URL handler | `4923ff417f15fe1930fbb679e548706b55f7cde8`, `ea7d46ac107e6a3461b81065ebc86dfd5483095f`, `b528a701102f95089544596856a3f208f4404613`, `b21f3b71913370a1a650a61fd9082f992d40e657`, `7733bc839e23e19467a70b11a0bcedf6ffe8f1a3` | node-pty chain adopted; prebuild validation already covered (test added). URL handler partial: MIME cache refresh adopted, icon copy excluded because Pylon installs a per-channel icon. | [#929](https://github.com/pylon-code/pylon/pull/929), [#932](https://github.com/pylon-code/pylon/pull/932); Windows not run locally. | +| Bitbucket credentials | `5da55957d48dbd79c1a05b72bdf2479ae0956b1c` | Adapted: stored in `ServerSecretStore`, redacted to clients, `bitbucketCredentials` capability, unusable tokens refused on save. | [#936](https://github.com/pylon-code/pylon/pull/936); 112 focused tests plus RPC redaction test. | +| Transcript usage and OpenCode Go limits | `adfc9240eab7c5db376a87591b497d8144289257`, `1a553d0f5dd2aa39a64895ec770dc51ef1448b1a` | Adopted; credential fingerprint uses Pylon's JSON key format. | [#940](https://github.com/pylon-code/pylon/pull/940); 132 focused tests. | +| Theme tokens | `315fcca10a826d8aa1cbdffc3ef5b5eb5a1e2f9d`, `f26ee083fe41720207fb10616359500dcecc19d3` | Completes the #908 partial and adapts the appearance-class migration across 131 files without taking upstream files. Excluded: `shadcn/no-raw-colors` and `shadcn/no-arbitrary-values` (Pylon has no `@shadcn/lint`). | [#942](https://github.com/pylon-code/pylon/pull/942); 6,079 web tests; no rendered-client pass. | +| Effect suggestion cleanup and shadcn class lint | `568c9bc4d0ef0dddf74d813619c9877bd35624d7`, `80fc23ac32cd8fe5011a94420cff1f469367f1fc` | `568c9bc4d0` adapted: the same mechanical rewrites applied to Pylon's own 194 files, `schemaNumber` off as upstream, no schema changed. `80fc23ac32` skipped: it enables `shadcn/no-unknown-classes` and `shadcn/require-static-classes`, and Pylon has no `@shadcn/lint`. | [#944](https://github.com/pylon-code/pylon/pull/944); eight package typechecks, CI suites. | + +The cursor stays at `e67abcf798` until these have a maintainer decision or a recorded deferral: + +| Group | Sources | State | PR | +| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | +| Claude banked resets | `3412097bff7ffa62ef79e735c65d1e5cff71c356` | Ported but unmerged: first account-changing call on a private Anthropic endpoint, `cedar_ember=1` added to the shared usage read unverified live, and no CLI user agent. | Draft [#934](https://github.com/pylon-code/pylon/pull/934) | +| Connect tunnel cleanup | `8d7b5e998c72b4674326cbac7d23bafe9b222668`, `d23eab13d9d91697c5d4e7a458213b3f6473bc96`, `a727d1d97690c9bb12cee5760e91cfd1aa7c017d` | Ported but unmerged: additive relay migration and reaper shipped `off`; hourly cron kept. Merge deploys the production relay, whose deploy workflow currently fails at `alchemy cloudflare bootstrap` (command moved). | [#937](https://github.com/pylon-code/pylon/pull/937) | +| Codex protocol 0.156–0.159 | `567783ecdc658c8bf86c4c4980df5df8ebdd9037`, `d5d48742c9ab00dff82fe8bcbc8da0ba68748959`, `422248515a1eebff607b44d5abef91e13f6228fc`, `451afcb22d93f06cb24f9bc16703404564952553` | Ported but unmerged: raises the Codex floor to 0.156 and removes count-based rollback for legacy-history threads. Manifest compatibility ranges excluded (pipeline `96c4bfa0a2`/`d4cd7d5c33` held). | [#939](https://github.com/pylon-code/pylon/pull/939) | +| Model manifest | `72330e22c0d08159641ab10579eb75393c4d95b6`, `5e83e99c95411c4da9a23600ee34b3621b2cd275` | Ported but unmerged: differs from the maintainer's local Sonnet 5.5 edit (profile, minimum version, alias); also de-currents GPT-6 Sol. | [#941](https://github.com/pylon-code/pylon/pull/941) | +| Desktop background sync | `99641fd09a509feb644b3c8ef718c12c60cf436c` | Not ported: keeps every running thread's detail stream mounted with no cap, against #926's trimming. | — | +| OpenCode v2 incompatible | `76fa23df2ef09c8d9624cc6ce1273d32452b3d1c` | Not ported: needs upstream's compatibility-advisory pipeline and reverses #916's acceptance of the v2 serve line. | — | +| Managed ChatGPT authentication | `27bdf1aa14e6b946b72fb7013062084ca70796a6`, `8792f95762092ea33e74d41a07e8818befd84970` | Not ported: needs `7e65b226e7` (#12983) and the compatibility cohort, duplicates `ProviderSignInDialog`, and depends on OpenAI enabling token sharing for a Pylon OAuth client. | — | +| Device panel 3D and fold controls | `46f3c2ca2c99ceab0547452ac863232944621fce`, `9957349c0a066a9efc657600fcb901c9b9cca34b`, `7b84431161a64c9f9e9b57637dec23474a1b4236` | Not ported: need the 3D workspace (`78af372cf4`, deferred product decision in #736) and `expo-device-hub` 0.12.0 with native verification. | — | + ## Latest cycle [Upstream catch-up cycle #736](https://github.com/pylon-code/pylon/issues/736) classified all 481 sources in `bbedad0278bbf753503184c00e0c09a0eab6679c..e67abcf798f8c4d8458755e3b4dde02c2c1f628b`. Its seven source tables and later reconciliation comments provide the complete disposition record. Merged implementation PRs include chat/Relay reliability, provider and mobile fixes, Forgejo, pull-request workflows, and UI improvements; each PR holds its verification and exclusions. The final source audit records deliberate partials and revisit triggers, including mobile server-update targeting, automatic title refinement, Android Agent behavior settings, and untrusted Forgejo rejection text. Oh My Pi was rejected and closed unmerged. Advancing this review cursor records decisions, not verbatim adoption, a release, or an installation.