{
  "openapi": "3.1.0",
  "info": {
    "title": "DeepStack API",
    "version": "1",
    "summary": "The money behind the machine, as static JSON.",
    "description": "Static files written by the DeepStack site build (generated 2026-10-22T01:47:05Z). No key and no rate limit; every object carries its canonical url, generatedAt and the line \"Analysis and opinion, not investment advice.\". GitHub Pages serves every file with Access-Control-Allow-Origin: *, so a browser can read the API from any origin; no CORS configuration exists or is needed for these static files. The same content is available to agents over the Model Context Protocol at https://mcp.deepstack.ltd/mcp, documented at https://deepstack.ltd/mcp/.",
    "termsOfService": "https://deepstack.ltd/terms/",
    "license": {
      "name": "DeepStack content: quote with attribution and a link to the canonical URL",
      "url": "https://deepstack.ltd/terms/"
    },
    "contact": {
      "name": "DeepStack",
      "url": "https://deepstack.ltd/contact/"
    }
  },
  "servers": [
    {
      "url": "https://deepstack.ltd"
    }
  ],
  "tags": [
    {
      "name": "DeepStack",
      "description": "Static JSON under /api/v1/ and the llms.txt pair."
    }
  ],
  "paths": {
    "/api/v1/index.json": {
      "get": {
        "summary": "API index",
        "operationId": "api_index",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "What exists: files, counts, license, the MCP endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Index"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/stories.json": {
      "get": {
        "summary": "Stories",
        "operationId": "stories",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "The 17 parts of The Buildout with The DeepStack Call, key numbers and sources.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Stories"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/stories/{slug}.json": {
      "get": {
        "summary": "One story",
        "operationId": "one_story",
        "tags": [
          "DeepStack"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The story slug, as in the page address.",
            "schema": {
              "type": "string",
              "enum": [
                "nvidias-demand-insatiable-or-manufactured",
                "spacex-after-the-ipo-exit-liquidity",
                "the-debt-behind-the-machines",
                "the-market-stops-paying-for-faith",
                "anthropic-grew-142-percent-openai",
                "power-doesnt-depreciate",
                "the-fed-hiked-the-long-end-kept-climbing",
                "the-scarcity-is-the-collateral",
                "habit-was-the-moat",
                "the-bubble-is-in-the-denominator",
                "the-backlog-is-not-the-quarter",
                "the-model-is-not-the-price",
                "the-ratepayer-pays-first",
                "the-cash-arrives-unevenly",
                "oil-is-the-headline-the-real-yield-is-the-bill",
                "the-seller-holds-the-paper",
                "the-guarantee-has-no-date"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The full story: plain-text paragraphs, sections, tests, results and named entities.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Story"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/numbers.json": {
      "get": {
        "summary": "The key numbers",
        "operationId": "the_key_numbers",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "Every key number of the series with its provenance once the owner approved it: unit, universe, period, source, as of, transformation, limits, chart and test.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Numbers"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/docket.json": {
      "get": {
        "summary": "The Docket",
        "operationId": "the_docket",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "Every dated test with its precision, status, source and resolver; a specified resolver carries the question, the public source, the rule and the ambiguity clause.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Docket"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/results.json": {
      "get": {
        "summary": "Results",
        "operationId": "results",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "Resolved tests and the ten-results rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Results"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/results/{id}.json": {
      "get": {
        "summary": "One result",
        "operationId": "one_result",
        "tags": [
          "DeepStack"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The test id, as in the page address (pNN-tNN).",
            "schema": {
              "type": "string",
              "enum": [
                "p03-t04",
                "p07-t02"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "One result in full: the row and the page’s four blocks (what we said, the rule, what happened, what changes).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResultFull"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/corrections.json": {
      "get": {
        "summary": "Corrections",
        "operationId": "corrections",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "Every correction on every story, newest first, with the date of the change and the policy.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Corrections"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/sides/{slug}.json": {
      "get": {
        "summary": "Who is on each side",
        "operationId": "who_is_on_each_side",
        "tags": [
          "DeepStack"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The story slug; only stories with a sides page have a file.",
            "schema": {
              "type": "string",
              "enum": [
                "anthropic-grew-142-percent-openai",
                "habit-was-the-moat",
                "nvidias-demand-insatiable-or-manufactured",
                "oil-is-the-headline-the-real-yield-is-the-bill",
                "power-doesnt-depreciate",
                "spacex-after-the-ipo-exit-liquidity",
                "the-backlog-is-not-the-quarter",
                "the-bubble-is-in-the-denominator",
                "the-cash-arrives-unevenly",
                "the-debt-behind-the-machines",
                "the-fed-hiked-the-long-end-kept-climbing",
                "the-guarantee-has-no-date",
                "the-market-stops-paying-for-faith",
                "the-model-is-not-the-price",
                "the-ratepayer-pays-first",
                "the-scarcity-is-the-collateral",
                "the-seller-holds-the-paper"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Attributed, paraphrased voices on each side of a story’s question.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sides"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/sides/{slug}/grid.json": {
      "get": {
        "summary": "The sides grid",
        "operationId": "the_sides_grid",
        "tags": [
          "DeepStack"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The story slug; only stories with a sides page have a grid.",
            "schema": {
              "type": "string",
              "enum": [
                "anthropic-grew-142-percent-openai",
                "habit-was-the-moat",
                "nvidias-demand-insatiable-or-manufactured",
                "oil-is-the-headline-the-real-yield-is-the-bill",
                "power-doesnt-depreciate",
                "spacex-after-the-ipo-exit-liquidity",
                "the-backlog-is-not-the-quarter",
                "the-bubble-is-in-the-denominator",
                "the-cash-arrives-unevenly",
                "the-debt-behind-the-machines",
                "the-fed-hiked-the-long-end-kept-climbing",
                "the-guarantee-has-no-date",
                "the-market-stops-paying-for-faith",
                "the-model-is-not-the-price",
                "the-ratepayer-pays-first",
                "the-scarcity-is-the-collateral",
                "the-seller-holds-the-paper"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "One row per voice and one column per question of a sides page: the side each voice holds with the published claim, its date and the verified link; the same rows as /sides/{slug}/grid.csv.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SidesGrid"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/questions.json": {
      "get": {
        "summary": "Questions",
        "operationId": "questions",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "The 17 questions DeepStack settles, one page each: the Part, The DeepStack Call and the next dated test.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Questions"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/questions/{slug}.json": {
      "get": {
        "summary": "One question",
        "operationId": "one_question",
        "tags": [
          "DeepStack"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The question slug, as in the page address.",
            "schema": {
              "type": "string",
              "enum": [
                "is-the-marginal-buyer-of-ai-compute-real",
                "spacex-after-the-ipo-exit-liquidity-or-the-next-ten-bagger",
                "the-debt-behind-the-machines-1999-capex-2008-credit-or-neither",
                "is-the-capex-spending-defense-or-is-the-return-not-there",
                "what-does-a-frontier-lab-sell-a-commodity-or-a-premium",
                "is-power-scarcity-a-warning-or-a-moat",
                "why-did-the-long-end-climb-after-the-hike-growth-debt-or-a-missing-buyer",
                "who-writes-the-checks-for-the-buildout",
                "how-fast-do-habits-break",
                "does-the-hardware-hold-its-value",
                "do-the-orders-turn-into-profit",
                "does-the-frontier-model-still-command-a-price",
                "who-pays-for-the-ai-power-bill",
                "is-ai-revenue-arriving-fast-enough-for-the-biggest-spenders-to-pay-for-their-data-centers-out",
                "can-the-ai-trade-survive-a-10-year-treasury-above-5-and-an-oil-shock-at-the-same-time",
                "how-much-of-the-money-buying-ai-chips-was-lent-guaranteed-or-invested-by-the-companies-selling",
                "how-much-of-the-ai-buildout-is-debt-the-balance-sheets-do-not-show-yet-and-who-carries-it-if-a"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "One question in full: the Call with its history, the sides with the strongest case against each, the crossings, the dated tests with their specification, the results and the sources; since UX-2.21 the relations (null until approved) and the record of what changed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Question"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/layers.json": {
      "get": {
        "summary": "The layers",
        "operationId": "the_layers",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "The layers of the AI value chain: the question each asks, its Parts, their canonical questions, the indicator each Part leads with and the next test of each; the archive filters by them.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Layers"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/entities/companies.json": {
      "get": {
        "summary": "Companies",
        "operationId": "companies",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "49 companies with reported numbers, mentions, side rows and the delayed market snapshot.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Companies"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/entities/people.json": {
      "get": {
        "summary": "People",
        "operationId": "people",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "113 people with what each argued; no score or ranking.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/People"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/entities/{kind}/{slug}.json": {
      "get": {
        "summary": "One entity",
        "operationId": "one_entity",
        "tags": [
          "DeepStack"
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "path",
            "required": true,
            "description": "The collection.",
            "schema": {
              "type": "string",
              "enum": [
                "companies",
                "people"
              ]
            }
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The entity slug, as in the page address.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "One company or person, the same row as in the collection.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EntityFile"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tape.json": {
      "get": {
        "summary": "The macro tape",
        "operationId": "the_macro_tape",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "The live macro tape with the producer of each series.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tape"
                }
              }
            }
          }
        }
      }
    },
    "/data/download/index.json": {
      "get": {
        "summary": "The dataset versions",
        "operationId": "the_dataset_versions",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "The index of the dataset at /data/download/: the current build’s dated files and every version cut, each with the rows, the sha256 of each file and what changed since the version before.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetIndex"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/weekly.json": {
      "get": {
        "summary": "The Weekly",
        "operationId": "the_weekly",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "The index of frozen editions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Weekly"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/notes.json": {
      "get": {
        "summary": "Notes",
        "operationId": "notes",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "The monthly notes on what agents and readers asked DeepStack: counts of questions, the ones asked most, the ones with no formed side.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Notes"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/search.json": {
      "get": {
        "summary": "Search index",
        "operationId": "search_index",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "The search index the MCP tool reads, one document per story, question, sides page, company, person, test, glossary term and layer.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchIndex"
                }
              }
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "summary": "llms.txt",
        "operationId": "llms_txt",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "Who DeepStack is, what the site offers, and links to the API and the key pages (the llms.txt convention).",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/llms-full.txt": {
      "get": {
        "summary": "llms-full.txt",
        "operationId": "llms_full_txt",
        "tags": [
          "DeepStack"
        ],
        "responses": {
          "200": {
            "description": "The stories’ headline, dek and Call in plain text with their URLs.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Resolver": {
        "type": "object",
        "required": [
          "kind",
          "rule",
          "specState"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "series",
              "release",
              "earnings",
              "manual"
            ]
          },
          "rule": {
            "type": "string"
          },
          "callExpects": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "yes",
              "no",
              "either",
              null
            ]
          },
          "specState": {
            "type": "string",
            "enum": [
              "approved",
              "pending"
            ]
          },
          "question": {
            "type": "string"
          },
          "source": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "ambiguity": {
            "type": "string"
          },
          "series": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "release": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Test": {
        "type": "object",
        "required": [
          "id",
          "part",
          "slug",
          "stage",
          "when",
          "whenLabel",
          "date",
          "precision",
          "event",
          "status",
          "resultId",
          "sameAs",
          "callExpects",
          "callProbability",
          "callProbabilityAt",
          "callProbabilityHistory",
          "callExpectsBy",
          "callExpectsAt",
          "source",
          "resolver",
          "url",
          "storyUrl",
          "resultUrl"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "part": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "stage": {
            "type": "string",
            "enum": [
              "open",
              "pre",
              "post"
            ]
          },
          "when": {
            "type": "string"
          },
          "whenLabel": {
            "type": "string"
          },
          "date": {
            "type": [
              "string",
              "null"
            ]
          },
          "precision": {
            "type": "string",
            "enum": [
              "day",
              "month",
              "window",
              "signal"
            ]
          },
          "event": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "confirmed",
              "refuted",
              "inconclusive",
              "not_reached"
            ]
          },
          "resultId": {
            "type": [
              "string",
              "null"
            ]
          },
          "sameAs": {
            "type": [
              "string",
              "null"
            ],
            "description": "The id of the test this row is the same question as (another Part’s), or null."
          },
          "callExpects": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "yes",
              "no",
              "either",
              null
            ],
            "description": "The answer the Part’s Call expected when the words were approved, from the approved specification (UX-3.27); null when none is recorded."
          },
          "callProbability": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 100,
            "description": "The chance, from 0 to 100, the Call gave the yes answer when the words were approved (B4, 11 October 2026); null when none is recorded."
          },
          "callProbabilityAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "callProbabilityHistory": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "value",
                "at",
                "replacedAt",
                "reason",
                "by"
              ],
              "properties": {
                "value": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 100
                },
                "at": {
                  "type": "string",
                  "format": "date-time"
                },
                "replacedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "reason": {
                  "type": "string"
                },
                "by": {
                  "type": "string"
                }
              }
            },
            "description": "The numbers a changed callProbability replaced, oldest first, each with when it was recorded, when it was replaced, the reason and who changed it (the method of the numbers, v2, 20 October 2026); empty when the number never changed. A number changes only before the test’s date, no later than 72 hours before it; the score uses the number in force at that cutoff."
          },
          "callExpectsBy": {
            "type": [
              "string",
              "null"
            ],
            "description": "Who recorded the expected answer; null when none is recorded."
          },
          "callExpectsAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "When it was recorded; null when none is recorded."
          },
          "source": {
            "type": [
              "object",
              "null"
            ]
          },
          "resolver": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Resolver"
              },
              {
                "type": "null"
              }
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "storyUrl": {
            "type": "string",
            "format": "uri"
          },
          "resultUrl": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "machines": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "model",
                "p",
                "at"
              ],
              "properties": {
                "model": {
                  "type": "string"
                },
                "p": {
                  "type": "integer"
                },
                "at": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "description": "The machines’ standing numbers (content/machines.json): one per model, the latest given before the test closed; the reason and the record stay in the file."
          },
          "readers": {
            "type": [
              "object",
              "null"
            ],
            "description": "The readers’ number from the forecast Worker: n and the median of each signed-in reader’s latest number; the pages print the median from 25 readers."
          }
        }
      },
      "CallVersion": {
        "type": "object",
        "required": [
          "version",
          "date",
          "stance",
          "tone",
          "toneLabel",
          "conviction",
          "convictionLabel",
          "line",
          "reason",
          "by"
        ],
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "stance": {
            "type": "string"
          },
          "tone": {
            "type": "string",
            "enum": [
              "bull",
              "bear",
              "split"
            ]
          },
          "toneLabel": {
            "type": "string"
          },
          "conviction": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5
          },
          "convictionLabel": {
            "type": "string"
          },
          "line": {
            "type": "string"
          },
          "side": {
            "type": [
              "string",
              "null"
            ],
            "description": "The side the Call took in this version (the label of a side of the story’s sides page), or null for a synthesis of two sides; present only on versions made since the side was named."
          },
          "reason": {
            "type": "string",
            "description": "Why this version was made; version 1 is the call made with the story."
          },
          "by": {
            "type": "string"
          }
        }
      },
      "Call": {
        "type": "object",
        "required": [
          "tone",
          "toneLabel",
          "stance",
          "line",
          "conviction",
          "convictionLabel",
          "actions",
          "flips",
          "version",
          "updatedOn",
          "history",
          "nextTest",
          "url"
        ],
        "properties": {
          "tone": {
            "type": "string",
            "enum": [
              "bull",
              "bear",
              "split"
            ]
          },
          "toneLabel": {
            "type": "string"
          },
          "stance": {
            "type": "string"
          },
          "line": {
            "type": "string"
          },
          "conviction": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5
          },
          "convictionLabel": {
            "type": "string"
          },
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "flips": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "side": {
            "type": [
              "string",
              "null"
            ],
            "description": "The side the Call takes: the label of one side of the story’s sides page, or null when the Call is a synthesis of two sides; absent until the owner names it."
          },
          "against": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Against"
              },
              {
                "type": "null"
              }
            ],
            "description": "The strongest case against the side the Call takes, the same object the sides page carries for that side; null for a synthesis or when no case has cleared the bar; absent with `side`."
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "The current version of the Call; it rises when a result changes the stance, the conviction or the line, or when the owner names the side."
          },
          "updatedOn": {
            "type": "string",
            "format": "date",
            "description": "The day the current version was made."
          },
          "history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CallVersion"
            },
            "description": "Every version of the Call, ascending; the last entry equals the current state."
          },
          "nextTest": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Test"
              },
              {
                "type": "null"
              }
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Provenance": {
        "type": "object",
        "required": [
          "unit",
          "universe",
          "period",
          "source",
          "asOf",
          "transformation",
          "limits",
          "chart",
          "test",
          "call",
          "approvedBy",
          "approvedAt"
        ],
        "properties": {
          "unit": {
            "type": "string"
          },
          "universe": {
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "source": {
            "$ref": "#/components/schemas/Source"
          },
          "asOf": {
            "type": "string",
            "format": "date"
          },
          "transformation": {
            "type": "string"
          },
          "limits": {
            "type": "string"
          },
          "chart": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "test": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "call": {
            "type": "boolean"
          },
          "approvedBy": {
            "type": "string"
          },
          "approvedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "KeyNumber": {
        "type": "object",
        "required": [
          "id",
          "value",
          "label",
          "context",
          "url",
          "provenance"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "context": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "provenance": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Provenance"
              },
              {
                "type": "null"
              }
            ],
            "description": "The unit, the universe, the period, the source, the date read, the transformation, the limits, the chart and the test; null until the owner approved it (UX-2.20)."
          }
        }
      },
      "NumberRow": {
        "type": "object",
        "required": [
          "id",
          "part",
          "slug",
          "index",
          "value",
          "label",
          "context",
          "url",
          "provenance"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "part": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "index": {
            "type": "integer"
          },
          "value": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "context": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "provenance": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Provenance"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "Numbers": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "api",
          "title",
          "rule",
          "count",
          "withSource",
          "numbers"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "rule": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "withSource": {
            "type": "integer"
          },
          "numbers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NumberRow"
            }
          }
        }
      },
      "Source": {
        "type": "object",
        "required": [
          "label",
          "url"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Correction": {
        "type": "object",
        "required": [
          "date",
          "text",
          "url"
        ],
        "properties": {
          "date": {
            "type": "string",
            "format": "date"
          },
          "text": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "CorrectionRow": {
        "type": "object",
        "required": [
          "date",
          "text",
          "part",
          "slug",
          "story",
          "url",
          "storyUrl",
          "api"
        ],
        "properties": {
          "date": {
            "type": "string",
            "format": "date"
          },
          "text": {
            "type": "string"
          },
          "part": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "story": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "storyUrl": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "StorySummary": {
        "type": "object",
        "required": [
          "part",
          "slug",
          "headline",
          "dek",
          "summary",
          "section",
          "date",
          "readingMinutes",
          "url",
          "api",
          "sidesUrl",
          "layer",
          "call",
          "keyNumbers",
          "sources",
          "earlierVersion",
          "corrections"
        ],
        "properties": {
          "part": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "headline": {
            "type": "string"
          },
          "dek": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "section": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "readingMinutes": {
            "type": "integer"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "sidesUrl": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "layer": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/StoryLayer"
              },
              {
                "type": "null"
              }
            ],
            "description": "The layer of the AI value chain the Part belongs to (UX-1.17); null until the owner approved the layers."
          },
          "call": {
            "$ref": "#/components/schemas/Call"
          },
          "keyNumbers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KeyNumber"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Source"
            }
          },
          "earlierVersion": {
            "type": [
              "string",
              "null"
            ]
          },
          "corrections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Correction"
            },
            "description": "The dated correction notices printed at the top of the story, newest first; empty when none."
          }
        }
      },
      "Result": {
        "type": "object",
        "required": [
          "id",
          "testId",
          "part",
          "slug",
          "story",
          "resolvedOn",
          "verdict",
          "effect",
          "callVerdict",
          "callVerdictLabel",
          "effectLabel",
          "callProbability",
          "answer",
          "brierGap",
          "headline",
          "body",
          "evidence",
          "callUpdate",
          "approvedAt",
          "url",
          "anchorUrl",
          "api",
          "storyUrl",
          "resolutionPackage"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "testId": {
            "type": "string"
          },
          "part": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "story": {
            "type": "string"
          },
          "resolvedOn": {
            "type": "string",
            "format": "date"
          },
          "verdict": {
            "type": "string",
            "enum": [
              "confirmed",
              "refuted",
              "inconclusive"
            ]
          },
          "effect": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "supports",
              "weakens",
              "informs",
              null
            ]
          },
          "callVerdict": {
            "type": "string",
            "enum": [
              "confirmed",
              "refuted",
              "inconclusive",
              "informed"
            ],
            "description": "The reading against the Call (D-UX15): confirmed when the result is the one the Call expected, refuted when it is not, informed when the Call expected either, inconclusive when the source did not settle it; verdict is the answer to the test’s own question."
          },
          "callVerdictLabel": {
            "type": "string",
            "enum": [
              "Confirmed",
              "Refuted",
              "Inconclusive",
              "Informs the Call"
            ]
          },
          "effectLabel": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "Supports the Call",
              "Weakens the Call",
              "Informs the Call",
              null
            ],
            "description": "The effect in the words the scorecard prints (UX-3.27); null with no effect."
          },
          "callProbability": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 100,
            "description": "The Call’s number: the chance, 0 to 100, the Call gave the yes answer, counted only when recorded on a specification approved before the date and stamped on or before it; null otherwise."
          },
          "answer": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "yes",
              "no",
              null
            ],
            "description": "The answer the result gave to the test’s question: yes for confirmed, no for refuted, null for inconclusive."
          },
          "brierGap": {
            "type": [
              "number",
              "null"
            ],
            "description": "The squared gap between the Call’s number as a fraction and the answer (one for yes, zero for no); the Brier score is the mean of these; null without a number or an answer."
          },
          "headline": {
            "type": "string"
          },
          "body": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "evidence": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "label",
                "value",
                "source"
              ],
              "properties": {
                "label": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                },
                "source": {
                  "type": "string"
                },
                "url": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "asOf": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "callUpdate": {
            "type": [
              "object",
              "null"
            ]
          },
          "approvedAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The Result page, /results/<id>/: what we said, the rule, what happened, what changes."
          },
          "anchorUrl": {
            "type": "string",
            "format": "uri",
            "description": "The same result as a card on /results/."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "storyUrl": {
            "type": "string",
            "format": "uri"
          },
          "resolutionPackage": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "The one-page resolution package (PDF): question, rule, official source, ambiguity clause, evidence, verdict, approver and date; null while no file exists."
          },
          "machines": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "model",
                "p",
                "at"
              ],
              "properties": {
                "model": {
                  "type": "string"
                },
                "p": {
                  "type": "integer"
                },
                "at": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "description": "The machines’ standing numbers (content/machines.json): one per model, the latest given before the test closed; the reason and the record stay in the file."
          }
        }
      },
      "ResultCall": {
        "type": "object",
        "required": [
          "version",
          "date",
          "stance",
          "tone",
          "toneLabel",
          "conviction",
          "convictionLabel",
          "line",
          "reason",
          "by"
        ],
        "properties": {
          "version": {
            "type": "integer"
          },
          "date": {
            "type": [
              "string",
              "null"
            ]
          },
          "stance": {
            "type": "string"
          },
          "tone": {
            "type": "string"
          },
          "toneLabel": {
            "type": "string"
          },
          "conviction": {
            "type": "integer"
          },
          "convictionLabel": {
            "type": "string"
          },
          "line": {
            "type": "string"
          },
          "reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "by": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "ResultFull": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "id",
          "testId",
          "part",
          "slug",
          "story",
          "resolvedOn",
          "verdict",
          "effect",
          "callVerdict",
          "callVerdictLabel",
          "effectLabel",
          "headline",
          "body",
          "evidence",
          "callUpdate",
          "approvedAt",
          "anchorUrl",
          "api",
          "storyUrl",
          "resolutionPackage",
          "number",
          "page",
          "card"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "id": {
            "type": "string"
          },
          "testId": {
            "type": "string"
          },
          "part": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "story": {
            "type": "string"
          },
          "resolvedOn": {
            "type": "string",
            "format": "date"
          },
          "verdict": {
            "type": "string",
            "enum": [
              "confirmed",
              "refuted",
              "inconclusive"
            ]
          },
          "effect": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "supports",
              "weakens",
              "informs",
              null
            ]
          },
          "callVerdict": {
            "type": "string",
            "enum": [
              "confirmed",
              "refuted",
              "inconclusive",
              "informed"
            ]
          },
          "callVerdictLabel": {
            "type": "string",
            "enum": [
              "Confirmed",
              "Refuted",
              "Inconclusive",
              "Informs the Call"
            ]
          },
          "effectLabel": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "Supports the Call",
              "Weakens the Call",
              "Informs the Call",
              null
            ]
          },
          "headline": {
            "type": "string"
          },
          "body": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "evidence": {
            "type": "array"
          },
          "callUpdate": {
            "type": [
              "object",
              "null"
            ]
          },
          "approvedAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "anchorUrl": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "storyUrl": {
            "type": "string",
            "format": "uri"
          },
          "resolutionPackage": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "number": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "value": {
                "type": "integer"
              },
              "expects": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "yes",
                  "no",
                  "either",
                  null
                ]
              },
              "line": {
                "type": "string"
              },
              "answer": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "yes",
                  "no",
                  null
                ]
              },
              "gap": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "description": "The Call’s number as it stood before the date, the sentence the page prints, the answer and the Brier gap; null when no number counts."
          },
          "page": {
            "type": "object",
            "required": [
              "said",
              "rule",
              "happened",
              "changes"
            ],
            "properties": {
              "said": {
                "type": "object",
                "required": [
                  "asOf",
                  "call",
                  "test",
                  "storyUrl"
                ],
                "properties": {
                  "asOf": {
                    "type": "string",
                    "format": "date"
                  },
                  "call": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/ResultCall"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "test": {
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "storyUrl": {
                    "type": "string",
                    "format": "uri"
                  }
                }
              },
              "rule": {
                "type": "object",
                "required": [
                  "specState",
                  "question",
                  "source",
                  "rule",
                  "ambiguity",
                  "approvedLine",
                  "afterTestDate"
                ],
                "properties": {
                  "specState": {
                    "type": "string",
                    "enum": [
                      "approved",
                      "pending"
                    ]
                  },
                  "question": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "source": {
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "rule": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "ambiguity": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "approvedLine": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "afterTestDate": {
                    "type": "boolean"
                  }
                }
              },
              "happened": {
                "type": "object",
                "required": [
                  "headline",
                  "body",
                  "evidence",
                  "readers",
                  "machines",
                  "resolutionPackage"
                ],
                "properties": {
                  "headline": {
                    "type": "string"
                  },
                  "body": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "evidence": {
                    "type": "array"
                  },
                  "readers": {
                    "type": [
                      "object",
                      "null"
                    ],
                    "description": "The readers’ number on the test from the forecast Worker: n, the median, whether the page prints it (from 25 readers) and the day of the export."
                  },
                  "machines": {
                    "type": "array",
                    "description": "What each model said before the close: model, display name, p, why, at."
                  },
                  "resolutionPackage": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri"
                  }
                }
              },
              "changes": {
                "type": "object",
                "required": [
                  "note",
                  "stance",
                  "conviction",
                  "moved",
                  "line",
                  "after",
                  "current"
                ],
                "properties": {
                  "note": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "stance": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "conviction": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "moved": {
                    "type": "boolean"
                  },
                  "line": {
                    "type": "string"
                  },
                  "after": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/ResultCall"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "current": {
                    "type": [
                      "object",
                      "null"
                    ]
                  }
                }
              }
            }
          },
          "card": {
            "type": [
              "object",
              "null"
            ],
            "description": "The result card as og:image (1200x630) and portrait (1200x1500), while the files exist."
          }
        }
      },
      "EntityRef": {
        "type": "object",
        "required": [
          "kind",
          "slug",
          "name",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "company",
              "person",
              "organization"
            ]
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Story": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "part",
          "slug",
          "headline",
          "dek",
          "summary",
          "section",
          "date",
          "readingMinutes",
          "api",
          "sidesUrl",
          "layer",
          "call",
          "keyNumbers",
          "sources",
          "earlierVersion",
          "corrections",
          "wordCount",
          "pullQuote",
          "verdict",
          "sections",
          "orientation",
          "body",
          "chart",
          "tests",
          "results",
          "entities",
          "glossaryTerms"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "part": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "headline": {
            "type": "string"
          },
          "dek": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "section": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "readingMinutes": {
            "type": "integer"
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "sidesUrl": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "layer": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/StoryLayer"
              },
              {
                "type": "null"
              }
            ]
          },
          "call": {
            "$ref": "#/components/schemas/Call"
          },
          "keyNumbers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KeyNumber"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Source"
            }
          },
          "earlierVersion": {
            "type": [
              "string",
              "null"
            ]
          },
          "corrections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Correction"
            }
          },
          "wordCount": {
            "type": "integer"
          },
          "pullQuote": {
            "type": "string"
          },
          "verdict": {
            "type": "string"
          },
          "sections": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "title",
                "startsAt",
                "url"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "startsAt": {
                  "type": "integer"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "orientation": {
            "$ref": "#/components/schemas/Orientation",
            "description": "Where the Part stands, as the strip prints it (UX-1.10): the question, the current read, what is established and what remains uncertain (empty until the owner approved them), the next test with its stage."
          },
          "body": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The story as plain-text paragraphs, in order; sections[].startsAt indexes into it."
          },
          "chart": {
            "type": [
              "object",
              "null"
            ]
          },
          "tests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Test"
            }
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Result"
            }
          },
          "entities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EntityRef"
            }
          },
          "glossaryTerms": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GlossaryTerm"
            },
            "description": "The glossary terms the page marks in this Part, in the order marked, each with its short definition and its anchor on /glossary/ (UX-3.27); empty without an approved glossary."
          }
        }
      },
      "Voice": {
        "type": "object",
        "required": [
          "name",
          "entity",
          "claim",
          "date",
          "url",
          "access"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "entity": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "claim": {
            "type": "string"
          },
          "date": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "access": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "Against": {
        "type": "object",
        "required": [
          "name",
          "entity",
          "claim",
          "date",
          "url",
          "access",
          "answers",
          "relation",
          "dimension"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "entity": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "claim": {
            "type": "string"
          },
          "date": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "access": {
            "type": [
              "string",
              "null"
            ]
          },
          "answers": {
            "type": [
              "string",
              "null"
            ],
            "description": "The name of the voice on this side whose claim the case answers; that claim is one of the side’s voices."
          },
          "relation": {
            "type": "string",
            "enum": [
              "contradicts",
              "refutes",
              "invalidates",
              "qualifies"
            ]
          },
          "dimension": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "Side": {
        "type": "object",
        "required": [
          "id",
          "label",
          "voices",
          "against"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "voices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Voice"
            }
          },
          "against": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Against"
              },
              {
                "type": "null"
              }
            ],
            "description": "The strongest case against this side: one attributed, dated, linked claim by a voice outside it, chosen by relation (contradicts, refutes, invalidates, qualifies), then dimension, then date; null when none qualifies."
          }
        }
      },
      "Sides": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "part",
          "slug",
          "card",
          "story",
          "question",
          "call",
          "sides",
          "questions",
          "crossings",
          "notes",
          "settles",
          "grid"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "part": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "card": {
            "type": "string",
            "format": "uri",
            "description": "The sides bar card of this page, /embed/sides/<slug>/card.svg: a 1200 × 630 SVG with the question, the share of voices per side, the Call’s side when named, the conviction and the next test."
          },
          "story": {
            "type": "object",
            "required": [
              "headline",
              "url",
              "api"
            ],
            "properties": {
              "headline": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "question": {
            "type": "string"
          },
          "call": {
            "$ref": "#/components/schemas/Call"
          },
          "sides": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Side"
            }
          },
          "questions": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "question",
                "url",
                "sides"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "question": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "sides": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Side"
                  }
                }
              }
            }
          },
          "crossings": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "from",
                "to",
                "relation",
                "dimension",
                "note"
              ],
              "properties": {
                "from": {
                  "type": "string"
                },
                "to": {
                  "type": "string"
                },
                "relation": {
                  "type": "string"
                },
                "dimension": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "label",
                "text"
              ],
              "properties": {
                "label": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "text": {
                  "type": "string"
                }
              }
            }
          },
          "settles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Test"
            }
          },
          "grid": {
            "type": "object",
            "required": [
              "url",
              "csv",
              "api"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri"
              },
              "csv": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              }
            },
            "description": "The grid of this page: one row per voice, one column per question; the page, its CSV and its JSON twin."
          }
        }
      },
      "GridCard": {
        "type": "object",
        "required": [
          "claim",
          "date",
          "url"
        ],
        "properties": {
          "claim": {
            "type": "string",
            "maxLength": 250
          },
          "date": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          }
        }
      },
      "GridPosition": {
        "type": "object",
        "required": [
          "question",
          "side",
          "label",
          "claims"
        ],
        "properties": {
          "question": {
            "type": "string",
            "description": "The column: main for the headline question, otherwise the further question’s id."
          },
          "side": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "claims": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GridCard"
            }
          }
        }
      },
      "GridRow": {
        "type": "object",
        "required": [
          "name",
          "entity",
          "positions"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "entity": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GridPosition"
            }
          }
        }
      },
      "SidesGrid": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "part",
          "slug",
          "api",
          "csv",
          "sidesUrl",
          "story",
          "question",
          "license",
          "clip",
          "count",
          "claims",
          "columns",
          "rows"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "part": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "csv": {
            "type": "string",
            "format": "uri"
          },
          "sidesUrl": {
            "type": "string",
            "format": "uri"
          },
          "story": {
            "type": "object",
            "required": [
              "headline",
              "url",
              "api"
            ],
            "properties": {
              "headline": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "question": {
            "type": "string"
          },
          "license": {
            "type": "string"
          },
          "clip": {
            "type": "integer"
          },
          "count": {
            "type": "integer",
            "description": "Distinct voices on the page: the rows."
          },
          "claims": {
            "type": "integer",
            "description": "Published cards: the rows of the CSV."
          },
          "columns": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "question",
                "url"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "question": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GridRow"
            }
          }
        }
      },
      "QuestionPart": {
        "type": "object",
        "required": [
          "part",
          "headline",
          "question",
          "url",
          "api",
          "sidesUrl",
          "call"
        ],
        "properties": {
          "part": {
            "type": "integer"
          },
          "headline": {
            "type": "string"
          },
          "question": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "sidesUrl": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "call": {
            "$ref": "#/components/schemas/Call"
          }
        }
      },
      "QuestionSummary": {
        "type": "object",
        "required": [
          "slug",
          "question",
          "title",
          "headline",
          "url",
          "api",
          "aliases",
          "parts",
          "nextTest",
          "relations"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "question": {
            "type": "string",
            "description": "The Part’s published question, verbatim."
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "A shorter title the owner approved, or null; the page’s headline is the title when one exists, else the question."
          },
          "headline": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Other wordings agents and readers used for this question, as the sensor recorded them; never a person."
          },
          "parts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/QuestionPart"
            }
          },
          "nextTest": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Test"
              },
              {
                "type": "null"
              }
            ]
          },
          "relations": {
            "type": "boolean",
            "description": "Whether the owner approved the page’s relations: the mechanism, the alternative explanations and what each test checks (UX-2.21)."
          }
        }
      },
      "Question": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "slug",
          "question",
          "title",
          "headline",
          "api",
          "aliases",
          "method",
          "parts",
          "nextTest",
          "relations",
          "timeline"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "slug": {
            "type": "string"
          },
          "question": {
            "type": "string"
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "headline": {
            "type": "string"
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "method": {
            "type": "string",
            "const": "How DeepStack settles a question"
          },
          "parts": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/QuestionPart"
                },
                {
                  "type": "object",
                  "required": [
                    "sides",
                    "crossings",
                    "notes",
                    "tests",
                    "results",
                    "sources"
                  ],
                  "properties": {
                    "sides": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Side"
                      }
                    },
                    "crossings": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "from",
                          "to",
                          "relation",
                          "dimension",
                          "note"
                        ],
                        "properties": {
                          "from": {
                            "type": "string"
                          },
                          "to": {
                            "type": "string"
                          },
                          "relation": {
                            "type": "string"
                          },
                          "dimension": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "note": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "label",
                          "text"
                        ],
                        "properties": {
                          "label": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "text": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "tests": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Test"
                      }
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Result"
                      }
                    },
                    "sources": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Source"
                      }
                    }
                  }
                }
              ]
            }
          },
          "nextTest": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Test"
              },
              {
                "type": "null"
              }
            ]
          },
          "relations": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/QuestionRelations"
              },
              {
                "type": "null"
              }
            ],
            "description": "The relations as the page prints them, null until the owner approved them."
          },
          "timeline": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TimelineEntry"
            },
            "description": "What changed: the Part’s publication, every Call version above the first, every result and the next dated test, oldest first per Part; never a reason, a specification version or an earlier wording."
          }
        }
      },
      "Questions": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "api",
          "method",
          "about",
          "count",
          "questions"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "method": {
            "type": "string",
            "const": "How DeepStack settles a question"
          },
          "about": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "questions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/QuestionSummary"
            }
          }
        }
      },
      "StoryLayer": {
        "type": "object",
        "required": [
          "id",
          "label"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "Orientation": {
        "type": "object",
        "required": [
          "question",
          "read",
          "established",
          "uncertain",
          "approvedBy",
          "approvedAt",
          "next"
        ],
        "properties": {
          "question": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "text": {
                "type": "string"
              },
              "url": {
                "type": "string",
                "format": "uri"
              }
            },
            "description": "The canonical question page the Part belongs to, or null."
          },
          "read": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "stance": {
                "type": "string"
              },
              "line": {
                "type": "string"
              },
              "tone": {
                "type": "string",
                "enum": [
                  "bull",
                  "bear",
                  "split"
                ]
              },
              "toneLabel": {
                "type": "string"
              },
              "conviction": {
                "type": "integer"
              },
              "convictionLabel": {
                "type": "string"
              }
            },
            "description": "The Call as the strip prints it."
          },
          "established": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "uncertain": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "approvedBy": {
            "type": [
              "string",
              "null"
            ]
          },
          "approvedAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "next": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "id": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "date": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "whenLabel": {
                "type": "string"
              },
              "event": {
                "type": "string"
              },
              "stage": {
                "type": "string",
                "enum": [
                  "open",
                  "pre",
                  "post"
                ]
              },
              "stageLabel": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "callNumber": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "The Call’s number for the next test (the chance, 0 to 100, the Call gives the yes answer, recorded before the date), or null."
              }
            },
            "description": "The next test the Part names, with the stage of its specification, or null."
          }
        }
      },
      "GlossaryTerm": {
        "type": "object",
        "required": [
          "id",
          "term",
          "short",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "term": {
            "type": "string"
          },
          "short": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The term on /glossary/."
          }
        }
      },
      "QuestionRelations": {
        "type": "object",
        "required": [
          "mechanism",
          "alternatives",
          "checks",
          "approvedBy",
          "approvedAt"
        ],
        "properties": {
          "mechanism": {
            "type": "string",
            "description": "One paragraph: the causal chain the Part argues, in the house voice."
          },
          "alternatives": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Two to four alternative explanations, one per line, drawn from the sides’ cases against the Call."
          },
          "checks": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Per test id, the piece of the argument the test verifies (\"the margin claim\")."
          },
          "approvedBy": {
            "type": "string"
          },
          "approvedAt": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "TimelineEntry": {
        "type": "object",
        "required": [
          "part",
          "date",
          "kind",
          "text",
          "url",
          "by"
        ],
        "properties": {
          "part": {
            "type": "integer"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "kind": {
            "type": "string",
            "enum": [
              "published",
              "call",
              "result",
              "next"
            ]
          },
          "text": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "by": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "LayerPart": {
        "type": "object",
        "required": [
          "part",
          "headline",
          "date",
          "url",
          "api"
        ],
        "properties": {
          "part": {
            "type": "integer"
          },
          "headline": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "LayerQuestion": {
        "type": "object",
        "required": [
          "slug",
          "headline",
          "question",
          "url",
          "api"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "headline": {
            "type": "string"
          },
          "question": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "LayerIndicator": {
        "type": "object",
        "required": [
          "part",
          "value",
          "label",
          "context",
          "url"
        ],
        "properties": {
          "part": {
            "type": "integer"
          },
          "value": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "context": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "LayerNextTest": {
        "type": "object",
        "required": [
          "part",
          "id",
          "label",
          "when",
          "date",
          "precision",
          "event",
          "status",
          "stage",
          "url"
        ],
        "properties": {
          "part": {
            "type": "integer"
          },
          "id": {
            "type": [
              "string",
              "null"
            ]
          },
          "label": {
            "type": "string"
          },
          "when": {
            "type": "string"
          },
          "date": {
            "type": [
              "string",
              "null"
            ]
          },
          "precision": {
            "type": [
              "string",
              "null"
            ]
          },
          "event": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "confirmed",
              "refuted",
              "inconclusive",
              "not_reached"
            ]
          },
          "stage": {
            "type": "string",
            "enum": [
              "open",
              "pre",
              "post"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Layer": {
        "type": "object",
        "required": [
          "id",
          "label",
          "question",
          "url",
          "archiveUrl",
          "parts",
          "questions",
          "indicators",
          "nextTests",
          "tests",
          "results"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "question": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "archiveUrl": {
            "type": "string",
            "format": "uri",
            "description": "The archive filtered to this layer (/stories/#layer=<id>)."
          },
          "parts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LayerPart"
            }
          },
          "questions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LayerQuestion"
            }
          },
          "indicators": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LayerIndicator"
            },
            "description": "The first key number of each Part in the layer."
          },
          "nextTests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LayerNextTest"
            },
            "description": "The next test of each Part, soonest first."
          },
          "tests": {
            "type": "integer"
          },
          "results": {
            "type": "integer"
          }
        }
      },
      "Layers": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "api",
          "approvedBy",
          "approvedAt",
          "count",
          "about",
          "layers"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "approvedBy": {
            "type": [
              "string",
              "null"
            ]
          },
          "approvedAt": {
            "type": [
              "string",
              "null"
            ]
          },
          "count": {
            "type": "integer"
          },
          "about": {
            "type": "string"
          },
          "layers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Layer"
            }
          }
        }
      },
      "SearchIndex": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "api",
          "count",
          "kinds",
          "docs"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "count": {
            "type": "integer"
          },
          "kinds": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            },
            "description": "How many documents of each kind."
          },
          "docs": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "kind",
                "id",
                "title",
                "text",
                "url",
                "date",
                "meta"
              ],
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "story",
                    "question",
                    "sides",
                    "company",
                    "person",
                    "test",
                    "term",
                    "layer"
                  ]
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "text": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "date": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "meta": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "MarketSnapshot": {
        "type": "object",
        "required": [
          "price",
          "change",
          "changePercent",
          "marketCap",
          "pe",
          "nextEarnings",
          "exchange",
          "currency",
          "asOf",
          "source",
          "sourceUrl",
          "note"
        ],
        "properties": {
          "price": {
            "type": "number"
          },
          "change": {
            "type": [
              "number",
              "null"
            ]
          },
          "changePercent": {
            "type": [
              "number",
              "null"
            ]
          },
          "marketCap": {
            "type": [
              "number",
              "null"
            ]
          },
          "pe": {
            "type": [
              "number",
              "null"
            ]
          },
          "nextEarnings": {
            "type": [
              "string",
              "null"
            ]
          },
          "exchange": {
            "type": [
              "string",
              "null"
            ]
          },
          "currency": {
            "type": [
              "string",
              "null"
            ]
          },
          "asOf": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "sourceUrl": {
            "type": "string",
            "format": "uri"
          },
          "note": {
            "type": "string"
          }
        }
      },
      "SideRow": {
        "type": "object",
        "required": [
          "part",
          "question",
          "side",
          "sideLabel",
          "claim",
          "date",
          "url",
          "linkVerified",
          "storyUrl",
          "sidesUrl"
        ],
        "properties": {
          "part": {
            "type": "integer"
          },
          "question": {
            "type": [
              "string",
              "null"
            ]
          },
          "side": {
            "type": "string"
          },
          "sideLabel": {
            "type": "string"
          },
          "claim": {
            "type": "string"
          },
          "date": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ]
          },
          "linkVerified": {
            "type": "boolean"
          },
          "storyUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "sidesUrl": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "Entity": {
        "type": "object",
        "required": [
          "kind",
          "slug",
          "name",
          "url",
          "api",
          "summary",
          "parts",
          "numbers",
          "mentions",
          "sides"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "company",
              "person",
              "organization"
            ]
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "ticker": {
            "type": [
              "string",
              "null"
            ]
          },
          "role": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "summary": {
            "type": "string"
          },
          "parts": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "part",
                "headline",
                "url"
              ],
              "properties": {
                "part": {
                  "type": "integer"
                },
                "headline": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "numbers": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "value",
                "label",
                "context",
                "part",
                "url"
              ],
              "properties": {
                "value": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "context": {
                  "type": "string"
                },
                "part": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "mentions": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "part",
                "section",
                "excerpt",
                "url"
              ],
              "properties": {
                "part": {
                  "type": "integer"
                },
                "section": {
                  "type": "string"
                },
                "excerpt": {
                  "type": "string"
                },
                "url": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "sides": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SideRow"
            }
          },
          "coverage": {
            "type": [
              "object",
              "null"
            ]
          },
          "lastUpdated": {
            "type": [
              "string",
              "null"
            ]
          },
          "market": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/MarketSnapshot"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "TapeItem": {
        "type": "object",
        "required": [
          "id",
          "label",
          "value",
          "change",
          "source",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "change": {
            "type": "string"
          },
          "source": {
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Edition": {
        "type": "object",
        "required": [
          "id",
          "number",
          "date",
          "subject",
          "preheader",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "number": {
            "type": "integer"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "subject": {
            "type": "string"
          },
          "preheader": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Index": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "name",
          "version",
          "site",
          "description",
          "license",
          "cors",
          "counts",
          "files",
          "openapi",
          "llms",
          "feeds",
          "mcp",
          "pages"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "name": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "site": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "type": "string"
          },
          "license": {
            "type": "string"
          },
          "cors": {
            "type": "string"
          },
          "counts": {
            "type": "object"
          },
          "files": {
            "type": "object"
          },
          "openapi": {
            "type": "string",
            "format": "uri"
          },
          "llms": {
            "type": "object",
            "required": [
              "txt",
              "full"
            ],
            "properties": {
              "txt": {
                "type": "string",
                "format": "uri"
              },
              "full": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "feeds": {
            "type": "object",
            "required": [
              "rss",
              "docket"
            ],
            "properties": {
              "rss": {
                "type": "string",
                "format": "uri"
              },
              "docket": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "mcp": {
            "type": "object",
            "required": [
              "url",
              "transport",
              "protocolVersion",
              "docs",
              "tools"
            ],
            "properties": {
              "url": {
                "type": "string",
                "format": "uri"
              },
              "transport": {
                "type": "string"
              },
              "protocolVersion": {
                "type": "string"
              },
              "docs": {
                "type": "string",
                "format": "uri"
              },
              "tools": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "pages": {
            "type": "object",
            "required": [
              "mcp",
              "rules",
              "terms",
              "privacy",
              "contact"
            ],
            "properties": {
              "mcp": {
                "type": "string",
                "format": "uri"
              },
              "rules": {
                "type": "string",
                "format": "uri"
              },
              "terms": {
                "type": "string",
                "format": "uri"
              },
              "privacy": {
                "type": "string",
                "format": "uri"
              },
              "contact": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "Stories": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "series",
          "description",
          "count",
          "stories"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "series": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "stories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StorySummary"
            }
          }
        }
      },
      "Docket": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "asOf",
          "api",
          "calendar",
          "count",
          "dated",
          "precision",
          "specification",
          "stages",
          "stageRule",
          "callExpectsRule",
          "callProbabilityRule",
          "specified",
          "folded",
          "tests"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "asOf": {
            "type": "string",
            "format": "date"
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "calendar": {
            "type": "string",
            "format": "uri"
          },
          "count": {
            "type": "integer"
          },
          "dated": {
            "type": "integer"
          },
          "precision": {
            "type": "string"
          },
          "specification": {
            "type": "string"
          },
          "stages": {
            "type": "object",
            "required": [
              "pre",
              "post",
              "open"
            ],
            "properties": {
              "pre": {
                "type": "integer"
              },
              "post": {
                "type": "integer"
              },
              "open": {
                "type": "integer"
              }
            },
            "description": "How many tests stand at each stage (a test that is the same as another Part’s counts once)."
          },
          "stageRule": {
            "type": "string",
            "description": "What the three stages mean, in the words the Docket page prints (UX-3.27)."
          },
          "callExpectsRule": {
            "type": "string",
            "description": "What callExpects records and how a result’s effect follows from it, in one sentence (UX-3.27)."
          },
          "callProbabilityRule": {
            "type": "string"
          },
          "specified": {
            "type": "integer"
          },
          "folded": {
            "type": "integer"
          },
          "tests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Test"
            }
          }
        }
      },
      "Results": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "api",
          "rule",
          "hitRateRule",
          "brierRule",
          "brier",
          "callVerdictRule",
          "count",
          "counts",
          "callVerdicts",
          "effects",
          "hitRate",
          "results"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "rule": {
            "type": "string"
          },
          "hitRateRule": {
            "type": "string",
            "description": "What the hit rate counts, in the words the scorecard prints."
          },
          "brierRule": {
            "type": "string"
          },
          "brier": {
            "type": "object",
            "required": [
              "floor",
              "scored",
              "score"
            ],
            "properties": {
              "floor": {
                "type": "integer"
              },
              "scored": {
                "type": "integer"
              },
              "score": {
                "type": [
                  "number",
                  "null"
                ]
              }
            }
          },
          "callVerdictRule": {
            "type": "string",
            "description": "How a result is read against the Call (D-UX15), in the words the site prints."
          },
          "count": {
            "type": "integer"
          },
          "counts": {
            "type": "object",
            "required": [
              "confirmed",
              "refuted",
              "inconclusive"
            ],
            "properties": {
              "confirmed": {
                "type": "integer"
              },
              "refuted": {
                "type": "integer"
              },
              "inconclusive": {
                "type": "integer"
              }
            }
          },
          "callVerdicts": {
            "type": "object",
            "required": [
              "confirmed",
              "refuted",
              "inconclusive",
              "informed"
            ],
            "properties": {
              "confirmed": {
                "type": "integer"
              },
              "refuted": {
                "type": "integer"
              },
              "inconclusive": {
                "type": "integer"
              },
              "informed": {
                "type": "integer"
              }
            },
            "description": "The results counted as they are read, against the Call."
          },
          "effects": {
            "type": "object",
            "required": [
              "supports",
              "weakens",
              "informs"
            ],
            "properties": {
              "supports": {
                "type": "integer"
              },
              "weakens": {
                "type": "integer"
              },
              "informs": {
                "type": "integer"
              }
            },
            "description": "How many results supported, weakened or informed the Call."
          },
          "hitRate": {
            "type": "object",
            "required": [
              "floor",
              "rated",
              "held",
              "rate"
            ],
            "properties": {
              "floor": {
                "type": "integer"
              },
              "rated": {
                "type": "integer"
              },
              "held": {
                "type": "integer"
              },
              "rate": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "description": "The hit rate over pre-specified tests: the floor (ten results), how many were rated, how many supported the Call, and the rate in whole percent, null below the floor."
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Result"
            }
          }
        }
      },
      "Corrections": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "api",
          "policy",
          "count",
          "stories",
          "corrections"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "policy": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "stories": {
            "type": "integer"
          },
          "corrections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CorrectionRow"
            }
          }
        }
      },
      "Companies": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "api",
          "kind",
          "count",
          "market",
          "companies"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "kind": {
            "type": "string",
            "const": "company"
          },
          "count": {
            "type": "integer"
          },
          "market": {
            "type": [
              "object",
              "null"
            ]
          },
          "companies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Entity"
            }
          }
        }
      },
      "People": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "api",
          "kind",
          "count",
          "note",
          "people"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "kind": {
            "type": "string",
            "const": "person",
            "description": "The collection: people and the organizations that contribute argument (each row carries its own kind)"
          },
          "count": {
            "type": "integer"
          },
          "note": {
            "type": "string"
          },
          "people": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Entity"
            }
          }
        }
      },
      "Tape": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "asOf",
          "api",
          "source",
          "sourceUrl",
          "count",
          "items",
          "note"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "asOf": {
            "type": [
              "string",
              "null"
            ]
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "source": {
            "type": [
              "string",
              "null"
            ]
          },
          "sourceUrl": {
            "type": "string",
            "format": "uri"
          },
          "count": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TapeItem"
            }
          },
          "note": {
            "type": "string"
          }
        }
      },
      "DatasetFile": {
        "type": "object",
        "required": [
          "name",
          "csv",
          "json",
          "rows",
          "columns"
        ],
        "properties": {
          "name": {
            "type": "string",
            "enum": [
              "tests",
              "results",
              "sides",
              "companies",
              "people",
              "tape"
            ]
          },
          "csv": {
            "type": "string",
            "format": "uri",
            "description": "The dated CSV, <name>-<asOf>.csv: the address to cite."
          },
          "json": {
            "type": "string",
            "format": "uri",
            "description": "The dated JSON twin."
          },
          "rows": {
            "type": "integer"
          },
          "columns": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "DatasetVersion": {
        "type": "object",
        "required": [
          "asOf",
          "generatedAt",
          "current",
          "files",
          "changes"
        ],
        "properties": {
          "asOf": {
            "type": "string",
            "format": "date"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "current": {
            "type": "boolean",
            "description": "True when the version was cut on the day of the current build."
          },
          "files": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/DatasetFile"
                },
                {
                  "type": "object",
                  "required": [
                    "snapshot",
                    "bytes",
                    "sha256",
                    "jsonBytes",
                    "jsonSha256"
                  ],
                  "properties": {
                    "snapshot": {
                      "type": "object",
                      "required": [
                        "csv",
                        "json"
                      ],
                      "properties": {
                        "csv": {
                          "type": "string",
                          "format": "uri"
                        },
                        "json": {
                          "type": "string",
                          "format": "uri"
                        }
                      }
                    },
                    "bytes": {
                      "type": "integer"
                    },
                    "sha256": {
                      "type": "string"
                    },
                    "jsonBytes": {
                      "type": "integer"
                    },
                    "jsonSha256": {
                      "type": "string"
                    }
                  }
                }
              ]
            }
          },
          "changes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "What changed since the version before, one plain sentence per file."
          }
        }
      },
      "DatasetIndex": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "license",
          "about",
          "current",
          "versions"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "license": {
            "type": "string"
          },
          "about": {
            "type": "string"
          },
          "current": {
            "type": "object",
            "required": [
              "asOf",
              "latestVersion",
              "files"
            ],
            "properties": {
              "asOf": {
                "type": "string",
                "format": "date"
              },
              "latestVersion": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date"
              },
              "files": {
                "type": "array",
                "items": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/DatasetFile"
                    },
                    {
                      "type": "object",
                      "required": [
                        "plain"
                      ],
                      "properties": {
                        "plain": {
                          "type": "object",
                          "required": [
                            "csv",
                            "json"
                          ],
                          "properties": {
                            "csv": {
                              "type": "string",
                              "format": "uri"
                            },
                            "json": {
                              "type": "string",
                              "format": "uri"
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "versions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DatasetVersion"
            },
            "description": "Every cut of content/dataset/versions.json, newest first."
          }
        }
      },
      "Weekly": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "api",
          "count",
          "latest",
          "editions"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "count": {
            "type": "integer"
          },
          "latest": {
            "type": [
              "string",
              "null"
            ]
          },
          "editions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Edition"
            }
          }
        }
      },
      "NoteSummary": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "month",
          "publishedDate",
          "dek",
          "window",
          "url",
          "api"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "month": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$"
          },
          "publishedDate": {
            "type": "string",
            "format": "date"
          },
          "dek": {
            "type": "string"
          },
          "window": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "since": {
                "type": "string",
                "format": "date"
              },
              "until": {
                "type": "string",
                "format": "date"
              },
              "exports": {
                "type": "integer"
              }
            },
            "description": "The days the question log covered, and how many weekly exports were read."
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "api": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Note": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "slug",
          "title",
          "month",
          "publishedDate",
          "dek",
          "window",
          "api",
          "body",
          "figures",
          "sources"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "month": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$"
          },
          "publishedDate": {
            "type": "string",
            "format": "date"
          },
          "dek": {
            "type": "string"
          },
          "window": {
            "type": [
              "object",
              "null"
            ]
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "body": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The note as plain-text paragraphs, in order."
          },
          "figures": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "label",
                "value"
              ],
              "properties": {
                "label": {
                  "type": "string"
                },
                "value": {
                  "type": "string"
                }
              }
            },
            "description": "Counts of questions, never of people."
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Source"
            }
          }
        }
      },
      "Notes": {
        "type": "object",
        "required": [
          "generatedAt",
          "url",
          "disclaimer",
          "api",
          "description",
          "count",
          "latest",
          "notes"
        ],
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "disclaimer": {
            "type": "string",
            "const": "Analysis and opinion, not investment advice."
          },
          "api": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "latest": {
            "type": [
              "string",
              "null"
            ]
          },
          "notes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NoteSummary"
            }
          }
        }
      },
      "EntityFile": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Entity"
          },
          {
            "type": "object",
            "required": [
              "generatedAt",
              "disclaimer"
            ],
            "properties": {
              "generatedAt": {
                "type": "string",
                "format": "date-time"
              },
              "disclaimer": {
                "type": "string",
                "const": "Analysis and opinion, not investment advice."
              }
            }
          }
        ]
      }
    }
  }
}
