Files
AXP-Resurection/specs/009-axp-los23-port/tasks.md
T
sunfish-admin deaaf42caa 009: Magisk ship pack through US-S5-1 + US-S4 OpenSSH/Jelly/Gallery2.
Release-keys/AVB, CVE clean+hi batches, Yama/slabrand, Pro branding,
bundled apps, and AXP-class product surface docs/scripts.
2026-10-05 10:42:00 +02:00

340 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tasks: AXP LOS22 feature port to LOS23 (resurrection)
**Input**: Design documents from `/specs/009-axp-los23-port/`
**Prerequisites**: `plan.md`, `spec.md`, `research.md`, `data-model.md`,
`contracts/`, `quickstart.md`; constitution Magisk-resurrection track;
standby KernelSU track (`004`–`008`/`007`) remains untouched
**Tests**: LAB acceptance only (Gates A–G in `contracts/acceptance-gates.md`).
No unit/contract TDD suite requested — validation tasks are adb/flash checks.
**Organization**: Setup → Foundational → US1 / US2 / US4 / US5 (MVP) → US6 →
Polish. **US3 banking is deferred (P3)** — skip for MVP. US5 includes
**kernel update + hardening** (FR-017). Localization AXP-vs-LOS (FR-018) =
look later, not a ship gate. Full US1 Independent Test needs US2+US4+US5
(not banking).
## Format: `[ID] [P?] [Story] Description`
- **[P]**: Can run in parallel (different files, no incomplete deps)
- **[Story]**: US1…US6 from `spec.md`
- Include exact file paths in descriptions
## Path conventions
- Meta repo: `vendor/sunfish-a16/`, `docs/`, `specs/009-axp-los23-port/`
- Build host: `/srv/rom/src/lineage/`, `/srv/rom/prebuilts/`,
`/srv/rom/artifacts/009-axp-los23-port/`, `/srv/rom/secrets/`
- LAB: `11231JEC207477` only — never GOLDEN flash/modify
- GOLDEN: `adb` read-only oracle (esp. Magisk preinstall layout)
---
## Phase 1: Setup (Shared Infrastructure)
**Purpose**: Host dirs, runbook stubs, capability inventory scaffold
- [x] T001 Create host dirs `/srv/rom/prebuilts/{magisk,axp-apps}/`,
`/srv/rom/artifacts/009-axp-los23-port/`, `/srv/rom/logs/009-build/`
on `rom-dev01` (android-build writable)
- [x] T002 [P] Add stub `docs/009-magisk-preinstall-runbook.md` (GOLDEN
measure checklist, activation steps, DenyList banking order, LAB serial)
- [x] T003 [P] Add stub `docs/009-version-pins.md` (VersionPinRecord table:
component / version_name / version_code / upstream_ref / policy /
verified_on)
- [x] T004 [P] Add stub `docs/009-capability-matrix.md` mapping
`docs/002-golden-inventory.md` + `docs/axp-pro-parity.md` rows →
`required` / `exception` / `impossible` per `data-model.md`
AxpCapabilitySet
- [x] T005 [P] Create `vendor/sunfish-a16/patches/009-axp-los23-port/README.md`
(Magisk-resurrection apply order; reuse `005`/`008`; no KernelSU ship;
attribute upstreams)
**Checkpoint**: Dirs + stubs exist; no bacon yet
---
## Phase 2: Foundational (Blocking Prerequisites)
**Purpose**: Freshness policy, GOLDEN Magisk measurement, product wiring
baseline — MUST complete before story packages land on LAB acceptance builds
**⚠️ CRITICAL**: Blocks user-story packaging/flash acceptance
- [x] T006 Refresh microG + GSF to newest stable upstream (fetch tags /
releases; no stale host cache) into `/srv/rom/prebuilts/microg/` +
`VERSIONS.txt`; record pins in `docs/009-version-pins.md`
- [x] T007 [P] Confirm project patched Phonesky still present under
`/srv/rom/prebuilts/phonesky/` + XMLs; record artifact id in
`docs/009-version-pins.md` (`policy=project_phonesky`); halt note if
GOLDEN-class gap suspected
- [x] T008 [P] Fetch newest Magisk stable that targets this stack into
`/srv/rom/prebuilts/magisk/` + `VERSIONS.txt`; record pin in
`docs/009-version-pins.md`
- [x] T009 Measure GOLDEN Magisk/Magia preinstall layout via `adb` only
(paths, packages, first-boot/setup UX) and write results into
`docs/009-magisk-preinstall-runbook.md` (FR-010 / contracts/
magisk-preinstall.md)
- [x] T010 Fill `docs/009-capability-matrix.md` for all GOLDEN/AXP categories
(google-stack, spoofing, call-rec, Magisk, bundled apps, DNS/hosts,
userspace hardening/signing/AVB, **kernel hardening**, WebView=exception,
banking=deferred, localization=deferred FR-018); zero silent omissions
- [x] T011 Wire Magisk-resurrection product includes in
`vendor/sunfish-a16/` (extend `gms.mk` / add `magisk.mk` or equivalent;
keep Phonesky priv-app path; **no FakeStore**; **no KernelSU** product
packages) and document include hook in
`vendor/sunfish-a16/patches/009-axp-los23-port/README.md`
- [x] T012 Confirm `003` vanilla (or documented equivalent) known-good
baseline is available for LAB clean-flash acceptance; note rev in
`docs/009-version-pins.md` VanillaBaseline row
- [x] T013 [P] Confirm optional `007` kernel artifacts remain on host under
`/srv/rom/artifacts/007-*/` for FR-016 recycle only; list paths in
`docs/009-magisk-preinstall-runbook.md` as non-ship
**Checkpoint**: Prebuilts fresh, Magisk UX measured, product wire documented —
story work can begin
---
## Phase 3: User Story 1 — AXP resurrection daily-driver on LAB (Priority: P1) 🎯 MVP framing
**Goal**: One flashable `009` composition path and Gate A smoke; full
daily-driver Independent Test completes after US2+US4+US5 (banking deferred)
**Independent Test**: Flash one `009` build to LAB; walk GOLDEN checklist
**minus banking** from `docs/009-capability-matrix.md`
### Implementation for User Story 1
- [x] T014 [US1] Define staged known-good image policy in
`docs/009-magisk-preinstall-runbook.md` (retain prior LAB image hashes
under `/srv/rom/artifacts/009-axp-los23-port/<build-id>/` per FR-013)
- [ ] T015 [US1] Add LAB flash/acceptance checklist linking Gates A–G to
`specs/009-axp-los23-port/quickstart.md` and
`contracts/acceptance-gates.md` (artifact subdirs `gate-a/`…`gate-g/`)
- [ ] T016 [US1] Produce first Magisk-track bacon on `rom-dev01` (detached
`/srv/rom/artifacts/bin/rom-detach` / tmux) with current wired packages;
logs under `/srv/rom/logs/009-build/`; images + SHA-256 under
`/srv/rom/artifacts/009-axp-los23-port/<build-id>/`
- [ ] T017 [US1] Clean-flash LAB `11231JEC207477` only; complete Gate A
(boot/home/call/Wi‑Fi/unlock); save `getprop` + notes under
`…/<build-id>/gate-a/`
- [ ] T018 [US1] After US2+US4+US5 land, re-flash accepted candidate and mark
SC-001…SC-003 + SC-005…SC-010 / Gates A–D + F–G in
`/srv/rom/artifacts/009-axp-los23-port/<build-id>/acceptance.md`
against `docs/009-capability-matrix.md` (skip Gate E / SC-004)
- [ ] T019 [US1] Verify Git/meta-repo contains no proprietary Phonesky APK
bytes or secrets; document check in
`/srv/rom/artifacts/009-axp-los23-port/<build-id>/acceptance.md`
**Checkpoint**: Gate A proven; full US1 Independent Test after US2+US4+US5
---
## Phase 4: User Story 2 — Google stack: newest microG + project Phonesky (Priority: P1)
**Goal**: Newest microG/GSF + project Phonesky + selectable restricted spoofing
**Independent Test**: microG Self-Check; Phonesky open/install; spoofing
OFF/ON per `contracts/toggles-surface.md`
### Implementation for User Story 2
- [ ] T020 [P] [US2] Ensure `vendor/sunfish-a16/gms.mk` +
`vendor/sunfish-a16/Android.mk` package refreshed microG/GSF + Phonesky
without FakeStore; privilege XMLs remain under
`vendor/sunfish-a16/permissions/` and
`vendor/sunfish-a16/default-permissions/`
- [ ] T021 [P] [US2] Re-apply / verify selectable signature spoofing via
`vendor/sunfish-a16/patches/005-sigspoof/apply_005_sigspoof.py` on LOS
23.2 tree; document A16 deltas in `docs/005-spoofing-runbook.md` (or
`docs/009-magisk-preinstall-runbook.md` cross-link)
- [ ] T022 [US2] Build+flash LAB image including Google stack; run Gate B
(Self-Check, Phonesky open, ordinary app install/update); evidence under
`/srv/rom/artifacts/009-axp-los23-port/<build-id>/gate-b/`
- [ ] T023 [US2] Verify Secure key `allow_signature_fake` OFF/ON behaviour per
`contracts/toggles-surface.md`; record in
`…/<build-id>/gate-c/spoofing.md`
- [x] T024 [US2] Finalize microG/GSF/Phonesky rows in `docs/009-version-pins.md`;
if Phonesky lacks GOLDEN-class daily fix → FAIL closed note in
`…/<build-id>/gate-b/phonesky-halt.md` (do not accept)
**Checkpoint**: Gate B + spoofing half of Gate C pass (or explicit Phonesky halt)
---
## Phase 5: User Story 3 — Banking (Priority: P3 — deferred)
**Goal**: Island + Magisk DenyList banking — **owner future; not MVP**
**Independent Test**: *(when resumed)* Swissquote in Island; Yuh honest; no root
### Deferred tasks (do not block acceptance)
- [ ] T025 [P] [US3] *(Deferred)* Stage Island under
`/srv/rom/prebuilts/axp-apps/` and wire into `vendor/sunfish-a16/` if
desired as optional package; pin in `docs/009-version-pins.md`
- [ ] T026 [US3] *(Deferred)* Document GOLDEN banking order in
`docs/009-magisk-preinstall-runbook.md`
- [ ] T027 [US3] *(Deferred)* Swissquote Gate E under
`/srv/rom/artifacts/009-axp-los23-port/<build-id>/gate-e/swissquote/`
- [ ] T028 [US3] *(Deferred)* Yuh classify in `…/gate-e/yuh.md`
- [ ] T029 [US3] *(Deferred)* Banks lack root note in `…/gate-e/root-check.md`
**Checkpoint**: Skipped for MVP — resume only when owner asks
---
## Phase 6: User Story 4 — Magisk like GOLDEN + selectable call recording (Priority: P1)
**Goal**: Magisk AXP-like preinstall + DenyList; selectable call-rec unlock
**Independent Test**: Preinstall state vs GOLDEN notes; activation; DenyList
test app; call-rec OFF/ON
### Implementation for User Story 4
- [ ] T030 [US4] Implement Magisk AXP-like preinstall packaging from
`/srv/rom/prebuilts/magisk/` into `vendor/sunfish-a16/magisk.mk` (or
equivalent) matching `docs/009-magisk-preinstall-runbook.md` measured
layout (`contracts/magisk-preinstall.md`)
- [ ] T031 [P] [US4] Re-apply / verify selectable call-rec unlock via
`vendor/sunfish-a16/patches/008-call-rec-flag-secure/apply_008_call_rec_flag_secure.py`
(`extendrom_call_recording`); keep default OFF; optional FLAG_SECURE
not required for AXP acceptance — document in
`docs/008-call-rec-flag-secure-runbook.md`
- [ ] T032 [US4] Build+flash LAB; document pre-activation Magisk state vs
GOLDEN under `…/<build-id>/magisk/pre-activation.md` (Gate D)
- [ ] T033 [US4] Complete Magisk activation on LAB per runbook; configure
DenyList-class hide for a **test** package (not bank gate); save version +
screenshots under `…/<build-id>/magisk/`
- [ ] T034 [US4] Verify `extendrom_call_recording` OFF = stock restrictions,
ON = Dialer can record; evidence under
`…/<build-id>/gate-c/call-rec.md`
- [ ] T035 [US4] Record Magisk version pin (newest workable stable) in
`docs/009-version-pins.md`
**Checkpoint**: Gates C (call-rec) + D pass
---
## Phase 7: User Story 5 — Usability, options, hardening + kernel (Priority: P1)
**Goal**: Bundled AXP surface; LOS23 WebView; userspace hardening/signing;
**updated hardened sunfish kernel** (FR-017). Localization compare = later.
**Independent Test**: Packages vs matrix; WebView LOS; Gate G userspace +
kernel attribution (SC-010)
### Implementation for User Story 5
- [ ] T036 [P] [US5] Enumerate bundled usability packages from
`docs/009-capability-matrix.md` (Aurora, F-Droid/repos as on GOLDEN,
launcher/gallery-class, DNS/hosts helpers if required); stage newest
workable APKs under `/srv/rom/prebuilts/axp-apps/`
- [ ] T037 [US5] Wire bundled apps into `vendor/sunfish-a16/` product
makefiles; pin all versions in `docs/009-version-pins.md`
- [ ] T038 [P] [US5] Verify WebView policy: no Aosmium; default LOS23
provider; chooser unlocked — document in
`…/<build-id>/gate-f/webview.md` per `contracts/webview-surface.md`
- [ ] T039 [US5] Build+flash LAB; confirm bundled categories present or
marked impossible/deferred in `docs/009-capability-matrix.md`; Gate F
evidence under `…/<build-id>/gate-f/`
- [x] T040 [US5] Define staged userspace hardening/signing/AVB checklist in
`docs/009-hardening-signing-checklist.md` (GOLDEN vs LAB measured
2026-09-29; release keys yes / bootloader lock wont; stages US-S0…S6)
- [ ] T041 [US5] Implement first attributable userspace hardening/signing
stage under `vendor/sunfish-a16/patches/009-axp-los23-port/` (US-S1
keygen + US-S2 wire); keep known-good prior image
(`20260929T123401Z-axp-stage1-combo4`)
- [ ] T042 [US5] Inventory LOS23 sunfish kernel tree on `rom-dev01`
(`/srv/rom/src/lineage/kernel/google/sunfish` or manifest path); record
baseline rev in `docs/009-version-pins.md`
- [ ] T043 [US5] Build attributable kernel hardening patch list (AXP /
Graphene / Divest → 4.14-safe) in
`docs/009-kernel-hardening-map.md` (applied vs skip+why)
- [ ] T044 [US5] Apply first kernel hardening stage on LOS23 sunfish kernel;
rebuild boot; flash LAB; evidence under `…/<build-id>/gate-g/kernel/`
- [ ] T045 [US5] Run Gate G userspace+kernel on accepted candidate; gaps in
`…/<build-id>/gate-g/gaps.md`; **do not** block on FR-018 localization
- [x] T046 [P] [US5] *(Look later — FR-018)* Stub only:
`docs/009-localization-axp-vs-los.md` outlining what to compare later
(AXP location lockdown vs stock LOS); no policy decision in MVP
- [ ] T046a [P] [US5] *(FR-019 — before final ship)* Write
`docs/009-sideload-system-updates.md`: how to refresh microG, Magisk,
Phonesky, and other system apps every ~2–3 months without full reflash
(signing identity / PRESIGNED / Magisk manager+boot path); verify
packaging does not break update eligibility
**Checkpoint**: Gates F + G (userspace + kernel) for claimed stage; FR-018 stub
only; FR-019 runbook before final ship
---
## Phase 8: User Story 6 — Parallel tracks stay honest (Priority: P2)
**Goal**: Docs/branches make Magisk `009` active vs KernelSU standby clear
**Independent Test**: `specs/004`–`008`/`007` still present; `009` does not
retire standby track
### Implementation for User Story 6
- [ ] T047 [P] [US6] Update `docs/README.md` (and `AGENTS.md` if needed) to
state active Magisk-resurrection track = `009` / this repo; standby
KernelSU = sibling `sunfish-a16-rom` + specs `004`–`008`/`007`
- [ ] T048 [P] [US6] Add short track note to
`specs/009-axp-los23-port/spec.md` only if needed (do **not** rewrite
standby feature specs)
- [ ] T049 [US6] Remap relevant `docs/axp-pro-parity.md` rows to `009`
- [ ] T050 [US6] Confirm `specs/001`–`008`/`007` directories still exist; record in
`/srv/rom/artifacts/009-axp-los23-port/<build-id>/acceptance.md`
- [ ] T051 [P] [US6] Document optional FR-016 KSU recycle (non-ship) in
`docs/009-magisk-preinstall-runbook.md` + `docs/007-kernelsu-runbook.md`
cross-link
**Checkpoint**: Parallel-track honesty readable without rewriting history
---
## Phase 9: Polish & Cross-Cutting Concerns
**Purpose**: Freshness audit, quickstart validation, handoff
- [ ] T052 [P] Audit all `docs/009-version-pins.md` rows against freshness
policy; fix stale host copies if found
- [ ] T053 [P] Run `specs/009-axp-los23-port/quickstart.md` on LAB
(**skip Gate E**); fix doc gaps
- [ ] T054 Collect final artifacts under
`/srv/rom/artifacts/009-axp-los23-port/<build-id>/`
- [ ] T055 [P] Add/update `docs/009-gate-handoff.md` (next: banking later;
localization compare FR-018 later; sideload refresh cadence FR-019)
- [ ] T056 Mark `specs/009-axp-los23-port/spec.md` Status after Gates A–D +
F–G
---
## Dependencies & Execution Order
### MVP order (owner 2026-09-17)
1. Setup + Foundational
2. US2 Google stack
3. US4 Magisk + call-rec
4. US5 usability + **hardening + kernel**
5. US1 full acceptance (T018) **without banking**
6. US6 docs
7. *(Later)* US3 banking + FR-018 localization compare
### Suggested MVP scope
**T001–T024 + T030–T046** (skip T025–T029)
## Notes
- Banking Gate E / T025–T029 = deferred (owner future)
- Kernel hardening = in-scope (FR-017); localization policy = later (FR-018)
- LAB only; never flash GOLDEN
- Long builds detached on `rom-dev01`
- Owner handles git commit / push / MR