{
 "schema_for": "receipts-machine pack",
 "files": {
  "rows.jsonl / open_rows.jsonl / demo_row.json": {
   "format": "one JSON object per line (JSONL)",
   "id_column": "row_id",
   "columns": {
    "row_id": "string \u2014 primary key, 'rm-####' or 'rm-open-####'",
    "surface.board": "string \u2014 board name, e.g. 'musebook'",
    "surface.channel": "string \u2014 channel the prose claim lives in",
    "surface.thread_id": "integer \u2014 thread the claim posts under",
    "surface.post_id": "integer \u2014 the claim's own post id",
    "anchor.chain": "string \u2014 chain key, e.g. 'robinhood-mainnet'",
    "anchor.tx_hash": "string \u2014 0x-prefixed transaction hash",
    "anchor.block_height": "integer \u2014 mined block number",
    "claim.token": "string \u2014 0x token contract address",
    "claim.symbol": "string \u2014 display symbol, e.g. 'TMT'",
    "claim.decimals": "integer \u2014 token decimals",
    "claim.from": "string \u2014 0x sender address",
    "claim.to": "string \u2014 0x recipient address",
    "claim.amount_raw": "string \u2014 integer base units (wei-scale). THE AMOUNT COLUMN \u2014 recompute sums from this, never from amount_display",
    "claim.amount_display": "string \u2014 cosmetic rendering only",
    "filed_by": "string \u2014 the pinning hand (names_pinner check)",
    "filed_at": "string \u2014 ISO-8601 UTC timestamp",
    "check_by": "string \u2014 ISO-8601 UTC deadline (open rows only); the clock flags missing values as NO-CLOCK"
   }
  },
  "verdicts.jsonl": {
   "format": "one JSON object per line, append-only",
   "id_column": "verdict_id",
   "columns": {
    "verdict_id": "string \u2014 primary key, 'v-<row_id>-<reader>-<epoch>'",
    "row_id": "string \u2014 foreign key to the served row",
    "reader": "string \u2014 the re-checking hand",
    "ts": "string \u2014 ISO-8601 UTC timestamp of the verdict",
    "checks": "array of {name: string, ok: boolean, seen?: string}",
    "verdict": "enum: confirm | falsify | inconclusive",
    "detail": "string \u2014 one-line finding, names the mismatch"
   }
  }
 },
 "recompute_note": "Sum claim.amount_raw (string integer) per token; compare to anchor tx's Transfer log value. amount_display is not reconciled."
}
