docs(vault): fleet-wide fact re-verification pass (67 pages)
The docs-fact census wave re-read the live hosts and re-keyed every page it could: runtime/payload identities, ports, sizes, ledger figures, unit state, and the retirement banners that drifted as the fleet moved. The wave was interrupted mid-run, so this commit carries only what passed the integrity gates: every touched page parses (front matter or H1+status convention intact, balanced fences, no truncated tables, trailing newline), the docs_completeness and link-integrity seams are green, and bats is 384/384. Numbers that this session proved on live hosts are keyed to the measured value, not the page's earlier claim.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
---
|
||||
type: guide
|
||||
title: LLM Deployment
|
||||
description: Scoped deployment and update process for the two inference services.
|
||||
description: Scoped deployment and update process for the three inference services (frank-archon, frank-dragoon, frank-zealot).
|
||||
tags:
|
||||
- llm
|
||||
- deployment
|
||||
@@ -19,7 +19,7 @@ SearXNG, Caddy, or another container service does **not** restart inference.
|
||||
|
||||
| Target | Host | Service | Port |
|
||||
|---|---|---|---:|
|
||||
| Dankserver | `dank@dankserver` | `frank-medium` | 7770 |
|
||||
| Dankserver | `dank@dankserver` | `frank-archon` | 7770 |
|
||||
| Dankclaw | `dank@dankclaw` | `frank-dragoon` | 7770 |
|
||||
| Dankclaw | `dank@dankclaw` | `frank-zealot` | 7771 |
|
||||
|
||||
@@ -39,7 +39,7 @@ graph LR
|
||||
Run the unified deployer from the repository root:
|
||||
|
||||
```bash
|
||||
./scripts/deploy.sh dankserver --service frank-medium
|
||||
./scripts/deploy.sh dankserver --service frank-archon
|
||||
./scripts/deploy.sh dankclaw --service frank-dragoon
|
||||
./scripts/deploy.sh dankclaw --dry-run
|
||||
```
|
||||
@@ -47,10 +47,14 @@ Run the unified deployer from the repository root:
|
||||
Without `--service`, `scripts/deploy-plan.py` maps changed files to the service
|
||||
on the selected host. The following files select the corresponding service:
|
||||
|
||||
- Any file under `dankserver/frank-medium/` (the Quadlet unit, its
|
||||
entrypoint and its healthcheck) selects `frank-medium` on Dankserver —
|
||||
the container mounts the entrypoint and healthcheck straight out of the
|
||||
checkout, so any file there changes deployed state.
|
||||
- `scripts/frank-archon.env`, `frank-archon.service`, and
|
||||
`serve-frank-archon.sh` select `frank-archon` on Dankserver
|
||||
(`scripts/deploy-plan.py:422-428`). The quadlet-era directory
|
||||
`dankserver/frank-medium/` left the tree on 2026-09-26 and plans nothing
|
||||
(`scripts/deploy-plan.py:374-377`).
|
||||
- `scripts/qwen-sharp-v22.4.0.jinja` selects `frank-dragoon` — a planner rule
|
||||
left from the llama.cpp era when dragoon loaded it via
|
||||
`--chat-template-file` (`scripts/deploy-plan.py:415-421`).
|
||||
- `scripts/frank-dragoon.env`, `frank-dragoon.service`, and
|
||||
`serve-frank-dragoon.sh` select `frank-dragoon` on Dankclaw.
|
||||
- `scripts/frank-zealot.env`, `frank-zealot.service`, and
|
||||
@@ -59,27 +63,33 @@ on the selected host. The following files select the corresponding service:
|
||||
do not select any inference service.
|
||||
|
||||
The target-side `scripts/deploy-remote.sh` installs the selected service.
|
||||
`frank-dragoon` and `frank-zealot` are **root units**: the handler relinks the
|
||||
repo file into `/etc/systemd/system/` (`relink_unit`), reloads systemd,
|
||||
enables it and restarts it. `frank-medium` is a **rootless Quadlet**: the
|
||||
handler retires its predecessors (the replica Quadlets and the retired llama
|
||||
root unit), stops the service's own unit, waits for the published port to
|
||||
clear, installs the `.container` and restarts the generated unit. Each
|
||||
All three LLM services are **root units** whose repo unit file is relinked
|
||||
into `/etc/systemd/system/` (`relink_unit`), daemon-reloaded, enabled and
|
||||
restarted (`deploy-remote.sh:1158` `deploy_llm_dragoon`, `:1254`
|
||||
`deploy_llm_zealot`, `:1315` `deploy_llm_archon`). The dragoon and archon
|
||||
handlers wait for port 7770 to be released before the replacement starts
|
||||
(`wait_port_free`; the 2026-09-16/26 cutover lessons). The archon handler
|
||||
additionally hard-gates on the env file, the digest-pinned image ref, and the
|
||||
payload before touching the unit (refuse rather than restart-loop). Each
|
||||
handler then waits on that service's health endpoint —
|
||||
`http://127.0.0.1:7770/health` for frank-dragoon and frank-medium,
|
||||
`http://127.0.0.1:7771/health` for frank-zealot. The wait budget is 20 minutes
|
||||
because cold model loads are slow. A failed handler does not advance its
|
||||
per-service state.
|
||||
`http://127.0.0.1:7770/health` for frank-dragoon (budget 1200 s) and
|
||||
frank-archon (1800 s), `http://127.0.0.1:7771/health` for frank-zealot
|
||||
(900 s) — and refuses a false green: the deploy is only green when the unit
|
||||
itself reports a live MainPID behind the health answer
|
||||
(`deploy-remote.sh:1395-1403`, `:1285`). A failed handler does not advance
|
||||
its per-service state.
|
||||
|
||||
## Unit and artifact paths
|
||||
|
||||
The root units point into the stable target checkout:
|
||||
```text
|
||||
/home/dank/serverAppConfigs/scripts/frank-archon.service
|
||||
/home/dank/serverAppConfigs/scripts/frank-dragoon.service
|
||||
/home/dank/serverAppConfigs/scripts/frank-zealot.service
|
||||
```
|
||||
`frank-medium` is a Quadlet under `dankserver/frank-medium/quadlet/`
|
||||
(`frank-medium.container`) rather than a unit in `scripts/`.
|
||||
All three services keep their unit, env and serve script as this flat trio
|
||||
under `scripts/` — there is no LLM Quadlet left (the `frank-medium`
|
||||
quadlet-era directory left the tree 2026-09-26).
|
||||
|
||||
The unit files and serve scripts validate their model/runtime artifacts before
|
||||
starting. Keep `REMOTE_DIR` stable; moving the checkout requires updating both
|
||||
@@ -110,15 +120,16 @@ change in that service's inputs.
|
||||
|
||||
If the LLM handler fails after the target pull:
|
||||
|
||||
1. Inspect `journalctl -u frank-dragoon -n 200` or `journalctl -u frank-zealot
|
||||
-n 200` (root units), or `journalctl --user -u frank-medium -n 200`
|
||||
(rootless Quadlet).
|
||||
2. Confirm the model files, the runtime binary and (for frank-medium) the
|
||||
container image are present and readable by `dank`.
|
||||
1. Inspect `journalctl -u frank-dragoon -n 200`, `journalctl -u frank-zealot
|
||||
-n 200` or `journalctl -u frank-archon -n 200` (all three are root units);
|
||||
frank-dragoon's engine boot ledger is in `/home/dank/logs/frank_dragoon.log`,
|
||||
frank-archon's in `podman logs frank-archon` — not in the journal.
|
||||
2. Confirm the model files, the runtime binary and (for frank-archon) the
|
||||
digest-pinned container image are present and readable by `dank`.
|
||||
3. Retry only the affected service:
|
||||
|
||||
```bash
|
||||
./scripts/deploy.sh dankserver --service frank-medium
|
||||
./scripts/deploy.sh dankserver --service frank-archon
|
||||
./scripts/deploy.sh dankclaw --service frank-dragoon
|
||||
./scripts/deploy.sh dankclaw --service frank-zealot
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user