Auto review requests omitted sessionId, so pi-ai never added the
x-opencode-session header that OpenCode routes require, and every
reviewed tool call failed with 400 MissingSessionID before its body ran.
Review requests now carry the reviewed Session's id and the new
GenerateOptions purpose 'auto-review'. The DeepSeek Session-log upload
skips that purpose, so a review neither uploads the log nor appends an
acceptance record to the Session.
Refs #7150
Replace the literal "Approval policy: ask." runtime-context sentence
with a statement parallel to the never-policy sentence, and refresh the
current-generation fixtures that persist it.
Co-authored-by: Tianyi Cui <[email protected]>
Add the Japanese quote action dictionary and register it with the existing Chinese and English dictionaries. The package entered master alongside the Japanese locale lane without a Japanese entry.
Integrate exact origin/master b9bdd062c8ffd3dc234ebea7f5dff55ff26d87ad. Preserve the Session Markdown copy lifecycle and dictionary while adopting the Japanese locale, regenerate the client slot catalog, and add the Japanese quote-removal string required by the merged locale type.
Describe async generator yields, key-conflict reads, and macrotask timing as implemented, restore the API controller and mods bridge sentence in the upgrade guide, record the rejected plugin-disposal alternative, and pin the async generator behavior with a test.
A legacy plugin may store the registration result as a disposer or ignore it,
so a failed registration became an unhandled rejection that ends a dsh process.
The registry now attaches its own handler: once the current turn ends, a
rejection nobody observed through then/catch/finally is logged through the
calling plugin's logger while the plugin stays active, and one whose owner is
no longer loading or active is dropped. Observed rejections are unchanged.
- register() returns the registration's effect disposer with then/catch/finally
attached; the original body moves unchanged into a private acquire(), keeping
synchronous installation and the asynchronous handle handoff.
- Legacy stateOf(session, key) logs one ctx.logger.warn per key per registry;
registration and calls to its result no longer warn.
- Containing an ignored legacy registration failure is deferred and recorded
under Known Limitations.
Move the session projection handles guide from the released v0.2.1-alpha.3
directory to the current v0.2.1-rc.2 directory and fold in the callable
registration and deprecated keyed-read notes, replacing the separate
session-projection-registration guide.
- validation.spec.ts now accepts the four-digit-year bounds and refuses
each non-canonical spelling (year zero, 2026-02-30, a four-digit
fraction, a numeric offset, surrounding whitespace) with the released
error message, so the accepted set is guarded by a committed gate
rather than by a review-time measurement
- the Agent Note cites that test instead of describing a differential
- session-format-v0-to-v1 declares dsh-util-time only in dependencies,
matching dsh-util-values and the sibling migrations
- util/time lists the migration among its consumers
- session-format-v0-to-v1 reads the shared canonical-instant profile
through fourDigitYearEpoch instead of its own regular expression and
round trip, with the accepted set pinned by a differential against the
pre-change predicate (3,508 inputs, 0 divergences)
- localUtcOffsetSeconds holds the seconds-east conversion two clients had
each written, so the offset a client reports has one home
- the Agent Note records the three sites that stay, and why each is not a
copy of this vocabulary