{
  "title": "UN press releases - choose listings and topics",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "bodies": {
      "title": "UN press-release listings",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "description": "Choose secretary-general and/or general-assembly. Omitted/empty uses both. Only rows explicitly labelled Press Release are eligible. The Security Council category, live blogs and databases are not supported.",
      "prefill": [
        "secretary-general",
        "general-assembly"
      ],
      "sectionCaption": "1 · UN press-release listings",
      "sectionDescription": "Choose the official listing sources to monitor."
    },
    "keywords": {
      "title": "Literal words or phrases",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "description": "Optional case-insensitive ANY phrase match in the title, document code or returned bounded publisher excerpt. No inferred sentiment, conflict risk, country tagging or policy effect.",
      "sectionCaption": "2 · Release filters",
      "sectionDescription": "Apply literal terms and publication-date boundaries."
    },
    "startDate": {
      "title": "Release date on or after",
      "type": "string",
      "editor": "textfield",
      "description": "Optional real YYYY-MM-DD calendar date, inclusive. This is the displayed publication date; the source listing does not establish a precise release time."
    },
    "endDate": {
      "title": "Release date on or before",
      "type": "string",
      "editor": "textfield",
      "description": "Optional real YYYY-MM-DD calendar date, inclusive. Must not precede startDate."
    },
    "maxPagesPerBody": {
      "title": "Maximum listing pages per UN body",
      "type": "integer",
      "editor": "number",
      "description": "Read this many public listing pages per body, starting with the newest listing page. A bounded window may miss older keyword matches. No complete archive or full-history claim.",
      "default": 1,
      "minimum": 1,
      "maximum": 20,
      "sectionCaption": "3 · Collection and excerpt limits",
      "sectionDescription": "Bound listing pages, saved records and publisher excerpts."
    },
    "maxExcerptCharacters": {
      "title": "Characters per publisher excerpt",
      "type": "integer",
      "editor": "number",
      "description": "Return up to this many characters from the listing’s publisher-supplied excerpt. No full article is fetched. excerptTruncated marks our shortening; a source excerpt may already omit most of a release.",
      "default": 1000,
      "minimum": 100,
      "maximum": 2000
    },
    "maxResults": {
      "title": "Maximum saved results",
      "type": "integer",
      "editor": "number",
      "description": "Maximum unique matching rows saved across the whole run. Normal requested caps are bounded coverage, not source failures.",
      "default": 20,
      "minimum": 1,
      "maximum": 1000
    },
    "comparePrevious": {
      "title": "Compare with prior saved observations",
      "type": "boolean",
      "editor": "checkbox",
      "default": false,
      "description": "Return matching rows with new, changed or unchanged comparison status. Uses a named persistent store. Only confirmed saved rows advance history. The first run establishes observations, and SUMMARY confirms whether history was committed.",
      "sectionCaption": "4 · Saved comparisons",
      "sectionDescription": "The first comparison establishes history. Reuse the same scope for later observations and avoid concurrent writers."
    },
    "onlyChanges": {
      "title": "Save only new or changed observations",
      "type": "boolean",
      "editor": "checkbox",
      "default": false,
      "description": "Implies comparison. Unchanged matching observations are skipped without a dataset charge. A first run saves matching observations; subsequent unchanged runs can correctly save zero. No disappearance/deletion inference."
    },
    "snapshotName": {
      "title": "History name",
      "type": "string",
      "editor": "textfield",
      "description": "Use 1-80 letters, digits, underscores or hyphens. History also includes the sorted sources/queries and content filters. Run only one writer at a time for each scope. Start a new name for an incompatible saved baseline.",
      "default": "default"
    },
    "maxRunSeconds": {
      "title": "Run time budget (seconds)",
      "type": "integer",
      "editor": "number",
      "description": "Requests use this budget and the platform deadline minus 25 seconds. Each request is capped at 25 seconds. Partial coverage and spending stops are explicit in SUMMARY.",
      "default": 240,
      "minimum": 30,
      "maximum": 3600,
      "sectionCaption": "5 · Advanced run settings",
      "sectionDescription": "Adjust the time budget only when a larger collection needs it."
    }
  },
  "description": "Choose official UN press-release listings, dates and literal keywords, then bound the listing window and excerpt length. Results are source metadata and publisher excerpts, not complete article republication."
}
