Closes#594
Chat file links without a file resolver open `chart%231.png` instead of `chart#1.png`. Decode reserved filename characters in `citedFilePath()`'s fallback.
Regression coverage stays in the existing `markdownTarget` suite. It checks encoded punctuation, `%2523` decoded once, malformed escapes and NUL rejection. The contribution changes one production line and adds 14 lines to the existing test file.
Validation against main `7bfa16d`, with Node 22 and pnpm 10:
- All 20 Markdown target tests pass. Running the same tests against unchanged main gives 19 passes and one failure in the new reserved-filename regression.
- All 507 UI tests and 25 CI selection/release-safety tests pass.
- Localization and style checks, TypeScript and `pnpm build` pass.
- `git diff --check` passes.
Local Windows verification sends the CI tests' Bash snippets through temporary files to preserve backslashes. The workflow, test cases and assertions are unchanged.