Gap
specs/behaviors/legacy-id-mapping.md specifies redirect handlers for every laddr URL pattern. None are implemented; every laddr inbound link 404s on next-v2.
Patterns to handle (per spec)
- `/projects?ID=` → `/projects/` (resolve via `Project.legacyId`)
- `/people/:username` (laddr's URL shape) → `/members/:slug`
- `/project-updates?ProjectID=` → `/projects/` (or the update detail if discoverable)
- `/tags/topic.` (dot-form) → `/tags/topic/` (and same for tech, event)
- `410 Gone` for URL patterns laddr served but that were intentionally dropped at migration
Scope
- API + SPA work — backend issues the 301 (or SPA-side router intercepts and replaces history)
- All four redirect patterns covered
- Spec-conformance test per pattern
Out of scope
- SlugHistory-based 90-day redirects after a v1 rename — that's a separate gap (sibling issue)
Why this is a cutover blocker
Existing user bookmarks, links shared on Slack/Twitter/blog posts, links indexed by Google — all break unless this lands.
Gap
specs/behaviors/legacy-id-mapping.mdspecifies redirect handlers for every laddr URL pattern. None are implemented; every laddr inbound link 404s on next-v2.Patterns to handle (per spec)
Scope
Out of scope
Why this is a cutover blocker
Existing user bookmarks, links shared on Slack/Twitter/blog posts, links indexed by Google — all break unless this lands.