# ROLE-DIVIDER PROTOCOL -- realist_cmo x RAM_S03

**Status:** LOAD-BEARING. Structural enforcement, not guidance.
**Owner:** Frame Host (E3).
**Readers:** Frame Divergence Gate (E8), Self-Audit Resistance Monitor (E9).

---

## 1. Why This Exists

Pawson-Tilley's realist-CMO framework anchors two distinct things in this plugin: RAM S03 uses CMO as **input signal** for transportability scoring; Evaluator E-R1.4 uses CMO as **audit criterion** for RAM output. Same framework, two applications. If Evaluator loads `realist_cmo` against a RAM_S03 artifact, both sides of the dual-system now operate on the same generative-mechanism ontology. The "audit" becomes co-signing. The Librarian defect (near-self-audit on causal-claim questions) re-enters through a back door the rest of the architecture cannot close. The role-divider closes that door at bind time.

---

## 2. Trigger Condition

Exactly one condition:

```
trigger := (frame_id == "realist_cmo") AND (ram_frame_id == "RAM_S03")
```

Any other pair sets `role_divider_decision = NOT_REQUIRED` and the check terminates.

---

## 3. Two-Clause Acknowledgment Requirement

When trigger is true, orchestrator must present `role_divider_acknowledgment` containing **both** of the following clauses, each affirmatively stated:

- **Clause A (application):** "Pawson-Tilley CMO is used **as audit criterion only**."
- **Clause B (exclusion):** "Pawson-Tilley is **not** reused as a transportability signal in this audit."

Parser rules:

1. Tokenize acknowledgment text; both clauses must appear as complete affirmative statements.
2. Synonym acceptance only on role words ("audit criterion" ~ "rubric" ~ "evaluative standard"; "transportability signal" ~ "S03 input"). "CMO" and "Pawson-Tilley" must appear by name in at least one clause each.
3. Negations, conditionals, or hedges ("unless", "except", "may also") reduce a clause to malformed.
4. A single sentence may carry both clauses if conjunctive.

Both clauses well-formed -> `REQUIRED_AND_PRESENT`, bind proceeds. Either clause missing / hedged / negated -> `REQUIRED_AND_MISSING_REFUSE`, refuse.

---

## 4. Refuse-to-Bind Behavior

On refusal:

1. Do NOT instantiate `loaded_frame_handle`.
2. Do NOT seed Evaluator Search Ledger for this invocation.
3. DO persist a Frame Registry record with `role_divider_decision = REQUIRED_AND_MISSING_REFUSE`, `compatibility_declaration.summary = PARTIAL`, and `breach_reason` identifying the failed clause (A, B, or both).
4. Increment `bindings_refused_role_divider_breach`.
5. Return structured error: `{status: REFUSED, reason: ROLE_DIVIDER_BREACH, clause_failed: [A|B|both], remediation: "Re-invoke with well-formed acknowledgment."}`.

Remediation = re-invoke with valid acknowledgment. No exemption path exists.

---

## 5. Counter Contract

Frame Host exposes `bindings_refused_role_divider_breach` to E9. Increment once per refused binding where trigger was true; never decrement; session-scoped view computed by E9.

**E9 interpretation guide:** counter == 0 with zero RAM_S03 audits -> expected; no signal. Counter == 0 with >= 1 `realist_cmo x RAM_S03` invocation -> expected only if every invocation carried well-formed acknowledgment; E9 cross-checks via Frame Registry count of `REQUIRED_AND_PRESENT` records. Counter == 0 with invocations AND zero `REQUIRED_AND_PRESENT` records -> **precursor signal**; E9 investigates whether the refusal path is live.

---

## 6. Non-Overridable

The role-divider has no exemption path. Not overridable by orchestrator authority, prior user approval, session configuration, prior successful bindings, or "this case is different" argumentation. If the reasoning chain arrives at "skip the divider," the reasoning chain is the failure mode. Return REFUSED.
