feat(queue): fase 3 — zelfherstellende claim-lease (refresh + stale-sweep) #100
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/queue-fase3-hardening"
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?
Fase 3 van de s4m-queue: de claim-lease wordt zelfherstellend.
Stapelt op #98. Deze branch is afgetakt van
feat/queue-tools-push, dus tot #98 gemerged is toont de diff ook die tien fase-2-commits. Merge #98 eerst; daarna krimpt deze PR vanzelf tot de vijf commits hieronder.cceff1elease-refresh.ts— 10 s-tick dieclaimed_atververst op strikte gelijkheid, entry snoeit bijcount === 0, behoudt bij DB-foutb095309sweep.ts— idempotente sweep op 8–10 min,FOR UPDATE SKIP LOCKED,mcp:-claims na 5 min en CLI-claims na 4 h, NotifyEnvelope in dezelfde transactie561313dhttp.tsonaangeroerd23c661cf2d6560Waarom dit nodig is. Fase 2 gaf claims een token, maar niets gaf ze ooit weer vrij. Sterft een MCP-proces na
queue_next, dan blijft dat bericht eeuwigclaimed. De sweep herstelt dat, en de refresh zorgt dat een nog levend proces zijn werk niet afgepakt krijgt.Twee bewuste afwijkingen van het plan.
De plan-stap voor
shutdown.tsschreef "vervang het hele bestand" door een versie dievoidretourneert en alleen SIGTERM/SIGINT afhandelt. Het echte bestand retourneert{ shutdown }— waarindex.tstransport.oncloseaan hangt — en registreert stdinend/close, met een comment dat uitlegt dat dat het enige afsluitsignaal is waar een gespawnde stdio-MCP op kan rekenen. Letterlijk toepassen had de wees-processen teruggebracht. De wijziging is daarom puur additief: 14 regels erbij, nul eraf. Een test pint nu vast datshutdowneen aanroepbaar object blijft, zodat die plan-versie voortaan niet meer stil doorkomt.Beide timers krijgen
timer.unref?.(), dat het plan niet had, naar het precedent inpresence/heartbeat.ts. Gemeten met een echte procesrun tegenscrum4me_test: mét unref eindigt het proces vanzelf (exit 0), zonder unref hangt het tot het gekild wordt. Dat verschil is de faalmodus waar deze repo eerder door geraakt is.Verificatie.
npm test→ 1335 passed, 20 skipped. Typecheck schoon. Integratie: 9 groen (fase 3) plus 17 groen (fase 2, regressie) tegenscrum4me_test; zonderTEST_DATABASE_URLskippen ze, dus CI blijft groen.Elke module is mutatiegetest. Twee integratietests uit het plan bleken minder te bewijzen dan ze beweerden — de concurrency-test was net zo groen zónder
SKIP LOCKED, en de incarnatie-test draaide een lus die nul keer liep — en zijn versterkt tot ze de mutatie wél doden.🤖 Generated with Claude Code