
Executive Summary: In a marathon launch session for World of Warcraft: Forever (build 70707/1.60.1), we ran a dual-harness autonomous AI pair programming architecture. One agent (AgyOrch) governed the Windows host, OBS broadcast surfaces, Edge workers, Spotify Web API OAuth, and Git convergence. The second agent (AgyBuild) lived inside an isolated WSL Ubuntu sandbox, compiling AST linters, parsing TOC manifests, and writing production Lua/XML. Across four live stream triage incidents, three core sprint issues, and a broadcast overlay overhaul, this session provided a stress test for multi-agent co-development. Here is the complete post-stream teardown.
The Accomplishments Timeline (Interactive Archify Explainer)
Explore the full workflow of today's launch below. Trace the flow from initial Twitch and Meta Threads broadcast hooks, through the core filter sprint, into live auction house incident triage, and finally to Cloudflare edge deployment and master convergence.
Tip: Click interactive nodes or toggle dark/light themes directly inside the embedded canvas, or open the full standalone explainer.
Dual Executive Summaries: The Engine Room & The Bridge
Operating two independent AI agent harnesses in parallel requires sharp division of authority. One agent cannot review its own pull requests without drift; an orchestrator must verify system health while the builder focuses on syntactic correctness.
1. AgyBuild's Engineering Summary (The Engine Room)
Scope: WoW: Forever 1.60.1 · GoldFinder AddOn · Core Filter Engine & Client Hardening
Environment: WSL Ubuntu 24.04 LTS · Lua 5.1 AST Parsers · Git Branchmaster
- Issue #30 Delivered (Minimum Profit Floor): Implemented
/gf minprofit <amount>command parser and evaluation filter, allowing goblins to suppress clutter under 1g, 5g, or 50g thresholds. Merged cleanly in PR #31. - Issue #25 Delivered (Visual Tier Badges): Implemented auction row highlights with Epic Purple
[SNIPE](deals with >= 500g profit or >= 70% discount), Rare Blue[GREAT], and Good Value tinting, backed by sound alerts and chat frame notifications. Merged in PR #32. - Issue #12 Delivered (Category Filters & Watchlist): Built native category pill sub-tabs (
All,Herbs,Mining,Cloth,Leather,Watchlist) and per-row persistent star bookmarking. Merged in commit9afa582. - Lexical Scope Hardening: Forward-declared
ItemNameat line 112 ofTab.luato eliminate a nil lexical scope exception on row star clicks. - Automated Verification: 27/27 Lua files validated through clean AST parsing (
check-lua.js), 5/5 TOC manifests validated for zero missing references (check-toc.js), and live character symlinks mirrored across client test trees.
2. AgyOrch's Systems & Broadcast Summary (The Bridge)
Scope: Stream Production · Cloudflare Workers Edge · Spotify Web API PKCE · Blizzard Client Integration
Environment: Windows 11 Host · Node.js 22 · PowerShell 7 · OBS Studio 31
- Blizzard AddOn List Categorization: Diagnosed orphan addon placement in WoW Build 70707 character select. Upgraded
GoldFinder.tocto## Category: Auctions,ForeverProbe.toc&AddonSmokeTest.tocto## Category: Development Tools, andAdventurerPlates.tocto## Category: Unit Frames. Addons now collapse neatly into native Blizzard category trees. - Cyber-Glass Dynamic HUD with Smart Elasticity: Engineered an Obsidian/Neon Cyber-Glass stream overlay in
public/overlay/index.html. Implemented Option 1: a Side-by-Side Dual-Dock that dynamically transitions between a 204px split-dock (project status ticker + Spotify track player) and an expanded 420px single-dock when music is paused. - Spotify Micro-Daemon: Built
scripts/spotify-daemon.mjsrunning locally on port 8889. Conforms strictly to Spotify's Web API guidelines: Authorization Code grant with PKCE, automated token refresh via 1Password vault creds, and exponential backoff retry algorithms on HTTP 429 rate limits. - One-Click Stream Tooling: Generated
start-spotify-hud.batandstop-spotify-hud.batinscripts/to provide seamless background daemon management during broadcasts. - Edge Deployment: Deployed updated overlay assets to Cloudflare Workers edge (live at
https://musingsofmy.today/overlay/, Version ID33137d63). - Asset Pipeline: Captured and cataloged 6 high-resolution in-game production screenshots in
addons/GoldFinder/assets/, updating GitHub READMEs and CurseForge release documentation.
Sprint Delivery Matrix
| Seq | Issue | Feature Scope | Target Deliverable | Status |
|---|---|---|---|---|
| 01 | #30 | Min Profit Floor | /gf minprofit <amount> parser & evaluation filter |
Merged (PR #31) |
| 02 | #25 | Visual Tier Badges | Epic [SNIPE] & Rare [GREAT] row badges + backdrop tints |
Merged (PR #32) |
| 03 | #12 | Category Filters | Inset pill sub-tabs, star buttons, category routing | Merged (Commit 9afa582) |
| 04 | #14 | Direct Quick-Buy | Shift-Click commodity purchase confirmation | Queued (Next Sprint) |
| 05 | #17 | Undercut Detection | Live competitor price comparison for player auctions | Backlog |
Live Stream Incidents: The 4 Failure Modes Caught in Production
Nothing stress-tests code like playing the game live while writing it. Over the course of the broadcast, four distinct defects occurred on camera. None were theoretical; each required live triage and hotfixing.
[ Character Select ] [ Auction House Tab ]
│ │
Incident 1: TOC Clash Incident 2: UI Button Clash
(Client Rejection 16001) (Red Buttons & Unicode Box)
│ │
▼ ▼
Consolidate Manifests Native Sub-Tabs & Stars
│ │
└───────────────┬────────────────────┘
│
▼
[ Row Star Bookmark Click ]
│
Incident 3: Lexical Nil Scope
(ItemName() not yet declared)
│
▼
Forward-Declare at Tab.lua:112
│
▼
Incident 4: AddOn List Orphan
(Missing ## Category metadata)
│
▼
## Category: Auctions
Incident 1: The Multi-TOC Client Rejection Trap
Symptom: In the WoW Forever character select screen, GoldFinder was marked with a red warning: "Incompatible".
Root Cause: The repository maintained sibling manifest files: GoldFinder.toc, GoldFinder_Mainline.toc, and GoldFinder_Vanilla.toc. During client launch, the engine prioritizes flavor-suffixed TOCs. GoldFinder_Mainline.toc hijacked the Forever client (which reports WOW_PROJECT_ID == 1), but its ## Interface declared 110007, 110100—completely omitting the Forever build's 16001 interface ID.
Resolution: We deleted the fragile sibling manifests and consolidated all targeted versions into a single authoritative GoldFinder.toc:
## Interface: 16001, 120100, 120105, 120107, 110007, 110100, 110200, 20506, 11506, 11507, 11508, 11509, 50400, 50408, 50504
## Title: GoldFinder
## Notes: Snipes underpriced commodity deals and flips from the Auction House.
## Author: Kenneth Henseler
## Version: 1.1.0
## SavedVariables: GoldFinderDB
## Category: Auctions
## Category-enUS: Auctions
Incident 2: UI Aesthetics—From Clashing Red to Blizzard Harmony
Symptom: The initial Category filter bar used standard UIPanelButtonTemplate buttons with red backgrounds. Against the Auction House frame, the red styling clashed aggressively with Blizzard's parchment and dark bronze palette. Furthermore, the bookmark star ★ rendered as an empty unicode square [] because the default game font lacks that glyph.
Before: Red Button Clash
- Red dialog buttons clashing with AH sub-tabs
- Broken unicode glyphs:
[]instead of stars - Awkward row height and padding misalignments
After: Native Bronze Sub-Tabs
- Dark bronze inset tabs matching native
[ Auctions ] - Gold bottom active indicator bar on selected tab
- Native
Interface\Common\ReputationStartextures
Resolution: We discarded UIPanelButtonTemplate and created custom inset sub-tabs backed by dark bronze slices, topped with gold highlights for the active tab. For the star bookmark button, we hooked into native client textures:
-- Native Blizzard reputation star texture (yellow when tracked, grey when inactive)
local star = row.star:CreateTexture(nil, "ARTWORK")
star:SetTexture("Interface\\Common\\ReputationStar")
star:SetTexCoord(0, 0.5, 0, 0.5) -- Active star slice
Incident 3: The Lexical Scope Trap in Lua Closures
Symptom: Clicking a row star to add Copper Ore or Peacebloom to the Watchlist crashed the UI with:
attempt to call global 'ItemName' (a nil value) at GoldFinder/Tab.lua:168.
Root Cause: Lexical scoping order. In Lua, declaring a function later in a file does not hoist it. When MakeRow() was executed inside the UI setup loop, it captured ItemName() within its OnClick closure. Because ItemName had not yet been encountered, Lua looked it up in _G["ItemName"], which was unassigned and evaluated to nil:
-- BUGGY EXECUTION ORDER:
local function MakeRow(parent, index)
row.star:SetScript("OnClick", function()
local name = ItemName(deal) -- FAILS: ItemName is nil!
ToggleWatchlist(name)
end)
end
-- ... 200 lines later ...
local function ItemName(deal)
return deal.name or "Unknown Item"
end
Resolution: Forward-declare the variable at the top of the file before any row factory functions are defined:
-- Line 112 in Tab.lua: Top-level closure forward declaration
local ItemName
-- ... now MakeRow captures the upvalue ...
local function MakeRow(parent, index)
row.star:SetScript("OnClick", function()
local name = ItemName(deal) -- SUCCESS: resolves to upvalue
ToggleWatchlist(name)
end)
end
-- Assign implementation
ItemName = function(deal)
return deal and deal.name or "Unknown Item"
end
Incident 4: Blizzard AddOn List Categorization in Build 70707
Symptom: In WoW Forever build 70707, Blizzard redesigned the in-game AddOn List window with collapsible category groups (Auctions, Bags & Inventory, Combat, Development Tools, Equipment, Professions). All of our addons (GoldFinder, ForeverProbe, AddonSmokeTest, AdventurerPlates) appeared lumped at the very bottom beneath all categories as ungrouped root orphans.
Root Cause: Blizzard's addon manager parses the ## Category: and ## Category-enUS: fields in the .toc manifest. Without them, the addon defaults to uncategorized.
Resolution: We added appropriate category metadata across every addon in our suite:
## GoldFinder.toc
## Category: Auctions
## Category-enUS: Auctions
## ForeverProbe.toc & AddonSmokeTest.toc
## Category: Development Tools
## Category-enUS: Development Tools
## AdventurerPlates.toc
## Category: Unit Frames
## Category-enUS: Unit Frames
Once reloaded, GoldFinder grouped neatly directly under Auctionator and Journalator in the native Auctions tree!
Production In-Game Evidence
Here is GoldFinder running live inside Orgrimmar's Auction House on character Jakob, with active profit scanning, visual tier badging, and full category filtering:

Figure 1: GoldFinder live in Orgrimmar AH. Note the bronze category sub-tabs (Herbs, Mining, Watchlist), star buttons, and colored discount percentages.

Figure 2: Mega-Snipe alert trigger (Epic purple callout with sound trigger).

Figure 3: Clean integration in Blizzard's native collapsible AddOn List.
Edge Broadcast Architecture: The Spotify Cyber-Glass Overlay
A major goal for our broadcast was displaying our currently playing Spotify track on the live stream HUD without cluttering the screen or leaking sensitive API tokens.
┌────────────────────────────────────────────────────────┐
│ Spotify Web API │
└───────────────────────────┬────────────────────────────┘
│ OAuth 2.0 PKCE
▼
┌────────────────────────────────────────────────────────┐
│ Local Micro-Daemon (scripts/spotify-daemon.mjs) │
│ - Port 8889 REST (/now-playing) │
│ - 429 Exponential Backoff + Token Auto-Refresh │
└───────────────────────────┬────────────────────────────┘
│ Polled every 3s
▼
┌────────────────────────────────────────────────────────┐
│ Cyber-Glass Overlay (public/overlay/index.html) │
│ - Side-by-Side Dual-Dock with Smart Elasticity │
│ - 204px Project Ticker + 204px Track EQ │
│ - Auto-collapses to 420px when audio pauses │
│ - Deployed on Cloudflare Workers Edge │
└────────────────────────────────────────────────────────┘
Complying with Spotify Developer Guidelines
When integrating the Spotify API, strict compliance is paramount:
- PKCE Flow with Secure Token Refresh: Client credentials are kept off public repos; tokens are stored in local configuration (
~/.gemini/config/spotify_credentials.json) and backed by 1Password. - Minimal Scopes: We only request
user-read-currently-playinganduser-read-playback-state. - Exponential Backoff: The daemon checks the
Retry-Afterheader when HTTP 429 errors occur, avoiding tight request loops. - Smart Elasticity: In
public/overlay/index.html, when Spotify is active, the container splits smoothly into dual 204px panes: the left pane renders continuous project commit activity, and the right pane displays album art, track/artist title, and an animated audio equalizer. If the track is paused, the music dock fades out and the project ticker smoothly expands to fill the full 420px bar.
To keep daemon operations frictionless, we created 1-click batch launchers:
start-spotify-hud.bat: Starts the background Node.js daemon silently with hidden window styling.stop-spotify-hud.bat: Finds and terminates any activespotify-daemonprocess gracefully.
What We Learned About Multi-Agent Pair Programming
Running two specialized AI agents simultaneously—one driving deep compiler logic while the other drives system architecture and live edge integration—revealed several key principles:
- Context Isolation Prevents Hallucination: Keeping AgyBuild isolated in WSL with Lua-specific linters and zero broadcast noise allowed it to catch subtle lexical scoping bugs that a broad-context agent would have skimmed past.
- The Orchestrator Needs Verification Power: AgyOrch's ability to run AST checks, inspect build outputs, and test HTTP endpoints before committing ensured that every PR merged cleanly into master.
- The Game Client is the Ultimate Arbiter: Linters can pass and ASTs can be pristine, but only launching the real client reveals when a Blizzard TOC interface is rejected or when a font lacks unicode glyphs. Rapid live feedback loops make or break addon development.
All changes are live in master at commit 9afa582 in wow-addons and deployed on musingsofmy.today.