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.
The six stages
The transitions come from the server, not from the browser.
| Stage | You state | You get |
|---|---|---|
| 1. Frame | the decision, the options, the horizon | a declared outcome and the option set |
| 2. Design | which variables matter and how they relate | a validated structure, or the errors that stop it |
| 3. Approve | who accepts this model, and why | an approval with a name attached |
| 4. Execute | what actually happened | the 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.
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.
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.
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.