{"id":"69d2a8b165c39b14b2ee32d0","title":"2026 04 05","path":"how-to/committee/release-notes/2026-04-05","contentMarkdown":"# 05-Apr-2026 — preserve camera markers and never silently drop new notes [#219](https://github.com/nbarrett/ngx-ramblers/issues/219)\n\n## [build 577](https://github.com/nbarrett/ngx-ramblers/actions/runs/24007442514) — [commit 599a5c4](https://github.com/nbarrett/ngx-ramblers/commit/599a5c4c3f6b5720daa55f2da4a1e9e93bdbe6fc)\n\n_____\n\n### **release-notes**: preserve camera markers and never silently drop new notes ([#219](https://github.com/nbarrett/ngx-ramblers/issues/219), [#576](https://github.com/nbarrett/ngx-ramblers/issues/576), [#213](https://github.com/nbarrett/ngx-ramblers/issues/213))\n\nTwo independent bugs in the automated release-notes workflow, fixed together.\n1. Camera 📸 markers stripped from the index on every rewrite.\nThe entry line regex in content-generator.ts did not allow any trailing\ncontent after the markdown link's closing paren, so index entries with a\ntrailing 📸 marker (used to flag release notes with embedded images)\nfailed parseIndexLine, returned null, and were silently dropped from the\nre-serialised list on every build.\n- Extend entryLineRegex to capture an optional trailing \" 📸\"\n- Add hasCamera to IndexEntry; parseIndexLine records it and\nformatIndexLine re-emits it\n- updateIndexPageContent preserves the existing hasCamera when\nre-adding an entry at the same key\n- New regression tests in content-generator.spec.ts\n2. New release notes silently dropped when the target page already exists.\nWhen a page already existed at the resolved path, generateReleaseNote\nwould skip creation entirely (to preserve manual edits like embedded\nimages) and do nothing else — the new commits had no release note\nanywhere, and the index was rewritten with an entry still pointing at\nthe old, pre-edit page. Build #576 for commit 4b7e274f hit exactly\nthis: three new #213 commits left undocumented.\n- When a collision is detected, write the new note at a distinct\nbuild-specific path suffix (-build-<buildNumber>, or -commit-<short>\nwhen no build number is available)\n- Collision-proof the suffix with a recursive counter fallback\n- Always create — never silently skip\n- Skip removeLegacyReleasePages when we wrote to a suffixed path","contentHtml":"<h1>05-Apr-2026 — preserve camera markers and never silently drop new notes <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/219\">#219</a></h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/24007442514\">build 577</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/599a5c4c3f6b5720daa55f2da4a1e9e93bdbe6fc\">commit 599a5c4</a></h2>\n<hr>\n<h3><strong>release-notes</strong>: preserve camera markers and never silently drop new notes (<a href=\"https://github.com/nbarrett/ngx-ramblers/issues/219\">#219</a>, <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/576\">#576</a>, <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/213\">#213</a>)</h3>\n<p>Two independent bugs in the automated release-notes workflow, fixed together.</p>\n<ol>\n<li>Camera 📸 markers stripped from the index on every rewrite.\nThe entry line regex in content-generator.ts did not allow any trailing\ncontent after the markdown link&#39;s closing paren, so index entries with a\ntrailing 📸 marker (used to flag release notes with embedded images)\nfailed parseIndexLine, returned null, and were silently dropped from the\nre-serialised list on every build.</li>\n</ol>\n<ul>\n<li>Extend entryLineRegex to capture an optional trailing &quot; 📸&quot;</li>\n<li>Add hasCamera to IndexEntry; parseIndexLine records it and\nformatIndexLine re-emits it</li>\n<li>updateIndexPageContent preserves the existing hasCamera when\nre-adding an entry at the same key</li>\n<li>New regression tests in content-generator.spec.ts</li>\n</ul>\n<ol start=\"2\">\n<li>New release notes silently dropped when the target page already exists.\nWhen a page already existed at the resolved path, generateReleaseNote\nwould skip creation entirely (to preserve manual edits like embedded\nimages) and do nothing else — the new commits had no release note\nanywhere, and the index was rewritten with an entry still pointing at\nthe old, pre-edit page. Build #576 for commit 4b7e274f hit exactly\nthis: three new #213 commits left undocumented.</li>\n</ol>\n<ul>\n<li>When a collision is detected, write the new note at a distinct\nbuild-specific path suffix (-build-<buildNumber>, or -commit-<short>\nwhen no build number is available)</li>\n<li>Collision-proof the suffix with a recursive counter fallback</li>\n<li>Always create — never silently skip</li>\n<li>Skip removeLegacyReleasePages when we wrote to a suffixed path</li>\n</ul>\n"}