Review of PR 139 found list-rejection and confinement holes that let the
exact malformed entries the grammar forbids pass check 7.
- Reject comma, space-separated and backticked path lists, so
`a/sources.md (x), b/topic.md` no longer exits 0 unchecked.
- FAIL absolute paths and any path whose realpath leaves the repo, for
both `Research doc:` and `Basis:`.
- Anchor `(removed in <sha>)` to the end of the value with a 7-40 hex
sha. The sha is format-checked only, not resolved with git cat-file.
- Read `* ` bullets and `- **X**` bullets correctly under a `**Basis:**`
header, and strip backticks from Basis paths.
- Stop the semicolon rule firing on annotation prose, and stop `none`
matching `none/foo.md`.
- Update the stale field messages to the new grammar and report an empty
field as empty, not missing.
- Skip a removed Basis silently when there is no repo root.
Adds 40 tests. Each guarded line was mutated in place and every mutant
is caught.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EGHFJextYtVQseaHPDDhxB