9d08c95464
Two independent HIGH-severity correctness bugs found in a core-tools audit, each reproduced live against current main: 1. Read-dedup was never evicted after a write on non-default tasks. _invalidate_dedup_for_path looked up the read-tracker under the correct task_id but resolved the path with _resolve_path(filepath) — which DEFAULTS task_id='default'. The dedup cache is keyed by the task-resolved absolute path, so for any task whose workspace cwd differs from the process cwd (every -w worktree / Desktop / ACP session using relative paths) the computed key never matched and the stale entry was never removed. A read_file after a write_file/patch could then return the OLD content stub when mtime coincided. Fix: pass task_id through. 2. A per-command workdir override permanently hijacked the session cwd. The post-command dual-write unconditionally recorded env.cwd (stamped to the transient workdir) into the durable session-cwd store, so every later command that omitted workdir inherited the one-off directory — contradicting the documented 'Working directory for this command' contract. Fix: skip the session-cwd record when workdir was explicitly supplied. Both verified with sabotage-checked regression tests (fail without the fix).