v0.1.24-forever
What's new
Changelog
v0.1.24 (11 October 2026)
The roster broker's rebuild and an officer's relay offers no longer spike a frame (#410; the owner's
/dgo perfafter #407: the broker at 10.8 ms, the relay's offer at 6.3 ms). The broker rebuilds its list over a few frames after each roster read, and sorts and redraws only while the roster is shown. An officer's relay offers one dataset a step, scanning and hashing a large one 8 KB a step (Relay:BuildJob,Ids.NewHasher,RelayLogic.NewDepthScan).tests/perf_spikes_spec.luanow plays an officer and covers both.Chat history and the chat copy box show each line in the game's chat colours, and copy plain text (#409; the owner, 11 October 2026: "color of the chat should follow, whispers pink, guild green, etc. same for the copy in chat as its consistent to read").
- Chat history: every line is drawn in its chat type's colour from the client's
ChatTypeInfo, so the player's own chat colours, in each channel view, All whispers (sent and received both pink, Battle.net cyan), a person's conversation and search results. A numbered channel (General, Trade, LookingForGroup…) takes its ownCHANNELncolour while joined, else the channel default. Names stay class-coloured inside the line; the time and our own labels stay muted; a line hidden during an encounter stays muted. A colour changed in the game's chat settings (UPDATE_CHAT_COLOR) redraws the page once. - Fallbacks: Blizzard's defaults (
Theme.chatTypeColors: whispersFF80FF, Battle.net00FAF6, guild40FF40, officer40C040, partyAAAAFF, raidFF7F00, raid warningFF4800, say white, yellFF4040, emoteFF8040, #328's system yellow, channelsFFC0C0…) whenChatTypeInfohas no readable r, g, b (absent, secret or out of range). - Readability: a colour is lifted toward white, keeping its hue, until it reads at 4.5:1 on the lightest background chat sits on (
Theme:ReadableChat,Theme.CHAT_BG); a colour that already reads is unchanged. Of the defaults only yell moves, by two steps. - Copy boxes: the chat window's copy box (#350) and Chat history's Copy show the lines in the same colours, in a read-only view, while the text Ctrl+C copies is plain: a WoW EditBox copies its raw text, colour codes and all, and addons cannot write the clipboard (
CopyToClipboardis restricted). The plain edit box keeps the focus with everything selected behind the coloured view, so Ctrl+C still copies at once; Copy plain text shows the plain text to select part of it, Show colours goes back.Widgets.CopyBoxtakeslinesfor this; boxes without it are unchanged. - Dev: "Chat colours" (Chat) previews every chat type in Chat history and opens the coloured copy box from Copy; "Copy chat"'s sample lines are coloured. Self-tests
chat.colours(what the client answers for each type, and what was lifted) andchat.copyplain(interactive).docs/verification/409-chat-colours.md.
- Chat history: every line is drawn in its chat type's colour from the client's
No GuildOps call spikes a frame after login, and the login's build is spread over frames (#402; the owner's
/dgo perfon 10 October 2026: single calls of 20 to 30 ms after login, a 294 ms login frame).- The size check walks the saved file a slice per tick, at most 1 ms (
Budget.NewWalker), not a whole section or 500 records at a time. - The roster: the read takes 50 rows a step over the frames after
GUILD_ROSTER_UPDATE's debounce, its write a step of its own; eachRosterUpdatedandRosterBrokerUpdatedlistener gets a step of its own (Events:EmitSpread); the guild member list and auto-invite read the roster a frame after the event, not in comms' frame. The guild activity log resolves names from an index (GuildActivityLogic.Resolver), and the welcome check folds each name once. - The login: the launcher, main window, settings page (a section a step), search palette and flares are built on the frames after PLAYER_LOGIN (
Events:Stage, 2 ms a frame, never in combat or a loading screen); anything opened first is built at once. /dgo perfnames one-shot and periodic jobs ("GuildActivity after ReadLog") and staged steps ("Shell stage Settings").- Tests: the mock's cost clock and
mock.frame, andtests/perf_spikes_spec.lua, a 500-member guild with full streams that holds every call after login under 5 ms.docs/verification/402-perf-spikes.mdhas the numbers and what the owner runs.
- The size check walks the saved file a slice per tick, at most 1 ms (
Chat history's Whispers open on All whispers, the full summary, and People starts there (#405; the owner, 10 October 2026: "so on the main tab, the whispers section should be all of them, and the full summary should sit at the top of people").
- The Whispers entry: the Channels view's Whispers entry,
/dgo chat whispersand/dgo chat peopleopen All whispers (#400), every whisper with everyone in one timeline, instead of the most recent person. - People's default: All whispers stays first in the People list and is selected whenever People opens (the People button, the Whispers entry, a slash command). Showing it marks every conversation read, and every person's row and the People button follow. A named person (
/dgo chat Jaina, a name clicked in the timeline) still opens that person. Reopening the window keeps what was on screen, and a person whose conversation is pruned gives way to the next person, never to All whispers, so nothing is marked read unseen. - Also: the composer's
compose.whisperself-test opens the most recent person, since All whispers whispers nobody;docs/verification/400-all-whispers.mdcovers the default.
- The Whispers entry: the Channels view's Whispers entry,
Earlier releases: https://github.com/Decades-Guild/decades-guildops-addon/blob/main/CHANGELOG.md
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include

