Files
AXP-Resurection/specs/009-axp-los23-port/research.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

256 lines
12 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.
# Research: `009-axp-los23-port`
## Decision: Product = AXP resurrection on LOS 23.2 (parallel track)
**Decision**: Treat `009` as the normative ship feature **for the Magisk AXP
resurrection track** that ports the AXP.OS / GOLDEN LOS22 capability set onto
LineageOS 23.2 vanilla (`003`), with only the explicit exceptions in the spec
(WebView, Phonesky artifact, optional KSU recycle). Keep the prior KernelSU /
split roadmap (`004`–`008`/`007` + deferred items) on a **standby git branch**
without deleting or rewriting those specs.
**Rationale**: Owner wants Magisk “todo igual” to AXP now, without throwing
away the earlier KSU investment; either track may resume later.
**Alternatives considered**: Hard-supersede/delete the split roadmap —
rejected (owner wants standby). Continue only KSU track — rejected for
current ship preference.
## Decision: Magisk ship root (constitution variance)
**Decision**: Ship **Magisk** like GOLDEN — newest Magisk stable that works on
sunfish / LOS 23.2 — in an AXP-like **preinstalled but not fully activated**
layout. Measure the exact first-boot/setup UX on GOLDEN (`adb` only) before
freezing LAB instructions. DenyList-class hiding for banks.
**Rationale**: FR-010 / owner clarification; true AXP resurrection requires
Magisk/Magia-class root, not KernelSU.
**Alternatives considered**:
- KernelSU-Next (`007`) as ship — rejected for this feature (out of ship for
now).
- Rootless ship — rejected (banking DenyList workflow is part of GOLDEN).
- Magisk only as temporary A/B diagnostic — insufficient for resurrection
acceptance.
**Follow-up (non-blocking)**: Amend constitution Root architecture section in
a later docs pass so it no longer contradicts Magisk-as-ship.
## Decision: Optional recycle of `007` kernels (FR-016)
**Decision**: Keep the two functional KernelSU kernels/artifacts. Reuse only
if helpful (boot reference, differential debug, later optional path). Never
gate Magisk acceptance on KSU work.
**Alternatives considered**: Delete `007` artifacts — rejected (sunk cost;
optional value). Force dual-boot Magisk+KSU ship — rejected (complexity).
## Decision: Reuse `004`/`005` Google stack; bump microG; keep project Phonesky
**Decision**:
- microG GmsCore + GSF = **newest stable** (or newest tagged pre-release
upstream ships) verified on this stack; integrate with Phonesky as in AXP.
- Phonesky = **project patched artifact** from the recent host pipeline
(`docs/004-phonesky-runbook.md` / `/srv/rom/prebuilts/phonesky/`), not a
blind newest Play download.
- If LAB shows missing GOLDEN-class Play fixes with that artifact → **halt**
and reconsider Phonesky (spec edge case), do not silently ship FakeStore.
- Signature spoofing = selectable DO toggle (`allow_signature_fake` class from
`005`); restricted grants for microG + Phonesky only.
**Alternatives considered**: Newest Play APK every week without project patch
pipeline — rejected (breaks reproducible priv-app signing). FakeStore —
forbidden. Re-implement spoofing from scratch — reuse `005` unless A16 gaps.
## Decision: Selectable call recording = EXTENDROM / `008` model
**Decision**: Ship selectable call-recording unlock using GOLDEN-compatible
`Settings.Secure.extendrom_call_recording` + Dialer gate (EXTENDROM
`F_CALLREC` / `008` research). Default OFF.
**Alternatives considered**: Magisk Dialer RRO — rejected (not selectable /
not native). Blind old XML overlays — rejected for A16.
**Note**: Project `FLAG_SECURE` override remains optional vs AXP acceptance;
may ship if `008` work is cheap to include.
## Decision: WebView = LOS23 default, chooser unlocked
**Decision**: Do not ship Aosmium (EOL). Default = LineageOS 23 WebView.
Preserve Android multi-provider selection (Developer options → WebView
implementation).
**Alternatives considered**: Bundle Vanadium/AOSmium fork — rejected (EOL /
out of scope). Lock single provider — rejected (FR-015).
## Decision: Bundled apps = GOLDEN/AXP categories @ newest stable
**Decision**: Enumerate categories from `002` + AXP Pro catalog (Island,
Aurora, F-Droid/repos as on GOLDEN, launcher/gallery-class, DNS/hosts privacy
helpers if present). Install newest workable stables; pin versions in the
acceptance record. Island remains the managed-profile tool (measured on
GOLDEN).
**Alternatives considered**: LOS defaults only — fails resurrection. Exact
GOLDEN version freeze — rejected (owner wants newest stables except
Phonesky).
## Decision: Hardening / signing / AVB inside `009` (staged)
**Decision**: Acceptance includes GOLDEN-class hardening and signing/AVB
posture **as applicable** on LOS 23.2 / sunfish. Implement in **stages inside
`009`** (functional Magisk+Google+apps first, then hardening/signing gates),
but do not open a separate competing feature number for ship ownership.
Document impossible-on-sunfish gaps rather than silent omit.
**Rationale**: Owner Q2 = full resurrection; still obey constitution
“small attributable reversible changes” via staged known-good LAB images.
**Alternatives considered**: Defer all of `011`–`013` — rejected by owner.
One mega-commit everything — rejected (attribution / bisect).
## Decision: Release keys yes; bootloader lock no (2026-09-29)
**Decision**:
1. **Sign with definitive / project release keys** — required for Gate G
userspace. Move off AOSP test-keys for ship images/OTAs; keep Phonesky and
update identity on that key. Keys live only on `rom-dev01`
(`/srv/rom/secrets/`), never in the laptop Git tree.
2. **Do not pursue bootloader relock** as a ship goal. AXP and LineageOS do
not lock the bootloader as their normal product path; Magisk preroot and
recovery sideload assume unlocked. IOdes-style locked bootloader is an
explicit non-goal for this track.
**Rationale**: Clone AXP/LOS norms; avoid a locked-device model that fights
Magisk EXTENDROM preroot. Signing still matters for update trust and
PRESIGNED / same-identity sideload.
**Alternatives considered**: IOdes-class locked AVB ship — rejected by owner
(2026-09-29). Skip release keys entirely — rejected (Gate G / FR signing).
## Decision: Banking workflow deferred (owner future)
**Decision (2026-09-17)**: Banking / Island / Swissquote / Yuh validation is
**deferred**. Not an MVP acceptance gate. Magisk DenyList-class capability
still ships (general). Owner may resume US3 later.
**Rationale**: Owner wants updated AXP clone (features, options, hardening,
security, kernel) first; banks are a personal future problem.
**Alternatives considered**: Keep Swissquote as hard gate — rejected by owner.
## Decision: Updated hardened LOS23 sunfish kernel (FR-017)
**Decision (refined 2026-09-18):** Ship current LineageOS 23.2–compatible
`sunfish` kernel (`msm-4.14`) with attributable hardening. **Not** an
unrelated Graphene A13 / stock prebuilt as base. Record applied/skipped list
in `docs/009-kernel-hardening-map.md`.
**Source priority (owner):**
1. **AXP** — maximum priority; clone their sunfish kernel hardening first
(build sources / OTA oracle / GOLDEN). Inherited Divest-era commits that
already live *inside* the AXP stack are fine as part of that clone; do
**not** separately mine DivestOS EOL trees.
2. **LOS 23.2** — inventory what the lineage kernel already has; avoid
duplicate work.
3. **IodéOS** — LOS fork, more hardened/deblobbed; clone sources on
`rom-dev01` and diff for 4.14-safe ideas worth porting.
4. **GrapheneOS** — optional extras only when they make sense on non-GKI
4.14 sunfish: prefer portable techniques from modern Pixel kernels /
docs; historical sunfish A13 patches only if still clearly valuable.
Do **not** treat GOS A13 sunfish tree as the base.
**Out of hunt:** DivestOS as a separate research target (EOL).
**Rationale**: AXP-first resurrection; GOS/Iodé as additive; honest skips on
4.14.
**Inventory (2026-09-18):** LOS `msm-4.14` @ `28f9290ae067` (`4.14.357-openela`).
AXP `kernel_patches` @ `df3cab2155b3` on host. Graphene/AH sequential probe:
OK=30 / SKIP_ALREADY=4 / FAIL=12. Iodé `v5-staging` manifest has no sunfish
4.14 kernel fork. Stage 1 allowlist + apply script under
`vendor/sunfish-a16/patches/009-kernel-hardening/`. CVE mega deferred.
Ledger: `docs/009-kernel-hardening-map.md`.
## Decision: Location / localization hardening — do not extra-cap (FR-018)
**Decision (2026-09-18):** For this Magisk track, **do not** port AXP-class
aggressive location lockdown (kernel or userspace) beyond stock LOS 23.2
defaults. No “non-hardening location” Settings toggle for MVP — that is
extra product surface; simpler and matches owner GPS frustration to **leave
LOS location behaviour**. FR-018 compare doc may still note what AXP did,
for later curiosity, without shipping those caps.
**Alternatives considered**: (1) Clone AXP location caps — rejected (slow /
frustrating fixes). (2) Owner toggle to disable caps — deferred; only if
LOS defaults prove insufficient and owner asks later.
## Decision: Bundled store client = Droidify; no NeoLauncher
**Decision (2026-09-17):** Ship **Droidify** as the F-Droid-class client
instead of stock F-Droid (lighter; many repos by default). Do **not**
integrate NeoLauncher — keep LOS Launcher3. Aurora remains for Play-sideload
workflow.
## Decision: No AXP external repos / OTA servers
**Decision:** Do not wire AXP market/F-Droid remote repos or AXP OTA update
endpoints. AXP infra is EOL / servers down — no product sense. Periodic
system-package refresh is **owner sideload** (FR-019), not network OTA.
## Decision: Sideloadable system package refreshes (FR-019)
**Decision (2026-09-17):** Final ROM MUST keep **microG**, **Magisk**,
**project Phonesky**, and other bundled system/privileged apps
**updateable without full reflash**, on a ~**2–3 month** cadence the owner
drives. Prefer PackageManager-compatible sideload (same signing identity;
PRESIGNED microG; continuous project key for Phonesky). Magisk: document
manager self-update and/or recovery/boot re-patch when APK sideload alone is
not enough. Deliver a short recovery/sideload runbook before ship; do **not**
reintroduce AXP OTA.
## Decision: Private DNS + Internet connectivity (sans axp.os)
**Decision:** Port AXP-class **Private DNS** provider presets. Keep AXP-class
**Internet connectivity** / special INTERNET permission behaviour where it
still fits LOS 23.2, but strip any hard dependency on `axp.os` branding or
endpoints.
## Decision: Restore Disable app on Android 16
**Decision:** Investigate and re-expose classic **Disable application** UX on
A16/LOS23 where Archive replaced or hid it. Owner prefers Disable over
Archive. Exact Settings/PackageManager patch path TBD from AXP/LOS delta
research — must remain attributable and reversible.
## Decision: AXP build sources as compile oracle
**Decision:** On `rom-dev01`, prefer cloning/checking out AXP **build** +
EXTENDROM (and axpos.org developer building docs already mirrored under
`/srv/rom/references/axp/archive/`) to see how Magisk preroot / product packages
are wired — before treating GOLDEN `adb` as the compile guide. GOLDEN stays the
runtime compatibility oracle.
**Decision**: Do **not** freeze localization/location lockdown policy in this
feature’s acceptance. Later compare how much AXP “capea” location vs stock
LOS (owner historically complains AXP is aggressive). Until then, avoid
inventing extra location lockdown beyond what the clone already implies;
matrix row = deferred.
**Alternatives considered**: Blind-copy all AXP location patches now —
rejected (owner wants a deliberate compare first).
## Decision: Version freshness policy
**Decision**: Before long builds: `git fetch --tags` / refresh upstreams for
microG, Magisk, bundled apps; record tag/commit + version codes; never ship
from shallow or stale laptop caches (AGENTS.md lesson from `007`).
**Alternatives considered**: Trust whatever is already on the host — rejected.