initial commit

This commit is contained in:
ray
2026-07-12 10:17:17 -04:00
commit dab5a4ebc6
1424 changed files with 330463 additions and 0 deletions
@@ -0,0 +1,32 @@
# 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
```