99aee777decd4cd1c58cb5af2f9fbcc6db5dae0d
Felix #1 / Markus #5 / Sara #1 (PR #366 review). The naive text.replace("@" + old, "@" + new) silently corrupted any composite mention that began with the renamed single-name person — e.g. renaming the single-name "Hans" turned "@Hans Müller" into "@Henry Müller", obliterating the historical reference to Hans Müller without warning. Replace with a regex matching "@OldName" only at a token boundary: not followed by a letter/digit/hyphen (catches @Hans-Peter) and not followed by "<space><uppercase>" (catches @Hans Müller). False negatives — e.g. sentence-initial "@Hans Bekam" — are accepted as the conservative trade-off; corruption is irrecoverable, missed renames are not. The new failing test reproduced the reviewer scenario exactly: two persons ("Hans Müller" + single-name "Hans"), one block referencing both, rename Hans → Henry. Pre-fix output corrupted "@Hans Müller" to "@Henry Müller"; post-fix preserves the composite mention and only updates the standalone. The existing partial-name guard test (Hans-Peter Müller / Hans Müller) and multiple-occurrences test still pass — the regex is a strict superset of the boundary constraints already covered. Refs #362 #366 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Description
No description provided
Languages
Python
73.3%
TypeScript
11.4%
Java
10.8%
Svelte
4.2%
Shell
0.1%