fabro/lib/foundation
Bryan Helmkamp a611e00fe6
Rescue release pushes when origin/main moves mid-release
The release push raced any commit that landed on main while the release
smoke ran (~15 minutes): git push was rejected as non-fast-forward and
the whole release failed, as seen on the v0.332.0-nightly.1 attempt.
Worse, the push was not atomic — if the tag ref had been accepted while
the main ref was rejected, the release would have shipped from an
orphan commit and main would never have received the version bump.

Make the push atomic (both refs or neither) and add a bounded rescue
loop: on rejection, drop the bump commit and tag this run created,
fast-forward onto the updated origin/main, recompute the version
against freshly fetched tags, and rebuild the bump commit on the new
tip. The fast-forward uses --ff-only so a genuinely diverged local main
(unpushed commits) fails loudly instead of being reset away.

The retried tag can include commits the smoke did not test; those
commits passed CI to land on main, and the Release workflow re-runs the
full test suite on the tagged commit before publishing anything.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 07:40:13 -04:00
..
build-support refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-api Add a shared RunSpec test fixture and adopt it 2026-08-19 16:50:37 -04:00
fabro-auth fix(model): prefer MOONSHOT_API_KEY 2026-07-31 09:14:58 -04:00
fabro-client Type the blob-write response hash as fabro_types::BlobHash 2026-08-17 13:56:19 -04:00
fabro-config Remove stale env-interpolation promises from docs 2026-08-17 17:36:53 -04:00
fabro-core Clarify visit-limit counter comment 2026-08-20 19:38:10 -04:00
fabro-db Add SQLite blob store foundation 2026-08-18 17:41:29 -04:00
fabro-dev Rescue release pushes when origin/main moves mid-release 2026-08-21 07:40:13 -04:00
fabro-http refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-macros refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-model Remove stale env-interpolation promises from docs 2026-08-17 17:36:53 -04:00
fabro-oauth refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-options-metadata refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-proc refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-redact Address run spec persistence review findings 2026-08-20 20:35:52 -04:00
fabro-static Merge remote-tracking branch 'origin/main' into fix/modal-provider-catalog 2026-08-01 09:32:19 -04:00
fabro-telemetry refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-template Merge pull request #756 from fabro-sh/refactor/graph-reference-kind 2026-08-18 12:57:32 -04:00
fabro-test Merge remote-tracking branch 'origin/main' into fix/redaction-corrupts-executable-spec 2026-08-20 20:42:20 -04:00
fabro-types Merge remote-tracking branch 'origin/main' into pr-764 2026-08-20 22:07:20 -04:00
fabro-util Neutralize runtime for_each labels before display 2026-07-28 19:52:59 -04:00
fabro-vault refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00