* feat(web-shell): gate session workflow behind experimental setting
* feat(web-shell): bind plan approval to todo revision
* fix(cli): clear stale workflow revision on plan entry
* test(web-shell): pin revised workflow snapshot
* fix(cli): clear stale plan revisions on restore
* fix(cli): keep replayed history from rebinding plan revisions
History replay re-sends stale plan updates through Session.sendUpdate,
re-stamping activeTodoPlanRevision from finished plan cycles. Clear the
revision after every replay path (cold replayHistory and live non-bulk
loadSession) so a replayed snapshot can never bind a later exit_plan_mode
approval; reloaded sessions fall back to text-only approval until the next
live todo_write re-establishes the binding. Also drop the bulk-load restore
that could never be read before a plan-mode transition cleared it, and pin
the workflow gates and mode-entry clears with negative tests.
* test(web-shell): pin older plan revision in ChatPane approval test (#8393)
* test(cli): pin unbindable plan updates in approval revision test (#8393)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
* fix(cli): clear Todo plan revision on history restore (#8393)
restoreHistory was the one history-resetting path that kept
activeTodoPlanRevision, so a restored snapshot could let a stale
revision bind the next exit_plan_mode approval. Clear it like the
sibling reset paths, pin the behavior with a test, and pin the
live-load clear ordering after the replayed updates.
* fix(cli): restore Todo stop guard clear on plan re-select (#8393)
The previous-mode guard added for the revision binding also skipped the
Todo Stop Guard trust clear on a redundant plan re-select; scope the
guard to the revision reset so every transition into plan clears the
stop guard as before. The replay-time revision clears now run in
finally blocks so a transport failure part-way through a replay cannot
leave a replayed binding on the live session, and the web-shell
exit-plan approval rule is unified in one predicate. Revision tests
assert through the observable qwenTodoApproval approval metadata
instead of the private field.
---------
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Co-authored-by: qwen-code-dev-bot <qwen-code-dev@service.alibaba.com>