Files
AXP-Resurection/docs/009-laptop-migration-20261016.md
T

6.3 KiB

Laptop migration — AXPR (2026-10-16)

Portable bundle for moving AXP_Resurection + sunfish-a16-rom to a new machine without Cursor chat history. Agents should read this file after AGENTS.md and docs/009-handoff-20261008.md.

USB layout (this export)

AXPR/
  README-FIRST.md              → copy of this doc (short pointer)
  MANIFEST.txt                 → rsync timestamp + paths
  Workspaces/
    AXP_Resurection/           → full git tree (incl. uncommitted WT)
    sunfish-a16-rom/           → parallel KernelSU / standby meta repo
  laptop-home/
    ssh/id_ed25519_rom_dev01   → rom-dev01 / a16.ssystems.de (mode 600 on restore)
    ssh/id_ed25519_rom_dev01.pub
    android/                   → adbkey + debug.keystore (optional USB debug)

Not on USB (stays on server): Lineage out/, ccache, release keys (/srv/rom/secrets/android-certs), prebuilt APKs under /srv/rom/prebuilts/, AXP reference trees under /srv/rom/references/.

New laptop — minimum setup

  1. Restore workspaces under ~/Workspaces/ (or any path; update scripts if moved).
  2. Install private key:
    mkdir -p ~/.ssh && chmod 700 ~/.ssh
    cp laptop-home/ssh/id_ed25519_rom_dev01 ~/.ssh/
    chmod 600 ~/.ssh/id_ed25519_rom_dev01
    
  3. Wire SSH (repo ships client config):
    # in ~/.ssh/config
    Include ~/Workspaces/AXP_Resurection/docs/ssh/config
    
  4. Verify host:
    ssh -F ~/Workspaces/AXP_Resurection/docs/ssh/config a16-build 'whoami; hostname'
    
  5. Gitea + web UI — see Gitea and services below.
  6. Optional: cp laptop-home/android/adbkey* ~/.android/ for same ADB RSA trust.

Host runbook: docs/001-host-runbook.md. Device roles: docs/device-roles.md.

Gitea and services

Layer What
URL https://a16.ssystems.de/ (Gitea), https://a16.ssystems.de/semaphore/
Edge auth nginx HTTP Basic (user sunfish) — password on host only: /srv/rom/secrets/web-htpasswd.txt (read as root on rom-dev01; not in Git)
Gitea login sunfish-admin — app password/token on host: /srv/rom/secrets/gitea-admin.txt
Git transport HTTPS through nginx (DISABLE_SSH=true on Gitea)

Clone / update (canonical branches):

git clone https://a16.ssystems.de/sunfish-admin/AXP-Resurection.git
cd AXP-Resurection && git checkout 009-axp-los23-port

git clone https://a16.ssystems.de/sunfish-admin/sunfish-a16-rom.git
cd sunfish-a16-rom && git checkout standby-ksu-split-roadmap

Git from the laptop needs Gitea credentials in the HTTPS URL (nginx Basic alone is not enough for git push). On first login as sunfish-admin, create a Personal Access Token (Gitea → Settings → Applications) and either:

git config --global credential.helper store
# first fetch/push: user sunfish-admin, password = token

or embed in the remote (keep out of Git):

https://sunfish-admin:<TOKEN>@a16.ssystems.de/sunfish-admin/AXP-Resurection.git

Host-side pushes can use /srv/rom/secrets/gitea-admin.txt (api_token) on loopback 127.0.0.1:3000 — laptop does not get that file in Git.

Pushed to Gitea (2026-10-16 UTC): AXP-Resurection @ 009-axp-los23-port → 2d145c2; sunfish-a16-rom @ standby-ksu-split-roadmap → 491fdfb. Prefer git clone/pull on the new laptop over the USB tree if the stick predates that push.

Branches (2026-10-16):

Repo Ship / active branch Notes
AXP-Resurection 009-axp-los23-port Magisk 009; main is older
sunfish-a16-rom standby-ksu-split-roadmap KernelSU parallel; main

Not in Git: artifacts/ bootanimation PNG tree (~GB; optional on USB bundle), /srv/rom/prebuilts/, release keys, SSH private key (USB laptop-home/ssh/).

Git state at export (AXP_Resurection)

Item Value
Branch 009-axp-los23-port
vs origin Should match Gitea after 2026-10-16 push from old laptop
artifacts/ Gitignored (bootanimation frames); keep USB copy if needed

After push, a fresh git clone + checkout 009-axp-los23-port is enough for code/docs; large host-only paths stay on rom-dev01.

Remotes:

  • AXP_Resurection → https://a16.ssystems.de/sunfish-admin/AXP-Resurection.git
  • sunfish-a16-rom → https://a16.ssystems.de/sunfish-admin/sunfish-a16-rom.git

Host build in flight (2026-10-16 evening)

Full polish bacon (configstore + EuiccDisabler + thermal CDEV log fixes):

Field Value
Stage on host /srv/rom/artifacts/009-axp-los23-port/worktree-20261016-polish
tmux session bacon009polish20261016
Status /srv/rom/artifacts/detach-bacon009polish20261016.status
Log /srv/rom/artifacts/detach-bacon009polish20261016-20261016T183009Z.log
Command AXP_PROJECT_SOURCE=<stage> LOS_SYNC=0 LOS_DATE=20261016 bash <stage>/scripts/009-rebuild-from-los.sh
Expected zip AXP-Resurection-Pro-23.2-20261016-sunfish.zip (if postflight passes)

Monitor from any laptop with SSH:

ssh -F docs/ssh/config a16-build cat /srv/rom/artifacts/detach-bacon009polish20261016.status
ssh -F docs/ssh/config a16-build tail -30 /srv/rom/artifacts/detach-bacon009polish20261016-20261016T183009Z.log

After a fix on the laptop tree:

./scripts/009-sync-ota-stage-to-host.sh
./scripts/009-relaunch-polish-bacon.sh

(009-relaunch-polish-bacon.sh = sync + rom-detach same session name.)

Polish fixes (uncommitted WT) — summary

Detail: docs/009-lab-polish-20261016.md.

Issue Apply script / gate
configstore VINTF crash-loop apply_009_drop_lab_only_commands.py restores disable_configstore; bacon postflight
EuiccDisabler crash apply_009_euicc_disabler_guard.py (after euicc drop)
pixel-thermal false CDEV ERROR apply_009_thermal_cdev_log.py
media_quality / SLIM_0_RX documented; no ship fix

Tests: tests/test_009_next_bacon_guards.py (polish guards).

Agent onboarding (no chat history)

  1. AGENTS.md
  2. docs/009-handoff-20261008.md
  3. docs/009-laptop-migration-20261016.md (this file)
  4. docs/device-roles.md + docs/009-lab-polish-20261016.md
  5. docs/009-ota-rebuild-checklist.md before any bacon

Security: USB holds a private SSH key. Encrypt the stick or wipe after restore; never commit keys to Git.