qwen-code/docs/plans
BaboBen d3164572f3
feat(channels): add Feishu ask-user question cards (#8578)
* feat(channels): add Feishu ask-user question cards

* fix(channels): harden Feishu question-card handoff and feedback paths

* fix(channels): anchor Feishu card-creation timeout at creation start (#8578)

* fix(channels): skip settled question-card delivery, retry input-request finalization

- present() returns early when the request settled before listener
  registration (stop/cancel landing in the pre-presentation await):
  the card is no longer delivered just to be patched terminal, which
  left a spurious actionable-looking card when the patch failed.
- endOutputCardBeforeInputRequest now retries the final patch with
  stripTables before deleting the card and re-sending plain text,
  mirroring onResponseComplete and the throttled update path.
- truncateCardText budgets the 4-char fence prepend so rebalanced
  content stays within MAX_CARD_CHARS, matching onResponseComplete.

* test(channels): cover Feishu question-card review findings

- stop real network leaks: mock addReaction/removeReaction in the two
  handoff tests that drove onPromptStart with the real implementation
  (each run hit Feishu's tenant-token endpoint).
- assert the OnIt reaction add/remove lifecycle positively.
- pin settled-before-registration presentation to zero card delivery.
- regression tests: input-request table-stripped retry, finalizing
  race (throttled timer cleared before the final patch), late card
  deletion when the input request lands mid-creation, abandoned
  creation-timer guard.
- routing coverage for toast-only handled callbacks (no execute).
- parse rejections: empty/malformed multi-select values; cancel-side
  name<->operation_id mismatch; visible submit/cancel button labels;
  cancelRun terminal label; submitted answers in patch-failure
  fallback; truncation tail-keeping and fence-rebalance cap.
- harden subset toMatchObject assertions to strict toEqual.

* fix(channels): type Feishu card-delivery errors; cover controller wiring seam

sendInteractiveCard now throws FeishuCardDeliveryError (with the HTTP
status when available) so createStreamingCard classifies delivery
failures by error type instead of string-matching three message
literals that could drift under rewording.

Add an adapter test that keeps the real FeishuQuestionCardController
with fetch mocked, asserting the POSTed body carries the question-card
JSON (form name, question text, request id) — the constructor wiring
seam every routing test previously mocked away.

* fix(channels): cap Feishu input-request card retry; harden question-card tests

* fix(channels): drain in-flight Feishu card PATCHes before final patch (#8578)

Also carry a concurrently-written terminal status into the released
card entry, report card-delivery failures from a typed error detail
instead of slicing the message, and document the silent
empty-completed-turn tradeoff. Adds round-5 review test pins: wiring
seams (sendFallback, patchCard, timeoutMs), spy hygiene, claim-time
card content, fallback suppression, expiry-timer survival, and
non-vacuous release-time timestamp anchoring.

* fix(channels): coordinate Feishu card stop races and throttle bursts (#8578)

- endOutputCardBeforeInputRequest now defers to Stop (entry guard plus
  post-await re-checks mirroring onResponseComplete) and releaseOutputCard
  carries settled stop state, so a stopped run is never labelled 已完成 nor
  followed by a contradictory terminal message
- coalesce throttled card updates queued behind a stalled PATCH into one
  trailing run instead of a burst
- log every FeishuCardDeliveryError from createStreamingCard
- consolidate onResponseComplete truncation through truncateCardText
- question controller: a not-accepted in-flight response no longer flips a
  projected 已取消 card to 已过期, and a cancel claim no longer re-patches
  the terminal card already delivered in the callback response
- test hygiene: hermetic fetch mocks for token-failure tests, restored
  fetch spies, required lifecycle fixture fields, bracket index access

* test(web-shell): wait for history search focus before Escape in smoke (#8578)

* fix(channels): resolve Feishu card finalization races from review (#8578)

* fix(channels): recover Feishu cancel callbacks missing button value (#8578)

---------

Co-authored-by: Shaojin Wen <shaojin.wensj@alibaba-inc.com>
Co-authored-by: qwen-code-dev-bot <qwen-code-dev@service.alibaba.com>
Co-authored-by: qwen-code-ci-bot <qwen-code-ci@service.alibaba.com>
Co-authored-by: qwen-code-dev-bot <qwen-code-dev-bot@users.noreply.github.com>
2026-08-08 04:20:17 +00:00
..
2025-06-03-stats-dashboard-redesign.md docs: consolidate design docs and plans under docs/ (#6417) 2026-07-07 06:05:05 +00:00
2026-03-22-agent-tool-display-design.md feat(vscode-ide-companion): add agent execution tool display (#2590) 2026-04-18 23:39:26 +08:00
2026-05-14-auto-compaction-threshold-redesign.md feat(core)!: redesign auto-compaction thresholds with three-tier ladder (#4345) 2026-05-25 21:11:08 +08:00
2026-05-15-worktree-phase-c.md docs: consolidate design docs and plans under docs/ (#6417) 2026-07-07 06:05:05 +00:00
2026-05-18-qwen-runtime-memory-investigation.md fix(core): replace structuredClone with shallow copy to prevent OOM in long sessions (#4286) 2026-05-21 10:28:59 +08:00
2026-05-26-daemon-logger.md docs: consolidate design docs and plans under docs/ (#6417) 2026-07-07 06:05:05 +00:00
2026-05-27-daemon-workspace-service.md docs: consolidate design docs and plans under docs/ (#6417) 2026-07-07 06:05:05 +00:00
2026-05-28-computer-use-built-in.md docs: consolidate design docs and plans under docs/ (#6417) 2026-07-07 06:05:05 +00:00
2026-06-30-channel-loop.md docs: consolidate design docs and plans under docs/ (#6417) 2026-07-07 06:05:05 +00:00
2026-07-01-channel-lifecycle-status-adapters.md docs: consolidate design docs and plans under docs/ (#6417) 2026-07-07 06:05:05 +00:00
2026-07-01-channel-lifecycle-status-umbrella.md docs: consolidate design docs and plans under docs/ (#6417) 2026-07-07 06:05:05 +00:00
2026-07-01-channel-p0-identity-task-lifecycle.md docs: consolidate design docs and plans under docs/ (#6417) 2026-07-07 06:05:05 +00:00
2026-07-01-extension-runtime-refresh-implementation.md refactor(core): centralize extension runtime refresh (#6152) 2026-07-05 07:47:48 +00:00
2026-07-10-pr-6635-remaining-comments.md feat(cli): group daemon channel workers by workspace (phase 4b) (#6635) 2026-07-11 13:08:02 +00:00
2026-07-10-pr-6635-review-followups.md feat(cli): group daemon channel workers by workspace (phase 4b) (#6635) 2026-07-11 13:08:02 +00:00
2026-07-10-workspace-qualified-acp-hardening.md feat(cli): workspace-qualified ACP transport (daemon multi-workspace phase 4) (#6621) 2026-07-11 00:24:01 +00:00
2026-07-11-chrome-extension-alpha-diagnostics.md feat(browser-ext): add alpha readiness diagnostics (#6739) 2026-08-04 03:23:47 +00:00
2026-07-11-managed-memory-microcompaction.md fix(core): preserve managed memory during microcompaction (#6714) 2026-07-11 15:58:54 +00:00
2026-07-14-dingtalk-webhook-direct-message.md feat(channels): support DingTalk webhook delivery to direct messages (#6891) 2026-07-15 03:07:30 +00:00
2026-07-16-default-background-subagents.md feat(core): improve subagent delegation defaults and guardrails (#7048) 2026-07-18 08:52:48 +00:00
2026-07-16-webshell-git-integration.md feat(web-shell): git status chip, visual working-tree diff, and sidebar git status (#7054) 2026-07-18 10:06:07 +00:00
2026-07-17-observed-channel-delivery-targets.md feat(channels): expose workspace-scoped observed contacts (#7109) 2026-07-18 07:35:45 +00:00
2026-07-18-observed-channel-group-names.md feat(channels): observe group names from inbound messages (#7155) 2026-07-18 09:26:12 +00:00
2026-07-21-channel-delivery-review-fixes.md feat(daemon): add explicit channel delivery (#7388) 2026-07-23 17:44:23 +00:00
2026-07-22-channel-delivery-final-only.md feat(daemon): add explicit channel delivery (#7388) 2026-07-23 17:44:23 +00:00
2026-07-23-session-workflow-approval.md feat: visualize ordinary-session plan execution (#7580) 2026-08-01 10:48:30 +00:00
2026-07-24-webshell-git-status-fast-path.md perf(web-shell): paint the composer git chip before git status completes (#7680) 2026-07-25 07:05:52 +00:00
2026-07-31-daemon-memory-budget-pr1.md feat(serve): resolve and report the daemon memory budget (#8245) 2026-08-02 04:19:31 +00:00
2026-08-05-feishu-ask-user-question-cards.md feat(channels): add Feishu ask-user question cards (#8578) 2026-08-08 04:20:17 +00:00
extension-management-v2.md feat(serve): add extension management v2 (#6825) 2026-07-14 03:30:47 +00:00
feishu-observed-contact-label-enrichment.md feat(feishu): enrich observed contact labels (#8569) 2026-08-07 16:41:37 +00:00
final-tool-response-budget-implementation.md fix(core): Enforce final tool response budgets (#7323) 2026-07-21 16:09:46 +00:00
memory-diagnostics-reference-design.md feat(cli): add structured memory diagnostics JSON (#3785) 2026-05-17 19:52:46 +08:00