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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/scripts/package_publication_candidate_activation.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@


ROOT = Path(__file__).resolve().parents[2]
VERSION = "0.1.0"
VERSION = "0.1.1"
CORE_PACKAGE = "ethos-doc-core"
CANDIDATE_PACKAGES = (CORE_PACKAGE, "ethos-verify", "ethos-pdf")
CONSUMER_PACKAGE = "ethos-package-candidate-consumer"
Expand Down Expand Up @@ -140,8 +140,8 @@ def materialize_candidate_workspace(workspace: Path) -> None:

replace_once_if_needed(
workspace / "Cargo.toml",
'ethos-core = { path = "crates/ethos-core", version = "0.1.0", default-features = false }',
'ethos-core = { package = "ethos-doc-core", path = "crates/ethos-core", version = "0.1.0", default-features = false }',
'ethos-core = { path = "crates/ethos-core", version = "0.1.1", default-features = false }',
'ethos-core = { package = "ethos-doc-core", path = "crates/ethos-core", version = "0.1.1", default-features = false }',
)
root_manifest = workspace / "Cargo.toml"
root_text = root_manifest.read_text(encoding="utf-8")
Expand Down Expand Up @@ -544,7 +544,7 @@ def source_manifests_have_activation_shape() -> bool:
lockfile = (ROOT / "Cargo.lock").read_text(encoding="utf-8")
return all(
[
'ethos-core = { package = "ethos-doc-core", path = "crates/ethos-core", version = "0.1.0", default-features = false }'
'ethos-core = { package = "ethos-doc-core", path = "crates/ethos-core", version = "0.1.1", default-features = false }'
in workspace,
'name = "ethos-doc-core"' in core,
'[lib]\nname = "ethos_core"' in core,
Expand Down
2 changes: 1 addition & 1 deletion .github/scripts/smoke_release_cli_artifact.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ def smoke_artifact(artifact_dir: Path, expected_version: str, target: str) -> Di
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("--artifact-dir", required=True)
parser.add_argument("--expected-version", default="ethos 0.1.0")
parser.add_argument("--expected-version", default="ethos 0.1.1")
parser.add_argument("--target", required=True, choices=("macos-arm64", "linux-x64"))
parser.add_argument("--out")
args = parser.parse_args()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ def test_candidate_manifests_are_activated_and_non_candidates_stay_blocked(self)
pdf = read(ROOT / "crates/ethos-pdf/Cargo.toml")
self.assertIn(
'ethos-core = { package = "ethos-doc-core", path = "crates/ethos-core", '
'version = "0.1.0", default-features = false }',
'version = "0.1.1", default-features = false }',
workspace,
)
self.assertIn('name = "ethos-doc-core"', lockfile)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ def test_candidate_crates_remain_publish_false_until_later_approval(self) -> Non
self.assertNotIn("publish = false", verify)
self.assertIn('name = "ethos-pdf"', pdf)
self.assertNotIn("publish = false", pdf)
self.assertIn('version = "0.1.0"', read(ROOT / "Cargo.toml"))
self.assertIn('version = "0.1.1"', read(ROOT / "Cargo.toml"))

def test_evidence_status_matches_decider_input(self) -> None:
status = load_json(PREP)["evidence_review_status"]
Expand Down Expand Up @@ -611,7 +611,7 @@ def test_semver_package_version_decision_prep_keeps_version_unselected(self) ->
"semver_decision_inputs_recorded_version_unselected_publication_blocked",
review["review_state"],
)
self.assertIn('version = "0.1.0"', cargo)
self.assertIn('version = "0.1.1"', cargo)
self.assertIn('reserved_crates_io_version = "0.0.0-reserved.0"', core_manifest)
self.assertIn('reserved_crates_io_version = "0.0.0-reserved.0"', verify_manifest)
self.assertIn('reserved_crates_io_version = "0.0.0-reserved.0"', pdf_manifest)
Expand Down Expand Up @@ -667,7 +667,7 @@ def test_combined_package_publication_decision_prep_bundle_blocks_all_actions(se
self.assertIn('name = "ethos-doc-core"', core_manifest)
self.assertIn('name = "ethos-verify"', verify_manifest)
self.assertIn('name = "ethos-pdf"', pdf_manifest)
self.assertIn('version = "0.1.0"', cargo)
self.assertIn('version = "0.1.1"', cargo)

def test_package_publication_approval_request_packet_keeps_all_actions_blocked(self) -> None:
packet = load_json(PREP)["package_publication_approval_request_packet"]
Expand Down Expand Up @@ -741,7 +741,7 @@ def test_package_publication_pre_approval_gap_ledger_keeps_resolution_inputs_exp
self.assertIn('name = "ethos-doc-core"', core_manifest)
self.assertIn('name = "ethos-verify"', verify_manifest)
self.assertIn('name = "ethos-pdf"', pdf_manifest)
self.assertIn('version = "0.1.0"', cargo)
self.assertIn('version = "0.1.1"', cargo)

def test_pdfium_boundary_keeps_ethos_pdf_held_until_confirmed(self) -> None:
approved = load_json(PREP)["approved_package_publication_prep"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ def test_candidate_activation_script_passes_with_registry_equivalent_consumer(se
commands = [entry["command"] for entry in result["commands"]]

self.assertEqual("pass", result["status"])
self.assertEqual("0.1.0", result["candidate_version"])
self.assertEqual("0.1.1", result["candidate_version"])
self.assertEqual(["ethos-doc-core", "ethos-verify", "ethos-pdf"], result["candidate_packages"])
self.assertEqual("pass", result["registry_equivalent_consumer_check"])
self.assertTrue(result["source_candidate_manifests_activated"])
Expand Down Expand Up @@ -151,7 +151,7 @@ def test_candidate_activation_preserves_import_and_dependency_shape(self) -> Non
self.assertEqual({"ethos-doc-core", "ethos-verify", "ethos-pdf"}, set(artifacts))
for artifact in artifacts.values():
self.assertRegex(artifact["sha256"], r"^[0-9a-f]{64}$")
self.assertTrue(artifact["crate_file"].endswith("-0.1.0.crate"))
self.assertTrue(artifact["crate_file"].endswith("-0.1.1.crate"))

def test_source_candidate_manifests_are_activated_and_profile_copy_is_in_sync(self) -> None:
core_manifest = read(ROOT / "crates/ethos-core/Cargo.toml")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ def test_current_registry_equivalent_assembly_passes_after_manifest_activation(s
commands = [entry["command"] for entry in result["commands"]]

self.assertEqual("pass", result["status"])
self.assertEqual("0.1.0", result["candidate_version"])
self.assertEqual("0.1.1", result["candidate_version"])
self.assertEqual(["ethos-doc-core", "ethos-verify", "ethos-pdf"], result["candidate_packages"])
self.assertEqual("pass", result["registry_equivalent_consumer_check"])
self.assertTrue(result["source_manifest_activation_applied"])
Expand All @@ -141,7 +141,7 @@ def test_artifacts_and_manifest_shape_are_current(self) -> None:
self.assertEqual({"ethos-doc-core", "ethos-verify", "ethos-pdf"}, set(artifacts))
for artifact in artifacts.values():
self.assertRegex(artifact["sha256"], r"^[0-9a-f]{64}$")
self.assertTrue(artifact["crate_file"].endswith("-0.1.0.crate"))
self.assertTrue(artifact["crate_file"].endswith("-0.1.1.crate"))

def test_source_candidate_manifests_are_activated_while_tags_and_registry_stay_absent(self) -> None:
for manifest in (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ def test_version_tag_policy_record_keeps_placeholder_and_workspace_versions_sepa
record = normalized(record_path(RECORDS["version_tag_policy"]))
root_manifest = read(ROOT / "Cargo.toml")

self.assertIn('version = "0.1.0"', root_manifest)
self.assertIn('version = "0.1.1"', root_manifest)
self.assertIn("Workspace package version is `0.1.0`", record)
self.assertIn("`0.0.0-reserved.0` placeholders", record)
self.assertIn("`ethos-source-snapshot-660f268`", record)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def test_source_manifests_have_activated_but_blocked_shape(self) -> None:

self.assertIn(
'ethos-core = { package = "ethos-doc-core", path = "crates/ethos-core", '
'version = "0.1.0", default-features = false }',
'version = "0.1.1", default-features = false }',
workspace,
)
self.assertIn('name = "ethos-doc-core"', core)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def test_current_manifests_remain_unmigrated_source_tree_manifests(self) -> None
self.assertNotIn("publish = false", verify)
self.assertNotIn("publish = false", pdf)
self.assertIn(
'ethos-core = { package = "ethos-doc-core", path = "crates/ethos-core", version = "0.1.0", default-features = false }',
'ethos-core = { package = "ethos-doc-core", path = "crates/ethos-core", version = "0.1.1", default-features = false }',
workspace,
)
self.assertIn('ethos-core = { workspace = true, features = ["grounding", "verify-types"] }', verify)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@
"Linux x64 CLI artifact, and npm `@docushell/ethos-pdf` evaluation. It verifies whether "
"AI citations are grounded in document evidence across native Ethos JSON and supported foreign "
"parser outputs. Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` are "
"available on crates.io at `0.1.0` for evaluation. The Python `ethos-pdf` wheel, npm "
"`@docushell/ethos-pdf@0.1.0` package, and macOS arm64/Linux x64 CLI artifacts are available "
"available on crates.io at `0.1.1` for evaluation. The Python `ethos-pdf` wheel, npm "
"`@docushell/ethos-pdf@0.1.1` package, and macOS arm64/Linux x64 CLI artifacts are available "
"for evaluation with caller-provided PDFium."
)
BOUNDED_INSTALLATION_WORDING = (
Expand All @@ -87,6 +87,11 @@
"cargo add ethos-verify@0.1.0",
"cargo add ethos-pdf@0.1.0",
)
CURRENT_INSTALL_COMMANDS = (
"cargo add ethos-doc-core@0.1.1",
"cargo add ethos-verify@0.1.1",
"cargo add ethos-pdf@0.1.1",
)
FORBIDDEN_SCOPE_EXPANSION = [
"public reports are approved",
"public result wording approved",
Expand Down Expand Up @@ -165,9 +170,9 @@ def test_readme_matches_bounded_public_wording(self) -> None:
)

self.assertIn(CURRENT_README_WORDING, readme)
for command in INSTALL_COMMANDS:
for command in CURRENT_INSTALL_COMMANDS:
self.assertIn(command, readme)
self.assertIn("npm install -g @docushell/ethos-pdf@0.1.0", readme)
self.assertIn("npm install -g @docushell/ethos-pdf@0.1.1", readme)
self.assertIn("macOS arm64/Linux x64 CLI artifacts", readme)
self.assertIn("Windows packaged artifacts", readme)
self.assertIn("bundled project-maintained PDFium builds", readme)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ def test_current_versions_and_manifests_stay_source_tree_only(self) -> None:
verify = read(ROOT / "crates/ethos-verify/Cargo.toml")
pdf = read(ROOT / "crates/ethos-pdf/Cargo.toml")

self.assertIn('version = "0.1.0"', workspace)
self.assertIn('version = "0.1.1"', workspace)
self.assertIn('reserved_crates_io_version = "0.0.0-reserved.0"', core)
self.assertIn('reserved_crates_io_version = "0.0.0-reserved.0"', verify)
self.assertIn('reserved_crates_io_version = "0.0.0-reserved.0"', pdf)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ def test_current_manifests_stay_source_tree_only(self) -> None:
self.assertNotIn("publish = false", verify)
self.assertNotIn("publish = false", pdf)
self.assertIn(
'ethos-core = { package = "ethos-doc-core", path = "crates/ethos-core", version = "0.1.0", default-features = false }',
'ethos-core = { package = "ethos-doc-core", path = "crates/ethos-core", version = "0.1.1", default-features = false }',
workspace,
)
self.assertIn('ethos-core = { workspace = true, features = ["grounding", "verify-types"] }', verify)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ def test_binding_points_at_activated_candidate_manifest_state(self) -> None:
)
self.assertIn('reserved_crates_io_version = "0.0.0-reserved.0"', text, str(manifest))

self.assertIn('version = "0.1.0"', read(ROOT / "Cargo.toml"))
self.assertIn('version = "0.1.1"', read(ROOT / "Cargo.toml"))

for manifest in (
ROOT / "crates/ethos-cli/Cargo.toml",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ def test_current_manifests_and_versions_stay_unchanged(self) -> None:
verify = read(ROOT / "crates/ethos-verify/Cargo.toml")
pdf = read(ROOT / "crates/ethos-pdf/Cargo.toml")

self.assertIn('version = "0.1.0"', workspace)
self.assertIn('version = "0.1.1"', workspace)
self.assertIn('reserved_crates_io_version = "0.0.0-reserved.0"', core)
self.assertIn('reserved_crates_io_version = "0.0.0-reserved.0"', verify)
self.assertIn('reserved_crates_io_version = "0.0.0-reserved.0"', pdf)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def test_workspace_and_reserved_versions_stay_separate(self) -> None:
adr = normalized(ROOT / "docs/decisions/ADR-0006-package-identifiers.md")
record = normalized(RECORD)

self.assertIn('version = "0.1.0"', root_manifest)
self.assertIn('version = "0.1.1"', root_manifest)
self.assertIn("0.0.0-reserved.0", adr)
self.assertIn("Workspace package version `0.1.0` remains a source-tree version", record)
self.assertIn("ADR-0006 crates.io reservations remain `0.0.0-reserved.0` placeholders", record)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ def test_public_surfaces_use_exact_approved_wording_and_exclusions(self) -> None
self.assertIn("cargo build --locked -p ethos-cli", readme)
self.assertIn("make verify-alpha", readme)
self.assertIn("ETHOS_PDFIUM_LIBRARY_PATH", readme)
self.assertIn("npm `@docushell/ethos-pdf@0.1.0` package", normalized_readme)
self.assertIn("npm `@docushell/ethos-pdf@0.1.1` package", normalized_readme)
self.assertIn("Windows packaged artifacts", normalized_readme)
self.assertIn("bundled project-maintained PDFium builds", normalized_readme)
self.assertIn("public benchmark reports", normalized_readme)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@
"Linux x64 CLI artifact, and npm `@docushell/ethos-pdf` evaluation. It verifies whether "
"AI citations are grounded in document evidence across native Ethos JSON and supported foreign "
"parser outputs. Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` are "
"available on crates.io at `0.1.0` for evaluation. The Python `ethos-pdf` wheel, npm "
"`@docushell/ethos-pdf@0.1.0` package, and macOS arm64/Linux x64 CLI artifacts are available "
"available on crates.io at `0.1.1` for evaluation. The Python `ethos-pdf` wheel, npm "
"`@docushell/ethos-pdf@0.1.1` package, and macOS arm64/Linux x64 CLI artifacts are available "
"for evaluation with caller-provided PDFium. Hosted surfaces, production positioning, Windows "
"packaged artifacts, bundled project-maintained PDFium builds, `ethos-doc`, `ethos-rag`, "
"public benchmark reports, public benchmark claims, and speed, footprint, parser-quality, "
Expand Down
2 changes: 1 addition & 1 deletion .github/scripts/test_npm_binary_package_scaffold.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def test_package_metadata_is_bounded_to_supported_release_targets(self) -> None:
package = json.loads(read(PACKAGE_JSON))

self.assertEqual("@docushell/ethos-pdf", package["name"])
self.assertEqual("0.1.0", package["version"])
self.assertEqual("0.1.1", package["version"])
self.assertEqual("Apache-2.0", package["license"])
self.assertEqual({"ethos": "./bin/ethos-pdf.js"}, package["bin"])
self.assertIn("vendor/", package["files"])
Expand Down
21 changes: 13 additions & 8 deletions .github/scripts/test_npm_tarball_candidate_evidence.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

ROOT = Path(__file__).resolve().parents[2]
PACKAGE_DIR = ROOT / "packages/npm/ethos-pdf"
PACKAGE_TARBALL = PACKAGE_DIR / "docushell-ethos-pdf-0.1.0.tgz"
PACKAGE_TARBALL = PACKAGE_DIR / "docushell-ethos-pdf-0.1.1.tgz"
RECORD = ROOT / "docs/validation/npm-tarball-candidate-evidence-validation-2026-06-23.md"
VALIDATION_README = ROOT / "docs/validation/README.md"
SOURCE_SHORT = "5a956a5"
Expand All @@ -53,9 +53,14 @@
"vendor/ethos-linux-x64": "7ef796a6d1c86b7c3b5b1afe58dd9cc348b706cec441602833540d8a0c9260ac",
"vendor/manifest.json": "0d03124957255dca55b7374e3318707da488f4b6648bfcec5e6e598079353b1f",
}
EXPECTED_PACK_SHASUM = "17a053c5ccb802bca2a295e1b1d0e6106c6a3ca6"
EXPECTED_PACK_SHA256 = "8d0483d69a6de471dee52c8ef06d46712c06861682a0d7319ca573fdb1fe6376"
EXPECTED_PACK_SHASUM = "d60100a96a27094ee4b5007699be9235e63ba991"
EXPECTED_PACK_SHA256 = "1716bf6f0163672497aaa8d5d678759f251e07860f23fe1a3e04d85f6cc3052e"
EXPECTED_PACK_INTEGRITY = (
"sha512-kYTwuzx0nZTHekEFP8iRB4q4eIacDN/nuRPlB7d0v3hhtipHSxeenbonQ78kTJKDjzew6YKK8ix/Uk27tZ7KoQ=="
)
EVIDENCE_PACK_SHASUM = "17a053c5ccb802bca2a295e1b1d0e6106c6a3ca6"
EVIDENCE_PACK_SHA256 = "8d0483d69a6de471dee52c8ef06d46712c06861682a0d7319ca573fdb1fe6376"
EVIDENCE_PACK_INTEGRITY = (
"sha512-uWTHYd9Hfkm3nkahK2UchCMOVvYWe82z03jffZnX6aYPqYGd6LkuiEoTH5DjrXl+oA817EjlE88fIKBxZbhjMw=="
)
EXPECTED_NODE_VERSION = "v23.11.1"
Expand Down Expand Up @@ -103,8 +108,8 @@ def test_npm_pack_candidate_contents_and_checksums(self) -> None:
files = {entry["path"]: entry for entry in pack["files"]}

self.assertEqual("@docushell/ethos-pdf", pack["name"])
self.assertEqual("0.1.0", pack["version"])
self.assertEqual("docushell-ethos-pdf-0.1.0.tgz", pack["filename"])
self.assertEqual("0.1.1", pack["version"])
self.assertEqual("docushell-ethos-pdf-0.1.1.tgz", pack["filename"])
self.assertEqual(EXPECTED_FILES, set(files))
self.assertEqual(493, files["vendor/ethos-darwin-arm64"]["mode"])
self.assertEqual(493, files["vendor/ethos-linux-x64"]["mode"])
Expand All @@ -124,9 +129,9 @@ def test_candidate_evidence_record_is_source_bound_and_indexed(self) -> None:
self.assertIn(f"Validated source HEAD before this record: `{SOURCE_SHORT}`", read(RECORD))
self.assertIn(f"npm tarball candidate source commit: `{SOURCE_COMMIT}`", record)
self.assertIn(f"npm tarball candidate source tree: `{SOURCE_TREE}`", record)
self.assertIn(EXPECTED_PACK_SHASUM, record)
self.assertIn(EXPECTED_PACK_SHA256, record)
self.assertIn(EXPECTED_PACK_INTEGRITY, record)
self.assertIn(EVIDENCE_PACK_SHASUM, record)
self.assertIn(EVIDENCE_PACK_SHA256, record)
self.assertIn(EVIDENCE_PACK_INTEGRITY, record)
self.assertIn(f"Node.js: `{EXPECTED_NODE_VERSION}`", record)
self.assertIn(f"npm: `{EXPECTED_NPM_VERSION}`", record)
self.assertIn("durable package-content provenance", record)
Expand Down
4 changes: 2 additions & 2 deletions .github/scripts/test_public_prealpha_wording_approval.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@
"Linux x64 CLI artifact, and npm `@docushell/ethos-pdf` evaluation. It verifies whether "
"AI citations are grounded in document evidence across native Ethos JSON and supported foreign "
"parser outputs. Rust library crates `ethos-doc-core`, `ethos-verify`, and `ethos-pdf` are "
"available on crates.io at `0.1.0` for evaluation. The Python `ethos-pdf` wheel, npm "
"`@docushell/ethos-pdf@0.1.0` package, and macOS arm64/Linux x64 CLI artifacts are available "
"available on crates.io at `0.1.1` for evaluation. The Python `ethos-pdf` wheel, npm "
"`@docushell/ethos-pdf@0.1.1` package, and macOS arm64/Linux x64 CLI artifacts are available "
"for evaluation with caller-provided PDFium. Hosted surfaces, production positioning, Windows "
"packaged artifacts, bundled project-maintained PDFium builds, `ethos-doc`, `ethos-rag`, "
"public benchmark reports, public benchmark claims, and speed, footprint, parser-quality, "
Expand Down
Loading
Loading