fix(mac): herstel de logmap bij elke boot #281
No reviewers
Labels
No labels
severity/s2
severity/s3
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
janpeter/Ops-dashboard!281
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/mac-log-dir-boot-repair"
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?
Wat
jp-ops-projections(de root-taak die bij elke boot en bij elke deploy draait) zet/Library/Logs/jpvisserterug oproot:_jpops 0770.Waarom
Een macOS-update bouwt
/Library/Logsopnieuw op. Bij de herstart daarna maakt launchd de map voor de root-daemons aan alsroot:wheelzonder groepstoegang. De drie_jpops-diensten stoppen dan met exit 78 (EX_CONFIG) voordat de launcher draait, omdat launchd hun logbestanden niet kan openen. Er verschijnt dus ook geen logregel.Gezien op de Mac-productiehost na de update naar macOS 27.0.1 (2026-10-01 01:42):
mac-prodgaf 502 tot de rechten op 2026-10-04 met de hand waren hersteld. Dat launchd de map zelf terugzet is afgeleid uit de eigenaar, de rechten en de tijdstempels; het systeemlog van dat moment gaf er geen regels over.Hoe
opsprojection.Host.RepairLogDir: maakt de map aan als hij ontbreekt, zet0770enroot:_jpops. Een symlink of ander niet-map-object op die plek wordt geweigerd.main.goroept dit aan bijwriteenrefresh-boot, los van de projecties: een fout in de logmap blokkeert geen deploy, en een verouderde projectie houdt het herstel niet tegen.ops-boot-projectionbeschrijft het gedrag.De diensten hebben
KeepAlivemet een interval van tien seconden, dus ze komen vanzelf op zodra de map klopt.Getest
go build ./... && go test ./...indeploy/mac-production/go: groen.installvan een release met deze wijziging.Uitrol
deploy-ops-release.sh installinstalleertjp-ops-projectionsmee; er is geen aparte stap nodig.🤖 Generated with Claude Code
REQUEST_CHANGES
Findings:
return logErrgeeft ook na een succesvolleHost.Writeexitcode 1 als logmapherstel faalt (bijvoorbeeld een geweigerde symlink of chmod/chown-fout).deploy-ops-release.sh:349-358behandelt die exitcode als mislukte projectieschrijfactie:currentwordt teruggezet en services worden niet herstart. Een blijvende logmapfout laat vervolgens ook de rollback-opdracht als mislukt eindigen. Dit maakt logmapherstel alsnog blokkerend voor deploy, in strijd met de expliciete intentie op regel 48. Meld de logmapfout afzonderlijk zonder een succesvollewritete laten falen, en voeg dekking toe voor succesvolle projecties met falend logmapherstel.geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Context: de actieve optie-C-deployketen is beoordeeld volgens het ADR
mac-foundation-reproduceerbaarheid-vervalt. Het README beschrijft het herstel en de nieuwe unit-tests dekken aanmaak, permissies en symlinkweigering, maar niet bovengenoemde CLI/deploy-foutcombinatie.Verificatie: PR-head bevestigd als
974126c763189b7b04403000d38b89d2cf662a00; rollback bij niet-nul writer-exit bevestigd met het echte deployscript tegen een tijdelijke hostfixture. Go-tests niet uitgevoerd wegens ontbrekende Go-toolchain; Vitest-dependencies ontbreken eveneens. Geen macOS-bootproef uitgevoerd.Bevinding klopt en is verwerkt in
ea25c7ebc.deploy-ops-release.shzetcurrentterug bij een niet-nul exit vanwrite;return logErrmaakte het logmapherstel dus blokkerend voor deploy en rollback.opsprojection.Host.Runvoert nu herstel en projectie uit. Een logmapfout gaat alleen als waarschuwing naar stderr; de exitcode volgt uitsluitend de projectie (bijwriteen bijrefresh-boot).writeenrefresh-bootmet falend logmapherstel (launcher start daarna), en herstel van de logmap bij een falende projectie.go build ./... && go test ./...indeploy/mac-production/go: groen. Geen macOS-bootproef.COMMENT
Findings:
deploy/mac-production/go/internal/opsprojection/opsprojection_test.go:311: de toegevoegde tests dekken ontbrekende/verkeerd geconfigureerde logmappen, symlink-weigering en de onafhankelijkheid van logherstel en projectiepublicatie. Onafhankelijke uitvoering van build/tests/vet was hier niet mogelijk: Go ontbreekt op de worker en de tijdelijk gedownloade, SHA-256-gecontroleerde Go 1.26.6-toolchain kan op denoexec-mount/tmpniet starten. De in de PR gemelde groene checks zijn daardoor niet bevestigd; een echte macOS-boot is evenmin geverifieerd. Daarom COMMENT.Geen blokkerende findings bij statische beoordeling. Het herstel gebeurt vóór projectievalidatie; herstelproblemen blijven waarschuwingen zodat de bestaande deploy-rollbacksemantiek behouden blijft. De eigenaar en modus volgen het bestaande foundation-patroon. De README beschrijft de wijziging. Beoordeeld tegen de actieve optie-C-route en ADR
mac-foundation-reproduceerbaarheid-vervalt; eisen uit de bevroren foundation-keten zijn geen blokkade voor deze PR.geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
PR en head-SHA zijn via Forgejo gecontroleerd; de checkout-diff is exact gelijk aan de payload.
git diff --checkslaagt. Review geldt voor commitea25c7ebcb82b008bb05381245e7b5c4b71afff1.