Add per-condition encounter rates to seed data #26

Merged
TheFurya merged 2 commits from feature/encounter-conditions-data into develop 2026-02-17 19:38:33 +01:00
Owner

Summary

  • Add condition column to RouteEncounter with migration, updating the unique constraint to include condition
  • Port the PoC condition-aware seed loader, API schemas, and frontend UI (EncounterModal condition filter tabs, AdminRouteDetail condition column, horde/SOS method badges)
  • Update the import tool to extract per-condition rates instead of flattening to max(), and add tools/merge-conditions.py for merging condition data into curated seed files
  • Populate condition data for 22 games (5,684 encounters): Gen 2 morning/day/night, Gen 4 morning/day/night, Gen 5 spring/summer/autumn/winter, Gen 7 day/night, Gen 8 weather

Test plan

  • Run migration on dev DB, verify condition column and new unique constraint exist
  • Seed HeartGold data, verify condition rows load
  • Open EncounterModal on a HeartGold route - condition filter tabs should appear
  • Select a condition tab - pokemon list filters with per-condition rates shown
  • Open EncounterModal on a Sword route - weather condition tabs should appear
  • Verify AdminRouteDetail shows Condition column for routes with condition data
  • Verify routes without conditions show no condition tabs or column
## Summary - Add condition column to RouteEncounter with migration, updating the unique constraint to include condition - Port the PoC condition-aware seed loader, API schemas, and frontend UI (EncounterModal condition filter tabs, AdminRouteDetail condition column, horde/SOS method badges) - Update the import tool to extract per-condition rates instead of flattening to max(), and add tools/merge-conditions.py for merging condition data into curated seed files - Populate condition data for 22 games (5,684 encounters): Gen 2 morning/day/night, Gen 4 morning/day/night, Gen 5 spring/summer/autumn/winter, Gen 7 day/night, Gen 8 weather ## Test plan - [x] Run migration on dev DB, verify condition column and new unique constraint exist - [ ] Seed HeartGold data, verify condition rows load - [ ] Open EncounterModal on a HeartGold route - condition filter tabs should appear - [ ] Select a condition tab - pokemon list filters with per-condition rates shown - [ ] Open EncounterModal on a Sword route - weather condition tabs should appear - [ ] Verify AdminRouteDetail shows Condition column for routes with condition data - [ ] Verify routes without conditions show no condition tabs or column
TheFurya added 1 commit 2026-02-17 18:57:59 +01:00
Add per-condition encounter rates to seed data
Some checks failed
CI / backend-lint (pull_request) Successful in 9s
CI / actions-lint (pull_request) Failing after 6s
CI / frontend-lint (pull_request) Successful in 21s
5240236759
Add a `condition` column to RouteEncounter so encounters can store
per-condition rates (time of day, season, weather) instead of flattening
to max(). Update the seed loader, API schemas, and frontend to support
the new `conditions` dict format in seed JSON.

Port the PoC branch's condition-aware EncounterModal UI with filter
tabs that let players see encounter rates for specific conditions.
Add horde/SOS as distinct encounter methods with their own badges.

Update the import tool to extract per-condition rates instead of
flattening, and add a merge script (tools/merge-conditions.py) that
enriches existing curated seed files with condition data from PokeDB.

Seed data updated for 22 games (5,684 encounters):
- Gen 2: Gold, Silver, Crystal (morning/day/night)
- Gen 4: HG, SS, Diamond, Pearl, Platinum, BD, SP (morning/day/night)
- Gen 5: Black, White, Black 2, White 2 (spring/summer/autumn/winter)
- Gen 7: Sun, Moon, Ultra Sun, Ultra Moon (day/night)
- Gen 8: Sword, Shield (weather)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TheFurya added 1 commit 2026-02-17 19:19:18 +01:00
Fix actionlint install in CI workflow
Some checks failed
CI / backend-lint (pull_request) Successful in 9s
CI / actions-lint (pull_request) Failing after 8s
CI / frontend-lint (pull_request) Successful in 20s
acfe767214
The download URL was missing the version number in the asset filename.
Use the official download script which handles version resolution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TheFurya added 1 commit 2026-02-17 19:28:27 +01:00
Fix zizmor install in CI by using pipx
Some checks failed
CI / backend-lint (pull_request) Successful in 9s
CI / actions-lint (pull_request) Failing after 15s
CI / frontend-lint (pull_request) Successful in 20s
e9100fa826
Bare pip install fails on newer Ubuntu runners due to PEP 668
(externally-managed-environment). Use pipx which is pre-installed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TheFurya added 1 commit 2026-02-17 19:31:42 +01:00
Fix zizmor PATH issue in CI by using pipx run
Some checks failed
CI / backend-lint (pull_request) Successful in 9s
CI / actions-lint (pull_request) Failing after 15s
CI / frontend-lint (pull_request) Successful in 20s
2675491216
pipx run executes directly without needing the binary on PATH.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TheFurya added 1 commit 2026-02-17 19:34:09 +01:00
Restrict workflow permissions to contents: read
All checks were successful
CI / backend-lint (pull_request) Successful in 9s
CI / actions-lint (pull_request) Successful in 15s
CI / frontend-lint (pull_request) Successful in 20s
22d72e8a34
All CI jobs and the deploy workflow only need to read repo contents.
Adding explicit top-level permissions satisfies zizmor's
excessive-permissions audit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TheFurya force-pushed feature/encounter-conditions-data from 22d72e8a34 to 00a5a78a44 2026-02-17 19:37:53 +01:00 Compare
TheFurya merged commit 7df56325a8 into develop 2026-02-17 19:38:33 +01:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: pokemon/nuzlocke-tracker#26