fix(release): commit de versiebump vóór de poort zodat een afgebroken run main schoon laat #1447

Merged
brenno merged 1 commit from claude/laughing-vaughan-f47cec into main 2026-08-10 09:58:14 +00:00
Owner

Probleem

scripts/release_auto.sh legde de fase-1-versiebump (pubspec.yaml, kOciDeckVersion, de ## [X.Y.Z]-CHANGELOG-sectie en de geregenereerde sbom/) pas in fase 2 vast. Brak fase 1 daarvóór af, dan liep de opruimroute mis:

  • Een kale-command-fout (bv. make build-release, make notarize-macos, codesign) valt via set -e in de ERR-trap → on_errcleanup_branch. Die deed git checkout - (terug naar de vorige branch, meestal main) en git branch -D. git checkout - draagt niet-gecommitte edits mee naar main → dirty tree. De volgende verse run strandde dan op de versie-consistentiegate ("pubspec staat op X maar origin/main op Y — waarschijnlijk sta je nog op een oude release-branch"), wat een verse retry blokkeerde — precies wat de fail-safe belooft op te lossen. Dit gebeurde na de afgebroken v0.4.2-run (pubspec bleef op 0.4.2+16, CHANGELOG/export_metadata/sbom gewijzigd op main).
  • De make check-release-faalroute (if ! make check-release; then die …) ruimde in het geheel niet op: die() doet exit 1, en exit slaat de ERR-trap (en dus cleanup_branch) over. De melding "release-branch wordt opgeruimd" was daar een loze belofte.

Fix (optie 1 — de schone: de oorzaak, niet het symptoom)

De versiebump wordt nu als één commit op de release-branch vastgelegd vóór make check-release, niet pas in fase 2. Gevolg:

  • Een afgebroken fase 1 verwijdert de wijziging volledig met git branch -D (in cleanup_branch); git checkout - draagt een schone boom naar main. main blijft schoon en een verse retry werkt meteen.
  • make check-release (en de build) lezen de bestanden ongeacht commit-status, dus vervroegen van de commit is veilig.
  • De poort draait nu als kale aanroep (make check-release) i.p.v. if ! … then die, zodat óók een gefaalde poort via de ERR-trap opruimt. on_err meldt zelf stap + regelnummer, dus er gaat geen context verloren.

Geen blanket git reset --hard — deze checkout wordt gedeeld door parallelle sessies; de opruiming blijft gericht (branch weg).

Empirisch bewijs

Wegwerp-git-harness die de exacte cleanup_branch-commando's naspeelt:

na abort
oud (bump ongecommit) main dirty: pubspec 0.4.2+16, 4 bestanden gewijzigd
nieuw (bump gecommit) main schoon (0.4.1+15), release-branch weg

Ook empirisch bevestigd (bash 5.2): exit 1 triggert de ERR-trap niet; een kale-command-fout wel — de reden waarom de die-route nooit opruimde.

Statische invarianten (test/release_auto_version_test.dart)

Drie nieuwe tests (lezen het script, draaien geen bash → ook groen op de Windows-mirror-CI):

  1. de versiebump wordt gecommit vóór make check-release (precies één staging van de vier paden);
  2. make check-release staat niet in een if ! … die-bypass (valt in de ERR-opruiming);
  3. de pre-tag abort-route roept cleanup_branch aan, die git branch -D doet en nooit git reset --hard.

Verificatie

  • make checkgroen (CHECK_EXIT=0; volledige suite + poorten, inclusief de 3 nieuwe tests: 22/22).
  • shellcheck scripts/release_auto.sh → schoon; bash -n → schoon.
  • make check-secrets → geen leaks (gitleaks dir+git, trufflehog filesystem+git).

🤖 Generated with Claude Code

## Probleem `scripts/release_auto.sh` legde de fase-1-versiebump (pubspec.yaml, `kOciDeckVersion`, de `## [X.Y.Z]`-CHANGELOG-sectie en de geregenereerde `sbom/`) pas **in fase 2** vast. Brak fase 1 daarvóór af, dan liep de opruimroute mis: - Een **kale-command-fout** (bv. `make build-release`, `make notarize-macos`, `codesign`) valt via `set -e` in de ERR-trap → `on_err` → `cleanup_branch`. Die deed `git checkout -` (terug naar de vorige branch, meestal `main`) en `git branch -D`. `git checkout -` **draagt niet-gecommitte edits mee** naar `main` → dirty tree. De volgende verse run strandde dan op de versie-consistentiegate ("pubspec staat op X maar origin/main op Y — waarschijnlijk sta je nog op een oude release-branch"), wat een verse retry blokkeerde — precies wat de fail-safe belooft op te lossen. Dit gebeurde na de afgebroken **v0.4.2**-run (pubspec bleef op `0.4.2+16`, CHANGELOG/export_metadata/sbom gewijzigd op `main`). - De `make check-release`-faalroute (`if ! make check-release; then die …`) ruimde in het geheel **niet** op: `die()` doet `exit 1`, en `exit` slaat de ERR-trap (en dus `cleanup_branch`) over. De melding "release-branch wordt opgeruimd" was daar een loze belofte. ## Fix (optie 1 — de schone: de oorzaak, niet het symptoom) De versiebump wordt nu **als één commit op de release-branch vastgelegd vóór** `make check-release`, niet pas in fase 2. Gevolg: - Een afgebroken fase 1 verwijdert de wijziging **volledig** met `git branch -D` (in `cleanup_branch`); `git checkout -` draagt een **schone** boom naar `main`. `main` blijft schoon en een verse retry werkt meteen. - `make check-release` (en de build) lezen de bestanden ongeacht commit-status, dus vervroegen van de commit is veilig. - De poort draait nu als **kale aanroep** (`make check-release`) i.p.v. `if ! … then die`, zodat óók een gefaalde poort via de ERR-trap opruimt. `on_err` meldt zelf stap + regelnummer, dus er gaat geen context verloren. Geen blanket `git reset --hard` — deze checkout wordt gedeeld door parallelle sessies; de opruiming blijft gericht (branch weg). ## Empirisch bewijs Wegwerp-git-harness die de exacte `cleanup_branch`-commando's naspeelt: | | na abort | |---|---| | **oud** (bump ongecommit) | `main` **dirty**: pubspec `0.4.2+16`, 4 bestanden gewijzigd | | **nieuw** (bump gecommit) | `main` **schoon** (`0.4.1+15`), release-branch weg | Ook empirisch bevestigd (bash 5.2): `exit 1` triggert de ERR-trap **niet**; een kale-command-fout **wel** — de reden waarom de `die`-route nooit opruimde. ## Statische invarianten (`test/release_auto_version_test.dart`) Drie nieuwe tests (lezen het script, draaien geen bash → ook groen op de Windows-mirror-CI): 1. de versiebump wordt gecommit **vóór** `make check-release` (precies één staging van de vier paden); 2. `make check-release` staat **niet** in een `if ! … die`-bypass (valt in de ERR-opruiming); 3. de pre-tag abort-route roept `cleanup_branch` aan, die `git branch -D` doet en **nooit** `git reset --hard`. ## Verificatie - `make check` → **groen** (`CHECK_EXIT=0`; volledige suite + poorten, inclusief de 3 nieuwe tests: 22/22). - `shellcheck scripts/release_auto.sh` → schoon; `bash -n` → schoon. - `make check-secrets` → geen leaks (gitleaks dir+git, trufflehog filesystem+git). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(release): commit de versiebump vóór de poort zodat een afgebroken run main schoon laat
Some checks failed
scans / scans (pull_request) Successful in 2m35s
static-gate / static-gate (pull_request) Successful in 5m26s
linux-gate / gate-linux (pull_request) Failing after 29m30s
5e08a0670f
release_auto.sh legde de versiebump (pubspec, kOciDeckVersion, CHANGELOG, SBOM)
pas in fase 2 vast. Brak fase 1 vóór dat punt af (ERR-trap → cleanup_branch), dan
droeg de 'git checkout -' in cleanup_branch die niet-gecommitte werkboom-edits mee
naar main — dirty tree, waarna de volgende verse run op de versie-consistentiegate
strandde ("pubspec staat op X maar origin/main op Y"). Dat gebeurde na de
afgebroken v0.4.2-run (pubspec bleef op 0.4.2+16 op main).

Nu wordt de bump als één commit op de release-branch vastgelegd vóór
'make check-release'. Een afgebroken fase 1 verwijdert 'm dan volledig met
'git branch -D'; main blijft schoon. make check-release (en de build) lezen de
bestanden ongeacht commit-status, dus vervroegen is veilig.

De poort draait nu als kale aanroep i.p.v. 'if ! make check-release; then die':
die() doet 'exit 1' en dat slaat de ERR-trap — en dus cleanup_branch — over
(empirisch geverifieerd), terwijl een kale-command-fout de trap wél triggert. Zo
ruimt élke fase-1-abort op, niet alleen de bare-command-paden.

Statische invarianten in test/release_auto_version_test.dart borgen de volgorde
(commit vóór de poort), de kale poort-aanroep en de gerichte opruimroute (branch
-D, nooit een blanket reset --hard op deze gedeelde checkout).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit 5678fcd6d8 into main 2026-08-10 09:58:14 +00:00
brenno deleted branch claude/laughing-vaughan-f47cec 2026-08-10 09:58:15 +00:00
Sign in to join this conversation.
No description provided.