Objective
Prevent the Twin Emperors strategy from activating under unsafe pull conditions, especially when Anubisath Defenders from the previous room are still relevant, and make the supported Twin comp contract explicit early instead of letting unsupported groups drift into a fake opener.
Why this exists
The full encounter strategy requires more than just seeing the emperors in the room.
Twin-specific pre-pull safety that must be enforced:
- All Anubisath Defenders from the previous room must be cleared before Twin pull.
- If those Defenders are still alive or still capable of joining the fight, the Twin strategy should not enter normal opener flow.
- The current Twin implementation only supports a
2 warlock + 2 melee tank core. That support matrix is already implicit in code, but it is not enforced early enough as an encounter contract.
Current code baseline
Pull-safety gap
IsTwinPrePullReady currently only checks:
- bot is alive
- bot is in AQ40 and inside Twin room bounds
- bot is not in combat
- encounter combat is not active
- emperors are visible
Code:
src/Ai/Raid/Aq40/Util/RaidAq40Helpers.cpp
That means current Twin pre-pull readiness does not appear to check whether previous-room Defenders are alive, in combat, or still part of the raid's real threat picture.
Supported-comp contract already exists, but only as a mid-encounter snapshot concept
BuildTwinEncounterSnapshot currently hardcodes:
- supported only if
lockedWarlocks.size() == 2
- supported only if
lockedMeleeTanks.size() == 2
- otherwise unsupported reason is one of:
missing_warlocks_and_melee_tanks
missing_warlocks
missing_melee_tanks
Code:
src/Ai/Raid/Aq40/Util/RaidAq40Helpers.cpp
BuildTwinEncounterSnapshot
That is good, but the opener / pre-pull flow should respect this sooner and more deliberately.
Required implementation
Previous-room Defender gating
- Do not activate Twin pre-pull staging or Twin pull authorization while relevant Anubisath Defenders remain uncleared.
- At minimum, gate on any of the following being true for previous-room Defenders:
- defender alive in adjacent encounter space
- defender in combat with raid or raid pets
- defender target / victim state indicates it can still join the fight
- If defender trash is still the real problem, AQ40 trash behavior should take precedence over Twin opener behavior.
Unsafe-pull behavior
- If the raid reaches the Twin room while previous-room Defenders are still live or active:
- suppress Twin pre-pull stage activation
- do not begin Twin opener positioning
- log a clear Twin-specific pull-safety reason once, not noisy spam
- If Defenders unexpectedly enter the Twin fight after pull:
- suppress normal Twin opener assumptions
- prioritize deterministic safety / trash handling / degraded behavior instead of pretending the clean Twin opener still exists
Explicit supported-comp contract
- For the current Twin strategy, supported comp must be explicit:
2 designated warlock tanks for Vek'lor handling
2 melee tanks for Vek'nilash handling
- If that support matrix is not satisfied:
- block normal supported Twin opener flow
- enter explicit degraded/unsupported behavior immediately
- avoid presenting fake pre-pull confidence where the pull is already unsupported
- If warrior
Battle Shout Vek'lor tanking is not being implemented as part of this work, document it as unsupported for this strategy path instead of letting code/comments imply it already works.
Code hotspots
src/Ai/Raid/Aq40/Util/RaidAq40Helpers.cpp
IsTwinPrePullReady
IsTwinPlayerPullAuthorized
BuildTwinEncounterSnapshot
src/Ai/Raid/Aq40/Strategy/RaidAq40Strategy.cpp
- Twin and AQ40 trash trigger interplay
src/Ai/Raid/Aq40/Action/RaidAq40Actions_Shared.cpp
- existing Anubisath Defender trash handling
Validation
- Previous-room trash test:
- leave one or more Anubisath Defenders uncleared
- enter the Twin room
- confirm Twin pre-pull staging does not activate as though the fight is ready
- Unsafe add-in test:
- force Defender involvement while near Twin pull
- confirm Twin opener is suppressed and the raid does not split into a fake supported opener
- Supported-comp test:
- remove one designated warlock tank or one melee tank
- confirm the strategy logs unsupported early and does not attempt the normal supported Twin opener
Acceptance criteria
- Twin pre-pull readiness no longer means only “I can see the emperors.”
- Previous-room Defender risk blocks normal Twin opener behavior.
- Unsupported Twin comps are identified early and cleanly.
- The current supported strategy path is documented as warlock-tank + melee-tank based unless a future issue explicitly adds warrior Vek'lor tanking.
Related
- Coordinates with
#2 for encounter-state truth.
- Coordinates with
#8 for opener/staging behavior.
- Feeds into
#7 validation and AGENT.md guidance.
Objective
Prevent the Twin Emperors strategy from activating under unsafe pull conditions, especially when Anubisath Defenders from the previous room are still relevant, and make the supported Twin comp contract explicit early instead of letting unsupported groups drift into a fake opener.
Why this exists
The full encounter strategy requires more than just seeing the emperors in the room.
Twin-specific pre-pull safety that must be enforced:
2warlock +2melee tank core. That support matrix is already implicit in code, but it is not enforced early enough as an encounter contract.Current code baseline
Pull-safety gap
IsTwinPrePullReadycurrently only checks:Code:
src/Ai/Raid/Aq40/Util/RaidAq40Helpers.cppIsTwinPrePullReadyThat means current Twin pre-pull readiness does not appear to check whether previous-room Defenders are alive, in combat, or still part of the raid's real threat picture.
Supported-comp contract already exists, but only as a mid-encounter snapshot concept
BuildTwinEncounterSnapshotcurrently hardcodes:lockedWarlocks.size() == 2lockedMeleeTanks.size() == 2missing_warlocks_and_melee_tanksmissing_warlocksmissing_melee_tanksCode:
src/Ai/Raid/Aq40/Util/RaidAq40Helpers.cppBuildTwinEncounterSnapshotThat is good, but the opener / pre-pull flow should respect this sooner and more deliberately.
Required implementation
Previous-room Defender gating
Unsafe-pull behavior
Explicit supported-comp contract
2designated warlock tanks for Vek'lor handling2melee tanks for Vek'nilash handlingBattle ShoutVek'lor tanking is not being implemented as part of this work, document it as unsupported for this strategy path instead of letting code/comments imply it already works.Code hotspots
src/Ai/Raid/Aq40/Util/RaidAq40Helpers.cppIsTwinPrePullReadyIsTwinPlayerPullAuthorizedBuildTwinEncounterSnapshotsrc/Ai/Raid/Aq40/Strategy/RaidAq40Strategy.cppsrc/Ai/Raid/Aq40/Action/RaidAq40Actions_Shared.cppValidation
Acceptance criteria
Related
#2for encounter-state truth.#8for opener/staging behavior.#7validation andAGENT.mdguidance.