feat(dispatch): usage van een poging meesturen met het resultaat (T-1972) #103

Merged
janpeter merged 6 commits from feat/t1972-dispatch-usage into master 2026-10-03 17:28:10 +02:00
Owner

Waarom (T-1972, PBI-175 / ST-1622)

QUEUE_REVIEW-dispatchjobs hadden geen usage-data op claude_jobs. De gegevens staan wel in het transcript van het kind, maar niemand las ze daaruit. Hangt af van scrum4me-mcp feat/t1972-dispatch-usage, die eerst live moet zijn.

Wat

  • lib/dispatch-usage.ts:
    • usageFromEvents(runtime, lines):
      • Codex: turn.completed, net als parseCodexJsonlUsage in mcp. De invoer telt zonder het deel uit de cache; cache writes blijven 0.
      • Claude: alleen de afsluitende result-regel: modelUsage over alle modellen (inclusief subagents), anders usage. Het model komt uit init, met [1m] genormaliseerd naar -1m. Stream-json herhaalt de assistant-usage per contentblok, dus die regels tellen niet mee.
      • Tellingen boven int4 worden parse_error; een ongeldig modeltoken wordt null.
    • readDispatchUsage: leest transcript.jsonl met de run-log-lezer (readTranscript, nu geëxporteerd), dus met dezelfde link- en groottegrenzen. Geen transcript geeft no_usage_events, een geweigerd transcript parse_error; de functie gooit nooit.
  • Supervisor:
    • Nieuwe optionele port usage. Die wordt één keer gelezen na stageResult, vastgelegd in het journal naast het resultaat, en meegestuurd met elke submit van dat resultaat, ook bij een replay.
    • Best-effort zoals de run-log: een fout stuurt het resultaat zonder usage en logt alleen DISPATCH_USAGE_FAILED.
  • Transport: stuurt usage alleen mee als het er is. Het entrypoint bedraadt de port met config.outputRoot en de profielruntime.

Verificatie

  • RED eerst: 4 nieuwe supervisor- en transporttests faalden, en de module ontbrak.
  • npx vitest run: 1083 geslaagd. De 2 bestaande falers in transcript-retention (BSD-chmod op macOS) staan los hiervan.
  • tsc -p tsconfig.dispatch.json is schoon.
  • De parserfixtures zijn geschoonde echte regels uit de run-logs van 2026-10-03 op scrum4me-server.
  • Contractgate (echte supervisor en transport tegen de echte service, wegwerp-Postgres). De review-cases controleren nu ook de usagekolommen op de job:
    • tegen mcp feat/t1972-dispatch-usage: 9 van 9;
    • tegen de huidige mcp 4f0bdb1: beide review-cases blijven op pending_receipt, want de oude route weigert het veld. Dus eerst mcp uitrollen.

🤖 Generated with Claude Code

## Waarom (T-1972, PBI-175 / ST-1622) QUEUE_REVIEW-dispatchjobs hadden geen usage-data op `claude_jobs`. De gegevens staan wel in het transcript van het kind, maar niemand las ze daaruit. **Hangt af van scrum4me-mcp `feat/t1972-dispatch-usage`**, die eerst live moet zijn. ## Wat - `lib/dispatch-usage.ts`: - `usageFromEvents(runtime, lines)`: - **Codex:** `turn.completed`, net als `parseCodexJsonlUsage` in mcp. De invoer telt zonder het deel uit de cache; cache writes blijven 0. - **Claude:** alleen de afsluitende `result`-regel: `modelUsage` over alle modellen (inclusief subagents), anders `usage`. Het model komt uit `init`, met `[1m]` genormaliseerd naar `-1m`. Stream-json herhaalt de assistant-usage per contentblok, dus die regels tellen niet mee. - Tellingen boven int4 worden `parse_error`; een ongeldig modeltoken wordt `null`. - `readDispatchUsage`: leest `transcript.jsonl` met de run-log-lezer (`readTranscript`, nu geëxporteerd), dus met dezelfde link- en groottegrenzen. Geen transcript geeft `no_usage_events`, een geweigerd transcript `parse_error`; de functie gooit nooit. - Supervisor: - Nieuwe optionele port `usage`. Die wordt één keer gelezen na `stageResult`, vastgelegd in het journal naast het resultaat, en meegestuurd met elke submit van dat resultaat, ook bij een replay. - Best-effort zoals de run-log: een fout stuurt het resultaat zonder usage en logt alleen `DISPATCH_USAGE_FAILED`. - Transport: stuurt `usage` alleen mee als het er is. Het entrypoint bedraadt de port met `config.outputRoot` en de profielruntime. ## Verificatie - RED eerst: 4 nieuwe supervisor- en transporttests faalden, en de module ontbrak. - `npx vitest run`: 1083 geslaagd. De 2 bestaande falers in `transcript-retention` (BSD-`chmod` op macOS) staan los hiervan. - `tsc -p tsconfig.dispatch.json` is schoon. - De parserfixtures zijn geschoonde echte regels uit de run-logs van 2026-10-03 op scrum4me-server. - **Contractgate** (echte supervisor en transport tegen de echte service, wegwerp-Postgres). De review-cases controleren nu ook de usagekolommen op de job: - tegen mcp `feat/t1972-dispatch-usage`: 9 van 9; - tegen de huidige mcp `4f0bdb1`: beide review-cases blijven op `pending_receipt`, want de oude route weigert het veld. **Dus eerst mcp uitrollen.** 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(dispatch): usage van een poging meesturen met het resultaat (T-1972)
All checks were successful
CI / Compose config (pull_request) Successful in 4s
CI / Build-arg coverage (pull_request) Successful in 3s
CI / Docker build (pull_request) Successful in 1m13s
d79e3060f0
De supervisor leest na stageResult de token-usage uit het transcript van het
kind (zelfde lezer en link-/groottegrenzen als de run-log), legt die in het
journal vast en stuurt hem als optioneel `usage`-veld mee met elke submit van
dat resultaat. Codex telt zoals de gewone runner (turn.completed, billable
input zonder cached deel); Claude telt alleen de afsluitende result-regel
(modelUsage over alle modellen, anders usage), met het model uit init,
omdat stream-json assistant-events per contentblok herhaalt.

Best-effort zoals de run-log: een leesfout stuurt het resultaat zonder usage
en logt alleen DISPATCH_USAGE_FAILED. Tellingen boven int4 worden parse_error.

Contractgate: de review-cases controleren nu de usagekolommen op de job.
Tegen de huidige service (mcp 4f0bdb1) blijft de poging op pending_receipt:
de service met T-1972 moet eerst live zijn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
s4m-codex-reviewer requested changes 2026-10-03 14:54:56 +02:00
Dismissed
s4m-codex-reviewer left a comment

REQUEST_CHANGES

geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

  • ERROR (blokkerend) — lib/dispatch-usage.ts:63 (ook :52): afgekapt transcript wordt als volledige usage verwerkt. Zowel read.truncated als de bestaande child-marker dispatch.transcript_truncated wordt genegeerd. Vanaf de limiet van 16 MiB verdwijnen latere usage-events: Codex rapporteert eerdere turns als captured met te lage totalen; Claude rapporteert no_usage_events wanneer zijn afsluitende result wegvalt. Gereproduceerd met de echte transcript-writer en een kleinere limiet: twee turns met 100 + 200 inputtokens geven captured met 100. Detecteer beide truncatievormen en rapporteer een expliciete fout/onvolledige status, of verzamel volledige usage onafhankelijk van de begrensde log. Voeg regressietests voor Codex en Claude toe.

De normale resultaatroute, journal-replay en optionele transportparameter volgen de bestaande patronen. De productdocumentatie verlangt betrouwbare tokenregistratie en zichtbare diagnoses bij ontbrekende usage; bovenstaande stille ondertelling voldoet daar niet aan.

Verificatie op d79e3060f0c25d189b58b6aa80e39b7ab07a420e: dispatch-typecheck geslaagd; vier gerichte suites geslaagd (92 tests). Volledige suite: 1065 geslaagd, 20 mislukt, 8 overgeslagen; deze omgeving heeft /tmp-uitvoeringsbeperkingen (onder meer esbuild EACCES en niet-uitvoerbare shellfixtures). De volledige suite is dus niet groen; deze failures zijn niet als bewezen PR-regressies aangemerkt. De real-service contracttests zijn overgeslagen zonder MCP-testservice.

# REQUEST_CHANGES geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. - **ERROR (blokkerend)** — `lib/dispatch-usage.ts:63` (ook `:52`): afgekapt transcript wordt als volledige usage verwerkt. Zowel `read.truncated` als de bestaande child-marker `dispatch.transcript_truncated` wordt genegeerd. Vanaf de limiet van 16 MiB verdwijnen latere usage-events: Codex rapporteert eerdere turns als `captured` met te lage totalen; Claude rapporteert `no_usage_events` wanneer zijn afsluitende `result` wegvalt. Gereproduceerd met de echte transcript-writer en een kleinere limiet: twee turns met 100 + 200 inputtokens geven `captured` met 100. Detecteer beide truncatievormen en rapporteer een expliciete fout/onvolledige status, of verzamel volledige usage onafhankelijk van de begrensde log. Voeg regressietests voor Codex en Claude toe. De normale resultaatroute, journal-replay en optionele transportparameter volgen de bestaande patronen. De productdocumentatie verlangt betrouwbare tokenregistratie en zichtbare diagnoses bij ontbrekende usage; bovenstaande stille ondertelling voldoet daar niet aan. Verificatie op `d79e3060f0c25d189b58b6aa80e39b7ab07a420e`: dispatch-typecheck geslaagd; vier gerichte suites geslaagd (92 tests). Volledige suite: 1065 geslaagd, 20 mislukt, 8 overgeslagen; deze omgeving heeft `/tmp`-uitvoeringsbeperkingen (onder meer esbuild `EACCES` en niet-uitvoerbare shellfixtures). De volledige suite is dus niet groen; deze failures zijn niet als bewezen PR-regressies aangemerkt. De real-service contracttests zijn overgeslagen zonder MCP-testservice.
fix(dispatch): een afgekapt transcript geeft usage-status truncated (review #103)
All checks were successful
CI / Compose config (pull_request) Successful in 4s
CI / Build-arg coverage (pull_request) Successful in 3s
CI / Docker build (pull_request) Successful in 1m23s
17fe5f131d
De transcriptwriter van het kind houdt bij overschrijding van zijn cap het
begin en zet een dispatch.transcript_truncated-marker; de usage-regels staan
aan het eind. Dat telde Codex stil te laag en gaf Claude no_usage_events. Nu
geven de marker en een supervisor-read die zijn eigen limiet raakte allebei
status truncated, zonder tellingen. Regressietests met de echte writer.

Gemeten op scrum4me-server: grootste dispatch-run-log 0,6 MB tegen een cap van
16 MiB, nul afgekapte runs; een staart-bewarende writer is daarom niet nodig.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
s4m-codex-reviewer requested changes 2026-10-03 15:08:51 +02:00
Dismissed
s4m-codex-reviewer left a comment

REQUEST_CHANGES

geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

Findings

  • ERROR (blokkerend) — lib/dispatch-transport.ts:138: het nieuwe usage-veld breekt het huidige servicecontract. bin/run-dispatch-attempt.ts:142 schakelt capture altijd in en ook een ontbrekend transcript levert een usage-object. De huidige scrum4me-mcp main (a6b3fe0b74140e987542fac301b0648c22fdd161, src/dispatch/routes.ts:338) accepteert met een strict schema uitsluitend proof en result. De nieuwe payload wordt dus geweigerd; de supervisor blijft pending_receipt en verstuurt bij retries opnieuw dezelfde payload. Maak de service-uitbreiding en vereiste deployversie expliciet beschikbaar en bewijs het contract, of onderhandel ondersteuning voordat dit veld wordt meegestuurd.

Verificatie

De PR-head 17fe5f131d65b88331eef4c4bfceafeee5e0bebb is opgehaald en beoordeeld. Dispatch-typecheck geslaagd. De contractweigering is gereproduceerd met het service-schema: zonder usage geaccepteerd, met usage geweigerd. De toegevoegde tests behandelen parsing, transcripttruncatie en normale journal-retries. De testsuite kon in deze omgeving niet starten: /tmp weigert het laden van de native Rolldown-module; dit is geen aangetoonde testregressie. De cross-repo HTTP/Postgres-gate is niet uitgevoerd. Zonder bewezen compatibele service is goedkeuring niet verantwoord.

# REQUEST_CHANGES geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. ## Findings - **ERROR (blokkerend)** — `lib/dispatch-transport.ts:138`: het nieuwe `usage`-veld breekt het huidige servicecontract. `bin/run-dispatch-attempt.ts:142` schakelt capture altijd in en ook een ontbrekend transcript levert een usage-object. De huidige `scrum4me-mcp` main (`a6b3fe0b74140e987542fac301b0648c22fdd161`, `src/dispatch/routes.ts:338`) accepteert met een strict schema uitsluitend `proof` en `result`. De nieuwe payload wordt dus geweigerd; de supervisor blijft `pending_receipt` en verstuurt bij retries opnieuw dezelfde payload. Maak de service-uitbreiding en vereiste deployversie expliciet beschikbaar en bewijs het contract, of onderhandel ondersteuning voordat dit veld wordt meegestuurd. ## Verificatie De PR-head `17fe5f131d65b88331eef4c4bfceafeee5e0bebb` is opgehaald en beoordeeld. Dispatch-typecheck geslaagd. De contractweigering is gereproduceerd met het service-schema: zonder usage geaccepteerd, met usage geweigerd. De toegevoegde tests behandelen parsing, transcripttruncatie en normale journal-retries. De testsuite kon in deze omgeving niet starten: `/tmp` weigert het laden van de native Rolldown-module; dit is geen aangetoonde testregressie. De cross-repo HTTP/Postgres-gate is niet uitgevoerd. Zonder bewezen compatibele service is goedkeuring niet verantwoord.
Author
Owner

Contract bewezen tegen gemergde service. scrum4me-mcp#179 is gemerged (aaa52ce). De cross-repo contractgate van deze branch (d761774) tegen scrum4me-mcp main aaa52ce: 9/9 geslaagd (review-cases inclusief usagekolommen op de job). De vereiste minimale serviceversie staat nu expliciet in docs/dispatch-runtime-operator.md › Service contract. Uitrolvolgorde: eerst de service op aaa52ce, dan dit supervisor-image.

**Contract bewezen tegen gemergde service.** scrum4me-mcp#179 is gemerged (`aaa52ce`). De cross-repo contractgate van deze branch (`d761774`) tegen scrum4me-mcp main `aaa52ce`: **9/9 geslaagd** (review-cases inclusief usagekolommen op de job). De vereiste minimale serviceversie staat nu expliciet in `docs/dispatch-runtime-operator.md` › Service contract. Uitrolvolgorde: eerst de service op `aaa52ce`, dan dit supervisor-image.
docs(dispatch): minimale serviceversie voor het usage-veld (review #103)
Some checks failed
CI / Compose config (pull_request) Failing after 2s
CI / Build-arg coverage (pull_request) Successful in 4s
CI / Docker build (pull_request) Successful in 7s
d761774871
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
s4m-codex-reviewer left a comment

COMMENT

geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

  • WARNING — lib/dispatch-usage.ts:11: Ongeldige tokenwaarden worden stilzwijgend nul met status captured. Gereproduceerd met input_tokens: "1200" en output_tokens: -1: resultaat is captured met nulwaarden. Valideer aanwezige tellers, rapporteer parse_error bij ongeldige waarden en voeg malformed-input-tests toe. Niet blokkerend voor geldige provider-events.
  • INFO — tests/dispatch-contract.test.ts:554: De volledige testsuite en cross-repo contractgate zijn tijdens deze review niet bevestigd: de omgeving blokkeert executable/native-module loading onder /tmp (Permission denied / failed to map segment). De dispatch-typecheck slaagt; geïsoleerde parserchecks voor cached input en truncatie slagen.

De wijziging hergebruikt de bestaande transcriptreader, bewaart usage samen met het resultaat voor replay en bevat gerichte tests voor capture, replay, transport en truncatie. De vereiste serviceversie en uitrolvolgorde staan in de operatordocumentatie. Geen bewezen blokkerende finding; vanwege bovenstaande opmerking en verificatiebeperking geen goedkeuring.

# COMMENT geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. - **WARNING — lib/dispatch-usage.ts:11**: Ongeldige tokenwaarden worden stilzwijgend nul met status `captured`. Gereproduceerd met `input_tokens: "1200"` en `output_tokens: -1`: resultaat is `captured` met nulwaarden. Valideer aanwezige tellers, rapporteer `parse_error` bij ongeldige waarden en voeg malformed-input-tests toe. Niet blokkerend voor geldige provider-events. - **INFO — __tests__/dispatch-contract.test.ts:554**: De volledige testsuite en cross-repo contractgate zijn tijdens deze review niet bevestigd: de omgeving blokkeert executable/native-module loading onder `/tmp` (`Permission denied` / `failed to map segment`). De dispatch-typecheck slaagt; geïsoleerde parserchecks voor cached input en truncatie slagen. De wijziging hergebruikt de bestaande transcriptreader, bewaart usage samen met het resultaat voor replay en bevat gerichte tests voor capture, replay, transport en truncatie. De vereiste serviceversie en uitrolvolgorde staan in de operatordocumentatie. Geen bewezen blokkerende finding; vanwege bovenstaande opmerking en verificatiebeperking geen goedkeuring.
fix(dispatch): ongeldige usage-tellers geven parse_error (review #103)
All checks were successful
CI / Build-arg coverage (pull_request) Successful in 4s
CI / Compose config (pull_request) Successful in 9s
CI / Docker build (pull_request) Successful in 1m11s
7a6d9ae95e
Een aanwezige teller die geen niet-negatief getal is (string, negatief, object)
telde stil als 0 met status captured. Nu maakt hij de hele snapshot parse_error;
een ontbrekende of null-teller blijft 0. Tests voor Codex en Claude.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
s4m-codex-reviewer left a comment

REQUEST_CHANGES

geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

Findings

  • error (blokkerend) — lib/dispatch-supervisor.ts:227 (recovery-pad: lib/dispatch-supervisor.ts:287, transport: lib/dispatch-transport.ts:152): usage wordt met het resultaat gejournalled, maar gaat verloren wanneer een mislukte submit via een authority: 'none'-receipt wordt hersteld. recoverNonLaunchAttempt geeft alleen binding en resultaat door; het recovery-contract en transport hebben geen usage-parameter. Recovery kan daarna succesvol afsluiten en de transcript-output opruimen zonder de opgeslagen usage aan de service te leveren. Geef dezelfde j.usage ook via de recovery-route door, stem het servicecontract daarop af en voeg een regressietest via runManagedOnce met authority: 'none' toe. Een tijdelijke reviewtest reproduceert dit: usage staat op schijf, recovery eindigt succesvol, maar de submit mist het derde argument.

Verificatie

Beoordeeld op commit 7a6d9ae95efeafbd520cdd7b8ca7e0a5f6fe512a. De vier relevante testsuites slagen: 84 passed, 8 skipped; dispatch-typecheck slaagt. De cross-repo-servicegate is niet uitgevoerd. De volledige suite gaf 1072 passed, 20 failed en 8 skipped; de falende suites bevatten uitvoeringsproblemen door de reviewomgeving (/tmp is noexec), die hier niet als PR-regressie zijn aangemerkt. De operator-documentatie beschrijft de benodigde serviceversie en uitrolvolgorde.

# REQUEST_CHANGES geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. ## Findings - **error (blokkerend)** — `lib/dispatch-supervisor.ts:227` (recovery-pad: `lib/dispatch-supervisor.ts:287`, transport: `lib/dispatch-transport.ts:152`): usage wordt met het resultaat gejournalled, maar gaat verloren wanneer een mislukte submit via een `authority: 'none'`-receipt wordt hersteld. `recoverNonLaunchAttempt` geeft alleen binding en resultaat door; het recovery-contract en transport hebben geen usage-parameter. Recovery kan daarna succesvol afsluiten en de transcript-output opruimen zonder de opgeslagen usage aan de service te leveren. Geef dezelfde `j.usage` ook via de recovery-route door, stem het servicecontract daarop af en voeg een regressietest via `runManagedOnce` met `authority: 'none'` toe. Een tijdelijke reviewtest reproduceert dit: usage staat op schijf, recovery eindigt succesvol, maar de submit mist het derde argument. ## Verificatie Beoordeeld op commit `7a6d9ae95efeafbd520cdd7b8ca7e0a5f6fe512a`. De vier relevante testsuites slagen: **84 passed, 8 skipped**; dispatch-typecheck slaagt. De cross-repo-servicegate is niet uitgevoerd. De volledige suite gaf 1072 passed, 20 failed en 8 skipped; de falende suites bevatten uitvoeringsproblemen door de reviewomgeving (`/tmp` is `noexec`), die hier niet als PR-regressie zijn aangemerkt. De operator-documentatie beschrijft de benodigde serviceversie en uitrolvolgorde.
Author
Owner

Review #103 verwerkt. (1) Herstelpad: recoverNonLaunchAttempt stuurt de journalled usage mee; het transport zet usage op /attempts/recovery/result (alleen als aanwezig). Regressietest via runManagedOnce met authority:'none' + transporttest (beide eerst RED). De servicekant staat op main: scrum4me-mcp#180 (6b2a7a3). (2) Ongeldige tellers → parse_error (7a6d9ae). Contract: cross-repo gate van deze branch tegen scrum4me-mcp main 6b2a7a3: 9/9. Vitest 1092 geslaagd (2 bestaande macOS-falers in transcript-retention), tsc -p tsconfig.dispatch.json schoon. Minimale serviceversie in docs/dispatch-runtime-operator.md bijgewerkt naar 6b2a7a3.

**Review #103 verwerkt.** (1) Herstelpad: `recoverNonLaunchAttempt` stuurt de journalled usage mee; het transport zet `usage` op `/attempts/recovery/result` (alleen als aanwezig). Regressietest via `runManagedOnce` met `authority:'none'` + transporttest (beide eerst RED). De servicekant staat op main: scrum4me-mcp#180 (`6b2a7a3`). (2) Ongeldige tellers → `parse_error` (7a6d9ae). **Contract:** cross-repo gate van deze branch tegen scrum4me-mcp main `6b2a7a3`: **9/9**. Vitest 1092 geslaagd (2 bestaande macOS-falers in `transcript-retention`), `tsc -p tsconfig.dispatch.json` schoon. Minimale serviceversie in `docs/dispatch-runtime-operator.md` bijgewerkt naar `6b2a7a3`.
recoverNonLaunchAttempt gaf alleen binding en resultaat door; de journalled
usage ging verloren als een poging via authority:'none' werd hersteld. Nu
gaat j.usage mee met recovery.submitResult, en het transport stuurt het als
optioneel usage-veld naar /attempts/recovery/result (alleen als aanwezig).
Regressietest via runManagedOnce met authority:'none' en een transporttest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(dispatch): minimale serviceversie 6b2a7a3 (usage op beide routes)
All checks were successful
CI / Compose config (pull_request) Successful in 11s
CI / Build-arg coverage (pull_request) Successful in 9s
CI / Docker build (pull_request) Successful in 1m49s
aedd9b4f7f
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
s4m-codex-reviewer left a comment

COMMENT

geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

Findings

  • INFO — tests/dispatch-contract.test.ts:32 — De cross-repo contractgate kon hier niet worden uitgevoerd: de MCP-worktree en disposable Postgres zijn niet beschikbaar. De gedocumenteerde servicecompatibiliteit en opslag van usage zijn daardoor niet onafhankelijk bevestigd in deze review.

De diff behoudt usage in het journal en stuurt dezelfde snapshot mee bij gewone replay en non-launch recovery. De parser voorkomt dubbel tellen van Claude-events, splitst Codex cached input af en behandelt truncatie expliciet. De operator-documentatie beschrijft de vereiste serviceversie en uitrolvolgorde. Geen blokkerende codefinding vastgesteld.

Verificatie: PR-head gecontroleerd op aedd9b4f7f91a7af72d37d7055ba81bcc910522e; typecheck:dispatch slaagt na initialisatie van het gepinde shared-submodule; vier geïsoleerde parserchecks slagen. De volledige Vitest-suite kon niet starten door de noexec-beperking op /tmp (native binding kan niet geladen worden). Dit is een omgevingsbeperking, geen aangetoonde PR-regressie. Vanwege de resterende test-/contractonzekerheid geen APPROVED.

# COMMENT geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. ## Findings - **INFO — __tests__/dispatch-contract.test.ts:32** — De cross-repo contractgate kon hier niet worden uitgevoerd: de MCP-worktree en disposable Postgres zijn niet beschikbaar. De gedocumenteerde servicecompatibiliteit en opslag van usage zijn daardoor niet onafhankelijk bevestigd in deze review. De diff behoudt usage in het journal en stuurt dezelfde snapshot mee bij gewone replay en non-launch recovery. De parser voorkomt dubbel tellen van Claude-events, splitst Codex cached input af en behandelt truncatie expliciet. De operator-documentatie beschrijft de vereiste serviceversie en uitrolvolgorde. Geen blokkerende codefinding vastgesteld. **Verificatie:** PR-head gecontroleerd op `aedd9b4f7f91a7af72d37d7055ba81bcc910522e`; `typecheck:dispatch` slaagt na initialisatie van het gepinde shared-submodule; vier geïsoleerde parserchecks slagen. De volledige Vitest-suite kon niet starten door de noexec-beperking op `/tmp` (native binding kan niet geladen worden). Dit is een omgevingsbeperking, geen aangetoonde PR-regressie. Vanwege de resterende test-/contractonzekerheid geen APPROVED.
janpeter merged commit 3daad72559 into master 2026-10-03 17:28:10 +02:00
Sign in to join this conversation.
No reviewers
No labels
severity/s3
No milestone
No project
No assignees
2 participants
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/scrum4me-docker!103
No description provided.