{
  "title": "FCDO Travel Advice Monitor - Country Guidance Changes",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "countries": {
      "title": "GOV.UK destination slugs",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "description": "Up to 100 GOV.UK destination slugs. Omitted or empty uses france, japan and ukraine. Case is normalized. Unknown destinations fail honestly; no fuzzy country guessing.",
      "prefill": [
        "france",
        "japan",
        "ukraine"
      ],
      "sectionCaption": "1 · Choose destinations and guidance",
      "sectionDescription": "Use exact GOV.UK destination and section slugs; missing requested sections are reported."
    },
    "sections": {
      "title": "Guidance sections",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "description": "Optional subset: warnings-and-insurance, entry-requirements, safety-and-security, regional-risks, health, getting-help. Omitted/empty returns all available supported sections. Missing requested sections are listed separately."
    },
    "keywords": {
      "title": "Literal words or phrases",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "description": "Optional case-insensitive ANY phrase match in title, publisher change note or complete selected section text. Matching excerpts identify the source section; a country name alone does not imply a risk.",
      "sectionCaption": "2 · Filter and size the returned text",
      "sectionDescription": "Keywords use full selected section text even if displayed text is shortened."
    },
    "updatedSince": {
      "title": "Published update on or after",
      "type": "string",
      "editor": "textfield",
      "description": "Optional real YYYY-MM-DD UTC date. Filters public_updated_at, not the review date or run time."
    },
    "maxSectionCharacters": {
      "title": "Characters per returned section",
      "type": "integer",
      "editor": "number",
      "description": "Return at most this many plain-text characters for each selected section. textTruncated flags shortened text. Hashes and keyword matching use the full source section.",
      "default": 12000,
      "minimum": 100,
      "maximum": 50000
    },
    "maxResults": {
      "title": "Maximum saved destinations",
      "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": "3 · Optional saved section comparisons",
      "sectionDescription": "First observations establish history; a no-change repeat can return zero rows."
    },
    "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": "4 · Run budget",
      "sectionDescription": "Partial source coverage and time stops are explicit in SUMMARY."
    }
  },
  "description": "Choose country advice pages and optional saved comparisons to observe official FCDO text changes. Regional wording is preserved; the Actor does not assign a whole-country risk score."
}
