PanorAi 3.8.0 release checklist

This minor release publishes the composed spherical API developed after 3.7: the typed Pipeline, general spherical NumPy operations, generic CPU Torch layers, the spherical image-object workflow, Stable SLIC, application wrappers, and the role-based component catalog. The checklist records evidence for one exact candidate; it does not authorize a tag or publication.

Candidate identity

  • [ ] One exact reviewed protected-main commit contains every release input and has no uncommitted or untracked release changes.

  • [ ] CHANGELOG.md, CITATION.cff, README, setuptools-scm fallback, publisher workflow, Pages recovery, API inventory/schema, manifest, artifact policy, and contract tests identify exactly 3.8.0 / v3.8.0.

  • [ ] A fresh review covers the complete v3.7.0..candidate diff and verifies that every public surface is documented at its actual stability tier.

  • [ ] Published tags and package-index files through 3.7.0 remain immutable.

Stable composition contract

  • [ ] panorai-spherical-pipeline/v1 passes nesting, routing, mixed raster and non-raster branches, deterministic batching, grid transformation, support, validity, autograd, safe persistence, and content-addressed cache tests.

  • [ ] panorai-spherical-ops/v1 passes seam, pole, modality, grid, support, and validity tests for its general NumPy operations.

  • [ ] panorai-spherical-ops-torch/v1 passes CPU float32/float64 parity, autograd, grid transformation, serialization, and installed-wheel tests. CUDA and MPS remain outside the Stable device guarantee.

  • [ ] EquirectangularImage passes owned immutable open, constant, sample, new, conversion, resize, thumbnail, active 3D rotation, transpose, tangent crop, filter, paste, and composite contracts without inferring validity from values.

  • [ ] panorai-spherical-slic/v1 passes the prospectively frozen rotation, planar-limit, seam, connectivity, area, determinism, and installed-wrapper gates.

  • [ ] No Stable or Compatibility name from 3.7 is removed, re-tiered, or given a new runtime warning.

Experimental boundary

  • [ ] DoG application wrappers, dense stereo, relative pose, CAM/SAM instance workflows, graph, reconstruction, and SLAM remain explicitly Experimental with their unresolved scientific gates visible.

  • [ ] SphericalMaskRCNNWorkflow / mask_rcnn.workflow() are canonical for the executable CAM/SAM/heuristic workflow; the former Experimental SphericalMaskRCNNPaper alias remains object-identical and mask_rcnn.paper() warns before delegating.

  • [ ] The future trainable SphericalMaskRCNN remains unbound and no trainer, dataset framework, checkpoint, or model weight enters the package.

  • [ ] Relative pose reports rotation plus unit translation direction only; capture eligibility never substitutes for post-estimation acceptance and no metric translation scale is implied.

Documentation, package, and licensing boundary

  • [ ] Quick Start, API-level guides, concepts, component catalog, exhaustive public inventory, migration guide, and executable examples agree with the machine-readable stability inventory.

  • [ ] Strict Sphinx builds with zero warnings from source and extracted sdist; public examples run against an installed wheel outside the checkout.

  • [ ] Wheel and sdist contain no dataset, checkpoint, cache, generated output, private evidence, unapproved vendor source, or serialized callable/pickle.

  • [ ] Torch and model integrations remain optional and lazy; importing panorai, panorai.geometry, Pipeline, NumPy ops, or the catalog does not load Torch, Open3D, model code, or perform network/cache writes.

  • [ ] The role-based catalog contains every audited public surface and symbol; additions continue to require explicit catalog/stability registration.

Source, wheel, and platform validation

  • [ ] Full warnings-as-errors tests and Ruff check/format pass on the exact candidate; strict MyPy programs, compileall, JSON/schema, and diff checks are green.

  • [ ] Protected CI passes source and installed-wheel matrices on Python 3.11–3.14, Torch CPU, oldest/newest dependencies, Windows fixture integrity, strict docs, and content/license policy.

  • [ ] Both native extensions build and execute on Linux x86_64/aarch64, macOS Intel/arm64, and Windows AMD64 for Python 3.11–3.14.

  • [ ] The hosted aggregate contains exactly 20 wheels and one normalized sdist; filenames, versions, hashes, member inventories, Twine checks, provenance, and source commit are recorded.

  • [ ] Fresh installed-wheel consumers outside the checkout exercise SLIC, DoG, stereo, Mask R-CNN Workflow, mixed Pipeline composition, spherical nn.Sequential, and registered save/load/cache behavior where dependencies are available.

  • [ ] A distinct fresh review reproduces the artifact inventory and the release-required installed-package evidence from the exact candidate.

Publication sequence — separate authorization required

  1. Merge only after every protected PR job passes; repeat the complete matrix on the exact protected-main merge commit.

  2. Record GO-CANDIDATE only after exact merged-source, aggregate-artifact, installed-wheel, license/content, and reviewer evidence are green.

  3. After explicit publication authorization, change only the three protected environment selectors from v3.7.0 to v3.8.0, preserving reviewers, administrator enforcement, custom policies, and Trusted Publishers.

  4. Create one signed annotated v3.8.0 tag on the exact candidate and publish one GitHub Release, the sole trigger of python-publish.yml.

  5. Verify TestPyPI serves the exact workflow-built files and run installed native, geometry, Pipeline, spherical ops, Torch, consumer, and documentation checks.

  6. Promote the identical files to PyPI, attach checksums/provenance, and deploy Pages. No manual upload may bypass a failed gate.

  7. Install panorai==3.8.0 from production PyPI in a fresh environment and verify exact version, origin, public exports, native extensions, consumers, and artifact identity.

Published tags and index files are immutable and may not be moved, deleted, recreated, or replaced.