07e6461dfe
search_tool resolved its root via _resolve_path_for_task BEFORE the NT-namespace check saw it (review finding): on Windows the resolve is the SMB-auth trigger, on POSIX the task-base join hides the prefix from the resolved-path denylist. The raw-string guard now runs first there too, and the guard rides the existing top-level agent.file_safety import instead of two function-local imports. The tool-layer chokepoint test now covers all four entries and proves none of them touched Path/_resolve_path_for_task/realpath before the refusal; the 12 form-matrix tests collapse into one blocked/allowed invariant over both classifiers.