Skip to content

Releases: brendanlefebvre/spud-coach

v0.14.1

Choose a tag to compare

@brendanlefebvre brendanlefebvre released this 04 Aug 12:23

Hotfix: cap the MCP SDK dependency at mcp<2.

mcp 2.0.0 (2026-07-28) removed mcp.server.fastmcp and renamed the server class to MCPServer. Because the dependency was unbounded (mcp>=1.2.0), uvx spudcoach re-resolved to 2.0.0 and crashed on import with ModuleNotFoundError: No module named 'mcp.server.fastmcp'.

This release pins mcp>=1.2.0,<2 (resolves to 1.29.0, which still ships fastmcp), restoring uvx spudcoach launches. The port to the mcp 2.0 MCPServer API is tracked in the roadmap.

v0.14.0 — character tool-surface parity

Choose a tag to compare

@brendanlefebvre brendanlefebvre released this 27 Jul 11:10
0dd88f3

Characters get first-class treatment on the tool surface. A client asking "which character suits an engineering build?" previously had to guess names one at a time — an observed 7 round-trips and 42 seconds. It's now one call.

Added

  • list_characters — survey characters by scaling_stat, wanted_tag, banned_item_group, special_effect, class_bonus_set or can_start_with. Returns full records, not summaries, so no follow-up get_character is needed; detail="summary" opts out.
  • Batch lookupsget_weapon, get_item and get_character now accept name as a string or a list of strings, returning {"results": [...]} in order. One bad name doesn't fail the batch.
  • starting_weapon_pool on every character record (schema v7 → v8).
  • Six character filter vocabularies in get_filter_options.

Notes for consumers

  • scaling_stat is a derived union — characters have no scaling-stat field. Matched records carry a scaling_match object naming which signal fired (positive gain modifier, positive flat bonus, or wanted_tag) so you can weigh matches yourself: Engineer {gain_pct: 25, flat: 10, wanted: true} is not the same as Technomage {wanted: true}. Characters penalised in a stat are excluded from matches.
  • starting_weapon_pool is the run-start selection pool, not a fixed starting weapon. Most characters offer a dozen or more; Beast Master and Bull offer none. Only 46 of 62 weapons can ever start a run.
  • Backward compatible — passing a plain string to the three get_* tools behaves exactly as in 0.13.0. Tool count 21 → 22.
  • Rebuild your dataset with build_dataset.py to pick up schema v8; the character tools need starting_weapon_pool for can_start_with.

Full changelog: v0.13.0...v0.14.0

v0.13.0 — Stat-aware DPS engine

Choose a tag to compare

@brendanlefebvre brendanlefebvre released this 18 Jul 15:02

Stat-aware DPS engine

The big change: weapon DPS is now computed from your actual stats, not a
generic reference dummy.

  • Stat-aware weapon_dps / compare_weapons — game-exact per-hit damage,
    crit expectation, and cycle time derived from your damage %, attack speed,
    crit chance, ranged/melee/elemental bonuses, and player level. Every result
    carries an explicit assumptions block.
  • New stat_gradient tool — tells you which single stat point buys the most
    DPS right now.
  • evaluate_run upgrades — adds top_stat_gradient and stat-aware ranking.
  • Numeric merge-path crossover — merge decisions are solved on the
    stat-aware engine (the old RD-line model is gone).

Data / fixes

  • Schema v6 dataset: raw stat-aware weapon fields + structured proc
    descriptors.
  • Player level now flows from saves into the stats block and merge-path profiles.
  • Weapon-stats file selection generalized to exact-match (fixes Pruner; excludes
    companion _proj_stats.tres).
  • Documented the negative-attack-speed cooldown penalty; tightened weapon
    validation; guarded stat_gradient against empty loadouts / non-positive step.

Full history: v0.12.0...v0.13.0

v0.12.0 — Weapon cadence reporting

Choose a tag to compare

@brendanlefebvre brendanlefebvre released this 11 Jul 23:45

Weapon cadence reporting

v0.12.0 teaches the coach when a weapon fires, not just how hard it hits. Every weapon now carries a verified cadence profile derived from the game's own randomized-cooldown (cooldown_jitter) model.

New on weapon records / tools

  • weapon_dps, compare_weapons, and evaluate_run now surface a cadence profile: attacks per second, damage per attack, a human-readable cadence label, and the verified inter-shot gap range (gap_range_s).
  • Burst-reload weapons (e.g. Revolver) are flagged so their reload cycle isn't mistaken for steady fire.
  • evaluate_run computes cadence at your actual weapon count.

Verified, not guessed — the model reflects weapon.gd's per-shot randomized cooldown, whose jitter grows with weapon count and deliberately de-syncs volleys (so there is intentionally no cross-weapon "sync risk" metric). See docs/cadence-mechanics.md. Nominal DPS still uses the raw basis cooldown and does not model the cooldown floor-skew for very fast multi-weapon builds — logged on the roadmap.

Also — includes the #14 fix: evaluate_run / weapon_dps previously used raw stats, understating DPS for gain-modifier characters.

Install / update: uvx spudcoach

v0.11.0 — Bestiary awareness

Choose a tag to compare

@brendanlefebvre brendanlefebvre released this 07 Jul 12:06

Bestiary awareness

v0.11.0 teaches the coach what the game throws at you — enemy stats and per-wave spawn composition, distilled deterministically from the game data (dataset schema v4).

New MCP tools

  • get_enemy(name, wave=None) — an enemy's base stats, per-wave scaling, and attack profile; pass a wave to get effective stats at that wave.
  • list_enemies(...) — filter the roster by attack kind, ability, or where it appears.
  • wave_composition(wave, danger=None) — the exact base-game (Crash Zone) enemy groups for waves 1–20, danger-gated.

Post-mortemevaluate_run now includes a wave_context section: what was spawning at your death wave, what threat ramped just before it, and effective enemy stats at that wave.

Honesty envelope — enemy stats and base composition are exact; realized counts (number-of-enemies %, co-op) and elite/horde presence are labelled as run-variance, never asserted as guaranteed. read_me primes callers on all of this.

Scope — base-game Zone 1. DLC zones and boss multi-phase kits are follow-ups (bosses carry a bespoke_kit_not_modeled flag).

Install / update: uvx spudcoach

v0.10.0

Choose a tag to compare

@brendanlefebvre brendanlefebvre released this 06 Jul 14:09

What's Changed

  • docs: refresh roadmap against actual current state by @BrendanL79 in #7
  • feat: model the burning DoT proc + stat_range projectile-speed nuance by @BrendanL79 in #8
  • feat: triage the full proc worklist — model companion-projectile procs, classify every non-DPS effect by @BrendanL79 in #9
  • read_me orientation tool + 1-indexed item tiers (schema v3) by @BrendanL79 in #10

Full Changelog: v0.9.3...v0.10.0

v0.9.3

Choose a tag to compare

@brendanlefebvre brendanlefebvre released this 04 Jul 20:00

Full Changelog: v0.9.2...v0.9.3

v0.9.2

Choose a tag to compare

@brendanlefebvre brendanlefebvre released this 04 Jul 19:57

Full Changelog: v0.9.1...v0.9.2

v0.9.1

Choose a tag to compare

@brendanlefebvre brendanlefebvre released this 04 Jul 19:44

Full Changelog: v0.9.0...v0.9.1

v0.9.0

Choose a tag to compare

@brendanlefebvre brendanlefebvre released this 04 Jul 18:59

What's Changed

  • fix(build): resolve weapon effect + class-set ext_resources (were dropped) by @BrendanL79 in #1
  • docs: add project roadmap by @BrendanL79 in #2
  • Roadmap Phase A: proc-aware DPS, set-bonus reasoning, stat summaries, localization plumbing, ship prep by @BrendanL79 in #3
  • Roadmap Phase B: verified proc models, complete stat mechanics, localized dataset (schema v2) by @BrendanL79 in #4
  • Run-save post-mortem tool + pet-item discovery fix by @BrendanL79 in #6

New Contributors

  • @BrendanL79 made their first contribution in #1

Full Changelog: https://github.com/BrendanL79/spud-coach/commits/v0.9.0