android: cut the cold-runner path (Nix-built hardware bridge, lean android-ci shell, no registry evals) #149

Merged
founder merged 1 commit from claude/w6-android into main 2026-08-19 06:46:46 +00:00
Owner

Build (Android) long pole (14.8 min in run 18647) is the cold-runner path: Namespace hands out empty volumes ~50 % of the time and the lane then pulled the 10 GB skip-swift toolchain (Hydrate 266–670 s) and rebuilt the Swift bridge + evaluated registry nixpkgs every run (Build 94–186 s).

  • packages.android-hardware-bridge (sandboxed Nix build of the JNI bridge; runner takes jniLibs from it, in-tree fallback kept)
  • devShells.android-ci (no Swift toolchain) — hydrate set = shell + bridge + android-gradle = 5.1 GB, all on nix.key.store
  • prepare-skip-core no registry evals; workflows use the lean shell; push step roots the bridge

Verified on the forge (35–40 s warm builds from Nix jniLibs, fallbacks). Expected cold Hydrate 2–3 min instead of 4–11 min. Measurement table in the report (scratchpad wave6/android). The optional patch 02 (Gradle config-cache/R8 stability, touches app code + a deprecated AGP flag) follows as a separate WIP PR for founder decision.

Workflow-orchestrated + adversarially reviewed (LAND). No forge deploy.

🤖 Generated with Claude Code

Build (Android) long pole (14.8 min in run 18647) is the **cold-runner** path: Namespace hands out empty volumes ~50 % of the time and the lane then pulled the 10 GB skip-swift toolchain (Hydrate 266–670 s) and rebuilt the Swift bridge + evaluated registry nixpkgs every run (Build 94–186 s). - `packages.android-hardware-bridge` (sandboxed Nix build of the JNI bridge; runner takes jniLibs from it, in-tree fallback kept) - `devShells.android-ci` (no Swift toolchain) — hydrate set = shell + bridge + android-gradle = 5.1 GB, all on nix.key.store - `prepare-skip-core` no registry evals; workflows use the lean shell; push step roots the bridge Verified on the forge (35–40 s warm builds from Nix jniLibs, fallbacks). Expected cold Hydrate 2–3 min instead of 4–11 min. Measurement table in the report (scratchpad wave6/android). The optional patch 02 (Gradle config-cache/R8 stability, touches app code + a deprecated AGP flag) follows as a separate WIP PR for founder decision. Workflow-orchestrated + adversarially reviewed (LAND). No forge deploy. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
android: cut the cold-runner path (Nix-built hardware bridge, lean android-ci shell, no registry evals)
Some checks failed
Namespace: Build Images / Refresh macOS runner lane (push) Successful in 4s
Build: KaiOS / Build (KaiOS) (pull_request) Successful in 37s
Build: Web / Build (Web) (pull_request) Successful in 32s
Release: Signing Preflight / Release (Signing Preflight) (push) Successful in 54s
Build: KaiOS / Build (KaiOS) (push) Failing after 18s
Build: Web / Build (Web) (push) Successful in 31s
Deploy: Web / Deploy (Web) (push) Failing after 2m5s
Namespace: Build Images / Refresh macOS Nix snapshot application (push) Has been cancelled
Namespace: Build Images / Refresh Linux runner image (push) Has been cancelled
Release: If Needed / Check (Release Needed) (push) Has been cancelled
Deploy: API / Deploy (API) (push) Has been cancelled
Build: Apple / Check (SwiftLint) (pull_request) Failing after 2m24s
Build: Apple / Build (macOS) (pull_request) Has been skipped
Build: Apple / Build (iOS) (pull_request) Has been skipped
Build: Apple / Build (visionOS) (pull_request) Has been skipped
Build: Apple / Build (macOS) (push) Has been cancelled
Build: Apple / Build (iOS) (push) Has been cancelled
Build: Apple / Build (visionOS) (push) Has been cancelled
Build: Apple / Check (SwiftLint) (push) Has been cancelled
Build: Linux / Build (Linux x86_64) (pull_request) Successful in 6m31s
Build: Linux / Build (keystore-forge x86_64) (pull_request) Has been skipped
Build: Linux / Build (Linux x86_64) (push) Successful in 7m2s
Build: Linux / Build (keystore-forge x86_64) (push) Has been skipped
675ecb130c
Build (Android) took 14.8 min in release run 18647 vs ~2 min warm. Measured
across 7 runs: the difference is the cold VM (Namespace hands out empty
/nix + /cache/gradle volumes ~50 % of the time): Hydrate .#android 266-670 s
(the 10 GB skip-swift toolchain, needed only to build the Swift hardware
bridge), Build 94-186 s (prepare-skip-core evaluated nixpkgs#libxml2 /
nixpkgs#gradle against the *registry* nixpkgs and rebuilt the bridge every
run).

- packages.android-hardware-bridge: the Swift bridge (JNI shim +
  libc++_shared, per-ABI ELF check) is a sandboxed Nix derivation; runner.sh
  takes jniLibs from it (KEYSTORE_ANDROID_BRIDGE_FROM_NIX=1) and falls back
  to the in-tree build when the attr is absent.
- devShells.android-ci: the lane's shell without the Swift toolchain;
  hydrate = android-ci shell + bridge + android-gradle (5.1 GB, all served
  by nix.key.store; the 10 GB toolchain is no longer pulled per run).
- prepare-skip-core: no registry nixpkgs evals; one flake eval.
- build-release Build (Android) + build-android.yml use the lean shell and
  the pinned outputs; the push step roots the bridge on the forge.

Verified on the forge: bridge builds sandboxed; lean closure = 244 paths,
5.14 GB, all on nix.key.store; patched lane builds APK+AAB in 35-40 s warm
from the Nix jniLibs; fallbacks exercised. Expected: cold Hydrate ~2-3 min
instead of 4-11 min, warm unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
founder deleted branch claude/w6-android 2026-08-19 06:46:46 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
key-store/key.store!149
No description provided.