File Details
v0.9.0
- R
- May 3, 2026
- 57.85 KB
- 14
- 11.1.0+3
- MoP Classic + 3
File Name
AldorTax-v0.9.0.zip
Supported Versions
- 11.1.0
- 5.5.0
- 2.5.5
- 1.15.8
tag e8512d3eeaae82233eb4a09b76d4c601334c7958 v0.9.0
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Sun May 3 20:29:40 2026 +0200
Release v0.9.0: SSC support, sync-UI hardening
SSC (Serpentshrine Cavern elevator):
- epochOffset calibrated from PTR first-sync click (n=1, ~±2s precision;
refine with live data over time)
- Ghost-entry suppression — running back as a spirit doesn't surface the
timer (unhelpful and visually noisy during corpse runs)
- Auto-hide 70s after live entry — players are usually mid-fight or
positioning, not waiting for the elevator
Sync UI hardening:
- Fix bar/barBg/overlay geometry leak when transitioning dual-lift
(TB/Great Lift/Tram) → single-lift (Aldor/SSC). The dual SetCompact
branch never touches the local barW upvalue, so subsequent single-lift
visits used stale compact-width geometry inside a full-width frame
- SetClampedToScreen prevents the timer frame from being dragged
entirely off-screen with no recovery short of editing SavedVariables
Internal:
- UpdateSyncUIVisibility extracted as the single source of truth for
show/hide/compact decisions, replacing two near-duplicate decision
trees. Sets up Phase 3 (separate Fall/Arrival frames) cleanly.
- Test coverage: 35 passing (was 28). Adds SSC ghost/timeout paths and
the dual→single lift transition regression.
commit e35db9793b26b86ca8c9b091302770cf02c33957
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Sun May 3 20:29:13 2026 +0200
Release v0.9.0: SSC support, sync-UI hardening
- SSC: epoch-anchored auto-sync (calibrated from PTR), ghost-entry
suppression, 70s auto-hide on live entry
- Sync UI: fix bar geometry leak on dual→single lift transition;
SetClampedToScreen prevents the frame from being dragged off-screen
- Refactor: visibility state machine extracted from duplicated
ZONE_CHANGED / OnUpdate decision trees
- Tests: 35 passing, +7 since v0.8.1 (SSC paths + lift transition)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit af5568ca7e1810fc2cfa2cdf6e0346391e810678
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Sun May 3 20:28:50 2026 +0200
UI reform Phase 2: extract sync-UI visibility state machine
The show/hide/compact decision tree was duplicated in ZONE_CHANGED and
the OnUpdate proximity tick — 17 lines twice, with subtly different
defensive guards in each. Extract UpdateSyncUIVisibility(liftID) as the
single source of truth.
The new function also tracks configuredLiftID so ReconfigureLift only
fires when the lift actually changed, instead of every proximity tick.
Behaviour preserved (ZONE_CHANGED still owns SSC ghost/hideAfter state
transitions); the duplicated `if syncUI.SetCompact then` nil-guard is
removed since BuildSyncUI always returns a configured frame. All 35
tests still pass.
Sets up Phase 3 (split AldorTaxSyncUI into FallUI and ArrivalUI):
the routing decision will live in this single function.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit 2922f1b7aff244d766f1224dd77709af33f85a14
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Sun May 3 20:27:44 2026 +0200
Fix sync-UI bar geometry leak on lift transition; clamp frame to screen
Two visual fixes for the BuildSyncUI frame:
1) bar/barBg/overlay state-leak on dual→single lift transition.
ReconfigureLift's single-lift else-branch positioned segments using
the local barW upvalue without resetting it. The dual-lift SetCompact
branch never touches barW, so a sequence of Aldor→compact→TB-lift→
expand→Aldor left the outer frame at full width but the inner bar at
compact width, with segments overflowing. The else-branch now resets
bar/barBg/overlay geometry from isCompact before laying out segments.
2) Frame could be dragged entirely off-screen with no recovery short of
editing SavedVariables. SetClampedToScreen(true) prevents this.
Test 16 walks the failing transition sequence and asserts barBg width
recovers — verified to fail (got 284, expected 464) without the fix.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit 2e3ca26b1a7986edcbf9e40c713d3c780ce25577
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Sun May 3 20:26:39 2026 +0200
Calibrate SSC epochOffset from PTR first-sync click
n=1 BOTTOM-segment click on Classic Era PTR (2026-05-02) yields
epochOffset = 13.265s on the 43.333s cycle. Inherent precision is
~±2s from GetServerTime() integer-second floor; the addon's own
RecordTimingSample value is used (computed in the same coordinate
system as runtime ApplyEpochAnchor, so internally consistent).
The TransportAnimation epoch is data-driven (DB2 file 183407), so
the value should transfer from PTR to live within click-noise. Refine
with multi-click circular-mean once live data is available.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit 9f5c585377dff4ab9cea67ad2930c98b90553788
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Sun May 3 20:26:10 2026 +0200
SSC UI: suppress on ghost entry, auto-hide after 70s on live entry
Two pre-launch quality fixes for the new SSC overlay:
- Entering SSC as a ghost (spirit healer run-back) keeps the UI hidden
for the entire visit; players running back don't need a sync timer.
- Live entry shows the UI for hideAfterEntry=70s, then suppresses it for
the rest of the visit. The OnUpdate timer expiry path stays defensive
even if a stale syncUI is shown.
Driven by sscUIHideAt + sscSuppressed locals; flags reset on zone-out so
the next entry starts clean. Tests 14 and 15 cover both paths.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit 7e61b39102673635e294c5b445a9729aacacc329
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Sat May 2 14:37:55 2026 +0200
UI reform Phase 1: rename p->syncUI and ambiguous locals in BuildSyncUI
Prepares for Phase 2 (state machine extraction). No logic changes.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit 112f2b84d48f5901677592edee5e7439296cfcce
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Sat May 2 14:34:13 2026 +0200
SSC pre-launch readiness: nil-guard audit + test coverage
Verified single-platform code path for SSC; added 4 test cases covering
zone activation, phase computation, sync receive, and multi-lift isolation.
Annotated missing epochOffset in lift def.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit dd41897d8ba18ffd4d41884a5ea320c1c04e8ae8
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Thu Apr 30 16:00:23 2026 +0200
Calibrate deepruntram timing from DB2 TransportAnimation keyframes
TransportIDs 176080-176085 (6 carts) show cycle=143333ms, transit=58633ms,
dwell=13033/13034ms. Previous values (cycleTime=143.0, fallTime=58.5,
dwell=13.0) accumulated ~0.333s/cycle phase drift, equal to a full cycle
after ~12h, which explained the apparent epochOffset divergence in the
two recorded first-sync events (7.642 on 2026-04-20 vs 49.142 on 2026-04-23).
On the corrected 143.333s cycle, both rows converge to epoch=84.758s
(diff 0.885s, well within human click latency), confirming the cycle
correction and adding a stable epochOffset for auto-prediction.
commit a82b80c30ae32325c688ec5e8877b887c3fa9e57
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Thu Apr 30 13:15:58 2026 +0200
Fix GetPhaseColor to use def.segColors instead of hardcoded Aldor palette
Vertical bar cursors for TB Lift, Stormspire, and Great Lift were shown
in Aldor's red/blue/yellow/green despite each lift having its own segColors.
GetPhaseColor accepted def but ignored def.segColors; now indexes into it.
commit 5d15c5bd699d5a080bfc4d1ac445505be05fd032
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Thu Apr 30 13:13:33 2026 +0200
Recalibrate tblift epochOffset from syncLog first-sync observations
Current value (25.5) produced ~13-14s first-zone-entry errors on a 30s cycle.
First-sync observed epoch offsets at the "South arrives" label across two
consecutive sessions are 13.5 (2026-04-22) and 11.6 (2026-04-23, 76 min
later). Their circular mean (~12.54) replaces the prior estimate that was
calibrated from insufficient samples. Within-session corrections after this
anchor remain bounded.
Cycle structure (fall 9.5 + waitBottom 5.5 + rise 9.5 + waitTop 5.5 = 30.0)
unchanged.
commit 052e4bbd2b9c99a21598feed014cc19505a0f41c
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Mon Apr 27 11:11:23 2026 +0200
Park UI transitions test as post-Phase-4 spec
The frames it asserts against (AldorTaxFallUI / AldorTaxArrivalUI) don't
exist yet — they're produced by Phases 3–4 of the UI reform. Rename to
spec_* and skip-stub so it's tracked but doesn't fail the suite. Restore
when Phase 4 lands.
commit 052e4bbd2b9c99a21598feed014cc19505a0f41c
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Mon Apr 27 11:11:23 2026 +0200
Park UI transitions test as post-Phase-4 spec
The frames it asserts against (AldorTaxFallUI / AldorTaxArrivalUI) don't
exist yet — they're produced by Phases 3–4 of the UI reform. Rename to
spec_* and skip-stub so it's tracked but doesn't fail the suite. Restore
when Phase 4 lands.
commit d4a81171418f13b4fcc205cee75f7d57137c2e26
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Mon Apr 27 11:10:13 2026 +0200
Sync README/TOC supported-transport list, add test mock stubs, ignore data/
- README + TOC: list Stormspire, TB Lift, SSC; replace "AldorTaxSync"
mention with General/Guild (post-v0.8.0).
- wow_api_mock: stubs for SetClampedToScreen, GetPlayerFacing,
UIDropDownMenu_* — needed by code paths the addon already uses.
- .gitignore: data/ (DB2 exports + plots), .mcp.json (local).
commit 08537a029fd89989e437a45f18107129f706e381
Author: Magnus Vikan <dizzi90@gmail.com>
Date: Mon Apr 27 11:09:36 2026 +0200
Revert "Recalibrate serverTimeOffset periodically to prevent phase drift"
This reverts 12ab172. The recalibration was aimed at GetTime drift, but
the syncLog signature in WTF AldorTax.lua shows correction magnitudes
that scale with gap-since-last-sync per lift (sub-second after a 6 s gap;
~41 s after a 3-day gap), not with session uptime — the pattern of
cycle de-phasing across server restarts, not local-clock drift.
Recalibrating GetTime cannot fix that.
commit 12ab1726adff3064fd402a50a76f30cc1932deba
Author: Magnus <dizzi90@gmail.com>
Date: Sat Apr 25 11:08:07 2026 +0000
Recalibrate serverTimeOffset periodically to prevent phase drift
The serverTimeOffset was calibrated only once at login, after which the
OnUpdate handler self-detached. Over a long session the local frame
clock (GetTime) drifts relative to the server clock by tens of
milliseconds per hour on typical machines, so the lift timer's predicted
state slowly desynchronizes from the in-world animation even though the
underlying cycle is exactly 25.000s.
Refactor the calibration into CalibrateServerTimeOffset() and call it
both at login and every 5 minutes via a timer frame. A firstCalibration
guard protects realTimeOffset (only meaningful once) and the saved-sync
restore (must not stomp in-memory lastSync values updated since login)
from running again on subsequent recalibrations.
commit 12ab1726adff3064fd402a50a76f30cc1932deba
Author: Magnus <dizzi90@gmail.com>
Date: Sat Apr 25 11:08:07 2026 +0000
Recalibrate serverTimeOffset periodically to prevent phase drift
The serverTimeOffset was calibrated only once at login, after which the
OnUpdate handler self-detached. Over a long session the local frame
clock (GetTime) drifts relative to the server clock by tens of
milliseconds per hour on typical machines, so the lift timer's predicted
state slowly desynchronizes from the in-world animation even though the
underlying cycle is exactly 25.000s.
Refactor the calibration into CalibrateServerTimeOffset() and call it
both at login and every 5 minutes via a timer frame. A firstCalibration
guard protects realTimeOffset (only meaningful once) and the saved-sync
restore (must not stomp in-memory lastSync values updated since login)
from running again on subsequent recalibrations.

