Dupes Clause greys out Pokemon in the encounter modal whose evolution family has already been caught, preventing duplicate selections. Shiny Clause adds a dedicated Shiny Box and lets shiny catches bypass the one-per-route lock via a new is_shiny column on encounters and a /pokemon/families endpoint that computes evolution family groups. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
24 lines
992 B
Markdown
24 lines
992 B
Markdown
---
|
|
# nuzlocke-tracker-b9oj
|
|
title: Implement Dupes Clause & Shiny Clause Enforcement
|
|
status: completed
|
|
type: feature
|
|
priority: normal
|
|
created_at: 2026-02-07T20:03:12Z
|
|
updated_at: 2026-02-07T20:07:50Z
|
|
---
|
|
|
|
Add enforcement for duplicatesClause and shinyClause rules:
|
|
- Dupes Clause: Grey out Pokemon in encounter modal whose evolution family is already caught
|
|
- Shiny Clause: Dedicated Shiny Box for bonus shiny catches that bypass route locks
|
|
|
|
## Checklist
|
|
- [x] Migration: Add is_shiny column to encounters table
|
|
- [x] Backend model + schema: Add is_shiny field
|
|
- [x] Backend: Shiny route-lock bypass in create_encounter
|
|
- [x] Backend: Evolution families endpoint (GET /pokemon/families)
|
|
- [x] Frontend types + API: Add isShiny fields and fetchPokemonFamilies
|
|
- [x] Frontend: Dupes Clause greying in EncounterModal
|
|
- [x] Frontend: ShinyEncounterModal + ShinyBox components
|
|
- [x] Frontend: RunEncounters orchestration (split encounters, duped IDs, shiny box)
|
|
- [x] TypeScript type check passes |