From 9fe00c373fffd6ca114766b0c1556913bd1eb0f2 Mon Sep 17 00:00:00 2001 From: Saumil Diwaker Date: Mon, 22 Jun 2026 01:14:32 +0530 Subject: [PATCH] Record package approval decision refresh Signed-off-by: Saumil Diwaker --- ...e_publication_approval_decision_refresh.py | 222 ++++++++++++++++++ ...one_e_package_publication_approval_prep.py | 1 + ...t_milestone_e_prep_guard_sequence_index.py | 1 + .../scripts/test_milestone_e_prep_scope.py | 1 + ...est_milestone_e_validation_record_index.py | 19 ++ .github/workflows/ci.yml | 2 + Makefile | 1 + docs/execution-status.md | 2 + ...e-e-package-publication-approval-prep.json | 3 +- docs/milestone-e-prep-scope.md | 10 + docs/roadmap.md | 5 + docs/validation/README.md | 5 + ...-decision-refresh-validation-2026-06-22.md | 130 ++++++++++ ...kage-publication-approval-prep.schema.json | 6 +- 14 files changed, 406 insertions(+), 2 deletions(-) create mode 100644 .github/scripts/test_milestone_e_package_publication_approval_decision_refresh.py create mode 100644 docs/validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md diff --git a/.github/scripts/test_milestone_e_package_publication_approval_decision_refresh.py b/.github/scripts/test_milestone_e_package_publication_approval_decision_refresh.py new file mode 100644 index 0000000..117d06c --- /dev/null +++ b/.github/scripts/test_milestone_e_package_publication_approval_decision_refresh.py @@ -0,0 +1,222 @@ +#!/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] +PREP = ROOT / "docs/milestone-e-package-publication-approval-prep.json" +RECORD = ( + ROOT + / "docs/validation/" + "milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md" +) +PRIOR_DECISION_RECORD = ( + "docs/validation/" + "milestone-e-package-publication-approval-decision-validation-2026-06-21.md" +) +CANDIDATE_ACTIVATION_RECORD = ( + "docs/validation/" + "milestone-e-package-publication-candidate-activation-evidence-validation-2026-06-22.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" + +SOURCE_COMMIT = "6a9151171b4d019780cfa1c718f8a7264bb4f549" +SOURCE_SHORT = "6a91511" +SOURCE_TREE = "8b150d9aebdc282c358e4552a4d709c3140f41b4" +REQUIRED_REFRESH_FIELDS = [ + "Decision: activation evidence is present; manual exact approval remains required.", + "Activation evidence status: present through the candidate activation evidence record.", + "Exact candidate crate list approved by this refresh: none.", + "Exact package version map approved by this refresh: none.", + "Exact package tag name set approved by this refresh: none.", + "Exact package tag source commit and source tree approved by this refresh: none.", + "Exact source manifest activation diff approved by this refresh: none.", + "Exact public installation wording approved by this refresh: none.", + "Public-surface posture check result after this refresh: passed with no public installation wording approval.", + "Claims gate result after this refresh: passed with package publication blocked.", + "Milestone E prep result after this refresh record: required for this record branch.", +] +MANUAL_INPUT_FIELDS = [ + "exact candidate crate list for the first package-publication surface", + "exact package version map, including whether candidate `0.1.0` is accepted or rejected", + "exact package tag names and source binding", + "exact source Cargo manifest activation diff", + "exact registry-equivalent dependent package assembly evidence", + "exact public installation wording and explicit exclusions", + "posture, claims, and Milestone E prep gate results", +] +FORBIDDEN_SCOPE_EXPANSION = [ + "package publication approved", + "package publication is approved", + "public installation approved", + "public installation is approved", + "public installation wording is approved", + "package tag creation approved", + "cargo manifests are changed", + "registry creation approved", + "registry-backed assembly activation approved", + "release-ready", + "release artifact approved", + "package-ready", + "packages are published", + "published packages", + "production-ready", + "benchmark-validated", + "public benchmark pass", + "speed validated", + "fastest", + "launch-ready", + "hosted surface approved", + "hosted demo approved", + "demo-ready", + "performance validated", + "quality validated", + "footprint validated", + "table-quality validated", + "parser-quality validated", +] + + +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 load_json(path: Path) -> dict: + return json.loads(path.read_text(encoding="utf-8")) + + +def git(*args: str) -> str: + return subprocess.check_output( + ["git", *args], + cwd=ROOT, + encoding="utf-8", + stderr=subprocess.DEVNULL, + ).strip() + + +class MilestoneEPackagePublicationApprovalDecisionRefreshTests(unittest.TestCase): + def test_refresh_record_is_indexed_and_source_bound(self) -> None: + prep = load_json(PREP) + readme = read(VALIDATION_README) + record = normalized(RECORD) + + self.assertIn(RECORD.name, readme) + self.assertIn("package publication approval decision refresh validation", readme) + self.assertEqual( + "docs/validation/" + "milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md", + prep["follow_up_records"]["package_approval_decision_refresh"], + ) + self.assertIn(f"Validated source HEAD before this record: `{SOURCE_SHORT}`", read(RECORD)) + self.assertIn(f"Approval decision refresh source commit: `{SOURCE_COMMIT}`", record) + self.assertIn(f"Approval decision refresh source tree: `{SOURCE_TREE}`", record) + self.assertEqual(SOURCE_COMMIT, git("rev-parse", SOURCE_SHORT)) + self.assertEqual(SOURCE_TREE, git("rev-parse", f"{SOURCE_SHORT}^{{tree}}")) + + def test_refresh_records_activation_evidence_but_requires_manual_approval(self) -> None: + record = normalized(RECORD) + + self.assertIn("Status: **pass for package publication approval decision refresh with publication blocked**", record) + for field in REQUIRED_REFRESH_FIELDS: + self.assertIn(field, record) + self.assertIn(PRIOR_DECISION_RECORD, record) + self.assertIn(CANDIDATE_ACTIVATION_RECORD, record) + self.assertIn("Candidate `0.1.0` remains unapproved as a package publication version", record) + self.assertIn("Candidate package tags remain uncreated and unapproved", record) + self.assertIn("Current Cargo manifests remain unchanged", record) + self.assertIn("Manual Decider Input Required", read(RECORD)) + for field in MANUAL_INPUT_FIELDS: + self.assertIn(field, record) + + def test_current_manifests_tags_and_registry_state_stay_unactivated(self) -> None: + prep = load_json(PREP) + core_manifest = read(ROOT / "crates/ethos-core/Cargo.toml") + verify_manifest = read(ROOT / "crates/ethos-verify/Cargo.toml") + pdf_manifest = read(ROOT / "crates/ethos-pdf/Cargo.toml") + + for value in prep["package_publication_decision_input_packet"]["candidate_package_tag_names"]: + tag = value.split(": ", maxsplit=1)[1].split(";", maxsplit=1)[0] + self.assertEqual("", git("tag", "--list", tag)) + self.assertIn('name = "ethos-core"', core_manifest) + self.assertIn("publish = false", core_manifest) + self.assertIn("publish = false", verify_manifest) + self.assertIn("publish = false", pdf_manifest) + self.assertNotIn('package = "ethos-doc-core"', verify_manifest) + self.assertNotIn('package = "ethos-doc-core"', pdf_manifest) + self.assertFalse((ROOT / ".cargo/config.toml").exists()) + self.assertFalse((ROOT / "target/package-registry").exists()) + + def test_docs_reference_refresh_and_retained_blockers(self) -> None: + for path in (PREP_SCOPE, ROADMAP, EXECUTION_STATUS, VALIDATION_README): + doc = normalized(path) + + self.assertIn(RECORD.name, doc, str(path)) + self.assertIn("approval decision refresh", doc.lower(), str(path)) + self.assertIn("activation evidence is present", doc.lower(), str(path)) + self.assertIn("manual exact approval remains required", doc.lower(), str(path)) + self.assertIn("package publication remains blocked", doc, str(path)) + self.assertIn("public installation remains blocked", doc, str(path)) + + def test_make_and_ci_run_refresh_after_activation_evidence_before_readiness(self) -> None: + make_block = target_block("milestone-e-prep") + ci = read(CI_WORKFLOW) + evidence_guard = "test_milestone_e_package_publication_candidate_activation_evidence.py" + refresh_guard = "test_milestone_e_package_publication_approval_decision_refresh.py" + public_facing_guard = "test_milestone_e_public_facing_readiness_ledger.py" + + for text, prefix in ((make_block, "$(PYTHON) .github/scripts/"), (ci, "python3 .github/scripts/")): + self.assertIn(prefix + refresh_guard, text) + self.assertEqual(1, text.count(prefix + refresh_guard)) + self.assertLess(text.index(prefix + evidence_guard), text.index(prefix + refresh_guard)) + self.assertLess(text.index(prefix + refresh_guard), text.index(prefix + public_facing_guard)) + + def test_record_avoids_scope_expansion_language_or_private_paths(self) -> None: + lower = normalized(RECORD).lower() + raw = read(RECORD) + + for phrase in FORBIDDEN_SCOPE_EXPANSION: + self.assertNotIn(phrase, lower) + 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_package_publication_approval_prep.py b/.github/scripts/test_milestone_e_package_publication_approval_prep.py index 1d29a13..9e820d7 100644 --- a/.github/scripts/test_milestone_e_package_publication_approval_prep.py +++ b/.github/scripts/test_milestone_e_package_publication_approval_prep.py @@ -100,6 +100,7 @@ "package_approval_decision_template": "docs/validation/milestone-e-package-publication-approval-decision-template-validation-2026-06-21.md", "package_approval_decision_record": "docs/validation/milestone-e-package-publication-approval-decision-validation-2026-06-21.md", "package_candidate_activation_evidence": "docs/validation/milestone-e-package-publication-candidate-activation-evidence-validation-2026-06-22.md", + "package_approval_decision_refresh": "docs/validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md", } EXPECTED_PUBLICATION_DECISION_INPUTS = { "decision_status": "not_approved_pending_exact_decision", 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 e6cdf83..586ecac 100644 --- a/.github/scripts/test_milestone_e_prep_guard_sequence_index.py +++ b/.github/scripts/test_milestone_e_prep_guard_sequence_index.py @@ -115,6 +115,7 @@ "$(PYTHON) .github/scripts/test_milestone_e_package_publication_approval_decision_template.py", "$(PYTHON) .github/scripts/test_milestone_e_package_publication_approval_decision_record.py", "$(PYTHON) .github/scripts/test_milestone_e_package_publication_candidate_activation_evidence.py", + "$(PYTHON) .github/scripts/test_milestone_e_package_publication_approval_decision_refresh.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", diff --git a/.github/scripts/test_milestone_e_prep_scope.py b/.github/scripts/test_milestone_e_prep_scope.py index fa3b4ad..f480779 100644 --- a/.github/scripts/test_milestone_e_prep_scope.py +++ b/.github/scripts/test_milestone_e_prep_scope.py @@ -414,6 +414,7 @@ def test_make_target_is_narrow_and_guarded(self) -> None: "$(PYTHON) .github/scripts/test_milestone_e_package_publication_approval_decision_template.py", "$(PYTHON) .github/scripts/test_milestone_e_package_publication_approval_decision_record.py", "$(PYTHON) .github/scripts/test_milestone_e_package_publication_candidate_activation_evidence.py", + "$(PYTHON) .github/scripts/test_milestone_e_package_publication_approval_decision_refresh.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", diff --git a/.github/scripts/test_milestone_e_validation_record_index.py b/.github/scripts/test_milestone_e_validation_record_index.py index 0357441..01d23f4 100644 --- a/.github/scripts/test_milestone_e_validation_record_index.py +++ b/.github/scripts/test_milestone_e_validation_record_index.py @@ -294,6 +294,10 @@ class RecordCoverage: "milestone-e-package-publication-candidate-activation-evidence-validation-2026-06-22.md", "test_milestone_e_package_publication_candidate_activation_evidence.py", ), + RecordCoverage( + "milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md", + "test_milestone_e_package_publication_approval_decision_refresh.py", + ), RecordCoverage( "milestone-e-public-facing-readiness-ledger-validation-2026-06-21.md", "test_milestone_e_public_facing_readiness_ledger.py", @@ -432,6 +436,9 @@ def test_index_guards_run_after_row_and_schema_records(self) -> None: package_candidate_activation_evidence_guard = ( "test_milestone_e_package_publication_candidate_activation_evidence.py" ) + package_approval_decision_refresh_guard = ( + "test_milestone_e_package_publication_approval_decision_refresh.py" + ) readiness_guard = "test_milestone_e_public_facing_readiness_ledger.py" beta_refresh_guard = "test_milestone_e_public_beta_current_main_refresh_prep.py" command_guard = "test_milestone_e_validation_command_index_validation_record.py" @@ -528,6 +535,10 @@ def test_index_guards_run_after_row_and_schema_records(self) -> None: ) self.assertLess( text.index(prefix + package_candidate_activation_evidence_guard), + text.index(prefix + package_approval_decision_refresh_guard), + ) + self.assertLess( + text.index(prefix + package_approval_decision_refresh_guard), text.index(prefix + readiness_guard), ) self.assertLess(text.index(prefix + readiness_guard), text.index(prefix + beta_refresh_guard)) @@ -565,6 +576,14 @@ def test_index_guards_run_after_row_and_schema_records(self) -> None: text.index(prefix + package_candidate_activation_evidence_guard), text.index(prefix + index_guard), ) + self.assertLess( + text.index(prefix + package_approval_decision_refresh_guard), + text.index(prefix + command_guard), + ) + self.assertLess( + text.index(prefix + package_approval_decision_refresh_guard), + text.index(prefix + index_guard), + ) self.assertLess( text.index(prefix + package_registry_evidence_review_guard), text.index(prefix + command_guard), diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b7e2672..d0dc523 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -244,6 +244,8 @@ jobs: run: python3 .github/scripts/test_milestone_e_package_publication_approval_decision_record.py - name: Milestone E package publication candidate activation evidence tests run: python3 .github/scripts/test_milestone_e_package_publication_candidate_activation_evidence.py + - name: Milestone E package publication approval decision refresh tests + run: python3 .github/scripts/test_milestone_e_package_publication_approval_decision_refresh.py - name: Milestone E public-facing readiness ledger tests run: python3 .github/scripts/test_milestone_e_public_facing_readiness_ledger.py - name: Milestone E public beta current-main refresh prep tests diff --git a/Makefile b/Makefile index c2a7128..e7fcbba 100644 --- a/Makefile +++ b/Makefile @@ -229,6 +229,7 @@ milestone-e-prep: $(PYTHON) .github/scripts/test_milestone_e_package_publication_approval_decision_template.py $(PYTHON) .github/scripts/test_milestone_e_package_publication_approval_decision_record.py $(PYTHON) .github/scripts/test_milestone_e_package_publication_candidate_activation_evidence.py + $(PYTHON) .github/scripts/test_milestone_e_package_publication_approval_decision_refresh.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 diff --git a/docs/execution-status.md b/docs/execution-status.md index 07def6a..f8472fa 100644 --- a/docs/execution-status.md +++ b/docs/execution-status.md @@ -213,6 +213,8 @@ The package publication approval decision in `docs/validation/milestone-e-packag The package publication candidate activation evidence in `docs/validation/milestone-e-package-publication-candidate-activation-evidence-validation-2026-06-22.md` validates a temporary non-public package activation workspace against source commit `6cf211c` / tree `ae76bc588b64dc1e8087d9096d52545a3560c2c0`. Source Cargo manifests remain blocked, package publication remains blocked, and public installation remains blocked. +The package publication approval decision refresh in `docs/validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md` records that activation evidence is present against source commit `6a91511` / tree `8b150d9aebdc282c358e4552a4d709c3140f41b4`. Manual exact approval remains required; source Cargo manifests remain unchanged, package publication remains blocked, and public installation 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-package-publication-approval-prep.json b/docs/milestone-e-package-publication-approval-prep.json index 9e6420c..c460b02 100644 --- a/docs/milestone-e-package-publication-approval-prep.json +++ b/docs/milestone-e-package-publication-approval-prep.json @@ -87,7 +87,8 @@ "package_public_installation_wording_review": "docs/validation/milestone-e-package-publication-public-installation-wording-review-validation-2026-06-21.md", "package_approval_decision_template": "docs/validation/milestone-e-package-publication-approval-decision-template-validation-2026-06-21.md", "package_approval_decision_record": "docs/validation/milestone-e-package-publication-approval-decision-validation-2026-06-21.md", - "package_candidate_activation_evidence": "docs/validation/milestone-e-package-publication-candidate-activation-evidence-validation-2026-06-22.md" + "package_candidate_activation_evidence": "docs/validation/milestone-e-package-publication-candidate-activation-evidence-validation-2026-06-22.md", + "package_approval_decision_refresh": "docs/validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md" }, "publication_approval_decision_inputs": { "decision_status": "not_approved_pending_exact_decision", diff --git a/docs/milestone-e-prep-scope.md b/docs/milestone-e-prep-scope.md index b336f7a..5170140 100644 --- a/docs/milestone-e-prep-scope.md +++ b/docs/milestone-e-prep-scope.md @@ -153,6 +153,12 @@ The package publication candidate activation evidence is recorded in It validates a temporary non-public package activation workspace for source commit `6cf211c` / tree `ae76bc588b64dc1e8087d9096d52545a3560c2c0`; source Cargo manifests remain blocked, package publication remains blocked, and public installation remains blocked. +The package publication approval decision refresh is recorded in +`docs/validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md`. +It records that activation evidence is present for source commit `6a91511` / tree +`8b150d9aebdc282c358e4552a4d709c3140f41b4`, while manual exact approval remains required, +source Cargo manifests remain unchanged, package publication remains blocked, and public +installation remains blocked. 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 @@ -269,6 +275,7 @@ package publication dry-run/smoke guard, package publication version/tag policy guard, package publication PDFium boundary guard, package publication dependency-ordering guard, +package publication approval decision refresh guard, validation-command index checks, validation-record index checks, the prep guard-sequence index, validation-record guards, and diff hygiene. It intentionally does not run public-report, release, package, hosted, benchmark-report, @@ -337,6 +344,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 package publication approval decision refresh records that activation evidence is present; + manual exact approval remains required, source Cargo manifests remain unchanged, public + installation remains blocked, and package publication remains blocked. - 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 diff --git a/docs/roadmap.md b/docs/roadmap.md index 4f5e2d5..ecb1f25 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -206,6 +206,11 @@ for source commit `6cf211c` / tree `ae76bc588b64dc1e8087d9096d52545a3560c2c0`. A non-public package activation workspace validates the candidate package-name and dependency shape while source Cargo manifests remain blocked, package publication remains blocked, and public installation remains blocked. +The package publication approval decision refresh is recorded in +[`docs/validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md`](validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md) +for source commit `6a91511` / tree `8b150d9aebdc282c358e4552a4d709c3140f41b4`. Activation +evidence is present, but manual exact approval remains required; source Cargo manifests remain +unchanged, package publication remains blocked, and public installation remains blocked. 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 diff --git a/docs/validation/README.md b/docs/validation/README.md index 64c368c..de15301 100644 --- a/docs/validation/README.md +++ b/docs/validation/README.md @@ -376,6 +376,11 @@ recording the exact current-main source candidate and required follow-up evidenc activation workspace; the record binds the evidence to source commit `6cf211c` / tree `ae76bc588b64dc1e8087d9096d52545a3560c2c0` while package publication remains blocked and public installation remains blocked. +- `milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md` - + package publication approval decision refresh validation after candidate activation evidence is + present; the record binds the refresh to source commit `6a91511` / tree + `8b150d9aebdc282c358e4552a4d709c3140f41b4`, records that manual exact approval remains + required, and keeps package publication and public installation blocked. - `milestone-e-public-facing-readiness-ledger-validation-2026-06-21.md` - public-facing readiness ledger validation recorded `docs/milestone-e-public-facing-readiness-ledger.json` as a current-main refresh candidate and package-publication gap-retention artifact; current main diff --git a/docs/validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md b/docs/validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md new file mode 100644 index 0000000..232e530 --- /dev/null +++ b/docs/validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md @@ -0,0 +1,130 @@ +# Milestone E Package Publication Approval Decision Refresh Validation - 2026-06-22 + +## Purpose + +Refresh the package-publication approval decision posture after candidate activation evidence was +recorded on main. + +This record recognizes that the prior blocker, absent candidate activation evidence, is now +addressed by +`docs/validation/milestone-e-package-publication-candidate-activation-evidence-validation-2026-06-22.md`. +It does not approve package publication, approve public installation, approve public installation +wording, select a package publication version, create package tags, change source Cargo manifests, +or create any source-tree registry. + +## Status + +Status: **pass for package publication approval decision refresh with publication blocked**. + +Decision: activation evidence is present; manual exact approval remains required. + +Ethos remains source-only pre-alpha outside the approved GitHub source-repository public beta +surface. Package publication remains blocked. Public installation remains blocked. + +## Subject + +- Repository: `docushell/ethos` +- Validated source HEAD before this record: `6a91511` +- Approval decision refresh source commit: `6a9151171b4d019780cfa1c718f8a7264bb4f549` +- Approval decision refresh source tree: `8b150d9aebdc282c358e4552a4d709c3140f41b4` +- Lane: package publication +- Prior approval decision record: + `docs/validation/milestone-e-package-publication-approval-decision-validation-2026-06-21.md` +- Candidate activation evidence record: + `docs/validation/milestone-e-package-publication-candidate-activation-evidence-validation-2026-06-22.md` +- Approval owner: `docushell-admin` + +## Decision Refresh + +- Activation evidence status: present through the candidate activation evidence record. +- Exact candidate crate list approved by this refresh: none. Candidate review inputs remain + `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` only. +- Exact package version map approved by this refresh: none. Candidate `0.1.0` remains unapproved + as a package publication version. +- Exact package tag name set approved by this refresh: none. Candidate package tags remain + uncreated and unapproved. +- Exact package tag source commit and source tree approved by this refresh: none. +- Exact source manifest activation diff approved by this refresh: none. Current Cargo manifests + remain unchanged. +- Exact public installation wording approved by this refresh: none. Public installation wording + remains blocked. +- Public-surface posture check result after this refresh: passed with no public installation + wording approval. +- Claims gate result after this refresh: passed with package publication blocked. +- Milestone E prep result after this refresh record: required for this record branch. + +## Manual Decider Input Required + +Before any later package-publication approval can be recorded, `docushell-admin` must manually +approve or reject these exact fields: + +- exact candidate crate list for the first package-publication surface +- exact package version map, including whether candidate `0.1.0` is accepted or rejected for each + included crate +- exact package tag names and source binding, including + `ethos-package-ethos-doc-core-0.1.0`, `ethos-package-ethos-verify-0.1.0`, and + `ethos-package-ethos-pdf-0.1.0` if those candidates remain under review +- exact source Cargo manifest activation diff from the current source manifests to the candidate + package shape +- exact registry-equivalent dependent package assembly evidence after any approved manifest + activation diff +- exact public installation wording and explicit exclusions +- posture, claims, and Milestone E prep gate results after the exact wording and record changes + +## Non-Approvals + +- This refresh does not approve package publication. +- This refresh does not approve public installation. +- This refresh does not approve public installation wording. +- This refresh does not select a package publication version. +- This refresh does not create package tags. +- This refresh does not change source Cargo manifests. +- This refresh does not create a source-tree package registry. +- This refresh does not approve real-version cargo publish. +- This refresh does not approve hosted surfaces. +- This refresh does not approve production positioning. +- This refresh does not approve public benchmark reports. +- This refresh does not approve public benchmark claims. + +## Retained Blockers + +- exact package publication approval remains required +- exact package version selection remains blocked +- exact package tag creation remains blocked +- source Cargo manifest activation remains blocked +- registry-equivalent dependent package assembly activation remains blocked +- public installation wording approval remains blocked +- public installation remains blocked +- package publication remains blocked +- real-version cargo publish remains blocked +- hosted surfaces remain blocked +- production positioning remains blocked +- Public reports remain blocked +- Public result wording remains blocked + +## Commands + +```sh +python3 .github/scripts/test_milestone_e_package_publication_approval_decision_refresh.py +python3 .github/scripts/test_milestone_e_package_publication_candidate_activation_evidence.py +python3 .github/scripts/test_milestone_e_package_publication_approval_prep.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 +Package publication approval decision refresh validation passed +Candidate activation evidence is present +Manual exact approval remains required for candidate crates, version, tags, source manifest +activation diff, dependent package assembly evidence, public installation wording, and exclusions +Source Cargo manifests remained blocked and unchanged +Package publication and public installation remained blocked +Public-surface posture and claims gates passed +Milestone E prep target passed +git diff --check passed +``` diff --git a/schemas/ethos-milestone-e-package-publication-approval-prep.schema.json b/schemas/ethos-milestone-e-package-publication-approval-prep.schema.json index e97052f..7dfd98b 100644 --- a/schemas/ethos-milestone-e-package-publication-approval-prep.schema.json +++ b/schemas/ethos-milestone-e-package-publication-approval-prep.schema.json @@ -295,7 +295,8 @@ "package_public_installation_wording_review", "package_approval_decision_template", "package_approval_decision_record", - "package_candidate_activation_evidence" + "package_candidate_activation_evidence", + "package_approval_decision_refresh" ], "additionalProperties": false, "properties": { @@ -361,6 +362,9 @@ }, "package_candidate_activation_evidence": { "const": "docs/validation/milestone-e-package-publication-candidate-activation-evidence-validation-2026-06-22.md" + }, + "package_approval_decision_refresh": { + "const": "docs/validation/milestone-e-package-publication-approval-decision-refresh-validation-2026-06-22.md" } } },