• Spend Fate on a test: roll a Fate test and apply its post-roll success-level bump to the original test — the die is never re-rolled (#854).

    The flow, all at the player's behest (the card's Fate button or the sheet cell is the human trigger):

    1. Gate on an eligible, charged Fate Point (availableFateFor); no point ⇒ a warning and no-op.
    2. Roll the Fate test against the host's fateMasteryLevel (its own success test, resolved by getFateDescTable); its result posts nothing here — this function posts a single Fate card describing the resolved path.
    3. Resolve the rung via resolveFateOutcome — consumption and the level delta are driven by the matched rung, never isSuccess. A critical success prompts the player's spend (+2) / keep (+1) choice.
    4. Consume a point when the rung requires it, decrementing one eligible Fate Mystery — chosen by the player when more than one is eligible (auto-picked otherwise).
    5. Bump the original result's stored success level by the delta and re-post its card, which re-resolves its description table against the new level. The original result rides in context.scope.priorTestResult (serialized on the Fate button, revived on click).

    Parameters

    Returns Promise<void>

    Resolves once the Fate test, any consumption, and the re-post complete. A no-op (with a warning) when Fate is unavailable, and a silent return when the player dismisses the Fate roll or a required choice.