ReadonlymarkdownAggregated markdown (front-matter + body) produced by aggregateAnalysis.
ReadonlylangTarget language code.
ReadonlycanonicalCanonical path (e.g. news/2026-04-23-propositions-en.html).
Optional ReadonlynowOptional clock seam used by parseFrontMatterDate when the front-matter date: is missing or malformed. Defaults to new Date().
Optional ReadonlyparsedPre-parsed front-matter data (the .data record returned by gray-matter). When provided, the internal matter() call is skipped, avoiding a duplicate parse in callers (e.g. renderArticleHtml) that have already parsed the markdown.
Optional ReadonlybriefBrief-derived title โ when set (non-empty), this trumps the fm.title frontmatter line. Sourced directly from the executive brief by renderArticleHtml (see ./article.ts). Leaving this unset preserves the legacy frontmatter-only audit path so the 278 pre-2026-03-26 legacy news/*-en.html files (whose analysis/daily/<date>/ sources have been deleted) keep their existing SEO without throwing.
Optional ReadonlybriefBrief-derived description โ when set (non-empty), this trumps the fm.description frontmatter line. Companion to briefDerivedTitle.
Optional ReadonlybriefBrief-derived entity tokens (bill IDs, committee codes, party codes, named entities) โ when provided, these seed the SERP keywords string in buildArticleSeoMetadata instead of re-parsing the (now-deprecated) fm.keywords line. The aggregator no longer writes keywords: into article.md since 2026-05-24; the renderer mines entities directly from the brief markdown.
Input for computeArticleHeadMetadata.