{
  "$generated": {
    "checkedBy": "tests/docs.card.test.ts",
    "note": "GENERATED FILE — do not edit by hand.",
    "regenerate": "bun scripts/gen-card.ts",
    "renderer": "tests/support/card.ts",
    "sourceOfTruth": "tests/support/catalog.ts"
  },
  "capabilities": [
    {
      "access": {
        "surfaces": {
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "doc-buy-the-flush",
        "doc-comments-roundtrip",
        "plan-fade-flush",
        "plan-headline-chase"
      ],
      "id": "comments",
      "receipts": {
        "source": [
          "src/lang/lex.ts",
          "src/lang/parse.ts",
          "src/lang/print.ts"
        ],
        "test": [
          "tests/docs.fences.test.ts",
          "tests/lang.comments.test.ts"
        ]
      },
      "runtime": {
        "note": "Comments carry no executable behavior, but they round-trip byte-identically through parse→print (own-line at the statement's indent; trailing after a single canonical space) — the authored 'why' is never lost (ADR-0033).",
        "status": "implemented"
      },
      "summary": "`#` to end of line carries the author's thinking so the WHY travels with the strategy. Comments are PRESERVED byte-stably (ADR-0004 / ADR-0033): the lexer captures them as trivia, the printer re-emits them verbatim in canonical position. No runtime semantics by design — reasoning, not behavior.",
      "syntax": {
        "status": "supported"
      },
      "title": "Comments (# reasoning)"
    },
    {
      "access": {
        "note": "MCP: kestrel.validate returns the refusal as an ok:false ValidateOutcome — the reserved keyword never arms.",
        "surfaces": {
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "doc-reject-atomic"
      ],
      "id": "fail-closed-atomic",
      "receipts": {
        "source": [
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/docs.fences.test.ts",
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "The refusal is enforced at parse time — no unguaranteeable all-or-none ticket reaches the engine.",
        "status": "implemented"
      },
      "summary": "The atomic keyword is reserved and refused in v1 — a multi-leg ticket may not claim all-or-none fills the runtime cannot guarantee.",
      "syntax": {
        "note": "The parser raises KestrelParseError (\"reserved and refused\") on the atomic keyword.",
        "status": "rejected"
      },
      "title": "Fail closed: atomic is reserved and refused"
    },
    {
      "access": {
        "note": "MCP: kestrel.validate returns the refusal as an ok:false ValidateOutcome — the non-positive budget never arms.",
        "surfaces": {
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "doc-reject-budget"
      ],
      "id": "fail-closed-budget",
      "receipts": {
        "source": [
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/docs.fences.test.ts",
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "The refusal is enforced at parse time — bounded risk holds before the engine ever arms.",
        "status": "implemented"
      },
      "summary": "Bounded risk is a type: a budget must be a positive risk fraction so the position is always defined-risk. A non-positive budget is refused.",
      "syntax": {
        "note": "The parser raises KestrelParseError (\"positive risk fraction\") on a non-positive budget.",
        "status": "rejected"
      },
      "title": "Fail closed: budget is a positive risk fraction"
    },
    {
      "access": {
        "note": "MCP: kestrel.validate parses the document and returns the refusal as an ok:false ValidateOutcome — the illegal EXIT never arms.",
        "surfaces": {
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "doc-reject-exit-on-mark"
      ],
      "id": "fail-closed-exit-on-mark",
      "receipts": {
        "source": [
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/docs.fences.test.ts",
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "The refusal is enforced at parse time — the illegal statement never reaches the engine.",
        "status": "implemented"
      },
      "summary": "A quote is a health signal, never a value: an active EXIT may not condition on the mark (ADR-0005) — spelled as jargon (mid/bid/ask/last) or as the words a written playbook uses (mark/premium). The parser refuses all of them.",
      "syntax": {
        "note": "The parser raises KestrelParseError (\"marks lie\") on an EXIT conditioned on a mark — mid/bid/ask/last and their plain-English synonyms mark/premium alike.",
        "status": "rejected"
      },
      "title": "Fail closed: no EXIT on a mark"
    },
    {
      "access": {
        "note": "MCP: kestrel.grade grades finalized Blotter artifacts and returns the Gated<GradeOutcome> verbatim.",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "note": "The agent-day-1 practice-tier run was graded mechanically under maker-fair-v1.",
        "tier": "mechanical"
      },
      "examples": [
        "core-grade",
        "grade-headline-chase",
        "grade-open-drive",
        "grammar-skeleton"
      ],
      "id": "grade",
      "receipts": {
        "source": [
          "src/fill/model.ts",
          "src/grade/index.ts",
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/docs.fences.test.ts",
          "tests/fill.test.ts",
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "The fill model and the support-guard contract (bankableEv refuses extrapolated E[$]) exist; the full typed replay grader lands with kestrel-a57.1.",
        "status": "partial"
      },
      "summary": "An imperative replay of authored statements over recorded sessions under a named, versioned fill model, reporting honest EV.",
      "syntax": {
        "status": "supported"
      },
      "title": "Grade statement"
    },
    {
      "access": {
        "surfaces": {
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "note": "The frozen-armory VS-null counterfactual was computed in the agent-day-1 practice-tier run.",
        "tier": "mechanical"
      },
      "examples": [
        "core-grade",
        "grade-headline-chase",
        "grade-open-drive"
      ],
      "id": "grade-counterfactuals",
      "receipts": {
        "source": [
          "src/grade/index.ts",
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "Counterfactual clauses parse; the frozen-armory (VS null) counterfactual ran mechanically in agent-day-1; full stratified grading lands with kestrel-a57.1.",
        "status": "partial"
      },
      "summary": "Counterfactuals as syntax — VS ungated (did the gate earn its keep?), VS null (any edge at all?) — and stratified BY dimensions.",
      "syntax": {
        "status": "supported"
      },
      "title": "Grade counterfactuals"
    },
    {
      "access": {
        "surfaces": {
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "grammar-skeleton"
      ],
      "id": "module-imports",
      "receipts": {
        "source": [
          "src/lang/ast.ts",
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "Cross-document import linking (resolving IMPORT to another document's exports) is not yet implemented; parse/print only.",
        "status": "none"
      },
      "summary": "Every document is a module; its named statements are importable by other documents (import what you reuse).",
      "syntax": {
        "note": "IMPORT / module documents parse and round-trip; the public example is proposed skeleton notation.",
        "status": "supported"
      },
      "title": "Modules & IMPORT"
    },
    {
      "access": {
        "note": "MCP: authored + fired/managed through the incremental Session lifecycle (kestrel.session.open → advance/revise a Plan document → finalize).",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "note": "Exercised end-to-end in the agent-day-1 practice-tier run.",
        "tier": "mechanical"
      },
      "examples": [
        "core-plan-fade",
        "doc-breakout-ladder",
        "doc-buy-the-flush",
        "doc-clause-skeleton",
        "grammar-skeleton",
        "overview-plan",
        "plan-fade-flush",
        "plan-headline-chase",
        "plan-open-drive"
      ],
      "id": "plan",
      "receipts": {
        "source": [
          "src/engine/plans.ts",
          "src/lang/ast.ts",
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/docs.fences.test.ts",
          "tests/engine.plans.test.ts",
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "PlanEngine drives authored → armed → fired → managing → done with fire-then-inform (RUNTIME §5).",
        "status": "implemented"
      },
      "summary": "A standing, bounded-risk contingent program: trigger → actions → bracket → invalidation → TTL, fired by the runtime at machine speed while the author is informed in parallel.",
      "syntax": {
        "status": "supported"
      },
      "title": "Plan statement"
    },
    {
      "access": {
        "note": "MCP: the ARM inventory handshake is applied by the runtime during a kestrel.session lifecycle (across a supersede).",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "plan-acquire-open",
        "plan-manage-adopt"
      ],
      "id": "plan-arm",
      "receipts": {
        "source": [
          "src/engine/plans.ts",
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/plan.inventory.test.ts",
          "tests/session.day-adoption.test.ts",
          "tests/session.day-arm-footgun.test.ts"
        ]
      },
      "runtime": {
        "note": "At the supersede→arm handshake the binding transfers management authority for each genuinely-held leg from the acquisition-halted source to the bound replacement, then promotes a pure adopter (an ARM binding with no fireable entry) armed→managing so its EXIT/TP actually run (RUNTIME §5, kestrel-22j.14/r866).",
        "status": "implemented"
      },
      "summary": "A replacement plan adopts a superseded plan's held leg with `ARM [basis <px>] foreach held leg`, so it can manage and covered-exit inventory it did not open itself — never naked, never inferred from a matching strike.",
      "syntax": {
        "status": "supported"
      },
      "title": "ARM (inventory adoption — the exit escape hatch)"
    },
    {
      "access": {
        "note": "MCP: EXIT is evaluated by the runtime during a kestrel.session lifecycle.",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "note": "EXIT clauses armed in the agent-day-1 practice-tier run.",
        "tier": "mechanical"
      },
      "examples": [
        "doc-breakout-ladder",
        "plan-headline-chase",
        "plan-open-drive"
      ],
      "id": "plan-exit",
      "receipts": {
        "source": [
          "src/engine/plans.ts"
        ],
        "test": [
          "tests/engine.plans.test.ts"
        ]
      },
      "runtime": {
        "note": "EXIT (with esc/STAND retry ordering) runs in the manage phase (RUNTIME §5).",
        "status": "implemented"
      },
      "summary": "An active out on an underlying trigger (never on option marks) — giveback means the thesis is dead, get out.",
      "syntax": {
        "status": "supported"
      },
      "title": "EXIT (active out)"
    },
    {
      "access": {
        "note": "MCP: INVALIDATE is enforced by the runtime during a kestrel.session lifecycle.",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "core-plan-fade",
        "plan-fade-flush"
      ],
      "id": "plan-invalidate",
      "receipts": {
        "source": [
          "src/engine/plans.ts"
        ],
        "test": [
          "tests/engine.plans.test.ts"
        ]
      },
      "runtime": {
        "note": "INVALIDATE halts acquisition while filled inventory persists (RUNTIME §5).",
        "status": "implemented"
      },
      "summary": "Thesis broken: stop adding, ride the bounded remainder — distinct from EXIT, which flattens.",
      "syntax": {
        "status": "supported"
      },
      "title": "INVALIDATE (thesis dead)"
    },
    {
      "access": {
        "note": "MCP: RELOAD rungs are managed by the runtime during a kestrel.session lifecycle.",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "note": "Reload rungs armed in the agent-day-1 practice-tier run.",
        "tier": "mechanical"
      },
      "examples": [
        "doc-breakout-ladder",
        "plan-fade-flush",
        "plan-headline-chase"
      ],
      "id": "plan-reload",
      "receipts": {
        "source": [
          "src/engine/plans.ts"
        ],
        "test": [
          "tests/engine.plans.test.ts"
        ]
      },
      "runtime": {
        "note": "Reload rungs re-checked against cumulative budget at every placement (RUNTIME §5).",
        "status": "implemented"
      },
      "summary": "Add rungs into the thesis on further confirmation — worse price = better entry for a fade; the ladder IS the thesis.",
      "syntax": {
        "status": "supported"
      },
      "title": "RELOAD ladder"
    },
    {
      "access": {
        "note": "MCP: TP tiers are maintained by the runtime during a kestrel.session lifecycle.",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "note": "TP tiers rested in the agent-day-1 practice-tier run.",
        "tier": "mechanical"
      },
      "examples": [
        "doc-breakout-ladder",
        "doc-buy-the-flush",
        "plan-fade-flush",
        "plan-headline-chase",
        "plan-open-drive"
      ],
      "id": "plan-tp",
      "receipts": {
        "source": [
          "src/engine/plans.ts"
        ],
        "test": [
          "tests/engine.plans.test.ts"
        ]
      },
      "runtime": {
        "note": "TP maintenance runs in the manage phase of every fired plan (RUNTIME §5). The tier threshold is evaluated on fair (the value anchor, kestrel-lic3): with an `@` the sell arms once fair crosses the threshold and rests at the `@` exec anchor; without one it rests at the target-derived price immediately and fills on market crossing.",
        "status": "implemented"
      },
      "summary": "Take-profit tiers on the position — bank a fraction at a multiple, resting at a value anchor.",
      "syntax": {
        "status": "supported"
      },
      "title": "TP (take-profit tiers)"
    },
    {
      "access": {
        "surfaces": {
          "cli": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "grammar-skeleton"
      ],
      "id": "pod-book",
      "receipts": {
        "source": [
          "src/engine/plans.ts",
          "src/lang/parse.ts",
          "src/org/index.ts"
        ],
        "test": [
          "tests/engine.plans.test.ts",
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "Book envelope arbitration and org-tree budget nesting are enforced by the engine; deeper Pod recursion is still narrow.",
        "status": "implemented"
      },
      "summary": "The recursive org tree — an allocating Pod (PM + envelope) over Books (the only place positions live); budgets nest, authority only narrows.",
      "syntax": {
        "note": "Concrete POD/BOOK/RISK statements parse and round-trip; the public example is proposed skeleton notation.",
        "status": "supported"
      },
      "title": "Pod / Book / Risk org"
    },
    {
      "access": {
        "note": "MCP: BOOK anchors parse via kestrel.validate and price orders the runtime places across the kestrel.session lifecycle.",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "core-plan-fade",
        "doc-breakout-ladder",
        "doc-buy-the-flush",
        "overview-plan",
        "plan-fade-flush",
        "plan-headline-chase",
        "plan-open-drive"
      ],
      "id": "price-book-anchors",
      "receipts": {
        "source": [
          "src/engine/pricing.ts"
        ],
        "test": [
          "tests/engine.pricing.test.ts"
        ]
      },
      "runtime": {
        "note": "Read off the leg quote; a needed dark side makes the whole line unresolvable (fail-closed, RUNTIME §4).",
        "status": "implemented"
      },
      "summary": "bid · ask · mid · last · join · improve — queue position, not value; a dark side fails the line closed.",
      "syntax": {
        "status": "supported"
      },
      "title": "BOOK price anchors"
    },
    {
      "access": {
        "note": "MCP: combinators parse via kestrel.validate and bound the runtime's resting orders across the kestrel.session lifecycle.",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "note": "peg/cap bounded the resting orders in the agent-day-1 practice-tier run.",
        "tier": "mechanical"
      },
      "examples": [
        "core-plan-fade",
        "doc-breakout-ladder",
        "doc-buy-the-flush",
        "overview-plan",
        "plan-fade-flush",
        "plan-headline-chase",
        "plan-open-drive"
      ],
      "id": "price-combinators",
      "receipts": {
        "source": [
          "src/engine/pricing.ts"
        ],
        "test": [
          "tests/engine.pricing.test.ts"
        ]
      },
      "runtime": {
        "note": "BUY caps compose tightest, SELL floors compose highest and always include intrinsic; peg reprices on ≥1-tick drift (RUNTIME §4).",
        "status": "implemented"
      },
      "summary": "Combinators on any anchor: interpolation lean(a,b,x), guards min/max, offsets (fair-3c), tracking peg, bounds cap (buys) / floor (sells ≥ intrinsic), and time escalation esc.",
      "syntax": {
        "status": "supported"
      },
      "title": "Price combinators"
    },
    {
      "access": {
        "note": "MCP: the runtime resolves VALUE anchors while pricing fills across the kestrel.session lifecycle (kestrel.validate parses them).",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "note": "Priced the fills graded in the agent-day-1 practice-tier run.",
        "tier": "mechanical"
      },
      "examples": [
        "core-plan-fade",
        "doc-breakout-ladder",
        "doc-buy-the-flush",
        "overview-plan",
        "plan-fade-flush",
        "plan-headline-chase",
        "plan-open-drive"
      ],
      "id": "price-value-anchors",
      "receipts": {
        "source": [
          "src/engine/pricing.ts",
          "src/fair/index.ts"
        ],
        "test": [
          "tests/engine.pricing.test.ts",
          "tests/fair.test.ts"
        ]
      },
      "runtime": {
        "note": "fair = ExecutionFair with receipts; a silent mid is forbidden and every fallback is annotated (RUNTIME §4).",
        "status": "implemented"
      },
      "summary": "fair · intrinsic · basis — model worth, settle floor, and your own cost; a quote is never a value.",
      "syntax": {
        "status": "supported"
      },
      "title": "VALUE price anchors"
    },
    {
      "access": {
        "surfaces": {
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "doc-breakout-ladder",
        "doc-comments-roundtrip"
      ],
      "id": "roundtrip",
      "receipts": {
        "source": [
          "src/lang/parse.ts",
          "src/lang/print.ts"
        ],
        "test": [
          "tests/docs.fences.test.ts",
          "tests/lang.comments.test.ts",
          "tests/lang.golden.test.ts"
        ]
      },
      "runtime": {
        "note": "print ∘ parse is idempotent and canonical; golden fixtures pin the contract.",
        "status": "implemented"
      },
      "summary": "print(parse(text)) is a byte-stable fixed point; the typed object model is canonical and text is a projection of it (ADR-0004).",
      "syntax": {
        "status": "supported"
      },
      "title": "Byte-stable round-trip"
    },
    {
      "access": {
        "note": "MCP: WHEN parses via kestrel.validate and the runtime evaluates it across the kestrel.session lifecycle.",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "note": "Triggers gated the plans in the agent-day-1 practice-tier run.",
        "tier": "mechanical"
      },
      "examples": [
        "core-plan-fade",
        "core-wake",
        "doc-breakout-ladder",
        "doc-buy-the-flush",
        "overview-plan",
        "plan-fade-flush",
        "plan-headline-chase",
        "plan-open-drive",
        "wake-fast-move"
      ],
      "id": "trigger-algebra",
      "receipts": {
        "source": [
          "src/lang/parse.ts",
          "src/series/trigger.ts"
        ],
        "test": [
          "tests/engine.plans.test.ts",
          "tests/series.test.ts"
        ]
      },
      "runtime": {
        "note": "Tri-state, causal evaluation with per-trigger edge memory over the series provider (RUNTIME §3).",
        "status": "implemented"
      },
      "summary": "The shared WHEN expression language — named series × predicates (compare, cross, held, within, velocity) × AND/OR/NOT — used by Wake, Plan, and Grade alike.",
      "syntax": {
        "status": "supported"
      },
      "title": "Trigger algebra (WHEN)"
    },
    {
      "access": {
        "note": "MCP: USING resolves into each leg at arm through the kestrel.session lifecycle (kestrel.validate parses it).",
        "surfaces": {
          "cli": "available",
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "note": "USING scoped the plans in the agent-day-1 practice-tier run.",
        "tier": "mechanical"
      },
      "examples": [
        "doc-breakout-ladder",
        "grammar-skeleton",
        "plan-headline-chase",
        "plan-open-drive"
      ],
      "id": "using-defaults",
      "receipts": {
        "source": [
          "src/engine/plans.ts",
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/engine.plans.test.ts",
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "Defaults resolve into each leg at build/arm; per-leg overrides win.",
        "status": "implemented"
      },
      "summary": "Scoped signal/exec defaults for a document; any leg may override — composition over repetition.",
      "syntax": {
        "status": "supported"
      },
      "title": "USING scoped defaults"
    },
    {
      "access": {
        "note": "MCP: the OPEN Frame is delivered by kestrel.session.start (the typed SessionFrame struct verbatim — a Rendering of it is the caller's); a VIEW document is authorable across the session.",
        "surfaces": {
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "frame-view",
        "grammar-skeleton"
      ],
      "id": "view",
      "receipts": {
        "source": [
          "src/frame/index.ts",
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/frame.test.ts",
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "The Frame renderer (keyframe + delta) is implemented; wiring a VIEW statement's pane selection into it is not complete.",
        "status": "partial"
      },
      "summary": "The standing definition of what should be seen — which panes, at what token budget — materialized as a Frame.",
      "syntax": {
        "note": "Concrete VIEW statements parse and round-trip (lang.parse; see the frame-view example); the grammar skeleton is proposed notation.",
        "status": "supported"
      },
      "title": "View statement"
    },
    {
      "access": {
        "note": "MCP: a WAKE document is authored via the kestrel.session lifecycle (advance/revise supersede); the runtime emits WAKE informs for fired plans across the session.",
        "surfaces": {
          "mcp": "available",
          "sdk": "available",
          "text": "available"
        }
      },
      "evidence": {
        "tier": "none"
      },
      "examples": [
        "core-wake",
        "grammar-skeleton",
        "wake-fast-move"
      ],
      "id": "wake",
      "receipts": {
        "source": [
          "src/lang/ast.ts",
          "src/lang/parse.ts"
        ],
        "test": [
          "tests/lang.parse.test.ts"
        ]
      },
      "runtime": {
        "note": "The runtime emits WAKE informs for fired plans (fire-then-inform); a standalone WAKE subscription scheduler is not yet wired.",
        "status": "partial"
      },
      "summary": "A standing subscription over the trigger algebra that spends attention (tokens, wakes), never risk; it delivers a View.",
      "syntax": {
        "note": "Concrete WAKE statements parse and round-trip (lang.parse; see the core-wake example); the grammar skeleton is proposed notation.",
        "status": "supported"
      },
      "title": "Wake statement"
    }
  ],
  "catalogHash": "sha256:a3bb213498d602194d155331ae2b5503c14f56416e08bf5648ae70d9ca0e2fa4",
  "certifiedCohort": 0,
  "evidenceSource": "docs/results/agent-day-1.md",
  "languageVersion": "0.4.20",
  "markdownTokens": 3473,
  "nonNegotiables": [
    {
      "detail": "a parse escape stands down; an unknown series de-arms with a logged reason — never a silent default.",
      "rule": "Fail closed"
    },
    {
      "detail": "a budget is a positive risk fraction (a type); a SELL is floored at intrinsic.",
      "rule": "Never naked / bounded risk"
    },
    {
      "detail": "a quote is a health signal, never a value: no active EXIT conditions on the mark — mid/bid/ask/last or the human words mark/premium — and mid is never a price anchor.",
      "rule": "Marks lie"
    },
    {
      "detail": "the certified honest-tier cohort is 0; a mechanical (practice) run is never labeled certified.",
      "rule": "Evidence honesty"
    },
    {
      "detail": "the typed object model is canonical; `print(parse(text))` is a byte-stable fixed point (ADR-0004).",
      "rule": "Text is a projection"
    }
  ],
  "objectText": [
    {
      "note": "A Wake spends attention, never risk. Its `when` is the shared trigger algebra as a typed node.",
      "object": {
        "kind": "wake",
        "name": "momentum",
        "when": {
          "kind": "cross",
          "dir": "above",
          "left": {
            "kind": "series",
            "segments": [
              {
                "name": "spot"
              }
            ]
          },
          "right": {
            "kind": "series",
            "segments": [
              {
                "name": "hod"
              }
            ]
          }
        }
      },
      "text": "WAKE momentum\n  WHEN spot crosses above hod",
      "title": "Wake — a standing subscription over the trigger algebra"
    },
    {
      "note": "`VS` counterfactuals and `BY` dimensions are syntax, not config; the object mirrors the text one-for-one.",
      "object": {
        "kind": "grade",
        "by": [
          {
            "kind": "dim-vehicle"
          }
        ],
        "fill": "maker-fair-v1",
        "over": {
          "kind": "corpus-range",
          "from": "2024-01-01",
          "to": "2024-03-31"
        },
        "subject": {
          "kind": "grade-subject",
          "name": "fade",
          "what": "plan"
        },
        "versus": [
          {
            "kind": "cf-ungated"
          },
          {
            "kind": "cf-null"
          }
        ]
      },
      "text": "GRADE plan fade OVER 2024-01-01..2024-03-31 FILL maker-fair-v1\n  VS ungated null\n  BY vehicle",
      "title": "Grade — an imperative replay with counterfactuals"
    },
    {
      "note": "The printer elides USING-covered qualifiers and normalizes spacing; the object carries the full structure (see card.json).",
      "object": {
        "kind": "plan",
        "budget": {
          "kind": "budget",
          "unit": "R",
          "value": 0.3
        },
        "clauses": [
          {
            "kind": "do",
            "legs": [
              {
                "kind": "leg",
                "qty": 1,
                "right": "P",
                "side": "buy",
                "strike": {
                  "kind": "strike-rel",
                  "steps": -1
                }
              }
            ],
            "policy": {
              "kind": "order-policy",
              "pricing": "peg"
            },
            "price": {
              "kind": "lean",
              "a": {
                "kind": "anchor",
                "name": "bid"
              },
              "b": {
                "kind": "anchor",
                "name": "fair"
              },
              "x": 0.5
            }
          },
          {
            "kind": "tp",
            "frac": 0.5,
            "price": {
              "kind": "anchor",
              "name": "fair"
            },
            "target": {
              "kind": "tp-mult",
              "mult": 2
            }
          }
        ],
        "name": "fade",
        "ttl": {
          "kind": "ttl-rel",
          "dur": {
            "kind": "duration",
            "unit": "m",
            "value": 30
          }
        },
        "when": {
          "kind": "cross",
          "dir": "below",
          "left": {
            "kind": "series",
            "segments": [
              {
                "name": "spot"
              }
            ]
          },
          "right": {
            "kind": "series",
            "segments": [
              {
                "name": "vwap"
              }
            ]
          }
        }
      },
      "text": "PLAN fade budget 0.3R ttl +30m\n  WHEN spot crosses below vwap\n  DO buy 1 -1 P @ lean(bid, fair, 0.5) peg\n  TP 2x frac 0.5 @ fair",
      "title": "Plan — bounded-risk contingent program (trigger → action → take-profit)"
    },
    {
      "note": "An equity/spot leg is `buy N shares` — the `shares` marker replaces the strike+right an option leg carries (ADR-0017); the ambient `exec` symbol is the instrument. Omit `shares` and the parser refuses `buy N @ …`, naming both continuations.",
      "object": {
        "kind": "plan",
        "budget": {
          "kind": "budget",
          "unit": "R",
          "value": 0.5
        },
        "clauses": [
          {
            "kind": "do",
            "legs": [
              {
                "kind": "equity-leg",
                "qty": 100,
                "side": "buy"
              }
            ],
            "price": {
              "kind": "anchor",
              "name": "spot"
            }
          }
        ],
        "name": "accumulate",
        "ttl": {
          "kind": "ttl-rel",
          "dur": {
            "kind": "duration",
            "unit": "m",
            "value": 30
          }
        },
        "when": {
          "kind": "cross",
          "dir": "above",
          "left": {
            "kind": "series",
            "segments": [
              {
                "name": "spot"
              }
            ]
          },
          "right": {
            "kind": "series",
            "segments": [
              {
                "name": "vwap"
              }
            ]
          }
        }
      },
      "text": "PLAN accumulate budget 0.5R ttl +30m\n  WHEN spot crosses above vwap\n  DO buy 100 shares @ spot",
      "title": "Plan — an equity ticket (shares, not option strikes)"
    }
  ],
  "rejects": [
    {
      "doctrine": "The parser raises KestrelParseError (\"reserved and refused\") on the atomic keyword.",
      "id": "fail-closed-atomic"
    },
    {
      "doctrine": "The parser raises KestrelParseError (\"positive risk fraction\") on a non-positive budget.",
      "id": "fail-closed-budget"
    },
    {
      "doctrine": "The parser raises KestrelParseError (\"marks lie\") on an EXIT conditioned on a mark — mid/bid/ask/last and their plain-English synonyms mark/premium alike.",
      "id": "fail-closed-exit-on-mark"
    }
  ],
  "statementKinds": [
    {
      "kind": "VIEW",
      "answers": "what should I see? — panes at a token budget, materialized as a Frame"
    },
    {
      "kind": "WAKE",
      "answers": "when should I look? — a standing subscription that spends attention, not risk"
    },
    {
      "kind": "PLAN",
      "answers": "what may execute? — a bounded-risk contingent program the runtime fires"
    },
    {
      "kind": "GRADE",
      "answers": "did it actually work? — an imperative replay reporting honest EV"
    }
  ],
  "surfaces": [
    "text",
    "sdk",
    "cli",
    "mcp"
  ],
  "tokenBudget": 6000,
  "tokenizer": "kestrel-card/word-punct-v1"
}
