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.
This commit is contained in:
sunfish-admin committed 2026-09-16 21:56:22 +00:00
commit 12d2179c20
150 files changed
+26263

No files matched your search

+110
View File
@@ -0,0 +1,110 @@
# Implementation Plan: KernelSU-Next on sunfish (LAB)
**Branch**: `007-kernelsu-sunfish` | **Date**: 2026-09-15 | **Spec**: [spec.md](./spec.md)
**Input**: Feature specification from `/specs/007-kernelsu-sunfish/spec.md`
## Summary
Bring **KernelSU-Next** into the LineageOS 23.2 sunfish **4.14** kernel on LAB,
verify per-app / per-user **root denial + mount hide** for banking UIDs, then
layer **SusFS** and a **TrickyStore-class** attestation experiment so that
**Yuh PASS** (Island) becomes achievable. **Yuh PASS is a hard-gate**: without
it, `007` is incomplete/cancelled — root is not justified vs NeoBackup + native
`008`/`009` and a stock banking phone.
`006` rootless-Yuh-pass is **deferred** and does not block start. Swissquote PASS is also mandatory; Revolut/N26 non-blocking. GOLDEN never flashed.
## Technical Context
**Language/Version**: Linux 4.14 kernel (C); KernelSU-Next / SusFS integration;
Android userspace manager APK; bash runbooks on `rom-dev01`
**Primary Dependencies**: LOS 23.2 sunfish kernel tree; KernelSU-Next (non-GKI
4.14-capable pin); SusFS; TrickyStore-class (or documented equivalent); `005`
userspace stack; Island; `002` Yuh/KeyMint logs
**Storage**: Host `/srv/rom/` kernel outs, module ZIPs, secrets; artifacts under
`/srv/rom/artifacts/007-…`
**Testing**: LAB flash only; KSU manager grants; mount/root probes per UID;
Yuh/Swissquote Island sessions; `keystore2`/KeyMint logcat vs `002`
**Target Platform**: Pixel 4a LAB `11231JEC207477`; Android 16 / LOS 23.2
**Project Type**: Android ROM kernel + root stack + LAB validation
**Performance Goals**: Boot + daily stability; SusFS soak ≥24h if claimed
**Constraints**: LAB only; no Magisk production; no Zygisk/LSPosed default;
banking never gets root; attributable kernel commits; Yuh PASS mandatory
**Scale/Scope**: One kernel integration POC → pin revision → SusFS →
attestation experiment → banking hard-gate on LAB
## Constitution Check
*GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.*
| Gate | Status |
|------|--------|
| LAB only; never GOLDEN | pass |
| KernelSU-Next is project root (not Magisk production) | pass |
| Banking apps never receive root; profiles + verified umount | pass |
| SusFS only after KSU + profiles work | pass (phased US1→US3) |
| No Zygisk/LSPosed as initial architecture | pass |
| Small attributable, reversible changes | pass (pinned commits) |
| `006` before `007` in written order | **amended explicitly in constitution 0.2.0** — rootless Yuh gate deferred; owner-approved sequencing; current-ROM snapshot required (T039) |
| Hardening Graphene/AXP full ports | out of scope → `013` |
**Post-design**: Same. Yuh hard-gate is an owner product gate layered on top of
constitution Compatibility MVP (Yuh in Insular) — aligned, stricter on `007`
acceptance.
## Project Structure
### Documentation (this feature)
```text
specs/007-kernelsu-sunfish/
├── plan.md
├── research.md
├── data-model.md
├── quickstart.md
├── contracts/
│ ├── ksu-hide-surface.md
│ └── banking-yuh-gate.md
└── tasks.md # via /speckit-tasks (not this command)
```
### Host + tree
```text
# rom-dev01
/srv/rom/src/lineage/kernel/… # LOS 23.2 sunfish-compatible kernel
/srv/rom/src/lineage/… # product builds including boot.img
/srv/rom/artifacts/007-kernelsu/ # bacon outs, pins, Yuh log packs
/srv/rom/references/… # optional mirrors of KSU/SusFS/TrickyStore docs
# Meta repo
docs/002-*-*.md # Yuh/KeyMint baselines (read-only input)
docs/reference-sources.md §8–10 # community inspiration, not base
docs/a15-a16-delta.md # attestation notes as measured
```
**Structure Decision**: Kernel work lives on `rom-dev01` LOS tree; meta-repo
keeps specs, contracts, runbooks, and pin records. No Magisk tree. No megapatch
dumps in Git — pin URLs/commits + small project patches only.
## Complexity Tracking
| Violation / stretch | Why needed | Simpler alternative rejected because |
|---------------------|------------|--------------------------------------|
| Start `007` without closing `006` rootless Yuh | `002` shows Yuh fails with and without Magisk (KeyMint/RKP) | Waiting on rootless Yuh green has no known path |
| SusFS + TrickyStore-class in same feature as KSU | Owner: Yuh PASS mandatory; hide alone insufficient on GOLDEN | KSU-only “done” without Yuh → root not worth keeping |
| Yuh PASS hard-gate on EOL sunfish | Product rationale: else stock phone + `008`/`009` | Soft FAIL documentation wastes a root maintenance burden |
## Phase 0 / Phase 1
See `research.md`, `data-model.md`, `contracts/*`, `quickstart.md`.
## Remediation alignment — 2026-09-15
Constitution 0.2.0 explicitly defers `006`; T039 records our current rootless
LAB state before kernel changes, without requiring PASS. US5 alone owns banking
acceptance: both Yuh and Swissquote must pass on the same stack. US4 owns
attestation investigation/evidence, not a duplicate acceptance gate. Older
iodé/GOLDEN KeyMint logs are correlations, not proof of our ROM's failure cause.
T040 explicitly verifies the no-Zygisk/LSPosed constraint.