$npx -y skills add UnpaidAttention/fable5-methodology --skill self-consistency-checkForce the combination step that a weaker model can't do in one pass — surface conflicts between constraints, and interactions between requirements and edge cases, using a pairwise sweep, a fresh-context cold read by a subagent that never saw your reasoning, and N-version divergen
| 1 | # Self-Consistency Check |
| 2 | |
| 3 | Writing every constraint and edge case down makes a cross-term conflict *visible*; it does not |
| 4 | make it *noticed*. A weaker model can read a complete list and still miss that requirement 3 |
| 5 | breaks edge case 7 — because noticing the interaction requires holding both in mind at once, |
| 6 | which is exactly the single-pass depth that doesn't transfer. This skill replaces that depth |
| 7 | with **procedure**: enumeration (which a weaker model does reliably) forced into combination |
| 8 | (which it doesn't do spontaneously). Run it on a plan/design/spec before you build. |
| 9 | |
| 10 | ## Technique 1: Pairwise constraint sweep (always, for >3 constraints) |
| 11 | |
| 12 | 1. List every constraint, requirement, and known edge case and number them C1..Cn. Pull them |
| 13 | from the spec, the plan, and your assumptions log — don't rely on memory. |
| 14 | 2. Build the grid. Down the side: each constraint. Across the top: each *other* constraint it |
| 15 | could plausibly interact with, plus each edge case. For every plausible pair (Ci, Cj), write |
| 16 | one of: **compatible** (one clause why) or **CONFLICT** (name it). |
| 17 | 3. Rules that make it real, not ritual: |
| 18 | - Do not skip a pair because it "feels fine" — that feeling is the miss you're hunting. |
| 19 | - Bound it to *plausible* interactions, not a blind N² (that's ceremony); but when unsure |
| 20 | whether a pair interacts, include it — the cost of a filled cell is one line. |
| 21 | - Every CONFLICT is either resolved in the design now, or logged as an explicit open |
| 22 | decision. A found-but-unresolved conflict is still a win — it's a bug caught pre-code. |
| 23 | |
| 24 | ## Technique 2: Fresh-context cold read (for interacting/high-stakes designs) |
| 25 | |
| 26 | You miss the conflict because you're anchored on the path that produced the design. Someone who |
| 27 | never walked that path is structurally better positioned to see it. |
| 28 | |
| 29 | 1. Delegate to a subagent. Give it ONLY the artifacts — the spec and the plan/design. |
| 30 | 2. **Withhold your reasoning trace.** Do not tell it what you were thinking or why; that's the |
| 31 | anchor you're trying to escape. Hand it the reasoning and it inherits your blind spot. |
| 32 | 3. Ask exactly: "Which two statements here cannot both be true? Which requirement has no |
| 33 | handling for which edge case? What does this design assume that it never states?" |
| 34 | 4. Treat what it finds as findings to resolve, not opinions to weigh. |
| 35 | |
| 36 | ## Technique 3: N-version divergence (for the hard kernel) |
| 37 | |
| 38 | Parallelism substitutes for depth on the one part that matters most. |
| 39 | |
| 40 | 1. Identify the hard kernel (problem-framing / §15.1) — the ~20% that decides the outcome. |
| 41 | 2. Spawn 2–3 subagents to solve *just the kernel* independently — they must not see each |
| 42 | other's attempts. |
| 43 | 3. Diff the results. **Where they agree**, you're probably safe. **Where they diverge** is the |
| 44 | load-bearing, uncertain decision — the exact spot a single pass would have committed to |
| 45 | blindly. Investigate every divergence; often one branch honored a constraint the others |
| 46 | dropped, which tells you both the right answer and which constraint was slippery. |
| 47 | |
| 48 | ## Worked example |
| 49 | |
| 50 | Design: a "share link" feature. Constraints gathered: C1 links expire after 7 days; C2 links are |
| 51 | revocable instantly; C3 access is logged for audit; C4 anonymous (unauthenticated) users may |
| 52 | open a link; C5 GDPR — a user can delete their account and all associated PII. |
| 53 | |
| 54 | - **Sweep** finds what the list alone hid: (C3 × C5) — audit logs record who accessed a link, |
| 55 | but account deletion (C5) must purge PII, and access logs of *the deleted user's* links are |
| 56 | PII → CONFLICT: the audit-retention policy and the deletion guarantee are unspecified together. |
| 57 | (C4 × C3) — anonymous access logged how? no user id exists → what does "who accessed" even |
| 58 | mean → underspecified. Neither conflict is visible staring at C1–C5 as a list; both surface |
| 59 | the instant you fill the (i,j) cells. |
| 60 | - **Cold read** subagent, given only the spec, asks: "C2 says instantly revocable, C1 says |
| 61 | 7-day expiry — is a revoked link's record kept until day 7 or purged immediately? The spec |
| 62 | never says." A third gap, caught by the un-anchored reader. |
| 63 | - Outcome: three interaction gaps found and resolved (or logged |