Finding (elegance review of #426 step 2, 2026-09-04)
The σ_r fold family is spelled TWICE: MaterialXSField.{foldable_sigma, residual_sig_s} (the facade) and TransferOperator.{foldable_sigma, foldable_part, residual_part, is_foldable_into_sigma_r} (the operator core, orpheus/transport/operators/transfer.py). [M] they agree bitwise today; the DSA consumer (orpheus/sn/acceleration/dsa.py, mat_xs.foldable_sigma()) reads the FACADE's; nothing in production reads the operator's ("Data API only").
#426 step 2 made the operator's half generic in the yield — foldable_sigma returns y·diag(Σ_{c,0}), because Σ_r = Σ_t − y·Σ_{c,0}^{g→g} removes the EMISSION — and left the facade's half y-blind and (n,2n)-blind. The day a consistent-DSA session (#2) wants a low-order operator for the (n,2n) fold, mat_xs.foldable_sigma() returns the scattering diagonal with no yield and no channel: the facade half is now the one that goes wrong first.
Retired in the same carve: MaterialXSField.is_p0_diagonal_with_zero_n2n (zero callers; its ⚠ note asked #426 step 2 to re-derive whether a P0-only test suffices — it does: rowsum(Σ₂ₙ,0) = σ₂ₙ and |Σ_ℓ| ≤ Σ₀ entrywise mean a zero P0 row forces every ℓ block of that row to zero, so the predicate was never wrong, merely dead).
What to do
The retirement trigger already exists — the F-1 facade dissolution (orpheus/transport/mesh/material_xs_field.py, "until F-1 dissolves the facade"). Until then, the facade's fold accessors must either read the operator's (one spelling) or say in their docstrings that they are the y-blind SCATTERING-only half and must not be reached for on the (n,2n) channel. Any DSA work that folds a channel's within-group block goes through TransferOperator.foldable_part() (which preserves the term and the yield).
Finding (elegance review of #426 step 2, 2026-09-04)
The σ_r fold family is spelled TWICE:
MaterialXSField.{foldable_sigma, residual_sig_s}(the facade) andTransferOperator.{foldable_sigma, foldable_part, residual_part, is_foldable_into_sigma_r}(the operator core,orpheus/transport/operators/transfer.py).[M]they agree bitwise today; the DSA consumer (orpheus/sn/acceleration/dsa.py,mat_xs.foldable_sigma()) reads the FACADE's; nothing in production reads the operator's ("Data API only").#426 step 2 made the operator's half generic in the yield —
foldable_sigmareturnsy·diag(Σ_{c,0}), becauseΣ_r = Σ_t − y·Σ_{c,0}^{g→g}removes the EMISSION — and left the facade's half y-blind and (n,2n)-blind. The day a consistent-DSA session (#2) wants a low-order operator for the (n,2n) fold,mat_xs.foldable_sigma()returns the scattering diagonal with no yield and no channel: the facade half is now the one that goes wrong first.Retired in the same carve:
MaterialXSField.is_p0_diagonal_with_zero_n2n(zero callers; its ⚠ note asked #426 step 2 to re-derive whether a P0-only test suffices — it does:rowsum(Σ₂ₙ,0) = σ₂ₙand|Σ_ℓ| ≤ Σ₀entrywise mean a zero P0 row forces every ℓ block of that row to zero, so the predicate was never wrong, merely dead).What to do
The retirement trigger already exists — the F-1 facade dissolution (
orpheus/transport/mesh/material_xs_field.py, "until F-1 dissolves the facade"). Until then, the facade's fold accessors must either read the operator's (one spelling) or say in their docstrings that they are the y-blind SCATTERING-only half and must not be reached for on the (n,2n) channel. Any DSA work that folds a channel's within-group block goes throughTransferOperator.foldable_part()(which preserves the term and the yield).