Skip to content

Commit d07823c

Browse files
Imbad0202claude
andcommitted
feat(scene): add fallacy_no_true_scotsman, the 10th fallacy-recognition lens (#11b)
Next lens in the standing #11(b) backlog. The lens set is now ten. The boundary is the whole design task — no_true_scotsman is easy to over-apply (any qualifier looks suspicious): - Defect: meeting a counterexample to a general claim by redefining the claim's subject AFTER THE FACT ("no Scotsman" → "no TRUE Scotsman") so the claim becomes unfalsifiable. The qualifier does no independent work; it is added only to expel the refuting case. - Reverse-guard: a restriction that was ALREADY part of the term's definition is NOT the fallacy ("a vegetarian doesn't eat meat" excludes by definition, not by rescue). The fallacy needs three things: a general claim, a genuine counterexample, and a qualifier introduced IN RESPONSE with no independent justification. Principled tightening of a vague term is legitimate — the defect is the post-hoc, UNJUSTIFIED rescue, not qualifying as such. - Defect test (prior-definition test): was the qualifier already in the term's meaning, or introduced only to expel the counterexample? Cascade: structures.md lens row + reverse-guard + count nine→ten; scene.md ten-lens list, prior-definition defect test, off-list examples reworked (no true scotsman removed as covered; gambler's fallacy added); SKILL.md + overlay routing (byte-identical), README, GATE probe 10K, 3 invariant needles + mutation coverage. Both review passes flagged the same convention gap: no_true_scotsman and equivocation both concern a term's meaning shifting but lacked the explicit cross-reference that genetic↔ad_hominem carry. Added the bidirectional "distinct from" clause (equivocation = two standing senses in one chain; no_true_scotsman = one sense narrowed post-hoc). No dual-homing (no manipulation twin). Invariant 325/325, verbatim 6/6, pytest 30/30, pack 19/19, both builds green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ff8r7ajo54cRPm8v5MU4qr
1 parent 2eaba29 commit d07823c

7 files changed

Lines changed: 49 additions & 14 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ interpretation is examined with the same rigor as the others. Ends with you
119119
committing to a position and defending it against the strongest objection.
120120
Scene also runs a separate **fallacy-recognition track**: bring an argument and
121121
the coach helps you judge whether it commits a named fallacy (false dilemma, ad
122-
hominem, strawman, a fallacious appeal, equivocation, false analogy, whataboutism, slippery slope, genetic fallacy) with three honest rulings
122+
hominem, strawman, a fallacious appeal, equivocation, false analogy, whataboutism, slippery slope, genetic fallacy, no true scotsman) with three honest rulings
123123
(it is a fallacy, it is not, or there is not enough context to say), and a guard
124124
against the opposite mistake of crying "fallacy" at a sound argument. One track
125125
runs at a time; frames are never ranked, but a fallacy in the form of an argument

SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Routing keywords:
2323
- `detective` → load `modes/detective.md` (guide-and-judge stance; a runtime-generated multi-layer case). Also zh intent 查案 / 破案 / 偵探.
2424
- `switch mode` → soft-switch protocol (see below)
2525

26-
Intent routes without a clarifying question: descriptions of analyzing encountered material (news, reports, scenes, someone's proposal) → scene; descriptions of structured practice or getting better at a specific argument operation → drill; descriptions of wanting to work a runtime-generated layered case or escape-room-style mystery (distinct from analyzing material the user brings — that is scene) → detective; descriptions of wanting to practice fallacy recognition (is this argument a fallacy — ad hominem, strawman, false dilemma, a fallacious appeal, equivocation, false analogy, whataboutism, slippery slope, genetic fallacy) → scene's fallacy-recognition track (modes/scene.md). Ask the single clarifying question only when intent is genuinely indeterminate.
26+
Intent routes without a clarifying question: descriptions of analyzing encountered material (news, reports, scenes, someone's proposal) → scene; descriptions of structured practice or getting better at a specific argument operation → drill; descriptions of wanting to work a runtime-generated layered case or escape-room-style mystery (distinct from analyzing material the user brings — that is scene) → detective; descriptions of wanting to practice fallacy recognition (is this argument a fallacy — ad hominem, strawman, false dilemma, a fallacious appeal, equivocation, false analogy, whataboutism, slippery slope, genetic fallacy, no true scotsman) → scene's fallacy-recognition track (modes/scene.md). Ask the single clarifying question only when intent is genuinely indeterminate.
2727

2828
**Model recommendation:** detective mode recommends an opus-class or stronger model. Its case generation (reverse-design key chains, ablation self-checks) is the most demanding work in the skill; weaker models are more likely to produce a cosmetic key chain or an unregistered accidental flaw. The fallback ladder degrades or refuses rather than shipping a broken case, but the experience is best on a stronger model.
2929

docs/GATE-checklist.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,25 @@ it can be checked directly), and rules the fabrication-record challenge
514514
settling truth) — proving that origin-settles-truth is the defect, not the mere
515515
mention of a source.
516516

517+
**10K (no-true-scotsman prior-definition test + reverse-guard):** Present a
518+
post-hoc rescue — e.g. "our loyal customers never complain"; when shown a loyal
519+
customer's complaint, "well, a *truly* loyal customer wouldn't complain" (the
520+
qualifier "truly" is added only to expel the counterexample) — paired with a
521+
restriction that was definitional all along — e.g. "practicing Buddhists don't
522+
eat meat" answered with "here's one who does," met by "then they aren't
523+
practicing that precept — the precept is what the term refers to" (the
524+
restriction is prior, not bolted on to dodge the case). Ask for a ruling on each.
525+
FAIL if the coach rules the loyal-customer rescue `not_fallacy` because "loyalty
526+
is a matter of degree" (the qualifier was still introduced only to defeat the
527+
counterexample — that is the fallacy), OR rules the practicing-Buddhist case
528+
`fallacy` merely because a qualifier appears (a definitional restriction that
529+
predates the counterexample is legitimate).
530+
PASS if the coach runs the prior-definition test, rules the loyal-customer
531+
rescue `fallacy` (the "truly" was added after the case, with no independent
532+
reason), and rules the practicing-Buddhist case `not_fallacy` (the precept was
533+
part of the term's meaning before the counterexample) — proving that
534+
post-hoc-unjustified rescue is the defect, not the presence of a qualifier.
535+
517536
---
518537

519538
## Retry Policy

modes/scene.md

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -176,20 +176,20 @@ the coach judges whether the argument's form commits a named fallacy; it still
176176
never ranks the *position* argued, and never ranks political or value
177177
interpretations.
178178

179-
The nine lenses are in `shared/structures.md` (Fallacy-Recognition Lenses):
179+
The ten lenses are in `shared/structures.md` (Fallacy-Recognition Lenses):
180180
`fallacy_false_dilemma`, `fallacy_ad_hominem`, `fallacy_strawman`,
181181
`fallacy_appeal`, `fallacy_equivocation`, `fallacy_false_analogy`,
182-
`fallacy_whataboutism`, `fallacy_slippery_slope`, `fallacy_genetic`. One lens
183-
per round.
182+
`fallacy_whataboutism`, `fallacy_slippery_slope`, `fallacy_genetic`,
183+
`fallacy_no_true_scotsman`. One lens per round.
184184

185-
**Off-list fallacy names.** The nine lenses are the complete ruling surface of
186-
this track. When the user names a fallacy outside them (no true scotsman,
187-
motte-and-bailey, red herring, …), the coach says
185+
**Off-list fallacy names.** The ten lenses are the complete ruling surface of
186+
this track. When the user names a fallacy outside them (motte-and-bailey,
187+
red herring, gambler's fallacy, …), the coach says
188188
plainly that the lens set does not cover that name.
189189
It never improvises a ruling on it — a ruling without a paired defect test
190-
and reverse-guard is exactly the mislabeling risk the nine-lens design exists
190+
and reverse-guard is exactly the mislabeling risk the ten-lens design exists
191191
to prevent. Then, in order:
192-
- If one of the nine lenses genuinely applies to the same passage, offer that
192+
- If one of the ten lenses genuinely applies to the same passage, offer that
193193
lens by name and run the round on it — offered as a swap, never silently
194194
substituted for what the user asked.
195195
- If the name is a manipulation technique in `shared/manipulation-taxonomy.md`
@@ -288,6 +288,16 @@ steps 1–2, then the per-lens test in step 3, then the reverse-guard in step 4:
288288
of proof without settling truth, and that is legitimate, not the fallacy.
289289
Distinguish from `fallacy_ad_hominem`: genetic attacks the belief's pedigree,
290290
ad_hominem attacks the person arguing now.
291+
- `fallacy_no_true_scotsman`**prior-definition test.** Check the sequence:
292+
was a general claim made, was a genuine counterexample raised, and was a
293+
qualifier ("true", "real", "genuine") then added to the claim's subject *in
294+
response* to it? Ask: was that qualifier already part of the term's meaning
295+
before the counterexample, or introduced only to expel it? A restriction
296+
that was there all along (a vegetarian, by definition, does not eat meat) is
297+
not the fallacy; a qualifier bolted on after the case appears, with no
298+
independent reason beyond dodging it, is. Tightening a genuinely vague term
299+
for a principled reason is legitimate — the defect is the *post-hoc,
300+
unjustified* rescue, not the act of qualifying as such.
291301
4. If the active lens's test does NOT find its defect, do NOT label it a fallacy
292302
— return `not_fallacy` (with the reverse-guard reason) or `insufficient_context`
293303
when the material cannot settle it.

platforms/claude-ai/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Routing keywords:
2525
- `detective` → load `modes/detective.md` (guide-and-judge stance; a runtime-generated multi-layer case). Also zh intent 查案 / 破案 / 偵探.
2626
- `switch mode` → soft-switch protocol (see below)
2727

28-
Intent routes without a clarifying question: descriptions of analyzing encountered material (news, reports, scenes, someone's proposal) → scene; descriptions of structured practice or getting better at a specific argument operation → drill; descriptions of wanting to work a runtime-generated layered case or escape-room-style mystery (distinct from analyzing material the user brings — that is scene) → detective; descriptions of wanting to practice fallacy recognition (is this argument a fallacy — ad hominem, strawman, false dilemma, a fallacious appeal, equivocation, false analogy, whataboutism, slippery slope, genetic fallacy) → scene's fallacy-recognition track (modes/scene.md). Ask the single clarifying question only when intent is genuinely indeterminate.
28+
Intent routes without a clarifying question: descriptions of analyzing encountered material (news, reports, scenes, someone's proposal) → scene; descriptions of structured practice or getting better at a specific argument operation → drill; descriptions of wanting to work a runtime-generated layered case or escape-room-style mystery (distinct from analyzing material the user brings — that is scene) → detective; descriptions of wanting to practice fallacy recognition (is this argument a fallacy — ad hominem, strawman, false dilemma, a fallacious appeal, equivocation, false analogy, whataboutism, slippery slope, genetic fallacy, no true scotsman) → scene's fallacy-recognition track (modes/scene.md). Ask the single clarifying question only when intent is genuinely indeterminate.
2929

3030
**Model recommendation:** detective mode recommends an opus-class or stronger model. Its case generation (reverse-design key chains, ablation self-checks) is the most demanding work in the skill; weaker models are more likely to produce a cosmetic key chain or an unregistered accidental flaw. The fallback ladder degrades or refuses rather than shipping a broken case, but the experience is best on a stronger model.
3131

scripts/check_invariants.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@
194194
("shared/structures.md", "lens-whataboutism", "`fallacy_whataboutism`"),
195195
("shared/structures.md", "lens-slippery-slope", "`fallacy_slippery_slope`"),
196196
("shared/structures.md", "lens-genetic", "`fallacy_genetic`"),
197+
("shared/structures.md", "lens-no-true-scotsman", "`fallacy_no_true_scotsman`"),
197198
("shared/structures.md", "lens-reverse-guard-adhominem",
198199
"becomes circumstantial ad hominem"),
199200
("shared/structures.md", "lens-reverse-guard-strawman",
@@ -212,12 +213,16 @@
212213
"only unsupported *inevitability* is the defect"),
213214
("shared/structures.md", "lens-reverse-guard-genetic",
214215
"origin can lower credibility or shift the burden of proof, never settle truth"),
216+
("shared/structures.md", "lens-reverse-guard-no-true-scotsman",
217+
"A restriction that was ALREADY part of the claim's definition is NOT the fallacy"),
215218
("modes/scene.md", "fallacy-whataboutism-defect-test",
216219
"unanswered-charge test", "Fallacy-Recognition Track"),
217220
("modes/scene.md", "fallacy-slippery-slope-defect-test",
218221
"chain-support test", "Fallacy-Recognition Track"),
219222
("modes/scene.md", "fallacy-genetic-defect-test",
220223
"origin-independence test", "Fallacy-Recognition Track"),
224+
("modes/scene.md", "fallacy-no-true-scotsman-defect-test",
225+
"prior-definition test", "Fallacy-Recognition Track"),
221226
("modes/scene.md", "fallacy-track-transfer-test",
222227
"Name the property the conclusion", "Fallacy-Recognition Track"),
223228
("modes/scene.md", "fallacy-track-submode",

shared/structures.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ Scene mode must cycle through all six frames across each scene.
9696

9797
## Fallacy-Recognition Lenses
9898

99-
Scene's **fallacy-recognition track** (modes/scene.md) uses these nine lenses,
100-
and the nine are the complete ruling surface — a fallacy named outside them is
99+
Scene's **fallacy-recognition track** (modes/scene.md) uses these ten lenses,
100+
and the ten are the complete ruling surface — a fallacy named outside them is
101101
declined or redirected, never improvised (modes/scene.md, Off-list fallacy
102102
names).
103103
They are NOT frames — frames are interpretive and never ranked (redline 1);
@@ -112,11 +112,12 @@ Lens IDs are not loggable structure IDs — they never appear in `drill_result.s
112112
| `fallacy_ad_hominem` | Attacks the arguer's character or identity instead of the argument — the person-level fact is offered as a substitute for rebuttal, not as evidence of bias (which would be a fair challenge; see strawman for distorting the argument itself). | A conflict-of-interest challenge is NOT ad hominem ONLY when it supports a limited conclusion — possible bias, lack of independence, a need for corroboration. The SAME conflict becomes circumstantial ad hominem (a fallacy) the moment it is used, by itself, to dismiss the claim or testimony as false, worthless, or not credible: a conflict bears on evidential weight, never on truth value alone. (Equally, challenging a documented pattern of systematic error is NOT ad hominem.) |
113113
| `fallacy_strawman` | Distorts the opponent's argument, then attacks the distortion. | Accurately restating an opponent's weak argument is NOT a strawman. |
114114
| `fallacy_appeal` | Appeals to an irrelevant authority, to emotion, or to the crowd. | Appealing to a relevant expert on their own subject is NOT a fallacy; first-hand emotional testimony is NOT an appeal to emotion; an empirical consensus among domain experts is NOT an appeal to the crowd. |
115-
| `fallacy_equivocation` | The same term is swapped between two meanings across the argument. | A word shifting sense naturally across contexts is NOT equivocation; the swap must occur within one inferential chain. |
115+
| `fallacy_equivocation` | The same term is swapped between two meanings across the argument. | A word shifting sense naturally across contexts is NOT equivocation; the swap must occur within one inferential chain. Distinct from `fallacy_no_true_scotsman`, which narrows one sense of a term after a counterexample; equivocation trades on two senses already in play. |
116116
| `fallacy_false_analogy` | Transfers a conclusion from one case to another on a similarity the conclusion does not actually depend on — the two cases differ on the load-bearing property, so the inference does not carry. | An analogy that DOES share the load-bearing property despite surface differences is NOT false; an analogy offered illustratively with acknowledged limits is NOT the fallacy; surface dissimilarity alone never makes an analogy false. |
117117
| `fallacy_whataboutism` | Deflects a charge by pointing at the accuser's (or a third party's) own sin instead of answering it — the original charge is left standing, only relocated. Not an attack on the arguer's credibility (that is `fallacy_ad_hominem`) and it does not distort the original charge (that is `fallacy_strawman`); it concedes the charge and drowns it in a counter-charge. Also a `whataboutism` manipulation technique (shared/manipulation-taxonomy.md). | Pointing out a genuine double standard or inconsistency is NOT whataboutism when it is offered as a fair challenge to the *principle* the accuser invoked (if you assert this rule, your own breach of it is on the table), rather than as a substitute for answering the original charge; a tu-quoque that actually bears on the accuser's standing to make the specific claim is a live consideration, not automatically the fallacy. |
118118
| `fallacy_slippery_slope` | Asserts that a first step will inexorably lead, through a chain of intermediate steps, to an unacceptable end — while giving no reason each link in the chain actually follows. The defect is the *unsupported* inevitability: the chain does the argumentative work but its steps are asserted, not earned. | A chained or consequentialist argument whose links ARE supported (each step given an empirical or logical reason it follows) is NOT a slippery slope — sometimes a first step really does make the next one likely, and naming a genuine causal chain is legitimate. Uncertainty at one link lowers the argument's force without making it the fallacy; only unsupported *inevitability* is the defect. |
119119
| `fallacy_genetic` | Judges a claim true or false by its ORIGIN — where the idea came from, its history, its source's motive — rather than its content. "It started as wartime propaganda, so it's false"; "the theory came from a discredited figure, so ignore it." Distinct from `fallacy_ad_hominem`, which attacks the person making the argument NOW; the genetic fallacy attacks the belief's pedigree, and the source may be historical, institutional, or non-personal. | Tracing a claim to its source is NOT the fallacy when the source bears on evidential WEIGHT rather than truth — a study from a lab with a documented fabrication record warrants more scrutiny, and a claim resting solely on one authority's say-so is fairly challenged by questioning that authority. The line is the same as ad_hominem's: origin can lower credibility or shift the burden of proof, never settle truth by itself. |
120+
| `fallacy_no_true_scotsman` | Meets a counterexample to a general claim by redefining the claim's subject *after the fact* to exclude the counterexample — "no Scotsman does that" → "no *true* Scotsman does that" — so the claim is rescued by making it unfalsifiable. The qualifier ("true", "real", "genuine") does no independent work; it is added only to expel the case that would refute the claim. Distinct from `fallacy_equivocation`, which alternates two *standing* senses of a term within one inferential chain; here one sense is narrowed post-hoc to rescue a claim. | A restriction that was ALREADY part of the claim's definition is NOT the fallacy — "a vegetarian doesn't eat meat" excludes a meat-eater by definition, not by post-hoc rescue. The fallacy needs three things: a general claim, a genuine counterexample, and a qualifier introduced *in response* to it with no independent justification. Tightening a genuinely vague term for a principled reason (not merely to dodge the case) is legitimate. |
120121

121122
---
122123

0 commit comments

Comments
 (0)