v1.3.0-classic
What's new
Weapon Journey
v1.3.0 (2026-09-07)
- chore(release): bump version to 1.3.0
Ships the LDB/minimap-button port off Titan Panel, the offline test suite,
two bugfixes, and the release-workflow fix (contents:write + test gate)
accumulated since 1.2.0. Offline suite green (113/113).
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01BYkpAmbg6ttPb3korxsQW2 - fix(release): grant contents:write and add a test gate before packaging
Bring the release workflow onto the SHIP-3 recipe from Boonkeeper: pin
permissions: contents: write explicitly (the packager's GitHub-release step
403s under a repo whose default token permissions are read-only), and run the
Tests/*_test.lua suite before packaging so a broken build is never uploaded.
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01BYkpAmbg6ttPb3korxsQW2 - docs: correct .pkgmeta's stale repo-name comment
The GitHub repo itself was renamed TitanWeaponSkills -> WeaponJourney (the
old URL now redirects); the comment explaining package-as still said the
repo "is still named TitanWeaponSkills", which stopped being true.
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com - chore: embed LibEmber-1.0 instead of declaring it optional
The Admiral's call: embed a real copy rather than lean on another addon in
the same install to provide it. Vendored unmodified from
https://github.com/rlalance/LibEmber, same pattern as LibStub/CallbackHandler
/LibDataBroker/LibDBIcon above it. No consuming code yet -- this just makes
the library unconditionally available for whenever this addon wants to use it.
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com - chore: declare LibEmber-1.0 as an optional dependency
Prep for hosting LibEmber's particle effects (Sigil's own extraction,
G:\Dev\LibEmber) here later -- no consuming code yet, just the load-order
declaration so this addon loads after LibEmber when something in the same
install provides it.
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com - fix(coverage): run under Lua 5.1 and stop reporting 0% as a measurement
The coverage gate — the tool that enforces this ship's stated 100% bar —
has never actually run on this machine. Two defects, one behind the other.goto continue(line 85) is Lua 5.2+. The offline runner is now Lua
5.1.5 — deliberately, because 5.1 is what the WoW client runs, so a pure
module that passes offline behaves the same in-game. Replaced with the
5.1 equivalent: a positive if/else guard around the loop body. Pure
control-flow inversion, no logic change.- Discovery used
io.popen("ls Tests/*_test.lua"). On Windows io.popen
always goes through %COMSPEC% (cmd.exe), which has nols— so it found
zero files and reported "0% coverage" as though that were a result. Now
triesdir /bfirst and falls back tolselsewhere.
Fixing (1) alone would have been worse than leaving it broken: a crash is
honest, a confident 0% is not. So an empty discovery now exits non-zero
with an explanation instead of printing a report.
Measured, from the project root — the bar is met:
WeaponJourneyEngine.lua lines 97/97 (100.0%) functions 7/7
WeaponJourneyDB.lua lines 45/45 (100.0%) functions 7/7
TOTAL lines 142/142 (100.0%) functions 14/14 (100.0%)
Identical fix landed in GearJourney (f76fbc5) — the two tools are the same
inherited file.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
- docs(changelog): note the tooltip tofu fix
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com - fix(tooltip): drop the tab that rendered as tofu on each line [WJ-7]
Under Titan the vertical tooltip's per-line tab (label \t rank) was fine --
Titan rendered the tooltip itself. As a LibDataBroker feed the lines go through
a stock GameTooltip:AddLine, whose font has no tab glyph, so every line showed
a tofu box. The label already ends in ': ', so the rank stays separated with
the tab simply removed. Verified in-game on Classic Era.
Ranks are now left-aligned per line rather than in a tab-stop column; an
AddDoubleLine column layout is a possible follow-up if that alignment is wanted.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com - chore(git): untrack Process/ and Research/ to match .gitignore
Both trees are listed in .gitignore (developer-only process + research docs,
same central model as the sibling addons) but were still tracked from before
that rule landed -- so every edit to them kept getting committed, and one
nearly slipped into the WJ-1 rename. Remove them from the index; the files
stay on disk, now genuinely ignored.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com - docs(changelog): record the Titan-independence port under [Unreleased]
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com - feat(ldb): drop the Titan Panel dependency, publish as LibDataBroker [WJ-4]
Titan Panel was a hard prerequisite: no Titan, no addon. The addon now
publishes a LibDataBroker data object instead, so any LDB display hosts it --
Titan through its own LDB bridge, Bazooka, ElvUI DataTexts -- with a LibDBIcon
minimap button for players running no bar at all. No code branches on which
display is hosting.
What moved off Titan:
* settings -- WeaponJourneyDB (new SavedVariables) replaces TitanGetVar,
with a one-time import of the player's existing Titan choices so nobody
has to reconfigure. ShowIcon/DisplayOnRightSide are retired: bar layout
is the host's business now.
* the right-click menu -- ours via Blizzard's MenuUtil, plus a minimap
toggle. Titan used to contribute the icon/right-side/hide entries.
* the button -- gone, along with TitanPanelComboTemplate and the
OnShow/OnHide event juggling. Our own frame holds the events permanently.
* Titan_Debug -- replaced by a local topic table of the same shape.
The minimap button defaults to hidden when Titan is present (every existing
player of this addon is a Titan user; a second launcher would be redundant)
and shown otherwise, so the addon can never end up invisible.
Offline suite: 116 assertions, 100% line and function coverage of both pure
modules. Deployed to Classic Era; in-game verification still owed.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com - refactor(engine): extract the pure display engine + offline tests [WJ-2]
The formatters were tangled with TitanGetVar, so the only way to check a colour
threshold or the icon name-folding was to look at the bar. WeaponJourneyEngine
now owns every formatting decision as plain functions over plain tables, and
Tests/ exercises them with a standalone Lua interpreter: 73 assertions,
100% line and function coverage (lua Tools/coverage.lua).
WeaponJourney.lua keeps only the client-facing wiring -- ScanSkillLines is now
the single place touching GetNumSkillLines/GetSkillLineInfo, and the settings
are read once and passed in as an options table.
Behaviour is unchanged: same strings, same colours, same toggles. Two latent
edges are now closed by construction -- a zero/absent skill cap no longer
divides by zero, and the tooltip footer is the caller's to supply rather than
hardcoded inside the formatter.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com - refactor(rename): TitanWeaponSkills -> WeaponJourney [WJ-1]
The addon is about to stop requiring Titan Panel, so the Titan-branded folder
name would misinform players about a prerequisite that no longer exists --
the same reasoning behind the TitanJourney -> GearJourney rename.
Folder/.toc/globals/StaticPopup key/Media texture path all move to
WeaponJourney. The repo keeps its name (CurseForge project 1309370 is tied to
it), so .pkgmeta package-as bridges the mismatch for the packaged build.
deploy.ps1 removes the old AddOns folder so the client cannot load a stale
second copy beside the new one.
Titan is still a hard dependency at this commit; that goes next.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
This mod has no additional files

