This guide packages the hard-won implementation and debugging knowledge from SuaviUI into a reusable format for other WoW addon projects.
When starting a new addon, port these practices before adding features:
- Session-based error triage (not counter-based)
- Taint-safe coding patterns for secret values and protected APIs
- Edit Mode persistence patterns (save-by-center + callback normalization)
- Structured release workflow (version/tag/zip/release verification)
Use session IDs as the source of truth.
- Analyze newest session block(s), not historical aggregate noise.
- Compare:
- unique error signatures
- top stack source
- whether signature is new/regressed/resolved
- Ignore raw
counteras a quality metric across sessions.
Reference: BUGSACKER_ANALYSIS_GUIDE.md
- Never directly compare/arithmetically combine values that may be secret.
- Guard risky API reads with
pcall, then sanitize into safe primitives before use. - Do not assume
pcallalone makes downstream values safe.
- Avoid method replacement on Blizzard viewer/system objects.
- Avoid writes to secure frame fields from insecure context.
- Avoid forcing protected flows (
TargetUnit, Edit Mode internals, forbidden mixin tables).
OnUpdateloops touching Blizzard frame internals- event wrappers around secure viewers (
RefreshData,OnEvent,SetIsActivechains) - direct Show/Hide mutation on Blizzard unit/resource frames during Edit Mode
- Support both 4-arg and 5-arg callback signatures.
- Prefer saving from
frame:GetCenter()relative toUIParent:GetCenter(). - Only fallback to callback offsets when center is unavailable.
- During drag-end callback: save DB values only.
- Avoid full refresh calls that can reset/mutate drag state.
- If sidepanel values must update, use the framework’s safe refresh API only.
- On Edit Mode exit, apply stored offsets once.
- Ensure no secondary module reapplies stale defaults.
For cast systems under queue/spam load:
- Use active-cast identity tracking where safe.
- Revalidate real cast/channel state before hide on end events.
- Handle delayed/channel update events for timeline correction.
- Avoid direct secret-value comparisons (
castGUID-style taint paths).
When errors reappear after a fix:
- Confirm clean repro path (single scenario).
- Capture newest session ID only.
- Group by signature and stack top.
- Map each signature to one code path.
- Patch root cause, not symptom suppression.
- Re-test with same scenario and compare signatures.
For every release:
- bump version metadata
- add concise changelog entry with root cause + fix
- commit + annotated tag
- push branch + tag
- build clean zip (exclude docs/dev/backup/test files)
- publish GitHub release with addon zip asset
- verify release page + asset + size + tag
Reference: RELEASE_PROCESS.md
Copy this checklist into the new addon repo:
- Add BugSack session-based analysis procedure
- Add taint-safe coding rules for secret values
- Add Edit Mode callback normalization pattern
- Add release checklist with asset verification
- Add triage template (signature/source/verdict)
- Add “known anti-patterns” list (forbidden writes/method replacement)
- Using BugGrabber
counteras the KPI for fix success. - Calling protected Edit Mode internals directly from addon slash commands.
- Comparing potential secret values directly in hot paths.
- Refreshing or re-layouting secure Blizzard viewers inside unstable frame states.
If you want the same documentation shape in a new project, copy: