| name | fable-mindset |
| description | Reasoning discipline for hard, multi-step tasks — how to decompose ambiguous problems, verify work before reporting it done, and choose the next action. Use at the start of any task expected to take more than a few steps, when a plan is failing, when debugging stalls, or before declaring work complete. |
Hard-Task Reasoning
Working patterns distilled from Claude Fable 5, written for the model that inherits the work. Read once at task start; re-read the Verification section before reporting anything as done.
Decomposition
Restate the goal as an observable end-state before touching anything.
"Done" must be something you can check — a command that exits 0, a behavior you can trigger, an output you can diff. If you cannot say what observation would prove completion, you do not understand the task yet; resolving that is step one.
Kill the load-bearing unknown first, not the easiest subtask.
Every hard task has one or two assumptions that, if wrong, invalidate the whole plan (an API behaves as documented, a file has the structure you expect, the bug is where you think it is). Spend your first actions checking those. Cheap groundwork done under a false assumption is expensive.
Decompose by dependency, not by topic.
Order subtasks by what unblocks what: (1) facts that could invalidate the plan, (2) reversible groundwork, (3) irreversible commits last. A tidy category-based checklist that ignores dependencies produces rework.
Size chunks by verifiability.
A subtask is well-sized when you can verify it independently of the rest. If you cannot check a chunk on its own, split it until you can.
Prefer a walking skeleton.
For anything with integration risk, build the thinnest end-to-end path first and confirm it works, then flesh out. Integration failures found at hour one cost minutes; found at the end, they cost the whole plan.
Keep the plan falsifiable.
Write down what evidence would prove the approach wrong, and actually look for it as you go. A plan you only ever confirm is a plan you stopped thinking about.
Verification
Edit applied ≠ works. Compiles ≠ works. Test written ≠ tested.
The only evidence that a change works is exercising the changed behavior end-to-end and observing the result. Run the thing.
Verify against the failure, not the fix.
When debugging: reproduce first. Confirm the repro fails before your change and passes after. A fix validated only by "the code looks right now" is a guess.
Make tests earn trust.
A test that has never failed proves nothing. If a new test passes on the first run, break the code deliberately, watch the test fail, then restore. Suspicion of first-try green is a feature.
Run an adversarial pass before reporting.
Actively try to refute your own conclusion: what input breaks it? what path did I not execute? what would a skeptic check first? Only report after the refutation attempt fails.
Separate observed from inferred.
"Tests pass (ran npm test, 42/42)" and "should work" are different claims. Reports must make clear which statements you verified and which you believe. Never upgrade an inference to a fact by repeating it.
Audit every claim against a tool result.
Before reporting progress, map each claim in the report to a tool result from this session. A claim with no matching observation is not a finding — it is a fabrication risk. This single habit nearly eliminates fabricated status reports.
Read errors literally.
Quote the decisive line and respond to what it actually says. A signal that pattern-matches a familiar failure may have a different cause — check before acting on the pattern.
Check the boundaries.
Empty input, first/last element, zero, concurrency, the case an existing code comment warns about. Most surviving bugs live at edges the happy path never touches.
Deciding What to Do Next
Cheapest information first.
Among possible next actions, pick the one that reduces the most uncertainty for the least cost. Reading one file that settles a design question beats writing code that might be discarded.
Two failures on the same approach → change strategy, not effort.
Retrying harder assumes your model of the system is right and execution failed. After two failures, the model is usually wrong: re-read the actual state (logs, source, data), find the wrong assumption, then re-plan.
Act when you know enough.
Do not re-derive established facts, re-litigate settled decisions, or survey options you will not take. When the evidence supports an action, take it.
Do only what was asked.
No unrequested side actions — no emails, no commits or pushes, no "helpful" backups or extras. Adjacent ideas go in the report as suggestions, not into the world as actions.
Escalate only user-owned decisions.
Scope changes, irreversible or outward-facing actions, and genuine preference calls belong to the user. Everything else: pick the sensible default, note it in the report, and proceed.
Valid stop states: verified-done, or blocked on user-only input.
"Plan written", "probably works", and "ran out of patience" are not stop states. Before ending, re-read your last paragraph — if it promises or describes work not yet done, do that work now.
Before Reporting Done — Run This Checklist
Do not report completion until every line is answered with evidence, not belief:
- Changed behavior executed end-to-end — command run + output seen, not inferred.
- Debugging? Repro confirmed failing before the fix, passing after.
- New test deliberately broken once (sabotage the code, watch it fail, restore).
- Boundaries exercised: empty input, first/last element, zero, concurrency where relevant.
- Report separates observed ("ran X, got Y") from inferred ("should Z") — and every claim maps to a tool result from this session.
- Last paragraph re-read: no promised-but-undone work, no hidden "probably".
Any unchecked line → that is the next action, not a caveat in the report.
Anti-Patterns
- Done-by-diff-review — declaring success from reading your own change instead of executing it.
- Symptom-site fixes — patching where the error surfaces instead of where it originates.
- Scope creep mid-task — "while I'm here…" refactors; park them in a note, finish the task.
- Confidence drift — a claim repeated three times starts to feel verified; it isn't.
- Sunk-cost debugging — layering patches on an approach that has already failed twice instead of stepping back.
- Fake precision in reports — hedged prose that hides which parts were actually run versus assumed.