fix: the release page drops internal rule numbers and the miscounted "three" images
CI and images / lint (push) Successful in 2s
CI and images / extension-version (push) Successful in 2s
CI and images / extension-test (push) Successful in 17s
CI and images / frontend-build (push) Successful in 20s
CI and images / backend-lint-and-test (push) Successful in 32s
CI and images / integration (push) Successful in 2m21s
CI and images / sign-extension (push) Successful in 3s
CI and images / build-agent (push) Successful in 6s
CI and images / build-web (push) Successful in 6s
CI and images / smoke-web (push) Successful in 41s
CI and images / promote (push) Successful in 1s
CI and images / lint (push) Successful in 2s
CI and images / extension-version (push) Successful in 2s
CI and images / extension-test (push) Successful in 17s
CI and images / frontend-build (push) Successful in 20s
CI and images / backend-lint-and-test (push) Successful in 32s
CI and images / integration (push) Successful in 2m21s
CI and images / sign-extension (push) Successful in 3s
CI and images / build-agent (push) Successful in 6s
CI and images / build-web (push) Successful in 6s
CI and images / smoke-web (push) Successful in 41s
CI and images / promote (push) Successful in 1s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LVjrnpQjRgHdvq95rASoiR
This commit is contained in:
@@ -210,8 +210,8 @@ def render(
|
|||||||
)
|
)
|
||||||
|
|
||||||
parts.append(
|
parts.append(
|
||||||
f"Built from `{short}`. The rollback unit is the immutable `:c-` tag "
|
f"Built from `{short}`. To roll back to this release, pull these "
|
||||||
f"(rule 145) — these three move together:\n\n```\n"
|
f"immutable `:c-` tags — the images move together:\n\n```\n"
|
||||||
+ "\n".join(f"{image}:c-{short}" for image in IMAGES)
|
+ "\n".join(f"{image}:c-{short}" for image in IMAGES)
|
||||||
+ "\n```"
|
+ "\n```"
|
||||||
)
|
)
|
||||||
@@ -221,10 +221,10 @@ def render(
|
|||||||
# truncated to MAX_COMMITS, which is 200 lines of internal build-out
|
# truncated to MAX_COMMITS, which is 200 lines of internal build-out
|
||||||
# presented to someone who has never seen this project.
|
# presented to someone who has never seen this project.
|
||||||
parts.append(
|
parts.append(
|
||||||
"---\n\n_First release under rule 148's `vYYYY.MM.DD.HHMM` shape, so "
|
"---\n\n_The first release, so there is no earlier one to diff "
|
||||||
"there is no predecessor to diff against and no changelog to derive. "
|
"against and no changelog to derive. The description above is "
|
||||||
"The description above is README.md's, quoted at publish time. Later "
|
"README.md's, quoted at publish time. Later releases carry the "
|
||||||
"releases carry the commits since the previous one._"
|
"commits since the previous one._"
|
||||||
)
|
)
|
||||||
return "\n\n".join(parts)
|
return "\n\n".join(parts)
|
||||||
|
|
||||||
@@ -257,8 +257,8 @@ def cross_checks(tag: str, sha: str) -> list[str]:
|
|||||||
|
|
||||||
if not RULE_148.match(tag):
|
if not RULE_148.match(tag):
|
||||||
notes.append(
|
notes.append(
|
||||||
f"`{tag}` is not rule 148's `vYYYY.MM.DD.HHMM` shape. Published "
|
f"`{tag}` is not the `vYYYY.MM.DD.HHMM` release-tag shape. "
|
||||||
f"anyway — the old `v26.*` tags predate the rule."
|
f"Published anyway — the old `v26.*` tags predate it."
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
derived = artifact_version("web")
|
derived = artifact_version("web")
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ re-implementation of it.
|
|||||||
"""
|
"""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
@@ -162,6 +163,15 @@ def test_the_first_release_describes_the_product_instead_of_diffing(shaped_histo
|
|||||||
assert not [ln for ln in body.split("\n") if ln.startswith("- work landing")]
|
assert not [ln for ln in body.split("\n") if ln.startswith("- work landing")]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("tag", ["v2026.08.28.2208", "v2026.08.29.1000"])
|
||||||
|
def test_the_release_page_cites_no_internal_rule_numbers(shaped_history, tag):
|
||||||
|
"""The release page is read by strangers. "rule 145" names a record in the
|
||||||
|
operator's own notes, which a reader cannot open — say what the rule means
|
||||||
|
instead. Covers the first-release overview and the changelog body."""
|
||||||
|
body = body_of(notes(tag, cwd=shaped_history))
|
||||||
|
assert not re.search(r"\brule\s+\d+", body, re.IGNORECASE), body
|
||||||
|
|
||||||
|
|
||||||
def test_the_overview_is_readmes_words_not_a_second_copy(shaped_history):
|
def test_the_overview_is_readmes_words_not_a_second_copy(shaped_history):
|
||||||
"""Two hand-maintained descriptions of one product drift and nothing
|
"""Two hand-maintained descriptions of one product drift and nothing
|
||||||
catches it. The release page quotes README.md so there is one source."""
|
catches it. The release page quotes README.md so there is one source."""
|
||||||
|
|||||||
Reference in New Issue
Block a user