0dcce02e47
New self-contained stack (FastAPI + SQLite + in-process scheduler) from vh/stonehenge-park tag v1.0.0-beta.1, deployed to nh3-docker per park-dev's operator-approved request. Port 8420, LAN/WG-internal; park-data volume (SQLite sole source of truth) covered by the host's /var/lib/docker/volumes restic source. Image built locally (no registry yet); .env carries PARK_API_KEY from the vault. althing push to henge-crow deferred (PARK_ALTHING_CHANNEL empty) until althing-cli is wired into the container.
park (stonehenge-park — "the henge")
Self-contained needs-attention tracker: FastAPI + SQLite (FTS5) + an in-process
scheduler, one container. Source: gitea.phasefinal.com/vh/stonehenge-park,
deployed at tag v1.0.0-beta.1. Owned by park-dev.
- Host: nh3-docker (
10.100.50.40), compose home/opt/docker/compose/park/. - Port:
8420(host + container). LAN/WG-internal only — never internet-exposed. - Data: named volume
park-data→/data; SQLite single file/data/park.db(the sole source of truth). Covered by restic via the host's/var/lib/docker/volumesbackup source — no per-volume add needed. (⚠ nh3-docker's restic repo was broken as of 2026-08-12 — see fleet infra notes.) - Secret:
PARK_API_KEYfrom the vault (secret get nh3-dev/park-api-key), in the host.env(chmod 600)./healthzis unauthenticated;/park/*needs the bearer key. - Health:
GET /healthz→{"status":"ok"}(imageHEALTHCHECKbuilt in).
Image is built locally (no registry yet)
# on nh3-docker:
cd ~/deploy-src/stonehenge-park # rsync'd from the tag
sudo docker build -t park:v1.0.0-beta.1 .
cd /opt/docker/compose/park && sudo docker compose up -d
Swap image: for a registry ref once one exists (park-dev left the door open).
althing wiring (TODO)
The scheduler posts needs-attention snapshots to althing handle henge-crow by
shelling out to althing-cli post inside the container. althing-cli is not yet
wired into the container, so PARK_ALTHING_CHANNEL is set empty in the host
.env (push disabled; REST endpoints fully functional — graceful by design). To
enable: get althing-cli reachable in-container (bind-mount + config / sidecar /
host-run), set PARK_ALTHING_CHANNEL=henge-crow, recreate.
Verify
curl -s http://10.100.50.40:8420/healthz # {"status":"ok"}
curl -s http://10.100.50.40:8420/ # UI shell
curl -s -H "Authorization: Bearer $KEY" \
http://10.100.50.40:8420/park/due-count # {"count": N}