Files
sunfish-admin 12d2179c20 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.
2026-09-16 21:56:22 +00:00

3.6 KiB

Quickstart / validation: 001-development-environment

Use after /speckit-implement on a real rom-dev01. Until the VM exists, treat this as the acceptance script shape.

Prerequisites

  • Host: a15.ssystems.de (49.13.104.83), SSH port 37037, guest name rom-dev01
  • Laptop key: ~/.ssh/id_ed25519_rom_dev01 + Host aliases in misc/config.d/a15-rom-dev01 (see docs/001-host-runbook.md)
  • Laptop has rsync, ssh, Cursor Remote SSH, adb/fastboot

P1 validation path

1. Preflight captured

ssh rom-dev01-root 'less /srv/rom/logs/preflight/preflight-latest.txt'

2. Build user workspace

ssh rom-dev01 'whoami; hostname; test -f ~/sunfish-a16-rom/specs/001-development-environment/spec.md && echo SPEC_OK'

3. Toolchain smoke (clean shell)

ssh rom-dev01 'bash -l -c "git --version; git lfs version; repo --version; python3 --version; ccache -s"'

Expected: all commands succeed without sudo. See /srv/rom/logs/toolchain-smoke.txt.

4. Layout

namei -l /srv/rom /srv/rom/artifacts /srv/rom/ccache
touch /srv/rom/artifacts/.write_test && rm /srv/rom/artifacts/.write_test

5. Meta repo present on host (pre-Gitea OK)

test -d /home/android-build/sunfish-a16-rom/.git
test -f /home/android-build/sunfish-a16-rom/specs/001-development-environment/spec.md

6. Cursor Remote SSH

From laptop: open host workspace; edit a trivial file; confirm it is on the VM disk (not only local).

7. Artifact rsync smoke

On host:

echo '001-smoke' > /srv/rom/artifacts/dummy-001.txt
sha256sum /srv/rom/artifacts/dummy-001.txt

On laptop:

rsync -avz USER@ROM_DEV01:/srv/rom/artifacts/dummy-001.txt ./
sha256sum ./dummy-001.txt   # must match

P2 validation path

8. Gitea private access

ssh -L 3000:127.0.0.1:3000 rom-dev01-root
# browser: http://127.0.0.1:3000/  (user sunfish-admin; password in host /srv/rom/secrets/)

Gitea binds only 127.0.0.1:3000. Git over HTTP to that URL (no public :2222).

9. Four repos

In Gitea: sunfish-a16-rom, sunfish-rom-manifest, sunfish-rom-build, sunfish-rom-patches (under sunfish-admin/).

10. Ansible CLI smoke

ssh rom-dev01 'cd ~/sunfish-rom-build && ansible-playbook -i ansible/inventory.ini ansible/smoke.yml'

11. Semaphore smoke (unprivileged)

ssh -L 3001:127.0.0.1:3001 rom-dev01-root
# http://127.0.0.1:3001/  project sunfish-rom / template env-smoke

Semaphore clones canonical sunfish-rom-build from Gitea and runs the smoke playbook without sudo. Evidence: /srv/rom/logs/semaphore-smoke.txt.

12. Off-VM mirrors

Laptop path: /home/aventura/Archives/sunfish-rom-mirrors/*.git (rsync from /srv/rom/artifacts/gitea-mirrors/ on host).

# refresh mirrors (host builds mirrors; laptop pulls via rsync — no token on laptop)
rsync -a android-build@a15.ssystems.de:/srv/rom/artifacts/gitea-mirrors/ \
  ~/Archives/sunfish-rom-mirrors/
git -C ~/Archives/sunfish-rom-mirrors/sunfish-a16-rom.git fsck

13. Restart survival

ssh rom-dev01-root 'systemctl restart gitea semaphore; curl -fsS -o /dev/null http://127.0.0.1:3000/; curl -fsS -o /dev/null http://127.0.0.1:3001/'

Evidence: /srv/rom/logs/restart-smoke.txt.

14. Isolation checklist

  • No required internal NIC for workflow
  • Gitea/Semaphore binds only 127.0.0.1
  • SSH still works after service restarts
  • Day-to-day docs do not require company VPN/internal DNS/LDAP/GitLab

Done means

001 complete → start 002 (AXP capture).
Do not start Lineage repo sync / build as part of 001 success.