feat(ops-agent): setup.sh synct de drift-runtime, met luide bronwaarschuwing #141
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!141
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/drift-sync-in-setup"
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 remedie uit #140 bestond wel maar werd door niets aangeroepen — dezelfde vorm als het gat dat hij dicht.
setup.shroeptapply-drift-runtime.shnu aan.Plaatsing: als laatste stap, na de herstart. De detector is observability; de agent draait zonder hem. Eerder in het script zou een mislukking hier een nieuwe build in
/optachterlaten met het oude proces draaiend — de half-toegepaste staat die #138 wegnam. Geen|| true: een detector die stil half geinstalleerd raakt is een kapot vangnet dat zegt dat alles in orde is.De valkuil die dit introduceert, en wat eraan gedaan is: setup.sh kan de runtime nu naar een vuile of achterlopende checkout trekken, waarna de detector
no driftmeldt omdat repo en runtime het met elkaar eens zijn terwijl beide van de upstream af staan. Daarom waarschuwt de apply luid over de staat van de bron. Waarschuwen, niet weigeren — installeren vanaf een feature-branch is normaal werk en een harde weigering zou dat blokkeren.Die staat wordt niet herberekend maar uit de detector getrokken naar
deploy/ops-agent/scripts/repo-state.sh. Eén bron; een tweede berekening van dezelfde waarheid is hoe deze reeks fouten ontstond. Exit 0 = veilig, 3 = VUIL en/of ACHTER, 2 = geen checkout. Alleen-vooruit is geen 3; een ontbrekende upstream wel, want dan kun je niet vaststellen of je achterloopt.Meting die de scope raakt:
setup.shinstalleerdeops-agent-drift.service/.timerniet — die stonden op de host omdat iemand ze had neergezet (de timer dateert van 8 juni). Zelfde klasse als het script, dus meegenomen en hier expliciet gemeld.Bewijzen (op de host, via setup.sh — niet met de hand)
setup.sh-> injectie weg, md5 runtime == repo, runtime-script == repo -> detectorno drift, exit 0.WARNING: de drift-runtime wordt gesynct vanaf een checkout die NIET schoon en actueel is.metstaat feat/drift-sync-in-setup@e097e14, VUIL, gelijk met upstream. setup.sh blijft exit 0.==> Done, SKIPPED-regels intact, foundation-skip herstart de agent nog steeds. Agent HTTP 200 op/agent/v1/health, listener172.18.0.1:3099, 101 keys / 18 flows, timer active/enabled, provenance ==main:ops-agent.test/repo-state.test.ts7/7.control-room-foundation.test.tsgeeft lokaal 65 gefaald — identiek aan main, gemeten in een aparte worktree, en nul sporen van deze wijziging in de failures.🤖 Generated with Claude Code
Verdict: REQUEST_CHANGES
Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Findings
deploy/ops-agent/scripts/repo-state.sh:54: de parsing vangit rev-list --left-right --count 'HEAD...@{u}'gebruikt${ab%%\t*}en${ab##*\t}. In Bash pattern matching is\tgeen tab; bij output zoals0<TAB>1blijvenaheadenbehinddus de volledige string. Daardoor wordt een achterlopende checkout niet als1 ACHTERherkend, blijftattention=0, en exit het script met0. Dit breekt precies de veiligheidsfunctie die deze PR toevoegt:setup.shkan alsnog stil een runtime syncen vanaf een achterlopende checkout zonder waarschuwing. De nieuwe tests voor alleen-vooruit en achterlopen zouden dit ook moeten vangen en falen met de huidige implementatie. Gebruik een echte tab-split, bijvoorbeeldIFS=$'\t' read -r ahead behind <<< "$ab", en verifieer de repo-state tests.Verdict-log
REQUEST_CHANGESomdat de gedeelde bronstatus-helper het kerncontract voor achterlopende checkouts niet correct implementeert.