{
  "schema": "tiffany.systems/schema/policy/1.0.0",
  "note": "The deterministic rules enforced at build time. Generated from the implementation, not maintained alongside it.",
  "rules": [
    {
      "id": "R01",
      "title": "Release classification must be explicit and recognised",
      "requirement": "Every publishable object carries one classification from the versioned ontology. Absent, unknown or ambiguous classification is treated as INTERNAL."
    },
    {
      "id": "R02",
      "title": "No child object may be more restricted than its publication",
      "requirement": "Evidence and artifacts attached to a published claim must themselves be publishable. A PUBLIC claim may not carry an INTERNAL artifact."
    },
    {
      "id": "R03",
      "title": "Qualification must be earned by the epistemic record",
      "requirement": "QUALIFIED requires controlled repeated evidence, non-incomplete provenance, and at least one executed falsifier. QUALIFIED_AT_CURRENT_SCOPE additionally requires an enumerated tested scope and a stated boundary."
    },
    {
      "id": "R04",
      "title": "Replication state requires a matching replication object",
      "requirement": "A claim may only assert independent replication when a replication object exists whose people, implementation and data are all INDEPENDENT. Full replication additionally requires every claim component covered and the equivalence criterion fixed before execution."
    },
    {
      "id": "R05",
      "title": "Causal level requires an intervention with a control",
      "requirement": "INTERVENTIONAL or stronger requires at least one evidence object of kind EXPERIMENT carrying a named control. Causal verbs in public prose are restricted to claims at INTERVENTIONAL or above."
    },
    {
      "id": "R06",
      "title": "Public prose may not exceed the structured record",
      "requirement": "Title, statement and plain-language text are checked against a fixed restricted vocabulary. A hit is rejected deterministically; no model judgement is involved."
    },
    {
      "id": "R07",
      "title": "Plain language may simplify, never strengthen",
      "requirement": "The plain-language rendering must retain every hedge present in the canonical statement, and must not introduce a certainty term the statement does not carry."
    },
    {
      "id": "R08",
      "title": "A claim-level status may not imply support its components lack",
      "requirement": "If any component is UNSUPPORTED, UNMEASURED or CONTRADICTED, the claim may not sit above EXPERIMENTAL, and the coverage map must be rendered next to the status."
    },
    {
      "id": "R09",
      "title": "Anything above EXPERIMENTAL must be falsifiable in public",
      "requirement": "At least one registered falsifier, stated concretely enough that a third party could execute it."
    },
    {
      "id": "R10",
      "title": "Every artifact carries a licence and a content digest",
      "requirement": "Ambiguous ownership is non-releasable. An artifact without a sha256 cannot be verified and is therefore not evidence."
    },
    {
      "id": "R11",
      "title": "Asserted provenance completeness must match the recorded chain",
      "requirement": "COMPLETE requires every chain step to carry input and output digests. PARTIAL requires at least one recorded step. A sanitised step may never disclose its private input."
    },
    {
      "id": "R12",
      "title": "Demo fixtures are unmistakable and excluded from scientific surfaces",
      "requirement": "A DEMO_FIXTURE object must set demo:true, must be excluded from every real index, feed and API, and must not be reachable from a route that implies scientific release."
    },
    {
      "id": "R13",
      "title": "Lifecycle state must match its required companion objects",
      "requirement": "SUPERSEDED requires superseded_by. WITHDRAWN requires a withdrawal record with reason, authority and time. FALSIFIED requires a falsifier with status EXECUTED_FAILED."
    },
    {
      "id": "R14",
      "title": "Every internal reference must resolve",
      "requirement": "Component evidence_refs, replication evidence_refs, falsifier evidence_refs and evidence artifact_refs must name objects that exist in this version."
    },
    {
      "id": "R15",
      "title": "Blocking evidence debt caps the asserted status",
      "requirement": "Evidence debt is a typed obligation, never a score. Debt that blocks a status component prevents that status from being asserted."
    }
  ],
  "state_invariants": [
    "WITHDRAWN may not return to CURRENT without new evidence",
    "FALSIFIED may not become QUALIFIED without new evidence",
    "version numbers increase; a SUPERSEDED version names its successor",
    "a material scientific change must update last_material_change",
    "a published version digest may never change"
  ]
}
