# 03-Jan-2026 — release-notes: polish release-note automation and shared code [#111](https://github.com/nbarrett/ngx-ramblers/issues/111)

## [build 403](https://github.com/nbarrett/ngx-ramblers/actions/runs/20678226936) — [commit 9dae9ef](https://github.com/nbarrett/ngx-ramblers/commit/9dae9ef0fe9ac95a3b821e5d829a689ad1dca7bf)

_____

### **release-notes**: polish release-note automation and shared code, include id in update payload for backend compatibility and resolve CMS update error and CI/CD credential prompting ([#111](https://github.com/nbarrett/ngx-ramblers/issues/111))

- build core script features (issue grouping, CLI menus, dry-run/preview, CMS JWT integration) and keep release notes concise with linked issues, ISO/11-Nov-2025 formatting, and index dedupe
- add GitHub build-number preservation with automatic workflow lookups, canonical date-based paths, and legacy page cleanup
- support flexible --since-date/--until-date parsing via UIDateFormat and include the new --include-unassigned flag
- centralize numeric parsing in numbers.ts and reuse it across Angular + Node code (map controls, audits, grid refs, etc.), keeping structured branching and declarative loops per AGENTS.md
- resolve index duplicates via CMS-based state and upserts (ref: #111)
- Migrate from local processed-commits.json to CMS as source of truth for state tracking and duplicate detection
- Remove loadStateFile, saveStateFile, and all processedCommits filtering logic
- Add filterExistingReleaseNotes: queries CMS for each release note path, skips existing pages, shows new vs existing count
- Change all command modes (--all, --latest, --since, --since-date) to regenerate/upsert ALL release notes in the range (not just new ones)
- Leverage createOrUpdatePageContent's upsert behavior + automatic index updates to deduplicate entries
- Remove early return when all pages already exist
- Update logging to reflect create/update behavior, show "will update all" when existing pages found, and display new/existing counts
- Refactor commandLineMode to use explicit nested if/else chains instead of scattered early returns (follows AGENTS.md structured branching)
- Refactor cms-client.ts from class-based to functional exports
- Move CMSAuth interface to models.ts
- Rename getPageContent → pageContent, add deletePageContent function
- Update generate-release-notes.ts and delete-pages.ts to use new functional CMS API
- Fix dry run mode to skip CMS filtering when auth is unavailable
- Update README to document CMS-based approach

The backend findId logic prioritizes body.id over params.id - when body.id is undefined, it incorrectly uses the entire body as MongoDB criteria

- Remove id from request payload in updatePageContent to fix "Document not found" MongoDB error
- Add non-interactive environment detection to prevent credential prompting in GitHub Actions