Repository navigation
Conversation
The spawned scan inherited the view's shell markers and session id, so after pullboard takeover every scan bound the main checkout under the old session and was refused NOT_YOUR_CHECKOUT, recording no health. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Ben Silverstein <ben@clearmethodstudio.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Ben Silverstein <ben@clearmethodstudio.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Ben Silverstein <ben@clearmethodstudio.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #17.
Problem
pullboard viewrunspullboard sentinel run --health-only --jsonin each project root every ten minutes (src/serve-sentinel.js). The child inherited the view process's environment, including the agent shell markers and session id of whichever agent shell started the view.After a later session of the same agent ran
pullboard takeoveron the main checkout, the binding digest changed. Every scheduled scan then computed the old session's digest,bindLocalSessionrefused it withNOT_YOUR_CHECKOUT, and the scheduler swallowed the error and retried forever. On one board this produced 35 refusals in under a day, no health findings were ever recorded, andpullboard healthdrafted a board item blaming builders for the blocks.Fix
agent-session.jsexportsCALLER_SESSION_NAMESandwithoutCallerSession(env): the shell markers, session ids and checkout lease token a child must not inherit. The tour already stripped the same set for scripted seats (#952); it now imports the shared definition.serve-sentinel.jsspawns the health scan and the canary withwithoutCallerSession(process.env), so the child runs as the view with no session digest and never binds the checkout.refreshBoardtakes an injectablestartso the spawn environment can be tested.Proof
New test in
test/health-sentinel.test.js: binds the fixture's main checkout to a later session, runs the scan under the launcher's session (control: refusedNOT_YOUR_CHECKOUT), then checks the environmentrefreshBoardhands to spawn carries none of the caller's session and that the scan then runs and records health without rebinding the checkout. It fails on the parent commit and passes here.🤖 Generated with Claude Code