# Changelog All notable changes to `event4u/agent-config` are documented here. Format loosely follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versioning policy is documented in [CONTRIBUTING.md](CONTRIBUTING.md#versioning-policy). Entry-shape contract: [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts/CHANGELOG-conventions.md). > Entries before 1.3.3 were reconstructed from git history after the fact. > Early releases did not maintain release notes. > > History is split into **eras**. The current era keeps full entries > inline; prior eras collapse into a single pointer to an archive file > under [`docs/archive/`](docs/archive/). A drift test > (`tests/lib/changelog_eras.test.ts`) forces an era split before the > current era grows past 250 lines. > **Retro-curation disposition, 2026-09-01** — roadmap > `road-to-publication-integrity-hard-fail`, blocker `b-retro-curation-scope`, > option (c). The `### Release highlights` heads of 14.9.0 through 14.13.0 were > written by the release generator and published without the editorial pass they > ask for. Two things were repaired: the generator's own authoring instruction, > which was never release content, is deleted from this file, and the writer no > longer emits it. The generator-derived head lines below are **preserved as > published** and deliberately not paraphrased — rewriting a derived claim is > editorial judgement two prior councils reserved, and a paraphrase of the > generator's own reason would be truthfully documented uselessness. > [`docs/archive/`](docs/archive/) is left untouched as historical record. The > annotated tag messages and the published GitHub Release bodies for 14.9.0 > through 14.13.0 are **immutable** and cannot be repaired at all. ## [Unreleased] _Nothing staged._ Twenty entries that had accumulated here were drained to [`docs/archive/CHANGELOG-unreleased-drain-2026-10.md`](docs/archive/CHANGELOG-unreleased-drain-2026-10.md) on 2026-10-13; every one of them had already shipped, the oldest in 9.7.0. An entry belongs under a dated release section, not here — see [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts/CHANGELOG-conventions.md). # Era: pre-4.5.0 — archived > All entries before `4.5.0` live in > [`docs/archive/CHANGELOG-pre-4.5.0.md`](docs/archive/CHANGELOG-pre-4.5.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-5.4.0 — archived > All entries before `5.4.0` live in > [`docs/archive/CHANGELOG-pre-5.4.0.md`](docs/archive/CHANGELOG-pre-5.4.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-5.9.0 — archived > All entries before `5.9.0` live in > [`docs/archive/CHANGELOG-pre-5.9.0.md`](docs/archive/CHANGELOG-pre-5.9.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-6.0.0 — archived > All entries before `6.0.0` live in > [`docs/archive/CHANGELOG-pre-6.0.0.md`](docs/archive/CHANGELOG-pre-6.0.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-7.0.0 — archived > All entries before `7.0.0` live in > [`docs/archive/CHANGELOG-pre-7.0.0.md`](docs/archive/CHANGELOG-pre-7.0.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-8.0.0 — archived > All entries before `8.0.0` live in > [`docs/archive/CHANGELOG-pre-8.0.0.md`](docs/archive/CHANGELOG-pre-8.0.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-8.1.0 — archived > All entries before `8.1.0` live in > [`docs/archive/CHANGELOG-pre-8.1.0.md`](docs/archive/CHANGELOG-pre-8.1.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-8.9.0 — archived > All entries before `8.9.0` live in > [`docs/archive/CHANGELOG-pre-8.9.0.md`](docs/archive/CHANGELOG-pre-8.9.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-8.12.0 — archived > All entries before `8.12.0` live in > [`docs/archive/CHANGELOG-pre-8.12.0.md`](docs/archive/CHANGELOG-pre-8.12.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-9.2.0 — archived > All entries before `9.2.0` live in > [`docs/archive/CHANGELOG-pre-9.2.0.md`](docs/archive/CHANGELOG-pre-9.2.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-9.9.0 — archived > All entries before `9.9.0` live in > [`docs/archive/CHANGELOG-pre-9.9.0.md`](docs/archive/CHANGELOG-pre-9.9.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-9.10.0 — archived > All entries before `9.10.0` live in > [`docs/archive/CHANGELOG-pre-9.10.0.md`](docs/archive/CHANGELOG-pre-9.10.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-9.13.0 — archived > All entries before `9.13.0` live in > [`docs/archive/CHANGELOG-pre-9.13.0.md`](docs/archive/CHANGELOG-pre-9.13.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-9.15.0 — archived > All entries before `9.15.0` live in > [`docs/archive/CHANGELOG-pre-9.15.0.md`](docs/archive/CHANGELOG-pre-9.15.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-9.18.0 — archived > All entries before `9.18.0` live in > [`docs/archive/CHANGELOG-pre-9.18.0.md`](docs/archive/CHANGELOG-pre-9.18.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-9.23.0 — archived > All entries before `9.23.0` live in > [`docs/archive/CHANGELOG-pre-9.23.0.md`](docs/archive/CHANGELOG-pre-9.23.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-9.27.0 — archived > All entries before `9.27.0` live in > [`docs/archive/CHANGELOG-pre-9.27.0.md`](docs/archive/CHANGELOG-pre-9.27.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-9.31.0 — archived > All entries before `9.31.0` live in > [`docs/archive/CHANGELOG-pre-9.31.0.md`](docs/archive/CHANGELOG-pre-9.31.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-9.34.0 — archived > All entries before `9.34.0` live in > [`docs/archive/CHANGELOG-pre-9.34.0.md`](docs/archive/CHANGELOG-pre-9.34.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-9.36.0 — archived > All entries before `9.36.0` live in > [`docs/archive/CHANGELOG-pre-9.36.0.md`](docs/archive/CHANGELOG-pre-9.36.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-10.3.0 — archived > All entries before `10.3.0` live in > [`docs/archive/CHANGELOG-pre-10.3.0.md`](docs/archive/CHANGELOG-pre-10.3.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-12.0.0 — archived > All entries before `12.0.0` live in > [`docs/archive/CHANGELOG-pre-12.0.0.md`](docs/archive/CHANGELOG-pre-12.0.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.0.0 — archived > All entries before `14.0.0` live in > [`docs/archive/CHANGELOG-pre-14.0.0.md`](docs/archive/CHANGELOG-pre-14.0.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.3.0 — archived > All entries before `14.3.0` live in > [`docs/archive/CHANGELOG-pre-14.3.0.md`](docs/archive/CHANGELOG-pre-14.3.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.5.0 — archived > All entries before `14.5.0` live in > [`docs/archive/CHANGELOG-pre-14.5.0.md`](docs/archive/CHANGELOG-pre-14.5.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.8.0 — archived > All entries before `14.8.0` live in > [`docs/archive/CHANGELOG-pre-14.8.0.md`](docs/archive/CHANGELOG-pre-14.8.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.9.0 — archived > All entries before `14.9.0` live in > [`docs/archive/CHANGELOG-pre-14.9.0.md`](docs/archive/CHANGELOG-pre-14.9.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.12.0 — archived > All entries before `14.12.0` live in > [`docs/archive/CHANGELOG-pre-14.12.0.md`](docs/archive/CHANGELOG-pre-14.12.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.14.0 — archived > All entries before `14.14.0` live in > [`docs/archive/CHANGELOG-pre-14.14.0.md`](docs/archive/CHANGELOG-pre-14.14.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.17.0 — archived > All entries before `14.17.0` live in > [`docs/archive/CHANGELOG-pre-14.17.0.md`](docs/archive/CHANGELOG-pre-14.17.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.18.0 — archived > All entries before `14.18.0` live in > [`docs/archive/CHANGELOG-pre-14.18.0.md`](docs/archive/CHANGELOG-pre-14.18.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.19.0 — archived > All entries before `14.19.0` live in > [`docs/archive/CHANGELOG-pre-14.19.0.md`](docs/archive/CHANGELOG-pre-14.19.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.20.0 — archived > All entries before `14.20.0` live in > [`docs/archive/CHANGELOG-pre-14.20.0.md`](docs/archive/CHANGELOG-pre-14.20.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-14.23.0 — archived > All entries before `14.23.0` live in > [`docs/archive/CHANGELOG-pre-14.23.0.md`](docs/archive/CHANGELOG-pre-14.23.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-16.0.0 — archived > All entries before `16.0.0` live in > [`docs/archive/CHANGELOG-pre-16.0.0.md`](docs/archive/CHANGELOG-pre-16.0.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-16.1.0 — archived > All entries before `16.1.0` live in > [`docs/archive/CHANGELOG-pre-16.1.0.md`](docs/archive/CHANGELOG-pre-16.1.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-16.2.0 — archived > All entries before `16.2.0` live in > [`docs/archive/CHANGELOG-pre-16.2.0.md`](docs/archive/CHANGELOG-pre-16.2.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-16.3.0 — archived > All entries before `16.3.0` live in > [`docs/archive/CHANGELOG-pre-16.3.0.md`](docs/archive/CHANGELOG-pre-16.3.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: pre-16.5.0 — archived > All entries before `16.5.0` live in > [`docs/archive/CHANGELOG-pre-16.5.0.md`](docs/archive/CHANGELOG-pre-16.5.0.md). > The archive is read-only; git tags remain the canonical > source for what shipped. Splitting them out of the main file > keeps the active era under the 250-line drift cap enforced by > `tests/test_changelog_eras.py`. # Era: 16.5.x — current > Started at `16.5.0`. Full entries live inline below. > The drift test caps this era at 250 lines of entry body; growth past > that forces a new era split (`# Era: 16.6.x`, etc.) — see > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md). ## [16.5.0](https://github.com/event4u-app/agent-config/compare/16.4.0...16.5.0) (2026-10-12) ### Release highlights - **Behaviour changes:** give hand-authored SVG a witness, an owner, and five recorded runs (#2300) (bdeb65c). - **Default changes + migration:** _none_ - **Security and correctness:** close the two real findings of the third 16.5.0 review, plus road-to-svg-witness-provenance (#2309) (d1f7c3b); close the security findings from the 16.5.0 re-cut review (#2307) (9904258); close the five medium-security findings from the 16.5.0 release review (#2305) (5593838); close the sixth review round of #2302 (#2303) (c88865f); strip only generic glob classes from an inbox name (fda00b3); admit a date suffix only on the families that are dated (fd5be56); +3 more. - **Honest nulls:** _none_ - **Known limitations:** _none_ > **Governance mix:** governance-only 6 vs consumer-only 1 (taxonomy 1.1.0; range d411219277ce..d1f7c3b834bb). ### Features * **svg:** close all three SVG roadmaps — routing, review follow-ups and the live-session findings (#2302) ([5098697](https://github.com/event4u-app/agent-config/commit/50986972088029db18a90c6f7d198c5ab0e26da5)) * give hand-authored SVG a witness, an owner, and five recorded runs (#2300) ([bdeb65c](https://github.com/event4u-app/agent-config/commit/bdeb65c37533825c2a3061fb7a33ef5778454d11)) ### Bug Fixes * **svg:** close the two real findings of the third 16.5.0 review, plus road-to-svg-witness-provenance (#2309) ([d1f7c3b](https://github.com/event4u-app/agent-config/commit/d1f7c3b834bb43b8937dee44b7e38733d5eb70f2)) * **svg:** close the security findings from the 16.5.0 re-cut review (#2307) ([9904258](https://github.com/event4u-app/agent-config/commit/990425836285eded0a6cb4370f8ded95823dd6c8)) * **svg:** close the five medium-security findings from the 16.5.0 release review (#2305) ([5593838](https://github.com/event4u-app/agent-config/commit/5593838c01fab686e0856fba227ae4f37cd7b8f0)) * **svg-engine:** close the sixth review round of #2302 (#2303) ([c88865f](https://github.com/event4u-app/agent-config/commit/c88865fdc1aad9337b4f98a868483d571848d7ea)) * **hooks:** strip only generic glob classes from an inbox name ([fda00b3](https://github.com/event4u-app/agent-config/commit/fda00b35ef5a0d2b603b56511a986081a261dc11)) * **hooks:** admit a date suffix only on the families that are dated ([fd5be56](https://github.com/event4u-app/agent-config/commit/fd5be56f6f17ebe96b17579ffdd452cbef3dfc39)) * **hooks:** accept only wildcard-suffixed family heads and keep bracket payloads ([8446cc0](https://github.com/event4u-app/agent-config/commit/8446cc05e322c6d084df502319daff8c1bc79e63)) * **hooks:** let a glob over an opaque family prefix through block-speaking-inbox-dir ([22904a5](https://github.com/event4u-app/agent-config/commit/22904a51d58dd8d3bbed7a6db08b717b7336adb1)) * **lineage:** count a present non-road-to parent as present ([4b40ab6](https://github.com/event4u-app/agent-config/commit/4b40ab692f85bbc2b642f98603a9d601879cd5a1)) ### Documentation * **contracts:** point the hook-concern row at the manifest instead of a count ([3406ae5](https://github.com/event4u-app/agent-config/commit/3406ae53848f7cf2ca866c2d03d297ad549743d1)) ### Tests * **hooks:** table-drive the opaque-family glob cases over all five heads ([52c9e0e](https://github.com/event4u-app/agent-config/commit/52c9e0e40ebd736aadcf8f37831f994ba1fe0dc6)) ### Chores * **ratification:** record the council review of the inbox-name guard change ([a03c9e9](https://github.com/event4u-app/agent-config/commit/a03c9e95a6b7cb58065fd9e9c30b104ebcb4911b)) ### Other * add road-to-svg-from-a-live-session from the continued raster-to-SVG session (#2301) ([a17bd4a](https://github.com/event4u-app/agent-config/commit/a17bd4aa2bcca14cc787096be644647be6188f2e)) * road-to-svg-review-followups from two reviews of the SVG roadmaps (#2299) ([b015b74](https://github.com/event4u-app/agent-config/commit/b015b747f7c2eea4a8206aba846b82dcc6e84f40)) * add two ready SVG roadmaps from inbox-2026-10-l (#2298) ([fd02787](https://github.com/event4u-app/agent-config/commit/fd02787ef8e0e9eb21e9a0256e5f3ea9bca21492)) * give six added verify clauses an expectation that can fail ([9a5338a](https://github.com/event4u-app/agent-config/commit/9a5338aebd49923a894e803b7e21f0d5dbb5d7d3)) * add thirteen ready roadmaps from inbox-2026-10-g..k ([d8a9e43](https://github.com/event4u-app/agent-config/commit/d8a9e43a881bcf6ad9a8a96c83a4e4958f321098)) * record inbox-2026-10-g..k arrivals on held stubs and parked roadmaps ([243b6f3](https://github.com/event4u-app/agent-config/commit/243b6f30251da478e03a5f9aa3d60636a14ea0e1)) Tests: 27325 (+127 since 16.4.0) # Era: pre-4.0.0 — archived > All entries from `3.2.0` and `3.3.0` live in > [`docs/archive/CHANGELOG-pre-4.0.0.md`](docs/archive/CHANGELOG-pre-4.0.0.md). > The archive is read-only; git tags `3.2.0` and `3.3.0` remain the > canonical source for what shipped. Splitting them out of the main > file keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-3.2.0 — archived > All entries from `3.1.0` and `3.1.1` live in > [`docs/archive/CHANGELOG-pre-3.2.0.md`](docs/archive/CHANGELOG-pre-3.2.0.md). > The archive is read-only; git tags `3.1.0` and `3.1.1` remain the > canonical source for what shipped. Splitting them out of the main > file keeps the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-3.1.0 — archived > All entries from `3.0.0` live in > [`docs/archive/CHANGELOG-pre-3.1.0.md`](docs/archive/CHANGELOG-pre-3.1.0.md). > The archive is read-only; git tag `3.0.0` remains the canonical > source for what shipped. Splitting it out of the main file keeps > the active era under the 250-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-3.0.0 — archived > All entries from `2.26.0` and `2.25.0` live in > [`docs/archive/CHANGELOG-pre-3.0.0.md`](docs/archive/CHANGELOG-pre-3.0.0.md). > The archive is read-only; git tags `2.26.0` and prior remain the > canonical source for what shipped. Splitting these out of the main > file keeps the active era under the 200-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-2.25.0 — archived > All entries from `2.24.0` through `2.20.0` live in > [`docs/archive/CHANGELOG-pre-2.25.0.md`](docs/archive/CHANGELOG-pre-2.25.0.md). > The archive is read-only; git tags `2.24.0` and prior remain the > canonical source for what shipped. Splitting these out of the main > file keeps the active era under the 200-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-2.20.0 — archived > All entries from `2.19.0` through `2.17.0` live in > [`docs/archive/CHANGELOG-pre-2.20.0.md`](docs/archive/CHANGELOG-pre-2.20.0.md). > The archive is read-only; git tags `2.19.0` and prior remain the > canonical source for what shipped. Splitting these out of the main > file keeps the active era under the 200-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-2.17.0 — archived > All `2.16.0` entries live in > [`docs/archive/CHANGELOG-pre-2.17.0.md`](docs/archive/CHANGELOG-pre-2.17.0.md). > The archive is read-only; git tag `2.16.0` remains the canonical > source for what shipped. Splitting these out of the main file keeps > the active era under the 200-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-2.16.0 — archived > All `2.15.0` entries live in > [`docs/archive/CHANGELOG-pre-2.16.0.md`](docs/archive/CHANGELOG-pre-2.16.0.md). > The archive is read-only; git tag `2.15.0` remains the canonical > source for what shipped. Splitting these out of the main file keeps > the active era under the 200-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-2.15.0 — archived > All entries from `2.14.0` through `2.11.0` live in > [`docs/archive/CHANGELOG-pre-2.15.0.md`](docs/archive/CHANGELOG-pre-2.15.0.md). > The archive is read-only; git tags `2.14.0` and prior remain the > canonical source for what shipped. Splitting these out of the main > file keeps the active era under the 200-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-2.11.0 — archived > All entries from `2.10.0` through `2.7.0` live in > [`docs/archive/CHANGELOG-pre-2.11.0.md`](docs/archive/CHANGELOG-pre-2.11.0.md). > The archive is read-only; git tags `2.10.0` and prior remain the > canonical source for what shipped. Splitting these out of the main > file keeps the active era under the 200-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-2.7.0 — archived > All entries from `2.6.1` through `2.2.0` live in > [`docs/archive/CHANGELOG-pre-2.7.0.md`](docs/archive/CHANGELOG-pre-2.7.0.md). > The archive is read-only; git tags `2.6.1` and prior remain the > canonical source for what shipped. Splitting these out of the main > file keeps the active era under the 200-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`. # Era: pre-2.2.0 — archived > All entries from `2.1.0` and earlier live in > [`docs/archive/CHANGELOG-pre-2.2.0.md`](docs/archive/CHANGELOG-pre-2.2.0.md). > The archive is read-only; git tags `2.1.0` and prior remain the > canonical source for what shipped. Splitting these out of the main > file keeps the active era under the 200-line drift cap enforced by > `tests/lib/changelog_eras.test.ts`.