Update Healer Man server
This commit is contained in:
1 parent
f8314e7de1
commit
1fedb9368d
76 files changed
+20556
-2523
No files matched your search
+163
-5
@@ -50,7 +50,29 @@ build is duplicated inside one party.
|
||||
|
||||
The active member is driven by the shared benchmark policy while the other four
|
||||
use the live companion AI. The healer is the default active member. Use
|
||||
`--active-slot` to change it.
|
||||
`--active-slot` to change it. Use `--seat-sweep` to run the same composition
|
||||
five times with each seat active exactly once. Seat sweeps produce dedicated
|
||||
`npc_class_specs_across_parties.csv` and
|
||||
`npc_class_abilities_across_parties.csv` artifacts, so companion comparisons
|
||||
exclude the active benchmark controller.
|
||||
|
||||
Classic specializations expose two named, non-destructive talent profiles: the
|
||||
default PvE build translated from the pinned AzerothCore Playerbots
|
||||
configuration at commit `531282e`, and the prior Healer Man executable-first
|
||||
build. Each profile has a stable generated character name and unique build ID.
|
||||
Adding another profile therefore does not overwrite either existing build.
|
||||
Random parties and unselected filler seats use the declared default profile;
|
||||
named alternatives remain available to specific selection and full coverage.
|
||||
Run `npm run talents:generate` after intentionally changing the Playerbots
|
||||
mapping or source; the checked-in snapshot keeps production independent from
|
||||
the historical checkout. Runtime selection mirrors PlayerbotFactory: it starts
|
||||
with the closest configured link at or below the tested level (or the first
|
||||
future link at low levels), then consumes later links if talent points remain;
|
||||
level 80 starts from the level-80 link. Profile metadata records the applicable
|
||||
source point count, ranks retained after mapping to the imported Healer Man
|
||||
talent catalog, and legal fallback points at the tested level. This makes
|
||||
patched-tree mismatch visible instead of presenting the translation as a
|
||||
literal Blizzard build.
|
||||
|
||||
## GM app and server execution
|
||||
|
||||
@@ -62,6 +84,9 @@ category, and a searchable multi-boss picker. The bracket schedules cover level
|
||||
1 plus every 10 levels, level 1 plus every 5 levels, or every level from 1
|
||||
through 80. Random mode exposes the requested parties per source; coverage
|
||||
modes show the derived minimum party count before submission.
|
||||
The optional **NPC seat audit** multiplies each generated composition across all
|
||||
five active-seat assignments and makes in-app class/ability analysis prefer the
|
||||
NPC-only report tables.
|
||||
|
||||
**Run on server** sends one allow-listed configuration to the authenticated GM
|
||||
API. **Run all level brackets** submits the complete schedule atomically and
|
||||
@@ -161,8 +186,135 @@ deployment exhausts the host watcher limit, the job now reports that specific
|
||||
startup failure instead of only the subprocess exit code; deploy the no-watch
|
||||
runtime fix rather than increasing the host's watcher allowance.
|
||||
|
||||
## Local graphical runs
|
||||
|
||||
On Windows, double-click `scripts/Launch Balance Lab GUI.cmd`. The launcher
|
||||
starts the local Balance Lab service, opens the existing Balance Lab screen in
|
||||
the default browser, and keeps the worker service alive in its command window.
|
||||
Leave that window open until queued simulations finish. The equivalent terminal
|
||||
command is:
|
||||
|
||||
```powershell
|
||||
npm run balance:gui
|
||||
```
|
||||
|
||||
This development-only mode binds Vite to `127.0.0.1`, accepts API requests only
|
||||
from the loopback interface, and does not require an online account or GM login.
|
||||
It uses the same Python controller, TypeScript combat runtime, configuration
|
||||
form, progress UI, report dashboard, and artifact downloads as the server GM
|
||||
tool. Job history and reports persist beneath
|
||||
`artifacts/balance-lab-gui-runtime`; closing the browser does not stop work, but
|
||||
closing the launcher does. Production and ordinary development modes do not
|
||||
expose these unauthenticated local routes.
|
||||
|
||||
Use **All brackets** in the GUI for every-10-level, every-5-level, or every-level
|
||||
runs. Use **Run locally** for one level. The runtime status at the top confirms
|
||||
that Python is available before a run is submitted.
|
||||
|
||||
## Repeatable command-line runs
|
||||
|
||||
Run the same every-10-level schedule used by the GM screen entirely on the
|
||||
local development machine:
|
||||
|
||||
```powershell
|
||||
npm run balance:lab:brackets
|
||||
```
|
||||
|
||||
The bracket runner launches the existing Python controller and live TypeScript
|
||||
runtime; it does not contain a second combat implementation. By default it
|
||||
tests every WoW specialization at levels 1, 10, 20, and so on through 80, uses
|
||||
three seeds, allows 80 seconds per fight, and runs up to four level processes
|
||||
concurrently. Normal Balance Lab options can narrow the run:
|
||||
|
||||
```powershell
|
||||
npm run balance:lab:brackets -- `
|
||||
--levels 40,50,60,70,80 `
|
||||
--simulations-per-party 5 `
|
||||
--boss "stormwind-stockade/entry-1717" `
|
||||
--boss "stormwind-stockade/entry-1663"
|
||||
```
|
||||
|
||||
Use `--step 5` or `--step 1` for the other GM schedules, `--jobs 1` when the
|
||||
machine should remain responsive, and `--output-dir <path>` for a stable
|
||||
comparison location. `npm run balance:lab:regression -- <options>` runs the
|
||||
same suite but returns a failing exit code when configured pressure or
|
||||
durability limits are exceeded. The default checks flag boss durability below
|
||||
20 or above 70 boss-damage seconds, bracket-to-bracket boss-health growth more
|
||||
than 1.5 times party boss-DPS growth once the preceding bracket reaches that
|
||||
minimum window, missing incoming damage, and local raw runs where healers are
|
||||
not required often enough or answer fewer than 60% of five-second pressure
|
||||
windows.
|
||||
|
||||
The bracket root contains `bracket-summary.json`, `.csv`, and `.md`. These show
|
||||
boss health beside direct boss DPS, incoming DTPS, effective healer HPS,
|
||||
mitigation, healing coverage, five-second pressure windows answered by healer
|
||||
throughput, outcomes, and growth relative to the previous tested level.
|
||||
`heirloom-summary.json` and `.csv` record the resolved item level,
|
||||
slot count, attributes, ratings, armor, and weapon DPS for every tested build.
|
||||
Existing reports can be re-analyzed without rerunning combat:
|
||||
|
||||
```powershell
|
||||
python scripts/balance_lab_brackets.py --analyze-existing artifacts/balance-lab-brackets/<run>
|
||||
```
|
||||
|
||||
Balance Lab builds use the `virtual-heirloom` preset. Empty persisted inventory
|
||||
and equipment assignments mean that no earned drops override the virtual set;
|
||||
they do not mean that the character is ungeared. Virtual heirlooms fill every
|
||||
compatible slot with specialization-specific synthetic stats, scale through
|
||||
level 79, and remain at item level 79 for every party member at level 80. They
|
||||
are not literal Blizzard heirloom item templates: their custom stat budget is
|
||||
normalized slightly above the best compatible same-level item in the authored
|
||||
WotLK-derived loot catalog. The saved catalog and heirloom summary make that
|
||||
resolved loadout explicit for each local run.
|
||||
|
||||
Run selected brackets as a companion-only seat audit:
|
||||
|
||||
```powershell
|
||||
npm run balance:lab:npc-audit -- --levels 20,40,60,80 --simulations-per-party 1
|
||||
```
|
||||
|
||||
NPC raw rows include the named talent build and character, selected rotation
|
||||
profile/rule/reason counts, profile priority for every available ability,
|
||||
missing profile actions, GCD uptime, and sampled resource starvation/capping.
|
||||
Use these diagnostics before changing class coefficients.
|
||||
|
||||
## Companion cooldown policy
|
||||
|
||||
GM Tools includes a revisioned **Companion cooldown policy** editor. Generic
|
||||
rules control normal defensive, emergency defensive, healer mitigation, and
|
||||
major offensive cooldown thresholds. Mechanic rules bind an authored boss
|
||||
attack to tank-only or party-wide pre-emptive mitigation with configurable lead
|
||||
time and minimum defensive cooldown length.
|
||||
|
||||
Clients load the published policy from `/api/companion-cooldown-policy`; GM
|
||||
reads/writes use `/api/gm/companion-cooldown-policy`. Server Balance Lab jobs
|
||||
snapshot the published policy before launch. Local runs use built-in defaults
|
||||
unless `--cooldown-policy` points to a JSON policy file.
|
||||
|
||||
## Companion specialization readiness
|
||||
|
||||
The shared revisioned readiness policy classifies all 31 WoW specializations
|
||||
as Ready, Beta, or Needs Testing. Shipped defaults certify only Protection
|
||||
Warrior/Aldren, Discipline Priest/Quorin, Marksmanship Hunter/Liora, Fire
|
||||
Mage/Xavian, and Assassination Rogue/Orin. The main menu, Dungeon setup, and
|
||||
Balance Lab link to the full Companion Readiness catalog. Players can inspect
|
||||
it; authenticated GMs can edit and atomically publish the complete policy.
|
||||
Published policies must retain at least one Ready tank, one Ready healer, and
|
||||
three distinct Ready damage specializations.
|
||||
|
||||
Random and all-eligible WoW runs use Ready specs by default. **Include Beta
|
||||
Specs** adds Beta specs and is saved per device; explicit targeted runs may
|
||||
still select a Needs Testing spec, but their filler seats come only from the
|
||||
eligible Ready/Beta pool. CoA and RoM Balance Lab catalogs are unchanged.
|
||||
Server jobs snapshot the published policy and beta choice. Local GUI runs use
|
||||
the revisioned loopback policy saved under
|
||||
`artifacts/balance-lab-gui-runtime`; corrupt or missing policy files fall back
|
||||
to shipped defaults.
|
||||
|
||||
CLI parity is available through `--include-beta-specs` and
|
||||
`--companion-readiness-policy <json>`. The JSON may be the published envelope
|
||||
or its policy config.
|
||||
|
||||
List exact party build IDs at a level:
|
||||
|
||||
```powershell
|
||||
@@ -274,6 +426,8 @@ under `parties/<party-id>/` and adds these suite-level files:
|
||||
| `party_configurations.csv` | Every generated party, its full composition, party DPS, DTPS, deaths, and outcomes. |
|
||||
| `class_specs_across_parties.csv` | Every class/spec observed across every configuration, compared with its source/role median. |
|
||||
| `class_abilities_across_parties.csv` | Every learned/available and observed class/spec ability, including unused rows, usage frequency, damage contribution, healing, and absorbs. |
|
||||
| `npc_class_specs_across_parties.csv` | NPC-only class/spec results, excluding each run's active benchmark-controlled seat. |
|
||||
| `npc_class_abilities_across_parties.csv` | NPC-only ability, rotation-priority, decision-count, and missing-profile-action results. |
|
||||
| `class_spec_by_boss.csv` | Every observed class/spec broken down against every boss it fought. |
|
||||
| `bosses_across_parties.csv` | Every boss aggregated across all generated parties. |
|
||||
| `boss_by_party.csv` | Every boss and party-configuration pairing. |
|
||||
@@ -380,16 +534,19 @@ combat tick while retaining their own attack cadence.
|
||||
- `scripts/balance-lab/runtime.ts`: live headless fight setup, controlled clock,
|
||||
exact party construction, boss execution, and lossless event attribution.
|
||||
- `src/ui/BalanceLabScreen.tsx`: GM form, searchable boss selection, persistent
|
||||
run-history selection, progress display, report loading, and authenticated
|
||||
run-history selection, progress display, report loading, and server or local
|
||||
artifact opening/downloading.
|
||||
- `src/ui/BalanceLabResults.tsx`: in-app graphs, report filters, sorting, summary
|
||||
cards, and complete boss/class-spec/party tables. Add new dashboard metrics
|
||||
here only after they exist in `suite-report.json`.
|
||||
- `src/app/balanceLabClient.ts`: typed GM Balance Lab API client.
|
||||
- `src/app/balanceLabClient.ts`: typed Balance Lab API client with authenticated
|
||||
server and loopback-local execution targets.
|
||||
- `server/balance-lab-jobs.mjs`: validated single and batch job specifications,
|
||||
bounded parallel process queue, progress parsing, `job.json`
|
||||
persistence/startup restoration, report-summary extraction, and artifact
|
||||
allow-list.
|
||||
- `server/local-balance-lab-api.mjs`: loopback-only, no-login development API
|
||||
that owns the local job service and persists GUI runs under `artifacts/`.
|
||||
- `server/server.mjs`: GM-authenticated runtime-preflight, job, status, and
|
||||
artifact HTTP routes.
|
||||
- `src/game/benchmark/benchmarkBuilds.ts`: selectable spec builds and legal
|
||||
@@ -410,8 +567,9 @@ For tool changes, run at minimum:
|
||||
|
||||
```powershell
|
||||
python -m py_compile scripts/balance_lab.py
|
||||
python -m unittest scripts.test_balance_lab
|
||||
node --test server/balance-lab-jobs.test.mjs server/server.test.mjs
|
||||
python -m py_compile scripts/balance_lab_brackets.py
|
||||
python -m unittest scripts.test_balance_lab scripts.test_balance_lab_brackets
|
||||
node --test server/local-balance-lab-api.test.mjs server/balance-lab-jobs.test.mjs server/server.test.mjs
|
||||
python scripts/balance_lab.py --source wow --level 20 --party-mode automatic --party-configurations 2 --boss "gundrak/entry-29932" --simulations-per-party 1 --duration 5 --output-dir artifacts/balance-lab-smoke
|
||||
npm test -- --run src/game/benchmark src/game/partyStore.test.ts src/game/partyRuntime.test.ts
|
||||
npm run build
|
||||
|
||||
Reference in new issue
Block a user