Skip to content

fix(opencode): queue-deliver the session URL notice (#1459) - #1460

Merged
backnotprop merged 1 commit into
mainfrom
fix/oc2-notice-queue-delivery
Sep 2, 2026
Merged

backnotprop merged 1 commit into
mainfrom
fix/oc2-notice-queue-delivery

Conversation

@backnotprop

@backnotprop backnotprop commented Sep 2, 2026

Copy link
Copy Markdown
Owner

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.

@backnotprop
backnotprop merged commit 6ff8412 into main Sep 2, 2026
28 checks passed
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

OpenCode 2: "Plannotator session ready" synthetic notice wakes a model turn despite resume: false

1 participant