docs(ssot): fleet SSOT normalization batch — versioned, evals-complete replay - #3178
Conversation
…content convention Replay of closed PR #2698's waves onto current main (reference b89723f), with per-cluster Tier 0 re-verification and refutation checks. C02: philosophy conformance rule + 33 setup skills normalized (2 post-reference adopters included; guardrails' corrected toggle count kept as main states it). C06: untrusted-content owner doc + 17 adopting sites + registry row; review repairs applied (fable-5 clause corrected to name ADR-0006 and the pack's independent formulation, number- agreement license added to the spine template). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
…reamble dedup C01: normalize 15 call sites (one new post-reference site included per its own release note; four doctrine-drifted variants repaired) to the canonical sentence with one Fresh-eyes-checkpoints provenance citation each; refutation check corroborated by verification 0.3.4. C09: Shape C deletion of 9 README option-scoping preambles + 3 in-file pointers, identical site set to the reference, generated blocks re-verified unchanged. Both adversarial reviews approved. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
…attribution C07: check-opening block added to the philosophy setup section (anti-pattern for audit-only kill switches included) and the Read-it-first directive + downgrade pair normalized across 18 setup skills, gate facts verified against each plugin's runtime. Review repairs applied: disk-hygiene's downgrade replaced with a truthful audit-lane-aware paragraph (its toggle is a kill switch, not a short-circuit; git stays FAIL), session-flow tail flattened, philosophy vocabulary attribution fixed plus a straggler-tracking clause, eol-normalizer scope claim de-counted. C17: Pattison attribution/seam framing normalized across 9 songwriting skills (review approved). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
C04: third philosophy setup block + 24 setup skills normalized (9 already-conforming main sites untouched; per-file provenance budget held; two new-on-main plugins' folded variants split). C23: full mktemp dialect semantics hoisted into the topic-docs ephemeral tier, 4 consumer sites normalized. Both adversarial reviews approved. Also align the philosophy's --config bullet with the #3115-corrected doctrine the fleet's setup skills already carry (owner-doc drift the C04 worker flagged). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
Lessons 12-14 restored from the reviewed reference batch (changelog refutation evidence, portability output-type inversion, dependent- cluster re-counts); Lesson 15 added from this replay (re-derive site rosters on a moved base; hunk-level pre-image checks; reference omissions are decisions). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
Five behavioral scenarios grounded in the SKILL.md (read-only inventory, destructive-collision guard, bulk-scaffold refusal, idempotent apply, guidance-not-edit custom layout); schema-validated and eval-quality lint clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
Five behavioral scenarios each, grounded in the current SKILL.md text (lazy-install INFO semantics and no-write-path refusals for firecrawl; the single permitted install-cli write, probe-verified, for playwright); schema-validated and eval-quality lint clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
Patch bumps with class-tailored changelog entries for every plugin the replay waves touch (per the published-version-reuse gate), and compress the plugin-quality audit skill's untrusted-content paragraph back under the 500-line hard cap (both grep-protected fragments kept unbroken). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
Five behavioral scenarios each, grounded in the skill bodies (critique- filter preflight, boundary-table refusals, timed object-writing shape); schema, checker, and eval-quality lint all clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
Four plugins were released on both sides; ours renumber above main's published versions (code-tidying 0.14.1, docs-hygiene 0.19.1, skill-quality 0.19.1, source-control 0.55.3) with main's entries and history preserved. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
|
Claude finished @kyle-sexton's task in 1m 6s —— View job Security review (
|
|
Last security-reviewed head: |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 009f9b99fa
ℹ️ 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".
The merge-resolution script emitted an extra blank line above the first retained release heading in the four renumbered changelogs; CI's repo-wide markdown gate (MD012) caught what the touched-files-only local lint missed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
…aries Codex review (P2, confirmed): the C04 block claimed the prohibition is stated inline in every setup skill while seven batch-touched skills' boundaries lists lacked it — add the canonical sentence to each. The block's claim is scoped truthfully and the remaining out-of-diff stragglers (plus the documented non-extraction trio) route to the fleet conformance audit like the sibling blocks' stragglers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
|
Claude finished @kyle-sexton's task in 42s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 5m 11s —— View job Code review (
|
|
Claude has reviewed this PR 5 times. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
Code review (P2, confirmed): the reworded sentence adopted the spine phrase without the provenance citation — the exact unattributed-copy shape the new convention's conformance grep flags. Carry the standard parenthetical. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
The previous wrap split the heading from the path, so the convention's single-line conformance grep still missed the site; wrap after "(framing per" like the other adopters. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
Main released claude-ops 0.36.0 and its own work-items 0.39.15 under the branch; ours renumber to 0.36.1 and 0.39.16 with main's entries preserved. Main's fuller correction of the philosophy --config bullet supersedes this branch's version of the same fix (theirs taken). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
|
Claude finished @kyle-sexton's task in 1m 41s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 2m 42s —— View job Security review (
|
Same MD012 artifact as the earlier renumbered changelogs; the prior lint pipeline masked its exit code behind tail. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
|
Claude finished @kyle-sexton's task in 2m 47s —— View job Code review (
|
|
No description provided. |
Main released its own ai-briefing 0.7.6, docs-hygiene 0.19.1, markdown-format 0.11.27, powershell-format 0.7.20, and claude-config 0.39.0 under the branch; ours renumber above them (0.7.7, 0.19.2, 0.11.28, 0.7.21, 0.39.1) with main's entries preserved. The merge resolver now collapses its double-blank artifact itself. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REtnZ2hNpvRpfaL7venur5
|
Claude finished @kyle-sexton's task in 2m 4s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 1m 38s —— View job Security review (
|
…sot-extract-jpb79j
|
Claude finished @kyle-sexton's task in 3m 42s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 2m 17s —— View job Security review (
|
Fifth #2891 de-slop shard: purge em dashes from the claude-config plugin instruction surfaces, the next-worst cluster after session-flow (#3106), planning (#3105), work-items (#3107) and source-control (#3108). Rewrote README.md and all ten SKILL.md files under /ai-slop:audit fix semantics: periods, commas, a colon before a list, or a restructured sentence. Never parentheses, en dashes, or a spaced hyphen, since each of those is the same interruption wearing a different mark. Two review rounds on the PR caught seven places where a paired em dash had become parentheses and two doubled-connective run-ons; all were restructured. Rebased across two releases that landed on main mid-review, in both cases re-applying to the newer text rather than reverting it: - 0.39.0 (#3176) restructured audit-instructions/SKILL.md, moving the Phase D state-key block to context/report-keying.md and adding --persist-findings. The flag, its Phase D paragraph, and both context/ spokes are retained. - 0.39.1 (#3178) normalized setup/SKILL.md and audit-instructions/SKILL.md to canonical fleet SSOT wording with PLUGIN-PHILOSOPHY citations. That wording and those citations are kept verbatim; only their punctuation is de-slopped. context/ files stay out of scope, matching #2891's target set and every prior shard. Frontmatter description and argument-hint values are rewritten too. No quoted auto-invocation trigger phrase contained an em dash, so no trigger changed. Verification (this repo's .claude/ai-slop.json disables rule-em-dash corpus-wide, so the detector runs against an isolated HOME and CLAUDE_PROJECT_DIR to force the rule on): - detect.sh over the 11 shard files: 0 findings, every rule clean - no en dash or spaced hyphen introduced; the four en dashes in the diff are pre-existing numeric ranges (I1-I28, I1-I5, 3-5 lanes) - check-changelog-parity.sh --check and --check-bump origin/main: pass - CHECK_SKILL_SKIP_MARKDOWNLINT=1 check-changed-skills.sh origin/main: 10 skills, 0 errors, every base-ref trigger phrase preserved - markdownlint-cli2 over the 12 changed files: 0 issues - audit-instructions/SKILL.md is 484 lines, under the 500-line cap Pre-existing and not from this diff: three audit-permission-state script suites fail identically on a clean origin/main worktree in this environment. This shard touches no script. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Tu5t8rYWv2kDzRcdmLE2ro
…its declared recall gap (#3460) The repo-wide docs-hygiene sweep (#3362) ran eight lanes and graduated its remainder into docs/specs/docs-hygiene-sweep-unapplied-remediations.md. #3380 closed out L2, L4, L5, L6 and L7 and left L3, the extract-ssot deduplication lane, untouched. An adversarial verifier re-tested that premise cluster by cluster before anything was edited: all 13 remediated clusters were still open, no later commit had applied them, and no open pull request covered them. That lane also declared its own recall limit and named the fix. This carries it out: a shingled n-gram pass over whitespace-normalized markdown with line breaks removed, plus the reading-driven semantic pass it had no subagent tool to attempt. Against a control paragraph re-wrapped at three widths, the old line-anchored method shares zero lines and the new pass recovers 100%. Five of the findings are factual defects rather than prose drift: - A fallback that could never fire, at 25 sites, and a 26th that fired and said nothing. Piping a probe into head before || makes the fallback unreachable, so a failed git status rendered an empty string under a label that reads as a clean tree. verification:confirm is the fleet's one uncapped site, so its fallback did run and emitted an empty string, which under that label is the same misreading by a different mechanism. Proven by execution. - An inline floor whose carriers had drifted into two distinct texts. loop-lane §6 binds three lane bodies on the values; under that scope the values never drifted and the surrounding prose did. Both de-slop shards made the same substitutions, one of which left a comma splice. - A dropped-allow-rule roster missing the Monitor class upstream added in v2.1.236, so a dropped Monitor grant was reported under none of the classes. Bounded to that version, since on an older install the verdict inverts in the less safe direction. - A line-number citation asserting the opposite of the line it named: four surfaces cited check-skill.sh:414 as the hard FAIL for a dropped trigger phrase, where 414 says a trigger move WARNs and never blocks and the err is at 462. main fixed one of the four independently while this branch was in review; the other three now name the check rather than a line. - A title taxonomy credited to a living author that the owner file records as unaudited and not his, including in a shipped prompt template. docs/PLUGIN-PHILOSOPHY.md gains the runtime-grounded clause 20 setup skills were asserting with nothing to point at, and four Convention registry rows: three owner docs that declare themselves owners and were absent from the registry that indexes them, plus the precompute convention. Three adversarial review rounds were run against the change set itself, and each found real defects in its record-keeping rather than its mechanics. Six changelog entries described a change their own diff did not make. The new detector-findings adopter row claimed a mechanical selection the producer does not have, and its shape count was wrong at the source: audit-noise's context/persist-findings.md and emit-findings.sh header both said six shapes and five declined, where lib/noise-shapes.sh appends eight and detect.sh drives a ninth. Round three re-derived every remaining claim and found eight more: "three distinct texts" was two, the spec overstated what loop-lane 6 binds, the check-skill.sh:414 cluster was declared closed while audit-noise's own script still carried it (the earlier sweep grepped only *.md), "every site carries one wording" was 18 of 20, the four-preambles claim went stale when provenance landed with the merge, one entry misdescribed a file that was internally inconsistent rather than wrong, a contradiction count read 15 where the file records 12, and one roster row attached a quote to the wrong subject. All corrected, each re-verified against the repository first, and each count now points at the artifact that is its source. The full roster, the twelve contradictions the semantic pass surfaced, the four filtered-probe sites deliberately left unnormalized and why, and the measured recall limits of the detector itself are recorded in docs/specs/extract-ssot-sweep-2026-08-28.md so the remainder is resumable. That file states plainly that its recall figures are unreproducible from this repository, because the detector was a session tool and was deliberately not committed. Refs #3362, refs #3380, refs #3178.
No linked issue
Summary
The fleet-wide SSOT normalization batch from closed #2698, replayed onto current main as the versioned, evals-complete batch that close-out called for. Seven verified clusters re-applied with per-cluster Tier 0 re-verification and refutation checks; every touched plugin bumped with a changelog entry; every touched-and-evals-less skill gains a validated eval suite; the contract slice from the old branch is gone (branch restarted from main), so the prune gate passes by construction.
Fix
Replayed in four adversarially-reviewed waves, treating the closed PR's reviewed diff (
b89723f0) as the canonical-text source and current main as ground truth:docs/PLUGIN-PHILOSOPHY.md§"Setup is explicit and repeatable" (contract preamble, check-opening directive, never-writes sentence), with 33 / 24 / 18 setup skills normalized byte-identical around preserved per-plugin slots. Sites main had already brought into conformance were left untouched; new-on-main plugins carrying the old wording were normalized; one reference slot that was self-refuting against disk-hygiene's runtime was rewritten from the runtime and the anti-pattern (audit-only kill switches are not short-circuit gates) recorded in the SSOT block.docs/conventions/untrusted-content/owner doc (framing contract + fixed inline adopter spine) with 17 adopting sites normalized and a Convention-registry row; the fable-5 clause names ADR-0006 and the pack's deliberately independent formulation.--configdoes write to an installed plugin, verified on CC 2.1.240); the philosophy's own--configbullet still carried the refuted wording and is aligned here with the corrected, stamped doctrine the fleet's setup skills already carry.context/lessons.md, including the new replay-discipline lesson this PR's own execution produced.Plugin runtime surfaces keep their operable text inline (an installed plugin cannot read this repo's
docs/); citations are provenance-only, at most one per file. Every wave carried a fresh-context adversarial diff review before commit; all blocking findings were repaired pre-commit.Verification
76 checked, 0 failed; changelog parity (--check-bump,--check-order) clean; manifest duplicate-keys clean; skill portability clean; cross-plugin source drift clean; plugin contracts50 setup skills, 2827 filesvalidated; contract-slice prune gate passes (nodocs/topics/paths in the diff).markdownlint-cli2andtyposclean on every touched file, enforced per wave.Related
No linked issue (successor to closed #2698, per its close-out plan).
Generated by Claude Code