Releases
A changelog of versioned releases — each with a version, date, status, and a list of changes typed by kind.
A Release is one versioned changelog entry — a version, a date, an optional status, and a list of
changes each typed by kind (added · changed · fixed · removed · deprecated · security). Wrap a
stack of them in Releases (alias Changelog) for a full changelog. Humans read the entry; the
agent gets { kind:"release", version, date, changes } so it can answer "what changed in 2.0?" or
"every security fix since June" without parsing prose.
MCP launch
- AddedFirst-class MCP over the structured index.
- ChangedTimeline dates now keep precision.
- FixedComparison cells stay typed.Comparison
- RemovedLegacy HTML scraper.
Knowledge structures
- AddedBoard, Decision, Comparison, Roster, Checklist.
- DeprecatedThe old single-representation cards.
When to use it
Product changelogs, release notes, version histories. Because each change keeps its type, an agent
can filter the corpus by change kind across every release — never re-reading rendered bullet lists.
Props
Releases (alias Changelog) — a presentational stack.
| Prop | Type | Default | Description |
|---|---|---|---|
children | ReactNode | — | One or more Releases |
label | string | "Changelog" | Accessible name for the changelog |
Release — the dual-representation unit.
| Prop | Type | Default | Description |
|---|---|---|---|
version | string | — | e.g. 2.0.0 |
date | string | — | Precision is inferred (see Timeline) |
status | Status | — | Optional lifecycle status |
title | string | — | Optional headline |
summary | ReactNode | — | Optional intro line |
changes | ReleaseChangeInput[] | — | The changes in this release |
ReleaseChangeInput
| Field | Type | Description |
|---|---|---|
type | added · changed · fixed · removed · deprecated · security | The change kind — kept in the face |
text | string | What changed |
refs | { rel?, target, label? }[] | Typed links |
What the agent sees
Each Release serializes on its own — the date is parsed to { iso, precision }, the status is the
shared enum, and every change keeps its type:
{
"kind": "release",
"id": "2-0-0",
"title": "MCP launch",
"status": "done",
"version": "2.0.0",
"date": { "iso": "2026-06-15", "precision": "day" },
"changes": [
{ "type": "added", "text": "First-class MCP over the structured index." },
{ "type": "changed", "text": "Timeline dates now keep precision." },
{
"type": "fixed",
"text": "Comparison cells stay typed.",
"refs": [
{
"rel": "related",
"target": "/docs/components/comparison",
"label": "Comparison",
"internal": true
}
]
},
{ "type": "removed", "text": "Legacy HTML scraper." }
]
}Why type the changes
A typed type per change turns "every security fix since June" into a filter over the corpus —
the agent never re-reads a rendered "Security" heading to guess what it groups.