LearnNewsExamplesServices
Frontmatter
id14531
titleRelease analyzer help text hardcodes stale v12.1 boundary
stateClosed
labels
bugaibuild
assigneesneo-gpt
createdAtJul 3, 2026, 4:01 AM
updatedAtJul 3, 2026, 10:49 AM
githubUrlhttps://github.com/neomjs/neo/issues/14531
authorneo-gpt
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 3, 2026, 10:49 AM

Release analyzer help text hardcodes stale v12.1 boundary

neo-gpt
neo-gpt commented on Jul 3, 2026, 4:01 AM

Context

While supporting the v13.1 release-cut lane (#14475), I reran:

node buildScripts/release/analyzeClosedSinceRelease.mjs 2026-06-12 --format markdown

The data boundary was correct for v13.1 because the command passed an explicit cutoff. I verified the cutoff commit with:

git show -s --format=%H%n%ci%n%s 92eb323fb4

Result: 92eb323fb4ea3b44f77f9f757dedf24d9d140874, 2026-06-12 08:07:35 +0200, Release v13.0.0.

The script output/help still carries stale release-boundary wording from the prior release era: the JSDoc says it defaults to v12.1, and the markdown output labels the explicit cutoff as v12.1.0 release boundary. That made the #14475 freshness packet require an extra caveat to avoid contaminating release notes with a wrong boundary label.

The Problem

analyzeClosedSinceRelease.mjs is a release-cut evidence tool. Its counts are only useful if readers can trust both the data and the boundary prose. Today the data can be correct while the generated label is stale, so every v13.1 release-cut run needs a manual explanation: "the explicit cutoff is v13.0.0 even though the tool says v12.1.0." That is a small but recurring review/publish hazard.

The Architectural Reality

  • Owning file: buildScripts/release/analyzeClosedSinceRelease.mjs.
  • Consumer: release-note authors/reviewers and the human publish handoff for #14475.
  • The script currently accepts only a cutoff date, not a release-name argument, so it cannot truthfully infer a version label from 2026-06-12 without either a small mapping or neutral wording.
  • The safe shape is to avoid hardcoded stale version prose in generated output. A neutral "explicit cutoff" label is sufficient; an optional release-label argument can be a later enhancement if needed.

The Fix

Update analyzeClosedSinceRelease.mjs so generated markdown/help text does not hardcode the stale v12.1 boundary when callers provide an explicit cutoff. Prefer the smallest durable shape:

  • Keep the default cutoff documentation accurate for the script's current default, or remove the release-name claim from the default wording.
  • In generated markdown, describe the boundary as the explicit cutoff date unless the script has a verified release label.
  • Add a focused unit or snapshot-style check if this script already has local test coverage; otherwise a node --check plus a sample command output check is acceptable for this small build-script text fix.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
analyzeClosedSinceRelease.mjs markdown output #14475 release-cut usage + explicit cutoff argument Generated boundary text is neutral or verified, never stale-hardcoded to v12.1 for a v13.0 cutoff If no release label is known, output only the cutoff date Script help/JSDoc Sample command shows no stale release-name label
Script help/JSDoc Current CLI usage in the file Default and example prose do not imply v12.1 when the release lane is v13.1 Use neutral wording File JSDoc node buildScripts/release/analyzeClosedSinceRelease.mjs --help checked

Decision Record impact

none — build/release helper text correction, no ADR authority touched.

Acceptance Criteria

  • node buildScripts/release/analyzeClosedSinceRelease.mjs 2026-06-12 --format markdown no longer labels the boundary as v12.1.0.
  • --help / top-of-file usage prose no longer hardcodes stale v12.1 language in a way that misleads v13.1 release-cut work.
  • A focused verification command is documented in the PR body.
  • The #14475 release-cut freshness packet no longer needs a manual caveat for this tool wording.

Out of Scope

  • Running the v13.1 publish flow.
  • Changing release counts or archive semantics.
  • Building a full release-version inference system unless a minimal explicit-label argument is clearly cheaper than neutral wording.

Avoided Traps

  • Do not update the numbers to match a snapshot. The bug is the boundary label, not the data.
  • Do not infer version labels from dates unless the source of truth is explicit; a neutral cutoff label is better than a plausible wrong release name.

Related

Related: #14475, #14483, #14489, #14530.

Origin Session ID: 7186fa08-ba22-48eb-bc1e-84325fa26e40

Handoff Retrieval Hints: analyzeClosedSinceRelease v12.1 boundary label v13.0 cutoff, Release v13.0.0 92eb323fb4, #14475 freshness packet.

Live latest-open sweep: checked latest 20 open issues at 2026-07-03T02:00:48Z; no equivalent found. A2A in-flight sweep: checked latest 30 all-status messages at 2026-07-03T02:00Z; no overlapping claim found. Local exact sweep searched resources/content/issues and resources/content/discussions for analyzeClosedSinceRelease, v12.1.0, Release v13.0.0, release appendix, and cutoff; found related release-window context but no equivalent fix ticket. KB ticket sweep returned no relevant release-analyzer ticket.

tobiu referenced in commit 6e54e96 - "fix(release): neutralize analyzer cutoff label (#14531) (#14532)" on Jul 3, 2026, 10:49 AM
tobiu closed this issue on Jul 3, 2026, 10:49 AM