From f2c395cffda2f4dc41af9f7998d3521a87838b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hakan=20G=C3=9CLEN?= <5780826+hkngln@users.noreply.github.com> Date: Mon, 17 Aug 2026 15:28:41 +0300 Subject: [PATCH 1/2] docs(release): the AEN gate cleared for a pre-release floor, not for stable (#802) release-contract.md's 'Currently outstanding' table said NO in its 'In a tag?' column for d639e777 (alp-sdk#1289) and 7d58ef32 (alp-sdk#1352), on the evidence that `git tag --contains d639e777` is empty. It is not. Both are contained in alp-sdk v0.16.0-rc1, so the cell's own re-check command contradicted it, and the section's instruction to revisit the table 'when that release exists' had fired and was never executed. Present on dev, not just frozen in the tag. Re-measured rather than taken from the issue: git tag --contains d639e777 -> v0.16.0-rc1 git tag --contains 7d58ef32 -> v0.16.0-rc1 git merge-base --is-ancestor d639e777 v0.15.0 -> exit 1 git merge-base --is-ancestor 7d58ef32 v0.15.0 -> exit 1 v0.16.0-rc1 Pre-release 2026-08-15T02:05:12Z v0.15.0 Latest 2026-08-07T13:36:18Z Both facts go in the table, because neither is the whole answer on its own. The gate's stated condition -- contained in a published alp-sdk tag -- is met. But v0.15.0 is still Latest and contains neither commit, so an AEN user on stable cannot run `tan generate --target zephyr-board`. The section now 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 in a doc. It failed CLOSED before -- falsely blocking, never falsely permitting -- so nothing was mis-shipped on the strength of it. BEYOND THE ISSUE'S STATED SCOPE, deliberately. The issue says do not touch the follow-up block below the table, because the alp-sdk refusal string it quotes is still verbatim correct. That is true, but the block opens 'when that release exists, two strings stop being true and must be revisited IN THE SAME CHANGE' and then names the table's column as one of the two. The release exists and the column is now fixed, so leaving the sentence verbatim would leave a reader unable to tell which half remains. It now says the trigger fired, the table is done, and the refusal string is not -- keeping the quoted string, the alp-sdk#1354 tracking and the _aen_peripherals_dtsi reasoning untouched. One correction to the issue while there: the surviving string is at scripts/gen_zephyr_board.py:637, not :687. tests/gates 476 passed, 3 skipped -- includes test_release_docs_match_the_workflow.py, the gate that parses this document. No other suite is reachable from a markdown edit. --- changelog.d/802.fixed.md | 34 +++++++++++++++++++++++++++++++++ docs/release-contract.md | 41 +++++++++++++++++++++++++--------------- 2 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 changelog.d/802.fixed.md diff --git a/changelog.d/802.fixed.md b/changelog.d/802.fixed.md new file mode 100644 index 00000000..b4f4828b --- /dev/null +++ b/changelog.d/802.fixed.md @@ -0,0 +1,34 @@ +- **`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:637` — the issue's `:687` is off by + fifty. 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..ed212b87 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:637`, 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. From 3885c27e030eedc0a0573b6941a6f212c89c7687 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hakan=20G=C3=9CLEN?= <5780826+hkngln@users.noreply.github.com> Date: Tue, 18 Aug 2026 21:09:57 +0300 Subject: [PATCH 2/2] docs(release): the ATOC refusal string is at gen_zephyr_board.py:687, not :637 Review on #838 measured the citation this PR added and it is wrong, which is the same defect class the PR exists to remove. Re-measured independently against alplabai/alp-sdk on all three refs: git show v0.16.0-rc1:scripts/gen_zephyr_board.py | grep -n "upgrade alp-sdk to a release" 687: "-- upgrade alp-sdk to a release that includes alp-sdk#1289. " origin/dev -> 687 origin/main -> 687 Line 637 on the same refs is unrelated prose inside a module docstring about the App MRAM / NPU MRAM-model budget, so a release engineer sent to :637 pays the lookup the citation was supposed to save. Two sites: - docs/release-contract.md:376 -- :637 becomes :687. - changelog.d/802.fixed.md -- same change, and the "the issue's :687 is off by fifty" clause is dropped rather than reversed. The fragment does not need to adjudicate the issue's line number at all; alp-sdk#1354 already carries the correct one. Gates: python/tests/gates 470 passed, 9 skipped, rc=0. scripts/assemble_changelog.py --check rc=0 (802.fixed.md listed). --- changelog.d/802.fixed.md | 5 ++--- docs/release-contract.md | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/changelog.d/802.fixed.md b/changelog.d/802.fixed.md index b4f4828b..35d6739d 100644 --- a/changelog.d/802.fixed.md +++ b/changelog.d/802.fixed.md @@ -29,6 +29,5 @@ 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:637` — the issue's `:687` is off by - fifty. That string is upstream's to fix and is still tracked as - alp-sdk#1354 (open). + 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 ed212b87..eac786d5 100644 --- a/docs/release-contract.md +++ b/docs/release-contract.md @@ -373,7 +373,7 @@ 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:637`, so the string fix is an alp-sdk +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