a02f88994b
formatReadHashlineHeader collapsed every relative in-workspace path to its basename, so reading a nested file (e.g. src/settings.json) emitted [settings.json#tag]. When a same-basename file existed at the session cwd, a verbatim follow-up edit resolved against the cwd file; Patcher.prepare only runs snapshot-tag path recovery when the authored path is missing, so the valid edit was deterministically rejected with "hash is not from this session". Keep the workspace-relative path, which names the file uniquely and stays directly resolvable against cwd. Out-of-workspace absolute paths remain shortened; root-level files are unchanged. Fixes #8482