{
  "schema": "https://miscsubjects.com/schemas/jarticle.json",
  "status": "published",
  "slug": "rigor-test-2026-11-05",
  "title": "Rigor Test — epistemic convention proof",
  "kind": "test",
  "sources": [
    {
      "id": "s1",
      "url": "https://example.com/source-a",
      "title": "Synthetic Source A",
      "publisher": "Test Publisher A",
      "date": "2026-11-05",
      "quote": "The test value is alpha.",
      "quote_sha256": "090067915f86e311beadf83ecd6a7433e5efa43688811d977950afe88c1ebd1e"
    },
    {
      "id": "s2",
      "url": "https://example.org/source-b",
      "title": "Synthetic Source B",
      "publisher": "Test Publisher B",
      "date": "2026-11-05",
      "quote": "Independently, the test value is alpha.",
      "quote_sha256": "8f8bf8a91bfdc3601eb675cf7adba00ff4819038afa08dd63e7a06653136a581"
    },
    {
      "id": "s3",
      "url": "https://example.net/source-c",
      "title": "Synthetic Source C",
      "publisher": "Test Publisher C",
      "date": "2026-11-05",
      "quote": "The test value is gamma.",
      "quote_sha256": "11b8c5051dc964c39b6ae7f4325f1460f924dcb82da31b6021f14910fd3f5a9c"
    },
    {
      "id": "sb",
      "url": "https://broker.example.com/feed-1",
      "title": "Synthetic Broker Feed",
      "publisher": "Broker Aggregator",
      "date": "2026-11-05",
      "quote": "broker_value: beta",
      "quote_sha256": "50a0d40228601df0ed3c799df3766eafab1ee15e3ccb0b7bc41e92c5f4a3c8e4"
    }
  ],
  "claims": [
    {
      "id": "c_1",
      "predicate": "test_value",
      "value": "alpha",
      "valid_from": "2026-01-01",
      "valid_to": null,
      "status": "superseded",
      "earned_status": "corroborated",
      "contested": false,
      "provenance": {
        "source_id": "s1",
        "source_ref": "https://example.com/source-a",
        "receipt_slug": null,
        "payload_path": null,
        "source_class": "independent_secondary",
        "directness": "direct"
      },
      "extraction": {
        "method": "executor:manual-extract@1",
        "transform": "none",
        "at": "2026-11-05T14:20:59.205440-08:00",
        "by": "claude-subagent"
      },
      "confidence": null,
      "confidence_basis": null,
      "history": [
        {
          "from": null,
          "to": "supplied",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "claim written with full spec-1 provenance",
          "basis_ref": "s1"
        },
        {
          "from": "supplied",
          "to": "extracted",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "named extraction executor:manual-extract@1 wrote value from s1",
          "basis_ref": "s1"
        },
        {
          "from": "extracted",
          "to": "corroborated",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "independent second provenance root s2 added asserting same predicate+value over overlapping interval",
          "basis_ref": "s2"
        },
        {
          "from": "corroborated",
          "to": "contradicted",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "opposing active claim c_3 for same predicate with incompatible value over overlapping interval; earned_status kept",
          "basis_ref": "c_3"
        },
        {
          "from": "contradicted",
          "to": "superseded",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "superseded by correction claim c_4; value and provenance untouched",
          "basis_ref": "c_4"
        }
      ],
      "additional_roots": [
        {
          "source_id": "s2",
          "source_class": "independent_secondary",
          "directness": "reported",
          "note": "independent root: no shared upstream lineage with s1"
        }
      ],
      "conflict_group": "cg_test_value_1",
      "opposes": [
        "c_3"
      ],
      "superseded_by": "c_4"
    },
    {
      "id": "c_2",
      "predicate": "broker_value",
      "value": "beta",
      "valid_from": "2026-01-01",
      "valid_to": null,
      "status": "extracted",
      "earned_status": "extracted",
      "contested": false,
      "provenance": {
        "source_id": "sb",
        "source_ref": "https://broker.example.com/feed-1",
        "receipt_slug": null,
        "payload_path": null,
        "source_class": "broker_aggregator",
        "directness": "reported"
      },
      "extraction": {
        "method": "ingest:broker-feed",
        "transform": "none",
        "at": "2026-11-05T14:20:59.205440-08:00",
        "by": "claude-subagent"
      },
      "confidence": null,
      "confidence_basis": null,
      "cap_note": "Corroboration NOT applied: every provenance root is one broker_aggregator lineage (sb). Per spec section 2 broker cap, status is capped at extracted; repeated payloads from this lineage are one root and move nothing. The claim rises only when a root outside the lineage is added.",
      "history": [
        {
          "from": null,
          "to": "supplied",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "claim written with full spec-1 provenance",
          "basis_ref": "sb"
        },
        {
          "from": "supplied",
          "to": "extracted",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "named extraction ingest:broker-feed wrote value from sb",
          "basis_ref": "sb"
        }
      ]
    },
    {
      "id": "c_3",
      "predicate": "test_value",
      "value": "gamma",
      "valid_from": "2026-01-01",
      "valid_to": null,
      "status": "contradicted",
      "earned_status": "extracted",
      "contested": true,
      "conflict_group": "cg_test_value_1",
      "opposes": [
        "c_4"
      ],
      "provenance": {
        "source_id": "s3",
        "source_ref": "https://example.net/source-c",
        "receipt_slug": null,
        "payload_path": null,
        "source_class": "independent_secondary",
        "directness": "direct"
      },
      "extraction": {
        "method": "executor:manual-extract@1",
        "transform": "none",
        "at": "2026-11-05T14:20:59.205440-08:00",
        "by": "claude-subagent"
      },
      "confidence": null,
      "confidence_basis": null,
      "history": [
        {
          "from": null,
          "to": "supplied",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "claim written with full spec-1 provenance",
          "basis_ref": "s3"
        },
        {
          "from": "supplied",
          "to": "extracted",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "named extraction executor:manual-extract@1 wrote value from s3",
          "basis_ref": "s3"
        },
        {
          "from": "extracted",
          "to": "contradicted",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "opposes active claim c_1: same predicate, incompatible value, overlapping interval",
          "basis_ref": "c_1"
        },
        {
          "from": "contradicted",
          "to": "contradicted",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "opposing claim c_1 superseded by c_4; conflict continues against c_4",
          "basis_ref": "c_4"
        }
      ]
    },
    {
      "id": "c_4",
      "predicate": "test_value",
      "value": "alpha-corrected",
      "valid_from": "2026-01-01",
      "valid_to": null,
      "status": "contradicted",
      "earned_status": "extracted",
      "contested": true,
      "conflict_group": "cg_test_value_1",
      "opposes": [
        "c_3"
      ],
      "supersedes": "c_1",
      "provenance": {
        "source_id": "s1",
        "source_ref": "https://example.com/source-a",
        "receipt_slug": null,
        "payload_path": null,
        "source_class": "independent_secondary",
        "directness": "direct"
      },
      "extraction": {
        "method": "human:correction",
        "transform": "none",
        "at": "2026-11-05T14:20:59.205440-08:00",
        "by": "claude-subagent"
      },
      "confidence": null,
      "confidence_basis": null,
      "history": [
        {
          "from": null,
          "to": "supplied",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "correction claim written with its own spec-1 provenance; supersedes c_1",
          "basis_ref": "s1"
        },
        {
          "from": "supplied",
          "to": "extracted",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "named extraction human:correction wrote value from s1",
          "basis_ref": "s1"
        },
        {
          "from": "extracted",
          "to": "contradicted",
          "at": "2026-11-05T14:20:59.205440-08:00",
          "by": "claude-subagent",
          "event": "remains opposed by active claim c_3 in cg_test_value_1",
          "basis_ref": "c_3"
        }
      ]
    }
  ],
  "facts": {
    "contested_predicates": [
      "test_value"
    ]
  },
  "type": "article",
  "created": "2026-11-05T22:21:01.829Z",
  "updated": "2026-11-05T22:21:20.209Z",
  "version": 6,
  "hash": "ca60d7f74fa50af5202e426cbb55ddb87453973fb8ce92cab15c1209ab2f5054",
  "theme": "https://miscsubjects.com/article-theme.json",
  "styling": {
    "scope": "shared",
    "theme_ref": "https://miscsubjects.com/article-theme.json"
  },
  "page": "https://miscsubjects.com/a/rigor-test-2026-11-05",
  "json": "https://miscsubjects.com/a/rigor-test-2026-11-05.json",
  "markdown": "https://miscsubjects.com/a/rigor-test-2026-11-05.md",
  "calls": [
    {
      "what": "this article as a page (no key)",
      "method": "GET",
      "url": "https://miscsubjects.com/a/rigor-test-2026-11-05",
      "headers": {}
    },
    {
      "what": "this article as its object (no key)",
      "method": "GET",
      "url": "https://miscsubjects.com/a/rigor-test-2026-11-05.json",
      "headers": {}
    },
    {
      "what": "this article as Markdown (no key)",
      "method": "GET",
      "url": "https://miscsubjects.com/a/rigor-test-2026-11-05.md",
      "headers": {}
    },
    {
      "what": "the object with its hash, drafts too",
      "method": "GET",
      "url": "https://miscsubjects.com/api/jarticles/rigor-test-2026-11-05",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>"
      }
    },
    {
      "what": "one piece and that piece’s hash",
      "method": "GET",
      "url": "https://miscsubjects.com/api/jarticles/rigor-test-2026-11-05/at?path=facts",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>"
      }
    },
    {
      "what": "grep: every key or value that matches, with the path to change it",
      "method": "GET",
      "url": "https://miscsubjects.com/api/jarticles/rigor-test-2026-11-05/grep?q=owner",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>"
      }
    },
    {
      "what": "change pieces (set, merge, delete, append, insert, move); if-match is the hash",
      "method": "PATCH",
      "url": "https://miscsubjects.com/api/jarticles/rigor-test-2026-11-05",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>",
        "content-type": "application/json",
        "if-match": "<hash from the read>"
      },
      "body": {
        "ops": [
          {
            "op": "set",
            "path": "facts.example",
            "value": 1
          }
        ]
      }
    },
    {
      "what": "replace the whole object",
      "method": "PUT",
      "url": "https://miscsubjects.com/api/jarticles/rigor-test-2026-11-05",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>",
        "content-type": "application/json",
        "if-match": "<hash>"
      },
      "body": {
        "slug": "rigor-test-2026-11-05",
        "title": "…"
      }
    },
    {
      "what": "fetch every source, hash what came back and check the quote is in it",
      "method": "POST",
      "url": "https://miscsubjects.com/api/jarticles/rigor-test-2026-11-05/verify",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>",
        "content-type": "application/json"
      },
      "body": {}
    },
    {
      "what": "an Obsidian-style command",
      "method": "POST",
      "url": "https://miscsubjects.com/api/jarticles/cli",
      "headers": {
        "x-terminal-key": "<YOUR_TERMINAL_KEY>",
        "content-type": "application/json"
      },
      "body": {
        "command": "backlinks",
        "file": "rigor-test-2026-11-05"
      }
    }
  ],
  "entities": {
    "rigor-test-2026-11-05": {
      "id": "rigor-test-2026-11-05",
      "label": "Rigor Test — epistemic convention proof",
      "type": "test",
      "page": "https://miscsubjects.com/a/rigor-test-2026-11-05",
      "json": "https://miscsubjects.com/a/rigor-test-2026-11-05.json"
    }
  },
  "relationships": {
    "upward": {
      "total": 0,
      "offset": 0,
      "limit": 50,
      "items": [],
      "next": null
    },
    "downward": {
      "total": 0,
      "offset": 0,
      "limit": 50,
      "items": [],
      "next": null
    },
    "sideways": {
      "total": 0,
      "offset": 0,
      "limit": 50,
      "items": [],
      "next": null
    },
    "references": {
      "total": 0,
      "offset": 0,
      "limit": 50,
      "items": [],
      "next": null
    },
    "referenced_by": {
      "total": 0,
      "offset": 0,
      "limit": 50,
      "items": [],
      "next": null
    }
  },
  "hierarchy": {
    "paths": [],
    "order": "subject to parent to ancestor",
    "complete": true,
    "cycles": [],
    "limits": {
      "depth": 12,
      "objects": 250
    },
    "unresolved_refs": []
  },
  "reference_contract": {
    "canonical_id": "slug",
    "entity_lookup": "entities[ref]; # resolves to this object via self_ref",
    "self_ref": "rigor-test-2026-11-05",
    "entity_fields": "page and json are canonical object links; source_url is the external source",
    "directions": {
      "upward": "Parents and collections containing this object; predicate distinguishes location from membership.",
      "downward": "Objects naming this object as their parent, container or collection.",
      "sideways": "Associations and objects sharing a direct parent.",
      "references": "Objects referenced by this record.",
      "referenced_by": "Published articles referencing this record."
    },
    "predicates": {
      "part_of": "Declared parent hierarchy.",
      "located_in": "Location asserted on this object.",
      "associated_parcel": "Associated parcel, a separate object with its own jurisdiction and facts.",
      "member_of": "Collection membership, not geographic containment.",
      "included_in": "Editorial nesting, not geographic containment.",
      "shares_parent": "Shares the identified parent; no other relationship is implied.",
      "related_to": "An association with no more specific predicate recorded."
    },
    "scope": "Published article objects; Atlas inventories have their own counted, paged links. An association does not transfer facts or jurisdiction. An absent neighborhood means no neighborhood relationship is recorded."
  },
  "hash_spec": {
    "algorithm": "sha256",
    "encoding": "lowercase hexadecimal",
    "scope": "stored record; hash is also the write concurrency token",
    "included_keys": [
      "claims",
      "created",
      "facts",
      "kind",
      "schema",
      "slug",
      "sources",
      "status",
      "title",
      "type",
      "updated",
      "version"
    ],
    "field_overrides": {
      "schema": "jarticle/1"
    },
    "canonicalization": "Select included_keys from this response, apply field_overrides, recursively sort object keys using JavaScript Object.keys().sort(), retain array order, serialize primitives with JSON.stringify, join without whitespace, hash UTF-8 bytes.",
    "updated_included": true,
    "generated_fields": "All fields absent from included_keys are excluded. Relationship counts and theme references are generated and can change without changing the stored-record hash."
  }
}