build_validate_build
Validate Pathfinder 2e builds for rule violations and missing prerequisites. Returns errors and warnings on feats, skill ranks, ancestry budget, archetype dedication, proficiency, and PFS.
Instructions
Structured validation, not prose -- returns errors (definite rule
violations) and warnings (things that couldn't be auto-verified and
need human confirmation). Covers: duplicate feats, prerequisites of
every taken feat still being satisfied (important after e.g. a
hypothetical ancestry swap mid-build), skill ranks not exceeding the
fixed level-3/7/15 expert/master/legendary caps, whether the number of
ancestry-category feats taken fits the character's actual budget for
their level, and (new) the archetype "one dedication feat at a time"
rule -- a level-ordered check that no dedication feat was taken while
an earlier, different dedication still needed two other archetype
feats first (see _validate_dedication_exclusivity; this is validation
this project does that Foundry's own reference implementation doesn't
attempt either -- confirmed nothing in its source enforces it), and
(new) a warning for any fixed (non-player-choice) trained skill or
Lore the character's background/class grants but that isn't actually
trained on the character (see _validate_fixed_trained_skills --
deliberately scoped to just the fixed/unconditional grants, not the
player's free "additional" choices, since those can't be cleanly told
apart from later Skill Increases without risking a false positive at
higher levels), (new) a warning if the character's total count of
trained-or-better skills/lores is below the level-1 minimum implied by
class fixed+additional skills, background fixed/lore/choice skills, and
the character's Intelligence modifier if positive -- a floor check, not
an identity check, so it stays valid at any level (see
_validate_trained_skill_count; this exists specifically because the
Intelligence-modifier bonus to a class's additional trained-skill count
is a universal core rule not baked into list_classes' additional
field, and is easy to silently drop), and (new) a warning for any
save/Perception/weapon/
armor/class-DC proficiency rank that's lower than what the
character's class baseline plus its granted class features/taken feats
up to their level should produce (see _validate_proficiency_ranks).
Does NOT yet check ability-boost-tier double-ups across sources, or
spellcasting proficiency specifically (tradition-dependent -- see
_validate_proficiency_ranks's docstring for why that one key is
skipped).
`variant_rules` (see rules_list_variant_rules / get_level_up_choices)
changes the ancestry-feat budget when `'ancestry-paragon'` is included
(2 feats at level 1, one more at every odd level, instead of the
class's normal 1/5/9/13/17 schedule), and adds a soft, non-blocking
note about archetype-trait feat count when `'free-archetype'` is
included -- that one is a warning rather than an error because this
server doesn't track class/skill-feat-slot usage at all, so it can't
tell a normal-slot archetype feat apart from a free-archetype bonus
slot with certainty; only ancestry feats get a hard budget check, since
'ancestry' is otherwise never used as a normal class/skill/general feat
slot. The **Ancestral Paragon** general feat (a real, always-available
pick independent of any variant rule) adds +1 to the ancestry budget on
its own if taken.
`pfs_legal_only=True` adds a warning for any taken feat whose
best-effort PFS status (see pfs.py) isn't 'legal' -- not authoritative,
see that module's docstring.Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| character | Yes | ||
| variant_rules | No | ||
| pfs_legal_only | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||