diff --git a/.github/scripts/test_milestone_e_prep_guard_sequence_index.py b/.github/scripts/test_milestone_e_prep_guard_sequence_index.py index f444e81..b807c35 100644 --- a/.github/scripts/test_milestone_e_prep_guard_sequence_index.py +++ b/.github/scripts/test_milestone_e_prep_guard_sequence_index.py @@ -108,6 +108,7 @@ "$(PYTHON) .github/scripts/test_milestone_e_package_publication_pre_approval_gap_ledger.py", "$(PYTHON) .github/scripts/test_milestone_e_public_facing_readiness_ledger.py", "$(PYTHON) .github/scripts/test_milestone_e_public_beta_current_main_refresh_prep.py", + "$(PYTHON) .github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py", "$(PYTHON) .github/scripts/test_milestone_e_validation_command_index.py", "$(PYTHON) .github/scripts/test_milestone_e_validation_command_index_validation_record.py", "$(PYTHON) .github/scripts/test_milestone_e_validation_record_index.py", diff --git a/.github/scripts/test_milestone_e_prep_scope.py b/.github/scripts/test_milestone_e_prep_scope.py index 3759e02..9d1f1ac 100644 --- a/.github/scripts/test_milestone_e_prep_scope.py +++ b/.github/scripts/test_milestone_e_prep_scope.py @@ -407,6 +407,7 @@ def test_make_target_is_narrow_and_guarded(self) -> None: "$(PYTHON) .github/scripts/test_milestone_e_package_publication_pre_approval_gap_ledger.py", "$(PYTHON) .github/scripts/test_milestone_e_public_facing_readiness_ledger.py", "$(PYTHON) .github/scripts/test_milestone_e_public_beta_current_main_refresh_prep.py", + "$(PYTHON) .github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py", "$(PYTHON) .github/scripts/test_milestone_e_validation_command_index.py", "$(PYTHON) .github/scripts/test_milestone_e_validation_command_index_validation_record.py", "$(PYTHON) .github/scripts/test_milestone_e_validation_record_index.py", diff --git a/.github/scripts/test_milestone_e_public_approval_lane_blockers.py b/.github/scripts/test_milestone_e_public_approval_lane_blockers.py index a700b75..8a4ce75 100644 --- a/.github/scripts/test_milestone_e_public_approval_lane_blockers.py +++ b/.github/scripts/test_milestone_e_public_approval_lane_blockers.py @@ -82,9 +82,9 @@ } EXPECTED_PUBLIC_BETA_SOURCE = { "surface": "GitHub source repository docushell/ethos source-only evaluation", - "reviewed_commit": "d755e7c", - "merged_main_commit": "3f9e1c4", - "tree": "a9e913b0ba7ecd1567479b2ec773342868cba126", + "reviewed_commit": "902c423", + "merged_main_commit": "6019a97", + "tree": "f56fde854f6f6e4c4070209329f8c7b12310aa51", "boundary": "source-only clone, build, and validation commands only", } diff --git a/.github/scripts/test_milestone_e_public_beta_approval_prep.py b/.github/scripts/test_milestone_e_public_beta_approval_prep.py index 3da401c..5bfbfb6 100644 --- a/.github/scripts/test_milestone_e_public_beta_approval_prep.py +++ b/.github/scripts/test_milestone_e_public_beta_approval_prep.py @@ -62,9 +62,9 @@ ) EXPECTED_PUBLIC_BETA_SOURCE = { "surface": "GitHub source repository docushell/ethos source-only evaluation", - "reviewed_commit": "d755e7c", - "merged_main_commit": "3f9e1c4", - "tree": "a9e913b0ba7ecd1567479b2ec773342868cba126", + "reviewed_commit": "902c423", + "merged_main_commit": "6019a97", + "tree": "f56fde854f6f6e4c4070209329f8c7b12310aa51", "boundary": "source-only clone, build, and validation commands only", } EXPECTED_GATE = ".github/scripts/test_milestone_e_public_beta_approval_prep.py" diff --git a/.github/scripts/test_milestone_e_public_beta_current_main_refresh_prep.py b/.github/scripts/test_milestone_e_public_beta_current_main_refresh_prep.py index 504cfab..1fa2b1a 100644 --- a/.github/scripts/test_milestone_e_public_beta_current_main_refresh_prep.py +++ b/.github/scripts/test_milestone_e_public_beta_current_main_refresh_prep.py @@ -46,6 +46,16 @@ REFRESH_COMMIT = "9262b281ee2cfb7fb0c9adf9f70afafe624e6878" REFRESH_TREE = "9f18f9e40c57551aef9b0cb2a53641c87207546b" +PRIOR_READINESS_COMMIT = "847e12db42d4519665b1486ccb35c85fe01f00b0" +PRIOR_READINESS_TREE = "9d3701aa14d98017626583c2a0a0ef45ac0df79f" +CURRENT_APPROVED_MAIN = "6019a97651190182730453988dd4c75e828639fc" +PRE_REFRESH_SOURCE = { + "surface": "GitHub source repository docushell/ethos source-only evaluation", + "reviewed_commit": "d755e7c", + "merged_main_commit": "3f9e1c4", + "tree": "a9e913b0ba7ecd1567479b2ec773342868cba126", + "boundary": "source-only clone, build, and validation commands only", +} EXPECTED_BOUNDARY = [ "public reports remain blocked", "release artifacts remain blocked", @@ -140,11 +150,11 @@ def test_existing_public_beta_and_readiness_bindings_stay_separate(self) -> None public_beta = load_json(PUBLIC_BETA_PREP) readiness = load_json(READINESS_LEDGER) - self.assertEqual(public_beta["approved_public_beta_source"], prep["existing_public_beta_source"]) - self.assertEqual( - readiness["current_main_refresh_candidate"]["candidate_commit"], - prep["prior_readiness_ledger_candidate"]["candidate_commit"], - ) + self.assertEqual(PRE_REFRESH_SOURCE, prep["existing_public_beta_source"]) + self.assertNotEqual(public_beta["approved_public_beta_source"], prep["existing_public_beta_source"]) + self.assertEqual(PRIOR_READINESS_COMMIT, prep["prior_readiness_ledger_candidate"]["candidate_commit"]) + self.assertEqual(PRIOR_READINESS_TREE, prep["prior_readiness_ledger_candidate"]["candidate_tree"]) + self.assertEqual(CURRENT_APPROVED_MAIN, readiness["current_main_refresh_candidate"]["candidate_commit"]) self.assertNotEqual( prep["existing_public_beta_source"]["tree"], prep["refresh_candidate"]["candidate_tree"], diff --git a/.github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py b/.github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py new file mode 100644 index 0000000..9bf9066 --- /dev/null +++ b/.github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py @@ -0,0 +1,254 @@ +#!/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 json +import re +import subprocess +import unittest +from pathlib import Path + +from makefile_guard import target_block + + +ROOT = Path(__file__).resolve().parents[2] +PUBLIC_BETA_PREP = ROOT / "docs/milestone-e-public-beta-approval-prep.json" +LANE_BLOCKERS = ROOT / "docs/milestone-e-public-approval-lane-blockers.json" +READINESS_LEDGER = ROOT / "docs/milestone-e-public-facing-readiness-ledger.json" +REFRESH_PREP = ROOT / "docs/milestone-e-public-beta-current-main-refresh-prep.json" +RECORD = ( + ROOT + / "docs/validation/" + "milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md" +) +VALIDATION_README = ROOT / "docs/validation/README.md" +PREP_SCOPE = ROOT / "docs/milestone-e-prep-scope.md" +ROADMAP = ROOT / "docs/roadmap.md" +EXECUTION_STATUS = ROOT / "docs/execution-status.md" +CI_WORKFLOW = ROOT / ".github/workflows/ci.yml" + +REVIEWED_COMMIT = "902c423" +MERGED_MAIN_COMMIT = "6019a97" +MERGED_MAIN_FULL = "6019a97651190182730453988dd4c75e828639fc" +APPROVED_TREE = "f56fde854f6f6e4c4070209329f8c7b12310aa51" +APPROVED_SOURCE = { + "surface": "GitHub source repository docushell/ethos source-only evaluation", + "reviewed_commit": REVIEWED_COMMIT, + "merged_main_commit": MERGED_MAIN_COMMIT, + "tree": APPROVED_TREE, + "boundary": "source-only clone, build, and validation commands only", +} +APPROVED_WORDING = ( + "Ethos is public beta for source-only evaluation. It verifies whether AI citations are " + "grounded in document evidence across native Ethos JSON and supported foreign parser outputs. " + "Package publication, hosted surfaces, production positioning, and public benchmark claims " + "remain blocked." +) +RETAINED_BLOCKERS = [ + "Package publication remains blocked", + "Public installation remains blocked", + "Hosted surfaces remain blocked", + "Production positioning remains blocked", + "Public benchmark reports remain blocked", + "Public benchmark claims remain blocked", + "Release artifacts remain blocked", + "Binaries remain blocked", + "Wheels remain blocked", + "npm packages remain blocked", + "Crate publication remains blocked", + "Project-maintained PDFium builds remain blocked", + "Public reports remain blocked", + "Public result wording remains blocked", +] +REQUIRED_COMMANDS = [ + "python3 .github/scripts/test_milestone_e_public_beta_current_main_refresh_prep.py", + "python3 .github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py", + "python3 .github/scripts/test_public_surface_posture.py", + "python3 .github/scripts/claims_gate.py", + "cargo build --locked -p ethos-cli", + "make milestone-e-prep PYTHON=/bin/python", + "git diff --check", +] +FORBIDDEN_SCOPE_EXPANSION = [ + "package publication approved", + "public installation approved", + "hosted surface approved", + "hosted demo approved", + "production positioning approved", + "public benchmark report approved", + "public benchmark claims approved", + "release artifact approved", + "binaries approved", + "wheels approved", + "npm packages approved", + "crate publication approved", + "project-maintained PDFium builds approved", + "public result wording approved", + "performance validated", + "quality validated", + "footprint validated", + "table-quality validated", + "parser-quality validated", +] + + +def load_json(path: Path) -> dict: + return json.loads(path.read_text(encoding="utf-8")) + + +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 MilestoneEPublicBetaCurrentMainSourceOnlyApprovalTests(unittest.TestCase): + def test_canonical_public_beta_source_binding_is_refreshed(self) -> None: + public_beta = load_json(PUBLIC_BETA_PREP) + lane_blockers = load_json(LANE_BLOCKERS) + readiness = load_json(READINESS_LEDGER) + [public_beta_lane] = [ + lane for lane in lane_blockers["approval_lanes"] if lane["lane_id"] == "public-beta-approval" + ] + + self.assertEqual(APPROVED_SOURCE, public_beta["approved_public_beta_source"]) + self.assertEqual(APPROVED_SOURCE, lane_blockers["approved_public_beta_source"]) + self.assertEqual(APPROVED_SOURCE, readiness["approved_public_beta_source"]) + self.assertEqual(APPROVED_WORDING, public_beta["exact_approved_public_beta_wording"]) + self.assertEqual(APPROVED_WORDING, lane_blockers["exact_approved_public_beta_wording"]) + self.assertEqual(APPROVED_WORDING, public_beta_lane["allowed_wording"][0]) + self.assertEqual("approved_source_only_public_beta", public_beta["decision_status"]) + self.assertEqual("approved_source_only_public_beta", public_beta_lane["approval_status"]) + + def test_reviewed_branch_and_merged_main_share_approved_tree(self) -> None: + self.assertEqual(APPROVED_TREE, git("rev-parse", f"{REVIEWED_COMMIT}^{{tree}}")) + self.assertEqual(APPROVED_TREE, git("rev-parse", f"{MERGED_MAIN_COMMIT}^{{tree}}")) + self.assertEqual(MERGED_MAIN_FULL, git("rev-parse", MERGED_MAIN_COMMIT)) + subprocess.check_call( + ["git", "merge-base", "--is-ancestor", MERGED_MAIN_COMMIT, "HEAD"], + cwd=ROOT, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + + def test_readiness_ledger_records_refresh_approval_without_lane_expansion(self) -> None: + readiness = load_json(READINESS_LEDGER) + + self.assertEqual( + "current_main_source_only_public_beta_refresh_approved", + readiness["ledger_state"], + ) + self.assertEqual(MERGED_MAIN_FULL, readiness["validated_current_main"]["commit"]) + self.assertEqual(APPROVED_TREE, readiness["validated_current_main"]["tree"]) + self.assertIn( + "refreshed source-only public beta source state", + readiness["validated_current_main"]["candidate_status"], + ) + self.assertEqual(MERGED_MAIN_FULL, readiness["current_main_refresh_candidate"]["candidate_commit"]) + self.assertEqual(APPROVED_TREE, readiness["current_main_refresh_candidate"]["candidate_tree"]) + self.assertIn( + "package publication, public installation, hosted surfaces, production positioning, and public benchmark lanes remain blocked", + readiness["current_main_refresh_candidate"]["refresh_status"], + ) + self.assertIn("this ledger does not change the approved public beta wording", readiness["non_approvals"]) + self.assertIn( + "python3 .github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py", + readiness["required_gates"], + ) + + def test_refresh_prep_remains_historical_input_not_current_approval(self) -> None: + refresh_prep = load_json(REFRESH_PREP) + + self.assertEqual("current_main_refresh_prepared_approval_blocked", refresh_prep["decision_state"]) + self.assertEqual("9262b281ee2cfb7fb0c9adf9f70afafe624e6878", refresh_prep["refresh_candidate"]["candidate_commit"]) + self.assertEqual("9f18f9e40c57551aef9b0cb2a53641c87207546b", refresh_prep["refresh_candidate"]["candidate_tree"]) + self.assertNotEqual(APPROVED_SOURCE, refresh_prep["existing_public_beta_source"]) + + def test_approval_record_indexes_exact_surface_commands_and_exclusions(self) -> None: + readme = read(VALIDATION_README) + record = normalized(RECORD) + + self.assertIn(RECORD.name, readme) + self.assertIn("current-main source-only public beta approval validation", re.sub(r"\s+", " ", readme)) + self.assertIn("Validated source HEAD before this record: `6019a97`", read(RECORD)) + self.assertIn("Decision: approve current-main source-only public beta evaluation", record) + self.assertIn(f"Reviewed commit: `{REVIEWED_COMMIT}`", record) + self.assertIn(f"Merged main commit: `{MERGED_MAIN_COMMIT}`", record) + self.assertIn(f"Tree: `{APPROVED_TREE}`", record) + self.assertIn(APPROVED_WORDING, record) + for command in REQUIRED_COMMANDS: + self.assertIn(command, record) + for blocker in RETAINED_BLOCKERS: + self.assertIn(blocker, record) + + def test_docs_reference_current_main_source_only_approval(self) -> None: + for path in (PREP_SCOPE, ROADMAP, EXECUTION_STATUS, VALIDATION_README): + doc = normalized(path) + + self.assertIn("current-main source-only public beta", doc, str(path)) + self.assertIn("6019a97", doc, str(path)) + self.assertIn("package publication remains blocked", doc, str(path)) + + def test_make_and_ci_run_current_main_approval_after_refresh_prep(self) -> None: + make_block = target_block("milestone-e-prep") + ci = read(CI_WORKFLOW) + refresh_guard = "test_milestone_e_public_beta_current_main_refresh_prep.py" + approval_guard = "test_milestone_e_public_beta_current_main_source_only_approval.py" + command_guard = "test_milestone_e_validation_command_index.py" + + for text, prefix in ((make_block, "$(PYTHON) .github/scripts/"), (ci, "python3 .github/scripts/")): + self.assertIn(prefix + approval_guard, text) + self.assertEqual(1, text.count(prefix + approval_guard)) + self.assertLess(text.index(prefix + refresh_guard), text.index(prefix + approval_guard)) + self.assertLess(text.index(prefix + approval_guard), text.index(prefix + command_guard)) + + def test_approval_record_avoids_scope_expansion_language_and_private_paths(self) -> None: + text = ( + json.dumps(load_json(PUBLIC_BETA_PREP), sort_keys=True) + + json.dumps(load_json(LANE_BLOCKERS), sort_keys=True) + + json.dumps(load_json(READINESS_LEDGER), sort_keys=True) + + normalized(RECORD) + ).lower() + raw = read(RECORD) + read(PUBLIC_BETA_PREP) + read(LANE_BLOCKERS) + read(READINESS_LEDGER) + + for phrase in FORBIDDEN_SCOPE_EXPANSION: + self.assertNotIn(phrase, text) + self.assertNotIn("/Users/", raw) + self.assertNotIn("/private/tmp", raw) + self.assertNotIn("/private/var", raw) + self.assertNotIn("/var/folders", raw) + self.assertNotIn("saumildiwaker", raw) + self.assertNotIn("Desktop/Stuff", raw) + self.assertNotIn("project/repo/ethos", raw) + self.assertNotIn("docs/.roadmap.md.swp", raw) + self.assertNotIn("web/", raw) + + +if __name__ == "__main__": + unittest.main() diff --git a/.github/scripts/test_milestone_e_public_beta_source_only_approval.py b/.github/scripts/test_milestone_e_public_beta_source_only_approval.py index 6cc8fcc..2ee17f6 100644 --- a/.github/scripts/test_milestone_e_public_beta_source_only_approval.py +++ b/.github/scripts/test_milestone_e_public_beta_source_only_approval.py @@ -49,6 +49,13 @@ "tree": "a9e913b0ba7ecd1567479b2ec773342868cba126", "boundary": "source-only clone, build, and validation commands only", } +CURRENT_SOURCE = { + "surface": "GitHub source repository docushell/ethos source-only evaluation", + "reviewed_commit": "902c423", + "merged_main_commit": "6019a97", + "tree": "f56fde854f6f6e4c4070209329f8c7b12310aa51", + "boundary": "source-only clone, build, and validation commands only", +} FORBIDDEN_SCOPE_WORDING = [ "public reports are approved", "public result wording approved", @@ -116,7 +123,7 @@ def test_prep_and_ledger_record_exact_source_only_approval(self) -> None: for artifact in (prep, ledger): self.assertEqual("approved_source_only_public_beta", artifact.get("approval_status", public_beta_lane["approval_status"])) self.assertEqual(EXPECTED_WORDING, artifact["exact_approved_public_beta_wording"]) - self.assertEqual(EXPECTED_SOURCE, artifact["approved_public_beta_source"]) + self.assertEqual(CURRENT_SOURCE, artifact["approved_public_beta_source"]) self.assertEqual("approved_source_only_public_beta", prep["decision_status"]) self.assertEqual("approved_source_only_public_beta", public_beta_lane["approval_status"]) diff --git a/.github/scripts/test_milestone_e_public_facing_readiness_ledger.py b/.github/scripts/test_milestone_e_public_facing_readiness_ledger.py index b41c7e0..99c1887 100644 --- a/.github/scripts/test_milestone_e_public_facing_readiness_ledger.py +++ b/.github/scripts/test_milestone_e_public_facing_readiness_ledger.py @@ -34,7 +34,7 @@ RECORD = ( ROOT / "docs/validation/" - "milestone-e-public-facing-readiness-ledger-validation-2026-06-21.md" + "milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md" ) VALIDATION_README = ROOT / "docs/validation/README.md" PREP_SCOPE = ROOT / "docs/milestone-e-prep-scope.md" @@ -44,8 +44,8 @@ VALIDATE_EXAMPLES = ROOT / "schemas/validate_examples.py" CI_WORKFLOW = ROOT / ".github/workflows/ci.yml" -CURRENT_MAIN_COMMIT = "847e12db42d4519665b1486ccb35c85fe01f00b0" -CURRENT_MAIN_TREE = "9d3701aa14d98017626583c2a0a0ef45ac0df79f" +CURRENT_MAIN_COMMIT = "6019a97651190182730453988dd4c75e828639fc" +CURRENT_MAIN_TREE = "f56fde854f6f6e4c4070209329f8c7b12310aa51" EXPECTED_BOUNDARY = [ "public reports remain blocked", "release artifacts remain blocked", @@ -108,19 +108,22 @@ def git(*args: str) -> str: class MilestoneEPublicFacingReadinessLedgerTests(unittest.TestCase): - def test_ledger_records_current_main_without_new_approval(self) -> None: + def test_ledger_records_current_main_source_only_refresh_approval(self) -> None: ledger = load_json(LEDGER) self.assertEqual(1, ledger["schema_version"]) self.assertEqual("source-only-pre-alpha-internal-milestone-e-prep", ledger["status"]) self.assertEqual("public_facing_readiness_current_main_ledger", ledger["scope"]) self.assertEqual( - "current_main_readiness_recorded_without_new_approval", + "current_main_source_only_public_beta_refresh_approved", ledger["ledger_state"], ) self.assertEqual(CURRENT_MAIN_COMMIT, ledger["validated_current_main"]["commit"]) self.assertEqual(CURRENT_MAIN_TREE, ledger["validated_current_main"]["tree"]) - self.assertIn("refresh candidate only", ledger["validated_current_main"]["candidate_status"]) + self.assertIn( + "refreshed source-only public beta source state", + ledger["validated_current_main"]["candidate_status"], + ) self.assertEqual(EXPECTED_BOUNDARY, ledger["public_boundary"]) def test_current_main_binding_resolves_in_repository_history(self) -> None: @@ -140,7 +143,7 @@ def test_current_main_binding_resolves_in_repository_history(self) -> None: ledger["current_main_refresh_candidate"]["candidate_tree"], ) - def test_existing_public_beta_binding_stays_separate(self) -> None: + def test_public_beta_binding_refreshes_to_current_main(self) -> None: ledger = load_json(LEDGER) public_beta = load_json(PUBLIC_BETA_PREP) @@ -148,14 +151,14 @@ def test_existing_public_beta_binding_stays_separate(self) -> None: public_beta["approved_public_beta_source"], ledger["approved_public_beta_source"], ) - self.assertEqual("d755e7c", ledger["approved_public_beta_source"]["reviewed_commit"]) - self.assertEqual("3f9e1c4", ledger["approved_public_beta_source"]["merged_main_commit"]) - self.assertNotEqual( + self.assertEqual("902c423", ledger["approved_public_beta_source"]["reviewed_commit"]) + self.assertEqual("6019a97", ledger["approved_public_beta_source"]["merged_main_commit"]) + self.assertEqual( ledger["approved_public_beta_source"]["tree"], ledger["current_main_refresh_candidate"]["candidate_tree"], ) self.assertIn( - "requires dedicated source-only public beta refresh approval", + "dedicated source-only public beta refresh approval recorded", ledger["current_main_refresh_candidate"]["refresh_status"], ) @@ -182,10 +185,7 @@ def test_cross_lane_blockers_and_non_approvals_are_explicit(self) -> None: self.assertIn("hosted surfaces remain blocked", ledger["cross_lane_blockers"]) self.assertIn("production positioning remains blocked", ledger["cross_lane_blockers"]) self.assertIn("public benchmark claims remain blocked", ledger["cross_lane_blockers"]) - self.assertIn( - "this ledger does not refresh the reviewed public beta source state", - ledger["non_approvals"], - ) + self.assertIn("this ledger does not change the approved public beta wording", ledger["non_approvals"]) self.assertIn("this ledger does not approve package publication", ledger["non_approvals"]) self.assertIn("this ledger does not approve public installation", ledger["non_approvals"]) @@ -199,6 +199,7 @@ def test_schema_validation_covers_readiness_ledger(self) -> None: self.assertIn("package_publication_resolution_criteria", schema["required"]) self.assertEqual(14, schema["properties"]["cross_lane_blockers"]["minItems"]) self.assertEqual(12, schema["properties"]["non_approvals"]["minItems"]) + self.assertEqual(10, schema["properties"]["required_gates"]["maxItems"]) self.assertIn("ethos-milestone-e-public-facing-readiness-ledger.schema.json", validate_examples) self.assertIn("docs\" / \"milestone-e-public-facing-readiness-ledger.json", validate_examples) self.assertIn("ethos-milestone-e-public-facing-readiness-ledger.schema.json", schemas_readme) @@ -210,12 +211,15 @@ def test_validation_record_indexes_commands_and_boundaries(self) -> None: ledger = load_json(LEDGER) self.assertIn(RECORD.name, readme) - self.assertIn("public-facing readiness ledger validation", re.sub(r"\s+", " ", readme)) - self.assertIn("Validated source HEAD before this record: `847e12d`", read(RECORD)) + self.assertIn( + "current-main source-only public beta approval validation", + re.sub(r"\s+", " ", readme), + ) + self.assertIn("Validated source HEAD before this record: `6019a97`", read(RECORD)) for gate in ledger["required_gates"]: self.assertIn(gate, record) for blocker in ledger["cross_lane_blockers"]: - self.assertIn(blocker, record) + self.assertIn(blocker.lower(), record.lower()) self.assertIn("Ethos remains source-only pre-alpha", record) self.assertIn("Public reports remain blocked", record) self.assertIn("Public result wording remains blocked", record) @@ -226,7 +230,7 @@ def test_docs_reference_public_facing_readiness_ledger(self) -> None: self.assertIn("docs/milestone-e-public-facing-readiness-ledger.json", doc, str(path)) self.assertIn("public-facing readiness ledger", doc, str(path)) - self.assertIn("current-main refresh candidate", doc, str(path)) + self.assertIn("current-main source-only public beta", doc, str(path)) self.assertIn("package publication remains blocked", doc, str(path)) def test_make_and_ci_run_readiness_ledger_after_package_gap_ledger(self) -> None: diff --git a/.github/scripts/test_milestone_e_validation_record_index.py b/.github/scripts/test_milestone_e_validation_record_index.py index 5138a01..614b769 100644 --- a/.github/scripts/test_milestone_e_validation_record_index.py +++ b/.github/scripts/test_milestone_e_validation_record_index.py @@ -266,6 +266,10 @@ class RecordCoverage: "milestone-e-public-beta-current-main-refresh-prep-validation-2026-06-21.md", "test_milestone_e_public_beta_current_main_refresh_prep.py", ), + RecordCoverage( + "milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md", + "test_milestone_e_public_beta_current_main_source_only_approval.py", + ), RecordCoverage( "milestone-e-validation-command-index-validation-2026-06-20.md", "test_milestone_e_validation_command_index_validation_record.py", diff --git a/.github/scripts/test_public_surface_posture.py b/.github/scripts/test_public_surface_posture.py index 1681c2c..8de7ec2 100644 --- a/.github/scripts/test_public_surface_posture.py +++ b/.github/scripts/test_public_surface_posture.py @@ -44,8 +44,8 @@ def test_readme_status_matches_source_only_public_beta_scope(self) -> None: "public benchmark claims remain blocked.", text, ) - self.assertIn("d755e7c", text) - self.assertIn("3f9e1c4", text) + self.assertIn("902c423", text) + self.assertIn("6019a97", text) self.assertIn("published crates, wheels, npm packages, binaries, release artifacts", text) self.assertIn("project-maintained PDFium builds", text) self.assertIn("performance, footprint, quality", text) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3bd33a1..c9984ef 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -230,6 +230,8 @@ jobs: run: python3 .github/scripts/test_milestone_e_public_facing_readiness_ledger.py - name: Milestone E public beta current-main refresh prep tests run: python3 .github/scripts/test_milestone_e_public_beta_current_main_refresh_prep.py + - name: Milestone E public beta current-main source-only approval tests + run: python3 .github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py - name: Milestone E validation-command index tests run: python3 .github/scripts/test_milestone_e_validation_command_index.py - name: Milestone E validation-command index validation record tests diff --git a/Makefile b/Makefile index 9e4625b..c157bda 100644 --- a/Makefile +++ b/Makefile @@ -222,6 +222,7 @@ milestone-e-prep: $(PYTHON) .github/scripts/test_milestone_e_package_publication_pre_approval_gap_ledger.py $(PYTHON) .github/scripts/test_milestone_e_public_facing_readiness_ledger.py $(PYTHON) .github/scripts/test_milestone_e_public_beta_current_main_refresh_prep.py + $(PYTHON) .github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py $(PYTHON) .github/scripts/test_milestone_e_validation_command_index.py $(PYTHON) .github/scripts/test_milestone_e_validation_command_index_validation_record.py $(PYTHON) .github/scripts/test_milestone_e_validation_record_index.py diff --git a/README.md b/README.md index f9bf8ce..4fb6fa0 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ > **Status: source-only public beta evaluation.** > Ethos is public beta for source-only evaluation. It verifies whether AI citations are grounded in document evidence across native Ethos JSON and supported foreign parser outputs. Package publication, hosted surfaces, production positioning, and public benchmark claims remain blocked. > The approved public beta surface is this GitHub source repository only, pinned to reviewed commit -> `d755e7c` and merged main commit `3f9e1c4`, which have matching source trees. Excluded surfaces +> `902c423` and merged main commit `6019a97`, which have matching source trees. Excluded surfaces > include published crates, wheels, npm packages, binaries, release artifacts, hosted demos or APIs, > project-maintained PDFium builds, public benchmark reports, and performance, footprint, quality, > table-quality, or parser-quality claims. diff --git a/docs/execution-status.md b/docs/execution-status.md index 02fd3ac..e548281 100644 --- a/docs/execution-status.md +++ b/docs/execution-status.md @@ -11,7 +11,7 @@ blocker ledger records source-only public beta evaluation approval and keeps pac hosted surface, production positioning, public benchmark report, public benchmark claim, release-artifact, binary, wheel, npm package, crate publication, and project-maintained PDFium build lanes blocked. Public beta source-only evaluation is approved only for the GitHub source repository -surface reviewed at commit `d755e7c` and merged to main as source-equivalent commit `3f9e1c4`. +surface reviewed at commit `902c423` and merged to main as source-equivalent commit `6019a97`. Package publication remains blocked. Hosted surfaces remain blocked. Production positioning remains blocked. Public benchmark reports remain blocked. Public benchmark claims remain blocked. @@ -189,10 +189,12 @@ records close H1 and H2 only within their stated boundaries. ## Current Milestone Posture -Milestone A has an accepted internal Gate Zero decision for roadmap control, Milestone B is internally closed for the current source-tree validation scope, Milestone C has an internal artifact-validation closeout record, and Milestone D is internally closed for the current source-only pre-alpha scope. Milestone E prep is limited to the source-only boundary in `docs/milestone-e-prep-scope.md`, the internal fixture inventory in `docs/milestone-e-fixture-candidates.json`, the internal fixture-promotion criteria in `docs/milestone-e-fixture-promotion-criteria.json`, the internal trust-loop walkthrough plan in `docs/milestone-e-internal-trust-loop-walkthrough.json`, the internal trust-loop use protocol in `docs/milestone-e-internal-trust-loop-use-protocol.json`, the internal trust-loop rehearsal/evidence matrix in `docs/milestone-e-internal-trust-loop-rehearsal-evidence-matrix.json`, the internal trust-loop blocker ledger in `docs/milestone-e-internal-trust-loop-blocker-ledger.json`, the public approval lane blocker ledger in `docs/milestone-e-public-approval-lane-blockers.json`, public beta approval prep in `docs/milestone-e-public-beta-approval-prep.json`, public beta required-evidence records in `docs/validation/`, source-only public beta approval in `docs/validation/milestone-e-public-beta-source-only-approval-validation-2026-06-20.md`, package publication approval prep in `docs/milestone-e-package-publication-approval-prep.json`, package publication evidence records in `docs/validation/`, package publication metadata-readiness follow-up in `docs/validation/milestone-e-package-publication-metadata-readiness-closeout-validation-2026-06-21.md`, package publication dry-run/smoke follow-up in `docs/validation/milestone-e-package-publication-dry-run-smoke-closeout-validation-2026-06-21.md`, package publication version/tag policy follow-up in `docs/validation/milestone-e-package-publication-version-tag-policy-closeout-validation-2026-06-21.md`, package publication PDFium boundary follow-up in `docs/validation/milestone-e-package-publication-pdfium-boundary-closeout-validation-2026-06-21.md`, package publication dependency-ordering follow-up in `docs/validation/milestone-e-package-publication-dependency-ordering-closeout-validation-2026-06-21.md`, package publication manifest-migration prep follow-up in `docs/validation/milestone-e-package-publication-manifest-migration-prep-validation-2026-06-21.md`, package publication manifest-activation prep follow-up in `docs/validation/milestone-e-package-publication-manifest-activation-prep-validation-2026-06-21.md`, package publication registry-assembly prep follow-up in `docs/validation/milestone-e-package-publication-registry-assembly-prep-validation-2026-06-21.md`, package publication registry-assembly activation prep follow-up in `docs/validation/milestone-e-package-publication-registry-assembly-activation-prep-validation-2026-06-21.md`, package publication real-version-selection prep follow-up in `docs/validation/milestone-e-package-publication-real-version-selection-prep-validation-2026-06-21.md`, and package publication tag-creation prep follow-up in `docs/validation/milestone-e-package-publication-tag-creation-prep-validation-2026-06-21.md` until explicit blockers are resolved. The public beta approval prep lane approves only source-only public beta evaluation for the GitHub source repository. The package publication approval prep lane approves only internal Rust crate publication preparation for the five ADR-0006 reserved priority crates.io identifiers; it does not approve package publication. The package publication evidence records document current prep blockers and do not approve package publication. The metadata-readiness follow-up records README, NOTICE, manifest metadata, and include-list readiness for `ethos-core`, `ethos-verify`, and `ethos-pdf`; it does not approve package publication. The dry-run/smoke follow-up records local package assembly for `ethos-core` and source-tree checks for `ethos-verify` and `ethos-pdf`; public installation and package publication remain blocked. The version/tag policy follow-up records separation between source-tree version, reserved placeholder version, source snapshot tag, and future package tag namespace; real package version selection, package tag creation, public installation, and package publication remain blocked. The real-version-selection prep follow-up records a future SemVer candidate review boundary while selecting no package publication version; real package version selection approval, package tag creation, public installation, and package publication remain blocked. The tag-creation prep follow-up records a future package tag creation review boundary while creating no package tag; package tag creation, public installation, and package publication remain blocked. The PDFium boundary follow-up records the current source-tree `ethos-pdf` boundary; project-maintained PDFium builds, public installation, and package publication remain blocked. The dependency-ordering follow-up records the future dependent-candidate ordering constraint; registry-backed dependent package assembly, package dependency manifest migration, public installation, and package publication remain blocked. The manifest-migration prep follow-up records future manifest shape while current Cargo manifests remain unchanged; registry-backed dependent package assembly, package dependency manifest activation, public installation, and package publication remain blocked. The manifest-activation prep follow-up records future package dependency manifest activation review while current Cargo manifests remain unchanged; registry-backed dependent package assembly activation, package dependency manifest activation, public installation, and package publication remain blocked. The registry-assembly prep follow-up records future non-public dependent candidate assembly rehearsal while no registry is created and current Cargo manifests remain unchanged; registry-backed dependent package assembly activation, package dependency manifest activation, public installation, and package publication remain blocked. The registry-assembly activation prep follow-up records future registry-backed dependent package assembly activation review while no registry is created and no registry-backed assembly is activated; registry-backed dependent package assembly activation, public installation, and package publication remain blocked. The public-facing readiness ledger in `docs/milestone-e-public-facing-readiness-ledger.json`, schema-bound by `schemas/ethos-milestone-e-public-facing-readiness-ledger.schema.json`, records current main `847e12d` / tree `9d3701aa14d98017626583c2a0a0ef45ac0df79f` as a current-main refresh candidate only, keeps the reviewed source-only public beta binding at `d755e7c` / `3f9e1c4`, and retains package-publication resolution gaps while package publication remains blocked. The Milestone E prep source-only closeout record in `docs/validation/milestone-e-final-closeout-validation-2026-06-20.md` closes only that current internal prep boundary. The E prep JSON files are schema-bound, but that does not promote any fixture beyond internal source-only planning, does not refresh the reviewed source-only public beta source state, does not approve package publication, hosted surfaces, production positioning, public benchmark reports, or public benchmark claims, and does not resolve or soften blockers outside the source-only public beta approval and package prep approval boundaries. The product can demonstrate a narrow parser-backed grounding loop today, but the decision cannot be used as public benchmark credibility. +Milestone A has an accepted internal Gate Zero decision for roadmap control, Milestone B is internally closed for the current source-tree validation scope, Milestone C has an internal artifact-validation closeout record, and Milestone D is internally closed for the current source-only pre-alpha scope. Milestone E prep is limited to the source-only boundary in `docs/milestone-e-prep-scope.md`, the internal fixture inventory in `docs/milestone-e-fixture-candidates.json`, the internal fixture-promotion criteria in `docs/milestone-e-fixture-promotion-criteria.json`, the internal trust-loop walkthrough plan in `docs/milestone-e-internal-trust-loop-walkthrough.json`, the internal trust-loop use protocol in `docs/milestone-e-internal-trust-loop-use-protocol.json`, the internal trust-loop rehearsal/evidence matrix in `docs/milestone-e-internal-trust-loop-rehearsal-evidence-matrix.json`, the internal trust-loop blocker ledger in `docs/milestone-e-internal-trust-loop-blocker-ledger.json`, the public approval lane blocker ledger in `docs/milestone-e-public-approval-lane-blockers.json`, public beta approval prep in `docs/milestone-e-public-beta-approval-prep.json`, public beta required-evidence records in `docs/validation/`, source-only public beta approval in `docs/validation/milestone-e-public-beta-source-only-approval-validation-2026-06-20.md`, package publication approval prep in `docs/milestone-e-package-publication-approval-prep.json`, package publication evidence records in `docs/validation/`, package publication metadata-readiness follow-up in `docs/validation/milestone-e-package-publication-metadata-readiness-closeout-validation-2026-06-21.md`, package publication dry-run/smoke follow-up in `docs/validation/milestone-e-package-publication-dry-run-smoke-closeout-validation-2026-06-21.md`, package publication version/tag policy follow-up in `docs/validation/milestone-e-package-publication-version-tag-policy-closeout-validation-2026-06-21.md`, package publication PDFium boundary follow-up in `docs/validation/milestone-e-package-publication-pdfium-boundary-closeout-validation-2026-06-21.md`, package publication dependency-ordering follow-up in `docs/validation/milestone-e-package-publication-dependency-ordering-closeout-validation-2026-06-21.md`, package publication manifest-migration prep follow-up in `docs/validation/milestone-e-package-publication-manifest-migration-prep-validation-2026-06-21.md`, package publication manifest-activation prep follow-up in `docs/validation/milestone-e-package-publication-manifest-activation-prep-validation-2026-06-21.md`, package publication registry-assembly prep follow-up in `docs/validation/milestone-e-package-publication-registry-assembly-prep-validation-2026-06-21.md`, package publication registry-assembly activation prep follow-up in `docs/validation/milestone-e-package-publication-registry-assembly-activation-prep-validation-2026-06-21.md`, package publication real-version-selection prep follow-up in `docs/validation/milestone-e-package-publication-real-version-selection-prep-validation-2026-06-21.md`, and package publication tag-creation prep follow-up in `docs/validation/milestone-e-package-publication-tag-creation-prep-validation-2026-06-21.md` until explicit blockers are resolved. The public beta approval prep lane approves only source-only public beta evaluation for the GitHub source repository. The package publication approval prep lane approves only internal Rust crate publication preparation for the five ADR-0006 reserved priority crates.io identifiers; it does not approve package publication. The package publication evidence records document current prep blockers and do not approve package publication. The metadata-readiness follow-up records README, NOTICE, manifest metadata, and include-list readiness for `ethos-core`, `ethos-verify`, and `ethos-pdf`; it does not approve package publication. The dry-run/smoke follow-up records local package assembly for `ethos-core` and source-tree checks for `ethos-verify` and `ethos-pdf`; public installation and package publication remain blocked. The version/tag policy follow-up records separation between source-tree version, reserved placeholder version, source snapshot tag, and future package tag namespace; real package version selection, package tag creation, public installation, and package publication remain blocked. The real-version-selection prep follow-up records a future SemVer candidate review boundary while selecting no package publication version; real package version selection approval, package tag creation, public installation, and package publication remain blocked. The tag-creation prep follow-up records a future package tag creation review boundary while creating no package tag; package tag creation, public installation, and package publication remain blocked. The PDFium boundary follow-up records the current source-tree `ethos-pdf` boundary; project-maintained PDFium builds, public installation, and package publication remain blocked. The dependency-ordering follow-up records the future dependent-candidate ordering constraint; registry-backed dependent package assembly, package dependency manifest migration, public installation, and package publication remain blocked. The manifest-migration prep follow-up records future manifest shape while current Cargo manifests remain unchanged; registry-backed dependent package assembly, package dependency manifest activation, public installation, and package publication remain blocked. The manifest-activation prep follow-up records future package dependency manifest activation review while current Cargo manifests remain unchanged; registry-backed dependent package assembly activation, package dependency manifest activation, public installation, and package publication remain blocked. The registry-assembly prep follow-up records future non-public dependent candidate assembly rehearsal while no registry is created and current Cargo manifests remain unchanged; registry-backed dependent package assembly activation, package dependency manifest activation, public installation, and package publication remain blocked. The registry-assembly activation prep follow-up records future registry-backed dependent package assembly activation review while no registry is created and no registry-backed assembly is activated; registry-backed dependent package assembly activation, public installation, and package publication remain blocked. The public-facing readiness ledger in `docs/milestone-e-public-facing-readiness-ledger.json`, schema-bound by `schemas/ethos-milestone-e-public-facing-readiness-ledger.schema.json`, records current main `6019a97` / tree `f56fde854f6f6e4c4070209329f8c7b12310aa51` as the current-main source-only public beta source binding while retaining package-publication resolution gaps with package publication blocked. The Milestone E prep source-only closeout record in `docs/validation/milestone-e-final-closeout-validation-2026-06-20.md` closes only that current internal prep boundary. The E prep JSON files are schema-bound, but that does not promote any fixture beyond internal source-only planning, does not approve package publication, hosted surfaces, production positioning, public benchmark reports, or public benchmark claims, and does not resolve or soften blockers outside the source-only public beta approval and package prep approval boundaries. The product can demonstrate a narrow parser-backed grounding loop today, but the decision cannot be used as public benchmark credibility. The public beta current-main refresh prep in `docs/milestone-e-public-beta-current-main-refresh-prep.json`, schema-bound by `schemas/ethos-milestone-e-public-beta-current-main-refresh-prep.schema.json`, records current main `9262b28` / tree `9f18f9e40c57551aef9b0cb2a53641c87207546b` as a current-main refresh candidate only. This public beta current-main refresh prep does not refresh the reviewed source-only public beta source state, change the approved public beta wording, approve package publication, approve public installation, or soften any current public-facing blocker. +The current-main source-only public beta approval in `docs/validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md` records reviewed commit `902c423`, merged main commit `6019a97`, and tree `f56fde854f6f6e4c4070209329f8c7b12310aa51` as the refreshed GitHub source-repository public beta source binding. Package publication remains blocked, public installation remains blocked, hosted surfaces remain blocked, production positioning remains blocked, public benchmark reports remain blocked, public benchmark claims remain blocked, release artifacts remain blocked, and public result wording remains blocked. + | Work item | Current status | Remaining blocker | | --- | --- | --- | | PDFium Phase 1 profile | Landed: pinned profile, V8/XFA-disabled state, platform hashes, runtime library hashes, and provenance are recorded | Phase 2 project-maintained builds still block Public Beta | diff --git a/docs/milestone-e-prep-scope.md b/docs/milestone-e-prep-scope.md index fce69ba..8a17513 100644 --- a/docs/milestone-e-prep-scope.md +++ b/docs/milestone-e-prep-scope.md @@ -69,7 +69,7 @@ PDFium build lanes blocked; it is not public result wording. The public beta approval prep lane lives in `docs/milestone-e-public-beta-approval-prep.json` and is schema-bound by `schemas/ethos-milestone-e-public-beta-approval-prep.schema.json`. It records the source-only -public beta approval for reviewed commit `d755e7c` and merged main commit `3f9e1c4`, whose source +public beta approval for reviewed commit `902c423` and merged main commit `6019a97`, whose source trees match, and records the exact allowed wording, setup boundary, and exclusions. The public beta required-evidence records live in `docs/validation/milestone-e-public-beta-approval-decision-validation-2026-06-20.md`, @@ -95,14 +95,18 @@ PDFium packaging boundary evidence for that prep lane. They keep package publica The public-facing readiness ledger lives in `docs/milestone-e-public-facing-readiness-ledger.json` and is schema-bound by `schemas/ethos-milestone-e-public-facing-readiness-ledger.schema.json`. It records current main -`847e12d` / tree `9d3701aa14d98017626583c2a0a0ef45ac0df79f` as a current-main refresh candidate -only, keeps the reviewed source-only public beta binding at `d755e7c` / `3f9e1c4`, and retains +`6019a97` / tree `f56fde854f6f6e4c4070209329f8c7b12310aa51` as the current-main source-only +public beta source binding, keeps the exact public beta wording unchanged, and retains package-publication resolution gaps while package publication remains blocked. The public beta current-main refresh prep lane lives in `docs/milestone-e-public-beta-current-main-refresh-prep.json` and is schema-bound by `schemas/ethos-milestone-e-public-beta-current-main-refresh-prep.schema.json`. It records current main `9262b28` / tree `9f18f9e40c57551aef9b0cb2a53641c87207546b` as a current-main refresh candidate only and does not refresh the reviewed source-only public beta source state. +The current-main source-only public beta approval is recorded in +`docs/validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md`. +It pins reviewed commit `902c423`, merged main commit `6019a97`, and tree +`f56fde854f6f6e4c4070209329f8c7b12310aa51` for the same source-only GitHub repository surface. The metadata-readiness follow-up record under `docs/validation/` covers README, NOTICE, manifest metadata, and include-list readiness for `ethos-core`, `ethos-verify`, and `ethos-pdf` only. `ethos-doc` and `ethos-rag` remain reserved placeholders without in-tree package manifests, and @@ -287,9 +291,9 @@ or broad demo-generation workflows. - The package publication real-version-selection prep follow-up remains limited to future SemVer candidate review; no package publication version is selected, and real package version selection approval, package tag creation, public installation, and package publication remain blocked. -- The public-facing readiness ledger remains limited to current-main refresh candidate tracking and - package-publication gap retention; it does not refresh the reviewed source-only public beta source - state, approve package publication, approve public installation, or soften any current +- The public-facing readiness ledger records the current-main source-only public beta source binding + and package-publication gap retention; it does not approve package publication, approve public + installation, or soften any current public-facing blocker. - The public beta current-main refresh prep remains limited to refresh evidence preparation for current main `9262b28`; it does not change the approved public beta wording, refresh the reviewed diff --git a/docs/milestone-e-public-approval-lane-blockers.json b/docs/milestone-e-public-approval-lane-blockers.json index 7baa36e..db90e24 100644 --- a/docs/milestone-e-public-approval-lane-blockers.json +++ b/docs/milestone-e-public-approval-lane-blockers.json @@ -16,9 +16,9 @@ }, "approved_public_beta_source": { "surface": "GitHub source repository docushell/ethos source-only evaluation", - "reviewed_commit": "d755e7c", - "merged_main_commit": "3f9e1c4", - "tree": "a9e913b0ba7ecd1567479b2ec773342868cba126", + "reviewed_commit": "902c423", + "merged_main_commit": "6019a97", + "tree": "f56fde854f6f6e4c4070209329f8c7b12310aa51", "boundary": "source-only clone, build, and validation commands only" }, "public_boundary": [ diff --git a/docs/milestone-e-public-beta-approval-prep.json b/docs/milestone-e-public-beta-approval-prep.json index 96a2070..4e765ae 100644 --- a/docs/milestone-e-public-beta-approval-prep.json +++ b/docs/milestone-e-public-beta-approval-prep.json @@ -18,9 +18,9 @@ }, "approved_public_beta_source": { "surface": "GitHub source repository docushell/ethos source-only evaluation", - "reviewed_commit": "d755e7c", - "merged_main_commit": "3f9e1c4", - "tree": "a9e913b0ba7ecd1567479b2ec773342868cba126", + "reviewed_commit": "902c423", + "merged_main_commit": "6019a97", + "tree": "f56fde854f6f6e4c4070209329f8c7b12310aa51", "boundary": "source-only clone, build, and validation commands only" }, "public_boundary": [ @@ -37,7 +37,7 @@ ], "approval_scope": [ "approve source-only public beta evaluation for the GitHub source repository", - "pin public beta approval to reviewed commit d755e7c and merged main commit 3f9e1c4 with matching tree a9e913b0ba7ecd1567479b2ec773342868cba126", + "pin public beta approval to reviewed commit 902c423 and merged main commit 6019a97 with matching tree f56fde854f6f6e4c4070209329f8c7b12310aa51", "limit public beta operation to source checkout, local build, and source-tree validation commands", "keep package publication, hosted surfaces, production positioning, public benchmark reports, and public benchmark claims blocked", "exclude release artifacts, binaries, wheels, npm packages, crate publication, and project-maintained PDFium builds" diff --git a/docs/milestone-e-public-facing-readiness-ledger.json b/docs/milestone-e-public-facing-readiness-ledger.json index 532677b..7f0f3e6 100644 --- a/docs/milestone-e-public-facing-readiness-ledger.json +++ b/docs/milestone-e-public-facing-readiness-ledger.json @@ -2,24 +2,24 @@ "schema_version": 1, "status": "source-only-pre-alpha-internal-milestone-e-prep", "scope": "public_facing_readiness_current_main_ledger", - "ledger_state": "current_main_readiness_recorded_without_new_approval", + "ledger_state": "current_main_source_only_public_beta_refresh_approved", "validated_current_main": { - "commit": "847e12db42d4519665b1486ccb35c85fe01f00b0", - "tree": "9d3701aa14d98017626583c2a0a0ef45ac0df79f", - "candidate_status": "current main is recorded as a refresh candidate only; no new source-only public beta approval is granted by this ledger" + "commit": "6019a97651190182730453988dd4c75e828639fc", + "tree": "f56fde854f6f6e4c4070209329f8c7b12310aa51", + "candidate_status": "current main is recorded as the refreshed source-only public beta source state; no package, hosted, production, public-report, or public-benchmark approval is granted" }, "approved_public_beta_source": { "surface": "GitHub source repository docushell/ethos source-only evaluation", - "reviewed_commit": "d755e7c", - "merged_main_commit": "3f9e1c4", - "tree": "a9e913b0ba7ecd1567479b2ec773342868cba126", + "reviewed_commit": "902c423", + "merged_main_commit": "6019a97", + "tree": "f56fde854f6f6e4c4070209329f8c7b12310aa51", "boundary": "source-only clone, build, and validation commands only" }, "current_main_refresh_candidate": { "surface": "GitHub source repository docushell/ethos source-only evaluation", - "candidate_commit": "847e12db42d4519665b1486ccb35c85fe01f00b0", - "candidate_tree": "9d3701aa14d98017626583c2a0a0ef45ac0df79f", - "refresh_status": "requires dedicated source-only public beta refresh approval before current main is treated as the reviewed public beta source state", + "candidate_commit": "6019a97651190182730453988dd4c75e828639fc", + "candidate_tree": "f56fde854f6f6e4c4070209329f8c7b12310aa51", + "refresh_status": "dedicated source-only public beta refresh approval recorded for current main; package publication, public installation, hosted surfaces, production positioning, and public benchmark lanes remain blocked", "required_refresh_inputs": [ "dedicated source-only public beta refresh decision record", "exact refreshed source commit and tree", @@ -70,7 +70,7 @@ "broader public wording remains blocked" ], "non_approvals": [ - "this ledger does not refresh the reviewed public beta source state", + "this ledger does not change the approved public beta wording", "this ledger does not approve package publication", "this ledger does not approve public installation", "this ledger does not select a package publication version", @@ -100,6 +100,7 @@ "python3 .github/scripts/test_milestone_e_public_beta_approval_prep.py", "python3 .github/scripts/test_milestone_e_package_publication_approval_prep.py", "python3 .github/scripts/test_milestone_e_package_publication_pre_approval_gap_ledger.py", + "python3 .github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py", "python3 schemas/validate_examples.py", "python3 .github/scripts/test_public_surface_posture.py", "python3 .github/scripts/claims_gate.py", @@ -107,5 +108,5 @@ "git diff --check" ], "gate_script": ".github/scripts/test_milestone_e_public_facing_readiness_ledger.py", - "validation_record": "docs/validation/milestone-e-public-facing-readiness-ledger-validation-2026-06-21.md" + "validation_record": "docs/validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md" } diff --git a/docs/roadmap.md b/docs/roadmap.md index 662f8a0..c4deff7 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -94,8 +94,8 @@ The public beta approval prep lane is recorded in [`docs/milestone-e-public-beta-approval-prep.json`](milestone-e-public-beta-approval-prep.json) and schema-bound by [`schemas/ethos-milestone-e-public-beta-approval-prep.schema.json`](../schemas/ethos-milestone-e-public-beta-approval-prep.schema.json); -source-only public beta evaluation is approved for reviewed commit `d755e7c` and merged main -commit `3f9e1c4`, whose source trees match. +source-only public beta evaluation is approved for reviewed commit `902c423` and merged main +commit `6019a97`, whose source trees match. The current public beta required-evidence records are indexed under `docs/validation/` for approval decision review, engineering blocker review, public setup path review, and PDFium build-path review; they are superseded by the source-only public beta approval record and remain evidence for the @@ -146,10 +146,9 @@ The public-facing readiness ledger is recorded in [`docs/milestone-e-public-facing-readiness-ledger.json`](milestone-e-public-facing-readiness-ledger.json) and schema-bound by [`schemas/ethos-milestone-e-public-facing-readiness-ledger.schema.json`](../schemas/ethos-milestone-e-public-facing-readiness-ledger.schema.json); -it records current main `847e12d` / tree `9d3701aa14d98017626583c2a0a0ef45ac0df79f` as a -current-main refresh candidate only, keeps the reviewed source-only public beta binding at -`d755e7c` / `3f9e1c4`, and retains package-publication resolution gaps while package publication -remains blocked. +it records current main `6019a97` / tree `f56fde854f6f6e4c4070209329f8c7b12310aa51` as the +current-main source-only public beta source binding, keeps the exact public beta wording unchanged, +and retains package-publication resolution gaps while package publication remains blocked. The public beta current-main refresh prep lane is recorded in [`docs/milestone-e-public-beta-current-main-refresh-prep.json`](milestone-e-public-beta-current-main-refresh-prep.json) and schema-bound by @@ -157,6 +156,10 @@ and schema-bound by it records current main `9262b28` / tree `9f18f9e40c57551aef9b0cb2a53641c87207546b` as a current-main refresh candidate only and does not refresh the reviewed source-only public beta source state. +The current-main source-only public beta approval is recorded in +[`docs/validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md`](validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md) +for reviewed commit `902c423`, merged main commit `6019a97`, and tree +`f56fde854f6f6e4c4070209329f8c7b12310aa51`. This prep only identifies tracked trust-loop fixture candidates and guard wiring for internal continuation; blocked-output alignment keeps the current trust-loop protocol, rehearsal/evidence matrix, blocker ledger, and matching schemas on the same explicit blockers, while evidence-lane @@ -199,7 +202,7 @@ public-facing claims. | B | weeks 9-14 | **`ethos verify` alpha first**: native Ethos JSON + synthetic and pinned real OpenDataLoader verification demos, stale fingerprint checks, capability-limited reports, deterministic evidence matching including split-quote coverage, explicit unsupported non-v1 claim reporting, adapter structure diagnostics; then reading order, blocks, headings, lists, Markdown/text exporters, Python wheel scaffold, quality dashboard, Windows x64 nightly determinism | [13-B exit checklist](milestone-b-exit-checklist.md) | | C | weeks 15-22 | Simple/bordered tables; RAG chunker + citations; non-text region coordinates; security report + default-chunk exclusion; debug overlay; internal benchmark snapshot | Current artifact-validation checkpoint recorded in [Milestone C closeout validation](validation/milestone-c-closeout-validation-2026-06-18.md); broader debug/crop/table follow-ups remain explicit | | D | weeks 23-30 | [`verify_citations` v1 contract prep](milestone-d-verify-citations-contract.md); [`claim_kind_boundary` v1 contract prep](milestone-d-claim-kind-boundary-contract.md); [`grounding_source` v1 contract prep](milestone-d-grounding-source-contract.md); [`capability_downgrade` v1 contract prep](milestone-d-capability-downgrade-contract.md); [`opendataloader_adapter_shape` v1 contract prep](milestone-d-opendataloader-adapter-shape-contract.md); [`crop_element` v1 contract prep](milestone-d-crop-element-contract.md) plus internal resolver and source-bound CLI/Python descriptor/rendered carriers; [`crop_element_surface_shape` v1 contract prep](milestone-d-crop-element-surface-shape-contract.md); [`sandbox_subprocess` v1 contract prep](milestone-d-sandbox-subprocess-contract.md); [contract closeout validation](validation/milestone-d-contract-closeout-validation-2026-06-19.md); [final closeout validation](validation/milestone-d-final-closeout-validation-2026-06-19.md); Node/MCP/hosted crop surfaces, sandbox-backed crop behavior, foreign-adapter crop coordinates, and cross-platform rendered-crop byte identity are explicit post-D blockers, not D closeout requirements | 13-D exit complete for source-only pre-alpha scope | -| E | weeks 31-40 | Initial source-only prep scope in [`docs/milestone-e-prep-scope.md`](milestone-e-prep-scope.md), with current internal prep closeout recorded in [`docs/validation/milestone-e-final-closeout-validation-2026-06-20.md`](validation/milestone-e-final-closeout-validation-2026-06-20.md); source-only public beta evaluation is tracked in [`docs/milestone-e-public-beta-approval-prep.json`](milestone-e-public-beta-approval-prep.json) with exact wording and exclusions; package publication approval prep is tracked in [`docs/milestone-e-package-publication-approval-prep.json`](milestone-e-package-publication-approval-prep.json) as internal Rust crate publication prep only, with evidence, metadata-readiness, dry-run/smoke, version/tag policy, PDFium boundary, and dependency-ordering records under `docs/validation/`; current-main public-facing readiness is tracked in [`docs/milestone-e-public-facing-readiness-ledger.json`](milestone-e-public-facing-readiness-ledger.json) without approving a refreshed source-only public beta source state or package publication; current-main source-only public beta refresh prep is tracked in [`docs/milestone-e-public-beta-current-main-refresh-prep.json`](milestone-e-public-beta-current-main-refresh-prep.json) without changing approved wording or approving package publication; actual package publication, later public-report, project-maintained PDFium build, stable CLI/Python docs, and hosted demo work remain blocked on explicit claim-audit and release-scope decisions | Release 1 claim audit + source-only public-beta checkpoint | +| E | weeks 31-40 | Initial source-only prep scope in [`docs/milestone-e-prep-scope.md`](milestone-e-prep-scope.md), with current internal prep closeout recorded in [`docs/validation/milestone-e-final-closeout-validation-2026-06-20.md`](validation/milestone-e-final-closeout-validation-2026-06-20.md); source-only public beta evaluation is tracked in [`docs/milestone-e-public-beta-approval-prep.json`](milestone-e-public-beta-approval-prep.json) with exact wording and exclusions; current-main source-only public beta approval is recorded in [`docs/validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md`](validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md); package publication approval prep is tracked in [`docs/milestone-e-package-publication-approval-prep.json`](milestone-e-package-publication-approval-prep.json) as internal Rust crate publication prep only, with evidence, metadata-readiness, dry-run/smoke, version/tag policy, PDFium boundary, and dependency-ordering records under `docs/validation/`; current-main public-facing readiness is tracked in [`docs/milestone-e-public-facing-readiness-ledger.json`](milestone-e-public-facing-readiness-ledger.json) without approving package publication; current-main source-only public beta refresh prep is tracked in [`docs/milestone-e-public-beta-current-main-refresh-prep.json`](milestone-e-public-beta-current-main-refresh-prep.json) without changing approved wording or approving package publication; actual package publication, later public-report, project-maintained PDFium build, stable CLI/Python docs, and hosted demo work remain blocked on explicit claim-audit and release-scope decisions | Release 1 claim audit + source-only public-beta checkpoint | | F / Release 2 | post-E | Complex tables, formula/LaTeX, chart classification, optional enrichment modules (never base) | Scoped after E from beta fixtures | Fallback charter: ADR-0005 selected `PROCEED`. If a future Gate Zero successor decision rejects diff --git a/docs/validation/README.md b/docs/validation/README.md index 9a2c816..7e573f0 100644 --- a/docs/validation/README.md +++ b/docs/validation/README.md @@ -339,6 +339,13 @@ recording the exact current-main source candidate and required follow-up evidenc candidate artifact for commit `9262b28` / tree `9f18f9e40c57551aef9b0cb2a53641c87207546b`; refreshed reviewed source-only public beta state, public installation, and package publication remain blocked. +- `milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md` - + current-main source-only public beta approval validation recorded reviewed commit `902c423`, + merged main commit `6019a97`, and tree `f56fde854f6f6e4c4070209329f8c7b12310aa51` as the + refreshed GitHub source-repository public beta source binding; package publication, public + installation, hosted surfaces, production positioning, public benchmark reports, public + benchmark claims, release artifacts, binaries, wheels, npm packages, crate publication, + project-maintained PDFium builds, public reports, and public result wording remain blocked. - `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 diff --git a/docs/validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md b/docs/validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md new file mode 100644 index 0000000..04aaf76 --- /dev/null +++ b/docs/validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md @@ -0,0 +1,119 @@ +# Milestone E Public Beta Current-Main Source-Only Approval Validation - 2026-06-21 + +## Purpose + +Record the dedicated approval decision for refreshing the Public beta approval lane to the current +main source state. + +This record approves only source-only public beta evaluation for the GitHub source repository at +the reviewed branch commit and squash-merged main commit named below. It does not approve package +publication, public installation, hosted surfaces, production positioning, public benchmark reports, +public benchmark claims, release artifacts, binaries, wheels, npm packages, crate publication, +project-maintained PDFium builds, public reports, public result wording, or wording beyond the +exact approved public beta sentence. ADR-0005 remains an internal continuation decision only. + +## Status + +Status: **pass for current-main source-only public beta approval validation**. + +Decision: approve current-main source-only public beta evaluation. + +Ethos remains source-only pre-alpha outside this approved source-only public beta surface. + +## Subject + +- Repository: `docushell/ethos` +- Validated source HEAD before this record: `6019a97` +- Lane: public beta approval +- Surface: GitHub source repository `docushell/ethos` +- Reviewed commit: `902c423` +- Merged main commit: `6019a97` +- Tree: `f56fde854f6f6e4c4070209329f8c7b12310aa51` +- Approval owner: docushell-admin acting as decider + +## Exact Approved Wording + +Ethos is public beta for source-only evaluation. It verifies whether AI citations are grounded in +document evidence across native Ethos JSON and supported foreign parser outputs. Package +publication, hosted surfaces, production positioning, and public benchmark claims remain blocked. + +## Exact Approved Surface + +The approved surface remains limited to source-only evaluation through the GitHub source +repository. Users may clone the source, read source-tree docs, build the CLI locally, and run +source-tree validation or setup commands. + +Approved source-tree commands for this surface: + +```sh +rustup show +cargo build --locked -p ethos-cli +./target/debug/ethos --help +make verify-alpha +./target/debug/ethos verify schemas/examples/document.example.json \ + --citations examples/verify/native_grounded_citations.json \ + --fail-on-ungrounded \ + --out /tmp/ethos-native-verification-report.json +``` + +## Refresh Basis + +- `docs/milestone-e-public-beta-current-main-refresh-prep.json` recorded the required refresh prep + boundary before approval. +- The reviewed branch commit `902c423` and merged main commit `6019a97` have the same source tree: + `f56fde854f6f6e4c4070209329f8c7b12310aa51`. +- Public-surface posture, claims, Milestone E prep, and source-checkout build gates passed before + this decision record. +- The exact approved public beta wording is unchanged. + +## Explicit Exclusions + +- Package publication remains blocked. +- Public installation remains blocked. +- Real-version cargo publish remains blocked. +- Hosted surfaces remain blocked. +- Production positioning remains blocked. +- Public benchmark reports remain blocked. +- Public benchmark claims remain blocked. +- Release artifacts remain blocked. +- Binaries remain blocked. +- Wheels remain blocked. +- npm packages remain blocked. +- Crate publication remains blocked. +- Project-maintained PDFium builds remain blocked. +- Broader public wording remains blocked. +- Public reports remain blocked. +- Public result wording remains blocked. +- Performance claims remain blocked. +- Quality claims remain blocked. +- Footprint claims remain blocked. +- Table-quality claims remain blocked. +- Parser-quality claims remain blocked. + +## Commands + +```sh +python3 .github/scripts/test_milestone_e_public_facing_readiness_ledger.py +python3 .github/scripts/test_milestone_e_public_beta_approval_prep.py +python3 .github/scripts/test_milestone_e_package_publication_approval_prep.py +python3 .github/scripts/test_milestone_e_package_publication_pre_approval_gap_ledger.py +python3 .github/scripts/test_milestone_e_public_beta_current_main_refresh_prep.py +python3 .github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py +python3 schemas/validate_examples.py +python3 .github/scripts/test_public_surface_posture.py +python3 .github/scripts/claims_gate.py +cargo build --locked -p ethos-cli +make milestone-e-prep PYTHON=/bin/python +git diff --check +``` + +## Result + +```text +Current-main source-only public beta approval validation passed +Reviewed branch commit and merged main commit have the same source tree +Public-surface posture and claims gates passed +Milestone E prep target passed +Source-checkout CLI build passed +git diff --check passed +``` diff --git a/schemas/ethos-milestone-e-public-approval-lane-blockers.schema.json b/schemas/ethos-milestone-e-public-approval-lane-blockers.schema.json index 4db46d7..d29956e 100644 --- a/schemas/ethos-milestone-e-public-approval-lane-blockers.schema.json +++ b/schemas/ethos-milestone-e-public-approval-lane-blockers.schema.json @@ -99,9 +99,9 @@ "surface": { "const": "GitHub source repository docushell/ethos source-only evaluation" }, - "reviewed_commit": { "const": "d755e7c" }, - "merged_main_commit": { "const": "3f9e1c4" }, - "tree": { "const": "a9e913b0ba7ecd1567479b2ec773342868cba126" }, + "reviewed_commit": { "const": "902c423" }, + "merged_main_commit": { "const": "6019a97" }, + "tree": { "const": "f56fde854f6f6e4c4070209329f8c7b12310aa51" }, "boundary": { "const": "source-only clone, build, and validation commands only" } } }, diff --git a/schemas/ethos-milestone-e-public-beta-approval-prep.schema.json b/schemas/ethos-milestone-e-public-beta-approval-prep.schema.json index 3dc7064..481dba1 100644 --- a/schemas/ethos-milestone-e-public-beta-approval-prep.schema.json +++ b/schemas/ethos-milestone-e-public-beta-approval-prep.schema.json @@ -132,9 +132,9 @@ "surface": { "const": "GitHub source repository docushell/ethos source-only evaluation" }, - "reviewed_commit": { "const": "d755e7c" }, - "merged_main_commit": { "const": "3f9e1c4" }, - "tree": { "const": "a9e913b0ba7ecd1567479b2ec773342868cba126" }, + "reviewed_commit": { "const": "902c423" }, + "merged_main_commit": { "const": "6019a97" }, + "tree": { "const": "f56fde854f6f6e4c4070209329f8c7b12310aa51" }, "boundary": { "const": "source-only clone, build, and validation commands only" } } }, @@ -155,7 +155,7 @@ "approval_scope": { "enum": [ "approve source-only public beta evaluation for the GitHub source repository", - "pin public beta approval to reviewed commit d755e7c and merged main commit 3f9e1c4 with matching tree a9e913b0ba7ecd1567479b2ec773342868cba126", + "pin public beta approval to reviewed commit 902c423 and merged main commit 6019a97 with matching tree f56fde854f6f6e4c4070209329f8c7b12310aa51", "limit public beta operation to source checkout, local build, and source-tree validation commands", "keep package publication, hosted surfaces, production positioning, public benchmark reports, and public benchmark claims blocked", "exclude release artifacts, binaries, wheels, npm packages, crate publication, and project-maintained PDFium builds" diff --git a/schemas/ethos-milestone-e-public-facing-readiness-ledger.schema.json b/schemas/ethos-milestone-e-public-facing-readiness-ledger.schema.json index 14b6d60..22c7fda 100644 --- a/schemas/ethos-milestone-e-public-facing-readiness-ledger.schema.json +++ b/schemas/ethos-milestone-e-public-facing-readiness-ledger.schema.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "urn:ethos:schema:milestone-e-public-facing-readiness-ledger:1", "title": "Ethos Milestone E public-facing readiness ledger", - "description": "Source-only Milestone E ledger for recording current-main public-facing readiness without approving a refreshed source-only public beta source state, package publication, public installation, hosted surfaces, production positioning, or public benchmark surfaces.", + "description": "Source-only Milestone E ledger for recording current-main public-facing readiness with a refreshed source-only public beta source binding while keeping package publication, public installation, hosted surfaces, production positioning, and public benchmark surfaces blocked.", "type": "object", "required": [ "schema_version", @@ -25,7 +25,7 @@ "schema_version": { "const": 1 }, "status": { "const": "source-only-pre-alpha-internal-milestone-e-prep" }, "scope": { "const": "public_facing_readiness_current_main_ledger" }, - "ledger_state": { "const": "current_main_readiness_recorded_without_new_approval" }, + "ledger_state": { "const": "current_main_source_only_public_beta_refresh_approved" }, "validated_current_main": { "$ref": "#/$defs/validated_current_main" }, "approved_public_beta_source": { "$ref": "#/$defs/approved_public_beta_source" }, "current_main_refresh_candidate": { "$ref": "#/$defs/current_main_refresh_candidate" }, @@ -55,8 +55,8 @@ }, "required_gates": { "type": "array", - "minItems": 9, - "maxItems": 9, + "minItems": 10, + "maxItems": 10, "items": { "$ref": "#/$defs/required_gate" }, "uniqueItems": true }, @@ -64,7 +64,7 @@ "const": ".github/scripts/test_milestone_e_public_facing_readiness_ledger.py" }, "validation_record": { - "const": "docs/validation/milestone-e-public-facing-readiness-ledger-validation-2026-06-21.md" + "const": "docs/validation/milestone-e-public-beta-current-main-source-only-approval-validation-2026-06-21.md" } }, "$defs": { @@ -73,10 +73,10 @@ "required": ["commit", "tree", "candidate_status"], "additionalProperties": false, "properties": { - "commit": { "const": "847e12db42d4519665b1486ccb35c85fe01f00b0" }, - "tree": { "const": "9d3701aa14d98017626583c2a0a0ef45ac0df79f" }, + "commit": { "const": "6019a97651190182730453988dd4c75e828639fc" }, + "tree": { "const": "f56fde854f6f6e4c4070209329f8c7b12310aa51" }, "candidate_status": { - "const": "current main is recorded as a refresh candidate only; no new source-only public beta approval is granted by this ledger" + "const": "current main is recorded as the refreshed source-only public beta source state; no package, hosted, production, public-report, or public-benchmark approval is granted" } } }, @@ -88,9 +88,9 @@ "surface": { "const": "GitHub source repository docushell/ethos source-only evaluation" }, - "reviewed_commit": { "const": "d755e7c" }, - "merged_main_commit": { "const": "3f9e1c4" }, - "tree": { "const": "a9e913b0ba7ecd1567479b2ec773342868cba126" }, + "reviewed_commit": { "const": "902c423" }, + "merged_main_commit": { "const": "6019a97" }, + "tree": { "const": "f56fde854f6f6e4c4070209329f8c7b12310aa51" }, "boundary": { "const": "source-only clone, build, and validation commands only" } } }, @@ -108,10 +108,10 @@ "surface": { "const": "GitHub source repository docushell/ethos source-only evaluation" }, - "candidate_commit": { "const": "847e12db42d4519665b1486ccb35c85fe01f00b0" }, - "candidate_tree": { "const": "9d3701aa14d98017626583c2a0a0ef45ac0df79f" }, + "candidate_commit": { "const": "6019a97651190182730453988dd4c75e828639fc" }, + "candidate_tree": { "const": "f56fde854f6f6e4c4070209329f8c7b12310aa51" }, "refresh_status": { - "const": "requires dedicated source-only public beta refresh approval before current main is treated as the reviewed public beta source state" + "const": "dedicated source-only public beta refresh approval recorded for current main; package publication, public installation, hosted surfaces, production positioning, and public benchmark lanes remain blocked" }, "required_refresh_inputs": { "type": "array", @@ -199,7 +199,7 @@ }, "non_approval": { "enum": [ - "this ledger does not refresh the reviewed public beta source state", + "this ledger does not change the approved public beta wording", "this ledger does not approve package publication", "this ledger does not approve public installation", "this ledger does not select a package publication version", @@ -233,6 +233,7 @@ "python3 .github/scripts/test_milestone_e_public_beta_approval_prep.py", "python3 .github/scripts/test_milestone_e_package_publication_approval_prep.py", "python3 .github/scripts/test_milestone_e_package_publication_pre_approval_gap_ledger.py", + "python3 .github/scripts/test_milestone_e_public_beta_current_main_source_only_approval.py", "python3 schemas/validate_examples.py", "python3 .github/scripts/test_public_surface_posture.py", "python3 .github/scripts/claims_gate.py",