- Tier labels as suffix tags: **Name** — Base Chrome [T1] (T0 gets no suffix)
- Compact progress line: bar value/threshold (pct) — removed formula and tier arrow
- Fully evolved shows `MAX` instead of FULLY EVOLVED
- Deleted unused FORMULA_LABELS dict
- Added _FULL_BAR constant, moved T0-branch lookups into else
- Fixed mock API shape in test (cards → items)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Unicode symbols (○ ◈ ◆ ✦ ★) were too similar to distinguish at a glance.
Now uses T1/T2/T3/T4★ prefixes with no prefix for base cards (T0).
Summary header reads "Base: 1 T1: 9 — 64 total" instead of cryptic symbols.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When filters are active and return 0 results, show which filters were
applied and suggest removing them, instead of the misleading
"No refractor data found for your team."
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- RefractorPaginationView with ◀ Prev / Next ▶ buttons
- Buttons re-fetch from API on each page change
- Prev disabled on page 1, Next disabled on last page
- Only the command invoker can use the buttons
- Buttons auto-disable after 2 min timeout
- Single-page results show no buttons
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace freeform text inputs with dropdown selections:
- card_type: Batter, Starting Pitcher, Relief Pitcher
- tier: T0-T4 with names (Base Card through Superfractor)
- progress: "Close to next tier" option
- Removed season param (not useful for current UX)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Cast current_value and next_threshold to int to avoid ugly floating
point numbers like 53.0/149.0 in the progress display.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Log API error detail when refractor endpoint returns an error
- Show "Something went wrong" instead of misleading "No refractor data"
- Log empty response case for debugging
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Switch from client-side pagination (fetch all, slice) to server-side
(pass limit/offset/progress params to API)
- Fixes limit=500 rejection (API max is 100)
- Footer now shows total_count from API response
- progress=close filter delegated to API instead of client-side
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- data.get("cards") → data.get("items") to match list endpoint response
- formula_value → current_value (API field name)
- card_type from top-level → track.card_type (nested in track object)
- Add limit=500 param so API returns all cards instead of default 10
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Mark CRITICAL missing endpoint gap as resolved (database PR #173 merged)
- Add REF-API-06 through REF-API-10 covering the new GET /refractor/cards
list endpoint (team filter, card_type, tier, progress, pagination)
- Update prerequisites, execution checklist, and time estimates
- Total test cases: 87 (was 82)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sections 7-8 (game simulation, tier-up notifications) are marked as
manual testing by Cal — impractical to automate via Playwright.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
82-case in-app test plan for Playwright automation covering /refractor status,
tier badges, post-game hooks, tier-up notifications, and edge cases.
Preflight script for quick deploy verification via curl.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the logging-only stub in logic_gameplay.py with the real
notify_tier_completion from helpers/refractor_notifs.py. Tier-up
events now send Discord embeds instead of just logging.
- Import notify_tier_completion from helpers.refractor_notifs
- Remove 16-line stub function and redundant inline logging
- Update tests: verify real embed-sending behavior, replace
bug-documenting T1-5 diagnostic with shape validation guards
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mock routing in _patch_db_get and _failing_db_get still checked for
"evolution/cards/" after the production endpoint was renamed, causing
all badge-presence assertions to pass vacuously (evo_state=None).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces type=registry cache (which causes 400 errors from Docker Hub
due to stale buildx builders) with type=local backed by a named Docker
volume on the runner. Adds cache rotation step to prevent unbounded growth.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Allows deploying to dev environment by pushing a "dev" tag.
Dev tags build with :dev Docker tag instead of :production.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Change `evolution/evaluate-game/` API call to `refractor/evaluate-game/` in
complete_game() hook (was calling the wrong endpoint path)
- Update all test assertions in test_complete_game_hook.py to match the
corrected endpoint path and update docstrings to "refractor" naming
- Remove helpers/evolution_notifs.py and tests/test_evolution_notifications.py
from this PR — they belong to PR #112 (WP-14 tier notifications). The
notify_tier_completion stub in logic_gameplay.py remains as the WP-14
integration target.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename helpers/evolution_notifs.py -> helpers/refractor_notifs.py
- Rename tests/test_evolution_notifications.py -> tests/test_refractor_notifs.py
- Delete utilities/evolution_notifications.py (replaced by helpers/refractor_notifs.py)
- Update TIER_NAMES to canonical names: Base Card, Base Chrome, Refractor, Gold Refractor, Superfractor
- Update T4 embed title from "FULLY EVOLVED!" to "SUPERFRACTOR!"
- Update FOOTER_TEXT from "Paper Dynasty Evolution" to "Paper Dynasty Refractor"
- Update non-max tier embed title from "Evolution Tier Up!" to "Refractor Tier Up!"
- Add discord.abc.Messageable type annotation to notify_tier_completion channel param
- Update all test assertions to match new tier names and strings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Update module docstring: replace evolution/cards with refractor/cards,
drop old tier names (Unranked/Initiate/Rising/Ascendant/Evolved), add
correct tier names (Base Card/Base Chrome/Refractor/Gold Refractor/
Superfractor)
- Fix API call: db_get("evolution/cards") → db_get("refractor/cards")
- Add TIER_BADGES dict {1:"[BC]", 2:"[R]", 3:"[GR]", 4:"[SF]"}
- Update format_refractor_entry to prepend badge label for T1-T4 (T0 has
no badge)
- Add TestTierBadges test class (11 tests) asserting badge values and
presence in formatted output
- Update test_player_name_in_output to accommodate badge-prefixed bold name
Dead utilities/evolution_notifications.py has no source file on this branch
(WP-14/PR #112 already delivered the replacement).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds helpers/evolution_notifs.py with build_tier_up_embed() and
notify_tier_completion(). Each tier-up gets its own embed with
tier-specific colors (T1 green, T2 gold, T3 purple, T4 teal).
Tier 4 uses a special 'FULLY EVOLVED!' title with a future rating
boosts note. Notification failure is non-fatal (try/except). 23
unit tests cover all tiers, empty list, and failure path.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>