Spherical application promotion protocol

SLIC, DoG, StereoDepth and Mask R-CNN Workflow are evaluated independently; they are not promoted by implementation tests alone. Their prospective criteria are frozen in contracts/spherical-application-promotion-v1.json. SLIC has passed its frozen prospective criteria and is Stable as panorai-spherical-slic/v1. The other three wrappers remain Experimental.

The protocol requires:

  • analytic geometry, validity and seam evidence for SLIC, plus public-wrapper non-axis-aligned SO(3) rotation oracles and a local planar-limit comparison;

  • analytic spherical blobs plus two external held-out corpora for DoG;

  • an analytic textured sphere plus independent Matterport3D and Stanford2D3D held-out records for StereoDepth;

  • real external CAM/SAM checkpoints and annotated panoramic held-out data for the paper Mask R-CNN method.

Evidence is bound to the exact protocol bytes by SHA-256. Missing records, development-only records, non-finite metrics and a changed protocol hash all fail closed. Thresholds cannot be relaxed after held-out results are opened.

Print the current protocol identity:

python scripts/evaluate_spherical_application_promotion.py \\
    --print-protocol-sha256

Evaluate an external evidence record:

python scripts/evaluate_spherical_application_promotion.py \\
    --evidence /external/results/promotion-evidence.json \\
    --output /external/results/promotion-decision.json

The evaluator checks the submitted measurements and cohort structure. It does not download datasets, accept model licenses, generate annotations, or turn a deterministic adapter smoke test into scientific evidence. Each requirement is decided independently; a failure for DoG, StereoDepth, or Mask R-CNN Workflow does not revoke the completed SLIC promotion.

DoG reviewed profile

The original multi-application protocol above records historical DoG evidence, but it cannot promote data that had already been used during development. The candidate SphericalDoGFeatures.reviewed_profile() therefore has a dedicated prospective contract in contracts/dog-reviewed-profile-promotion-v1.json and a bound development exclusion ledger in contracts/dog-development-exclusions-v1.json.

The public identity panorai-spherical-dog-features/reviewed-v1 fixes dense spherical DoG, tangent-patch extraction and RootSIFT. Its constructor and catalog entry remain Experimental at protocol creation time. Free-form configurations, coarse-to-fine detection and alternative descriptors are outside the candidate boundary.

Reproduce the already frozen analytic oracle through the exact factory with both convolution backends:

python benchmarks/spherical_dog/run_reviewed_analytic.py \
    --backend numpy \
    --source-root /clean/source/checkout \
    --source-commit <40-character-commit> \
    --output /external/results/dog-reviewed-analytic-numpy.json

python benchmarks/spherical_dog/run_reviewed_analytic.py \
    --backend native \
    --wheel /external/dist/panorai-<exact-version>-<tags>.whl \
    --source-commit <40-character-commit> \
    --output /external/results/dog-reviewed-analytic-native.json

The NumPy development reproduction requires an exact clean source checkout. The installed/native reproduction verifies direct_url.json, wheel SHA-256, artifact version and SCM commit marker before evaluating the oracle.

First construct an inventory of registered candidate pairs without feature outputs. Each JSONL row contains corpus, scene_id, pair_id, a separate exclusion_group_id and two views with safe relative RGB/range paths and their precomputed SHA-256 identities, R_world_to_camera and center_world, plus precomputed directional cloud overlap. scene_id is the independent spatial scene used for the one-pair-per-scene rule; exclusion_group_id is the coarser group bound to the development ledger (for example, a Stanford area). The frozen eligibility range is overlap at least 0.50 and metric baseline from 0.15 through 2.50 metres. Freeze the cohort before the first feature inference:

python benchmarks/spherical_dog/build_reviewed_holdout_manifest.py \
    --inventory /licensed/audits/dog-pair-inventory.jsonl \
    --matterport-root /licensed/prepared/matterport3d \
    --stanford-root /licensed/prepared/stanford2d3d \
    --frozen-at 2026-10-20T00:00:00Z \
    --output /external/results/dog-reviewed-holdout.json

The selector reads identifiers, registered poses, the precomputed geometric overlap audit, asset presence and precomputed asset identities only. It does not open RGB pixels, radial-range values, features, matches or evaluation results. It selects six scene-, view- and asset-disjoint pairs from each corpus, excludes every development group in the bound ledger and refuses to overwrite the result.

Only after the manifest is frozen, execute the profile and the independent pose/radial-range/occlusion correspondence oracle:

python benchmarks/spherical_dog/run_reviewed_holdout.py \
    --manifest /external/results/dog-reviewed-holdout.json \
    --inventory /licensed/audits/dog-pair-inventory.jsonl \
    --matterport-root /licensed/prepared/matterport3d \
    --stanford-root /licensed/prepared/stanford2d3d \
    --source-commit <40-character-commit> \
    --output /external/results/dog-reviewed-heldout.json

Native 2:1 ERPs are accepted at their corpus resolution and deterministically resampled to 512x1024 for this gate: area interpolation for RGB and nearest sampling for radial range. This preprocessing is part of the frozen protocol; it is not selected after seeing results.

For each corpus, the fixed gate requires repeatability at least 0.60, median angular localization error at most 1 degree and verified-inlier precision at least 0.80. Thresholds cannot change after the manifest is opened. Failure leaves the entire profile Experimental.

The same protocol separately requires installed-wheel timing records at 512x1024, 2048x4096 and a native resolution, plus an installed-wheel Python 3.11/3.14 matrix on at least two platforms. Use benchmark_reviewed_profile.py and run_installed_profile.py from the same directory in clean environments. Evaluate the combined external evidence with:

python scripts/evaluate_spherical_application_promotion.py \
    --protocol contracts/dog-reviewed-profile-promotion-v1.json \
    --evidence /external/results/dog-reviewed-complete-evidence.json \
    --source-commit <40-character-candidate-commit> \
    --output /external/results/dog-reviewed-decision.json

Creating these tools is the first promotion PR. A second tier-only PR is permitted only after every record passes and an independent reviewer reproduces the source, artifact and held-out evidence.

Registered full-sphere stereo

The supplied-pose full-sphere route has a narrower prospective protocol in contracts/registered-full-sphere-stereo-promotion-v1.json. It is separate because promoting the registered route must not promote automatic pose, scale recovery, optional multiscale/tMGM paths, custom profiles, or calibrated probability claims.

The protocol freezes one public profile, requires native and NumPy analytic oracles, a new view-disjoint Stanford2D3D/Matterport3D cohort, installed wheels on at least two platforms and Python 3.11/3.14, streaming-memory evidence, and review by someone other than the implementer. Hashes of every previously observed public cohort are denied explicitly, so replaying development data cannot close the new held-out gate.

Freeze the new pair selection before running dense inference. The builder uses only registered overlap, metric baseline, asset presence and the frozen domain/group balance. It automatically excludes every prior public stereo manifest and refuses to run if any forbidden manifest has drifted:

python benchmarks/panoramic_stereo/build_registered_stereo_promotion_manifest.py \
    --overlap /licensed/audits/registered-cloud-overlap.jsonl \
    --analysis /licensed/audits/pair-analysis.jsonl \
    --stanford-root /licensed/prepared/stanford2d3d \
    --matterport-root /licensed/prepared/matterport3d \
    --frozen-at 2026-10-17T03:30:00Z \
    --output /external/results/registered-stereo-holdout.json

The output must contain six Stanford2D3D and six Matterport3D pairs with no pair or view reuse. It records the input-audit hashes, protocol hash, prior manifest hashes and a canonical payload hash. Dataset range values are used only later to define the prediction-independent non-sky/no-return population; they are not inspected during pair selection. The command refuses to overwrite an already frozen manifest.

After the manifest is frozen, run the exact reviewed profile. The evaluator streams one pair at a time, repeats each inference to require byte-identical numerical arrays, and emits one protocol-ready record per corpus:

python benchmarks/panoramic_stereo/run_registered_stereo_heldout.py \
    --manifest /external/results/registered-stereo-holdout.json \
    --stanford-root /licensed/prepared/stanford2d3d \
    --matterport-root /licensed/prepared/matterport3d \
    --source-commit <40-character-commit> \
    --filter-backend native \
    --output-dir /external/results/registered-stereo-heldout-run

external-evidence.json contains fixed-denominator, solid-angle-weighted coverage, delta <1.25 and conditional >2x error. The non-sky/no-return mask is the positive finite dataset range and is constructed independently of prediction validity; rejected predictions inside the remaining population stay in the denominator. Invalid range output must be NaN. The generated evidence is still only one section of the promotion protocol and cannot promote the method by itself.

Print or evaluate this protocol with the same fail-closed evaluator:

python scripts/evaluate_spherical_application_promotion.py \
    --protocol contracts/registered-full-sphere-stereo-promotion-v1.json \
    --print-protocol-sha256

python scripts/evaluate_spherical_application_promotion.py \
    --protocol contracts/registered-full-sphere-stereo-promotion-v1.json \
    --evidence /external/results/registered-stereo-evidence.json \
    --output /external/results/registered-stereo-decision.json

Creating the protocol does not promote the route. The runtime interface and both granular inventory records remain explicitly Experimental until every record passes and the evidence is independently reproduced.

The analytic records are generated from an installed wheel, outside the checkout, with the fixture frozen in the protocol:

/path/to/venv/bin/python \
    benchmarks/panoramic_stereo/run_registered_stereo_promotion.py \
    --backend native \
    --source-commit <40-character-commit> \
    --output /external/results/registered-stereo-native.json

Run the same command with --backend numpy. The runner executes the reviewed profile twice, compares every result array for determinism, and evaluates an alternative unary cost only to prove that geometric observability is cost-independent. It refuses to import PanorAi from the source checkout.

For each required native installed-wheel matrix cell, bind the exact wheel and emit its artifact record in the same fresh process:

/path/to/venv/bin/python \
    benchmarks/panoramic_stereo/run_registered_stereo_promotion.py \
    --backend native \
    --source-commit <40-character-commit> \
    --wheel /external/dist/panorai-<version>-<tag>.whl \
    --output /external/results/analytic-native.json \
    --installed-output /external/results/installed-native.json

The frozen memory oracle uses process peak resident memory, not Python-only allocation tracing. It includes imports and fixture construction, runs the 512x1024 two-source profile with at most one complete dense result alive, and requires a peak no greater than 2 GiB. The runner also checks installed origin, wheel metadata and bytes, development-version commit binding, native extension availability, the analytic oracle and public-facade configuration round-trip. Four records are still required: Python 3.11 and 3.14 on at least two platforms.

The SLIC oracle does not compare integer label identities directly. It uses a maximum-overlap assignment, solid-angle-weighted agreement, and a one-pixel boundary tolerance. Rotated labels are sampled with nearest-neighbour semantics. The fixed scenes, rotations, shapes, parameters, and thresholds live in the protocol rather than in an after-the-fact report.