diff --git a/changelog.d/802.fixed.md b/changelog.d/802.fixed.md new file mode 100644 index 00000000..35d6739d --- /dev/null +++ b/changelog.d/802.fixed.md @@ -0,0 +1,33 @@ +- **`docs/release-contract.md`'s AEN gate no longer tells a release engineer + not to cut, on evidence that stopped reproducing.** Its "Currently + outstanding" table said **NO** in the "In a tag?" column for `d639e777` + (alp-sdk#1289, the SE-owned ATOC reservation) and `7d58ef32` (alp-sdk#1352, + `zephyr_peripherals_dtsi` on the SoC JSON), citing `git tag --contains + d639e777` being empty. Both are contained in alp-sdk `v0.16.0-rc1`, so the + cell's own re-check command contradicted it. The section's instruction to + revisit the table "when that release exists" had fired and was never run. + + Re-measured 2026-08-17 rather than taken from the issue: `git tag --contains + d639e777` and `git tag --contains 7d58ef32` both answer `v0.16.0-rc1` + (pre-release, published 2026-08-15T02:05:12Z), while `git merge-base + --is-ancestor v0.15.0` still exits 1 — `v0.15.0` remains the + `Latest` stable (2026-08-07T13:36:18Z) and contains neither. + + Both facts are now in the table, because only one of them is the whole + answer: the gate's stated condition ("contained in a published alp-sdk tag") + is met, but an AEN user on stable `v0.15.0` still cannot run `tan generate + --target zephyr-board`. The section names that as the release engineer's + call — cut on a pre-release floor, or wait for alp-sdk `v0.16.0` final — and + asks for the choice to be recorded in the release PR, rather than deciding + it here. It failed closed before (falsely blocking, never falsely + permitting), so nothing was ever mis-shipped on the strength of it. + + The follow-up block below the table is now half-executed rather than + untouched, which the issue did not ask for and is the one place this goes + beyond it: that block said "**when that release exists**, two strings stop + being true and must be revisited in the same change" — the table's column, + and alp-sdk's ATOC refusal text. The release exists and the table is done, + so leaving the sentence verbatim would have left a reader unable to tell + which half remains. It now says so, and cites the surviving string's real + location, `scripts/gen_zephyr_board.py:687`. That string is upstream's to + fix and is still tracked as alp-sdk#1354 (open). diff --git a/docs/release-contract.md b/docs/release-contract.md index 229fee64..eac786d5 100644 --- a/docs/release-contract.md +++ b/docs/release-contract.md @@ -345,26 +345,37 @@ in a published alp-sdk **tag**: git -C tag --contains # non-empty, or the tag is premature ``` -**Currently outstanding — do not cut a tan release carrying the AEN board emit -until this clears:** +**Cleared for a PRE-RELEASE floor, not for the current stable — read both rows +before cutting a tan release carrying the AEN board emit:** | Requirement | alp-sdk commit | In a tag? | |---|---|---| -| SE-owned ATOC reservation (`atoc` in `memory_map:`) — alp-sdk#1289 | `d639e777` | **NO** — `git tag --contains d639e777` is empty; `git merge-base --is-ancestor d639e777 v0.15.0` is false | -| `zephyr_peripherals_dtsi` on the SoC JSON — alp-sdk#1352 | `7d58ef32` | **NO** — descendant of the above, same answer | +| SE-owned ATOC reservation (`atoc` in `memory_map:`) — alp-sdk#1289 | `d639e777` | **YES, pre-release only** — `git tag --contains d639e777` → `v0.16.0-rc1`; `git merge-base --is-ancestor d639e777 v0.15.0` is still false | +| `zephyr_peripherals_dtsi` on the SoC JSON — alp-sdk#1352 | `7d58ef32` | **YES, pre-release only** — descendant of the above, same answer | Both are reached by `tan generate --target zephyr-board` on any `E1M-AEN*` -SKU, so today that command fails against **every** released alp-sdk. Until an -alp-sdk release contains `7d58ef32`, a tan tag carrying this planner ships a -subcommand that cannot succeed for AEN users on any SDK they can install. - -**When that release exists**, two strings stop being true and must be -revisited in the same change: `zephyr_board.py`'s ATOC refusal says *"upgrade -alp-sdk to a release that includes alp-sdk#1289"* (an issue number, not a -version — replace it with the actual floor once one exists), and this table's -"In a tag?" column. Both live upstream in alp-sdk -`scripts/gen_zephyr_board.py`, so the string fix is an alp-sdk change -re-synced in, never a patch to the mirror. Tracked as **alp-sdk#1354**, which +SKU. Measured 2026-08-17 against alp-sdk's published releases: `v0.16.0-rc1` +(pre-release, 2026-08-15T02:05:12Z) contains both commits, and `v0.15.0` — +still the `Latest` stable, 2026-08-07T13:36:18Z — contains neither. So the +command now succeeds from `v0.16.0-rc1` onward and still fails on the newest +STABLE alp-sdk a user gets by default. + +**The call this leaves you.** The gate's stated condition — contained in a +published alp-sdk tag — is met. Whether that is enough is a judgement the +table cannot make: cutting now ships an AEN board emit whose floor is a +pre-release, so an AEN user on stable `v0.15.0` still cannot run +`tan generate --target zephyr-board`. Waiting for alp-sdk `v0.16.0` final +removes the caveat outright. Record which one you chose in the release PR — +this section exists because that reasoning kept being re-derived. + +**That release now exists** (`v0.16.0-rc1`), so this trigger has fired and is +half executed. The table's "In a tag?" column above is updated. The other half +is NOT done: `zephyr_board.py`'s ATOC refusal still says *"upgrade alp-sdk to +a release that includes alp-sdk#1289"* (an issue number, not a version — +replace it with the actual floor, which now exists). It lives upstream in +alp-sdk `scripts/gen_zephyr_board.py:687`, so the string fix is an alp-sdk +change re-synced in, never a patch to the mirror. Tracked as **alp-sdk#1354** +(open), which also carries the reason the ATOC message is not the one a user actually sees today: `_aen_peripherals_dtsi()` runs first, and `d639e777` is an ancestor of `7d58ef32`, so every checkout with the field already has the region.