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}`
- Moves an existing browse view off legacy markup (table, spreadsheet, inline `<li>` rows) onto the shared `<dictionary-trick-row>` partial
- Renames a view (the historical `?view=sets → ?view=component` is the 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-row>` partial itself. That changes every browse view at once, so it is a row-contract change: route through `extend-service-contract` + `add-public-page`
- Touch ontology, ADD math, parser, alias, or schema (forbidden across every browse-view change)
- Add new modifier-link types or new symbolic-grammar groups (curator-track work)
## The pattern this skill encodes
Every browse view in the `allowedViews` set in `src/services/freestyleService.ts` renders the same
row. There is no per-view density choice and no view-specific row variant: a trick reads the same
way whichever view a visitor arrived through, and that is the whole point. A view that grows a
rendering of its own is the defect this skill exists to prevent.
```
Step 1 → READ the row contract and one shipped view (no writing yet)
Step 2 → SERVICE: group type + builder
Step 3 → TEMPLATE: grouping wrapper around the s