{
  "_comment": "GENERATED from CATALOGS.md by tools/gen-contract.py — do not edit by hand; edit the prose and regenerate.",
  "generated_from": "CATALOGS.md",
  "failure_shapes": [
    {
      "id": "GR.1a",
      "name": "Anchor-and-drift — surrounding context composed while the anchor is fetched",
      "locus": "GR",
      "status": "fenced",
      "fence": "per-source attestation + three-state citation + verification stack"
    },
    {
      "id": "GR.1b",
      "name": "Within-source attribution swap (figures correct, mapping reversed)",
      "locus": "GR",
      "status": "fenced",
      "fence": "per-source attestation + semantic citation-chain walk"
    },
    {
      "id": "GR.1c",
      "name": "Cite-through fabrication shielded by source authority — the cite-through is structurally correct but the cited-from passage is subtly strengthened beyond what the source states",
      "locus": "GR",
      "status": "fenced",
      "fence": "per-source attestation with quote-context anchors + adversarial-read quote-context walk (sharpens GR.4's fence for the strengthening-via-authority pattern)"
    },
    {
      "id": "GR.2",
      "name": "Source unfetched — a training-recalled claim presented as cited",
      "locus": "GR",
      "status": "forward-looking",
      "fence": null
    },
    {
      "id": "GR.3",
      "name": "Composed claims with no source attempt (effort estimates, counts, comparatives)",
      "locus": "GR",
      "status": "forward-looking",
      "fence": null
    },
    {
      "id": "GR.4",
      "name": "Quote-context distortion — quote accurate, surrounding qualifier stripped",
      "locus": "GR",
      "status": "fenced",
      "fence": "adversarial-read quote-context walk"
    },
    {
      "id": "GR.5",
      "name": "Thin attestation passing lint — frontmatter correct, body un-anchored",
      "locus": "GR",
      "status": "fenced",
      "fence": "lint structural check + adversarial-read complement"
    },
    {
      "id": "GR.6",
      "name": "Attestation-abuse — attestation form is correct (anchors present, key passages transcribed) but authored without genuine source engagement; lint and thin-attestation checks both pass",
      "locus": "GR",
      "status": "fenced",
      "fence": "bracket directive (partial) + adversarial-read gloss-fit job (attestation-paraphrase vs independent source-summary) — detection pending"
    },
    {
      "id": "GR.7",
      "name": "Paradigm-trained gestalt failure — per-claim substrate is accurate, but the agent's gestalt of the whole source fits a trained category rather than the source's own argument structure. Includes the per-claim facet — source-posture presupposition: a sentence-level claim about the source's own stance or intent (\"drew the wrong conclusion\", \"the most optimistic finding\"), read as source-attributable when the source names no such posture (finer-grained than the whole-source gestalt; distinct from corpus-comparative / superlative-value claims, which weigh a source against the corpus rather than impute a stance to it)",
      "locus": "GR",
      "status": "fenced",
      "fence": "bracket directive (partial) + adversarial-read independent-gestalt job (read the source independently, compare gestalts), extended to walk per-claim source-posture attributions — detection pending"
    },
    {
      "id": "GR.8",
      "name": "Disclaiming attestation — a claim cited to an attestation whose own body affirmatively denies or scopes out the cited sub-claim; the handle resolves and the attestation is substantive (anchored), so lint and the GR.5 thin-attestation check both pass. Distinct from GR.2 (no attestation / training-recall) and GR.5 (attestation present but thin / un-anchored): here the attestation is present, anchored, and contradicts the claim it is cited for",
      "locus": "GR",
      "status": "fenced",
      "fence": "adversarial-read semantic citation-chain walk (job (a)) — verifies not only that the attestation supports the claim but that its gaps / scope section does not deny it; prevention via the honest-gaps-recording attestation discipline (an attestation that records what the source does not confirm is doing its job) — not lint-detectable (the disclaimer is semantic; the handle resolves)"
    },
    {
      "id": "GR.9",
      "name": "Metadata recall-sourcing — a bibliographic / provenance metadata value (a per-corpus INDEX or {N}-bibliography entry's Source URL, DOI, or date) committed from training-recall rather than read off the fetched source: correct-from-memory but not present in the attestation. Distinct from GR.2 (whole source unfetched) — here the source is fetched and attested, yet the metadata is recalled",
      "locus": "GR",
      "status": "forward-looking",
      "fence": null
    },
    {
      "id": "CX.1",
      "name": "Noise domination — less-relevant retrieved content used over more-relevant",
      "locus": "CX",
      "status": "fenced",
      "fence": "adversarial-read relevance-weighting (detection only — see SPEC.md §11)"
    },
    {
      "id": "AQ.1",
      "name": "Coverage gaps / unknown-unknowns",
      "locus": "AQ",
      "status": "fenced",
      "fence": "isolated-context evaluator (coverage component)"
    },
    {
      "id": "AQ.2",
      "name": "Stale substrate — once-correct content now out of date",
      "locus": "AQ",
      "status": "fenced",
      "fence": "substrate-check staleness-diff — on finding prior substrate, diff it against current sources; a stale diff fires a refresh re-engagement (SPEC.md §4.8)"
    },
    {
      "id": "AQ.3",
      "name": "Fabricated acquisition candidate — a training-recalled source surfaced as worth-acquiring (most readily in proactive enrichment), not grounded in a fetched source that names it",
      "locus": "AQ",
      "status": "fenced",
      "fence": "source-bound acquisition-candidate discipline (SPEC.md §4.1) — a proposed source must point at a fetched source that names it as canonical; the recalled-from-training state is forbidden for suggestions as for citations"
    },
    {
      "id": "AQ.4",
      "name": "Inadequate-attempt blocking — a source declared blocking / unavailable on a shallow acquisition attempt (a single-tool transport block, e.g. a session-gated 403, treated as terminal) when a stronger acquisition mode would succeed; transport-block conflated with content-unavailability",
      "locus": "AQ",
      "status": "fenced",
      "fence": "acquisition-mode-exhaustion discipline (SPEC.md §4.1) — a blocking classification requires either the failure classified as genuine content-unavailability (a hard, not transport / transient, condition) or the available acquisition modes exhausted (best-tool → browser-class → authenticated → operator-escalation)"
    },
    {
      "id": "CO.1",
      "name": "Smoothed contradictions in cross-source synthesis — including synthesis-artifact self-smoothing: a contradiction the artifact's own structured form preserves (a table / ledger row) is reintegrated into a unified middle by the surrounding prose (distinct from cross-source smoothing, where the contradiction never surfaces at all)",
      "locus": "CO",
      "status": "fenced",
      "fence": "## Contradictions discipline + adversarial-read coherence-read (job (c)) — reads the synthesizing prose against the artifact's own structured contradictions, not only across sources"
    },
    {
      "id": "CO.2",
      "name": "Premature normalization of abnormal discourse — a substrate-surfaced novel framing is translated into existing vocabulary before its abnormality is adequately surfaced; the normalized form passes the whole stack",
      "locus": "CO",
      "status": "forward-looking",
      "fence": null
    },
    {
      "id": "CO.3",
      "name": "Cross-tradition convergence-smoothing — multiple traditions' framings of a convergent shape merged into one vocabulary, losing per-tradition prescriptive content (harder to detect than CO.1: the surface signal is agreement, not disagreement)",
      "locus": "CO",
      "status": "fenced",
      "fence": "encoder-side translation-table discipline (each tradition's term preserved; convergence named at the shape-diagnosed level; framings stand side-by-side) + tradition-isolation adversarial-read job — detection pending"
    },
    {
      "id": "FR.1",
      "name": "Self-confirming framing",
      "locus": "FR",
      "status": "fenced",
      "fence": "isolated-context evaluator (structural isolation)"
    },
    {
      "id": "FR.2",
      "name": "Premature commitment — a position asserted before its grounding substrate is engaged; reproduced as orientation-leak (a detail present only in an orientation / lens artifact consulted to seed the engagement, surfaced as source-attested) and attribution-costume (a true, internally-derived conclusion dressed as drawn from the source literature — the conclusion survives; only the attribution is fabricated)",
      "locus": "FR",
      "status": "fenced",
      "fence": "substrate-before-stance discipline (§4.3 substrate test + §4.6 strict layer-directionality) + the LENS-not-substrate tier (§4.6: an artifact consulted to seed an engagement is a non-citable lens, never a source) + adversarial-read semantic citation-chain walk (detection — the handle resolves to the lens or to no source; only the semantic walk catches it)"
    },
    {
      "id": "PR.1",
      "name": "Drift-inheritance through paraphrase chains — small per-step distortion compounding across multi-step composition",
      "locus": "PR",
      "status": "fenced",
      "fence": "strict layer-directionality (SPEC.md §4.6 — the structural prevention against drift-inheritance) + adversarial-read lineage-DAG distortion walk (job (i), §4 — detection job-spec; the mechanical graph-build is deployment-operationalized)"
    },
    {
      "id": "PR.2",
      "name": "Decomposition-framing lock-in — a facet cut inherits a lens all downstream work runs inside",
      "locus": "PR",
      "status": "fenced",
      "fence": "multi-sampling at decompose (≥3 candidates + comparative + bracket) + the persisted decomposition-rationale artifact (SPEC.md §10.6) + adversarial-read lineage-DAG distortion walk (job (i) — detection of lock-in the bracket missed)"
    },
    {
      "id": "PR.3",
      "name": "Non-propagated correction — a correction diagnosed in a synthesis-tier artifact never reaches the downstream artifact it corrects; the record ends up right while the artifact it was meant to fix stays wrong",
      "locus": "PR",
      "status": "fenced",
      "fence": "the §4.8 downstream-reconciliation obligation, verified at the reconcile decision-point (§6 below) via the spot-check reconciliation-completeness job (§10 below) — completeness spans corrected positions at every tier; a class-shaped finding additionally requires a class-complete sweep (every same-class instance across every tier, not only the flagged ones)"
    },
    {
      "id": "WM.1",
      "name": "Per-artifact-warrant fallacy — an artifact passes per-artifact checks but the corpus context that grounded its claims has shifted (warrant is corpus-distributed, not per-artifact)",
      "locus": "WM",
      "status": "fenced",
      "fence": "corpus-tier warrant check paired with the per-artifact substrate test — when a per-artifact attestation's corpus warrant has moved under it, hold the divergence as a tension and file an acquisition candidate rather than resolving it per-artifact; periodic corpus-walk detection committed as a job-spec, detection-implementation deployment-side"
    },
    {
      "id": "WM.2",
      "name": "Theory-ladenness of substrate-test outputs — the substrate test is itself paradigm-conditioned; framings the framework's paradigm naturalizes stay invisible to in-paradigm verification",
      "locus": "WM",
      "status": "forward-looking",
      "fence": null
    },
    {
      "id": "WM.3",
      "name": "Consumer-side decoding-frame mismatch — an artifact's encoded intent (held-pending vs settled; substrate vs deliverable) is mis-received by a downstream consumer; the encoder's stack catches encoding-side failures, not consumer-side decoding",
      "locus": "WM",
      "status": "forward-looking",
      "fence": null
    }
  ],
  "source_classes": [
    {
      "class": "paper",
      "handle_convention": "<first-author>-<paper-slug>",
      "load_bearing": "version (papers revise)"
    },
    {
      "class": "book-chapter",
      "handle_convention": "<author>-<book-slug>-ch<N>",
      "load_bearing": "edition (chapter numbering varies across editions)"
    },
    {
      "class": "essays",
      "handle_convention": "<author>-<essay-slug>",
      "load_bearing": "collection (essay-author attribution, not editor)"
    },
    {
      "class": "tool-doc",
      "handle_convention": "<tool>-<topic>",
      "load_bearing": "version (docs revise frequently)"
    },
    {
      "class": "blog-post",
      "handle_convention": "<author-or-venue>-<post-slug>",
      "load_bearing": "author byline, post date"
    },
    {
      "class": "journal-essay",
      "handle_convention": "<author>-<piece-slug>",
      "load_bearing": "original_venue (journal + issue + year — editorial-curated venue, distinct from a later web-repost URL)"
    },
    {
      "class": "github-readme",
      "handle_convention": "<owner>-<repo>",
      "load_bearing": "license (SPDX), last-commit"
    },
    {
      "class": "wiki-page",
      "handle_convention": "<wiki-slug>-<page-slug>",
      "load_bearing": "fetched-date (wikis drift), license"
    },
    {
      "class": "light-form",
      "handle_convention": "<platform>-<thread-id>",
      "load_bearing": "paraphrase-only (no verbatim posts; PII risk)"
    },
    {
      "class": "standard",
      "handle_convention": "<body>-<doc-number>",
      "load_bearing": "version + section anchors (revise at section granularity)"
    },
    {
      "class": "talk-podcast",
      "handle_convention": "<speaker>-<talk-slug>",
      "load_bearing": "transcript-source (hand-cleaned vs auto-captioned)"
    },
    {
      "class": "source-code",
      "handle_convention": "<project>-<component>",
      "load_bearing": "subclass (engine / dependency / gameplay-foundations / gameplay-systems); license (SPDX — varies per source, check per-piece)"
    }
  ],
  "lint": {
    "pattern_categories": [
      {
        "id": "decimal-with-attribution",
        "name": "Decimals with source attributions",
        "description": "a decimal figure adjacent to a source name; highest empirical failure rate. Flags proximity for verification."
      },
      {
        "id": "version-number",
        "name": "Version numbers",
        "description": "version identifiers in comparative/attributional claims without an in-corpus anchor."
      },
      {
        "id": "count-without-unit-citation",
        "name": "File / word / page counts",
        "description": "numeric counts with units and no citation."
      },
      {
        "id": "comparative-superlative",
        "name": "Comparative superlatives",
        "description": "\"the only X with Y\", \"the strongest baseline\" — claims requiring a full-set survey the agent did not perform."
      },
      {
        "id": "named-feature-claim",
        "name": "Named-feature claims",
        "description": "capabilities attributed to a tool/system by name without a fetched anchor."
      },
      {
        "id": "composed-effort-estimate",
        "name": "Composed effort estimates",
        "description": "quantitative effort claims constructed without substrate (forbidden per SPEC.md §4.4)."
      }
    ],
    "citation_chain_statuses": [
      {
        "id": "unresolved-handle",
        "broken": true
      },
      {
        "id": "mismatched-source-handle",
        "broken": true
      },
      {
        "id": "colliding-handle",
        "broken": true
      },
      {
        "id": "unreachable-source",
        "broken": true
      },
      {
        "id": "missing-provenance",
        "broken": true
      },
      {
        "id": "non-canonical-handle",
        "broken": true
      },
      {
        "id": "duplicate-frontmatter-key",
        "broken": true
      },
      {
        "id": "resolved",
        "broken": false
      },
      {
        "id": "intra-program-resolved",
        "broken": false
      },
      {
        "id": "reduced-substrate-attestation",
        "broken": false
      },
      {
        "id": "acquisition-candidate",
        "broken": false
      }
    ]
  },
  "decision_points": [
    {
      "name": "dispatch-time-registration",
      "tier": "M",
      "fires": "— (coordination)",
      "conditional": "always (entry act)"
    },
    {
      "name": "substrate-check",
      "tier": "D",
      "fires": "substrate-check",
      "conditional": "always"
    },
    {
      "name": "decompose",
      "tier": "D",
      "fires": "decompose (+ self-flag)",
      "conditional": "when the walk admits decomposition"
    },
    {
      "name": "specialist-dispatch",
      "tier": "M",
      "fires": "— (coordination)",
      "conditional": "multi-specialist walks only"
    },
    {
      "name": "attest",
      "tier": "D",
      "fires": "attest (+ bracket, stage, self-flag)",
      "conditional": "always (bracket conditional)"
    },
    {
      "name": "synthesize",
      "tier": "D",
      "fires": "synthesize (+ seek-disconfirming, stage, self-flag)",
      "conditional": "always — {within-specialist} and/or {cross-specialist} scope"
    },
    {
      "name": "lint",
      "tier": "V",
      "fires": "lint",
      "conditional": "always (hard floor)"
    },
    {
      "name": "adversarial-read",
      "tier": "V",
      "fires": "adversarial-read",
      "conditional": "selectable; in-floor for synthesis-producing shapes"
    },
    {
      "name": "evaluate",
      "tier": "V",
      "fires": "evaluate",
      "conditional": "selectable; reachable only when a cross-synthesis artifact exists"
    },
    {
      "name": "spot-check",
      "tier": "D",
      "fires": "spot-check",
      "conditional": "always (hard floor; terminal)"
    },
    {
      "name": "user-validation",
      "tier": "D",
      "fires": "user-validation",
      "conditional": "when the user is the committing party"
    },
    {
      "name": "promote",
      "tier": "D",
      "fires": "promote",
      "conditional": "when converged substrate warrants cross-arc lifting"
    },
    {
      "name": "reconcile",
      "tier": "D",
      "fires": "reconcile",
      "conditional": "re-engagement walks only (terminal) — verify the re-authored artifact reflects its corrections"
    }
  ],
  "registration_enums": {
    "intent": [
      "terminate-in-position",
      "build-substrate",
      "survey-landscape",
      "validate-claim",
      "calibrate-external"
    ],
    "output_kind": [
      "position",
      "synthesis-brief",
      "landscape-brief",
      "attestation",
      "corpus-piece",
      "precis",
      "hypothesis-capture",
      "hypothesis-ledger",
      "vocab-capture",
      "adoption-recommendations",
      "questions-list"
    ],
    "scope_authority": [
      "pre-registered",
      "mixed",
      "in-engagement-judgment"
    ],
    "analytical_artifact_type": [
      "per-campaign-brief",
      "accumulative-ledger"
    ],
    "temporal_contract": [
      "write-once-on-converge",
      "extend-on-source-rev",
      "supersedes-prior",
      "ttl-bounded",
      "re-engage-on-trigger"
    ],
    "verification_rigor": [
      "floor",
      "standard",
      "full"
    ]
  },
  "provenance_values": [
    {
      "value": "source-direct",
      "applies_to": "reference raws, indices, per-piece notes, vocab captures"
    },
    {
      "value": "agent-authored-from-raw",
      "applies_to": "precis files, hypothesis captures"
    },
    {
      "value": "agent-synthesis",
      "applies_to": "cross-source analytical artifacts (briefs, syntheses, positions, ledgers)"
    },
    {
      "value": "generated-listing",
      "applies_to": "mechanically produced listings (no editorial content)"
    },
    {
      "value": "hybrid-curated",
      "applies_to": "hand-authored kernel with agent-derived sections"
    }
  ],
  "typed_edge_predicates": [
    {
      "predicate": "cites",
      "source_ancestor": "CiTO cito:cites",
      "semantic": "Generic citation (root of the citation-predicate tree)"
    },
    {
      "predicate": "citesAsEvidence",
      "source_ancestor": "CiTO cito:citesAsEvidence",
      "semantic": "Cites as a source of factual evidence"
    },
    {
      "predicate": "extends",
      "source_ancestor": "CiTO cito:extends",
      "semantic": "Builds on prior work with new content"
    },
    {
      "predicate": "refutes",
      "source_ancestor": "CiTO cito:refutes",
      "semantic": "Explicit disagreement; the cited claim is shown false"
    },
    {
      "predicate": "usesMethodIn",
      "source_ancestor": "CiTO cito:usesMethodIn",
      "semantic": "Adopts a methodology from the cited work"
    },
    {
      "predicate": "obtainsBackgroundFrom",
      "source_ancestor": "CiTO cito:obtainsBackgroundFrom",
      "semantic": "Contextual / background citation"
    },
    {
      "predicate": "grounds",
      "source_ancestor": "Toulmin (data → claim)",
      "semantic": "Evidence backs a claim (research grounds a decision)"
    },
    {
      "predicate": "supports",
      "source_ancestor": "IBIS argument-to-position; CiTO cito:supports",
      "semantic": "An argument supports a position"
    },
    {
      "predicate": "objects-to",
      "source_ancestor": "IBIS argument-to-position; CiTO cito:critiques/disputes",
      "semantic": "An argument contests a position"
    },
    {
      "predicate": "related",
      "source_ancestor": "SKOS skos:related",
      "semantic": "Generic associative link when no stronger type fits (the only symmetric predicate)"
    },
    {
      "predicate": "implements",
      "source_ancestor": "Substrate-native (no clean ontology ancestor)",
      "semantic": "An implementation realizes a design / decision"
    },
    {
      "predicate": "contrasts",
      "source_ancestor": "Substrate-native (partial CiTO citesAsRelated)",
      "semantic": "An alternative without disagreement (sibling approach)"
    }
  ]
}
