{
  "tool_id": "art-524-source-arrival-freshness-register",
  "tool_version": "1.0.0",
  "display_name": "Source Arrival & Freshness Register",
  "mcp_name": "register_source_arrival_freshness",
  "mandate_type": "compliance_control",
  "wave": 81,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-524-source-arrival-freshness-register.html",
  "description": "Reconciles a caller-declared EXPECTED-source inventory against caller-declared OBSERVED arrivals, per source: arrived, missing, late (arrived after its declared expected-as-of), or stale (arrived but older than its declared freshness threshold relative to a declared reference-as-of). The expected inventory is always an independently supplied caller input, never derived from the observed set -- a register that only counts what showed up cannot tell 'nothing broke' from 'a whole source never arrived,' and closing that blind spot is this node's purpose. If no expected-source inventory is declared, the node refuses to report on arrivals alone and emits a did-not-run execution state instead of a degraded pass. All sources current yields auto_pass; any late-but-present source yields review_required (which routes to an exception step, never a human blocker); any missing expected source yields reject; an observed arrival supplied with no as-of yields a ran-stale execution state rather than a guessed decision. Deterministic reconciliation arithmetic only, no clock, no network, zero PII. Not a log tailer: completeness is measured against the declared expected inventory, never the extract's own self-reported arrivals. Clause: GAO-25-107721 SS13.07 (currency as an attribute of the information itself); ECB RDARR Guide (May 2024) SS3.5(1) (timeliness).",
  "input_schema_ref": "chaingraph/art-524-source-arrival-freshness-register.html#manifest",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:27d4e48514eb2b1eed2231094e43e116be6b1457bbd2be49c4c5eca810550c64",
      "valid_from": "2026-07-10"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-08-11"
    }
  ],
  "compute_proof_ready": "ready",
  "export_capability": [
    "json"
  ],
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "FbkDecvFJdE/F6jC6uy6p4ET+2djUMjcYDudhN0y3BYfEBRPJgDWD3AzLsoGu8Pxfj/6yebLiYi5dFnmPfbRtSMcy6J7eXVZaaUlpIXR4z5uWBj5acO65OowqO2GZIjmCJqkBWXrZZG7TIagDmGOlcFgtL8XXS1z1T2LZ58HpDUJ6bM7Zy1wfOaKYCwJu1e5EnPHywMcteUfdPhChoxmdBU9Yb2/H0vijn600AglxGupTh7gg0l+2Q0IeE0CNfYBH1ApUibzX9FYjPGzxwyafCpX/856oyzTj/JA7SqDZBID4e5xxA0LUSS/SbxZ69XR1h/HqII1mW02AtOcTdskrQ==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:27d4e48514eb2b1eed2231094e43e116be6b1457bbd2be49c4c5eca810550c64",
      "output": {
        "decision": "auto_pass",
        "execution_state": "ran",
        "late_or_stale_sources": [],
        "missing_sources": [],
        "reason": null,
        "source_count": 2,
        "sources": [
          {
            "arrived": true,
            "expected_as_of": 990,
            "freshness_threshold_hours": 50,
            "late": false,
            "observed_as_of": 980,
            "source_id": "core-ledger-extract",
            "source_status": "current",
            "stale": false
          },
          {
            "arrived": true,
            "expected_as_of": 995,
            "freshness_threshold_hours": 50,
            "late": false,
            "observed_as_of": 985,
            "source_id": "trade-blotter-feed",
            "source_status": "current",
            "stale": false
          }
        ],
        "unknown_freshness_sources": []
      }
    }
  }
}
