Skip to content

fix(docs-hygiene): correct audit-noise's stated negation limitation (0.21.2) - #3205

Merged
kyle-sexton merged 1 commit into
mainfrom
claude/work-items-integration-o22y7w
Aug 23, 2026
Merged

fix(docs-hygiene): correct audit-noise's stated negation limitation (0.21.2)#3205
kyle-sexton merged 1 commit into
mainfrom
claude/work-items-integration-o22y7w

Conversation

@kyle-sexton

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

Copy link
Copy Markdown
Contributor

No linked issue

Deliberately not Closes #3195. This corrects what the skill body says; #3195 remains open for the paragraph-accumulation fix that changes what the detector does.

Summary

0.21.1 (#3202) added a gate requiring a negation candidate's line to close its own sentence. That silently changed what happens to a soft-wrapped prohibition, and the "known limitation" bullet in SKILL.md was left describing 0.21.0 — so main currently ships a skill body making two false claims about its own detector.

Measured against the shipped detector at 7dea5a84:

Do not use markdown;
compose flowing prose instead.

Do not use markdown
in the summary body.

Never emit a bare summary.
Line SKILL.md claims Actual
Do not use markdown; (positive paired on next line) "is reported" not reported; never terminates a sentence, so the line reaches no verdict
Do not use markdown (no positive anywhere) not reported
Never emit a bare summary. flags flags
  1. "is reported" is false. The false positive the bullet documents no longer occurs.
  2. "The error direction is a false positive, never a silent withhold" is inverted. A hard-wrapped prohibition with no positive alternative anywhere in its sentence is now missed entirely.

Fix

Rewrite the "known limitation" bullet in plugins/docs-hygiene/skills/audit-noise/SKILL.md to describe the behavior that actually ships, and bump to 0.21.2 with a CHANGELOG entry. Documentation only — no detector, emitter, or test behavior changes.

The rewritten bullet does three things the old one did not:

  • States the real mechanism. The gate requires a line to close its own sentence, so a soft-wrapped prohibition reaches no verdict at all — rather than the old claim that it is reported in pieces.
  • Names the error direction correctly, as a silent withhold. This is the load-bearing half. A silent withhold is the one failure mode admission test 2 in docs/conventions/detector-findings/README.md asks this rule set to fail away from, and in a repo that hard-wraps its prose — this one — it takes every prohibition long enough to wrap. The old text told a reader the opposite: that the gap cost reviewer attention rather than coverage, which is exactly the reassurance that would stop someone from prioritizing it.
  • Marks it as the shape's one departure from fail-safe-toward-emitting, and points at fix(docs-hygiene): audit-noise's negation shape misreads sentences that markdown soft-wraps #3195, which now carries the revised acceptance criteria.

A second correction, recorded rather than silently fixed

While re-measuring I found the merged #3202's body table says the narrowing took the negation count 1053 → 31. That is wrong: 31 was the intermediate line-gate build, superseded when the per-sentence gate landed. The shipped figure is 69, which is what CHANGELOG.md 0.21.1 and the corpus re-measure both say.

Re-run on the identical 85-file corpus (plugins/docs-hygiene + plugins/source-control tracked markdown, minus evals/fixtures and CHANGELOG.md) at 7dea5a84:

Shape Count
negation 69
ghost-ref 3
ticket-pr-residue 2
citation 2
scope-meta 1
plan-reference 1
enum-list 1

The other shapes are byte-identical to the claim (3/2/2/1/1/1), so the narrowing itself behaved as described — only the headline number in that PR body was stale. Issue #3201's body carries the same 31. Both are merged/closed records; the correction is noted here and on #3195 rather than by rewriting them.

Verification

Gate Result
detect.test.sh All 133 checks passed
emit-findings.test.sh All 35 checks passed
check-skill.sh (source checkout) PASS — 0 errors; all 8 base-ref trigger phrases preserved
check-changelog-parity.sh --check / --check-bump origin/main / --check-order PASS
check-detector-findings-crosswalk.sh PASS
markdownlint 0 issues
typos clean
corpus re-measure, 85 files negation 69; other shapes 3/2/2/1/1/1

The reproduction above was run against the merged detector, not a local build, so the "Actual" column reflects what main ships today.

Related

…0.21.2)

0.21.1's "the line must close its own sentence" gate silently changed what
happens to a soft-wrapped prohibition, and the "known limitation" bullet in
SKILL.md was left describing 0.21.0.

Two claims in it are false against the shipped detector:

- It says `Do not use markdown;` / `compose prose instead.` across two lines
  is reported. Measured: it is not. `;` never terminates a sentence, so the
  line reaches no verdict at all.
- It says the error direction is "a false positive, never a silent withhold".
  That is inverted. A hard-wrapped prohibition with no positive alternative
  anywhere in its sentence is now missed entirely.

The second claim is load-bearing, not cosmetic: a silent withhold is the one
failure mode the detector-findings admission test asks this rule set to avoid,
and in a hard-wrapped repo it takes every prohibition long enough to wrap. The
bullet now names it as the shape's one departure from fail-safe-toward-emitting
rather than reassuring a reader that coverage is safe, and points at #3195,
which carries the revised acceptance criteria.

Documentation only — no detector, emitter or test behavior changes.

Refs #3195, #3202.
@claude

claude Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 42s —— View job


Security Review

  • Gather context (PR diff, files changed)
  • Run /review:security-review procedure
  • Analyze changed files for security implications
  • Post findings

No security issues found.

This PR is documentation-only: a plugin version bump (0.21.10.21.2 in plugin.json), a CHANGELOG entry, and a corrected prose bullet in SKILL.md describing a known limitation of the audit-noise detector's negation shape.

None of the changed content is executable — no detector script (detect.sh), emitter, test, or GitHub Actions workflow logic is touched, and no config/permissions were widened. There is no injection surface, no credential handling, and no trust-boundary change here; this is a pure fix to what the skill's markdown documentation claims about existing (unchanged) detector behavior. Skip-gate condition 2 applies (no security-relevant surface after reading the diff).

@github-actions

Copy link
Copy Markdown

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

@kyle-sexton
kyle-sexton enabled auto-merge (squash) August 23, 2026 19:00
@kyle-sexton
kyle-sexton merged commit b8d61f9 into main Aug 23, 2026
51 of 52 checks passed
@kyle-sexton
kyle-sexton deleted the claude/work-items-integration-o22y7w branch August 23, 2026 19:02
@claude

claude Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 30s —— View job


/review:code-review — skipped

  • Gather context (pre-fetched PR data + plugins/review/skills/code-review/SKILL.md)
  • Apply skip gate

Result: This PR is already merged (PR State: MERGED). The skill's skip gate stops before any deep review when "PR is closed or not open," so no inline comments were posted and no review findings were generated.

If a fresh review is wanted, it would need to run against an open PR or another branch/target — let me know and I can do that instead.

@github-actions

Copy link
Copy Markdown

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

cursor Bot pushed a commit that referenced this pull request Aug 23, 2026
…ions (0.55.6)

The shared validator only required a closing keyword and a non-empty
pr-issue-linkage reusable rejects. Observed on #3205: linkage plus
Summary, Verification, and Related (no Fix) passed both gates and failed
CI. The validator now looks up Summary, Fix, Verification, and Related
through one heading-level helper, reports every missing or empty section
in one pass, and the blocked-message remedy lists all four.

Closes #3206

Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
kyle-sexton added a commit that referenced this pull request Aug 23, 2026
…ions (0.55.6)

The shared validator only required a closing keyword and a non-empty
pr-issue-linkage reusable rejects. Observed on #3205: linkage plus
Summary, Verification, and Related (no Fix) passed both gates and failed
CI. The validator now looks up Summary, Fix, Verification, and Related
through one heading-level helper, reports every missing or empty section
in one pass, and the blocked-message remedy lists all four.

Closes #3206

Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
kyle-sexton added a commit that referenced this pull request Aug 23, 2026
…ions (0.55.6)

The shared validator only required a closing keyword and a non-empty
pr-issue-linkage reusable rejects. Observed on #3205: linkage plus
Summary, Verification, and Related (no Fix) passed both gates and failed
CI. The validator now looks up Summary, Fix, Verification, and Related
through one heading-level helper, reports every missing or empty section
in one pass, and the blocked-message remedy lists all four.

Closes #3206

Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
kyle-sexton added a commit that referenced this pull request Aug 24, 2026
…ions (0.55.6)

The shared validator only required a closing keyword and a non-empty
pr-issue-linkage reusable rejects. Observed on #3205: linkage plus
Summary, Verification, and Related (no Fix) passed both gates and failed
CI. The validator now looks up Summary, Fix, Verification, and Related
through one heading-level helper, reports every missing or empty section
in one pass, and the blocked-message remedy lists all four.

Closes #3206

Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
kyle-sexton added a commit that referenced this pull request Aug 24, 2026
…ions (0.55.11) (#3217)

Closes #3206

## Summary

The shared PR-body linkage validator only checked a closing keyword and
`## Related`, so both local pre-checks allowed bodies the pinned
`pr-issue-linkage` reusable rejects. Local gates now require the same
four contract sections CI does.

## Fix

`pr-linkage-validator.sh` generalizes `related_section()` into
`section_content()` over `Summary`, `Fix`, `Verification`, and
`Related`, using the existing heading-level semantics (a nested `###` is
content). Each missing or empty section is its own `LINKAGE_PROBLEMS`
entry. Both hook surfaces pick this up from the shared core; their
blocked-message remedies now list all four sections so following them
produces a body CI accepts. The no-issue-marker path and
`update_pull_request` without `body` are unchanged.

## Verification

`bash plugins/source-control/hooks/pr-body-linkage-gate.test.sh` —
passed: 137 failed: 0

`bash plugins/source-control/hooks/pr-linkage-mcp-gate.test.sh` —
pass=25 fail=0

New cases: the #3205 body (linkage + Summary + Verification + Related,
no Fix) is blocked; a nested `###` inside each required section is
content. `check-changelog-parity.sh --check-bump origin/main` passes
(0.55.6).

## Related

- #3205 — the PR whose `pr-issue-linkage` failure is the reproduction
- #3209 — comment-only header correction on the same reusable pin; no
functional overlap
- `.github/workflows/pr-issue-linkage.yml` — pins the upstream reusable
at v0.14.2

---------

Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
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.

1 participant