Skip to content

Commit dd4ade8

Browse files
SnoopLawgclaude
andcommitted
M5: recommender suite usage guide + register tools in CLAUDE.md
docs/m5_recommender_guide.md ties the M5 suite together end-to-end: the data layer (regenerate-after-patch commands), the recommender layer (team / build / roster-gaps CLIs), and an explicit coverage/limitations section (no sim validation yet, only game-imposed stat floors, readiness covers profiled heroes). Registered all M5 tools + cb_attribution_diff in the CLAUDE.md Tools table for discoverability. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent a997195 commit dd4ade8

2 files changed

Lines changed: 88 additions & 0 deletions

File tree

CLAUDE.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,15 @@ curl /context-call?path=...AllianceBossHeroesSelectionDialog&method=StartBattle
462462
| `tools/loadouts.py` | SQLite-backed artifact loadout snapshot / apply / restore |
463463
| `tools/hh_picker.py` | HH-driven team picker + per-hero stat targets + greedy gear picker (emits farm_cycle plans) |
464464
| `tools/farm_cycle.py` | Orchestrator: plan/prepare (snapshot → equip → preset), restore, status, run |
465+
| `tools/m5_recommender.py` | **M5** per-location team recommender (`--location`, `--builds`, `--pool all`); see `docs/m5_recommender_guide.md` |
466+
| `tools/m5_build_recommender.py` | M5 per-hero build (masteries/blessing/stats) + ACC-floor readiness vs `/hero-computed-stats` |
467+
| `tools/m5_roster_gaps.py` | M5 "what to pull/build next" per location (hard gaps, thin axes, best unowned upgrades) |
468+
| `tools/m5_synergy_graph.py` | M5 cross-hero provides/needs tags from game-truth skill descriptions |
469+
| `tools/m5_stat_targets.py` | M5 game-truth ACC floors (boss RES) + boss stat modifiers per stage |
470+
| `tools/m5_inventory.py` / `m5_hero_catalog.py` | M5 universe inventory + per-hero CB sim coverage |
471+
| `tools/m5_mastery_tagger.py` / `m5_blessing_tagger.py` | M5 mastery/blessing relevance × 12 locations |
472+
| `tools/extract_blessing_procs.py` | M5 game-truth blessing proc formulas (grade-by-grade) via authoritative skill link |
473+
| `tools/cb_attribution_diff.py` | per-hero/per-source damage diff (real tick log vs sim) for calibration |
465474

466475
## Data Files
467476

docs/m5_recommender_guide.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Milestone 5 — Recommender suite (usage guide)
2+
3+
The M5 engine answers, for **every location** (not just CB): *what team should
4+
I bring, how do I build each hero, are my heroes ready, and what should I pull
5+
or farm next?* Everything is grounded in game-truth (skill descriptions, static
6+
data, the live `/hero-computed-stats` endpoint); HellHades ratings are an
7+
additive signal, never authoritative.
8+
9+
## The data layer (regenerate after a Raid patch)
10+
11+
| File | Tool | What it holds |
12+
|---|---|---|
13+
| `docs/m5_phase1_inventory.md` | `m5_inventory.py` | universe inventory (heroes/skills/masteries/blessings/sets/locations) |
14+
| `data/m5_hero_catalog.jsonl` | `m5_hero_catalog.py` | per-hero CB sim coverage (modeled / no_op / gap) |
15+
| `data/m5_synergy.jsonl` | `m5_synergy_graph.py` | per-hero provides/needs (team buffs, debuffs, DoTs, TM, cleanse, …) |
16+
| `data/static/mastery_relevance.json` | `m5_mastery_tagger.py` | all 66 masteries × 12 locations |
17+
| `data/static/blessing_relevance.json` | `m5_blessing_tagger.py` | all 34 blessings × 12 locations |
18+
| `data/static/blessing_procs.json` | `extract_blessing_procs.py` | game-truth blessing proc formulas (grade-by-grade) |
19+
| `data/static/stage_stat_targets.json` | `m5_stat_targets.py` | per-stage boss stat modifiers + ACC floors |
20+
| `hero_computed_stats.json` | `/hero-computed-stats` (live) | the user's actual Total-Stats per geared hero |
21+
22+
Regenerate the derived files:
23+
```bash
24+
python3 tools/refresh_static_data.py # static data from live mod
25+
python3 tools/m5_inventory.py
26+
python3 tools/m5_hero_catalog.py
27+
python3 tools/m5_synergy_graph.py
28+
python3 tools/m5_mastery_tagger.py
29+
python3 tools/m5_blessing_tagger.py
30+
python3 tools/extract_blessing_procs.py
31+
python3 tools/m5_stat_targets.py
32+
curl -s "http://localhost:6790/hero-computed-stats?min_grade=4" -o hero_computed_stats.json
33+
```
34+
35+
## The recommender layer (what you run day-to-day)
36+
37+
### Team for a location
38+
```bash
39+
python3 tools/m5_recommender.py --location cb # owned roster
40+
python3 tools/m5_recommender.py --location dragon --builds # + per-hero builds
41+
python3 tools/m5_recommender.py --location arena --pool all # "what if I pulled X"
42+
python3 tools/m5_recommender.py --list-locations
43+
```
44+
Greedy axis-coverage builder over 8 location profiles (cb / dragon / spider /
45+
fire_knight / ice_golem / hydra / chimera / arena). CC providers are
46+
downweighted vs CC-immune bosses; the game-truth ACC floor is surfaced.
47+
48+
### How to build a specific hero
49+
```bash
50+
python3 tools/m5_build_recommender.py --hero Venomage --location cb
51+
```
52+
Maps the hero's game-truth kit → relevant masteries (filtered to the location),
53+
blessing, and stat focus — and checks the user's **actual ACC** against the
54+
floor (`[READY: you have 423]` / `[GAP: need +M]`).
55+
56+
### What to pull / build next
57+
```bash
58+
python3 tools/m5_roster_gaps.py # all locations summary
59+
python3 tools/m5_roster_gaps.py --location cb # gaps + best unowned upgrades
60+
```
61+
62+
## Coverage / limitations (no silent caps)
63+
64+
- **Sim validation**: the recommender ranks by synergy coverage + HH signal; it
65+
does **not** yet run the CB sim on the suggested team (CB-only + calibration
66+
work in progress — see `project_spirit_fixture_attribution_20260623`).
67+
- **Damage stat targets**: only game-imposed floors (ACC = boss RES) are
68+
modeled. Per-build CR/CD/ATK% targets are intentionally not invented.
69+
- **Readiness**: covers heroes present in `hero_computed_stats.json` (grade≥4
70+
snapshot). Absent heroes get no annotation.
71+
- **Blessing procs**: extracted game-truth (`blessing_procs.json`) but not yet
72+
wired into the CB damage sim.
73+
74+
## Naming gotcha (blessings)
75+
76+
`blessings.json` `id` is the internal **code enum** (MagicOrb, Meteor,
77+
Exterminator); the **UI name** is the proc skill's display name (Phantom Touch,
78+
Brimstone, Cruelty). `blessing_procs.json` carries both. Match by either; the
79+
`skill_type_id` link is authoritative.

0 commit comments

Comments
 (0)