{"content":"fix(safety-approval): render approvals as their real question, reserve delete chrome for delete-class gates, default unanswered non-destructive gates to allow (commit 9497ee68, branch fix/safety-approval-delete-ui)\n\nRoot cause (2026-11-13 session aaee4df7): every host safety approval funnels through requestSafetyApproval into one AskUserQuestion payload, and CoworkPermissionPanel rendered ALL of them with delete-class chrome — hardcoded title 此操作将删除文件 / 'This action will delete files', red 允许删除 allow button, deny-by-default countdown — while the host's actual question (…是否允许本次上传?) never reached the screen. The owner read a plain on-chain upload as a deletion request and declined it; the same mislabel silently killed uploads/transfers/installs before.\n\nChanges:\n- coworkRunner buildSafetyQuestionInput stamps context.destructive via isDeleteOperation; only delete-class gates (delete tools / bash rm-family) may render the destructive chrome.\n- Panel/Overlay render the host's real question as the title (pre-wrap); red destructive styling + Allow-deletion label only when destructive; non-destructive gates keep the plain accent card + Allow-once.\n- Owner ruling 2026-11-13: requestSafetyApproval gains a timeoutDefault parameter ('deny' default). Upload/transfer/install/location pass 'allow' — an unanswered 60s prompt resolves approved instead of silently killing the task; watchdog, deadline stamp, IM relay, orchestrator relay and the renderer countdown all follow the same stamp. The delete gate keeps fail-closed deny (2026-11-03 review posture).\n- Bare allow (watchdog auto-allow, text-relay 允许) now counts as approved — relays resolve {behavior:'allow'} without fabricating the answers payload isSafetyApproval expects.\n- Tests: overlay destructive/non-destructive cases, panel safety-approval cases + parseSafetyContext classification, risk-suite pins for the ruling; dead coworkApprovalDestructiveTitle i18n key removed in both locales.\n\nVerification: compile:electron green, root tsc --noEmit green, tsx suites 47+24+23 green, node --test suites 87+27 green on the branch.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}