fix: address PR review findings — rename evolution_tier to refractor_tier

- Rename `evolution_tier` parameter to `refractor_tier` in compute_variant_hash()
  to match the refractor naming convention established in PR #131
- Update hash input dict key accordingly (safe: function is new, no stored hashes)
- Update test docstrings referencing the old parameter name
- Remove redundant parentheses on boost_delta_json TextField declaration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Cal Corum 2026-03-30 11:06:38 -05:00
parent 4a1251a734
commit 776f1a5302
2 changed files with 9 additions and 9 deletions

View File

@ -282,12 +282,12 @@ def apply_pitcher_boost(ratings_dict: dict, tb_budget: float = 1.5) -> dict:
def compute_variant_hash( def compute_variant_hash(
player_id: int, player_id: int,
evolution_tier: int, refractor_tier: int,
cosmetics: list[str] | None = None, cosmetics: list[str] | None = None,
) -> int: ) -> int:
"""Compute a stable, deterministic variant identifier for a boosted card. """Compute a stable, deterministic variant identifier for a boosted card.
Hashes the combination of player_id, evolution_tier, and an optional sorted Hashes the combination of player_id, refractor_tier, and an optional sorted
list of cosmetic identifiers to produce a compact integer suitable for use list of cosmetic identifiers to produce a compact integer suitable for use
as a database variant key. The result is derived from the first 8 hex as a database variant key. The result is derived from the first 8 hex
characters of a SHA-256 digest, so collisions are extremely unlikely in characters of a SHA-256 digest, so collisions are extremely unlikely in
@ -298,7 +298,7 @@ def compute_variant_hash(
Args: Args:
player_id: Player primary key. player_id: Player primary key.
evolution_tier: Refractor tier (04) the card has reached. refractor_tier: Refractor tier (04) the card has reached.
cosmetics: Optional list of cosmetic tag strings (e.g. special art cosmetics: Optional list of cosmetic tag strings (e.g. special art
identifiers). Order is normalised callers need not sort. identifiers). Order is normalised callers need not sort.
@ -307,7 +307,7 @@ def compute_variant_hash(
""" """
inputs = { inputs = {
"player_id": player_id, "player_id": player_id,
"evolution_tier": evolution_tier, "refractor_tier": refractor_tier,
"cosmetics": sorted(cosmetics or []), "cosmetics": sorted(cosmetics or []),
} }
raw = hashlib.sha256(json.dumps(inputs, sort_keys=True).encode()).hexdigest() raw = hashlib.sha256(json.dumps(inputs, sort_keys=True).encode()).hexdigest()

View File

@ -809,7 +809,7 @@ class TestVariantHash:
""" """
def test_deterministic(self): def test_deterministic(self):
"""Same (player_id, evolution_tier, cosmetics) inputs produce the """Same (player_id, refractor_tier, cosmetics) inputs produce the
same hash on every call. same hash on every call.
What: Call compute_variant_hash 20 times with the same arguments and What: Call compute_variant_hash 20 times with the same arguments and
@ -827,8 +827,8 @@ class TestVariantHash:
def test_different_tiers_different_hash(self): def test_different_tiers_different_hash(self):
"""Tier 1 and tier 2 for the same player produce different hashes. """Tier 1 and tier 2 for the same player produce different hashes.
What: Compare compute_variant_hash(player_id=1, evolution_tier=1) What: Compare compute_variant_hash(player_id=1, refractor_tier=1)
vs compute_variant_hash(player_id=1, evolution_tier=2). vs compute_variant_hash(player_id=1, refractor_tier=2).
Why: Each Refractor tier represents a distinct card version. If two Why: Each Refractor tier represents a distinct card version. If two
tiers produced the same hash, the DB unique-key constraint on variant tiers produced the same hash, the DB unique-key constraint on variant
@ -841,8 +841,8 @@ class TestVariantHash:
def test_different_players_different_hash(self): def test_different_players_different_hash(self):
"""Same tier for different players produces different hashes. """Same tier for different players produces different hashes.
What: Compare compute_variant_hash(player_id=10, evolution_tier=1) What: Compare compute_variant_hash(player_id=10, refractor_tier=1)
vs compute_variant_hash(player_id=11, evolution_tier=1). vs compute_variant_hash(player_id=11, refractor_tier=1).
Why: Each player's Refractor card is a distinct asset. If two players Why: Each player's Refractor card is a distinct asset. If two players
at the same tier shared a hash, their boosted variants could not be at the same tier shared a hash, their boosted variants could not be