0.2.0 post-release verification — 21 September 2026
This is evidence for a particular revision, not a claim about every later build. The original release preparation was completed in #62 and #64. The post-publication documentation follow-up is #77.
Revisions and publication status
| Item | Verified value |
|---|---|
| Requested historical baseline | 272fff1a39af0ed3031eb8998c2fd17eccb91152, superseded before this audit |
| Audited current master | df9b0085a251f57087299e9c22efb19f10ae77b3 |
Published source and v0.2.0 tag |
31997407010d6e38f99970d0b3b319135a0d5d15 |
| Package version | 0.2.0, unchanged |
| Current PyPI version observed | 0.2.0, published 21 September 2026 |
| Publication during this audit | None; no upload, tag or GitHub release created |
PyPI already serves the Capability Compiler release, including Repository Readiness. Its public metadata identifies the original publishing commit and Trusted Publisher. Already-completed
55 stays closed; no feature is implemented or removed by this audit.
The old preparation request's assumptions that PyPI still served 0.1.3.1 and that repository readiness was future work no longer describe the repository. The maintainer confirmed that the audit should use current master instead.
Public positioning and documentation review
The former notebook-to-container identity was replaced in #64 by “Apizr is an open-source capability compiler for Python codebases.” The retained legacy pipeline is explicitly labeled and is not described as deprecated.
| Surface | Result at the audited revision |
|---|---|
pyproject.toml |
Current compiler summary, project name/version, README, authors, GPL-3.0-or-later expression, Python bounds, truthful Python classifiers and repository/documentation/issues URLs |
| README / PyPI description | Positioning; discover/understand/expose/govern; PyPI-first install; small example; conceptual flow; governed execution; legacy workflow; trust boundary; documentation/contributing/license |
| Homepage | Factual compiler introduction, start/release links and discover/understand/expose/govern sections; no placeholder copy |
| Start here | Python 3.11–3.14 installation and scan/graph/inspect/readiness/REST/MCP example without Docker; legacy path follows current workflows |
| Navigation | All 52 Markdown pages occur in navigation; no missing targets. Primary workflows precede legacy reference; engineering records are in the archive |
| Release and migration notes | Root changelog and docs/releases/0.2.0.md exist with the actual release date; compatibility guide explains supported Python, installed imports, output-directory/API changes and incremental adoption from 0.1.x |
| Site metadata | Current compiler description, meaningful homepage/start-here titles and descriptions, 2023–2026 copyright, working site/repository URLs |
| Customization | Obsolete Twitter announcement and generated overrides/main.html are absent. home.html serves the restored hero; branding CSS, bee logo, favicon and Product Hunt badge are used and retained |
| CLI / application metadata | Top-level help leads with the compiler; inspect/scan/graph/generate/execute/readiness help succeeds. Legacy flags remain; installed CLI/application versions use package metadata |
| Repository hygiene | No tracked wheel/sdist, cache, compiled Python or generated site/build directory. The existing editor settings and historical/golden fixtures are retained; no speculative deletions |
All 30 distinct URL strings found in README, project metadata, MkDocs settings,
homepage, introduction and overrides returned HTTP 200, including redirects.
The required GitHub repository, documentation and PyPI entry points passed.
Product Hunt redirects to the current product page; its image endpoint works.
Every README Markdown link is HTTPS and absolute, including badges and images.
twine check --strict passed for both published files and both audited CI files.
The rendered PyPI description presents the current compiler workflows.
The wording audit classified older Python ranges in the original foundation and security records as historical evidence or explicit migration exclusions. The MCP specification's “development version” identifies a locked development dependency, not an unpublished Apizr release. No obsolete Twitter/X announcement, placeholder homepage or “source of truth until release” instruction was found in current-facing material. Historical records are unchanged.
“Experimental” remains appropriate for governed execution: tested contracts and
refusal behavior do not establish a general untrusted-code service. Current
README, guides and help describe trusted code, local-process limitations, OCI's
non-VM boundary and the distinction between static READY and runtime safety.
No maturity claim is promoted and no canonical contract or fixture is changed.
Analytics remains configured with unchecked optional consent and reject/settings controls. Its ownership/purpose decision remains in #73. This audit neither adds tracking nor repeats the earlier browser consent experiment as new evidence.
Correction resulting from this audit
The publication guide still instructed maintainers to keep 0.2.0, create v0.2.0 and publish/install that fixed version. The workflow already refuses a used PyPI version, but the text had become stale. The follow-up distinguishes the completed release from current verification builds and derives a future tag from the explicitly authorized project version. It changes no version or workflow.
The new report is linked from the engineering archive, whose purpose remains historical verification rather than primary user guidance. README, homepage, package metadata and runtime code need no additional rewrite for this finding.
Distributions and identity
The CI package job built wheel and sdist once from the audited commit, inspected them and installed the same wheel outside checkout on Python 3.11 and 3.14. Both archives were downloaded and independently inspected again in this audit: 193 wheel files and 194 sdist files. Runtime Python/templates, README metadata and license are present; repository-only tests, caches, build outputs, local absolute paths and private-key markers are excluded by the distribution check.
| Metadata | Wheel and sdist, published and audited CI |
|---|---|
| Name | outerspace-apizr |
| Version | 0.2.0 |
| Summary | Compile Python codebases into discoverable, typed and governable capabilities. |
| Requires-Python | >=3.11,<3.15 |
| License-Expression | GPL-3.0-or-later |
| Project-URL | Repository, Documentation, Issues; all verified |
| Requires-Dist | 12 declarations; audited CI requirements match pyproject.toml semantically |
| Long description | text/markdown; CI content matches the audited README |
The runtime source and uv.lock are unchanged between the published tag and this
master. Subsequent documentation/build-policy changes mean the distribution bytes
differ despite sharing the same package version. Never substitute the later files
or their attestations for the original published files.
| File | Original PyPI SHA-256 | Audited CI SHA-256 |
|---|---|---|
outerspace_apizr-0.2.0-py3-none-any.whl |
ca9e2bd360dc0f0b2ffd855a0630e09da06ef51e7c4f82de7a677b0e56ac2230 |
213d03ad44c4101826477d22daeef00c74177d62a04ecde72914e255d1df68ad |
outerspace_apizr-0.2.0.tar.gz |
7359de134b7ab67b58888758b8b916283fdd2740b453be2c8af699a4cbf8c6fa |
55d8ad42d331676c3cf7e949a26feacb9c0af2512364943e3fdc4a5686090781 |
The public files were downloaded and matched PyPI's SHA-256 values. A local
uv build from a clean git archive export of the audited master produced the
same two hashes as CI. This is one observed reproduction, not a general guarantee
across arbitrary build-tool versions or environments. No rebuilt file was uploaded.
GitHub provenance verification passed for both CI distributions and their
ci-evidence.tar.gz, enforcing the repository, CI workflow identity, exact source
digest and refs/heads/master. The signed evidence contains the source/lock,
universal runtime/validation SBOMs and structured validation reports. These are
GitHub/Sigstore attestations, not the outstanding RFC 3161 Attest receipt.
Verification results
The full matrix ran on clean GitHub Actions checkouts of the exact audited master, rather than on the historical baseline or the original release tag:
- CI, including package/container/OCI/mutations/provenance
- Security, including locked dependency audit and Python CodeQL
- Documentation
- Default CodeQL analysis
These successful runs were reused and their artifacts inspected; this audit does not describe the entire Linux/OCI matrix as locally rerun. Local additional checks used a clean source export, archive inspection, rebuild, strict Twine validation, fresh installed-wheel smoke and public URL checks. The documentation follow-up has its own strict build and PR gates.
| Release-readiness item | Result and evidence |
|---|---|
| Version | 0.2.0, unchanged |
| PyPI current | 0.2.0, already published |
| Package metadata/content | PASS — wheel and sdist independently inspected |
| README/PyPI rendering | PASS — strict Twine on published and CI distributions; absolute README links |
| Docs build | PASS — strict build on audited commit; links and anchors checked |
| Ruff / Pyright / pre-commit | PASS — quality job; strict Pyright scopes retained for compiler/runtime packages, standard mode for the remaining legacy code |
| Python 3.11 | PASS — 1,500 passed, 38 skipped; 90.87% branch-aware coverage |
| Python 3.12 | PASS — 1,500 passed, 38 skipped; 90.99% |
| Python 3.13 | PASS — 1,500 passed, 38 skipped; 90.99% |
| Python 3.14 | PASS — 1,500 passed, 38 skipped; 90.65% |
| macOS 3.11 / 3.14 | PASS — each 1,499 passed, 39 skipped; 90.93% / 90.74% |
| Wheel install | PASS — CI Python 3.11/3.14 and an additional fresh local Python 3.14 install outside checkout |
| Legacy pipeline | PASS — installed notebook smoke and Linux container matrix 3.11–3.14 |
| REST/MCP | PASS — installed direct/governed standalone generation and runtime, Python/notebook inputs |
| Scanner/Graph/Readiness | PASS — installed repository-first/artifact-first parity and README example |
| OCI isolation | PASS — 200 dedicated tests plus 7 repeated-sample cases; 99.64% combined coverage |
| Security mutations | PASS — green baseline and all 17 targeted mutants killed |
| Dependency audit | PASS — runtime 72, development 57, documentation 30, security tooling 29 resolved entries; zero known findings in each scope |
| CodeQL | PASS — explicit Python and default Python/Actions analyses |
| Provenance | PASS — isolated signing job and independent subject/source/identity verification |
| New publication of these 0.2.0 builds | BLOCKED intentionally — version already exists; not authorized or attempted |
| Complete audit/policy parity | NOT COMPLETE — outstanding #73 decisions and work remain |
The 38 ordinary-suite skips cover dedicated OCI checks; macOS additionally skips the non-UTF-8 filesystem case. Repeated OCI samples do not add independent unique test coverage and the dedicated suite overlaps the ordinary suite. Counts must not be summed into a misleading number of distinct tests.
All existing floors passed. The following ranges span Linux Python 3.11–3.14; OCI rows use the dedicated job:
| Package or scope | Observed coverage | Required floor |
|---|---|---|
| Global | 90.65–90.99% | 90% |
| Capability IR | 99.40–99.43% | 90% |
| Static readiness | 98.88–98.92% | 90% |
| REST generator | 98.80–98.90% | 90% |
| MCP generator | 97.06–97.17% | 90% |
| Interface contracts | 96.86–97.03% | 90% |
| Execution | 96.12–96.21% | 90% |
| Governed transports | 98.68–98.71% | 90% |
| Repository scanner | 99.17–99.22% | 90% |
| Capability graph | 97.84–98.78% | 90% |
| Repository readiness | 99.14–99.20% | 90% |
| Readiness/repository CLI and worker/supervisor/protocol subsets | PASS in every matrix job | 90% each |
| Legacy modules | 59.56–59.91% | 59.5% |
| OCI / governed OCI | 99.27% / 100% | 90% each; Docker/provider/supervisor subset also passed |
No gate or coverage threshold was lowered. Dependency findings are a dated audit result, not a promise of future vulnerability absence or a reviewed license inventory.
Subsequent PR verification incident
The first CI attempt for the documentation follow-up
#78, on commit
0a92ab60aa76a7a0e31e3e4fda043501a1e107de, failed one existing Python 3.14 test:
test_ordinary_descendant_is_stopped_with_worker. The timeout and unchanged
heartbeat assertions passed, but ps still reported D instead of an absent
process or zombie. The result was 1 failed, 1,499 passed and 38 skipped; all other
required jobs passed. See
attempt 1.
Runtime code and tests were unchanged from the successful baseline above. A delayed process-state observation is a hypothesis, not a confirmed root cause; the log does not establish whether the descendant later terminated. The incident is tracked independently in #79. The unchanged Python 3.14 job passed its single targeted rerun, attempt 2. No test or threshold changed. That success alone does not resolve the finding or prove that a nonterminal state is acceptable. The dated baseline results must not conceal the subsequent failed observation.
Issue classification and remaining decisions
| Issue | Classification | Disposition |
|---|---|---|
| #77 | Release documentation correction | Fixed by this follow-up; issue closes only when its PR merges |
| #79 | Unresolved verification finding | Ordinary-descendant termination observation failed in the documentation PR's first Python 3.14 run; diagnose before claiming reliable cleanup verification |
| #73 | Evidence/maintenance gap | Remains open; blocks claiming complete audit parity. RFC 3161 receipt, reviewed license inventory/automation, response/disclosure/DCO decisions and Analytics ownership/purpose remain unresolved |
| #49 | Known execution limitation | Absolute subprocess denial unsupported; policies requiring it must be refused |
| #28 | Known legacy bug | Duplicate definitions/overloads remain inconsistent; not claimed fixed by modern contracts |
| #5 | Known scope limitation / future feature | Class and method capabilities remain outside the supported contract |
| #63 | Future dependency-layout work | Full notebook/web dependencies remain installed for static workflows |
| #16 | Legacy requirement gap | Complex-notebook configuration needs a representative case and separate work |
| #15 | Future extensibility work | Plugin/extension architecture not introduced |
| #1 | Legacy acceptance tracking | Historical packaging/deployment acceptance criteria remain open |
| #55 | Completed feature | Already closed before this audit; implemented behavior is retained |
The audited master passed every technical gate, but the subsequent PR exposed the unresolved verification finding in #79. This report is not an unconditional release-readiness declaration. The open issues are real limits: passing the documented path does not resolve them or authorize a new release. In particular, this audit cannot declare full #73 completion or license policy parity. No release issue or limitation is closed merely because it is old.
Trusted Publishing was used for the existing release, as recorded by PyPI. The future release procedure still requires checking the live publisher and protected environment configuration before dispatch; this audit does not claim a fresh inspection of the private PyPI account settings. Publication remains manual, tag-bound and OIDC-based, reusing exact reviewed distributions without a rebuild.
Reproduce the evidence review
The following read-only downloads and local checks identify the exact audited revision and artifacts. They do not dispatch publication:
AUDIT_DIR=$(mktemp -d)
mkdir -p "$AUDIT_DIR/source"
git archive df9b0085a251f57087299e9c22efb19f10ae77b3 |
tar -x -C "$AUDIT_DIR/source"
gh run download 35608744308 --repo Alien6-Studio/outerspace-apizr \
--dir "$AUDIT_DIR/evidence"
gh run download 35608744234 --repo Alien6-Studio/outerspace-apizr \
--name dependency-audit --dir "$AUDIT_DIR/security"
cd "$AUDIT_DIR/source"
uv sync --locked --all-groups
uv run --locked python scripts/check_distribution.py \
"$AUDIT_DIR/evidence/python-distributions" --manifest "$AUDIT_DIR/verified.json"
uvx twine check --strict "$AUDIT_DIR/evidence/python-distributions/"*
uv run --locked python scripts/smoke_wheel.py \
"$AUDIT_DIR/evidence/python-distributions/outerspace_apizr-0.2.0-py3-none-any.whl"
uv build --out-dir "$AUDIT_DIR/rebuilt"
uv run --locked python scripts/check_distribution.py \
"$AUDIT_DIR/rebuilt" --manifest "$AUDIT_DIR/rebuilt.json"
cmp "$AUDIT_DIR/verified.json" "$AUDIT_DIR/rebuilt.json"
for artifact in "$AUDIT_DIR/evidence/python-distributions/"* \
"$AUDIT_DIR/evidence/build-attestations/ci-evidence.tar.gz"; do
gh attestation verify "$artifact" \
--bundle "$AUDIT_DIR/evidence/build-attestations/build-provenance.sigstore.json" \
--repo Alien6-Studio/outerspace-apizr \
--signer-workflow Alien6-Studio/outerspace-apizr/.github/workflows/ci.yml \
--source-digest df9b0085a251f57087299e9c22efb19f10ae77b3 \
--source-ref refs/heads/master || exit 1
done
Actions artifacts have finite retention. Download them before expiration; the original release's retrospective attachment is a separate record and is not a substitute for this commit's evidence.
The exact full-suite commands, per-package thresholds, Python/container matrices,
OCI image setup and signing steps are in the
audited CI workflow.
The corresponding
Security
and Documentation
workflows bind the other results to the same source. Locally rerun documentation
with uv run --locked --group docs mkdocs build --strict and quality hooks with
uv run --locked pre-commit run --all-files after editing this follow-up.