Skip to content

EbonBuilds 3.86

Choose a tag to compare

@github-actions github-actions released this 24 Jul 04:13

Install: Download EbonBuilds.zip
Extract it and drop the EbonBuilds folder into Interface/AddOns/.
Optional affix shopping: Download Auctionator.zip — extract to Interface/AddOns/Auctionator (EbonBuilds enables bridge features when present).
Optional Details! threat plugin: Download Details_TinyThreat.zip — requires Details! core in Interface/AddOns/Details (not shipped with EbonBuilds).

3.86 (2026-07-24) -- Automation stepping stones, Auctionator PE, and reliability fixes

Release v3.86

Follow-up to 3.85: client-side automation work packages WP2?WP5 from the server-authoritative Autopilot redesign, Auctionator ProjectEbonhold adaptation, optional Details!: Tiny Threat PE fork, ProjectEbonhold Anvil affix acquisition bridge, EchoPerformance / Details! hardening, expanded automation and regression test coverage, reliability fixes for bag dots / AutoSell / SessionHistory / FAQ, and original WotLK-inspired GitHub Pages branding. Release prep: docs/release-386-prep.md.

Added

  • Intent queue WP3 (#89 / #52): new IntentQueue module ? one in-flight autopilot intent (select/freeze/banish/reroll) with duplicate blocking; ack via board identity fingerprint, GetPendingAction() pending-flag drop, or 8s TTL. Wired into Automation.ExecuteDecision / RequestFreeze ahead of server intent-ack support. ProjectAPI.GetCapabilities exposes intentQueueClient and serverIntentAck. Docs in docs/intent-queue-wp3.md; tests in tests/test_intent_queue.lua.
  • Shared tie-break policy WP2 (#90 / #51): centralized score ? optional PE rank ? slot index ? spell ID ? frozen-preference ordering in Scoring (CompareCandidates / IsBetterCandidate), wired through BoardDecision and Automation.TrySelect so equal-weight boards pick deterministically and align with the server redesign. Optional per-card rank from ProjectEbonhold offers; missing ranks fall back to slot-index ordering. DebugServerRankMismatch flags rank disagreements. Tests in tests/test_tie_break.lua.
  • Dry-run simulator WP4 (#93 / #53): new AutomationDryRun module ? pure offline evaluator returning policy verdicts (select/freeze/banish/reroll/wait) from board snapshots without calling ProjectEbonhold Request*. Transcript parser/replay for fixture directives and DebugLog/Logbook line hooks; checked-in #38-class fixture. Docs in docs/dry-run-wp4.md; tests in tests/test_dry_run.lua.
  • Constraints client WP5 (#97 / #54): new AutomationConstraints module packs Autopilot prefs (protect families, echo policies, thresholds, bans/whitelist, reroll hints) into a versioned table, compact wire blob, and stable constraintsHash. Constraints attach on each board eval; IntentQueue stores the hash on in-flight intents and clears the queue when prefs change mid-board. GetCapabilities() exposes constraintsClient; serverConstraints and serverPolicy stay false until ProjectEbonhold ships upload/policy. Docs in docs/constraints-wp5.md; tests in tests/test_constraints.lua.
  • WotLK-inspired docs artwork (#88): locally generated hero background, runic dividers, slate texture, favicon, and feature-card icon silhouettes via scripts/generate-docs-art.py ? no Blizzard client assets. Homepage hero, framed sections, and gold/frost chrome in extra.css; favicon updated in mkdocs.yml.
  • Auctionator ProjectEbonhold adaptation (#92): vendored fork 2.6.3-pe1 with affix search helpers (AtrPE_BuildAffixSearchQuery), PE hooks for EbonBuilds Affixes shopping-list sync, defensive AH scan/query wrappers, and AuctionatorBridge query delegation. Tests in tests/test_auctionator_pe.lua.
  • Details!: Tiny Threat PE fork (#103): optional vendored Details_TinyThreat for WotLK 3.3.5a with PE compatibility fixes (threat/name API polyfills, realm-qualified names in Threater()). Ships as Details_TinyThreat.zip when the release workflow includes it; install guide in docs/details-tinythreat-pe.md.
  • Affix Anvil bridge (#102): new ProjectEbonholdAffixBridge soft integration with PE ExtractionService / Enchanted Anvil ? capability-gated Anvil / Shop row buttons and toolbar shortcuts on the Affixes tab (Vendor hidden until PE loads ItemPurchasePopup; see #112). Tests in tests/test_pe_affix_bridge.lua.

Changed

  • Automation server redesign docs: WP2 tie-break chain, WP3 intent-queue stepping stone, WP4 dry-run transcript schema, and WP5 constraints wire format documented in docs/automation-server-redesign.md, docs/intent-queue-wp3.md, docs/dry-run-wp4.md, and docs/constraints-wp5.md to match landed client behavior.
  • ProjectEbonhold capability audit (#96): tightened ProjectAPI.GetCapabilities() probes against live PE exports (pendingFlags requires Perks + SelectPerk; pendingBuildSlot follows the build-slot API family; activeLoadout requires both loadout setters and spell checks); explicit serverPolicy = false placeholder for the planned server oracle. Documented server-side gaps in docs/capabilities.md. Tests in tests/test_capabilities_audit.lua.
  • AutoSell vendor sweep (#108): expand Settings ? Automation junk-sweep options ? quality filters (gray-only, white/green toggles, never rare/epic), bind safety via tooltip scanning (ITEM_SOULBOUND / ITEM_BIND_ON_EQUIP), keep list with exact names / #itemID / *wildcard* patterns, max item level and minimum stack size, dry-run preview toast on vendor open, and deDE locale strings. Tests in tests/test_autosell.lua.
  • EchoPerformance / Details! integration (#110): pcall-harden Details! detection, combat sampling, sync broadcast/parse, and caller paths (ExportImport, Calibration, StatsData); GetTrackingStatus() / HasStoredStats() for clearer empty states; stored DPS samples remain exportable when Details! is missing. Tests in tests/test_echo_performance_harden.lua.
  • Package smoke check (#111): scripts/verify-package.sh validates optional dist/Details_TinyThreat.zip TOC paths (mirrors Auctionator) and fails CI when vendor tree exists but the zip was not built.
  • BoardDecision test coverage (#94): tests/test_board_decision_coverage.lua ? freeze-first reroll locks, equal-score tie-break ordering (slot index, server rank, frozen preference), pending/slot-busy waits via BSM + IntentQueue, and freeze-penalty threshold scoring through mocked BoardDecision/Automation paths.
  • IntentQueue edge-case tests (#113): expand tests/test_intent_queue.lua ? mid-board constraintsHash stale-clear, 8s TTL boundary/timeout recovery, one-in-flight exclusivity, TryBegin reason codes, and DescribeBlock for constraints_stale.
  • Freeze persistence regression tests (#114): tests/test_freeze_persistence.lua ? run-persistent frozenEchoIDs merge/recovery, pending confirmation before ResetObservedBoard, and RUN_ENDED clearing (#59).
  • Tome / LockPerk regression tests (#115): tests/test_tome_lockperk.lua ? ProjectAPI edge cases, Snapshot Run draft mapping, LockPerk gesture guards, and L1-only tome toggle gate (#68 / #62).
  • Pending rolls regression tests (#119): expand coverage for PE auto-accept deferral and slot-busy guards (#61 / #67).
  • Map panel regression tests (#118): tests/test_map_panel_regression.lua ? zone panel toggle and RefreshMapPanel forward-declaration (#58).
  • SessionHistory logbook UX (#101): harden Logbook rendering against nil access and scroll edge cases during long runs.
  • Docs site (#99): fix broken GitHub Pages links and align the releases page with v3.85 shipping state.

Fixed

  • In-game FAQ content (#100): restore the full generated FAQ after an MkDocs title change truncated in-game pages.
  • Combuctor bag affix dots (#104): harden quality-dot integration for 3.3.5a quality detection and combat-lockdown / taint safety on Combuctor item buttons.
  • AutoSell auction categories (#107): harden GetAuctionItemClasses edge cases so locale/category filters stay stable on 3.3.5a clients.