Add optional Cosmos/Engine-X/act-runner templates, CWUSDC/EI-matrix tooling, non-EVM route planner in multi-chain-execution (tests passing), token list and extraction updates, and documentation (MetaMask matrix, GRU/CWUSDC packets). Ignore institutional evidence tarballs/sha256 under reports/status. Validated with: bash scripts/verify/run-all-validation.sh --skip-genesis Co-authored-by: Cursor <cursoragent@cursor.com>
7.4 KiB
Workstation → Dev VM migration (shared SSH development)
Purpose: Move canonical day-to-day development from ~/projects on a laptop/WSL box to LXC 5700 (Dev VM, 192.168.11.59) under /srv/projects, so all contributors and tooling use the same tree over SSH (including Cursor Remote-SSH).
Canonical references: DEV_VM_GITOPS_PLAN.md, DEV_VM_SSH_REMOTE_ACCESS.md, scripts/create-dev-vm-5700.sh, scripts/setup-dev-vm-users-and-gitea.sh.
1. What moves vs what stays local
| Item | Where it runs |
|---|---|
| Source tree, builds, tests, Git | Dev VM /srv/projects (after migration) |
| Cursor / IDE UI | Your laptop — connect with Remote-SSH to the Dev VM (code executes on 5700) |
Proxmox host shell (pct, qm) |
SSH to the node that runs CT 5700 (see DEV_VM_SSH_REMOTE_ACCESS.md — 5700 may live on r630-04, not r630-01) |
Pyright/Cursor language services then analyze files on the Dev VM when you use Remote-SSH, which also reduces “huge local monorepo” indexing on WSL.
2. Preconditions
- CT 5700 exists, is started,
sshdreachable:
ssh -o ConnectTimeout=5 "${DEV_VM_USER:-dev1}@${IP_DEV_VM:-192.168.11.59}" pwd /srv/projectsexists and is writable by your dev user (groupdevor ACLs per setup script).- SSH key for that user is loaded (
ssh-add -l). - Network: Choose one path:
- LAN / VPN:
192.168.11.59:22(same asIP_DEV_VM). - Cloudflare Tunnel + Access (FQDN):
ssh.dev.d-bis.org— does not work as plainssh user@ssh.dev.d-bis.orgto port 22 through the public proxy; usecloudflared access ssh(see below and DEV_VM_SSH_REMOTE_ACCESS.md). - UDM WAN forward: e.g.
76.53.10.40:22→192.168.11.59:22(restrict by allowlist) — then SSH to the public IP/hostname on port 22, not the Cloudflare tunnel hostname.
- LAN / VPN:
2.1 Probes (copy/paste)
LAN (works when this workstation is on VLAN 11 / VPN to 192.168.11.0/24):
ssh -o BatchMode=yes -o ConnectTimeout=8 dev1@192.168.11.59 true && echo OK
FQDN via Cloudflare Access (requires cloudflared on PATH + policy / service token):
ssh -o BatchMode=yes -o ConnectTimeout=25 \
-o ProxyCommand="cloudflared access ssh --hostname %h" \
dev1@ssh.dev.d-bis.org true && echo OK
All-in-one script (from repo root):
./scripts/deployment/probe-dev-vm-ssh.sh
Note: A plain ssh dev1@ssh.dev.d-bis.org without ProxyCommand typically times out or errors: the hostname resolves to Cloudflare anycast, not a raw open :22 on the public Internet. That is expected for tunnel-routed SSH.
2.2 Install cloudflared on the workstation (for FQDN SSH / rsync)
mkdir -p ~/bin
ARCH=$(uname -m); case "$ARCH" in x86_64) CF_ARCH=amd64;; aarch64|arm64) CF_ARCH=arm64;; *) CF_ARCH=amd64;; esac
curl -fsSL "https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-${CF_ARCH}" -o ~/bin/cloudflared
chmod +x ~/bin/cloudflared
export PATH="$HOME/bin:$PATH"
Then configure Cloudflare Access (browser login or CF_ACCESS_CLIENT_ID / CF_ACCESS_CLIENT_SECRET per DEV_VM_SSH_REMOTE_ACCESS.md). A TLS handshake failure from cloudflared access ssh usually means missing or invalid Access credentials.
3. One-time: create or verify the Dev VM
From repo root (operator machine with SSH to a Proxmox node):
bash scripts/create-dev-vm-5700.sh --dry-run # optional
bash scripts/create-dev-vm-5700.sh
Inside 5700 (or via pct exec 5700 -- …):
bash /path/to/proxmox/scripts/setup-dev-vm-users-and-gitea.sh
Add all developers’ public keys to dev1–dev4 (or your chosen accounts).
4. Sync ~/projects → /srv/projects (first migration)
Default source is ~/projects (matches ~/projects on WSL when HOME is /home/intlc).
Dry-run:
cd ~/projects/proxmox
./scripts/deployment/sync-local-projects-to-dev-vm.sh --dry-run
Live sync (default: no remote deletes — safe for first migration; remote-only trees like the_order are kept):
./scripts/deployment/sync-local-projects-to-dev-vm.sh
Mirror the workstation onto the VM (removes remote files not present locally — use only after review):
./scripts/deployment/sync-local-projects-to-dev-vm.sh --delete-remote
Over Cloudflare Access SSH (requires cloudflared + Access policy / service token; set hostname to the tunnel FQDN):
export PATH="$HOME/bin:$PATH"
export RSYNC_RSH='ssh -o BatchMode=yes -o ConnectTimeout=30 -o ProxyCommand="cloudflared access ssh --hostname ssh.dev.d-bis.org"'
export DEV_VM_HOST=ssh.dev.d-bis.org
cd ~/projects/proxmox
./scripts/deployment/sync-local-projects-to-dev-vm.sh --dry-run
Environment overrides:
SOURCE=/home/intlc/projects DEV_VM_USER=dev1 ./scripts/deployment/sync-local-projects-to-dev-vm.sh
Behavior:
- Preserves
.git(full migration with history). - Excludes
node_modules, Python venvs, typical build outputs, and by defaultMEV_Botandthe-order(large trees). SetSKIP_LARGE_LOCAL_TREES=0to include them. - Without
--delete-remote, rsync does not delete extra files on the Dev VM (recommended first pass).
Secrets: .env files may sync; on the Dev VM run chmod 600 .env (and siblings). Prefer Gitea + CI secrets for long-term; do not commit .env.
5. Cursor: use Remote-SSH from now on
-
Install Remote - SSH (built into Cursor).
-
SSH config (
~/.ssh/configon the laptop), example:Host dev-vm HostName 192.168.11.59 User dev1 ForwardAgent yesIf you use Cloudflare Access SSH, follow DEV_VM_SSH_REMOTE_ACCESS.md for
ProxyCommand/cloudflared. -
Connect:
Cursor→ Remote-SSH → dev-vm → open folder/srv/projects/proxmox(or the monorepo root you need). -
Terminal inside Cursor will be on 5700 — that is the intended “single place” for
git,pnpm,forge, and operator scripts that need LAN RPC.
6. Git coordination (recommended)
After the first sync:
- Ensure Gitea on the Dev VM (or cluster) holds the authoritative remotes (DEV_VM_GITOPS_PLAN.md §6).
- On the Dev VM:
git remote -vin each repo; pushmain(or default branch) to Gitea. - Stop using the old WSL tree for shared work, or treat it as read-only archive after cutover to avoid drift.
7. Cutover checklist
- 5700 running;
ssh dev1@192.168.11.59works. /srv/projectsready and backed up if it already had content.sync-local-projects-to-dev-vm.sh --dry-runreviewed.- Full sync completed; large dirs (
SKIP_LARGE_LOCAL_TREES) decided. - Remote
.envpermissions fixed; no secrets committed. - Cursor Remote-SSH opens
/srv/projects/proxmoxsuccessfully. pnpm install/forgesmoke test on Dev VM for critical packages.- Team notified: canonical path = Dev VM
/srv/projects.
8. Rollback
Keep the original ~/projects tree until the team confirms the Dev VM workflow. Rollback = continue editing locally; no automatic deletion of the workstation copy is performed by the sync script.