# LOADED_FRAME_HANDLE -- Template

**Purpose:** Shape of the object returned to the orchestrator on successful binding. Downstream components consume the uniform interface; they do not inspect frame internals.

---

## 1. Schema

```json
{
  "handle_id": "string (UUID; session-unique)",
  "frame_id": "one of: pragmatist | phenomenological | constructivist | realist_cmo | historiographic | discourse_analytic | chilisa_indigenous",
  "ram_frame_id": "one of: RAM_S02 | RAM_S03 | RAM_S08",
  "question_id": "string",
  "hook_bindings_fingerprint": "sha256 hex",
  "interface": {
    "retrieve": "callable(query) -> [retrieved_artifacts] (writes Evaluator Search Ledger entries)",
    "score": "callable(audit_artifact) -> {axis_warrant, axis_fit, axis_robustness, non_collapse: true}",
    "terminate_q": "callable(state) -> bool (closure test per frame's termination_hook)",
    "compat": "callable() -> compatibility_declaration"
  },
  "compatibility_declaration": {
    "methodological": "<eval_sig> | <ram_sig>",
    "semantic": "<eval_sig> | <ram_sig>",
    "ontological": "<eval_sig> | <ram_sig>",
    "summary": "DISTINCT | PARTIAL"
  },
  "role_divider_decision": "NOT_REQUIRED | REQUIRED_AND_PRESENT | REQUIRED_AND_MISSING_REFUSE",
  "chilisa_constraint_state": "NONE | OVERLAY_ACTIVE | PRIMARY_FRAME",
  "four_rs_gate_attached": "bool (true iff chilisa_constraint_state != NONE)",
  "retrieval_hook_config": {
    "corpora": ["..."],
    "query_style": "...",
    "exclusion_rules": ["..."]
  },
  "scoring_hook_config": {
    "axis_warrant_formula_id": "...",
    "axis_fit_formula_id": "...",
    "axis_robustness_formula_id": "...",
    "aggregation_rule": "non_collapse"
  },
  "termination_hook_config": {
    "rule_id": "...",
    "minimum_artifacts": 0,
    "closure_test_id": "..."
  },
  "bound_at": "ISO-8601 timestamp"
}
```

## 2. Contract

- The handle is the ONLY object downstream components consume from Frame Host. They do not open methodology packs directly at runtime.
- `handle_id` is session-unique; the orchestrator may hold multiple handles (e.g., for parallel audits), but each `question_id` has at most one active handle.
- `role_divider_decision` of `REQUIRED_AND_MISSING_REFUSE` is never present on a returned handle -- refusal prevents handle emission.
- `four_rs_gate_attached == true` means `score()` calls gate through the Four-Rs predicate first.
- All four callable methods must resolve at invocation time against the frame's methodology pack. Unbound calls are STRUCTURAL_ERROR.
