Skip to content

chore(ai-slop): honor the repo's standing punctuation-glyph ruling in config - #3054

Merged
kyle-sexton merged 3 commits into
mainfrom
claude/ai-slop-dogfood-cleanup
Aug 20, 2026
Merged

chore(ai-slop): honor the repo's standing punctuation-glyph ruling in config#3054
kyle-sexton merged 3 commits into
mainfrom
claude/ai-slop-dogfood-cleanup

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

No linked issue

Summary

rule-curly-artifacts reports 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:

Class Findings
Quoted Pat Pattison book text (> blockquotes and fenced song lyrics) 39
One verbatim pasted external Codex review 32
Genuine paste residue 1

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.

    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 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.

Fix

rule-curly-artifacts is disabled for this repo in .claude/ai-slop.json, with the measurement and both citations recorded in the existing _comment key. This is the same treatment rule-em-dash already 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 in plugins/disk-hygiene/.claude-plugin/plugin.json as 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_paths would 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 for rule-em-dash today; generalizing it is left to its own change.

Review findings addressed

  • Codex P2 — rationale must stay under _comment. Confirmed against plugins/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, so setup check is the only place it would have surfaced. Both rationales are now one _comment, numbered per rule, losing no argument.
  • plugin-options-docs-gate STALE. Caused by hand-editing the generated options table; fixed at the generator's source as described above.
  • changelog-parity-gate version reuse. Editing files under plugins/disk-hygiene/ while the manifest still carried the published 0.20.16. Reproduced locally with --check-bump origin/main before fixing.

Verification

  • detect.sh over 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.json carries 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.sh both --check and --check-bump origin/main — pass.
  • Zero curly bytes remain in plugins/disk-hygiene/plugin.json and README.md, escaped forms included.
  • check-stale-base-overlap.sh --check origin/main — exit 0, no overlapping paths.

Related

… 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

claude Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 15s —— View job


Security review — /review:security-review

  • Gather context (diff, changed files, custom instructions)
  • Apply skip gate
  • Post result

Skip gate hit: no security-relevant surface.

This PR touches two files, both non-executable data:

  • .claude/ai-slop.json — adds rule-curly-artifacts to disabled_rules and splits _comment into _comment_em_dash / _comment_curly. Verified how this file is consumed: detect.sh reads it exclusively via jq -r, no eval/shell interpolation of config values, so the free-text _comment* fields are inert metadata, not an injection surface.
  • plugins/disk-hygiene/README.md — a single curly-apostrophe → straight-apostrophe fix in a markdown table cell.

No code execution paths, no auth/access-control logic, no secrets/tokens, no GitHub Actions workflow changes, and no permission or dependency-pin changes are touched by this diff. Skip gate condition 2 ("change has no security-relevant surface after reading the diff") applies — stopping here per the skill's instructions.

No security issues found.

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>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread .claude/ai-slop.json Outdated
@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown

Last security-reviewed head: f509ec9cca7e74e7e14317cb08994ecd39b50bcc. On the next push, the relevance gate compares only the commits since this SHA; delete this comment to force a full re-review.

@claude

claude Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 2m 47s —— View job


Code review complete

  • Gather context (PR diff, changed files, CLAUDE.md)
  • Review .claude/ai-slop.json config change
  • Review plugins/disk-hygiene/README.md fix
  • Review plugins/disk-hygiene/CHANGELOG.md entry
  • Review plugins/disk-hygiene/.claude-plugin/plugin.json version bump
  • Post findings

Ran the /review:code-review lane (correctness/maintainability only; no security-review lane file found in this repo, but nothing security-relevant here regardless).

Finding (posted inline)

_comment split is out of sync with the ai-slop plugin's own documented contract for that key.claude/ai-slop.json L2-L3

The plugin's setup skill documents and evals-locks exactly one annotation key name, _comment, as exempt from unknown-key drift reporting:

This PR renames that key to _comment_em_dash and _comment_curly in the consuming repo's config without touching that contract (the ai-slop plugin stays at 0.2.1, as the PR body notes). Neither new name matches the documented allowance, so a future /ai-slop:setup check pass against this exact file would plausibly report both as unknown-key drift — undermining the PR's own goal of a clean dogfood pass. The PR's verification section runs detect.sh --show-config (the deterministic script, which only reads .disabled_rules via jq and never checks key names) but not /ai-slop:setup check (the skill that does the unknown-key check), so this gap wasn't caught.

Fix is either direction: keep a single _comment key here (losing the nice per-rule separation), or extend plugins/ai-slop/skills/setup/SKILL.md + its evals to recognize a _comment_* prefix as a documented annotation before adopting the split in a consumer config.

Verified against source (not just author-claimed)

  • Both cited rulings check out verbatim: book-references.md#L18-L21 and the songwriting CHANGELOG's PUNCTUATION GLYPHS ARE NOT A FIDELITY AXIS entry.
  • disabled_rules and the rule-curly-artifacts slug are read/matched correctly by detect.sh (jq -r '.disabled_rules', array-driven; no schema constrains extra top-level keys at the script level — consistent with the PR's claim).
  • plugins/disk-hygiene/README.md at HEAD has zero remaining curly-quote bytes; the CHANGELOG entry and 0.20.160.20.17 version bump line up.
  • The PR's detect.sh/detect.test.sh/linter output in the Verification section is author-claimed and not independently re-run here (no shell execution tools available in this lane beyond git/gh); everything above was checked by reading the actual source at the PR's head commit.

No other correctness or maintainability issues found in the four changed files.

@claude

claude Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 18s —— View job


Security review — no issues found

  • Gather context (PR diff, changed files)
  • Apply skip gate
  • Review changed files for security-relevant surface
  • Post findings

Skip gate: this PR has no security-relevant surface. All four changed files are non-executable data/docs:

  • .claude/ai-slop.json — splits an existing _comment key into _comment_em_dash / _comment_curly and appends "rule-curly-artifacts" to the disabled_rules array. I traced how plugins/ai-slop/skills/audit/scripts/detect.sh consumes this config: values are read via jq -r and only ever used in bash string/glob comparisons (case " $DISABLED_RULES " in *" $1 "*), matches_glob) — never eval'd or passed to a shell that would interpret metacharacters. The _comment* keys aren't read by the script at all. No injection surface, here or newly introduced.
  • plugins/disk-hygiene/.claude-plugin/plugin.json — version bump only.
  • plugins/disk-hygiene/CHANGELOG.md — changelog prose.
  • plugins/disk-hygiene/README.md — curly-to-straight apostrophe fix in a doc table cell.

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>
Comment thread .claude/ai-slop.json
@claude

claude Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 26s —— View job


Security review — /review:security-review

  • Gather context (diff, changed files, custom instructions)
  • Apply skip gate
  • Post result

Skip gate hit: no security-relevant surface.

Reviewed the full diff at f509ec9 (origin/main...HEAD, 4 files, +14/-5), including the newest commit which folds _comment_em_dash/_comment_curly back into a single _comment key and fixes the escaped curly apostrophe at its source in plugin.json. All four changed files are non-executable data/docs:

  • .claude/ai-slop.json — adds rule-curly-artifacts to disabled_rules and merges the rationale under the single supported _comment key. Confirmed via detect.sh that this file is consumed exclusively through jq -r, with no eval or shell interpolation of config values — the free-text _comment field is inert metadata, not an injection surface.
  • plugins/disk-hygiene/.claude-plugin/plugin.json — version bump (0.20.16 → 0.20.17) and a curly → straight apostrophe fix in a manifest option description string. No schema, permission, or dependency changes.
  • plugins/disk-hygiene/README.md — regenerated options table reflecting the manifest fix above.
  • plugins/disk-hygiene/CHANGELOG.md — changelog entry documenting the fix.

No code execution paths, no auth/access-control logic, no secrets/tokens, no GitHub Actions workflow changes, and no permission or dependency-pin changes anywhere in this diff. Skip gate condition 2 ("change has no security-relevant surface after reading the diff") applies — stopping here per the skill's instructions.

No security issues found.

@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown

Claude has reviewed this PR 2 times. The lane skips further automatic reviews after 5; deleting this comment resets the count.

@claude

claude Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 3m 7s —— View job


Code Review — /review:code-review

  • Gather context (diff, changed files, custom instructions)
  • Invoke /review:code-review skill
  • Post findings (inline + summary)

Skip gate: none of the skip conditions apply (PR is open, not a draft, has real review surface, and no prior applying review from this lane) — proceeded with full review.

Scope: .claude/ai-slop.json, plugins/disk-hygiene/.claude-plugin/plugin.json, plugins/disk-hygiene/CHANGELOG.md, plugins/disk-hygiene/README.md — all reviewed against origin/main.

Findings

No blocking or suggestion-level findings.

The one open item from the earlier Codex review (P2: _comment_em_dash/_comment_curly are unknown keys under plugins/ai-slop/skills/setup/SKILL.md's contract, which documents only _comment) is already resolved as of the current head — commit f509ec9 merged both rationales back under the single supported _comment key. I independently confirmed against plugins/ai-slop/skills/setup/SKILL.md that _comment is the only key the file's keys table documents, and the committed .claude/ai-slop.json now carries exactly that key alongside the pre-existing excluded_paths/disabled_rules — no unknown keys remain.

Additional checks I ran myself (not just restating the PR's own claims):

  • .claude/ai-slop.json and plugins/disk-hygiene/.claude-plugin/plugin.json both parse as valid JSON at HEAD (jq empty).
  • rule-em-dash and rule-curly-artifacts are both real, shipped rule slugs in detect.sh — not typos.
  • plugins/disk-hygiene/README.md has zero remaining curly-quote bytes after the fix (checked all of U+2018/2019/201C/201D, not just the one cited line).
  • The version bump (0.20.160.20.17) and the new ## [0.20.17] CHANGELOG.md heading satisfy scripts/check-changelog-parity.sh's bump/monotonicity requirements — format and heading match the file's existing convention.
  • The README location the _comment and CHANGELOG cite for the fixed apostrophe (disk_hygiene_enabled row) matches the actual diff line.

Not independently verified (author-claimed, sandbox blocked running detect.sh here): the specific finding counts in the _comment (72 total / 39 quoted book text / 32 pasted review / 1 genuine) and the --show-config / detect.test.sh output quoted in the PR description. The reasoning and citations underpinning the config choice (the two standing punctuation-glyph rulings) check out from the files as written.

The rationale for disabling by config rather than editing or excluding is sound given the constraints described (rewriting quoted third-party text is out of bounds, and excluded_paths is file-grained where the actual problem is glyph-class-grained), and it mirrors the existing rule-em-dash precedent in the same file, which keeps the config's shape consistent.

@kyle-sexton
kyle-sexton merged commit bfc25ad into main Aug 20, 2026
50 of 51 checks passed
@kyle-sexton
kyle-sexton deleted the claude/ai-slop-dogfood-cleanup branch August 20, 2026 19:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants