The proposal is a fenced dsh-action JSON object at the end of the final
answer instead of a suggest_action tool call. The projection reads the
last valid block of an assistant message, keeps one card per turn, and
marks a proposal written while queuedMessageLimit user messages are
queued as suppressed; the chat hides dsh- fences from rendered answers.
The Web replay fixture, tool catalog and READMEs follow the toolless
mechanism.
Both personalized page packages ship locale/ja.json beside en and zh, and
the browser package exposes its locale files like its siblings. The plugin
manager e2e expects the More list in the order the page declares. Refresh
the Web replay golden after the master merge.
A newer proposal in the same conversation replaces an unstarted card; the
next user message no longer expires it, so one unstarted card exists per
conversation (projection state version 7, phase replaced).
queuedMessageLimit (default 2) refuses a card while the user has that many
messages queued for later turns.
The card shows supplied initialContent as folded data below the plan.
The personalized-pages skill is rewritten around the chosen scenarios with
a shorter catalog entry that loads before any file reading. Paired sampling,
five runs per input on the same build: 63/90 to 81/90 cards on the
regression set with zero false cards; the log-tab inputs went from one to
four of five to five of five with two tool calls each.
Regenerated the config, cordis and plugin package catalogs, re-recorded
README pairing, and refreshed the Web replay golden.
Follow the tool executor refactor: the tool/ptc-dispatch event type now comes
from dsh-tool-executor-ptc, and the tests invoke tools through dsh-tool-testkit.
Regenerate the doc graphs, tool catalog and persistence schema after the merge
and re-record their translation pairing.
Anchor the desktop-locale overflow probe to the locale selector's nearest horizontal scroll container instead of nav's next sibling. Master moved the settings header between nav and options, so the old positional target put the probe in a fixed header row and the negative control could not overflow.
Both revocation cases restated the same grant and revoke helpers; one module-level pair keeps the two
cases reading the same install and disposal order.