m8.4: Complete automatic feeder inference
Makes the automatic feeder inference (ADR-0005) complete for the rule patterns the original cut missed, from a feeder-focused adversarial review. No computed value is affected: cell reads always use the dense, always-correct consolidation, so feeders are an optimization and a diagnostic, never the read path.
What's improved
- Chained rules are fed: a rule that reads another rule's derived output is now fed (inference is a fixpoint over "potentially non-zero" leaves, seeded by stored cells).
- Consolidated inputs feed via their contributing leaves.
- Multi-element target areas with a pinned input feed every target leaf (previously rejected as un-analyzable).
- Base contributions (a non-zero constant or attribute term, including inside a conditional branch) feed the whole target area, since such a rule is non-zero everywhere regardless of input population. Closes the constant/conditional under-feed.
- Validation false-negative fixed: a rule is a pure consolidation override only when its area selects no leaf coordinates, so a mixed-target rule (e.g.
{descendants of Total}) keeps its leaf targets validated -- an under-feed there is no longer silently skipped.
Unchanged by design: cross-cube-only rules remain reported as opaque (non-localizable) rather than guessed at, and the inference stays a sound over-approximation (it never under-feeds an analyzable rule; at worst it over-feeds, which is a warning). One consolidated input's expansion is bounded so inference cost stays bounded on pathological hierarchies.
Quality
- New unit tests for chained rules, consolidated inputs, multi-element targets, the base-potent constant/conditional cases, and the mixed-target validation.
- Hardened across two adversarial review rounds (the second re-reviewing the rewrite itself for soundness, termination, and regressions). Full workspace green, clippy + fmt clean.