Skip to content

Enforce Attribute Bonus Chart coverage in the schema (byValue 16–30, one definition per attribute) #21

Description

@StreamDemon

P2 from the 2026-07-03 review (docs/reviews/2026-07-03-rules-layer-review.md, PR #19).

engine/attributes.ts documents that a mis-transcribed chart cell "throws at import time — so bad data can never reach the app", but the schema never validates that each effect's byValue covers the full minValueForBonus..maxTabulatedValue range (16–30), nor that each attribute code appears only once. A missing row validates fine and effectBonus's ?? 0 (attributes.ts:41) silently converts the transcription hole into a +0 bonus.

Current shipped content is complete (verified cell-for-cell against printed p.281), so this is a latent gap that will bite on the next transcription pass (#12, #14).

Fix: add a schema refine enforcing full byValue coverage and unique attribute codes; consider making effectBonus throw on a missing key instead of ?? 0.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:rulesRules engine (@riftforge/rules)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions