Skip to content

Upstream checkpoint 16918b57d675 (412 commits, #20163..#19782) - #154

Merged
Nurozen merged 414 commits into
mainfrom
upstream/batch-16918b57d675-9d9510
Oct 23, 2026
Merged

Nurozen merged 414 commits into
mainfrom
upstream/batch-16918b57d675-9d9510

Conversation

@Nurozen

@Nurozen Nurozen commented Oct 23, 2026 •

Copy link
Copy Markdown
Owner

Upstream checkpoint 16918b5

True merge of pingdotgg/t3code through 16918b57d6754d6f145e9b6367c825aa31a740da (412 upstream first-parent commits after accepted 86534db4d352, pingdotgg#20163..pingdotgg#19782) into Lecturn main f7ee4bb4db42. 268 conflicts (216 content, 52 add/delete) resolved into Lecturn's architecture and identity. The checkpoint stops before upstream's mobile React Compiler series (pingdotgg#20967).

What changes

  • Web: upstream's React Compiler adoption. Every apps/web/src file now compiles with the compiler, lint rejects useMemo/useCallback (lecturn/no-manual-memo) and compiler skips, and reactCompilerCoverage.test.ts fails on any skipped file. Many render-perf fixes: streaming, provider pushes, reconnect snapshots, settings writes and thread switches no longer re-render unrelated views. Fork-only web code (Stave, contextual, funding, import, notes and phone auth surfaces) was converted to the same rules without behavior changes.
  • Web tests: React tests run in a real browser (vitest browser mode, Chromium). Fork React tests that used jsdom or react-test-renderer moved to *.browser.test.tsx.
  • Server: pairing grants include access and Lecturn Connect management by default; lecturn doctor can delete the legacy V1 database; unused V1 projections are dropped (upstream migration 063, fork migration 78); git env and workspace-folder resolution consolidated; settings reads, startup logs and preview snapshots redact sensitive values; webhook request values reach agents marked as request data; slow but healthy Codex no longer shows Unavailable; restart-interrupted subagent background work wakes its thread.
  • Mobile and deps: Expo SDK 58 and Clerk SDK updates; themed native iOS segmented controls and Android fold-posture tracking in lecturn-native-controls; Android segmented capsule flattened; iPad/iPhone Duo sidebar toggle; Android menu-tap and composer-keyboard fixes; Android beta APK publishes one prerelease per beta.

Lecturn decisions (recorded in RESOLUTION_GUIDE.md)

  • npm: the fork keeps publishing its single lecturn package; upstream's npm removal and launcher/platform packages are not taken.
  • ChatView keeps the fork's revert dialog (previews untracked files a revert deletes); the sidebar keeps the fork's drag/partition (SidebarDragScope).
  • The mobile store-link settings row is not taken until Lecturn store links exist.
  • iOS keeps the fork's glass segmented control (SegmentedControl.ios.tsx); the native segmented view is registered but unused.
  • The fork's expo-modules-core and expo-notifications patches move to 58.0.22 / 58.1.5 (the patched code is unchanged upstream); [email protected] is upstream's patch plus the fork's Live Activity account hunks.
  • Default pairing grants now include access and relay management (upstream feat(auth): pairing grants access and T3 Connect management by default pingdotgg/t3code#20432), so Settings > Connections shows the Authorized clients section for default pairings and fork features gated on those scopes work for them.
  • A missing thread worktree is re-created only inside Lecturn's managed worktree folders (refactor(server): resolve project and worktree folders in one place pingdotgg/t3code#20449).
  • Identity fixes with behavior: the Lecturn Connect route kind check, x-lecturn-relay-* header redaction, LECTURN_DESKTOP_CLI_LAUNCHER.

Checks

  • Format check, lint (0 errors), typecheck (33 packages), knip, GraphQL generate check, release smoke, nightly-release tests 21/21, desktop build, non-web test job 29/29 packages (13,195 tests).
  • Web: unit project 7,852 and browser project 1,089 tests pass when run separately; in a combined local run under load, useTheme/useEnvironmentThemeSync time out intermittently (upstream tests, identity-only edits).
  • Server suite: 7,641 pass; 15 storageCleanup failures are macOS /var vs /private/var path mismatches that also fail on fork main locally.
  • swiftlint, ktlint and detekt: 0 issues on changed native files. No Rust changed.

Review

  • Four independent exact-tree reviews of the merge (web chat/sidebar, web settings/hooks, server/packages, deps/mobile/CI): PASS-WITH-NITS. Grok outside review: ACCEPT-WITH-NITS. Follow-up commit 41e9e61 fixes the introduced nits (sidebar search scroll on result changes, stable desktop-activity atoms, connect picker last-used account read once per open, pairing/npm comments and guide entries); a fresh review of the final tree and a Grok pass on the follow-up both passed with doc-only nits.
  • CI green on the final head, including Test Web (unit + browser projects).

UI evidence: isolated synthetic fixture (web dev server, stub Codex, headless Chrome 1440x900 @1x dark)

Before = fork main f7ee4bb; after = 41e9e61. React Compiler adoption: the only visible change expected is pairing grants.

Scene Before (main f7ee4bb) After (41e9e61) Verdict
Home: new-thread composer and sidebar
Route /, the draft landing for Penguin Lab.
before: Home: new-thread composer and sidebar after: Home: new-thread composer and sidebar same (only sidebar relative times differ)
Thread timeline and composer
User message, expanded work log (reasoning, commentary, command row, file-change row), markdown answer.
before: Thread timeline and composer after: Thread timeline and composer same (only the turn clock time differs)
Right panel: Diff
README.md expanded (an uncommitted edit in the fixture repo).
before: Right panel: Diff after: Right panel: Diff same (pixel-identical)
Command palette
Cmd+K over the thread.
before: Command palette after: Command palette same (pixel-identical)
Settings > Connections
Local environment card and Environments.
before: Settings > Connections after: Settings > Connections expected difference: an "Authorized clients · 1 client" section (Revoke others, Create link) now appears, because standard pairing grants include access read/write (t3code#20432). The port in the Version row also differs.
Settings > Providers
Stub Codex selected, Claude disabled.
before: Settings > Providers after: Settings > Providers same (pixel-identical)
Usage: Cost
30 days over synthetic Codex rollouts.
before: Usage: Cost after: Usage: Cost same (pixel-identical)
Usage: Tokens
Same data, Tokens view.
before: Usage: Tokens after: Usage: Tokens same (pixel-identical)
Right panel: Linked pull requests
#12-#14 linked by URL (GitHub disabled, rows unsynced).
before: Right panel: Linked pull requests after: Right panel: Linked pull requests same (pixel-identical)
Pull requests page
GitHub disabled in the fixture, so it shows the could-not-load state.
before: Pull requests page after: Pull requests page same (0.001% of pixels, a relative time)
Mobile thread (390x844)
Same thread at mobile width.
before: Mobile thread (390x844) after: Mobile thread (390x844) same (pixel-identical)

The same scripted steps ran on both sides (replay.sh). Each side used an isolated synthetic fixture home seeded by fork main, a stub Codex, Claude off, and HOME pointed at the fixture. The github.com host was disabled, so no live GitHub reads happened, and /usage read only synthetic Codex rollouts. The host label is masked to "Fixture Mac". A pixel diff (channel delta >40) found that 9 of the 11 pairs are identical except for relative times or the clock. The one visible change is the "Authorized clients" section in Settings > Connections. It appears because standard pairing grants now include access management (t3code#20432), so it is an expected difference, not a regression.

Android showcase (phone, dark, Lecturn theme; GitHub-hosted ubuntu-24.04 capture-only harness)

Before = PR #152 head 010f86e (run 40006675871). That build is equivalent to main for mobile: main has only gained the comment-prune PR #153 since then. After = this PR's head 1ed73b2 (run 40039205793). Synthetic showcase fixture only.

Scene Before (010f86e) After (1ed73b2) Notes
Threads list before: Threads list after: Threads list PASS: same pixels except the fixture clock (12m/30m vs 11m/29m) and the status-bar signal glyphs. Lecturn title, crest group, gold Decisions and New thread FAB, glass Filter, Material bottom bar and ArcaneBackdrop are all kept
Thread before: Thread after: Thread PASS: only the fixture timestamps differ (7:02/7:07 PM vs 11:30/11:35 PM). The app bar, bubbles, composer, model chip, navy palette and backdrop are unchanged
Terminal before: Terminal after: Terminal PASS: same pixels except the status-bar glyphs. The ANSI colours and the gold Attach output are unchanged
Review (diff) before: Review (diff) after: Review (diff) PASS: same pixels except the status-bar glyphs. Diff colours, file rows and checkboxes are unchanged
Environments before: Environments after: Environments PASS: only the fixture's routing port differs (45899 vs 36629). Glass cards, Lecturn Connect, gold GitHub routing and green switches are unchanged
Agent activity before: Agent activity after: Agent activity PASS: the expanded shade with the Lecturn crest, "Put the command center in your pocket / Approval: Lecturn" and "2 need you · 3 active" is identical. Only the Quick Settings tile labels show sub-pixel anti-aliasing noise (system UI)

The flattened Android segmented capsule and the new LecturnFoldPosture module do not appear in these six scenes. The APK built, installed and rendered all six scenes on the first attempt.

Limits

  • Web evidence is a synthetic fixture on desktop dark plus one mobile-width thread; the /pull-requests list needs GitHub credentials, so the linked-PR panel covers PRs instead.
  • Android before images are the previous checkpoint's capture of the same mobile code (main changed only by the comment prune since); phone/dark/Lecturn only, and no showcase scene shows the flattened segmented capsule or fold posture. The hosted iOS showcase route is still broken, so there are no iOS stills (iOS keeps the fork's glass segmented control).
  • Locally, 15 server storageCleanup tests fail on macOS /private/var paths (also on main); CI passes them.

🤖 Generated with Claude Code

juliusmarminge and others added 30 commits October 16, 2026 21:50
juliusmarminge and others added 27 commits October 17, 2026 03:37
True merge of pingdotgg/t3code through 16918b5
(412 upstream first-parent commits after 86534db, pingdotgg#20163..pingdotgg#19782) into
Lecturn main f7ee4bb. Brings upstream's React Compiler adoption across
the web app (every apps/web/src file compiles, no-manual-memo lint, compiler
coverage test, render-perf fixes), React tests running in a real browser via
vitest browser mode, the Expo SDK 58 and Clerk SDK updates, themed native iOS
segmented controls and Android fold-posture tracking, pairing grants with
Lecturn Connect management, `lecturn doctor` legacy V1 database removal and
the V1 projection drop (fork migration 78), git env and workspace-folder
consolidation, settings/log redaction, and Codex health probing fixes.
Lecturn keeps its single `lecturn` npm package publishing, its revert dialog
with untracked-file preview, its sidebar drag/partition, the iOS glass
segmented control, its Expo patches (rebuilt for the new versions), and no
mobile store-link settings row. Fork-only web code was converted to compile
under the React Compiler and fork React tests moved to the browser project.
The resolution guide records the deliberate differences.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Re-run sidebar search scroll on result-list changes, keep desktop activity
atoms and the connect picker last-used account stable, and correct the
pairing-scope and npm notes in comments and the resolution guide.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Nurozen Nurozen changed the title Upstream checkpoint 16918b57d675 (412 commits) Upstream checkpoint 16918b57d675 (412 commits, #20163..#19782) Oct 23, 2026
@Nurozen
Nurozen marked this pull request as ready for review October 23, 2026 23:58
@Nurozen
Nurozen merged commit 7ce4e26 into main Oct 23, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants