EbonBuilds 3.86
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
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
IntentQueuemodule ? 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 intoAutomation.ExecuteDecision/RequestFreezeahead of server intent-ack support.ProjectAPI.GetCapabilitiesexposesintentQueueClientandserverIntentAck. Docs indocs/intent-queue-wp3.md; tests intests/test_intent_queue.lua. - Shared tie-break policy WP2 (#90 / #51): centralized score ? optional PE
rank? slot index ? spell ID ? frozen-preference ordering inScoring(CompareCandidates/IsBetterCandidate), wired throughBoardDecisionandAutomation.TrySelectso equal-weight boards pick deterministically and align with the server redesign. Optional per-cardrankfrom ProjectEbonhold offers; missing ranks fall back to slot-index ordering.DebugServerRankMismatchflags rank disagreements. Tests intests/test_tie_break.lua. - Dry-run simulator WP4 (#93 / #53): new
AutomationDryRunmodule ? pure offline evaluator returning policy verdicts (select/freeze/banish/reroll/wait) from board snapshots without calling ProjectEbonholdRequest*. Transcript parser/replay for fixture directives and DebugLog/Logbook line hooks; checked-in #38-class fixture. Docs indocs/dry-run-wp4.md; tests intests/test_dry_run.lua. - Constraints client WP5 (#97 / #54): new
AutomationConstraintsmodule packs Autopilot prefs (protect families, echo policies, thresholds, bans/whitelist, reroll hints) into a versioned table, compact wire blob, and stableconstraintsHash. Constraints attach on each board eval;IntentQueuestores the hash on in-flight intents and clears the queue when prefs change mid-board.GetCapabilities()exposesconstraintsClient;serverConstraintsandserverPolicystay false until ProjectEbonhold ships upload/policy. Docs indocs/constraints-wp5.md; tests intests/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 inextra.css; favicon updated inmkdocs.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 intests/test_auctionator_pe.lua. - Details!: Tiny Threat PE fork (#103): optional vendored
Details_TinyThreatfor WotLK 3.3.5a with PE compatibility fixes (threat/name API polyfills, realm-qualified names inThreater()). Ships asDetails_TinyThreat.zipwhen the release workflow includes it; install guide indocs/details-tinythreat-pe.md. - Affix Anvil bridge (#102): new
ProjectEbonholdAffixBridgesoft integration with PE ExtractionService / Enchanted Anvil ? capability-gated Anvil / Shop row buttons and toolbar shortcuts on the Affixes tab (Vendor hidden until PE loadsItemPurchasePopup; see #112). Tests intests/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, anddocs/constraints-wp5.mdto match landed client behavior. - ProjectEbonhold capability audit (#96): tightened
ProjectAPI.GetCapabilities()probes against live PE exports (pendingFlagsrequiresPerks+SelectPerk;pendingBuildSlotfollows the build-slot API family;activeLoadoutrequires both loadout setters and spell checks); explicitserverPolicy = falseplaceholder for the planned server oracle. Documented server-side gaps indocs/capabilities.md. Tests intests/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 intests/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 intests/test_echo_performance_harden.lua. - Package smoke check (#111):
scripts/verify-package.shvalidates optionaldist/Details_TinyThreat.zipTOC 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-boardconstraintsHashstale-clear, 8s TTL boundary/timeout recovery, one-in-flight exclusivity,TryBeginreason codes, andDescribeBlockforconstraints_stale. - Freeze persistence regression tests (#114):
tests/test_freeze_persistence.lua? run-persistentfrozenEchoIDsmerge/recovery, pending confirmation beforeResetObservedBoard, andRUN_ENDEDclearing (#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 andRefreshMapPanelforward-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
GetAuctionItemClassesedge cases so locale/category filters stay stable on 3.3.5a clients.