Surfaced by scripts/self-scan.js (see PROOF.md), not by a user report.
SKILL.md carves out the list-item separator dash as typography rather than prose punctuation:
an em dash acting as the separator in a bulleted or numbered list item that opens with a bolded lead term or a markdown link (- **Term** — description, - [label](url) — description) is typography, not a prose splice — don't count it toward the rate.
detector/patterns.js implements that with SEPARATOR_DASH_RE. Two near-identical shapes fall outside it.
1. Keep-a-Changelog version headings.
Same job as the list-item separator: it joins a label to a value. CHANGELOG.md has 32 of these and every one counts toward the em-dash rate.
2. A bold lead term with a parenthetical before the dash.
- **Lingering-attention claims** (`lingering-attention`) — the share-post frame that claims...
SEPARATOR_DASH_RE requires the dash to follow the closing ** with only whitespace between, so the parenthetical breaks the match.
Measured on CHANGELOG.md at v3.22.0: 137 em dashes total, 53 carved out, 84 counted. 33 of the 84 are the two shapes above. That is most of the file's residual score.
Suggested fix: extend the carve-out to (a) a heading line whose dash separates a bracketed or bolded label from a trailing value, and (b) an optional parenthetical or inline-code span between the bold lead term and the dash. Both should also be reflected in the SKILL.md rule text, since the carve-out is documented there first.
Watch for: the same regex feeds the smart-punct co-occurrence signature, so widening it lowers that signal too. Whatever lands needs a fixture proving a genuine mid-sentence prose splice in a list item still fires.
Surfaced by
scripts/self-scan.js(seePROOF.md), not by a user report.SKILL.mdcarves out the list-item separator dash as typography rather than prose punctuation:detector/patterns.jsimplements that withSEPARATOR_DASH_RE. Two near-identical shapes fall outside it.1. Keep-a-Changelog version headings.
Same job as the list-item separator: it joins a label to a value.
CHANGELOG.mdhas 32 of these and every one counts toward the em-dash rate.2. A bold lead term with a parenthetical before the dash.
SEPARATOR_DASH_RErequires the dash to follow the closing**with only whitespace between, so the parenthetical breaks the match.Measured on
CHANGELOG.mdat v3.22.0: 137 em dashes total, 53 carved out, 84 counted. 33 of the 84 are the two shapes above. That is most of the file's residual score.Suggested fix: extend the carve-out to (a) a heading line whose dash separates a bracketed or bolded label from a trailing value, and (b) an optional parenthetical or inline-code span between the bold lead term and the dash. Both should also be reflected in the
SKILL.mdrule text, since the carve-out is documented there first.Watch for: the same regex feeds the smart-punct co-occurrence signature, so widening it lowers that signal too. Whatever lands needs a fixture proving a genuine mid-sentence prose splice in a list item still fires.