fix(worker-logs): toon afgebroken runs en herstel hervatte logs #277

Merged
janpeter merged 3 commits from codex/interrupted-worker-runs into main 2026-09-30 14:44:10 +02:00
Owner

Probleem en wijziging

Een worker die tijdens een job stopt laat geen slotregel achter. Zulke runs bleven eindeloos running, bleven detailpolling starten en lieten iedere ingest alle events opnieuw schrijven.

De gedeelde parser sluit een geclaimde run zonder terminale regel nu af als error met in_progress=false en een herkenbare melding met de laatste bestandswijzigingstijd. De grens is meer dan 10 minuten voor Claude/Codex en 60 minuten voor harness. Ingest en detail gebruiken dezelfde inhoud en bestandsmetadata; een wijziging tijdens het lezen voorkomt een afsluiting op basis van stilte.

  • Geen schemawijziging. Bestaande terminale regels en idle-classificatie blijven intact.
  • Wegens stilte afgesloten runs worden alleen opnieuw verwerkt als hun ongecomprimeerde lengte verandert. Dat herstelt een later hervatte run en houdt rustige ticks op ingested: 0, zonder event-vervanging. Identieke kopieën veranderen de host-eigenaar niet.
  • .log.gz gebruikt filesystem-mtime en ongecomprimeerde lengte. Het gebruikte gzip -q bewaart mtime (lokaal gecontroleerd). Opgeslagen .log-detail-links blijven na rotatie werken via een reader-fallback naar .log.gz.
  • Afgebroken runs zijn uitgesloten van beide automatische triage-kandidaatpaden. Het ontbreken van een slotregel bewijst geen specifieke oorzaak.
  • Nieuwe tests zijn geregistreerd in de base CI-groep.

Verificatie

Basis: e5b13539eb3e569b9452aff40ed5d21482c4ce7a. Eigen worktree; npm ci, npm --prefix ops-agent ci, gepinde copilot-submodule en Prisma-generatie met placeholder-URL.

  • Test-first: parser (3), ingest (3) en triage (2) regressies eerst rood, daarna groen. Concurrent-write-regressie ook met verwijderde bescherming rood gecontroleerd.
  • 150 gerichte worker-logtests groen, waaronder echte tijdelijke bestanden, afgekapte geschoonde Claude-fixture, gzip, beide HTTP-routes en een Prisma-testdouble.
  • npm run typecheck groen; git diff --check groen.
  • npm test op vaste head e3dbded39c979cae82dc1e5365ac6c219f81c596: 4.788 geslaagd, 5 overgeslagen, 20 gefaald. Daarvan 19 in de bekende macOS-suites caddy-write-wrapper en db-access-policy-bundle-flow (ook op baseline). Eén extra failure in db-access-lock: subprocess na SIGTERM nog zichtbaar. Gerichte herhaling van die suite: 10/10 groen.
  • CI-register en pre-push-registrytests: 31/31 groen. De eerdere losse subprocess-timeouts in ci-mac-harness-artifacts en control-room-foundation-compose-authority zijn gericht herhaald: 57/57 groen; beide slagen ook in de laatste volledige run.
  • Forgejo-CI en automatische review staan nog open; er zijn nog geen reviewerbevindingen beschikbaar.

Grenzen en uitrol

De harness-grens is twaalfmaal de genoemde modeltimeout van 300 seconden; zonder heartbeat is een stille levende containerstap van meer dan een uur niet te onderscheiden van een afgebroken run. Latere appends herstellen de classificatie. Vergelijking op lengte veronderstelt append-only workerlogs; herschrijven met identieke lengte valt erbuiten.

Merge en serveracties wachten op JP-go. Daarna eerst srv, dan max2, ieder met dry-run. Nog te bewijzen op de hosts: zeven oude runs afgesloten, de dubbele mei-run bij srv, rustige ticks met ingested: 0 / errors: [], en een echte actieve job die running blijft en normaal afsluit. Tijdens gemengde versies kan de oude max2-ingester de gedeelde rij nog overschrijven; controleer daarom de eigenaar na beide uitrollen.

## Probleem en wijziging Een worker die tijdens een job stopt laat geen slotregel achter. Zulke runs bleven eindeloos `running`, bleven detailpolling starten en lieten iedere ingest alle events opnieuw schrijven. De gedeelde parser sluit een geclaimde run zonder terminale regel nu af als `error` met `in_progress=false` en een herkenbare melding met de laatste bestandswijzigingstijd. De grens is meer dan 10 minuten voor Claude/Codex en 60 minuten voor harness. Ingest en detail gebruiken dezelfde inhoud en bestandsmetadata; een wijziging tijdens het lezen voorkomt een afsluiting op basis van stilte. - Geen schemawijziging. Bestaande terminale regels en idle-classificatie blijven intact. - Wegens stilte afgesloten runs worden alleen opnieuw verwerkt als hun ongecomprimeerde lengte verandert. Dat herstelt een later hervatte run en houdt rustige ticks op `ingested: 0`, zonder event-vervanging. Identieke kopieën veranderen de host-eigenaar niet. - `.log.gz` gebruikt filesystem-mtime en ongecomprimeerde lengte. Het gebruikte `gzip -q` bewaart mtime (lokaal gecontroleerd). Opgeslagen `.log`-detail-links blijven na rotatie werken via een reader-fallback naar `.log.gz`. - Afgebroken runs zijn uitgesloten van beide automatische triage-kandidaatpaden. Het ontbreken van een slotregel bewijst geen specifieke oorzaak. - Nieuwe tests zijn geregistreerd in de base CI-groep. ## Verificatie Basis: `e5b13539eb3e569b9452aff40ed5d21482c4ce7a`. Eigen worktree; `npm ci`, `npm --prefix ops-agent ci`, gepinde copilot-submodule en Prisma-generatie met placeholder-URL. - Test-first: parser (3), ingest (3) en triage (2) regressies eerst rood, daarna groen. Concurrent-write-regressie ook met verwijderde bescherming rood gecontroleerd. - 150 gerichte worker-logtests groen, waaronder echte tijdelijke bestanden, afgekapte geschoonde Claude-fixture, gzip, beide HTTP-routes en een Prisma-testdouble. - `npm run typecheck` groen; `git diff --check` groen. - `npm test` op vaste head `e3dbded39c979cae82dc1e5365ac6c219f81c596`: 4.788 geslaagd, 5 overgeslagen, 20 gefaald. Daarvan 19 in de bekende macOS-suites `caddy-write-wrapper` en `db-access-policy-bundle-flow` (ook op baseline). Eén extra failure in `db-access-lock`: subprocess na SIGTERM nog zichtbaar. Gerichte herhaling van die suite: 10/10 groen. - CI-register en pre-push-registrytests: 31/31 groen. De eerdere losse subprocess-timeouts in `ci-mac-harness-artifacts` en `control-room-foundation-compose-authority` zijn gericht herhaald: 57/57 groen; beide slagen ook in de laatste volledige run. - Forgejo-CI en automatische review staan nog open; er zijn nog geen reviewerbevindingen beschikbaar. ## Grenzen en uitrol De harness-grens is twaalfmaal de genoemde modeltimeout van 300 seconden; zonder heartbeat is een stille levende containerstap van meer dan een uur niet te onderscheiden van een afgebroken run. Latere appends herstellen de classificatie. Vergelijking op lengte veronderstelt append-only workerlogs; herschrijven met identieke lengte valt erbuiten. Merge en serveracties wachten op JP-go. Daarna eerst srv, dan max2, ieder met dry-run. Nog te bewijzen op de hosts: zeven oude runs afgesloten, de dubbele mei-run bij srv, rustige ticks met `ingested: 0` / `errors: []`, en een echte actieve job die `running` blijft en normaal afsluit. Tijdens gemengde versies kan de oude max2-ingester de gedeelde rij nog overschrijven; controleer daarom de eigenaar na beide uitrollen.
test(worker-logs): register interruption tests in base CI
Some checks failed
CI / Select checks (pull_request) Successful in 38s
CI / Ops-agent checks (pull_request) Has been cancelled
CI / DB access operator (pull_request) Has been cancelled
CI / Deploy artifact checks (pull_request) Has been cancelled
CI / Docker image build (pull_request) Has been cancelled
CI / Mac foundation hermetic checks (pull_request) Has been cancelled
CI / Required checks (pull_request) Has been cancelled
CI / Root app checks (pull_request) Has been cancelled
1af2910414
fix(worker-logs): retain detail links after gzip rotation
All checks were successful
CI / Select checks (pull_request) Successful in 15s
CI / Ops-agent checks (pull_request) Successful in 39s
CI / DB access operator (pull_request) Successful in 1m12s
CI / Deploy artifact checks (pull_request) Successful in 38s
CI / Docker image build (pull_request) Successful in 1m19s
CI / Root app checks (pull_request) Successful in 8m36s
CI / Mac foundation hermetic checks (pull_request) Successful in 2m15s
CI / Required checks (pull_request) Successful in 36s
e3dbded39c
janpeter scheduled this pull request to auto merge when all checks succeed 2026-09-30 14:40:19 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/Ops-dashboard!277
No description provided.