promotional bannermobile promotional banner

Daseeki-Nexus

Cross-account dashboard for WoW Classic Era — world buffs, raid lockouts, attunements, gold, and instance lockout tracking for every character you own, synced live across accounts.
Back to Files

v1.1.11-classic

File nameDaseeki-Nexus-v1.1.11-classic.zip
Uploader
poonyxpoonyx
Uploaded
Aug 11, 2026
Downloads
7
Size
1.5 MB
Flavors
Classic
File ID
8626094
Type
R
Release
Supported game versions
  • 1.15.9
  • 1.15.8
  • 1.15.7

What's new

# Changelog

## 1.1.11 — 2026-08-11

- **Fixed: hovering a row in the Inventory tab now shows the item's own tooltip, and
  the character names under it are in their class colours again.** The hover was
  showing only the per-character breakdown, with the item tooltip hidden behind
  Shift — a modifier nobody was told about — and the names in that breakdown were
  drawn in a flat fallback ink instead of each character's class colour, with the
  "Other Accounts" divider missing the account icon the item tooltip puts there.
  It now reads exactly like hovering that item in your bags: the real item tooltip
  first, the *Total / who has it* block appended under it, class colours and the
  account divider included, and never the block twice. An item the client has not
  finished loading still answers with its name and the full breakdown rather than a
  blank tooltip, and fills itself in the moment the client answers — without you
  having to move the mouse.

- **Fixed: opening the Inventory tab for the first time no longer locks the game up.**
  The first click on Inventory folded every item on every character of every account
  into one table, asked the client for all ~1,600 item names at once, and then — the
  part that actually hurt — rebuilt and re-sorted the whole table *once per answer*
  as those names came back. Measured on a mesh the size of a well-played account,
  that was about 13 seconds of work arriving as a stutter over the seconds after the
  click, and it grew with the square of your item count.

  Now the table is built a slice at a time. The first rows are on screen almost
  immediately, the footer says *indexing 12 of 40 characters…* while the rest folds
  in behind them, and the counts only appear once they are real counts — a
  half-finished total is not a total, so it is not printed as one. Names are
  requested in small batches rather than all at once, and **the rows you are
  actually looking at are asked about first**, so what is on screen fills in while
  the rest trickles in behind it (scrolling pulls the next lot forward). Answers
  from the client are gathered up and repainted once instead of a thousand times.

  Two things that were slow every time, not just the first time, are fixed with it:
  the table is now kept between visits and only rebuilt when your stored data
  actually changes, so the second click is instant — and it no longer rebuilds
  itself on every world-buff tick while you have it open, which also means **it no
  longer jumps you back to the top of the list while you are scrolling**.

  The totals, the per-character breakdowns and the "still loading N names…" honesty
  are all unchanged: the sliced build is pinned against the old one-shot build row
  for row and character for character, so nothing about *what* the table says has
  moved — only how long it takes to say it.

- **Changed: profession cooldowns are named by what you make, with an icon.**
  The alchemy row said *Alchemy · shared cooldown*, which is accurate and tells you
  nothing. It now says **Transmute**, with the Arcanite Bar's icon beside it. Every
  cooldown row carries an icon now: Mooncloth keeps its own name and picks up its
  own spell's icon, and any cooldown added later gets a name and an icon without
  anyone having to wire one up. If the client has not loaded an icon yet the row
  shows a neutral one and fills it in when the answer arrives, rather than guessing.

  The Professions tab's "N ready" badge counts the same as before, and the login
  line still names the character and the profession — it prints one line for
  everyone who is ready, so it stays the summary it always was.

- **New: the shopping list can go looking for holiday recipes, if you ask it to.**
  Recipes whose only shop is a holiday vendor — the Winter Veil cooking recipes and
  their kin — were left off the shopping list all year round, on the grounds that
  you cannot walk up and buy them today. But the auction house does not keep a
  calendar: somebody bought one in December and it is sitting on the AH in June,
  which is exactly when people go looking.

  A new **Include event-vendor recipes** tick sits under the Professions detail
  pane's filters, next to "Missing only". Off by default, and with it off the
  shopping list is precisely the list it has always been — nothing moves unless you
  flip it. Turn it on and event recipes join the list wearing where they come from:
  *Event vendor — Feast of Winter Veil · Sold by Penney Copperpinch — Orgrimmar…*,
  with the event's real name from the shipped data (anything the data cannot name
  reads "seasonal", never a guess). The printed list says "including event items" in
  its header, so a list you scroll back to later still tells you which rule made it,
  and Auctionator gets the extra names too.

  Every other rule stands exactly as it was: a soulbound holiday recipe is still
  left off, one you can only get as a quest reward is still left off (nobody can
  post that), a recipe for a specialisation you did not take is still left off, and
  an item the client has not finished loading is still held rather than guessed at.
  The tick is remembered across sessions, and a settings file that comes back
  scrambled reads as "off" rather than quietly widening your list.

- **Fixed: a Weaponsmith is no longer told the Master smith recipes are not for him.**
  A blacksmith who had taken Weaponsmith saw every Master Swordsmith, Master
  Hammersmith and Master Axesmith recipe struck off his list as "requires another
  specialisation" — recipes he can still go and get, because the Master paths are
  taken *as* a Weaponsmith. His recipe census was short by every one of them, and
  the shopping list would not buy them for him.

  Specialisations are now read as the tree they actually are: you choose once per
  level. Armorsmith *or* Weaponsmith; then, as a Weaponsmith, Swordsmith *or*
  Hammersmith *or* Axesmith. A recipe is only unavailable when the character has
  chosen a different branch — an Armorsmith is still shut out of the whole
  Weaponsmith side, and a Master Swordsmith is still shut out of Axesmith recipes,
  but neither is ever shut out of something he can simply go and learn. A Master
  smith is also credited with the plain Weaponsmith recipes he already qualifies
  for, on the panel and on item tooltips alike. Gnomish and Goblin Engineering, and
  the three Leatherworking paths, are single-level choices and behave exactly as
  before.

  This is one rule in one place, so the recipe list, the "x of y known" census, the
  shopping list, who-can-craft and the Learnable line on a recipe tooltip cannot
  answer differently from each other — the item tooltip had its own copy of the old
  check and now reads the same rule as everything else.
- **Fixed: a very large mesh could offer auto-friend a different set of names each
  time it looked.** Auto-friend never considers more than 400 characters in one
  pass — a deliberate ceiling so a corrupt store cannot turn a login into an
  unbounded walk. But the collector filled those 400 slots in whatever order Lua
  happened to hand it the names, so once a mesh grew past 400 characters, *which*
  400 were candidates was luck of the draw: re-rolled on every pass, and different
  between two computers holding exactly the same data. Since an add becomes a
  permanent ledger entry, an alt could sit just outside the cut for sessions on end
  for no reason anyone could see. The collector now takes names in a fixed order, so
  the 400 it keeps are the same 400 every pass and on every computer. No effect
  below 400 characters, which is every mesh we know of; nothing stored changed.

- **Fixed: Mooncloth is on the cooldowns list even when nobody is on cooldown.**
  Mooncloth has its own four-day timer, but Nexus had no record of that fact — the
  only cooldown it knew about from the catalogue was alchemy's shared transmute
  timer. So a Mooncloth row could only appear once somebody had actually crafted it
  and the timer was still running, and it disappeared again the moment the last
  timer expired. The list went blank on exactly the day you were asking it "who can
  make Mooncloth today?".

  Mooncloth is now a fact in the shipped recipe data, so the row is there because
  the catalogue says the cooldown exists — and every tailor whose recipe list Nexus
  has read is named under it, ready or counting down, whether or not anyone has ever
  crafted it while Nexus was watching. Timers a character started before this update
  are carried over, not double-counted, and a character on an older version of Nexus
  still lands in the same row rather than a second one wearing the same name.

  **Not included, deliberately:** Refined Deeprock Salt. Its three-day cooldown
  belongs to *using* the Salt Shaker, not to a recipe in a profession window — no
  profession window ever reports it, so Nexus cannot read it and will not pretend
  to. (The Salt Shaker itself is an engineering craft with no cooldown at all.) The
  reasoning, with sources, is written down in `dev/COOLDOWN-FACTS.md`.

  Nothing was re-scanned for this: the recipe list itself did not change, so every
  character's stored recipe data stayed valid.

- **New: an Inventory tab — everything the mesh is holding, on one page.**
  A third tab beside Characters and Professions, listing every distinct item held
  anywhere across every character on every account Nexus knows about: one line per
  item, with the icon, the quality-coloured name, and the quantity summed across
  bags, bank and mail everywhere. Hovering a line breaks that number down by
  character — your own above the line, other accounts below it, class-coloured —
  using the exact same block the cross-account item tooltips already draw, so it
  reads the way you already expect. Hold Shift while hovering to get the game's own
  item tooltip instead.

  A search box filters by name as you type, and a CATEGORY chip filters by the
  client's own item classes — Weapon, Armor, Consumable, Trade Goods, and so on.
  The chip only ever offers categories that something in your list actually belongs
  to, and the two filters compose, so "cloth" inside Trade Goods finds exactly what
  you would think. The list opens sorted by name; clicking the QTY column header
  switches it to biggest-stack-first and clicking it again switches back. Both
  choices are remembered. The footer keeps the running totals and tells you how many
  characters are behind them and how stale the oldest of them is.

  **Cold item names are handled honestly, out loud.** The game hands addons item
  names, icons and categories asynchronously, and right after a login it often has
  not handed them over yet. An item Nexus has counts for but no name for is not
  hidden and is not guessed at: it shows as `item #12345` with a neutral icon and an
  ellipsis where its category goes, it still counts toward every total, and it fills
  itself in as the game answers. A name search cannot match it — nothing can match a
  name that does not exist yet — so instead of quietly reporting a miss, the page
  says how many names it is still waiting on, and stops saying so once it has waited
  long enough to know they are never coming. Category filtering leaves those items
  out of every named category (Nexus will not file an item under a class it was
  never told), and gives them their own `(unresolved)` bucket so you can always find
  them.

  Built to stay quick on a big mesh: only the rows actually on screen exist as
  frames, however many thousand items the list is long.

## 1.1.10 — 2026-08-11

- **Fixed: handing in a Zandalar Honor Token no longer costs you the repair at Rin'wosho.**
  The turn-in used to take the one conversation window and the repair had to wait for a
  second trip out to him. It now takes both on a single visit wherever the game allows
  it: the moment the flask is handed over and the game puts his conversation back on
  screen, that window is spent on the vendor — repaired, and closed again behind us. The
  turn-in still goes first and always will; a flask is never traded for a repair. The
  five-second guard that stops the repair being re-tried in a loop no longer counts the
  second half of one visit as a retry, which is what had been quietly eating it on any
  trip where you had repaired moments earlier.

  On a game build that does *not* put the conversation back after a turn-in, there is
  only ever one action to be had — so the turn-in takes it and the repair takes your next
  visit, exactly as before. Nexus does watch for the one thing that would let it have
  both anyway: whether closing a vendor window it opened returns you to the conversation.
  Only once it has actually *seen* that happen — on an ordinary repair visit, with no
  token in your bags and nothing at stake — will it start repairing first and handing in
  second, the way ShadowNetwork does. It will never do that on a guess.

  Also hardened underneath: if a client opens the vendor window instantly rather than
  after a round-trip, that window is still recognised as ours and still closed. Everything
  else is untouched — holding Shift still skips the whole lot, his other two quests are
  still never auto-progressed, and the reward priority, bag-space and gold rules are
  exactly as they were.

- **Fixed: Nexus no longer files a script error about an event called `LEARNED_SPELL_IN_TAB`.**
  The professions module asked the game to tell it about a signal this version of WoW does
  not have, and the game complained every time — once per login, over and over in your
  error log. The name is gone (the signal it was standing in for is already covered), event
  wiring now happens once and only once, and anything the game does refuse is recorded
  quietly and shown by `/dsn debug professions` instead of being thrown at you again.

- **New: `/dsn debug rinwosho`.** The ten most recent visits to Rin'wosho, each step with
  what was decided and why, and a one-line signature per visit saying whether the game
  handed the conversation back after the turn-in and after the vendor window. If a repair
  ever goes missing again, that paste says which behaviour your client has — from the save
  file, rather than from memory.

- **Fixed: the Darkmoon fortune cooldown could say a character was ready when the game
  disagreed — and could hold a cooldown on a parked alt forever.** Four things were wrong.
  *One:* releasing a chronoboon that gives you your fortune back starts a brand-new four
  hours, and so does stashing one away — the game says so out loud on release. Nexus only
  did that when it actually witnessed the cast, so a release during a loading screen, a
  disconnect, or a relog left the old countdown running; it finished early and the
  character showed as ready when Sayge would still refuse. Nexus now also watches the
  fortune itself move in and out of the boon, which it re-reads from the game every time
  it looks, so a cast it never saw is caught anyway. *Two:* a character parked offline for
  more than eight days now clears its cooldown no matter where it logged out — the hidden
  debuff does not survive from one faire to the next, and until now only a character that
  logged out in an inn was ever forgiven, so an alt parked in the open world sat on a
  cooldown that could never end. *Three:* the weekly server reset clears it too, asked of
  the game itself so it is right in every region. Both of these reach *every* character on
  your account through the same sweep that already handled the inn rule, so alts you have
  not touched in weeks come back ready on your next login. *Four:* if you log in already
  carrying a fortune and Nexus has no cooldown recorded for it, it now starts one — a
  fortune lasts two hours and its cooldown four, so a live fortune means a live cooldown.
  It will not do this when it was Nexus itself that cleared the cooldown recently (a
  cooldown pushed off your debuff bar, or one of the offline forgiveness rules), so a
  cooldown you genuinely escaped stays escaped across a reload. The inn rule, the eight-hour
  threshold, the debuff-bar push and its raid announcement are all unchanged, and every new
  clear and re-stamp is published to your other computers and to peers exactly like the old
  ones were.

## 1.1.9 — 2026-08-10

- **Fixed: opening a profession window could freeze the game with a script error.** On some
  clients the trade-skill window would not open at all — the game reported a stack overflow
  and the error window filled with Nexus and other addons' frames. The cause was ours: when
  Nexus clears the leftover filters a profession window opens with, this client announces
  each of those changes *while the change is still being made*, so our own "the window
  updated" handler ran in the middle of our own clear and started the clear again — and
  again, until the game ran out of room. The clear now holds a lock from its very first
  call to its last, so anything it hears back from the game while it works is recognised as
  its own voice and ignored, with a hard stop underneath in case some future combination
  finds another way in. The window opens, the filters clear, the scan runs, and the search
  and category controls work exactly as before. This holds no matter what other profession
  addons you have installed — they receive the same announcements and are free to do
  whatever they like with them.

## 1.1.8 — 2026-08-10

- Professions: the shopping-list verb moves to the detail pane's corner as Raid Prep's
  gavel icon; delegate designations now speak through blue level/census inks and a name
  asterisk instead of corner digits; and the cooldowns pane finally lists ready crafters
  on quiet days — ownership proven from recipe knowledge, readiness from the absence of a
  running stamp.

- **Professions — records now survive dataset updates.** Until now, any update to the
  shipped recipe dataset — even one that touched no recipe, like the spec-tree addition —
  reset every character's known-recipe records to "not checked" and sent you on a re-scan
  tour of your alts. Records are now keyed to the recipe set itself rather than the whole
  dataset: metadata-only updates invalidate nothing, and when the recipe set genuinely
  changes, existing records are translated recipe-by-recipe instead of discarded — what a
  character provably knew or was missing stays known or missing, and newly added recipes
  honestly show as "not checked" for characters whose last scan predates them, until their
  next window open trues them up. Works across the mesh too: peers on older versions keep
  their exact old behavior, and mixed-version data can never be misread.

- **Profession delegates (phase 1).** The professions grid now takes designations:
  right-click a character's profession cell to name them the faction's **primary** (or
  secondary) collector for that profession — scoped to specialisation lanes, so a main
  Armorsmith and a main Axesmith can both stand for Blacksmithing, each for their own
  recipes — and right-click a name to appoint the faction's **recipe bank**. The dataset
  learned the era truth that the three Master smith specialisations sit under Weaponsmith,
  and recipe resolution walks that tree: an Axesmith plan with no axesmith primary falls to
  the Weaponsmith primary, then to the general one; plain recipes belong to the general
  primary alone. Designations are intent — you can appoint a future Axesmith before
  they've specced, from the Plan submenu. Designated cells wear a quiet 1/2, the bank a B,
  and the whole config rides the mesh to every account (newest edit wins, from any of
  them). The payoff on tooltips: hover any recipe and if your faction's primary for that
  lane is proven to be missing it, one accent line says so first —
  `Primary missing: Poonyx (280/275)` — even when their skill isn't there yet, because
  collecting comes first. An unscanned primary stays honestly quiet. A future Conduit
  phase will route recipe mail with these same designations.

- Recipe tooltip lines now include the character you're playing, shown as "You" first in
  the Known/Learnable line (and the unscanned count says "characters", since that can be
  you too).

- **Shopping list for missing recipes.** The Professions detail pane grew Raid Prep's
  shopping-list verb: a **Shopping List** button beside the filter toggles (and
  `/nexus profs shoplist [character] [profession]`) prints a chat list of the selected
  character's missing recipes that can actually be bought on the auction house — teaching
  item link, required skill, and where it enters the world ("World drop", "Sold by
  Vendor — Zone · price", …), lowest skill first. Only genuinely tradable recipes make the
  list: trainer-only and quest-only recipes are out, so are BoP scrolls and anything your
  specialisation locks away; vendor-sold recipes are included but flagged, since the AH is
  the expensive way to buy those. An item the client hasn't loaded yet shows as
  *unresolved* rather than being guessed either way — run the list again a moment later.
  With Auctionator loaded at the auction house, the names also fill its Shopping tab,
  exactly like the Raid Prep gavel.

- **Professions tab** — Recipes in the detail list now show a real tooltip on hover (the
  craft tooltip, with teaching-item and dataset-fact fallbacks that never leave a blank),
  the list wears RECIPE | SKILL | SOURCE column headers, and recipes locked to a different
  specialisation than yours are no longer counted or shown as "missing" — they're greyed
  under Show unavailable with the spec named, and the known/total counts now mean
  "obtainable as your spec".

- **Professions tab** — The grid/detail split is now an even 50/50 (was 60/40): the detail
  and cooldown column gains width, and the character grid re-fits its columns to the
  narrower pane at every window size.

- **Professions tab** — The selected recipe's acquisition line now wraps to two lines, so
  the new zoned sources ("Sold by Fradd Swiftgear — Gnomeregan area") read in full instead
  of truncating; the recipe list gives up exactly one line's height for it. The character
  grid also gains the Characters view's filter chips — 60s, Online, and the Alliance/Horde
  toggle (no Summoners here) — filtering the grid only: cooldown readiness still shows
  every alt, and a filtered-out selection is kept, not lost.

- **Professions — collapsed headers can no longer shorten the truth.** A profession window
  opened with collapsed category headers used to be scannable as if the visible rows were
  the whole recipe list — the one narrowing the view guard couldn't witness. Header rows
  now report their expanded state through the same reads the scan already makes
  (boolean-and-coherent only; anything else is honestly "unreadable", never guessed). A
  witnessed-collapsed window full-scans by expanding everything, capturing the complete
  list, and restoring your exact collapse set — you won't see your categories move except
  on the rare full scan. In between, the cheap settled pass recognizes your collapsed view
  as expected rather than as drift, so there's no flicker and no rescan churn; cooldowns
  still publish off the rows you can see. Clients where the state can't be read fall back
  to expanding before each full scan and leaving the window expanded — visible in
  `/nexus debug professions` as the surface's "collapse world". A collapse that can't be
  expanded is a recorded, retryable refusal — never a shortened recipe list on the mesh.

- **Fixed** — Mesh account list: the Offline status marker rendered as a tofu box because
  the suite's default font (FiraSansCondensed-Medium) ships no glyph for U+25CB WHITE
  CIRCLE. Offline now uses the same round dot as You/Online in the existing grey ink, so
  status reads by color with one shape. Three Help/Setup hints spelling "1–2 digits" and
  "steps 2–4" with a mistyped double-low-line character (also absent from the font) now use
  a true en dash. A full audit of every non-ASCII character the addon displays was verified
  against the font's character map, and a new self-test permanently bans the four
  codepoints the font lacks from ever reappearing.

- **Professions pane polish.** The specialization marker and the recipe list's "known"
  marker are now glyphs the suite font actually carries (the old diamond and check mark
  rendered as colored boxes), with a self-test that fails if either tofu glyph ever returns.
  Vendor and quest acquisition lines now name the zone — "Sold by Dan Golthas — Badlands",
  "Quest: Goretusk Liver Pie — Westfall" — with multi-vendor recipes naming two then
  "+N more". The MATERIALS block left the recipe info pane (the reagent data and harvest
  stay), and the recipe list gained four more visible rows from the freed space. Fishing,
  Herbalism and Skinning — professions with no craft window and no recipes — no longer get
  a detail tab, never say "not checked" or ask you to open them, and a remembered tab that
  no longer qualifies falls back to the character's first real profession (Mining keeps its
  tab: Smelting is a window). Secondary cells for professions a character never learned now
  show a quiet "--" instead of sitting empty.

- **Professions: fixed gathering professions being invisible to the presence probe.**
  Detection relied solely on IsSpellKnown over the rank-tier spells, which Herbalism (and by
  construction Mining) never answers — Orn's Herbalism 300 showed neither presence nor
  level. The skill panel is now a second, additive presence witness: a panel row matched
  through the client's own spell names marks the profession present, with its tier from a
  strict ceiling map and an unexpected ceiling degrading to the tier the rank value proves
  rather than a silent apprentice. The spell probe remains authoritative where it answers,
  an unwitnessed or partially-read panel can add but never erase, and the wire shape is
  unchanged.

- **Professions: profession windows no longer lag on open.** The capture layer now scans a
  profession once and then merely *verifies* it: after a complete scan, window opens and
  crafting sprees are answered by a cheap settled-signature check (row count, per-row names,
  skill rank — no link reads, no spell lookups, no re-harvest) instead of re-running the
  full 176-row resolve on every event. A learned recipe, a rank-up, or any drift the
  signature can see forces a real rescan automatically; consumed cooldowns still publish
  instantly off the cheap pass. The one-time expensive work now persists where it belongs —
  reagent harvests once per dataset, the filter bar's measured client conventions once per
  client build — and the reagent harvest is spread across frames so even the first open
  doesn't hitch. A new Rescan button on the profession window's filter bar (and
  `/nexus profs rescan`) forces the full capture, re-harvest and re-measure on demand.

- **Professions tab, reworked into three permanent panes.** The character grid takes the
  left ~60% with a CHARACTER | PRIMARY | PRIMARY | COOKING | FIRST AID | FISHING header —
  the Poisons column is gone from the grid (the data is still captured and shows on the
  rogue's detail tab). Skill levels print just the current level, green at the Era cap of
  300 and yellow on the way there, with the per-rank cap in the cell tooltip. Clicking a
  character selects them, and the new top-right detail pane shows their professions as
  tabs — secondaries and a rogue's Poisons included — with the full recipe census (filters,
  known/missing, source, materials) that used to live behind the drill-in, which is
  retired. The bottom-right cooldowns pane now shows one row per cooldown kind (Mooncloth,
  transmutes, and whatever else the store has seen) naming the class-colored characters
  ready to craft it right now — characters still on cooldown simply aren't listed. Under
  the hood, every column and pane now derives from the real pane size at render time, which
  fixes the live defect where the FISHING/POISONS columns could escape the grid pane; the
  self-tests now prove the fit at multiple window widths instead of one.

- **Fixed:** **opening a profession window now actually records what is in it.** Every
  profession was reading "not checked" no matter how many times you opened its window. The
  window announces itself before the server has sent the recipe list, so Nexus's first look
  found an empty list — and a one-second "don't re-scan the same thing twice" guard was being
  armed by that failed look, which meant the update that finally *carried* the recipes was
  waved away as a repeat. Nothing ever asked again. The guard now only counts a scan that
  actually read something, and a window that refuses gets asked again on a short, finite
  ladder that stops the moment it succeeds or you close the window. The reagent list Nexus
  builds from the same window comes back with it.

  With the timing untangled, the window then confessed the second half of the story: on this
  game client the question Nexus was asking each recipe row — the link that names the recipe
  itself — comes back **empty for every row of a crafting window**, even though the function
  exists and the row is really there. (Measured on a live blacksmithing window: 176 rows read,
  0 identified, every scan honestly refused.) Enchanting answers it fine; it is the crafting
  surface that does not. So identifying a row is now a short chain of attempts instead of one
  question: the recipe link is still asked first, in both the forms this client family has
  been seen to use, and when it comes back empty the row's own name is matched against the
  game's names for the recipes in Nexus's catalogue — the game's own words in your language,
  never a shipped translation. Two recipes sharing one name are only told apart by a fact
  Nexus has measured (which item each one crafts, learned from an earlier look at the same
  window); a row nothing can identify still counts as a miss, and one miss still refuses the
  whole scan rather than writing a shortened list. Nothing about the honesty rules changed —
  the same window that used to refuse forever now actually reads, and it still never guesses.

- **Added:** when a profession scan is refused because rows would not identify, the scan
  trace (`/nexus debug professions`) now keeps the **raw evidence of one missed row** — the
  row's name and exactly what the recipe-link and item-link questions answered, "nil"
  included — and every successful scan records **which method identified its rows**
  (`res=recipe-link`, `res=name`, …). The live diagnosis above took a hand-typed `/run` at
  an open window to see those answers; the next drift will be on screen already.

- **Fixed:** **the search box and the category picker on the profession window.** Typing did
  nothing and picking a category did not narrow the list. Two causes, both now handled
  honestly. Setting one of the game's own list filters changes what the game *counts* but does
  not repaint the window, so Nexus now asks the game to redraw. And the category and slot
  filters take arguments whose meaning is not written down anywhere for this client version —
  the previous build guessed, and guessed wrong. Nexus no longer guesses: it tries the
  possibilities, watches what each one does to the game's own recipe count, and keeps the one
  that actually works. If nothing works on your client, the control says so and stands down
  instead of sitting there pretending.

- **Fixed:** clearing the filters when a profession window opens can no longer narrow it by
  accident. The clear is now measured the same way — a call that leaves *fewer* recipes
  visible is rejected on the spot — so an unverifiable "show everything" argument can never
  again quietly empty the window that the recipe scan is about to read.

- **Fixed:** the game's own **"only show recipes that give a skill-up"** box is now noticed.
  It hides most of a maxed character's list, and Nexus was reading the short list as the
  whole truth. It is cleared when a profession window opens, like every other leftover
  filter, and while it is on Nexus records nothing rather than recording less.

- **Added:** `/nexus debug professions` now explains itself. Under each profession it prints
  how many times the window scan has been tried, when, and why the last one was refused —
  the list was empty, a filter was engaged, a row would not resolve, the throttle held it —
  plus a short rolling trace of the last thirty attempts that survives a reload and is stamped
  with the build that wrote it. `/nexus debug proffilters` reports which filter argument forms
  this client turned out to honour, whether the two interfere, and whether the game's own
  redraw function was found. If a scan ever goes missing again, the answer is on screen
  instead of one build away.

- **Added:** **the Professions tab — the half you can actually look at.** Nexus has a second
  page now, next to Characters in the title bar, and it opens on a grid: one row per
  character in the same order your cards are in, with each profession's icon, skill, its
  specialisation mark, and its cooldown right there in the cell. Beside it, every profession
  cooldown you own, across every character on every account, ready ones first and then
  whichever comes back soonest — so "what can I make today" is answered before you have
  clicked anything. The tab label carries the ready count as a small number, and once per
  login Nexus says the same thing in one quiet line of chat. No popup, no sound, and a
  checkbox in settings if you would rather it said nothing at all.

  **Click any profession cell** and the tab becomes that character's workbench: their
  professions down the left, that profession's whole recipe list on the right. Recipes you
  already know are ticked; the ones you are missing say where to get them — which trainer,
  which vendor and in which zone, which drop, which quest, which reputation. You can search
  the list, filter it to one kind of source, show only what is missing, and the handful of
  recipes that are not obtainable right now (the holiday ones) are hidden until you ask for
  them, and then greyed with the reason. **Pick a recipe you know** and Nexus adds up the
  materials against your bags: *8 / 10 Runecloth*, and beside it the alt who is sitting on
  200 of it. That last part is the whole reason both halves of this exist.

  **And there is a search box at the top of the tab: type an item and Nexus tells you who
  can make it** — who already knows the recipe, and who could learn it today because they
  have the profession and the skill for it.

- **Added:** three things this view will never do, because they were the point of building
  it carefully. It will not tell you a character is *missing* recipes on a profession whose
  window you have never opened — that profession reads **"not checked"**, with a dashed
  count and a dimmed icon, and it is left out of the missing-only list and counted separately
  in the who-can-craft search rather than quietly filed under "cannot". It will not report a
  material count of zero for a character whose bags it has never seen; that reads "?". And it
  will not invent a recipe name while your client is still loading — it says how many names
  it is waiting on, fills them in as they arrive, and then stops talking about loading.

- **Added:** an **"Announce ready profession cooldowns at login"** switch in Nexus settings,
  under the professions module and ticked by default. Untick it and the login line stops; the
  count on the tab stays. Turning the professions module itself off removes the tab entirely
  rather than leaving one that opens an empty page.

- **Added:** `/nexus debug professionsui` — what the view is showing, the cooldown rollup as
  text, and how many never-scanned professions are in the grid.

- **Added:** **Nexus has started keeping track of your professions.** This is the first half
  of the profession tracker — the half that quietly gathers the facts. There is no new tab to
  look at yet; that arrives next. What happens now is that every time you open a profession
  window on any character, Nexus writes down what that character can make, how far along the
  skill is, which specialisation they picked, and when their profession cooldowns come back
  up — Mooncloth, Cured Rugged Hide, the Salt Shaker, the transmutes — and shares it with your
  other accounts the same way it already shares gold and bags. It also notes what each recipe
  costs in materials while the window is open, because that is the only place the game will
  tell anyone. **To seed a character, open each of its profession windows once.** Gathering
  professions and skill levels are picked up on their own with nothing to open.

  Two things it deliberately will not do. It will never tell you an alt "knows nothing" just
  because you have not opened that alt's window yet — an unvisited profession reads as *not
  yet checked*, which is a different thing, and the coming views will say so in those words.
  And what goes over the mesh is tiny: your whole recipe list travels as about a hundred
  characters, at the lowest priority Nexus has, so it can never be the reason a pull timer or
  a buff warning waited. A cooldown you just used is the one exception — that goes out
  straight away, because "can I transmute today" is the question the feature exists to answer.

- **Added:** a **Cross-account professions** switch in Nexus settings, ticked by default.
  Unticking it is a real off: no window watching, no data gathered, no recipe database held in
  memory, and nothing new written to your saved data. Anything already collected is kept, so
  ticking it back on picks up where it left off.

- **Added:** `/nexus debug professions` — what the module has captured this session, which
  characters it holds records for, and the dataset it is working from.

- **Added:** **recipe items now tell you which of your characters wants them.** Hover a plan,
  pattern, formula, schematic or recipe — in your bags, at a vendor, on an auction house
  listing, on a link somebody posted in chat — and Nexus adds two quiet lines underneath:

      Known: Poonyx, Zug
      Learnable: Puucons (285/275)

  *Known* is the characters who already have it. *Learnable* is the characters who do not,
  have the profession, are high enough skill, and hold the right specialisation if the recipe
  needs one — with their current skill and the recipe's requirement, so you can see how close
  the rest are. Your own character is left out on purpose: the game's own tooltip already
  tells you whether *you* know it.

  There is a third line you will sometimes see — `(2 alts unscanned)` — and it is the most
  important one. It means exactly two of your characters have that profession and Nexus has
  never been allowed to look at their recipe list, so it has no idea and refuses to guess.
  It will never quietly file an unvisited character under "already knows it", which is the one
  mistake that would hide the very alt you opened the tooltip to find. Open that character's
  profession window once and the line goes away for good.

- **Added:** **search and filter controls on the game's own profession windows.** Open any
  profession and a slim Nexus bar sits above the window with a search box, a **Have
  Materials** tick, a category picker and an equipment-slot picker. Type "arcanite" and the
  list is just the arcanite recipes; tick Have Materials and it is just what you can make
  right now; the pickers narrow it by category or by which slot the result goes in. **Clear**
  puts everything back. The enchanting window gets the tick and the slot picker — the game
  gives nobody a way to search enchants by name, and we would rather leave a control out than
  fake one. Filters clear themselves whenever the window closes, and whenever the window
  switches to a different profession.

  Nexus does not redraw the recipe list to do any of this — it asks the game to filter its own
  list, which is why the scrollbar, the row colours, your collapsed categories and your
  selected recipe all keep behaving exactly as they always have.

- **Fixed:** **a filtered recipe list can no longer shrink what Nexus has recorded about a
  character.** When the game filters a profession window, it genuinely hands out a shorter
  list — and Nexus reads that same list to learn what you can make. Left alone, searching for
  "iron" while the window was open would have recorded that character as knowing four
  recipes. Now a filtered window is simply not read from at all: whatever was last proven
  stands untouched, and the full list is re-read the moment the filters come off, when the
  window opens, and when you close them with **Clear**. That applies to a filter you left
  behind in the game window too, not just to the Nexus bar.

- **Added:** `/nexus debug proffilters` — whether the bar is up, which controls this client
  can offer, and whether the open window is currently narrowing what Nexus is allowed to
  read. `/nexus debug tooltips` grew a matching line for the recipe lines.

- **Note for the transition:** if **MissingTradeSkillsList** or **ClassicProfessionFilter**
  are still installed, Nexus stands its own version down — the recipe lines for the first, the
  filter bar for the second — and says so once, so you never get two of anything on one
  window. Uninstall them and the Nexus versions appear on the next login.

## 1.1.7 — 2026-08-10

- **Fixed:** **Sayge no longer gives you the wrong fortune.** This is the one that cost two
  characters their Darkmoon Faire buff on the same weekend — ask for one thing, watch Sayge
  hand you another, wait out the four-hour cooldown, and it wasn't the answer maps that were
  wrong. When Sayge presents his choices, the game hands Nexus a *list*, and Nexus assumed
  that list was in the same order you see on screen. It is not guaranteed to be: each choice
  carries its own little "I am displayed at position so-and-so" tag, and the list itself
  arrives in whatever order the game's database felt like serving it. So "click the first
  option" clicked whatever happened to be first in the list — sometimes the right answer,
  sometimes somebody else's fortune. Nexus now puts the choices into the order you actually
  see before it counts anything, on every page, and clicks the choice by its own identity
  rather than its position in the raw list. The same correction is applied everywhere Nexus
  picks a gossip option by position — the Dire Maul tribute guards and the Blackwing Lair orb
  included — because they all read the same list the same way. And if the game ever serves a
  page *without* saying what order it is displayed in, Nexus refuses to answer and tells you
  to pick by hand: one manual click beats four lost hours.
- **Changed:** **the Damage answer takes the scenic route now, on purpose.** Damage happened
  to be the first answer on every page, so the old flow blind-fired "first option" a hundred
  times in five seconds to blast through Sayge's pages without waiting. That blind fire is
  exactly what the bug above turned into wrong buffs, so it is gone entirely: Damage now
  answers page by page like every other fortune — two or three clicks with a server reply
  between each, a couple of seconds slower and aimed every time. Nexus also keeps track of
  *where it is* in Sayge's script now: the four-answer page must come before the three-answer
  page, and a page arriving out of order — or a shape Sayge has never shown before — is
  refused rather than guessed at. Walking away mid-fortune, closing his window, or zoning out
  cleanly abandons the attempt instead of leaving a half-answered fortune armed.
- **Added:** **Sayge visits are recorded, so the next oddity is a report instead of a
  mystery.** The wrong-buff incident was diagnosed from memory, because nothing wrote down
  what Sayge showed or what Nexus clicked. Now every visit keeps a short record — each page
  he presented, every option's position, display tag, identity and text, what was clicked or
  refused and why, which buff was wanted, on which class, under which addon version. The last
  ten visits are kept, and `/dsn debug sayge` prints them. If Sayge ever surprises us again,
  the receipt is already in hand.

## 1.1.6 — 2026-08-08

- **Added:** **Rin'wosho repairs your gear again.** Nexus has always been able to auto-repair,
  but only on a vendor window *you* opened — walk up to Rin'wosho the Trader in Zul'Gurub,
  hand in your Honor Token, and the repair half simply never happened, because nothing ever
  opened his shop. It does now. On a visit where there is no turn-in waiting — no token in
  your bags, nothing he is offering that Nexus handles, or the Zanza automation switched off —
  and something you are wearing is damaged, Nexus picks his "browse your goods" line itself,
  repairs everything from your own gold, tells you what it cost, and closes the shop again.
  A turn-in always wins the visit: if you are holding a token, the token goes in and the
  repair waits for the next time you talk to him. Holding **Shift** skips the whole thing, as
  it always has. Nexus only ever closes a shop window it opened itself — a vendor pane *you*
  opened is still yours to close, at Rin'wosho or anywhere else. Needs "Auto-repair" ticked
  in Automations — see the next entry, it now starts ticked.

- **Changed:** **auto-repair now ships on — untick it if you'd rather pay attention to your
  own durability.** "Auto-repair at vendors" used to start switched off, because it spends
  your gold and that felt like something to opt into. It now starts on, so opening any
  vendor's window repairs your gear from your own purse and prints what it cost. If you had
  never touched that checkbox, it switches itself on once when you next log in; if you had
  ever ticked or unticked it yourself, your setting is left exactly as you left it and
  nothing changes. Holding **Shift** still skips it, and unticking it in Automations is
  final — Nexus will not turn it back on a second time.

- **Fixed:** **visiting your mailbox no longer wipes the mail out of your inventory.**
  Nexus keeps a note of what is sitting in each character's mailbox, because the mailbox is
  only readable when you are standing at one — that note is how an item in the mail still
  shows up when you search your alts. The trouble was that Nexus also took a reading at the
  moment the mailbox *closed*, when the game has already stopped answering questions about
  it. The answer it got back was "nothing in there", and Nexus wrote that down as fact and
  sent it to your other accounts. So every single mailbox visit ended by deleting the mail
  half of that character's inventory. Nexus now knows the difference between an inbox that
  says "empty" and one that is not talking to it: it only records an emptying while the
  mailbox is genuinely open and has actually answered. Taking everything out of your mail
  is still recorded the instant you do it — that is a real change, and it always lands.
- **Fixed:** **zoning into a dungeon no longer records you as "Level 0" in your own run.**
  Nexus already refused to write down a groupmate whose character had not finished loading,
  because a level of 0 is the game saying "not loaded yet" rather than a real level. It was
  applying that rule to everyone except you. Walk through a portal and Nexus could take the
  group photograph before your own character had finished arriving, and your name went into
  that run's roster at level 0 with no class colour. It usually corrected itself within a
  few seconds, but a short run could close with it still there. You are now held to the same
  standard as everyone else in the group: your row is written when it is real, not before.
- **Fixed:** **other characters on your account are found sooner after login.** Nexus
  discovers your other accounts by looking at who else is on its private channel, and it
  does that sweep at most once a minute so it can never spam anyone. The bug was that a
  sweep which did nothing at all — because the channel had not finished connecting, or
  because the server had not yet sent the member list — still counted as that minute's
  sweep. On a slow login that meant a full minute of silence before Nexus looked again, and
  on a short session or a quick reload that was the whole window. Only a sweep that actually
  read the channel now counts, and the moment the server delivers the member list Nexus
  looks straight away instead of waiting.
- **Fixed:** **logging out no longer turns your character into a classless "Level 0" on
  every roster.** Nexus takes one last photograph of your character as you log out or zone,
  and that photograph is both what gets saved to disk and what gets sent to your other
  accounts. The problem is that the game has already started packing up by then: asked for
  your level it answers 0, asked for your class it answers nothing, and asked for your
  faction it answers nothing — and Nexus wrote all three down as if they were facts. So the
  last thing every session recorded, and broadcast, was a level-0 character with no class
  colour and no faction, and that is what you and everyone else saw on the next login until
  the character logged in again and fixed itself. The same shutdown reading was also
  emptying a warlock's soul shards ("0" in red on every card, even holding a full bag),
  reporting a warlock with a soulstone in their bags as having none, and quietly deleting
  the countdown on a PvP flag. Nexus now refuses to write any of it: a reading taken while
  the game is shutting down or still loading is treated as *no answer*, and no answer never
  overwrites what is already known. A genuine change — a level-up, spending your last shard,
  a flag that really drops — still records instantly, exactly as before. This one had already
  been fixed for XP and rested; it is now fixed for everything beside it.
- **Fixed:** **a raid lockout you earn during a session now shows up without relogging.**
  This was the big one. Nexus asked the server for your saved-raid list exactly once, at
  login, and then waited to be told when it changed — but nothing ever asked again, so the
  server never had a reason to say anything. Kill Lucifron after logging in and your Molten
  Core row stayed on "not saved" for the rest of the session, on your own roster and on every
  other account's, and the thirty-second background refresh could not help because it was
  re-reading the same unchanged list. Nexus now asks again at the moments that can actually
  change a lockout: when a boss dies, when the instance tells you its reset timer, and when
  you cross in or out of an instance — plus a quiet re-check every minute while you are
  standing in a raid, in case a kill goes unannounced. Your lockouts now appear on other
  accounts' rosters within seconds of earning them. If you want to watch it work,
  `/nexus debug lockouts` shows what was asked, what answered, and what is currently held.
- **Fixed:** **an unanswered server can no longer wipe the lockouts Nexus already knows about.**
  The list of saved raids reads as *empty* both when you are genuinely saved to nothing and
  when the server simply has not answered yet — and now that Nexus asks far more often, the
  second case comes up far more often too. An empty list is only treated as an answer once the
  server has actually spoken; before that, whatever Nexus already holds stands. A real reset
  still clears the row exactly as before.
- **Fixed:** **a party member who was still loading no longer gets recorded at level 0.**
  The group for a dungeon or raid run was photographed the instant you finished zoning in,
  which is the one moment the game has not finished loading everybody yet — so a member could
  be written into that run's roster with no level and no class colour, and if nobody joined or
  left for the rest of the run there was never a second photograph to correct it. A reading
  that has not loaded yet is no longer treated as a fact: Nexus waits, re-checks a few times
  over the following seconds, and also re-checks whenever a group member's level arrives.
  Members already recorded are untouched, and old run history is unaffected.
- **Fixed:** **a run no longer reports costing you every copper you owned.** The gold figure
  for a run is the difference between your purse on the way in and on the way out, and the
  reading on the way out is taken during a loading screen, where your purse can briefly read
  as zero. Walk out of Molten Core with 500 gold and the run could be recorded as having cost
  you 500 gold. Nexus now follows your purse as it changes and refuses to record a difference
  built on a reading it cannot trust — the loot total, which was always the honest number,
  carries the run instead.
- **Fixed:** **Battle.net friends now register even if Battle.net connects after you log in.**
  Nexus read your Battle.net friends' characters once at login and then only when one of them
  changed something. If Battle.net had not finished connecting yet — common — the list came
  back empty and nothing ever went back for it, so for that whole session an invite from a
  Battle.net friend's character was treated as coming from a stranger. Nexus now notices the
  connection arriving and re-reads then, and the login retry sequence covers Battle.net as
  well as your guild.
- **Fixed:** **a warlock's soulstone status and your current sub-zone update promptly again.**
  Two small ones with the same cause. When a Create Soulstone cooldown finished, nothing told
  Nexus, so other accounts could show the stone as unavailable for up to half a minute after
  it was ready. And moving between sub-zones without changing zone — walking into the
  Crossroads inn — did not refresh your location for the same reason. Both now update as soon
  as they happen instead of waiting for the background refresh.
- **Fixed:** **the one character that would not sync now goes to the front of the queue.**
  When your accounts were fully caught up except for a single character, Nexus already knew
  how to ask for just that one — but it had no idea which order to send the answers in, so the
  reply it built was shuffled fresh every time. Nexus only sends about one message a second,
  so position in that queue is the whole wait: the character you were actually missing could
  sit near the back, and if the exchange was interrupted — a relog, a dropped message, or
  simply the next round starting before the last one finished — the reshuffle put it somewhere
  else entirely. A character could stay stale for hours that way while everything around it
  updated fine. Answers are now ordered by who needs what most: characters the other account
  holds **nothing** for go first, then the ones it is furthest behind on. In the common case —
  one character out of date — that character is now the very first thing sent.
- **Fixed:** **duplicate world-buff announcements to your guild.** When two of your accounts
  both decided they were the one who should relay a buff timer, each was supposed to notice the
  other's copy and stand down. The check compared the two messages by their compressed contents,
  which — for reasons invisible from the outside — could differ between two machines holding
  *identical* timers. So the check never matched and the stand-down never happened: your guild
  got the same announcement twice. The comparison now looks at what the message actually says
  rather than how it happened to be packed, so the second copy is dropped as intended.
- **Fixed:** **an account that appeared online and offline at the same time.** If Nexus had
  ended up with two entries for one character, going offline correctly marked both — but coming
  back only ever revived one of them, and which one changed from session to session. The result
  was a status light that flickered between online and offline for no visible reason. Returning
  from offline now revives every entry, matching what going offline already did.
- **Changed:** **the order Nexus sends things in is now fixed instead of arbitrary.** Settings
  pushes, blacklist syncs, timer requests, the "Sync now" button and the login publish all used
  to visit your accounts in whatever order happened to come up, which meant that when something
  had to be skipped — a rate limit, a busy queue — *which* account got skipped was a coin flip
  that landed differently every session. All of them now follow one consistent order. Nothing
  about the messages themselves changed and no update is required: an account still on 1.1.5 or
  older talks to an updated one exactly as before, because this only affects the order a sender
  chooses, never what a receiver reads.
- **Fixed:** **a character that exists under two of your account IDs now shows the same copy
  everywhere.** If an account was ever re-set up under a new ID, Nexus can end up holding two
  stored copies of one character. Three places on the dashboard each picked one of those copies
  independently and each picked arbitrarily — so the roster card could show today's data, the
  detail pane you opened by clicking that very card could show a copy from two weeks ago, and
  the rest/XP meter beside it a third — and which one you got changed between sessions. All
  three now ask the same question and get the same answer: the copy the owning account stamped
  most recently. Nothing is deleted; only which copy is *displayed* was ever at stake.
- **Fixed:** **an imported instance run no longer changes which account it belongs to.** Runs
  imported from NovaInstanceTracker are matched to whichever of your accounts owns that
  character — and when a character existed under two account IDs, the match was decided
  arbitrarily and could land differently on a later import, moving the run (and the hourly
  instance count it contributes to) from one account to the other. The owner is now decided by
  a fixed rule, so a re-import attributes every run exactly where the first one did.
- **Fixed:** **the Herald of Thrall can no longer be mistaken for Thrall himself.** When a
  world-buff announcer's name arrives with anything extra attached to it, Nexus matches it
  against the names it knows — and "Thrall" is contained inside "Herald of Thrall", so both
  matched and the winner was arbitrary. The two are not interchangeable: they raise different
  Barrens timers, and the wrong one goes out to everyone on the mesh. The most specific name
  now wins, always.
- **Fixed:** **a very large guild or friends list no longer rewrites your saved data on every
  update.** Nexus keeps up to 800 names in the trust list used for invites and summons. Past
  that number it kept an arbitrary 800, freshly re-drawn each time — so the check that asks
  "has anything actually changed?" always answered yes, and every friend logging on or off
  rewrote the file for nothing. The same 800 are kept every time now, so an unchanged list is
  correctly recognised as unchanged. (Below 800 nothing was ever wrong.)
- **Fixed:** **a very large auto-friend history no longer judges a different slice of itself
  each session.** The auto-friend ledger stops looking after 800 entries, and *which* 800 was
  arbitrary — which matters because the decision made there is permanent: an entry that has
  used up its attempts is marked as never-to-retry. Above that size the same ledger could
  sentence a different portion of itself on each login, and an entry could go permanently
  unexamined. It now always works through the same 800.
- **Changed:** **`/nexus debug instances` prints in a stable order.** Accounts come out in
  account-ID order and characters alphabetically, so two runs of it — or the same command on
  two accounts — can actually be compared line for line. Output content is unchanged.

## 1.1.5 — 2026-08-07

- **Fixed:** **an account's own data can no longer lose to a stale copy of itself.** If Nexus
  had somehow stored a damaged record for one of your other accounts' characters — a wiped
  boon list, a half-captured login snapshot — and that record happened to carry a *newer*
  timestamp, the real account's own data was thrown away every time it arrived, forever. The
  only way out was to hover the character and force a re-read. Bulk data that comes **from the
  account that owns it** now overrides what we hold, whatever the timestamps say. Everything
  else is unchanged: a character of *your* account is still never overwritten from the network
  no matter who sends it, and data relayed by a third account still has to win on timestamp
  the way it always did — an account can only claim ownership of characters it actually owns,
  and the claim is checked against who really sent the message.
- **Fixed:** **two fully-synced accounts stopped quietly re-asking each other for data they
  already had.** A Nexus that merely *caches* another suite addon's shared data (say, an
  account without Bags installed holding everyone's Bags data) never advertised it, so its peer
  read "we disagree" on every heartbeat and both sides re-negotiated every two minutes, forever,
  for nothing. Each side now advertises everything it actually holds, so a converged mesh goes
  quiet. First-contact syncing is untouched: a peer that has never seen a namespace still pulls
  the whole thing.
- **Added:** **you can now see how long another account's Darkmoon fortune cooldown has left.**
  Nexus knew whether a character of yours on another account was waiting on Sayge — it just
  could not tell you *how long*, so every one of them read a flat "On CD" until it wasn't. The
  remaining time now travels with the rest of the character's data and the cooldown row shows a
  real countdown, in the same place and the same style as the hearthstone and chronoboon rows
  right beside it. It keeps ticking between updates instead of sitting frozen, and it holds
  still while the character is offline or has the fortune stashed in a chronoboon — because in
  both of those cases the game isn't running the cooldown either. A character on an older
  version of Nexus still shows the plain "On CD" it always did.
- **Changed:** **the character-data format moves to version 3** to carry that countdown.
  Everything else on the wire is byte-for-byte where it was, so nothing else about your data
  changes and nothing needs converting. **Update every machine you run Nexus on.** A copy still
  on 1.1.4 or older will not read character updates from a copy on 1.1.5 until you update it —
  it keeps its last-known data and its own updates still reach you, so it goes quiet in one
  direction rather than breaking. If all your accounts share one AddOns folder they all update
  together and you will never see this.
- **Fixed:** **an account's own live updates can no longer lose to a stale copy of themselves.**
  The same repair as the bulk-data fix above, now applied to the moment-to-moment updates too:
  when the account that owns a character sends its own update directly, it is trusted over
  whatever we are holding, whatever the timestamps say. An update *forwarded* by a third
  account still has to win on timestamp — anyone in the middle could have changed it — and a
  character of your own account is still never overwritten from the network.
- **Changed:** `/nexus debug mesh` gains an **owner-relay** line (claims received, stale records
  repaired, claims that failed the sender check).

## 1.1.4 — 2026-08-05

- **Changed:** **the buff automations now ship switched ON.** Dire Maul tribute, the BWL Orb of
  Command, Sayge's Dark Fortune, Winterspring E'ko, Blasted Lands R.O.I.D.S. and the Zanza
  turn-in were all off out of the box, so the feature you installed Nexus for did nothing until
  you found six checkboxes. Every one of them is now scoped to its own NPC and steered by quest
  ID — that work landed in this same release — so they only ever fire where they are supposed
  to. If you had deliberately switched one of them off, it stays off; if you never touched it,
  it is switched on once.
- **Changed:** **Zanza ships asking for Swiftness and Spirit.** Sheen is not ticked by default —
  tick it if you want it, and it will never untick itself. Everything the fortune, tribute and
  turn-in flows do is still skipped by holding Shift as you click.
- **Changed:** **an empty Zanza flask list now means "none", not "all three".** It used to mean
  all three, which is why unticking every box silently gave you everything. Your picks are
  stored properly now, so clearing them all switches the turn-in off, which is what it looks
  like it does. Ticking a flask box also pins your choice, so nothing ever ticks one back on.
- Untouched on purpose: **auto-repair, the Yojamba coin turn-in, "skip fortune cookie", and the
  two "whisper my keyword to guild / friends" gates all still ship OFF.**

- **Fixed:** **releasing a chronoboon could auto-accept the next summon.** When you popped your
  displacer, all seven buffs came back at once — and Nexus read that as seven brand-new world
  buffs and armed the "you just got buffed, take the summon" gate. Any summon that landed in
  the next 19 seconds was accepted for you, from anywhere, whether you wanted it or not. Buffs
  coming back out of a boon are now recognised as *restored*, never as freshly gained, and the
  three seconds either side of the release are covered too.
- **Fixed:** **a re-applied buff never counted as fresh.** Only going from *no buff* to *buff*
  did — so standing under the Songflower you just picked up, or taking a second Rend, did
  nothing for auto-accept. A buff whose timer jumps forward by more than 75 seconds now counts,
  which is what "fresh" was always supposed to mean.
- **Fixed:** **one fresh buff could accept every summon for 19 seconds.** The fresh-buff flag
  was never cleared, so a second (or third) summon inside the same window rode in on the same
  buff. Accepting now uses the flag up: the next summon needs a genuinely new buff.
- **Fixed:** **the Fire Festival Fury trigger could never fire.** It was looking for a buff
  name that does not exist in the game, so ticking that box did nothing — in the summon
  triggers and on the HUD's cancel button alike. Both now use the real name.
- **Changed:** the auto-accept message now names **which buffs** triggered it instead of a
  single word, so you can tell why your character just left town.
- **Changed:** buff triggers are now matched by **spell ID first**, so they work on a
  non-English client instead of silently matching nothing.
- **Changed:** **"Drop on taxi / PvP" now ships OFF,** which is what it was always meant to be.
  Left on, it accepts *any* summon that arrives while you are on a flight path, buffs or no
  buffs — the one automation default that erred toward doing more. If you never touched the
  box it will be switched off once; if you deliberately turned it on, it stays on.
- **Fixed:** **mass invites went out all at once.** Every invite fired in a single frame, which
  is exactly the burst the client throttles, and the raid conversion could race the fifth
  invite. Invites now go out 60 ms apart with the fifth held back to 700 ms, the way the
  timing was designed.
- **Fixed:** **"Invite Online" missed characters and included the wrong ones.** It only ever
  looked at live mesh peers — so an online alt that was not currently a peer never got asked —
  and it did not check faction, did not skip people already standing in your group, and went
  out in whatever order the table happened to be in. The target list is now your database and
  your mesh roster together, filtered to your faction, minus yourself and anyone already
  grouped, in alphabetical order.
- **Added:** **the reverse invite.** If every single invite comes back "already in a group" and
  you are on your own, Nexus now drops your empty party and whispers your invite keyword to
  the first of them, so whoever already built the group invites *you* instead of the run just
  reporting failure.
- **Fixed:** **the leader hand-off never worked.** When someone whispered your keyword but you
  could not invite — in a raid without assist, or in a party you do not lead — Nexus was
  supposed to point them at whoever actually holds the group. It was reading a setting that
  had no default and no box anywhere in the options, so it was never anything but empty. It
  now finds the real group leader, and hands the name over **only if that leader is one of
  your own mesh characters** — a stranger leading your pug is never named to a stranger
  whispering you.
- **Fixed:** **copying automation settings between factions overwrote things it should not
  have.** The destination faction's invite-whitelist master switch could be silently flipped,
  and the one-time "defaults already seeded" markers were reset — which meant a whitelist you
  had deliberately cleared, or buff triggers you had deliberately unticked, could come back on
  your next login. The copy now leaves all of that alone; it copies settings, not history.

- **Fixed:** **"accept invites from guild members" and "from friends" never accepted anyone.**
  Both boxes ship ticked, and both were reading a list of your guildmates and friends that
  nothing in the addon ever filled in — so the answer was always "I don't know them". A
  guildmate or a friend inviting you was silently ignored, with the setting showing as on,
  and the same two categories were dead for whisper-keyword invites. Nexus now captures your
  guild roster and your friends list (including a Battle.net friend's current character) and
  keeps them current, so those four settings finally do what they say.
- **Added:** the capture **refuses to guess.** Both lists live on the server and read as empty
  for the first seconds after you log in — that is "not told yet", not "you have no friends".
  Nexus writes a snapshot only once the server has actually answered; until then it keeps
  using the last one it confirmed, so a slow login can never quietly revoke everybody's
  trust for a session. Leaving a guild, by contrast, drops that roster immediately.
- **Added:** `/dsn debug social` — how many names are in each list, how long ago they were
  captured, and (with a name after it) exactly what the invite gate would decide about that
  person and why.
- **Changed:** Nexus now asks the server for your friends list on login even when
  "auto-friend mesh characters" is switched off. Asking changes nothing on its own; it used
  to be skipped with that setting, which left the friends trust list permanently in the dark.
- **Fixed:** **the Dire Maul and Blackwing Lair gossip options could fire at any NPC in the
  game.** With either box ticked, Nexus looked for words like "spare", "free" and "enter"
  in the menu of *whatever* you were talking to — and those are ordinary words that turn up
  in ordinary Classic gossip. An innkeeper, a quest giver or a vendor could have their first
  matching option clicked for you, which at worst means accepting a quest or starting an
  escort you never asked for. Nexus now checks **who you are talking to** before it does
  anything: the four Dire Maul tribute guards, Captain Komcrush and the Orb of Command, by
  ID. If it cannot tell who the NPC is, it does nothing. The word-matching is gone entirely.
- **Added:** the guards those two features were always supposed to have. Captain Komcrush is
  only auto-answered when his menu has **exactly one** option, so the flow can no longer eat
  the quest he offers, and the **Orb of Command** is only used when it presents a single
  option *and* you are not on any of the three quests that conflict with it.
- **Fixed:** **Sayge's fortune could not be configured.** The per-class dropdown showed
  "Damage" as if that were your setting, but nothing was actually stored, so the automation
  looked your class up, found nothing, and quietly did nothing at all. Damage is now the
  real, stored default for all nine classes — and if the setting is ever missing, the
  automation falls back to Damage rather than going silent.
- **Fixed:** Sayge is now answered by **which option is where on the page**, the way the
  fortune actually works, instead of by searching his answers for the word "armor" or
  "spirit" — his answers are riddles and mostly do not contain the word at all. Damage takes
  the fast path; every other buff is picked by position on each of the two pages.
- **Added:** **Sayge refuses rather than guesses.** If his menu ever comes up in a shape
  Nexus does not recognise, it takes no fortune, says so in chat, and points you at
  `/dsn debug gossip` — which prints the exact options so the mismatch can be fixed. The
  fortune is permanent for the day, so a missed one costs you a click and a wrong one costs
  you the day.
- **Changed:** holding **Shift** as you open a gossip window now demonstrably skips the Dire
  Maul, Orb and Sayge handlers too, not just the quest turn-ins — one modifier, no
  exceptions to remember.
- **Changed:** **"Auto-repair at Rin'wosho" is now "Auto-repair at vendors",** because that
  is what it does. It repairs at any vendor window you open, anywhere — that behaviour is
  staying, but the old label described a scope the feature never had.
- **Added:** auto-repair now **prints what it spent**, and says **"not enough gold"** with
  the price when it cannot afford the bill. It used to do neither, so an unaffordable repair
  was indistinguishable from a broken feature.
- **Fixed:** **a flask you unticked could still be handed to you.** The per-flask
  checkboxes and the automation were storing your choices in two different formats: an
  older build saved them as a list of yes/no answers, the current one saves the ticked
  names, and a save that had been through both ended up holding a mixture. The engine only
  understood one of those formats, read the other as "nothing recorded", and fell back to
  its "no picks means all three" rule — so a Sheen you had deliberately unticked came back.
  Nexus now repairs the stored list **once**, on the next login, in every faction's
  settings, and tells you in chat when it does. Your unticks survive the repair; that is
  the whole point of it. If it turns out every flask was unticked, the **Zanza buffs**
  parent checkbox is switched off rather than silently re-enabling all three, and the chat
  line says so.
- **Fixed:** the automation also reads the old formats directly now, so an unticked flask is
  refused even in the one session where the repair has not run yet, and the generic
  "choose the reward that matches your priorities" path can no longer fall through to
  "just take the first one on the board" when it meets an old-format list.
- **Fixed:** **the Zanza buff turn-in never ran at Rin'wosho.** Rin'wosho hands his quests
  out through the *gossip* window — the same menu his vendor option sits on — but Nexus
  only ever picked quests off the older "quest greeting" list, and its gossip handler knew
  about Dire Maul, Blackwing Lair and Sayge and nothing else. So the flow was not refusing
  to run, or running and failing: it was **never starting**. Nexus now reads the quest
  lists on the gossip window itself and takes the turn-in from there, so walking up to
  Rin'wosho with a Zandalar Honor Token does what the checkbox always promised.
- **Added:** the whole set of guards the turn-in is supposed to carry. It only ever touches
  quest **8243** — the two other quests Rin'wosho offers are never auto-progressed — and it
  needs a Zandalar Honor Token in hand. Rewards go **Swiftness → Spirit → Sheen**, each one
  individually tickable, and that order is now fixed no matter what order you ticked the
  boxes in. **Leaving all three unticked means all three**, so turning the feature on is
  the only setup it needs.
- **Added:** **flasks sitting in your bank count as owned.** Nexus takes a snapshot of your
  bank whenever you open it and keeps it for the rest of the session, so it will not hand
  you a second Swiftness when one is already banked. That snapshot is **never written to
  disk** — a reload or relog forgets it entirely, and it comes back the next time you
  visit a bank.
- **Added:** a full bag guards nothing when you are holding exactly one token (the turn-in
  frees the slot in time), but a full bag with a **spare** token correctly refuses.
- **Added:** if the server refuses a reward, that flask is set aside for 30 seconds and an
  immediate re-open walks to the **next** one on your list instead of retrying the one that
  just failed. Delivery is confirmed by watching for the item to actually land, with a
  5-second backstop — you get a chat line either way.
- **Added:** if you already hold **every** flask you have enabled, the reward window is
  **left open** and Nexus watches your bags — drink one and the replacement is taken
  automatically, with no need to talk to Rin'wosho again.
- **Added:** holding **Shift** as you open the gossip window skips the whole thing, exactly
  as it does at Mau'ari, Vinchaxa and Drazial.
- **Fixed:** "zulian", "razzashi" and "hakkari" were being treated as Zanza keywords. They
  are the three **coins** of the third Zul'Gurub coin turn-in and have nothing to do with
  Rin'wosho; a coin hand-in could pull the Zanza reward priority onto it. They now live
  with the other coins, and the coin turn-ins pick by quest ID with the priority the coins
  you are actually carrying decide — highest-priority complete set first.
- **Fixed:** **the Winterspring E'ko and R.O.I.D.S. turn-ins were two words each and
  nothing else.** Both features were steered entirely by looking for a word in a quest
  title — "e'ko" for one, "roids" for the other — with no idea which NPC they were talking
  to, how many E'ko you were carrying, or which quest was which. Both now know exactly what
  they are doing, by quest ID.
- **Added:** **E'ko is turned in the way it is meant to be:** the first type you are
  carrying **three or more** of, in the order Frostmaul → Winterfall → Chillwind →
  Shardtooth → Ice Thistle → Wildkin → Frostsaber, and only at **Witch Doctor Mau'ari**.
  Two of a type is no longer enough to start a turn-in that cannot finish, and holding
  several types no longer means whichever one Mau'ari happened to list first.
- **Added:** **R.O.I.D.S. checks that you can actually complete it before it starts.** It
  needs **3 Snickerfang Jowls, 2 Blasted Boar Lungs and 1 Scorpok Pincer** — the counts
  matter, one of each is not enough — it only runs at **Bloodmage Drazial**, it takes the
  **two interactions** the quest really needs (accept on the first, hand in on the second),
  and it takes the R.O.I.D.S. itself by item, not by "whatever is first on the board".
- **Added:** a **full bag** no longer costs you the reward. R.O.I.D.S. proceeds on a full
  bag only when at least one of the three reagents is held at exactly the required count —
  that stack is used up by the turn-in and frees the slot in time — and refuses when every
  stack has spares and nothing would be freed.
- **Added:** both turn-ins now use the same safety net as the Zanza flow. A hand-in that
  the server refuses is set aside for **30 seconds**, and for E'ko an immediate re-open
  walks to the **next type** you are carrying rather than retrying the one that just
  failed. Delivery is confirmed by actually watching your bags — the R.O.I.D.S. arriving,
  or the three E'ko leaving — with a 5-second backstop, and you get a chat line either way.
- **Fixed:** **both features could have been doing nothing at all in-game.** They only ever
  looked at the older "quest greeting" list; if Mau'ari or Drazial hand their quests out
  through the **gossip** window instead — which is exactly what turned out to be true of
  Rin'wosho — the flow was never entered. Both windows are now wired for both NPCs, so it
  no longer matters which one they use.
- **Changed:** holding **Shift** as you open either window still skips both flows, and
  quests these features do not own are now left strictly alone: with a quest on screen that
  Nexus can identify as not one of its own, it will not accept, complete or take a reward
  for it, whatever the quest happens to be called.

## 1.1.3 — 2026-08-05

- **Fixed:** **one character's bags could stay wrong on another account for hours, even
  with both accounts logged in the whole time.** A character published new bags (gold up
  from 15,144 to 22,144); the account that was meant to receive it missed that single
  update — an ordinary dropped message — and then never caught up, holding the older
  copy for the better part of a day. The catch-up path was the problem. Accounts notice
  they disagree about a character, and the one that is behind asks for the data; the
  answer used to be **every character in the namespace**, dozens of full bag payloads,
  sent down a link that carries about one message a second. That takes many minutes, and
  the "don't answer this again" window was only fifteen seconds — so every twenty seconds
  another complete re-send piled up behind the one still going out, the queue grew faster
  than it drained, and which character actually made it through was luck. **The account
  that is behind now says exactly what it already has, and gets back only what it is
  missing** — in the case above, one character's bags instead of forty-four. The two
  "don't repeat yourself" windows either side are now two minutes, comfortably longer
  than an answer takes, and the same payload can no longer be queued twice while a copy
  of it is still waiting to go out.
- **Added:** `/nexus debug mesh` prints an `ns-backfill` line — how many catch-up answers
  were targeted versus full re-sends, how many characters were actually sent versus
  skipped as already-current, and how many duplicate sends were suppressed. On two synced
  accounts the targeted count should climb while the full-resend count stays at zero;
  a non-zero full-resend count means a peer is still running an older build.
- Older and newer builds interoperate in both directions with no version bump: an older
  account asking for a catch-up still receives the full re-send it expects, and an older
  account answering one still replies with everything, which the newer side filters on
  arrival exactly as it always did.
- **Added:** **every character in your mesh is now on every character's friends list,
  automatically.** Shortly after you log in, Nexus adds each mesh character that belongs
  to one of your OTHER accounts — same faction, same realm — to this character's friends
  list, once. Nothing has to be configured and nothing has to be mailed first: by the time
  you want to send something, the recipient is already a friend, so Blizzard's "are you
  sure you want to mail this stranger?" confirmation never appears for any of your own
  characters. New characters joining the mesh later are picked up as they appear. It is
  under **General → "Automatically friend your other accounts' characters"** and ships on.
- **Added:** the auto-friend pass **never re-adds anyone you have removed.** If you take
  one of these characters off your friends list, that is remembered permanently for that
  character and Nexus leaves them alone from then on — and the same applies to anyone
  Daseeki Conduit had already put there, whose record Nexus reads and honours. Nexus never
  removes a friend, never touches your ignore list, and stops quietly if your friends list
  is full. Characters on the account you are currently playing are excluded (that is
  answered from the mesh's account map, never guessed from names), as is anyone whose
  faction Nexus has not actually seen.
- **Added:** `/nexus debug friends` shows the setting, whether the friends list has been
  confirmed by the server yet, how full it is, how many names Conduit's record is holding
  back, and exactly what the next pass would do to each mesh character, with the reason.

- **Fixed:** **a fully booned character could suddenly show no world buffs at all.** Every
  so often the character you were logged in as dropped its whole rack in Nexus — all the
  world-buff tiles empty — even though the chronoboon was still holding seven buffs, and
  hovering the chronoboon brought them straight back. Nexus reads what is inside your boon
  off the chronoboon's tooltip, and a tooltip that has not finished loading shows its
  title and nothing else. Nexus could not tell that apart from a boon that had genuinely
  been emptied, so it believed the empty reading, wiped the buffs from your record and
  published the wipe to your other accounts. **An empty reading is no longer allowed to
  delete anything unless the emptiness is provable** — the chronoboon really is gone from
  your bags and bank, or the tooltip really did load and really does list nothing. A
  reading Nexus cannot trust keeps the buffs it already had instead of erasing them, and
  quietly asks the game to load the item so the next look is honest.
- **Fixed:** the same protection now guards the record itself, not just the tooltip read.
  While the Chronoboon Displacement buff is on your character the stored buffs are, by the
  rules of the game, still in there — so **a capture that has lost its own copy of the
  list now rebuilds it from your record rather than writing you down as unbuffed.** This
  covers the case where the list is missing for any reason at all, including the first
  moments after a login.
- **Added:** `/nexus debug sanity` reports the new rule — how many empty chronoboon
  readings were refused (and how many of those were provably a cold tooltip), how many
  were honoured, and whether the buff list Nexus is currently holding is a fresh reading
  or preserved evidence.
- **Added:** **Felwood node timers now show on the minimap**, not just on the world map.
  Songflower, tuber and Night Dragon's Breath minimap pins each carry the same dark
  countdown chip the world map pins got — sitting just above the pin, in the same colour
  the timers panel uses for that node, so a glance at the minimap tells you how long a
  flower has left without opening the map. The chip is sized down to suit the minimap, and
  a pin sitting right at the top edge puts its chip underneath itself instead of off the
  minimap. Pins with nothing to count down (available, or no data) show no chip at all,
  exactly as before.
- **Fixed:** the Felwood pin-size sliders could appear to do nothing on some profiles. The
  sliders read your saved size from three possible keys, but the pins themselves only ever
  read the first one — so a size carried in from an import (or written by an older build)
  showed in the slider while the pins stayed at the default. **The pins now read the size
  the same way the slider does.**

## 1.1.2 — 2026-08-04

- **Fixed:** a **gold-only change could go missing on your other accounts.** Take money
  out of the mailbox (or sell to a vendor, finish a trade, collect an auction) and nothing
  moves except your gold — no bags change, nothing is equipped. Nexus captured the new
  amount correctly on the character itself, but the update could sit unsent for minutes
  behind a queue of bulk catch-up traffic, so the other accounts' cards and tooltips kept
  showing the old number. **A gold change is now published like any other change and gets
  ahead of the bulk backfill**, so the new amount reaches your other accounts within
  seconds. This is the behaviour Daseeki Bags had before the rebuild, where gold had its
  own dedicated push.
- **Fixed:** Nexus republished your whole inventory record every time *anything* nudged
  it, even when nothing had actually changed. That churn is what filled the queue the
  gold update was stuck behind. **Nexus now compares what it just captured with what it
  last sent and stays quiet when they match** — gold is part of that comparison, so a
  gold-only change always counts as a change. Less traffic, and real updates arrive
  sooner.
- **Added:** `/nexus debug inventory` now shows the money side of the story on one line —
  the gold your record currently holds, the gold a fresh look would find, and whether
  Nexus considers that a change worth sending. `/nexus debug inventory push` forces a
  republish of the character you are on.

## 1.1.1 — 2026-08-04

- **Fixed:** your own characters could be overwritten on screen by another account's
  second-hand copy of them. If you played Poonyx on account 1 while account 2 was also
  online, account 2's older idea of Poonyx could take over the Poonyx card — showing
  stale or missing world buffs for a character you were *sitting on* — and another
  account's alt could likewise show buffs it did not really have. **Each account is now
  the source of truth for its own characters:** Nexus refuses mesh data about a character
  that belongs to this account, no matter how recent that data claims to be, so what you
  captured yourself always wins. Data about *other* accounts' characters syncs exactly as
  before, newest-first.
- **Note:** nothing was lost. The overwrite only ever affected the live display and the
  synced copy of a character; your **notes are stored separately and were never touched**,
  and any character that looked wrong corrects itself the next time you log into it.
- **Added:** `/nexus debug sanity` now reports how many inbound records about your own
  characters were refused. A number above zero is normal and healthy on a multi-account
  setup — it is this account correctly declining to be told about itself.

## 1.1.0 — 2026-08-04

<!-- RELEASE NOTE: the cross-account tooltips below are a new user-facing FEATURE, not a
     fix — this Unreleased section is 1.1.0-worthy rather than 1.0.2. The version bump
     itself is the release coordinator's call; nothing here forces it. -->

- **Added:** cross-account tooltips for players who use the **default Blizzard bags**.
  Hover an item and Nexus now lists every character across every account in your mesh
  that holds it, with a grand total on top and a dimmed "Other Accounts" section for
  characters on your other accounts. Hover the gold amount on your backpack (or at a
  vendor, mailbox or bank) and you get the same breakdown for money, capped at five
  characters per group with the rest rolled into "Others" and a grand total at the
  bottom. This is exactly the block Daseeki Bags has always shown — same layout, same
  portraits, same colours — so you no longer need Bags installed just to see it.
  One difference by design: Bags can tell you *where* each stack sits (equipped, bags,
  bank) because it stores every slot. Nexus stores per-character totals only, so it
  shows the count with no location icons rather than guessing at one.
- **Added:** a **"Cross-account tooltips"** checkbox under Cross-account inventory & gold
  in Settings → General, on by default. The line beneath it tells you whether the
  tooltips are live and, if not, why.
- **Note:** if you have **Daseeki Bags installed, nothing changes.** Bags draws these
  tooltips itself, so Nexus stays completely out of the way — you will never see the
  block twice — and the new checkbox reads as inactive with the reason spelled out.
- **Fixed:** Nexus threw a stream of "AddOn 'Daseeki-Nexus' tried to call the protected
  function 'SetEveryoneIsAssistant()'" errors while you were raiding in *someone else's*
  raid. Two things were wrong and both are fixed. First, "Auto-promote assistant" tried to
  flip the raid's All Assist switch — that switch is protected, meaning Blizzard reserves
  it for you personally and no addon has ever been allowed to touch it, so the attempt
  could only ever fail. Second, Nexus was running its group-assembly routine on *every*
  roster change in *any* group, including raids it had nothing to do with.
- **Changed:** the "Auto-promote assistant" option is now **"Remind me to set All Assist"**.
  Your existing setting carries over. When Nexus finishes assembling your own mesh raid and
  All Assist is still off, it prints one line reminding you to tick it in the raid menu —
  the one thing an addon is actually permitted to do here.
- **Changed:** invite-and-convert now only acts on a group *you* asked Nexus to build. The
  automatic raid convert runs only when all of the following hold: you started the invite
  from the minimap button, the dashboard, or `/nexus invite` within the last minute; you are
  the group leader; and the people in the group are your own mesh characters. Joining or
  leading anyone else's group is completely inert — Nexus does not even look at the roster.

- **Fixed:** killing a world-buff announcer looked like it had not been noticed at all.
  If the buff's own cooldown had longer to run than the announcer's 6-minute respawn,
  the timer row simply kept counting the cooldown down and never mentioned the kill —
  so a raid that had just killed Overlord Runthak saw no sign Nexus had seen it. The
  kill was in fact detected and recorded the whole time; it had nowhere to appear.
  While the announcer is down, the row now says so ("Killed · 5:58") and the cooldown
  it displaced moves to the hover tooltip, so nothing is lost either way.
- **Fixed:** an announcer kill could wipe out a live cooldown on your next login. The
  timers were rebuilt from only the newest entry in each log, so a fresh kill hid the
  buff drop sitting behind it — a real six-hour Onyxia cooldown would come back as
  "Open". Drops and kills are now restored independently.
- **Fixed:** announcer deaths broadcast by NovaWorldBuffs users were being received and
  then discarded. Nexus now reads them, with the same freshness and duplicate rules the
  reference uses, so a kill someone else witnessed reaches your timers.
- **Fixed:** an announcer was believed in the wrong city — a Stormwind announcer's death
  reported from Orgrimmar counted. Each announcer is now only trusted in its own capital,
  and the surrounding zone (Durotar, Elwynn Forest) now counts as well, so a kill at the
  city gates is no longer missed.
- **Fixed:** a buff drop now clears an older announcer kill, so the timers cannot go on
  reporting an announcer as dead after he has demonstrably come back and yelled.
- **Note:** announcer-kill detection works whoever lands the killing blow — either
  faction, and including a mind-controlled announcer killed by his own side.

## 1.0.1 — 2026-08-04

- **Fixed:** cross-account item counts stopped updating after the Daseeki Bags 2.0
  upgrade — an alt's bags would show whatever they held at the moment you upgraded, and
  never change again. Nexus decides whether Bags is already publishing your inventory
  before it starts publishing itself, and that check was reading the *addon folder name*.
  Bags 2.0 keeps the same folder name as 1.x, so every account read as "Bags is already
  publishing" and nobody published anything. Nexus now looks for the Bags 1.x publisher
  itself, which 2.0 does not ship.
- **Fixed:** accounts already stuck by the above repair themselves. The first time each
  account logs in after this update, Nexus notices it was wrongly held back, resumes
  publishing, and says so once in chat. Counts for each character refresh the next time
  you play it — one login per account is enough.
- **Changed:** `/nexus inventory` now also reports which publisher (if any) was detected
  and whether this account has been repaired, for diagnosing sync problems.

## 1.0.0 — 2026-08-03

First public release. Daseeki Nexus is a cross-account character dashboard for WoW
Classic Era: every character on every account you play appears as a card, and the cards
stay current live over a lightweight sync mesh between your own accounts.

### What you get
- **Character cards** for the whole roster — world buffs held with time remaining
  (including what is stored in a chronoboon), raid lockouts and attunements coloured by
  available / locked / unattuned, hearth, chronoboon and Darkmoon cooldowns, rest and XP,
  gold, and a free-form notes box on every character.
- **World buff timers** for Onyxia, Nefarian, Rend, Zandalar, Songflower and friends, fed
  by the same community timer mesh NovaWorldBuffs uses — so your timers agree with
  everyone else's on the server — plus a timers dock on the dashboard.
- **Felwood map pins** for songflowers, tubers and dragons, with readable countdown chips
  on the world map and minimap.
- **Instance log** with per-character visit history and live 5-per-hour / 30-per-day cap
  tracking, so you know before you zone in whether the next run will lock you out.
- **Buff rules per class** — mark which world buffs a class actually wants (a mage does
  not need Fengus' Ferocity); the held counts and the "missing" flags respect your rules.
- **Online and Summoners tabs** — who is logged in across your accounts, and who is
  positioned to summon.
- **Minimap button** — left-click invites all your online characters to a group,
  right-click opens the dashboard.
- **Importers** for ShadowNetwork and Nova Instance Tracker data, so you start with your
  existing history instead of from zero.
- **Cross-account inventory and gold**, the system of record behind Daseeki Bags'
  cross-character tooltips and totals.

### Requires
- **Daseeki Core** — the suite's shared options hub and UI foundation.
- Multi-account sync needs the one-time pairing on the Setup page (generate credentials
  on your first account, paste the bundle on the others). Single-account use works fine
  without it.

---

<!-- Everything below this line is the pre-1.0 internal development log, kept for
     reference. It is not a record of public releases. -->

## Pre-1.0 development log

- Added: **a LICENSE file — Daseeki Nexus ships All Rights Reserved**, matching the rest of the suite; the embedded LibStub, LibSerialize and LibDeflate keep their own upstream licenses.

- Fixed: **the first world-buff pull timer could throw a Lua error if you updated Nexus
  but not Daseeki Core.** The pull bar is drawn with a bar widget that arrived in Core
  2.2.0, and it was being used without checking that the installed Core actually has it —
  so on an older Core the very first Rend or Onyxia pull errored, and there is no setting
  that turns pull bars off to avoid it. Nexus now checks first: with Core 2.2.0 or newer
  nothing changes, and on an older Core the bar is drawn plainly instead — same colours,
  same countdown, same icon and label, just without the smooth drain and the spark that
  rides its edge — with one chat line telling you to update Daseeki Core.

- Changed: **the Instance Log's columns now split the table 30 / 30 / 20 / 20** — this
  supersedes the 40 / 20 / 20 / 20 split in the two entries below, in both the Rest and the
  Logs view. 40% was more room than any character name needs and it squeezed the second
  column, which is the one carrying the longest text: "Blackrock Depths" was being cut
  short with an ellipsis on every row. Character and Instance (and, in the Rest view,
  Character and Level) now share the width evenly at 30% each, Dur and Ago keep 20%, and a
  full dungeon name fits. Alignment is unchanged, and both views still share one splitter.

- Changed: **the three mesh preferences on Setup now share one row.** "Suppress
  mesh-disabled alert", "Auto-leave standard chat channels" and "Hard-throttle mesh sends"
  were split across two lines — one, then two; they now sit side by side on the same three
  columns as the Account ID / Channel / Token fields above, and drop to even spacing rather
  than colliding if a larger text size or a wider font makes a label outgrow its column.

- Changed: **the Instance Log's Logs view is spaced like its Rest view.** Character,
  Instance, Dur and Ago now take 40% / 20% / 20% / 20% of the list's width instead of the
  hand-tuned pixel widths they had, so the columns are evenly spread rather than bunched
  against the right edge, and the headers sit over them. Both views share one splitter,
  so they cannot drift apart again. An instance name too long for its column is shortened
  with an ellipsis; hovering the row still shows it in full.

- Fixed: **stored buffs whose time was printed in the tooltip's right-hand column, or
  off to one side, were being missed.** Hovering a chronoboon only ever read the left
  column of the tooltip's numbered lines. When a buff's name sat on the left and its
  remaining time on the right — a perfectly ordinary layout — the buff was recorded as
  "in the boon, time unknown" and the minutes were thrown away; when the whole
  suspended-effects list was drawn as one loose block rather than as numbered lines, the
  buffs in it were not seen at all. The hover now reads every line, both columns, and
  every stray piece of text the tooltip is drawing. Text that appears twice is only
  counted once, and where the same buff shows up in two places the reading that actually
  carries a time is the one that is kept.

- Fixed: **"Battle Shout (Boon)" was a state the game cannot produce.** A chronoboon
  cannot hold a Battle Shout or Fire Festival Fury — the Displacer will not take them —
  but the code that reads a chronoboon's tooltip checked all ten tracked buffs instead of
  the eight that can actually go in. So any hover over a boon icon whose tooltip merely
  contained the words wrote Battle Shout down as stored, and it then showed up on the
  character's card and detail row as a suspended buff, frozen, for as long as the boon
  lasted. It is now ignored, along with Fire Festival Fury, and the "how many buffs are in
  the boon" number no longer counts either of them.

  Records that already picked up one of these are cleaned up once, on your next login,
  across every account in your store and including the saved boon snapshots — and the
  same rows arriving from a mesh peer who has not updated yet are stripped on the way in,
  every time, not just once. A Battle Shout you actually *have* is untouched throughout:
  only the impossible "in the boon" version is removed.

- Fixed: **a stored buff with no readable time could steal the next one's.** In the same
  tooltip read, a buff listed without its own remaining time picked up the minutes
  belonging to whichever buff came after it — the surviving half of the old "Fengus'
  1h 59m appeared on Rallying Cry" bug. Each buff's time is now read only from its own
  line, and a buff whose time genuinely cannot be read keeps the number already on record
  instead of being corrected to a wrong one.

- Changed: **Settings is smaller.** Four things you were being asked to configure have
  been decided for you, because there was only ever one sensible answer and keeping the
  controls meant keeping the ways they could be set wrong.

  - **Custom locations are gone.** The Locations table on the General page — the
    numbered coordinate boxes with Add Location / Here / Del — is removed, and the
    records themselves are retired, not just hidden. Each one leaves a marker behind, so
    a copy arriving later from another account, a ShadowNetwork re-import, or a restored
    settings file is removed again instead of quietly coming back. Your location data
    now comes from where your characters actually are. If you had ever typed a location
    override onto a character by hand, that text was already copied into that
    character's Note and stays there.
  - **Class colours are fixed.** The nine hex fields are gone; names are painted from
    the standard palette everywhere. Anything you had customised is kept in your
    settings file rather than deleted, in case this ever needs reversing.
  - **Buff duration thresholds are gone.** Eighteen numbers replaced by three facts: a
    2-hour buff turns yellow with less than 90 minutes left, a 1-hour buff with less
    than 55, and the 15-minute NPC Battle Shout with less than 12. Above that they are
    green. A buff you *have* is never red any more — red now means one thing, "missing",
    instead of two.
  - **The Tombstones list is gone from Settings.** Only the list: deleting an account
    still blocks it from re-appearing for 14 days, exactly as before. There was nothing
    on that screen to do except watch a countdown.

- Changed: **buff class rules are one set now, not one per faction.** Whether your
  rogues want Battle Shout is a fact about rogues, so the Horde/Alliance switch on that
  page is gone and there is a single list. Your existing Horde configuration becomes the
  shared one; paladin rules are taken from your Alliance side, since a Horde table has
  never had a real paladin setting in it. Both old lists are kept untouched in your
  settings file. This is also the end of an old trap — a tick could previously land in
  the faction you do not play and appear to do nothing.

- Changed: **"Mesh & Accounts" is now "Setup", and its three identity fields sit on one
  row.** Account ID, Channel and Token each have their label above their box instead of
  three stacked rows with a hint under each — they are one job, so they read as one
  block. Show/Hide, validation and the setup bundle all work as before, and the fields
  still refuse to be overwritten while you are typing in them.

- Changed: **the buff rules page is called "Buffs"**, and its class grids run in the
  order you use them: Battle Shout, Rend, Slip'kik's Savvy, Fengus' Ferocity.

- Changed: **the character list opens on 60s.** The roster exists for the level-60
  world-buff view, so it now starts there instead of showing every alt. Clicking the
  active 60S chip still clears back to everything.

- Fixed: **the on-screen alert banner ignored your chosen font.** The big centred
  warning (pull timers, quest hand-ins, cooldown alerts) was hardcoded to the game's
  default face while every other piece of Nexus type follows the font you pick in
  Daseeki Core — so the one line you actually read mid-pull was the one line in the
  wrong font. It now uses your picked face, keeps its heavy outline, and changes with
  the picker and your font-size setting without a reload. Same size, position and
  colour as before at the default setting.

- Fixed: **the group list on an instance-log hover was not really in columns.** A
  tooltip line is a single piece of text, so the four "columns" of names were just four
  names glued together — each one started wherever the previous name happened to end, and
  on a 40-man raid the result was four ragged edges. The roster is now laid out as a real
  grid: every column starts at one fixed point down the whole block, and the level sits in
  its own right-aligned slot so single- and double-digit levels leave the names lined up
  too. Column width is measured from the actual names in the group, so a five-man stays
  compact and a full raid of long names is capped rather than running off the screen.

- Fixed: **group members on the instance-log hover showed up plain white.** They were
  meant to be class-coloured, but runs recorded before class capture existed — and imports
  whose source had no class field — carry no class per member, and there was nothing to
  fall back on. Nexus now looks the name up in the characters it already knows (your own,
  your alts, and any peer on the mesh) and colours from that; the "(you)" entry always
  colours, since your own class is never in doubt. A name it genuinely does not know stays
  neutral rather than being coloured with a guess, and if two realms disagree about a name
  it stays neutral too. Newly recorded runs already carried class and are unaffected.

- Changed: **the Rest view's columns now split the table 40 / 20 / 20 / 20.** CHARACTER,
  LEVEL, XP and REST used to be sized to their own contents, which left the three numbers
  bunched against the right edge with a gulf after the character name. They now take fixed
  shares of the list width, so the header row sits over its columns and the space is spread
  evenly. Numbers stay right-aligned.

- Fixed: **pressing Escape in a character's NOTE box threw away what you had typed.**
  Escape restored the previously saved note and *then* released the box, so the save that
  fires on release wrote the restored text back over yours. Escape now saves and then
  releases. Clicking away still saves as before, and switching to another character while
  the box is still active saves the note to the character you actually wrote it for.

- Fixed: **Fengus' Ferocity no longer reads as Missing on casters.** Fengus is the
  Dire Maul tribute *attack power* buff, so a mage, priest or warlock has no use for
  it — but the card counted it like any other world buff and showed a level 60 mage
  "WORLD BUFFS · 7/8 HELD" with a red Missing tile. Fengus is now a per-class rule
  like Slip'kik's Savvy and Rend: it ships **required** for Warrior, Paladin, Hunter,
  Rogue, Shaman and Druid, and **ignored** (hidden, never counted) for Mage, Priest
  and Warlock. Casters now read 7/7. A new "Fengus' Ferocity (DMT AP) — Required
  Classes" grid on Settings → Auras lets you set any class to
  required / optional / ignored per faction, exactly like the other rules.
  Existing installs get the new defaults automatically on the next login — nothing to
  re-tick — and if you had already set Fengus' classes by hand, your choices are kept.

- Fixed: **an old Daseeki Core could take the dashboard down with it.** Three places
  drew their divider rules with a Core 2.2.0 drawing call, unguarded — on an older
  Core that is a Lua error mid-build, and you lose the whole panel rather than one
  line. Those calls now go through a version guard: an out-of-date Core costs you the
  rule and gets you one chat line telling you to update Daseeki Core, and everything
  else draws as normal. Requires Daseeki Core v2.2.0 for the full dress.

- Fixed: **a Daseeki Bags install that arrived after Nexus never got imported.** The
  one-time cross-account Bags import marked itself "done" even when Bags was not
  installed, so installing Bags later found the door already shut and your old
  cross-account bag data never came across. The marker is now set only after an
  import that actually read something, so a later Bags install still migrates. The
  newer Inventory module already worked this way; this brings the older path in line.
  Anyone whose marker is already stuck stays stuck — the reset is a separate change.

- Mesh: **peers on an older data format are no longer ignored.** Character records
  carry a format version, and Nexus used to accept only its own exact version, so any
  future format bump would blank out every peer who had not updated yet. It now reads
  older versions too (fields the old sender did not have simply read as absent) and
  refuses only versions NEWER than it understands. This ships one release ahead of the
  next format bump on purpose: the tolerance has to be out in the wild before anything
  starts sending the new shape.

- **⚠ ALL ACCOUNTS SHOULD RELOAD TOGETHER AFTER THIS UPDATE.** This release changes
  how the heartbeat's segment hashes are computed (they now include a coarse
  fingerprint of each character's data, not just the list of names). An updated
  client and an out-of-date one will therefore always disagree about those hashes
  and will keep asking each other to re-sync until both are on this build. Nothing
  breaks and no data is lost — the wire format itself is unchanged, and the existing
  per-target rate limits cap the churn at one manifest per 5s and one segment per
  60s per account — but until every account has reloaded there is avoidable mesh
  chatter. Reload (or relog) all of your accounts once, together, and it stops.

- Fixed: **the Songflower grid said "No data" forever on a layered realm.** Whitemane
  is layered, and on a layered realm the songflower timers do not arrive as plain
  fields — they arrive nested one level down, in a per-layer map. Nexus was reading
  only the flat, top-level fields and skipping that map entirely, so on your realm it
  was skipping *every* songflower timer the network carries. All ten cells sat empty
  no matter how long you listened.

  Nexus now reads them. A node it has never seen is filled in; a node holding your
  own pick is left completely alone for the full 25-minute respawn (walking up to a
  flower and watching it get picked still beats anything second-hand); and once a
  node is filled, later reports follow the usual newest-wins rule with the 10-second
  duplicate guard. Where several layers report the same node, the newest of them is
  used, and only once — not one write per layer.

  **The honest caveat:** Nexus does not know which layer you are on, and the data
  does not say. A filled cell reflects a pick that happened on *some* layer, so it
  can be off — the flower may already be up, or still be down when the timer says
  it is up. That is a deliberate trade: some data beats none, and the moment you
  pick a flower yourself, your own observation takes that node over outright. Node
  sources are visible in `/nexus debug timers`, and `/nexus debug nwb` now prints a
  running songflower tally (heard, applied, filled, and why anything was refused).

- Fixed: **a duplicate character card that no amount of reloading would clear.** Nexus
  keeps one bucket of characters per account, and exactly one of them is flagged as
  *this* account — the flag that makes your own roster untouchable, so nothing
  arriving over the mesh can ever delete your characters. If you ran Nexus before
  setting an account ID, the unattributed bucket got that flag (correctly, at the
  time); setting an account ID afterwards flagged the real bucket too, and nothing
  ever took the flag back off the old one. The result was two buckets both claiming
  to be you, and because the stale-twin cleanup deliberately never removes anything
  from a bucket flagged as yours, the leftover copy of a character was permanently
  immune to it — the same character drawn twice, both lit green, forever.

  Nexus now checks this at login: only the bucket matching your current account ID
  may claim to be you, and any other bucket still wearing the flag has it removed
  (noted in `/dsn debug mesh`). Nothing is deleted by that check — it only lets the
  ordinary cleanup, with all of its existing safeguards, finally do its job. The
  duplicate clears on your next login and stays gone. If you have never set an
  account ID the check does nothing at all, so pre-setup rosters keep their
  protection.

- Fixed: **the Auras and Automation pages now open on YOUR faction instead of always
  Alliance.** Everything on those two pages is saved per faction, and the Faction
  toggle at the top used to reset to Alliance every single reload. So if you play
  Horde and set a class rule — say marking Slip'kik's Savvy *required* for Shamans —
  the click quietly landed in your **Alliance** settings, and your Horde characters
  went on reading their own untouched rules. The buff stayed yellow (optional) on
  the cards and in the detail pane, with nothing on screen to say why. The page now
  opens on the faction you are actually playing, so the setting you make is the
  setting you get. This fixes the whole family of "it didn't take" cases on those
  pages — thresholds, class rules, gossip buff types and auto-summon triggers alike.

  **One thing to do once:** any rule you set before this update was written to the
  Alliance side, and your data has deliberately been left exactly as you saved it
  rather than guessed at and moved. Open Nexus → Auras (it will now say Horde), and
  re-tick the rules you want — for example Slip'kik's Savvy → Shaman → *required*.
  It is a single click per rule, and it sticks this time.

- Fixed: **the minimap button now plays nicely with minimap button managers when
  LibDBIcon is available.** Addons that collect and tidy minimap buttons (Leatrix
  Plus and friends) recognise buttons registered through the standard LibDBIcon
  library and wrap anything else — which is why hovering our button showed *their*
  message ("This is a custom button. Please ask the addon author to use the standard
  LibDBIcon library instead") instead of our world-buff timers, and why clicks went
  astray. If any addon you run provides LibDBIcon, Nexus now registers its button
  through it as "DaseekiNexus": collectors list and manage it properly, and our own
  tooltip and full click matrix come back. Your button keeps the spot you dragged it
  to, and the Show/Lock settings still work exactly as before. If nothing on your
  system provides LibDBIcon, the button behaves as it always has — and in that case
  there is no button manager to interfere with it either. Nexus does not bundle the
  library; it simply uses one when it is already there.

- Fixed: **other accounts' characters stopped updating on screen.** Every inbound
  path wrote peer data into the store and then told nothing — the dashboard, cards
  and detail pane all repaint off a callback the receive handlers never fired. So a
  remote character's buffs updated in the saved data and sat there: durations froze
  on screen, and only a change to *your own* character (or reopening the window)
  ever pulled the new data into view. Inbound state pushes, segment adoptions and
  manifest ghost cleanups now announce themselves, once per received message.

- Fixed: **a change you made while no peers were online was never sent.** The tracker
  recorded state as "delivered" before it had been handed to the transport, so a
  change captured while the mesh knew zero peers (alone at login, mid-join, a peer
  relogging) was marked done and then suppressed by the duplicate filter forever. It
  only escaped when something *else* about the character changed. The transport now
  reports how many peers it actually reached, and a change that reached nobody is
  retried instead of being forgotten.

- Fixed: **a parked character never refreshed.** Capture only ran on events — auras,
  bags, resting, zoning, XP — so an alt standing in a city fired none of them and
  never re-evaluated its own state. That also made the existing 5-minute "max quiet"
  forced refresh unreachable on exactly the characters that needed it. A 30-second
  safety rescan now runs while you are logged in (and stops during logout). It is
  nearly free: an unchanged character still sends nothing, because the duplicate
  filter suppresses it.

- Fixed: **remote characters could read permanently offline, with frozen durations.**
  Peers were recorded under whatever name the addon channel reported, which is
  sometimes the bare character name with no realm. The roster matches peers against
  full `Name-Realm` keys, so those peers matched nothing, won nothing, and every
  character on that account showed as offline. Peer names are now stored canonically
  — preferring the `Name-Realm` the peer's own discovery/heartbeat message carries,
  and adding your realm to a bare name otherwise. `/dsn debug mesh` now shows
  `Name-Realm` for every peer.

- Fixed: **a push that got lost stayed lost.** The heartbeat only compared *which*
  characters each account held, never what was in them, so two accounts agreed while
  one held an hours-old copy. Segment hashes now fold in a coarse per-character
  fingerprint (buff durations to the minute, raid lockouts to 5 minutes, the key
  flags), so a stale copy is detected and healed by the re-sync that already exists.
  See the reload note at the top.

- Fixed: **inbound data destroyed fields the mesh does not carry.** An incoming state
  push replaced a peer's record wholesale, wiping raid-attunement flags and the
  Darkmoon fortune's remaining-time accounting — data that only arrives on the bulk
  sync path — so a detail pane would drop from a real countdown back to a bare "on
  cooldown" seconds after showing it. Those fields are now carried across explicitly.
  Data the wire *does* carry is still fully authoritative, including when it clears
  something. (Your notes were never affected; they are stored separately.)

- Fixed: an out-of-range cooldown or buff duration wrapped around on the wire instead
  of being capped — 18h12m read as "no cooldown". Values now saturate at the maximum
  the field can hold, so an error reads as "at least this long" rather than as a
  plausible wrong number. No wire-format change; every in-range value encodes exactly
  as before.