Files
aia-website/www/reports/phase-9-astro-form-isolation-2026-10-21.md

3.8 KiB

Phase 9 P9-03 — Local Astro Form Isolation

Date: 2026-10-21 Status: Implemented and verified locally; Jotform creation and live integration remain unauthorized.

Scope

The native empty-action forms were replaced with an explicit fail-closed presentation layer. PUBLIC_AIA_FORMS_MODE defaults to off; invalid values and live without an explicit approval flag resolve to off. The runtime currently exposes only off and mock; no live Jotform adapter or URL exists.

Modes

  • off: no native <form>, no action, no POST surface, no Jotform resource, disabled controls, and a localized telephone/contact fallback.
  • mock: local synthetic button states (success, failed, or unavailable) bound by mock-form.ts; no persistence, backend, notification, cookie, analytics, or external request.
  • live: reserved for a separately authorized adapter and approved form IDs. It fails closed today. The historical source-template ID 250727122848156 is not embedded.

The logical route map records nine existing native enquiry instances and five campaign journeys. It is data only and does not activate a submission path.

Changed files

  • src/utils/form-integration.ts — typed mode resolver, logical form map, mock-result resolver.
  • src/data/form-integrations.ts — public mapping export.
  • src/scripts/mock-form.ts — local mock form and counter interaction binder.
  • src/components/ContactForm.astro — off/mock presentation with telephone fallback.
  • src/components/FormShell.astro — off/mock presentation and localized status.
  • src/components/ServiceInquiryDrawer.astro — off/mock drawer presentation; existing drawer behavior retained.
  • src/layouts/PageLayout.astro — explicit referral/service logical form mapping.
  • src/utils/form-messages.ts — localized mock and fallback messages.
  • .env.example — off-by-default mode, approval flag and mock result settings.
  • tools/seo.test.mjs, tools/library.test.mjs, tools/phase8-interactions.mjs — regression assertions for the inactive form surface.
  • tools/phase9-nonproduction.test.mjs — mode, mapping and source-isolation coverage.

Mapping

The shared implementation covers /contact, /es/contact, /client-consultation, /es/client-consultation, /schedule-consultation, /referrals, /aba-therapy, /autism-evaluations, and /learner-social-club. The campaign journeys /lp/aba-therapy, /lp/aba-insurance, /lp/aba-ahcccs, /lp/aba-private-pay, and /lp/early-intervention are mapped to the future Service Consultations form without changing their designs or routes.

Validation

  • npm run check — passed (125 files, no diagnostics).
  • Markdown 20/20; publication 33/33; SEO 35/35; Library 53/53; routes 10/10; Phase 8 5/5; campaign 11/11; P9 nonproduction 5/5.
  • Normal build — passed (128 pages).
  • Mock build (PUBLIC_AIA_FORMS_MODE=mock, failed fixture) — passed; no Jotform URL or external form request was emitted.
  • Guarded Chromium — 41 checks, 0 failures, with the off-mode Spanish form and no-JavaScript checks passing. productionAttempt: false; external Leaflet requests were blocked by the test guard.
  • Link, image and blog audits — passed with zero findings.
  • Explicit offline route reconciliation was regenerated as reports/route-reconciliation-2026-10-22-offline.json from saved request evidence and passed its subsequent --check; no production crawl was performed. The final normal staging build contained 128 HTML pages, all noindex,nofollow, an empty sitemap and zero hreflang links.

Deferred gates

The owner-created three-form Jotform architecture, field requirements, Builder settings, bilingual behavior, notification privacy, synthetic submission testing, CSP/referrer policy, and production activation remain P9-03/P9-07/P9-09 decisions. No form data reaches Contabo, Google, GA4 or a Jotform endpoint in this batch.