Two defects, one incident. The DNS half is #2974 living on inside long-running
containers; the bookkeeping half is the false-completion class that #2971's
review already caught once on the pull path and once on the Tier B path.
What happened
Between 15:42:49Z and 15:47:09Z — four and a half minutes — the #1947 phase-2
sweep failed to pull twelve consecutive models, each in about 20 seconds, and
then wrote EXTRA_COMPLETE:
15:42:49 PULL_FAILED …/Qwen3.6-27B-uncensored-heretic-v2-Native-MTP-Preserved-i1-GGUF:i1-Q4_K_M
15:43:10 PULL_FAILED …/Glimmer-Sentry-30B-GGUF:Q4_K_M
15:43:30 PULL_FAILED …/ThinkingCap-Qwen3.6-27B-MTP-GGUF:latest
15:44:12 PULL_FAILED …/Chimera-Qwen3.8-27B-Cyber-v1-GGUF:Q4_K_M
15:44:33 PULL_FAILED …/Colibri_8b_v0.1-GGUF:Q4_K_M
15:44:53 PULL_FAILED …/NeoBase_8b_v0.2-GGUF:Q4_K_M
15:45:26 PULL_FAILED …/LOREA-cyber-v5.8:latest
15:45:47 PULL_FAILED …/Colibri_8b_v0.1-GGUF:f16
15:46:07 PULL_FAILED …/Ornith-1.0-35B-uncensored-heretic-GGUF:Q3_K_M
15:46:28 PULL_FAILED …/gemma-4-26B-A4B-it-ultra-uncensored-heretic-GGUF:Q3_K_M
15:46:49 PULL_FAILED …/gemma-4-26B-A4B-it-ultra-uncensored-heretic-GGUF:Q4_K_M
15:47:09 PULL_FAILED …/gemma-4-26B-A4B-it-ultra-uncensored-heretic-GGUF:Q5_K_M
15:47:09 EXTRA_COMPLETE
All twelve carry the same error:
dial tcp: lookup hf.co on 127.0.0.11:53: read udp …->127.0.0.11:53: i/o timeout
Three of those twelve are the gemma-4-26B-A4B Q3/Q4/Q5 quant ladder — the
promote candidate from PR #2641, i.e. the highest-value cells left in phase 2.
Root cause: the container resolver still has the pre-#2974 order
#2974 fixed the host, which now correctly puts the Technitium cluster first:
$ grep ^nameserver /etc/resolv.conf
nameserver 192.168.42.253
nameserver 192.168.42.250
nameserver 1.1.1.1
nameserver 8.8.8.8
ghidra-ollama-1 has been up 30 hours — since before that fix — and Docker's
embedded resolver snapshots the host list at container start:
$ docker exec ghidra-ollama-1 grep ExtServers /etc/resolv.conf
# ExtServers: [host(1.1.1.1) host(8.8.8.8) host(192.168.42.253) host(192.168.42.250)]
Public resolvers first. And port 53 egress to them is blocked on this LAN —
measured, not assumed:
1.1.1.1 TIMEOUT/blocked
8.8.8.8 TIMEOUT/blocked
192.168.42.253 responds
So every container lookup burns the timeout on two dead servers before falling
through to a working one. Measured cost inside the container: ~8 seconds for a
single getent hosts. Ollama's pull has a 30 s per-request deadline (#2728), so
under any additional latency the pull dies — and it dies deterministically,
which is why twelve models fell in a row rather than intermittently.
It resolves eventually, which is why nothing noticed until it didn't.
Second defect: EXTRA_COMPLETE is written unconditionally
sweep_extra.sh:159 writes EXTRA_COMPLETE when the roster loop ends, regardless
of how many entries failed. This is the third appearance of the same class:
mark_unmeasured() did its job and wrote UNMEASURED_<slug>.status for all
twelve, so the rows are not silently scored as zero. But EXTRA_COMPLETE is what
the phase chain keys on, so the marker is the only thing standing between this and
"phase 2 finished".
A completion marker should encode the failure count, or not be written at all
when the failure rate exceeds a threshold. Twelve consecutive PULL_FAILED in
four minutes is not a completed roster under any reading.
Recovery
Refs #1947, #2974, #2971, #2985, #2728, #2641
Two defects, one incident. The DNS half is #2974 living on inside long-running
containers; the bookkeeping half is the false-completion class that #2971's
review already caught once on the pull path and once on the Tier B path.
What happened
Between
15:42:49Zand15:47:09Z— four and a half minutes — the #1947 phase-2sweep failed to pull twelve consecutive models, each in about 20 seconds, and
then wrote
EXTRA_COMPLETE:All twelve carry the same error:
Three of those twelve are the
gemma-4-26B-A4BQ3/Q4/Q5 quant ladder — thepromote candidate from PR #2641, i.e. the highest-value cells left in phase 2.
Root cause: the container resolver still has the pre-#2974 order
#2974fixed the host, which now correctly puts the Technitium cluster first:ghidra-ollama-1has been up 30 hours — since before that fix — and Docker'sembedded resolver snapshots the host list at container start:
Public resolvers first. And port 53 egress to them is blocked on this LAN —
measured, not assumed:
So every container lookup burns the timeout on two dead servers before falling
through to a working one. Measured cost inside the container: ~8 seconds for a
single
getent hosts. Ollama's pull has a 30 s per-request deadline (#2728), sounder any additional latency the pull dies — and it dies deterministically,
which is why twelve models fell in a row rather than intermittently.
It resolves eventually, which is why nothing noticed until it didn't.
Second defect:
EXTRA_COMPLETEis written unconditionallysweep_extra.sh:159writesEXTRA_COMPLETEwhen the roster loop ends, regardlessof how many entries failed. This is the third appearance of the same class:
mark_unmeasured()did its job and wroteUNMEASURED_<slug>.statusfor alltwelve, so the rows are not silently scored as zero. But
EXTRA_COMPLETEis whatthe phase chain keys on, so the marker is the only thing standing between this and
"phase 2 finished".
A completion marker should encode the failure count, or not be written at all
when the failure rate exceeds a threshold. Twelve consecutive
PULL_FAILEDinfour minutes is not a completed roster under any reading.
Recovery
ghidra-ollama-1so its embedded resolver picks up the correctedhost order — and verify
ExtServersafterwards rather than assuming.dns:explicitly in the ghidra compose so a container's resolverorder does not depend on when it happened to start. Every other long-running
container on this host that predates ops(dns): rebuilt homeserver resolves through 1.1.1.1/8.8.8.8 ahead of the Technitium cluster — internal dmz.xore.lan names stop resolving, and #2909's blocklist is masked not fixed #2974 has the same latent fault.
UNMEASURED_*.statusmarkers — they record aninfrastructure failure, not a model property, and must not reach the matrix
as "unmeasurable" beside genuine cases like GPT-OSS-Cybersecurity-20B-Merged-heretic-i1 emits zero tokens under every request shape (not the #2279 harmony bug) #2696/ml: three more roster models emit zero tokens on Tier A — XORTRON 4B/27B .NEXT and CyberPal2.0-20B (same class as #2696) #2982.
EXTRA_COMPLETEand re-run the sweep for those twelve.sweep_extra.shbeforeEXTRA_COMPLETE(committed copy at
analysis/ghidra/benchmarks/corpus/sweep_extra.sh).Refs #1947, #2974, #2971, #2985, #2728, #2641