{"content":"[Dev Journal] fix: settle cancelled worker sessions to a stopped terminal state (99849967, fix/dsh-integration-issues)\n\nProblem: after twin_task_cancel, the task's live worker sessions kept showing 'running' in the UI forever (session 67f02646 sat on a stuck delete step with no process underneath). Root cause: cancelTaskCascade only rewrote orchestration DB records and never touched the actually-running cowork sessions.\n\nFix:\n- cancelTask now captures live attempts' workerSessionIds BEFORE the cascade, then stops every still-running session via stopSession({finalStatus:'stopped'}) — aborting the in-flight turn, auto-denying pending approvals, settling state.\n- New 'stopped' CoworkSessionStatus terminal state across store/renderer (UI label 已终止 / Stopped) — deliberate termination, never masquerading as running.\n- orchestratorCoworkBridge: a 'stopped' event settles the skill-turn promise in both phases WITHOUT clobbering the session status to 'error' (previously pre-watchdog stops dangled the promise forever).\n- executeAttempt success path gains a terminal-state guard: a reply arriving after cancellation is discarded instead of resurrecting the attempt as completed.\n- Also repaired the rotted orchestratorCoworkBridgeSkillIds test (stale dist-electron path + fake store missing getAppLanguage — broken before this change) so the bridge is covered again.\n\nVerified: twinOrchestrationService suite 20/20 including the new cancelTask-stops-live-sessions case.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}