{
  "class_version": "nt-crossing-class:v0",
  "id": "ai.model-promotion",
  "version": "0.1.0",
  "title": "Promotion of a model to deployment",
  "domain": "AI operations",
  "evidence_status": "proposed",
  "summary": "A model moves from candidate to deployed in named contexts. Every crossing that later depends on the model inherits this one, so it is the root of accumulation. Synthetic specification; no model-risk or insurance reviewer has examined it.",
  "state_fields": {
    "before": ["model_id", "stage", "evaluated_contexts"],
    "proposed": ["model_id", "stage", "contexts"]
  },
  "action_types": ["promote_model"],
  "policy": {
    "id": "nt-policy:model-promotion",
    "version": "0.1.0",
    "authored_by": "Neverthought (illustrative class policy; not a model-risk standard)",
    "parameters": {
      "max_review_ratio": 1,
      "max_delegation_depth": 1,
      "evidence_max_age_days": 60,
      "max_loop_gain": 1
    },
    "note": "Parameter values are illustrative. A real class takes them from the organisation's model-risk policy."
  },
  "invariants": [
    {
      "id": "evaluation_coverage",
      "label": "Every deployment context was covered by evaluation",
      "measure": "evaluation_coverage",
      "params": { "contexts": "contexts", "covered": "evaluated_contexts" },
      "tolerance": 0
    }
  ],
  "evidence_requirements": [
    { "subject": "evaluation_report", "min_tier": "E4", "required_to_resolve": "Attach an evaluation report produced outside the team that built the model." },
    { "subject": "data_provenance", "min_tier": "E2", "required_to_resolve": "Attach the data provenance record for the training and evaluation data." },
    { "subject": "rollback_plan", "min_tier": "E2", "required_to_resolve": "Attach the rollback plan, including how downstream consumers revert." }
  ],
  "authority_requirements": { "independent_trust_root": true, "segregation_of_duties": true },
  "archetypes": [
    "RA-PREMATURE-CLOSURE", "RA-IRREVERSIBLE-COMMITMENT", "RA-HIDDEN-COUPLING", "RA-FEEDBACK-AMPLIFICATION",
    "RA-ACCUMULATION", "RA-EXPIRED-EVIDENCE", "RA-AUTHORITY-DRIFT", "RA-SELF-CERTIFICATION", "RA-UNWARRANTED-EXECUTION"
  ],
  "descriptors": {
    "stake": "material",
    "action": "reversible",
    "authority_kind": "explicit",
    "freshness": "bounded"
  },
  "profiles": {
    "recorder": "nt-receipt-chain:v0 (this site's chain; not CER-17)",
    "underwriting": "nt-underwritability-conditions:v0 (conditions document; not UW-12)"
  },
  "consequence": {
    "bound": "unbounded",
    "ceiling": null,
    "rationale": "Every crossing that later depends on the promoted model inherits this one, so its consequence grows with use and has no ceiling."
  },
  "consequence_paths": [
    {
      "id": "unevaluated_context_error",
      "description": "Errors in a deployment context the evaluation did not cover."
    },
    {
      "id": "downstream_inheritance",
      "description": "Every crossing depending on the model inherits its errors."
    },
    {
      "id": "rollback_cost",
      "description": "Rolling back the model and its downstream consumers."
    }
  ],
  "structural_tests": [],
  "failure_mode": {
    "mode": "fail-safe",
    "rationale": "If the gate holds or is unreachable, traffic stays on the previously deployed model. That is safe only when a previous model exists to fall back to."
  },
  "underwritability": {
    "what_an_underwriter_would_need": [
      "A receipt for every promotion, issued before the model serves traffic.",
      "Evaluation coverage for each deployment context, from a team independent of the builders.",
      "The list of downstream crossing classes that depend on the model.",
      "A tested rollback, including downstream consumers.",
      "Whether deployed outputs feed back into training, and the declared gain."
    ],
    "conditions": [
      "No model serves a context its evaluation did not cover.",
      "Builder and approver are different principals.",
      "Evaluation evidence is no more than 60 days old at valid time.",
      "Feedback from deployed outputs into training is declared and damped."
    ],
    "exclusions": [
      "Losses in contexts the promoted model was not evaluated for.",
      "Losses from models promoted while held.",
      "Aggregated losses across crossings sharing a model beyond a declared concentration."
    ]
  },
  "non_claims": [
    "Not a model-risk management standard or regulatory requirement.",
    "Evaluation coverage says which contexts were evaluated, not how well the model performs in them.",
    "No model-risk, insurance or regulatory reviewer has reviewed this class."
  ]
}
