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
1 change: 1 addition & 0 deletions .github/scripts/test_ci_workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ def test_ci_workflow_guard_is_run_by_ci(self) -> None:
self.assertIn("python3 .github/scripts/test_milestone_b_internal_checks.py", text)
self.assertIn("python3 .github/scripts/test_execution_status.py", text)
self.assertIn("python3 .github/scripts/test_roadmap_status.py", text)
self.assertIn("python3 .github/scripts/test_milestone_b_closeout_record.py", text)


if __name__ == "__main__":
Expand Down
73 changes: 73 additions & 0 deletions .github/scripts/test_milestone_b_closeout_record.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/usr/bin/env python3
#
# Copyright 2026 The Ethos maintainers
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

from __future__ import annotations

import re
import unittest
from pathlib import Path


ROOT = Path(__file__).resolve().parents[2]
RECORD = ROOT / "docs/validation/milestone-b-closeout-validation-2026-06-17.md"
VALIDATION_README = ROOT / "docs/validation/README.md"


def record_text() -> str:
return RECORD.read_text(encoding="utf-8")


def normalized_record_text() -> str:
return re.sub(r"\s+", " ", record_text())


class MilestoneBCloseoutRecordTests(unittest.TestCase):
def test_record_is_indexed(self) -> None:
text = VALIDATION_README.read_text(encoding="utf-8")

self.assertIn("milestone-b-closeout-validation-2026-06-17.md", text)

def test_record_names_internal_validation_command(self) -> None:
text = record_text()

self.assertIn("make milestone-b-internal-checks PYTHON=<jsonschema-venv>/bin/python", text)
self.assertIn("fixtures/validate_fixtures.py", text)
self.assertIn("make verify-alpha", text)
self.assertIn("make layout-evaluator-alpha", text)
self.assertIn("make python-surface-test", text)
self.assertIn(".github/scripts/claims_gate.py", text)
self.assertIn(".github/scripts/readiness_gate.py public", text)

def test_record_keeps_public_boundaries_explicit(self) -> None:
text = normalized_record_text()

self.assertIn("does not approve public benchmark reports", text)
self.assertIn("release artifacts", text)
self.assertIn("package publication", text)
self.assertIn("production positioning", text)
self.assertIn("Performance, quality, footprint, table-quality, and parser-quality claims remain blocked", text)

def test_record_avoids_local_private_paths(self) -> None:
text = record_text()

self.assertNotIn("/Users/", text)
self.assertNotIn("/private/tmp", text)
self.assertNotIn("/private/var", text)


if __name__ == "__main__":
unittest.main()
1 change: 1 addition & 0 deletions .github/scripts/test_milestone_b_internal_checks.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ def test_target_composes_current_internal_gates(self) -> None:
"$(PYTHON) schemas/test_font_policy_validation.py",
"$(PYTHON) .github/scripts/test_execution_status.py",
"$(PYTHON) .github/scripts/test_roadmap_status.py",
"$(PYTHON) .github/scripts/test_milestone_b_closeout_record.py",
"$(MAKE) verify-alpha PYTHON=$(PYTHON)",
"$(MAKE) layout-evaluator-alpha PYTHON=$(PYTHON)",
"$(MAKE) python-surface-test PYTHON=$(PYTHON)",
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ jobs:
run: python3 .github/scripts/test_execution_status.py
- name: roadmap status tests
run: python3 .github/scripts/test_roadmap_status.py
- name: Milestone B closeout validation record tests
run: python3 .github/scripts/test_milestone_b_closeout_record.py
- name: Gate Zero harness tests
run: python3 benchmarks/harness/test_run_gate_zero.py
- name: same-platform double-parse byte-diff
Expand Down
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ milestone-b-internal-checks:
$(PYTHON) schemas/test_font_policy_validation.py
$(PYTHON) .github/scripts/test_execution_status.py
$(PYTHON) .github/scripts/test_roadmap_status.py
$(PYTHON) .github/scripts/test_milestone_b_closeout_record.py
$(MAKE) verify-alpha PYTHON=$(PYTHON)
$(MAKE) layout-evaluator-alpha PYTHON=$(PYTHON)
$(MAKE) python-surface-test PYTHON=$(PYTHON)
Expand Down
3 changes: 3 additions & 0 deletions docs/validation/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ Records:
non-advisory `cargo-deny` policy checks pass; the follow-up advisory scan is recorded in
`advisory-scan-2026-06-16.md`, and release artifacts still need artifact-specific
license/NOTICE bundles.
- `milestone-b-closeout-validation-2026-06-17.md` - internal Milestone B closeout validation
passed through `make milestone-b-internal-checks`; public benchmark reports, release artifacts,
package publication, production positioning, and claim wording remain blocked.
- `public-evidence-scan-2026-06-15.md` - tracked evidence and benchmark-result locations were
scanned for private paths, hostnames, and generated Gate Zero output that belongs in
`ethos-bench`.
Expand Down
74 changes: 74 additions & 0 deletions docs/validation/milestone-b-closeout-validation-2026-06-17.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Milestone B Closeout Validation - 2026-06-17

## Purpose

Record the current internal Milestone B validation run after the status and roadmap closeout
guards landed on `main`.

This record covers the source tree's internal pre-alpha validation path only. It does not approve
public benchmark reports, release artifacts, package publication, production positioning, or
performance, quality, or footprint claims.

## Status

Status: **pass for current internal Milestone B validation, with public blockers unchanged**.

## Subject

- Repository: `docushell/ethos`
- Starting HEAD before this record: `cc1fda28d68c549dbf9a478aa89cbc99df7960ca`
- Scope: tracked source tree, committed fixtures, committed examples, CI/static guard wiring, and
public-boundary gates
- Excluded: benchmark-result publication, release artifacts, package publication, production
positioning, and external claim wording

## Commands

```sh
git switch main
git pull --ff-only
make milestone-b-internal-checks PYTHON=<jsonschema-venv>/bin/python
```

The aggregate target currently composes:

- `fixtures/validate_fixtures.py`
- `schemas/test_font_policy_validation.py`
- `.github/scripts/test_execution_status.py`
- `.github/scripts/test_roadmap_status.py`
- `make verify-alpha`
- `make layout-evaluator-alpha`
- `make python-surface-test`
- `.github/scripts/claims_gate.py`
- `.github/scripts/readiness_gate.py public`
- `git diff --check`

## Result

```text
fixture checks green
font policy validation tests green
execution status tests green
roadmap status tests green
verify-alpha green
layout-evaluator-alpha green
python surface tests green
claims gate green
public readiness: green
git diff --check green
```

## Remaining Boundaries

- Public benchmark reports remain blocked.
- Release artifacts and package publication remain blocked.
- Production positioning remains blocked.
- Performance, quality, footprint, table-quality, and parser-quality claims remain blocked.
- Cross-platform rendered image byte equality remains unclaimed.
- Broader parser/layout/table/OCR semantics remain future work outside this closeout record.

## Follow-up

Use `make milestone-b-internal-checks` as the internal closeout validation command until the next
milestone changes the validation contract. Contract changes should update the Make target, its
static guard, and any dated validation record that cites the target.
Loading