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

167 lines
6.3 KiB
Markdown

# 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:
```bash
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):
```sshconfig
# in ~/.ssh/config
Include ~/Workspaces/AXP_Resurection/docs/ssh/config
```
4. Verify host:
```bash
ssh -F ~/Workspaces/AXP_Resurection/docs/ssh/config a16-build 'whoami; hostname'
```
5. **Gitea + web UI** — see [Gitea and services](#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):**
```bash
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:
```bash
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:
```bash
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:
```bash
./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.