Skip to main content

boot.sh je javljao '0 failing' bez obzira na stvarnost — root cause + popravka (MC #106901)

MC: #106901 · Datum: 2026-08-15 · Autor: John · Verifikacija: verify-106901 (native agent, 12/13 PASS)

Simptom

boot.sh je na svakom bootu javljao Daemons: 29 loaded, 0 failingbez obzira na stvarnost. Istog minuta launchctl list pokazuje 10 com.alai/com.john agenata s ne-nultim exitom, a RESOLVER alert javlja FLEET-CRITICAL: 7 daemon(s) in failed state.

Posljedica: disk incident 2026-08-06 (168 GB litestream staginga) prošao je neprimijećen jer je boot javljao da je sve u redu.

Dva defekta (ne tri)

1. Tiho preskakanje — glavni uzrok

PLIST="$HOME/Library/LaunchAgents/${DAEMON_ID}.plist"
if [ -f "$PLIST" ]; then          # nema fajla => preskoci BEZ brojanja
  LOADED=$(launchctl print "gui/$UID_VAL/$DAEMON_ID" 2>&1 || true)
  if echo "$LOADED" | grep -q "Could not find"; then ...

Sedam monitorisanih tier-1/2 daemona nema plist fajl: b2-offsite-backup, network-watchdog, db-backup, ops-guardian, email-briefing, minion-dispatcher, minion-watchdog. if se za njih nikad nije otvorio, pa se launchctl nikad nije ni pozvao. Prijavljivani kao zdravi.

2. Pogrešan signal

Provjera je mjerila učitanost, ne neuspjeh. Daemon učitan ali s exit != 0 (uključujući -9, ubijen signalom) računao se kao ispravan.

Povučena tvrdnja

U prvoj verziji nalaza tvrdio sam i treći defekt — da grep "Could not find" ne pogađa nepostojeći label. Pogađa. launchctl ispiše Bad request. u prvoj liniji i Could not find service "..." u drugoj. Oboreno nezavisnom verifikacijom; tvrdnja povučena. Defekt #1 sam objašnjava cijeli kvar.

Popravka

Jedan launchctl list snapshot; kolona 2 = last exit status, kolona 3 = label, poklapanje preko awk polja:

LAUNCHCTL_SNAPSHOT=$(launchctl list 2>/dev/null)
DAEMON_ROW=$(printf '%s\n' "$LAUNCHCTL_SNAPSHOT" | awk -v lbl="$DAEMON_ID" '$3 == lbl {print; exit}')
if [ -z "$DAEMON_ROW" ]; then
  # nije ucitan (ukljucujuci "nema plist") — NE preskace se
else
  DAEMON_EXIT=$(printf '%s\n' "$DAEMON_ROW" | awk '{print $2}')
  [ "$DAEMON_EXIT" != "0" ] && # pada
fi

Namjerno NIJE korišten grep '1\t' — taj obrazac hvata PID-ove i već je dao lažnih „22 daemon failing" u mc.js checku (triage 2026-08-07). Ista greška se ne ponavlja u drugom alatu.

Ispravljena je i riječ: DAEMON_TOTAL je broj monitorisanih iz inventara, ne broj učitanih. "29 loaded" je bilo netačno kad 7 nije učitano.

Dokaz

PRIJE:    Daemons: 29 loaded, 0 failing
POSLIJE:  Daemons: 29 monitored, 7 failing (7 nije učitano) — launchctl list

Kontrolni test pušta obje logike nad istim inventarom: stara → failing: 0, nova → nije učitano: 7. bash -n exit 0; ostale boot linije (MC / B2 / LightRAG / Disk) netaknute.

Backup: ~/system/boot.sh.bak-106901-20260815-135917

Šta ovo NE rješava — pročitati prije nego se osloniš na boot

Popravljena provjera javlja učitano ali pada: 0, iako ih 10 stvarno pada. Nije bug — ti daemoni nisu u inventaru:

daemonexitu inventaru
com.alai.litestream-9NE
com.alai.email-ingest-monitor1NE
com.john.lightrag-monitor1NE
com.john.infra-drift-detector1NE
com.john.critical-tools-healthcheck1da, ali tier=3, monitored_by_boot=false

Šire mjerenje (MC #107192): 157 učitanih agenata, 11 s ne-nultim exitom, 67 zapisa u inventaru, 23 zapisa pokazuju na plistove koji ne postoje, i nijedan com.alai.* agent nije u inventaru — inventar je pisan za com.john.* generaciju i nikad proširen.

Prije popravke boot je lagao. Poslije popravke boot govori istinu — ali usku. Razlika je bitna i ne treba je zamagliti.

Poznat šum

com.alai.ollama-serve-v2 exit 1 je benigna port-trka s homebrew.mxcl.ollama (triage 2026-08-07). Filter za takve slučajeve ide u inventar (npr. benign_nonzero_exit: true uz obrazloženje), ne u boot.sh — inače se logika opet zamagljuje.

Vezano

  • MC #107192 — inventar ne prati ono što stvarno pada (tabela odluke u ~/system/evidence/107192/)
  • Evidence: ~/system/evidence/106901/boot-daemon-check-fix-2026-08-15.md
  • Peer-verify: ~/system/evidence/106901/peer-verify-transcript-2026-08-15.md