Repository navigation
Releases: cjber/field-guide-forever
Releases · cjber/field-guide-forever
Release list
v0.3.22
Field Guide Forever
v0.3.22 (2026-11-04)
Full Changelog Previous Releases
- chore(release): 0.3.22
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore(core): re-vendor shared files from forever-core main (#90)
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
v0.3.21
Field Guide Forever
v0.3.21 (2026-11-04)
Full Changelog Previous Releases
- chore(release): 0.3.21
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - data: client constants for Forever 1.60.1.70755 (#88)
- data: client constants for Forever 1.60.1.70755
- chore(screenshots): record hashes for the 1.60.1.70755 data refresh
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
Co-authored-by: cjber 44099524+cjber@users.noreply.github.com
Co-authored-by: Cillian Berragan cillian@nebula.gg
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
v0.3.20
Field Guide Forever
v0.3.20 (2026-11-04)
Full Changelog Previous Releases
- chore(release): 0.3.20
Move the Unreleased entry under 0.3.20 so the tag has its release notes.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore(core): refresh Forever Core asset scanner
Adopt the final Forever Core asset scanner and manifest revision. - chore(core): adopt forever-core asset tooling (#85)
- chore(core): adopt forever-core asset tooling
Adopt the signed forever-core asset scanner and tooling update at 20a9961436c10a29d214c2a6548fe3cf53297bc3. - chore(core): sync canonical shared files
Refresh all producer-owned shared files from forever-core 20a9961436c10a29d214c2a6548fe3cf53297bc3. - fix(core): keep consumer shared mappings local
Do not adopt unrelated producer mapping changes; retain only the intended shared module and tooling updates.
- chore(core): adopt forever-core asset tooling
v0.3.19
Field Guide Forever
v0.3.19 (2026-11-04)
Full Changelog Previous Releases
- chore(release): 0.3.19 (#84)
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - Merge pull request #83
Track one explicit artwork build across journal, rarity, micro-menu,
contact-sheet and layout-comparison renders. Include it in screenshot
freshness so art changes require regeneration.
Repair first-run zone-art caching and replace the removed lore field in
historical layout comparisons with catalogue facts. Refresh the gallery
and contributor guidance. - Merge PR #82
Adopt the canonical asset checker and current shared deadcode scanner.
Exclude generated patrol fixtures while retaining real entrypoint evidence.
v0.3.18
Field Guide Forever
v0.3.18 (2026-11-03)
Full Changelog Previous Releases
- Merge PR #81
- fix(ui): attach native journal tabs and frame zone illustrations
Use upper-edge detail tabs attached to their native inset, remove duplicate
icon chrome, and keep fallback map navigation clear of its caption.
Mirror runtime geometry in the gallery and sync the shared patrol-aware
source scanner from Forever Core. - fix(tools): sync repository-relative deadcode scan boundaries
- docs: identify the renderer-selected art build
- docs: record final review corrections in audit ledger
- docs: close verified audit findings with regression guards
- chore(tools): copy forever-core's deadcode.py so the drift gate passes
The PR edited the vendored tools/deadcode.py by hand, so the core-shared job
rejected it. This replaces it with forever-core main's verbatim copy.
Co-Authored-By: Nebula noreply@nebula.gg - fix(tools): adopt reviewed scratch and fixture discovery boundaries
Sync the canonical Core scanner and remove an unused art waiver comment.
Regenerate the pinned gallery and record matching source fingerprints.
Co-authored-by: Nebula noreply@nebula.gg - fix(ui): attach native journal tabs and frame zone illustrations
- Merge PR #80
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
v0.3.17
Field Guide Forever
v0.3.17 (2026-11-03)
Full Changelog Previous Releases
- chore(release): 0.3.17 (#78)
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - docs(ui): propose one native journal lockup (#77)
- docs(ui): propose one native journal composition
Record the suite composition sweep and a single AI direction mock.
Require native edge, crop and chrome evidence before runtime changes. - docs(ui): pin composition references to the published producer
- docs(ui): record audited addon revisions
- docs(ui): propose one native journal composition
- fix(stats): preserve observed totals with shared peer leaderboards (#75)
Preserve estimated-history baselines across reloads and keep personal boards
available while sharing is disabled. Reuse Forever Core's bounded transport
and independent source readers, with complete totals and recent details.
Cover migration, coexistence, cancellation, aggregate consistency and stable
unchanged snapshots, and show the actual slash-command leaderboard output. - docs(readme): name the addons that record the same kills (#76)
The audit found no hard conflict with RareScanner, SilverDragon or
AutoBiographer, but their records do overlap. Saying so, and saying why the
counts differ, is more useful than leaving a player to wonder which number is
right.
Refs #71. - fix(types): name the shared button template accurately (#74)
- feat: build a native creature and zone journal layout
- feat: reshape field guide around native creature and zone artwork
Use native journal controls, creature models and zone illustrations in a
compact layout. Keep gallery scenes aligned with runtime states and make
asset provenance and exclusions inspectable.
Preserve scroll on progress refreshes, reset it on catalogue changes, and
validate QuestieDB map caches against their source data. - fix: audit every journal gallery scene
Initialize layout metadata for each scene and record alternate pages through
the shared save helper so empty and instance views receive geometry checks. - fix: check content bounds in alternate gallery views
Record notice, instance and settings content bounds, validate their pane
containment, and skip chrome measurement for scenes without buttons. - fix: center the missing-data screenshot notice
- fix(ui): use the approved Forever button family
Replace legacy panel-button templates with SharedButtonSmallTemplate and
regenerate the gallery and model composition with the matching renderer. - docs: refresh gallery metadata after shared asset adoption
- feat: reshape field guide around native creature and zone artwork
- fix(ui): use the Forever button family and reject legacy chrome
Adopt Core's shared asset blacklist in CI and its approved gold-bordered
buttons in the journal and settings. Refresh the rendered gallery, redraw
retained zone scenes, and dim the complete journal beneath modal previews.
v0.3.16
Field Guide Forever
v0.3.16 (2026-11-03)
Full Changelog Previous Releases
- chore(release): 0.3.16
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - fix(ui): use native journal surfaces and compact rows
Render the rock and marble supplied by Blizzard templates, use native
row highlights and side tabs, and keep the smaller journal layout aligned
across creature, instance and unavailable states.
v0.3.15
Field Guide Forever
v0.3.15 (2026-11-03)
Full Changelog Previous Releases
- chore(release): 0.3.15 (#66)
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - fix(ui): align Field Guide with native frame chrome (#65)
- fix(ui): align field guide with native frame chrome
Use Blizzard inset templates for journal cards and hide zero progress fills so empty bars do not expand to full width in the client. Refresh the rendered gallery and pin the merged suite guidance. - docs: refresh Field Guide renders
Keep the gallery hashes aligned with the loading-state control fix. - fix(ui): disable controls while catalogue loads
Keep the loading state non-interactive until QuestieDB is ready, then restore the journal controls when the catalogue becomes available. - docs: refresh Field Guide renders after rebase
Keep the gallery evidence aligned with the rebased native journal and loading state changes. - docs: make UI guidance portable
Link the pinned Forever UI skill and asset references at the merged core revision instead of using local filesystem paths.
- fix(ui): align field guide with native frame chrome
- fix: preserve newer journals and streamline shared stats (#64)
- refactor: Move QuestieDB ZoneDB reading from Core/API into Integrations/QuestieDB
Move QuestieDB ZoneDB reading from Core/API into Integrations/QuestieDB.
What changed
- Integrations/QuestieDB.lua gains
DB.AreaMaps(), which returns QuestieDB's AreaTable-to-uiMapIDareaandoverridetables, or nil when LibQuestieDB, contract 2 or ZoneDB is missing.ReadSupportTableand the lib, contract and Support checks moved there unchanged (samerawget(_G, "LibQuestieDB"), same pcalls, same sandboxedloadstring/setfenv). - Core/API.lua
BuildSpawnCachenow callsns.QuestieDB.AreaMaps()and only turns coordinates into spawn rows. It no longer reads a third-party global. - types/QuestieDB.lua: the header comment now names Integrations/QuestieDB.lua as the only reader.
- types/Namespace.lua is unchanged.
FGQuestieDBModuleis declared by the---@classannotation in Integrations/QuestieDB.lua, so LuaLS types the new method from its definition there. The typecheck passes.
Why it is better
There is now one owner for the LibQuestieDB contract, as AGENTS.md requires. A change to the QuestieDB contract touches only the integration file.
Why the behaviour is the same
The checks and table reads are the same code, run in the same order, and happen at the same moment (when BuildSpawnCache runs). Every earlyreturn nilpath still makes BuildSpawnCache return nil. The integration file loads before Core/API.lua in the TOC, and the call only happens at runtime anyway. The unchanged tests/spawns_spec.lua (success path and missing-Support path) and every other check pass.
Made by Sloppatrol. The proof is in the pull request.
- fix: preserve newer journals and avoid repeated stats sanitization
Keep saved variables from a newer schema untouched during a downgrade,
with a regression test over initialization and persistence. Sanitize
shared stats once per table rather than on every incoming message.
- refactor: Move QuestieDB ZoneDB reading from Core/API into Integrations/QuestieDB
- ci: add the LuaLS typecheck, pin the client build in one place, pin the runner (#62)
- ci: add the LuaLS typecheck, pin the client build in one place, pin the runner
- tools/typecheck.sh, as in Hoard: it verifies the vendored forever_tools,
checks the TOC/XML load graph (tools/typecheck_coverage.py), then runs LuaLS
3.19.1 against the pinned WoW API and FrameXML annotations. A new typecheck
CI job runs it, and the Sloppatrol profile's typecheck check now does too. - tools/forever_tools/ is the full vendored package from forever-core
(sync.py update), so the typecheck can check the load graph. - types/ declares the namespace, the data classes and the client globals the
pinned annotations lack, and .pkgmeta keeps it out of the package. The typing
found three real bugs: the creature list and tooltip passed one creature's
record where Model.Variants and Model.IsComplete need the character's state,
the window set its portrait onPortraitwhere the template's key is
portrait, and the filter button called SetTextInsets, an edit-box method. - The client build is pinned once, as BUILD in tools/gen_zones.py, and
check_generated.py, micro_menu_render.py and data_spec.lua read it. The daily
refresh compares the newest wago.tools build with BUILD, moves it, and
regenerates; before, it regenerated Data/Client.lua alone while three other
pins stayed on the old build, so its PR could never pass CI. - The Sloppatrol gate check calls .sloppatrol/, not the missing .sift/.
- The changelog check moves into project-rules; every job runs on
ubuntu-24.04 and installs Ubuntu 24.04's release-pocket LuaJIT and luacheck. - The screenshot digest is re-recorded: a fresh render is pixel-identical.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session\_01P9EQuFw4Vx9qUMezvtTuRU
- docs(changelog): drop the duplicated Unreleased bullets
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.3.14
Field Guide Forever
v0.3.14 (2026-11-03)
Full Changelog Previous Releases
- chore(release): 0.3.14 (#61)
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore(data): re-pin the client constants to build 1.60.1.70753 (#60)
- chore(data): re-pin the client constants to build 1.60.1.70753
The 06:28Z refresh generated Data/Client.lua for 70753 while tools/gen_zones.py,
tools/check_generated.py and tools/micro_menu_render.py still pinned 70707, so the
generated-data gate could never pass on the refresh PR. Move every pin together and
regenerate the shipped constants from the 70753 exports.
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - test(data): assert the 1.60.1.70753 pinned build in the constants spec
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com> - chore(screenshots): re-record the scene digests for build 1.60.1.70753
The client constants are a screenshot source, so the re-pin moved the digest even
though the re-render reproduced every image byte for byte. Recorded after
python3 tools/mockups.py; visual_audit reports 0 findings.
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(data): re-pin the client constants to build 1.60.1.70753
v0.3.13
Field Guide Forever
v0.3.13 (2026-11-02)
Full Changelog Previous Releases
- chore(release): 0.3.13 (#58)
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 (#55)
- 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
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: keep the tracked species, show entry badges, and log boss kills (#57)
Bugpatrol, Speedpatrol and Sloppatrol each ran once over the headless harness. Bugpatrol reported
four bugs; each is fixed where the wrong value was produced and pinned in tests/api_spec.lua (red
before the fix).- NormalizeState rebuilt each character's save without
tracked, so the Track Species choice was
gone after every reload. It is kept when it is a species ID. - The window passed one species' saved entry to Detail.Show, which then asked Model.Variants and
trackedof it as if it were the character's state: the Rare variant known, Shiny seen and
Tracked badges and the variant cards never lit. Detail.Show now takes the character's state and
reads the species entry from it. - ENCOUNTER_END logged the boss name as the sighting's zone; it now logs the instance, as
ENCOUNTER_START already did. - NormalizeState set every migrated
killsand clearedkillsEstimated, so a save from before
kills were counted lost the "at least" marking Model.Specimen gives it. It is set during
migration instead. - The Sloppatrol profile drops check_screenshots.py: it hashes Core/ and UI/, so every refactor
there failed it, and a run checkout cannot re-render. - Speedpatrol's one change was rejected as noise; the refactorer made no change.
Screenshot digests are re-recorded. A fresh render differed only in the list scrollbar thumb, the
same 16 pixel column in all 19 images, so the committed images are kept.
Claude-Session: https://claude.ai/code/session\_01UkMWrynmLdVQj4NFs9fs4Z
Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
- NormalizeState rebuilt each character's save without
- ci(patrols): add speed and sloppatrol profiles over the gate (#56)
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 the
layout audit, sloppatrol's oracle is the gate itself. The linters 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 (#53)
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 points its checks at those specs, the
visual audit and the core drift gate, and forbids launching the game. - ci(mergepatrol): queue this repo through Mergepatrol (#52)
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. - build(deps): Bump astral-sh/setup-uv from 10.3.2 to 10.3.3 in the actions group (#51)
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 (#50)
- 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
- chore: standardise dependabot (daily, 7-day cooldown, grouped)
- build(deps): Bump the actions group with 2 updates (#49)
Bumps the actions group with 2 updates: astral-sh/setup-uv and actions/setup-python.
Updatesastral-sh/setup-uvfrom 10.3.0 to 10.3.2- Release notes
- Commits
Updatesactions/setup-pythonfrom 5.1.0 to 7.1.0 - Release notes
- Commits
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 - dependency-name: actions/setup-python
dependency-version: 7.1.0
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions
...
Signed-off-by: dependabot[bot] support@github.com
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>