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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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