feat(dispatch): managed worker zonder vast product en met expliciete rebind (ISS-11) #188

Merged
janpeter merged 1 commit from fix/iss-11-bootstrap-nullable-rebind into main 2026-10-04 21:58:42 +02:00
Owner

T-168 (ST-054 / PBI-34, ISS-11): de managed-worker-bootstrap mag een worker aan alle producten binden en een bestaande worker expliciet herbinden. Dat is stap 1 om de dispatch-reviews voor alle actieve producten te laten werken. Plan: ProductDoc plans/iss-11-multi-product-dispatch-reviews.

Wijziging (src/dispatch/managed-worker-bootstrap.ts)

  • product_id: null: alle producten die het token mag claimen.
    • Gescopet token: claim wordt per scoped product vooraf geautoriseerd.
    • Ongescopet token: alleen tokenvalidatie (refreshActor).
    • Slotregistratie en claim autoriseren al per product, en claude_workers.product_id = NULL wordt daar al als "alle producten in scope" behandeld.
  • rebind: true: wijzigt alleen token_id/product_id van dezelfde owner, instance, runtime, tier en capabilities.
    • Zonder de flag blijft DISPATCH_BOOTSTRAP_BINDING_CONFLICT gelden.
    • Een andere owner, runtime, tier of capability-set wordt altijd geweigerd.
  • Pure helpers: de beslislogica zit in classifyBootstrapBinding en bootstrapClaimProducts.
  • Geen schemawijziging, geen nieuwe route.

Tests

  • Unit: __tests__/dispatch/managed-bootstrap.test.ts. Eerst rood (8 falend), daarna groen.
  • Integratie: managed-worker.integration.test.ts krijgt een rebind- en null-productscenario tegen een echte DB. Draait in de CI-dispatch-gate; lokaal niet uitgevoerd, want er is geen test-DB.
  • npm test: 251 bestanden en 2103 tests groen. npm run typecheck groen.

Docs: docs/dispatch-managed-bootstrap.md beschrijft de all-products-binding en de rebind, met de verwijzing naar de rotatieprocedure.

Geen deploy in deze PR; dat is T-169 na de merge.

🤖 Generated with Claude Code

T-168 (ST-054 / PBI-34, ISS-11): de managed-worker-bootstrap mag een worker aan alle producten binden en een bestaande worker expliciet herbinden. Dat is stap 1 om de dispatch-reviews voor alle actieve producten te laten werken. Plan: ProductDoc `plans/iss-11-multi-product-dispatch-reviews`. **Wijziging** (`src/dispatch/managed-worker-bootstrap.ts`) - **`product_id: null`:** alle producten die het token mag claimen. - Gescopet token: `claim` wordt per scoped product vooraf geautoriseerd. - Ongescopet token: alleen tokenvalidatie (`refreshActor`). - Slotregistratie en claim autoriseren al per product, en `claude_workers.product_id = NULL` wordt daar al als "alle producten in scope" behandeld. - **`rebind: true`:** wijzigt alleen `token_id`/`product_id` van dezelfde owner, instance, runtime, tier en capabilities. - Zonder de flag blijft `DISPATCH_BOOTSTRAP_BINDING_CONFLICT` gelden. - Een andere owner, runtime, tier of capability-set wordt altijd geweigerd. - **Pure helpers:** de beslislogica zit in `classifyBootstrapBinding` en `bootstrapClaimProducts`. - Geen schemawijziging, geen nieuwe route. **Tests** - Unit: `__tests__/dispatch/managed-bootstrap.test.ts`. Eerst rood (8 falend), daarna groen. - Integratie: `managed-worker.integration.test.ts` krijgt een rebind- en null-productscenario tegen een echte DB. Draait in de CI-dispatch-gate; lokaal niet uitgevoerd, want er is geen test-DB. - `npm test`: 251 bestanden en 2103 tests groen. `npm run typecheck` groen. **Docs:** `docs/dispatch-managed-bootstrap.md` beschrijft de all-products-binding en de rebind, met de verwijzing naar de rotatieprocedure. Geen deploy in deze PR; dat is T-169 na de merge. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(dispatch): managed worker zonder vast product en met expliciete rebind (ISS-11)
All checks were successful
CI / Final merge attestation and immutable publication (pull_request) Has been skipped
CI / PR candidate (never published) (pull_request) Successful in 5m24s
623a479141
De bootstrap accepteert product_id null (alle producten die het token
mag claimen; registratie en claim autoriseren per product) en een
expliciete rebind die alleen token_id/product_id van dezelfde owner,
instance, runtime, tier en capabilities wijzigt. Zonder rebind blijft
DISPATCH_BOOTSTRAP_BINDING_CONFLICT gelden. Geen schemawijziging.

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

COMMENT

Geen blokkerende codebevindingen; één niet-blokkerende testopmerking.

  • WARNING — __tests__/dispatch/managed-worker.integration.test.ts:118: het expliciet in T-168 gevraagde negatieve scenario ontbreekt: een scoped token zonder claimrecht op één van zijn scoped producten. Test een scope met meerdere producten, waarvan één wordt geweigerd, en controleer dat de bootstrap faalt en de bestaande workerbinding intact blijft. De huidige code autoriseert wel elk scoped product; de test bewijst alleen het succesvolle één-productpad.

plan gekoppeld via pr_refs — references: T-168, T-169, ST-054, PBI-34. Geen omitted onderdelen of afgekapte plandocumenten. De PR beschrijft expliciet stap 1/T-168; deploy, slot-/profielrotatie en eindacceptatie uit T-169–T-171 zijn vervolgwerk en geen blokkade voor deze PR.

De nullable productbinding, expliciete rebind, weigering van andere owner/runtime/tier/capabilities en behoud van slot-/profielautoriteit volgen het gekoppelde bootstrapcontract en de productdocumentatie. Geen schemawijziging; de bootstrapdocumentatie is bijgewerkt.

Verificatie op commit 623a47914178f276f7e4dbc917276152583223f7: bron- en test-typecheck geslaagd. De Forgejo PR-candidate-CI is succesvol. Lokale Vitest-uitvoering kon niet starten door de uitvoerbeperking op /tmp (native binding kon niet worden geladen); dispatch-integratie is lokaal niet uitgevoerd zonder testdatabase. npm run verify uit het plan bestaat niet in package.json; de daadwerkelijke gates zijn typecheck, typecheck:tests, tests en de dispatch-CI-gate.

# COMMENT Geen blokkerende codebevindingen; één niet-blokkerende testopmerking. - **WARNING** — `__tests__/dispatch/managed-worker.integration.test.ts:118`: het expliciet in T-168 gevraagde negatieve scenario ontbreekt: een scoped token zonder claimrecht op één van zijn scoped producten. Test een scope met meerdere producten, waarvan één wordt geweigerd, en controleer dat de bootstrap faalt en de bestaande workerbinding intact blijft. De huidige code autoriseert wel elk scoped product; de test bewijst alleen het succesvolle één-productpad. plan gekoppeld via pr_refs — references: T-168, T-169, ST-054, PBI-34. Geen omitted onderdelen of afgekapte plandocumenten. De PR beschrijft expliciet stap 1/T-168; deploy, slot-/profielrotatie en eindacceptatie uit T-169–T-171 zijn vervolgwerk en geen blokkade voor deze PR. De nullable productbinding, expliciete rebind, weigering van andere owner/runtime/tier/capabilities en behoud van slot-/profielautoriteit volgen het gekoppelde bootstrapcontract en de productdocumentatie. Geen schemawijziging; de bootstrapdocumentatie is bijgewerkt. Verificatie op commit `623a47914178f276f7e4dbc917276152583223f7`: bron- en test-typecheck geslaagd. De Forgejo PR-candidate-CI is succesvol. Lokale Vitest-uitvoering kon niet starten door de uitvoerbeperking op /tmp (native binding kon niet worden geladen); dispatch-integratie is lokaal niet uitgevoerd zonder testdatabase. `npm run verify` uit het plan bestaat niet in package.json; de daadwerkelijke gates zijn typecheck, typecheck:tests, tests en de dispatch-CI-gate.
Sign in to join this conversation.
No reviewers
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-mcp!188
No description provided.