Skip to content
AnantCausal
How it works

From a decision question to a decision record.

Six stages, and you can stop at any of them. Each one produces something the next one needs, and the value at each stage does not depend on reaching the one after it.

A causal decision is not one question. It is a frame, a model, an approval, an execution, an evaluation and a reconciliation — and most tooling serves exactly one of those and forgets the other five.

Lifecycle

The six stages

The transitions come from the server, not from the browser.

The six stages of a decision, what each stage is given and what it produces
StageYou stateYou get
1. Framethe decision, the options, the horizona declared outcome and the option set
2. Designwhich variables matter and how they relatea validated structure, or the errors that stop it
3. Approvewho accepts this model, and whyan approval with a name attached
4. Executewhat actually happenedthe observed outcome, or its absence
5. Evaluate—the effect with its sensitivity band and its evidence
6. Reconcile—the decision, recorded against the outcome

Stopping is allowed. Frame a decision and stop, and you still have a declared outcome and an option set written down — which is more than most teams have before they start spending.

A stage whose preconditions are not met is refused by the server, and the console reads the available transitions from it. A greyed-out button is a rule, not a rendering bug.

Anatomy

Three layers, and they fail independently

A model is three separate things stacked. Each is checkable, and checking one says nothing about the next.

The structure

Which variables exist and which depend on which. This is the layer that decides whether a question is answerable at all — if an open path runs between treatment and outcome that nothing measurable blocks, no amount of data will recover the effect.

What this does not establish: Structure is elicited from description, documents or data, so it records where each relationship came from. It does not establish that the relationships are real.

The probabilities

Every cell in every conditional table carries its origin — elicited by a language model, entered as expert judgment, fitted to observed counts, or mixed — along with the model and template version that produced it. Where the elicitation ensemble disagreed, the edge is reported as contested rather than resolved silently.

What this does not establish: Provenance describes where a number came from. It is not a judgment about whether the number is right, and a fitted row does not establish a causal relationship.

The values

What each outcome state is worth and what each action costs. These are business inputs the model cannot supply, so they are registered separately, with rationale, and versioned — a later revision of the values cannot silently change what a past decision meant.

What this does not establish: A state you did not price is a refusal, not a zero. A decision model that quietly treats an unpriced outcome as worthless will make a confident wrong recommendation.

Inputs

Where the model comes from

Four ways in, all producing the same artifact: variables, value domains, a directed acyclic graph, and a conditional probability table for each node.

  • A description in prose

    The system is understood by someone but written down nowhere.

  • A document, URL or uploaded file

    The knowledge already exists in a policy, a report or a specification.

  • A pasted table

    You have rows and want the dependence structure screened out of them.

  • A warehouse query

    The counts already live in your database. The API takes a SQL statement for push-down rather than a credential, and the result is reduced to joint counts with the rows dropped.

Method

Where the model is, and where it is not

The language model is confined to one step: turning description into structure and probabilities. Every resulting probability is tagged with the model and template version that produced it, so the contribution is inspectable rather than implied.

The inference itself is exact arithmetic with no model in the loop. The reduction used for decomposition is exact rather than a sampling scheme or a pruning heuristic whose error would have to be reported alongside it.

The transport can be pointed at a model running locally, or replayed against recorded responses — so a question never has to leave the deployment to be answered, and the pipeline is deterministic under test.

If you have a decision to make and a number someone will hold you to, the question is not whether we can produce a number. It is whether you can say where it came from.