Backend:
- H4 get_db reconnect storm: gate the one-time schema/normalize/reconcile helpers
behind a process-level flag so the ~11,529-row reconcile stops re-running on the
asyncio loop on every spurious mtime reopen.
- H5 tag_search write-on-read: cache last-good fingerprint (return it on transient
lock instead of zeros -> no spurious 5-10 min re-embed) + mtime-gate the query.
- Remove dead /clothing/assemble + /furniture/assemble routes.
- Escape LIKE %/_ in 3 character-prefix lookups; NULL-guard /props/assemble.
- New POST /tag-builder/maintenance (idempotent orphan cleanup + alias dedup).
Frontend:
- Customizer output-mode: thread real isNaturalMode into the 3 customizers; preview
matches the actual emit per mode; focus checkbox disabled (not silent no-op) in
tag mode.
- Event-driven timers: drop 3 setTimeout(0) click-outside deferrals + the 1100ms
flash timer (animationend instead).