File Details
v0.10.0
- R
- Apr 28, 2026
- 157.04 KB
- 7
- 12.0.5+1
- Retail
File Name
cogworks-v0.10.0.zip
Supported Versions
- 12.0.5
- 12.0.1
Cogworks
v0.10.0 (2026-04-28)
Full Changelog Previous Releases
- chore(release): v0.10.0
Resolves #9, #10, #11, #13. Bumps lib.version 0.9.0 -> 0.10.0;
MINOR is already 12 from feature work since the v0.9.0 tag.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - docs: purge Ledger cog name; Tally is the ledger
The "Ledger" placeholder cog name was retired — Tally IS the ledger.
Updated every roster table, prose mention, and section heading
across the doc set:- README, CLAUDE.md, CHANGELOG: roster row + sibling enumerations
- AGENT_BRIEF: roster + reading order + decision tree, plus a
one-liner so future agents seeing "Ledger" in older notes know
to read it as Tally - SYNDICATOR_INTEGRATION: audience list, event-bridge consumer
reference, Phase 6b owned-list (TallyDB instead of LedgerDB),
closing pointer - PLAN: current-state table, Syndicator stance per cog, Phase 6b
heading, "Tally" section (was "Ledger cog (new)") absorbed
rebranded with name candidates dropped — name is chosen - launch/curseforge, wago, scope, discord_announcement: pitch
prose + roster tables - Items.lua comment: cross-cog example previously inverted
(FlipQueue ledger / Tally research) flipped to match the
actual ownership (FlipQueue auctions / Tally ledger)
The word "ledger" survives where it describes a feature/domain
that Tally owns (sales reconciliation, ledger snapshots, ledger
entries) — that's coherent now that Tally is the ledger cog.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- fix(gears): purge Ledger, retriangulate edges, drop ? overlay
Three things in one pass — they all touch the same applyState +
roster + cluster-positions block, so splitting would just mean
re-touching the same lines.- Purge Ledger: Tally IS the ledger. The placeholder Ledger
roster entry is gone; Tally's role line absorbs the net-worth /
sales-evaluation language. Comments mentioning "the planned
Ledger" updated to refer to Tally. - Retriangulate edges: Maxcraft and Tally now sit above the
core trio as triangle apexes (Maxcraft above the Tempo↔hub
mesh, Tally above the hub↔FlipQueue mesh) — a separate layer
from the core, conveying lower coupling. Cluster frame shrunk
to fit the new bounding box (180×120) and content shifted so it
centers around y=0. - Drop the ? overlay: the missing-glyph FontString did nothing
for the user that desaturation didn't already convey, and on
dimmed gears it was just noise. State is now signalled by
saturation + ring tint alone; the planned branch keeps a
slightly different tint for any future planned cogs.
Also tightened CW alpha: hub inner bumped 52→56 (ratio ~0.88) so
the cw-inner.tga's anti-aliased edge falls behind the gear teeth,
and SetVertexColor calls now pass explicit alpha=1.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
- Purge Ledger: Tally IS the ledger. The placeholder Ledger
- fix(gears): close inner-glyph-to-ring gap
First-pass inner sizes targeted the 32/53 minimap-button ratio
(~0.60). In-game CogBorder's central hole reads larger than the
tracking-border's hole, so the inner glyph floated short of the
ring leaving a visible donut of empty space — most noticeable on
the hub (64px ring), still visible on core (56px), and only barely
acceptable on edges (44px).
Bumped inner sizes to ~0.82 of the ring on every tier:
hub 64 → 52 (was 38)
core 56 → 46 (was 34)
edge 44 → 36 (was 26)
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - fix(gears): case-insensitive standalone-vs-embedded path detection
cogworks.toc is named lowercase, so WoW reports the standalone addon
name as "cogworks" at file load. libArtPath was comparing literal
== "Cogworks" and falling through to the embedded path
(...\Libs\Cogworks-1.0...), which doesn't exist when running
standalone — the gear assembly rendered with no chrome and no inner
glyphs (just the missing-glyph "?" overlays).
Comparison now uses :lower(), and the path interpolates the actual
caller name so the standalone addon folder is found regardless of
how the user installed it.
The COG-10 RegisterCogMinimapButton fix routes through libArtPath
too, so this also covers the (theoretical) case of a consumer cog
named with non-canonical capitalization.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - fix(gears): drop speculative Tally CurseForge URL
Tally has no CurseForge slug yet, so the placeholder
/wow/addons/tally would have routed clicks at the missing-gear
to a 404. Leave url unset; the OnClick path no-ops cleanly when
url is nil. Restore once Tally has a real listing.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - feat(gears): cluster + row layouts, minimap-style chrome, counter-rotation
The previous gear assembly drew round portrait icons on a brass disk in a
linear row connected by thin bars. That read as icons-on-a-stick rather
than a gear assembly. Reworks the widget so each node renders with the
suite's actual minimap chrome (CogBorder gear-tooth ring + per-cog inner
glyph) and adds two layouts:
* "cluster" (default) — Cogworks at center; FlipQueue and Tempo flank
the hub with teeth meshed; hub spins clockwise, the meshed pair
counter-rotates with the radius-ratio period match. Maxcraft, Tally,
and Ledger float at the edges (no mesh) — natural integration shape.
* "row" — linear arrangement with thin connectors; gears spin the same
direction. For tight horizontal space.
Per-cog reference inner-glyph TGAs move into Cogworks-1.0/Art/inner/ so
they ship with the external; the assembly now renders the suite faithfully
even when no consumer cogs are installed (saturation + "?"/"..." overlays
carry the install signal). Animation runs always — the cluster is a
visual of the suite, not a status indicator.
Tally added to SuiteRoster (its inner glyph was already in the v1 readability
set from COG-004; it's a real live cog and belongs in the cluster).
libArtPath helper centralizes the standalone/embedded path resolution; the
minimap-button gearBorderPath now goes through it. lib.loaderAddon captures
the loader's addonName at file load so library code can construct paths
without the caller passing one.
MINOR 11 → 12.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - feat(COG-9): suite-wide semantic icon registry
WoW's default fonts don't include the Unicode Geometric-Shapes block,
so widgets that want a chevron / check / × hit the missing-glyph box
problem and resolve it inline (Sections.lua's refreshArrow already did
this with friendslist atlas names). The registry hoists that lookup
into Cogworks: callers ask for an icon by semantic name and the lib
picks the known-working representation.
Public API:
cw:RegisterIcon(name, def) -- def.atlas = "..." OR def.path = "..." (+ l/r/t/b)
cw:ApplyIcon(texture, name) -- returns true on success, false on miss
cw:HasIcon(name)
Built-ins seeded: chevron-right, chevron-down (consumed by Sections).
More built-ins added as widgets surface gaps.
Sections.lua refreshArrow migrated as the first consumer / smoke test.
MINOR 10 → 11.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com - fix(COG-10): RegisterCogMinimapButton works in embedded layout
Two bugs from v0.6.0 (#10, dup #8) made the wrapper a no-op for any
consumer cog that embedded Cogworks via the .pkgmeta external — i.e.
every real adoption path. Tally hit both during gezmodean-wow/tally#3.
1. LDBIcon:SetButtonBorder only exists in LibDBIcon-1.0 ~v56+. The
suite's vendored copies are typically older (Tally is on v44), so
the call silently no-oped or errored.
2. The hard-coded path Interface\AddOns\Cogworks\Art\CogBorder only
resolves when the standalone Cogworks addon is installed — the
external pulls Cogworks-1.0/ into Libs/, not the top-level Art/.
Fix adopts Tally's verified overlay pattern: hide LibDBIcon's default
tracking-border texture and add a gear OVERLAY child on the button.
No SetButtonBorder dependency, so v44+ works.
CogBorder.tga moves into Cogworks-1.0/Art/ so it ships with the
external. Path is constructed from the caller's addonName, with a
special case for the standalone (where the layout has no Libs\ segment).
MINOR 9 → 10. No API surface change for callers.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com