3.4 KiB
name, description
| name | description |
|---|---|
| self-severing-model-swap-cutover | Swap the model on frank-archon (the endpoint the operator session runs on): full pre-cutover repo unit, detached deploy that survives session death, post-return boot-ledger harvest, e2e attribution. |
Swapping the model you are running on (frank-archon)
The harness agent shares the endpoint being swapped: the deploy restarts frank-archon, the session dies mid-tool-call, the harness catches the return. Plan for the severing; never keep critical state only in-session.
Pre-cutover (all must be committed/pushed BEFORE the deploy)
- Read
scripts/frank-archon.envlive state and record the shape; the swap changes ONLYMODEL_FILE(fleet model-swap law) unless asked otherwise. - Fetch script per payload (hfget + exact bytes + Hub LFS sha256 +
--verify-only, no token on the command line); run detached viasystemd-run --unit=<name>-fetchon dankserver. - Re-key in one commit:
frank-archon.env(+ trio headers),tests/frank_archon_unit.batspayload id/sha256 (keep the outgoing payload as the documented rollback line), homepage card (shared/homepage/services.json), runbook (new era page + index flips + old page retired),AGENTS.mdtopology row/section/runbook index. - Full
./tests/run.shgreen, push origin main,git pull --ff-onlyon dankserver. Verify the engine pin's flag set matches the payload card (radiance pins have drifted on flag renames). - Disk: check
df -h /home/dankbefore launching a >100 GB download; the outgoing payload stays on disk as rollback — deleting it requires Frank's one-timermauthorization.
Cutover, detached from the session
Launch from the workstation as a transient unit so ssh/session teardown cannot kill it:
setsid systemd-run --unit=archon-<tag>-cutover --remain-after-exit \
bash -lc 'cd <repo> && ./scripts/deploy.sh dankserver --service frank-archon \
> ~/archon-<tag>-cutover.log 2>&1; echo $? > ~/archon-<tag>.rc'
The session dies when frank-archon restarts (~1–2 min load). On return:
read the .rc sentinel and log tail; then the journal ledger:
journalctl -u frank-archon --no-pager --since "<deploy>" | grep -iE "kv cache|slab|sampler|MTP|prefix"
Post-boot harvest (fill the runbook placeholders)
- KV:
kv_attnKiB/4-token block, pool token count vsseqs × max-model-len. - Expert slab slots per rank (compare to the outgoing payload).
- Sampler rows =
seqs × (1 + spec)(wht6 exactness bound 25). - Prefix-cache RECOVERED line (survives swaps when arch+tokenizer unchanged).
- Vision probe: solid-color PNG ≥256 px, read
reasoning_content(small max_tokens → thinking eats the budget,contentempty withfinish_reason: stop= healthy, not broken). - Decode ladder needs a stop-and-mask window — separate bench task.
e2e gate redness on dankclaw surfaces
deploy.sh dankserver runs the Playwright gate against the LIVE fleet, so
dankclaw faults fail your deploy. Attribute before believing: crawl 502 /
SSO fail / Marreta tile → run the
gluetun-dependent-boot-race-recovery census first (reboot-triggered,
unrelated to the swap), cascade-restart, rerun tests/e2e/run.sh directly —
a frank-archon health gate that passed means the swap itself is fine.
Rollback
Revert the swap commit, redeploy --service frank-archon — the outgoing
.rad remains on disk (until deleted by authorized rm).