Stage 6A Sequencer Probe

Dynamic Tax-Aware Withdrawal Sequencer — policy engine diagnostics. Read-only. Touches no Stage 5 file, no engine, no schema, no persistence.

flag (live): false
schema v1
heir materiality: 5pp
Summary
23 / 23 passed

All scenarios pass. Policy engine is stable, feature-flag isolation holds, defaults match governance.

1. Feature flag isolation (flag OFF)
4/4
✓ aggregator.active === false when flag is off
✓ aggregator.reason mentions feature flag
✓ no recommendations emitted
✓ every policy reports verdict === "inactive"
2. Default config disabled (flag ON, config.enabled = false)
3/3
✓ aggregator.active === false when config.enabled === false
✓ aggregator.reason mentions config.enabled
✓ no recommendations emitted
3. Bracket ceiling — within tolerance
4/4
✓ result shape valid
✓ verdict === "allow"
✓ no recommendations
✓ overshoot within tolerance
4. Bracket ceiling — overshoot (if_net_positive)
6/6
✓ result shape valid
✓ verdict === "caution" under if_net_positive
✓ exactly one recommendation
✓ recommendation action === "reduce_withdrawal"
✓ recommendation target === "ira"
✓ recommendation magnitude is a positive number
5. Bracket ceiling — overshoot (never)
4/4
✓ result shape valid
✓ verdict === "block" under never
✓ one recommendation
✓ recommends reduce_withdrawal
6. Bracket ceiling — overshoot (always)
3/3
✓ result shape valid
✓ verdict === "allow" under always
✓ no recommendations
7. IRMAA strict_avoid — no crossing
4/4
✓ result shape valid
✓ verdict === "allow"
✓ no recommendations
✓ no tier change
8. IRMAA strict_avoid — crossing
6/6
✓ result shape valid
✓ verdict === "block" under strict_avoid
✓ one recommendation
✓ recommends reduce_withdrawal
✓ magnitude is positive
✓ tier 0 → 1 detected
9. IRMAA cost_aware — crossing
3/3
✓ result shape valid
✓ verdict === "caution" under cost_aware
✓ one recommendation
10. IRMAA ignore — inactive
3/3
✓ result shape valid
✓ verdict === "inactive"
✓ no recommendations
11. Roth balanced — no tax pressure (protect)
5/5
✓ result shape valid
✓ verdict === "caution" (protect Roth)
✓ one recommendation
✓ action === "preserve_source"
✓ target === "roth"
12. Roth balanced — tax pressure present (permit)
5/5
✓ result shape valid
✓ verdict === "allow" under tax pressure
✓ one recommendation
✓ action === "prefer_source"
✓ target === "roth"
13. Roth aggressive — always protect
3/3
✓ result shape valid
✓ verdict === "block" under aggressive
✓ action === "preserve_source"
14. Roth off — inactive
2/2
✓ result shape valid
✓ verdict === "inactive"
15. Heir-impact — gated off (no heir data)
3/3
✓ result shape valid
✓ verdict === "inactive" when heir data missing
✓ no recommendations
16. Heir-impact — below materiality
4/4
✓ result shape valid
✓ verdict === "allow" below materiality
✓ no recommendations
✓ diagnostics report canonical materiality pp
17. Heir-impact — above materiality
5/5
✓ result shape valid
✓ verdict === "caution" above materiality
✓ two recommendations (preserve + recommend-back)
✓ one preserve_source on roth
✓ one recommend_back_to_conversions on conversion_schedule
18. Heir-impact — disabled by config
3/3
✓ result shape valid
✓ verdict === "inactive" when disabled
✓ no recommendations
19. Aggregator — derives taxPressure from upstream
4/4
✓ aggregator.active === true
✓ bracket policy → caution
✓ Roth policy → allow (taxPressure derived true)
✓ Roth recommendation: prefer_source on roth
20. Aggregator — dedupes by key
3/3
✓ aggregator.active === true
✓ all recommendation keys are unique
✓ all recommendations have valid shape
21. Aggregator — robust to null context
3/3
✓ did not throw on null context
✓ aggregator.active === true
✓ no recommendations for empty context
22. Config defaults match governance
10/10
✓ schemaVersion === 1
✓ enabled === false
✓ bracketCeiling === 24
✓ bracketFillTolerance === 2000
✓ bracketCrossingPolicy === if_net_positive
✓ irmaaPolicy === strict_avoid
✓ rothPreservationStrength === balanced
✓ heirImpactBias === enabled
✓ clientPortalExposure === disabled
✓ conversionCoupling === read_only_recommend_back
23. Flag default resolves to false
1/1
✓ isStage6ASequencerEnabled() === false by default