Doctor-script pattern voor install-verificatie

Definitie

Een doctor-script is een read-only bash-script dat na install een serie health-checks draait en per check rapporteert met getagde uitvoer ([PASS], [WARN], [FAIL], [INFO]). Het verschilt van een test-suite: een doctor checkt installatie-state op de gebruiker-machine, geen unit-correctheid van code. Naam ontleend aan brew doctor en npm doctor.

Context

Tijdens het publiceren van LLmWiki-KennisBank v0.2.0 bleek setup.sh zelf onvoldoende garantie dat de install gelukt was. Symlinks, kopieer-acties en optionele dependencies (Ollama, een eerdere CC-sessie voor MEMORY.md) konden silently mislukken. Een doctor-script vangt dit op zonder dat de gebruiker handmatig elk pad hoeft te checken.

Kernpunten

Vier severity-niveaus

  • [PASS]: check geslaagd
  • [WARN]: niet-blokkerend probleem dat aandacht nodig heeft
  • [FAIL]: kritisch probleem dat install onbruikbaar maakt
  • [INFO]: optionele dependency afwezig of cosmetisch detail

Exit-code is 0 als geen [FAIL], anders 1. [WARN] en [INFO] blokkeren de exit-code niet, zodat CI of een wrapper-script doctor kan draaien zonder false-failures op optionele zaken.

set -u zonder set -e

set -u (undefined-variable detection) blijft zinvol. set -e (exit-on-error) is contraproductief: als check 3 faalt wil je dat check 4-12 alsnog draait. De report-functies tellen zelf hun count.

Helper-functies vermijden duplicatie

check_dir() { [ -d "$2" ] && report_pass "$1" "$2" || report_fail "$1" "missing"; }
check_file() { [ -f "$2" ] && report_pass "$1" "$2" || report_fail "$1" "missing"; }
check_executable() { [ -x "$2" ] && report_pass "$1" "$2" || report_warn ... ; }

Per check één regel. Helper-functies houden de scan-volgorde leesbaar.

Color via tput, gracefully degraded

if [ -t 1 ] && command -v tput >/dev/null 2>&1 && [ "$(tput colors 2>/dev/null || echo 0)" -ge 8 ]; then
  C_GREEN="$(tput setaf 2)"; ...
else
  C_GREEN=""; ...
fi

Werkt in TTY met kleur, in pipes/CI zonder kleur, op terminals zonder colorsupport zonder kleur. Geen externe dependency.

INFO-niveau voor optionele zaken

Cosmetische of optionele issues moeten geen [WARN] zijn. Voorbeeld: een Python script dat niet chmod +x is maar wel via python3 path aangeroepen wordt - de executable-bit is irrelevant. Eerdere installaties hebben die bit mogelijk niet gezet; downgraden naar [INFO] voorkomt false-positive alarms.

Minimale set checks voor een markdown-vault

  1. Vault-root bestaat
  2. Alle verwachte subdirectories bestaan
  3. Templates aanwezig op verwachte plek
  4. Scripts aanwezig (executable-check apart)
  5. Config-bestand bestaat en heeft geen [YOUR NAME] placeholders meer
  6. Slash-commando’s geinstalleerd in ~/.claude/commands/
  7. Optionele skills geinstalleerd
  8. Trigger-snippets aanwezig in globale CLAUDE.md
  9. Memory-directory bestaat (INFO als afwezig: vereist eerdere sessie)
  10. Externe tools beschikbaar (Python 3.10+, Ollama: INFO als afwezig)

Footer en exit

Summary
  [PASS] N
  [WARN] M
  [FAIL] K
  [INFO] L

Exit 0 als K=0, anders 1. Geeft CI een duidelijk signaal.

Verbanden

Bronnen

van den Breemen, J. (2026). LLmWiki-KennisBank v0.2.0: scripts/doctor.sh [GitHub]. https://github.com/Jvdbreemen/LLmWiki-KennisBank/blob/v0.2.0/scripts/doctor.sh

Homebrew. (n.d.). brew doctor. https://docs.brew.sh/Common-Issues

Sessie-herkomst