ok   1 lowercase am [pi]: refuse (mosaic gate: read path is outside the workspace under another spelling: shot 9.41 am.png -> "<ws>/shot 9.41 am)
      pi would open "<ws>/shot 9.41 am.png"
ok   2 two apostrophes [pi]: refuse (mosaic gate: read path is outside the workspace under another spelling: a'b'c.txt -> "<ws>/a’b’c.txt")
      pi would open "<ws>/a’b’c.txt"
ok   3 @ prefix [pi]: refuse (mosaic gate: read path is outside the workspace under another spelling: @notes's.txt -> "<ws>/notes’s.txt")
      pi would open "<ws>/notes’s.txt"
ok   4 NBSP before AM in the asked name [pi]: refuse (mosaic gate: read path is outside the workspace under another spelling: shot 9.41 AM.png -> "<ws>/shot 9.41 AM)
      pi would open "<ws>/shot 9.41 AM.png"
ok   5 file:// URL [pi]: refuse (mosaic gate: read path is outside the workspace under another spelling: file://<ws>/notes's.txt -> "/home/jwol)
      pi would open "<ws>/notes’s.txt"
ok   6 file:// URL, %27 [pi]: refuse (mosaic gate: read path is outside the workspace under another spelling: file://<ws>/notes%27s.txt -> "/home/jw)
      pi would open "<ws>/notes’s.txt"
ok   7 respelled dir inside, link out below it [pi]: refuse (mosaic gate: read path is outside the workspace under another spelling: dir's/x -> "<ws>/dir’s/x")
      pi would open "<ws>/dir’s/x"
ok   8 respelled dir inside, plain file [pi]: allow
      pi would open "<ws>/dir’s/x"
ok   9 respelled self-loop [pi]: refuse (mosaic gate: read path can't be checked under another spelling: ELOOP)
      pi would open "<ws>/loop's"
ok   10 path below a respelled self-loop [pi]: refuse (mosaic gate: read path can't be checked under another spelling: ELOOP)
      pi would open "<ws>/loop's/x"
ok   11 asked name exists inside, other spelling out [pi]: refuse (mosaic gate: read path is outside the workspace under another spelling: notes's.txt -> "<ws>/notes’s.txt")
      pi would open "<ws>/notes's.txt"
ok   12 all families in one name, only AM/PM+NFD+curly on disk [pi]: allow
      pi would open "<ws>/it's résumé 9.41 PM.txt"
ok   13 NFD+curly with a plain PM [pi]: refuse (mosaic gate: read path is outside the workspace under another spelling: it's résumé 9.41 PM.txt -> "<ws>/it’s )
      pi would open "<ws>/it’s résumé 9.41 PM.txt"
ok   14 ../ws/ form [pi]: refuse (mosaic gate: read path is outside the workspace under another spelling: ../ws/x's.txt -> "<ws>/x’s.txt")
      pi would open "<ws>/x’s.txt"
ok   1 lowercase am [claude-code]: refuse (mosaic gate: Read path is outside the workspace under another spelling: shot 9.41 am.png -> "<ws>/shot 9.41 am)
      pi would open "<ws>/shot 9.41 am.png"
ok   2 two apostrophes [claude-code]: refuse (mosaic gate: Read path is outside the workspace under another spelling: a'b'c.txt -> "<ws>/a’b’c.txt")
      pi would open "<ws>/a’b’c.txt"
ok   3 @ prefix [claude-code]: refuse (mosaic gate: Read path is outside the workspace under another spelling: @notes's.txt -> "<ws>/notes’s.txt")
      pi would open "<ws>/notes’s.txt"
ok   4 NBSP before AM in the asked name [claude-code]: refuse (mosaic gate: Read path is outside the workspace under another spelling: shot 9.41 AM.png -> "<ws>/shot 9.41 AM)
      pi would open "<ws>/shot 9.41 AM.png"
ok   5 file:// URL [claude-code]: refuse (mosaic gate: Read path is outside the workspace under another spelling: file://<ws>/notes's.txt -> "/home/jwol)
      pi would open "<ws>/notes’s.txt"
ok   6 file:// URL, %27 [claude-code]: refuse (mosaic gate: Read path is outside the workspace under another spelling: file://<ws>/notes%27s.txt -> "/home/jw)
      pi would open "<ws>/notes’s.txt"
ok   7 respelled dir inside, link out below it [claude-code]: refuse (mosaic gate: Read path is outside the workspace under another spelling: dir's/x -> "<ws>/dir’s/x")
      pi would open "<ws>/dir’s/x"
ok   8 respelled dir inside, plain file [claude-code]: allow
      pi would open "<ws>/dir’s/x"
ok   9 respelled self-loop [claude-code]: refuse (mosaic gate: Read path can't be checked under another spelling: ELOOP)
      pi would open "<ws>/loop's"
ok   10 path below a respelled self-loop [claude-code]: refuse (mosaic gate: Read path can't be checked under another spelling: ELOOP)
      pi would open "<ws>/loop's/x"
ok   11 asked name exists inside, other spelling out [claude-code]: refuse (mosaic gate: Read path is outside the workspace under another spelling: notes's.txt -> "<ws>/notes’s.txt")
      pi would open "<ws>/notes's.txt"
ok   12 all families in one name, only AM/PM+NFD+curly on disk [claude-code]: allow
      pi would open "<ws>/it's résumé 9.41 PM.txt"
ok   13 NFD+curly with a plain PM [claude-code]: refuse (mosaic gate: Read path is outside the workspace under another spelling: it's résumé 9.41 PM.txt -> "<ws>/it’s )
      pi would open "<ws>/it’s résumé 9.41 PM.txt"
ok   14 ../ws/ form [claude-code]: refuse (mosaic gate: Read path is outside the workspace under another spelling: ../ws/x's.txt -> "<ws>/x’s.txt")
      pi would open "<ws>/x’s.txt"
