{
  "title": "Follow vendor incident updates — settings",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "vendors": {
      "title": "Supported vendor feeds",
      "type": "array",
      "description": "Supported feed IDs: apify, reddit, cloudflare. Empty uses apify and reddit. Only these verified official Atom feeds are supported.",
      "editor": "stringList",
      "default": [],
      "prefill": [
        "apify",
        "reddit"
      ],
      "sectionCaption": "Vendors and feed window"
    },
    "maxItemsPerSource": {
      "title": "Entries inspected per feed",
      "type": "integer",
      "description": "Select the first entries in publisher feed order before keyword filtering and comparison. Feed windows are limited by the publisher; this is not full history.",
      "default": 10,
      "minimum": 1,
      "maximum": 100
    },
    "keywords": {
      "title": "Title or update text contains",
      "type": "array",
      "description": "Optional case-insensitive substring matching against title and update text. Any listed keyword matches. Applied after the per-feed window limit; no semantic or severity inference.",
      "editor": "stringList",
      "default": []
    },
    "maxResults": {
      "title": "Maximum incident observations",
      "type": "integer",
      "description": "Maximum confirmed saved incident observations. Unchanged skipped rows do not consume the limit. Selected caps are distinct from source failures.",
      "default": 25,
      "minimum": 1,
      "maximum": 300
    },
    "comparePrevious": {
      "title": "Compare prior saved observations",
      "type": "boolean",
      "description": "Persist only confirmed saved incident observations. First observations are new; repeat sequentially with the same snapshotName.",
      "default": false,
      "sectionCaption": "Saved comparisons"
    },
    "onlyChanges": {
      "title": "Save first or changed observations",
      "type": "boolean",
      "description": "Implies comparePrevious. First run emits initial observations. Unchanged repeated observations are skipped and can result in zero saved rows.",
      "default": false
    },
    "snapshotName": {
      "title": "Comparison history name",
      "type": "string",
      "description": "1-40 letters, digits, hyphens or underscores. Use separate namespaces for workflows and never run the same namespace concurrently.",
      "editor": "textfield",
      "default": "default"
    },
    "maxRunSeconds": {
      "title": "Run time budget (seconds)",
      "type": "integer",
      "description": "Own deadline, also bounded by the platform deadline minus 25 seconds. Requests, retry delays and history work share this budget.",
      "default": 240,
      "minimum": 30,
      "maximum": 3600,
      "sectionCaption": "Run budget"
    }
  },
  "description": "For vendor watchlists and operational reporting, collect publisher-written incident updates and optionally compare later observations. The current official Atom feeds for Apify, Reddit and Cloudflare. Feed windows include scheduled maintenance and are not full archives."
}
