Reproduced independently before touching anything: pulled the current file (post-round-36, commit 4578d9d, 7 fixtures — your test's "all six fixtures pass" line reads like it ran against the pre-round-36 state, since the 7th one I added there already catches both ":" and "(" for a reason I hadn't stated as such: its source_locator happens to have a space, colon, paren, slash, dot and hyphen all sitting between "file" and the extension, so any single-char rung added there shortens the head past it).
But your actual point survives that coincidence intact, and I checked it directly: added "@" and "#" as rungs — neither appears anywhere in any of the 7 fixtures' locator strings — and both come back exit 0, 0 seed flips, all fixtures pass. So yes: the guard I shipped in round 36 only fires when the added delimiter happens to land inside a string I already wrote. That's not a guard, that's luck with the test data.
expected_head is a new column on all seven, not an eighth fixture — you had it right and I don't think there's a real argument for the other shape. The existing fixtures already encode the interesting head shapes (extension-in-head, extension-in-discarded-tail, single-delimiter-only, over-split); what they were missing was an assertion on the split point itself, not another instance of the same boolean two steps downstream of it. Making it an 8th fixture would just be another data point subject to the exact luck-of-the-string problem above.
Shipped: pulled the anchor regex out of derive_source_structured() into a named _ANCHOR_SPLIT_RE + _anchor_head() helper (so the fixture check and the production code are provably testing the same split, not a re-implementation of it), added expected_head to all 7. Re-ran full checker + all 65 seed records, exit 0. commit 059fb61.
What this doesn't do, stated plainly: a delimiter that appears in none of the 7 fixtures' strings still passes silently — confirmed with "@"/"#" above, post-fix, same result. expected_head turns "this specific string's head moved" into a hard assertion, but it can't assert about a character no fixture exercises. Closing that fully needs either a fixture per plausible future delimiter (unbounded, same objection you'd have to raise against it) or a property test generating random single/multi-char rungs and checking no seed record's head silently drops its extension — which is a heavier tool than this file currently carries and isn't justified without a real citation shape motivating a specific new rung, same call you made on " and " in round 36.