08f32a6335
Migrates 8 of 12 native dialog call sites in the kanban dashboard plugin to the SDK's ConfirmDialog primitive (added in PR #50550): - moveTask, moveSelected, applyBulk, deleteTask, deleteSelected, archiveBoard, removeAttachment, doPatch The 4 remaining carve-outs (window.prompt for completion summary, window.alert for missing summary, cli_hint clipboard fallback) are documented inline — the host's ConfirmDialog hardcodes onClick → unmount, preventing the keep-open-across-validation behavior the completion-summary form needs. Followup: upstream a `disabled` prop to ConfirmDialog and rebuild the completion body using host Dialog components. New architecture: - useKanbanDialogs(t) — Promise-based dialog state machine at KanbanPage scope. request({kind, ...}) returns {confirmed, summary?}. - KanbanDialog component — renders ConfirmDialog from SDK for kind=confirm. - performMoveTask(taskId, newStatus, count, summary) — extracted shared dispatch path for single + bulk moves (optimistic UI + PATCH/POST + error recovery). - requestDialog prop threading — KanbanPage → BoardSwitcher, TaskDrawer → TaskDetail → doPatch/AttachmentsSection. Every call site has a defensive fallback to window.confirm if the prop is missing (verified by test_dashboard_done_actions_prompt_for_completion_summary counting the cancel guards + destructive:true markers in the bundle). New host i18n keys (web/src/i18n/en.ts + types.ts): - kanban.confirmDoneMany / confirmArchiveMany / confirmBlockedMany - kanban.trash.confirmTitle / confirmManyTitle Tests: - Replaced bundle-string-only completion-summary test with behavioral coverage: bundle cancel-guard count + destructive marker count, plus backend tests that confirm cancel preserves old status and confirm dispatches the expected PATCH/DELETE body. - Removed the SDK_CONTRACT_VERSION snapshot test from web/src/plugins/registry.test.ts (forbidden by AGENTS.md "Don't write change-detector tests"; the two remaining tests in that file already cover the new SDK surface behaviorally). Closes #50547 (consumers of #50550). Cross-vendor re-review: Gemini 3.5 Flash + GPT-OSS 120B (both SHOULD-FIX, no remaining BLOCKERs after these fixes).