Nod: keep answering after the goal is met - #615
Merged
Merged
Conversation
- Runtime: once the goal holds, later turns are follow-up chat. They are never re-checked against the goal or sent back to it, which made Nod answer a follow-up and then repeat the original task. - Daemon: resumeSession also starts an unresolved chat-surface loop's session when none is running. A Nod pane has no terminal whose attach would start one, so a main Nod loop opened in the app never ran. - App: opening a Nod pane asks for its session; a command that finds no runtime (a finished loop's session ended to free the machine) asks for it, shows Starting Nod, and is retried for up to 30 seconds instead of failing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: scgopi <scgopireddy@gmail.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.
After a Nod goal loop met its goal, follow-up messages were hijacked or stuck in Queued.
resumeSessionalso starts an unresolved chat-surface loop's session when none is running (no-op while alive). App: opening a Nod pane sends itRepro before the fix, on a live Copilot goal loop: follow-up at seq 33 answered, then goal check (seq 65) not met → goal-check turn → "Hi!", and again after GraphCode's skill ask.
Evidence
RED: bun test runtime.test.ts "once the goal holds…" on origin/main -> fails, turns are [goal, follow-up, continuation] and a second goalCheck runs
GREEN: bun test -> 130 pass, 0 fail; tsc -> exit 0; xcodebuild test -only-testing NodGraphStoreTests + NodChatFeatureTests + ResolvedSessionTests -> 30 passed; NodWorkspaceWiringTests -> 3 passed
REGRESSION: full xcodebuild test -> 2222 tests, only MessageDeliveryTests.aSessionWhoseTaskEndedIsNeverTypedInto fails, identically on main on this Mac; cli and daemon builds exit 0; make check 0 errors; swift-portable exit 0