Repository navigation
[0.6.0] - 2026-10-04
This release standardizes every binary's JSON, errors and global output flags, expands provider
reads and guide discovery, and corrects build and sampled-analysis results.
Breaking migration: read payloads from data, use --brief after wrapper search/resolve
and global output flags before the subcommand, and update renamed fields and removed commands
listed below. Regenerate existing SimC build harnesses and rerun their comparisons: earlier
harnesses could replace the supplied build with the spec's default talents.
Added
- Every binary emits one envelope with
ok,provider,command,kind,schema_version: "1",query,provenanceanddata, pluserroron failure.warcraft schemaexposes the shared schema. Commands, arguments and options have help text and generated references, including option bounds and metavars. - Global
--compact,--compact-max-chars,--fields,--fields-strictand--profile agent|humanwork on every binary and wrapper passthrough. Compact output preserves URLs, talent strings, export codes, SimC profiles and command/input values, and lists every cut inprovenance.compacted_paths. Missing projected paths appear infields_missing; strict projection failsmissing_fields. Failure envelopes stay whole. - Provider tiers appear in
warcraft doctor: core Wowhead, Warcraft Logs and SimC; supported Method, Icy Veins, Raider.IO, Warcraft Wiki and Lorrgs; experimental Raidbots, Blizzard and CurseForge. Lorrgs moves from experimental to supported. - Release-tag CI runs
make check, builds the root wheel and attaches it to the GitHub release forpipxanduvxinstallation. blizzard pvp-season,pvp-leaderboardandpvp-characterread season metadata, title cutoffs, ranked players and character ratings/records. Leaderboards support--seasonand--limitup to 5000; PvP supports retail, progression Classic and Anniversary; Classic character reads probe 2v2, 3v3, 5v5 and rbg when the summary omits them. Classic Era has no PvP seasons.blizzard collectionsreturns mounts, pets, toys, heirlooms and transmogs with counts, name filters and limits.auctions <realm>and retailcommoditiessummarize listings and units per item id with minimum and unit-weighted median prices in copper.--item-idselects exact ids withnot_listed; otherwise--limitselects the most-listed items. Bid-only listings count toward units/listings but have no price. Market snapshots, leaderboards and PvP cutoffs report Blizzard'sLast-Modifiedand its age at read time. Collections and commodity prices are retail-only in practice; Classic auctions omit trade goods.- Blizzard realm, item and character reads support
--game-version classic-eraandclassic-anniversary, alongside retail and progressionclassic; doctor reports verification for all four.characteralso takesREGION REALM NAME, and--sectionreads PvP summaries/brackets, professions or mount/pet/toy collections as rawcharacter_sectiondata. raiderio leaderboard raids --raidreturns guild rankings with region/realm filters, paging and returned/requested counts.raiderio raidslists raid/encounter slugs;affixesreturns this week's affixes;dungeonslists season dungeon pools;cutoffsreturns regional top 0.1%, 1%, 10%, 25% and 40% player-rating cutoffs with UTCupdated_at.- Raider.IO profiles add
last_crawled_at; character profiles include every recent run and each dungeon's best run, with counts and playedspec,spec_slugandrole. Raid rankings disclose hidden pulls/percentages inprivacy. Guild roster previews carry rank, active role and realm identity, sort guild master first, and support--roster-limitwithroster_truncated; member counts mean members Raider.IO tracks. icy-veins index-refreshcrawls pages missing from its stale sitemap into a durable local index. It preserves past seasons, resumes a frontier, prioritizes unseen pages, obeys--max-requests(default 250) and at least one-second pacing and stops on blocking responses or repeated failures. A bundled index snapshot makes current boss, dungeon and delve pages discoverable before a crawl; doctor reports the index in use.make icy-veins-snapshotreplaces the bundled snapshot only after a complete crawl.- Icy Veins discovery combines sitemap, current site menu and site index. Rows report source, sitemap modification time, menu title, indexed headline/publication date and parent; provenance names each source and warns about stale, missing or unreadable data. Searchable content includes raid encounters, dungeons, delves, professions, tier lists, hubs, transmog and PvP subpages.
- Icy Veins converts calculator builds on PvE and PvP guides into
wow_talent_exportreferences for SimC. Converted rows carry class/specbuild_identity,source.converted_fromand tree-data URL. Published equivalent imports add no duplicate on that page; labels merge shared builds. Calculator URLs remain when PvP selections matter or conversion fails, with conversion status and failure reason. wowhead talent-calcdecodes Classic Era/SoD, Classic PTR, TBC, Wrath, Cataclysm and WoW Forever builds into tree points and ranked talents, and MoP Classic builds into tier choices. Unsupported/unreadable builds reportdecoded: falsewith a reason. Trimmed calculator data is cached for 30 days; glyph, rune and click-order segments remain raw. SimC continues to decode retail builds only.- Wowhead item sets are searchable/resolvable entities.
entity/entity-pageadd infobox/mapfacts, quest start/end and ordered chains, and NPC/object locations;entityreports spawn counts whileentity-pagekeeps coordinates. Listview links retain tab ids and upstream drop/vendorlistview_data. Linked previews exposefetch_more_truncated; Wiki navigation addsmore_availableandfetch_more_command. - Wowhead news and blue-tracker rows include UTC
posted_atand timestamp-parse counts. Raider.IO run rows includelogged_run_id, its own logged-run id rather than a Warcraft Logs code. Warcraft Logs guild/character rows addclass_name; sampled fights add key level/time and difficulty/key-level counts with mixed-cohort notes. Event pages describe next-page retrieval. - SimC doctor reports ripgrep/binary dependencies, disabled commands and checkout/binary commit mismatch. Priority/opener/describe results report totals and truncation;
runreturns player/target result headers.simreports other actors, ranked profilesets and stat weights; SimC and Raidbots profilesets includemean_error,mean_stddevand iterations. Simulation disclosures flag default gear and default talents. - Guide comparisons add subject identities/agreement, bundles without builds and source
content_updated_at, separate from export time. Icy Veins/Method reads expose requested/served redirects; orchestration persists them on exported and reused rows. - Successful cached reads include
provenance.cachewith backend, lookups, hits, hit/all-hit flags, hit age/TTL and backend errors. Wrapper totals preserve each provider's own block; ages are unknown whenever any hit came from Redis. Lorrgs, Blizzard and CurseForge gain configurable caches; Blizzard adds the one-hourBLIZZARD_SNAPSHOT_CACHE_TTL_SECONDSfor collections and market/PvP snapshots, reducing large bodies before caching. Doctors report cache configuration, availability and failures. Blizzard/CurseForge doctor status becomes ready with credentials and degraded without them, with typed capabilities marked as requiring client credentials/API keys; Warcraft Logs status reflects public access, and Lorrgs/Raidbots report ready.
Changed
- Envelope and errors: top-level payload copies are removed. Failures have
kind: "error",data: {}, parsedquery, and details undererror.details; full nested command paths are preserved. Uncaught exceptions become JSON errors on stderr. Exit codes are 2 usage, 3 auth, 4 not found, 5 network/timeout/rate limit/upstream, and 1 other failures. HTTP errors useauth_failed,not_found,rate_limitedorupstream_error; connection errors usenetwork_error. Lorrgs treats inaccessible private reports asnot_found. - Search/resolve fields: every provider uses
kind: "search_results"/"resolve_match",results/candidates, returned-rowcount, completetotal_matchesandtruncated. Coming-soon/not-supported totals are null. Rows haveprovider,kind,id,name,urlandfollow_up: {command, surface}. Migraterecommended_command/recommended_surfaceandalternativestocommand/surfaceandalternative_commands; article rows dropentity_type/type_nameand repeated metadata slug/title. Raider.IO discovery replacesprofile_urlwithurl; profile/run payloads retainprofile_url. Lorrgs/WCL resolve replaceresolutionwithresolve_match; Lorrgs replacesresultswithcandidatesand drops repeateddata.provider. - Search stubs use empty lists,
count: 0,total_matches: nullandtruncated: false; resolve stubs includeconfidence: "none",resolved,matchandnext_commandas applicable. Warcraft Logs report rows carry their site's URL. Lorrgs ranking rows carry Lorrgs URLs; a report URL row preserves that URL, while metadata rows have no URL. Unresolved provider results retain their topmatchand a fallback search when one can help; zero-match results and Warcraft Logs' explicit-only discovery have no fallback. - Wrapper discovery:
--briefreplaces the old subcommand--compact; global--compactmust precede the subcommand. The wrapper keeps provider rows and order, merges by query intent/title fit with a per-provider half-page cap, and exposeswrapper_rankingandmerge_policy, including provider totals and returned merged count. Weak partial/snippet-only matches are not rescaled into full matches. Provider-score ties use provider name, and stale guides remain marked under--brief. Bare names do not imply profiles; exact entity titles can still resolve despite intent words. Apostrophes do not break name matches, and namespacedC_*API names route to the wiki. - Wrapper resolve accepts only a provider's high-confidence answer that fits intent. Low-confidence matches cannot block an answer; medium matches can. Unresolved hints and fallback searches retain wrapper ranking order, including low matches;
provider_resolved_candidateslists high answers blocked by a better-ranked unresolved candidate.--limitonly sizes ranking diagnostics. Search and resolve run providers concurrently, preserve failures/warnings under--brief, and report answered/failed counts. No eligible searching provider isno_searching_provider; all failures preserve a shared provider error or reportupstream_error/providers_failed. - Provider resolve ambiguity is judged over the full candidate set, not the displayed limit. A one-word query resolves high only when it names the match or a declared provider identity; other matches are medium with
confidence_cap.rule: "single_word_query". Wrapper hints usesingle_word_query_not_named_exactly. Lorrgs boss composition queries with extra words remain medium withwords_beyond_boss_name; heroic/normal/LFR boss compositions stay low. Bare boss names, spec rankings and explicit URLs can still resolve. Bare Warcraft Logs report codes are medium; report URLs can resolve high. - Wrapper calls providers in-process. Doctor reads local state without API probes, keeps provider readiness/tier and exposes
cache_errorwith degraded/error status. Removed constant language/invocation metadata is listed below. Passthrough failures use the provider's envelope; expansion mismatches exit 2. Handed-over commands are shell-quoted and never compacted. warcraft guildis a Raider.IO snapshot underdata.sources.raiderio.summary/provenance, with every raid's difficulty-specific world/region/realm ranks; 0 means unranked.active_raid/conflictsare gone. Cross-provider commands preserve source failure codes. Actor-profile accepts report URLs and URL fight scope, uses realm slugs, marks Raider.IO active-spec provenance, and without a fight searches at most ten report fights, kills first.- Cooldown packets use the fight's difficulty unless overridden. They infer actor/class/spec/boss from the selected fight's Warcraft Logs roster/encounter when Lorrgs is missing, unavailable or lacks players;
--spec-slugis needed only if the roster lacks a spec, and missing actor selection lists the roster. Deaths are unknown without Lorrgs. Explicit spell ids allow operation during a Lorrgs outage. Source errors, comparison-decline reasons, requested phase and other-source cast counts stay visible. - Without Lorrgs markers, cooldown phase windows come from Warcraft Logs transitions and carry phase id/name/source. Top parses use their own transitions and count only matching encounter phases; unavailable/missing-phase samples never compare a whole fight to one player phase.
phase_sample_count, availability reasons andno_phase_datadisclose this. Use--actor-idor--actor-nameto select the actor and--spell-idduring a metadata outage. Received externals are excluded only when the actor did not cast them, remain inreceived_auras, and explicit spell ids stay compared. The analyzed fight is excluded from its own top-parse sample. - Guide orchestration writes under the data root, selects guide candidates only, uses portable relative bundle paths, records provider decline/failure causes and redirects, and rejects scopes with fewer than two providers. Comparisons reject duplicate/fewer-than-two bundles and count a build as shared only across build-capable bundles, with at least two needed.
- Guide-to-SimC handoffs retain exact transport packets/provenance, rotate
--limitacross providers, separate excluded/truncated counts and disclose failed guide pages. Root freshness uses the oldest bundle export; manifest rewrite time is separate. Statuses areok,partial,failed,no_build_references,all_references_excludedandall_handoffs_failed. Empty/partial requested legs and per-build failures are explicit. Identifying no class/spec failsbuild_not_identified; when every requested leg produces nothing the command failssimc_handoff_failed, including--no-decoderuns. - Talent packets travel to SimC in memory, without deleted temporary paths or duplicate stdout JSON.
written_packet_pathreplacespacket_written_path; a real source/kept packet path is cited, otherwise null. Provider results contain{provider, exit_code, payload}, and SimC failure queries echo only supplied inputs. Explicit report refs require--actor-id; bare report codes use the same identifier rules as Warcraft Logs. Forever refs route to Wowhead. Raw-only log packets require validation before direct SimC input. - Guide query migration: Icy Veins, Method and Wowhead use
kind: "guide_query"anddata: {bundle, guide, page, query, count, match_counts, matches, top, failed_pages}. Wowhead replacesoutput_dir/countswithbundle/match_counts, dropsfiltersand returns full scored rows rather than preview projections; navigation/gatherer/comment queries remain. Cross-bundle query counts include every kind and build references, and top rows include bundle identity. Method exports returnfilesinstead ofmanifest. Title/name/label matches rank above mere mentions; blank queries and invalid/missing bundles fail consistently. - Wowhead search returns five rows by default, resolve limits reach 50, and search supports
--entity-type. Suggestion ranking preserves upstream order, filters whole words/types/numbers, ranks superseded guides down and never resolves one high.entitynormalization version moves tonormalized.schema_version, with old cache records refetched. Inline entity tokens get names, build blocks survive, and guide/share URLs determine expansion. Cached entities report the current call's expansion selection. - Icy Veins/Method recognize shared class/spec shorthand and punctuation; Icy Veins treats
mythic+,m+andm plusalike, Method usesmythic dungeon. Method spec-section queries hand off to the section. Icy Veins limits spec guides/intro boosts to actual spec/class/role introductions, classifies article/expansion/old-raid families separately and ranks transmog only for transmog queries. Method class guides require a spec/class slug. Sitemap dates move from Icy Veinsmetadata.last_updatedtometadata.sitemap_lastmod, Method guide dates are ISO plus original text, and source-specific publication dates break discovery ties. - Warcraft Logs:
report-player-talentsproduces raw-only packets without running SimC. Typed damage/aura results omit raw tables unless--include-raw;graphqlreturns the API's own data. Typed commands expose all GraphQL partial warnings and never cache partial replies. Finished-report caching starts after two hours without events; live kills still participate in sampled cohorts. - Warcraft Logs scopes events/player details to fights or explicit windows, accepts report URLs/localized hosts/bare
CODE#fight=N, honors URL fight scope unless overridden and rejects foreign hosts/site mismatches. Missing fights/scopes and impossible/inverted windows fail clearly. Encounter windows clamp to the fight and echo effective window/clamp fields. Complete guild scope is required; bad enum/finite-value/input-file options are validated before requests.--difficultyaccepts names; report-list dates accept UTC ISO dates;--limitaliases ranking/sample--top, and casts expose--event-limit. - Warcraft Logs raid healer rankings default to hps, other raid specs to dps and Mythic+ to score. Report rankings use default metrics and a separate healer pass;
query.metric,query.player_metricandquery.healer_metricecho the choices. Shared class/spec names/shorthand normalize to provider ids, infer an unambiguous class and reject mismatches; classic/fresh retain their extra specs.boss-spec-usagekeys include class/spec/role. Aura actors areaura_holder/applied_bywithrow_actor, and aura comparisons expose left/right/delta total uptime/uses instead of never-filled totals. - Raider.IO specs/composition keys are class-qualified, regions/realms and class/spec/role filters normalize consistently, and invalid filters fail instead of producing empty samples. Character/guild
realmis a slug withrealm_nameseparate; recent-rundungeon_slugis removed in favor ofdungeon/short_nameand complete timing/id/url fields; direct search probes match that shape. Sampled commands page as far as limits require, with zero-based--pageand provider-specific expansion ids documented, with optional--pagescap, deduplicate repeated runs and disclose duplicates. Thresholds outside the sampled range have no estimate and explain paging or run-score/player-rating differences. - Wiki API/event lookup tries canonical titles first and accepts fallback only when every word matches the title; API/event resolution uses returned count plus total/truncation. Events extract arguments, and API lookup includes enums, CVars, widgets, templates, TOC/taint and programming pages. Impossible/special titles and overlong queries fail
invalid_query; other MediaWiki errors useapi_errorwith the upstream code in details. - SimC identifies talent exports by probing all specs including healers; explicit class/spec and APL/url guesses are checked against the decoded hash, and contradictory guesses are ignored. Class/spec shorthand and case-insensitive names remain supported and are shared with providers. Blizzard hash URLs and retail PTR/Beta refs decode; Classic/Forever refs fail explicitly as non-retail. High decode confidence requires a decoded pair; unresolved probing says how many specs were tested. Relative/bare APL paths resolve predictably, and multi-actor build input selects the first actor with notes.
- SimC exact-build/APL analysis follows rotation dispatch past utility/helper lists and evaluates the decoded hero tree, talent ranks and full operator precedence. Unknown conditions stay unknown.
build.enabled_talentsoutputs are token lists withenabled_talent_count, and inactive branches identify talent/hero gating. Tokens follow SimC spelling; earlier underscore variants failunknown_talent, so use display names or current decode tokens. Describing a build against another spec's APL failsinvalid_query. - SimC
modify-build --add/--removeaccepts spec/hero names, routes edits to the right tree, validates choices/swaps and verifies re-encoding with disclosures; mismatches failencode_mismatch. Transport validation rejects invalid/duplicate ranks and multiple hero trees.simkeeps profile run settings unless--iterations/--max-timeexplicitly override them, records settings retained/replaced, handles all whitespace-separated options, and reports requested iterations accurately.compare-aplsuses mean executes across all iterations rather than one sampled sequence;action_sequence_iterationsis removed. SimC error extras move toerror.details, executed argv todata.command, and previews use the last 20 lines. - Blizzard reads verified regions with
provenance.verified: true, supports Classic profiles and resolves display/native-script realms. Credential pairs come wholly from the first complete source, never mixed. CurseForge verifies live reads, returns latest files newest-first while keeping raw upstream order, and includes file display/release type in changelogs. Raidbots rejects malformed refs, supports stdin--file -and aligns SimC metrics and multi-actor output. - HTTP clients use the versioned User-Agent, per-host request pacing and bounded Retry-After. Auth state files/directories use 0600/0700, dotenv discovery stops at the repository root and credential discovery does not mutate the environment. Refresh tokens are neither stored nor used.
Fixed
warcraft cooldown-packetnever merges a different singleton Lorrgs fight into the requested Warcraft Logs fight. Provider provenance, partial GraphQL warnings and notes remain visible insources; incomplete or paginated player casts carrycomplete: falseand a partial comparison. Empty top-parse rankings reportno_samplesinstead ofready.- A zero or negative Redis cache TTL expires that key without disabling a healthy backend for later reads and writes. An inaccessible file-cache directory falls back to the upstream provider instead of failing the command.
- Error output remains JSON for misplaced global flags, command groups without subcommands, huge integers, nonfinite numbers and malformed/blank refs. Errors name the global flag to move or available subcommands. Subcommand names no longer become option values. Empty expansion strings fail rather than selecting retail. Malformed guide/tool refs are usage errors; absent files/bundles use
not_found, unreadable bundles retaininvalid_bundle, and ambiguous bundle names useinvalid_argument. - Redis failure no longer looks like a cold cache or stalls every lookup: bounded connection timeouts and a per-process failure circuit skip a broken backend after its first failure. Missing extras/URLs and invalid settings fail with provider-specific configuration guidance. Doctors/cache inspection tolerate outages, redact passwords even with delimiter characters and expose failures. File-cache writers use independent temporary files and clean failed writes.
- Wowhead routes entity and guide/news/blue/tool/listing URLs to their reader, rejects unsupported/foreign URLs and treats textual mentions of the host as text. Type-word fallback finds entities whose suggestion category differs from user wording, while exact names retain priority. Whole-word/plural matching avoids substring false positives, numbers must match, internal DNT entries are hidden unless requested, and guide listing searches include slugs.
- Wowhead entity/ref validation rejects unknown types, malformed type/id pairs and simultaneous URL/type-id input before requests. Outside-tooltip types suggest
entity-page. Guide readers reject listings/non-guides, unknown guide ids/categories returnnot_found, news/blue readers require actual article/topic refs, and changed layouts failparse_failed; malformed JSON isinvalid_response. - Wowhead talents parse classic class/build paths and MoP glyph/no-spec/click-order forms correctly. Retail refs require a real class/spec pair and consistent loadout header; packet refs require a spec and valid code.
listed_buildsis spec-specific and absent without a spec, withtool.spec_id. Invalid caches cannot produce both failure and success, and failed page fetches retain null canonical URL withfetch_error. Forever URLs no longer pretend to be retail; unsupported entity reads fail and news/guide content notes unknown or mismatched expansion. - Wowhead relation-tab links now participate in entity previews, comparisons and graph traversal, retain all tab ids and lead previews with relation rows. Names come from gatherer/tab data instead of arbitrary comment anchors. Graphs omit root self-loops and disclose unread pages/truncation; related entities and comparison shared/unique sets use complete link data. Money markup names actual gold/silver/copper/currency units. Zero preview limits keep real link counts.
- Wowhead exports finish with
hydration.failedinstead of losing the manifest, preserve unrelated parent indexes, remove stale entity manifests after nonhydrated re-export and skip malformed/non-UTF-8 sibling manifests. Date-filter validation precedes fetching; unparseable news/blue timestamps fail instead of yielding plausible empty windows. Cache clear validates namespaces/reports backend failures, and Redis summaries retain namespace counts and largest-first order. - Icy Veins parses the rebuilt guide layout and class hubs; guide providers split real sections, preserve imports, report failed pages and reject unparseable sitemap/navigation instead of returning empty/incomplete success. Icy Veins spec queries prefer the actual spec guide, ambiguities remain unresolved, current raid names resolve to raid guides, and hub matches accept only their own indexed subpages as close rivals. Family words cannot boost unrelated pages; Mythic+ season spelling does not break season ties. Boss/dungeon/raid queries with difficulty/strategy words fall back conservatively without opening another difficulty.
- Method searches whole slug words/plurals, retains literal
aug rune, rejects malformed refs before fetching and treats slug casing consistently. Both guide providers handle punctuation and shorthand without changing ordinary words such as "Disc Belt". Mythic raid headings no longer normalize to Mythic+. - Icy Veins index refresh detects unusable output paths before crawling, reports later writes as
invalid_data_dir, leaves unsuccessful/blocked freshness unchanged, preserves pending unseen failures, and caches fetched pages. Calculator builds outside tabs get filter/article headings; unreadable tree data incurs one retry cycle per command. - Guide export rejects a file output path before requests and replaces only old page HTML on re-export. Query scoring counts real title/name/label matches, and missing bundle roots/names fail consistently. Orchestration does not leave empty manifests or claim success when all provider/SimC work failed. Talent packets validate Beast Mastery and hero-tree builds without provider-specific identity mistakes.
- Warcraft Logs sampled cohorts include live reports, filter the resolved encounter, deduplicate repeated listing pages and uploads of one pull by roster/timing, and disclose possible duplicates when rosters differ. Cohort fields use
live_report_count,sampled_reportsand live provenance; ranking labels no longer say finished, and empty samples explain the scope/how to widen it. Mistyped zone/boss/expansion/season ids fail with discovery guidance instead of empty results. - Warcraft Logs cast summaries exclude begin/empower events; actor/NPC/pet names are preserved and trash fights scope by fight id. Damage/buff/aura outputs name the correct actor/ability, fight-sourced single specs have high identity confidence, and clamped windows prevent uptime deltas using time beyond a fight. Missing reports/actors and rejected auth preserve appropriate codes;
auth whoamiandrate-limitnever replay cached state. - Warcraft Logs report URL/site/region/guild-scope validation prevents wrong-site, unfiltered and foreign-host requests. Event windows with
--start-timebut no--end-timerun to selected fight ends and echo the real end. GraphQL input files distinguish missing files from unreadable UTF-8. CLI enum flags show valid choices. API partial errors remain visible from every request; stored auth site-profile mismatches retainsite_profile_mismatchwith exit 3. - Blizzard, Warcraft Logs, Raider.IO and wrapper profiles normalize Oceanic regions to us and try correct realm slugs, accents/apostrophes and native-script index matches. Invalid regions fail locally. Blizzard blank/dot-only names and path-like inputs cannot read another endpoint; character names remain one encoded path segment.
- Raider.IO recent runs no longer return null, missing profiles/realms use
not_found, guild region is present, freshness reflects cached source age, and casing shares profile cache entries. Sample filters reject missing score/level runs and unknown class/spec/role/season values. Raid lookups name the valid discovery command. Thresholds never extrapolate beyond the sample and distinguish run score from player rating. - Lorrgs zones return
data.zones, and user-report-fights without a selected fight failsmissing_fight(exit 2). Lorrgs validates composition<name>.<op>.<n>filters, role codes and supported heroic/mythic ranking difficulties;--kill-time-min/maxaliases preserve existing--killtime-*flags, repeatable--fight-idfilters work, and empty rankings include notes. Normal/LFR search offers no invalid ranking command. Slugs/report codes cannot traverse paths; nonfinite zone ids and blank queries fail locally. Possessives/apostrophes normalize names without inflating partial scores; unknown spec routes can offer close slug suggestions. Resolve never fetches a composition ranking to test log availability. - SimC build/decode no longer succeeds after rejected hashes or incomplete/crashed binaries. Active talents exclude disabled hero roots, including every hero talent when no tree is selected; tiered entry ranks survive re-encoding, explicit talent overrides replace/clamp ranks as SimC does, and rejected old exports retain SimC's
invalid_buildreason. Talent edits match names with hyphens/commas, and cross-spec swap sources fail clearly. - SimC build harnesses retain supplied talents instead of
load_default_talents=1; no-talent harnesses still load defaults. Build/compare disclosures identify default talents and low-level default gear. Rebuild previous harnesses and rerun comparisons. Action eligibility includes the action's own talent; inactive outputs include hero-tree gating, and branch comparison detects call-list/focus dispatch changes without reporting branches dead on both sides. - SimC APL parsing honors talent enabled/rank syntax and arithmetic precedence, fixes right-side profile comparison and reports invalid build inputs with decode codes. Unknown
--listvalues expose available lists;--classfilters reject unknown classes and compare full identities, so hunter never matches demon hunter. Validation returns warnings and treats warnings as invalid, comparison stops on them, and duplicate/case-colliding/path-like labels cannot overwrite profiles. - SimC handles missing binary/repo/files, invalid/empty profiles/presets, nontext input and TTY stdin without false completion, internal crashes or indefinite waits.
analysis-packetrequires simulation input for first-cast work. Temporary simulation/compare files are cleaned.first-castuses the first actor,log-actionsreports actors and adds--actorfiltering, spell dumps search tokens/display names correctly, class filters use full identities and spec-file queries match all words/extensions without inconsistent fuzzy fallback. - SimC builds fresh checkouts with Release/no-GUI configuration, only the
simctarget by default and parallel compilation, leaving existing CMake settings intact. Output metrics use actual DPS confidence error rather than effective DPS, requested settings are not inferred from post-run iterations, and target-error runs saytarget_error_requested, not an unsupported assertion about early stopping. Raidbots shares corrected metrics, omits misleading requested-iteration counts, rejects HTML/error pages as missing reports and requires actual SimC options in explain-input. - Warcraft Wiki searches API/Event namespaces, preserves highlighted words, ranks named/system-matching titles correctly, extracts event arguments only from the top-level argument section and returns supported API reference families. Blank/invalid queries fail locally; maxlag/readonly/rate-limit errors use shared upstream codes. Provider transport messages are concise and retain the proper failure codes.
- CurseForge addon errors distinguish rejected auth from missing addons, slug misses list popular name-search candidates, and request/changelog timeouts use
timeout. Raw metadata ordering remains available beside sorted latest files. CurseForge coming-soon stubs echo the query string instead of a nested query object; auth errors point at the numeric addon-id form.
Removed
- WowProgress binary/passthrough/docs/environment variables and
warcraft guild-history; Raider.IO supplies current guild ranks and raid leaderboards. The root wheel dropscurl_cffi. warcraft guild-ranks, superseded bywarcraft guildraid ranks;raiderio mythic-plus-runs, superseded byraiderio leaderboard mythic-pluswith richer run fields and cross-page limits.warcraft guide-compare-query --limit, the wrapper ranking override file,--profile debug,WARCRAFTLOGS_METADATA_CACHE_TTL_SECONDS, andwowhead cache-repair; usecache-clear --namespace legacy_unscoped [--expired-only].- Repeated top-level payloads; repeated row follow-up provider/kind; old search metadata/field names noted above; wrapper doctor
language,shell_fallback,python_firstandinvocation_mode; repeated provider/command fields in Wowhead/Wiki doctor data. - Warcraft Logs buff-row
reported_total,reported_active_time,reported_total_time, player-detailpotion_use/healthstone_use, sampledstable_source_only, and sampledskipped_live_report_count. Aura compare totals use the renamed meaningful uptime/use fields. Refresh-token flags/state are removed from Warcraft Logs and Blizzard; Blizzard doctor dropsauth.state,state_pathandclient_credentials_configured, retaining token-cache metadata. - Raidbots base/path-template overrides, doctor template note,
handoff.ready_to_pasteand misleadingrun_settings.iterations_requested; SimC sampledaction_sequence_iterations; duplicatestdoutfields in talent producer/upgrade/describe/provider results. Cache state lives only underprovenance.cache, without flat fetched-at/hit/TTL copies. - Never-emitted shared error aliases
unauthorized,forbiddenandhttp_error. - Development commands
make test-live,test-live-matrix, per-provider live suites,fmt-check,benchmark-cache,fixture-refresh-hints,runandlint-all; use e2e journeys and weekly keyless coverage.dev_deploy.sh --link-binand worktree-env override variables are gone. Internal Python provider contracts move towarcraft_cli.provider_contract;warcraft_coredrops submodule re-exports andload_env_file.