Files
AXP-Resurection/specs/003-lineage-23-vanilla-build/spec.md
T
sunfish-admin 12d2179c20 AXP Magisk resurrection track: Speckit 009 port AXP/LOS22 to LOS23.
Ship Magisk like GOLDEN; KernelSU optional recycle only; parallel to sunfish-a16-rom standby.
2026-09-16 21:56:22 +00:00

6.5 KiB
Raw Blame History

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-environment sufficiently complete to sync/build;
  • 002-axp-reference-capture P1 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:

  1. Given android-build on rom-dev01, When I sync the LOS 23.2 sunfish source via repo, Then the tree matches a documented manifest revision.
  2. Given the synced tree, When I build userdebug for sunfish with conservative parallelism, Then the build completes without requiring project patches beyond LOS-needed device/kernel trees.
  3. 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:

  1. Given artifacts on the laptop, When I flash per documented steps, Then the device boots into the vanilla LOS build.
  2. Given a failed flash/boot on LAB, When I follow 002 LAB 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:

  1. 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 (Enforcing expected)
    • 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
  2. 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
  3. 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 -j and 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 userdebug images 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/artifacts and document rsync + 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 002 LAB 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 userdebug build 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.