promotional bannermobile promotional banner

Guild Wordle

In-game Wordle with a shared daily word and a guild-wide leaderboard that syncs automatically over guild chat.
Back to Files

v1.1.0-bcc

File nameGuildWordle-v1.1.0-bcc.zip
Uploader
geezlouisegeezlouise
Uploaded
Sep 3, 2026
Downloads
20
Size
76.0 KB
Flavors
Classic TBC
File ID
8803063
Type
R
Release
Supported game versions
  • 2.5.6

What's new

GuildWordle

v1.1.0 (2026-09-03)

Full Changelog Previous Releases

  • Add guild streak leaderboard and nickname system (#5) #minor
    Tabbed leaderboard (Today / Streak / Best), account-wide nicknames, and
    participation-based streaks. New gossip message types are additive, leaving
    RESULTS: byte-identical so v1.0.4 clients stay compatible -- verified against
    the real v1.0.4 code.
    Adds a 175-test suite (LuaJIT/Lua 5.1), CI gating on merge and release, and a
    developer-only in-game dev panel that is stripped from published builds.
    #minor -- new features, backwards compatible.
  • Report the real version in-game instead of a hardcoded 1.0
    The .toc hardcoded '## Version: 1.0', so every release so far shipped
    reporting 1.0 regardless of its tag -- confusing when asking a player what
    version they are on. The packager substitutes @project-version@ from the git
    tag via vcs_filter, which does run over .toc files, so this makes the shipped
    version match the release. REL-02 now asserts the placeholder survives
    stripping.
  • Run tests in CI, gate releases on them, and trim published builds
    tests.yml runs the suite on every PR and push to main. With 'Lua tests' set as
    a required status check, a failing suite blocks merge.
    release.yml gains a test job the release job needs, so nothing is tagged or
    published unless tests pass. Those tests run against the merge commit -- the
    exact tree being released -- so a problem introduced by the merge itself still
    blocks it, which testing the pre-merge branch would miss.
    Both workflows assert the interpreter really is Lua 5.1, failing loudly rather
    than reporting a green run that proves nothing.
    .pkgmeta drops tests/, CLAUDE.md and the dev panel so developer-only files
    never reach players.
  • Add test suite: 175 tests under LuaJIT (Lua 5.1)
    Runs with ./tests/run_all.sh against a WoW API mock and a dependency-free
    runner. Covers game logic, streak math, nickname sanitisation and UTF-8
    truncation, SavedVariables init and pruning, the addon-message wire protocol
    (serialise + parse, batching, and the STREAKS freshness / best-only-increases
    merge rules), plus two-client gossip round-trips including secondhand
    propagation.
    Uses luajit specifically, not lua: it implements Lua 5.1 like WoW's embedded
    interpreter and reproduces the malformed-pattern bug that Lua 5.5 silently
    accepts. A suite green under the wrong interpreter would be actively
    misleading.
    crossversion.lua runs the ACTUAL released v1.0.4 code, taken from the v1.0.4
    tag, against the current build in both directions -- v1.0.4 survives the new
    NICKS:/STREAKS: messages, still reads RESULTS: correctly, and its own real
    broadcast output is captured and replayed into the current build. Testing with
    a second account is impractical, and every cross-version claim here was
    otherwise argued from reading the code: the same reading that produced several
    shipped bugs.
    release_check.lua builds a simulated release using the packager's own filters
    and exercises the addon with developer-only files genuinely absent -- the only
    thing that catches a break appearing once they are stripped. Note the .toc and
    .lua filters differ: the former deletes debug blocks, the latter wraps them in
    a long comment.
    Every bug that reached a player in game has a named regression test, and the
    suite was validated by reintroducing several of them and confirming only the
    relevant tests fail. BEHAVIOR_SPEC.md documents expected behaviour with stable
    IDs the tests reference by name, and carries the manual UAT checklist for
    layout and real-transport checks, which have no headless path.
  • Add developer-only in-game dev panel for multi-client testing
    A single client cannot exercise the interesting half of this addon: what the
    UI does when OTHER clients talk to it. The panel injects fake guildmate
    results, nicknames, streaks, renames and stale gossip echoes, plus helpers to
    force a win/loss and set or break your own streak.
    Injection goes through the real message handler with genuine wire strings, so
    parsing is exercised too -- what you see is what a real guildmate's broadcast
    would actually produce.
    Revealed by /wordle dev via a Dev button on the main window; the panel does
    not open by itself, since dev mode persists and a debug window reappearing on
    every reload is noise. An Isolate toggle (on by default) no-ops outgoing
    broadcasts so injected fakes cannot reach a real guild, and fake entities are
    prefixed Zzt so cleanup can remove exactly those.
    Kept out of published builds entirely: the .toc entry is inside #@debug@
    markers and .pkgmeta drops the file, so releases neither ship it nor reference
    a missing file. Addon code ships as readable Lua, so an allowlist would still
    publish the panel and be trivial to edit out -- not shipping it is the only
    real answer. The Dev button additionally requires the dev file to actually be
    loaded, so a hand-edited devMode flag cannot surface a dead button.
    Also adds a REAL round-trip test: the only check of prefix registration,
    SendAddonMessage, the server round trip and CHAT_MSG_ADDON delivery, none of
    which local injection touches. It works solo because WoW echoes your own addon
    messages back to you -- the same reason HandleAddonMessage guards SYNC_REQ
    with name ~= me -- and probes with ordinary SYNC_REQ traffic rather than a
    fake result, which would put a bogus player on real guildmates' leaderboards.
  • Add guild streak leaderboard, nicknames, and always-on error visibility
    Leaderboard panel becomes tabbed: Today's results, current streaks, and
    all-time-best streaks, sharing one scrollable row pool.
    Nicknames give players one stable name across alts, since streaks are
    account-wide but character names are not. Crucially they are gossiped over a
    NEW message type (NICKS:) rather than being added to RESULTS:, leaving that
    wire format byte-identical to the very first release -- so old and new clients
    stay compatible in both directions. Streak entries are keyed by a hidden,
    frozen accountId rather than the nickname, so renaming is an in-place field
    update and two players can share a nickname without colliding.
    Streaks now measure participation, not skill: finishing the daily puzzle
    extends the streak win or lose, and only a skipped day breaks it. No migration
    is needed for saved data -- a streak zeroed under the old lose-resets rule
    simply restarts at 1 on the next play.
    Error visibility, added after several bugs here failed completely silently:
    any uncaught error from this addon's own files always prints to chat, and
    /wordle dev additionally surfaces other addons' errors. Entry points reached
    directly from UI events (slash dispatch, guess submission, panel refresh,
    SetNickname) are pcall-wrapped so one failure cannot silently abort unrelated
    sibling work in the same call chain. The /wordle dev branch sits inside
    --@debug@ markers so the command does not exist in published builds.
    Robustness fixes for crashes found in play: CharKey() no longer concatenates a
    possibly-nil realm (which aborted InitDB and left tables nil for a whole
    session), InitDB initialises every table before touching any WoW API that can
    fail, today's word is computed on demand rather than once at load, and the
    letters-only nickname filter avoids a byte-range pattern that parses under
    newer Lua but throws under WoW's Lua 5.1.

This mod has no related projects