Ship Magisk like GOLDEN; KernelSU optional recycle only; parallel to sunfish-a16-rom standby.
6.5 KiB
Feature Specification: LineageOS 23.2 vanilla build for sunfish
Feature Branch: 003-lineage-23-vanilla-build
Created: 2026-08-09
Status: Active — implementation next (vanilla sync/build on rom-dev01)
Input: Produce the first vanilla LineageOS 23.2 / Android 16 build for
sunfish, copy images to the laptop, flash, and verify boot plus basic
hardware — with no microG, KernelSU, or hardening yet.
Context / non-goals
Prerequisites:
001-development-environmentsufficiently complete to sync/build;002-axp-reference-captureP1 complete (GOLDEN labeled; LAB stock rescue documented). Flash LAB only — never GOLDEN (docs/device-roles.md).
Out of scope for this feature:
- microG / Phonesky / signature spoofing;
- KernelSU / SUSFS / Magisk parity;
- call recording, FLAG_SECURE toggles, privacy extras;
- project signing / AVB / OTA implementation;
- Graphene/AXP/Divest patch ports.
Build target: userdebug with development/test-keys.
User Scenarios & Testing (mandatory)
User Story 1 - Reproducible vanilla sync & build (Priority: P1)
As the developer, I can sync LineageOS 23.2 for sunfish on rom-dev01 and
complete a build that emits flashable images, with manifest/revisions recorded.
Why this priority: Establishes the real base ROM.
Independent Test: Build finishes; artifact paths listed; manifest revision
document stored under /srv/rom with hashes.
Acceptance Scenarios:
- Given
android-buildonrom-dev01, When I sync the LOS 23.2 sunfish source viarepo, Then the tree matches a documented manifest revision. - Given the synced tree, When I build
userdebugfor sunfish with conservative parallelism, Then the build completes without requiring project patches beyond LOS-needed device/kernel trees. - Given a successful build, When I collect outputs, Then images/
zip needed to flash sunfish are in
/srv/rom/artifacts(or documented path) with SHA-256 hashes and a compressed build log.
User Story 2 - Flash from laptop (Priority: P1)
As the developer, I rsync artifacts to the laptop and flash the Pixel 4a over
USB using fastboot/adb, following the recovery notes from 002 if something
fails.
Why this priority: Closes the loop on the thin-client workflow.
Independent Test: Device boots the new build; getprop shows LineageOS /
expected fingerprints (not AXP).
Acceptance Scenarios:
- Given artifacts on the laptop, When I flash per documented steps, Then the device boots into the vanilla LOS build.
- Given a failed flash/boot on LAB, When I follow
002LAB stock factory rescue docs, Then LAB returns to usable stock. GOLDEN is not touched.
User Story 3 - Basic hardware smoke test (Priority: P1)
As the developer, after first boot I verify essential radios and peripherals well enough to trust this build as the clean base for later features — and I know what was already broken on vanilla LOS before we add patches.
Why this priority: A boot-only “success” that breaks telephony/Wi-Fi is not a usable base. Later regressions must be attributable.
Independent Test: Checklist results stored for P1 and extended items on the vanilla build.
Acceptance Scenarios:
-
Given first boot completed, When I run the P1 smoke set, Then each item either works or is logged as a blocking defect with evidence:
- encryption / PIN
- SELinux mode (
Enforcingexpected) - Android security patch level
- vendor security patch level / build baseline
- SIM detection
- mobile data
- phone calls
- SMS (send/receive as applicable)
- Wi-Fi
- Bluetooth
- GPS
- camera(s)
- audio (speaker/mic)
- NFC
- sensors (basic)
- fingerprint
- USB data / ADB
- charging
-
Given P1 smoke done, When I run the extended baseline set, Then each is recorded (need not all be P1 blockers, but must not be skipped silently):
- airplane mode
- flashlight
- vibration
- screen rotation
- USB OTG (if hardware/cable available)
- headphone jack
- WebView implementation / basic page load
- app sideload install smoke (non-Google)
- Widevine / DRM security level
- eSIM capability/state, if available
- WireGuard kernel capability/baseline
- bootloader version
- baseband / modem version
-
Given smoke results, When deciding to proceed to
004, Then no unresolved P1 hardware blockers remain (or they are explicitly accepted with rationale).
Edge Cases
- Build disk/oom with 52 GB + swap: document job
-jand failure recovery (out/cleanup). - Partial artifact set: do not flash until required partitions/images are present and hashed.
- Do not install Magisk/KernelSU “just to test” in this feature.
Requirements (mandatory)
Functional Requirements
- FR-001: Initialize from the documented official LineageOS 23.2
manifest/branch (
repo init→ sync) and capture a revision-locked resolved manifest (e.g.repo manifest -r) for every known-good build. - FR-002: Build
userdebugimages with test-keys / default LOS signing for this stage. - FR-003: Record manifest, revisions, build variant, config, hashes, and compressed log for the successful build.
- FR-004: Publish artifacts to
/srv/rom/artifactsand documentrsync+ flash procedure. - FR-005: Boot sunfish on the vanilla build and run the P1 + extended hardware/baseline checklist (record results even for non-blockers).
- FR-006: Keep tree free of microG/Phonesky/KernelSU/hardening patches intended for later features.
- FR-007: On LAB flash failure, follow
002LAB stock factory rescue; never flash or wipe GOLDEN as part of recovery.
Key Entities
- Vanilla LOS build: clean base artifact set.
- Build metadata: manifest + hashes + log bundle.
- Smoke checklist: hardware/regression minimum for this stage.
Success Criteria (mandatory)
Measurable Outcomes
- SC-001: One successful sunfish
userdebugbuild exists with recorded metadata and hashes. - SC-002: Device boots that build after laptop-side flash.
- SC-003: P1 and extended hardware/baseline checklists are completed and stored (extended items may be non-blocking but must be recorded).
- SC-004: No dependency on LSPosed/Magisk modules for this stage’s success.
- SC-005: This build is tagged/kept as a known-good flashable baseline for regression when later features break the device.