diff --git a/CHANGELOG.md b/CHANGELOG.md
index ab9c11b..9d0af69 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,24 +4,7 @@ All notable changes to the `opengeometry` package are in this file. The format f
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the package follows
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## [Unreleased]
-
-### Added
-
-- Solid primitives `OG_PRIMITIVE_SLOT_PRISM`, `OG_PRIMITIVE_ROUNDED_BOX` and
- `OG_PRIMITIVE_PIPE_SEGMENT`, with their `OG_PRIMITIVE_PARAMS_*` helpers and the
- `SlotPrismParams`, `RoundedBoxParams` and `PipeSegmentParams` types.
-- `OG_PRIMITIVE_POLYSOLID`: a solid wall of constant width and height along a path of straight
- legs, with `justify` `'centre'`, `'left'` or `'right'`, mitred corners and an open or closed
- path. `OG_PRIMITIVE_PARAMS_POLYSOLID` and the type `PolysolidParams` give it a
- type.
-- Wire primitives `OG_PRIMITIVE_REGULAR_POLYGON`, `OG_PRIMITIVE_SLOT` and
- `OG_PRIMITIVE_ROUNDED_RECTANGLE`, with their `OG_PRIMITIVE_PARAMS_*` helpers and the
- `RegularPolygonParams`, `SlotParams` and `RoundedRectangleParams` types.
-- `OG_PRIMITIVE_POLYSOLID` paths take arc segments that join their neighbours tangentially. A
- joint where an arc meets a segment at an angle throws `InvalidParameter` that names the joint.
-
-## [3.0.0] - 2026-11-09
+## [3.0.0] - 2026-11-10
3.0 is a new API. Code written for 2.0 does not run without changes. Version 2.5 was not
published. Follow [MIGRATION.md](./MIGRATION.md): it gives every change with code before and after.
@@ -83,6 +66,17 @@ published. Follow [MIGRATION.md](./MIGRATION.md): it gives every change with cod
report.
- `OpenGeometry.insetCurvedRegion2D` and `OpenGeometry.offsetCurvedRingVariable` inset a
line-and-arc region exactly, with one distance, or one distance per edge.
+- Solid primitives `OG_PRIMITIVE_SLOT_PRISM`, `OG_PRIMITIVE_ROUNDED_BOX` and
+ `OG_PRIMITIVE_PIPE_SEGMENT`, with their `OG_PRIMITIVE_PARAMS_*` helpers and the
+ `SlotPrismParams`, `RoundedBoxParams` and `PipeSegmentParams` types.
+- `OG_PRIMITIVE_POLYSOLID`: a solid wall of constant width and height along a path of straight
+ legs and tangent arcs, with `justify` `'centre'`, `'left'` or `'right'`, mitred corners and an
+ open or closed path. A joint where an arc meets a segment at an angle throws `InvalidParameter`
+ that names the joint. `OG_PRIMITIVE_PARAMS_POLYSOLID` and the type `PolysolidParams` give it a
+ type.
+- Wire primitives `OG_PRIMITIVE_REGULAR_POLYGON`, `OG_PRIMITIVE_SLOT` and
+ `OG_PRIMITIVE_ROUNDED_RECTANGLE`, with their `OG_PRIMITIVE_PARAMS_*` helpers and the
+ `RegularPolygonParams`, `SlotParams` and `RoundedRectangleParams` types.
### Removed
diff --git a/docs/opengeometry/changelog.mdx b/docs/opengeometry/changelog.mdx
index 6ec4a03..d12141e 100644
--- a/docs/opengeometry/changelog.mdx
+++ b/docs/opengeometry/changelog.mdx
@@ -5,18 +5,7 @@ icon: clock-rotate-left
rss: true
---
-
-
-### Added
-
-- Solid primitives: slot prism, rounded box and pipe segment. See [Primitives](/opengeometry/guides/primitives).
-- **Polysolid.** `OG_PRIMITIVE_POLYSOLID` makes a solid wall of constant width and height along a path of straight legs, justified `'centre'`, `'left'` or `'right'`, with mitred corners. See [Primitives](/opengeometry/guides/primitives).
-- Wire primitives: regular polygon, slot and rounded rectangle. See [Primitives](/opengeometry/guides/primitives).
-- **Polysolid arcs.** A polysolid path takes arc segments that join their neighbours tangentially. A joint where an arc meets a segment at an angle throws `InvalidParameter` that names the joint. See [Primitives](/opengeometry/guides/primitives).
-
-
-
-
+
3.0 is a new API. Code written for 2.0 does not run without changes. Follow [Migrate from 2.0](/opengeometry/migrate-from-2-0).
@@ -44,6 +33,9 @@ rss: true
- [Display for Three.js](/opengeometry/concepts/display), [picking](/opengeometry/guides/picking) and [host-drawn layers](/opengeometry/guides/use-your-threejs-scene).
- [STEP export](/opengeometry/guides/export-step) and the [IFC exchange body](/opengeometry/guides/ifc-exchange-body).
- Exact curved insets: `OpenGeometry.insetCurvedRegion2D` and `OpenGeometry.offsetCurvedRingVariable`. See [Regions and offsets](/opengeometry/guides/regions-and-offsets).
+- Solid primitives: slot prism, rounded box and pipe segment. See [Primitives](/opengeometry/guides/primitives).
+- **Polysolid.** `OG_PRIMITIVE_POLYSOLID` makes a solid wall of constant width and height along a path of straight legs and tangent arcs, justified `'centre'`, `'left'` or `'right'`, with mitred corners. A joint where an arc meets a segment at an angle throws `InvalidParameter` that names the joint. See [Primitives](/opengeometry/guides/primitives).
+- Wire primitives: regular polygon, slot and rounded rectangle. See [Primitives](/opengeometry/guides/primitives).
### Fixed