fix(claim): tier-defer alleen naar peers die de job zelf kunnen claimen (tier-deadlock E2E) #66
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/tier-defer-claimability"
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?
Bug (gevonden tijdens M17 fase-5 E2E)
buildHigherTierIdleFragmentwas capability-blind: een worker met een tier defereerde naar élke idle hogere-tier-worker van dezelfde user — ook als die de job nooit kan claimen. Op prod: de dedicated deploy-worker (per abuisWORKER_CAPABILITY=LOW_Pgeërfd uit worker-idea.env) defereerde eeuwig naar twee idle HIGH_P-workers op max2 zonderdeploy-capability → de eerste "Deploy nu"-job bleef onclaimd QUEUED. Diagnose: s4m-taak3bbb4d32(dry-run met/zonder tier-fragment bewees het predicaat).De directe unblock op de server was config (
WORKER_CAPABILITYverwijderd uitworker-deploy.env); dit is de structurele fix zodat geen enkele toekomstige dedicated capability-worker hierop kan deadlocken.Fix
Claimability-guard ín het
NOT EXISTS: een hogere-tier idle peer telt alleen mee als hij de kandidaat-job (cj) zelf zou kunnen claimen. De twee takken spiegelen de claim-paden uitbuildClaimableJobWhereFragmentexact:[deploy]→ telt alleen voorDEPLOY-jobs (deployOnly-pad) — dekt ook de spiegel-deadlock (deploy-peer die NULL-jobs zou reserveren);required_capability IS NULL OR = ANY(w.capabilities)(lege caps ⇒ alleen NULL-jobs).Geen nieuwe bound values;
Prisma.empty-bypass voor tier-loze workers ongewijzigd.Verificatie
npx tsc --noEmitschoon; 908/908 tests groen (6 nieuwe regressietests).OR CASE/AND NOT CASE-connector,>→>=tier-strictness).[deploy,review]blokkeert een deploy-job WEL (die kan hem via het generieke pad echt claimen).Bekende restklasse (gedocumenteerd, niet gefixt)
Product-gescoped pollende peers: de guard kan per-call
product_idniet spiegelen (wordt niet gepersisteerd inclaude_workers). Dedicated workers horen unscoped te pollen — staat nu in de docstring.Na merge
Zelfde rollout als #64: mcp-stable pull + runner-image rebake + recreate workers.
🤖 Generated with Claude Code