Commit Graph
100 Commits
Author SHA1 Message Date
TheFuryaandClaude Opus 4.6 e9100fa826 Fix zizmor install in CI by using pipx
CI / backend-lint (pull_request) Successful in 9s
CI / actions-lint (pull_request) Failing after 15s
CI / frontend-lint (pull_request) Successful in 20s
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>
2026-02-17 19:28:24 +01:00
TheFuryaandClaude Opus 4.6 acfe767214 Fix actionlint install in CI workflow
CI / backend-lint (pull_request) Successful in 9s
CI / actions-lint (pull_request) Failing after 8s
CI / frontend-lint (pull_request) Successful in 20s
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>
2026-02-17 19:19:11 +01:00
TheFuryaandClaude Opus 4.6 5240236759 Add per-condition encounter rates to seed data
CI / backend-lint (pull_request) Successful in 9s
CI / actions-lint (pull_request) Failing after 6s
CI / frontend-lint (pull_request) Successful in 21s
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>
2026-02-17 18:52:35 +01:00
TheFurya d0fff248fe Scrap bean in favor of 4ni4 2026-02-17 18:27:15 +01:00
TheFurya 459b3b0829 Add missing files to gitignore 2026-02-17 18:23:31 +01:00
TheFuryaandClaude Opus 4.6 c8dd4414b5 Mark bean rb0p as completed
CI / backend-lint (push) Successful in 14s
CI / actions-lint (push) Failing after 6s
CI / frontend-lint (push) Successful in 22s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 18:17:54 +01:00
TheFuryaandClaude Opus 4.6 8cfa074ea6 Migrate pre-commit hooks from pre-commit to prek
Replace the Python-based pre-commit framework with prek (Rust) for
faster hook execution. Convert .pre-commit-config.yaml to prek.toml,
remove pre-commit from dev dependencies, and apply ruff auto-fixes
(UP037: remove unnecessary string quotes in type annotations).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 18:17:23 +01:00
TheFuryaandClaude Opus 4.6 8f4ee8f239 Add condition badges for boss Pokemon mechanics
CI / backend-lint (push) Failing after 9s
CI / actions-lint (push) Failing after 7s
CI / frontend-lint (push) Successful in 21s
Show colored pill badges (Mega, G-Max, D-Max, Tera) on boss Pokemon
in BossDefeatModal and BossTeamPreview. Starter-dependent condition
labels are ignored. Follows EncounterMethodBadge pattern.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 21:17:32 +01:00
TheFuryaandClaude Opus 4.6 7aeddd61da Populate boss Pokemon teams in seed data
Add Pokemon teams (pokeapi_id, level, order) to all 327 boss entries
across 21 seed files, sourced from Bulbapedia. Includes starter-dependent
teams via condition_label, Mega Evolution, Dynamax/Gigantamax,
Terastallize, and single-Pokemon entries for Totems/Nobles/Titans.
Also fix _export_bosses to include condition_label in exported data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 21:07:48 +01:00
TheFuryaandClaude Opus 4.6 3a64661760 Align repo config with global development standards
CI / backend-lint (push) Failing after 1m4s
CI / actions-lint (push) Failing after 6s
CI / frontend-lint (push) Successful in 59s
- Add missing tsconfig strictness flags (noUncheckedIndexedAccess,
  exactOptionalPropertyTypes, noImplicitOverride,
  noPropertyAccessFromIndexSignature) and fix all resulting type errors
- Replace ESLint/Prettier with oxlint 1.48.0 and oxfmt 0.33.0
- Pin all frontend and backend dependencies to exact versions
- Pin GitHub Actions to SHA hashes with persist-credentials: false
- Fix CI Python version mismatch (3.12 -> 3.14) and ruff target-version
- Add vitest 4.0.18 with jsdom environment for frontend testing
- Add ty 0.0.17 for Python type checking (non-blocking in CI)
- Add actionlint and zizmor CI job for workflow linting and security audit
- Add Dependabot config for npm, pip, and github-actions
- Update CLAUDE.md and pre-commit hooks to reflect new tooling
- Ignore Claude Code sandbox artifacts in gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 20:39:41 +01:00
TheFurya e4814250db Update checklist of completed bean 2026-02-14 22:50:04 +01:00
TheFurya 9b9b189735 Update seed data
CI / backend-lint (push) Successful in 9s
CI / frontend-lint (push) Successful in 33s
2026-02-14 22:43:44 +01:00
TheFuryaandClaude Opus 4.6 a482b27bca Refine bean oqfo: encounter rate display for time/weather variants
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 22:17:57 +01:00
TheFurya eff67a0ad5 Add new Boss sprites
CI / backend-lint (push) Successful in 9s
CI / frontend-lint (push) Successful in 33s
2026-02-14 22:15:57 +01:00
TheFuryaandClaude Opus 4.6 5eae1331db Mark bean cdmx as completed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 22:15:20 +01:00
TheFuryaandClaude Opus 4.6 00ed0a1cbd Remove erroneous gift encounters from Sword/Shield seed data
Wild Pokemon on 6 locations were incorrectly duplicated as gift encounters
by the PokeDB export. Removed 39 from Sword and 40 from Shield, preserving
legitimate gifts (starters, fossils, Type Null, Kubfu, etc.).

Resolves beans-cdmx.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 22:15:01 +01:00
TheFuryaandClaude Opus 4.6 129b1aff83 Add bean cdmx for Sword/Shield encounter data cleanup
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 22:13:08 +01:00
TheFuryaandClaude Opus 4.6 0faa3d3a85 Mark bean qvww as completed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 22:12:35 +01:00
TheFuryaandClaude Opus 4.6 06d0c4504d Mark bean r48e as completed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 22:11:14 +01:00
TheFuryaandClaude Opus 4.6 50da4b9c56 Normalise route naming scheme to 'Route X (Region)' format
Standardise 426 inconsistent route names across 33 seed data files
(game data + boss files). Converts 'Region Route X' prefix style and
'Route X - Region' dash style to the consistent 'Route X (Region)' format.

Resolves beans-r48e.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 22:10:09 +01:00
TheFuryaandClaude Opus 4.6 2963f16aa4 Add pre-commit hooks for linting and formatting
CI / backend-lint (push) Successful in 9s
CI / frontend-lint (push) Successful in 33s
Set up pre-commit framework with ruff (backend) and ESLint/Prettier/tsc
(frontend) hooks to catch issues locally before CI. Auto-format all
frontend files with Prettier to comply with the new check.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:41:24 +01:00
TheFurya b05a75f7f2 Update bean 2026-02-14 16:30:18 +01:00
TheFuryaandClaude Opus 4.6 c4ed232996 Refine seed data: route ordering and boss configs up to gen 8 (WIP)
CI / backend-lint (push) Successful in 9s
CI / frontend-lint (push) Successful in 31s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:28:27 +01:00
TheFuryaandClaude Opus 4.6 a691fb94c4 Fix route filtering to keep parent routes with encountered children
In flat mode, parent routes with no direct encounters were being
filtered out even when their children had encounters. Now we pre-compute
which parents have encountered children so they're retained in both
flat and hierarchical modes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:09:50 +01:00
TheFuryaandClaude Opus 4.6 76fe0ca270 Filter out routes with no encounters for the active game
Routes are shared per version group, so game-exclusive locations (e.g.,
Black City, White Forest) appeared for both games. Now the /games/{id}/routes
endpoint excludes routes that have no encounters for the requested game,
in both flat and hierarchical modes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:40:28 +01:00
TheFuryaandClaude Opus 4.6 d1503553ea Fix route deletion failing due to FK constraint violations
CI / backend-lint (push) Successful in 8s
CI / frontend-lint (push) Successful in 31s
Route deletion failed with two integrity errors:
1. route_encounters had no cascade, so SQLAlchemy tried to NULL
   the non-nullable route_id instead of deleting the rows
2. boss_battles.after_route_id referenced the route being deleted

Added cascade="all, delete-orphan" to Route.route_encounters and
nulled out boss battle after_route_id references before deletion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 15:24:02 +01:00
TheFuryaandClaude Opus 4.6 a31e8bf174 Remove route order aliases so each version group has standalone ordering
Originals and remakes previously shared route orderings via aliases
(e.g. red-blue → firered-leafgreen). This prevented customizing route
progression independently. Each version group now has its own list that
can be fine-tuned for game-specific locations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:50:02 +01:00
TheFuryaandClaude Opus 4.6 56d5fb4800 Fix duplicate Alembic migration revision ID f7a8b9c0d1e2
CI / backend-lint (push) Successful in 9s
CI / frontend-lint (push) Successful in 30s
Two migrations (add_game_id_to_boss_battles and add_naming_scheme_to_genlockes)
shared the same revision ID, causing multiple heads. Gave boss_battles migration
a new unique ID (g8b9c0d1e2f3) and chained it after the naming_scheme migration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:14:40 +01:00
TheFurya bb3794a276 Update Cilan/Chill/Cress sprite
CI / backend-lint (push) Successful in 8s
CI / frontend-lint (push) Successful in 30s
2026-02-14 13:11:06 +01:00
TheFurya 68c480e2c3 feature/genlocke-naming-scheme (#23)
Reviewed-on: TheFurya/nuzlocke-tracker#23
Co-authored-by: Julian Tabel <juliantabel.jt@gmail.com>
Co-committed-by: Julian Tabel <juliantabel.jt@gmail.com>
2026-02-14 11:04:41 +01:00
TheFurya ebdc9b2f28 feature/boss-sprites-and-badges (#22)
CI / backend-lint (push) Successful in 8s
CI / frontend-lint (push) Successful in 32s
Reviewed-on: TheFurya/nuzlocke-tracker#22
Co-authored-by: Julian Tabel <juliantabel.jt@gmail.com>
Co-committed-by: Julian Tabel <juliantabel.jt@gmail.com>
2026-02-14 11:04:08 +01:00
TheFuryaandClaude Opus 4.6 3412d6c6fd Add naming scheme support for genlockes with lineage-aware suggestions (#20)
CI / backend-lint (push) Successful in 8s
CI / frontend-lint (push) Successful in 33s
Genlockes can now select a naming scheme at creation time, which is
automatically applied to every leg's run. When catching a pokemon whose
evolution family appeared in a previous leg, the system suggests the
original nickname with a roman numeral suffix (e.g., "Heracles II").

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Reviewed-on: TheFurya/nuzlocke-tracker#20
Co-authored-by: Julian Tabel <juliantabel.jt@gmail.com>
Co-committed-by: Julian Tabel <juliantabel.jt@gmail.com>
2026-02-14 10:00:36 +01:00
TheFurya c01c504519 Add new bean 2026-02-13 17:10:23 +01:00
TheFurya f676bee400 Merge pull request 'feature/filter-swsh-den-routes' (#18) from feature/filter-swsh-den-routes into develop
CI / backend-lint (push) Successful in 7s
CI / frontend-lint (push) Successful in 32s
Reviewed-on: TheFurya/nuzlocke-tracker#18
2026-02-13 09:31:20 +01:00
TheFurya 24e4c41f88 Delete superfluous seed files
CI / backend-lint (push) Successful in 8s
CI / frontend-lint (push) Successful in 30s
2026-02-11 22:13:05 +01:00
TheFurya 65220b46ed Merge pull request 'Add Boss list for all games and more boss types' (#17) from feature/add-boss-data into develop
CI / backend-lint (push) Successful in 8s
CI / frontend-lint (push) Successful in 32s
Reviewed-on: TheFurya/nuzlocke-tracker#17
2026-02-11 21:59:50 +01:00
TheFurya b55a82117e fix format in backend
CI / backend-lint (pull_request) Successful in 8s
CI / frontend-lint (pull_request) Successful in 30s
2026-02-11 21:58:46 +01:00
TheFurya 40bce99c0b fix backend linting
CI / backend-lint (pull_request) Failing after 8s
CI / frontend-lint (pull_request) Successful in 31s
2026-02-11 21:57:45 +01:00
TheFurya dbddee4d92 Merge branch 'develop' into feature/add-boss-data
CI / backend-lint (pull_request) Failing after 8s
CI / frontend-lint (pull_request) Successful in 31s
2026-02-11 21:52:41 +01:00
TheFurya 734fb50f0a Add merge migration; COmmit bean changes
CI / backend-lint (push) Failing after 8s
CI / frontend-lint (push) Successful in 32s
2026-02-11 21:51:35 +01:00
TheFuryaandClaude Opus 4.6 39d18c241e Integrate name suggestions into encounter registration UI
Add clickable suggestion chips below the nickname input in the encounter
modal. Chips are fetched from GET /runs/{id}/name-suggestions via React
Query, shown only when a naming scheme is set. Clicking a chip fills in
the nickname; a regenerate button fetches a fresh random batch. Completes
the Name Generation epic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:48:29 +01:00
TheFuryaandClaude Opus 4.6 2ac6c23577 Add name suggestion engine with API endpoint and tests
Expand services/naming.py with suggest_names() that picks random words
from a category while excluding nicknames already used in the run. Add
GET /runs/{run_id}/name-suggestions?count=10 endpoint that reads the
run's naming_scheme and returns filtered suggestions. Includes 12 unit
tests covering selection, exclusion, exhaustion, and cross-category
independence.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:45:04 +01:00
TheFuryaandClaude Opus 4.6 15283ede91 Add name dictionary with 10 themed categories
Create name_dictionary.json with 175 words each across mythology, food,
space, nature, warriors, music, literature, gems, ocean, and weather
categories. Words are short (<= 12 chars), title-cased, and suitable as
Pokemon nicknames. No intra-category duplicates; cross-category overlap
is intentional.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:42:33 +01:00
TheFuryaandClaude Opus 4.6 e324559476 Add naming scheme selection to run configuration
Add a nullable naming_scheme column to NuzlockeRun so users can pick a
themed word category for nickname suggestions. Includes Alembic migration,
updated Pydantic schemas, a GET /runs/naming-categories endpoint backed by
a cached dictionary loader, and frontend dropdowns in both the NewRun
creation flow and the RunDashboard for mid-run changes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:36:50 +01:00
TheFurya f71db65642 Add Boss list for all games and more boss types
CI / backend-lint (pull_request) Successful in 8s
CI / frontend-lint (pull_request) Successful in 30s
2026-02-11 21:33:55 +01:00
63bb3a0394 Remove old Go fetch-pokeapi tool, update README for import-pokedb (#13)
CI / backend-lint (push) Successful in 7s
CI / frontend-lint (push) Successful in 29s
The Go tool in tools/fetch-pokeapi/ has been fully replaced by the
Python import-pokedb tool. Removes all Go source files, updates the
README seed regeneration docs, and cleans up the .gitignore entry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Co-authored-by: Julian Tabel <julian.tabel@synvert.com>
Reviewed-on: TheFurya/nuzlocke-tracker#13
2026-02-11 13:55:38 +01:00
TheFurya f42cee7f7a Update README.md 2026-02-11 13:48:37 +01:00
TheFurya 90399f41b7 Merge branch 'develop' into main 2026-02-11 12:00:31 +01:00
TheFurya e686cd5d54 Merge pull request 'develop' (#6) from develop into main
Reviewed-on: TheFurya/nuzlocke-tracker#6
2026-02-10 16:02:20 +01:00
TheFuryaandJulian Tabel 5151be785b feature/pokedb-attribution (#5)
CI / backend-lint (push) Successful in 7s
CI / frontend-lint (push) Successful in 29s
Co-authored-by: Julian Tabel <julian.tabel@synvert.com>
Reviewed-on: TheFurya/nuzlocke-tracker#5
2026-02-10 16:01:14 +01:00
TheFurya 6e5ba94e98 Merge pull request 'Update some beans' (#4) from develop into main
Reviewed-on: TheFurya/nuzlocke-tracker#4
2026-02-10 15:19:54 +01:00
TheFurya 99b969ab5e Merge pull request 'Release frontend branding and metadata' (#3) from develop into main
Reviewed-on: TheFurya/nuzlocke-tracker#3
2026-02-10 12:55:18 +01:00
TheFurya 9ea03c598a Merge pull request 'Clean up frontend branding and metadata' (#2) from feature/branding-cleanup into develop
CI / backend-lint (push) Successful in 7s
CI / frontend-lint (push) Successful in 28s
Reviewed-on: TheFurya/nuzlocke-tracker#2
2026-02-10 12:53:15 +01:00
TheFurya 87e4bb8941 Merge pull request 'develop' (#1) from develop into main
Reviewed-on: TheFurya/nuzlocke-tracker#1
2026-02-10 12:31:19 +01:00
TheFuryaandClaude Opus 4.6 61a7f57f1f Update beans and deployment docs
Update epic checklist, mark completed tasks, fix Gitea username/domain
references, and update DEPLOYMENT.md with correct registry paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 18:28:56 +01:00
TheFuryaandClaude Opus 4.6 03f07ebee5 Add deploy script and update prod compose
Deploy script builds and pushes images to Gitea registry, then triggers
Portainer stack redeployment via API. Includes preflight checks for
branch and uncommitted changes. Also renames prod DB volume to avoid
conflicts with dev and changes frontend port to 9080.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 18:28:17 +01:00
TheFuryaandClaude Opus 4.6 972137acfb Fix TypeScript errors in frontend build
Cast boss type select value to union type and remove unused
AdvanceLegInput import.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 18:10:38 +01:00
TheFuryaandClaude Opus 4.6 fd23d89e71 Add production Dockerfiles and nginx config
Backend: installs non-editable, runs uvicorn without reload.
Frontend: multi-stage build, serves static files via nginx with
API proxy to the backend service and SPA fallback routing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 18:00:28 +01:00
TheFuryaandClaude Opus 4.6 d9d547ef53 Add production docker-compose file
Uses pre-built images from the Gitea container registry, runs Alembic
migrations before API startup, and keeps the database password configurable
via environment variable. No source mounts or debug mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:58:55 +01:00
TheFuryaandClaude Opus 4.6 349a0cb821 Add DEPLOYMENT.md as living deployment documentation
Covers architecture overview, Gitea container registry setup, branching
strategy, and deployment workflow. Sections not yet implemented are marked
with TODO to be filled in as the deployment epic progresses.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:56:06 +01:00
TheFuryaandClaude Opus 4.6 ad4ac6cf8c Update deployment strategy to use Gitea instead of plain Docker registry
Gitea provides source hosting, container registry, and CI/CD in one package.
Images are pushed as user-level packages to the Gitea registry over SSL.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:45:43 +01:00
TheFuryaandClaude Opus 4.6 6a36738b8b Update seed data and boss sprites from latest export
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 22:40:07 +01:00
TheFurya 58787460c4 Update seed data 2026-02-08 22:33:25 +01:00
TheFuryaandClaude Opus 4.6 2ff9e81cc4 Fix image export in container and skip already-local URLs
Mount frontend/public into the api container so the export can write
badge/sprite images. Skip re-downloading URLs that are already local
paths from a previous export.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 22:32:00 +01:00
TheFuryaandClaude Opus 4.6 35df9023f1 Add egg encounter logging with route-lock bypass
Egg hatches can now be logged at any location without consuming the
route's encounter slot. Adds an EggEncounterModal with pokemon search
and a "Log Egg" button on the run encounters page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 22:25:47 +01:00
TheFuryaandClaude Opus 4.6 8bd4ad1ecf Download badge and boss sprite images locally during export
The seed export command now downloads badge images and boss sprites
from remote URLs and stores them in frontend/public/, rewriting the
JSON URLs to local paths. Sprites are namespaced by game version
(e.g. /boss-sprites/red/brock.png) so each generation can have
its own sprite style.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 22:13:30 +01:00
TheFuryaandClaude Opus 4.6 d2144e47bf Add bean for fetching and storing badge images locally
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:57:26 +01:00
TheFuryaandClaude Opus 4.6 dd277889fd Refine egg encounter logging bean
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:56:07 +01:00
TheFuryaandClaude Opus 4.6 803a1a0edf Add draft bean refinement instruction to CLAUDE.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:51:08 +01:00
TheFuryaandClaude Opus 4.6 41621cd993 Add bean lifecycle instructions to CLAUDE.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:50:13 +01:00
TheFuryaandClaude Opus 4.6 5ba464f37f Update bean statuses
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:48:26 +01:00
TheFuryaandClaude Opus 4.6 a2127f2126 Handle Nincada split evolution (Ninjask + Shedinja)
When evolving Nincada, a confirmation prompt now offers to also add
Shedinja as a new encounter on the same route. The Shedinja encounter
uses a "shed_evolution" origin to bypass route-locking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:47:35 +01:00
TheFuryaandClaude Opus 4.6 fb0ad23c45 Update bean statuses
- nuzlocke-tracker-3el1: mark completed (run progression dividers)
- nuzlocke-tracker-66hg: mark completed (auto-select boss variant)
- nuzlocke-tracker-x8ol: mark completed (conditional boss teams)
- nuzlocke-tracker-igl3: change type to epic
- nuzlocke-tracker-jain: add new bean (Nincada split evolution)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:35:01 +01:00
TheFuryaandClaude Opus 4.6 512be228a2 Auto-select boss team variant based on starter choice
When a run has a starter Pokemon, automatically match its species name
against boss battle condition labels (e.g., "charmander" matches "Chose
Charmander"). If exactly one variant matches, pre-select it and hide the
pill selector. Falls back to showing pills when no match is found.

Fixes starter lookup to use game routes data (which has encounterMethods
populated) instead of the run detail route (which defaults to empty).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:33:28 +01:00
TheFuryaandClaude Opus 4.6 3de99859a1 Add bean for auto-selecting boss team variant based on starter choice
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:22:10 +01:00
TheFuryaandClaude Opus 4.6 a6bf8b4af2 Add conditional boss battle teams (variant teams by condition)
Wire up the existing condition_label column on boss_pokemon to support
variant teams throughout the UI. Boss battles can now have multiple team
configurations based on conditions (e.g., starter choice in Gen 1).

- Add condition_label to BossPokemonInput schema (frontend + backend bulk import)
- Rewrite BossTeamEditor with variant tabs (Default + named conditions)
- Add variant pill selector to BossDefeatModal team preview
- Add BossTeamPreview component to RunEncounters boss cards
- Fix MissingGreenlet error in set_boss_team via session.expunge_all()
- Fix PokemonSelector state bleed between tabs via composite React key
- Add Alembic migration for condition_label column

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 21:20:30 +01:00
TheFuryaandClaude Opus 4.6 8931424ef4 Update bean statuses and add wildcard Pokemon checklist item
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:34:07 +01:00
TheFuryaandClaude Opus 4.6 0931884f1e Add child route (sub-area) management to route detail page
Shows a sub-areas section below encounters with add/delete support
and links to navigate to child route details.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:32:17 +01:00
TheFuryaandClaude Opus 4.6 c6521dd206 Add filter controls to admin tables
Pokemon (type), Evolutions (trigger), Games (region/generation),
and Runs (status/game) now have dropdown filters alongside search.
Server-side filtering for paginated tables, client-side for small datasets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:29:55 +01:00
TheFuryaandClaude Opus 4.6 5d444f0c91 Add bean for gathering generation metadata
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:21:26 +01:00
TheFuryaandClaude Opus 4.6 c3bbd365a9 Replace free-text encounter method input with dropdown selector
Use the predefined METHOD_ORDER/METHOD_CONFIG from EncounterMethodBadge
to populate a select dropdown with all known encounter methods plus an
"Other" option for custom values. Shows a colored badge preview on
selection. Correctly handles editing encounters with non-standard methods.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:19:16 +01:00
TheFuryaandClaude Opus 4.6 fb3b003a6d Mark randomize encounters bean as completed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:14:45 +01:00
TheFuryaandClaude Opus 4.6 8f6d72a9c4 Add bulk import for evolutions, routes, and bosses
Add three new bulk import endpoints that accept the same JSON format as
their corresponding export endpoints, enabling round-trip compatibility:

- POST /evolutions/bulk-import (upsert by from/to pokemon pair)
- POST /games/{id}/routes/bulk-import (reuses seed loader for hierarchy)
- POST /games/{id}/bosses/bulk-import (reuses seed loader with team data)

Generalize BulkImportModal to support all entity types with configurable
title, example, and result labels. Wire up Bulk Import buttons on
AdminEvolutions, and AdminGameDetail routes/bosses tabs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:14:19 +01:00
TheFuryaandClaude Opus 4.6 8e1c8b554f Use PokemonSelector autocomplete for route encounter form
Replace the manual search input + select dropdown with the existing
PokemonSelector component, matching the boss team editor UX.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:04:26 +01:00
TheFuryaandClaude Opus 4.6 3d515f0e4e Add prev/next and dropdown route navigation to route detail page
Reduces navigation depth when working with route encounters by adding
prev/next buttons and a route dropdown selector to AdminRouteDetail.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:02:59 +01:00
TheFurya b29b716fe5 Update Boss and Route data 2026-02-08 15:53:36 +01:00
TheFuryaandClaude Opus 4.6 758750b7b8 Add after_route_name to boss battle export/seed pipeline
Exports now include after_route_name (resolved from the route FK),
and the seed loader resolves it back to an ID on import. Also adds
a draft bean for displaying encounter-less locations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 15:51:23 +01:00
TheFuryaandClaude Opus 4.6 47c8fa8e88 Update seed data with boss battles and route changes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 15:40:07 +01:00
TheFuryaandClaude Opus 4.6 8483c4b109 Add specialty type column to admin bosses table
Shows the Pokemon type image badge in the boss battles table,
or an em-dash when no specialty is set.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 15:38:10 +01:00
TheFuryaandClaude Opus 4.6 0e4fac8790 Add optional specialty type field to boss battles
Gym leaders, Elite Four, and champions can now have a Pokemon type
specialty (e.g. Rock, Water). Shown as a type image badge on boss
cards in the run view, and editable via dropdown in the admin form.
Includes migration, export, and seed pipeline support.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 15:23:59 +01:00
TheFuryaandClaude Opus 4.6 1a7476f811 Add section field to boss battle export and seed pipeline
The section field was missing from the export endpoint, seed loader
(insert + upsert), and the seed export function.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 15:05:36 +01:00
TheFuryaandClaude Opus 4.6 1bf37a6bd9 Add drag-and-drop boss reordering and new feature beans
Adds boss battle reorder API endpoint with two-phase order update to
avoid unique constraint violations. Includes frontend mutation hook
and API client. Also adds draft beans for progression dividers and
conditional boss battle teams features.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 14:58:49 +01:00
TheFuryaandClaude Opus 4.6 a4f814e66e Add section field to boss battles for run progression dividers
Adds a nullable `section` column to boss battles (e.g. "Main Story",
"Endgame") with dividers rendered in the run view between sections.
Admin UI gets a Section column in the table and a text input in the form.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 14:55:26 +01:00
TheFuryaandClaude Opus 4.6 a01d01c565 Add Pokemon detail card with tabbed encounter/evolution views
Pokemon edit modal now shows three tabs (Details, Evolutions, Encounters)
instead of a single long form. Evolution chain entries are clickable to
open the EvolutionFormModal for direct editing. Encounter locations link
to admin route detail pages. Create mode shows only the form (no tabs).

Backend adds GET /pokemon/{id}/encounter-locations (grouped by game) and
GET /pokemon/{id}/evolution-chain (BFS family discovery). Extracts
formatEvolutionMethod to shared utility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 14:03:43 +01:00
TheFuryaandClaude Opus 4.6 f09b8213fd Add click-to-edit pattern across all admin tables
Replace Actions columns with clickable rows that open edit modals
directly. Delete is now an inline two-step confirm button in the
edit modal footer. Games modal links to routes/bosses detail,
route modal links to encounters, and boss modal has an Edit Team button.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 13:44:38 +01:00
TheFuryaandClaude Opus 4.6 76d69dfaf1 Add admin UX improvement epic with 8 child feature beans
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 13:35:50 +01:00
TheFuryaandClaude Opus 4.6 bbac19677a Fix duplicate sub-areas caused by PokeAPI casing (e.g. 1f vs 1F)
PokeAPI returns both lowercase and uppercase floor names as separate
sub-areas with identical encounter data, causing 649 duplicate routes
across all 22 seed files. Merged case-insensitive duplicates, keeping
the uppercase name and deduplicating encounters. Re-seed required.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 13:22:50 +01:00
TheFuryaandClaude Opus 4.6 be6c8e75be Add genlocke tracking epic bean
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 13:17:43 +01:00
TheFuryaandClaude Opus 4.6 46f246028f Add randomize encounters feature (per-route + bulk)
Per-route: Randomize/Re-roll button in EncounterModal picks a uniform
random pokemon from eligible (non-duped) encounters. Bulk: new
POST /runs/{run_id}/encounters/bulk-randomize endpoint fills all
remaining routes in order, respecting dupes clause cascading, pinwheel
zones, and route group locking. Frontend Randomize All button on the
run page triggers the bulk endpoint with a confirm dialog.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 13:14:43 +01:00
TheFuryaandClaude Opus 4.6 6779e3effa Update bean status and add Rotom encounter to Pokemon X seed data
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 13:00:51 +01:00