Skip to content

Releases: cjber/field-guide-forever

v0.3.22

Choose a tag to compare

@github-actions github-actions released this 04 Nov 12:22
491182b

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

Choose a tag to compare

@github-actions github-actions released this 04 Nov 07:58
355ff5e

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

Choose a tag to compare

@github-actions github-actions released this 04 Nov 03:26
3d721d0

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.

v0.3.19

Choose a tag to compare

@github-actions github-actions released this 04 Nov 01:28
1e7e51d

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

Choose a tag to compare

@github-actions github-actions released this 03 Nov 22:37
v0.3.18
948482c

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
  • Merge PR #80
    Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>

v0.3.17

Choose a tag to compare

@github-actions github-actions released this 03 Nov 20:37
0770882

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
  • 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
  • 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

Choose a tag to compare

@github-actions github-actions released this 03 Nov 16:15
4cdd896

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

Choose a tag to compare

@github-actions github-actions released this 03 Nov 14:15
7b338b3

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: 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-uiMapID area and override tables, or nil when LibQuestieDB, contract 2 or ZoneDB is missing. ReadSupportTable and the lib, contract and Support checks moved there unchanged (same rawget(_G, "LibQuestieDB"), same pcalls, same sandboxed loadstring/setfenv).
    • Core/API.lua BuildSpawnCache now calls ns.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. FGQuestieDBModule is declared by the ---@class annotation 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 early return nil path 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.
  • 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 on Portrait where 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

    Co-authored-by: Claude Opus 5.5 noreply@anthropic.com

v0.3.14

Choose a tag to compare

@github-actions github-actions released this 03 Nov 07:36
d2a7469

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>

v0.3.13

Choose a tag to compare

@github-actions github-actions released this 02 Nov 17:22
54abd24

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 now project-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
  • 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
      tracked of 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 kills and cleared killsEstimated, 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
  • 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.
    Updates astral-sh/setup-uv from 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>
  • ci: shorten the Dependabot cooldown to one day (#50)
    Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
  • 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.
    Updates astral-sh/setup-uv from 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
    • 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>