migrate-browse-viewlisted
Install: claude install-skill davidleberknight/footbag-platform
# Migrate Browse View
## When to use this skill
Use this skill (not general editing) when a task does any of the following:
- Adds a new browse view at `/freestyle/tricks?view={new}`
- Migrates an existing browse view off legacy markup (table, spreadsheet, inline `<li>` rows) onto the shared `<dictionary-trick-card>` partial
- Renames a legacy view (e.g., the historical `?view=sets → ?view=component` precedent)
- Adds a new grouping wrapper that consumes existing `DictionaryTrickCard[]` data
- Changes within-group ordering rules for any browse view
Do **not** use this skill to:
- Modify the `<dictionary-trick-card>` partial itself (that's a card-spec change; route through `extend-service-contract` + `add-public-page`)
- Touch ontology, ADD math, parser, alias, or schema (forbidden across every browse-view slice)
- Add new modifier-link types or new symbolic-grammar groups (curator-track work)
## The pattern this skill encodes
Every browse view shipped to date (the `allowedViews` set in `src/services/freestyleService.ts`) follows the same six-step recipe. The contract is mechanically tested by `freestyle.dictionary-trick-card.routes.test.ts`: any view that fails to render `dict-card-stack` fails the regression guard.
```
Step 1 → READ existing patterns (no writing yet)
Step 2 → SERVICE: extend group type + builder
Step 3 → TEMPLATE: replace markup with partial
Step 4 → CSS: minimal additions (no card-internal CSS)
Step 5 → TESTS: per-slice integration test
Step