promotional bannermobile promotional banner

TOG Profession Master

TOG Profession Master should help you and your guild to know faster which player has which profession and who can craft which item or who has learned which enchantment.
Cover Page

Cover Page

TOGPM Main Window

TOGPM Main Window

TOGPM Cooldowns Window

TOGPM Cooldowns Window

TOGPM Missing Recipes Window

TOGPM Missing Recipes Window

Description

TOG Profession Master — Guild-Wide Profession & Cooldown Tracker for WoW Classic

Stop whispering every alchemist in the guild to ask "is your transmute up?" and stop opening five different alts to remember who knows the recipe you need. TOG Profession Master keeps a live, shared view of every guild member's professions, recipes, and cooldowns — and lets you mail reagents straight to the crafter without typing a single character name.

The Problem

WoW's built-in profession UI shows you exactly one thing: your own professions on the character you're currently logged into. The information you actually need — who in my guild can craft this, whose cooldown is up, what reagents do they need — is scattered across whisper requests and guild-chat noise.

For active guilds with crafting alts, this gets worse fast. Multiple alchemists each on a 24-hour transmute cooldown, four leatherworkers with different specialisations, alts spread across connected realms, and no good way to coordinate without spamming every member.

The Solution

TOG Profession Master uses a hash-then-fetch peer-to-peer sync protocol over the guild addon channel to keep every member's view of guild professions and cooldowns up to date in real time, with near-zero ongoing bandwidth. Recipe metadata (names, reagents, item links) syncs once on first contact and stays cached forever; only crafter membership and cooldown state flow over the wire after that.

Every guildmate's data is relayable — if Alice is offline, Bob's cached copy of Alice's cooldowns can serve them to Carol when she logs in. Cooldown coverage no longer requires the data owner to be online.

Core Features

Cross-Guild Profession Sharing

  • Share professions between two allied guilds — for communities split across two socially-linked guilds that can't see each other over the normal guild addon channel. An officer or the guild leader sets the allied guild under Settings → Cross-Guild (members see the list read-only) and their crafters appear right alongside your own.
  • Bilateral by design — data only flows when both guilds list each other. A one-sided config does nothing, and a guild you don't list can't pull or inject anything. With no allied guild configured, the addon does nothing cross-guild — purely local.
  • Whole-guild, not just you — the allied-guild list propagates across your guild automatically, and allied rosters are shared, so every member sees the allied crafters — not only whoever set it up.
  • Live diagnostics — a panel on the Cross-Guild tab (and /togpm xgdiag) shows known rosters, crafter counts per guild, and dependency status at a glance.
  • Requires the auto-installed DeltaSync and GuildRoster dependencies. Same faction only.

Crafting Tab & Cost-to-Craft

  • A full crafting screen in TOGPM's style — a clean Crafting tab that pre-populates a dropdown from your known professions and lists every recipe with a difficulty-coloured name and an orange→yellow→green→grey skill-up tier column. By default TOGPM stays out of the way when you open a profession — Blizzard's window (or TSM / Skillet) keeps the window, with a TOGPM button on it to jump to the tab. Prefer the old behavior? One setting opens straight into the TOGPM tab; another hides the Crafting tab entirely if you craft with another addon.
  • Craft queue — queue recipes and craft them top-down, click-drag to reorder, with completion tracking so the queue keeps itself current.
  • Cost-to-craft with profit preview — every recipe shows total material cost and current AH sell price, with profit calculated in real time (green if you'd profit, red if you'd lose gold). Prices come from Auctionator, TSM, Auctioneer, TOGPM's own AH scan, or — for reagents that are simply never on the AH, like thread and vials — a vendor price, which is the one you actually paid if you have opened that vendor, and ItemDB's base price otherwise.
  • Built-in AH scanner — no other addon required — TOGPM can scan the Auction House itself and build its own price database, or integrate seamlessly with Auctionator / TSM / Auctioneer if you already use them.
  • Powered by LibProfessionDB — recipe details (names, reagents, difficulty tiers, enchant effect text) come from the standalone offline database, so crafting works for any known profession with no scan wait.

Guild Profession Browser

  • Master-detail layout: scrollable recipe list on the left, full recipe drilldown on the right
  • Filter by profession (Alchemy, Blacksmithing, Cooking, Enchanting, Engineering, First Aid, Leatherworking, Mining, Tailoring, Inscription, Jewelcrafting)
  • Search box for fast item-name filtering, with persistent filter preference per character — and it matches more than names: type a guild member's name to list everything that player can craft, or a stat (5 agi, 12 stam, spirit) to find recipes by what the crafted item actually does
  • Skill-tier filter — a multi-select dropdown narrows the list to the trainer ranks you tick (Apprentice / Journeyman / Expert / Artisan, plus Master and above on later clients), so you can hide the low-level clutter
  • Recipe rows show every guild crafter who knows the recipe — online (white), offline (grey), and your own characters (purple, with "You (AltName)" disambiguation when multiple alts know it)
  • Drilldown panel shows reagent list with bag counts, bank stock, and shopping-list quantity controls
  • Right-click a crafter row to whisper them with one click
  • Virtual scrolling for performance on guilds with thousands of recipes

Guild Tab — Your Guild's Crafting Capacity

  • Headcount down to the people — tallies how many guild characters have each profession, then drills in: click a profession to expand its specializations, then a specialization to list the characters in it, each with their skill level (You (300/300))
  • Coverage gaps are obvious — every profession and every specialization is listed even at 0, so "nobody's an Axesmith" jumps out instead of silently missing
  • Specs are inferred, not just recorded — a crafter's specialization comes from their recorded spec or is deduced from the spec-only recipes they're known to craft, so a Tribal leatherworker who has never run the addon still lands under Tribal
  • Gathering professions included — Herbalism, Skinning and Fishing (plus Archaeology on Cata/MoP) have no trade-skill window to open, so they're read straight from your skill lines and synced guild-wide on their own leaf. Now you can find out who actually herbs
  • Names colour-coded exactly like the Professions tab: white online, grey offline, brand-colour You — and an online alt surfaces its offline main

Missing Recipes Tab

  • Personal and Guild viewsMy Character shows what one character hasn't learned; Guild shows recipes nobody in the guild knows, so you can spot guild-wide coverage gaps at a glance
  • Pick a character and a profession and see every recipe scroll they haven't learned yet — no more wondering "what am I missing"
  • Each row shows the scroll icon, the skill level required, and where to obtain it (vendor, drop, quest, crafted, container, fishing)
  • Search by name, filter to a single profession, or toggle whether trainer-only scrolls show
  • Shift-click a row to insert the scroll's link into chat; [Bank] button when your guild bank has it in stock
  • Defaults to the currently logged-in character; switch to any tracked alt on your account
  • Smart filtering: rank-up books (Expert / Artisan / etc. for Cooking / First Aid / Fishing) hide automatically once you've outgrown them

Cooldown Tracker

  • Cross-character cooldown panel: every guild member's active and ready cooldowns in one view
  • Tracks transmutes (per expansion), Mooncloth, Salt Shaker, Spellcloth/Shadowcloth, Northrend / Inscription Research, Icy Prism, Titansteel, Dreamcloth (all 5), Truegold, Living Steel, JC daily cuts, Magnificence — with grouped rows for multi-spell cooldowns (click [+] to expand)
  • Two-level filter: pick a profession, then narrow to a specific shared-timer cooldown (Transmute, Mooncloth, Salt Shaker, Dreamcloth group, JC daily cuts, etc.)
  • "Ready Only" filter to hide active cooldowns; ready cooldowns sort A-Z by name for stable ordering
  • Sortable columns (Character, Cooldown, Time Left)
  • Spell tooltip on hover, item tooltip on the reagent
  • The reagent column tells you whether you can actually feed the cooldown — white when your bags hold enough of it to fill the mail, grey when they do not, so one glance down the list is enough. It updates live as you loot or send the reagent
  • Right-click to whisper the cooldown owner
  • One-click [Mail] button per row — opens a pre-composed supply mail to the cooldown owner with the right reagent attached from your bags
  • Multi-reagent transmutes (Arcanite Bar = Thorium + Arcane Crystal) expand to one row per reagent so you can mail or bank-request each independently

Reagent Tracker & Shopping List

  • Add any recipe to your personal shopping list with the "+" button on the recipe row
  • Floating Reagent Tracker window aggregates every reagent needed across all queued recipes — have from your bags, need from the shopping list, color-coded green / yellow / red
  • Reagent Watch list: pin any item ID to track its bag count separately
  • Shopping-list alerts: chat notification when all reagents for a queued craft are available
  • Shift-click reagent names to insert item links into chat

Auction House Scanner

  • Scan AH button on every tab — walks through whatever's relevant to that tab (your shopping list reagents, the cooldown reagents on screen, the missing recipe scrolls) and queries the AH for live listings, throttled at one item per 1.5s so it's rate-limit-safe
  • After the scan, an [AH] button shows up on every row whose item is actually for sale right now — click to jump the AH browse search to that item with no typing
  • Works on the [+] Transmute popup too: each transmute reagent gets its own [AH] button when listings exist, so multi-reagent transmutes like Arcanite (Thorium + Arcane Crystal) get one button per reagent
  • Toolbar button shows Scanning N/M progress while running; click during scan to cancel
  • Auto-clears scan results when the AH closes (listings go stale fast)
  • Supports Vanilla through Mists of Pandaria via the legacy AuctionFrame UI

TOGBankClassic Integration

When the optional TOGBankClassic addon is loaded, TOG Profession Master surfaces guild bank stock everywhere it matters:

  • [Bank] button next to every reagent in the recipe drilldown, cooldown panel, shopping-list expansion, and Reagent Tracker — visible only when the bank actually has stock of that reagent
  • Click [Bank] to open a request dialog, pick the banker, set quantity (capped by the configured maximum-percent), and send the request to TOGBankClassic
  • Auto-detects when TOGBankClassic data isn't loaded yet and refreshes bank buttons once it is

Crafter Online Alerts

  • When a guildmate who can craft something on your shopping list comes online, you get a chat alert with their name
  • Pick your own sound and visual — choose the alert sound (Chime, Ready Check, Raid Warning, Auction Bell, Whisper, Map Ping) and the on-screen cue (screen flash in gold / red / blue, a raid-warning banner, top-centre error text, or a taskbar flash for when you're alt-tabbed). Selecting an option previews it
  • Toggle alerts on/off; configure exclusions (login-burst suppression, stealth-mode opt-out)
  • Drives off real OnMemberOnline callbacks from LibGuildRoster-1.0 — not WHO polling

Sync Log

  • Settings → General → Sync Log — a live, real-time view of every sync message in and out, with columns for time, event, size, peer and detail
  • Entries name what actually moved (crafters:165 (Leatherworking), a per-player transfer names the player) rather than an opaque byte count
  • Pause button freezes the view so a text selection survives long enough to copy; entries keep accumulating and the view catches up on unpause
  • Contents are selectable and copyable, and the window remembers its position and size across /reload — built for pasting into a bug report

Item Tooltips

  • Hover any item in your bags, the AH, a vendor, or a chat link, and TOG Profession Master appends a list of guild crafters who know how to make it
  • Includes profession, skill rank, and online status per crafter
  • BoP items skipped automatically
  • Recipe details on every recipe — and on the items they make. Hover a recipe scroll, or the item it produces, anywhere in the game and you get its skill-up difficulty in the game's own tier colours (orange / yellow / green / grey), where the recipe comes from (trainer, drop, vendor, quest, container), and an Unlearned list of which of your characters could still learn it, with their skill rank and specialisation
  • Answers on all twelve professions. The source data is keyed by the recipe itself rather than by a scroll item, so it works for the roughly one recipe in three that is trainer-taught and has no scroll to inspect — that is 74.9% of Vanilla recipes covered, against 44.6% for an item-keyed lookup, and the single largest category is precisely those trainer-taught recipes
  • It renders even if you run RecipeMaster, and that is deliberate as of v1.0.7. TOGPM's block is not a duplicate of RM's — only TOGPM tells you which of your own characters could still learn the recipe, and which guildmates can craft it, so standing down to avoid overlapping two rows also withheld the rows nothing else in the game provides. (It also could not tell RM being loaded from RM being switched on, so anyone running RM with its tooltip options off got the block from neither addon.) A setting restores the old defer-to-RM behaviour, or turns the block off entirely
  • Vendor buy price and vendor sell price on every item — not just recipes. Nobody else shows both: TradeSkillMaster and Leatrix Plus show sell only, All The Things shows neither, and the game itself shows neither in your bags. The buy figure comes from a three-tier lookup that prefers prices captured from vendors you have actually opened, so it reflects your reputation discount rather than a book value. Either heading is omitted when its number is unknown
  • Other addons' lines are welcome, and they cannot stretch the tooltip. TOGPM's own recipe tooltips invite All The Things, TOGBankClassic and anything hooking the game's tooltip to contribute, so a trainer-taught recipe with no scroll item gets the same block a real scroll would. Anything drawn there is held to the game's own wrap width, so one long line from any addon cannot widen the frame the way it can on a stock tooltip

Profit Planner

  • See which recipes make gold at a glance — dedicated Profit Planner tab shows all recipes your characters know, with craft cost, current Auction House sell price, and profit (green if profitable, red if losing gold) in one sortable view
  • Live AH vs. Historical pricing — switch between real-time auction prices and long-term averages to spot short-term flips or stable moneymakers
  • Filter and search — multi-select profession, crafter, and pricing source filters let you narrow to exactly what you want to see; search by recipe name to find specific crafts instantly
  • Works with your pricing addons — pulls prices from Auctionator, TradeSkillMaster (TSM), Auctioneer, or TOGPM's own built-in AH scanner — use what you already have or let TOGPM handle it
  • Smart profit tracking — recipes with missing prices stay visible (so you know what needs scanning), and the "+ Profit only" filter hides anything that's currently unprofitable

How It Works

Sync Protocol (Hash-Then-Fetch)

Most guild profession addons broadcast their full data on a timer. With 50 active guildmates each broadcasting 30+ KB every 30 seconds, that's ~1.5 MB of guild-channel traffic per minute even when nothing has changed. TOG Profession Master does this differently:

  1. L0 broadcast (every 10 minutes) — each peer sends a tiny ~600 B leaf-hash list on the guild channel. The list is differential: only leaves whose content has actually changed since the last broadcast are included. A settled guild generates near-zero traffic.
  2. Mismatch detection — peers compare incoming hashes against their local cache. When a hash differs, they whisper a small handshake to the broadcaster.
  3. Drill-down — for roll-up mismatches (e.g., guild:cooldowns), the broadcaster responds with per-character sub-hashes so the receiver can pinpoint exactly which characters have differing data.
  4. Per-leaf data response — the chosen sender broadcasts only the differing leaf's data on the guild channel (BULK priority). Every peer with stale data for the same leaf merges for free; no per-recipient whisper bottleneck.
  5. Owner-authoritative merge — the character who owns a piece of data is the only one who mints its hash, and every other client adopts that hash verbatim rather than recomputing it from its own accumulated view. That's what makes the guild converge instead of drift: cooldowns and each character's profession set and alt list are replaced wholesale from their owner (so a dropped profession, an expired cooldown, or a removed alt actually propagates, which a grow-only union can never do), while crafter membership still union-adds for relay and recipe metadata keeps the richest non-nil value per field. Receiving from any peer converges to the same state regardless of who sent it.

Whispers carry only handshake control messages (offers, requests). All bulk data flows on the guild channel where AceCommQueue-1.0 handles throttling. The protocol scales smoothly to 300–500 character guilds with 50–100 concurrent users.

Recipe metadata is treated as immutable

Once any peer has scanned a recipe, its metadata (name, icon, reagents, item link) is hashed into a per-profession recipemeta:<profId> leaf. After initial guild bootstrap, this hash matches across every peer and never re-transfers — freeing all ongoing wire traffic for the dynamic part: who knows what (crafters:<profId>) and what's on cooldown (cooldown:<charKey>).

Multi-Version Support

All Classic versions share one codebase. Version detection via GetBuildInfo() at startup; per-expansion static tables for skills and cooldown IDs; compat shims for C_Container, C_AddOns.IsAddOnLoaded, and trade-skill APIs. Supported interface versions:

  • Classic Era / Anniversary (1.x)
  • The Burning Crusade Classic (2.5.x)
  • Wrath of the Lich King Classic (3.4.x)
  • Cataclysm Classic (4.4.x)
  • Mists of Pandaria Classic (5.5.x)

Slash Commands

  • /togpm — Open the main profession browser
  • /togpm reagents — Open the floating Reagent Tracker
  • /togpm minimap — Show the minimap button
  • /togpm sync — Force a fresh broadcast now, without waiting for the 10-minute cycle or the send debounce
  • /togpm status — Print sync / comm diagnostic info
  • /togpm versioncheck — Broadcast a version check across the guild and print responses
  • /togpm purge — Open the purge-data dialog (purge all or just one character)
  • /togpm craft — Toggle whether TOGPM takes over the profession window
  • /togpm debug — Toggle debug output
  • /togpm help — Show the full command list

Diagnostic commands for advanced users / bug reports:

  • /togpm whyvisible <name> — Explain, gate by gate, why a character is still shown (or is hidden)
  • /togpm dsstatus — DeltaSync multi-host health check (namespace / MINOR / prefixes / P2P)
  • /togpm xgdiag — Cross-guild diagnostics: known rosters, crafter counts, dependency status
  • /togpm pullroster <name> — Manually pull an allied guild's roster from a known online member
  • /togpm dumphashes — Print the local L0 hash list for cross-peer comparison
  • /togpm dumpcooldowns [charKey] — Dump stored cooldown bucket for a character
  • /togpm dumprecipe <name> — Dump a recipe's stored fields and full reagent table
  • /togpm dumpprice <itemId|link> — Dump full price diagnostics for an item
  • /togpm myalts — List the alt group this account broadcasts
  • /togpm commtest [name] — Probe which addon-message channels the server actually relays
  • /togpm transmutedebug — Explain how a character's transmute cooldowns were resolved
  • /acq status — The comm queue's own view: sends in flight, idle time, stalls and refusals per queue
  • /acq unstick — Force a stuck send queue to release and re-send, without waiting out the timeout
  • /togpm forcebroadcast — Force a full (non-differential) hash list broadcast immediately
  • /togpm backfill — Run the reagent itemId backfill pass
  • /togpm spellcache — Print the spellbook name→ID cache
  • /togpm itemgaps [profId] — List crafted items LibItemDB has no stat data for

Requirements

  • Ace3 (AceAddon-3.0, AceComm-3.0, AceDB-3.0, AceGUI-3.0, AceTimer-3.0, AceConsole-3.0, AceConfig-3.0, AceLocale-3.0, AceHook-3.0) — auto-installed by CurseForge
  • DeltaSync — v4.0.0 or newer required (LibStub MINOR ≥ 15). v4.0.0 made the library multi-host, and TOGPM creates its own isolated sync host so it can't clobber another DeltaSync-using addon in the same client. On an older DeltaSync, guild sync stays disabled rather than falling back — update it. Auto-installed by CurseForge; transitively pulls in AceCommQueue-1.0
  • GuildRoster — provides LibGuildRoster-1.0, the guild-roster engine (membership, online state, roster callbacks). MINOR ≥ 6 for the allied-guild roster API. Auto-installed by CurseForge
  • ProfessionDB — provides LibProfessionDB, the offline recipe database (names, reagents, skill tiers, sources, enchant effect text) that lets the Crafting, Professions and Missing Recipes tabs render instantly with no scan wait. Auto-installed by CurseForge
  • ItemDB — provides LibItemDB, the offline item database behind crafted-item stats and consumable buff text (and the stat-based recipe search). Auto-installed by CurseForge
  • VersionCheck-1.0 — auto-installed by CurseForge
  • WoW Classic Era, TBC, Wrath, Cataclysm, or MoP — all versions supported via compatibility shims

Optional integrations:

  • TOGBankClassic — enables [Bank] buttons everywhere reagents appear
  • GreenWall — cooldown announcements relay to the confederate guild channel

Recent Updates

v1.0.8 (Latest — 2026-08-19) — 206 TBC recipes come back, including every flask; item lookups stop depending on a hidden setting

  • fix: Every TBC flask was missing from the addon, and 194 more TBC recipes with them — two separate causes, both ours. Reported in game as "flask of blinding light is not showing up on tbc" and, separately, "a lot of missing recipes" on TBC.
  • fix: Cause one: a recipe was hidden if it needed more skill than the expansion's cap allows. TBC caps Alchemy at 375 and the data gives Flask of Blinding Light 390, so it was filtered out before any list could draw it. That rule read like an expansion check and was not one — measured across all five game versions, every recipe it rejected was a real recipe of that expansion: 12 on TBC (all Alchemy, being Super Rejuvenation Potion and all five flasks), and on Vanilla it was hiding Gurubashi Mojo Madness, an ordinary Zul'Gurub recipe. On Wrath, Cata and MoP it had never once fired. It caught nothing another filter had not already caught, so it is gone.
  • fix: Cause two: the TBC content-phase filter defaulted to phase 2 and was never moved forward. It was set to the live state as of v0.5.4, with a note in the code that a new default would ship each time a phase opened. That never happened, and it hid 194 of 2170 TBC recipes — 109 from phase 3 and 85 from phase 4 — across every profession: Jewelcrafting 69, Leatherworking 51, Engineering 20, Blacksmithing 17, Tailoring 17, Enchanting 10, Alchemy 6, Cooking 2, Fishing 1, Mining 1. The filter now defaults to showing everything and is opt-in. A number that has to be chased forward by a release is wrong for most of every phase's life and wrong silently; showing a few not-yet-live recipes is visible and self-correcting, while hiding real ones is not. The setting is still there if you want to hide unreleased content deliberately.
  • fix: Every item lookup in the addon depended on a setting you control without knowing it. The item functions TOGPM reads are "deprecation fallbacks" on Classic Era — Blizzard only creates them when a hidden CVar is switched on. With it off they do not exist, so some calls would error and others would silently skip whole branches. Roughly 60 call sites across 14 files now route through one resolver that prefers the modern form. Two visible symptoms went with it: a recipe row could render with no quality colour at all, and crafted-gear rows in Missing Recipes could error outright.
  • fix: The "(loading...)" placeholder rendered as an empty box in the shopping list and the reagent watch — it used a typographic ellipsis, and the game's fonts do not have that glyph. It is the string you see most in either list, because it shows for every item your client has not cached yet.
  • improved: The peer-offline check behind guild sync is one function instead of three copies, only one of which had ever been tested. It also answers "not offline" when no roster is loaded, which is deliberate: knowing nothing about who is online must not be read as everyone being offline, or sync refuses every send instead of protecting it.
  • improved: Offline test suite at 1,433 specs. The shared test harness now echoes guild addon messages back to the sender the way a real server does — which turned two tests red for the right reason. TOGPM's comm diagnostic decides whether a server relays guild traffic from that echo, so the old test environment was a permanent imitation of the exact broken server the tool exists to detect. Dev-only, not shipped in the package.

v1.0.7 (2026-08-08) — The tooltip finally works outside the addon, tooltips are the width the game makes them, vendor buy and sell prices, nine wrong reagents, and all data generation leaves this addon

  • fix: Recipe tooltips are the same width as the game's again — and this one went wrong in both directions before it went right. A WoW tooltip has a preset wrap width the engine derives from your resolution, UI scale and font, and a line opts into it with a flag whose default is off. One line that does not opt in ignores the preset and stretches the whole frame, dragging every other addon's content out with it. Every line TOGPM writes has passed that flag since v1.0.6 — but v1.0.7 started letting All The Things draw into TOGPM's own recipe tooltip, and ATT does not pass it on its source breadcrumb, so the tooltip inherited ATT's width. Rather than re-implement one addon's renderer, TOGPM now forces the flag on for the duration of any third-party render — ATT, TOGBankClassic, and the hook chain that reaches addons with no API at all — then hands the tooltip back exactly as it found it, even if that addon errors midway. Nothing is measured and no width is hardcoded.
  • fix: …and then it came out narrower than the game's, because the title was wrapping too. With every line opted into the preset, nothing was left to claim a natural width, so the frame collapsed to the bare preset and Schematic: Advanced Target Dummy broke onto two lines — which the game never does with an item name. The preset is the width long lines wrap to, not the width every tooltip ends up at. Exactly one line is now left unwrapped — the title — and it sizes the frame, matching where the game puts its own.
  • fix: The reagent on a cooldown row was always grey, whether you had it or not. That colour is meant to tell you at a glance which cooldowns you can actually feed — white when you hold enough of the reagent to fill the mail, grey when you do not. The expanded [+] popup had that rule and the row it expands from did not, so the two disagreed about the same fact. The column now reads your bags, and recolours the moment you loot or mail the reagent rather than waiting for a tab switch.
  • fix: TOGPM's tooltip lines were invisible on every bag item, and had been for the life of the feature. Three hook paths feed the global item tooltip; on Classic Era only the last one — a fallback hooked onto Show — fires for a bag slot. Because it runs after the tooltip has already sized and laid itself out, the lines were appended to the tooltip's data and never drawn. The addon looked completely absent from game tooltips while its own debug log reported the hook firing five times per hover. It now forces a re-layout after appending. Location: Tooltip.lua.
  • new: Vendor buy price and vendor sell price, on every item in the game. Not just recipes — hover anything, anywhere. Nobody else shows both: TradeSkillMaster and Leatrix Plus show sell only, All The Things shows neither, and the game itself shows neither in your bags. The sell figure is the one TSM prints; the buy figure comes from a three-tier lookup — Auctionator's vendor cache, then prices TOGPM captured live from vendors you have opened, then a static base price — so where you have actually met the vendor it reflects your reputation discount rather than a book value. Either heading is omitted when its number is unknown.
  • improved: The tooltip ships switched ON. Crafters and the recipe block were both off by default and stood down entirely whenever RecipeMaster was installed, so on a stock setup the addon put nothing on a game tooltip at all. Both are now on. The recipe block no longer defers to RecipeMaster either — ours is not a duplicate of theirs, since only TOGPM lists which of your own characters could still learn the recipe.
  • fix: Nine of the forty-nine hard-coded cooldown reagents pointed at the wrong item, and three at items that do not exist. Transmute: Arcanite asked for Huge Emerald, Mithril to Truesilver for Steel Bar, and four Vanilla elemental transmutes for "Elemental" items instead of "Essence" ones. The Cooldowns tab's reagent count, its [AH] lookup, its [Bank] button and its shopping-list add all read that id. Fixed by deleting the hand-typed tables and deriving reagents from ProfessionDB, which has carried Blizzard's own data the whole time.
  • fix: The shopping list silently ignored every multi-reagent cooldown. Queue Brilliant Glass, Primal Mooncloth, Spellcloth or Shadowcloth and it added nothing, with no message to say so.
  • fix: One hover of the help icon made every tooltip in the game wider for the rest of your session. It set a 480px minimum on the shared tooltip and never put it back — and nothing in WoW resets that automatically, so it applied to Blizzard's tooltips and every other addon's too.
  • fix: Recipes All The Things marks "never implemented" still appeared in Missing Recipes — Darkspear, Steam Tonk Controller and others. Requires the updated ProfessionDB.
  • improved: TOGPM's block now renders below other addons' contributions, not above them, matching how a normal game tooltip is assembled. It also means a fault in our block can no longer delete All The Things, TSM or RecipeMaster from the tooltip, which is what used to happen.
  • improved: Missing Recipes now draws on the game's own tooltip like every other tab. It had used a private tooltip frame since v0.7.5 to sidestep a third-party addon's error; that addon has been rewritten since, and the private frame was the reason that tab's tooltips could look different from the game's.
  • fix: A banker's stock showed as a single stack, and the request dialog would not let you ask for more than that. A bank holds an item as one entry per stack, so 60 Copper Bars in a 20-stack bank is three entries — and only the first was counted. Every reagent held in bulk, which is most of them, read low on the tooltip, and "Request from Guild Bank" capped what you could ask for at that same wrong number.
  • improved: The "Bankers:" block on tooltips is now drawn by TOGBankClassic itself. TOGPM had rebuilt that block by hand, because TOGBank's own version only appears on tooltips carrying a real item — never on the roughly one recipe in three that is trainer-taught and has no scroll, which is exactly where you want to know whether the bank has the reagents. TOGBankClassic now exposes it, so there is one implementation instead of two that had quietly drifted apart. Requires the updated TOGBankClassic; an older one still works via the previous path.
  • improved: This addon no longer generates or stores any generated data. The twelve source-data files (380,000 lines, 6.7 MB) and the vendor price table are gone, replaced by per-version data from ProfessionDB and ItemDB. A Vanilla player was previously carrying Cataclysm drop tables; the same information now ships correct for your client in under 1 MB, with NPC names alongside the ids.
  • improved: Offline test suite grown to 1,398 specs, and tooltip width is testable at last. The suite previously had no way to answer "how wide is this tooltip", so every width claim had to be checked by hand in game — which is how the two width bugs above shipped one after the other. The shared test harness gained a width oracle, so both are now pinned by tests that fail if the fix is removed, alongside new coverage for the vendor price block, TOC load order, and the addon's default settings — which had none at all, so two defaults were changed with the whole suite staying green. Dev-only, not shipped in the package.

v1.0.6 (2026-08-06) — Recipe details on every tooltip, the scroll data source moves, and item links unified

  • new: Recipe details on tooltips everywhere — difficulty, sources, and which of your characters haven't learned it. Hover a recipe scroll or the item it makes, in your bags, the bank, the auction house or a chat link, and you get the skill-up breakpoints in the game's tier colours, where the recipe comes from, and a red Unlearned list naming your own characters who have the profession but not the recipe — with their skill rank and specialisation. If you run RecipeMaster, it keeps the game's tooltips and TOGPM fills in the ones RM cannot see (the tooltips inside TOGPM's own window); without RM, TOGPM covers both. A setting overrides that either way.
  • new: It answers on all twelve professions, which is the point. The source data is keyed by the recipe, not by a scroll item — so it works for the roughly one recipe in three that is trainer-taught and has no scroll at all. Measured against the shipped Vanilla data: 74.9% of recipes get a Sources line this way against 44.6% keyed by item, and the largest single category is those trainer-taught recipes. Where there is genuinely no data the heading is omitted rather than shown empty.
  • fix: Every recipe tooltip in the game showed the old Engineering: … header instead of Schematic: …. ProfessionDB's 26 shipped data files were still registering against the library handle they were generated with before the data moved, so every scroll query returned nothing and the addon fell through to its oldest fallback — silently, with nothing erroring. Fixed in ProfessionDB v1.5.0; update that addon, no change was needed here.
  • fix: The teaching-item ids were built by matching recipe names against item names. That matcher is gone, replaced by the authoritative game-data join the client itself uses. Cross-checking the two found 42 disagreements, and then a second fault only the cross-check could surface: the candidate list included ids for items that do not exist. With that filtered, the two methods agree on all 1,073.
  • fix: Both [Bank] buttons in the Shopping List did nothing. They called a function on TOGBankClassic that has never existed, behind a guard that tested for that same function — so the guard was never once true and the buttons silently did nothing for their whole life. Now routed through the call every other surface already used, which also says so in chat when no banker stocks the item instead of opening an empty dialog.
  • fix: The Requires <Profession> (N) line was missing from every browser recipe tooltip, and an unmet requirement now shows red the way the game's own does. Recipe rows never recorded which profession they belonged to, so the header could not look the recipe up — which also made the fallback that is the only teaching-item source on Wrath, Cata and Mists unreachable.
  • fix: Requires Mining (1) on a recipe that needs 230. The number came from a field that is a floor of 1 on eight of twelve skill lines. It now reads the correct per-recipe value, and omits the line entirely rather than printing a number it cannot stand behind.
  • fix: Recipe-list name colours depended on what your client happened to have cached, so the same recipe rendered coloured on one login and plain on the next. It now falls back to shipped item data, which answers offline for every item.
  • improved: Prices on recipe tooltips now come from a shared integrations registry, so TOGPM asks once and shows whichever price addons you actually have — TradeSkillMaster, Auctionator, or neither — using their own formatting, instead of re-implementing each one's labels.
  • improved: Offline test suite grown to 1,227 specs. Includes 35 covering the new tooltip block, each mutation-tested — the behaviour it names is deleted from the source and the spec has to fail. That process also caught two of the suite's own test files quietly corrupting later ones, which had been hiding 15 real failures. Dev-only — not shipped in the package.
  • new: Shift-click any item in the addon to link it in chat — everywhere, the way the rest of WoW does. Every item name, reagent row and recipe header now routes through Blizzard's own HandleModifiedItemClick, the same function the game's bag and character panes use. It honours your modified-click bindings rather than assuming shift, drops a link into the auction-house search box or an open macro when those have focus, and ctrl-click to preview in the dressing room comes along free.
  • new: Hold the compare modifier over an item to see it against what you're wearing. The side-by-side comparison you get from a bag slot, now on every item in the addon — and it follows the modifier while you hover, so pressing shift with the tooltip already open works.
  • new: Setting: "Use the game's standard item tooltips" (off by default). TOGPM draws trimmed tooltips inside its own window so long lists stay readable; turn this on to get exactly what a chat link gives you instead, including lines other addons add such as All The Things. Off by default deliberately — the Missing Recipes list uses a private tooltip frame so third-party tooltip hooks that error on recipe scrolls never run on it. Turning this on re-exposes you to that. Requested on Discord.
  • fix: Shift-click ignored your keybindings on seven of the ten surfaces that offer it. Three implementations of one gesture: Blizzard's own HandleModifiedItemClick on Cooldowns/Crafting/Profit Planner, and two older paths elsewhere that hard-code a shift check instead of asking what you actually bound. Rebind the link modifier and those seven did nothing; ctrl-click for the dressing room worked on three tabs and not the rest. All ten now share one router.

Seeing queue STALLED — Ns with no progress errors? That was AceCommQueue-1.0 misreading ordinary server throttling as a fault, and it is fixed in that library at MINOR 6 — update the AceCommQueue-1.0 addon and the errors stop. Nothing in TOGPM caused them.

  • fix: A cross-guild broadcast the comm queue gave up on was silently ignored. AceCommQueue-1.0 MINOR 6 adds a fifth delivery verdict, lost — the send was released, re-sent, and ran out of retries. It arrives in the same shape as a deliberate drop, so TOGPM's check walked straight past it, which made the most serious verdict the only one nobody logged: unlike a refusal, a lost send does not heal itself on the next pass, so an allied-guild link could be genuinely down with nothing in the Sync Log to say so. Location: TOGProfessionMaster.lua.
  • fix: /togpm commtest reported a lost send as "no delivery verdict". Same cause, opposite symptom — a verdict had arrived and it said the queue had given up, but the report sent you to /acq status to hunt a queue that had already moved on. It now prints LOST — queue gave up after retries as its own outcome. Location: Modules/CommTest.lua.
  • fix: A TOGPM mouse handler could keep firing inside another addon's window. AceGUI recycles widgets account-wide, so TOGPM saves a widget's prior frame script and restores it on release. When there was no prior script the save stored no key at all, so the restore loop never visited that event and our handler stayed on the released widget — leaking in the commonest case of all, a widget with no existing handler, which is every current caller. Found by the new GUI tests rather than by a report. Location: GUI/MainWindow.lua.
  • new: /acq status now works in game. AceCommQueue-1.0 ships the command but no loader that registers it, and nothing else in the addon did either — so the one tool that shows what the comm queues are actually doing did not exist. It prints, per queue: whether a send is in flight, how long it has been quiet, how many messages are waiting behind it, and how many the client has refused this session — which is what identifies which queue is stuck, instead of waiting for the stall report a minute later.
  • improved: Cross-guild broadcasts now take the delivery verdict, so failing federation traffic is visible. The allied-guild config and roster broadcasts are the only sends TOGPM makes directly (everything else rides DeltaSync, which has its own accounting behind /togpm dsstatus). They passed no callback, so a refusal reached the player's bug catcher from inside the comm layer and the addon learned nothing. Both now record a refusal to the Sync Log, naming what did not arrive and which allied guild's roster it was. Visibility, not recovery — both broadcasts are periodic, so a refusal heals itself on the next pass.
  • improved: /togpm commtest no longer blames the server for a send the client refused. The probe exists to answer one question — does this server core relay guild addon traffic? — and a refused send reported as NO REPLY, the exact signature of a broken core. It now reads the delivery verdict and says NOT SENT — client refused it, with a verdict note that this tells you nothing about the core.
  • improved: Offline test suite grown to 1,054 specs, and it can now test the GUI. The shared harness gained a widget layer, so a spec builds a real AceGUI tree outside the game — which is how the leak above was found. Coverage went from 43% to 71%. New spec files cover the widget-recycling helpers, the minimap button, the Guild tab's coverage counts, the cooldown rows and their reagent popup, the recipe detail panel's shopping-list arithmetic, the shopping-list and reagent totals, the craft-ready alert, the AH scanner's price selection, the Settings options table, the Profit Planner's filters, and every one of the 25 slash commands — most of which are diagnostics you are asked to run when something is already broken, which is the worst possible moment for one to throw. Every spec was mutation-tested: the behaviour it names was deleted from the source and the spec had to fail. That caught several tests that were passing while asserting nothing. Dev-only — not shipped in the package.

v1.0.5 (2026-08-03) — Enchant recipes showed a random item's tooltip; the Crafting tab left a second window open

  • fix: Opening the Crafting tab also popped a second profession window — TSM's, or Blizzard's — and left it there. Reported on TBC. On Classic there is exactly one way to get a trade-skill session: cast the profession. That session (not any frame) is what the tab reads recipes from and crafts through — but the cast fires TRADE_SKILL_SHOW / CRAFT_SHOW, the same event every other profession UI listens for, so clicking our tab handed TSM (or Blizzard) their cue too. TOGPM only hid Blizzard's own frames, and only the one belonging to the current session, so anything else stayed up. The Crafting tab now claims the session it opens: both Blizzard frames are hidden and re-hidden from an OnShow hook, and TSM's window is hidden through TSM's own public API. Each hide clears the frame's OnHide first, since those windows close the trade-skill session from OnHide and that would blank our tab; if the session is ever seen dying anyway, the TSM suppression switches itself off (a second window beats an empty tab). The WoW UI button releases the claim, so switching to the native window mid-session still works.
  • fix: Hovering an enchant in the Professions tab showed a completely unrelated item. Reported on TBC; it was present on every flavour. Every recipe key in the shipped recipe data is the recipe's trade-skill spell id, but the browser's link resolver treated that key as an item id whenever the entry carried no crafted-item link — and WoW's item and spell id spaces overlap freely, so the lookup silently succeeded on the wrong thing. Spell 13937 is Enchant 2H Weapon - Greater Impact; item 13937 is the staff Headmaster's Charge, which is exactly what the report's screenshot showed. Crafted-item recipes hid the fault because their link is built from craftedItemId and wins first — enchants produce no item, so they fell straight through. Enchants now resolve to their spell tooltip (description + reagents), and shift-click inserts the recipe's spell link.
  • fix: The recipe list's [Bank] button read stock for the wrong item — same root cause. It asked for stock of the recipe's spell id, so it appeared based on whatever unrelated item shared that number. Now keyed by the crafted item.
  • fix: The [TOGPM] crafters line never appeared on Professions-tab tooltips — looked up by spell id against an item-keyed table, so it always missed. The itemId= / spellId= diagnostic line was also reporting the spell id in the itemId slot; both fields are correct now.
  • fix: Enchants on the shopping list had no hover tooltip at all (no crafted item to link). They now show the recipe's spell tooltip.
  • fix: A guildless player could get sync errors in their bug catcher. Two cross-guild broadcasts send on GUILD and neither checked the player was actually in one. The client always refused such a send silently, but AceCommQueue-1.0 MINOR 5+ now reports a refusal through the error handler — so an invisible dropped message became a visible error, repeating on the config-gossip timer. Both now return early when guildless.
  • fix: Recipes named "… [PH]" were never filtered out of the cache. The guard that keeps Blizzard's internal placeholders out of the UI searched for [PH] with the plain flag set and a regex-escaped pattern, so it looked for a literal percent sign and matched nothing, ever. Every "Manual: … [PH]" placeholder sailed through and persisted in SavedVariables, where only a purge would shift it.
  • fix: Auctioneer pricing never ran for any item the client hadn't cached. Both Auctioneer bridges built their probe list starting with the item link — which is nil until the client has loaded the item, putting a nil in slot 1 and stopping the loop on entry. The two synthetic item forms that exist precisely for the uncached case were therefore unreachable exactly when they were needed.
  • fix: A trade-skill API was called without the feature check every other call site uses. GetProfessions is a Cata+ API; one spot in the hot path of every trade-skill scan called it unguarded, so on a client without it nothing would scan at all rather than degrading to the name-based fallback.
  • improved: Guild sync now uses DeltaSync's revision-2 content hash. Revision 1 renders a number and its string form identically, so a genuine difference between two clients could be invisible and the sync silently skipped. Both revisions now ride together on every leaf, and each comparison uses the highest revision both ends advertise — a peer on an older build falls back to revision 1 and still agrees, while two updated peers get the collision-free comparison. No flag day and no version bump on the wire.
  • improved: /togpm dsstatus now answers "did my sync messages actually arrive?" WoW silently discards addon messages under congestion and AceComm forwards only a boolean, so a refused send used to be indistinguishable from a delivered one — a sync that had quietly stopped working looked exactly like an idle one. The status block now reports delivered / refused / not-attempted with the last refusal's channel, target and size, and says plainly when the refusals are simply because you're guildless.
  • improved: Offline test suite added — 634 specs. The addon core now boots outside the game against the real Ace3, DeltaSync and roster libraries, so specs read real tables and compute real hashes instead of hand-copied stand-ins that drift. Several of the fixes above were found by writing it rather than by a bug report. Dev-only — not shipped in the package.

v1.0.4 (2026-07-28) — Enchanting's Craft button, departed guildmates clearing on their own & the Settings scrollbar

  • fix: Enchanting's Craft button did nothing — the long-standing "every profession works except Enchanting" bug. Enchanting is the one profession that crafts through a secure action button (it casts /cast <recipe> from a secure macro; every other profession crafts from the button's ordinary PreClick). Blizzard's SecureActionButton_OnClick only performs the action when the click that arrived matches its key-down/key-up gate, which falls back to the ActionButtonUseKeyDown CVar. TOGPM registered the button for key-up only, so for anyone with that CVar on — ElvUI and Bartender4 both set it, as does Blizzard's own "use key down" option — the click was dispatched, the secure gate discarded it, and no enchant was ever cast. Trade skills were unaffected because their craft runs in PreClick, which isn't gated. The button now registers both clicks while in enchant mode, so exactly one satisfies the gate whichever way the CVar is set. Verified against Blizzard's SecureTemplates.lua and TradeSkillMaster, which branches on the same CVar.
  • fix: Guildmates who left the guild kept showing after login until you clicked around — now they clear on their own. TOGPM never deletes data on its own; it masks it by bouncing your database off the live guild roster. Until the roster library reports its first build complete that gate deliberately hides nothing (a half-built roster can't vouch for anyone, and blanking a legitimate list is worse than briefly over-showing one) — but nothing told the UI when that cold-start window closed. Only OnMemberOnline / OnMemberOffline were hooked, and only by the Professions tab, so after a login or /reload a departed member kept rendering until some unrelated event happened to rebuild the list — exactly the reported "I saw his name, clicked around a bit, and then it disappeared". The roster's ready, joined and left transitions now raise a re-scope signal; that signal reaches every guild-scoped tab (Professions, Cooldowns, Missing Recipes all filter through the same gate and were all missing it, not just the Guild tab); and the Professions tab rebuilds its recipe cache on it, since that cache bakes each crafter's visibility verdict in at build time and one warmed during cold start kept serving ex-members all session.
  • fix: The Settings window could clip its lower options with no scrollbar (reported with ElvUI). AceGUI decides whether to show a scrollbar from a content height it cached during layout. Ace3 skinners restyle those widgets afterwards, changing their real heights while the cached figure stays stale — so the scroll frame concludes everything fits, the bottom options are clipped, and the mouse wheel doesn't help either (AceGUI ignores it while the bar is hidden). Opening Settings now re-runs the layout once the window has settled so the scrollbar comes up.
  • new: /togpm whyvisible <Name> — find out why a character is still being shown. Every "TOGPM isn't dropping former guildies" report reduces to one of the escape hatches the display gate deliberately keeps (roster library not ready yet, a sister-guild tag on the crafter entry, a stale sister roster, or being an alt of someone still in the guild) — and from the outside those are indistinguishable from "it just isn't purging". The command prints each gate's answer for one character, the crafter tags stored against them, and the final verdicts, so a report can name the real cause.

Credits

Recipe data comes from ProfessionDB, built from Blizzard's own client data via wago.tools. Two things the client simply does not know are derived from community projects and shipped as static tables: where a recipe comes from — the trainer, vendor and drop sources shown in the browser and Missing Recipes — is derived from the tested TrinityCore and AzerothCore world databases, which reverse-engineered that information because the client stores none of it; and the TBC content-phase tags behind the optional Missing-Recipes phase filter are derived from AllTheThings (that filter ships off as of v1.0.8 — by default you see every recipe, and you can switch it on if you would rather hide content that is not live yet). None of their files are redistributed — only the underlying facts are re-expressed in this addon's own format, with thanks.

Community

If you have any questions, comments, bug reports, or feature requests, please feel free to reach out on Discord or open an issue on GitHub!

The TOG Profession Master Team

Forgeborn tier frameprofile avatar
  • 2
    Followers
  • 28
    Projects
  • 452.3K
    Downloads
Donate

More from PmptastyView all