# Implementatie — Automatisering Uniforme Deliverables **Geleverd instrument**: `scripts/deliverables_gatekeeper.py` (Python 3, zero dependencies) **Status**: ✅ gebouwd en gevalideerd tegen beide auditprojecten (24-08-2026 21:32 UTC) --- ## 1. Architectuur ``` ┌────────────────────────── Kas (orchestrator) ──────────────────────────┐ │ │ │ [1] Nieuw project? ──► gatekeeper --phase entry │ │ FAIL? → Fase 0-1 afronden (submappen, prompt-log, sources) │ │ PASS → spawn toegestaan │ │ │ │ [2] Elke spawn-taak bevat OUTPUT-CONTRACT: │ │ pad + bestandsnaam + formaat + min-grootte │ │ │ │ [3] Subagent klaar? ──► gatekeeper --phase artefact --file │ │ FAIL? → Artefact Recovery Protocol (re-spawn; NOOIT zelf) │ │ PASS → door │ │ │ │ [4] Vóór oplevering ─► gatekeeper --phase deliverables │ │ FAIL? → fixes (archive/, CHANGELOG, her-audit) → her-run │ │ PASS → leveren │ └────────────────────────────────────────────────────────────────────────┘ ``` Drie gates, drie momenten: **vóór spawn**, **na elke run**, **vóór levering**. Dit dicht precies de detectie-afstand uit `foutanalyse.md` — fouten vallen nu in dezelfde fase waarin ze ontstaan. ## 2. Validatieresultaten (live tests 21:32 UTC) | Test | Project | Verwacht | Resultaat | |------|---------|----------|-----------| | 1 — deliverables | Mercury 003057 | PASS structuur | ✅ 6/6 structuurchecks PASS. Bonus-bevinding: Mercury zelf scoort 2 minors (geen CHANGELOG in deliverables/, 3 html/json zonder versietag) — de "gouden" referentie is zelf niet 100% §6-conform | | 2 — deliverables | Chromium VI | FAIL | ✅ FAILT exact op: 2 legacy-combined bestanden, CHANGELOG noemt 5 gescheiden bestanden niet, anti-corruptie scan detecteert "Kas — Nood-QC" in qa_report.md → VOID | | 3 — entry | Chromium VI | FAIL | ✅ FAILT op: 3 ontbrekende Fase-1 submappen (assets, correspondence, logs), geen research/sources.md | | 4 — artefact | foutanalyse.md | PASS | ✅ bestaat + 8.2 KB + heading-structuur | | 5 — artefact | niet-bestaand | FAIL | ✅ FAIL + Recovery-Protocol-instructies op stdout | De gatekeeper reproduceert alle drie de productiefouten van vanavond als mechanisme-detectie — precies de borging die de opdracht vroeg. ## 3. Het OUTPUT-CONTRACT (standaardblok voor elke spawn-taak) ```markdown OUTPUT-CONTRACT (VERPLICHT): - Absoluut pad: /root/projects/jg//working/_v. - Minimale grootte: 512 bytes - Formaat: [markdown met H1-H3 structuur / python-docx DOCX / ...] - Vereiste secties: [opsommen] - Laatste actie in je run: schrijf het bestand, verifieer met: test -f && wc -c ``` Post-run hoort daarbij standaard: ```bash python3 /root/projects/jg/2026-repair-clan-uniform-deliverables/scripts/deliverables_gatekeeper.py \ artefact --file ``` **Locatie-voorstel voor productie-inzet**: kopieer het script naar `/root/.openclaw/scripts/deliverables_gatekeeper.py` zodat het buiten projectmappen beschikbaar is voor álle toekomstige projecten (voorstel aan Kas — bewust niet zelf gedaan, zie §5). ## 4. Integratie in Kas' spawn-flow (voorstel SOP v8.9) **Pre-spawn (nieuw)**: ```bash gatekeeper entry /root/projects/jg/ || { echo "⛔ Entry-FAIL — Fase 0-1 eerst"; exit 1; } ``` **Post-spawn (uitbreiding §1.3 Timeout Recovery met Artefact Recovery)**: ```bash gatekeeper artefact --file || { # Artefact Recovery Protocol — NIET zelf produceren (§1.3/§5.4) log_naar logs/system_failures.log re_spawn_met_output_contract } ``` **Pre-levering (uitbreiding §5.2 check #13)**: ```bash gatekeeper deliverables /root/projects/jg/ || { echo "⛔ Niet leveren"; } ``` ## 5. Bewust NIET gedaan (grenzen van dit project) - **Geen mutaties in de Chromium VI-projectmap** (archive-verplaatsingen, CHANGELOG-update, VOID-markering): een afgerond auditeindossier muteren is een Director-beslissing; het reparatierapport levert het bewijs + recept. - **Geen installatie in /root/.openclaw/scripts/**: productie-inzet raakt de orchestratie-laag van alle toekomstige projecten — voorstel, geen eigenmachtige actie. - **Geen MASTER_SOP.md-wijziging**: v8.9-wijzigingsvoorstel staat in `sop_audit.md` §Aanbevelingen; release is aan Kas. ## 6. Bekende beperkingen (eerlijkheidshalve) 1. **mtime-heuristiek**: de prompt-log-timingcheck vangt retroactief loggen alleen als working-artefacten ouder zijn dan de log. In het Chromium-geval was de log 20:38 en waren meeste working-bestanden later herschreven (21:02+) waardoor de timingcheck vandaag PASS geeft — de overtreding is bewezen via de taakstart (20:07) uit de sessiegeschiedenis, niet via mtime. Structurele oplossing: entry-gate draait vóór spawn, dus bij correct gebruik bestaat de log vóór het eerste artefact, punt. 2. **Anti-corruptie-scan is patroon-gebaseerd**: vangt letterlijke vermeldingen ("Kas", "Nood-QC", "Director"), geen synoniemen. Eerste verdedigingslinie blijft het output-contract (rapport door subagent = bestand in working/ met subagent-signatuur). 3. **Golden Standard is audit-specifiek**: het meegeleverde manifest dekt compliance-auditprojecten (Mercury/CrVI-type). Andere projecttypen (training, webapp) verdienen een eigen manifest — mechanisme (`--manifest`) is daarvoor klaar. 4. **Python 3.10+ aanname** (`str | None` type-hint): op deze host (python3) geldig; bij oudere hosts één regel aanpassen. ## 7. Rapportage-formaat Elke run print per check `✅ PASS` / `❌ FAIL` + fix-instructie, en sluit af met een totaaloordeel + exit code. Geschikt voor: - handmatige run door Kas, - hook in spawn-macro's (exit-code gestuurd), - toekomstige cron-audit over alle projecten (`for d in /root/projects/jg/2026-*; do gatekeeper deliverables $d; done`).