# SURPRISE_REGISTER_INSTANCE -- Empty Register Template

**Owner:** Claim-Typing Engine (S5; instantiator). **Writers at runtime:** S3, S7, S8. **Renderer:** S4. **Library:** Public RAM (`ram/templates/`).

Structural scaffold instantiated at run start. Schema authority is Phase 5 `CROSS_CUTTING_ARTIFACTS.md` Section 1. This template is the empty form S5 writes to disk before the run opens.

---

## Files Written at Instantiation

Two files at `state/ram/surprise-register/<run-id>/`:

### manifest.json (immutable after run close)

```json
{
  "register_id": "<uuid>",
  "run_id": "<string>",
  "charter_hash": "<sha256>",
  "claim_decomposition_ref": "<path-to-artifact>",
  "instantiated_by": "claim-typing-engine",
  "instantiated_at_utc": "<ISO-8601>",
  "writers_authorized": ["S3", "S7", "S8"],
  "renderer": "S4",
  "reader_gate": "S6",
  "schema_version": "1.0.0",
  "expansion_directive_allowed_values": [
    "sub-inquiry",
    "expand-corpus",
    "defer-to-operator",
    "informational"
  ],
  "prohibited_entry_kinds": [
    "tiebreaker-vote",
    "confidence-delta"
  ]
}
```

### register.jsonl (append-only; starts empty)

```
# EMPTY AT INSTANTIATION
# One JSON object per line; never rewritten in place.
# Writers append via the S5-issued write token.
```

## Per-Entry Schema (authoritative in Phase 5 CROSS_CUTTING_ARTIFACTS Section 1.3)

Each line is a JSON object of the shape:

```json
{
  "entry_id": "<uuid>",
  "run_id": "<string>",
  "register_id": "<string>",
  "claim_id": "<string-or-null>",
  "entry_kind": "anomaly | contradiction | meta-anomaly | charter-amendment-request",
  "writer_component": "S3 | S7 | S8 | S5",
  "write_timestamp_utc": "<ISO-8601>",
  "source_refs": ["<source-id>", ...],
  "description": "<string, <= 1000 chars>",
  "provenance": {
    "query_ids": ["<ledger-query-id>", ...],
    "rationale": "<string>"
  },
  "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
}
```

## Instantiation Checklist (S5 Phase 6)

- [ ] `register_id` minted (uuid v4).
- [ ] `run_id` bound from orchestrator.
- [ ] `charter_hash` captured from charter at run open.
- [ ] `claim_decomposition_ref` set to the path of the current CLAIM_DECOMPOSITION_ARTIFACT.
- [ ] `manifest.json` written (immutable; write-once).
- [ ] `register.jsonl` created (empty; append-only).
- [ ] Write token minted and published to {S3, S7, S8}.
- [ ] Handle recorded in `claim_decomposition_artifact.surprise_register_handle`.

## Close-Out (S5 authority only)

At run end (S4 emits rendered output), S5 flips the register to `closed` state. Post-close writes are REFUSED. The manifest becomes immutable. Close-out is never conditional on findings -- it is a lifecycle event, not a gate.

## Zero-Overlap Guardrails

- Path root: `state/ram/surprise-register/`. No Evaluator read, no Evaluator write.
- Schema record-kinds are disjoint from the Evaluator Search Ledger's `audit-query | audit-finding | audit-null | audit-refusal | reopen-event`.
