- Shipped
- September 6, 2026 at 10:59 PM UTC
- Author
- Kamo
- Commit
- ccab593
Carrying the plan code alone was half a fix, and the missing half was the half that carries the price. Somebody who set three years on /myplan, saw $49 a seat and pressed "Move to Business" arrived on a console quoting $119 monthly: the plan they picked, beside a number that never sold them anything. That is the same defect as a rate advertised on one term and charged on another — the thing this whole run of work exists to end — reintroduced one field over, by me, in the commit that was meant to close it. The term rides the same query string, built and read by planLinks.ts like the plan and the sub-tab before it. It IS validated there, unlike the plan code, and the difference is deliberate: the set of terms is closed and known to that module, so an unrecognised one is a bad link rather than a catalogue it cannot see, and passing it through would hand the console a commitment its own pricing has no rate for. choosePlan applies both in ONE draft update. Two setDraft calls would each compute from the same captured draft and the later would drop the earlier — a plan and a term chosen together are one edit, not two. A term the catalogue does not price for the chosen plan is ignored rather than applied, leaving the picker on a commitment it can actually quote.