Source-determinable re-roll dispositions

Decision date: 2026-08-14.

All six surfaces are keep and declare. An uncalled implementation is not residue when it correctly preserves a capability represented by a vendored core program. The in-process wrappers retain the PR #92 containment boundary, typed Python exceptions, and direct in-process array handling; they do not replace the upstream command position.

ID

Capability and core program

User-facing wiring

Why keep the in-process wrapper

Upstream-compatible position

R04

Deleted interpolation (delint)

Unwired. A semi-continuous-model final smoothing pipeline step plus CLI/config would wire it.

pstrain_delint remains behind @contained, preserving typed failures and in-process accumulator/path arrays without a subprocess boundary.

Parser flag names gated: the built delint parser accepts every fixed flag name emitted by CommandBuilder.delint().

R07

Flat initialization (mk_flat, init_gau, norm)

Wired through the pstrain flat CLI and flat-model pipeline task.

The live pstrain_flat_tmat, pstrain_flat_mixw, pstrain_init_gau, and pstrain_norm_gau calls remain behind @contained, preserving typed failures and direct model-array assembly.

The three core programs are retained; the derived gate establishes parser flag-name acceptance for CommandBuilder.norm() only.

R08

Gaussian splitting (inc_comp)

Wired through the Gaussian-splitting CLI and density-growth training step.

The live pstrain_inc_comp call remains behind @contained, preserving typed failures and direct density-count/model-array handling.

Parser flag names gated for CommandBuilder.inc_comp().

R09

KD-tree construction (kdtree)

Unwired. A semi-continuous-model packaging/decoder-acceleration step plus CLI/config would wire it.

pstrain_kdtree_build remains behind @contained, preserving typed failures and in-process model data handling without a subprocess boundary.

Parser flag names gated for CommandBuilder.kdtree().

R11

MAP adaptation (map_adapt)

Unwired. An adaptation pipeline/CLI stage consuming adaptation-data BW accumulators would wire it.

pstrain_map_adapt remains behind @contained, preserving typed failures and in-process accumulator/model arrays without a subprocess boundary.

Parser flag names gated for CommandBuilder.map_adapt().

R13

Corpus parameter counting (param_cnt)

Unwired. A corpus-diagnostics/state-tying preparation step plus CLI/config would wire it.

pstrain_param_cnt remains behind @contained, preserving typed failures and the in-process native data boundary. Its current Python contract writes the core text count format and returns None; it does not return typed counts.

Parser flag names gated for CommandBuilder.param_cnt().

The containment-routing gate is unchanged. Each Python-to-CFFI entry point above remains @contained; no declared exception is added or weakened.

The declaration JSON is a decision record and has no in-repository enforcement consumer. The derived builder gate resolves commands through the runtime default route (including the supported PSTRAIN_BIN_DIR override), invokes each constructed argv against the selected core program, and checks parser flag-name acceptance. In the paired verification, subject identity separately requires the resolved command programs, pstrain, and libpstrainc to be beneath the checkout under test. Neither gate establishes build provenance for stale in-tree artifacts, subprocess re-entry environment identity, value semantics, multiplicity, ordering, required-argument completeness, valid input files, successful program execution, or native acceptance parity for every feat.params value.