# FRAME LOADING RULES -- Evaluator Router

**Phase:** 7 -- orchestration-engineering-max
**Scope:** Which epistemological frame loads for which question class. Role-divider enforcement at Frame Host binding time. Chilisa overlay rules. Compatibility declaration matrix.

The router does NOT pick frames. The operator (via charter) or upstream orchestration does. The router enforces:
- Every question has an explicit `frame_id` AND `ram_frame_id` in the charter.
- Role-divider tokens are present when required.
- Chilisa overlay activates when population_flag fires.
- Frame Host's compatibility declaration + role-divider decision are honored at R3.

---

## 1. The Seven Evaluator Frames

| `frame_id` | Name | Lineage | Strong-fit question class |
|---|---|---|---|
| `pragmatist` | Pragmatist | Dewey, Peirce | Applied / interventional / instrumental |
| `phenomenological` | Phenomenological | Husserl, Merleau-Ponty, Giorgi, Van Manen | First-person experience / meaning / lived practice |
| `constructivist` | Constructivist | Guba-Lincoln, Berger-Luckmann | Stakeholder-laden / category-presupposing / institutional |
| `realist_cmo` | Realist-CMO (AUDIT CRITERION ONLY) | Pawson-Tilley, De Weger, Hinrichsen | Intervention-effect / mechanism / generalizability |
| `historiographic` | Historiographic | White, Ginzburg | Temporal / causal-chain / historical-trend |
| `discourse_analytic` | Discourse-Analytic | Foucault, Fairclough, Potter-Wetherell | Framing / positioning / presupposition |
| `chilisa_indigenous` | Indigenous (Chilisa) | Chilisa 2020 | Indigenous / non-Western / relational; OR constitutive overlay |

## 2. The Three RAM Frames

| `ram_frame_id` | Name | Lineage |
|---|---|---|
| `RAM_S02` | Fitness (GRADE / CERQual) | Guyatt, Sterne, Hammersley |
| `RAM_S03` | Transportability | Pawson-Tilley + Shadish-Cook-Campbell |
| `RAM_S08` | Saturation | Glaser, Saunders, Guest, Callaghan |

## 3. Question-Class to Frame Mapping (advisory map for charter authoring)

This table informs charter authors. The router DOES NOT apply it; Frame Host's Phase 2 selection verification logs negative-fit advisories. Selection authority remains with the charter.

| Question class (charter-declared `question_intent`) | Strong-fit frames | Negative-fit (advisory only) | Notes |
|---|---|---|---|
| `applied` | `pragmatist`, `realist_cmo` | `phenomenological` | If `realist_cmo` + RAM_S03 -> role-divider REQUIRED |
| `lived` | `phenomenological`, `constructivist` | `realist_cmo` | Descriptive-phenomenological or Guba-Lincoln |
| `stakeholder` | `constructivist`, `discourse_analytic` | -- | Hermeneutic-dialectic or CDA/archaeology |
| `mechanism` | `realist_cmo`, `pragmatist` | `discourse_analytic` | Middle-range / inquiry-chain |
| `historical` | `historiographic`, `discourse_analytic` | -- | Trace-saturation or discursive-formation |
| `discursive` | `discourse_analytic`, `constructivist` | -- | Archaeological / CDA / interpretative-repertoire |
| `indigenous` | `chilisa_indigenous` (primary) | Any frame WITHOUT Chilisa overlay | Chilisa overlay mandatory if `population_flag` fires |

Frame Host Phase 2 fires a strong advisory (written to Frame Registry) when the charter's `frame_id` is in the negative-fit column. Audit proceeds unless role-divider or Chilisa overlay rules fire.

---

## 4. Compatibility Matrix (Frame Host's declaration source)

| Evaluator frame -> / RAM frame ↓ | `RAM_S02` | `RAM_S03` | `RAM_S08` |
|---|---|---|---|
| `pragmatist` | DISTINCT | DISTINCT | DISTINCT |
| `phenomenological` | DISTINCT | DISTINCT | DISTINCT |
| `constructivist` | DISTINCT | DISTINCT | DISTINCT |
| `realist_cmo` | DISTINCT | **PARTIAL (role-divider REQUIRED)** | DISTINCT |
| `historiographic` | DISTINCT | DISTINCT | DISTINCT |
| `discourse_analytic` | DISTINCT | DISTINCT | DISTINCT |
| `chilisa_indigenous` | DISTINCT | DISTINCT | DISTINCT |

**PARTIAL fires only for `realist_cmo` x `RAM_S03`.** This is the single cell requiring the role-divider acknowledgment token.

Frame Host's `compatibility_declaration.summary` is DISTINCT or PARTIAL. Frame Divergence Gate then independently evaluates:
- Stage 1 binary structural overlap on three Kuhnian dimensions (methodological, semantic, ontological).
- Stage 2 thresholded divergence index D vs per-question theta_q.

Compatibility declaration is NOT the gate verdict. The gate is two-stage hybrid; the compatibility declaration is an input to the gate's record.

---

## 5. Role-Divider Enforcement at Frame Host Binding Time

### 5.1 When required

Role-divider is REQUIRED when:

```
frame_id == "realist_cmo" AND ram_frame_id == "RAM_S03"
```

In every other cell of the compatibility matrix, role_divider is NOT_REQUIRED.

### 5.2 Acknowledgment token structure

The `role_divider_acknowledgment` is a structured JSON token with TWO REQUIRED CLAUSES:

```json
{
  "clause_a": "the audit will use Pawson-Tilley CMO as audit criterion only",
  "clause_b": "does NOT reuse Pawson-Tilley as transportability signal"
}
```

Both clauses must be present and well-formed. Prose narrative does not substitute. Frame Host's two-clause parser (per `ROLE_DIVIDER_PROTOCOL.md`) validates.

### 5.3 Decision outcomes

Frame Host returns one of three `role_divider_decision` values:

- `NOT_REQUIRED` -- the cell is not PARTIAL; proceed.
- `REQUIRED_AND_PRESENT` -- PARTIAL cell; both clauses well-formed; proceed with acknowledgment logged in Frame Registry.
- `REQUIRED_AND_MISSING_REFUSE` -- PARTIAL cell; token absent or malformed (one/both clauses missing). **HARD REFUSE. Router propagates. Audit does NOT run for this question.**

### 5.4 Router-level enforcement

At R3, the router receives Frame Host's `role_divider_decision`. On `REQUIRED_AND_MISSING_REFUSE`:

1. Router HALTs the run.
2. Router writes `audit-refusal` to the Ledger with `refusal_reason = ROLE_DIVIDER_BREACH`.
3. Router surfaces to operator with two options: (a) supply a well-formed `role_divider_acknowledgment` token via `--role-divider-ack=<path>`, OR (b) change `frame_id` to a non-realist_cmo frame.
4. Router increments `bindings_refused_role_divider_breach` counter (exposed to E9 for detection).

### 5.5 Why LOAD-BEARING

Without the role-divider, Pawson-Tilley is the source for both RAM's S03 transportability signal and the Evaluator's CMO audit criterion. The audit verdict then rests on the same generative-mechanism ontology RAM used -- near-self-audit on causal-claim questions. The dual-system degrades to what it exists to prevent.

---

## 6. Chilisa Constraint Mode

### 6.1 When activates

Chilisa overlay fires when:

- `question_intent == indigenous`, OR
- `population_flag.indigenous_or_non_western == true`.

### 6.2 Two modes

- **Primary frame:** `frame_id == chilisa_indigenous`. `chilisa_constraint_state = PRIMARY_FRAME`. Scoring hooks are Chilisa-native (relational quality, community-prioritized findings, Four-Rs satisfaction).
- **Overlay:** `frame_id` is another frame AND `population_flag.indigenous_or_non_western == true`. `chilisa_constraint_state = OVERLAY_ACTIVE`. Scoring hook of the loaded frame gains a Four-Rs refusal-to-score predicate.

### 6.3 Four Rs

Chilisa's constitutive constraint:

1. Responsibility
2. Respect
3. Reciprocity
4. Rights-and-regulations

On overlay mode, the refusal-to-score predicate fires if Four-Rs evidence is absent on Indigenous/non-Western-population claims. Result: E4 stamps that axis `Non-Assertible` with Chilisa-overlay reason.

### 6.4 Router-level enforcement

Router at R3 passes `population_flag` (if present in charter) to Frame Host. Frame Host Phase 2 auto-activates OVERLAY_ACTIVE if appropriate. If the charter declares `question_intent == indigenous` but frame_id is neither `chilisa_indigenous` nor has overlay activated, Frame Host fires a STRONG advisory (ExtractiveResearchAdvisory) into the Frame Registry. Router DOES NOT refuse on this alone; E6 may escalate if the advisory accumulates.

---

## 7. Theta_q per Question Class (charter input, not router-picked)

Theta_q values enter the Frame Divergence Gate at R4. They are inputs from the locked charter; the router NEVER picks theta_q at runtime.

Sources for theta_q (per `THETA_Q_CALIBRATION_DEFAULTS.md`):

| Question class | Default conservative theta_q | Notes |
|---|---|---|
| `applied` | 0.55 | Mechanism claims easily share surface; conservative threshold |
| `lived` | 0.60 | Phenomenological surface is narrow |
| `stakeholder` | 0.50 | Discourse surfaces are broad |
| `mechanism` | 0.60 | Realist-CMO surfaces overlap unless role-divider is held |
| `historical` | 0.55 | Trace evidence surface |
| `discursive` | 0.50 | Discourse surfaces are broad |
| `indigenous` | 0.65 | Tightest -- community-prioritized findings are context-specific |

These are conservative defaults. Calibrated records may override. The router refuses at R4 if theta_q is absent: `REFUSED` with `refusal_reason = MISSING_THETA`.

---

## 8. Frame Selection Anti-Patterns (refuse at router level)

- **"Single-frame default across all questions (methodological monism)":** charter declares `frame_id = pragmatist` for every question regardless of intent. Phase 2 accumulates monoculture advisories; E9 reads them; after N_threshold the Self-Audit Resistance Monitor escalates. Router does not refuse; E9 surfaces the pattern.
- **"Ceremonial frame-swap (label changes, hooks identical)":** `frame_id` rotates across a session but `hook_bindings_fingerprint` is invariant. Frame Host Phase 6 flags `ceremonial_swap_suspect = true`; E9 reads; router surfaces the flag.
- **"Auto-default on missing frame_id":** operator forgets `frame_id`. Router refuses with NEEDS-INPUT. Frame Host NEVER picks a default.
- **"Infer `ram_frame_id` from artifact contents":** Frame Host does NOT read RAM artifacts. Router refuses with NEEDS-INPUT; operator must declare.
- **"Skip Compatibility Declaration when 'obviously DISTINCT'":** Frame Host always writes it. Skipped writes break E9's convergence-drift detection.
- **"Treat Chilisa as opt-in":** `population_flag` fires but charter picks a non-Chilisa frame without overlay. Frame Host auto-activates OVERLAY_ACTIVE; router honors.
- **"Realist-CMO x RAM_S03 without divider because operator said it's fine":** router refuses; verbal claim does not substitute for structured token.

---

## 9. Router Enforcement Summary

| Rule | Enforced at | Mechanism |
|---|---|---|
| Every question has explicit frame_id + ram_frame_id | R0 intake / R3 | Frame Host refuses on missing |
| Role-divider required iff realist_cmo x RAM_S03 | R3 | Frame Host's Compatibility Matrix + two-clause parser |
| Chilisa overlay fires on population_flag | R3 | Frame Host Phase 2 auto-activation |
| Compatibility Declaration always written | R3 | Frame Host Phase 4 LOAD-BEARING |
| Theta_q supplied per question class | R4 | E8 REFUSED on MISSING_THETA |
| No frame default picked at runtime | R0/R3 | NEEDS-INPUT refusal |
| Frame Registry record sealed at run close | R9 | E8 seal rule |

---

## 10. Output: Frame Loading Decision Log (per audit run)

Every audit run produces an implicit frame-loading decision log embedded in the Frame Registry record(s):

- Per-question `frame_id`, `ram_frame_id`.
- `compatibility_declaration` (DISTINCT | PARTIAL) with Kuhnian signature pairs.
- `role_divider_decision` (one of three values).
- `chilisa_constraint_state` (NONE | OVERLAY_ACTIVE | PRIMARY_FRAME).
- `hook_bindings_fingerprint` (for ceremonial-swap detection).
- `prior_swap_detected` boolean.
- Advisory log for negative-fit selections.

E9 reads the Frame Registry across runs to detect monoculture, ceremonial-swap, and extractive-research patterns. The router surfaces these via E9's ceremonial-pattern signal channel at R7.

**End of FRAME_LOADING_RULES.md.**
