Upgrade outcomes
CraftingUpgrader uses one roll: success when chance>=roll; otherwise break when breakChance>=1-roll; otherwise item loses one quality. Success wins overlapping intervals. Break returns ceil((base requirement + requirement at previous quality)*returnFraction) for recoverable requirements. Costs are consumed on every upgrader outcome. Upgrader bypasses normal maximum quality.

