docs: rotate changelog — archive 35 versions, trim README#716
Conversation
Ran scripts/maintenance/changelog_housekeeping.py. Both housekeeping triggers were hitting hard: - CHANGELOG.md: 466 lines (threshold: 150) - README "Previous Releases": 41 entries (threshold: 8) Result: - CHANGELOG.md 466 → 90 lines (keeps 8 recent versions, oldest now v10.36.4) - README "Previous Releases" trimmed to 7 entries - Archived 35 versions (v10.25.0 through v10.36.3) to docs/archive/CHANGELOG-HISTORIC.md - Archive-reference line updated to "Versions v10.36.3 and earlier" Validation passed: 424 versions before == 424 versions after (no content lost across CHANGELOG + archive combined). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Code Review
This pull request performs changelog housekeeping by archiving version entries from v10.25.0 through v10.36.3 into the historic changelog file and removing them from the main changelog and README. Review feedback identifies a few remaining hardcoded version strings in the README and historic changelog that need updating to maintain consistency with the new archival boundaries.
| - **v10.36.6** - security: bump cryptography to 46.0.7 (CVE-2026-39892) — buffer overflow fix in non-contiguous buffer handling (PR #690, 1,537 tests) | ||
| - **v10.36.5** - fix: Cloudflare Vectorize API v1 to v2 + test script fixes — fixed error 1010 "incorrect_api_version", content_hash arg, sys.path correction (PR #689, @mychaelgo, 1,537 tests) | ||
| - **v10.36.4** - fix(windows): hotfix for Get-McpApiKey returning first char instead of full API key — PowerShell array-enumeration trap fixed (PR #687, 1,537 tests) | ||
| - **v10.36.3** - fix(dashboard): restore version badge after v10.21.0 security hardening — Settings modal version row fixed, `manage_service.ps1 status` shows real Version/Backend (PR #685, 1,537 tests) |
| Older changelog entries for MCP Memory Service (v10.24.0 and earlier). | ||
|
|
||
| For current versions (v10.25.0+), see [CHANGELOG.md](../../CHANGELOG.md). | ||
| For current versions (v10.36.4+), see [CHANGELOG.md](../../CHANGELOG.md). |
Gemini review on #716 caught two hardcoded boundaries the archival script didn't update: - README.md:459 — "Older versions (v10.22.0 and earlier)" → "v10.36.3 and earlier" (the actual archive boundary after this rotation) - docs/archive/CHANGELOG-HISTORIC.md:3 — "v10.24.0 and earlier" → "v10.36.3 and earlier" Both now reflect the true oldest-in-HISTORIC version after the 35-entry archival. Script improvement (updating these footers automatically) is a separate follow-up. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Gemini medium findings fixed in 484a983:
These two boundary strings aren't in the formats /gemini review |
There was a problem hiding this comment.
Code Review
This pull request performs changelog housekeeping by archiving older version entries. Specifically, entries from v10.25.0 through v10.36.3 have been moved from the main CHANGELOG.md and README.md files into the historic archive at docs/archive/CHANGELOG-HISTORIC.md. I have no feedback to provide.
#717) PR #716 had to patch two version boundaries by hand because the housekeeping script's regex only matched the bolded-header patterns: - docs/archive/CHANGELOG-HISTORIC.md prose header "Older changelog entries for MCP Memory Service (vX.Y.Z and earlier)." - README.md "Full version history" footer's markdown-link text "[Older versions (vX.Y.Z and earlier)](docs/archive/CHANGELOG-HISTORIC.md)" Added two sibling helpers — update_archive_header_boundary() and update_readme_footer_boundary() — that target each format specifically, and wired them into run() at the points where the archive header and README are already being rewritten. Both target the newest-archived version, which is the correct boundary for a reader following the link. Tests: 7/7 in tests/maintenance/test_changelog_housekeeping.py cover: boundary rewriting for each format, idempotence, no-op on unrelated prose, regression check that the existing update_header_range() continues to match bolded headers. Closes #717 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
#717) (#718) * fix(scripts): rotate missed boundary footers in changelog housekeeping (#717) PR #716 had to patch two version boundaries by hand because the housekeeping script's regex only matched the bolded-header patterns: - docs/archive/CHANGELOG-HISTORIC.md prose header "Older changelog entries for MCP Memory Service (vX.Y.Z and earlier)." - README.md "Full version history" footer's markdown-link text "[Older versions (vX.Y.Z and earlier)](docs/archive/CHANGELOG-HISTORIC.md)" Added two sibling helpers — update_archive_header_boundary() and update_readme_footer_boundary() — that target each format specifically, and wired them into run() at the points where the archive header and README are already being rewritten. Both target the newest-archived version, which is the correct boundary for a reader following the link. Tests: 7/7 in tests/maintenance/test_changelog_housekeeping.py cover: boundary rewriting for each format, idempotence, no-op on unrelated prose, regression check that the existing update_header_range() continues to match bolded headers. Closes #717 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(scripts): make #717 boundary helpers idempotent when suffix missing Gemini review on PR #718 pointed out that the boundary regexes would fail if the existing text lacked a "(vX.Y.Z and earlier)" suffix — relevant because trim_readme_previous_releases() recreates a fallback footer without that suffix when the section would otherwise vanish. Made the version-range group optional in both regexes and moved the leading space into the replacement so the helpers now *insert* the boundary when it's missing instead of silently no-op'ing. Added two regression tests for the insert-when-missing path. 9/9 passing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(scripts): harden #717 regexes against pre-releases + double-version bug Gemini iter 2 on PR #718 caught two defensive-coding gaps: 1. Version group used `[\d.]+`, rejecting pre-release / build-metadata identifiers like 1.0.0-beta, 1.0.0-rc.1, 1.0.0+build.5. Broadened to `[\w.+-]+` so the helpers don't no-op when users follow the full SemVer spec. 2. The archive-header helper had no trailing anchor for the optional version group. If a pre-release version slipped past the narrow `[\d.]+` class, the prefix would still match while the boundary group didn't — producing a duplicate "(vX and earlier) (vY and earlier)." chain. Added the required trailing period as the anchor: the boundary is always followed by `.` in the archive header, so this pins the match to a complete boundary (or forces no-op). The README helper already has a strong anchor (the markdown-link URL part), so only the version class needed broadening there. Tests (12/12): added three regression cases — pre-release rewrite for each helper, and a "no double-version on unparseable boundary" check. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Summary
Ran `scripts/maintenance/changelog_housekeeping.py` — both housekeeping triggers were hitting hard:
Result
Validation
Script's built-in validation passed: 424 versions before == 424 after across CHANGELOG + archive combined. No content lost, only relocated.
Changes
Test plan
🤖 Generated with Claude Code