openArtifactPath/_workspacePathExists split on '/' but Windows artifact
paths arrive as backslash absolute paths. Regression tests drive the real
functions from static/workspace.js via node (mirroring
test_issue3262_artifact_path_canonicalization.py): backslash subdir and
root artifacts must open, POSIX relative clicks must keep working, and a
genuinely missing artifact must still surface file_open_failed.
openArtifactPath/_workspacePathExists split on '/' but Windows artifact
paths use backslashes (D:\workspace\dir\file), so prefix-strip failed
and /api/list existence check never matched -> 'cannot open file'.
Normalize both rel and workspace to '/' before stripping.