fm-parity

Runs visual, API contract, WebView bridge, and telemetry parity gates on migrated pages before route flip.

1|Updated Feb 19, 2026
One-click install
npx skills add https://github.com/ohmyhotelco/hare-cc-plugins --skill fm-parity-ohmyhotelco
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: fm-parity
Source: https://github.com/ohmyhotelco/hare-cc-plugins/tree/main/frontend-migration-plugin/skills/fm-parity
Command: npx skills add https://github.com/ohmyhotelco/hare-cc-plugins --skill fm-parity-ohmyhotelco

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Migrating a page from a legacy app to a new stack risks silent regressions in appearance, API behavior, native bridge calls, and analytics. This Skill runs the final non-behavioral parity gates after E2E testing so a route flip only happens when the migrated page provably matches its legacy counterpart. ## Core Features & Use Cases - Four parity gates: visual regression against the legacy baseline, API contract freeze, WebView bridge round-trip, and telemetry dual-fire parity, each enforced against the plan's gateAcceptance criteria. - Evidence inspection before recording: verifies capture provenance (legacy vs v2 side), requires side-by-side screenshot comparison across spacing, icons, alignment, and typography axes, and rejects scope reductions or self-granted criterion amendments. - Tamper-aware gate accounting: records pass evidence with commit SHA and a tree hash of watch paths, refusing to record a pass if files moved while the gate ran. - Use Case: After migrating a hotel booking page from Angular to React and passing E2E tests, run this gate to confirm the React page visually matches legacy, fires identical analytics events, and honors the frozen API contract before flipping traffic. ## Quick Start Run the parity gate on a migrated page with a command like "run fm-parity for the booking page on the pc app" after it has reached e2e-passed status.

Frequently Asked Questions about fm-parity

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I verify visual parity between a legacy and migrated page?▼

Run the parity gate after E2E passes; it captures screenshots from both legacy and v2 apps and compares them side by side across axes like spacing, icons, alignment, color, and typography. A pass requires an explicit side-by-side render diff, not just matching filenames or report claims.

What gates run before flipping a migrated route to the new app?▼

Four non-behavioral gates run: visual regression against the legacy baseline, API contract freeze, WebView bridge round-trip, and telemetry dual-fire parity. Visual and contract always run; webview and telemetry run only when the migration plan triggers them.

Can visual regression work across different frameworks like Angular and React?▼

Cross-framework pages cannot pixel-diff directly, so the gate uses per-side baselines plus computed-style probes. The probe set must cover every content-independent checklist axis, and the v2 baseline is only valid after being checked against legacy.

Why does the parity gate fail even when the report says pass?▼

The gate inspects evidence beyond the verdict string: unresolved capture provenance, non-visual comparisons counted as visual passes, incomplete probe sets, scope deviations without user approval, and amendment claims missing from the plan all override a pass to fail.

What happens if files change while the parity gate is running?▼

The skill hashes watch paths before and after the verifier runs. If the hashes differ, no pass is recorded and the gate must be re-run, ensuring the recorded evidence matches the exact tree that was verified.