Projects the education funding picture you declare: you declare the goal, the horizon in years, an assumed annual return, and the current balance; the page grows the balance at the declared rate and subtracts it from the goal, returning the future value, the funding gap, and a GAP_COMPUTED or GOAL_MET verdict with a full trace. Every input here is yours: the page holds no account, no plan record, no market data, and no clock.
Declare the funding goal, the horizon, the assumed annual return, and the current balance. These are your declarations: the page never verifies them against an account or a plan record. The future value is current_balance grown at (1 + annual_return_pct/100) for years, rounded half-up to 2 decimal places (a declared convention); funding_gap is goal minus that future value. rollover_cap is optional and only shapes the overfunded note.
When the grown balance meets or exceeds the goal, the verdict is GOAL_MET and, if you declared a rollover_cap, the trace carries an overfunded-to-Roth rollover note naming it. The cap is echoed exactly as you declared it: the note never determines that any rollover is available or advisable. For context, the statutory reference for the 529-to-Roth IRA rollover is the SECURE 2.0 Act of 2022, Division T, Section 126 (Public Law 117-328, enacted 2022-12-29): a 35000 USD lifetime limit per beneficiary beginning 2024, subject to a 15-year account-age rule and annual Roth contribution limits (measured 2026-09-05; derive by reading Public Law 117-328, Division T, sec. 126). The contribution solver is out of scope for this version.