fix(hub-settings): setter verloor stil de eigenaar van het envbestand #147
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!147
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/hub-setter-ownership"
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?
Twee defecten, allebei gevonden doordat de veldproef op scrum4me-server het schrijfpad weerlegde in plaats van bevestigde. PR #143 was live en groen; dit is wat er onder zat.
1. De setter verloor stil de eigenaar van het envbestand
De proef zette
HUB_HOOK_WAIT_SECONDSop zijn eigen waarde 120. De inhoud bleef byte-identiek, maar de eigenaar ging vanjanpeter:janpeternaarroot:root. De permission-hook draait alsjanpeteren kon zijn eigen envbestand daarna niet meer lezen; de bekende faalmodus is dan dat de hook exit 0 geeft zonder decision, waarna approvals stil buiten de hub om lopen. Eén klik op/settings/hubschakelde de hub dus uit.Het naarste eraan: de degradatie was in beide richtingen stil. Het leespad bleef werken omdat de hartslag via
sudoals root leest — het dashboard bleef groen terwijl de hook uit stond.Oorzaak. De ownership-regel stond op BSD-eerst:
Op GNU coreutils is
stat -ffilesystem-status en neemt het geen format-argument:'%u:%g'wordt daar als bestandsnaam gelezen. Het commando faalt, maar heeft dan al vijf regels filesystem-info naar stdout geschreven, en die belanden in de command-substitution. De fallback plakt er1000:1000onder,chownkrijgt een string van zes regels, faalt — en die fout werd door2>/dev/null || trueopgeslokt.Op macOS werkt
stat -fjuist wél. Lokaal was dit dus onzichtbaar, en de bestaande tests toetsten na de rewrite wel de mode maar niet de eigenaar. Zo is het door elf groene tests geglipt.Fix: GNU eerst (BSD kent geen
-cen faalt schoon), een numerieke guard tegen vervuilde uitvoer, en geen|| truemeer — een misluktechownfaalt nu hard, waarna de EXIT-trap het tempbestand opruimt en het origineel ongemoeid blijft. De nieuwe test stubtstatin beide dialecten pluschownen eist één schone numerieke eigenaar.2.
setup.shontwapende de hub-module bij elke rundeploy/ops-agent/setup.shoverschrijft/etc/sudoers.d/ops-agenthard vanuitdeploy/ops-agent/sudoers(nul hub-regels) en riep daarna wélinstall-network-module.sheninstall-docker-inspection-module.shna — maar nietinstall-hub-module.sh.commands.ymloverleeft, dus de hub-keys bleven staan terwijl de sudoers-regels eronder verdwenen: de agent voert de key uit ensudoweigert hem. Dat raakt ook het leespad, wanthub_hook_statusloopt over dezelfde regel.De guard is fail-closed op de map: elke
install-*-module.shmoet doorsetup.shworden aangeroepen. De control-room-harness hield diezelfde lijst handmatig bij en driftte dus op dezelfde manier — die leest de map nu ook.Gate
tsc --noEmitgroen ·npm test1186 groen. De 4 falende tests intest/scrum4us-deploy-trigger.test.tszijn pre-existing opmain. Beide nieuwe guards zijn apart rood gemaakt om te bewijzen dat ze aanslaan.De host is intussen hersteld: envbestand terug op
janpeter:janpeter 600, zelfde hash, leesbaar alsjanpeter, geen tempbestanden achtergebleven.🤖 Generated with Claude Code
Verdict: APPROVED
Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Findings
Review-notities
ops-agent/wrappers/hub/hub-hook-wait.shcorrigeert de GNU/BSDstat-volgorde, valideert vervuilde eigenaar-output fail-closed en voorkomt stil eigendomsverlies bij de atomische rewrite.deploy/ops-agent/install-hub-module.shindeploy/ops-agent/setup.shpast bij het bestaande installer-/sudoers-patroon: setup overschrijft de hoofd-sudoers en modules die eigen sudoers-regels nodig hebben moeten daarna opnieuw idempotent worden aangebracht.stat-val als de module-installers insetup.sh. Ik kon geen lokale test-run uitvoeren omdat er geen checkout van de repo beschikbaar is in/opt/agent; de beoordeling is daarom gebaseerd op de frozen PR-diff en productdocs.Verdict: COMMENT
Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Findings
lib/build-info.ts:3: De PR commit auto-generated build metadata mee die inhoudelijk los staat van de hub-settings fix. Bovendien wijstbuildInfo.commitnaarb13271f, terwijl de PR-headee3671b87a42c5bbd4950ab88530e5b43ff259d6is. Als deze metadata in UI/diagnostics gebruikt wordt, toont de build straks een onjuiste commit. Regeneer dit bij de daadwerkelijke release/build of laat deze wijziging buiten deze bugfix-PR.Review
De wijziging in
ops-agent/wrappers/hub/hub-hook-wait.shadresseert de root cause: GNUstat -fkan stdout vervuilen, en de nieuwe volgorde plus validatie voorkomt dat een vervuilde owner-string stil doorloopt naarmv. De hard-fail op mislukte owner-bepaling/chown is passend fail-closed gedrag voor dit pad. De nieuwe Vitest-dekking simuleert zowel GNU als BSDstaten de fail-closed situatie, en de setup-module-test voorkomt regressie door handmatig driftende modulelijsten.