From f0e9311f80a31a1a2f84eba546c5a6d33ada3358 Mon Sep 17 00:00:00 2001 From: Eric Litman Date: Sun, 2 Aug 2026 02:42:08 -0400 Subject: [PATCH] Fix published release smoke lifecycle (BEAR-104) Model the persistent home, migration controller, and migrated target as distinct identities in the public release smoke. Prove migration completion and ready status before uninstalling, and document the v2.1.2 fix-forward release. --- CHANGELOG.md | 6 ++++++ scripts/release-smoke.sh | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ebc237..b3647f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## v2.1.2 - 2026-08-02 + +### Fixed + +- Made the published release smoke honor the distinct first-install home and migration-controller contracts before verifying migration and native hook finalization. + ## v2.1.1 - 2026-08-02 ### Changed diff --git a/scripts/release-smoke.sh b/scripts/release-smoke.sh index 47fa7d5..3527c51 100755 --- a/scripts/release-smoke.sh +++ b/scripts/release-smoke.sh @@ -38,12 +38,14 @@ env HOME="$home" CODEX_HOME="$codex_home" \ PATH="$home/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" \ THREADBEAR_RELEASE_BASE_URL="https://github.com/ericlitman/threadbear/releases" \ sh -c 'curl -fsSL https://threadbear.sh/install.sh | sh -s -- \ - --version "$1" --noninteractive --confirm --json' \ + --version "$1" --control-task-id release-smoke-home --noninteractive --confirm --json' \ sh "$version" binary=$home/.local/bin/threadbear test "$("$binary" version --json | sed -n 's/.*"version":"\([^"]*\)".*/\1/p')" = "$version" HOME="$home" CODEX_HOME="$codex_home" "$binary" self-test --candidate --json +HOME="$home" CODEX_HOME="$codex_home" "$binary" migration \ + --phase migration_running --controller-task-id release-smoke-controller --json HOME="$home" CODEX_HOME="$codex_home" "$binary" status --json inventory=$(HOME="$home" CODEX_HOME="$codex_home" "$binary" inventory --json) printf '%s\n' "$inventory" | grep -F '"count":1' >/dev/null @@ -81,5 +83,11 @@ if grep -F '"pending"' "$state" >/dev/null; then fi inventory=$(HOME="$home" CODEX_HOME="$codex_home" "$binary" inventory --json) printf '%s\n' "$inventory" | grep -F '"applied":true' >/dev/null +printf '%s\n' "$inventory" | grep -F '"remaining":0' >/dev/null +HOME="$home" CODEX_HOME="$codex_home" "$binary" migration \ + --phase migration_complete --controller-task-id release-smoke-controller --json +status=$(HOME="$home" CODEX_HOME="$codex_home" "$binary" status --json) +printf '%s\n' "$status" | grep -F '"ready":true' >/dev/null +printf '%s\n' "$status" | grep -F '"phase":"migration_complete"' >/dev/null HOME="$home" CODEX_HOME="$codex_home" "$binary" uninstall --noninteractive --confirm --json test ! -e "$binary"