From eabf5376dfcd61f07266ef6183266fb4dbf17da8 Mon Sep 17 00:00:00 2001 From: firaen22 Date: Wed, 22 Jul 2026 00:42:11 +0800 Subject: [PATCH 1/6] =?UTF-8?q?skill-authoring=20=C2=A75:=20keyword-grep?= =?UTF-8?q?=20absence=20is=20not=20absence=20=E2=80=94=20read=20the=20sect?= =?UTF-8?q?ion=20before=20concluding=20not-covered?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three same-week incidents shared one shape: a keyword grep of a rules file returned nothing, 'not covered' was concluded, and the content existed under different phrasing — one of them a proposed addition whose substance was already in the target file, caught only by reading the section at drafting time. The no-duplicate-homes rule in §5 has no stated dup-check method; this supplies it: grep target + siblings for synonyms, read any near-topic section in full, and cite the section read (not the empty grep) in a not-covered verdict. Ships unprobed per the README covenant; Provenance records the probe shape as debt. --- skills/skill-authoring/SKILL.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/skills/skill-authoring/SKILL.md b/skills/skill-authoring/SKILL.md index f9bc110..dc5f46f 100644 --- a/skills/skill-authoring/SKILL.md +++ b/skills/skill-authoring/SKILL.md @@ -150,6 +150,21 @@ artifact-producing step. - One skill, one topic; no duplicate homes for a fact — cross-reference the sibling instead. Each skill states **when NOT to use it** and which sibling to use. +- **Keyword-grep absence is not absence** (`unprobed` — private incidents as + shape; see Provenance). The no-duplicate-homes rule above needs a dup-check + before every addition, and a grep that returns nothing is not that check: + an existing rule phrased differently from the search term produced three + false "not covered" verdicts in one week — one a proposed addition whose + content already sat in the target file under other wording, caught only + when the section was actually read at drafting time. Before concluding a + fact has no home, grep the target file AND its siblings for the concept's + synonyms, and when any hit lands near the topic — or the fact plausibly + belongs to an existing section — read that section in full first. A + "not covered" verdict cites the section read, not the grep that found + nothing. + ✅ "grepped 'revert', hit §3's regression bullet, read §3 — the rule is + already there under 'restore'; no addition needed." + ❌ "grep returned nothing, so the file doesn't cover it." - **A cross-reference is not a load** (`unprobed` in-house; external evidence — see Provenance). On weak tiers, discovering that a sibling skill applies is a judgment act: fable-method published a smoke-grade @@ -397,4 +412,15 @@ marker per the README covenant: the external measurement is of one skill's one gate, and whether placement generalizes across gate types is exactly what an in-house probe would test — that probe has not been run; the marker records the debt. +The §5 keyword-grep-absence rule (2026-07-21) generalizes three private +incidents in one week, each the same shape: a keyword grep of a rules file +returned nothing, "not covered here" was concluded, and the content existed +under different phrasing — including one proposed upstream addition whose +substance was already in the target file, caught only by reading the +section during drafting (contributor-reported; the private repos are +verifiable by the contributor, not linkable here). It ships `unprobed` per +the README covenant's second branch — no in-repo probe has run; the +executable probe shape (seed a reworded twin of a rule, instruct a +weak-tier agent to dup-check an addition, observe grep-only vs read) is +noted here as the debt, not claimed as run. Stable method; no environment facts to re-verify. From efb5bedec4b81c3bf79daadd4323c083a1a36659 Mon Sep 17 00:00:00 2001 From: F-e-u-e-r <189464303+F-e-u-e-r@users.noreply.github.com> Date: Wed, 22 Jul 2026 17:19:33 +0800 Subject: [PATCH 2/6] skill-authoring: rework the grep-absence rule per r1 dual review PR #51 round-1 gate (grok-4.5 high: FIX 1,2; gpt-5.6-sol max: FIX 1,2,3,4). All reproduced and addressed: - candidate-home read made UNCONDITIONAL (hits or none), closing the optional-read path that reproduced the motivating failure; no nameable candidate home -> unresolved + escalate, never an absence claim (grok F2 / codex F1) - pos example was mechanism-false (grep 'revert' cannot hit text worded 'restore') and its bare paragraph-sign-3 dangled against THIS file's actual section 3; replaced with an empty-grep -> read-anyway -> found- under-other-wording template with no dangling ref (grok F1 / codex F3) - per-addition completion record: the change record carries the sections-read + verdict line, the enforcement-ladder form this file itself prescribes (codex F2) - siblings defined executably (other skills in the set, list the directory); every-hit-section + every-candidate-home quantifiers explicit (codex F4 / grok n4) - private count moved behind contributor-log attribution (grok n5) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01GhLu6NCGzM9HxnqNb87MAx --- skills/skill-authoring/SKILL.md | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/skills/skill-authoring/SKILL.md b/skills/skill-authoring/SKILL.md index dc5f46f..f248505 100644 --- a/skills/skill-authoring/SKILL.md +++ b/skills/skill-authoring/SKILL.md @@ -151,19 +151,26 @@ artifact-producing step. sibling instead. Each skill states **when NOT to use it** and which sibling to use. - **Keyword-grep absence is not absence** (`unprobed` — private incidents as - shape; see Provenance). The no-duplicate-homes rule above needs a dup-check - before every addition, and a grep that returns nothing is not that check: - an existing rule phrased differently from the search term produced three - false "not covered" verdicts in one week — one a proposed addition whose - content already sat in the target file under other wording, caught only - when the section was actually read at drafting time. Before concluding a - fact has no home, grep the target file AND its siblings for the concept's - synonyms, and when any hit lands near the topic — or the fact plausibly - belongs to an existing section — read that section in full first. A - "not covered" verdict cites the section read, not the grep that found - nothing. - ✅ "grepped 'revert', hit §3's regression bullet, read §3 — the rule is - already there under 'restore'; no addition needed." + shape; see Provenance). The no-duplicate-homes rule above needs a + dup-check before every addition, and an empty grep is not that check: + rules phrased differently from the search term repeatedly produced + false "not covered" verdicts (three in one week in the contributor's + private log; see Provenance) — one a proposed addition whose content + already sat in the target file under other wording, caught only by + reading the section at drafting time. The check: grep the target file + and its sibling skills (the other skills in the same set — list the + directory, don't recall it) for the concept's synonyms; then, hits or + none, name the candidate homes — every section a hit landed in, plus + every section the fact would live in if it existed — and read each + named section in full before any verdict. The addition's change record + carries the result line: the sections read, and either the duplicate + found or "not found under the searches and sections listed". A bare + "not covered" backed only by empty greps is the failure this rule + exists to stop; no candidate home nameable at all → the placement is + unresolved — escalate it, never assert absence. + ✅ "grep for 'revert' and two synonyms returned nothing; still read the + rollback-shaped sections end to end — the rule already exists under + 'restore'; no addition needed." ❌ "grep returned nothing, so the file doesn't cover it." - **A cross-reference is not a load** (`unprobed` in-house; external evidence — see Provenance). On weak tiers, discovering that a sibling From 2195114ad40c1543956b70779506ae64da4740e4 Mon Sep 17 00:00:00 2001 From: F-e-u-e-r <189464303+F-e-u-e-r@users.noreply.github.com> Date: Wed, 22 Jul 2026 17:32:15 +0800 Subject: [PATCH 3/6] skill-authoring: r2 rework of the grep-absence rule - outline-based candidates, reviewer recheck PR #51 round-2 gate (grok-4.5 high: FIX 1,2; gpt-5.6-sol max: FIX 1-5). All reproduced and addressed: - candidate homes now chosen from the LISTED section outline of the target and hit files, never from recalled/invented section names - closes the recall hole one level up (grok F1 / codex F1) - escalation widened to cover doubt that the candidate list is complete, not only the zero-candidate case (codex F1) - change record defined inline (PR description / commit message / completion report, S7's form) (grok F2) - reviewer-side out-of-band check added: re-run the recorded searches, open one unlisted candidate - absence-sensitive compliance never rests on the author's own line, per S7's ladder (codex F3) - pos example made auditable (three named terms, two named sections) and framed on a hypothetical playbook so no in-file ref dangles (codex F4) - sibling set + references files defined executably (codex F5); trigger scoped to new facts/rules, wording/provenance edits out (grok n3 / codex n6); on-hit path routes to the parent rule's cross-reference duty (grok n5) S2 mechanism gate run (both arms, in-repo): - motivating arm (reworded twin): headword 'twin' in delegation-and-review hits only Provenance; synonym 'differently' hits the S3 named-search bullet (line 91); outline -> read S3 -> concept found under 'differently-shaped query' wording. Procedure catches the twin. PASS - flipped arm (true absence): word-boundary grep for port/localhost in skill-authoring = 0 rule-body hits (substring hits were the important/support class); outline offers no plausible home; fact belongs to a sibling (delegation-and-review S1) -> scoped not-found, placement routed. PASS Cross-family mechanism review = this PR's own dual gate (S2 arm 3). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01GhLu6NCGzM9HxnqNb87MAx --- skills/skill-authoring/SKILL.md | 51 +++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/skills/skill-authoring/SKILL.md b/skills/skill-authoring/SKILL.md index f248505..e6922e3 100644 --- a/skills/skill-authoring/SKILL.md +++ b/skills/skill-authoring/SKILL.md @@ -152,25 +152,38 @@ artifact-producing step. to use. - **Keyword-grep absence is not absence** (`unprobed` — private incidents as shape; see Provenance). The no-duplicate-homes rule above needs a - dup-check before every addition, and an empty grep is not that check: - rules phrased differently from the search term repeatedly produced - false "not covered" verdicts (three in one week in the contributor's - private log; see Provenance) — one a proposed addition whose content - already sat in the target file under other wording, caught only by - reading the section at drafting time. The check: grep the target file - and its sibling skills (the other skills in the same set — list the - directory, don't recall it) for the concept's synonyms; then, hits or - none, name the candidate homes — every section a hit landed in, plus - every section the fact would live in if it existed — and read each - named section in full before any verdict. The addition's change record - carries the result line: the sections read, and either the duplicate - found or "not found under the searches and sections listed". A bare - "not covered" backed only by empty greps is the failure this rule - exists to stop; no candidate home nameable at all → the placement is - unresolved — escalate it, never assert absence. - ✅ "grep for 'revert' and two synonyms returned nothing; still read the - rollback-shaped sections end to end — the rule already exists under - 'restore'; no addition needed." + dup-check before adding any new fact or rule (wording-only and + provenance edits are out of scope), and an empty grep is not that + check: rules phrased differently from the search term repeatedly + produced false "not covered" verdicts (three in one week in the + contributor's private log; see Provenance) — one a proposed addition + whose content already sat in the target file under other wording, + caught only by reading the section at drafting time. The check: grep + the target file and its sibling skills (the skills shipped beside it — + list the parent skills directory, don't recall it, and include a + skill's references files when the topic plausibly lives there) for the + headword plus at least two synonyms (outcome words, opposite + operations, domain jargon); list the actual section headings of the + target and of every file a hit landed in; from that real outline — + never from memory — name the candidate homes (every section with a + hit, plus every section the fact would live in if it existed) and read + each in full before any verdict. A duplicate found → the parent rule + governs: cross-reference the sibling, never re-add. Otherwise the + change record — the PR description or commit message when one is + being created, otherwise the completion report — carries the result + line: the terms searched, the sections read, and "not found under the + searches and sections listed"; the addition's reviewer re-runs those + searches and opens at least one candidate the record did not name + (absence-sensitive compliance never rests on the author's own line — + §7's ladder). A bare "not covered" backed only by empty greps is the + failure this rule exists to stop; an outline with no plausible home + for a fact that must have one, or doubt that the candidate list is + complete → the placement is unresolved — escalate it, never assert + absence. + ✅ "grep for 'revert', 'rollback', 'undo' across the playbook and its + two siblings returned nothing; read the playbook's 'State recovery' + and 'Cleanup' sections end to end — the rule exists under 'restore'; + the change record lists all three terms and both sections." ❌ "grep returned nothing, so the file doesn't cover it." - **A cross-reference is not a load** (`unprobed` in-house; external evidence — see Provenance). On weak tiers, discovering that a sibling From a15c2863dcc8cf218824b41246f86567d5cbc311 Mon Sep 17 00:00:00 2001 From: F-e-u-e-r <189464303+F-e-u-e-r@users.noreply.github.com> Date: Wed, 22 Jul 2026 17:53:54 +0800 Subject: [PATCH 4/6] skill-authoring: r3 rework of the grep-absence rule - outcome split, searched-file outlines, reviewer independence PR #51 round-3 gate (grok-4.5 high: FIX 1,2; gpt-5.6-sol max: FIX 1-9,12,13). Adjudication: - outlines assembled from every file SEARCHED, not only hit files - all-empty greps no longer drop sibling outlines (grok F1 / codex F2) - S7-ladder paraphrase replaced with a pointer (grok F2) - duplicate-outcome split: in-target -> no addition; sibling-owned -> cross-reference, or S5's verbatim-carry with sync contract (codex F1, F4) - reviewer re-runs against the pre-addition text, proposed lines excluded - the rule no longer matches itself (codex F3) - reviewer reads a candidate chosen INDEPENDENTLY of the record - ends the exhaustive-list-vs-unnamed-candidate contradiction (codex F9) - search-term derivation glossed (codex F12); must-have-a-home cue tied to task-asserted coverage or relocation (grok n4); absence-path pos example with the forced phrase added (grok n3) - rejected with reason on the trail: codex F7 (whole-file compaction = pre-existing condition, owner-scheduled maintenance, not this diff); codex F8 (sibling sections verified by the gate-runner who read both files in full this session); codex F13 (a prospective standing rule for future additions is doctrine's normal function, not an instruction to this PR's gate); codex F10 already fixed (+46) - PR body dup-check record to be corrected to the exact forced phrase, actual headings, and the S2 section its substring hits touched (codex F5, F6) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01GhLu6NCGzM9HxnqNb87MAx --- skills/skill-authoring/SKILL.md | 71 ++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/skills/skill-authoring/SKILL.md b/skills/skill-authoring/SKILL.md index e6922e3..6e02ed4 100644 --- a/skills/skill-authoring/SKILL.md +++ b/skills/skill-authoring/SKILL.md @@ -151,39 +151,46 @@ artifact-producing step. sibling instead. Each skill states **when NOT to use it** and which sibling to use. - **Keyword-grep absence is not absence** (`unprobed` — private incidents as - shape; see Provenance). The no-duplicate-homes rule above needs a - dup-check before adding any new fact or rule (wording-only and - provenance edits are out of scope), and an empty grep is not that - check: rules phrased differently from the search term repeatedly - produced false "not covered" verdicts (three in one week in the - contributor's private log; see Provenance) — one a proposed addition - whose content already sat in the target file under other wording, - caught only by reading the section at drafting time. The check: grep - the target file and its sibling skills (the skills shipped beside it — - list the parent skills directory, don't recall it, and include a - skill's references files when the topic plausibly lives there) for the - headword plus at least two synonyms (outcome words, opposite - operations, domain jargon); list the actual section headings of the - target and of every file a hit landed in; from that real outline — - never from memory — name the candidate homes (every section with a - hit, plus every section the fact would live in if it existed) and read - each in full before any verdict. A duplicate found → the parent rule - governs: cross-reference the sibling, never re-add. Otherwise the - change record — the PR description or commit message when one is - being created, otherwise the completion report — carries the result - line: the terms searched, the sections read, and "not found under the - searches and sections listed"; the addition's reviewer re-runs those - searches and opens at least one candidate the record did not name - (absence-sensitive compliance never rests on the author's own line — - §7's ladder). A bare "not covered" backed only by empty greps is the - failure this rule exists to stop; an outline with no plausible home - for a fact that must have one, or doubt that the candidate list is - complete → the placement is unresolved — escalate it, never assert - absence. + shape; see Provenance). About to add a new fact or rule, or to + conclude a file does not cover one (wording-only and provenance edits + are out of scope): an empty grep is not the dup-check the + no-duplicate-homes rule above needs — rules phrased differently from + the search term repeatedly produced false "not covered" verdicts + (three in one week in the contributor's private log; see Provenance), + one a proposed addition whose content already sat in the target file + under other wording, caught only by reading the section at drafting + time. The check: grep the target file and its sibling skills (the + skills shipped beside it — list the parent skills directory, don't + recall it, and include a skill's references files when the topic + plausibly lives there) for the concept's name plus at least two + alternates drawn from how the file might phrase it (the outcome it + produces, the operation's other names, its domain jargon); list the + actual section headings of the target AND of every file searched; + from that real outline — never from memory — name the candidate homes + (every section with a hit, plus every section the fact would live in + if it existed) and read each in full before any verdict. Duplicate + found in the target → no addition needed; owned by a sibling → + cross-reference it — or, where §5's clause-travels-with-the-trigger + rule applies, quote it verbatim with its sync contract — never a + silent second home. Otherwise the change record — the PR description + or commit message when one is being created, otherwise the completion + report — carries the result line: the terms searched, the sections + read, and "not found under the searches and sections listed". The + addition's reviewer re-runs those searches against the pre-addition + text (the proposed lines excluded) and reads at least one candidate + section chosen independently of the record (out-of-band check — §7's + enforcement ladder). A bare "not covered" backed only by empty greps + is the failure this rule exists to stop; no plausible home in the + outline for a fact the task says is covered or being relocated, or + doubt that the candidate list is complete → the placement is + unresolved — escalate it, never assert absence. ✅ "grep for 'revert', 'rollback', 'undo' across the playbook and its - two siblings returned nothing; read the playbook's 'State recovery' - and 'Cleanup' sections end to end — the rule exists under 'restore'; - the change record lists all three terms and both sections." + two siblings returned nothing; still read the playbook's 'State + recovery' and 'Cleanup' sections end to end — the rule exists under + 'restore'; the change record lists all three terms and both sections." + ✅ "searches and all four candidate sections empty — recorded 'not + found under the searches and sections listed: revert, rollback, undo; + State recovery, Cleanup' — then added the rule." ❌ "grep returned nothing, so the file doesn't cover it." - **A cross-reference is not a load** (`unprobed` in-house; external evidence — see Provenance). On weak tiers, discovering that a sibling From 5be9963362c3fd4c2ebd3fe98edbbe98e516eb82 Mon Sep 17 00:00:00 2001 From: F-e-u-e-r <189464303+F-e-u-e-r@users.noreply.github.com> Date: Wed, 22 Jul 2026 18:07:42 +0800 Subject: [PATCH 5/6] skill-authoring: r4 refinements to the grep-absence rule PR #51 round-4 gate (grok-4.5 high: FIX 1; gpt-5.6-sol max: FIX 1,2,3,4,5,7,8). Adjudication: - empty searches -> read the WHOLE target file before any verdict; the incident's catch was the read (codex F1) - duplicate-outcome rewritten: no second home wherever it lives, with the 'A cross-reference is not a load' rule cited by its real title and applying to both ownership branches (codex F2 / grok n3) - standalone not-covered verdicts stay provisional until an out-of-band read; landing additions get the S6 fresh-context reviewer re-run (codex F3 / grok n2) - result line carries terms + files + file-qualified sections (codex F5); router-file and headingless fallbacks defined (codex F7) - references-files quantifier fixed to each searched skill (grok n4); 'never assert absence' scoped to its conditions (grok n5); second neg example pins the multi-synonym-empty-but-never-read boundary (grok F1) - rejected with reason, standing dispositions: codex F4 (nine-file packet inlining infeasible; gate-runner read all nine skills in full this session), codex F8 (prospective reviewer doctrine is the file's normal function - same shape as delegation-and-review S3's merged 'reviewer re-runs the named search' rule) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01GhLu6NCGzM9HxnqNb87MAx --- skills/skill-authoring/SKILL.md | 58 +++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/skills/skill-authoring/SKILL.md b/skills/skill-authoring/SKILL.md index 6e02ed4..5b44f44 100644 --- a/skills/skill-authoring/SKILL.md +++ b/skills/skill-authoring/SKILL.md @@ -161,37 +161,47 @@ artifact-producing step. under other wording, caught only by reading the section at drafting time. The check: grep the target file and its sibling skills (the skills shipped beside it — list the parent skills directory, don't - recall it, and include a skill's references files when the topic - plausibly lives there) for the concept's name plus at least two - alternates drawn from how the file might phrase it (the outcome it - produces, the operation's other names, its domain jargon); list the - actual section headings of the target AND of every file searched; - from that real outline — never from memory — name the candidate homes - (every section with a hit, plus every section the fact would live in - if it existed) and read each in full before any verdict. Duplicate - found in the target → no addition needed; owned by a sibling → - cross-reference it — or, where §5's clause-travels-with-the-trigger - rule applies, quote it verbatim with its sync contract — never a - silent second home. Otherwise the change record — the PR description - or commit message when one is being created, otherwise the completion - report — carries the result line: the terms searched, the sections - read, and "not found under the searches and sections listed". The - addition's reviewer re-runs those searches against the pre-addition - text (the proposed lines excluded) and reads at least one candidate - section chosen independently of the record (out-of-band check — §7's - enforcement ladder). A bare "not covered" backed only by empty greps - is the failure this rule exists to stop; no plausible home in the - outline for a fact the task says is covered or being relocated, or - doubt that the candidate list is complete → the placement is - unresolved — escalate it, never assert absence. + recall it, and include each searched skill's references files when + the topic plausibly lives there; a router file like CLAUDE.md has no + siblings — its "siblings" are the files it points into, and a + headingless file is read in full) for the concept's name plus at + least two alternates drawn from how the file might phrase it (the + outcome it produces, the operation's other names, its domain jargon); + list the actual section headings of the target AND of every file + searched; from that real outline — never from memory — name the + candidate homes (every section with a hit, plus every section the + fact would live in if it existed) and read each in full before any + verdict — and when every search came back empty, read the whole + target file before concluding anything (the incident's catch was the + read, not the grep). Duplicate found → no second home, wherever it + lives: in the target, no addition; in a sibling, cross-reference it — + in either case the "A cross-reference is not a load" rule below still + applies as written (a cannot-miss clause is quoted verbatim at its + trigger site with the sync contract naming the winner). Otherwise the + change record — the PR description or commit message when one is + being created, otherwise the completion report — carries the result + line: the terms searched, the files searched, the file-qualified + sections read, and "not found under the searches and sections + listed". For a landing addition, the fresh-context reviewer (§6) + re-runs those searches against the pre-addition text and reads at + least one candidate section of their own choosing; a standalone + not-covered verdict with no reviewer stays provisional in the report + until an out-of-band read confirms it (§7's enforcement ladder). A + bare "not covered" backed only by empty greps is the failure this + rule exists to stop; no plausible home in the outline for a fact the + task says is covered or being relocated, or doubt that the candidate + list is complete → the placement is unresolved — escalate it, and + under those conditions never assert absence. ✅ "grep for 'revert', 'rollback', 'undo' across the playbook and its two siblings returned nothing; still read the playbook's 'State recovery' and 'Cleanup' sections end to end — the rule exists under 'restore'; the change record lists all three terms and both sections." ✅ "searches and all four candidate sections empty — recorded 'not found under the searches and sections listed: revert, rollback, undo; - State recovery, Cleanup' — then added the rule." + playbook §State recovery, playbook §Cleanup' — then added the rule." ❌ "grep returned nothing, so the file doesn't cover it." + ❌ "three synonyms, all empty — not covered" (no section was ever + read). - **A cross-reference is not a load** (`unprobed` in-house; external evidence — see Provenance). On weak tiers, discovering that a sibling skill applies is a judgment act: fable-method published a smoke-grade From 5d2fd764be177315592410ee34afbc65708f4229 Mon Sep 17 00:00:00 2001 From: F-e-u-e-r <189464303+F-e-u-e-r@users.noreply.github.com> Date: Wed, 22 Jul 2026 18:21:51 +0800 Subject: [PATCH 6/6] skill-authoring: r5 refinements to the grep-absence rule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #51 round-5 gate (grok-4.5 high: FIX 1,2,3; gpt-5.6-sol max: FIX 1-8). Adjudication: - empty-search recovery widened to EVERY searched file read in full, and the not-covered decision keyed to reading, not grep emptiness; both pos examples now model the whole-file mandate with file- qualified records (grok F1, F2 / codex F1, F5) - paraphrase parenthetical deleted; pointer-only to the cross-ref rule (grok F3 / codex F2) - pre-addition baseline defined as the branch-base revision, never the edited working copy (codex F6); standalone verdicts confirmed by a fresh-context reader without the author's session (codex F7) - trigger names instruction files explicitly (codex F8); in-body private count dropped to shape (grok n4); headingless-file clause made global (grok n5); reviewer empty-search parity (grok n6) - codex F3: PR-body dup-check record corrected separately (adds §4 one-source-of-truth to sections read, names all nine files) - codex F4 rejected-with-reason (standing): file length is a pre-existing condition; compaction is owner-scheduled maintenance, not this diff's burden Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01GhLu6NCGzM9HxnqNb87MAx --- skills/skill-authoring/SKILL.md | 96 ++++++++++++++++----------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/skills/skill-authoring/SKILL.md b/skills/skill-authoring/SKILL.md index 5b44f44..745baff 100644 --- a/skills/skill-authoring/SKILL.md +++ b/skills/skill-authoring/SKILL.md @@ -151,57 +151,57 @@ artifact-producing step. sibling instead. Each skill states **when NOT to use it** and which sibling to use. - **Keyword-grep absence is not absence** (`unprobed` — private incidents as - shape; see Provenance). About to add a new fact or rule, or to - conclude a file does not cover one (wording-only and provenance edits - are out of scope): an empty grep is not the dup-check the - no-duplicate-homes rule above needs — rules phrased differently from - the search term repeatedly produced false "not covered" verdicts - (three in one week in the contributor's private log; see Provenance), - one a proposed addition whose content already sat in the target file - under other wording, caught only by reading the section at drafting - time. The check: grep the target file and its sibling skills (the - skills shipped beside it — list the parent skills directory, don't - recall it, and include each searched skill's references files when - the topic plausibly lives there; a router file like CLAUDE.md has no - siblings — its "siblings" are the files it points into, and a - headingless file is read in full) for the concept's name plus at - least two alternates drawn from how the file might phrase it (the - outcome it produces, the operation's other names, its domain jargon); - list the actual section headings of the target AND of every file - searched; from that real outline — never from memory — name the - candidate homes (every section with a hit, plus every section the - fact would live in if it existed) and read each in full before any - verdict — and when every search came back empty, read the whole - target file before concluding anything (the incident's catch was the - read, not the grep). Duplicate found → no second home, wherever it - lives: in the target, no addition; in a sibling, cross-reference it — - in either case the "A cross-reference is not a load" rule below still - applies as written (a cannot-miss clause is quoted verbatim at its - trigger site with the sync contract naming the winner). Otherwise the - change record — the PR description or commit message when one is - being created, otherwise the completion report — carries the result - line: the terms searched, the files searched, the file-qualified - sections read, and "not found under the searches and sections + shape; see Provenance). About to add a new fact or rule to an + instruction file, or to conclude one does not cover a fact + (wording-only and provenance edits are out of scope): an empty grep is + not the dup-check the no-duplicate-homes rule above needs — rules + phrased differently from the search term repeatedly produced false + "not covered" verdicts in the contributor's private log (see + Provenance), one a proposed addition whose content already sat in the + target file under other wording, caught only by reading the section at + drafting time. The check: grep the target file and its sibling skills + (the skills shipped beside it — list the parent skills directory, + don't recall it, and include each searched skill's references files + when the topic plausibly lives there; a router file like CLAUDE.md has + no siblings — its "siblings" are the files it points into) for the + concept's name plus at least two alternates drawn from how the file + might phrase it (the outcome it produces, the operation's other names, + its domain jargon); list the actual section headings of the target AND + of every file searched; from that real outline — never from memory — + name the candidate homes (every section with a hit, plus every section + the fact would live in if it existed) and read each in full before any + verdict. A headingless file is read in full. When every search came + back empty, read every searched file in full before concluding + anything — the incidents' catch was the read, not the grep. Duplicate + found → no second home, wherever it lives: in the target, no addition; + in a sibling, cross-reference it — the "A cross-reference is not a + load" rule below still applies as written. Otherwise the change record + — the PR description or commit message when one is being created, + otherwise the completion report — carries the result line: the terms + searched, each file searched with what was read of it (named sections, + or "read in full"), and "not found under the searches and sections listed". For a landing addition, the fresh-context reviewer (§6) - re-runs those searches against the pre-addition text and reads at - least one candidate section of their own choosing; a standalone - not-covered verdict with no reviewer stays provisional in the report - until an out-of-band read confirms it (§7's enforcement ladder). A - bare "not covered" backed only by empty greps is the failure this - rule exists to stop; no plausible home in the outline for a fact the - task says is covered or being relocated, or doubt that the candidate - list is complete → the placement is unresolved — escalate it, and - under those conditions never assert absence. + re-runs those searches against the pre-addition text (the file at the + revision the change branches from — never the edited working copy) and + reads at least one candidate of their own choosing — on empty + searches, one searched file in full; a standalone not-covered verdict + with no reviewer stays provisional in the report until a fresh-context + reader without the author's session confirms it there. A bare "not + covered" backed only by empty greps is the failure this rule exists to + stop; no plausible home in the outline for a fact the task says is + covered or being relocated, or doubt that the candidate list is + complete → the placement is unresolved — escalate it, and under those + conditions never assert absence. ✅ "grep for 'revert', 'rollback', 'undo' across the playbook and its - two siblings returned nothing; still read the playbook's 'State - recovery' and 'Cleanup' sections end to end — the rule exists under - 'restore'; the change record lists all three terms and both sections." - ✅ "searches and all four candidate sections empty — recorded 'not - found under the searches and sections listed: revert, rollback, undo; - playbook §State recovery, playbook §Cleanup' — then added the rule." + two siblings returned nothing; read all three files end to end — the + rule exists in the playbook under 'restore'; the change record lists + the three terms and the three files, each 'read in full'." + ✅ "all searches empty — read both searched files end to end; recorded + 'not found under the searches and sections listed: revert, rollback, + undo; playbook.md (read in full), helpers.md (read in full)' — then + added the rule." ❌ "grep returned nothing, so the file doesn't cover it." - ❌ "three synonyms, all empty — not covered" (no section was ever - read). + ❌ "three synonyms, all empty — not covered" (no file was ever read). - **A cross-reference is not a load** (`unprobed` in-house; external evidence — see Provenance). On weak tiers, discovering that a sibling skill applies is a judgment act: fable-method published a smoke-grade