# SURPRISE_WRITE -- Surprise Register Entry Template

**Owner:** Claim-Typing Engine (S5) -- instantiates the register; publishes the write handle.
**Writers:** Multi-Method Orchestrator (S3), Fitness Adjudicator (S7), Adversarial Pass Engine (S8). (S5 also writes charter-amendment-request entries.)
**Renderer:** Epistemic Output Layer (S4).
**Consumer (read):** Warrant & Saturation Governor (S6).

**Canonical location:** `_public/templates/SURPRISE_WRITE.md` (this file). Skill-local mirrors (e.g., `fitness-adjudicator/templates/SURPRISE_WRITE.md`) are synced copies for local Read resolution.

**Schema authority:** `phase-5-system-architecture/CROSS_CUTTING_ARTIFACTS.md` section 1.

---

## Write conditions for Fitness Adjudicator

S7 writes to the Surprise Register ONLY in these cases (SKILL.md Step 7):

1. **High-Admiralty disqualification anomaly.** A source with `admiralty_reliability_A_to_F in {A, B}` OR `admiralty_credibility_1_to_6 in {1, 2}` triggered a disqualifier. The Admiralty input did not predict fitness -- this is precisely the R2.3 evidence surface and MUST be visible in the register, not buried in rationale.
2. **Lineage-independence collapse (claim-level).** D3 scored 0 across the admitted source set for a claim, OR amplification ratio > 0.70 (Greenberg cascade), OR founder concentration dominant.
3. **Fragile-rubric keystone flag.** `fragile_rubric=true` fires on the keystone source for a claim AND `reviewer_flag_required=true`.
4. **Anti-collapse flag.** `tier_bias_suspected=true` OR `craap_reduction_suspected=true` was set in Step 4.

S7 does NOT write for every fitness decision. The Ledger captures every decision; the Register captures anomalies.

---

## Schema (per-entry, append-only JSONL)

```json
{
  "entry_id": "uuid",
  "run_id": "string",
  "register_id": "string",
  "claim_id": "string or null (null only for meta-anomaly unbound to claim)",
  "entry_kind": "anomaly | contradiction | meta-anomaly | charter-amendment-request",
  "writer_component": "S7",
  "write_timestamp_utc": "ISO-8601",
  "source_refs": ["source-id", "..."],
  "description": "<= 1000 chars, names the anomaly class in the first sentence",
  "provenance": {
    "query_ids": ["ledger-query-id", "..."],
    "rationale": "names the specific trigger (high-admiralty-disqualification, lineage-collapse, fragile-rubric-keystone, anti-collapse-flag) and evidence"
  },
  "expansion_directive": "sub-inquiry | expand-corpus | defer-to-operator | informational",
  "downstream_effect": {
    "triggers_sub_inquiry_id": "string or null",
    "charter_amendment_ref": "string or null"
  },
  "rendered_in_output": false
}
```

## Hard rules (Phase 0 non-negotiables)

- `entry_kind` NEVER includes `tiebreaker-vote` or `confidence-delta`. The Register EXPANDS inquiry, not adjudicates.
- `writer_component` MUST equal "S7" for Fitness Adjudicator writes.
- `rendered_in_output` is set by S4 at render time. Writers always set `false`.
- After S4 emits (run close), the register REFUSES writes. Late-arriving anomalies escalate to the orchestrator.

## Expansion directive guidance

- `anomaly` (high-Admiralty disqualification): usually `sub-inquiry` -- a targeted follow-up query for a replacement source of equivalent provenance.
- `anomaly` (lineage-collapse): usually `expand-corpus` -- broaden retrieval to non-English, practitioner, or indigenous corpora for independent sources.
- `anomaly` (fragile-rubric keystone): usually `defer-to-operator` -- human review before claim admission.
- `anomaly` (anti-collapse flag): usually `informational` -- the flag is a schema-integrity signal; the claim can proceed with a documented residual weakness.
- `contradiction` is NOT the typical Fitness Adjudicator write-kind; that is more commonly S8's domain.

## Write protocol

1. Obtain the write handle from the S5-published token at run start.
2. Construct the entry matching the schema.
3. Atomic append to `state/ram/surprise-register/<run-id>/register.jsonl`.
4. On token absence: classified refusal; writer halts; orchestrator is escalated.

## Degraded mode

- Register unreachable: Fitness Adjudicator halts and escalates. Do NOT silently drop an anomaly. The fitness record can emit, but the run is flagged degraded.

## Zero-overlap boundary

- Path root is `state/ram/surprise-register/`. Evaluator has ZERO read or write authority. Evaluator receives the RENDERED output via the bridge, not the register state.
- The Register has NO Evaluator counterpart; do not confuse with Frame Registry (Evaluator-side, distinct path, distinct schema).

## What this template is NOT

- NOT the Search Ledger. Every fitness decision logs to the Ledger; only anomalies log to the Register.
- NOT a confidence adjudicator. The Register cannot contain `tiebreaker-vote` or `confidence-delta` entry_kinds.
- NOT renderable by writers. S4 is the sole renderer.
