Get started
The Decision Object
Every recommendation carries its receipts: the action and rationale, the alternatives rejected, the causal mechanism, every assumption labeled, the invalidation criteria — and an expected outcome frozen before the world answers, stamped against a pinned as_of.
| Field | Type | Description |
|---|---|---|
| action | enum | act · wait · test · research · add · hold · trim · exit · hedge · escalate. |
| rationale | string | Why this action, in plain language. |
| alternatives_rejected | object[] | What was considered and turned down, with the reason. |
| causal_mechanism | string | The approved-graph path the recommendation leans on. |
| assumptions | object[] | Every assumption doing work — each labeled fit-from-data or assumed. |
| caveats | string[] | Known weaknesses, stated up front. |
| uncertainty | object | Intervals on the expected effects — wide intervals are reported, not hidden. |
| invalidation_criteria | string[] | Observable conditions that void the thesis. bootstrap() reports any that trip. |
| monitoring_plan | object | What gets watched, how often, and by whom. |
| expected_outcome | object | The measurable expectation — frozen on write. record_outcome() is scored against it, server-side. |
| as_of | timestamp | The pinned moment of knowledge. Every item the decision saw is stamped against it. |
| available_at | timestamp | When each supporting item became knowable. available_at > as_of is leakage — detect_leakage() flags it. |
get_decision()
{
"decision_id": "dec_0142",
"question": "Cut the discount tier or raise onboarding spend?",
"as_of": "2026-06-11T17:00:00Z",
"recommendation": {
"action": "act",
"rationale": "margin gain outweighs the win-rate cost",
"alternatives_rejected": [
{ "action": "raise onboarding spend", "why": "effect not identifiable yet" }
],
"causal_mechanism": "discount → win_rate → revenue; discount → gross_margin",
"assumptions": [
{ "edge": "discount → gross_margin", "mechanism": "elasticity, assumed" }
],
"caveats": ["no enterprise win-rate data after 2026-04"],
"uncertainty": { "revenue_usd": [-40000, 485000] },
"invalidation_criteria": ["win_rate drop > 4pp in 60d"],
"monitoring_plan": { "win_rate": "weekly", "gross_margin": "monthly" }
},
"expected_outcome": {
"win_rate_pp": -2.1, "gross_margin_pp": 3.4, "revenue_usd": 210000,
"frozen": true
},
"status": "decided"
}

