{
  "openbookVersion": "0.3.0-draft",
  "valid": [
    {"path": "examples/fixture.example.json"},
    {"path": "examples/fixture_update.example.json"},
    {"path": "examples/grade.example.json"},
    {"path": "examples/grade_htft.example.json"},
    {"path": "examples/lineup.example.json"},
    {"path": "examples/market.example.json"},
    {"path": "examples/market_update.example.json"},
    {"path": "examples/market_type.example.json"},
    {"path": "examples/odds_change.example.json"},
    {"path": "examples/odds_change_conflated.example.json"},
    {"path": "examples/participant.example.json"},
    {"path": "examples/player.example.json"},
    {"path": "examples/stall.example.json"},
    {"path": "examples/toss.example.json"},
    {"path": "examples/series.example.json"},
    {"path": "examples/publisher.example.json"},
    {"path": "examples/heartbeat.example.json"},
    {"path": "examples/snapshot_complete.example.json"},
    {"path": "examples/discovery.example.json"},
    {"path": "examples/score.example.json"},
    {"path": "examples/stage.example.json"}
  ],
  "invalid": [
    {
      "path": "conformance/invalid/odds-as-number.json",
      "reason": "odds must be a decimal string, not a JSON number (Q39)"
    },
    {
      "path": "conformance/invalid/missing-sequence.json",
      "reason": "every message carries sequence"
    },
    {
      "path": "conformance/invalid/odds-zero.json",
      "reason": "odds 0 is not a takedown; use marketStatus and/or Merge Patch null (Q43)"
    },
    {
      "path": "conformance/invalid/market-missing-limit.json",
      "reason": "priced market create/snapshot MUST carry limit (Q45)"
    },
    {
      "path": "conformance/invalid/discovery-unknown-kind.json",
      "reason": "discovery kind is a closed vocabulary (Q56); unknown values are rejected on write"
    },
    {
      "path": "conformance/invalid/alternate-name-too-long.json",
      "reason": "shared primitives are length-bounded; an alternateName over maxLength is rejected"
    },
    {
      "path": "conformance/invalid/htft-missing-full-time.json",
      "reason": "HT/FT row always has both halfTime and fullTime (Q110)"
    },
    {
      "path": "conformance/invalid/prop-row-mix.json",
      "reason": "a row does not mix boards (Q114)"
    },
    {
      "path": "conformance/invalid/at-least-with-line.json",
      "reason": "plus-band atLeast does not carry exact outcome line (Q121)"
    },
    {
      "path": "conformance/invalid/player-yes-with-line.json",
      "reason": "yes/no player row has player and not outcome line (Q127, Q131)"
    },
    {
      "path": "conformance/invalid/series-wins-one-row.json",
      "reason": "series wins is exactly two rows (Q150)"
    }
  ]
}
