# Regression Checklist Use this when a change could affect runtime behavior. It is not required reading for every session. ## Automated tests (run first) ``` node svsmspcalc/tests/test-quote-engine.js ``` This covers all core quote math, admin fee logic, discounts, HST, VoIP, ZT, and MRR integrity. If all 88 tests pass, the items marked **[AUTO]** below are verified. ## Core quote math - **[AUTO]** Verify M365 Included and BYOL base rates - **[AUTO]** Verify each user add-on changes MRR correctly - **[AUTO]** Verify endpoint count affects endpoint pricing - **[AUTO]** Verify server count affects server pricing - **[AUTO]** Verify Zero Trust Networking seat and HaaS counts affect MRR correctly - **[AUTO]** Verify VoIP tier changes pricing correctly - **[AUTO]** Verify desk phone and eFax add-ons change pricing correctly ## Site admin fee - **[AUTO]** Verify admin fee floor at low subtotal - **[AUTO]** Verify admin fee reduces as base subtotal rises - **[AUTO]** Verify admin fee stops reducing at the configured floor - **[AUTO]** Verify Zero Trust supplement appears when Zero Trust is active - **[AUTO]** Verify 1Password admin surcharge appears when 1Password is selected - **[AUTO]** Verify admin fee waive excludes fee from MRR - [MANUAL] Verify admin fee waive state updates all relevant displays ## Contract term and onboarding - **[AUTO]** Verify month-to-month has no discount - **[AUTO]** Verify 12-month applies 3% discount - **[AUTO]** Verify 24-month applies 5% discount - [MANUAL] Verify 12-month auto-waives onboarding - [MANUAL] Verify 24-month auto-waives onboarding - [MANUAL] Verify switching back to month-to-month restores editable onboarding behavior - [MANUAL] Verify manual onboarding override persists until reset by waiver logic ## Tax and totals - **[AUTO]** Verify HST toggle applies 13% to discounted MRR - **[AUTO]** Verify HST disabled = $0 - **[AUTO]** Verify HST applied after contract discount (not before) - **[AUTO]** Verify annual projection matches effective MRR * 12 - **[AUTO]** Verify per-user effective cost is 0 when users = 0 ## Sidebar and mobile parity - [MANUAL] Verify desktop sidebar values match configured quote - [MANUAL] Verify mobile pill MRR matches headline MRR - [MANUAL] Verify mobile panel content matches desktop sidebar - [MANUAL] Verify mobile HST toggle syncs back to desktop state - [MANUAL] Verify nudge banner content and state match on desktop and mobile ## Persistence and reset - [MANUAL] Verify quote state restores after reload - [MANUAL] Verify theme preference restores after reload - [MANUAL] Verify quote reference persists within the intended window - [MANUAL] Verify reset clears quote state - [MANUAL] Verify reset preserves theme preference ## Export and print - [MANUAL] Verify Print / Save PDF opens the formatted print view - [MANUAL] Verify print respects user's HST toggle state - [MANUAL] Verify print view uses the expected totals, discount, onboarding, and HST states - [MANUAL] Verify JSON export downloads a file - [MANUAL] Verify JSON export copies content to clipboard when supported - [MANUAL] Verify JSON payload matches the visible quote configuration - [MANUAL] Verify JSON export includes `"version": "1.0"` field ## Section header layout - [MANUAL] Verify all 6 sections show numeral + title + chevron on row 1 - [MANUAL] Verify controls row (stepper + badge + price) on row 2 - [MANUAL] Verify subtitle appears on row 3 only when expanded - [MANUAL] Verify small-screen stacking at ≤600px / container ≤520px - [MANUAL] Verify all elements span full width when stacked ## UX interactions (Phase 3) - [MANUAL] Verify theme switch transitions smoothly (no flash) - [MANUAL] Verify nudge banner crossfades on rotation and manual nav - [MANUAL] Verify section summary badge fades in on collapse - [MANUAL] Verify addon row shows subtle pulse on toggle - [MANUAL] Verify touch targets ≥44px at ≤600px (close btn, nudge nav, section toggles) - [MANUAL] Verify mobile panel traps focus (Tab cycles within panel) - [MANUAL] Verify focus returns to pill on panel close - [MANUAL] Verify safe-area insets respected on notch phones (pill position, panel padding) ## Accessibility (Phase 5) - [MANUAL] Verify `aria-expanded` toggles on section headers when opening/closing - [MANUAL] Verify `aria-expanded` toggles on collapsible headers when opening/closing - [MANUAL] Verify reset modal traps focus (Tab cycles within modal, cannot reach background) - [MANUAL] Verify stepper buttons announce descriptive labels via screen reader - [MANUAL] Verify Glass theme scrolls smoothly on mobile (no jank from fixed backgrounds) - [MANUAL] Verify mobile panel gets full sync on open (client name, discount label visible) - [MANUAL] Verify mobile sync skips on desktop when panel is closed (performance)