skills/causal-reasoning-initial-report-of-a-nat/SKILL.md
Naturalistic causal reasoning for failures and disputed attribution. Use when postmortems or root-cause debates need reframing. NOT for causal inference, fault trees, or fully observed failures.
npx skillsauth add curiositech/windags-skills causal-reasoning-initial-report-of-a-natInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when the point is not just to name a cause, but to choose the right explanatory frame and stop at the right level of closure.
Load this skill when:
flowchart TD
A[Outcome needs explanation] --> B{Failure determinate and fully observed?}
B -->|Yes| C[Use a simpler reliability or root-cause method]
B -->|No| D[Choose the working frame]
D --> E{Best fit right now?}
E -->|Event| F[Test reversible trigger causes]
E -->|Condition| G[Inspect enabling structures]
E -->|Story| H[Model interacting streams over time]
E -->|List| I[Enumerate candidates, then upgrade the frame]
E -->|Abstraction| J[Match known failure patterns]
F --> K[Apply propensity, reversibility, and covariation]
G --> K
H --> K
I --> K
J --> K
K --> L{Enough understanding for the decision at hand?}
L -->|No| M[Reframe or gather probe evidence]
L -->|Yes| N[Output action-cause plus causal story]
Use this routing model first:
Real-world causal reasoning uses five structurally different explanation forms. The form chosen is not neutral; it determines what counts as a relevant cause to search for.
| Type | What it looks like | Domain bias | | --- | --- | --- | | Event | "X happened, which caused Y" — counterfactual and reversible | Sports, military decisions | | Abstraction | "This is an instance of pattern P" — category-based | Law, medicine, science | | Condition | "The environment made this likely or inevitable" — structural | Policy, safety analysis | | List | "Factors A, B, C contributed" — enumeration without mechanism | Journalism, early diagnosis | | Story | "A complex interaction of X, Y, Z unfolded over time" — mechanistic narrative | Economics, complex failures |
Why it matters: an analyst using only event-type reasoning in a systemic failure will miss structural conditions. An analyst stuck in list-type reasoning will enumerate causes without modeling interaction.
The search for causes and the construction of an explanatory frame happen simultaneously, not sequentially. The frame determines what counts as a relevant cause; the causes found reshape the frame.
[Candidate Causes] <-> [Explanatory Frame]
each reshapes the other in real time
If you start with the wrong frame, you will systematically miss causes that do not fit it. Changing the frame is not "trying harder"; it is accessing a different search space.
These are the workhorses of causal judgment. They operate independently and can produce conflicting verdicts:
Always apply all three. Context can flip the verdict of each.
Humans compress dynamic, nonlinear, simultaneous causality into linear chains. This is both:
The right move is to know which register you are in:
In organizational, political, military, and economic domains, there is often no single true cause. Multiple interacting partial causes are the rule. The right output in complex domains is a partial-cause set with explicit uncertainty, not a falsely precise single root cause.
Treating "find the single root cause" as the goal of causal analysis. In complex domains, this produces a named cause that absorbs blame while leaving structural vulnerabilities intact.
Searching harder inside a failing frame instead of changing the frame. When the search stalls, the failure is often in the framing choice, not in the analyst's effort.
Describing processes that happened in parallel and interacted as though they happened one after another. This is the reductive tendency in its most dangerous form.
Using event-type reasoning for condition-caused failures, or using a list of factors when a story of interaction is required.
Achieving closure at the action-cause level and pretending it is the same as structural understanding. Immediate intervention and durable prevention need different outputs.
If every cause in your answer fits into a clean single-file chain with no enabling conditions, you probably compressed a story into a slogan.
Situation:
Better framing:
Output:
Situation:
Better move:
Fork when contested attribution or high stakes justify frame diversity:
Keep closure decisions in the parent lane so one actor decides when the evidence is sufficient for action.
Load these files on demand when the specific sub-problem arises. Do not load all at once.
| File | Load When... |
| --- | --- |
| diagrams/01_flowchart_decision-points.md | You need the decision flow as a standalone artifact for review or handoff. |
| references/five-forms-of-causal-explanation.md | You need to identify or choose the right explanation type. |
| references/reciprocal-framing-and-causal-search.md | The search for causes is stalling or producing thin results. |
| references/three-causal-criteria-for-agent-diagnosis.md | You are evaluating specific candidate causes. |
| references/reductive-tendency-and-when-to-resist-it.md | The causal account feels too linear or too simple. |
| references/indeterminate-causation-and-partial-explanations.md | Multiple causes are present and "root cause" pressure is distorting the analysis. |
| references/domain-expertise-and-causal-frame-selection.md | An expert's framing choice seems opaque or contested. |
| references/causal-stories-as-system-models.md | The failure is complex, systemic, or organizational. |
| references/closure-decisions-and-the-action-understanding-tradeoff.md | Analysis must end and action must begin. |
tools
Building resilient distributed systems with circuit breakers, retries with full-jitter exponential backoff, retry budgets (per-request 3-attempt + per-client 10% ratio per Google SRE), deadline propagation, and the cascading-failure math (4 layers × 3 retries = 64x amplification). Grounded in Resilience4j, Microsoft Cloud Patterns, AWS Architecture Blog (Marc Brooker), and Google SRE Book.
testing
Designing HTTP cache headers that work correctly across browsers, CDNs, and shared proxies — `Cache-Control` directives per RFC 9111, `stale-while-revalidate` and `stale-if-error` per RFC 5861, the Vary header for varying responses, and surrogate keys for tag-based purging. Grounded in IETF RFCs and Cloudflare/Fastly docs.
development
Use when designing or fixing a Content Security Policy on a real site, choosing between nonce-based and hash-based CSP, adding strict-dynamic, debugging "Refused to execute inline script" errors, deploying CSP in report-only mode first, configuring report-to / report-uri, or auditing an existing policy for unsafe-inline / unsafe-eval / wildcards. Triggers: "CSP blocks legitimate inline script", strict-dynamic, nonce-{RANDOM}, sha256-{HASH}, object-src none, base-uri none, frame-ancestors, Trusted Types, X-Content-Security-Policy obsolete, report-only vs enforced. NOT for general HTTP security headers (HSTS, COOP/COEP), Trusted Types deep dive, CORS configuration, or building a WAF.
tools
Choosing and operating an HTTP API versioning strategy that doesn't break clients — Stripe's date-based pinned versions, the Deprecation/Sunset header pair (RFC 9745 + RFC 8594), URI vs header vs media-type approaches, and the version-transformer pattern. Grounded in Stripe's published architecture and IETF RFCs.