feat(runner): terminal-failure handling + early owner-guarded lease (PBI-19 / ST-025) #53
No reviewers
Labels
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
janpeter/scrum4me-docker!53
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/on-demand-runner-terminal"
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?
Wat
Runner-helft van de on-demand repo-clone fallback (PBI-19). Volgt op scrum4me-mcp PR #78 (merged) waaruit deze code
markJobTerminallyFailed/TerminalJobError/OwnershipLostErrorimporteert.bin/run-one-job.tsrollbackClaim→ QUEUED → oneindige loop): eenTerminalJobErroruitgetFullJobContextofattachWorktreeToJob→markJobTerminallyFailed(job FAILED + SprintRun FAILED, geen rollback).OwnershipLostError→ abort zonder rollback. Kaal null/overig → rollback zoals voorheen.{jobId,instanceId,tokenId}doorgegeven aangetFullJobContext+attachWorktreeToJob.status IN ('CLAIMED','RUNNING') AND worker_instance_id AND claimed_by_token_id; self-terminating (0 rows na rollback/FAILED) +unref().Verificatie
node --experimental-strip-types --checkgroen. Deze repo heeft géén lokaletsc(tsx-runtime); volledige typecheck/build + E2E gebeurt via de container-image (ST-025 T-85) na merge.Lockstep-rollout (ST-025 T-86, ná merge)
Image-rebuild met
MCP_GIT_REF=merged-mcp-main + fleet-recreate op scrum4me-server én max2. Pas dan is de on-demand fallback live; de directeGH_PRECLONE_REPOS-fix voor scrum4me-workers (2026-07-08) mag blijven staan tot on-demand bewezen is.run-one-job.ts: - getFullJobContext/attachWorktreeToJob krijgen ownerCtx {jobId,instanceId,tokenId}. - TerminalJobError → markJobTerminallyFailed (job FAILED + SprintRun FAILED, GEEN rollbackClaim) → einde requeue-loop; OwnershipLostError → abort zonder rollback; kaal null/overig → rollback zoals voorheen. - Lease-renewal-heartbeat start nu vlak ná de claim (i.p.v. pas vóór spawn) en is owner-guarded (status/worker_instance_id/claimed_by_token_id); dekt de trage on-demand clone in getFullJobContext + attach. Self-terminating (0 rows na rollback/FAILED) + unref() → veilig op elke bail-return. Verificatie: node --strip-types --check groen; volledige typecheck/build = container (T-85, geen lokale tsc in deze repo). Hangt op scrum4me-mcp PR #78 (merged). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>Verdict: REQUEST_CHANGES
geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.
Findings
bin/run-one-job.ts:36/bin/run-one-job.ts:41: de PR importeertmarkJobTerminallyFaileduitwait-for-job.jsenTerminalJobError/OwnershipLostErroruit/opt/scrum4me-mcp/src/git/on-demand-clone.js, maar de diff bevat geen wijziging die de gebruiktescrum4me-mcpversie/pin mee optilt. In de beschikbare MCP-bron bestaaton-demand-cloneniet en accepterengetFullJobContext/attachWorktreeToJobnog niet de nieuweownerCtxparameter. Daarmee kan de runner bij module-load of TypeScript-resolutie breken voordat hij een job kan claimen. Voeg de bijbehorende MCP-update/pin/build-arg wijziging toe of houd deze runnerwijziging compatibel met de huidige MCP API.bin/run-one-job.ts:321: de nieuwe owner-guarded heartbeat is kritisch queue/lease-gedrag, maar de PR voegt geen test of verificatie toe voor de 0-row ownership-lost branch, terminale clone-fouten of de vroege heartbeat vóórgetFullJobContext. Gezien de actieve runner-docs split-brain expliciet als veiligheidsrisico benoemen, mist hier minimaal een gerichte runner/MCP-integratietest of reproduceerbare verify-notitie.Review-log
Actieve productdocs gebruikt:
architecture/overview,runbooks/agent-guidance. De multi-worker design-doc is gevonden als draft en alleen als context gebruikt.