Freshness
Freshness
Section titled “Freshness”Definition
Section titled “Definition”Closed enumeration of how current a content item is. State machine progresses fresh → aging → stale → expired driven by lifecycle_type and per-domain freshness decay configuration. Per WP-ONTO-R1 §6.2, the vocabulary itself is CORE/closed, but the THRESHOLDS that move an item between states are client-configurable per domain via governance_config.freshness_decay_*.
Synonyms / Acronyms
Section titled “Synonyms / Acronyms”None.
Baseline values
Section titled “Baseline values”| key | label | provenance |
|---|---|---|
| fresh | Fresh | core |
| aging | Aging | core |
| stale | Stale | core |
| expired | Expired | core |
Relationships
Section titled “Relationships”record_lifecycle.freshness—textDEFAULT'fresh'. Re-homed offcontent_items.freshnessat ID-131 M1a (20260628190000_id131_record_lifecycle_facet);content_itemsitself was DROPPED at ID-131 M6.record_lifecycle.previous_freshness— historical freshness column, same facet table. The pre-M1acontent_items_previous_freshness_checkvalue-set CHECK did not carry over —record_lifecyclehas no equivalent CHECK on eitherfreshnessorprevious_freshness(only the axis-nullability CHECK below); both columns are soft/unconstrained in the new home.record_lifecycle.expiry_date— used bydate_boundlifecycle_type(CV 06); same facet table.- Source-document-only axis (D7).
freshness/freshness_checked_at/previous_freshness/expiry_dateall belong torecord_lifecycle’s freshness/expiry/review-cadence axis, which isowner_kind='source_document'-ONLY (record_lifecycle_freshness_axis_chkforces all four NULL onowner_kind='q_a_pair'rows) — Q&A pairs carry no freshness clock at all (D7). - Bound to
lifecycle_type(CV 06): different lifecycle types decay at different rates. governance_config.freshness_decay_*— per-domain client-tunable thresholds.- Adjacent to
recalculate_all_freshnessRPC — pre-dates therecord_lifecyclefacet; its post-M1a target table is not re-verified by this subtask. - Layer 2 (administrative metadata): freshness is a derived governance signal.
Consumers
Section titled “Consumers”lib/freshness.ts—calculateFreshness()andbatchCalculateFreshness()(the canonical freshness compute path).lib/quality/quality-score.ts,lib/quality/quality-actions.ts— freshness scoring.lib/dashboard.ts,lib/dashboard-signals.ts,lib/notifications.ts,lib/attention.ts— surfaces freshness signals for governance.lib/mcp/tools/quality.ts,lib/mcp/tools/governance.ts— MCP filter and scoring inputs.- Governance review schedulers and “review overdue” UI surfaces.
- Filter UI (e.g. “show only fresh content”) via
components/browse/filter-panel.tsx. - Change Reports surface (per CLAUDE.md: user-facing label is “Change Reports”; internal code still uses “digest”).
- Vocabulary CORE; thresholds HYBRID per source §6.2 row.
- Closed CHECK enum.
- Freshness decay is not the same as
extraction_method“freshness” used in cocoindex contexts (per source §3.7) — orthogonal concept.