docs: DooPlex-local commands in PROMPT-TEMPLATE and the manual-build runbook

This commit is contained in:
2026-07-19 12:27:44 +02:00
parent 238472b8ed
commit 29b2b8ad7c
2 changed files with 39 additions and 32 deletions
+17 -11
View File
@@ -94,7 +94,8 @@ never park it on a branch.
<!-- Order matters: workspace/repo conventions first, then architecture, then the exact source.
Be explicit about WHY each matters. -->
1. `e:\git\CLAUDE.md` — workspace orientation (the felhom system, shared conventions, access).
1. `/mnt/5_hdd/felhom.eu/git/CLAUDE.md` — workspace orientation (the felhom system, shared
conventions, access). Versioned copy: `felhom.eu/documentation/runbooks/workspace-CLAUDE.md`.
2. `<repo>/CLAUDE.md` — repo build/deploy, code-quality rules, trunk-based + live-validation rules.
3. `<repo>/CONTEXT.md` — current project state / decisions / roadmap.
4. `felhom.eu/documentation/architecture/02-controller-module-map.md` — KEEP/PORT/DELETE/MODIFY
@@ -332,28 +333,33 @@ status), update in the SAME session:
## 13. Build / deploy / STOP
<!-- Per touched repo. Real commands. SSH var first: SSH=/c/Windows/System32/OpenSSH/ssh.exe -->
<!-- Per touched repo. Real commands. CC runs ON DooPlex — builds are LOCAL, no SSH wrapper. -->
**Controller** (build server `192.168.0.180` → guest via golden/bootstrap):
**Clean-tree gate first:** `git status --porcelain` empty AND `HEAD` == `origin/main` in the repo
being built. An unpushed change does not exist.
**Controller** (local build on DooPlex → guest via golden/bootstrap):
```bash
SSH=/c/Windows/System32/OpenSSH/ssh.exe
FELHOM_ROOT=/mnt/5_hdd/felhom.eu
# build + push
$SSH kisfenyo@192.168.0.180 "cd ~/build/felhom-controller && git -C ~/git/felhom-controller pull && ./build.sh <VER> --push"
cd $FELHOM_ROOT/build/felhom-controller && git -C $FELHOM_ROOT/git/felhom-controller pull && ./build.sh <VER> --push
# deploy to guest (golden/bootstrap): docker pull → write /etc/felhom-controller-image → restart bootstrap svc
# verify:
$SSH kisfenyo@<guest> "docker ps --filter name=felhom-controller --format '{{.Image}} {{.Status}}' && docker logs felhom-controller --tail 20"
ssh felhom-pve "pct exec 9201 -- docker ps --filter name=felhom-controller --format '{{.Image}} {{.Status}}'"
```
**Agent** (build + push `felhom-agent:<VER>`; deploy to `felhom-pve`: backup prior binary, replace,
restart service; verify clean restart — e.g. `ReassertGuestBinds` does not rebind a non-`enrolled` drive).
**Agent** (build locally, `scp /tmp/felhom-agent-<VER> felhom-pve:/tmp/` — one hop; deploy to
`felhom-pve`: backup prior binary, replace, restart service; verify clean restart — e.g.
`ReassertGuestBinds` does not rebind a non-`enrolled` drive).
**Hub** (`felhom.eu/hub/`): build + push, then
`$SSH kisfenyo@192.168.0.180 "sudo kubectl set image -n felhom-system deploy/hub hub=...:<VER>"` + verify pods/logs.
**Hub** (`felhom.eu/hub/`): build + push locally, then bump `manifests/hub.yaml`'s `image:` tag in
git and do a deliberate ArgoCD sync — **never `kubectl set image`** (auto-sync is OFF and any
imperative change is reverted on the next sync). Verify Synced/Healthy + rollout + image + logs.
**Live validation rule:** if validating a user-facing feature, exercise the **real server pipeline**
(connect → enroll → deploy), or invoke the **exact endpoint the UI invokes** (acceptable proxy — no
server logic skipped). **Do NOT** hand-set state via raw agent attach (the F9 bypass). Browser
automation (`claude-in-chrome`) is available for true UI coverage — say which method was used.
automation is **NOT available** on DooPlex — endpoint-level is the standard method; say which was used.
**STOP point (risky/supervised tasks):** build + unit-test + build/deploy images, but **do NOT run a
live destructive op or migrate real customer data** — that is the supervised [Bx] step. Throwaway