Repository navigation
Conversation
…ner exits T419 moved retention from command-line and environment markers to recorded process identities. The lifecycle fixture's owner started a CIM identity query for its dispatched process and exited at 400 ms, before a hosted Windows runner's query returned, so nothing was on record and the work was stopped. A real dispatch waits for its supervisor's receipt, which carries the identity; the fixture now does the same. A Linux row emulates the slow query. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: 9f7118f5-3765-4632-a9df-670de23a2381) |
There was a problem hiding this comment.
This is an auto review done by revuto.
Revuto completed the review and found no evidence-backed concerns.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: 0634719a-24e1-4223-9c8b-db7d8d35b089) |
There was a problem hiding this comment.
This is an auto review done by revuto.
Revuto completed the review and found no evidence-backed concerns.
|
Review (Tower Crane, clean context) Blocking count: 0. Acceptance
Root cause and fix
Blocking findingsNone Follow-ups
|
What changed
test/fixtures/containment-lifecycle.js: the fixture's owner (agentrole) now exits only after it records the dispatched process's identity inidentities.json. Before, it exited at 400 ms whether or not the record was there. Theordinarystray starts at that point, so its calibrated stop margin stays the same.TC_IDENTITY_DELAY_MSdelays the identity query, standing in for a slow CIM query on platforms where the identity is a fast/procread.test/containment-lifecycle.test.js: new rowretained supervisor: zero exit, slow-identity owner, none late limit, which sets a 600 ms delay so the owner on Linux outlives its 400 ms exit timer, as it does on Windows.No product code changes.
Why
Main push CI at 9a718f6 failed every recorded-owner row of the retained lifecycle group on Windows (shard 2/4). T419 replaced T437's command-line and environment markers with recorded process identities (
managed(rows, identities)inlib/containment.js). On Windows,C.processIdentity()is a PowerShell CIM snapshot that takes a second or more on a hosted runner. The fixture's owner exited at 400 ms, before that query returned. So when containment's final snapshot readretained(), there was nothing on record, and the managed work was stopped like any stray. The unrecorded rows, which expect nothing to survive, passed. That is the pattern in the failed log.The product does not have this race. The supervisor computes its own identity before it launches anything (
lib/spawn-monitor.js:555) and writes it into the startup receipt (lib/spawn-monitor.js:1006,detail()spreadsmonitor). The dispatch CLI loops until that receipt exists (lib/spawn.js:1214) and commits it in the spawn event (lib/spawn.js:1260,...observed), whichrecorded()inlib/containment.jsreads. So the harness that rantower-crane spawncannot get control back before the identity is on record. The fixture now models the same contract. T419's Windows stop order (cycle-safe BFS, no tree kill while work is spared) is unchanged.Same-repo PRs run only shared checks, so this group never ran on Windows before T419 merged.
Verification
Windows: dispatch runs 39513148646, 39513151860 and 39513154962 at bbed5d5, shard 2/4: all 12 retained lifecycle rows pass in each of the three runs.
Reproduction on Linux: with the old fixture and a 1000 ms delay injected before
processIdentity, the same 7 rows fail as on Windows CI (caller,nonzero/agent,signal/agent,wait/agent,gate/agent,tasks late,memory late). The 4 expected-not-survive rows pass.The new
slow-identityrow fails 3 of 3 runs against the old fixture and passes with the fix.npm test -- test/containment-lifecycle.test.js: 3 consecutive runs, each 21 pass, 1 skipped (the POSIX-only TERM row), 0 fail.npm test -- test/signal-waits.test.js: pass.npm run check:shared -- --base origin/main: pass.Pending
Pre-submit review
🤖 Generated with Claude Code