Skip to content

raid-walk: --prepull-aura applies role buff lists once before each boss pull - #455

Merged
pjerra merged 4 commits into
devfrom
feat/raid-walk-prepull-auras
Nov 13, 2026
Merged

pjerra merged 4 commits into
devfrom
feat/raid-walk-prepull-auras

Conversation

@pjerra

@pjerra pjerra commented Nov 13, 2026

Copy link
Copy Markdown
Owner

What

raid-walk --prepull-aura <file> applies a per-role list of GM .aura buffs to the walk's own bots once per boss row, at the existing pre-pull point. The lists cover flasks, elixirs, food and world buffs. This lets a walk test a boss with the full preparation a player would bring, as the TortoiseBots maintainer asked for ZG.

Safety

  • It fires only after a confirmed run pause and a fresh run status: paused, at the step before the boss row, on the same plan.
  • Before every .aura it re-reads every living party member. Combat, a failed read or a failed pause stops it fail-closed, and no aura is sent.
  • It never fires once the boss row is current, so nothing is applied in a fight.
  • Verification is strict, with an opt-in --prepull-aura-tolerance N (default 0).
  • prepull-auras.json keeps verified boss rows apart from failed attempts.

Known limit: combat that starts during the final read-back, after every aura is sent, still records the row as verified. Nothing is applied in combat.

Reuse

The dungeon driver's aura code (ApplyAuras, AurasMissing) is shared, not copied. The sample list is dungeons/prepull/zg-preraid.json.

Tests

13 walk tests cover the fail-closed cases: combat mid-batch, an unlisted member in combat, an unreadable unit, a failed pause, a failed resume.

Review

Codex adversarial: 3 rounds, with the last point accepted as the limit above. Cold review: SHIP.

…world buffs on at each boss row's pre-pull rest

A walk that tests preparation (walk 100: tier 1 gear and full consumables) has to carry the same auras a real raid
enters with. --prepull-aura role=<tank|melee|ranged|caster|healer|all>:<id,id,...|preset> is repeatable, one value per
role; it fires at the pre-pull gate the --gm-instance-data boss-row resend already uses (an out-of-combat rest or
gather of the step before a boss row, no later pull line of the page, no party bot in combat), once per boss row per
walk, under a run pause that is always resumed. A wipe recovery clears the fired rows, so the boss row the recovery
retries is buffed again (a death stripped the auras).

The auras go on with the dungeon_run buffs kernel: internal/dungeon now exposes AuraPort, AuraCfg, ApplyAuras and
AurasMissing, and both the dungeon Driver and raid-walk's port use them, so the first-aura check, the single retry and
the 'landed on the caster is a miss' rule have one implementation. A new gm_aura RPC selects the player by guid, waits
for the server to show that selection and sends '.aura <id>' only while it stands; it is gated like gm_kill (test
servers only) and refuses a non-player guid or spell id 0.

prepull-auras.json records the flag, the merged role lists, the boss rows fired and every bot's ids sent, seen and
missing; a bot missing more than 2 fails the walk (exit 18). The mt/ot batches are tank and every other bot takes its
class's role. 'world' is the new world-raid preset (the classic world buffs without Warchief's Blessing, which is
Horde-only); dungeons/prepull/zg-preraid.json holds the ZG walk's sample lists, every id checked in the core's
spell_template.
…isses

A refused, unacknowledged or unconfirmed run pause now sends no aura: the
fresh run status must show this plan paused on the rest step, party combat is
re-read right before the first .aura and before every later send, and a pull
mid-batch stops the batch and fails the walk. A boss row that becomes current
without a verified fire fails the walk, and a row is recorded as done only
after the verified application.

Every requested aura must verify by default. --prepull-aura-tolerance N is
the explicit opt-in for a per-bot miss bound; prepull-auras.json always
carries the missing list, and a tolerated miss is logged as such instead of
claiming every bot carries its list.
…mpts

The combat recheck re-reads every living party member, not only the members
--prepull-aura gives a list: a member the flag does not cover can pull too. A
failed or unreadable unit read now counts as combat, so the batch stops and the
walk fails instead of sending auras on a party it cannot show is out of combat.

prepull-auras.json no longer records a failed fire as a boss row. boss_rows
holds only the rows whose fire verified within the tolerance; a failed attempt
goes to attempts with its boss row and reason, and the file is written on every
fire so the evidence is always on disk. Tests cover an in-combat member without
a list, an unreadable unit and a failed attempt; each fails on the previous
code.
staticcheck S1009: len() of a nil slice is zero, so the nil test before the
three-missing check adds nothing.
@pjerra
pjerra merged commit 99b2216 into dev Nov 13, 2026
2 checks passed
pjerra added a commit that referenced this pull request Nov 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant