| `bodyMinParagraphs` | `3` | Min paragraph count for a selector to qualify |
| `bodyMinParagraphs` | `3` | Min paragraph count for a selector to qualify |
| `validateArticle` | `false` | When `true`, `fetchPage` probes `og:type` + JSON-LD `@type` + body length and returns `isArticle`; `harvest.js` skips candidates where `isArticle === false`. Use with a *broad* `urlPattern` (so candidate URLs aren't pre-filtered by fragile slug heuristics) to reject section/category pages that slip through once the page is actually fetched. Off by default → existing recipes unchanged. |
| `validateArticle` | `false` | When `true`, `fetchPage` probes `og:type` + JSON-LD `@type` + body length and returns `isArticle`; `harvest.js` skips candidates where `isArticle === false`. Use with a *broad* `urlPattern` (so candidate URLs aren't pre-filtered by fragile slug heuristics) to reject section/category pages that slip through once the page is actually fetched. Off by default → existing recipes unchanged. |
| `bodyMinChars` | `500` | Floor on body length for`isArticle`(only consulted when `validateArticle: true`) |
| `bodyMinChars` | `500` | Floor on body length for`isArticle`(only consulted when `validateArticle: true`) |
| `rejectTitlePattern` | `null` | Regex source;if`document.title`(after `titleStripSuffix`) matches, `isArticle` is forced `false` — **independent of `validateArticle`**, applies even when that's off. Use for a metered paywall whose locked pages still emit a real `NewsArticle` JSON-LD and a teaser body long enough to pass the `validateArticle` heuristic (e.g. FT's Lex column: title is literally `"Subscribe to read"`, but the og:type/body-length checks alone say it's a real article). `null` = off. |
| `dateSelector` | `time[datetime]` | Falls back to JSON-LD `datePublished` |
| `dateSelector` | `time[datetime]` | Falls back to JSON-LD `datePublished` |
| `authorSelector` | `[rel="author"], [class*="author"] a` | Falls back to JSON-LD `author.name` |
| `authorSelector` | `[rel="author"], [class*="author"] a` | Falls back to JSON-LD `author.name` |