chore: release stoke 1.5.0 #58

Merged
andres merged 2 commits from build/56-release-1-5-0 into main 2026-09-02 20:18:58 +00:00

Refs #56

Prepares the 1.5.0 version and release notes from every changelog fragment present at merge base d6a21c9d9e1a4699d4b07cc76aecaac5ab31e847.

Worklog

  • Record the merge-base fragment set (23, 36, 43, 48, 50, 54)
  • Bump package.json and both package-lock version fields to 1.5.0
  • Add the dated 1.5.0 changelog section and consume every merge-base fragment
  • Resolve the hard-coded 1.5.0 missing-version test sentinel under the ruling on #56
  • Run the complete verification suite green
  • Post the complete-head round signal while draft, then mark ready with no intervening commit

Acceptance criteria

Pre-merge

  • package.json and both package-lock version fields are 1.5.0, and npm test passes
  • The remaining diff is the new 1.5.0 changelog section, deletion of every merge-base fragment, and only the ruled test/changelog-section.test.js sentinel move from 1.5.0 to 0.0.0; no behavior changes
  • git ls-tree --name-only HEAD changelog.d/ returns nothing
  • scripts/changelog-section.sh 1.5.0 CHANGELOG.md prints the complete section, excluding the two ruled fragment-less docs merges
  • ci / test is green on the PR head

Post-merge (triage/operator owned)

  • @andres tags the merge commit as v1.5.0 and records the release run
  • The tagged run is green and publishes the changelog notes plus stoke_1.5.0_all.deb
  • The Debian registry serves stoke 1.5.0, and a clean install reports stoke --version as 1.5.0

Verification

  • Baseline: npm test — 141 passed.
  • Current head e5ead6a0b3cdb73ef06fb2d93c712f452298cfba: npm test — 141 passed; extractor, version, empty-fragment, excluded-merge, exact-scope, and diff checks pass; Forgejo ci / test and labels / labels are green at this head.

Round log

Round at e5ead6a0

Round passed with no written reply.

Refs #56 Prepares the 1.5.0 version and release notes from every changelog fragment present at merge base `d6a21c9d9e1a4699d4b07cc76aecaac5ab31e847`. ## Worklog - [x] Record the merge-base fragment set (`23`, `36`, `43`, `48`, `50`, `54`) - [x] Bump `package.json` and both package-lock version fields to `1.5.0` - [x] Add the dated `1.5.0` changelog section and consume every merge-base fragment - [x] Resolve the hard-coded `1.5.0` missing-version test sentinel under the ruling on #56 - [x] Run the complete verification suite green - [x] Post the complete-head round signal while draft, then mark ready with no intervening commit ## Acceptance criteria ### Pre-merge - [x] `package.json` and both package-lock version fields are `1.5.0`, and `npm test` passes - [x] The remaining diff is the new `1.5.0` changelog section, deletion of every merge-base fragment, and only the ruled `test/changelog-section.test.js` sentinel move from `1.5.0` to `0.0.0`; no behavior changes - [x] `git ls-tree --name-only HEAD changelog.d/` returns nothing - [x] `scripts/changelog-section.sh 1.5.0 CHANGELOG.md` prints the complete section, excluding the two ruled fragment-less docs merges - [x] `ci / test` is green on the PR head ### Post-merge (triage/operator owned) - [ ] @andres tags the merge commit as `v1.5.0` and records the release run - [ ] The tagged run is green and publishes the changelog notes plus `stoke_1.5.0_all.deb` - [ ] The Debian registry serves `stoke 1.5.0`, and a clean install reports `stoke --version` as `1.5.0` ## Verification - Baseline: `npm test` — 141 passed. - Current head `e5ead6a0b3cdb73ef06fb2d93c712f452298cfba`: `npm test` — 141 passed; extractor, version, empty-fragment, excluded-merge, exact-scope, and diff checks pass; Forgejo `ci / test` and `labels / labels` are green at this head. ## Round log <!-- round:e5ead6a0b3cdb73ef06fb2d93c712f452298cfba --> **Round at e5ead6a0** _Round passed with no written reply._
codex-bot-andresmgsl added 1 commit 2026-09-02 19:55:28 +00:00
chore: prepare 1.5.0 release
Some checks failed
labels / labels (pull_request) Successful in 11s
ci / test (pull_request) Failing after 16s
57fc3a3ddf
forgejo-actions added the
scope:docs
scope:packaging
labels 2026-09-02 19:55:36 +00:00
codex-bot-andresmgsl changed title from chore: release stoke 1.5.0 to WIP: chore: release stoke 1.5.0 2026-09-02 19:55:37 +00:00
forgejo-actions added the
blocker:ci-red
state:building
labels 2026-09-02 19:55:45 +00:00
Author
Member

⟲ resuming from 57fc3a3ddf

⟲ resuming from 57fc3a3ddf1783590a214fb9eaf525117efb8301
codex-bot-andresmgsl added 1 commit 2026-09-02 20:03:21 +00:00
test: decouple missing changelog sentinel
All checks were successful
labels / labels (pull_request) Successful in 13s
ci / test (pull_request) Successful in 18s
e5ead6a0b3
forgejo-actions removed the
blocker:ci-red
label 2026-09-02 20:03:41 +00:00
Author
Member

📣 round answered at head e5ead6a0b3

📣 round answered at head e5ead6a0b3cdb73ef06fb2d93c712f452298cfba
codex-bot-andresmgsl changed title from WIP: chore: release stoke 1.5.0 to chore: release stoke 1.5.0 2026-09-02 20:06:37 +00:00
codex-bot-andresmgsl requested review from glm-bot-andresmgsl 2026-09-02 20:07:14 +00:00
codex-bot-andresmgsl requested review from claude-bot-andresmgsl 2026-09-02 20:07:14 +00:00
codex-bot-andresmgsl requested review from kimi-bot-andresmgsl 2026-09-02 20:07:15 +00:00
codex-bot-andresmgsl added the
state:bots-reviewing
label 2026-09-02 20:07:15 +00:00
forgejo-actions removed the
state:building
label 2026-09-02 20:07:34 +00:00

🔎 reviewing head e5ead6a0b3

  • package.json, lock version, lock packages[""].version all 1.5.0 — read all three
  • npm ci && npm test — 141/141 pass in a detached worktree at this head
  • npm run check:governance — 4 identities, 5 scope rows valid
  • git ls-tree --name-only HEAD changelog.d/ — empty
  • Merge-base fragment set is exactly 23 36 43 48 50 54; all six consumed verbatim, no extra entries, no hand-written entry for 081e05c/01b25ca
  • scripts/changelog-section.sh 1.5.0 CHANGELOG.md — exit 0, prints the whole section
  • Sentinel move is the only test/ change and is not vacuous: injecting a 0.0.0 section reds it; reverting it to 1.5.0 reds it at this head
  • ci / test and labels / labels green at this head
  • Body is Refs #56 with no closing keyword bound to #56

Verdict submitted.

🔎 reviewing head e5ead6a0b3cdb73ef06fb2d93c712f452298cfba - [x] `package.json`, lock `version`, lock `packages[""].version` all `1.5.0` — read all three - [x] `npm ci && npm test` — 141/141 pass in a detached worktree at this head - [x] `npm run check:governance` — 4 identities, 5 scope rows valid - [x] `git ls-tree --name-only HEAD changelog.d/` — empty - [x] Merge-base fragment set is exactly `23 36 43 48 50 54`; all six consumed verbatim, no extra entries, no hand-written entry for `081e05c`/`01b25ca` - [x] `scripts/changelog-section.sh 1.5.0 CHANGELOG.md` — exit 0, prints the whole section - [x] Sentinel move is the only `test/` change and is not vacuous: injecting a `0.0.0` section reds it; reverting it to `1.5.0` reds it at this head - [x] `ci / test` and `labels / labels` green at this head - [x] Body is `Refs #56` with no closing keyword bound to `#56` Verdict submitted.

🔎 reviewing head e5ead6a0b3

  • announced; no prior 🔎 marker existed (this is the first)
  • read issue #56 spec + 2026-09-02 ruling; fetched head into detached worktree trees/heavy-duty__stoke/review-58
  • merge base d6a21c9 confirmed; fragments at base: 23/36/43/48/50/54; changelog.d/ empty at head ✔
  • version fields: package.json + lockfile root + packages[""] all 1.5.0 ✔
  • diff is exactly CHANGELOG section + 6 fragment deletions + sentinel move; fragments consumed verbatim; ruled fragment-less merges absent ✔
  • scripts/changelog-section.sh 1.5.0 CHANGELOG.md → exit 0, complete section ✔
  • npm test in worktree: 141/141 after npm ci (first run failed only on missing node_modules) ✔
  • Forgejo status rollup on head: ci/test SUCCESS (run 958), labels SUCCESS (run 959) ✔
  • PR uses Refs #56; no closing keyword precedes #56 anywhere in body ✔
  • composing verdict
🔎 reviewing head e5ead6a0b3cdb73ef06fb2d93c712f452298cfba - announced; no prior 🔎 marker existed (this is the first) - read issue #56 spec + 2026-09-02 ruling; fetched head into detached worktree trees/heavy-duty__stoke/review-58 - merge base d6a21c9 confirmed; fragments at base: 23/36/43/48/50/54; changelog.d/ empty at head ✔ - version fields: package.json + lockfile root + packages[""] all 1.5.0 ✔ - diff is exactly CHANGELOG section + 6 fragment deletions + sentinel move; fragments consumed verbatim; ruled fragment-less merges absent ✔ - scripts/changelog-section.sh 1.5.0 CHANGELOG.md → exit 0, complete section ✔ - npm test in worktree: 141/141 after npm ci (first run failed only on missing node_modules) ✔ - Forgejo status rollup on head: ci/test SUCCESS (run 958), labels SUCCESS (run 959) ✔ - PR uses Refs #56; no closing keyword precedes #56 anywhere in body ✔ - composing verdict

🔎 reviewing head e5ead6a0b3

  • announce posted (comment 34269); no prior kimi verdict existed
  • verified all pre-merge criteria of #56 at this head: 3 version fields = 1.5.0; diff = changelog section + 6 fragment deletions + sentinel move only; changelog.d empty at HEAD; section verbatim-complete, excluded merges absent; extractor exit 0; missing-version failure case confirmed real (0.0.0 genuinely absent)
  • could not run npm test locally (no node on this box); relied on ci / test green at head (runs 958/959)
  • APPROVE submitted via submit-verdict.sh, verified landed; worktree removed
🔎 reviewing head e5ead6a0b3cdb73ef06fb2d93c712f452298cfba - announce posted (comment 34269); no prior kimi verdict existed - verified all pre-merge criteria of #56 at this head: 3 version fields = 1.5.0; diff = changelog section + 6 fragment deletions + sentinel move only; changelog.d empty at HEAD; section verbatim-complete, excluded merges absent; extractor exit 0; missing-version failure case confirmed real (0.0.0 genuinely absent) - could not run npm test locally (no node on this box); relied on ci / test green at head (runs 958/959) - APPROVE submitted via submit-verdict.sh, verified landed; worktree removed
claude-bot-andresmgsl approved these changes 2026-09-02 20:14:10 +00:00
claude-bot-andresmgsl left a comment
Member

Approve at e5ead6a0b3cdb73ef06fb2d93c712f452298cfba. Reviewed the whole PR in a detached worktree at this head, against #56's pre-merge criteria.

Acceptance criteria — all five pre-merge criteria met

Version surfaces. All three read 1.5.0: package.json, package-lock.json version, and packages[""].version. npm ci && npm test141 tests, 141 pass, 0 fail, so #43's parity guard confirms the three moved together rather than my reading them by eye. npm run check:governance4 identities resolved; 5 scope rows valid. That is the complete ci / test command from .forgejo/workflows/ci.yml:25, run locally.

Exact diff. git diff --name-only against merge base d6a21c9 is the new 1.5.0 section, the six fragment deletions, the two manifests, and test/changelog-section.test.js — nothing else. git diff --name-only <base>..HEAD -- test/ returns that one file, and the change inside it is exactly the two ruled lines (L38 extract, L42 regex). No behavior change anywhere in the diff.

Fragments consumed. git ls-tree --name-only HEAD changelog.d/ returns nothing. I re-read the merge-base set rather than trusting the issue: git ls-tree --name-only d6a21c9 changelog.d/ is exactly 23 36 43 48 50 54. I diffed each fragment's body against the section programmatically — all six appear verbatim, and the section contains no entry that is not a fragment, so the two deliberately-omitted merges (081e05c #46, 01b25ca #33) got no hand-written entry, as the spec requires.

The section extracts. bash scripts/changelog-section.sh 1.5.0 CHANGELOG.md exits 0 and prints the whole 14-line section. I also ran it the way the door does — VERSION=$(node -p "require('./package.json').version") per publish-release.sh:42 — same result, so the heading form ## 1.5.0 — 2026-09-02 matches the extractor's $2 == ver against the version the script actually reads.

CI. ci / test and labels / labels both success at this head (runs 958 and 959), read from the commit status API.

The sentinel move is sound and not vacuous

This was the ruled judgement call, so I tested it in both directions instead of reading it:

  • It was necessary. Reverting the sentinel to 1.5.0 at this head reds the suite — not ok 2 - missing version fails with a reason and no stdout. The coupling the ruling describes is real at this head, not just at d6a21c9.
  • It still tests something. Injecting a ## 0.0.0 section into CHANGELOG.md reds that same test. The assertion fails when the missing-version path stops holding, so the move relocated the fixture rather than defanging it.
  • 0.0.0 is absent from CHANGELOG.md, and the two lines moved together, so the stderr regex cannot pass vacuously against the wrong version.

I agree with the ruling's preference for 0.0.0 over 9.9.9 on the stated grounds — a project at 1.4.0 cannot release 0.0.0, so the coupling is removed rather than deferred.

Body shape

Refs #56, correctly — the criteria outlive the merge. I scanned the whole body for a closing keyword bound to #56 per the #200/#218 finding: the only hit is "Resolve the hard-coded 1.5.0 missing-version test sentinel under the ruling on #56", where Resolve is separated from #56 by a clause and so binds nothing. No auto-close risk.

Beyond the criteria, since this tag is the release door's first live proof

Not required pre-merge, but cheap and relevant to the post-merge criteria: bash scripts/build-deb.sh succeeds and produces stoke_1.5.0_all.deb; its control Version: is 1.5.0, the packaged package.json inside reads 1.5.0, and node src/cli.js --version prints 1.5.0. So every version surface the post-merge criteria will check is already consistent — what remains genuinely untestable pre-merge is the token and the network, not the version plumbing.

What I could not verify, and what I relied on instead

  • The three post-merge criteria (tag push, green release.yml run, registry serving stoke 1.5.0, clean-container install). Unverifiable before the merge by construction; #56 assigns them to @andres and triage. I take no position on them here.
  • RELEASE_TOKEN at the org level. GET /actions/secrets is 403 for me as a restricted user, exactly as triage recorded. Relied on @andres's report in #54 comment 34200. The step ordering in release.yml (registry publish before any release call) means a wrong answer still fails with nothing published, so this is not a merge risk.
  • lintian is not installed in this box, so build-deb.sh skipped its package-lint step (Note: lintian not installed; skipping package lint.). The .deb was built and inspected, but not linted. Not a pre-merge criterion, and CI is unaffected.

One non-blocking note for the operator, not a change request on this PR and not this diff's code: publish-release.sh sets the notes only on the release create path — if a v1.5.0 release object somehow already exists, the release upload branch attaches the .deb without ever applying the notes. For a fresh tag this cannot trigger, so it does not gate the merge; it is worth knowing when reading the run.

Nothing blocking. Stop at the merge and let @andres cut v1.5.0.

**Approve** at `e5ead6a0b3cdb73ef06fb2d93c712f452298cfba`. Reviewed the whole PR in a detached worktree at this head, against #56's pre-merge criteria. ## Acceptance criteria — all five pre-merge criteria met **Version surfaces.** All three read `1.5.0`: `package.json`, `package-lock.json` `version`, and `packages[""].version`. `npm ci && npm test` → **141 tests, 141 pass, 0 fail**, so #43's parity guard confirms the three moved together rather than my reading them by eye. `npm run check:governance` → `4 identities resolved; 5 scope rows valid`. That is the complete `ci / test` command from `.forgejo/workflows/ci.yml:25`, run locally. **Exact diff.** `git diff --name-only` against merge base `d6a21c9` is the new `1.5.0` section, the six fragment deletions, the two manifests, and `test/changelog-section.test.js` — nothing else. `git diff --name-only <base>..HEAD -- test/` returns that one file, and the change inside it is exactly the two ruled lines (L38 `extract`, L42 regex). No behavior change anywhere in the diff. **Fragments consumed.** `git ls-tree --name-only HEAD changelog.d/` returns nothing. I re-read the merge-base set rather than trusting the issue: `git ls-tree --name-only d6a21c9 changelog.d/` is exactly `23 36 43 48 50 54`. I diffed each fragment's body against the section programmatically — **all six appear verbatim**, and the section contains **no entry that is not a fragment**, so the two deliberately-omitted merges (`081e05c` #46, `01b25ca` #33) got no hand-written entry, as the spec requires. **The section extracts.** `bash scripts/changelog-section.sh 1.5.0 CHANGELOG.md` exits **0** and prints the whole 14-line section. I also ran it the way the door does — `VERSION=$(node -p "require('./package.json').version")` per `publish-release.sh:42` — same result, so the heading form `## 1.5.0 — 2026-09-02` matches the extractor's `$2 == ver` against the version the script actually reads. **CI.** `ci / test` and `labels / labels` both **success** at this head (runs 958 and 959), read from the commit status API. ## The sentinel move is sound and not vacuous This was the ruled judgement call, so I tested it in both directions instead of reading it: - **It was necessary.** Reverting the sentinel to `1.5.0` at this head reds the suite — `not ok 2 - missing version fails with a reason and no stdout`. The coupling the ruling describes is real at this head, not just at `d6a21c9`. - **It still tests something.** Injecting a `## 0.0.0` section into `CHANGELOG.md` reds that same test. The assertion fails when the missing-version path stops holding, so the move relocated the fixture rather than defanging it. - `0.0.0` is absent from `CHANGELOG.md`, and the two lines moved together, so the `stderr` regex cannot pass vacuously against the wrong version. I agree with the ruling's preference for `0.0.0` over `9.9.9` on the stated grounds — a project at `1.4.0` cannot release `0.0.0`, so the coupling is removed rather than deferred. ## Body shape `Refs #56`, correctly — the criteria outlive the merge. I scanned the whole body for a closing keyword bound to `#56` per the #200/#218 finding: the only hit is *"Resolve the hard-coded `1.5.0` missing-version test sentinel under the ruling on #56"*, where `Resolve` is separated from `#56` by a clause and so binds nothing. No auto-close risk. ## Beyond the criteria, since this tag is the release door's first live proof Not required pre-merge, but cheap and relevant to the post-merge criteria: `bash scripts/build-deb.sh` succeeds and produces **`stoke_1.5.0_all.deb`**; its control `Version:` is `1.5.0`, the packaged `package.json` inside reads `1.5.0`, and `node src/cli.js --version` prints `1.5.0`. So every version surface the post-merge criteria will check is already consistent — what remains genuinely untestable pre-merge is the token and the network, not the version plumbing. ## What I could not verify, and what I relied on instead - **The three post-merge criteria** (tag push, green `release.yml` run, registry serving `stoke 1.5.0`, clean-container install). Unverifiable before the merge by construction; #56 assigns them to @andres and triage. I take no position on them here. - **`RELEASE_TOKEN` at the org level.** `GET /actions/secrets` is 403 for me as a restricted user, exactly as triage recorded. Relied on @andres's report in #54 comment 34200. The step ordering in `release.yml` (registry publish before any release call) means a wrong answer still fails with nothing published, so this is not a merge risk. - **`lintian`** is not installed in this box, so `build-deb.sh` skipped its package-lint step (`Note: lintian not installed; skipping package lint.`). The `.deb` was built and inspected, but not linted. Not a pre-merge criterion, and CI is unaffected. One non-blocking note for the operator, not a change request on this PR and not this diff's code: `publish-release.sh` sets the notes only on the `release create` path — if a `v1.5.0` release object somehow already exists, the `release upload` branch attaches the `.deb` without ever applying the notes. For a fresh tag this cannot trigger, so it does not gate the merge; it is worth knowing when reading the run. Nothing blocking. Stop at the merge and let @andres cut `v1.5.0`.
glm-bot-andresmgsl approved these changes 2026-09-02 20:14:32 +00:00
glm-bot-andresmgsl left a comment
Member

Approve — release 1.5.0 head e5ead6a0b3cdb73ef06fb2d93c712f452298cfba meets every pre-merge criterion of #56, verified by running, not reading.

What I verified, against #56's pre-merge acceptance criteria:

  • Version triple: package.json, package-lock.json version, and packages[""].version all read 1.5.0; the #43 parity guard passes with them.
  • Exact diff: git diff --name-status d6a21c9..HEAD is exactly the new ## 1.5.0 — 2026-09-02 CHANGELOG section, deletion of all six merge-base fragments (23/36/43/48/50/54, re-read at the merge base myself, matching the issue's measured set), and the ruled test/changelog-section.test.js sentinel move — nothing else, no behavior changes. Every fragment is folded in verbatim (byte-compared against git show of each fragment), grouped Added/Changed/Fixed, placed between # Changelog and ## 1.4.0.
  • Ruling 2026-09-02 followed exactly: the sentinel moved from 1.5.0 to 0.0.0 in both the extract('0.0.0') call and the /no section for '0\.0\.0'/ assertion — together, and nothing else in that file or any other test file.
  • Fragments consumed: git ls-tree --name-only HEAD changelog.d/ returns nothing.
  • Extractor: bash scripts/changelog-section.sh 1.5.0 CHANGELOG.md exits 0 and prints the complete section (body from ### Added onward, per the vendored ceremony extractor's contract proven by the 1.4.0 test); the two ruled fragment-less merges (081e05c !47, 01b25ca !44) are absent, as the spec decides.
  • Tests: npm test141/141 pass in a detached throwaway worktree at this head (Node v22.12.0). The first run failed 66 tests solely because the fresh worktree had no node_modules; after a clean npm ci against this PR's untouched lockfile, all pass. No failure case was weakened: the moved missing-version test still asserts exit 1, empty stdout, and the reason.
  • CI on the head: Forgejo status rollup at e5ead6a shows ci / test (pull_request) SUCCESS (run 958) and labels / labels SUCCESS (run 959); earlier PENDING entries are superseded.
  • Refs shape: the body opens Refs #56 and no closing keyword precedes #56 anywhere in it (the only other mention is "the ruling on #56"), so the issue correctly stays open for its post-merge criteria — this PR is not expected to close it, and triage owns that close.

What I could not verify, and what I relied on instead:

  • The post-merge criteria (tag v1.5.0 by @andres, green tagged run publishing the section as release notes with stoke_1.5.0_all.deb, Debian registry serving 1.5.0) are by design unverifiable pre-merge; I relied on the issue's own scoping (Refs, triage/operator owned) and did not hold the PR for them.
  • The org-level RELEASE_TOKEN — same shape as triage's own note: not inspectable from here, and its proof is the tagged run, which is post-merge.
  • Forgejo's internal job logs — I relied on the commit status rollup (both checks SUCCESS at this head), not the workflow's stdout.

Non-blocking note: the CHANGELOG entries carry the fragments' trailing-period-after-parens style ((#23).); verbatim consumption was the requirement, so this stays as-is.

The diff is reviewable as a version-and-notes PR exactly as the issue's criterion demands. The tag push and the release run remain with @andres per the handoff.

Approve — release 1.5.0 head `e5ead6a0b3cdb73ef06fb2d93c712f452298cfba` meets every pre-merge criterion of #56, verified by running, not reading. What I verified, against #56's pre-merge acceptance criteria: - **Version triple**: `package.json`, `package-lock.json` `version`, and `packages[""].version` all read `1.5.0`; the #43 parity guard passes with them. - **Exact diff**: `git diff --name-status d6a21c9..HEAD` is exactly the new `## 1.5.0 — 2026-09-02` CHANGELOG section, deletion of all six merge-base fragments (23/36/43/48/50/54, re-read at the merge base myself, matching the issue's measured set), and the ruled `test/changelog-section.test.js` sentinel move — nothing else, no behavior changes. Every fragment is folded in verbatim (byte-compared against `git show` of each fragment), grouped Added/Changed/Fixed, placed between `# Changelog` and `## 1.4.0`. - **Ruling 2026-09-02 followed exactly**: the sentinel moved from `1.5.0` to `0.0.0` in both the `extract('0.0.0')` call and the `/no section for '0\.0\.0'/` assertion — together, and nothing else in that file or any other test file. - **Fragments consumed**: `git ls-tree --name-only HEAD changelog.d/` returns nothing. - **Extractor**: `bash scripts/changelog-section.sh 1.5.0 CHANGELOG.md` exits 0 and prints the complete section (body from `### Added` onward, per the vendored ceremony extractor's contract proven by the 1.4.0 test); the two ruled fragment-less merges (`081e05c` !47, `01b25ca` !44) are absent, as the spec decides. - **Tests**: `npm test` → **141/141 pass** in a detached throwaway worktree at this head (Node v22.12.0). The first run failed 66 tests solely because the fresh worktree had no `node_modules`; after a clean `npm ci` against this PR's untouched lockfile, all pass. No failure case was weakened: the moved missing-version test still asserts exit 1, empty stdout, and the reason. - **CI on the head**: Forgejo status rollup at `e5ead6a` shows `ci / test (pull_request)` SUCCESS (run 958) and `labels / labels` SUCCESS (run 959); earlier PENDING entries are superseded. - **Refs shape**: the body opens `Refs #56` and no closing keyword precedes `#56` anywhere in it (the only other mention is "the ruling on #56"), so the issue correctly stays open for its post-merge criteria — this PR is not expected to close it, and triage owns that close. What I could not verify, and what I relied on instead: - The **post-merge criteria** (tag `v1.5.0` by @andres, green tagged run publishing the section as release notes with `stoke_1.5.0_all.deb`, Debian registry serving 1.5.0) are by design unverifiable pre-merge; I relied on the issue's own scoping (Refs, triage/operator owned) and did not hold the PR for them. - The **org-level `RELEASE_TOKEN`** — same shape as triage's own note: not inspectable from here, and its proof is the tagged run, which is post-merge. - Forgejo's internal job logs — I relied on the commit status rollup (both checks SUCCESS at this head), not the workflow's stdout. Non-blocking note: the CHANGELOG entries carry the fragments' trailing-period-after-parens style (`(#23).`); verbatim consumption was the requirement, so this stays as-is. The diff is reviewable as a version-and-notes PR exactly as the issue's criterion demands. The tag push and the release run remain with @andres per the handoff.
kimi-bot-andresmgsl approved these changes 2026-09-02 20:14:32 +00:00
kimi-bot-andresmgsl left a comment
Member

Approve — all pre-merge acceptance criteria of #56 verified at head e5ead6a0b3cdb73ef06fb2d93c712f452298cfba.

What I verified, against the issue's criteria in order:

  1. Versions. package.json, package-lock.json version, and package-lock.json packages[""].version all read 1.5.0 (jq at the head). The #43 parity guard enforcing the three-way move is untouched by the diff and runs in CI.
  2. Diff scope. git diff --name-status d6a21c9..HEAD is exactly: new ## 1.5.0 section in CHANGELOG.md (+17), deletion of the six fragments present at merge base (23, 36, 43, 48, 50, 54 — re-read at the merge base, not taken from the issue), the three version fields, and the ruled sentinel move in test/changelog-section.test.js (4 lines: extract('1.5.0')extract('0.0.0') and the regex, both moved together, nothing else in that file). No behavior changes.
  3. changelog.d/ empty. git ls-tree --name-only HEAD changelog.d/ at the head returns nothing.
  4. Section content. All six fragments folded verbatim under ### Added / ### Changed / ### Fixed, heading ## 1.5.0 — 2026-09-02 in the extractor-matched form, below # Changelog and above ## 1.4.0. The two fragment-less merges (081e05c CONTRIBUTING.md, 01b25ca README) are correctly absent, per the issue's explicit decision. bash scripts/changelog-section.sh 1.5.0 CHANGELOG.md exits 0 and prints the complete section. The failure case is real, not vacuous: changelog-section.sh 9.9.9 exits 1 with empty stdout and the reason on stderr, and 0.0.0 genuinely does not appear in CHANGELOG.md — so the moved sentinel still exercises the missing-version path (I ran the script directly to confirm the exact assertion the test makes).
  5. ci / test green on the head. Combined commit status at e5ead6a0 is success: ci / test (run 958) and labels / labels (run 959).

Body shape: Refs #56 with no closing keyword anywhere near #56 — correct for the post-merge criteria, which are triage-owned and not reviewable before the merge.

What I could not verify: this box has no node, so I could not run npm test locally (the environment gap the crew report already flags for kimi boxes). I relied on ci / test at this exact head — which runs npm test — being green, plus direct bash-level verification of the one test whose behavior the sentinel change touches. The post-merge criteria (tag, registry, clean install) are out of scope for this review by design.

The double period in fragment-derived entries (e.g. . (#23).) is the fragments' own verbatim text, consumed as the spec requires — not a defect in this PR.

Approve — all pre-merge acceptance criteria of #56 verified at head `e5ead6a0b3cdb73ef06fb2d93c712f452298cfba`. What I verified, against the issue's criteria in order: 1. **Versions.** `package.json`, `package-lock.json` `version`, and `package-lock.json` `packages[""].version` all read `1.5.0` (jq at the head). The #43 parity guard enforcing the three-way move is untouched by the diff and runs in CI. 2. **Diff scope.** `git diff --name-status d6a21c9..HEAD` is exactly: new `## 1.5.0` section in `CHANGELOG.md` (+17), deletion of the six fragments present at merge base (`23`, `36`, `43`, `48`, `50`, `54` — re-read at the merge base, not taken from the issue), the three version fields, and the ruled sentinel move in `test/changelog-section.test.js` (4 lines: `extract('1.5.0')`→`extract('0.0.0')` and the regex, both moved together, nothing else in that file). No behavior changes. 3. **`changelog.d/` empty.** `git ls-tree --name-only HEAD changelog.d/` at the head returns nothing. 4. **Section content.** All six fragments folded verbatim under `### Added` / `### Changed` / `### Fixed`, heading `## 1.5.0 — 2026-09-02` in the extractor-matched form, below `# Changelog` and above `## 1.4.0`. The two fragment-less merges (`081e05c` CONTRIBUTING.md, `01b25ca` README) are correctly absent, per the issue's explicit decision. `bash scripts/changelog-section.sh 1.5.0 CHANGELOG.md` exits 0 and prints the complete section. The failure case is real, not vacuous: `changelog-section.sh 9.9.9` exits 1 with empty stdout and the reason on stderr, and `0.0.0` genuinely does not appear in `CHANGELOG.md` — so the moved sentinel still exercises the missing-version path (I ran the script directly to confirm the exact assertion the test makes). 5. **`ci / test` green on the head.** Combined commit status at `e5ead6a0` is `success`: `ci / test` (run 958) and `labels / labels` (run 959). Body shape: `Refs #56` with no closing keyword anywhere near `#56` — correct for the post-merge criteria, which are triage-owned and not reviewable before the merge. What I could not verify: this box has no `node`, so I could not run `npm test` locally (the environment gap the crew report already flags for kimi boxes). I relied on `ci / test` at this exact head — which runs `npm test` — being green, plus direct bash-level verification of the one test whose behavior the sentinel change touches. The post-merge criteria (tag, registry, clean install) are out of scope for this review by design. The double period in fragment-derived entries (e.g. `. (#23).`) is the fragments' own verbatim text, consumed as the spec requires — not a defect in this PR.
codex-bot-andresmgsl requested review from andres 2026-09-02 20:15:58 +00:00
codex-bot-andresmgsl added the
state:needs-human
label 2026-09-02 20:15:59 +00:00
forgejo-actions removed the
state:bots-reviewing
label 2026-09-02 20:16:16 +00:00
andres merged commit 088e7e2d66 into main 2026-09-02 20:18:58 +00:00
claude-bot-andresmgsl added the
release
label 2026-09-02 20:47:38 +00:00

🏷️ release applied by triage, after the merge — recording why, since the label is now the only thing on this PR that a machine did not put there.

Sweeps 971 and 972 both warned, at 20:16:24Z and 20:16:26Z, while this PR was open at state:needs-human:

::warning::labels: #58 is release-shaped (version 1.4.0 -> 1.5.0 at its head) but carries no release label — the merge door reads that label as declared intent and will refuse without it; if this is the ceremony PR, apply release (#130; the #128 incident)

Verified before acting, because this warning has a known false-positive shape. !41 drew the identical warning with the arrow reversed (1.4.0 -> 1.3.0) purely because it was branched before !40's release bump — the detector compares the head manifest against the base head without asking whether the diff touches that file, so any branch cut before a release merge manufactures a phantom. So the check is /pulls/58/files, every time, not the warning text: this PR's file list is CHANGELOG.md +17/-0, six changelog.d/*.md deletions, package-lock.json +2/-2, package.json +1/-1, test/changelog-section.test.js +2/-2. The manifest bump is in the diff — 1.4.01.5.0, confirmed at the merge commit 088e7e2d — so this is a true positive and the label is simply owed.

Why after the merge rather than before. release is declared intent: the engine flags its absence and never sets it. It also enumerates open PRs (issueflow-reconcile L1380 and the labels caller alike), so the moment @andres merged at 20:18:58Z nothing in the machinery could ever raise this again — the two warnings above were the last. Left alone, stoke's release history would read release on !40 (1.4.0) and nothing on this one. The two now match.

Nothing else on this PR was touched: scope:docs, scope:packaging and state:needs-human are the engine's own and stay as they were at the merge, which is the honest record of where this PR stopped.

Recorded on #56 as well, in its Notes, so whoever writes the next release issue applies the label when the PR opens instead of paying this again.

🏷️ `release` applied by triage, after the merge — recording why, since the label is now the only thing on this PR that a machine did not put there. Sweeps [971](https://forgejo.heavyduty.builders/heavy-duty/stoke/actions/runs/971) and [972](https://forgejo.heavyduty.builders/heavy-duty/stoke/actions/runs/972) both warned, at 20:16:24Z and 20:16:26Z, while this PR was open at `state:needs-human`: > `::warning::labels: #58 is release-shaped (version 1.4.0 -> 1.5.0 at its head) but carries no release label — the merge door reads that label as declared intent and will refuse without it; if this is the ceremony PR, apply release (#130; the #128 incident)` **Verified before acting, because this warning has a known false-positive shape.** !41 drew the identical warning with the arrow reversed (`1.4.0 -> 1.3.0`) purely because it was branched before !40's release bump — the detector compares the head manifest against the base head without asking whether the diff touches that file, so any branch cut before a release merge manufactures a phantom. So the check is `/pulls/58/files`, every time, not the warning text: this PR's file list is `CHANGELOG.md` +17/-0, six `changelog.d/*.md` deletions, `package-lock.json` +2/-2, **`package.json` +1/-1**, `test/changelog-section.test.js` +2/-2. The manifest bump is in the diff — `1.4.0` → `1.5.0`, confirmed at the merge commit `088e7e2d` — so this is a true positive and the label is simply owed. **Why after the merge rather than before.** `release` is declared intent: the engine flags its absence and never sets it. It also enumerates **open** PRs (`issueflow-reconcile` L1380 and the labels caller alike), so the moment @andres merged at 20:18:58Z nothing in the machinery could ever raise this again — the two warnings above were the last. Left alone, stoke's release history would read `release` on [!40](https://forgejo.heavyduty.builders/heavy-duty/stoke/pulls/40) (`1.4.0`) and nothing on this one. The two now match. Nothing else on this PR was touched: `scope:docs`, `scope:packaging` and `state:needs-human` are the engine's own and stay as they were at the merge, which is the honest record of where this PR stopped. Recorded on [#56](https://forgejo.heavyduty.builders/heavy-duty/stoke/issues/56) as well, in its Notes, so whoever writes the next release issue applies the label when the PR opens instead of paying this again.
Sign in to join this conversation.
No milestone
No project
No assignees
4 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: heavy-duty/stoke#58
No description provided.