Skip to content

feat: validate_power_budget -- power-balance budget validator#6

Merged
sligara7 merged 2 commits into
mainfrom
feat/power-budget-validator
Jun 14, 2026
Merged

feat: validate_power_budget -- power-balance budget validator#6
sligara7 merged 2 commits into
mainfrom
feat/power-budget-validator

Conversation

@sligara7

Copy link
Copy Markdown
Owner

What

Adds validate_power_budget(species_data, class_data, subclass_data, level) -> list[str] in dndwright/rules/homebrew_validator.py.

Problem

Today the only balance signal for homebrew characters is the LLM's self-graded balance_score, never enforced. A "Superman (species-heavy) + Batman (class-heavy)" concept can stack a full species' traits AND a full class's features.

Approach

Three checks against SRD baselines derived from dndwright's own content (not invented):

Check Baseline source Budget
Species traits 9 SRD 5.2.1 species in species.json 5 total, 3 high-impact
Class+subclass features 12 SRD classes in classes.json Max observed at level (interpolated)
Combined split Sum of species + class budgets Species budget + class budget per level

High-impact traits (flight, innate casting, resistance, breath weapon, darkvision/tremorsense) are weighted heavier.

Tests

17 new tests: balanced passes, species-over/fails, class-over/fails, combined-over (Superman+Batman)/fails, edge cases (empty data, missing traits, malformed lists, features below level).

1635 total (was 1618). No regressions.

Baseline derivation

Methodology documented in the source comments: counted traits per SRD species, cumulative features active at level per SRD class, set budgets slightly above SRD max to allow homebrew creativity while catching over-stacking.

sligara7 added 2 commits June 13, 2026 22:06
Adds validate_power_budget(species_data, class_data, subclass_data, level) -> list[str] in dndwright/rules/homebrew_validator.py. Baselines DERIVED from dndwright content: 9 SRD 5.2.1 species (3-5 traits, 3 high-impact max) and 12 SRD classes (cumulative features active by level at 1/3/5/10/20).

Three checks:
1. Species trait budget: max 5 total, max 3 high-impact (flight, innate casting, resistance weighted)
2. Class+subclass feature budget per level: max observed across SRD classes at that level
3. Combined split: species+class total must stay within sum of budgets (no Superman+Batman stacking)

17 new tests, 1635 total (was 1618), no regressions.
Two gaps from Boss review:
1. Added validate_power_budget to dndwright/__init__.py import and __all__
2. Version bump to 0.25.0 in pyproject.toml, __init__, CHANGELOG

Also updated test_api_contract.py EXPECTED_PUBLIC and EXPECTED_SIGNATURES.
1635 tests green.
@sligara7
sligara7 merged commit 683e79c into main Jun 14, 2026
0 of 4 checks passed
@sligara7
sligara7 deleted the feat/power-budget-validator branch June 14, 2026 02:39
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