- config.yml: default/commit -> frank-medium (dankserver); task/tiny/smol/vision -> frank-small (dankclaw-3090); vision xhigh - models.yml: add llamacpp (dankclaw-3090) provider; frank-large preserve_thinking + context notes - niri: focus-ring/border/shadow layout, hot-corners off, re-add noctalia.kdl include; blankpad eDP-1 scale 1.0 - memories: flush rollouts; retire frank_large + marreta_authentik skills; add auth-chain/kv-pool/quadlet-log skills - managed-skills: 40+ new fleet runbook skills - agent/skills: import built-in skill set
4.5 KiB
name, description
| name | description |
|---|---|
| incident-window-reconstruction | Reconstruct which command/config was running at the instant an incident symptom first appeared, from on-disk artifacts (log mtimes + per-run durations + journal first-failure time) when memory and /tmp are gone. |
Incident window reconstruction
Use when the question is "what was running when it broke?" — an incident, outage, resource blow-up, or unexplained service death — and the answer must come from artifacts, not recollection. Typical triggers: a host went down during an experiment, a service died mid-run, someone asks for the parameters in effect at the moment of failure.
Principle
Three independent clocks, cross-checked — never recollection:
- Per-run duration — every script wraps commands in
time, so the log holdsreal 4m19.129s. - Log mtime — the last write of that log.
- Journal first-failure instant — the first error line from the affected service.
start ≈ mtime − real for the last run in a log, and each run nests inside
the previous one's window. The run whose [start, end] contains the journal's
first-failure instant is the answer.
Collect
# 1. ordering and clocks of every artifact (log mtimes)
ssh <host> 'ls -l --time-style=+%m-%d_%H:%M:%S <logdir>/*.log | awk "{print \$6, \$7}"'
# 2. durations + per-run section markers + the exact command lines
ssh <host> 'grep -ah "^real" <logdir>/*.log'
ssh <host> 'for f in <names>; do echo "## $f"; \
grep -aE "^####|^\+ /path/to/binary" <logdir>/$f.log \
| sed "s/\(.\{130\}\)/\1\n /g"; \
grep -aE "^real|_EXIT=" <logdir>/$f.log; done'
# 3. first failure of the affected service, and what preceded it
ssh <host> 'journalctl --user --since "<date> <HH:MM>" | grep -a "invalid internal status" | head -2'
ssh <host> 'journalctl --user --since "<date> <HH:MM>" | grep -aiE "Started|Created container" | tail -6'
Traps (all hit for real)
/tmpdoes not survive a reboot. Launch experiment scripts from a persistent path (e.g.~/models/...) and log beside them; if the repair path is a reboot (common),/tmpscripts and any sampler output written there are gone. On the Dank fleet:/home/dank/models/logs/<tag>.logsurvived while/tmp/x4*.shdid not.- A log's mtime is not proof the run finished. A log truncated (or rotated)
while a script still holds the fd keeps growing from that point; a 6-line log
with an
ALL_DONEmarker means the earlier bulk was removed, not that nothing ran. - Long command lines are display-truncated by agent tools. Wrap before
reading:
sed 's/\(.\{130\}\)/\1\n /g'. Otherwise you will report parameters that were never used. - Off-by-one file names silently skip evidence.
x4b.logvsx4b-experiment.login afor f in …; do [ -f $f.log ]loop made half the artifacts invisible. List the directory and match exactly. - Overlap is a hypothesis, not an observation. Two resource-heavy invocations in the same minute may or may not have been resident at once; say so explicitly unless a sampler or cgroup counter proves it.
- Do not invent the cause. Reconstruct the window (evidence) and keep the
mechanism separate: grep the proof that would establish it (
journalctl -k | grep -i oomfor a killed process, driver logs for a GPU fault). If it is not there, publish "trigger not established" — an invented cause is worse than an open question because the next agent plans against it.
Fleet-specific sensitivity
On this fleet, container healthchecks shell out to the podman CLI, so the
first invalid internal status … could not find any running process in the user
journal is an early, per-minute indicator of rootless-podman state death — and
it timestamps the incident to within one healthcheck interval. That is how the
18:58:30 Dankclaw break was pinned to the bench still loading at the time.
Worked example (2026-09-16, Dankclaw)
| evidence | value |
|---|---|
| log mtimes | x4e-run 18:58:29, x4f-run 18:59:56 |
| durations | E1 real 4m53.946s (llama-cli spam), F real 5m24.785s (exit 143 = killed) |
| journal | first invalid internal status 18:58:30 |
| ⇒ in flight | F, launched 18:54:31 (inside its 18:54:31–18:59:56 window) |
Answer delivered: the exact flags of F, plus the note that the preceding
llama-cli had written 3.19 GB of spinner lines and that the /tmp VRAM sampler
was gone — so the overlap of the two 111 GiB-class invocations stayed marked as
[INFERENCE] rather than becoming a claim.