# CLAIM_DECOMPOSITION_ARTIFACT -- Primary Output Template

**Owner:** Claim-Typing Engine (S5; writer). **Readers:** S7 Fitness Adjudicator, S1 Retrieval Router, S3 Orchestrator, S8 Adversarial Pass Engine. **Library:** Public RAM (`ram/templates/`).

Structural scaffold for the primary output of the Claim-Typing Engine. Every run emits exactly one artifact of this shape (additional versioned artifacts on Evaluator reopen).

---

```yaml
claim_decomposition_artifact:
  artifact_version: "<semver>"                 # e.g., 1.0.0
  run_id: "<string>"
  version_id: "<integer>"                      # 1 on first emit; increments on Evaluator reopen
  emitted_at_utc: "<ISO-8601>"
  charter_hash: "<sha256>"

  question_original: "<verbatim user question>"
  verb_inventory:                              # Phase 1 output; every verb MUST terminate in a claim
    - verb_token: "<string>"
      span: "<char-offset-start,char-offset-end>"
      assigned_claim_id: "<claim-id>"

  claims:
    - claim_id: "<string>"
      claim_type: descriptive | causal | predictive | normative | interpretive | UNTYPABLE
      claim_text_as_decomposed: "<string>"
      source_verbs: ["<verb>", ...]
      rationale: "<one-sentence>"
      typology_citation: "<anchor-question + paradigm reference>"

      fitness_requirements:                    # parameterized single-schema (R2.4)
        load_bearing_properties: ["<property>", ...]
        disqualifiers: ["<disqualifier>", ...]
        weight_overrides: { "<dimension>": <multiplier>, ... }
        admiralty_input_treatment: "input-only"
        fragility_flag: none | fragile-normative | fragile-predictive

      monoculture_flags:                       # four dimensions per MONOCULTURE_TRIGGERS
        domain_sensitivity: true | false
        geographic_locus: true | false
        practitioner_domain: true | false
        claim_type_context_dependent: true | false
        any_flag_positive: true | false        # convenience boolean for S1

      typing_confidence: HIGH | MEDIUM | LOW   # LOW triggers S8 inverted-typing query

  surprise_register_handle:
    register_id: "<uuid>"
    register_path: "state/ram/surprise-register/<run-id>/register.jsonl"
    manifest_path: "state/ram/surprise-register/<run-id>/manifest.json"
    write_token: "<opaque-string>"

  search_ledger_writethrough:                  # this artifact's ledger entry
    writer_id: "claim-typing-engine"
    entry_type: "decomposition"
    ledger_path: "state/ram/ram-search-ledger/<run-id>/ledger.jsonl"

  self_check:                                  # mirror of SKILL.md Confidence & Self-Check section
    every_verb_assigned: true
    no_blended_claims: true
    monoculture_flags_not_suppressed: true
    fragility_flags_present_where_required: true
    register_instantiated: true
    ledger_writethrough_written: true
    typing_confidence_present_per_claim: true
```

## Emission Rules

1. Emit only when ALL `self_check` booleans are true. A single false blocks emission; S5 loops back to the failing phase.
2. Artifact is immutable after emit. Evaluator reopen produces a NEW versioned artifact (version_id incremented); the prior version is retained, not overwritten.
3. Artifact is handed to S7 Fitness Adjudicator as the next component in build order; S1, S3, S8 read asynchronously.

## UNTYPABLE Claims

If Phase 2 cannot place a verb, emit a claim with `claim_type: UNTYPABLE`, `typing_confidence: LOW`, and a rationale naming the gap. UNTYPABLE claims still receive monoculture-flag evaluation and still write fitness_requirements (load_bearing_properties = ["UNTYPABLE-defer-to-evaluator"]).

## Downstream Contract Summary

- S7 reads `fitness_requirements` per claim.
- S1 reads `monoculture_flags` per claim.
- S3 reads the full `claims[]` array for discipline dispatch.
- S8 reads `claims[].claim_text_as_decomposed` + `typing_confidence`.
- S6 reads the artifact shape (claim count, coverage baseline) for warrant computation.
- S4 reads the artifact + Surprise Register for final render.
