fix(opencode): queue-deliver the session URL notice (#1459) - #1460
Merged
Merged
Conversation
1 task
2 tasks
backnotprop
added a commit
that referenced
this pull request
Sep 12, 2026
… OpenCode 2 (#1515) (#1518) On OpenCode 2 a plugin message is a pending inbox row; resume: false only declines the immediate wake. SessionInbox.promote publishes pending steers as a batch but queued rows one at a time, oldest first, so the queued notice #1460 introduced was promoted alone by the feedback's own wake and became its own model turn with the reviewer's annotations behind it. The notice now rides steer delivery, and feedback that follows an admitted notice rides steer too, so both enter one promotion and the agent acts on the annotations. A rejected notice, OpenCode 1, and hosts without session.synthetic keep the queue delivery unchanged.
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.
Mitigation for #1459. Closes #1459. On OpenCode 2 beta-18866 the transcript notice "Plannotator session ready: " starts a model turn while the reviewer is still annotating, despite resume: false, and queued feedback then lands behind that spurious turn.
Triage attribution: the plugin passes resume: false on exactly the path the reporter hit (createSessionUrlNotifier in v2-client.ts, the only producer of that notice text), and the pinned test drives that chain, so this is not an injection regression. Against upstream origin/v2 as of 2026-08-30 the resume guard behaves; the beta build postdates our checkout. The mechanism that makes the beta wake harmful on our side: resume: false only defers the immediate wake, and the notice previously rode the host default delivery, which resolves to steer. A pending steer row is promoted first by any later wake, so a spurious idle wake turns the notice into its own model turn.
The fix passes an explicit delivery: "queue" on the notice synthetic, mirroring what feedback already does (FEEDBACK_DELIVERY). Queue rows never ride steer-scoped promotion, so the notice renders in the transcript and waits for a genuinely user-initiated turn. No behavior change on hosts where the guard works.
Both pinned wake tests now assert resume: false and delivery: "queue" together. Plugin suite: 53 pass.
Caveat recorded in the triage: this does not defend against a hypothetical input-scoped spurious wake; if the reporter still reproduces, the remaining fix is upstream, and an upstream report is warranted either way since upstream's own resume: false synthetics would burn a turn under the same beta conditions.