{
  "title": "Zenn Developer Feed Monitor - Creators & Topics",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "creators": {
      "title": "Creator handles",
      "type": "array",
      "description": "Up to 20 exact Zenn creator handles, for example zenn. No profile URLs. When creators and topics are empty, the current trending feed is the code fallback.",
      "editor": "stringList",
      "default": [],
      "prefill": [],
      "sectionCaption": "1 · Public Zenn feeds",
      "sectionDescription": "Choose creator or publication handles, topics or the trending feed."
    },
    "topics": {
      "title": "Topic slugs",
      "type": "array",
      "description": "Up to 20 exact ASCII Zenn topic slugs, such as typescript or python. Uses each documented recent topic RSS feed, not site search.",
      "editor": "stringList",
      "default": []
    },
    "includeTrending": {
      "title": "Include current trending feed",
      "type": "boolean",
      "description": "Include the publisher-selected trending RSS feed alongside explicit creators or topics. With no explicit source and this field false, trending is still the code fallback. Trending feed order is not chronological.",
      "default": false
    },
    "keywords": {
      "title": "Any matching literal keyword",
      "type": "array",
      "description": "Up to 20 case-insensitive substrings. Match any keyword in the returned title or excerpt, including Japanese text. Applied after the per-feed window limit; no language translation or sentiment inference.",
      "editor": "stringList",
      "default": [],
      "sectionCaption": "2 · Literal text filter",
      "sectionDescription": "Match the returned feed title and excerpt."
    },
    "maxItemsPerFeed": {
      "title": "Selected entries per feed",
      "type": "integer",
      "description": "Select the first entries in publisher feed order before literal keyword filtering and comparison. This recent feed window is not a full archive.",
      "default": 10,
      "minimum": 1,
      "maximum": 20,
      "sectionCaption": "3 · Feed and result limits",
      "sectionDescription": "Selected entries and saved observations are separate caps."
    },
    "maxResults": {
      "title": "Maximum saved observations",
      "type": "integer",
      "description": "Maximum confirmed saved posts. Duplicate feed entries and unchanged skipped rows do not consume this limit. Selected scope limits do not mean upstream failure.",
      "default": 20,
      "minimum": 1,
      "maximum": 500
    },
    "comparePrevious": {
      "title": "Compare saved observations",
      "type": "boolean",
      "description": "Compare title, excerpt, publisher date and creator identity to prior saved observations in a named store. Initial observations are new. Only confirmed saved rows advance history.",
      "default": false,
      "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 posts",
      "type": "boolean",
      "description": "Implies comparePrevious. The initial run emits new observations; unchanged repeats can correctly emit zero rows. Feed disappearance does not establish deletion.",
      "default": false
    },
    "snapshotName": {
      "title": "Snapshot namespace",
      "type": "string",
      "description": "1-40 letters, digits, underscores or hyphens. Use a separate namespace for each workflow and run the same namespace sequentially.",
      "editor": "textfield",
      "default": "default"
    },
    "maxRunSeconds": {
      "title": "Time budget in seconds",
      "type": "integer",
      "description": "Own deadline, also bounded by the platform deadline minus 25 seconds. Requests, retries and history writes share this budget.",
      "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 creator, topic or trending feeds, bound the visible entries and optionally compare saved observations. Feed metadata can describe articles or books; a URL namespace may identify a publication."
}
