# FormValidator Silent Failure Pattern **The bug:** A `FormValidator` is initialized with element IDs that don't match the actual HTML. Every `document.getElementById()` returns `null`. The validator's `validateForm()` silently returns `false` on every call. The save function is never reached. No error, no notification — just nothing. **Where it happened:** Edit Service modal (`#service-edit-modal-quote`) in quote-tab-manager.js **The mismatch:** | Validator expected | Actual HTML ID | |-------------------|----------------| | `service-edit-form` | `service-edit-form-quote` | | `service-edit-name` | `service-edit-name-quote` | | `service-edit-price` | `service-edit-price-quote` | | `service-edit-recommendation` | `service-edit-recommendation-quote` | The Edit Service modal HTML uses `-quote` suffixed IDs to distinguish from the Settings modal's elements. The validator was written for the Settings modal's naming convention. **Fix:** For the Edit Service modal, bypass the FormValidator entirely and call `saveServiceEdit()` directly. The save function has its own robust validation with user-visible error notifications. The FormValidator is optional visual feedback, not a required gate. **Prevention:** When adding a new modal or form, audit all three layers: 1. HTML element IDs 2. JS `getElementById()` lookups (check for `||` fallback chains) 3. Any validators that reference those IDs Create a simple grep check: ```bash # List all element IDs referenced in JS that don't exist in HTML grep -oP "getElementById\('([^']+)'\)" quote-tab-manager.js | sort -u | while read line; do id=$(echo "$line" | grep -oP "(?<=')[^']+(?=')") grep -q "id=\"$id\"" repair-orders.html || echo "MISSING in HTML: $id" done ```