Cross-platform parity β
The React application is the frozen audit and rollback baseline. Flutter is the canonical implementation and source owner for Web, iOS, Android, Supabase contracts and functions, Hermes, workers, localization, taxonomy, design tokens, and generated output.
The executable source of truth is contracts/parity/capabilities.yaml. It is generated from the frozen React route and operation exports and checked by tool/run_parity_contract.dart.
Current contract β
| Requirement | Current value |
|---|---|
| Frozen React commit | 51f1b203b0651cf88db55b0f4d88afcc3da77884 |
| Active legacy routes | 267 |
| Implemented capabilities | 267 |
| Capability gaps | 0 |
| Route exemptions | 0 |
| Broad-prefix exemptions | disabled |
| Canonical UI | Flutter Ion Aurora |
| Canonical locales | assets/translations/ar.json, assets/translations/en.json |
An implemented capability must link concrete Flutter behavior, its permission policy, backend contracts, and focused tests. A route that merely resolves, a placeholder screen, or a broad redirect does not satisfy the contract.
Shipping surfaces β
| Workflow | Flutter Web | Flutter iOS | Flutter Android | Generated output |
|---|---|---|---|---|
| Authentication, OTP, passkeys, trusted devices | β | β | β | β |
| Staff dashboards and persona navigation | β | β | β | β |
| Properties, submissions, duplicate resolution | β | β | β | PDF, XLSX, share |
| Clients, requests, matching, follow-up | β | β | β | PDF, XLSX |
| Deals, transitions, reminders, outbox events | β | β | β | PDF, XLSX |
| Valuations, visits, inspection, delivery | β | β | β | bilingual PDF |
| Quotations, invoices, payments, statements | β | β | β | PDF, XLSX, print |
| Tasks, bundles, showcases, portals | β | β | β | PDF, print, share |
| Documents, contracts, signing, versions | β | β | β | PDF, DOCX |
| Notifications, Web Push, realtime, offline replay | β | β | β | β |
| WhatsApp, mailbox, social media, internal chat | β | β | β | CSV, share |
| Hermes, governed AI, knowledge and automation | β | β | β | β |
| MapLibre, PACI, Baladia, Tahdeed, inspections | β | β | β | PNG, PDF, print |
| Admin, users, roles, sessions, imports, archives | β | β | β | CSV, XLSX |
| Reports, calculators, portfolios, exports | β | β | β | PDF, DOCX, XLSX, CSV |
| Public, auth, token and SEO/PWA routes | β | β | β | download and share |
The three UI targets use the same Dart package. Responsive presentation and native interaction may differ, but permissions, validation, actions, database mutations, audits, notifications, outbox events, and document semantics must remain equivalent.
Examples of allowed platform adaptations:
- native biometric unlock is mobile-only while WebAuthn passkeys cover web;
- browser file capture replaces a native camera sheet where camera APIs are unavailable;
- web uses downloads and print dialogs while mobile uses file providers and share sheets;
- large administrative tables use responsive desktop grids and compact mobile cards without removing write operations;
- offline inspection uses the platform storage implementation while retaining the same idempotent replay contract.
These are interaction adaptations, not capability exemptions.
Canonical ownership β
- Flutter routes and screens:
lib/ - Flutter tests:
test/,integration_test/ - Edge Functions:
supabase/functions/ - Migration history and database tests:
supabase/migrations/,supabase/tests/ - Hermes:
services/hermes-server/ - Function deployment ownership:
contracts/backend/function-ownership.json - Cloudflare Worker ownership:
contracts/backend/worker-ownership.json - Code-graph build and upload:
.github/workflows/graph-update.yml,scripts/graphify_ci_build.py - Generated Supabase schema:
contracts/generated/supabase.types.ts - Generated PostgREST fixtures:
test/contract/fixtures/ - Taxonomy:
contracts/taxonomy_registry.json - Design tokens:
lib/core/theme/tokens.dart
Production builds must not fetch a sibling source checkout, .shared, a personal access token, or MONOREPO_FETCH_TOKEN.
Verification β
Run the blocking contract checks from the repository root:
dart run tool/run_parity_contract.dart --check
node tool/generate_function_ownership_manifest.mjs --check
node tool/generate_worker_ownership_manifest.mjs --check
flutter test test/contract --reporter=expanded
supabase db reset --local --no-seed
supabase test dbThe production release additionally requires the complete Flutter, Hermes, and Edge Function test suites; web, Android, and iOS release builds; bilingual role journeys; operation replay against sanitized staging fixtures; performance and bundle budgets; and the controlled cutover gates in PRODUCTION_CUTOVER.md.
React stays immutable and deployable only as the full-domain rollback target during the 30-day compatibility window. It is not an active source dependency or a destination for individual capability fallbacks.
The final active-production audit retained the same 267-route inventory. Its new MoJ full-identity deduplication, failed-insert observability, nightly reconciliation, unified-person merge primitive, Cloudflare scraper, and resumable backfill sources are now owned and tested here. React-only spinner, confirmation-pending, accessibility, and array-lookup changes did not introduce new operations; Flutter already provides equivalent pending, semantic, and repository-backed behavior.
