TWiT-Ads v2 Rebuild

B-Phase Handoff Notes (Fable 5 → Opus 4.8, 2026-07-07)

Written after B1 execution + the same-day spec updates from Russell's two documents. Read this alongside phase-a-review.md (still fully in force) before planning B2.

Where things stand

Guidance for the B2 plan (write it just-in-time, per protocol)

  1. Order schema carries makegood_for_order_id (nullable) from day one — spec §3 item 3; cheap in the B2 migration, painful later. A per-line reference can wait for B5 if preferred, but the order-level link lands in B2.
  2. Don't hard-lock finalized orders against adding lines — round-3 Q5 (upsell mid-term) is still open with Lisa. Status/locking design must leave both answers (amend-same-order vs. new-order) implementable.
  3. B3 note, worth stating in B2's data design already: order line dates reference episode identity, not bare civil dates (spec §3 item 2) — a moved episode must carry its sold dates with it.
  4. B1's types are the contractordermath.Line/Discount/Totals (basis points, tagged-union discount). B2 stores facts; totals are computed via ordermath.Compute (computed-over-stored).
  5. B4 owns input validation for the pure core (bp range, non-negative amounts) — recorded in B1's final review; don't let it slip.

B5 scope warning

B5 was already the highest-risk stage (transactional finalize, oversell impossibility). It now also owns un-finalize, amend-in-place, finalize confirmation, and the delete-guard family (A4's TODO(B5) sites + ad-copy rule). Recommend splitting when its plan is written (e.g. B5a finalize/oversell core, B5b amend/void/guards) — and per phase-a-review.md, Fable reviews the B5 design before implementation either way.

Open questions in flight

Operational notes (not recorded elsewhere)