Skip to content

feat(plugins): align instruction surfaces with the current prompting guide and add the posture-audit lane - #2018

Merged
kyle-sexton merged 8 commits into
mainfrom
feat/prompting-guide-alignment
Aug 9, 2026
Merged

feat(plugins): align instruction surfaces with the current prompting guide and add the posture-audit lane#2018
kyle-sexton merged 8 commits into
mainfrom
feat/prompting-guide-alignment

Conversation

@kyle-sexton

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

Copy link
Copy Markdown
Contributor

Summary

Aligns the marketplace's prompt-bearing surfaces with the current official prompting guide
(best-practices page + the Fable 5 / Sonnet 5 / Opus 5 / Opus 4.8 subpages, all fetched
2026-08-08), and ships the tooling downstream consumers need to run the same alignment on their
own repos. Rebased over — and reconciled with — the parallel alignment PRs #2000 (Fable 5) and
#2015 (Sonnet 5): where those landed the same catalog change first (Opus 4.8 in Sources, I8-e
unscoping, a sampling-parameter row), this PR keeps main's version and contributes only what
remained novel.

Repo alignment (audit → adversarial verification → fix): every plugin's instruction surfaces
were audited against a 30-item checklist distilled from a verified 451-item inventory of the
guide; every finding was re-adjudicated by independent fresh-context verifiers before any edit.
~55 verified fixes across 21 plugins (each with a version bump and CHANGELOG entry), including:

  • machine-health: three high-severity internal contradictions — two reference files still
    described the pre-approvals.json approval model (checkbox-driven TODO.md, writes into the
    plugin install directory); plus a broken markdown fence-nesting bug in the report template and a
    wrong-schema pointer in setup
  • songwriting: "Pat's seven title types" stated three mutually inconsistent taxonomies across
    four files — reconciled to hook.md's canonical list
  • playbooks (boris): stale model/effort rows (/model/effort, missing xhigh, superseded
    model recommendations) corrected per the pack's own supersession-note conventions, verified
    against live docs
  • implementation + testing: the repo's two code-editing loops (implement's TDD cadence, diagnose's
    fix step) gained anti-test-gaming guards (guide: "Avoid focusing on passing tests and
    hardcoding")
  • ~30 instruction-style fixes (emphasis-language, missing rationale, example/structure hygiene,
    scope explicitness) and removals of forced status-cadence and fabricated context-percentage
    triggers

Downstream capability:

  • claude-config:audit-instructions criteria 1.18.0 → 1.19.0: new row I27 (over-aggressive
    trigger emphasis / blanket tool defaults — the one guide concern no parallel PR had covered);
    I8 base promoted to unscoped via the model-agnostic prefer-general-instructions statement,
    with the delegation-throttle worked instance kept fable-5-scoped (the Opus guides recommend
    the opposite shape); I21 gains the calibration-staleness-vs-level-adequacy distinction.
    instruction-scan.sh now seeds I27 (both arms) and the existing I25 sampling-parameter row.
  • New skill claude-config:audit-prompting-postures — the additive lane: detects posture guidance
    (delegation criteria, minimal-scope/anti-test-gaming guardrails, grounding, autonomy/destructive
    postures, etc.) that the guide says a component's purpose needs but the component does not
    carry; report-only, applicability-predicated, wording fetched live (pointer-not-copy)
  • docs/OFFICIAL-DOCS.md: new "Prompting doctrine (platform docs)" section indexing the guide
    pages + Thinking page, composed with feat(evals): align the marketplace with Anthropic's evaluation guidance and ship it to consumers #2014's evaluation-guidance section

Follow-ups worked to completion in this PR (originally filed as issues, then implemented here
on approval instead of being left parked):

Also swept: the rhyme skill's latent skill-relative context/pat-pattison/ mention (same defect
the CI gate caught on its seven edited siblings) is now plugin-root-relative.

Related

🤖 Generated with Claude Code

https://claude.ai/code/session_01LYm1iCn68WiKKsWbP994Co

@cursor

cursor Bot commented Aug 8, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@kyle-sexton
kyle-sexton force-pushed the feat/prompting-guide-alignment branch from 77b7a08 to 0184ebf Compare August 8, 2026 19:58
@claude

claude Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

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


Review complete

  • Gather context (PR body, diff, CLAUDE.md/AGENTS.md guidelines)
  • Review docs/OFFICIAL-DOCS.md + claude-config audit-instructions changes (criteria.md, instruction-scan.sh, new audit-prompting-postures skill)
  • Review machine-health, playbooks, songwriting content fixes
  • Review remaining per-plugin content/version/CHANGELOG changes
  • Post inline findings and summary

This is a large, mostly-prose alignment PR (100 files) with unusually high internal cross-referencing, so I focused on verifying the specific consistency claims the PR body makes (row-ID renumbering, songwriting title-type reconciliation, machine-health approval-model fixes, CHANGELOG/plugin.json version pairing) rather than re-deriving prompting-guide correctness (which requires a live fetch I can't independently perform here — I'm treating those citations as author-claimed and unverified).

Finding posted inline: plugins/claude-config/skills/audit-prompting-postures/evals/evals.json:20 cites the trigger-emphasis row as audit-instructions' I24, but the row this same PR adds in reference/criteria.md is I27 — there is no I24 row in the catalog. It's a small irony given this PR's stated purpose is eliminating exactly this class of stale cross-file reference (the Pat's-title-types and machine-health approval-model fixes it documents). Low severity (an eval's prose description, not executed logic) but worth a follow-up fix since it'll be read by whoever maintains this skill next.

Checked and consistent:

  • instruction-scan.sh's new I27-a/I27-b/I25 tags match criteria.md's I25 (pre-existing, now seeded) and new I27 row, and SKILL.md's "I6–I27" range updates are consistent throughout.
  • All 21 plugin.json version bumps pair 1:1 with a matching CHANGELOG.md ## [x.y.z] heading, in order.
  • Songwriting's "Pat's seven title types" now match the canonical list in hook.md ("One-word / Place-name / Person-name / Color-or-sensory / Comparative / Word-play / Sonic-bonding") across all four previously-inconsistent files.
  • machine-health's SKILL.md now points at references/shared/approvals.md and catalog-overlay.md, both of which already exist in the repo; the Linux/macOS NOT_IMPLEMENTED.md delegation targets the section headers they claim to point at.
  • The repeated "xhigh on Opus 4.7" phrasing in boris/SKILL.md, advanced.md, and the CHANGELOG initially looked like a stray typo for "Opus 4.8," but it's consistent with this repo's pre-existing (pre-PR) Opus-4.7-era lore in vendor/SKILL.md / reference/autonomy.md — not an error introduced here.

Note (not a code defect, so not inline): the PR body's own summary says criteria bumps to "v1.17.0" with new rows "I23" and "I24," but the shipped diff bumps criteria.md to 1.19.0 and adds only row I27 (I25 is reused, not new). The code is internally consistent — only the PR description text is stale, most likely from an earlier draft.

No architecture, error-handling, or test-coverage concerns beyond the above — this PR is prose/reference-doc alignment with one new (report-only, no---fix) skill; the new skill's scope boundaries and read-only contract look sound.

Branch: feat/prompting-guide-alignment

@claude

claude Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

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


Security review

  • Gather context (PR diff, changed files)
  • Review shell/script changes for injection risk
  • Review workflow / permission / config changes
  • Review markdown/skill content for prompt-injection or unsafe instruction patterns
  • Post final findings

Scope reviewed: the full PR diff (0184ebf^..0184ebf, 124 files, matches the PR's stated +1074/-288). Of those, only 4 are non-.md files with logic: instruction-scan.sh, observer.py, evals.json, and 21 plugin.json manifests (version/description bumps only). Everything else is prose in skill/agent/reference markdown.

No security issues found.

Details on what was checked:

  • plugins/claude-config/skills/audit-instructions/scripts/instruction-scan.sh (diff): adds two new grep-based pattern families (I27, I25) to an existing advisory scanner. All new grep calls keep "$file" quoted, no eval/sh -c introduced, patterns are static regex literals — no injection surface.
  • plugins/session-flow/skills/running-retro/scripts/observer.py (diff): only restructures the analysis sub-agent's prompt text into <tools>/<trust_boundary>/<method>/<inputs>/<task> sections; the existing untrusted-data trust-boundary language is preserved (arguably strengthened by the explicit tagging). The subprocess.run call that consumes this prompt (via stdin, argv built from a list, --tools Read/--strict-mcp-config restricted sub-session) is unchanged by this PR.
  • plugins/context-guard/skills/setup/SKILL.md and plugins/rate-limit-guard/skills/setup/SKILL.md statusline-shim quoting guidance: changed "mentally unquote it back" to an actual printf '%s\n' '<escaped>' round-trip check. This is advisory, read-only (check never writes settings.json — it prints an edit for the operator to apply by hand), and operates only on the operator's own pre-existing command string, so there's no new injection surface.
  • plugins/machine-health/... reference-doc fixes (approval-model corrections, markdown fence-nesting fix, Defender passive-mode severity re-bucketing): these tighten/clarify the documented approval chain (state/approvals.json) rather than weaken it — matches the PR's stated intent of removing stale pre-approvals.json language.
  • docs/OFFICIAL-DOCS.md and the new audit-prompting-postures skill: only reference official platform.claude.com/code.claude.com documentation URLs; no untrusted or attacker-controllable URLs introduced.
  • No .github/workflows/* files, no permissions: blocks, no MCP server configs, and no dependency/action pins are touched by this PR.

Comment thread plugins/claude-config/skills/audit-prompting-postures/evals/evals.json Outdated
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown

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

@claude

claude Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

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


Security review

  • Gather context (full PR diff via gh pr diff 2018, including the latest commit 8f66817)
  • Review instruction-scan.sh, observer.py, evals.json, plugin.json manifests for logic/injection issues
  • Review the new commit 8f66817 ("fix(ci): clear the two gates the alignment diff newly exposed") specifically
  • Review markdown/skill content for prompt-injection or unsafe instruction patterns
  • Post final findings

Scope reviewed: the full PR diff between origin/main and 8f66817 (via gh pr diff 2018), which now includes the additional commit 8f66817 pushed after the prior automated reviews on this PR. That commit touches only 8 markdown files with a one-line path annotation each (context/pat-pattison/${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/, plus a portability-ok comment on a git worktree add ... origin/main example) — no logic, no scripts, no security surface.

No security issues found.

Of the files with actual executable/data logic (as opposed to prose):

  • plugins/claude-config/skills/audit-instructions/scripts/instruction-scan.sh: adds two new pattern families (I27-a/b, I25) to the existing advisory grep-based scanner. All new calls keep "$file" quoted, use static regex literals, and don't introduce eval/sh -c/command substitution — no injection surface.
  • plugins/session-flow/skills/running-retro/scripts/observer.py (L828-946): purely restructures the analysis sub-agent's prompt text into <tools>/<trust_boundary>/<method>/<inputs>/<task> tags. The existing untrusted-data trust-boundary language for observations is preserved verbatim (if anything strengthened by the explicit tagging). This is the entire diff for the file (+16/-6); the subprocess.run call that consumes this prompt elsewhere is untouched by this PR.
  • 21 plugin.json manifests: diffs are limited strictly to version and description string fields — confirmed via diff-grep that no other keys (permissions, hooks, MCP config) were added or changed.
  • plugins/claude-config/skills/audit-prompting-postures/evals/evals.json (new file): static eval fixture data only; the stale I24I27 cross-reference already flagged in a prior review comment is a content/consistency issue, not a security one.
  • No .github/workflows/* files are touched by this PR. (A local git diff origin/main HEAD transiently showed an unrelated change to .github/recurring-schedule.json, but that's a shallow-clone/stale-ref artifact on my end — confirmed absent from the actual gh pr diff 2018 output, so it is not part of this PR.)
  • No secrets, credentials, or attacker-controllable URLs are introduced; new documentation links point only to platform.claude.com/code.claude.com.

This PR remains almost entirely prose/reference-doc alignment across skill and agent markdown files, which carries no direct security surface on its own (no new tool grants, no changed trust boundaries, no new external data ingestion).
· Branch: feat/prompting-guide-alignment

@claude

claude Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

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


Code review complete

  • Gather context (PR diff since last review, CLAUDE.md/AGENTS.md guidelines)
  • Identify what changed in the new commit(s) since the last review
  • Review new/changed content for correctness and internal consistency
  • Post inline findings and summary

This review covers what changed since the previous automated review: commit 8f66817 ("fix(ci): clear the two gates the alignment diff newly exposed"), pushed after that review, plus a check on whether the previously-flagged finding was addressed.

New commit (8f66817) — verified correct:

  • The 7 songwriting SKILL.md Purpose-section edits (co-write, diagnose, meter-prosody, object-writing, practice, song-form, workflow) change a bare `context/pat-pattison/` backtick reference to `${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/`. I confirmed this is a real, pre-existing bug (the line predates this PR — same text is on origin/main) and the fix is correct: plugins/skill-quality/scripts/check-skill.sh's check‑5 resolves bare backtick context/... refs relative to the skill's own directory, but context/pat-pattison/ lives at the plugin root, not under each skill dir, so the bare form was always broken. The new form matches the pattern the rhyme skill's own datamuse.sh reference already used (plugins/songwriting/skills/rhyme/SKILL.md:37).
  • The plugins/playbooks/skills/boris/reference/foundations.md portability-ok: annotation on the git worktree add ... origin/main example line correctly follows the convention documented in docs/PLUGIN-PHILOSOPHY.md (~line 170) and matches scripts/check-skill-portability.sh's origin/(main|master) active token plus its same-line portability-ok: recognition (is_annotated).

New finding — incomplete fix (not inline-commentable; the affected line is unchanged by this PR):

The commit fixes 7 sibling SKILL.md files but misses an 8th file with the identical bug: plugins/songwriting/skills/rhyme/SKILL.md:24 still reads:

Method content is Pat Pattison's, under `context/pat-pattison/`. A future author's rhyme method

Method content is Pat Pattison's, under `context/pat-pattison/`. A future author's rhyme method

This is the same skill-relative-vs-plugin-root mismatch the fix commit addresses elsewhere, and ironically rhyme/SKILL.md is the very file cited (line 37) as the precedent pattern for the correct ${CLAUDE_PLUGIN_ROOT}/... form. If check‑5 is what the fix commit's message means by "the two gates," this occurrence should still trip it. Recommend applying the same edit here: `${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/`.

Still outstanding from the prior review: the plugins/claude-config/skills/audit-prompting-postures/evals/evals.json:20 finding (expected_output cites "I24," the correct row added by this PR is "I27") has not been addressed in the new commit — carrying it forward as still open.

No other correctness or CLAUDE.md-alignment issues found in the new commit; it's a narrowly-scoped, well-justified fix consistent with repo conventions.

Branch: feat/prompting-guide-alignment

@kyle-sexton
kyle-sexton force-pushed the feat/prompting-guide-alignment branch from ad36ddf to 3a3d22d Compare August 8, 2026 21:34
@claude

claude Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

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


Code review complete

  • Gather context (PR diff since last review, CLAUDE.md/AGENTS.md guidelines)
  • Identify what changed in the new commit(s) since the last review
  • Review new/changed content for correctness and internal consistency
  • Post inline findings and summary

What's new since the last code-review pass: nothing functional. The two commits added since (85218bd, 3a3d22d) are both empty chore: retrigger ci commits (no file changes — confirmed via git diff 3756277..3a3d22d --stat, empty output). The content commit already reviewed under SHA 8f66817 is present here as 3756277 with an identical diff.

Additional coverage this pass: the prior reviews' file lists were truncated before a few files that are genuinely part of this PR's diff (git diff origin/main...HEAD shows 124 files, not the 100 previously enumerated). I read the un-reviewed remainder — plugins/source-control/skills/pull-request/reference/{monitor,prep}.md, plugins/testing/skills/{diagnose/context/loop,run-e2e/SKILL,run-e2e/context/e2e}.md, plugins/verification/skills/confirm/{SKILL,context/outcome,context/refactor}.md, plugins/songwriting/skills/suno/SKILL.md, and plugins/songwriting/context/pat-pattison/templates/{idea-to-title-prompt,title-game-prompt}.md. All are consistent with the PR's stated intent (de-emphasizing forced-caps trigger language per I27, the testing anti-test-gaming guard the PR body describes, and the same title-type reconciliation already verified elsewhere) — no defects found.

Still open from earlier review passes (unaddressed by the two no-op commits since):

  1. plugins/claude-config/skills/audit-prompting-postures/evals/evals.json:20 still cites "I24" where reference/criteria.md adds row I27 — the inline comment from the earlier pass on this line stands.
  2. plugins/songwriting/skills/rhyme/SKILL.md:24 still has the bare `context/pat-pattison/` reference that commit 3756277/8f66817 fixed in the other 7 sibling SKILL.md files (correct form, matching this same file's own line 37 precedent: `${CLAUDE_PLUGIN_ROOT}/context/pat-pattison/`). This line isn't part of this PR's diff, so no changed line can carry the comment — flagging it here again since it's easy to lose track of across CI-retrigger noise.

No new architecture, error-handling, or maintainability concerns. This PR remains ready modulo the two small stale-reference fixes above.
·

@claude

claude Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

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


Security review complete

  • Gather context (diff since last review, full PR diff vs origin/main)
  • Review changed files for security issues
  • Post findings

Scope reviewed: full diff origin/main...3a3d22d (124 files, +1079/-294). The two newest commits (85218bd, 3a3d22d, both titled "chore: retrigger ci") are empty — no file changes — so this diff is identical in content to what prior automated reviews on this PR already covered at 0184ebf/8f66817. I re-verified rather than assuming the prior clean verdicts still held.

No security issues found.

Confirmed during this pass:

  • No .github/workflows/* files are touched by this PR — no permissions: changes, no trigger changes, nothing in zizmor's lane to defer to or duplicate.
  • plugins/claude-config/skills/audit-instructions/scripts/instruction-scan.sh (current version): the diff since the last review only adds more static grep -niE/grep -nE pattern families (now labeled I28-a/I28-b/I25, renumbered from the previously-reviewed I27-a/I27-b — a content/versioning detail, not a security one). Every new call keeps "$file" quoted, uses literal regex constants, and introduces no eval, sh -c, or command substitution. Same conclusion as prior reviews: no injection surface.
  • plugins/session-flow/skills/running-retro/scripts/observer.py (L828-946): unchanged since the last review — still just adds <tools>/<trust_boundary>/<method>/<inputs>/<task> XML-style tags around the analysis sub-agent's prompt text. The untrusted-data trust-boundary language for observations is preserved verbatim. No change to the subprocess.run call or argv construction that consumes this prompt.
  • plugins/context-guard/skills/setup/SKILL.md and plugins/rate-limit-guard/skills/setup/SKILL.md: the statusline-shim quoting-verification step now tells the operator to run printf '%s\n' '<escaped>' instead of "mentally unquote." This is advisory prose for a human-reviewed settings.json edit (the check action is read-only and never writes settings.json itself); it operates only on the operator's own pre-existing command string, so it introduces no new injection surface.
  • 21 plugin.json diffs: confirmed via diff-grep that every one is limited to the version and description string fields — no permissions, hooks, mcpServers, or other contract fields touched.
  • docs/OFFICIAL-DOCS.md / docs/CATALOG.md: new/changed rows all point to platform.claude.com official documentation URLs — no attacker-controllable or third-party links introduced.
  • Everything else in the diff (the remaining ~95 files) is skill/agent/reference Markdown prose — no code execution, no credential handling, no new tool grants.

This PR carries no direct security surface: it's prompting-guide alignment content plus one new report-only, no---fix, read-only skill (audit-prompting-postures).
· Branch: feat/prompting-guide-alignment

@claude

claude Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

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


Security review complete

  • Gather context (PR body, prior review history, CLAUDE.md/AGENTS.md guidelines)
  • Diff since last reviewed SHA (3a3d22d5f549a5)
  • Review changed files for security issues
  • Post final findings

No security issues found.

Scope of this pass: the only change since the last security review (at 3a3d22d) is commit 5f549a5 — a single-line addition to docs/SKILL-CHEAT-SHEET.md adding the new audit-prompting-postures skill to the reference table. No logic, scripts, workflows, or config are touched.

Full PR diff vs origin/main remains 125 files, +1080/-294 (confirmed via git diff origin/main...HEAD --stat), consistent with what's already been covered across four prior automated security passes on this PR:

  • No .github/workflows/* files are touched by this PR — no permissions: changes, no trigger changes.
  • plugins/claude-config/skills/audit-instructions/scripts/instruction-scan.sh: static grep-based pattern additions only, all "$file" quoted, no eval/sh -c/command substitution.
  • plugins/session-flow/skills/running-retro/scripts/observer.py: prompt-text restructuring only, untrusted-data trust-boundary language preserved, subprocess.run argv construction untouched.
  • 21 plugin.json diffs limited strictly to version/description fields.
  • New audit-prompting-postures skill is report-only and read-only (no --fix mode).
  • No secrets, credentials, or attacker-controllable URLs introduced; documentation links point only to platform.claude.com/code.claude.com.

This PR carries no direct security surface — it remains prompting-guide alignment content plus one new report-only skill and a doc-index update.

Branch: feat/prompting-guide-alignment

@claude

claude Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

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


Code review complete

  • Gather context (diff since last review, CLAUDE.md/AGENTS.md guidelines)
  • Identify what changed in the new commit(s) since the last review
  • Review new/changed content for correctness and internal consistency
  • Post inline findings and summary

What's new since the last review pass: one commit, 5f549a5 ("fix(docs): regenerate the skill cheat sheet for the audit-prompting-postures row") — a single-line addition to docs/SKILL-CHEAT-SHEET.md adding the /claude-config:audit-prompting-postures row. Verified: alphabetically ordered correctly (between audit-permission-grants and unhobble), and its one-line description is a faithful paraphrase of the skill's own frontmatter description in plugins/claude-config/skills/audit-prompting-postures/SKILL.md. No issues with this commit itself.

New finding — stale skill count in the plugin's own README (not touched by this PR):

While checking that the new skill's cross-references were fully propagated (this PR's own stated purpose), I found one the PR missed. docs/CATALOG.md and plugins/claude-config/.claude-plugin/plugin.json were both correctly updated from "Six configuration-health skills" to "Seven configuration-health skills" earlier in this PR (commit 91c2142), and now docs/SKILL-CHEAT-SHEET.md has the new row too — but plugins/claude-config/README.md, the plugin's own primary documentation, was never updated:

  • plugins/claude-config/README.md#L3 still reads "A Claude Code plugin bundling six configuration-health skills" (stale — should be "seven").
  • The "What each skill does" table at plugins/claude-config/README.md#L7-L14 has no row for audit-prompting-postures, and there's no ### audit-prompting-postures subsection under "What each skill does" (the other five audit skills each get one, e.g. ### audit-pass at line 98).

This is exactly the class of stale cross-reference this PR's own description calls out fixing elsewhere (Pat's title types, machine-health's approval model, etc.) — it just wasn't caught here because README.md isn't part of this PR's diff at all. Low severity (README is consumer-facing documentation, not a contract surface), but worth a follow-up commit since the plugin now under-documents its newest skill to anyone reading the README first.

No other issues. This commit is a minimal, correct, mechanical documentation-index update consistent with the rest of the PR.

Branch: feat/prompting-guide-alignment

kyle-sexton and others added 7 commits August 8, 2026 20:08
…guide and add the posture-audit lane

Audit of every plugin's prompt-bearing surfaces against a verified 451-item
inventory of the official prompting guide (best-practices page + Fable 5 /
Sonnet 5 / Opus 5 / Opus 4.8 subpages, fetched 2026-08-08), with every finding
re-adjudicated by independent fresh-context verifiers before edit. ~55 verified
fixes across 21 plugins, each with a version bump and CHANGELOG entry.

Downstream capability: audit-instructions criteria v1.17.0 (Opus 4.8 joins
Sources; I8-e and I8 base promoted per the now-met promotion gates; new rows
I23 over-aggressive trigger emphasis / blanket defaults and I24 retired
sampling parameters, seeded in the pre-scan), plus the new
claude-config:audit-prompting-postures skill — the additive lane detecting
posture guidance a component's purpose needs but does not carry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYm1iCn68WiKKsWbP994Co
The seven edited songwriting SKILL.md files carried a pre-existing backticked
`context/pat-pattison/` directory mention that check-5 resolves skill-relative;
now written plugin-root-relative (`${CLAUDE_PLUGIN_ROOT}/…`), matching the
rhyme skill's own datamuse precedent. The boris foundations worktree example
carries a portability-ok annotation: it names the example's own base branch
verbatim, not a branch default this repo assumes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYm1iCn68WiKKsWbP994Co
The ci workflow never registered a run for 9ffeb5e (docs/CATALOG.md
regeneration); pr_request-triggered lanes need a fresh head event.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYm1iCn68WiKKsWbP994Co
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYm1iCn68WiKKsWbP994Co
…ostures row

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYm1iCn68WiKKsWbP994Co
…ups to completion

Managed-settings coverage lands in the audit skill (issue #2026): Phase 1's
check-structure.sh resolves the OS-specific machine-scope path and drop-in
directory and reports them structure-only, and the checklist tick returns,
now truthful. The audit-pass run contract splits into five per-topic
reference files behind a routing index with the section numbering preserved
and inbound links repointed (issue #2027). course-digest's two inconsistent
self-estimated context-percentage handoff triggers become one qualitative
signal set with the resume protocol untouched (issue #2028). The rhyme
skill's latent skill-relative pat-pattison mention goes plugin-root-relative,
completing the eight-file sweep.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYm1iCn68WiKKsWbP994Co
…es after the 0.7.0 reconciliation

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYm1iCn68WiKKsWbP994Co
@kyle-sexton
kyle-sexton force-pushed the feat/prompting-guide-alignment branch from 26ca55b to ce354c3 Compare August 9, 2026 00:13
@claude

claude Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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


Security review complete

  • Gather context (diff since last reviewed SHA, full PR diff)
  • Review changed files for security issues
  • Post final findings

No security issues found.

Scope of this pass: everything new since the last automated security review on this PR (at 5f549a5/3a3d22d) — commits 9b57f8f086f5dcce354c3 (local history; equivalent to what's on the PR head now). Two commits carry actual content:

  • 086f5dc ("work the alignment follow-ups to completion") — the only file with new logic is plugins/claude-config/skills/audit/scripts/check-structure.sh, which adds OS-resolved managed-settings (machine-scope) path detection and reporting (closing claude-config audit: add real managed-settings coverage to Phase 1 #2026). Reviewed in full:
    • The $OSTYPE case switch (L56-70) only builds static path strings (with ${PROGRAMFILES:-...} substitution on Windows) — no user-controlled input reaches this construction, and the resulting $MANAGED/$MANAGED_DROPIN values are always double-quoted at every use site ([[ -f "$path" ]], <"$path", [[ -d "$MANAGED_DROPIN" ]], the glob "$MANAGED_DROPIN"/*.json).
    • The new managed branch of emit_file_facts (L146-155) reuses the same secret-safe posture as the existing local/settings branches: it reports only jq-derived key/entry counts (deny/ask/allow/hooks/env), never field values or file contents — consistent with the script's stated "never prints env values or secret field contents" contract and with the pre-existing : <"$path" open-only-probe pattern used to keep credentials out of set -x trace output.
    • No eval, no command substitution built from file content, no unquoted expansions — same conclusions as prior passes on this script's pre-existing code.
    • This is a read-only, structure-only report of a config layer the audit skill previously ignored; it doesn't widen what the skill can do, only what it observes and summarizes.
  • ce354c3 ("scope the songwriting changelog") — a pure CHANGELOG.md text edit, no logic.

Confirmed still true for the full PR diff (origin/main...HEAD, 126 files): no .github/workflows/* files are touched anywhere in this PR (git diff origin/main...HEAD --stat -- .github/ is empty) — no permissions, triggers, or CI config changed. All other previously-reviewed logic surfaces (instruction-scan.sh, observer.py, evals.json, the 21+ plugin.json version/description-only bumps) are unchanged since the prior passes and still carry no security surface.
· Branch: feat/prompting-guide-alignment

@claude

claude Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 4m 59s —— View job


Code review complete

  • Gather context (PR body, prior review history, CLAUDE.md/AGENTS.md guidelines)
  • Identify what changed since the last review pass (commits 086f5dc, ce354c3)
  • Check whether the two previously-flagged open findings were addressed
  • Review new/changed content for correctness and internal consistency
  • Post inline findings and final summary

What's new since the last review pass: two content commits, 086f5dc ("work the alignment follow-ups to completion" — the #2026/#2027/#2028 follow-ups) and ce354c3 ("scope the changelog...").

Rebase note (resolves a prior open finding): earlier review rounds on this PR flagged plugins/songwriting/skills/rhyme/SKILL.md:24 as still carrying a bare context/pat-pattison/ reference after 7 sibling files were fixed. That finding no longer applies — a git diff origin/main...HEAD confirms rhyme/SKILL.md and metaphor/SKILL.md are byte-identical to origin/main in this branch; the path fix already landed on main via the parallel alignment PRs this PR reconciles with (per the PR body). ce354c3 correctly drops the now-duplicate CHANGELOG bullet describing that fix rather than re-claiming it. No action needed here.

Confirmed still open (inline, carried forward again — now worse, not just stale): plugins/claude-config/skills/audit-prompting-postures/evals/evals.json:20 cites "I24" for the over-aggressive-emphasis row. The row has since been renumbered again to I28, and I24 is now a real, different row ("Instruction relying on silent generalization") — so this eval doesn't just point at a dead ID anymore, it points at the wrong live one. audit-instructions's own evals/evals.json and SKILL.md were correctly updated to I28/I6–I28 in this same diff; this one file was missed across five review passes now.

New finding (inline): plugins/claude-config/skills/audit/scripts/check-structure.sh's new managed-settings logic (OS-branch path resolution, the managed jq case, drop-in directory counting) has no test coverage in check-structure.test.sh, which is untouched by this PR. The existing fixture mechanism (SETTINGS_AUDIT_STRUCTURE_FIXTURE_DIR) also can't reach this code path as written, since MANAGED/MANAGED_DROPIN are hardcoded to real OS paths with no override.

Verified this pass, no issues:

  • plugins/claude-config/skills/audit-instructions/reference/criteria.md: version bump 1.20.01.21.0, new row I28 (not I27 — the ID shifted again since earlier review rounds), I8 base-row unscoping with the fable-5-scoped worked instance retained, and I21's calibration-staleness carve-out are all internally consistent with instruction-scan.sh's I28-a/I28-b tags and the I6–I28 range cited throughout SKILL.md.
  • audit-pass's run-contract.md split (issue claude-config audit-pass: split run-contract.md into per-topic reference files #2027): the routing index's section-ownership table matches the six extracted files; no dangling run-contract.md#... anchor references found anywhere in plugins/.
  • check-structure.sh's new managed-settings block itself (logic, not tests): the $OSTYPE branches are correct (darwin/msys+cygwin/default), the drop-in suffix-strip-and-append is correct including the space-containing macOS path, and it follows the file's existing "structure only, never echo values" convention consistently with the local/settings cases.
  • plugins/claude-config/skills/audit/SKILL.md's new Phase 4 report table example row ("bug #8961") is a legitimate worked example — #8961 is an existing, well-established reference used consistently across known-issues.md, audit-checklist.md, validation-categories.md, and procedures.md, not something invented for this row.
  • plugins/claude-config version 0.27.0 pairs correctly with its CHANGELOG.md heading.

Still outstanding from the previous review round (unchanged by 086f5dc/ce354c3, no line in this PR's diff to anchor it to): plugins/claude-config/README.md still says "six configuration-health skills" (L3) and its skill table has no audit-prompting-postures row/subsection, even though docs/CATALOG.md, plugin.json, and docs/SKILL-CHEAT-SHEET.md were all updated. Flagging again since it's easy to lose under CI-retrigger noise, but this is consumer-facing README drift, not a contract-surface defect.

No other architecture, error-handling, or maintainability concerns found in the new commits.
· Branch: feat/prompting-guide-alignment

Comment thread plugins/claude-config/skills/audit-prompting-postures/evals/evals.json Outdated
Comment thread plugins/claude-config/skills/audit/scripts/check-structure.sh
@kyle-sexton
kyle-sexton enabled auto-merge (squash) August 9, 2026 00:43
The postures eval's routing example now names I28 — the row this branch
actually adds after the parallel-lane renumbering — and the managed-settings
structure logic gains test coverage: an env-var path seam (the real locations
are absolute system paths a fixture cannot reach), a present case asserting
counts without leaking key names or values, a drop-in count, and an absent
case that never fails the run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYm1iCn68WiKKsWbP994Co
@claude

claude Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

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


Security review complete

  • Gather context (PR diff, prior review history)
  • Identify what's new since the last security review pass (at ce354c3)
  • Review new commit for security issues
  • Post final findings

No security issues found.

Scope of this pass: the single commit added since the last automated security review — 01af663 ("fix(claude-config): address the two open review threads"), which resolves the two previously-flagged findings from the code-review lane (the stale I24I28 cross-reference in evals.json, and missing test coverage for check-structure.sh's managed-settings branch). Three files changed, +56/-13.

Reviewed in detail:

  • plugins/claude-config/skills/audit/scripts/check-structure.sh — adds a SETTINGS_AUDIT_MANAGED_PATH test seam so the managed-settings path can be overridden, mirroring the pre-existing SETTINGS_AUDIT_STRUCTURE_FIXTURE_DIR pattern. It's read-only, only meaningful when the test harness itself sets it (nothing in this repo's CI wiring or any workflow sources it from untrusted input), and the resulting $MANAGED/$MANAGED_DROPIN values remain double-quoted at every use site ([[ -f "$path" ]], <"$path", [[ -d "$MANAGED_DROPIN" ]], the "$MANAGED_DROPIN"/*.json glob guarded by [[ -f "$f" ]]). No injection surface, no widening of what the script reads or reports.
  • plugins/claude-config/skills/audit/scripts/check-structure.test.sh — the new fixtures (case 7/8) plant a fake secret ("ORG_SECRET":"hunter2") in a managed-settings fixture and assert it never appears in the script's output (assert_not_contains ... "hunter2" / "ORG_SECRET"). This is a positive addition — it locks in the "structure only, never echo values" contract for the new managed branch rather than just adding line coverage.
  • plugins/claude-config/skills/audit-prompting-postures/evals/evals.json — pure expected_output string fix (I24 → I28), no logic or executable content.

Consistent with all five prior security passes on this PR: no .github/workflows/* files are touched anywhere in this PR, no permissions:/trigger changes, no new secrets/credentials/attacker-controllable URLs, and the only other logic-bearing files in the full diff (instruction-scan.sh, observer.py, 21+ plugin.json version/description bumps) are unchanged since those earlier reviews.

This PR carries no security surface — prompting-guide-alignment content plus one new report-only skill, and this final commit is a clean, narrowly-scoped fix for the two review threads that were still open.
· Branch: feat/prompting-guide-alignment

@kyle-sexton
kyle-sexton merged commit 86406fb into main Aug 9, 2026
33 checks passed
@kyle-sexton
kyle-sexton deleted the feat/prompting-guide-alignment branch August 9, 2026 00:50
kyle-sexton added a commit that referenced this pull request Aug 9, 2026
Main absorbed PR #2018, which released claude-memory 0.5.8 with different
content. This PR's entry moves from 0.5.8 to 0.5.9, above main's 0.5.8
entry; plugin.json follows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HbtPzLRe1yBavNpsmv5Tum
kyle-sexton added a commit that referenced this pull request Aug 9, 2026
… 0.11.3

Main's discovery 0.11.2 (fan-out N cap) landed under the same version this
branch claimed, so this branch's researcher-routing entry moves to 0.11.3
above it. research-deep's multi-topic paragraph now carries both sides:
discovery:researcher dispatch with the full envelope AND the roughly-a-dozen
N cap. plugin.json bumped to 0.11.3.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HbtPzLRe1yBavNpsmv5Tum
kyle-sexton added a commit that referenced this pull request Aug 9, 2026
Composed both sides: main's prompting-guide alignment (#2018, seven-skill
description, eval 2 I27->I28) and this PR's eval-16 row-lookup rewrite.
CHANGELOG entry retitled [0.26.1] -> [0.27.1] above main's [0.27.0].

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HbtPzLRe1yBavNpsmv5Tum
kyle-sexton added a commit that referenced this pull request Aug 9, 2026
…ateless reference (#2040)

No linked issue

This fixes one row of the audit issue cited under `## Related`; that
issue stays open for its
remaining rows, so no closing keyword.

## Summary

`plugins/claude-memory/skills/stateless/reference/official-guidance.md`
carried attributed
blockquotes whose text is not on the cited pages. This is a re-quoting
pass against the live
`code.claude.com/docs/en/settings.md` and
`code.claude.com/docs/en/claude-directory.md`, fetched
2026-08-08.

**Fixed — the flagged precedence quote.** Item 1 read `1. **Managed
settings** (…)`. A bare
ellipsis stood inside quote marks where real page words belong. It now
reads
`1. **Managed settings** (server-managed, MDM/OS-level policies, or
managed settings)`, and the
attribution note records the two normalizations: the three parenthetical
links are flattened to
their labels (the file's existing convention for every other quote), and
each item's nested detail
bullets are omitted.

**Fixed — an unflagged truncation that inverted a claim.** The adjacent
quote read `"Cannot be
overridden by any other level, including command line arguments"`. The
live sentence continues
`, apart from the exceptions in the bullets below`. Truncating there
turned a qualified statement
into an absolute one. The full sentence is restored. The conclusion the
skill actually needs is
carried by prose stating a verified negative — none of item 1's
exception bullets names
`autoMemoryEnabled`, `CLAUDE_CODE_DISABLE_AUTO_MEMORY`, or auto memory
at all, so no ordinary lower
scope overrides a managed auto-memory value. Deliberately not an
enumeration of the exception set:
that set is long and varied (a within-managed-tier source ranking, an
SDK-embedder merge path,
several admin-source key exceptions), and summarizing it here would be
the same defect class in the
opposite direction. Readers go to the page for it.

**Fixed — a sentence upstream has deleted.** The `claude project purge`
quote asserted `"The
command requires Claude Code v2.1.124 or later."` claude-directory no
longer carries that sentence
and cli-reference never did. It is out of the quote, and the note beside
it labels the retained
`v2.1.124+` floor a claim with no current upstream source. That label is
added once, in this file;
`SKILL.md` and `context/purge.md` still state the floor unqualified and
are deliberately untouched
— sweeping a version claim across the plugin is not this row's scope,
and the docs dropping the
sentence does not disprove the floor.

**Unchanged — two of the three flagged quotes were already verbatim.**
The `env` sentence and the
`cleanupPeriodDays` description were compared character-for-character
against the live page and
match exactly (modulo the same link flattening). Their wording is
untouched. Manufacturing edits
to satisfy a stale premise would have made the file less accurate, not
more.

**Soft aggravator resolved.** `cleanupPeriodDays`' verbatim `"session
files and other application
data"` sat beneath prose stating `sessions/` is not age-swept, close
enough to read as
contradicting it. The live page still carries that tension, so the quote
stays verbatim and new
prose resolves the phrase against the table it links to — transcripts,
`shell-snapshots/`,
`debug/`, `tasks/`, `file-history/` — noting `sessions/` is not a row in
it, which is what the
quote two paragraphs down already established.

Every settings and claude-directory verification stamp in the file moves
to 2026-08-08, the date
each quote was re-checked. Version bumped to `0.5.9` with a matching
CHANGELOG entry. (Originally
`0.5.8`; main then absorbed #2018, which released a different `0.5.8`
for this plugin, so this
branch merged `origin/main` and moved its entry to `0.5.9` above main's
`0.5.8`.)

## Test plan

- `scripts/check-changelog-parity.sh --check` — pass ("Every versioned
plugin has a CHANGELOG.md").
- `scripts/check-changelog-parity.sh --check-bump origin/main` — pass
(`## [0.5.9]` entry present
  at head, absent at ref).
- `markdownlint-cli2` on both changed markdown files — 0 errors.
- Quote fidelity verified mechanically, not by eye: every blockquote
**citing the settings page or
claude-directory** was substring-matched against that page's fetched raw
markdown with link
syntax flattened. All such quotes now match exactly; the two removals
above are the strings that
did not. The file's six `memory` blockquotes and one `env-vars`
blockquote were **not** re-checked
— those pages were not fetched, re-researching them is outside this row,
and the file header
  already scopes its verification stamps accordingly.

## Related

- #1989 row 247 — the three settings-page blockquotes attributed to
  `code.claude.com/docs/en/settings` that are not verbatim on that page.
- Deviation from the row's spec: only one of the three flagged quotes
was non-verbatim against the
live page as of 2026-08-08. Two additional non-verbatim quotes in the
same file were found and
  fixed instead.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01HbtPzLRe1yBavNpsmv5Tum

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Aug 9, 2026
PR #2018 landed a songwriting 0.7.1 while this branch was open and claimed the
same version, so this branch's entry becomes 0.7.2 and the manifest follows.

meter-prosody's pre-flight composes both sides: this branch's reroute from
response-filter §6 Form to §3 Critique, and main's allowance that the box
narration may live in reasoning rather than the visible response.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Aug 9, 2026
… exit-2 table (#2041)

## Summary


`plugins/claude-config/skills/audit-instructions/reference/conflict-criteria.md`
adjudicated a
hook-half conflict pair by splitting hook events into two named lists —
"Blockable events"
(`PreToolUse`, `UserPromptSubmit`, `Stop`, `SubagentStop`, `PreCompact`,
`UserPromptExpansion`) and
"Non-blockable events" (`PostToolUse`, `Notification`, `SubagentStart`,
`SessionStart`,
`SessionEnd`) — phrased as an exhaustive partition. That phrasing is the
defect: the event set is
upstream-owned and grows.

**Upstream evidence.** The hooks page's `#### Exit code 2 behavior per
event` table

(<https://code.claude.com/docs/en/hooks#exit-code-2-behavior-per-event>,
fetched 2026-08-08 via the
raw-markdown channel) carries 31 rows, not 11. Events this repository's
own hooks register that
appeared in neither list:

| Hook event | Can block? | What happens on exit 2 (upstream cell) |
| --- | --- | --- |
| `ConfigChange` | Yes | Blocks the configuration change from taking
effect (except `policy_settings`) |
| `PostToolBatch` | Yes | Stops the agentic loop before the next model
call |
| `StopFailure` | No | Output and exit code are ignored |
| `PermissionDenied` | No | Exit code and stderr are ignored because the
denial already occurred |
| `InstructionsLoaded` | No | Exit code is ignored |

Under the old text an auditor could grade none of these. Two further
rows also show why a copied
list is the wrong shape even when complete: `PostToolBatch` prevents
"the agentic loop before the
next model call" and `TaskCreated` "rolls back the task creation" —
neither is a tool call or a
prompt, so "the act it blocks" needs the row's own cell to supply it.

**The fix (pointer-not-copy).** The bullet now names that table as the
sole authority and restates
none of its rows in either direction. The procedure: resolve the
handler's event, read its row, and
pair on the row's own `Can block?` cell — taking the paired content from
what the row states is
prevented rather than assuming a tool call or prompt; pairing as nothing
when the cell says no; and
recording an event with no row (or an unreachable table) as
`blockability-unresolved`, reusing the
file's existing `text-unresolved` / `liveness-unresolved`
report-rather-than-infer shape instead of
inventing a third vocabulary.

The criterion keeps its detection function. Both worked examples
survive, now marked as examples:
`PostToolUse` (blocks nothing, the tool already ran, with the
`plugins/actionlint/hooks/actionlint-check.sh`
pointer) and the `PreToolUse` counterfactual that eval 16 turns on. The
`SubagentStop`
subagent-scoping sentence is kept as its own standing rule rather than a
list member.

Also updated: the file's recheck trigger, which fired on "a change to
which events exit 2 can
actually block" — now scoped to the table's removal, renaming, or
restructuring, since a row added
upstream can no longer stale anything here. Review follow-up: the
exemption is narrowed so that a
change to the `SubagentStop`, `PostToolUse`, or `PreToolUse` rows — the
three the worked examples
cite — does fire a recheck.

**Files changed**

-
`plugins/claude-config/skills/audit-instructions/reference/conflict-criteria.md`
— the partition
rewrite, the recheck trigger, and the file header (1.3.0 → 1.4.0,
2026-08-08)
- `plugins/claude-config/skills/audit-instructions/evals/evals.json` —
eval 16's `expected_output`
and second expectation now test the row lookup rather than the memorized
split; the `PostToolUse`
  verdict the eval exists to check is unchanged, ids are not renumbered
- `plugins/claude-config/.claude-plugin/plugin.json` — 0.25.0 → 0.27.1
(re-versioned twice after
merges of main: first to 0.26.1 when 0.26.0 landed, then to 0.27.1 when
0.27.0 landed via #2018)
- `plugins/claude-config/CHANGELOG.md` — `## [0.27.1]` entry, placed
above main's `## [0.27.0]`

**Deviations from the row brief**

- The row says the same claims appear in `SKILL.md`. They do not. A grep
for
`blockable|non-blocking|blocks
nothing|UserPromptExpansion|SessionEnd|PostToolUseFailure|Notification`
across `audit-instructions/` returns only `conflict-criteria.md` and
`evals.json` for the
partition; `SKILL.md:157` carries a generic "the act it blocks under its
event and `matcher`"
(event-agnostic, still correct) and `SKILL.md:160`/`:164` concern stdout
and `additionalContext`
scoping, not blockability. No `SKILL.md` edit was manufactured to
satisfy the row's wording.
- The centrally allocated version was 0.21.11, which is behind this
plugin's current version on
`main` and would have regressed the changelog order — the exact failure
class
`check-changelog-parity.sh --check-order` exists to catch. Used the
reallocated 0.25.2, then
re-versioned to 0.26.1 (via a merge of `origin/main`, not a rebase)
after 0.26.0 landed on main,
then to 0.27.1 via a second merge of `origin/main` after #2018 landed
0.27.0 (that merge also
composed #2018's evals.json changes — eval 2's I27 → I28 — with this
PR's eval-16 rewrite).
- No new eval was added for an event outside the old lists. It would
prove the fix, but the row
asks only that evals stay consistent, and `evals.json` is contended by
sibling PRs.

## Test plan

- `scripts/check-changelog-parity.sh --check` — PASS ("Every versioned
plugin has a CHANGELOG.md")
- `scripts/check-changelog-parity.sh --check-bump origin/main` — PASS
(version entry present at
  head, absent at base; re-run at 0.27.1 after the second merge of main)
- `scripts/check-changelog-parity.sh --check-order` — PASS (all 72
changelogs newest-first)
- `scripts/check-changed-skills.sh origin/main` — PASS, 0 errors, 2
warnings, both pre-existing and
untouched by this diff (`SKILL.md` 398 lines vs the 200-line soft
target;
  `reference/criteria.md:976` fresh-eyes declaration)
- `markdownlint-cli2` over the changed markdown — 0 errors
- `evals.json` validated against
`plugins/skill-quality/reference/evals.schema.json` via `ajv-cli`
  (draft 2020-12) — valid; 16 eval cases parse
- Discriminating check: an auditor holding only `conflict-criteria.md`
can now grade an event named
nowhere in the file (`Elicitation`, `FileChanged`, `PostToolBatch`) —
look up its row, quote the
  cell, or mark it `blockability-unresolved`.

## Related

No linked issue — this PR closes nothing. It fixes one row (row 244) of
the multi-row umbrella issue
#1989, which stays open for its remaining rows, so a closing keyword
would be wrong here.

---------

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

1 participant