diff --git a/docs/validation/diagnose-selected-discovery-release-022.py b/docs/validation/diagnose-selected-discovery-release-022.py new file mode 100644 index 0000000000..c5436844e7 --- /dev/null +++ b/docs/validation/diagnose-selected-discovery-release-022.py @@ -0,0 +1,89 @@ +"""Source-only installer/API witness; never installs or publishes a package.""" + +import argparse +import json +import subprocess +import sys +import tomllib +from pathlib import Path +from types import ModuleType +from packaging.requirements import Requirement + +parser = argparse.ArgumentParser(description=__doc__) +parser.add_argument("dependency", type=Path) +parser.add_argument("--probe-index", action="store_true") +args = parser.parse_args() +root = Path(__file__).resolve().parents[2] +dependency = args.dependency.resolve() +sys.path[:0] = [str(root), str(dependency / "src")] + +import metaclass_registry +from scripts import validate_local_release_floors as floors +from scripts.wait_for_pypi_release import probe_release + +candidate = floors.read_release_candidate(dependency / "pyproject.toml") +project = floors.read_project(root / "pyproject.toml") +requirement = next( + item for item in project.dependencies if item.name == candidate.name +) +compatibility = floors.CandidateRequirementCompatibility(requirement, candidate) +original_project = tomllib.loads(subprocess.check_output( + ["git", "-C", str(root), "show", "f2aabe45:pyproject.toml"], text=True, +)) +original_requirement = next( + Requirement(item) for item in original_project["project"]["dependencies"] + if Requirement(item).name == candidate.name +) +assert original_requirement.specifier.contains("0.2.1") +assert not floors.CandidateRequirementCompatibility( + original_requirement, candidate, +).requires_candidate_floor +assert compatibility.accepts_candidate +assert compatibility.requires_candidate_floor +assert compatibility.excludes_next_breaking_series +assert not requirement.specifier.contains("0.2.1") +assert str(candidate.version) == metaclass_registry.__version__ == "0.2.2" + +old_commit = subprocess.check_output( + ["git", "-C", str(dependency), "rev-parse", "v0.2.1^{commit}"], text=True +).strip() +old_core_source = subprocess.check_output( + ["git", "-C", str(dependency), "show", "v0.2.1:src/metaclass_registry/core.py"], + text=True, +) +# Execute the original core declaration, not a copied compatibility module. +# Its common imports resolve from the current source package: this is a narrow +# missing-method witness, not an installed old-wheel or whole-old-package proof. +old_core = ModuleType("metaclass_registry._release_021_core_probe") +old_core.__package__ = "metaclass_registry" +sys.modules[old_core.__name__] = old_core +try: + exec(compile(old_core_source, f"git:{old_commit}:core.py", "exec"), vars(old_core)) + old_registry = old_core.LazyDiscoveryDict(enable_cache=False) + try: + old_registry.discover_matching(lambda module: False) + except AttributeError as error: + missing_api_error = str(error) + else: + raise AssertionError("original0.2.1 unexpectedly supplies selected discovery") +finally: + sys.modules.pop(old_core.__name__) + +new_registry = metaclass_registry.LazyDiscoveryDict(enable_cache=False) +new_registry.discover_matching(lambda module: False) +output = { + "interpreter": sys.executable, + "dependency_module": metaclass_registry.__file__, + "candidate_version": str(candidate.version), + "openhcs_requirement": str(requirement), + "original_openhcs_requirement": str(original_requirement), + "original_accepts_api_incompatible_021": True, + "original_021_commit": old_commit, + "original_missing_api_error": missing_api_error, + "new_api_call": "passed; unconfigured registry performs no discovery", + "installed_or_published": False, +} +if args.probe_index: + probe = probe_release(candidate.name, str(candidate.version)) + output["index_probe"] = {"available": probe.available, "detail": probe.detail} +print(json.dumps(output, indent=2), flush=True) diff --git a/docs/validation/metaclass-registry-022-publication-20261001/RECEIPT.rst b/docs/validation/metaclass-registry-022-publication-20261001/RECEIPT.rst new file mode 100644 index 0000000000..c608530b3e --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/RECEIPT.rst @@ -0,0 +1,121 @@ +Authorized metaclass-registry 0.2.2 publication +============================================== + +Terminal publication and PR414 integration +------------------------------------------ + +Public release/index/artifact/API gate PASSED. Original publisher36946473814, +attempt1, job110649639675 completed SUCCESS at2026-10-02T00:58:17Z. Original +observer69246 exited0; orchestration cell207 completed after the one admitted +verification. workflow-terminal.json and workflow-watch.log retain the actual +terminal steps. The queued state below is the preserved predecessor observation. + +Original OpenHCS wait_for_release/probe_release verified exact PyPI metadata AND +the normal installer index for metaclass-registry==0.2.2. Original +materialize_release_files downloaded one wheel/sdist set and verified the declared +SHA256 digests. No second download, environment or installation was performed. + +Retained distributions in artifacts/: + +* metaclass_registry-0.2.2-py3-none-any.whl,22522bytes, + SHA25667ae17c58d9d10cd58acf83ebe01833c1f1fe0a1a2e281924fab836958d592ed. +* metaclass_registry-0.2.2.tar.gz,30773bytes, + SHA256540bd730c52a535e08866c487b34aa4f9cb2fe857eb07a312882cdc43a15517c. + +verify_publication.py compared all six packaged library Python sources in BOTH +distributions byte-for-byte with exact tagged393a7e03003cdc56df9013f932ed4f26e632d77a. +Wheel metadata/version and source inventory passed. The original read-only +Python3.12 imported metaclass_registry directly from the retained PUBLIC wheel, +not checkout/site-packages: version0.2.2; original selected/full discovery identity +and ImportError/ValueError negative controls all3passed in0.02s. Whole verification +exit0,0.59s,40040KiB peak RSS, CPU0/kernel512MiB/no swap/60s. Exact output and command +are artifact-verification.log and artifact-verification.resources.txt. + +Normally merged OpenHCS main9a04107492ad90233394cf17524d0ca8e74062bb (including +418's root aggregate versus selected-plane capability) into the existing PR414 +branch: mergec054f1674ff4cf4169f4cb175be27d2515711346. Updated ONLY the metaclass +gitlink from prepared4b7d491 to actual released393a7e0. Remaining production diff +against that main is pyproject.toml >=0.2.2,<0.3 and that gitlink; openhcs/ and +tests/ are identical to main. Dependency src/tests/pyproject are unchanged from +reviewed4b7d491. No submodule checkout was initialized or changed. Prior48source +checks/original pinnedR0 zero-positive remain retained; no identical source rerun, +full R1 retry, timeout increase or global qualification claim. + +NRA catalog review: IMPL-12/13 retain original publisher/probe/materialization and +LazyDiscoveryDict importer/registration owner; MEMB-1/2 introduce no parallel +catalog/roster; TIME-3/4 require the actual published API through the package +minimum, not a compatibility alias or negotiated fallback. Original source376 +new-declaration/cooperative capability tests remain unchanged. Published-wheel +new-case test creates independent Plugin declarations, exercises selected then +full registration through the original shared owner, and preserves exact identity +without generic consumer edits. No ornamental inheritance or new mechanism. + +After all observer/verifier workers were terminal and no lsof/process handles +remained, removed ONLY owned +/home/ts/.cache/agent-scratch/metaclass-registry-022-publication-20261001 (56KiB). +Canonical root and pytest alias symlinks resolving inside it were checked first. +One durable artifact set and all original evidence/source/history remain. + +PR414 is ready for parent review/merge; installed OpenHCS acceptance and package +installation remain parent-owned. No private/backing environment, native/viewer, +provider or scientific input/output changes. No persisted format changes. + +Initial authorized publication checkpoint (historical) +------------------------------------------------------ + +Owner: Schrodinger. Explicit owner authorization: publish this dependency now +through original scripts/release.py and tag-triggered publisher. No authorization +for other releases or current private installation changes. Parent owns414 minimum +integration and safe fresh installed acceptance while live science remains active. + +Normally fetched/fast-forwarded the clean owned dependency WT to exact merged +393a7e03003cdc56df9013f932ed4f26e632d77a; source/metadata match reviewed4b7d491. +Original annotated v0.2.2 absent before launch. Original installed Python3.12 +executed scripts/release.py once under CPU0/512MiB/no swap/60s. Script reported +current0.2.2/PyPI0.2.1; answered y. Direct terminal exit0, no restart/replay. +Original release session66838 transcript is release-session.typescript. + +Actual original publication handles +----------------------------------- + +* Annotated tag object c88166848834c402b0a059db37ed8a141cd42147. +* Remote tag peel393a7e03003cdc56df9013f932ed4f26e632d77a verified. +* Publisher run36946473814, attempt1, push event v0.2.2/head393a7e0: + https://github.com/OpenHCSDev/metaclass-registry/actions/runs/36946473814 +* Job110649639675, original Build and publish to PyPI, ubuntu-latest: + https://github.com/OpenHCSDev/metaclass-registry/actions/runs/36946473814/job/110649639675 +* Check suite100077633915; check run matches original job, no annotations. +* Original gh run watch --interval10 observer session69246; workflow-watch.log. + +Initial actual state queued, runner_id0, no steps, started_at2026-10-02T00:32:05Z. +Actions permissions enabled/all; pending_deployments empty. No specific cause +established for runner nonassignment. This is original publishing execution, +not optional CI validation or another permission wait. Do not cancel/replay it. + +Artifact/index/API completion is still pending in this initial checkpoint. +No artifacts existed locally or were claimed available at this checkpoint; +one retained set will live in this directory's artifacts/ through the ORIGINAL +OpenHCS materialize_release_files helper, with its SHA256 validation intact. +verify_publication.py uses original probe_release for metadata+installer index, +compares packaged Python source in both wheel/sdist to exact tag393a7e0, and runs +original tests/test_selected_discovery.py directly from that retained PyPI wheel. +It refuses to overwrite or rematerialize an existing artifact directory. +Direct wheel import is not a private install/fresh normal OpenHCS journey. + +Keep414 unmerged until actual index and API proof completes. Public minimum +requires a real0.2.2 distribution, not this tag alone. No package/API shim, +new publisher, new environment, native/viewer, science or provider expenditure. +Resource warning: RAM12.2GiB/home6.1GiB/root7.7GiB/swap10.3GiB; only small +source/metadata operations here. Dependency WT/source remains clean at393a7e0. + +Orchestration cell207 observes the ORIGINAL session69246 rather than a second +publisher/status store. On watcher terminal, it records authoritative workflow +metadata; only actual completed/success/exact393a7e0 admits the verification +command. Original wait_for_release provides a bounded30s/10s index wait; original +materialize_release_files retains one wheel/sdist set; whole source verification +is CPU0/kernel512MiB/no swap/60s in the existing read-only Python3.12 interpreter. +Verification output is artifact-verification.log/resources.txt. Durable source +driver is retained; future disposable API fixtures are owned only at +/home/ts/.cache/agent-scratch/metaclass-registry-022-publication-20261001. +No automated private installation or minimum merge is scheduled. This initial +checkpoint remains pending until actual terminal/index/API observations arrive. diff --git a/docs/validation/metaclass-registry-022-publication-20261001/SHA256SUMS b/docs/validation/metaclass-registry-022-publication-20261001/SHA256SUMS new file mode 100644 index 0000000000..bb77bc3ad2 --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/SHA256SUMS @@ -0,0 +1,13 @@ +45eee23e4ec97cefbfcad768f165e9e9ee8d58b035656e11b555db85d4eb6369 docs/validation/metaclass-registry-022-publication-20261001/RECEIPT.rst +9690d44f2e0426c5ffb19d80356df2f41c32b7ea5a24c144912e8632e5fc8960 docs/validation/metaclass-registry-022-publication-20261001/verify_publication.py +0231889209c76b3d9f6fe4c11dddba6d8cc91359010d82c3d83e967d27cb94ff docs/validation/metaclass-registry-022-publication-20261001/release-session.typescript +7b80e7b28ee1f3111fd7462853e15636d064a368726e6f1d3898ad465036c3f9 docs/validation/metaclass-registry-022-publication-20261001/workflow-initial.json +0422e1a4841db83e61d052634a80036358978812d6b07215d46c53553d34a177 docs/validation/metaclass-registry-022-publication-20261001/job-queued.json +4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945 docs/validation/metaclass-registry-022-publication-20261001/pending-deployments.json +13a18c7696575cf7ec50bbe4c0787637880fcf76471dc46570ad983a31e7598e docs/validation/metaclass-registry-022-publication-20261001/workflow-terminal.json +0470677218e39615ce28d29f1bd1747c4017ce4d6113bcf52a475a22933fd498 docs/validation/metaclass-registry-022-publication-20261001/workflow-watch.log +742a3ac59191573de6dc09097b9d7890776e950d28542d30b75185b232c2fab3 docs/validation/metaclass-registry-022-publication-20261001/github-release.json +0beee0649d3efa7468b4f630d1202595d0bdc81180fe08127d492e298c00f493 docs/validation/metaclass-registry-022-publication-20261001/artifact-verification.log +25afa796fc6061dd476f43347c8c74a3d8659ec1dc1f8955c5a0f08a905a0ff4 docs/validation/metaclass-registry-022-publication-20261001/artifact-verification.resources.txt +67ae17c58d9d10cd58acf83ebe01833c1f1fe0a1a2e281924fab836958d592ed docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2-py3-none-any.whl +540bd730c52a535e08866c487b34aa4f9cb2fe857eb07a312882cdc43a15517c docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2.tar.gz diff --git a/docs/validation/metaclass-registry-022-publication-20261001/artifact-verification.log b/docs/validation/metaclass-registry-022-publication-20261001/artifact-verification.log new file mode 100644 index 0000000000..7f9008bc07 --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/artifact-verification.log @@ -0,0 +1,34 @@ +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 +rootdir: /home/ts/wt/metaclass-registry-selected-discovery-376-20261001 +configfile: pyproject.toml +collected 3 items + +../metaclass-registry-selected-discovery-376-20261001/tests/test_selected_discovery.py . [ 33%] +.. [100%] + +============================== 3 passed in 0.02s =============================== +{ + "source_commit": "393a7e03003cdc56df9013f932ed4f26e632d77a", + "index": { + "available": true, + "detail": "PyPI metadata and installer index serve metaclass-registry==0.2.2 with an installable wheel", + "wheel_url": "https://files.pythonhosted.org/packages/0f/fd/4b3043710035b1c21c0edb5ca24ee7bee8b5fc61a2162d93f527326ab2ed/metaclass_registry-0.2.2-py3-none-any.whl#sha256=67ae17c58d9d10cd58acf83ebe01833c1f1fe0a1a2e281924fab836958d592ed" + }, + "wheel_import": "/home/ts/wt/openhcs-knowledge-declaration-source-376-20261001/docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2-py3-none-any.whl/metaclass_registry/__init__.py", + "exact_source_files_checked_in_wheel_and_sdist": 6, + "api_controls": "original selected/full discovery and both failure controls passed", + "artifacts": [ + { + "path": "/home/ts/wt/openhcs-knowledge-declaration-source-376-20261001/docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2-py3-none-any.whl", + "size": 22522, + "sha256": "67ae17c58d9d10cd58acf83ebe01833c1f1fe0a1a2e281924fab836958d592ed" + }, + { + "path": "/home/ts/wt/openhcs-knowledge-declaration-source-376-20261001/docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2.tar.gz", + "size": 30773, + "sha256": "540bd730c52a535e08866c487b34aa4f9cb2fe857eb07a312882cdc43a15517c" + } + ], + "installation": "none; direct retained-wheel import in original read-only interpreter" +} diff --git a/docs/validation/metaclass-registry-022-publication-20261001/artifact-verification.resources.txt b/docs/validation/metaclass-registry-022-publication-20261001/artifact-verification.resources.txt new file mode 100644 index 0000000000..673479c067 --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/artifact-verification.resources.txt @@ -0,0 +1,24 @@ +Running as unit: run-p2726043-i15339559.scope; invocation ID: 6f8d248733e6475abd8d7760a69f4d91 + Command being timed: "timeout 60s taskset -c 0 env PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 NUMBA_NUM_THREADS=1 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -I -B docs/validation/metaclass-registry-022-publication-20261001/verify_publication.py /home/ts/wt/metaclass-registry-selected-discovery-376-20261001 --scratch /home/ts/.cache/agent-scratch/metaclass-registry-022-publication-20261001" + User time (seconds): 0.28 + System time (seconds): 0.06 + Percent of CPU this job got: 58% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.59 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 40040 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 11156 + Voluntary context switches: 119 + Involuntary context switches: 65 + Swaps: 0 + File system inputs: 0 + File system outputs: 152 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2-py3-none-any.whl b/docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2-py3-none-any.whl new file mode 100644 index 0000000000..ecda496085 Binary files /dev/null and b/docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2-py3-none-any.whl differ diff --git a/docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2.tar.gz b/docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2.tar.gz new file mode 100644 index 0000000000..095e2ac191 Binary files /dev/null and b/docs/validation/metaclass-registry-022-publication-20261001/artifacts/metaclass_registry-0.2.2.tar.gz differ diff --git a/docs/validation/metaclass-registry-022-publication-20261001/github-release.json b/docs/validation/metaclass-registry-022-publication-20261001/github-release.json new file mode 100644 index 0000000000..6d60fa911f --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/github-release.json @@ -0,0 +1,24 @@ +{ + "tagName": "v0.2.2", + "targetCommitish": "main", + "publishedAt": "2026-10-02T00:57:52Z", + "url": "https://github.com/OpenHCSDev/metaclass-registry/releases/tag/v0.2.2", + "assets": [ + { + "name": "metaclass_registry-0.2.2-py3-none-any.whl", + "apiUrl": "https://api.github.com/repos/OpenHCSDev/metaclass-registry/releases/assets/604473210", + "url": "https://github.com/OpenHCSDev/metaclass-registry/releases/download/v0.2.2/metaclass_registry-0.2.2-py3-none-any.whl", + "size": 22522, + "state": "uploaded", + "digest": "sha256:67ae17c58d9d10cd58acf83ebe01833c1f1fe0a1a2e281924fab836958d592ed" + }, + { + "name": "metaclass_registry-0.2.2.tar.gz", + "apiUrl": "https://api.github.com/repos/OpenHCSDev/metaclass-registry/releases/assets/604473209", + "url": "https://github.com/OpenHCSDev/metaclass-registry/releases/download/v0.2.2/metaclass_registry-0.2.2.tar.gz", + "size": 30773, + "state": "uploaded", + "digest": "sha256:540bd730c52a535e08866c487b34aa4f9cb2fe857eb07a312882cdc43a15517c" + } + ] +} diff --git a/docs/validation/metaclass-registry-022-publication-20261001/job-queued.json b/docs/validation/metaclass-registry-022-publication-20261001/job-queued.json new file mode 100644 index 0000000000..6aa5094ac2 --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/job-queued.json @@ -0,0 +1 @@ +{"completed_at":null,"conclusion":null,"id":110649639675,"labels":["ubuntu-latest"],"runner_group_name":"","runner_id":0,"runner_name":"","started_at":"2026-10-02T00:32:05Z","status":"queued","steps":[]} diff --git a/docs/validation/metaclass-registry-022-publication-20261001/pending-deployments.json b/docs/validation/metaclass-registry-022-publication-20261001/pending-deployments.json new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/pending-deployments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/docs/validation/metaclass-registry-022-publication-20261001/release-session.typescript b/docs/validation/metaclass-registry-022-publication-20261001/release-session.typescript new file mode 100644 index 0000000000..86dcdfc564 --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/release-session.typescript @@ -0,0 +1,17 @@ +Script started on 2026-10-01 20:31:57-04:00 [COMMAND="systemd-run --user --scope -p MemoryMax=512M -p MemorySwapMax=0 -p CPUQuota=100% -- timeout 60s taskset -c 0 env PYTHONDONTWRITEBYTECODE=1 OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 NUMBA_NUM_THREADS=1 /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -B scripts/release.py" TERM="dumb" TTY="/dev/pts/6" COLUMNS="80" LINES="24"] +Running as unit: run-p2677172-i15228715.scope; invocation ID: bbe88d2a6ed540829fe834ae3fc6fd65 +Current package version: 0.2.2 +Current PyPI version: 0.2.1 +Create release for v0.2.2? [y/N] y +Enumerating objects: 1, done. +Counting objects: 100% (1/1) Counting objects: 100% (1/1), done. +Writing objects: 100% (1/1) Writing objects: 100% (1/1), 173 bytes | 173.00 KiB/s, done. +Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) +To https://github.com/OpenHCSDev/metaclass-registry.git + * [new tag] v0.2.2 -> v0.2.2 + +Successfully created and pushed tag v0.2.2 +GitHub Actions workflow should start automatically. +Monitor progress at: https://github.com/OpenHCSDev/metaclass-registry/actions + +Script done on 2026-10-01 20:32:02-04:00 [COMMAND_EXIT_CODE="0"] diff --git a/docs/validation/metaclass-registry-022-publication-20261001/verify_publication.py b/docs/validation/metaclass-registry-022-publication-20261001/verify_publication.py new file mode 100644 index 0000000000..1562491348 --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/verify_publication.py @@ -0,0 +1,94 @@ +"""Verify original public artifacts without installation or a second publisher.""" + +import argparse +import hashlib +import json +import subprocess +import sys +import tarfile +from email.parser import BytesParser +from pathlib import Path +from zipfile import ZipFile + +parser = argparse.ArgumentParser(description=__doc__) +parser.add_argument("source", type=Path) +parser.add_argument("--scratch", type=Path, required=True) +args = parser.parse_args() +evidence = Path(__file__).resolve().parent +sys.path.insert(0, str(evidence.parents[2])) +from scripts.wait_for_pypi_release import materialize_release_files, wait_for_release + +source = args.source.resolve() +expected_commit = "393a7e03003cdc56df9013f932ed4f26e632d77a" +actual_commit = subprocess.check_output( + ["git", "-C", str(source), "rev-parse", "HEAD"], text=True, +).strip() +assert actual_commit == expected_commit +assert subprocess.check_output( + ["git", "-C", str(source), "rev-parse", "v0.2.2^{commit}"], text=True, +).strip() == expected_commit +probe = wait_for_release( + "metaclass-registry", "0.2.2", timeout_seconds=30.0, + poll_interval_seconds=10.0, +) +assert probe.available, probe.detail +artifacts = evidence / "artifacts" +assert not artifacts.exists(), "retain existing artifacts; never replay materialization" +paths = materialize_release_files("metaclass-registry", "0.2.2", artifacts) +wheels = tuple(path for path in paths if path.name.endswith(".whl")) +sdists = tuple(path for path in paths if path.name.endswith(".tar.gz")) +assert len(wheels) == len(sdists) == 1 +assert len(paths) == 2 +wheel, sdist = wheels[0], sdists[0] +source_paths = tuple(path for path in subprocess.check_output( + ["git", "-C", str(source), "ls-tree", "-r", "--name-only", expected_commit, + "--", "src/metaclass_registry"], text=True, +).splitlines() if path.endswith(".py")) +with ZipFile(wheel) as distribution, tarfile.open(sdist) as source_distribution: + wheel_sources = { + name for name in distribution.namelist() + if name.startswith("metaclass_registry/") and name.endswith(".py") + } + assert wheel_sources == {path.removeprefix("src/") for path in source_paths} + assert not any(name.endswith(".pyc") for name in distribution.namelist()) + metadata_names = tuple( + name for name in distribution.namelist() if name.endswith(".dist-info/METADATA") + ) + assert len(metadata_names) == 1 + metadata = BytesParser().parsebytes(distribution.read(metadata_names[0])) + assert metadata["Name"] == "metaclass-registry" + assert metadata["Version"] == "0.2.2" + for path in source_paths: + blob = subprocess.check_output( + ["git", "-C", str(source), "show", f"{expected_commit}:{path}"], + ) + assert distribution.read(path.removeprefix("src/")) == blob, path + member = source_distribution.extractfile(f"{sdist.name.removesuffix('.tar.gz')}/{path}") + assert member is not None + with member: + assert member.read() == blob, path + +# Import directly from the one retained PyPI wheel, not checkout/site-packages. +sys.path.insert(0, str(wheel)) +import metaclass_registry +assert metaclass_registry.__file__.startswith(f"{wheel}/") +assert metaclass_registry.__version__ == "0.2.2" +import pytest +result = pytest.main([ + "--noconftest", "-o", "addopts=", "-p", "no:cacheprovider", + f"--basetemp={args.scratch / 'pytest'}", + str(source / "tests/test_selected_discovery.py"), +]) +assert result == 0, f"published-wheel API controls failed: {result}" +print(json.dumps({ + "source_commit": expected_commit, + "index": {"available": probe.available, "detail": probe.detail, + "wheel_url": probe.wheel_url}, + "wheel_import": metaclass_registry.__file__, + "exact_source_files_checked_in_wheel_and_sdist": len(source_paths), + "api_controls": "original selected/full discovery and both failure controls passed", + "artifacts": [{"path": str(path), "size": path.stat().st_size, + "sha256": hashlib.sha256(path.read_bytes()).hexdigest()} + for path in paths], + "installation": "none; direct retained-wheel import in original read-only interpreter", +}, indent=2), flush=True) diff --git a/docs/validation/metaclass-registry-022-publication-20261001/workflow-initial.json b/docs/validation/metaclass-registry-022-publication-20261001/workflow-initial.json new file mode 100644 index 0000000000..f292434cbb --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/workflow-initial.json @@ -0,0 +1 @@ +{"conclusion":"","createdAt":"2026-10-02T00:32:04Z","databaseId":36946473814,"event":"push","headBranch":"v0.2.2","headSha":"393a7e03003cdc56df9013f932ed4f26e632d77a","jobs":[{"completedAt":"0001-01-01T00:00:00Z","conclusion":"","databaseId":110649639675,"name":"Build and publish to PyPI","startedAt":"2026-10-02T00:32:05Z","status":"queued","steps":[],"url":"https://github.com/OpenHCSDev/metaclass-registry/actions/runs/36946473814/job/110649639675"}],"status":"queued","url":"https://github.com/OpenHCSDev/metaclass-registry/actions/runs/36946473814"} diff --git a/docs/validation/metaclass-registry-022-publication-20261001/workflow-terminal.json b/docs/validation/metaclass-registry-022-publication-20261001/workflow-terminal.json new file mode 100644 index 0000000000..d0afd19f4d --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/workflow-terminal.json @@ -0,0 +1,118 @@ +{ + "conclusion": "success", + "databaseId": 36946473814, + "event": "push", + "headBranch": "v0.2.2", + "headSha": "393a7e03003cdc56df9013f932ed4f26e632d77a", + "jobs": [ + { + "completedAt": "2026-10-02T00:58:17Z", + "conclusion": "success", + "databaseId": 110649639675, + "name": "Build and publish to PyPI", + "startedAt": "2026-10-02T00:57:37Z", + "status": "completed", + "steps": [ + { + "completedAt": "2026-10-02T00:57:39Z", + "conclusion": "success", + "name": "Set up job", + "number": 1, + "startedAt": "2026-10-02T00:57:38Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:57:40Z", + "conclusion": "success", + "name": "Checkout code", + "number": 2, + "startedAt": "2026-10-02T00:57:39Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:57:40Z", + "conclusion": "success", + "name": "Set up Python", + "number": 3, + "startedAt": "2026-10-02T00:57:40Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:57:42Z", + "conclusion": "success", + "name": "Install build dependencies", + "number": 4, + "startedAt": "2026-10-02T00:57:40Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:57:44Z", + "conclusion": "success", + "name": "Build package", + "number": 5, + "startedAt": "2026-10-02T00:57:42Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:57:48Z", + "conclusion": "success", + "name": "Check distribution", + "number": 6, + "startedAt": "2026-10-02T00:57:44Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:57:53Z", + "conclusion": "success", + "name": "Create GitHub Release", + "number": 7, + "startedAt": "2026-10-02T00:57:48Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:58:15Z", + "conclusion": "success", + "name": "Publish to PyPI", + "number": 8, + "startedAt": "2026-10-02T00:57:53Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:58:15Z", + "conclusion": "success", + "name": "Post Publish to PyPI", + "number": 14, + "startedAt": "2026-10-02T00:58:15Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:58:15Z", + "conclusion": "success", + "name": "Post Set up Python", + "number": 15, + "startedAt": "2026-10-02T00:58:15Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:58:16Z", + "conclusion": "success", + "name": "Post Checkout code", + "number": 16, + "startedAt": "2026-10-02T00:58:15Z", + "status": "completed" + }, + { + "completedAt": "2026-10-02T00:58:16Z", + "conclusion": "success", + "name": "Complete job", + "number": 17, + "startedAt": "2026-10-02T00:58:16Z", + "status": "completed" + } + ], + "url": "https://github.com/OpenHCSDev/metaclass-registry/actions/runs/36946473814/job/110649639675" + } + ], + "status": "completed", + "url": "https://github.com/OpenHCSDev/metaclass-registry/actions/runs/36946473814" +} diff --git a/docs/validation/metaclass-registry-022-publication-20261001/workflow-watch.log b/docs/validation/metaclass-registry-022-publication-20261001/workflow-watch.log new file mode 100644 index 0000000000..2d4473c9b0 --- /dev/null +++ b/docs/validation/metaclass-registry-022-publication-20261001/workflow-watch.log @@ -0,0 +1,1008 @@ +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 2 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 2 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 2 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 2 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 2 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 3 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 3 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 3 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 3 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 3 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 3 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 4 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 4 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 4 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 4 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 4 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 5 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 5 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 5 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 5 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 5 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 5 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 6 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 6 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 6 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 6 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 6 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 6 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 7 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 7 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 7 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 7 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 7 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 7 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 8 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 8 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 8 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 8 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 8 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 9 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 9 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 9 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 9 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 9 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 9 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 10 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 10 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 10 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 10 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 10 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 10 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 11 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 11 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 11 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 11 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 11 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 12 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 12 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 12 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 12 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 12 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 12 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 13 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 13 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 13 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 13 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 13 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 13 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 14 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 14 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 14 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 14 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 14 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 15 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 15 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 15 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 15 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 15 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 15 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 16 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 16 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 16 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 16 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 16 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 16 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 17 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 17 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 17 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 17 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 17 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 18 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 18 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 18 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 18 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 18 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 18 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 19 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 19 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 19 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 19 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 19 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 19 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 20 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 20 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 20 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 20 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 20 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 21 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 21 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 21 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 21 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 21 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 21 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 22 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 22 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 22 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 22 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 22 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 22 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 23 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 23 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 23 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 23 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 23 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 23 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 24 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 24 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 24 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 24 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 24 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 25 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 25 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 25 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 25 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 25 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) + ✓ Set up job + ✓ Checkout code + ✓ Set up Python + ✓ Install build dependencies + ✓ Build package + * Check distribution + * Create GitHub Release + * Publish to PyPI + * Post Set up Python + * Post Checkout code +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 25 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) + ✓ Set up job + ✓ Checkout code + ✓ Set up Python + ✓ Install build dependencies + ✓ Build package + ✓ Check distribution + ✓ Create GitHub Release + * Publish to PyPI + * Post Publish to PyPI + * Post Set up Python + * Post Checkout code +Refreshing run status every 10 seconds. Press Ctrl+C to quit. + +* v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 26 minutes ago + +JOBS +* Build and publish to PyPI (ID 110649639675) + ✓ Set up job + ✓ Checkout code + ✓ Set up Python + ✓ Install build dependencies + ✓ Build package + ✓ Check distribution + ✓ Create GitHub Release + * Publish to PyPI + * Post Publish to PyPI + * Post Set up Python + * Post Checkout code +✓ v0.2.2 Publish to PyPI · 36946473814 +Triggered via push about 26 minutes ago + +JOBS +✓ Build and publish to PyPI in 40s (ID 110649639675) + ✓ Set up job + ✓ Checkout code + ✓ Set up Python + ✓ Install build dependencies + ✓ Build package + ✓ Check distribution + ✓ Create GitHub Release + ✓ Publish to PyPI + ✓ Post Publish to PyPI + ✓ Post Set up Python + ✓ Post Checkout code + ✓ Complete job diff --git a/docs/validation/selected-discovery-release-022-SHA256SUMS b/docs/validation/selected-discovery-release-022-SHA256SUMS new file mode 100644 index 0000000000..2b860575ff --- /dev/null +++ b/docs/validation/selected-discovery-release-022-SHA256SUMS @@ -0,0 +1,5 @@ +7cd9d87e95e6fa126b026c9ebe5318cae6f0db2060fcb1f9b76946d65f65603a docs/validation/selected-discovery-release-022-probe.json +31704c7fafd27915b07fa37fe4ff2860c9fc57a84cae6d29b36b6f990de6d150 docs/validation/selected-discovery-release-022-probe.resources.txt +dc7ae3abeec2d9c22fc02904a2c7cae12e07ee4e82923f49507e9386ee4ebc72 docs/validation/selected-discovery-release-022-source.log +29c7c539e72b2a7ea5eeecc78d0f63e47295ad7481d342f37f2ca054664304fb docs/validation/selected-discovery-release-022-dependency-r0.json +d84918440598f01fec5d398291c0a693a29877fd835181e835ca4fa23984e529 docs/validation/selected-discovery-release-022-dependency-r0.resources.txt diff --git a/docs/validation/selected-discovery-release-022-dependency-r0.json b/docs/validation/selected-discovery-release-022-dependency-r0.json new file mode 100644 index 0000000000..f94be654ce --- /dev/null +++ b/docs/validation/selected-discovery-release-022-dependency-r0.json @@ -0,0 +1,86 @@ +{ + "root": "src/metaclass_registry/", + "base_revision": "3294a69dabc9f99dd646c32571b8f97cc139d378", + "head_revision": "9d181724bf3eac9d06b6bd990312f722911c66fb", + "paths": [ + "src/metaclass_registry/__init__.py" + ], + "base": { + "StringDispatch:src/metaclass_registry/__init__.py": 0, + "TypeSwitch:src/metaclass_registry/__init__.py": 0, + "StringDispatchArms:src/metaclass_registry/__init__.py": 0, + "TypeSwitchArms:src/metaclass_registry/__init__.py": 0, + "GodClassExcess:src/metaclass_registry/cache.py::CacheKeyCodec": 0, + "GodClassExcess:src/metaclass_registry/cache.py::CacheConfig": 0, + "GodClassExcess:src/metaclass_registry/cache.py::RegistryCacheManager": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegistryKeyAttribute": 0, + "GodClassExcess:src/metaclass_registry/core.py::SecondaryRegistryDict": 0, + "GodClassExcess:src/metaclass_registry/core.py::LazyDiscoveryDict": 0, + "GodClassExcess:src/metaclass_registry/core.py::SecondaryRegistry": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegistryFamily": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegistryConfig": 0, + "GodClassExcess:src/metaclass_registry/core.py::AutoRegisterMeta": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegisteredEnumMeta": 0, + "GodClassExcess:src/metaclass_registry/exceptions.py::RegistryError": 0, + "GodClassExcess:src/metaclass_registry/exceptions.py::DiscoveryError": 0, + "GodClassExcess:src/metaclass_registry/exceptions.py::CacheError": 0, + "TypeIdentity": 0, + "LongBooleanChain": 0, + "BooleanChainTerms:src/metaclass_registry/__init__.py": 0, + "ForeignAbsenceProbe:src/metaclass_registry/__init__.py": 0, + "CodecSubclass:src/metaclass_registry/__init__.py": 0, + "StringSubscript": 0 + }, + "head": { + "StringDispatch:src/metaclass_registry/__init__.py": 0, + "TypeSwitch:src/metaclass_registry/__init__.py": 0, + "StringDispatchArms:src/metaclass_registry/__init__.py": 0, + "TypeSwitchArms:src/metaclass_registry/__init__.py": 0, + "GodClassExcess:src/metaclass_registry/cache.py::CacheKeyCodec": 0, + "GodClassExcess:src/metaclass_registry/cache.py::CacheConfig": 0, + "GodClassExcess:src/metaclass_registry/cache.py::RegistryCacheManager": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegistryKeyAttribute": 0, + "GodClassExcess:src/metaclass_registry/core.py::SecondaryRegistryDict": 0, + "GodClassExcess:src/metaclass_registry/core.py::LazyDiscoveryDict": 0, + "GodClassExcess:src/metaclass_registry/core.py::SecondaryRegistry": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegistryFamily": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegistryConfig": 0, + "GodClassExcess:src/metaclass_registry/core.py::AutoRegisterMeta": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegisteredEnumMeta": 0, + "GodClassExcess:src/metaclass_registry/exceptions.py::RegistryError": 0, + "GodClassExcess:src/metaclass_registry/exceptions.py::DiscoveryError": 0, + "GodClassExcess:src/metaclass_registry/exceptions.py::CacheError": 0, + "TypeIdentity": 0, + "LongBooleanChain": 0, + "BooleanChainTerms:src/metaclass_registry/__init__.py": 0, + "ForeignAbsenceProbe:src/metaclass_registry/__init__.py": 0, + "CodecSubclass:src/metaclass_registry/__init__.py": 0, + "StringSubscript": 0 + }, + "delta": { + "StringDispatch:src/metaclass_registry/__init__.py": 0, + "TypeSwitch:src/metaclass_registry/__init__.py": 0, + "StringDispatchArms:src/metaclass_registry/__init__.py": 0, + "TypeSwitchArms:src/metaclass_registry/__init__.py": 0, + "GodClassExcess:src/metaclass_registry/cache.py::CacheKeyCodec": 0, + "GodClassExcess:src/metaclass_registry/cache.py::CacheConfig": 0, + "GodClassExcess:src/metaclass_registry/cache.py::RegistryCacheManager": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegistryKeyAttribute": 0, + "GodClassExcess:src/metaclass_registry/core.py::SecondaryRegistryDict": 0, + "GodClassExcess:src/metaclass_registry/core.py::LazyDiscoveryDict": 0, + "GodClassExcess:src/metaclass_registry/core.py::SecondaryRegistry": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegistryFamily": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegistryConfig": 0, + "GodClassExcess:src/metaclass_registry/core.py::AutoRegisterMeta": 0, + "GodClassExcess:src/metaclass_registry/core.py::RegisteredEnumMeta": 0, + "GodClassExcess:src/metaclass_registry/exceptions.py::RegistryError": 0, + "GodClassExcess:src/metaclass_registry/exceptions.py::DiscoveryError": 0, + "GodClassExcess:src/metaclass_registry/exceptions.py::CacheError": 0, + "TypeIdentity": 0, + "LongBooleanChain": 0, + "BooleanChainTerms:src/metaclass_registry/__init__.py": 0, + "ForeignAbsenceProbe:src/metaclass_registry/__init__.py": 0, + "CodecSubclass:src/metaclass_registry/__init__.py": 0, + "StringSubscript": 0 + } +} diff --git a/docs/validation/selected-discovery-release-022-dependency-r0.resources.txt b/docs/validation/selected-discovery-release-022-dependency-r0.resources.txt new file mode 100644 index 0000000000..0ed151cf0d --- /dev/null +++ b/docs/validation/selected-discovery-release-022-dependency-r0.resources.txt @@ -0,0 +1,24 @@ +Running as unit: run-p2656422-i15265826.scope; invocation ID: 67d242be75134d1c8f8cb3038f86025f + Command being timed: "timeout 60s taskset -c 0 env PYTHONDONTWRITEBYTECODE=1 XDG_CACHE_HOME=/home/ts/.cache/agent-scratch/selected-discovery-release-022-20261001/cache OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 NUMBA_NUM_THREADS=1 /home/ts/.local/share/uv/python/cpython-3.14-linux-x86_64-gnu/bin/python3.14 -I -B -c import sys;sys.path[:0]=["/home/ts/wt/comms-ratchet-pinned-ui348-20261001/src","/home/ts/wt/basicpy-live-candidate-20260930/.venv/lib/python3.12/site-packages"];from agent_comms.debt_ratchet import main;sys.argv=["agent-comms-ratchet","--root","src/metaclass_registry","--base","3294a69dabc9f99dd646c32571b8f97cc139d378","--head","HEAD"];sys.exit(main())" + User time (seconds): 0.59 + System time (seconds): 0.15 + Percent of CPU this job got: 92% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.81 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 44240 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 23759 + Voluntary context switches: 495 + Involuntary context switches: 456 + Swaps: 0 + File system inputs: 0 + File system outputs: 16 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/selected-discovery-release-022-probe.json b/docs/validation/selected-discovery-release-022-probe.json new file mode 100644 index 0000000000..3ba6ce3299 --- /dev/null +++ b/docs/validation/selected-discovery-release-022-probe.json @@ -0,0 +1,16 @@ +{ + "interpreter": "/home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python", + "dependency_module": "/home/ts/wt/metaclass-registry-selected-discovery-376-20261001/src/metaclass_registry/__init__.py", + "candidate_version": "0.2.2", + "openhcs_requirement": "metaclass-registry<0.3,>=0.2.2", + "original_openhcs_requirement": "metaclass-registry<0.3,>=0.2.1", + "original_accepts_api_incompatible_021": true, + "original_021_commit": "ca0a87e873f929b311a87a4d60cd3bfba315dbcf", + "original_missing_api_error": "'LazyDiscoveryDict' object has no attribute 'discover_matching'", + "new_api_call": "passed; unconfigured registry performs no discovery", + "installed_or_published": false, + "index_probe": { + "available": false, + "detail": "exact release is not visible yet" + } +} diff --git a/docs/validation/selected-discovery-release-022-probe.resources.txt b/docs/validation/selected-discovery-release-022-probe.resources.txt new file mode 100644 index 0000000000..6ab52a7ac2 --- /dev/null +++ b/docs/validation/selected-discovery-release-022-probe.resources.txt @@ -0,0 +1,24 @@ +Running as unit: run-p2653964-i15230987.scope; invocation ID: 87c8798e8c0a408a88410cc71b64fd0c + Command being timed: "timeout 60s taskset -c 0 env PYTHONDONTWRITEBYTECODE=1 OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 NUMBA_NUM_THREADS=1 XDG_CACHE_HOME=/home/ts/.cache/agent-scratch/selected-discovery-release-022-20261001/cache /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -B docs/validation/diagnose-selected-discovery-release-022.py /home/ts/wt/metaclass-registry-selected-discovery-376-20261001 --probe-index" + User time (seconds): 0.15 + System time (seconds): 0.04 + Percent of CPU this job got: 56% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.35 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 31904 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 8055 + Voluntary context switches: 52 + Involuntary context switches: 49 + Swaps: 0 + File system inputs: 72 + File system outputs: 8 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/selected-discovery-release-022-source.log b/docs/validation/selected-discovery-release-022-source.log new file mode 100644 index 0000000000..a01d698b54 --- /dev/null +++ b/docs/validation/selected-discovery-release-022-source.log @@ -0,0 +1,41 @@ +Running as unit: run-p2654481-i15231014.scope; invocation ID: eac580953c8943ce8ef975db930e86f3 +Interpreter: /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python 3.12.3 (main, May 22 2025, 14:39:13) [GCC 14.2.1 20250207] +Discovery owner: /home/ts/wt/metaclass-registry-selected-discovery-376-20261001/src/metaclass_registry/__init__.py +============================= test session starts ============================== +platform linux -- Python 3.12.3, pytest-8.3.5, pluggy-1.6.0 +rootdir: /home/ts/wt/metaclass-registry-selected-discovery-376-20261001 +configfile: pyproject.toml +collected 48 items + +../metaclass-registry-selected-discovery-376-20261001/tests/test_selected_discovery.py . [ 2%] +.. [ 6%] +../metaclass-registry-selected-discovery-376-20261001/tests/test_core.py . [ 8%] +.................................. [ 79%] +../metaclass-registry-selected-discovery-376-20261001/tests/test_discovery.py . [ 81%] +........ [ 97%] +../metaclass-registry-selected-discovery-376-20261001 . [100%] + +============================== 48 passed in 0.56s ============================== + Command being timed: "timeout 60s taskset -c 0 env PYTHONDONTWRITEBYTECODE=1 PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 NUMBA_NUM_THREADS=1 XDG_CACHE_HOME=/home/ts/.cache/agent-scratch/selected-discovery-release-022-20261001/cache /home/ts/wt/openhcs-generated-inputs-installed-parent-20261001/.venv/bin/python -B docs/validation/knowledge-selected-source-tests.py /home/ts/wt/metaclass-registry-selected-discovery-376-20261001/tests/test_selected_discovery.py /home/ts/wt/metaclass-registry-selected-discovery-376-20261001/tests/test_core.py /home/ts/wt/metaclass-registry-selected-discovery-376-20261001/tests/test_discovery.py tests/unit/test_validate_local_release_floors.py::test_dynamic_hatch_version_path_is_the_candidate_authority --basetemp=/home/ts/.cache/agent-scratch/selected-discovery-release-022-20261001/pytest" + User time (seconds): 0.79 + System time (seconds): 0.08 + Percent of CPU this job got: 100% + Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.87 + Average shared text size (kbytes): 0 + Average unshared data size (kbytes): 0 + Average stack size (kbytes): 0 + Average total size (kbytes): 0 + Maximum resident set size (kbytes): 42372 + Average resident set size (kbytes): 0 + Major (requiring I/O) page faults: 0 + Minor (reclaiming a frame) page faults: 10556 + Voluntary context switches: 28 + Involuntary context switches: 138 + Swaps: 0 + File system inputs: 0 + File system outputs: 232 + Socket messages sent: 0 + Socket messages received: 0 + Signals delivered: 0 + Page size (bytes): 4096 + Exit status: 0 diff --git a/docs/validation/selected-discovery-release-022.rst b/docs/validation/selected-discovery-release-022.rst new file mode 100644 index 0000000000..b0dd34398f --- /dev/null +++ b/docs/validation/selected-discovery-release-022.rst @@ -0,0 +1,118 @@ +Selected-discovery public installer coordination +================================================ + +Current delivery checkpoint +---------------------------- + +Dependency0.2.2 is now PUBLISHED from exact merged/tagged393a7e0 through the +original publisher36946473814/job110649639675, terminal SUCCESS. Original OpenHCS +helpers verified metadata AND normal installer-index availability; one retained +wheel/sdist set matches all six library sources at393a7e0; original public-wheel +API controls3passed,0.59s/40040KiB for the complete bounded verifier. Details, +artifact paths/checksums and exact handles: +metaclass-registry-022-publication-20261001/RECEIPT.rst. + +Existing PR414 normally integrates current main9a0410749 (including416/418) and +advances the metaclass gitlink to actual release393a7e0. Its only production +changes against that main are the coordinated >=0.2.2,<0.3 minimum and gitlink. +Public availability/API gate is complete; ready for parent review/merge, without +hosted CI wait. Parent owns subsequent installation/live user acceptance. No +private install or science/native replay was performed. Original preparation and +queued-publication observations below remain historical evidence, not current +availability or authorization restrictions. No persisted format changes. + +Historical preparation and publication observations +--------------------------------------------------- + +Owner: Schrodinger. Base OpenHCS mainf2aabe45a84d9834eef37d1862f0d0290ba73b63. +Draft minimum >=0.2.2,<0.3; DO NOT MERGE before authorized dependency publication +and exact ordinary installer-index/API verification. No artifact publication or +private install is authorized here. Parent owns safe installed retrieval science +closure. Existing issue376 remains open for that10s installed acceptance. + +Paired original metaclass-registry version preparation uses its original Hatch +version source, prepares0.2.2 from mergedmain3294a69 and retains PR2's production +owners/tests. The final gitlink will select the paired prepared source explicitly. +Old >=0.2.1 accepts an actual published source without discover_matching; new +minimum excludes that API-incompatible selection without a shim/default-off path. +Source tests reuse CandidateRequirementCompatibility/read_release_candidate from +the original release-floor owner and selected-discovery tests, not another schema +or discovery/API registry. Original published v0.2.1 source is a retained negative +control, not replay of custom registration or scientific data. + +Merge gate: authorized dependency0.2.2 publication through original tag-triggered +publisher, verified exact wheel/sdist/API and installer visibility using original +scripts.wait_for_pypi_release.probe_release, then fresh normal-install acceptance +by the parent at a safe live slot. This draft alone does not establish that gate. +No new publisher/checker/registry, installed change, build environment or provider +call. Existing declared upper bound remains <0.3. No persisted formats change. + +Ownership check found no active metaclass PR/issue or OpenHCS release claimant for +this seam. Both old376WTs and branches/history are retained; new draft branches +reuse those same owned persistent worktrees, with no new worktree or environment. +NRA MEMB-1/TIME-3 review: version/requirements remain package metadata facts; +original declarative API and cooperative discovery mechanisms remain unchanged. + +Visible drafts and bounded evidence +----------------------------------- + +Dependency https://github.com/OpenHCSDev/metaclass-registry/pull/3 prepares the +version declaration0.2.2 from main3294a69. OpenHCS +https://github.com/OpenHCSDev/openhcs/pull/414 stages the coordinated minimum; +DO NOT MERGE before the availability gate above. The dependency implementation +and tests remain original mergedPR2; only __version__ and changelog change. + +Source reproducer diagnose-selected-discovery-release-022.py reads actual +f2aabe45 OpenHCS metadata, invokes original v0.2.1 core from exact commit +ca0a87e873f929b311a87a4d60cd3bfba315dbcf and observes missing-method AttributeError. +Common imports use current source; this is a narrow API-absence witness, not a +fresh old-wheel/install proof. Draft requirement rejects0.2.1, accepts0.2.2, +excludes0.3 and requires the actual Hatch-declared candidate version. Original +metadata-only probe_release reports0.2.2 unavailable,0.35s/31904KiB; exit0 +means source witness completed, NOT that dependency publication succeeded. + +48source checks pass,0.87s/42372KiB, covering selected/full discovery/core and +original Hatch metadata authority. Version declaration9d18172 is tested; original +pinned R0 main3294a69 ->9d18172 has24projections,zero positive,0.81s/44240KiB. +Original tool3b03785f/Python3.14 unchanged. OpenHCS production/tests are identical +to mergedf2aabe45; no redundant full R0/R1 retry for metadata-only changes. +Prior CP new-declaration/cooperative MRO controls remain the reviewed376 evidence. + +Exact commands/resources: selected-discovery-release-022-probe.resources.txt, +selected-discovery-release-022-source.log and dependency-r0.resources.txt; +probe/dependency-r0 JSON persist separately. Original read-only Python3.12 for +source checks, Python3.14 for original R0, CPU0/512MiB/no swap/60s serial. +No tag, artifact upload, workflow dispatch, private install, provider/native or +uncertain registration/input replay. Publication authorization remains explicit. + +Cleanup: after terminal source workers, no matching process/open lsof handles, +and canonical no-symlink check, removed only owned +/home/ts/.cache/agent-scratch/selected-discovery-release-022-20261001 (300KiB). +Durable source/history/original failures and the previous376worktree are retained. + +Exact paired prepared gitlink4b7d491e816ed8806a1f52e6302d38c05c78dfcb is published +on dependency PR3. Only receipt text follows tested version source9d18172; +src/tests are byte-identical. This is prepared source, not published0.2.2. +No dependency tag is created. Checksums are in selected-discovery-release-022-SHA256SUMS. + +Subsequent explicit publication authorization +--------------------------------------------- + +Owner subsequently authorized this dependency publication immediately. PR3 is +merged393a7e03003cdc56df9013f932ed4f26e632d77a; original release.py executed once, +confirmed y for0.2.2/PyPI0.2.1 and pushed annotated tag v0.2.2, terminal exit0. +Remote tag object c88166848834c402b0a059db37ed8a141cd42147 peels exactly393a7e0. +Original publisher36946473814/job110649639675 is queued, no hosted runner/steps; +Actions enabled and no pending deployment approval. No specific cause established. + +Current evidence/verification driver: +docs/validation/metaclass-registry-022-publication-20261001/RECEIPT.rst. +Original10s GH watcher session69246 retained; orchestration cell207 observes that +same watcher and schedules bounded original-helper materialization/API verification +only on actual terminal success. No publisher restart/replay or another publisher. +This is actual artifact creation, not an optional CI validation gate. Keep414 +unmerged until the verified metadata/index/artifact/API receipt succeeds; parent +owns the final minimum/gitlink integration and safe private installation. No current +private/backing environment or live science process change. Prior draft restrictions +on publication above describe the earlier unauthorised stage, not a permission wait +after this explicit authorization. No artifact availability/completion claimed yet. diff --git a/external/metaclass-registry b/external/metaclass-registry index 3294a69dab..393a7e0300 160000 --- a/external/metaclass-registry +++ b/external/metaclass-registry @@ -1 +1 @@ -Subproject commit 3294a69dabc9f99dd646c32571b8f97cc139d378 +Subproject commit 393a7e03003cdc56df9013f932ed4f26e632d77a diff --git a/pyproject.toml b/pyproject.toml index 23f93a2e03..f8381a155c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -100,7 +100,7 @@ dependencies = [ "pycodify>=0.1.3,<0.2", "objectstate>=1.1.8,<2", "python-introspect>=0.1.14,<0.2", - "metaclass-registry>=0.2.1,<0.3", + "metaclass-registry>=0.2.2,<0.3", "arraybridge>=0.3.4,<0.4", "polystore>=0.3.0,<0.4", "pyqt-reactive>=0.3.25,<0.4",