# 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)
