Ship Magisk like GOLDEN; KernelSU optional recycle only; parallel to sunfish-a16-rom standby.
8.0 KiB
Feature Specification: AXP.OS GOLDEN reference capture
Feature Branch: 002-axp-reference-capture
Created: 2026-08-09
Status: P1 complete (gate to 003); archive rsync may still finish in background
Input: Document and sample the GOLDEN daily-driver AXP.OS sunfish as a
live compatibility oracle; label GOLDEN vs LAB; prepare LAB stock factory
rescue. Experimental flashing stays on LAB only (docs/device-roles.md).
Context / non-goals
- There are two sunfish devices: GOLDEN (AXP.OS 22.2 / Android 15 daily driver — do not experiment/flash) and LAB (flash/reflash freely).
- Exact GOLDEN build fingerprint/patch is measured here (
getprop). GOLDEN is AXP 22.2/A15 — not the last GrapheneOS sunfish release (that was A13, historical reference only). - Broader offline AXP sunfish archive (website, selected git, images) is
documented in
docs/axp-sunfish-preservation.mdfor execution onrom-dev01— not a full Disroot org clone; does not replace live GOLDENadb. - Capture essential versions/config up front; GOLDEN remains available for
later live
adbre-queries — do not require an exhaustive one-shot dump of everything before003. - NeoBackup / wipe / migrate GOLDEN are not project requirements.
- Do not invent package versions/UIDs in the constitution; this feature records what GOLDEN actually runs.
- Do not commit credentials, tokens, or personal identifiers to Git.
- Observe devices; do not assume bootloader unlock state until measured (both GOLDEN and LAB).
- Product intent vs AXP Pro lives in non-normative
docs/axp-pro-parity.md.
User Scenarios & Testing (mandatory)
User Story 1 - Device roles + LAB stock rescue (Priority: P1)
As the developer, GOLDEN and LAB are clearly identified, and LAB has a written Google factory-image emergency rescue so experiments cannot permanently brick the lab phone.
Why this priority: Prevents flashing the wrong phone; keeps LAB recoverable.
Independent Test: Serials/labels documented; factory image procedure for LAB reviewed; GOLDEN marked do-not-flash.
Acceptance Scenarios:
- Given two sunfish devices, When I record serials (or equivalent IDs) and physical/doc labels, Then GOLDEN vs LAB cannot be confused.
- Given GOLDEN and LAB, When I inspect bootloader/fastboot/
getpropon each, Then lock state and build identity are recorded without prior assumptions. - Given official Google sunfish factory images, When I document image
set, hashes, and flash steps for LAB, Then LAB emergency stock rescue
exists before
003experiments. - Given project docs, When reviewed, Then they state GOLDEN must not receive experimental project flashes.
User Story 2 - Essential GOLDEN inventory (Priority: P1)
As the developer, I have enough structured inventory of GOLDEN AXP to start
004–006, knowing I can re-probe GOLDEN later for missing details.
Why this priority: Defines the live oracle without blocking on perfection.
Independent Test: Essential checklist complete or explicitly deferred with “re-query GOLDEN later” notes — no silent unknowns for hard-gates.
Acceptance Scenarios:
- Given GOLDEN AXP, When I collect
getprop/ fingerprints, Then exact ROM/build identifiers are stored. - Given microG, When inventoried at essential level, Then recorded: version, signing cert; Self-Check; Device Registration; Cloud Messaging; relevant permissions.
- Given Phonesky /
com.android.vending, When inventoried, Then recorded: version; APK path; cert; permissions; spoofing state; usefuldumpsys package/ priv-app XML notes. - Given Insular, When inventoried, Then recorded: profile IDs;
profile owner;
dumpsys device_policyexcerpt; owner vs work UIDs/packages; Yuh/Swissquote locations. - Given Magisk/root, When inventoried, Then recorded: Magisk version; modules; DenyList including processes.
- Given GSF Proxy and related packages, When inventoried, Then versions/paths/signatures are recorded.
- Given banking interest, When measurable, Then record observational Play Integrity (or equivalent) state plus Yuh/Swissquote pass/fail on GOLDEN — comparative baseline only, not a Strong Integrity promise for our ROM.
- Given Daily-driver MVP features we will replace natively, When capturing modules/settings, Then document current call-recording and FLAG_SECURE bypass behaviour/source on GOLDEN (AXP vs module; global/per-app).
User Story 3 - Golden banking flow on GOLDEN (Priority: P1)
As the developer, the known-good banking install order is written from GOLDEN
so 006 can reproduce it on LAB (with KernelSU substituting DenyList later).
Why this priority: Order is load-bearing.
Independent Test: Step list matches GOLDEN procedure.
Acceptance Scenarios:
-
Given GOLDEN, When I document the banking app install flow, Then it explicitly includes:
- Aurora Store → install
- Do not open
- Magisk DenyList before first process (include processes)
- Clone into Insular
- First launch inside Insular
- Phonesky/Play in Insular
- Play update inside work profile if required
- Verify login/biometrics/push/reboot as applicable
-
Given that flow, When stored in the redacted summary, Then it omits passwords, OTPs, and personal identifiers.
User Story 4 - Safe artifact handling (Priority: P2)
As the developer, sensitive captures stay off Git; redacted summaries are
committed to sunfish-a16-rom.
Acceptance Scenarios:
- Given raw pulls/APKs, When stored, Then they live under e.g.
/srv/rom/references/axp/onrom-dev01, not in Git. - Given in-repo summary, When reviewed, Then it has versions/hashes/ workflow steps without personal secrets.
Edge Cases
- GOLDEN encrypt/PIN: document without storing the PIN.
- Missing detail later: re-attach GOLDEN and
adb— do not invent. - LAB brick: use LAB stock factory rescue; do not wipe GOLDEN to “recover”.
- Optional personal NeoBackup of GOLDEN is outside project gates.
Requirements (mandatory)
Functional Requirements
- FR-001: Label and record GOLDEN vs LAB identities; measure bootloader/ fastboot state on both.
- FR-002: Document LAB Google factory-image emergency rescue (hashes + steps).
- FR-003: Capture essential GOLDEN inventory (microG, GSF, Phonesky, Insular, Magisk/DenyList processes, Yuh/Swissquote, call-recording + FLAG_SECURE sources, observational Play Integrity if measurable).
- FR-004: Document GOLDEN banking flow (Aurora → NO OPEN → DenyList → Insular → Play update).
- FR-005: Store raw artifacts off-Git; commit only redacted docs.
- FR-006: Gate: no experimental flash on LAB until LAB rescue docs exist and GOLDEN is explicitly marked do-not-flash; no NeoBackup/wipe of GOLDEN required.
- FR-007: Cross-link useful facts into
docs/axp-pro-parity.md/docs/device-roles.mdwithout inventing unseen features.
Key Entities
- GOLDEN: live AXP oracle (not wiped for bring-up).
- LAB: experimental flash target + stock rescue docs.
- Reference bundle: host-local capture directory.
- Redacted summary: in-repo documentation.
Success Criteria (mandatory)
Measurable Outcomes
- SC-001: GOLDEN vs LAB clearly identified; agents/docs forbid flashing GOLDEN.
- SC-002: LAB stock factory rescue written and reviewed before
003. - SC-003: Essential GOLDEN inventory + banking flow complete enough for
006hard-gates; gaps marked “re-query GOLDEN” not invented. - SC-004: Yuh/Swissquote verified working on GOLDEN and documented.
- SC-005: Git has no proprietary APK dumps or personal credential material.
- SC-006: Bootloader states in docs match measured GOLDEN and LAB reality.