promotional bannermobile promotional banner

TOGT

Companion addon for TOGTools for the loading diagnostics
Back to Files

!!TOGT-v0.2.3

File name!!TOGT-!!TOGT-v0.2.3.zip
Uploader
PmptastyPmptasty
Uploaded
Sep 20, 2026
Downloads
35
Size
14.2 KB
Flavors
RetailMoP ClassicClassic TBCClassicForever
File ID
8933796
Type
R
Release
Supported game versions
  • 12.0.7
  • 12.0.5
  • 12.0.1
  • 12.0.0
  • 11.2.7
  • 5.5.4
  • 4.4.2
  • 3.4.5
  • 2.5.6
  • 1.60.1
  • 1.15.9

What's new

Changelog

[v0.2.3] (2026-09-20) - WoW Forever support

New Features

  • !!TOGT_Camelot.toc for WoW Forever -- Forever (Battle.net product wow_classic_beta, codename Camelot) is the retail client with vanilla content at ## Interface: 16001; the client reads <Addon>_Camelot.toc before <Addon>_Mainline.toc and falls back to the plain !!TOGT.toc, whose Interface list does not carry 16001. So on Forever !!TOGT loaded only with "Load out of date AddOns" ticked, and TOG Tools (## Dependencies: Ace3, GuildRoster, !!TOGT) failed with Failed to load missing dependency [!!TOGT] -- the same failure mode as the v0.2.1 / v0.2.2 Interface bumps, for a flavour rather than a build. The new manifest is !!TOGT_Mainline.toc with the Interface line and Title changed. !TOGT.lua branches on nothing flavour-specific, so the TOC is the whole change. Requested by TOGTools (inbox thread 0a9abbb39cb5), which ships TOGTools_Camelot.toc in its v0.8.8; the recipe is FastGuildInvite's (thread 7480082e), who confirmed the packager and CurseForge accept 16001. Not verified in a Forever client -- none exists on this box. Location: !!TOGT_Camelot.toc.

Bug Fixes

  • !!TOGT_BCC.toc renamed to !!TOGT_TBC.toc -- the old name was one no client reads, so TBC Classic and Classic Anniversary loaded the Vanilla manifest. Peer-review finding 1 (2026-08-07, docs/AUDIT.md), confirmed against the TOC format page: modern suffixes take an underscore (_TBC), the only legacy hyphen forms were -BCC / -WOTLKC, and -BCC was dropped in Anniversary 2.5.5. _BCC was neither, so those clients fell through to !!TOGT.toc (## Interface: 11509), which they mark out of date -- and then TOG Tools (## Dependencies: ... !!TOGT) fails to load on them unless "Load out of date AddOns" is on. The same failure mode as every Interface bump in this changelog, caused by a filename rather than a number, and present since the file was created. The 20506 inside it was already right and is unchanged. Location: !!TOGT_TBC.toc (git rename).

  • wow-version-replication.ps1 replicated Tests\, docs\ and every dotfile into the other WoW installs. Peer-review finding 2 (2026-08-14). Two defects, both measured with -DryRun before and after: (1) a bare folder name from .pkgmeta compiled to ^Tests$, which matches only a file of that name -- the packager forbids the trailing slash the script keyed on, so a correct .pkgmeta was exactly what broke it; a wildcard-free entry naming a directory in the repo is now promoted to the prefix form, the fix seven other scripts in the fleet already carry. (2) The always-skip list named .git, .gitignore, .gitattributes and .gitmodules individually, so .busted, .luarc.json, .markdownlint*, .claude\, .github\ and .vscode\ all copied; one (^|\\)\. pattern now skips every dot component, which is what the packager does. After the fix the dry run's WOULD list is the release zip exactly: the seven TOCs, !TOGT.lua, CHANGELOG.md, LICENSE, README.md. Location: wow-version-replication.ps1.

Improvements

  • docs/AUDIT.md retired. The peer-review board is superseded by writ's inbox; its two open findings are the two fixes above, so nothing was left to import. The file is deleted rather than kept, per the fleet rule (an empty board reads as a board nobody has looked at); the findings' full text is in git history at d879a2e. CLAUDE.md's tag note corrected from _TOGT-vX.Y.Z to the !!TOGT-vX.Y.Z form every tag since v0.2.0 actually uses. Locations: docs/AUDIT.md (deleted), CLAUDE.md.

Documentation

  • A README.md, which the repository never had. Written from the CurseForge description and checked against the manifests: no SavedVariables line in any TOC (so "no saved data" is true), no ## Dependencies (so "no dependencies of its own" is true), and TOG Tools' hard dependency on it stated from TOG Tools' side. The CurseForge description's supported-versions line now names Forever. Locations: README.md, docs/Curseforge_Description.html.

[v0.2.2] (2026-07-31) - Classic Era & Mists compatibility, offline test suite

Bug Fixes

  • !!TOGT marked out-of-date on current Classic Era and Mists — !!TOGT.toc declared ## Interface: 11508 and !!TOGT_Mists.toc declared 50503, while the live clients are on 11509 and 50504. Clients on those builds see !!TOGT as incompatible and skip it unless "Load out of date AddOns" is ticked, which then breaks TOG Tools (## Dependencies: Ace3, VersionCheck-1.0, !!TOGT) with AddOn [TOGTools] Failed to load missing dependency [!!TOGT] even for users who have !!TOGT installed. Same failure mode as the TBC bump in v0.2.1 and the Retail Midnight bump in v0.1.1. Both ## Interface: and ## X-Min-Interface: bumped in each file, matching the values already carried by LibGuildRoster, LibItemDB and LibProfessionDB. Locations: !!TOGT.toc, !!TOGT_Mists.toc.

  • Comments inside the .pkgmeta ignore: list — Four comment lines sat between entries in the ignore block. The packager's yaml_listitem() trims only a leading -, whitespace and one leading/trailing quote — it does not strip comments — so anything the parser takes from inside that block is treated as a pattern rather than a note. The canonical form keeps the list free of comments entirely; all commentary moved above the ignore: key, with the rule added to the file's own header so it is visible locally rather than depending on a global copy. No entry values changed. Location: .pkgmeta.

Improvements

  • Offline unit-test suite with verified 100% line coverage — Tests/earlydata_spec.lua now runs 20 tests covering !TOGT.lua end to end: record shapes for every captured event, the ring-cap buffer keeping the newest records and counting what it dropped, the handoff from buffering to TOG Tools' live callback, the error-handler wrap and its tail-call to the previously installed handler, re-claiming the top spot after !BugGrabber replaces it, refusing to wrap itself twice, Retail's pre-handler error-snapshot drain including the case where that API throws, ADDON_LOADED ordering and offsets, PLAYER_LOGIN teardown, and the duplicate-copy idempotency guard.

    Coverage is measured, not asserted: Tests/coverage.lua derives the executable-line set from the Lua 5.1 bytecode debug info (walking each prototype's lineinfo and excluding jump-only lines) rather than guessing from source text, so the denominator is real. 76/76 executable lines, 100.00%.

    Four specs were added to reach it. The gap was the MACRO_ACTION_FORBIDDEN branch, uncovered because the suite exercised only its MACRO_ACTION_BLOCKED twin — blocked and forbidden are different severities arriving on separate events, so a mislabel there misreports which protection tripped. Also added: a sweep firing every registered event with no payload at all. Line coverage never reaches the or "?" / or "" side of those fallbacks, and this handler is the entire capture path — one uncaught throw in it and the addon silently stops recording for the rest of the session.

  • No CI test workflow — .github/workflows/tests.yml was removed. It ran the suite on a GitHub-hosted runner on every push and PR; the suite is run locally, by hand, with zero dependencies (lua Tests\wowapi\run.lua). With one developer and no second contributor a green check on GitHub adds nothing and isn't visible where the work happens — a failing test needs to stop the change locally, before it lands. release.yml (packaging) is untouched. CLAUDE.md gained a ## Test system: runnerless, local only section so a later session doesn't reinstate it or go hunting for busted, which is not the runner.


[v0.2.1] (2026-07-17) - TBC Classic Compatibility

Bug Fixes

  • !!TOGT marked out-of-date on current TBC Classic — !!TOGT_BCC.toc declared ## Interface: 20505 while the live TBC Classic client is on build 20506. Clients on that build saw !!TOGT as incompatible and skipped it (unless "Load out of date AddOns" was ticked), which in turn broke TOG Tools (## Dependencies: Ace3, VersionCheck-1.0, !!TOGT) with 8x LUA_WARNING: AddOn [TOGTools] Failed to load missing dependency [!!TOGT] — even for users who had !!TOGT installed. Fix: bumped both ## Interface: and ## X-Min-Interface: to 20506 to match the current TBC Classic build and TOGTools_BCC.toc. Same failure mode and fix as the Retail Midnight bump in v0.1.1. Location: !!TOGT_BCC.toc.

  • BigWigs packager couldn't find the TOC (release failed) — .pkgmeta still declared package-as: !TOGT, the pre-rename name; after the v0.2.0 !TOGT → !!TOGT rename the TOC files are !!TOGT.toc / !!TOGT_<flavor>.toc, so the packager searched for !TOGT.toc, found nothing, and aborted with "Could not find an addon TOC file." (The v0.2.0 CurseForge release failed the same way — package-as was never updated after the rename.) Fix: package-as: !!TOGT. Location: .pkgmeta.


[v0.2.0] (2026-06-11) - Renamed to !!TOGT (loads first) + early diagnostics capture

New Features

  • Renamed !TOGT → !!TOGT so it loads first. WoW loads addons alphabetically by folder name; !!TOGT sorts ahead of every other addon — crucially before !BugGrabber. That ordering is what lets it grab the real seterrorhandler before BugGrabber neuters it, which makes the error capture below coexist with BugSack (see the wrap). Upgrading from !TOGT: the CurseForge app replaces the folder automatically; manual installers should delete any leftover old !TOGT folder so a stale duplicate doesn't load alongside !!TOGT. No SavedVariables, so nothing to migrate.

  • Diagnostics capture for TOG Tools — Alongside ADDON_LOADED timing, !!TOGT now captures from the very first moment of load: Lua errors, Lua warnings (LUA_WARNING), blocked/forbidden addon-action events (ADDON_ACTION_BLOCKED / _FORBIDDEN + the MACRO_ variants), and SAVED_VARIABLES_TOO_LARGE (silent saved-data loss). A capture() function buffers records into TOGToolsEarlyData.diagnostics (ring-capped at 250, with a dropped overflow counter) until TOG Tools sets .cb, after which records stream straight over. A dedicated event frame (NOT unregistered at PLAYER_LOGIN, so it captures all session) handles the events; the action / SV records are pre-formatted (source = culprit, detail = the reason) and recorded by TOG Tools as errors — they are NOT "taint" (true taint propagation goes only to the unreadable on-disk taint.log). Lua errors/warnings keep the raw message so TOG Tools owns the path:line: reason parsing. New globals time / geterrorhandler / seterrorhandler in .luarc.json. Still no SavedVariables. Consumed by TOG Tools v0.7.0+ (Diagnostics tab).

  • Good-citizen error-handler wrap (coexists with BugGrabber/BugSack) — BugGrabber loads after us, REPLACES the error handler without chaining, then neuters the global seterrorhandler so nothing else can register. Because !!TOGT loads first, it saves the real seterrorhandler up front and re-asserts itself on top (on each ADDON_LOADED and at PLAYER_LOGIN) whenever the active handler isn't ours. Our handler captures the error, then tail-calls the previous handler (return prev(msg)) — in Lua 5.1 a tail call drops our own frame, so the wrapped handler (BugGrabber's grabError, or Blizzard's default) sees a clean stack and runs exactly as if it were on top. Net result: TOG Tools and BugSack both capture every Lua error, with no breakage to either. (A prev == ourHandler guard prevents wrapping ourselves.)

  • Retail: back-fill the pre-load error buffer — On Retail, Blizzard's modern pipeline (Blizzard_ScriptErrors, loaded before any addon) buffers errors that fired before any handler registered into ScriptErrors.unhandledErrors. !!TOGT drains that snapshot once at load to pick up errors from core UI load that happened before even !!TOGT. Read-only (not cleared, so Blizzard's own error frame still gets them); does NOT use AddLuaErrorHandler (it asserts issecure() and fails from addon code). Feature-detected via the ScriptErrors global → a no-op on Classic Era. New global ScriptErrors in .luarc.json.

  • Idempotent init — TOGToolsEarlyData is initialized with a guard (= or {} plus an __togtInit flag), so a stray duplicate copy of the addon can't clobber the table the first copy populated or double-register handlers.


[v0.1.1] (2026-05-23) - Retail Midnight Compatibility

Bug Fixes

  • !TOGT marked out-of-date on current Retail (Midnight 12.0.x patches) — !TOGT_Mainline.toc declared ## Interface: 110207 (the TWW-final build); live Retail is on Midnight 12.0.5 and 12.0.7. Clients on those builds saw !TOGT as incompatible, which in turn broke TOGTools (## Dependencies: Ace3, !TOGT) for any user without "Load out of date AddOns" ticked. Fix: expanded to ## Interface: 110207, 120000, 120001, 120005, 120007 to cover both the final TWW build and the entire current Midnight patch range. Verified against currently maintained Retail addons (RaiderIO 120000-120005, !BugGrabber up to 120007, Bagnon 120005, Ace3 120000-120001). Location: !TOGT_Mainline.toc.

Improvements

  • Stripped non-standard TOC fields — !TOGT_Mainline.toc carried ## Interface-Retail:, ## Interface-Classic:, and ## Interface-BCC: lines that look like multi-flavor selectors but are not recognised TOC fields — the WoW client silently ignores them, and the BigWigs packager produces per-flavor TOCs from .pkgmeta directives rather than from in-TOC selectors. Removed to avoid future confusion. Location: !TOGT_Mainline.toc.

[v0.1.0] (2026-05-04) - Sub-Millisecond Timing & CurseForge Wiring

Bug Fixes

  • Per-addon load times collapsed to 0.000s — GetTime() is frame-locked, so every ADDON_LOADED event fired in the same loading-screen frame returned the same timestamp; the per-addon deltas TOG Tools computed from the offsets all came out as zero. Switched the capture in !TOGT.lua to debugprofilestop() (sub-millisecond precision); offsets are still stored in seconds (ms / 1000) so the TOGToolsEarlyData consumer contract is unchanged.

Improvements

  • CurseForge project ID set — 1533953 populated in all six TOC files (!TOGT.toc, !TOGT_BCC.toc, !TOGT_Wrath.toc, !TOGT_Cata.toc, !TOGT_Mists.toc, !TOGT_Mainline.toc) and .pkgmeta (replacing the PLACEHOLDER from initial release), so the BigWigs packager can publish to the correct CurseForge project.
  • CurseForge user-facing description — Added docs/Curseforge_Description.html describing what the companion does, why it's needed, and how to use it alongside TOG Tools.
  • .luarc.json updated — Added debugprofilestop to diagnostics.globals so the new timer call resolves cleanly under the Lua LSP.

[v0.0.1] (2026-05-04) - Initial Release

New Features

  • Load timer companion — Registers for ADDON_LOADED from the very first frame of the loading screen. Records load order and time offset (seconds since first addon loaded) for every addon. Stores results in the TOGToolsEarlyData global for TOG Tools to read and display in the Addon Load tab.
  • Login window tracking — Records total time from first ADDON_LOADED to PLAYER_LOGIN as the overall loading screen duration.
  • All WoW versions — TOC files for Vanilla (11508), TBC (20505), Wrath (30405), Cata (40402), Mists (50503), and Retail (110207).

This mod has no additional files