Context
The v13 release-note artifact already has the appendix generator path from predecessor #12699, but the evidence snapshot in resources/content/release-notes/v13.0.0.md is now stale. The current file still says the 2026-06-07 live counts were 1,228 merged PRs and 1,629 closed issues, while a live GitHub GraphQL count on 2026-06-08T02:46Z reports 1,237 merged PRs and 1,639 closed issues since the v12.1.0 boundary.
This is a follow-up, not a duplicate of #12699: #12699 created the appendix mechanism and documented the command; this ticket refreshes the release-note evidence that consumes that mechanism.
Pre-creation evidence on 2026-06-08T02:48:11Z:
- Live latest-open sweep: checked latest 20 open issues with number, title, author, labels, and URL. Found #12696 plus active KB/MX/grid/backlog items, but no open v13 appendix refresh or stale-count leaf.
- Targeted live sweeps: open
v13 release appendix returned no issues; closed v13 release appendix returned #12699 and #12698; open Full Changelog Strategy returned no issues.
- Exact local sweep for
v13.*appendix, appendix.*v13, release.*appendix, Full Changelog Strategy, release counts, and analyzeClosedSinceRelease found the current v13 release-note placeholder plus historical analyzer references, but no open follow-up.
- Semantic KB ticket sweep for
v13 release appendix refresh counts full changelog release notes generated appendix ticket found no v13 duplicate and surfaced only older release-note precedents.
- Project pre-flight: attach to Project 12, the v13 release board.
The Problem
The v13 release is moving faster than the release-note evidence. That is expected during the final push, but the current artifact mixes three states:
- A strong curated narrative body.
- A reproducible appendix generator from
#12699.
- Stale count evidence and a
Full Changelog Strategy placeholder that still reads like future work.
If this is left until the release cut, the final PR risks either stale public numbers or a late, hard-to-review changelog churn block.
The Architectural Reality
The release-note source is resources/content/release-notes/v13.0.0.md. The appendix generator is buildScripts/release/analyzeClosedSinceRelease.mjs, which scans recursive local mirrors under resources/content/issues/**/*.md and resources/content/pulls/**/*.md.
Current falsifying checks:
node buildScripts/release/analyzeClosedSinceRelease.mjs 2026-03-27 --format markdown --include-items --output /private/tmp/v13-release-appendix.md generated a 2,933-line local appendix snapshot.
- The generated local snapshot reports 1,228 merged PRs and 1,587 closed issues from the local mirror.
- Live GitHub GraphQL reports 1,237 merged PRs with query
repo:neomjs/neo is:pr is:merged merged:>=2026-03-27.
- Live GitHub GraphQL reports 1,639 closed issues with query
repo:neomjs/neo is:issue is:closed closed:>=2026-03-27.
The live/local split is real and should be stated directly; sync_all may be stale or intentionally avoided while the workflow sync performance fixes settle.
The Fix
Update resources/content/release-notes/v13.0.0.md so the appendix section becomes a release-ready evidence snapshot rather than a future strategy placeholder:
- Rename or reshape
Full Changelog Strategy into a current appendix/evidence section.
- Refresh live counts to the current GitHub GraphQL evidence.
- Preserve the local appendix count separately and explain the live/local freshness boundary.
- Keep exhaustive 2,933-line output out of the narrative body; include the rerunnable command and the summary tables/rollups that make the scale navigable.
- Leave final
publishedAt, isDraft, and the very last release-cut count refresh to the release cut checklist.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
| v13 release-note appendix section |
#12696 / #12699 / resources/content/release-notes/v13.0.0.md |
Present current evidence, not only a future strategy |
Keep command-only recipe if live counts cannot be refreshed |
Same release-note file |
GitHub GraphQL counts plus local appendix command output |
| live count evidence |
GitHub GraphQL Search |
State merged PR and closed issue counts with exact query boundary |
Mark live check unavailable rather than inventing counts |
Same release-note file |
issueCount responses for PR and issue searches |
| local appendix evidence |
buildScripts/release/analyzeClosedSinceRelease.mjs |
Preserve local mirror counts and grouped rollups with freshness caveat |
Re-run after sync if local mirror is intentionally refreshed |
Same release-note file |
Generated /private/tmp/v13-release-appendix.md snapshot |
| exhaustive history |
#12699 generator contract |
Keep the full PR/issue tables generated/reproducible, not hand-maintained in prose |
Link the command and avoid inlining all rows |
Same release-note file |
2,933-line generated appendix proof |
Decision Record impact
Aligned with ADR 0004. This work consumes the recursive resources/content/ mirror and must not reintroduce flat-path assumptions.
Acceptance Criteria
Out of Scope
- Changing the appendix generator itself; that was
#12699.
- Rewriting the v13 narrative arc or hero war stories.
- Finalizing Body/Grid release wording after the grid lanes converge.
- Publishing the release or running
buildScripts/release/publish.mjs.
- Authoring the future release-notes skill;
#10321 remains post-artifact.
Avoided Traps
- Rejected: creating a duplicate appendix-generation ticket after finding closed
#12699.
- Rejected: inlining the full generated appendix into the narrative body. The generated snapshot is 2,933 lines and would drown the story.
- Rejected: pretending local mirror counts are live counts. The difference is currently material.
- Rejected: flipping final release metadata before the actual release cut.
Related
- Parent epic: #12696
- Predecessor appendix mechanism:
#12699
- Release-note spine:
#12695
- War-story feed:
#12698
- Future release-notes skill:
#10321
Origin Session ID: e8f07ef9-ef7e-4815-8ff4-7abe13720621
Retrieval Hint: v13 release note appendix evidence refresh stale counts GraphQL issueCount local appendix snapshot analyzeClosedSinceRelease
Context
The v13 release-note artifact already has the appendix generator path from predecessor #12699, but the evidence snapshot in
resources/content/release-notes/v13.0.0.mdis now stale. The current file still says the 2026-06-07 live counts were 1,228 merged PRs and 1,629 closed issues, while a live GitHub GraphQL count on 2026-06-08T02:46Z reports 1,237 merged PRs and 1,639 closed issues since the v12.1.0 boundary.This is a follow-up, not a duplicate of
#12699:#12699created the appendix mechanism and documented the command; this ticket refreshes the release-note evidence that consumes that mechanism.Pre-creation evidence on 2026-06-08T02:48:11Z:
v13 release appendixreturned no issues; closedv13 release appendixreturned#12699and#12698; openFull Changelog Strategyreturned no issues.v13.*appendix,appendix.*v13,release.*appendix,Full Changelog Strategy,release counts, andanalyzeClosedSinceReleasefound the current v13 release-note placeholder plus historical analyzer references, but no open follow-up.v13 release appendix refresh counts full changelog release notes generated appendix ticketfound no v13 duplicate and surfaced only older release-note precedents.The Problem
The v13 release is moving faster than the release-note evidence. That is expected during the final push, but the current artifact mixes three states:
#12699.Full Changelog Strategyplaceholder that still reads like future work.If this is left until the release cut, the final PR risks either stale public numbers or a late, hard-to-review changelog churn block.
The Architectural Reality
The release-note source is
resources/content/release-notes/v13.0.0.md. The appendix generator isbuildScripts/release/analyzeClosedSinceRelease.mjs, which scans recursive local mirrors underresources/content/issues/**/*.mdandresources/content/pulls/**/*.md.Current falsifying checks:
node buildScripts/release/analyzeClosedSinceRelease.mjs 2026-03-27 --format markdown --include-items --output /private/tmp/v13-release-appendix.mdgenerated a 2,933-line local appendix snapshot.repo:neomjs/neo is:pr is:merged merged:>=2026-03-27.repo:neomjs/neo is:issue is:closed closed:>=2026-03-27.The live/local split is real and should be stated directly;
sync_allmay be stale or intentionally avoided while the workflow sync performance fixes settle.The Fix
Update
resources/content/release-notes/v13.0.0.mdso the appendix section becomes a release-ready evidence snapshot rather than a future strategy placeholder:Full Changelog Strategyinto a current appendix/evidence section.publishedAt,isDraft, and the very last release-cut count refresh to the release cut checklist.Contract Ledger Matrix
resources/content/release-notes/v13.0.0.mdissueCountresponses for PR and issue searchesbuildScripts/release/analyzeClosedSinceRelease.mjs/private/tmp/v13-release-appendix.mdsnapshot#12699generator contractDecision Record impact
Aligned with ADR 0004. This work consumes the recursive
resources/content/mirror and must not reintroduce flat-path assumptions.Acceptance Criteria
resources/content/release-notes/v13.0.0.mdno longer presents the appendix path only as a future strategy; it contains a current appendix/evidence snapshot section.publishedAt,isDraft, and final count refresh are not prematurely finalized.Out of Scope
#12699.buildScripts/release/publish.mjs.#10321remains post-artifact.Avoided Traps
#12699.Related
#12699#12695#12698#10321Origin Session ID: e8f07ef9-ef7e-4815-8ff4-7abe13720621
Retrieval Hint:
v13 release note appendix evidence refresh stale counts GraphQL issueCount local appendix snapshot analyzeClosedSinceRelease