f5a5602f

By: ValentinHirschi <valentin.hirschi@gmail.com>

pass source sums through partner sums in the literal contractor

The component planner declines antisymmetric heads such as epsilon, so a
product of two sums sharing an explicit index, for example
(a*p(mu)+b*q(mu))*(c*r(mu)+d*epsilon(mu,k,e,f)), reached the literal
fallback. That fallback only passed a source sum through a single tensor
partner and left the product uncontracted; expanding it later exposed
p(mu)^2 and epsilon(...,mu)*q(mu).

When distribution is permitted, the partner may now itself be a sum that
exposes the slot once in every term. Every source term must still offer a
metric or vector port; each substitutes into its own copy of the partner.

Two Deferred-status tests used a product of two pure vector sums as their
unfinished fixture; it now contracts, so their fixtures keep one
non-substitutable tensor in each sum. Their assertions are unchanged.

nix-ci.nix: enable = false during review.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
configure