Skip to content

fix(build): TEMPORARY workaround so linux-arm64 builds run on 16/64 KiB page kernels - #25825

Merged
t3dotgg merged 11 commits into
mainfrom
fix/linux-arm64-large-page-sea
Oct 27, 2026
Merged

t3dotgg merged 11 commits into
mainfrom
fix/linux-arm64-large-page-sea

Conversation

@t3dotgg

@t3dotgg t3dotgg commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

Temporary workaround: This is a TEMPORARY workaround for an upstream Node bug: nodejs/node#67048. It is a one-time exception, and T3 Code will not patch around core-dependency platform bugs like this again. Revert it as soon as a fixed Node release lands, and grep the repo for the Node issue URL to find every piece.

Problem

Every linux-arm64 release since the Node 26.12.1 bump (#23165) crashes on start on 16 KiB and 64 KiB page kernels, including stable v0.1.2 and v0.1.3. t3 --version exits 139. This hits the Raspberry Pi 5, Asahi Linux, and Docker Sandbox on Apple Silicon. Installs, t3 update, the boot service, and SSH environments all fail there. Fixes #23433. Upstream: nodejs/node#67048.

Node's own --build-sea injector adds linux-arm64 LOAD segments on 4 KiB boundaries since nodejs/node#65564. One shares a page with .bss, and the SEA note's file offset and address disagree mod 16 KiB, so the kernel refuses to map the binary.

Change

All of it is TEMPORARY and built to revert cleanly.

  • scripts/lib/linux-arm64-sea.ts holds the whole workaround, under a header that links the Node issue and this PR. On linux-arm64, build-exe bundles with vp, builds the SEA blob with the pinned Node, and injects it with postject, which keeps a page-compatible layout. Other targets still use tsdown's exe path. Node 26.12.1 stays, since that bump was a security fix.
  • build-cli-archive.ts refuses a linux-arm64 executable whose LOAD segments are not 64 KiB-compatible, so a broken binary fails the release instead of shipping.
  • linux-arm64 builds only on an arm64 host, which release already does. --target linux-arm64 is refused.
  • Every other touch point (cli.ts, vite.config.ts, build-cli-archive.ts, the test, release.md) has a one-line marker with the Node issue URL. To revert: git revert this squash commit, or grep -rn "nodejs/node/issues/67048" and also drop postject from scripts/package.json (JSON has no comments).

This replaces #23443 by @voltcrash (Lakshmi Tanmay), with follow-up from @maria-rcks. Their commits are kept on this branch. On top of them, this branch drops the @tsdown/exe dependency, which pulled a second tsdown and rolldown into every install (lockfile went from +377 to +3 lines). It also keeps the vite config on plain env.

Scope and approval

Bug fix for a supported release target that is fully broken, tracked in #23433. No client, provider, or contract changes.

Verification

  • Built linux-arm64 the way the release runner does: official Node 26.12.1 arm64 (sha256-checked) running build-exe under qemu-user. In QEMU VMs with a Debian 6.12 16 KiB page kernel and an Ubuntu 6.8 64 KiB page kernel:

    16 KiB 64 KiB
    v0.1.3 release --version exit 139 exit 139
    this PR --version t3 v0.1.3 t3 v0.1.3
    this PR __service-preflight --launcher-protocol 3 ready ready
    this PR t3 serve HTTP 200 HTTP 200
  • Minimal upstream repro (in the Node issue): a hello-world SEA built with Node 26.8.2 runs on a 16 KiB kernel, and the same SEA built with 26.12.1 segfaults. Stock node 26.12.1 runs fine.

  • The ELF guard rejects the v0.1.3 binary ("overlap on a 64 KiB page") and accepts the new one.

  • Native linux-x64 build runs. --target win-x64 still builds. Building with arm64 Node 26.12.0 fails with the version error.

  • vp run check:changed passes.

  • Not checked: a real Pi 5 or Asahi machine (QEMU uses the same page sizes), or the actual release runner. A tester in fix(build): restore ARM64 CLI support on larger-page kernels #23443 ran an earlier version of this approach natively on Asahi and it passed the archive smoke test and the preflight.

  • Users get the fix only with a new release, because installed runtimes are cached by version.

Council review

Rounds: 3

Delegate Round 1 Round 2 Round 3
Claude Opus 5.5 8/10 9/10 10/10
Muse Wonder Full 9/10 9/10 10/10
Codex GPT-6.1 Sol 9/10 10/10 10/10

The council reviewed the fix before it was moved into one file. GPT-6.1 Sol reviewed that move separately.

Co-authored-by: Lakshmi Tanmay [email protected]
Co-authored-by: maria-rcks [email protected]

Created with Claude Opus 5.5 in Claude Code (T3 Code). Original fix by GPT-6.1 Sol in Codex. Code comment and issue copy by Muse Wonder Full.

🤖 Generated with Claude Code

voltcrash and others added 8 commits October 25, 2026 20:41
Drop the @tsdown/exe dependency and the linux-arm64 cross-target path.
Release builds linux-arm64 on arm64 runners, and the cross path pulled a
second tsdown and rolldown into every install. build-exe now picks the
injector itself and tells vite with T3CODE_PACK_EXE=bundle, so the vite
config reads plain env again. Reuse runCommand and chmod the copied Node
before postject writes to it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…tables

The copied execPath is the runtime that ships, and vp pack only checks its
own Node. Leave the ELF check to the archive builder, which is the only
reader of dist-exe, and drop --target from its hint for native builds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@github-actions github-actions Bot added vouch:trusted Author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Oct 27, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs Human Approval

Macroscope's review found this PR requires human approval — The workaround changes the production Linux ARM64 release artifact pipeline by replacing Node's SEA executable step with postject injection, adding ELF validation, and requiring a native ARM64 build host. This is more than a minor CI tweak because it introduces a new executable-construction path and changes release behavior for a shipped target.

You can add or adjust custom eligibility rules. Learn more.

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 27, 2026
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 21.6 KiB 21.6 KiB 0 B (0.0%) 24.4 KiB ✅
Codex Live turn messages 2 2 0 (0.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.3 KiB 1.3 KiB 0 B (0.0%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.9 KiB 21.9 KiB 0 B (0.0%) 24.4 KiB ✅
Claude Live turn messages 2 2 0 (0.0%) 8 ✅

Baseline: bc8d02f · PR result: 41f61bf · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 2202787 and 0027769.

Files ignored due to path filters: 1
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
Files selected for processing: 8
  • apps/server/package.json
  • apps/server/scripts/cli.ts
  • apps/server/scripts/cliErrors.ts
  • apps/server/vite.config.ts
  • docs/operations/release.md
  • scripts/build-cli-archive.ts
  • scripts/lib/cli-sea.test.ts
  • scripts/lib/cli-sea.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 3 remain after this review.

Walkthrough

The Linux ARM64 build path now creates a bundle and injects a SEA blob with postject for implicit host builds. Archive creation checks ELF LOAD segment compatibility with 64 KiB pages. The change adds Node-version enforcement, validation tests, and release instructions.

Changes: Linux ARM64 executable build

Layer / File(s) Summary
Bundle mode and SEA injection
apps/server/vite.config.ts, apps/server/scripts/cli.ts, apps/server/scripts/cliErrors.ts, apps/server/package.json, docs/operations/release.md
The pack configuration supports bundle mode without an executable block. For implicit Linux ARM64 host builds, the CLI creates a SEA blob and injects it into the bundle with postject. It rejects builds when the running Node version differs from the package engine version. The release instructions document the Linux ARM64 build constraints.
Archive ELF compatibility check
scripts/lib/cli-sea.ts, scripts/build-cli-archive.ts, scripts/lib/cli-sea.test.ts
Archive creation checks Linux ARM64 executables for ELF LOAD segment alignment and overlap on 64 KiB pages. Tests cover invalid ELF headers and tables, incompatible segments, and congruent offsets.

Priority: Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix · Severity of issue fixed: Medium

Sequence Diagram(s)

sequenceDiagram
  participant build-exe
  participant vp_pack as vp pack
  participant injectLinuxArm64Sea
  participant postject
  build-exe->>vp_pack: build bundle
  build-exe->>injectLinuxArm64Sea: inject SEA into dist-exe/t3
  injectLinuxArm64Sea->>postject: inject SEA blob and sentinel fuse
Loading

Possibly related issues

  • pingdotgg/t3code#25411 — Reports Linux ARM64 startup failures on 16 KiB-page kernels, which this packaging change addresses.
  • pingdotgg/t3code#23477 — Reports a Raspberry Pi startup failure tied to incompatible LOAD alignment, which the build and compatibility check target.
  • pingdotgg/t3code#23773 — Reports a Linux ARM64 executable failure on a 16 KiB-page kernel, which this change targets.
  • pingdotgg/t3code#25602 — Reports a Linux ARM64 startup failure on a 16 KiB-page system, which this compatible packaging path may address.

Suggested labels: bugfix, size:L

Suggested reviewers: juliusmarminge, pixpmusic

Merge Risk: Minimal · up to 00277

No actionable issue was established; the change is ready for normal merge checks.

Pre-merge checks: Passed 4
Check name Status Explanation
Linked Issues check Passed The PR addresses [#23433]. Linux ARM64 builds use vp and postject with the pinned Node version. assertLinuxArm64PageCompatibility rejects incompatible ELF LOAD layouts during archive creation. T…
Out of Scope Changes check Passed The changes stay within the build and release scope of [#23433]. The new postject dependency, CLI packaging changes, Node-version error, ELF guard, release documentation, and focused tests support t…
Title check Passed The title clearly identifies the build fix and the affected Linux ARM64 16 KiB and 64 KiB page kernels.
Description check Passed The description includes all required sections: Problem, Change, Scope and approval, and Verification. It provides reproduction context, implementation details, linked issue tracking, focused test res…
Full details: Linked Issues check

Explanation

The PR addresses [#23433]. Linux ARM64 builds use vp and postject with the pinned Node version. assertLinuxArm64PageCompatibility rejects incompatible ELF LOAD layouts during archive creation. Tests cover incompatible segments, overlapping 64 KiB pages, malformed headers, and valid congruent layouts. Reported QEMU verification shows --version succeeds on 16 KiB and 64 KiB page kernels.

Full details: Out of Scope Changes check

Explanation

The changes stay within the build and release scope of [#23433]. The new postject dependency, CLI packaging changes, Node-version error, ELF guard, release documentation, and focused tests support the Linux ARM64 executable fix. The summary reports no client, provider, or contract changes. The excluded lockfile is not used as evidence.

Full details: Description check

Explanation

The description includes all required sections: Problem, Change, Scope and approval, and Verification. It provides reproduction context, implementation details, linked issue tracking, focused test results, and untested environments. The scope section does not include an explicit maintainer approval comment, but the description is otherwise complete and specific.

Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

t3dotgg and others added 2 commits October 27, 2026 01:35
Move the postject injector and ELF check into scripts/lib/linux-arm64-sea.ts
behind a header that links the upstream Node bug and this PR. Every other
touch point carries a one-line marker with the Node issue URL, so grep finds
everything to revert once Node ships a fix.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 27, 2026 08:35

Dismissing prior approval to re-evaluate ff37d7a

@t3dotgg t3dotgg changed the title fix(build): linux-arm64 builds run again on Raspberry Pi 5 and Asahi (16/64 KiB pages) fix(build): TEMPORARY workaround so linux-arm64 builds run on 16/64 KiB page kernels Oct 27, 2026
@t3dotgg
t3dotgg merged commit c175e57 into main Oct 27, 2026
31 of 33 checks passed
@t3dotgg
t3dotgg deleted the fix/linux-arm64-large-page-sea branch October 27, 2026 08:45
adampeterhiggins added a commit to adampeterhiggins/t3code that referenced this pull request Oct 27, 2026
* refactor(client): composers share one workspace snapshot refresh per provider and cwd (pingdotgg#25370)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): composer pastes and picks are cancelled by their draft, not by the composer (pingdotgg#25376)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* chore(mobile): e2e poses for current devices, Duo and landscape fixes

Poses now cover iPhone SE, iPhone 18 Pro, iPhone Duo folded and unfolded,
iPad Pro 13" in both orientations, Pixel 10 Pro, Pixel 10 Pro Fold folded,
unfolded and unfolded landscape, and Pixel Tablet in both orientations.
Landscape poses rotate once the app is up (a rotation during launch is lost)
and check that the screen really is wider than tall. Taps fall back to the
element's centre when agent-device refuses a covered ref, and a gateway
whose workers briefly reconnect is retried.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(mobile): select the correct draft after adding a project (pingdotgg#24269)

* fix(mobile): mobile:install no longer requires --prepare

The --prepare flag from pingdotgg#25390 had no default, so effect/cli made it
required and every mobile:install failed with "Missing required flag".

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(mobile): e2e landscape poses rotate for real on tablets and folds

agent-device names rotations relative to the device's natural orientation,
which is landscape on the Pixel Tablet and an unfolded Fold, so
"landscape-left" turned them portrait. The runner now asks for a shape and
tries each rotation until the screen has it. It also prepares each platform's
dev client before leasing, rides out longer worker drops, and skips the
Duo poses by default until agent-device can fold Simlock's simulators.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(server): goals stop the running turn, clear while working, no echoes (pingdotgg#25426)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): pull request list remembers each answer for the next start (pingdotgg#25364)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): HTML previews handle frame messages in one listener (pingdotgg#25456)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): review guide runs are watched from their answers, not from mounted components (pingdotgg#25459)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): resize drags, panel shells and the browser host own their listeners (pingdotgg#25464)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): find shows its match after a thread switch, and the timeline hears scrolling through one viewport signal (pingdotgg#25463)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): a new thread's first send no longer sticks on Starting (pingdotgg#25477)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(client): drafts for answered questions are cleared even when their thread is not open (pingdotgg#25457)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): terminal output no longer re-renders the drawer, theme search runs from handlers (pingdotgg#25458)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): stable callbacks refresh before layout effects read them (pingdotgg#25489)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(web): say why the useStableCallback test renders without a router (pingdotgg#25493)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): queued edits end when their run starts, wherever you are (pingdotgg#25468)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): root theme, toast and chrome sync start with the app (pingdotgg#25461)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): root theme, toast and chrome sync start with the app (pingdotgg#25461)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): editing a queued message while a question is open no longer throws (pingdotgg#25503)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): browser viewport resizes work without an open preview panel (pingdotgg#25462)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(web): attachment preview omission tests no longer time out on CI (pingdotgg#25515)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): describe when composer view commands can reject (pingdotgg#25516)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): browser history and titles show up again (pingdotgg#25491)

* fix(web): switching back to a thread no longer restores its tab's older title (pingdotgg#25521)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): pull request page reacts to turns and sweep Escape without effects (pingdotgg#25523)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): an armed pull request confirm no longer outlives its button (pingdotgg#25530)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): keep expanding composer text above its toolbar (pingdotgg#25396)

* fix(server): release completed PR sync sweep data from the read cache (pingdotgg#25285)

* fix(mobile): drop the unused useLayoutEffect import that fails lint on main (pingdotgg#25575)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): provider settings and Codex setup run as explicit flows (pingdotgg#25524)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(web): attachment preview omission cases check the prepared document instead of rendering each one (pingdotgg#25562)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): pull request screens use a file-jump store and handler work (pingdotgg#25525)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): label the pull request toast action View (pingdotgg#25581)

* refactor(mobile): media previews share file leases and close on blur in one place (pingdotgg#25527)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(shared): pin T3 Connect cloudflared to 2026.10.4, which drops the compromised eMudhra intermediates (pingdotgg#25572)

Co-authored-by: Theo Browne <[email protected]>

* fix(web): skill chips in chat open the same details popover as the composer (pingdotgg#25432)

* refactor(web): chat route shortcuts register once instead of rebuilding on every store change (pingdotgg#25366)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(clients): queued messages can't be edited while a question is open (pingdotgg#25593)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* docs: add an FAQ that answers what people ask every day (pingdotgg#25451)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(web): warn before adding a second Claude or Codex account (pingdotgg#25475)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): expire new-model badges after seven days (pingdotgg#25609)

* refactor(web): running timers share one clock instead of an interval each (pingdotgg#25616)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): simplify the created pull request success row (pingdotgg#25613)

* fix(web): thread jump hints wait for their delay on every hold (pingdotgg#25636)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): open threads from the local cache instead of "Thread unavailable" (pingdotgg#25627)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(infra): task-cache telemetry no longer strands an event queued during a flush (pingdotgg#25653)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): video previews attach listeners on their element and share one visibility observer (pingdotgg#25630)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): voice input session owns recording, metering and keep-awake (pingdotgg#25631)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): screen readers can wrap to the first and last message of a long thread (pingdotgg#23780)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: nibarAhmed <[email protected]>
Co-authored-by: maria-rcks <[email protected]>

* fix(client-runtime): a slow host no longer shows settings as read-only (pingdotgg#25526)

Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Signed-off-by: Yordis Prieto <[email protected]>

* refactor(mobile): thread rows share one clock and cache SVGs instead of per-row effects (pingdotgg#25612)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): a thread whose worktree was deleted recovers on the next message (pingdotgg#18359)

Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Signed-off-by: Yordis Prieto <[email protected]>

* refactor(mobile): pull request list records answers where they land (pingdotgg#25373)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): keep floating status within the composer width (pingdotgg#25671)

* refactor(web): settings group by concern, with General split into focused pages (pingdotgg#25651)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): telemetry keeps a failed batch for 30 minutes, not 1.5 (pingdotgg#25474)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): a caret move in one composer no longer moves another draft's insert point (pingdotgg#25681)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(web): attachment preview Word and large-text tests no longer flake on CI (pingdotgg#25664)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(evals): shared evals package and an eval for T3 tool-use mistakes (pingdotgg#24635)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): Cmd+O presses the Open in editor button instead of a per-picker listener (pingdotgg#25667)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): queued messages are delivered by an app service, not a render loop (pingdotgg#25678)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(web): PDF viewer behavior is covered by fast tests (pingdotgg#25699)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): drop the unreachable pending-task editor from new-task drafts (pingdotgg#25684)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(web): thread state lives at the end of the timeline, not stacked on the composer (pingdotgg#25401)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): drafts promote from the draft store, not from route effects (pingdotgg#25615)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): settings use web's pages and groups (pingdotgg#25686)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): thread inspector mode is derived, not synced (pingdotgg#25682)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): pull request list, filters and viewed files without synchronizing effects (pingdotgg#25614)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): PDF search finds phrases that wrap across lines (pingdotgg#25702)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(server): cut T3's MCP tool schemas by a third and merge 18 tools into action tools (pingdotgg#25423)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): pull request rows refresh their diff stats after a new push (pingdotgg#25713)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(workflows): keep completed workflows reachable (pingdotgg#24587)

Co-authored-by: maria-rcks <[email protected]>

* fix(web): devices agents open in background threads now show up (pingdotgg#25714)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): optimistic chat messages leave without a timer (pingdotgg#25710)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(acp): ACP session notices show as notices, not reply text (pingdotgg#25704)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): scale and align thread list icons (pingdotgg#25668)

* refactor(mobile): new-task branch defaults are derived, not written after render (pingdotgg#25706)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(provider): add Vercel fx as a provider (pingdotgg#18277)

Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): usage chart bars round at the top instead of the bottom (pingdotgg#21383)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): a draft route's branch checkout runs once, even across a reconnect (pingdotgg#25712)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): thread details popover closes when the card moves inline (pingdotgg#25731)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): diff and file reveals are requests, and workspace edits refetch by construction (pingdotgg#25732)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(web): Add provider leads with first-class providers (pingdotgg#25753)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): app-lifetime services install once, and the usage widget stops re-rendering on every presentation change (pingdotgg#25740)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(client-runtime): searches and refreshes no longer wait on an unreachable environment (pingdotgg#25703)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): command palette state lives in a store, git and branch pickers drop timer and sync effects (pingdotgg#25733)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): restore Android chat content corners (pingdotgg#23989)

Co-authored-by: maria-rcks <[email protected]>

* fix(server): agents show trends and comparisons as inline charts again (pingdotgg#25766)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): isolate file tree state by workspace (pingdotgg#24270)

* fix(mobile): finished subagents stay reachable from the Agents pill (pingdotgg#25759)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): keep segmented controls readable on cards and screens (pingdotgg#25729)

* fix(web): cancelling update everything no longer flashes the update button's focus ring and tooltip (pingdotgg#25774)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): lists end at the search field, and HTML previews start below the header (pingdotgg#25765)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(provider-cursor): bump @cursor/sdk to 1.0.38 so long-context tiers send Max Mode (pingdotgg#21074)

Co-authored-by: Julius Marminge <[email protected]>

* fix(server): Sonnet also answers trend and comparison data with inline charts (pingdotgg#25776)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): Claude MCP timeouts preserve the native session (pingdotgg#25660)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): preserve settled runs during delegated acknowledgements (pingdotgg#25672)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): align the iPad composer with workspace navigation (pingdotgg#24942)

Co-authored-by: maria-rcks <[email protected]>

* chore(evals): store eval cases as .ndjson so review tools skip them (pingdotgg#25782)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(server): CI fails when agent context grows past main (pingdotgg#25785)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): theme preferences reach the native runtime without a layout effect (pingdotgg#25767)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): the share inbox is a module store, presented from navigation state (pingdotgg#25744)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): drop the unreachable paint-only thread timeline path (pingdotgg#25787)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* chore(release): prepare v0.1.3

* refactor(mobile): notifications, quick actions and Connect onboarding navigate through the root ref (pingdotgg#25769)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(server): data regression test now fails when recent fetch savings regress (pingdotgg#25795)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): all MCP tools now send compact schemas, cutting tool context by 23% (pingdotgg#25790)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the new design is the only design, with no toggle (pingdotgg#25778)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(mobile): add a "Use last project" preference for new threads (pingdotgg#24741)

Co-authored-by: none23 <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): round shared Android sheets and Chat settings (pingdotgg#18547)

* feat(mobile): split wide Android Settings into two panes (pingdotgg#24298)

* fix(web): keep right panel maximize available in narrow windows (pingdotgg#25389)

* fix(server): Macs without Android no longer show avdmanager discovery warnings (pingdotgg#25815)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): onboarding import no longer hangs when the project never arrives (pingdotgg#25805)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): Windows image paths and non-ASCII file links open like desktop (pingdotgg#25802)

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: amv146 <[email protected]>

* fix(web,mobile): markdown previews no longer show YAML frontmatter as a giant heading (pingdotgg#25804)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): compact toggle shows the token count again (pingdotgg#25818)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): preserve interrupted Claude context after revert (pingdotgg#25695)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web,mobile): bot approvals are visible on the PR summary (pingdotgg#25829)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web,mobile): stopped runs no longer look like errors (pingdotgg#25830)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): share imports run outside the new-task screen (pingdotgg#25793)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(build): TEMPORARY workaround so linux-arm64 builds run on 16/64 KiB page kernels (pingdotgg#25825)

TEMPORARY workaround for an upstream Node bug: nodejs/node#67048
Node 26.9+ --build-sea writes linux-arm64 executables that 16/64 KiB page kernels cannot load.
linux-arm64 now injects with postject, and the archive build rejects incompatible ELF layouts.
One-time exception. Revert once Node ships a fix: grep for the Node issue URL and drop postject
from scripts/package.json.

Fixes pingdotgg#23433. Replaces pingdotgg#23443.

Co-authored-by: Lakshmi Tanmay <[email protected]>
Co-authored-by: maria-rcks <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(server): preserve completed runs when accepting child deliveries (pingdotgg#25666)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(client-runtime): iOS resume keeps live sockets and drops dead ones 4x faster (pingdotgg#25824)

Co-authored-by: Omar <[email protected]>
Co-authored-by: Carlos D. Escobar-Valbuena <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat: model labels show the name you'd say out loud (pingdotgg#24205)

Co-authored-by: Claude Opus 5.5 (Claude Code) <[email protected]>
Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>

* chore(review): CodeRabbit reviews tests against docs/internals/testing.md (pingdotgg#24204)

* refactor(mobile): showcase capture readiness is a tested pure model (pingdotgg#25816)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): a held thread move retires when a snooze wakes, even with no list open (pingdotgg#25809)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): switching a file between markdown and the editor no longer saves a draft twice (pingdotgg#25768)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web,mobile): queued messages get a simpler Send now row, no reordering (pingdotgg#25846)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): Add project path survives its host dropping out and returning (pingdotgg#25819)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(mobile): opening Review or Files shows the inspector in the first commit (pingdotgg#25817)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): Diagnostics keeps its own settings sidebar entry

Upstream's settings regrouping made Diagnostics a detail page under
Maintenance, dropping the fork's sidebar entry.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Signed-off-by: Yordis Prieto <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Theo Browne <[email protected]>
Co-authored-by: Alex Southwell <[email protected]>
Co-authored-by: Alex <[email protected]>
Co-authored-by: project516 <[email protected]>
Co-authored-by: oliver <[email protected]>
Co-authored-by: Yash Singh <[email protected]>
Co-authored-by: shivam <[email protected]>
Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: nibarAhmed <[email protected]>
Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Yordis Prieto <[email protected]>
Co-authored-by: Bilal Bakr <[email protected]>
Co-authored-by: Andrew Gadzik <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Aditya Vardhan Sharma <[email protected]>
Co-authored-by: gcrft123 <[email protected]>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: none23 <[email protected]>
Co-authored-by: amv146 <[email protected]>
Co-authored-by: Lakshmi Tanmay <[email protected]>
Co-authored-by: Omar <[email protected]>
Co-authored-by: Carlos D. Escobar-Valbuena <[email protected]>
@Skeptomenos

Copy link
Copy Markdown

Confirmed on real Apple Silicon hardware: Fedora Linux Asahi Remix 44 on a MacBook Pro (M1 Max), 16 KiB-page kernel 7.1.13-402.asahi.fc44.aarch64+16k.

  • 0.1.3 (current npm latest): t3 --version exits 139. readelf -lW shows two LOAD segments aligned 0x1000.
  • 0.1.4-nightly.20261027.3770 (includes this PR): t3 --version exits 0.

I checked only that the binary starts, not a full server run. Thanks for the workaround.

Note: npm latest still points to 0.1.3, so a stable install on a 16 KiB or 64 KiB kernel still crashes until the next stable release.

incognitojam pushed a commit to incognitojam/styal that referenced this pull request Oct 31, 2026
…iB page kernels (pingdotgg#25825)

TEMPORARY workaround for an upstream Node bug: nodejs/node#67048
Node 26.9+ --build-sea writes linux-arm64 executables that 16/64 KiB page kernels cannot load.
linux-arm64 now injects with postject, and the archive build rejects incompatible ELF layouts.
One-time exception. Revert once Node ships a fix: grep for the Node issue URL and drop postject
from scripts/package.json.

Fixes pingdotgg#23433. Replaces pingdotgg#23443.

Co-authored-by: Lakshmi Tanmay <[email protected]>
Co-authored-by: maria-rcks <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>

Fork adaptation: Apply native Linux ARM64 postject injection to the fork's native-only styal build command and executable path, preserving PostHog sourcemap plugins and archive branding. Keep the fork's web build prerequisite and omit upstream cross-target configuration, which the fork does not support. The fork-owned archive workflow invokes this native build command on its ARM64 runner, so it receives the same workaround.

(cherry picked from commit c175e57)
Upstream-PR: 25825
Fork-Feature: fork-distribution-identity, fork-feature-usage, fork-server-error-reporting
Early-Import: The Node pin moves standalone builds to Node 26.12.1, which breaks linux-arm64 on 16/64 KiB page kernels without this workaround.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted Author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: linux-arm64 CLI from nightly 20261022.3512 cannot exec on 16 KiB-page kernels (Raspberry Pi 5)

4 participants