File Details
v1.4.1
- R
- May 26, 2026
- 312.57 KB
- 55
- 12.0.5
- Retail
File Name
GOBIGnINTERRUPT-v1.4.1.zip
Supported Versions
- 12.0.5
GOBIGnINTERRUPT
v1.4.1 (2026-05-26)
Full Changelog Previous Releases
- v1.4.1 - taint hardening + lifecycle correctness
Codex-reviewed pass over the 12.0.5-stressed paths. Two review rounds;
real findings fixed, over-cautious false positives rejected with evidence.
Taint safety:- Taint.SafeSpellID launders secrets (tostring->tonumber strips the
marker) instead of early-rejecting them — recovers tagged-but-
launderable IDs. laundered() fully pcall-wrapped (both steps). - Taint.SafeGUID rejects secret GUIDs (returns nil) so cache keys /
equality are always safe; added SafeGUIDKey alias. - Inspect.onInspectReady rejects a secret INSPECT_READY guid before use;
spec cache keyed only by SafeGUID (non-secret). - Evidence poll sanitizes aura.name via SafeString2 before using it as a
table key / AuraMap lookup; skips unreadable slots, keeps scanning. - NativeFilters sanitizes aura.sourceUnit before ==/table-key; scanAll
callers (poller + debounce) pcall-wrapped. - StackTracker laundered aura.spellId (SafeSpellID) + aura.applications
(SafeNumber); skips private-aura slots instead of breaking the scan. - Log.fmt is secret-safe: issecretvalue + pcall(tostring) -> "<secret>",
so a logged secret can never become an uncaught throw.
Lifecycle / correctness: - Bar + UnitOverlay placeholder prune bails when class/spec is
unresolved or SpellsForUnit is transiently empty — no longer wipes
LIVE cooldown icons on an inspect/roster race. - UnitOverlay.Reset clears per-icon spellID/endsAt/placeholder/charge/
glow + zeroes the swipe (was only hiding), so OnCDStart's reuse scan
can't match stale state after /gbi reset. - KickCounter counts keyed by SHORT name (realm stripped) consistently.
- Brain: ready timer extracted to scheduleReady(); OnCast bumps inFlight
only on a fresh activation (re-cast no longer leaks inFlight);
UpdateRemaining AND pollPlayerDynamic now reschedule via scheduleReady
so dynamic-CDR (peer D delta + local SPELL_UPDATE_COOLDOWN) fires
ready/inFlight/all-ready at the new time. Stale-timer boundary made
consistent (>= 0.5) with the reschedule thresholds.
Context gating: - StackTracker scan/poll gated on Bar.IsEngineEnabled (no 0.5s aura
polling or Brain/UI writes outside the tracked context). - Interrupt alert (onStart_inner + fireIfStillValid) gated on
Bar.IsEngineEnabled — no interrupt-halfway alerts in raids/world. - Constants: difficulty 23 (base Mythic, non-keystone) removed from
M_PLUS_DIFFICULTIES; it's a party context now (use showAlways).
Rejected as false positives (codex over-applied the taint model):
boolean coercion of a secret NON-boolean (not spellID,X and rawId and)
andsecret == nildo NOT throw — only secret BOOLEANS throw on boolean
test, and same-type equality throws, not nil-equality. Verified against
InterruptTrack v3.2.1 production code which doesif not okID or not spellIDon secret-capable values and ships fine. Did not churn those
lines into slower type()-checks.
No COMBAT_LOG_EVENT_UNFILTERED anywhere.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- Taint.SafeSpellID launders secrets (tostring->tonumber strips the

