Skip to content

[E-FATE-1] Implement @randsum/fate Fudge dice package #969

@alxjrvs

Description

@alxjrvs

Part of #940

Phase 1: Implement Fate Core Fudge dice package

Updated 2026-03-24: Game packages now use .randsum.json specs + codegen, not createGameRoll. See existing games in packages/games/ for the pattern.

Scope

Ship Fate Core as a new subpath in @randsum/games — a .randsum.json spec that defines 4dF (Fudge dice) with Fate ladder labels. Codegen produces the TypeScript.

Acceptance Criteria

  • fate.randsum.json spec in packages/games/ defining 4dF with custom sides [-1, 0, 1]
  • Codegen produces src/fate.generated.ts — accessible via import { roll } from '@randsum/games/fate'
  • roll(4) returns a result with numeric value (-4 to +4) and Fate ladder label
  • Default is 4 dice; roll(n) accepts any positive integer
  • FATE_LADDER constant exported, mapping each integer value (-4 to +4) to its label: Terrible, Poor, Mediocre, Average, Fair, Good, Great, Superb, Legendary
  • Unit tests cover: default 4 dice, custom quantity, all 9 label boundary values
  • Property-based test with fast-check: for any quantity N, result value is always in range [-N, +N]
  • Bundle within game package size limit

Implementation Notes

  • Follow the pattern of existing game packages (e.g., blades.randsum.json, fifth.randsum.json)
  • Fate Accelerated uses the same dice mechanic; document in README that the Fate subpath works for FAE
  • Fate points / invoke bonuses are out of scope — dice-only

Out of Scope

  • Fate Accelerated approach labels
  • Fate points, invoke bonuses, or compel mechanics
  • Skill/aspect tracking

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestgame-packageA game-specific dice packagephaseA phase within an epic

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions