feat(ops-agent): drift-detector ziet repo-vs-runtime, en die drift is nu op te heffen #140
No reviewers
Labels
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
janpeter/Ops-dashboard!140
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/drift-repo-runtime-layer"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
De detector vergeleek runtime-baseline ↔ live
/etc/ops-agenten las de repo-kopie nooit.no driftbewees dus alleen runtime == live.Die blinde vlek beet echt: de build-laag uit PR #135 zat wél in de repo en niet in het runtime-script, en de check meldde
no driftterwijl hij de env-knop domweg negeerde.Eerst gemeten, toen pas gebouwd
De opdracht vroeg uit te zoeken of er überhaupt iets de runtime-baseline vanuit de repo synct. Antwoord: nee.
setup.shdocs/Ook het drift-script zélf wordt door niets geïnstalleerd. De
.bak.*-bestanden naast de baseline zijn de vingerafdrukken van handmatige syncs —workerfix-20260711,smokeretry-20260714,readyprobe-20260727en drie van vandaag.En de unit-header belooft letterlijk iets wat niet bestaat:
Alarmeren op een toestand zonder knop levert een detector op die iets meldt wat niemand kan wegnemen. Daarom twee delen.
1.
apply-drift-runtime.sh— de sync bestaanbaar makenKopieert script + baseline vanuit de repo naar het runtime-pad, en leidt dat pad af uit de
ExecStartvan de unit zodat er geen tweede plek is waar het staat. Idempotent, root-only. Laat de.bak.*-historie staan: bewijsmateriaal, geen rommel.2. De derde laag in de detector
Geen nieuwe env-knop en geen vierde pad — het repo-pad wordt afgeleid uit
OPS_AGENT_SRC_DIR(<repo>/ops-agent), dat de build-laag toch al zet.Referentie-revisie: de werkboom, niet
origin/main. Reden:apply-drift-runtime.shkopieert uit de werkboom. Zou de detector tegenorigin/mainmeten, dan meldt hij drift die de remedie niet kan opheffen. De prijs is dat een achterlopende of vuile checkout een schone meting kan geven — daarom rapporteert de detector nu altijd waartegen hij vergeleken heeft:Bewijzen
Vuil in beide richtingen, en weer schoon:
Fail closed, benoemde reden:
De remedie heft op wat de detector meldt:
De laag wordt echt uitgevoerd (niet stilzwijgend overgeslagen zoals
OPS_AGENT_SRC_DIRmaandenlang): via de systemd-unit staat delaag repo<->runtime:-regel in het journal, en bij een ongezette knop staat er explicietOVERGESLAGEN.Twee testfouten van mij, voor de volledigheid
Mijn eerste fail-closed-test gebruikte
chmod 000— zinloos, want de check draait als root en root omzeilt mode-bits. En mijn eerste remedie-test voegde een bestand toe dat alleen in de repo bestond; na de apply stond dat in runtime maar niet live, dus terecht laag-2-drift. Beide overgedaan met een opzet die de bedoelde tak wél raakt.Verdict: REQUEST_CHANGES
geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Findings
deploy/ops-agent/scripts/apply-drift-runtime.sh:57: het apply-script kopieert repo-flows naar$RUNTIME_BASELINE/flows, maar verwijdert geen runtime-flowfiles die niet meer in de repo-baseline bestaan. De aangepaste detector meldt zulke extra runtimefiles expliciet alsrepo:flows/<name> ... in runtime-baseline, niet in repo-baseline, waardoor de voorgeschreven herstelactieapply-drift-runtime.shdie drift niet kan opheffen. Dit maakt de nieuwe repo-vs-runtime laag praktisch niet idempotent voor delete/rename-cases. Laat het script de vergeleken flowset exact synchroniseren, of verwijder minimaal runtimeflows/*.ymldie geen corresponderende repo-flow meer hebben zonder de.bak.*historie naast de baseline te wissen.Verdict: REQUEST_CHANGES
Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Findings
deploy/ops-agent/scripts/apply-drift-runtime.sh:58— De detector meldt extra runtime-flowbestanden als repo-vs-runtime drift (in runtime-baseline, niet in repo-baseline), maar de herstelknop kopieert alleen flowbestanden die in de repo-baseline bestaan en verwijdert geen runtime-only flowbestanden. Daardoor blijft deze door de PR nieuw geintroduceerde driftcategorie naapply-drift-runtime.shbestaan, terwijl de reviewtekst expliciet belooft dat dit script de repo-vs-runtime drift opheft. Maak de apply-stap symmetrisch voor de set bestanden die de detector vergelijkt, bijvoorbeeld door runtime-onlyflows/*.ymlgecontroleerd te verwijderen of de baseline-directory atomisch uit de repo te reconstrueren zonder ongecontroleerde.bak.*-historie te verliezen buiten de vergeleken set.