SetBoostsMutation.kt

package io.github.lishangbu.avalon.game.battle.engine.core.mutation

import io.github.lishangbu.avalon.game.battle.engine.core.type.TargetSelectorId

/**
 * 直接替换单位当前 stored boosts 的 mutation。
 *
 * 设计意图:
 * - 为 `psych-up / power-swap / topsy-turvy / spectral-thief` 这类“改写既有能力阶级”
 *   的规则提供统一写回模型;
 * - 这类规则并不是“发起一次新的 boost 请求”,因此不走 `on_boost` 生命周期;
 * - 目标写回前仍会经过统一 boost 规范化,保证键、上下限和 0 值清理一致。
 *
 * @property target 目标选择器。
 * @property boosts 目标最终应持有的完整 boosts 快照。
 */
data class SetBoostsMutation(
    val target: TargetSelectorId,
    val boosts: Map<String, Int>,
) : BattleMutation