Release Surface Alignment¶
Release surfaces are aligned when one identified candidate exposes the same package identity, public contracts, computational ownership, artifact meaning, scientific boundaries, and maturity state everywhere a consumer can encounter them. Alignment is demonstrated by direct comparison of retained records, not by assuming that independently green workflows describe the same candidate.
flowchart TD
candidate["Commit · version · lock<br/>schemas · evidence state"]
source["Owned runtime and<br/>governance sources"]
builds["Wheel · sdist · installed<br/>commands and resources"]
public["README · package metadata<br/>site · examples"]
assurance["Tests · engines · benchmarks<br/>parity · Evidence Book"]
reports["Boundary · artifact · package<br/>publish-readiness reports"]
decision{"Same identity and meaning?"}
candidate --> source --> decision
candidate --> builds --> decision
candidate --> public --> decision
candidate --> assurance --> decision
candidate --> reports --> decision
Alignment Matrix¶
| Contract | Surfaces that must agree | Evidence to retain |
|---|---|---|
| candidate identity | commit, version, lock, schemas, evidence inputs, optional-engine denominator | identity record and digests before and after review |
| distribution roles | runtime, compatibility alias, maintainer package, wheel and sdist metadata | package-boundary report, built inventories, clean-install results |
| installed interface | source exports/parser, installed imports/commands, API/CLI docs and examples | focused contracts, installed help, OpenAPI hash, strict docs build |
| computational ownership | native implementation, adapter/subprocess, result provenance, method guides | execution-surface report, manifests, controlled/real-engine records |
| artifact semantics | producer, schema/version, consumer, replay, reports and evidence dependencies | compatibility tests, checksums, inventory, replay classification |
| scientific assurance | tests, benchmark rows, parity observations, bundle claims and public statements | selected denominators, tolerances, statuses, freshness, limitations |
| maturity and publication | classifiers, package metadata, readiness policy, release notes | publish scorecard, closure criteria, blocker register, decision packet |
Build The Alignment Packet¶
Generate governance records before enforcing them:
This composes configuration, Evidence Book, artifact, execution, package, and
publish-readiness report surfaces under artifacts/root/. Review each record's
input identity, issue count, status, and limitations. There is no single
release-readiness.json; the report set is intentionally decomposed by owner.
Then collect distribution and public-surface evidence:
Record built artifact digests, clean-install imports and commands, strict docs result, schema hash, and exact selected test/engine/benchmark/evidence records.
Freeze The Candidate Before Verification¶
Admit one commit, version, dependency lock, schema set, evidence state, and optional-engine denominator before the release review begins. Build the wheel, source distribution, documentation, reports, and checks from that admitted identity, then record their digests in the decision packet.
Do not rebuild a failed artifact in place and keep the earlier successful checks. Any source change, lock resolution, generated schema, evidence refresh, artifact rebuild, or selected-engine change creates a different candidate and invalidates every decision edge that consumed the previous identity. Historical records remain valid for their own candidate; they cannot be combined with the new packet.
flowchart LR
admit["Admit candidate<br/>identity"]
build["Build once and<br/>record digests"]
verify["Verify those exact<br/>artifacts and records"]
decide["Sign one immutable<br/>decision packet"]
changed{"Identity changed?"}
admit --> build --> verify --> changed
changed -->|no| decide
changed -->|yes| admit
Verification results must identify their input artifacts, not only the source commit. Two builds from the same commit can differ when the environment, dependency resolution, generated inputs, or external tools differ.
Compare Identity Across Surfaces¶
Verify all of the following resolve to the candidate:
- root and package metadata version;
- wheel and sdist filenames and embedded metadata;
importlib.metadata.version(...)for canonical runtime, alias, and maintainer distributions in clean environments;bijux-phylogenetics --version;- OpenAPI schema hash and artifact schema versions;
- documentation version links and examples;
- Evidence Book input manifests, output checksums, and freshness dependencies;
- benchmark, parity, and real-engine executable/runtime identities.
If two surfaces cannot be joined by exact identity, they cannot jointly support the release decision.
Never Assemble A Composite Candidate¶
Each successful record is valid only for the inputs it names. A wheel built from one commit, documentation rendered from another, an Evidence Book index from a third, and a readiness report from a fourth do not become one candidate because their versions or filenames match. Join records through exact parent identities and digests, not labels.
When a child record lacks a required parent identity, classify that decision edge as unverified. Re-run the child against the admitted candidate or block the release; do not infer the missing join from timestamps, branch names, artifact locations, or individually green status values.
Compare Meaning Across Surfaces¶
Identity equality is necessary but insufficient. Review semantic joins:
| Public statement | Owning record |
|---|---|
| method is native | runtime implementation plus native-only enforcement and numerical assurance |
| result uses MAFFT, IQ-TREE2, MrBayes, or BEAST | external manifest with executable and adapter identity |
| command or Python example is supported | installed parser or curated export and contract test |
| result is reproducible | manifest/replay comparison with exact meaning named |
| numerical behavior agrees | parity or benchmark observation with case, quantity, policy, and denominator |
| study claim is supported | exact Evidence Book claim, check, observation, bundle verdict, and freshness |
| candidate is publishable | publish-readiness blocker register and composed release checks |
Do not let a shared adjective—“ready,” “matched,” “validated,” or “reproducible”—join records that use different definitions.
Review Status Denominators¶
For each test, engine, benchmark, parity, and evidence surface, retain selected case IDs and counts for every status. Verify public summaries do not exclude failed, skipped, unsupported, mismatched, or non-comparable records.
The Evidence Book currently contains 43 bundles across five study families. Release statements about the complete book must resolve to all 43 current manifests, not only the matched PCM1 and PCM2 subsets.
Release Decision Record¶
| Field | Required evidence |
|---|---|
| identity | commit, resolved version, distributions, lock, schemas, Python/platform, governed configuration |
| build | wheel/sdist names, hashes, metadata, licenses, package inventory |
| installed behavior | clean imports, canonical/alias commands, resources, representative structured output |
| public contracts | API/schema hash, CLI discovery, strict docs and semantic tests, examples |
| scientific assurance | exact test/benchmark/parity/evidence lanes, denominators, tolerances, verdicts, freshness |
| external coverage | selected engines, executable versions, executed/skipped/failed cases, manifests |
| governance | config, artifact, execution, package, evidence, publish-readiness report paths and outcomes |
| decision | ready/blocked, blockers, bounded limitations, reviewer, timestamp, artifact destination |
The record is append-only for that candidate. A changed commit, rebuilt distribution, dependency resolution, evidence bundle, or optional-engine selection requires a new packet.
Enforce After Review¶
check-release-readiness enforces configuration source-of-truth, evidence and
artifact governance, execution ownership, package boundaries, package bundles,
and publish readiness. It does not replace source tests, strict docs, package
verification, optional real-engine lanes, benchmark/parity review, or the
human semantic comparison.
Release Blockers¶
Block release for:
- candidate, version, distribution, lock, schema, or evidence identity drift;
- wheel/sdist metadata, inventory, license, or clean-install failure;
- canonical and alias behavior or ownership divergence;
- stale generated references or unsupported documented syntax;
- unresolved schema or artifact compatibility;
- ambiguous native versus external computational ownership;
- missing expected outputs, denominators, diagnostics, or readiness records;
- evidence integrity/freshness failure or a public claim stronger than its retained proof;
- a changed tolerance, excluded case, or weakened gate used to make a contradiction disappear.
Limitation Versus Contradiction¶
| Condition | Release treatment |
|---|---|
claim is explicitly not_comparable, fresh, and described within that boundary |
publishable limitation when readiness policy permits it |
optional engine is unavailable and the selected denominator records skipped |
visible coverage limitation, not a fabricated pass |
| FastTree comparison records an expected model-assumption difference | bounded correspondence limitation; do not call it likelihood parity |
RAxML comparison is unsupported-case |
explicit coverage gap; exclude from favorable aggregate claims |
public prose says matched while the bundle says not_comparable |
blocker: semantic contradiction |
| report is green but candidate identity or skipped cases cannot be reconstructed | blocker: missing decision evidence |
| package installs but canonical and alias behavior diverge | blocker: distribution contract failure |
Readiness means the release claims are supported and contradictions are absent. It does not mean every scientific comparison has a favorable verdict.