chore(ai-slop): honor the repo's standing punctuation-glyph ruling in config - #3054
Conversation
… config `rule-curly-artifacts` was reporting 72 findings against this repo, and a dogfood pass was about to spend an edit cycle on them. It should not have: the owner already ruled punctuation glyphs out of scope, twice in writing, and the rule's yield is almost entirely the material those rulings protect. Measured over 1214 tracked markdown files (2026-08-20): - 39 findings are quoted Pat Pattison book text, mostly inside `>` blockquotes or fenced song lyrics. - 32 are one verbatim pasted external Codex review. - Exactly 1 was genuine paste residue. The rulings this defers to: - `plugins/songwriting/context/pat-pattison/research/book-references.md` — "Do not sweep, measure, audit, or open work items on punctuation glyphs. A session was spent on exactly that before the owner ruled it out of scope." It also states the books themselves disagree: the 2009 EPUB prints ASCII apostrophes, the other three print curly, so there is no fidelity axis to restore toward. - The songwriting CHANGELOG entry "PUNCTUATION GLYPHS ARE NOT A FIDELITY AXIS — DO NOT SWEEP FOR THEM", which records a prior session normalizing 470 lines before the ruling landed. So the rule is disabled for this repo with the measurement and both citations recorded, exactly as `rule-em-dash` already is. The one genuine finding is fixed rather than suppressed: a stray curly apostrophe in the disk-hygiene README's config table. A per-path exemption would be the narrower instrument, but the config layer supports that only for `rule-em-dash` today. Generalizing it is the real fix and is left to its own change; the shipped detector default stays on, and this remains the consuming repo's decision rather than the plugin's. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 15s —— View job Security review —
|
changelog-parity-gate rejected the previous commit: editing a file under plugins/disk-hygiene/ while the manifest still carried the published 0.20.16 is version reuse. Reproduced locally with --check-bump origin/main before fixing. The diff is one curly apostrophe in the options table, but the gate is right that a shipped plugin cannot change under a published version number. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4579cc0154
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Last security-reviewed head: |
|
Claude finished @kyle-sexton's task in 2m 47s —— View job Code review complete
Ran the Finding (posted inline)
The plugin's
This PR renames that key to Fix is either direction: keep a single Verified against source (not just author-claimed)
No other correctness or maintainability issues found in the four changed files. |
|
Claude finished @kyle-sexton's task in 1m 18s —— View job Security review — no issues found
Skip gate: this PR has no security-relevant surface. All four changed files are non-executable data/docs:
No GitHub Actions workflow changes, no code execution paths, no auth/access-control logic, no secrets/token handling, no new injection surface. Nothing to report. |
Two review findings, both confirmed against the code before fixing. Codex, on .claude/ai-slop.json: splitting the rationale into _comment_em_dash and _comment_curly made this repo's own config fail the plugin's own contract. plugins/ai-slop/skills/setup/SKILL.md documents exactly one annotation key -- `_comment` is listed as "Not drift -- do not flag it as an unknown key" -- and step 2 of the check flow flags every other unknown key as drift. The detector ignores unrecognized keys silently, so nothing broke at runtime; `setup check` is where it would have surfaced, on the file meant to be the worked example. Both rationales are now one `_comment`, numbered per rule, losing no argument. plugin-options-docs-gate, on disk-hygiene: the options table in README.md is GENERATED by scripts/sync-plugin-options-docs.py from the manifest's option descriptions. The previous commit hand-edited the generated table, which is why the gate reported STALE. That turned out to locate the residue properly: the curly apostrophe lives in plugin.json as an escaped ’, which is why a byte grep over the tree never found it and only the rendered table looked wrong. Fixed at the source and regenerated, so the table now matches its generator rather than agreeing with it by coincidence. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 26s —— View job Security review —
|
|
Claude has reviewed this PR 2 times. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
|
Claude finished @kyle-sexton's task in 3m 7s —— View job Code Review —
|
No linked issue
Summary
rule-curly-artifactsreports 72 findings against this repo, and a dogfood pass was about to spend an edit cycle on them. It should not have — the owner already ruled punctuation glyphs out of scope, twice in writing, and the rule's measured yield is almost entirely the material those rulings protect.This records that existing decision in the config layer so the detector stops re-raising it, and repairs the one finding that was genuine.
What the rule actually finds here
Measured 2026-08-20 across 1214 tracked markdown files, after stripping fenced code and inline spans the way the detector does:
>blockquotes and fenced song lyrics)The rulings this defers to
plugins/songwriting/context/pat-pattison/research/book-references.md:The same file notes there is no fidelity axis to restore toward: the four books disagree with each other, the 2009 EPUB printing ASCII apostrophes where the other three print curly.
The
songwritingCHANGELOG entry "PUNCTUATION GLYPHS ARE NOT A FIDELITY AXIS — DO NOT SWEEP FOR THEM", which records a prior session normalizing 470 lines before the ruling landed.Fix
rule-curly-artifactsis disabled for this repo in.claude/ai-slop.json, with the measurement and both citations recorded in the existing_commentkey. This is the same treatmentrule-em-dashalready gets here and for the same reason: the shipped detector default stays neutral, and the consuming repo owns its own taste.The one genuine finding is repaired rather than suppressed — and at its source. The curly apostrophe surfaced in disk-hygiene's README options table, but that table is generated by
scripts/sync-plugin-options-docs.py; the character actually lives inplugins/disk-hygiene/.claude-plugin/plugin.jsonas an escaped’, which is why a byte-level grep over the tree never found it and only the rendered table looked wrong. Fixed in the manifest and regenerated, so the table matches its generator rather than agreeing with it by coincidence. disk-hygiene bumps to 0.20.17 accordingly.Why disable rather than edit or exclude: editing is what both rulings forbid, and it would rewrite the punctuation of quoted book text and a verbatim third-party review.
excluded_pathswould be narrower, but it drops a file from every rule, and the Pattison corpus is 51 files — most barely quoted at all, several with no blockquotes whatsoever. Excluding all of them to resolve findings in 8 would silence a lot of genuinely original prose, including live emoji and rule-of-three findings. A per-rule path exemption is the instrument that actually fits, and the config layer supports it only forrule-em-dashtoday; generalizing it is left to its own change.Review findings addressed
_comment. Confirmed againstplugins/ai-slop/skills/setup/SKILL.md, which documents exactly one annotation key (_comment, "Not drift — do not flag it as an unknown key") and flags every other unknown key as drift in step 2 of the check flow. An earlier revision split it into_comment_em_dash/_comment_curly, which would have made this repo's own config fail the plugin's own contract — on the file meant to be the worked example. The detector ignores unknown keys silently, sosetup checkis the only place it would have surfaced. Both rationales are now one_comment, numbered per rule, losing no argument.plugin-options-docs-gateSTALE. Caused by hand-editing the generated options table; fixed at the generator's source as described above.changelog-parity-gateversion reuse. Editing files underplugins/disk-hygiene/while the manifest still carried the published 0.20.16. Reproduced locally with--check-bump origin/mainbefore fixing.Verification
detect.shover the affected corpus:rule-curly-artifacts findings=0 declined=0 disabled=1.--show-config:disabled_rules=rule-em-dash rule-curly-artifacts..claude/ai-slop.jsoncarries exactly three keys —_comment,disabled_rules,excluded_paths— so no unknown-key drift remains.sync-plugin-options-docs.py --check— "plugin options docs: up to date".check-changelog-parity.shboth--checkand--check-bump origin/main— pass.plugins/disk-hygiene/plugin.jsonandREADME.md, escaped forms included.check-stale-base-overlap.sh --check origin/main— exit 0, no overlapping paths.Related
ai-slop0.2.2, which makes the in-file marker forms usable; the narrower per-path instrument this PR wants would build on that work rather than this one..claude/ai-slop.jsonand therule-em-dashprecedent followed here.