Screen-by-screen mapping of legacy hh-pegasus → hh-pegasus-monorepo. The single source
of truth for “are we done porting?”.
This is the real inventory — extracted 2026-06-16 by 12 opencode parity-mapper agents
1 integrations-surveyor + 1 parity-critic over the legacy repo (see
10-parity-extraction-runbook.md). 77 screens across 12
clusters; 92% route coverage (138/150 user-facing routes). Migration status is cross-mapped
to the 127 GitHub issues + ClickUp subtasks in 08-issue-index.md.
Owner: Tompi (parity sign-off). Detta verifies.
Status legend: ✅ done by dev · 🟦 implementing · 🟡 in progress · 🔴 not started (tracked) · ❓ untracked (no GitHub issue or ClickUp subtask found — the real gaps)
Surfaces: D = desktop · M = mobile · H = native-hybrid
Mapping the legacy app against the live backlog exposes large untracked surfaces — including
two payment-bearing screens. These are the parity risk, not the in-flight work:
Untracked surface
Screens
Why it matters
Vouchers & Gift cards (whole cluster)
6 (incl. Gift Card Buy — Omise + GBPrimePay)
A payment flow with no migration task
Profile — orders & wallet (whole cluster)
6 (incl. Payment Methods — Stripe Elements + card-brand routing)
Benefits, Tier, Point History, Edit Profile, Cuisine Prefs, Referral, History stub
Loyalty + account, untracked
OpenRice partner flow
2 (vendor HMAC + partner config)
Revenue partner integration
Misc
Edit Booking, Self Check-In, Promotions, Careers, Survey, Tags, Near Me, City aliases
Assorted
→ Decision for Tompi: each of these needs a GitHub issue + ClickUp subtask, or an explicit
“won’t port / kill” decision, before cutover scope can be called complete.
11 uncovered routes — all under src/pages/[lang]/[slug]/* (legacy dynamic-slug family):
payment-success, payment-failed, payment-landing (3 files each, mirror the
restaurant-scoped variants already mapped) + bare [lang]/[slug]/index.astro (a 301 hub
with 6 legacy URL patterns → falls through to HomeWrapper). Fix: add a “Generic Slug
Landing” row to cluster 1 + the three [slug]/payment-* rows to cluster 5.
Settings “Delete Account” route bug — listed 5 routes it doesn’t own (modal-driven from
Settings Hub). Fix:legacy_routes: [] (reflected above).
src/pages/_app.ts — Vue app entry, not a route. Remove from _routes.txt.
A screen is ✅ only when all hold: code ported + matches legacy UX; unit tests at layer
coverage target; critical screens have green E2E on staging across the device matrix; QA
(Detta) signed off; analytics/conversion events fire identically (funnel screens).
Provenance: raw agent output lives in hh-pegasus/.cutover/parity/*.json (gitignored
scratch; regenerate via 10-parity-extraction-runbook.md).
Re-run after a wave of ports lands to refresh status.