diff --git a/docs/evidence/compatibility.md b/docs/evidence/compatibility.md index d237051..afb7322 100644 --- a/docs/evidence/compatibility.md +++ b/docs/evidence/compatibility.md @@ -4,7 +4,7 @@ The current public snapshot is dated **2026-07-30**. All packages remain pre-1.0, so compatible versions must be selected from evidence rather than assumed from package names. -[Open the immutable compatibility snapshot](https://github.com/hayatepy/.github/blob/975173da2c1be720a4f902cde36ba3822b9b6e56/docs/COMPATIBILITY.md){ .md-button .md-button--primary } +[Open the immutable compatibility snapshot](https://github.com/hayatepy/.github/blob/1496dc87b780ff81470518df468a18bd6783ebce/docs/COMPATIBILITY.md){ .md-button .md-button--primary } ## Golden runtime lock @@ -23,14 +23,14 @@ assumed from package names. - `hayate-openapi 0.8.1` generates the dependency-free callable TypeScript client and validates it against a real Hayate ASGI process. -- `create-hayate 0.13.0` propagates the client, its types, and drift checks +- `create-hayate 0.13.1` propagates the client, its types, and drift checks into generated projects. - The released generator passed all - [112 frontend compositions](https://github.com/hayatepy/create-hayate/actions/runs/30488857568). + [112 frontend compositions](https://github.com/hayatepy/create-hayate/actions/runs/30493092512). The aggregate evidence JSON SHA-256 is - `fb3f4dc15e8d49bd1fdb6a658df70cc33e174a0f9342895f732dca8aa57a8bb9`. + `f7be85bf13c135c9c112c3cb504c337f3e0fbad501fe575425ad69be898a84df`. - The [golden application main - run](https://github.com/hayatepy/golden-app/actions/runs/30488723553) + run](https://github.com/hayatepy/golden-app/actions/runs/30494459938) executes authenticated path, query, JSON, multipart, delete, and error flows through the compiled client. diff --git a/scripts/check_release_freshness.py b/scripts/check_release_freshness.py index edb5c22..b8d9067 100644 --- a/scripts/check_release_freshness.py +++ b/scripts/check_release_freshness.py @@ -14,6 +14,7 @@ ROOT = Path(__file__).resolve().parents[1] MANIFEST = ROOT / "data" / "ecosystem.toml" CREATE_HAYATE_PIN = re.compile(r"create-hayate==(\d+\.\d+\.\d+)") +CREATE_HAYATE_RELEASE = re.compile(r"\bcreate-hayate (\d+\.\d+\.\d+)\b") PYPI_ORIGIN = "https://pypi.org" USER_AGENT = "hayatepy-docs-release-freshness/1" @@ -87,6 +88,13 @@ def validate_create_hayate_pins(root: Path, data: Mapping[str, Any]) -> list[str f"{relative}:{line_number}: create-hayate pin " f"{match.group(1)} must match manifest {expected}" ) + for match in CREATE_HAYATE_RELEASE.finditer(line): + if match.group(1) != expected: + relative = path.relative_to(root) + failures.append( + f"{relative}:{line_number}: create-hayate release " + f"{match.group(1)} must match manifest {expected}" + ) if references == 0: failures.append("documentation contains no exact create-hayate release pin") return failures diff --git a/tests/test_release_freshness.py b/tests/test_release_freshness.py index aa51e86..bfd7191 100644 --- a/tests/test_release_freshness.py +++ b/tests/test_release_freshness.py @@ -61,3 +61,31 @@ def test_documentation_requires_an_exact_release_pin(tmp_path: Path) -> None: assert validate_create_hayate_pins(tmp_path, manifest()) == [ "documentation contains no exact create-hayate release pin" ] + + +def test_documentation_release_prose_must_match_manifest(tmp_path: Path) -> None: + docs = tmp_path / "docs" + docs.mkdir() + (docs / "evidence.md").write_text( + "uvx --from create-hayate==0.13.1 create-hayate demo\n" + "Current evidence uses create-hayate 0.13.0.\n", + encoding="utf-8", + ) + + failures = validate_create_hayate_pins(tmp_path, manifest()) + + assert failures == [ + "docs/evidence.md:2: create-hayate release 0.13.0 must match manifest 0.13.1" + ] + + +def test_current_documentation_release_prose_is_accepted(tmp_path: Path) -> None: + docs = tmp_path / "docs" + docs.mkdir() + (docs / "evidence.md").write_text( + "uvx --from create-hayate==0.13.1 create-hayate demo\n" + "Current evidence uses create-hayate 0.13.1.\n", + encoding="utf-8", + ) + + assert validate_create_hayate_pins(tmp_path, manifest()) == []