Skip to content

5.4.5

Latest

Choose a tag to compare

@Goldenshacal Goldenshacal released this 25 Oct 19:04
· 29 commits to master since this release

AllTheThings

5.4.5 (2026-10-25)

Full Changelog Previous Releases

  • parse everything
  • [MOP] The titanforged description was super weird.
  • [Forever] Added a section for Forever's Beta Event in its NYI section.
  • [Forever] Updated Wago DB to 1.60.1.70532.
  • Fix a few minor errors
  • [DB] Rebuilt all DBs for future comparisons.
  • [Era] A bunch of races that aren't in the game yet no longer appear in the New Character section.
  • Shadoweave Tailoring, Mooncloth Tailoring, and Spellweave Tailoring wasn't a thing until TBC.
  • Pile of Candy was added in 12.1.5.
  • [SOD] Cleaned up some stray bubble downs.
  • Unbreak Parser
    • While Decor itself was starting to get added in 11.2.7, Lumber Gathering became a thing after 12.0.0
  • [VSC] Ignore Forever ItemDB export.
    Correct the LuaLS ignore path for the generated Forever ItemDB.
    Assisted-by: gpt-6-luna
  • [DB] WoW's 22nd Anniversary recurring content stubbed for if there is any
  • [DB] Few more timeline tweaks
  • [Parser] Timeline entries now include ordering by the Change when their versions are identical
    [Parser] Inheritance of timeline entries now includes matching versions (i.e. ADDED_4_0_3 inheriting into REMOVED_4_0_3)
  • [DB] More timeline cleanups
  • [DB] Revert some timeline stuff since it was too overzealous in cleaning
  • [DB] More timeline cleanup
  • [TBC] fixed timelines and objectives of:
    The Book of the Raven
    To the Evergrove
    Return to Morthis Whisperwing
    No Mere Dream
    Eyes in the Sky
    To Catch A Sparrowhawk
    The Raven Stones
  • [Parser] Added with/withShared as shorter/more readable forms of 'applyDataSelf' and 'sharedDataSelf'
    [DB] More timeline conversion
  • [DB] Simplify Trading Post Month headers to remove bubbleDown timelines
  • [DB] More various bubbleDown timeline clean up with safer alternatives
  • [DB] Use bubbleDownFiltered on recipe structures (for now at least) to prevent bad timeline merges
  • [INFO] Remove bubbleDown timelines from Standard.lua
  • [DB] Moved 'The Sundering' exploration to northern STV
  • [Style] Normalize Harvester source files.
    • Define scoped UTF-8, LF, and indentation rules for the seven selected sources.
    • Trim Python trailing whitespace, align two dictionary closers, and add missing final newlines.
    • Convert userscript and HTML indentation to tabs while preserving tokens, comments, and output strings.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [DB] Fix Pre-launch events again with expansionHeader
  • [Debug] Added commented test code for Filter performance analysis (can probably expand to be more in-depth etc.)
  • [Logic] Filter adjustments for improved performance
    • Filters are now rebuilt into an array based on estimated priority (as calculated from various helper logic Claude worked on) whenever a filter is set or unset
    • In-lined the logic from ApplySettingsFilters to reduce function calls within hot-path filtering loops
  • [Misc] Cleanup default field keys
    [Logic] MinReputation & CustomCollect can use rawget since they're never dynamic and rarely assigned across the DB (this saves the class __index miss since it would never hit)
  • [Style] Normalize contributor tooling files.
    • Define scoped text-formatting and line-ending rules for contributor tools.
    • Convert normalize.js structural indentation to tabs while preserving its comments and literals.
    • Store the Wago updater with CRLF line endings and add the roadmap final newline.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [Data] Update Dun Morogh records.
    Correct quest and objective coordinates.
    Add Traditional Chinese object localization.
    Assisted-by: gpt-6-luna
    Assisted-by: gpt-6.1-sol
  • Update wago structure files to Vanilla, TBC, Lich and Cata
  • [Style] Normalize DB sync tooling formatting.
    • Add complete scoped policies for DB-sync Python, shell, and Markdown files, and set the README line ending to LF.
    • Convert the two shell launcher indentations to tabs while preserving all other script text.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [Style] Add final newlines to Harvester BAT files.
    • Add final newlines to the five Harvester batch scripts.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [DB] Remove the WRATH pre-launch sort header since there's no data for it at this time
  • [Parser] expansion shortcut now warns if the default timeline for its id is missing
  • Fix a few reported errors
  • Update The Oculus with InstanceHelper
  • Update The Nexus with InstanceHelper
  • [DB] Fixed timeline use for pre-launch events since expansion shortcut is no longer a default timeline
  • [Wago] Simplified MOP Wago batch file to use the shared update script & re-harvested CSVs
    [Wago] Simplified Forever Wago batch file to use the shared update script & re-harvested CSVs
  • [Wago] Updated Midnight wago update files & force-overwrite existing CSVs with sorting
  • [Wago] Shared update batch now supports locale-based downloads
  • Lorewalking: Titans
  • [Wago] Added a base Wago Update script which can be called from versioned Wago update scripts to ensure the same behavior is performed regardless of version
  • [Wago] CSV Cleaner updates
    • No longer quits if a Regex file is not provided or is missing
    • Reads CSV lines with newlines properly
    • Some potential bug fixes
    • Sorts the CSV records by the 'ID' column if existing (this should provide cleaner and easier to recognize Git diffs)
  • [Style] Normalize Windows script indentation.
    • Standardize PowerShell, CMD, and Batch indentation rules to four-column tabs.
    • Reindent the CostMerge PowerShell tests and embedded C# code.
    • Add the missing final newline to GameObjectCache-to-ObjectDB.ps1.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [Style] Normalize Windows script policies.
    • Use UTF-8 BOM and LF for both PowerShell scripts while preserving decoded content and EOF state.
    • Define all seven EditorConfig properties for the nine first-party Windows scripts, consolidating only branch-added duplicate scopes.
    • Enable trailing whitespace trimming for the five scoped Harvesters BAT files while retaining the broader exception for other Harvester paths.
    • Keep CMD and Batch scripts BOM-free with CRLF.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [Style] Normalize GitHub workflow formatting.
    • Add scoped EditorConfig and Git attributes policies for workflow YAML files.
    • Correct artifact-upload and fetch-depth indentation and add the missing final LF while preserving parsed values and scripts.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • Lorewalking: Tyr
  • PTR: Parse
  • PTR: Update Wago
  • [Style] Set GitHub metadata formatting rules.
    • Add scoped UTF-8, LF, and two-space EditorConfig rules for Dependabot and issue template YAML.
    • Set Git text and LF attributes for those paths while preserving workflow settings and the five already-compliant YAML files.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [Style] Normalize developer tooling formatting.
    • Add scoped UTF-8, LF, and four-column tab rules for VS Code JSONC and Git hooks.
    • Normalize three VS Code files and the sync hook while preserving settings, comments, and commands.
    • Add the missing launch configuration newline and preserve both hook modes and the existing LF rule.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [Style] Normalize root file formatting.
    • Add complete root-only EditorConfig and Git EOL policies while preserving existing nested and binary rules.
    • Normalize YAML whitespace and indentation, the TOC and batch line endings, and the missing YAML final newline.
    • Use four-column tabs in JSON and root scripts, with explicit root indentation rules that preserve Markdown spaces.
    • Preserve file content, documentation, loading order, and existing Lua/XML/assets behavior.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [Parser] Fixed Min/Max propagation if there are groups with no value for the hierarchical field
  • [Forever] Adjusted the config to ignore hierarchy consolidation as it is currently a pristine timeline environment and doesn't need any help being so efficient.
  • [Parser] Updated to always load the root config first, followed by the baseconfig, and the main config last.
  • Assigned a default timeline to each root.
  • [TBC] Fix the tracking of No Mere Dream and the maps the Waking the Sleeper
  • [Parser] Missed some code from previous parser build commit
  • [DB] Many manual bubbleDown timelines fixed/removed
  • Use REMOVED-only timelines for Wrath crafted items, Guild Level 25 and Parrlok
    • Wrath Jewelcrafting/Blacksmithing items (158) and Realm First! Guild Level
      25 inside #if blocks: their profession/achievement header gets ADDED_* from
      a wrapper outside any #if, so { REMOVED_4_0_3 } is enough in every build
    • Parrlok (Discord promotion) keeps its exact removal build:
      { "removed 11.0.2.56513" }, inheriting ADDED_11_0_2 from the promotion
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [Style] Normalize runtime XML formatting.
    • Set UTF-8, LF, and tab-based policies for the three runtime XML files.
    • Normalize line endings and correct two script-entry indents while preserving load order, XML values, and embedded binding Lua.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [DB] Various timeline cleanup
  • [Style] Treat assets as binary resources.
    • Clear inherited EditorConfig text-formatting rules for asset paths and BLP, OGG, and WAV files.
    • Mark asset paths and those extensions as binary so Git disables text conversion, diffs, and merges.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • Use REMOVED-only timelines where an ancestor already has the ADDED entry
    With the smarter parser timeline inheritance, nested content can carry just
    the REMOVED entry when a higher element has the matching ADDED entry.
    Converted 1,192 { ADDED_X, REMOVED_Y } timelines to { REMOVED_Y } where the
    nearest timed ancestor is exactly { ADDED_X } and every merged copy of that
    ancestor agrees. Skipped entries inside #if blocks whose ancestor isn't in
    the same branch, and anything under an unavailable u.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [DB] Fix weird Barrens timelines for parses between 4.0.3 and 10.1.7
  • [DB] Cleaned up various weird timeline situations
  • [Parser] Improved timeline inheritance
    • Timeline entries can now partially-merge into their children which already define a partial timeline in order to produce a valid timeline (this considers expected alignment of timeline entries and never merges into CREATED timelines)
    • The existing WARN if a processed timeline starts with a REMOVED entry is now no longer confined to 8.0.0 or higher (Retail parse is clean of this warning now due to the partial-inheritance of timelines)
  • [Style] Set test and locale Lua formatting.
    • Add UTF-8, LF, and tab-based policy for direct-child tests and locales Lua files.
    • Convert the seven scoped Lua files from CRLF to LF without changing source content.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [DB] Fix a weird DM timeline
  • [Forever/Vainilla/TBC] Fixed minilist to the Hall of Legends
  • Restore timelines on single-reference parents; filters and items carry their fields
    • Parents that previously got their timeline from bubbleDownSelf and only
      appear once in their hierarchy carry the timeline again instead of passing
      it to their children through sharedData (148 parents, HQT included).
      Parents reused with differing timelines keep sharedData, as does an
      expansion() parent, which ignores its own timeline.
    • filter() timelines in bubbleDown/bubbleDownSelf use sharedData (BfA PvP
      reagents, TWW Delves, Dalaran recipes, PvP rated recipes)
    • Items using bubbleDownSelf carry the fields themselves (Draenor profession
      books in shared/lib/Structures/Professions, Group Finder satchels, Small
      Corpsefly Egg)
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [Style] Normalize logic Lua formatting.
    • Scope UTF-8, LF, and tab policies to AllTheThings.lua and Lua files
      under lib/ and src/, preserving legacy rules for other paths.
    • Normalize tab indentation and trailing whitespace while preserving
      intentional alignment.
    • Remove leading blank lines and keep exactly one terminating newline.
    • Limit consecutive internal blank lines to two.
      Assisted-by: gpt-6-luna
      Assisted-by: gpt-6.1-sol
  • [Mop/Retail] Bump wago files to 5.5.4.70579 and 12.1.5.70575
  • Update Pit of Saron with InstanceHelper
  • Fix a few minor errors, update ToyDB to 12.1.7.70493
  • [Parser] Added a 'HierarchicalPass' stage so we can consistently apply hierarchical adjustments following all other stages
    [Parser] Don't apply 'awp' directly to Headers with groups since they aren't Things we allow their content to hierarchically-define their expected 'awp' value
    [Parser] Moved Hierarchical Adjustment config settings to root instead of retail since they are based on the resulting addon logic, which is shared by all versions of ATT
    [Parser] Added 'awp' to the HierarchicalMinimumFields so that the minimum value awp can be shifted up to a higher hierarchy even when different 'awp' values are at the same layer (helps to further reduce unnecessary 'awp' field assignments on child groups)
  • Revert "[VSC] Disable final newline rendering."
  • [DB] Added a timeline to a strange situation that ended up wrong without a timeline
  • [VSC] Disable final newline rendering.
  • [DB] Give Kalimdor and Eastern Kingdoms a timeline
  • [Parser] HierarchicalMaximumFields (unused) was using the wrong internal functionality
  • [DB] Use expansionHeaders where the timeline is not expected to be the same as the expansion so it stops being wrong without the _defaulttimeline value
  • Put bubbleDownSelf fields directly on quests
    • 32 quests used q(id, bubbleDownSelf({ ... }, { ... })) to set their own
      fields; the fields now live on the quest itself:
      • timeline + minReputation on the BfA emissary supply quests
      • minReputation on the Legion, Argus, Nazjatar, Mechagon, Shadowlands,
        N'Zoth assault and Iskaara Community Feast quests
      • customCollect on the Korthia covenant mount quests
      • races on the PvP Alliance/Horde Slayer quests
        Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
        Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [Fix] Normalize Khaz Algar quest line ending.
    Remove the isolated carriage return from the War Within achievement header in the Khaz Algar quest file. Normalize its staged line ending to LF without changing Lua code or data.
    Assisted-by: gpt-6.1-sol
  • [Fix] Remove Forever Beta cache reset.
    Remove the Forever-era one-time reset of derived character identifiers.
    Update linked identifier tests to preserve cached identifiers on initialization and verify rebuilds for logins, renames, realm changes, and alts.
    Assisted-by: gpt-6.1-sol
    Assisted-by: gpt-6-luna
  • Removed the bubbleDownSelf from the petbattles and battlepets functions.
  • Drop redundant timeline wrappers from NYI patch-form expansion blocks
    • expansion(EXPANSION.X, patch(...), bubbleDownSelf({ timeline = { CREATED_* } }, ...))
      under ROOTS.NeverImplemented: the root already applies the never-implemented
      flag, so the CREATED_* wrapper is redundant (921 blocks)
    • ADDED_* wrappers in the same form (Sourceless, Unsorted, Hidden Achievement/
      Currency Triggers): patch() already generates the matching ADDED timeline
    • Includes manual NYI fixes for blocks whose ADDED value differed from patch()
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Revert "Adjusted the logic for Sourceless not to put the sharedDescription on anything but headers."
  • Adjusted the logic for Sourceless not to put the sharedDescription on anything but headers.
  • Move timelines out of bubbleDown/bubbleDownSelf across the standard DB
    • Remove 469 timeline bubbleDown/bubbleDownSelf wrappers (202 files): put
      the timeline on the element that owns it, or rename the wrapper to
      sharedData when it only reached direct children; 3+ siblings sharing a
      value use sharedData. Wrappers that also carry other keys keep those.
    • Left untouched where a move would change data (merge gains/losses on
      shared headers, enclosing kept wrappers or timeline events, no safe
      insertion point, comments in the wrapper), plus #if spans and 17 - NYI.
    • Stuffed Deviate Scale Pouch carries ADDED_10_1_5 itself
    • TWW/Midnight World Drops, TWW Level 70 Boost, TWW Heroic Edition HQTs and
      Khaz Algar quests use the expansion/zone default instead of 11.0.0/12.0.0
    • Drop dead 4th-argument timelines on three Khaz Algar achievement headers
    • Weapon Master headers carry REMOVED_4_0_1 directly
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Keep HiddenQuestTriggers timelines off merged headers
    • Remove timelines from generic HQT headers (expansion, class, continent and
      launch-zone maps, QUESTS/RARES/WORLD_BOSSES/PVP/DELVES/HOUSING/etc.) and
      push them onto the elements below, so merging no longer bleeds them
    • Replace the 67 timeline wrappers that stamped HQT headers (bubbleDownSelf,
      timelineSelf, applyDataSelf) with direct timelines, or sharedData when 3+
      siblings share one
    • Give patch-specific maps/headers one base timeline across every copy
      (Nazjatar/Mechagon 8.2.0, N'Zoth assaults 8.3.0, Argus 7.3.0, Isle of
      Thunder/Giants 5.2.0, Timeless Isle 5.4.0, Tanaan 6.2.0, Siren Isle 11.0.7,
      Undermine 11.1.0, K'aresh 11.2.0, Coiled Isle 12.1.0, raid instances)
    • Drop default-equal wrappers and child timelines that repeat their base
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [DB] Reparsed yet again for another comparison base.
  • Reverted expansion update to not brick classic parser.
  • [DB] Example expansionHeader to clean up Timewalking listings
  • Merge remote-tracking branch 'origin/master'
  • Prune default-equal expansion timelines and fix bleeding zone/HQT timelines
    • Prune expansion() wrapper timelines that match (or are close enough to)
      the expansion default: WRATH 3.0.2, CATA 4.0.3, LEGION 7.0.3, BFA 8.0.1, etc.
    • HiddenQuestTriggers: move timelines from wrappers onto the zone header
      (Silithus: The Wound 8.3.0, Nazjatar/Mechagon 8.2.0, Isle of Thunder 5.2.0,
      Timeless Isle 5.4.0, Argus 7.3.0) so they no longer bleed onto the
      expansion header
    • Honeyback Hive: 8.2.5 lives on the faction header, not the shared maproot
    • Argus: use the 7.3.0 base from metadata; drop redundant sub-zone and
      shared-header timelines
    • Mechagon Factions: inherit 8.2.0 from Mechagon instead of 8.0.1
    • Level 48/50/100/110 boost and class trial files: timelines on the headers
    • Brewfest: put the timeline on the quest (fixes empty sharedData error)
    • Includes other in-progress .db/standard edits
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [DB] Fixed timelines of Mole Machine listing
  • [Parser] Reverted _defaulttimeline removal on expansion shortcut so that they work as expected again
    [Parser] Added an expansionHeader shortcut for special cases where a non-default timeline needs to be applied to an expansion object (simpler way of structuring expansion + forcetimeline)
  • Move bubbleDownSelf timelines onto auto headers
    • header(HEADERS.X, ID, bubbleDownSelf({ timeline = ... }, { ... })): the
      timeline now sits on the header itself (113 headers; bare child lists get
      a 'groups' field). bubbleDownSelf already stamped the header, so only
      its contents change (they now inherit). Harandar's quest header and two
      Heritage headers keep a bubbleDownSelf for their other keys.
    • Zul'Aman's The Curse of Ula'tek (62297 / 62413 by #if): each branch's
      header carries its own timeline; the shared body is wrapped in groups.
    • Allied Races' header and Rise of the Red Dawn's expansion() had outer
      timeline wrappers that would re-stamp the new header timelines' contents;
      moved onto the header / its child.
    • Duke Hydraxis (Molten Core): NPC timeline moved off its bubbleDownSelf.
      Also includes Crieve's edits under .db/standard (Molten Core's Duke
      Hydraxis applyclassicphase, Siege of Orgrimmar's a()/h() achievements, and
      any others made at the same time).
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Move bubbleDownSelf timelines onto NPCs
    • n(npcID, bubbleDownSelf({ timeline = ... }, { ... })) for positive numeric
      NPC IDs: the timeline now sits on the NPC itself (115 NPCs). Header n()
      calls are left alone. bubbleDownSelf already stamped the NPC, so only its
      contents change (they now inherit).
    • Ogom the Mangler: also move its #if AFTER 8.0.1 isBounty onto the NPC and
      drop the wrapper.
    • Celestial Dungeons' CELESTIAL_DUNGEON_DIFFICULTY and Diablo Events'
      GREEDY_EMISSARY_EVENT headers had bubbleDownSelf timelines that would
      re-stamp the narrower NPC timelines' contents; their timeline moves onto
      the header (already stamped, so unchanged there).
    • Fix 19 floating '{' lines left by the conversion.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Move bubbleDownSelf timelines onto items, achievements and objects
    • i/ach/o(ID, bubbleDownSelf({ timeline = ... }, { ... })): the timeline now
      sits on the element itself (61 items, 196 achievements, 77 objects; bare
      child lists get a 'groups' field). bubbleDownSelf already stamped the
      element, so only its contents change (they now inherit).
    • 17 outer timeline wrappers that would otherwise re-stamp those elements'
      children were converted too: 14 n/header/m owners (bubbleDownSelf or
      keyed, so the owner was already stamped) and 3 expansion() owners
      (timeline moved onto their direct children).
    • Fix floating '{' lines left by the conversion (39) and in Lunar
      Festival's preWrathEldersHeader (2).
    • Fix the indentation of two inserted timeline lines (and their ToDo
      comments) in MoP Achievements.
      Skipped: two Pet Battles achievements whose timeline sits inside
      #if NOT ANYCLASSIC, and two Group Finder satchels with mixed tables.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Move bubbleDownSelf timelines onto instances and encounters
    • inst(ID, bubbleDownSelf({ timeline = ... }, { ... })) -> the timeline sits
      on the inst() itself (11 instances: SoD Nightmare Grove, Scarlet Enclave,
      Demon Fall Canyon, Karazhan Crypts; TBC Zul'Aman; the six Cata raids).
    • e(ID, bubbleDownSelf({ timeline = ... }, { ... })) -> same for 12
      encounters (Vault of Archavon, Baradin Hold, MoP world bosses, Siege of
      Boralus). Ordos keeps a bubbleDownSelf for its #if AFTER WOD 'u'.
    • Remove the empty bubbleDownSelf({ }, ...) wrappers in Azjol-Nerub and
      Liberation of Undermine.
      bubbleDownSelf already stamped the element itself, so the instances and
      encounters keep their timelines; their contents now inherit them.
      Also includes Crieve's edit to The Mechanar.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Use maproot() for standard zone files
    Replace root(ROOTS.Zones, m(CONTINENT, { m(ZONE, { ... }) })) chains with
    maproot(CONTINENT, ZONE, { ... }) in 911 zone files (layers are followed
    while each holds only the next m(); a wrapper on the last layer is passed
    through as maproot's final argument). Verified structurally identical to
    the previous nesting, ignoring whitespace and trailing commas.
    Timeline wrappers inside maproots:
    • bubbleDownSelf / keyed bubbleDown: timeline moved into the maproot data
      (the zone was already stamped).
    • plain bubbleDown over a child list (almost all at continent level):
      never stamped the continent, so the chain is extended onto the single
      zone (maproot(DRAGON_ISLES, VALDRAKKEN, { timeline = ..., ... })) or the
      timeline goes onto each zone, instead of onto the shared continent.
    • Pandaria (The Wandering Isle), Shadowlands (Oribos Professions) and
      Khaz Algar (Quests) no longer stamp their continent: the timeline moves
      onto the zone, or onto the quests under Khaz Algar's shared QUESTS header.
      Also includes Crieve's concurrent edits to these files.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [Classic] Fixed Wrath of the Lich King achievement timelines for First Aid.
  • [DB] Reparsed all DBs for future comparisons.
  • Added "pvp" to thje HierarchicalNonRepeatFields list. A reparse is coming shortly for future comparisons.
  • [Anniversary] 2026 Hallow's End rings
  • Fix a few minor errors
  • Don't stamp timelines onto shared continent headers
    082c3fd moved timelines from plain bubbleDown wrappers onto their
    owner. A plain bubbleDown over a bare child list only stamps the
    children, never the owner, so for 35 continent-level m() headers (Dragon
    Isles, Shadowlands, Kul Tiras, Zandalar, Broken Isles, Draenor) the owner
    gained a timeline it never had - and since every zone file merges into
    those headers, they picked up mixed timelines (the same bug as the
    Battlegrounds header fixed in 41130c0).
    Move each timeline back off the continent and onto its direct children,
    matching what the original wrapper stamped. The Primalist Future also
    restores its 10.0.5 timeline on its sub-headers (rares via sharedData).
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Use battleground() for standard battleground files
    Replace root(ROOTS.PVP, pvp(n(BATTLEGROUNDS, { m(MAP, { ... }) }))) with
    battleground(MAP, { ... }) in the 19 battleground/brawl files that declare
    a map (phased ones become battleground(MAP, applyclassicphase(PHASE, {...}))).
    Isle of Conquest and Strand of the Ancients also move their timeline from
    a bubbleDown wrapper onto the map.
    battleground() doesn't apply pvp(), so standard's PvP root header now
    gets pvp() like Forever's (.config/.main.lua). Training Grounds and the
    battleground rewards declare n() headers and keep their root() form.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Fixed an issue that caused by a bad bubbleDown transplant that was causing all Battlegrounds to disappear pre-Cata.
  • Fix parser errors in Scholomance and Halls of Stone
    • Scholomance: SCHOLOMANCE_LEGACY_DATA is now a plain array (its
      bubbleDownSelf wrapper was removed in 082c3fd), so iterate it
      directly instead of its no-longer-existing .groups field.
    • Halls of Stone: restore the closing paren for root(expansion(
      applyclassicphase({...}))), lost when the InstanceHelper rewrite
      (9522e9f) and the instance timeline change (badbcaa) combined.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Move timeline-only bubbleDown data onto difficulties
    Same treatment as instances: d(ID, bubbleDown({ timeline = ... }, { ... }))
    now carries the timeline on the d() itself (bare child lists get a
    'groups' field), and wrappers around groups of d() elements (Revival
    Catalyst Console) put the timeline on each difficulty.
    Re-running the outer-wrapper pass afterwards also converted the Season 4
    header() wrapper above the Revival Catalyst difficulties and one instance
    wrapper that would otherwise have re-stamped the new difficulty
    timelines' children.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Move outer bubbleDown timelines onto their elements
    A timeline bubbleDown wrapping a zone/instance/header stamps its value on
    every descendant without a timeline, overriding what nested timed
    elements would pass down through inheritance. This also regressed 86
    quests converted in 9b0337a, whose inner wrapper had been shielding
    their children from the outer one.
    For every timeline wrapper that encloses a timed element with children:
    • m/inst/n/header/d/race owners: move the timeline onto the element
      (bare child lists get a 'groups' field); other wrapper keys are kept.
    • expansion() owners: drop wrappers equal to the expansion default, and
      move non-default timelines onto the direct children (expansion()
      discards its own timeline).
    • Season of Discovery, Argent Tournament, MoP Warlock, Crafted Items TBC,
      Scholomance legacy data and the Collector's Edition Classic block:
      timeline moved onto the direct children.
    • Broken Shore: the zone is 7.0.3, so its 7.2.0 exploration and world
      quests keep ADDED_7_2_0 via sharedData on those headers.
      Where a removed bubbleDownSelf sat under applyclassicphase, the phase now
      lands on each child instead of the shared header. The Scourge Invasion
      bubbleDownFiltered is left as-is.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [Parser] Filter-based Recipe conversion now ignores 'type'-flagged groups (these are expected to convert into a specific Type) [after compile]
  • [Parser] Adjustments that don't require compiling yet
    • Revised exception wording when failing to merge an array value
    • Check null input using is for parsing array value
    • Use debug warn for the automatic conversion of Sourced objective-item into qis when flagged by Blizzard as a 'Quest Item' (once cleaned up we can make a regular warn)
  • Update Halls of Stone with InstanceHelper
  • Wrap bare timeline constants in braces
    'timeline' is an array; replace 'timeline = ADDED_X' with
    'timeline = { ADDED_X }' wherever the value is a single global timeline
    constant. File-local constants that are already tables (TIMELINE_LFR,
    REMOVED_WITH_CATA in Onyxia's Lair, etc.) are left as-is.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Move timeline-only bubbleDown data onto instances
    Instance files wrapped their inst() in bubbleDown/bubbleDownSelf({ timeline
    = ... }), which stamped that timeline onto every descendant without one,
    overriding timelines that sub-groups pass down through inheritance (e.g.
    Magtheridon's Black Sack of Gems contents got ADDED_2_0_3 instead of
    ADDED_2_4_0). Move the timeline onto the inst() itself and drop the
    wrapper; instances with a bare child list get a 'groups' field.
    Side effects in parser output:
    • Children of timed sub-groups now inherit the sub-group's timeline.
    • Explicit child timelines no longer clear 'u = REMOVED_FROM_GAME' on
      their parents (Blackrock Foundry, Emerald Nightmare achievements).
    • Where the wrapper was bubbleDownSelf inside applyclassicphase, the
      classic phase now lands on each inst() instead of the shared expansion
      header, matching files that used plain bubbleDown.
      The SL 9.0.1 block in NYI Sets keeps its wrapper since it covers many
      non-instance headers.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Adjusted some timelines in Onyxia's Lair.
  • Adjusted timeline assignments for A Hero's Reward in Molten Core.
  • Adjusted the Earth to Earth quest in Shattrath City.
  • Move timeline-only bubbleDown data onto quests
    Quests wrapped in bubbleDown/bubbleDownSelf({ timeline = ... }) now carry
    the timeline directly, since children inherit it. The timeline goes before
    the first of races/classes/maps/lvl/cost/groups (and similar), matching
    existing quest field order; quests passing a bare child list get a
    'groups' field.
    Skipped: quests whose own timeline differs from the wrapper's (Onyxia's
    Lair, Shattrath 41160), a wrapper timeline containing a preprocessor
    block (Molten Core), and subtrees with u = NEVER_IMPLEMENTED,
    REMOVED_FROM_GAME or CONDITIONALLY_AVAILABLE.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [DB] Missing awp for Classic timeline
  • [DB] Fix timelines in First Aid file
  • Cleaned up the timeline assignments for the Tier 0.5 sets.
  • Prune quest descendant timelines that match their ancestor
    Extend the quest timeline pruning to a quest's whole subtree: remove a
    descendant's timeline when it exactly matches its nearest timed ancestor,
    collapse children left with no other fields, and unwrap tables left with
    only a 'groups' field.
    Same guards as before: nodes with their own 'u' (and their subtrees),
    timelines inside a preprocessor block, and function-built child lists are
    left alone.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Prune quest children timelines that match their quest
    Timelines are inherited, so a direct child of a q/quest/hqt whose
    timeline exactly matches the quest's own is redundant. Remove it, and
    collapse children left with no other fields to bare calls.
    Skipped: quests or children with their own 'u' (an explicit child
    timeline clears the quest's 'u'), quest timelines inside a preprocessor
    block, and child timelines in a different preprocessor branch than the
    child itself.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [DB] Rebuild DB for future comparisons.
  • Add GenerateOnUpdateRemovedWithPhase function template
    Replace the inline OnUpdate functions that mark a group Removed From
    Game while a phase's Unobtainable Filter is active (otherwise clearing
    'u' and assigning 'rwp') with
    FUNCTION_TEMPLATES.GenerateOnUpdateRemovedWithPhase(phaseID, rwp),
    which registers a shared function in ExportDB.OnUpdateDB.
    Onyxia's Lair 40-man now uses the template too, dropping its Classic-only
    description.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • Revert "The Labyrinth: Timeline out Fabled Achievement"
    • It was changed to Second Reset
    • This reverts commit ce94378.
  • The Labyrinth: Timeline out Fabled Achievement
  • Archeology - No longer using bubbleDownSelf for timeline.
  • Inscription - No longer using bubbleDownSelf for timeline.
  • Hallow's End: Restore Faction Buckets under respective faction headers
    • Add the proper provider for Horde Bucket
    • Ref: ee33edf
  • [DB] Fix a bad expansion header
  • Hallow's End: Fix a bad provider type for Candy Bucket
  • Fixed a bug with expansions caused by _defaulttimeline not working correctly.
  • Phase 4 of TBC anniversary
  • Strip redundant timelines from expansion headers
    expansion() discards a timeline set on itself and falls back to
    EXPANSION_DEFAULT_TIMELINES, which children inherit via InheritingFields.
    Remove bubbleDown/bubbleDownSelf timeline wrappers (and direct timeline
    fields) on expansion headers whose timeline equals the expansion default.
    For WOD, ADDED_6_0_2 and ADDED_6_0_3 are treated as equivalent.
    Headers whose nested groups carry their own timeline or a u =
    REMOVED_FROM_GAME / NEVER_IMPLEMENTED value are left as-is, since
    removing the wrapper there would change parser output.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01V6K41tQzmedr4ohuFGnoFS
  • [TBC] Fix tracking of objectives
    • [TBC] Fix the tracking of Netherwing Crystals
    • [TBC] fix the tracking of The Great Netherwing Egg Hunt
  • [DB] Classic builds now utilize the new phase field.
  • [Phases] Move release phases to a phase field.
    Release phases (PHASE_ONE, TBC_PHASE_TWO, ...) were stored in the
    unobtainable 'u' field. They now use a dedicated 'phase' field, and 'u'
    only holds unobtainable reasons.
    Parser:
    • Validate, merge and export 'phase' alongside 'u', including achievement
      criteria and ItemDB/NPC merges.
    • Warn about and move release phases still assigned to 'u'; error when
      'phase' holds an unobtainable reason.
    • 'phase' is a HierarchicalNonRepeatFields entry, so children inherit it.
      Database:
    • applyclassicphase and the recipe helpers set 'phase'.
    • OnUpdate functions that toggle REMOVED_FROM_GAME no longer assign a
      phase; Season of Discovery checks set 't.phase'.
      Addon:
    • New Phase filter, sharing the Unobtainable settings so saved phase
      choices are kept.
    • New phase tooltip information type, phase status icons, merging and
      cloning support; New With Patch and Season of Discovery windows read
      'phase'.
      Assisted-by: Claude Opus 5.5
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XU6d7kXjP2HpHbyDAUv3Cc
  • [Contrib] standardize coord and map placeholders.
    Use decimal coordinate placeholders (XX.X, YY.Y) and MAPID_CONSTANT consistently across quest, rare, and treasure templates.
  • [Contrib] Updated Standard.lua templates to use field = instead of ["field"] =
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_015oEAmXPUvov6EjVDFxB5ny
  • [DB] Simplified table field declarations from ["field"] = to field =
    Converted bracketed string keys to plain identifiers wherever the key is a
    valid Lua identifier and not a reserved word. Keys with spaces, punctuation
    or other non-identifier characters keep the bracketed form. The externally
    generated 00 - Item DB/.dynamic files are left untouched.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_015oEAmXPUvov6EjVDFxB5ny
  • [Parser] Pushed up two config tags for ObjectDB harvesting
    • DoConsolidateObjectDB - Harvested locales are stored directly into ObjectDB rather than dynamic files
    • DoRetryObjectDBMissingThreshold - Defines how many missing locales for an object will trigger a retried lookup from Wowhead on next parse
  • [DB] Rebuilt all dbs again for more future comparisons. (Standard DB cleanup coming shortly.)
  • Update Halls of Reflection with InstanceHelper
  • [DB] Add WoW: Forever Skyborne Heroic and Epic Pack rewards
    Forever:
    • New promotions file with the Skyborne Heroic Pack (Cerulean Prideclaw,
      Shen'dorei Skyseer's Garb, Shen'dorei Windwell, Veteran Adventurer's
      Rucksack) and the Skyborne Epic Pack (Veteran Adventurer's Loyal
      Companion and Outdoor Wear, Lordaeron Forever and Shen'dorei Tabards,
      and the Zergling, Panda Cub, Mini Diablo and Pachimari pets), using
      their Forever item IDs.
    • Register the Forever mounts in MountDB, the Windwell in ToyDB and the
      four pets in PetDB.
    • Include the parsed Camelot database.
      Shared/Standard:
    • Move the Collector's Edition, Heroic Edition, Epic Edition and
      World of Warcraft: Forever headers into shared/lib/Headers/Promotions
      so both databases can use them.
    • Drop the dead #if FOREVER blocks from the standard Collector's Editions
      file and note that the two tabards are Forever exclusives.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [DB] Rebuilt Classic DBs for future comparisons.
  • [Classic] Found another one.
  • [Classic] Removed some strange unobtainable logic that's no longer relevant now that phases are inherited.
  • [DB] Added coords and a confirmed NPC for Technique: Mark of the Midnight Runestag
  • Whoops.
  • [Classic] applyclassicphase no longer uses bubble down as the u field is now inherited.
  • Retired the bubbleDownAndReplace function completely.
  • [DB] Rebuilt DBs for comparisons.
  • Update Halls of Lightning with InstanceHelper
  • Fix a few reported errors
  • [DB] Rebuilt all DBs as the commit I'm going to do next has the potential to be very destructive.
  • [Forever] Rebuilt the DB.
  • [Forever] Add new zone drops, treasures and item chains
    • Zone drops: trash gear in Ruins of Lordaeron, City of Dalaran and Hall of
      Thanes (plus Hall of Thanes' food and drink), the Royal Tea, Root Tea,
      Bear Brisket and Savory Whimsyfin Delight recipes.
    • Mathystral Amulet chain (Darkshore): fragments combine into the amulet,
      which summons Baron Marinous at the Fathom Stone; he drops the Clouded
      Water Globe, which now starts Baron Marinous (98028) via qs.
    • Rotheap Innards (Wetlands) trade to Rethiel the Greenwarden for the
      Malignant Root.
    • Treasures: Dented Chest (Zephras Isle), Knife with the Keystone Fragment
      (Undercity), Traveler's Cache (Stranglethorn, opened with the Brittle Key
      from the new Hidden Stash in Stonetalon), Arena Spoils in the Gurubashi
      Arena chest.
    • Vrang's Game: the Trapped Game objective lists the Sprung Trap object and
      its coordinates.
    • Excavation Tools (86613) is started by the Excavation Tools item (qs).
    • Herb seeds gathered from Peacebloom, Silverleaf and Briarthorn.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Forever] Add rare-dropped companion pets and their PetDB species
  • [Forever] Add new rare drops and rares
    • Add Forever's new loot to existing classic rares (the Barrens, Durotar,
      Darkshore, Stonetalon, Tirisfal, Hillsbrad, Loch Modan, Alterac,
      Silverpine, Ashenvale, Swamp of Sorrows, Thousand Needles, Feralas,
      Wetlands, Elwynn, Mulgore and Redridge).
    • Add new rares with their loot: Den'dralass, Tel'daeor the Stormspeaker,
      Fernfeather, Mystmane, Slydris, Snapbeak the Quick and The Lost One
      (Zephras Isle); Blightsculler, Decrepit Harvester and The Condemned One
      (Tirisfal); Stormherald Ukta, Thornstarter Igleg and Snarlsnout
      (Mulgore); Wrathvine and Nightscreech (Teldrassil); Dustwind Eggtender
      (Durotar); Dro'zem the Blasphemous (Redridge).
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Forever] Add new boss drops in classic dungeons
    • Scarlet Monastery: Interrogator Vishas, Bloodmage Thalnos, Houndmaster
      Loksey and Arcanist Doan.
    • Razorfen Kraul (Roogug, Aggem Thorncurse), Razorfen Downs (Ambassador
      Bloodrage) and Gnomeregan (Grubbis, Crowd Pummeler 9-60).
    • Camp Blueprint recipes from Cookie, Gelihast, Lady Anacondra, Lord
      Serpentis and Houndmaster Loksey.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Forever] Add new companion pets and their PetDB species
    • PetDB (FOREVER section): Azure and Bronze Whelpling (57, 1563), Bitter
      Baitling (5094), Brown and Red Ground Squirrel (5154, 5155), Jungle Boa
      (5153), Plagued and Undercity Cockroach (5151, 5152), Prairie Wolf Pup
      (5121), plus the Frosty and Viridian Lashling Buds (species still unknown).
    • Add the pet items to their sources: Halpa, Xan'tish and Jeremiah Payson's
      pet stock, Mayhoa Skyhoof in Orgrimmar, Jang's Bitter
      Baitling prize, and the Black Market's whelplings and Lashling Buds.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Forever] Add new vendor items and vendors
    • Add new items to existing vendors (Darkspear Islands supplies, Pix
      Xizzix's belts, Brave Stonehide tabards, Aisarra's Spiritcaller patterns,
      Thunder Bluff ceremony supplies, Serrated Knife at the bow vendors).
    • Add new vendors: Dala Fairmaw and Rhylin Stonethorn (Mount Hyjal), the
      Pack Kodo handlers, the Gadgetzan and Everlook quartermasters, Dalaran's
      Alterac Mountains vendors, the Wetlands bartender and chef, the Zephras
      Isle innkeepers, Dorb, Jenna, Nida Winterhoof, and Jang's Fishing
      Extravaganza prizes.
    • List Simple Flour, Thick Logs and the Apprentice's Herb Pouch / Mining
      Pack as common vendor items.
    • Fix Pattern: Trapper's Leather Belt's ID (252766) in the Merchant's Favor
      recipe lists.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Forever] Update coord of qg 658.
  • Vindicaar/Vendors: Fix incorrect gold price on Decor
  • [Forever] Add SoD-origin quest chains and the remaining library books
    • Add 17 Season of Discovery quests that Forever reuses: the Alliance
      paladin Althalaxx Orb chain, the rogue Dead Drop quests, Terror of the
      Desert Skies, No Honor Among Thieves, and both Storm, Earth, and Fire
      shaman chains (rune rewards left out).
    • Add the 22 missing library book quests and include every book in the
      Friend of the Library requirements.
    • Add each library book's object as a treasure in its zone, with the book
      inside it.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Forever] Add new quest rewards and provided quest items
    • Add 57 new Forever rewards to existing quests (ADDED_1_60_1 on items
      whose quest predates Forever).
    • Add provided items (qi) for the Zephras Isle Taming the Beast, Call of
      Fire, Embracing the Elements and class trainer note quests.
    • Fix A Friend of the Family's Menethil Statuette ID (279598) and use the
      provided Titan Relics (287958/287959) on Earthen Echo / Prehistoric Prism.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Forever] Add new crafted items and Winter Veil patterns
    • Crafted items: Blacksmithing plate and Mithril Claymore, Leatherworking
      leather sets, Engineering 9-60 Battery Pack, Winter Clothes/Boots, and new
      Cooking, Fishing, Herbalism and Mining sections (new dishes, smelting,
      crafting stations). Fix the over-indented Leatherworking leather list.
    • Feast of Winter Veil: Green/Red Winter Clothes and Winter Boots patterns
      in the mailbox, with their profession DB recipe links.
    • headerIDs: assign Trade Logistics, Craftsman's Writs and Waylaid Crates.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Forever] Group Craftsman's Writs and Waylaid Crates under Trade Logistics
    • Add a shared TRADE_LOGISTICS header (Merchant's Favor icon) for the
      Azeroth Commerce Authority / Durotar Supply and Logistics systems.
    • Nest the Craftsman's Writs and Waylaid Crates features under it.
    • Add the Uncertified Scribe vendors (Forged Delivery Receipt, Forger's
      Quill) in a new trade logistics.lua.
    • Add Crate Return (93862) as CREATED, turning in a Notarized Shipping
      Container.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Add the Forever Waylaid Crates as an expansion feature.
    • List the Waylaid Crate and its 30 typed crates (Gathering and Crafted, by tier) with the Sealed crate each one becomes.
    • Move the six "A Sealed Crate" quests and the two Shipping Label quests out of Redridge and the Barrens; the crate turn-ins use aqd/hqd (Marcy Baker / Dokimi) and list their Merchant's Favor rewards.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Add the Forever Craftsman's Writs as an expansion feature.
    • Add all 150 Craftsman's Writ daily quests, grouped by profession, each started by its writ item (qs) with the crafted item as its cost.
    • Include the known customers (cr + coord) and Coin Pouch rewards; writs without a known customer have a TODO.
    • List the writs inside their Sealed Journeyman's, Expert's and Artisan's Writ envelopes.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [MoP] Bump wago files to 5.5.4.70531
  • [Data] Add placeholder instance files for the new Forever dungeons.
    • Krol'dok Stronghold, Alcaz Prison, Blackmaw Hold and The Shaper's Terrace: placeholder instance IDs (78792-78795), Blizzard's level ranges, and their final bosses from the Spelunker achievements.
    • Manor Mistmantle: map 3109 / zoneTextAreaID 17191; not on the launch list, so marked CREATED.
    • The Drowned City: set the level to Blizzard's 35-40 range.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Add a placeholder instance file for The Drowned City.
    • Placeholder instance ID (78791); the dungeon isn't in the client's Map/AreaTable/DungeonEncounter data yet.
    • Add its five quests (four unconfirmed, marked CREATED) and a commented encounter template for Var'Taka and the final boss (260274, from Experienced Spelunker).
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Add the remaining unconfirmed Forever quests outside the Craftsman's Writs.
    • Lunar Festival: Frostleaf the Elder and Mossheart the Elder.
    • Stranglethorn Fishing Extravaganza: the three Tip the Scales quests.
    • Feast of the Winter Veil: A Winter Veil Gift.
    • Elwynn Forest: Camping 101: Engineering (98287), and name its entry in the other engineering altQuests lists.
    • Zephras Isle: Welcome!, The Malfunctioning Construct, Hopping Helpers and Valanaar Vintages.
    • Alterac Mountains: Message from the Supreme Magister.
    • All are marked TIMELINE.CREATED_1_60_1 until a quest giver is confirmed.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Remove the duplicate Beasts of Thunder Ridge quest from Durotar.
  • Fix some reported errors, clean some formtting
  • [Logic] Swapped a potentially double-recursive call for cost calculations into a single-recursive stand-alone filter function
  • [Logic] Cleanup and localize some Filter function usage
  • old removed, now obtainable again, achievement found in a brawl
  • Fix a few minor errors
  • [FOREVER] Reparsed the DB.
  • [Data] Add more missing Forever quests and refine quest sourcing.
    • Add 62 missing Forever quests (Ashenvale, Hillsbrad/Alterac, Redridge, Swamp of Sorrows, Orgrimmar, Arathi, Wetlands, Barrens, Undercity, Silverpine, Feralas and others), plus 6 missed Druid/Shaman class quests.
    • Add an n(QUESTS) header to Mount Hyjal.
    • Mark unconfirmed quests (no quest giver on Wowhead yet) as TIMELINE.CREATED_1_60_1.
    • Use qs for item-started quests (Goliath's Wristguards, Singed Note, Advertising License Applications) and add their drops to ZONE_DROPS.
    • Use qi for provided quest items instead of objectives.
    • Add object/creature sources and coordinates to quest objectives.
    • Add the Murloc-hide Gloves reward to Deep Ocean, Vast Sea and the 1.60.1 timeline to Forever profession book rewards on starter quests.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Use the Forever class race constants on Horde Shaman and Alliance Paladin quests.
    • Replace HORDE_ONLY with HORDE_SHAMANS on 32 Horde Shaman quests and ALLIANCE_ONLY with ALLIANCE_PALADINS on 29 Alliance Paladin quests (starter zone quests in Durotar, Mulgore and Zephras Isle are unchanged for now).
    • Add the Darnassian Knife reward to WANTED: Jai'vhanel in Darkshore.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Restructure A Moon-Kissed Blade, move Research Access, and drop lvl = 1 in Forever.
    • A Moon-Kissed Blade: mirror The Test of Righteousness (2/3); nest Seeking the Kor Gem under it, add the Goblin Woodcarver and Kor Gem droppers, and describe where the Enchanted Silver Ingot is in Shadowfang Keep.
    • Move Research Access to the Library Books feature, which already swaps the librarian by faction.
    • Remove lvl = 1 from the Forever DB; players can't be below level 1.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Add the missing Forever class quests and class race constants.
    • Add 42 new Forever class quests (Horde Paladin, Alliance Shaman, Priest racials, Rogue, Mage, Druid, Warrior) to their zone files.
    • Add Forever race constants for class/race combinations (ALLIANCE_PALADINS, HORDE_PALADINS, ALLIANCE_SHAMANS, HORDE_SHAMANS) from CharBaseInfo.
    • Use them on existing Alliance Shaman and Horde Paladin quests in place of ALLIANCE_ONLY/HORDE_ONLY and single-race lists.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Add the missing Forever quests in Stranglethorn Vale and update the Desolace quartermasters.
    • Stranglethorn Vale: add 12 new Forever quests.
    • Desolace: sync Gorhak and Molkar's vendor lists with Wowhead and add their Carved Centaur Totem costs.
    • Desolace: restore the Buying Friendship delivery objective creatures.
    • Add missing NPC titles to creature comments.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Fix Forever quest references in Desolace and Swamp of Sorrows.
    • Add The Visiting Mage (93464) to Swamp of Sorrows; it's the source
      quest for Notes on Draenethyst and was missing ("Referenced Source
      Quest 93464 has not been Sourced").
    • Remove hidden kill-credit NPC references ([DNT] Kill Credit) from the
      Khan Jehn (Magram), Test Your Theory and A Cleansing Cry objectives.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Add the missing Forever Darkspear Islands battleground quests.
    Add the 20 missing Darkspear Islands quests from Wowhead's Forever data:
    Conflict at Darkspear Islands / Darkspear Islands Clash mark turn-ins
    (levels 40-60 plus a second level 30 version), The Battle for Darkspear
    Islands! win quests for Nizook Boof and Brelinda McFarry, and the
    Darkspear/Theramore Basic, Standard and Advanced care packages.
    Bracketed quests use lvl = { min, max } like the other battlegrounds;
    top brackets without a level 60 version stay available at 60. The hidden
    "Credit" win objective is omitted. Care packages and one Clash quest
    have TODO comments where Wowhead doesn't list the giver or objectives.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Add the missing Forever quests in Shen'dralas.
    Add the 19 Forever quests in Shen'dralas, using Wowhead's Forever data
    for quest givers, coordinates, objectives, reputation requirements and
    quest chains: the Magram (Alliance) Valley of Bones storyline with Orgrul
    and the Gelkis (Horde) storyline with Nerlokh. These complete the chains
    leading into the Desolace Khan Jehn quests.
    Quest givers and objectives that Wowhead doesn't list yet are marked
    with TODO comments rather than guessed.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Add the missing Forever quests in Desolace.
    Add the 23 Forever quests in Desolace that were missing from the
    database, using Wowhead's Forever data for quest givers, coordinates,
    objectives, reputation requirements, quest chains and rewards:
    Gelkis/Magram centaur quests (Khan Jehn, Khan Hratha, crafting turn-ins,
    Buying Friendship, Economic Warfare), Carved Centaur Totems, Notes on
    Draenethyst, Hate the Hatefury and Vahlarriel's Vengeance.
    Quest givers and objectives that Wowhead doesn't list yet are marked
    with TODO comments rather than guessed.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Add the Apple Bob treasure to Hallow's End.
    Add o(180523) Apple Bob, which gives i(20516) Bobbing Apple, to the
    Hallow's End treasures in both the Forever and standard databases
    (standard: timeline ADDED_1_8_0).
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [FOREVER] Rebuilt the DB.
  • [Settings] Don't require Exploration for Insane Mode in Forever.
    Exploration is no longer enabled by default or required for Insane Mode
    in Forever, and its tracking checkbox is marked as WIP there, as in Retail.
  • [Data] Add an exploration position harvester for Forever.
    • Move ExplorationAreaPositionDB.lua from .config/exports to the new
      .config/exploration folder.
    • Add ExplorationPositions.py, which estimates missing exploration
      coordinates from DB2 data: the centre of each area's largest
      WorldMapOverlay hit rect, on every map whose art carries one of the
      area's overlay pieces. Estimates are validated against the harvested
      positions each run (median 1.0 map units off, all inside the overlay
      rect) and written to ExplorationPositions.lua with a report.
    • ExplorationPositions.lua keeps its estimates in a local table and
      injects them into ExportDB.ExplorationAreaPositionDB only for area/map
      pairs with no harvested coordinates (560 positions for 559 areas).
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • Update Gundrak with InstanceHelper
  • Fix some reported errors
  • [Data] Add missing Forever exploration areas and sort exploration headers.
    Using UiMapAssignment (zone -> AreaID) and AreaTable (child areas),
    add every child area that has a WorldMapOverlay and isn't already
    listed in any zone file (40 areas across 10 zones):
    • Arathi Highlands, Dun Morogh, Dustwallow Marsh, Eastern
      Plaguelands, Mulgore, Tirisfal Glades, Winterspring, Zephras Isle.
    • New exploration headers for Mount Hyjal and Shen'dralas.
    • Areas that weren't explorable in the original classic data get
      timeline ADDED_1_60_1 (matching Elwynn Forest); zones that are
      already ADDED_1_60_1 don't repeat it.
      Also sort every exploration header alphabetically and switch
      n(EXPLORATION, ...) to explorationHeader(...) in Riverglades and
      Zephras Isle.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Resolve version preprocessors in the Forever database.
    Forever ships as 1.60.0 with no data beyond 1.80.0, so:
    • Remove #if AFTER 10.1.7 and #if AFTER CATA blocks (Gnomeregan
      retail-only entries, Cataclysm exploration areas in Durotar and
      Mulgore, Brazier of Invocation note), keeping their #else branches.
      The Cataclysm-only areas are absent from the Forever AreaTable.
    • Unwrap the always-true #if BEFORE 4.0.3 blocks in the Tier 0.5
      dungeon set quests.
    • #if AFTER TBC blocks are intentionally kept, in case Forever adds
      cross-faction Shaman/Paladin quests.
      The Forever build sees identical code before and after.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Remove Season of Discovery content from the Forever database.
    • Remove all SEASON_OF_DISCOVERY preprocessor blocks and their
      contents (dungeon set sourceQuests, Gnomeregan SoD items), keeping
      the non-SoD #else branches unwrapped. The Forever build sees
      identical code before and after.
    • Delete the commented-out SoD Darkmoon cards ("Might exist??") from
      World Drops.
      Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [Data] Orc-only 3090 and add Forever 98069 (#2702)
    • [Data] Orc-only 3090 and add Forever 98069.
      Restrict Tainted Parchment (3090) to orcs, matching Wowhead Forever,
      which lists the quest for Orc (race 2) and Warlock (class 9) only. The
      Troll warlock path remains on Tainted Tablet (98575).
      Add Stolen Freewind Supplies (98069) from Jandia in Thousand Needles
      with a 1.60.1 timeline, next to Stop the Screeching (98070), and drop
      98069 from the Forever missing-quests list.
      Assisted-by: Big Pickle
    • [Data] Forever 98069 and 98070 require level 25.
      Set lvl for Stolen Freewind Supplies (98069) and Stop the Screeching
      (98070), which ATT shows as "Requires Level", to 25 per Wowhead's
      Forever pages for Jandia's quests.
      Assisted-by: Big Pickle
    • [Data] 98069 brings 8 Stolen Freewind Supplies.
      Add the collect objective to Stolen Freewind Supplies (98069), which
      requires 8 Stolen Freewind Supplies (279383) for Jandia in Freewind
      Post.
      Assisted-by: Big Pickle
  • [Data] Use bare table keys in the Forever database.
    Convert ["key"] = fields to key = across 44 Forever source files
    (5,710 fields), matching the style used by the rest of the database.
    Commented-out code is converted as well; string contents are not.
    No behavioral change: every file (and the contents of whole-file
    commented-out raids) compiles to byte-identical Lua bytecode before
    and after.
    Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
    Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
  • [FOREVER] Rebuilt the DB.
  • [Data] Clean up migrated Forever data. (#2701)
    Follow-up to #2694, standardizing the migrated zzOLD content for
    WoW Forever (ships as 1.60.0, no data beyond 1.80.0).
    • Remove timeline entries past the 1.80.0 cutoff (REMOVED_4_0_3,
      REMOVED_2_0_1, DELETED_4_2_2) in Uldaman, Stratholme, Blackwing
      Lair, Ruins of Ahn'Qiraj and Temple of Ahn'Qiraj.
    • Collapse 176 empty-table elements to bare form, e.g.
      i(21761, { -- ... }) -> i(21761), -- ...
    • Remove the empty ACHIEVEMENTS header from Naxxramas.
    • Collapse split lvl / requireSkill assignments onto one line.
    • Remove stray spaces between leading tabs and function calls.
    • Convert bare { itemID = ... } blocks to i(): Base of Atiesh
      (also dropping its classes field) and Tome of Conjure Food VII.
    • Replace skill-requirement descriptions with learnedAt on
      requireSkill entries (descriptions are expensive); keep any
      additional information they carried.
    • Remove resolved "Maybe?" notes.
      Claude-Session: https://claude.ai/code/session\_01XpDN77yRgjFFrDCQ3mMQ4N
      Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
  • [Data] Migrate Forever zzOLD sources. (#2694)
    • [Data] Move zzOLD 1 - orgrimmar.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Orgrimmar.
      Move the legacy zzOLD Orgrimmar zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD 1 - thunder bluff.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Thunder Bluff.
      Move the legacy zzOLD Thunder bluff zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD ashenvale.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Ashenvale.
      Move the legacy zzOLD Ashenvale zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD azshara.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Azshara.
      Move the legacy zzOLD Azshara zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD desolace.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Desolace.
      Move the legacy zzOLD Desolace zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD dustwallow marsh.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Dustwallow Marsh.
      Move the legacy zzOLD Dustwallow marsh zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD felwood.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Felwood.
      Move the legacy zzOLD Felwood zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD feralas.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Feralas.
      Move the legacy zzOLD Feralas zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD moonglade.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Moonglade.
      Move the legacy zzOLD Moonglade zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD silithus.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Silithus.
      Move the legacy zzOLD Silithus zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD stonetalon mountains.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Stonetalon Mountains.
      Move the legacy zzOLD Stonetalon mountains zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD tanaris.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Tanaris.
      Move the legacy zzOLD Tanaris zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD thousand needles.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Thousand Needles.
      Move the legacy zzOLD Thousand needles zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD timbermaw hold.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Timbermaw Hold.
      Move the legacy zzOLD Timbermaw hold zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD un'goro crater.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Un'Goro Crater.
      Move the legacy zzOLD Un'Goro crater zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD winterspring.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Winterspring.
      Move the legacy zzOLD Winterspring zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD 1 - undercity.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Undercity.
      Move the legacy zzOLD Undercity zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD blasted lands.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Blasted Lands.
      Move the legacy zzOLD Blasted lands zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD burning steppes.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Burning Steppes.
      Move the legacy zzOLD Burning steppes zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD deadwind pass.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Deadwind Pass.
      Move the legacy zzOLD Deadwind pass zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD deeprun tram.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Deeprun Tram.
      Move the legacy zzOLD Deeprun tram zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD duskwood.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Duskwood.
      Move the legacy zzOLD Duskwood zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD eastern plaguelands.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Eastern Plaguelands.
      Move the legacy zzOLD Eastern plaguelands zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD hillsbrad foothills.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Hillsbrad Foothills.
      Move the legacy zzOLD Hillsbrad foothills zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD searing gorge.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Searing Gorge.
      Move the legacy zzOLD Searing gorge zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD silverpine forest.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Silverpine Forest.
      Move the legacy zzOLD Silverpine forest zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD swamp of sorrows.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Swamp of Sorrows.
      Move the legacy zzOLD Swamp of sorrows zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD the hinterlands.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever The Hinterlands.
      Move the legacy zzOLD The hinterlands zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD tirisfal glades.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Tirisfal Glades.
      Move the legacy zzOLD Tirisfal glades zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD western plaguelands.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Western Plaguelands.
      Move the legacy zzOLD Western plaguelands zone data into the current
      forever/zones module layout: bare table keys, non-Camelot timeline
      entries dropped, quest provider fields simplified, and the existing
      Forever entries (if any) carried over.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD zul'farrak.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Zul'Farrak.
      Move the legacy zzOLD Zul'Farrak dungeon data into the current
      forever/dungeons & raids module layout: legacy preprocessor gates and
      handler wrappers resolved, non-Camelot timeline entries dropped, and the
      Classic content kept.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD uldaman.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Uldaman.
      Move the legacy zzOLD Uldaman dungeon data into the current
      forever/dungeons & raids module layout: legacy preprocessor gates and
      handler wrappers resolved, non-Camelot timeline entries dropped, and the
      Classic content kept.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD the temple of atal'hakkar.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever The Temple of Atal'hakkar.
      Move the legacy zzOLD The Temple of Atal'hakkar dungeon data into the current
      forever/dungeons & raids module layout: legacy preprocessor gates and
      handler wrappers resolved, non-Camelot timeline entries dropped, and the
      Classic content kept.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD stratholme.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Stratholme.
      Move the legacy zzOLD Stratholme dungeon data into the current
      forever/dungeons & raids module layout: legacy preprocessor gates and
      handler wrappers resolved, non-Camelot timeline entries dropped, and the
      Classic content kept.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD blackwing lair.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Blackwing Lair.
      Move the legacy zzOLD Blackwing Lair raid data into the current
      forever/dungeons & raids module layout: preprocessor gates and handler
      wrappers resolved, seasonal (SoD/SoM) and post-1.x content pruned, and
      the file kept wrapped in a long comment as before pending a content
      review.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD zul'gurub.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Zul'Gurub.
      Move the legacy zzOLD Zul'Gurub raid data into the current
      forever/dungeons & raids module layout: preprocessor gates and handler
      wrappers resolved, seasonal (SoD/SoM) and post-1.x content pruned, and
      the file kept wrapped in a long comment as before pending a content
      review.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD ruins of ahn'qiraj.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Ruins of Ahn'Qiraj.
      Move the legacy zzOLD Ruins of Ahn'Qiraj raid data into the current
      forever/dungeons & raids module layout: preprocessor gates and handler
      wrappers resolved, seasonal (SoD/SoM) and post-1.x content pruned, and
      the file kept wrapped in a long comment as before pending a content
      review.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD temple of ahn'qiraj.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Temple of Ahn'Qiraj.
      Move the legacy zzOLD Temple of Ahn'Qiraj raid data into the current
      forever/dungeons & raids module layout: preprocessor gates and handler
      wrappers resolved, seasonal (SoD/SoM) and post-1.x content pruned, and
      the file kept wrapped in a long comment as before pending a content
      review.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Move zzOLD naxxramas.
      Copy the legacy zzOLD source file verbatim to the destination path it migrates into, as a pure move with identical content, so rename linking reaches the legacy file history; conversion happens in the next commit.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Migrate Forever Naxxramas.
      Move the legacy zzOLD Naxxramas raid data into the current
      forever/dungeons & raids module layout: preprocessor gates and handler
      wrappers resolved, seasonal (SoD/SoM) and post-1.x content pruned, and
      the file kept wrapped in a long comment as before pending a content
      review.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Retire Forever zzOLD sources.
      All 39 legacy zzOLD zone and dungeon/raid sources are now migrated
      into the current forever/zones and forever/dungeons & raids module
      layout, so the legacy staging folder is retired.
      Assisted-by: GLM-5.3-Flash Free
    • [Data] Remove entries absent from Forever.
      Purge quest, item, object and achievement nodes that do not exist in
      the Forever game, per the non-ATT ground truth in wow-database
      (QuestieDB-Forever, the Forever client DB2 1.60.1.70338, and Wowhead
      forever saved pages):
    • quests: TBC-prepatch q() nodes given by Draenei/Blood Elf quest
      givers in ashenvale (12), swamp of sorrows (3), the hinterlands (5),
      western plaguelands (3), thousand needles (3)
    • items: i(309) silverpine; Grunts' i(62253..62266) gear in orgrimmar;
      i(23777)/i(23797) zone drops in ashenvale; i(24118..24120) inside the
      removed Never Again! quests; i(23072) naxxramas
    • objects: o(180327) zul'gurub, o(207724) dustwallow
    • achievements absent from the client Achievement DB2: 424 temple of
      ahn'qiraj, 425 naxxramas, 638 uldaman, 639 zul'farrak, 641 the temple
      of atal'hakkar, 646 stratholme, 685 blackwing lair, 687 temple of
      ahn'qiraj, 688/880/881 zul'gurub, 689 ruins of ahn'qiraj, 729
      stratholme. The Season-of-Mastery achievements 15333/15334/15335 are
      present in that table but belong to pruned season content, so they are
      removed as well. Identically-numbered items 15333/15334/15335 (world
      drops, darkshore) and the AQ20 ["cr"] = 15335 are unrelated and are
      kept.
      i(23072) is present in the Forever Item DB2, but it was added after the
      1.60.1 build, so it is removed as post-1.x content rather than as an
      absent ID.
      o(180327) Brazier of Madness keeps the trinket-craft filter and the
      madness-event NPCs n(15082..15085) with their drops (19931..19993);
      only the wrapper's own facets are removed (header, coord/cost/
      description, use-objective) and the surviving children are kept in
      place at the wrapper's indent.
      Timeline cleanup: ADDED_1_9_0/ADDED_1_11_1 markers are dropped from the
      affected zones, uldaman, stratholme and the quarantined raids, and
      ADDED_1_13_0/ADDED_10_1_7 from the Ahn'Qiraj entries; load-bearing
      REMOVED_4_0_3 members are preserved.
      The Uldaman Keystone o(124371) is restored: it is vanilla content whose
      DB2 absence is a scrape gap, and Wowhead's forever page for quest 2240
      describes placing the Staff of Prehistoria i(7733) in the ground to
      open the chamber and summon e(469), the shape carried over from the
      Classic source file.
      Empty container pruning is limited to containers emptied by the purge
      itself; pre-existing empty wrappers are untouched. All Forever Lua
      files compile under Lua 5.1; the absent-ID audit reports zero remnants
      in converted files; branch remains draft.
      Assisted-by: GLM-5.3-Flash Free
  • [DB] Two Ulatek weapons are the same across all difficulties