Files
SimurgArray/docs/validation/P10.md
T
kemal 7767a596bb P10 complete: packaging verified on fresh x86_64 and aarch64 VMs
Wheels (pure + manylinux_2_28 kernels), sdist, Docker image and conda packages built and
installed on fresh Ubuntu 24.04 machines; 225 unit tests pass against the installed
package; the tutorial runs with pip (with and without kernels); GTC/VCF content digests are
identical across pip, Docker and conda on both architectures and equal to the Pi's run.
docs/validation/P10.md; guide: install from wheels, Docker, conda; exit code 141.
2026-09-28 23:53:59 +01:00

2.9 KiB

Phase P10 validation — packaging and fresh-machine acceptance

Date: 2026-09-28. Artifacts built and tested on fresh AWS Ubuntu 24.04 VMs (4 vCPU): aarch64 c7g.xlarge and x86_64 m6a.xlarge / c6a.xlarge (one x86 spot instance was reclaimed by AWS after 4 min and relaunched). Cloud cost ≈ $0.10.

Artifacts

Artifact How Notes
simurg-1.0.0-py3-none-any.whl, simurg-1.0.0.tar.gz uv build (hatchling) QC report assets, profiles, LICENSE and THIRD_PARTY_NOTICES.md inside
simurg_core-1.0.0-cp312-abi3-manylinux_2_28_{aarch64,x86_64}.whl maturin --zig --compatibility manylinux_2_28 (both built on either machine) one wheel per architecture for every Python ≥ 3.12; glibc ≥ 2.28
Docker image (Dockerfile) multi-stage, python:3.12-slim-bookworm, non-root user 545 MB (x86_64), 551 MB (aarch64)
conda packages (packaging/conda/) conda build -c conda-forge simurg (noarch) + simurg-core (Rust compiler from conda-forge)

scripts/build_dist.sh builds the wheels and sdist and writes dist/SHA256SUMS. A wheel built on the Pi is not portable (glibc 2.41 symbols such as exp@GLIBC_2.29), hence the zig-linked manylinux build.

Acceptance (plan §18 P10: clean install + tutorial works on a fresh VM)

scripts/cloud/tasks/p10.sh (and p10t.sh, the same without Docker/conda) on each architecture:

Step aarch64 x86_64
Build sdist, pure wheel, both kernel wheels ok ok
pip install into a new venv of the system Python 3.12.3 (with / without kernels) ok / ok ok / ok
Unit tests against the installed package (225) pass pass
Tutorial examples/gsa_demo.sh on 6 demo samples, pip install with kernels ok (506 s) ok (521 s)
Tutorial, pure-Python install ok (539 s) ok (494 s)
Docker build + genotype + gtc-to-vcf ok ok
conda build + install + genotype ok ok

Content digests (scripts/p10/digest.py: every numeric GTC field and sample statistic with NaNs canonicalised, all VCF data lines) of the 6 GTCs and 6 VCFs are identical across all of them: pip with kernels, pip pure, Docker and conda, on aarch64 and on x86_64, and equal to the Raspberry Pi's own run of the same tutorial. The x86_64 results come from AMD EPYC (m6a/c6a) machines; bit-exactness had so far only been shown on ARM.

Found and fixed

  • simurg inspect … | head made the CLI report E_INTERNAL: BrokenPipeError and exit 1, which stopped the tutorial under set -o pipefail (it passed on the Pi only by timing luck). A closed stdout now exits with 141 (like a tool killed by SIGPIPE) and prints nothing; the tutorial reads with sed instead of head; unit test added.
  • The fast extra (simurg[fast] → simurg-core) was dropped: uv must resolve every extra, and simurg-core is not on a package index. The kernels are installed as their own wheel.