---
name: gravity-deploy-procedure
description: "How to build+deploy spt to gravity-linux — ssh david@100.100.62.43, dedicated ~/spt-core-deploy clone (NEVER the runner workspace), setsid daemon"
metadata: 
  node_type: memory
  type: project
  originSessionId: 1e58ea17-ddb7-4452-b3b2-33498b4e39d0
---

Gravity-linux access + deploy (established 2026-06-06):

- SSH: `david@100.100.62.43` (tailscale; key auth works from HFENDULEAM). NOT brandon/decid; `tailscale ssh` fails host-key check — use plain ssh.
- Build in the DEDICATED clone `~/spt-core-deploy` — never in `~/actions-runner/_work/spt-core/spt-core`: a CI job racing a manual build there wipes target/ mid-compile (paid once: "deps/: No such file or directory" cascade).
- cargo not on non-interactive PATH: use `$HOME/.cargo/bin/cargo`.
- Install: `cp target/release/spt ~/.local/bin/spt` after `pkill -x spt`.
- Daemon restart: `setsid nohup ~/.local/bin/spt daemon > /tmp/spt-daemon.log 2>&1 < /dev/null &` — setsid mandatory pre-d4e9314 binaries (sshd HUPs the session); binaries ≥ 4aea97e self-setsid on auto-spawn but an explicit start still wants it.
- Listener re-arm: `setsid nohup ~/.local/bin/spt ready sergey > /tmp/sergey.log 2>&1 < /dev/null &`.
- HFENDULEAM side: installed binary `%LOCALAPPDATA%\spt-core\bin\spt.exe`; stop via `Stop-Process` (kills daemon), swap, any `subnet status --nodes` auto-restarts; lea listener via `Start-Process spt.exe -ArgumentList ready,lea -WindowStyle Hidden -RedirectStandardOutput $env:TEMP\lea.log`.
- After fresh daemon restart expect ~1 min before the peer's registry feed lands (post-join address seeding gap, [[spt-daemon-is-live-infra]]); NO_PERCH on a cross-machine send during that window is the known first-sync lag, not a fault.

**Why:** fleet deploys recur every milestone closeout; username + workspace-contention + setsid + first-sync facts are all non-derivable and each cost real time once.
**How to apply:** follow verbatim for any "install latest on both machines" request; bump SHAs only.
