Skip to content

feat(claude-config): corroborate I10 and concretize its remediation surfaces - #1880

Merged
kyle-sexton merged 1 commit into
mainfrom
fix/corpus-ra9-i10-source-and-remediate
Aug 2, 2026
Merged

feat(claude-config): corroborate I10 and concretize its remediation surfaces#1880
kyle-sexton merged 1 commit into
mainfrom
fix/corpus-ra9-i10-source-and-remediate

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Applies the evidence-forced half of the RA-9 extend-or-cite pass to instruction-audit catalog row I10 (reasoning-echo). claude-config 0.17.0 -> 0.18.0; criteria.md 1.4.0 -> 1.5.0.

What this does NOT do, and why that is the point

I10 keeps Model scope: fable-5. It is not promoted, and mythos-5 is not added.

The campaign triage ranked this promotion its #1 item, on the theory that the extended-thinking platform page is a second, model-independent source that would satisfy I10's promotion gate. It is not, and the page's own structure is what settles it:

  • :874 — the H2 reads "Thinking output on Claude Fable 5 and Claude Mythos 5"
  • :876 — names both models for the adjacent raw-chain-of-thought property
  • :887 — names only Claude Fable 5 for stop_details.category: "reasoning_extraction"

Eleven lines apart, in one section. The page had a sentence-adjacent opportunity to widen the refusal and declined it. That is deliberate scoping, not loose phrasing. Adding mythos-5 would fabricate scope from a claim about a different property — exactly what the catalog's own model-scoping block warns against.

That reasoning is now recorded in the row itself, so it is not re-litigated a fourth time.

What it does

  • A corroborating second Source — the extended-thinking page, independent of the Fable 5 model guide already cited.
  • A concretized Remediate line. It previously said, abstractly, to read structured thinking blocks or use a send-to-user tool. It now names the actual surfaces: Ctrl+O verbose mode and showThinkingSummaries: true, and display: "summarized".

Each surface is attributed to the page that actually states it. The pass this work came from asserted all three were on the thinking page; two of them are not — Ctrl+O and showThinkingSummaries are stated at model-config:532, and only display: "summarized" is on the thinking page. Both pages are therefore added to ## Sources, because criteria.md carries its own invariant that "the trigger set is the source set — naming a subset would leave the harness-behavior rows depending on pages nothing watches."

Verification

Independently verified by a second model, with the implementer's rationale withheld. Both pages re-fetched raw (model-config.md 83,644 bytes; thinking.md 52,769 bytes, byte-identical to the frozen snapshot), all three surface names confirmed verbatim, and the promotion-gate facts re-confirmed at both snapshot and live bytes.

Self-fire check. Because a catalog row that fires on this repo would break the campaign's own rule against shipping a consumer check we fail: the scanner was run against both trees. I10 candidates in criteria.md go 2 -> 4, and all four are inert — criteria.md is a skill reference file, outside the audited population (CLAUDE.md / rules/ / skills/ / agents/ / output-styles/ under the user and project roots). No new class of self-hit is introduced.

Detection is untouched: instruction-scan.test.sh reports 46/46, and this edit changes Source and Remediate only.

Held back deliberately

The I8-b promotion, whose gate genuinely IS met by verbatim two-guide convergence, is not here. Promoting it makes the row fire on this repo's own plugins/review/context/severity.md — the same work as triage row RA-2, an open owner decision. Shipping the promotion first would make the next audit run flag this repository.

No linked issue

Related

…n surfaces

The RA-9 extend-or-cite pass adjudicated whether the Thinking page promotes
I10 (reasoning-echo directives) out of `Model scope: fable-5`. It does not,
and the row now carries the reason so the question is not re-litigated: the
page's own section names both Claude Fable 5 and Claude Mythos 5 for the
adjacent raw-chain-of-thought property (source :876), then names Fable 5
alone for the `reasoning_extraction` refusal (source :887). A
sentence-adjacent chance to widen, declined — the narrower scope is
deliberate, so the promotion gate stays unmet and `mythos-5` is deliberately
not added.

What the page does give I10 is a second, independent citation for the same
Fable-5-scoped claim, from a feature page rather than a model guide, and the
concrete surfaces its Remediate line only gestured at.

One correction to the pass's own framing: the Thinking page does NOT name the
Claude Code surfaces. `Ctrl+O` verbose mode and `showThinkingSummaries: true`
are stated on the model configuration page
(<https://code.claude.com/docs/en/model-config>); only `display: "summarized"`
comes from Thinking. Both pages are therefore added to the catalog's
`## Sources` list, because the Recheck-triggers block makes the trigger set
the source set and a cited page nothing watches would leave the row depending
on an unwatched source.

Verified: live raw-markdown fetches of both pages (thinking.md 52769 bytes,
byte-identical to the 2026-07-30 snapshot; model-config.md 83644 bytes), both
quoted strings matched against source bytes, and `instruction-scan.test.sh`
green at 46/46 — detection is untouched, only Source and Remediate change.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@claude

claude Bot commented Aug 2, 2026

Copy link
Copy Markdown

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


Claude Code review complete

  • Gather context (read diff, CLAUDE.md, REVIEW.md)
  • Review criteria.md change (I10 corroboration + remediation concretization)
  • Review CHANGELOG.md and plugin.json version bump
  • Post findings

This is a docs-only change to plugins/claude-config (criteria.md 1.4.0 → 1.5.0, plugin 0.17.0 → 0.18.0). REVIEW.md's code-review lane checks (audit-log-on-security-action, multi-write atomicity) don't apply — no code path, no state writes. I focused on correctness and internal consistency instead.

Findings: none blocking. Everything I could verify checks out:

  • Model-scoping consistency. The new I10 corroboration text (criteria.md:311-318) correctly declines to promote Model scope: fable-5 to fleet-wide, per the gate defined in the file's own "Model scoping" block (criteria.md:36-38: promotion requires a model-agnostic doc or multiple guides converging on the same claim). A second page restating the same Fable-5-scoped refusal is corroboration, not convergence toward a broader scope — the row's reasoning is internally consistent with the rule it's applying.
  • Self-fire claim verified. I ran the actual I10_ERE pattern from instruction-scan.sh:99-100 against the new criteria.md and got 4 matches (lines 84, 311, 315, 317) vs. presumably 2 before — matches the PR body's "2 → 4, all inert" claim. I also confirmed via SKILL.md:74-76 and SKILL.md:119-125 that Phase A's inventory is scoped to .claude/skills/ (user/project-local), not plugins/*/skills/* — so criteria.md, living under the plugin's own installed tree, is genuinely outside the audited population as claimed, not just asserted.
  • No stale cross-references. Grepped the repo for the old Remediate wording ("send-to-user tool", "structured thinking blocks") — only the file itself and its own CHANGELOG entry match, so nothing else quotes the pre-edit line verbatim.
  • evals.json has no I10 case whose expected remediation text this would break.
  • Formatting/line-wrap of the new lines is consistent with the rest of the file (no new violations of the file's own soft line-length convention).
  • marketplace.json doesn't duplicate the plugin version, so no companion update was needed there.
  • CHANGELOG entry follows the existing Keep-a-Changelog style used by prior entries (no date in the version header, matches ## [0.17.0] above it).

One thing I could not verify: the PR's "Verification" section claims a second-model pass re-fetched both source pages raw and confirmed the quoted strings byte-for-byte. I don't have network access to independently re-fetch platform.claude.com/.../thinking or code.claude.com/docs/en/model-config from this review lane, so I'm relying on the PR's stated verification for the live-text match rather than confirming it myself. Everything internal to the repo (gate logic, self-fire count, cross-references) checks out independently.

I also couldn't run instruction-scan.test.sh directly (no shell execution permission in this lane) to confirm the stated 46/46 — the pre-scan pattern match I ran by hand supports the "2 → 4" self-fire claim, but I didn't execute the full test suite. If you want that independently re-run, either grant broader Bash permissions to this lane or point CI's output at me.

@claude

claude Bot commented Aug 2, 2026

Copy link
Copy Markdown

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


Security Review — Complete

  • Gather context (gh pr diff, read changed files)
  • Review plugins/claude-config/.claude-plugin/plugin.json
  • Review plugins/claude-config/CHANGELOG.md
  • Review plugins/claude-config/skills/audit-instructions/reference/criteria.md
  • Post findings

No security issues found.

This PR is a pure documentation/reference-data change to the claude-config plugin's audit-instructions skill:

  • plugin.json — version bump only (0.17.00.18.0), no manifest field or permission changes.
  • CHANGELOG.md — prose changelog entry, no executable content.
  • skills/audit-instructions/reference/criteria.md — adds two new documentation source URLs (platform.claude.com/docs/en/build-with-claude/thinking, code.claude.com/docs/en/model-config) and expands the I10 row's Remediate/Source prose.

Specific checks performed (all clean):

  • Domain trust: both new source URLs point to platform.claude.com / code.claude.com, domains already cited elsewhere in the same file — no typosquat or off-brand host introduced.
  • Steganographic/prompt-injection markup: diffed the changed hunks for zero-width, bidirectional-override, and other invisible Unicode control characters (U+200BU+200F, U+202AU+202E, U+2060U+2064, U+FEFF) — none present. The only non-ASCII characters are ordinary em-dashes and arrows consistent with the file's existing style.
  • No code execution surface: criteria.md is inert reference prose consumed by the audit skill as advisory text, not executed as code, and this PR touches no hooks, scripts, MCP config, or .github/workflows files.
  • No permission/trust-boundary change: no allowed-tools, permissions, hook wiring, or component list changed anywhere in the diff.

Nothing in scope for this security-focused lane (no injection surfaces, no auth/access-control logic, no secret handling, no CI/workflow changes).

@github-actions

github-actions Bot commented Aug 2, 2026

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.

@kyle-sexton
kyle-sexton merged commit 31ef76d into main Aug 2, 2026
32 checks passed
@kyle-sexton
kyle-sexton deleted the fix/corpus-ra9-i10-source-and-remediate branch August 2, 2026 23:11
kyle-sexton added a commit that referenced this pull request Aug 3, 2026
…y.md enumerable tier criteria (#1881)

Promotes instruction-audit catalog row **I8-b** (conservative-reporting
detection) to unscoped and gives `plugins/review/context/severity.md`
enumerable tier criteria. `claude-config` 0.18.0 -> 0.19.0; `review`
0.15.5 -> 0.16.0; `criteria.md` 1.5.0 -> 1.6.0.

## The promotion

I8-b's gate is MET on its second arm (multiple model guides converge):
the Sonnet 5 prompting guide states all three trigger phrases verbatim
in one sentence (`source.md:140`, "Code review harnesses"), converging
with the Opus 5 guide. Annotated in row I7's met-gate precedent form;
the Sonnet 5 guide URL added to `## Sources` per the
trigger-set-is-the-source-set invariant.

**Source attribution corrected while citing:** "don't nitpick" appears
nowhere in the Opus 5 guide (`grep -cin nitpick` -> 0); that guide
states only the other two phrases (its line 20). The Sonnet 5 guide is
the phrase's only cited home. This strengthens the convergence gate —
three phrases now each attributed to a page that actually contains them.

## #1880's "Held back deliberately" premise was wrong

That PR deferred this promotion because unscoping I8-b would allegedly
make it fire on `severity.md`. It does not, on three independently
verified grounds:

1. **Zero scanner candidates** — the real scanner over `severity.md`
emits one I6 row and no I8-b; the I8-b ERE greps 0 on both trees.
2. **I8-b's own carve-out** (`criteria.md:252-255`) excludes
"severity-based routing where everything is still reported somewhere" —
severity.md classifies findings and withholds none.
3. **Outside the audited population** — SKILL.md Phase A inventories
CLAUDE.md / rules/ / skills/ / agents/ / output-styles/ under user and
project roots plus hook text; `plugins/review/context/` is none of those
(same result #1880 recorded for `criteria.md` itself).

The promotion could have shipped alone. The severity.md work ships here
anyway, **re-founded on its own source**: nine lines below the
three-phrase line, the same Sonnet 5 guide says to "be concrete about
where the bar is rather than using qualitative terms like `important`"
(`source.md:150`) — and `important` is one of severity.md's own tier
names. That is triage row RA-2, a distinct claim from the one I8-b
cites.

## The severity rewrite

Each tier now carries a decidable test instead of a qualitative label;
no finding changes tier. Guards added where the criterion-stating change
could have silently re-tiered:

- The P1-P5 fold explicitly takes precedence for P-scored findings
(otherwise every P3 security finding would have read into the new
CRITICAL test).
- CRITICAL's subsequent-change limb reads "otherwise-correct change", so
cascade architecture violations (break a *correct* future change) stay
CRITICAL while code duplication (bites only through an *incomplete*
future edit) stays IMPORTANT. All eleven tier examples adjudicated
against the new tests — twice, independently.

## Verification

Independently verified by a second model with the implementer's
rationale withheld, across two rounds. Scanner counts replayed from git
refs both rounds: origin/main 23 rows / 6 files, all fenced; working
tree 28 / 7, every addition this branch's own quoting. Planted-positive
check: a constructed three-phrase file emitted I8-b on all three lines
in the same invocation where severity.md emitted zero.
Scanner-vs-git-grep equivalence proven on identical row sets.
`instruction-scan.test.sh` 46/46; markdownlint 0 errors.

**Known citation defect in an immutable commit message:** `3603c8a9b8`
says "eight lines later (`source.md:149`)". Both figures are wrong — the
correct citation is `source.md:150`, ten lines after the three-phrase
line at `source.md:140`. No tracked file carries the wrong number;
recorded here rather than rewriting pushed history.

No linked issue

## Related

- Phase 3b of the doc-corpus campaign; Phase 3a merged in #1875, #1876,
#1877, #1878, #1879, #1880.
- Reverses #1880's "Held back deliberately" reasoning with evidence
(above).
- Triage rows: RA-2 (severity criteria), RA-9/Q6 (I8-b promotion), owner
decision Q9 (bundling).

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.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