Initial skills documentation — 25 categories, all SKILL.md + references + scripts
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# Silent Cascade Failure — JS TypeError Kills Async Operations
|
||||
|
||||
## Pattern (discovered Jul 12, 2026)
|
||||
|
||||
A single `TypeError` (e.g. `.classList.add()` on a `null` element) in early synchronous inline script kills ALL subsequent code — including `fetch()` calls that would load nav, content, or UI elements.
|
||||
|
||||
The symptom surface is confusing: blank page, no menu, no content, no visible error.
|
||||
|
||||
## Example
|
||||
|
||||
```javascript
|
||||
// WRONG — crashes before nav fetch runs
|
||||
if (Ops.isAuthenticated()) {
|
||||
overlay.classList.remove('show');
|
||||
document.getElementById('logoutBtn').classList.add('show'); // TypeError if nav not loaded
|
||||
loadContent(); // Never runs
|
||||
}
|
||||
fetch('/nav.html').then(...) // Never runs either
|
||||
```
|
||||
|
||||
## Fix pattern
|
||||
|
||||
Always guard DOM lookups that depend on async-loaded content:
|
||||
|
||||
```javascript
|
||||
// Wait for async content before accessing
|
||||
var wait = setInterval(function() {
|
||||
var el = document.getElementById('logoutBtn');
|
||||
if (el) {
|
||||
el.classList.add('show');
|
||||
clearInterval(wait);
|
||||
loadContent();
|
||||
}
|
||||
}, 100);
|
||||
```
|
||||
|
||||
## Prevention checklist
|
||||
|
||||
- [ ] Every `getElementById()` call is guarded (especially elements from fetched templates)
|
||||
- [ ] Auth logic does NOT touch DOM elements from separate fetches
|
||||
- [ ] `fetch()` / `setInterval()` are NOT placed after unguarded DOM access
|
||||
- [ ] Inline scripts tolerate missing elements without crashing
|
||||
Reference in New Issue
Block a user