Ship Magisk like GOLDEN; KernelSU optional recycle only; parallel to sunfish-a16-rom standby.
11 KiB
Tasks: KernelSU-Next on sunfish (LAB) + Yuh/Swissquote gate
Input: Design docs from /specs/007-kernelsu-sunfish/
Prerequisites: 005 stack on LAB; 002 Yuh/KeyMint baselines; constitution
KernelSU-Next (not Magisk production)
Organization: Priority = Swissquote + Yuh on LAB. KSU/SusFS/TrickyStore
exist to serve that gate. If the gate cannot be met after the experiment track,
cancel root and pivot to native 008/009 (+ optional stock phone) — do
not ship “root without Yuh” as success.
Out of scope: GOLDEN flash; Magisk production; Revolut/N26 hard-gates;
full Graphene/AXP kernel hardening (013).
Format: [ID] [P?] [Story] Description
- [P]: Can run in parallel (different files, no incomplete deps)
- [Story]: US1…US5 from
spec.md
Path conventions
- Meta:
docs/,specs/007-kernelsu-sunfish/ - Host:
/srv/rom/src/lineage/(kernel + boot),/srv/rom/artifacts/007-kernelsu/,/srv/rom/logs/007-build/
Phase 1: Setup
Purpose: Artifact dirs, baseline index, pin stubs
-
T001 Create
/srv/rom/artifacts/007-kernelsu/and/srv/rom/logs/007-build/onrom-dev01(android-build writable) -
T002 [P] Add
docs/007-kernelsu-runbook.mdstub (LAB-only; pin table; Yuh hard-gate; cancel-root criteria) in meta repo -
T003 [P] Index
002Yuh evidence paths indocs/007-kernelsu-runbook.md(GOLDEN + LAB iodé KeyMint refs fromdocs/002-golden-inventory.md/docs/002-lab-iodes-baseline.md) -
T004 [P] Confirm LAB still on
005userspace (pm pathgms/gsf/vending; spoof toggle) — note build id in/srv/rom/artifacts/007-kernelsu/preflight.txt -
T039 Before T009/T011, capture a rootless snapshot of the current LAB ROM: both bank versions/outcomes, build type, microG/Phonesky versions and attestation probe/logs under
pre-root/. FAIL is allowed; record actual results rather than inferring them from iodé/GOLDEN. Document Island as the current managed-profile vehicle indocs/007-kernelsu-runbook.md. (2026-09-15: banks not installed → N/A; see pre-root/OUTCOMES.txt)
Phase 2: Foundational (blocks all stories)
Purpose: Choose 4.14-capable KernelSU-Next revision; locate LOS kernel tree; no banking claims yet
⚠️ CRITICAL: No SusFS/attestation/Yuh PASS claims until KSU boots on LAB
- T005 Inventory LOS 23.2 sunfish kernel path on
/srv/rom/src/lineage/(defconfig, branch); record indocs/007-kernelsu-runbook.md(kernel/google/msm-4.14@28f9290ae067…; sunfish_defconfig) - T006 Select KernelSU-Next revision compatible with non-GKI 4.14; document
candidates + choice in
docs/007-kernelsu-runbook.md(ReSukiSU only as explicit fallback) (legacybranch; manual hooks preferred over kprobes) - T007 Mirror/checkout chosen KernelSU-Next sources under
/srv/rom/references/kernelsu-next/(or documented path); record commit (@a54e4fa46c6c…) - T008 Draft integration notes (what files touch kernel vs boot.img) in
docs/007-kernelsu-runbook.md— attributable commits only, no megapatch
Checkpoint: Ready to integrate and build boot (US1)
Phase 3: User Story 1 — Bootable rooted LAB image (P1) 🎯 MVP slice
Goal: LAB boots with KernelSU-Next; selective root works
Independent test: Manager present; one approved app gets root; unapproved
does not; telephony/Wi‑Fi OK
- T009 [US1] Integrate KernelSU-Next into sunfish kernel tree under
/srv/rom/src/lineage/; build boot/kernel; log/srv/rom/logs/007-build/ksu-poc.log - T010 [US1] Stage boot/images + SHA256 to
/srv/rom/artifacts/007-kernelsu/<date>-ksu-poc/ - T011 [US1] Flash LAB only (
11231JEC207477); confirm boot +ro.lineage.version; install/open KSU manager - T012 [US1] Grant root to one debug app; deny a second; capture evidence
under
/srv/rom/artifacts/007-kernelsu/<date>-ksu-poc/root-grant/ - T013 [US1] Pin exact KernelSU-Next revision in
docs/007-kernelsu-runbook.md+ artifactPIN.txt
Checkpoint: US1 green before profiles/SusFS
Phase 4: User Story 2 — Banking never root; mounts hidden (P1)
Goal: Yuh/Swissquote UIDs denied + verified umount/hide
Independent test: contracts/ksu-hide-surface.md — not toggle-only
- T014 [US2] Configure KSU profiles: deny root for
com.yuhandcom.swissquote.androidon user 0 and Island user; document steps indocs/007-kernelsu-runbook.md - T015 [US2] Enable umount/hide for those UIDs; verify
path_umount(or equivalent) works on this 4.14 build — note pass/fail in/srv/rom/artifacts/007-kernelsu/<date>-hide/umount.txt - T016 [US2] From banking or probe UID, capture mount/root visibility
before/after hide →
/srv/rom/artifacts/007-kernelsu/<date>-hide/mounts/ - T017 [US2] Mark
contracts/ksu-hide-surface.mdchecklist rows against real evidence (update runbook if contract gaps)
Checkpoint: Hide verified before SusFS
Phase 5: User Story 3 — SusFS after profiles (P2)
Goal: SusFS on LAB; measurable hide; no reboot loop
Independent test: Boot + one path hidden; soak before claim
Note (2026-09-16): T018 build completed early (API bridge) before US2
hide verification — process exception. Boot artifact
boot-resukisu-susfs-20260916T004038Z.img is trial only. Prefer LAB on
boot-resukisu-our-20260915T183729Z until US2 green; then re-attempt T019.
abu/torukk boots are reference-only — see docs/session-20260916-handoff.md.
- T018 [US3] Integrate SusFS into the pinned kernel path; build; log
(host detach SusFS boot 20260916T004038Z; sha
455a77a6…) - T019 [US3] Flash LAB; confirm boot + KSU still works; record SusFS pin in
docs/007-kernelsu-runbook.md - T020 [US3] Re-verify banking UID hide with SusFS on → artifact
/srv/rom/artifacts/007-kernelsu/<date>-susfs/ - T021 [US3] Soak ≥24h or document revert if unstable (SC-005); update
SusFS status
trial/claimed/revertedin runbook
Checkpoint: SusFS stable or withdrawn before attestation claims that depend on it
Phase 6: User Story 4 — Attestation / KeyMint experiment (P1)
Goal: TrickyStore-class (or equiv.) vs 002 Yuh KeyMint failure
Independent test: New log pack; progress toward Yuh PASS
- T022 [US4] Choose attestation experiment stack (TrickyStore-class or
documented equivalent + microG HA toggles); record source URL, immutable commit or release and binary SHA256, dependencies, key-material requirements, auditability and rollback in
docs/007-kernelsu-runbook.mdbefore T023 - T023 [US4] Apply stack on LAB; capture
keystore2/KeyMint/RKP logcat on Yuh open →/srv/rom/artifacts/007-kernelsu/<date>-attest/ - T024 [US4] Diff against
002failure class; write short delta note in artifactDELTA.md(same / improved / resolved) - T025 [US4] Iterate one candidate at a time based on measured probe/banking outcomes; do not use a log string alone as the failure criterion; keep each attempt under dated artifact dirs — do not mark feature done on FAIL
Checkpoint: Diagnostic evidence ready for US5; persistent log messages alone do not determine acceptance. Exhausted unsuccessful bank attempts lead to Phase 9 or an incomplete feature.
Phase 7: User Story 5 — Banking regression / hard-gate (P1)
Goal: Yuh and Swissquote PASS in Island
Independent test: contracts/banking-yuh-gate.md + quickstart.md
-
T026 [US5] Install path: Aurora → (prefer no owner open) → Island clone for Yuh + Swissquote; note UIDs in
/srv/rom/artifacts/007-kernelsu/<date>-banking/layout.txt -
T027 [US5] Swissquote Island session → PASS required + evidence under
…/<date>-banking/swissquote/ -
T028 [US5] Yuh Island session → PASS required; evidence under
…/<date>-banking/yuh/(build id, stack pins, log excerpt) -
T040 Before T029 acceptance, verify FR-009: installed packages, root module inventory, relevant processes/mounts and build configuration show no Zygisk/LSPosed integration. Store evidence; a package-name check alone is insufficient. Any proposed exception requires a spec decision first.
-
T029 [US5] If both banks PASS: fill
data-model.mdbanking row + tickspecs/007-kernelsu-sunfish/quickstart.mdpass criteria -
T030 [US5] If either bank FAILS after T022–T025 exhausted: do not accept
007; proceed to Phase 9 cancel-root tasks
Checkpoint: Feature accepted only with both banks PASS
Phase 8: Polish (only if both banks PASS)
- T031 [P] Update
docs/axp-pro-parity.mdroot / DenyList / Yuh / Swissquote rows to reflect KSU-Next + LAB results - T032 [P] Update
docs/a15-a16-delta.mdattestation/007measured notes - T033 Handoff note in
docs/007-kernelsu-runbook.md: next may be008call recording /009FLAG_SECURE; full hardening still012–013 - T034 Mark deferred
006as superseded-by-007(or thin stub) inspecs// roadmap note — no fake rootless Yuh success
Phase 9: Cancel-root pivot (only if either banking hard-gate fails)
Purpose: Owner priority — without Yuh/Swissquote success, discard project root and keep native requirements instead
- T035 Write
/srv/rom/artifacts/007-kernelsu/CANCEL-ROOT.md(attempts, last pins, KeyMint residual, recommendation: stock phone for banks) - T036 Update
docs/007-kernelsu-runbook.md+docs/axp-pro-parity.md: root path withdrawn; Magisk/KSU not production - T037 [P] Stub or specify next focus:
008call recording +009FLAG_SECURE (native, no LSPosed) — Spec Kit when owner starts them - T038 Leave LAB on last known-good non-root (
005) image or document re-flash steps in runbook
Dependencies
Setup T001–T004 + T039
→ Foundational T005–T008
→ US1 T009–T013 (KSU boot)
→ US2 T014–T017 (hide)
→ US3 T018–T021 (SusFS)
→ US4 T022–T025 (attest)
→ US5 T026–T030 + T040 (both-bank gate)
↘ PASS → Polish T031–T034
↘ FAIL → Cancel-root T035–T038
- US3 may be skipped only if US4/US5 PASS without SusFS (document why)
- US4/US5 are the product priority; US1–US2 are enablers
Parallel opportunities
- T002, T003, T004 after T001
- T031, T032 after both banks PASS
- T037 anytime during cancel-root phase
MVP
Minimum useful slice: T001–T013 (KSU boots on LAB).
Product MVP: T027 Swissquote PASS and T028 Yuh PASS on the same stack.
Either unresolved failure → Phase 9 or remain incomplete, never “007 done”.
Suggested next command after tasks
/speckit-analyze (optional) → /speckit-implement starting at T001 on
rom-dev01 (kernel work is host-side; LAB flash when boot ready).