From fa28f4dc4d4f8f694656f587deff74bb8cc35030 Mon Sep 17 00:00:00 2001 From: docushell-admin Date: Wed, 17 Jun 2026 09:22:17 +0530 Subject: [PATCH 1/2] Guard roadmap closeout posture Signed-off-by: docushell-admin --- .github/scripts/test_ci_workflow.py | 1 + .github/scripts/test_roadmap_status.py | 60 ++++++++++++++++++++++++++ .github/workflows/ci.yml | 2 + docs/roadmap.md | 6 +++ 4 files changed, 69 insertions(+) create mode 100644 .github/scripts/test_roadmap_status.py diff --git a/.github/scripts/test_ci_workflow.py b/.github/scripts/test_ci_workflow.py index 689608e..2bd08a6 100644 --- a/.github/scripts/test_ci_workflow.py +++ b/.github/scripts/test_ci_workflow.py @@ -49,6 +49,7 @@ def test_ci_workflow_guard_is_run_by_ci(self) -> None: self.assertIn("python3 .github/scripts/test_ci_workflow.py", text) 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) if __name__ == "__main__": diff --git a/.github/scripts/test_roadmap_status.py b/.github/scripts/test_roadmap_status.py new file mode 100644 index 0000000..661305f --- /dev/null +++ b/.github/scripts/test_roadmap_status.py @@ -0,0 +1,60 @@ +#!/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] +ROADMAP = ROOT / "docs/roadmap.md" + + +def roadmap_text() -> str: + return ROADMAP.read_text(encoding="utf-8") + + +def normalized_roadmap_text() -> str: + return re.sub(r"\s+", " ", roadmap_text()) + + +class RoadmapStatusTests(unittest.TestCase): + def test_roadmap_points_to_execution_status_for_current_posture(self) -> None: + text = roadmap_text() + + self.assertIn("Current PM status and blockers: `docs/execution-status.md`.", text) + self.assertIn("Milestone B is in internal closeout", text) + + def test_closeout_note_keeps_public_boundaries_explicit(self) -> None: + text = normalized_roadmap_text() + + self.assertIn("does not approve public benchmark reports", text) + self.assertIn("releases, packages, production positioning", text) + self.assertIn("performance/quality/footprint claims", text) + + def test_milestone_b_still_precedes_milestone_c(self) -> None: + text = roadmap_text() + + milestone_b = text.index("| B | weeks 9-14 |") + milestone_c = text.index("| C | weeks 15-22 |") + self.assertLess(milestone_b, milestone_c) + + +if __name__ == "__main__": + unittest.main() diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c4add6c..e785053 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,6 +60,8 @@ jobs: run: python3 .github/scripts/test_milestone_b_internal_checks.py - name: execution status tests run: python3 .github/scripts/test_execution_status.py + - name: roadmap status tests + run: python3 .github/scripts/test_roadmap_status.py - name: Gate Zero harness tests run: python3 benchmarks/harness/test_run_gate_zero.py - name: same-platform double-parse byte-diff diff --git a/docs/roadmap.md b/docs/roadmap.md index 39fee24..f355f68 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -9,6 +9,12 @@ layer that includes a deterministic parser, not a parser that may later add veri Current PM status and blockers: `docs/execution-status.md`. +Milestone B is in internal closeout. The canonical status tracker records the +current pre-alpha trust-loop, layout/export, Python-surface, and determinism +validation posture plus the remaining external blockers. This closeout does not +approve public benchmark reports, releases, packages, production positioning, or +performance/quality/footprint claims. + | Milestone | Window | Contents | Gate | | --- | --- | --- | --- | | Week 0 | pre-kickoff | ADRs, governance, corpus freeze, CI bootstrap, competitor pins | All 11 rows done; clock starts | From 30291abe353923d27ff3276d41410871a88c458f Mon Sep 17 00:00:00 2001 From: docushell-admin Date: Wed, 17 Jun 2026 09:22:34 +0530 Subject: [PATCH 2/2] Include roadmap guard in Milestone B checks Signed-off-by: docushell-admin --- .github/scripts/test_milestone_b_internal_checks.py | 1 + Makefile | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/scripts/test_milestone_b_internal_checks.py b/.github/scripts/test_milestone_b_internal_checks.py index 3cd0d4c..d18d7a5 100644 --- a/.github/scripts/test_milestone_b_internal_checks.py +++ b/.github/scripts/test_milestone_b_internal_checks.py @@ -61,6 +61,7 @@ def test_target_composes_current_internal_gates(self) -> None: "$(PYTHON) fixtures/validate_fixtures.py", "$(PYTHON) schemas/test_font_policy_validation.py", "$(PYTHON) .github/scripts/test_execution_status.py", + "$(PYTHON) .github/scripts/test_roadmap_status.py", "$(MAKE) verify-alpha PYTHON=$(PYTHON)", "$(MAKE) layout-evaluator-alpha PYTHON=$(PYTHON)", "$(MAKE) python-surface-test PYTHON=$(PYTHON)", diff --git a/Makefile b/Makefile index f8dbc2f..abf4a9d 100644 --- a/Makefile +++ b/Makefile @@ -52,6 +52,7 @@ milestone-b-internal-checks: $(PYTHON) fixtures/validate_fixtures.py $(PYTHON) schemas/test_font_policy_validation.py $(PYTHON) .github/scripts/test_execution_status.py + $(PYTHON) .github/scripts/test_roadmap_status.py $(MAKE) verify-alpha PYTHON=$(PYTHON) $(MAKE) layout-evaluator-alpha PYTHON=$(PYTHON) $(MAKE) python-surface-test PYTHON=$(PYTHON)