Repository navigation
Releases: cjber/hoard-forever
Releases · cjber/hoard-forever
Release list
v0.1.5
Hoard Forever
v0.1.5 (2026-11-03)
Full Changelog Previous Releases
- chore(release): 0.1.5 (#37)
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - fix: localize source tooltips and clarify empty searches (#36)
Use the row's translated source label in tooltips and omit the link hint
when no results exist. Cover both regressions with the loaded UI harness
and refresh the empty-state preview.
v0.1.4
Hoard Forever
v0.1.4 (2026-11-03)
Full Changelog Previous Releases
- chore(release): 0.1.4 (#35)
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - fix: preserve bank snapshots and align Hoard UI (#34)
- fix: preserve bank snapshots and align hoard UI
Keep cached bank records when a bag-only scan runs after the bank closes, and
track bag and bank ages independently so stale data remains honest. Refresh the
window with the native portrait, search box and bottom panel tabs, compact the
result rows, localise visible status and source labels, and update the mock to
the pinned Forever build with honest cloth examples. - fix: correct shared guidance pin
Point the contributor guide at the verified merged Forever Core commit and
use the repository's colon style for standards pointers. - fix: regenerate native hoard screenshot evidence
Replace the conflicted screenshot manifest with fresh records. Render the
PortraitFrameTemplate rock and streak layers and align row coordinates with
the runtime anchors. Keep localized search status messages as whole sentences.
- fix: preserve bank snapshots and align hoard UI
- fix: retain closed-bank results and combine uncached item records (#33)
Use the current character's saved bank while a live bank scan is
unavailable. Group item variants independently of cached display data,
filling missing metadata from other records. Cover both regressions. - ci: fix the Sloppatrol gate path, fold the changelog into project-rules, pin the runner (#32)
- ci: fix the Sloppatrol gate path, fold the changelog into project-rules, pin the runner
- The Sloppatrol profile's gate check called .sift/gate.py, which does not
exist; it now calls .sloppatrol/gate.py and .sloppatrol/agents.py. - The changelog check moves from its own job into project-rules, as in the
published addons. - tools/typecheck.sh runs tools/typecheck_coverage.py, as Commissions does, so a
LuaLS setting that would skip a TOC-loaded file fails the typecheck. - Every job runs on ubuntu-24.04 instead of ubuntu-latest.
- AGENTS.md lists the jobs and the deadcode command; the Speedpatrol
instructions say why CI runs no benchmark here (no bench script).
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01P9EQuFw4Vx9qUMezvtTuRU
- ci: pin LuaJIT and luacheck to Ubuntu 24.04's release builds
Every job that installs LuaJIT or luacheck asks apt for the exact
release-pocket versions, which the Ubuntu archive never replaces, so a
package update cannot change what CI runs.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01P9EQuFw4Vx9qUMezvtTuRU - ci: check vendored core files on every pull request
Synced from cjber/forever-core#42. The pull request run checks only the
vendored files the branch changes, so a hand-edited copy fails the PR
while a consumer that merely lags core still passes.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01P9EQuFw4Vx9qUMezvtTuRU
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
v0.1.3
Hoard Forever
v0.1.3 (2026-11-02)
Full Changelog Previous Releases
- chore(release): 0.1.3 (#31)
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - fix: run LuaLS in typecheck and read the Forever bag indices in Snapshots.Scan (#30)
- CI's typecheck job installed no language server, so tools/typecheck.sh
stopped after the tooling checks and never checked a type. It now pins
the Ketho/vscode-wow-api annotations and lua-language-server 3.19.1,
runs the server into a fresh report dir and fails on any diagnostic.
types/ adds the minimum FrameXML declarations that needs. - Snapshots.Scan read container -1 as the bank (the keyring on the Forever
client), counted the reagent bag among the bank tabs and missed the
reagent bag in Bags. It now takes its containers from Enum.BagIndex -
carried bags 0..NUM_BAG_SLOTS plus ReagentBag, the bank as
Characterbanktab plus CharacterBankTab_1..9 - with the same numbers as
fallback on a client without the enum, and never reads the keyring. - tests/snapshots_spec.lua covers bag-only, an open bank with the Forever
enum, and a client with no enum at all.
Refs #29
Claude-Session: https://claude.ai/code/session\_01JcwULHwLekhyjYKyVykXY3
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
- CI's typecheck job installed no language server, so tools/typecheck.sh
- docs: caption the store screenshots and check the copy in CI (#28)
The store page stacked its three screenshots with no text between them,
so check_copy.py failed on it (WFA-25). Each image now has a line under
it saying what to look at.
No addon ran check_copy.py in CI, so the failure went unnoticed.
typecheck.sh now runs it on the README and the store page, beside the
family block and locale checks the typecheck job already runs.
Claude-Session: https://claude.ai/code/session\_01UkMWrynmLdVQj4NFs9fs4Z
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com - fix: open on the default tab and show each alt's snapshot age (#27)
- settings.defaultTab was declared but never read. The window now opens on
it (All for a value no tab has), and Settings > AddOns gains the "Open on
tab" dropdown the build brief lists, so the setting can be changed. - Alt stacks carry their snapshot's time, and the result tooltip lists each
alt's stack with a dimmed "Updated 3d ago", so an old reading is not taken
for what the alt carries now.
Claude-Session: https://claude.ai/code/session\_01UkMWrynmLdVQj4NFs9fs4Z
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
- settings.defaultTab was declared but never read. The window now opens on
v0.1.2
Hoard Forever
v0.1.2 (2026-11-02)
Full Changelog Previous Releases
- chore(release): 0.1.2 (#26)
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore(ci): move the project rules from .sift to .sloppatrol (#23)
- chore: merge the findings ledger into one file
The ledger was split into shards behind an index. Sloppatrol reads one file, so the listed shards'
items move into .sift/ledger.json unchanged, and shard files the index no longer listed (stale
copies from an earlier split) are removed.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01UkMWs1YeaeXquJ2HyehWhz
Co-authored-by: cjber cjberragan@gmail.com - chore(ci): move the project rules from .sift to .sloppatrol
Sloppatrol now carries the project-rules gate, the findings ledger and the
AGENTS.md check, so the repository vendors them from there. The folder,
the project skill, markers and script headers move to the new names, the
vendored tools are refreshed, and the CI job is nowproject-rules.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01UkMWs1YeaeXquJ2HyehWhz
Co-authored-by: cjber cjberragan@gmail.com - fix(ci): refresh the tool hashes and comment width after the rename
The rename touched two vendored forever_tools files and lengthened one
spec comment past 120 columns. Their manifest now records the new
hashes, and the comment is shorter.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01UkMWs1YeaeXquJ2HyehWhz
Co-authored-by: cjber cjberragan@gmail.com
Co-authored-by: merge-patrol[bot] <349684721+merge-patrol[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com - chore: merge the findings ledger into one file
- fix: count bank items once, keep the vault off Alts, and scroll long results (#25)
Bugpatrol found these against the headless harness; each is covered by a
spec that fails on the old code.- The open-bank scan looped over containers -1 to NUM_BANKGENERAL_SLOTS,
which includes the carried bags 0 to 4, so every carried stack counted
twice. It now reads -1 and the bank bags after NUM_BAG_SLOTS. - Guild records carry the guild name as their holder, so the Alts tab
matched them. Alts now skips guild sources. - Rebuild saved this character even with "Record this character for the
Alts tab" off. It now shares SaveSnapshot, which honours the setting. - The result list had no scroll frame, so rows past the fifth drew below
the window. Rows now sit in a scroll child sized to its rows. - Rows show the item tooltip on hover, the status says "1 result." for a
single match, and clearing alt snapshots rebuilds the index. - The Sloppatrol profile drops the screenshots check, which a run
checkout cannot pass after any source change.
Claude-Session: https://claude.ai/code/session\_01UkMWrynmLdVQj4NFs9fs4Z
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
- The open-bank scan looped over containers -1 to NUM_BANKGENERAL_SLOTS,
- ci(patrols): add speed and sloppatrol profiles over the gate (#24)
Both wrote unusable defaults for this repo (an HTTP API and a failing placeholder
check), so the profiles are by hand: speedpatrol times the spec suite and
tools/typecheck.sh, sloppatrol's oracle is the gate itself. The linters now skip
the patrol run folders, which hold whole checkouts of the repo. - f"chore: update Mergepatrol skill (#{n})"
Co-authored-by: merge-patrol[bot] <349684721+merge-patrol[bot]@users.noreply.github.com> - ci(bugpatrol): add the profile that drives the harness (#21)
The game client cannot run here, so the app Bugpatrol explores is the
headless Lua harness: the specs stub the client API and load the addon
files in TOC order. The profile names the read-only invariant that matters
most, and forbids launching the game or editing files.
AGENTS.md said python3 tools/typecheck.sh, but the file is a bash script and
CI runs it with bash. - ci(mergepatrol): queue this repo through Mergepatrol (#20)
Add the config file Mergepatrol reads from the default branch, and the
agent skill that tells coding agents to queue PRs rather than merge them. - chore(deps): bump astral-sh/setup-uv from 10.3.2 to 10.3.3 in the actions group (#19)
Bumps the actions group with 1 update: astral-sh/setup-uv.
Updatesastral-sh/setup-uvfrom 10.3.2 to 10.3.3
updated-dependencies:- dependency-name: astral-sh/setup-uv
dependency-version: 10.3.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: actions
...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
- dependency-name: astral-sh/setup-uv
- ci: shorten the Dependabot cooldown to one day (#18)
- ci: shorten the Dependabot cooldown to one day
Updates are still daily, grouped and include major versions; a release
now waits one day instead of seven before Dependabot proposes it.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01UkMWs26A9bgM3nDBqHGx8W - ci: let zizmor accept the one-day Dependabot cooldown
zizmor's dependabot-cooldown audit requires seven days by default.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01UkMWs26A9bgM3nDBqHGx8W
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com - ci: shorten the Dependabot cooldown to one day
- docs(readme): name the live _forever_ client folder on install (#17)
wowaddon 1.0.0 and the suite's AGENTS.md docs now treat the live WoW: Forever
client as the _forever_ folder; the beta keeps _classic_beta_. Install paths
in the README name both so neither reader is sent to the wrong folder.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - docs(agents): commits are signed with git commit -S (#16)
Claude-Session: https://claude.ai/code/session\_01UkMWrynmLdVQj4NFs9fs4Z
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com - chore(deps): bump astral-sh/setup-uv from 10.3.0 to 10.3.2 (#15)
Bumps the actions group with 1 update: astral-sh/setup-uv.
Updatesastral-sh/setup-uvfrom 10.3.0 to 10.3.2
updated-dependencies:- dependency-name: astral-sh/setup-uv
dependency-version: 10.3.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: actions
...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
- dependency-name: astral-sh/setup-uv
- chore: standardise dependabot (daily, 7-day cooldown, grouped)
v0.1.1
Hoard Forever
v0.1.1 (2026-10-30)
Full Changelog Previous Releases
- chore(release): 0.1.1 (#14)
Moves the Unreleased entry under 0.1.1: the WFA-33 credits change. Nothing the
client loads changed since the last tag, so no locale, screenshot or store
copy refresh is owed.
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - docs(credits): follow WFA-33 like the rest of the suite (#13)
Hoard's credits used a different table shape from the rest of the suite (Idea or report | From), had no closing thanks, and its README Credits did not thank reporters, which WFA-10 asks for.
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore(docs): reference the Field Guide repo by its live slug (#12)
Point the build brief at cjber/field-guide-forever.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
v0.1.0
Hoard Forever
v0.1.0 (2026-10-26)
Full Changelog Previous Releases
- chore(release): 0.1.0 (#11)
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - feat(mockups): add native offline screenshots (#10)
Co-authored-by: Nebula noreply@nebula.gg - chore(tools): update shared dead-code media scan
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore: add the suite dead-code gate (#8)
Vendors forever-core's dead-code tooling plus the shared core-drift checker
and runs the scan as a CI job beside the existing checks.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore: vendor Forever Core Text and SettingsPage, adopt both (#7)
Core/Text.lua and Core/SettingsPage.lua are copied byte for byte from
forever-core main (501507bb) and added to the TOC in load order.
Core/Model.lua drops its own ~45-line accented-letter table and its own
tier ranking for ns.Text.Fold and ns.Text.Rank. A differential run over
every character the old table folded and 20,000 generated name/query
pairs found no lost matches; only queries that previously matched
nothing (multi-word queries in another order, ligatures, characters the
old table missed) now match.
Core/Settings.lua keeps its two options, its clear-snapshots button and
every saved key, and moves the panel chrome onto ns.SettingsPage.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - ci: keep the typecheck job to tools/typecheck.sh (#6)
- chore: align Hoard with the suite gate, core vendoring and packager check
- tools/forever_tools is complete and re-vendored from forever-core, including the
MANIFEST that still pointed at the old cjber/skills revision. - tools/check_package.py, changelog.py and release_check.py become the thin
forever_tools wrappers the suite uses instead of hand-written copies. - ci.yml gains the typecheck and sift jobs every sibling runs.
- AGENTS.md points at the shared standards pack and the shared-core drift gate.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
- ci: run the packaging gate with luajit and mark the wrappers executable
check_package.py runs each spec over the packaged files and needs luajit on PATH,
which the package job did not install, and the vendored wrappers lost their
executable bit, which ruff's EXE001 and tools/typecheck.sh both reject.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore: mark the tooling scripts executable
core.fileMode was off in the working copy, so the executable bit the suite's
wrappers and typecheck.sh carry never reached the tree; ruff's EXE001 and the
typecheck job's direct tools/typecheck.sh call both depend on it.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore: mark the tooling scripts executable
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore: use the canonical ruff.toml
Hoard carried a local ruff variant selecting EXE and py311 against the suite's
E,F,I,UP,B py310; the canonical config passes on tools/ unchanged.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - ci: invoke typecheck.sh through bash
The typecheck job called the script directly and failed on the executable bit the
checkout does not carry; bash needs no mode bit.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - ci: keep the typecheck job to tools/typecheck.sh
Hoard has no .types annotations vendored, so lua-language-server --check reports
undefined-type problems on code that predates this branch; the job runs the shared
config checks until the type surface is vendored.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore: align Hoard with the suite gate, core vendoring and packager check (#5)
- chore: align Hoard with the suite gate, core vendoring and packager check
- tools/forever_tools is complete and re-vendored from forever-core, including the
MANIFEST that still pointed at the old cjber/skills revision. - tools/check_package.py, changelog.py and release_check.py become the thin
forever_tools wrappers the suite uses instead of hand-written copies. - ci.yml gains the typecheck and sift jobs every sibling runs.
- AGENTS.md points at the shared standards pack and the shared-core drift gate.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
- ci: run the packaging gate with luajit and mark the wrappers executable
check_package.py runs each spec over the packaged files and needs luajit on PATH,
which the package job did not install, and the vendored wrappers lost their
executable bit, which ruff's EXE001 and tools/typecheck.sh both reject.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore: mark the tooling scripts executable
core.fileMode was off in the working copy, so the executable bit the suite's
wrappers and typecheck.sh carry never reached the tree; ruff's EXE001 and the
typecheck job's direct tools/typecheck.sh call both depend on it.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore: mark the tooling scripts executable
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore: use the canonical ruff.toml
Hoard carried a local ruff variant selecting EXE and py311 against the suite's
E,F,I,UP,B py310; the canonical config passes on tools/ unchanged.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - ci: invoke typecheck.sh through bash
The typecheck job called the script directly and failed on the executable bit the
checkout does not carry; bash needs no mode bit.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - ci: keep the typecheck job to tools/typecheck.sh
Hoard has no .types annotations vendored, so lua-language-server --check reports
undefined-type problems on code that predates this branch; the job runs the shared
config checks until the type surface is vendored.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - fix(docs): drop the store-page image that has no file behind it (#4)
docs/curseforge.md pointed at docs/screenshots/window.png, which does not exist,
so the page rendered a broken image. No screenshot tool or capture exists in this
repo yet; the image goes back when a real capture does.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - docs: use relative links for the icon and CI badge while the repo is private (#3)
raw.githubusercontent serves a private repo's files as 404, so the
centred icon never rendered. Relative paths work on GitHub for a private
repo and after it is published; the absolute raw URLs in
docs/curseforge.md stay, because that file is pasted into the store.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - docs: bring the README and store page up to the suite standard (#2)
Add the family block, CI and release badges, the rendered icon and the
credits and licence sections the other Forever addons carry, and add
docs/curseforge.md. Describe what this build does: bags, reagent bag,
bank, cached alts and the search filters. The Guild tab has no vault
reader yet, so the copy says it stays empty.
Also add the AGENTS.md this repo was missing and the 400 px and 64 px
icon renders from media/icon.svg.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - feat: add Hoard search foundation (#1)
Co-authored-by: Nebula noreply@nebula.gg - chore: scaffold Hoard Forever into the Forever suite shape
Co-Authored-By: Nebula noreply@nebula.gg