Repository navigation
feat(purchase): richer plan-step notification email and a veto-window check - #834
Conversation
… check The scheduled-purchase email now states what will be bought: recommendation and unit counts, total commitment (upfront plus recurring over each term), the plan cap and the purchase date, and per recommendation the region, AZ, platform, tenancy, term, payment and commitment. A no-upfront (Azure monthly) row shows its monthly charge instead of reading as $0. PurchasePlan.RequireVetoWindow refuses NotificationDaysBefore < 1 (S13). It is used on resume: a due recommendation-bearing row of such a plan is refused instead of being moved to now. The attach path will call it too; nothing attaches yet. planStepLockKeys is split out of LockPlanProvidersTx so a unit test fails if the sort is removed. Refs #631 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Warning Review limit reached
This review includes 14 billable files and costs up to $3.50.
Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing. Or wait 18 minutes for your next included review. View limit details
Comment |
Gate verdict: APPROVE at cec9e64 (independent adversarial review, Opus 5.5
|
What (B2 of #631 PR2b-2b)
PurchasePlan.RequireVetoWindowrefusesNotificationDaysBefore < 1. Decision for resume (flagged by the feat(purchase): keep pause, run-now and cancel working on notified plan rows #830 gate): REFUSE. A due recommendation-bearing row of such a plan returns 409 before any change (and again after the CAS as a race backstop); rows with no recommendations or a future date are unaffected. The attach path (B3) calls the same helper before Resolve.planStepLockKeys; a unit test fails if the sort is removed.Inert
No production caller attaches recommendations; the richer email only renders for rows that carry them. Kill switch off, caps NULL. Rows in the tests are fixtures.
Evidence
Refs #631
🤖 Generated with Claude Code