Guild Bank Ledger

*BETA* - Persistent guild bank transaction logging with automatic multi-player sync.

File Details

v0.35.0

  • R
  • Jun 24, 2026
  • 389.57 KB
  • 113
  • 12.0.7
  • Retail

File Name

GuildBankLedger-v0.35.0.zip

Supported Versions

  • 12.0.7

GuildBankLedger

v0.35.0 (2026-06-24)

Full Changelog Previous Releases

  • Merge pull request #48 from RussellFeinstein/restock
    Restock reserves: per-item Keep field, bulk-set Keep, status cleanup (v0.35.0)
  • Stamp release 0.35.0 (v0.35.0)
    Single version stamp for the batch of three topic-branch PRs merged under
    0.35.0: restock reserves (per-item Keep field + bulk-set Keep + Restock
    status cleanup), the About tab label simplification (#46), and the removal
    of the Sort crafted-quality crash mitigation (#47).
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • Restock: separate row target/bank with a pipe instead of parens
    Reads "target N | bank M" rather than "(target N, bank M)", matching the
    trimmed two-state status display.
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • Restock: bulk-set Keep for all items on a tab
    Adds a "Keep" field to the Layout editor's "Apply to all" bulk row, so a
    layout-write user can set the reserve for every item on a display tab in one
    click (alongside the existing bulk Slots and Per slot). Setting Keep to 0 clears
    the tab's reserves on Save.
    Extracts the bulk apply into a testable GBL:_LayoutEditor_ApplyBulk method (the
    button handler is now thin) plus a pure applyBulkReserve helper that coerces
    itemID keys to numbers, so a synced (string-keyed) layout still writes to the
    number-keyed reserve store. 15 new tests cover the helper and the orchestration
    (coercion, keep=0 removal, combined slots/perSlot/keep, validation, and the
    slots/perSlot-only no-reserve-write regression).
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • Restock: collapse stock status to In stock / Buy N
    The Restock rows showed three states: Buy N (below target), Stocked (exactly at
    target), and Over N (above target, in grey). The "Over N" state was confusing,
    since being above the max is not a problem. GetRestockStatusDisplay now returns
    two states: "Buy N" when the bank is below the item's target, and "In stock"
    when it is at or above it. The row still shows the target and bank counts.
    Both states stay triple-encoded (icon + color + text, never color alone).
    Updates the status-display test for the binary behavior and asserts that an
    over-max bank reads identically to an at-max one.
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • Harden the Restock Keep field for synced layouts and concurrent edits
    Code review of the v0.35 reserves producer (commit 029dcfa) found three bugs the
    number-keyed tests could not catch (the mock serializer is pass-through, so
    synced string-keyed layouts are never exercised):
    • The Keep field used the row's raw itemID as the reserve key. A synced layout
      arrives string-keyed, but the reserve store is number-keyed and SetStockReserve
      rejects non-number ids, so for any member who received the layout via sync the
      field showed 0 and silently dropped every edit. Coerce the itemID to a number
      for the read and the write, matching the existing _RestockBuildItemUniverse
      guard.
    • _LayoutEditor_ApplyReserveDraft compared the stale draft against live and
      deleted any live reserve missing from the draft. A reserve a concurrent sync
      added after the editor opened would be deleted on Save and that deletion
      re-advertised guild-wide. Iterate the draft keys only; removals are recorded
      as an explicit 0, so they still clear.
    • Remove left the item's reserve behind with no way to edit it (Keep renders
      only for items in a display tab). Remove now records an explicit 0 so Save
      clears the reserve too.
      Also correct the doc comment: SetStockReserve bumps the layout sync cursor but
      does not itself force a HELLO; the Save's own HELLO advertises the change.
      Adds three regression tests (string-key coercion, concurrent-sync preservation,
      remove-clears), a CHANGELOG [Unreleased] entry, and the CLAUDE.md architecture
      note for the reserves producer. 1386 tests, lint clean.
      Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • Restock reserves: add a "Keep" field to the Layout editor
    Add a per-item "Keep" EditBox to each display-tab row in the Layout editor,
    wired to the dormant stockReserves store. Reserves ride a parallel draft
    (self._reserveDraft) alongside the layout draft, so editing Keep is consistent
    with the Slots / Per slot fields: changes apply on Save and are thrown away on
    Discard. Save applies only changed reserves, since SetStockReserve bumps the
    layout sync cursor and forces a HELLO (one per real change, not per item).
    Restock needs no change: _RestockTarget already targets max(layout demand,
    reserve), so a Keep above an item's layout total raises its buy-to target, and
    _RestockBuildItemUniverse already lists reserve-only items.
    This is the producer half of the v0.35 reserve-targets step; the consumer
    (Restock) shipped in v0.34.0. No version stamp yet (bundle-and-PR stamps at
    PR-open). Adds apply-on-save and Keep-field tests; 1383 tests and lint green.
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • Merge pull request #47 from RussellFeinstein/layout-sort
    Sort: drop the crafted-quality crash mitigation (banner + pre-warm)
  • Remove the Sort pre-warm step
    Pre-warm loaded every unique item link before the first move to mitigate a
    Blizzard-side crash on TWW crafted-quality reagents. It added up to a 3-second
    delay before every sort, and recent sorts over those reagents (Flawless gems and
    similar) no longer crash, so the mitigation became cost without benefit. The
    sort now starts its first pass immediately.
    Removes preWarmForPlan, PREWARM_CAP_SECONDS and its export, the skipPreWarm opt,
    state.preWarming and the checkStall guard for it, and the pre-warm phase in
    ExecuteSortPlan (now a direct startPass). Drops the now-unneeded skipPreWarm from
    the 17 sort-executor test calls, which ran synchronously anyway. The crash record
    stays in the ChangelogView history; if it resurfaces the mitigation can be
    restored from git.
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • Remove the Sort tab crafted-quality crash warning banner
    The banner restated that pre-warm runs to mitigate a Blizzard-side crash, but
    recent sorts over crafted-quality reagents (Flawless gems and similar) did not
    crash, so the banner was clutter on the preview. Pre-warm still runs before
    every sort as a best-effort mitigation; only the banner and its supporting
    predicate are gone.
    Removes the SortView banner, the now-dead planHasCraftedQualityItems predicate,
    the CRAFTED_QUALITY_ATLAS constant and its export from SortExecutor, and the
    spec/ui/sortview_spec.lua file that only tested that predicate.
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
  • Merge pull request #46 from RussellFeinstein/ui
    About tab: simplify the Ko-fi / CurseForge / license labels
  • Simplify the About tab labels
    The Ko-fi and CurseForge copy boxes now show just "Ko-fi" and "CurseForge"
    instead of repeating "select and Ctrl+C to copy" (the boxes are already
    read-only copy fields), and the license line reads "MIT License".
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com