Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions .github/scripts/test_patch_0_1_2_current_state_closeout.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
#!/usr/bin/env python3
#
# Copyright 2026 The Ethos maintainers
#
# Licensed under the Apache License, Version 2.0 (the "License");
#

from __future__ import annotations

import re
import subprocess
import unittest
from pathlib import Path

from makefile_guard import target_block


ROOT = Path(__file__).resolve().parents[2]
RECORD = ROOT / "docs/validation/patch-0-1-2-current-state-closeout-validation-2026-06-25.md"
VALIDATION_README = ROOT / "docs/validation/README.md"
EXECUTION_STATUS = ROOT / "docs/execution-status.md"
PUBLIC_RELEASE_CHECKLIST = ROOT / "docs/public-release-checklist.md"
CHANGELOG = ROOT / "CHANGELOG.md"
MAKEFILE = ROOT / "Makefile"

SOURCE_SHORT = "aa4b5f2"
SOURCE_COMMIT = "aa4b5f2f3d58175e64572f42e9f4a8a88d9cede1"
SOURCE_TREE = "604b886cccfde24af3071a6babeda25f63230835"
APPROVED_SURFACES = (
"GitHub source repository",
"Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`",
"Python `ethos-pdf` wheel at `0.1.2`",
"npm `@docushell/ethos-pdf@0.1.2` package",
"GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts",
"Annotated package tags `ethos-package-ethos-doc-core-0.1.2`, `ethos-package-ethos-verify-0.1.2`, and `ethos-package-ethos-pdf-0.1.2`",
)
RETAINED_BLOCKERS = (
"Hosted surfaces remain blocked.",
"Production positioning remains blocked.",
"Windows packaged artifacts remain blocked.",
"Bundled project-maintained PDFium builds remain blocked.",
"`ethos-doc` remains blocked.",
"`ethos-rag` remains blocked.",
"Public benchmark reports remain blocked.",
"Public benchmark claims remain blocked.",
"Speed, footprint, parser-quality, table-quality, and production claims remain blocked.",
)
FORBIDDEN_CURRENT_STATUS = (
"Patch `0.1.2` approved evaluation surfaces remain blocked",
"Patch `0.1.2` package tag creation remains blocked",
"Patch `0.1.2` is not package-release, artifact-release",
)


def read(path: Path) -> str:
return path.read_text(encoding="utf-8")


def normalized(path: Path) -> str:
return re.sub(r"\s+", " ", read(path))


def git(*args: str) -> str:
return subprocess.check_output(
["git", *args],
cwd=ROOT,
encoding="utf-8",
stderr=subprocess.DEVNULL,
).strip()


class Patch012CurrentStateCloseoutTests(unittest.TestCase):
def test_record_is_source_bound_and_indexed(self) -> None:
record = normalized(RECORD)
readme = normalized(VALIDATION_README)

self.assertIn(RECORD.name, readme)
self.assertIn("patch `0.1.2` current-state closeout", readme.lower())
self.assertIn(f"Validated source HEAD before this record: `{SOURCE_SHORT}`", read(RECORD))
self.assertIn(f"Patch 0.1.2 current-state closeout source commit: `{SOURCE_COMMIT}`", record)
self.assertIn(f"Patch 0.1.2 current-state closeout source tree: `{SOURCE_TREE}`", record)
self.assertEqual(SOURCE_COMMIT, git("rev-parse", SOURCE_SHORT))
self.assertEqual(SOURCE_TREE, git("rev-parse", f"{SOURCE_SHORT}^{{tree}}"))

def test_record_closes_only_approved_patch_0_1_2_surfaces(self) -> None:
record = normalized(RECORD)
raw = read(RECORD)

for surface in APPROVED_SURFACES:
self.assertIn(surface, record)
for blocker in RETAINED_BLOCKERS:
self.assertIn(blocker, record)
self.assertIn("This record does not approve any new public surface.", record)
self.assertIn("This record does not approve production positioning.", record)
self.assertNotIn("/Users/", raw)
self.assertNotIn("/private/tmp", raw)
self.assertNotIn("/private/var", raw)
self.assertNotIn("/var/folders", raw)
self.assertNotIn("saumildiwaker", raw)

def test_current_status_docs_reference_final_patch_state(self) -> None:
for path in (EXECUTION_STATUS, PUBLIC_RELEASE_CHECKLIST, VALIDATION_README):
text = normalized(path)
self.assertIn(RECORD.name, text, str(path))
self.assertIn("patch `0.1.2` current-state closeout", text.lower(), str(path))
self.assertIn("approved patch `0.1.2` evaluation surfaces are closed", text.lower(), str(path))
self.assertIn("hosted surfaces remain blocked", text.lower(), str(path))
self.assertIn("production positioning remains blocked", text.lower(), str(path))
self.assertIn("public benchmark claims remain blocked", text.lower(), str(path))
for forbidden in FORBIDDEN_CURRENT_STATUS:
self.assertNotIn(forbidden, text, str(path))

def test_changelog_records_narrow_boundary(self) -> None:
text = normalized(CHANGELOG)
self.assertIn(
"boundary-exception: close patch `0.1.2` current status for the approved evaluation surfaces",
text,
)
self.assertIn("no hosted, production, Windows, bundled PDFium, benchmark, `ethos-doc`, or `ethos-rag` boundary change", text)

def test_release_candidate_prep_runs_current_state_after_package_tag_closeout(self) -> None:
makefile = read(MAKEFILE)
package_tag_guard = "$(PYTHON) .github/scripts/test_patch_0_1_2_package_tag_closeout.py"
current_state_guard = "$(PYTHON) .github/scripts/test_patch_0_1_2_current_state_closeout.py"
first_public_guard = "$(PYTHON) .github/scripts/test_first_public_release_artifact_evidence.py"
block = target_block("release-candidate-prep")

self.assertIn(current_state_guard, block)
self.assertEqual(1, makefile.count(current_state_guard))
self.assertLess(block.index(package_tag_guard), block.index(current_state_guard))
self.assertLess(block.index(current_state_guard), block.index(first_public_guard))


if __name__ == "__main__":
unittest.main()
1 change: 1 addition & 0 deletions .github/scripts/test_release_candidate_prep.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
"$(PYTHON) .github/scripts/test_patch_0_1_2_package_tag_approval_request.py",
"$(PYTHON) .github/scripts/test_patch_0_1_2_package_tag_approval_decision.py",
"$(PYTHON) .github/scripts/test_patch_0_1_2_package_tag_closeout.py",
"$(PYTHON) .github/scripts/test_patch_0_1_2_current_state_closeout.py",
"$(PYTHON) .github/scripts/test_first_public_release_artifact_evidence.py",
"$(PYTHON) .github/scripts/test_first_public_release_final_decider.py",
"$(PYTHON) .github/scripts/test_first_public_release_linux_x64_artifact_evidence.py",
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## Unreleased

- boundary-exception: close patch `0.1.2` current status for the approved evaluation surfaces; no hosted, production, Windows, bundled PDFium, benchmark, `ethos-doc`, or `ethos-rag` boundary change.
- boundary-exception: close patch `0.1.2` package tag creation with exact remote tag evidence while retaining hosted, production, Windows, bundled PDFium, benchmark, `ethos-doc`, and `ethos-rag` blockers.
- boundary-exception: record decider approval for exact patch `0.1.2` package tag creation while keeping actual tag creation as a later operator action and retaining hosted, production, Windows, bundled PDFium, benchmark, `ethos-doc`, and `ethos-rag` blockers.
- boundary-exception: request decider review for exact patch `0.1.2` package tag creation while keeping tag creation, hosted, production, Windows, bundled PDFium, benchmark, `ethos-doc`, and `ethos-rag` surfaces blocked pending a separate approval decision.
Expand Down
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,7 @@ release-candidate-prep:
$(PYTHON) .github/scripts/test_patch_0_1_2_package_tag_approval_request.py
$(PYTHON) .github/scripts/test_patch_0_1_2_package_tag_approval_decision.py
$(PYTHON) .github/scripts/test_patch_0_1_2_package_tag_closeout.py
$(PYTHON) .github/scripts/test_patch_0_1_2_current_state_closeout.py
$(PYTHON) .github/scripts/test_first_public_release_artifact_evidence.py
$(PYTHON) .github/scripts/test_first_public_release_final_decider.py
$(PYTHON) .github/scripts/test_first_public_release_linux_x64_artifact_evidence.py
Expand Down
8 changes: 8 additions & 0 deletions docs/execution-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,14 @@ dereference to the approved package source commit. Hosted surfaces, production p
packaged artifacts, bundled project-maintained PDFium builds, `ethos-doc`, `ethos-rag`, and public
benchmark claims remain blocked.

Patch `0.1.2` current-state closeout is recorded in
`docs/validation/patch-0-1-2-current-state-closeout-validation-2026-06-25.md`. The approved patch
`0.1.2` evaluation surfaces are closed for the GitHub source repository, Rust crates, Python wheel,
npm package, macOS arm64/Linux x64 CLI artifacts, and annotated package tags. Hosted surfaces,
production positioning, Windows packaged artifacts, bundled project-maintained PDFium builds,
`ethos-doc`, `ethos-rag`, public benchmark reports, public benchmark claims, speed, footprint,
parser-quality, table-quality, and production claims remain blocked.

Public approval lane blocker prep is recorded in
`docs/milestone-e-public-approval-lane-blockers.json` and schema-bound by
`schemas/ethos-milestone-e-public-approval-lane-blockers.schema.json`. This public approval lane
Expand Down
22 changes: 17 additions & 5 deletions docs/public-release-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,15 @@ or launch announcement. It is intentionally stricter than the day-to-day enginee

## Current Status

Ethos is not package-release, artifact-release, benchmark-report, or launch-announcement ready.
It may be pushed as a public pre-alpha source repository only if the latest public-source
preflight passes and the current claim language is used. The package-name/trademark gate is
closed by ADR-0006, but public benchmark, parser-quality, table, heading, speed, footprint, and
rendered-crop byte-identity claims remain blocked.
Ethos has approved public beta/evaluation surfaces for the GitHub source repository, Rust library
crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`, the Python `ethos-pdf` wheel
at `0.1.2`, the npm `@docushell/ethos-pdf@0.1.2` package, GitHub Release `v0.1.2` macOS arm64 and
Linux x64 CLI artifacts, and the three approved annotated package tags. The approved patch `0.1.2`
evaluation surfaces are closed by
`docs/validation/patch-0-1-2-current-state-closeout-validation-2026-06-25.md`. Hosted surfaces,
production positioning, Windows packaged artifacts, bundled project-maintained PDFium builds,
public benchmark reports, public benchmark claims, speed, footprint, parser-quality, table-quality,
`ethos-doc`, and `ethos-rag` remain blocked.

Patch `0.1.1` readiness prep is recorded in
`docs/validation/patch-0-1-1-readiness-prep-validation-2026-06-23.md` for review only. It records
Expand Down Expand Up @@ -208,6 +212,14 @@ dereference to the approved package source commit. Hosted surfaces, production p
packaged artifacts, bundled project-maintained PDFium builds, `ethos-doc`, `ethos-rag`, and public
benchmark claims remain blocked.

Patch `0.1.2` current-state closeout is recorded in
`docs/validation/patch-0-1-2-current-state-closeout-validation-2026-06-25.md`. The approved patch
`0.1.2` evaluation surfaces are closed for the GitHub source repository, Rust crates, Python wheel,
npm package, macOS arm64/Linux x64 CLI artifacts, and annotated package tags. Hosted surfaces,
production positioning, Windows packaged artifacts, bundled project-maintained PDFium builds,
`ethos-doc`, `ethos-rag`, public benchmark reports, public benchmark claims, speed, footprint,
parser-quality, table-quality, and production claims remain blocked.

## Required Before Public Push

- Package-name and trademark decision is closed by accepted ADR-0006 in
Expand Down
21 changes: 15 additions & 6 deletions docs/validation/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,17 @@ in `docs/public-release-checklist.md`.

Records:

Patch `0.1.2` closeout records now document the approved public beta/evaluation npm package and
macOS arm64/Linux x64 CLI artifact surfaces, while Rust crate and Python wheel install wording
remain on the published `0.1.1` baseline. Patch `0.1.1` closeout records document the approved
public beta/evaluation surfaces for source, Rust crates, the Python wheel, npm package, and macOS
arm64/Linux x64 CLI artifacts. Historical package publication evidence records below keep their
at-the-time blocker wording for traceability.
Patch `0.1.2` closeout records now document that the approved patch `0.1.2` evaluation surfaces
are closed for the GitHub source repository, Rust crates, Python wheel, npm package, macOS
arm64/Linux x64 CLI artifacts, and the three approved annotated package tags. Hosted surfaces
remain blocked. Production positioning remains blocked. Windows packaged artifacts remain blocked.
Bundled project-maintained PDFium builds remain blocked. Public benchmark reports remain blocked.
Public benchmark claims remain blocked. Speed, footprint, parser-quality, table-quality, and
production claims remain blocked. `ethos-doc` and `ethos-rag` remain blocked. Patch `0.1.1`
closeout records document the approved public beta/evaluation surfaces for source, Rust crates,
the Python wheel, npm package, and macOS arm64/Linux x64 CLI artifacts.
The package publication evidence records below keep their at-the-time blocker wording for
traceability.
The public beta current-main refresh prep record keeps refreshed source approval blocked while
recording the exact current-main source candidate and required follow-up evidence.

Expand Down Expand Up @@ -774,6 +779,10 @@ recording the exact current-main source candidate and required follow-up evidenc
closeout validation records completed annotated package tag creation and remote tag evidence for
the three approved package tags; hosted, production, Windows, bundled PDFium, benchmark,
`ethos-doc`, and `ethos-rag` surfaces remain blocked until separate approval records pass.
- `patch-0-1-2-current-state-closeout-validation-2026-06-25.md` - patch `0.1.2` current-state
closeout validation records that the approved patch `0.1.2` evaluation surfaces are closed while
retaining hosted, production, Windows, bundled PDFium, benchmark, speed/footprint/parser-quality/
table-quality, `ethos-doc`, and `ethos-rag` blockers.
- `milestone-e-validation-command-index-validation-2026-06-20.md` - internal Milestone E
validation-command index validation passed through command-alignment checks, schema enum checks,
row-record checks, public-surface posture checks, `make milestone-e-prep`, and diff hygiene; the
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Patch 0.1.2 Current-State Closeout Validation

Validated source HEAD before this record: `aa4b5f2`.

Patch 0.1.2 current-state closeout source commit:
`aa4b5f2f3d58175e64572f42e9f4a8a88d9cede1`.

Patch 0.1.2 current-state closeout source tree:
`604b886cccfde24af3071a6babeda25f63230835`.

Status: **patch 0.1.2 approved evaluation surfaces closed**

This record closes only the current status summary after the patch `0.1.2` package tag closeout.
It does not approve any new public surface, does not approve production positioning, and does not
change support boundaries.

## Closed Evaluation Surfaces

- GitHub source repository
- Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` at `0.1.2`
- Python `ethos-pdf` wheel at `0.1.2`
- npm `@docushell/ethos-pdf@0.1.2` package
- GitHub Release `v0.1.2` macOS arm64/Linux x64 CLI artifacts
- Annotated package tags `ethos-package-ethos-doc-core-0.1.2`,
`ethos-package-ethos-verify-0.1.2`, and `ethos-package-ethos-pdf-0.1.2`

## Retained Blockers

- Hosted surfaces remain blocked.
- Production positioning remains blocked.
- Windows packaged artifacts remain blocked.
- Bundled project-maintained PDFium builds remain blocked.
- `ethos-doc` remains blocked.
- `ethos-rag` remains blocked.
- Public benchmark reports remain blocked.
- Public benchmark claims remain blocked.
- Speed, footprint, parser-quality, table-quality, and production claims remain blocked.

## Validation

- `python3 .github/scripts/test_patch_0_1_2_package_tag_closeout.py`
- `python3 .github/scripts/test_patch_0_1_2_current_state_closeout.py`
- `python3 .github/scripts/test_execution_status.py`
- `python3 .github/scripts/test_release_candidate_prep.py`
- `make light-check PYTHON=python3`
- `make milestone-e-prep PYTHON=python3`
- `make release-candidate-prep PYTHON=python3`
- `git diff --check`

## Non-Approvals

- This record does not approve any new public surface.
- This record does not approve hosted surfaces.
- This record does not approve production positioning.
- This record does not approve Windows packaged artifacts.
- This record does not approve bundled project-maintained PDFium builds.
- This record does not approve `ethos-doc` or `ethos-rag`.
- This record does not approve public benchmark reports or public benchmark claims.
Loading