Files
aia-website/www/reports/phase-9-form-a-default-live-2026-10-30.md
T

249 lines
13 KiB
Markdown

# Phase 9 — Default-live Form A simplification
Recorded: 2026-10-30 UTC. This is an owner-authorized architectural revision,
not a site-cutover or deployment authorization.
## Baseline and authority
Started on `faithful-astro-migration` at pushed checkpoint
`55adb797051473c3067a0d454515153237e9b8d6`
(`fix(forms): close completed drawers and restore portal styling`). The tracked
working tree and index were clean. This work is a new descendant checkpoint;
the pushed commit is not amended, rebased or reset.
The owner explicitly authorizes working Form A on publicly reachable
`https://aia.web3app.dev/`, with owner-controlled test notifications and cleanup.
No extra hostname, environment-role, password or approval gate is introduced.
Earlier isolated-test/seven-route production-gate reports retain their original
results and now link to this superseding decision.
## Implementation
- `PUBLIC_AIA_FORMS_MODE` supports `live`, `off`, `mock`. Absent, empty or
whitespace-only mode defaults to live. Invalid explicit values, including
`isolated-test`, stop configuration with instructions to remove the obsolete
value or choose a supported mode.
- Removed the five former form approval/environment variables from active code,
`.env.example` and current operating instructions. No replacement gate exists.
- One typed registry fixes 16 route/locale/context triples. The ID and origin
remain `262946078314059` and `https://form.jotform.com`. No visitor input,
arbitrary origin, service preselection or extra query parameter is accepted.
- Indexing is independent: both publication modes contain the same ten immediate
frames and six deferred drawer URLs. Publication metadata and content are unchanged.
- Native inactive/mock surfaces remain separate from the real iframe adapter.
`/referrals` and future Form C cannot activate through live mode.
- Live drawers retain four-second OR 50%-scroll opening, first-trigger wins,
global 30-day dismissal/success suppression, manual CTA override, deferred
iframe loading, native dialog focus/Escape/backdrop handling and reduced motion.
Off mode stops automatic inactive drawers; CTA navigation remains usable.
- Verified completion handling is unchanged: exact origin, actual activated/open
iframe window, correct form ID/action, idempotence, localized acknowledgment,
full five-second interval, slide-out and focus restoration. A later manual
reopening after completion gets a fresh iframe. No load/click is success.
- Shared iframe heights, sandbox, no-referrer, fixed URLs, 15-second conditional
hosted fallback and localized noscript fallback remain unchanged.
- Employee portal no longer reads the retired form environment variable. It
still requires its own explicit approval, a valid private ciphertext input and
explicit non-indexing preview setting. Normal builds contain no private payload.
Decryption, sanitized rendering, styles, SOPS and private resources are unchanged.
## Approved placements
| Route | Locale | Context | Loading |
|---|---|---|---|
| `/contact` | en | contact | immediate |
| `/es/contact` | es | contact | immediate |
| `/lp/aba-therapy` | en | landing | immediate |
| `/lp/aba-insurance` | en | landing | immediate |
| `/lp/aba-ahcccs` | en | landing | immediate |
| `/lp/aba-private-pay` | en | landing | immediate |
| `/lp/early-intervention` | en | landing | immediate |
| `/client-consultation` | en | consultation | immediate |
| `/es/client-consultation` | es | consultation | immediate |
| `/schedule-consultation` | en | consultation | immediate |
| `/aba-therapy` | en | consultation | deferred drawer |
| `/autism-evaluations` | en | consultation | deferred drawer |
| `/learner-social-club` | en | consultation | deferred drawer |
| `/es/aba-therapy` | es | consultation | deferred drawer |
| `/es/autism-evaluations` | es | consultation | deferred drawer |
| `/es/learner-social-club` | es | consultation | deferred drawer |
Each URL is `https://form.jotform.com/262946078314059?formContext=CONTEXT&language=LOCALE`
with the exact fixed values above. The six deferred frames do not have `src`
until the drawer opens. Academy copy remains typed but has no published placement.
## Validation
- Astro check: 151 files, zero errors, warnings or hints. Each real build also
executes Astro check through the existing npm script.
- Complete sequential test run: **206 passed, 0 failed/skipped**, including
Markdown, publication, SEO, Library, routes, campaign, preview, Form A,
counter/form isolation, artifact integrity and service/portal tests.
- Initial consolidated run: 205/206. A campaign section-count assertion needed
to exclude the nested shared iframe section while preserving the original
seven page sections. Corrected the selector; focused rerun and full rerun pass.
- Library/SEO off-mode presentation fixtures now explicitly select `off`, preserving
their existing localization assertions. Publication fixtures deliberately test
the empty/default-live mode in both publication configurations.
- Links: 0 broken internal links. Images: 0 missing mapped images. Blog: 0 failures.
- Invalid `PUBLIC_AIA_FORMS_MODE=isolated-test` build: rejected with actionable
guidance, as expected. Default build restored afterward.
- Ordinary `npm run dev`: eight representative contact, landing, consultation
and EN/ES service routes returned default-live markup using loopback HTTP only.
The npm launcher detached its managed server; the initial process-group cleanup
returned ESRCH, so the identified task-owned server was stopped directly.
- Markdown local links/fences, checklist column/ID consistency and `git diff --check`
pass. Historical evidence is retained; no current-source reconciliation claim
is made from an older fingerprint, and no historical JSON was regenerated.
| Built artifact | HTML routes | Sitemap URLs | Hreflang links | Immediate/deferred Form A | Result |
|---|---:|---:|---:|---:|---|
| Normal staging, default live | 128 | 0 | 0 | 10 / 6 | Pass |
| Indexing enabled, default live | 127 | 109 | 180 | 10 / 6 | Pass |
| Staging, explicit off | 128 | 0 | 0 | 0 / 0 | Pass |
| Staging, explicit mock | 128 | 0 | 0 | 0 / 0 | Pass |
Staging remains `noindex,nofollow`; `/lp` review index appears only there.
Indexing preserves author/campaign exclusions and translation architecture.
Artifact unit fixtures additionally test off/mock against both publication modes,
reject unknown destinations and premature drawer sources, and reject private
portal payloads/resources, extra form IDs, API origins and tracking signals.
No normal artifact contains active native lead-form actions or portal ciphertext.
Guarded Chromium 149.0.7827.55 evidence (temporary, not committed screenshots):
| Harness / artifact | Checks | Attempted Jotform GETs, intercepted locally | Evidence directory |
|---|---:|---:|---|
| Service/portal, default live | 47 | 37 | `/tmp/aia-service-portal-eOmGmZ` |
| Contact/landing, default live | 35 | 38 | `/tmp/aia-form-a-iframe-5439e1` |
| Consultation, default live | 45 | 40 | `/tmp/aia-form-a-consultation-ZzxRRB` |
| Service/portal, off | 18 | 0 | `/tmp/aia-service-portal-IkEh6j` |
| Contact/landing, off | 28 | 0 | `/tmp/aia-form-a-iframe-z838nC` |
| Service/portal, mock | 18 | 0 | `/tmp/aia-service-portal-KxmUhB` |
| Contact/landing, mock | 28 | 0 | `/tmp/aia-form-a-iframe-cetW0I` |
Live coverage includes 320/390/768/1440px, all 16 placements, exact URLs,
localized titles, delayed/late-load fallback, no-JavaScript, keyboard/dialog
behavior, trigger/suppression lifecycle, five-second verified-message handling,
duplicate/wrong messages, fresh-frame reopening and both encrypted synthetic
portal views. Off/mock drawer checks cover all six routes at 390/1440px; off
CTAs navigate and do not auto-open, mock retains its synthetic drawer behavior.
The all-route guarded pass separately opened **128/128** staging routes with no
failures or JavaScript exceptions. It recorded 10 approved Form A GET attempts,
all blocked before transmission, and four blocked existing non-form resources.
Evidence: `/tmp/aia-phase10-browser-zjwRCA`. These counts overlap the focused
checks and are not additional unique routes. Every external request was blocked
or fulfilled locally; zero real Jotform submissions, production API requests,
analytics or advertising requests were sent. Existing map/resource attempts are
recorded separately from approved Form A attempts. Real provider behavior,
Firefox and human screen-reader acceptance were not reproduced.
## Operator workflow
From `www/`, with no Form A environment overrides:
```sh
npm run dev
# Or build and inspect local static output:
npm run build
node tools/phase10-artifact-verify.mjs --mode=staging --forms=live
npm run preview -- --host 127.0.0.1
```
Both ordinary commands enable Form A. No deployment was performed. Remove stale
`isolated-test` values from local `.env` files if the actionable error appears.
Remove unused former approval/environment variables; they are not recognized gates.
```sh
# Indexing changes publication only:
PUBLIC_ALLOW_INDEXING=true npm run build
node tools/phase10-artifact-verify.mjs --mode=indexing --forms=live
# Explicit form rollback/offline artifact:
PUBLIC_AIA_FORMS_MODE=off npm run build
node tools/phase10-artifact-verify.mjs --mode=staging --forms=off
# Synthetic local fixtures:
PUBLIC_AIA_FORMS_MODE=mock npm run dev
# Restore ordinary staging output:
npm run build
```
For service acceptance, use a fresh browser profile or remove only the
`aia:service-inquiry:auto-suppressed-until` test preference. On EN/ES service pages,
verify four-second/half-scroll opening; after dismissal, automatic opening stays
suppressed while the existing CTA reopens manually. With JavaScript disabled or
forms off, the CTA remains a consultation-page link. Do not clear unrelated storage.
## Remaining owner acceptance and boundaries
Owner-controlled real submissions must verify the provider's actual completion
message and thank-you behavior. Automated fixtures validate the parent code, not
Jotform delivery. The Spanish seven-option consultation dropdown remains a
Builder translation/Update Options diagnostic; Astro supplies only fixed context
and language and cannot modify the cross-origin options. No Jotform settings changed.
Final fluent-language, screen-reader, all-route responsive/keyboard, runtime
telemetry/privacy, HTTPS-host and notification-recipient operational acceptance
remain distinct from this owner-authorized default-live architecture. Historical
owner-reported direct and sampled embedded functional acceptance is preserved.
Form C creation/integration, counter activation, analytics and advertising remain
separate work. Site cutover, private portal serving and infrastructure activation
are not authorized.
No submissions, account mutations, API calls, deployment, push or infrastructure
changes occurred. The accepted Jotform CSS backup is unchanged. Protected `merge-plan.md`,
reconciliation archives and private portal collection were not read or changed.
## Final artifact integrity
Normal default-live staging restored: 410 files, aggregate SHA-256
`cd042f9f6c27574e458223a73625f28e56b4bb964f7faf4cdb53a40acb19a4db`. This hashes only generated public output; it is not a production-release approval.
## Exact checkpoint path inventory
All paths below belong to this focused revision. Source changes remove form gates
and decouple portal input; no content or accepted Jotform CSS was edited. The only
new file is this report.
- `www/.env.example`
- `www/README.md`
- `www/integrations/employee-portal/README.md`
- `www/integrations/jotform/README.md`
- `www/reports/SESSION_HANDOFF.md`
- `www/reports/phase-10-technical-readiness-package-2026-10-22.md`
- `www/reports/phase-9-contabo-deployment-readiness-2026-10-21.md`
- `www/reports/phase-9-drawer-portal-corrections-2026-10-30.md`
- `www/reports/phase-9-form-a-consultation-isolated-test-2026-10-29.md`
- `www/reports/phase-9-form-a-default-live-2026-10-30.md`
- `www/reports/phase-9-jotform-implementation-plan-2026-10-18.md`
- `www/reports/phase-9-jotform-integration-contract-2026-10-18.md`
- `www/reports/phase-9-jotform-verification-checklist-2026-10-18.csv`
- `www/reports/phase-9-service-portal-consolidated-2026-10-30.md`
- `www/reports/phase-9-two-form-integration-specification-2026-10-28.md`
- `www/src/components/ContactForm.astro`
- `www/src/components/FormAPreview.astro`
- `www/src/components/FormShell.astro`
- `www/src/components/JotformIframe.astro`
- `www/src/components/ServiceInquiryDrawer.astro`
- `www/src/components/campaign/ConsultationForm.astro`
- `www/src/components/campaign/EarlyInterventionPage.astro`
- `www/src/components/pages/ContactPage.astro`
- `www/src/components/pages/EmployeePortal.astro`
- `www/src/scripts/service-inquiry.ts`
- `www/src/utils/form-integration.ts`
- `www/src/utils/portal-input.mjs`
- `www/tools/campaign.test.mjs`
- `www/tools/jotform-consultation-browser.mjs`
- `www/tools/jotform-form-a-browser.mjs`
- `www/tools/jotform-form-a-real-iframe-sizing.mjs`
- `www/tools/jotform-form-a.test.mjs`
- `www/tools/library.test.mjs`
- `www/tools/phase10-artifact-verify.mjs`
- `www/tools/phase10-artifact.test.mjs`
- `www/tools/phase10-browser-regression.mjs`
- `www/tools/phase9-nonproduction.test.mjs`
- `www/tools/publication.test.mjs`
- `www/tools/seo.test.mjs`
- `www/tools/service-portal-browser.mjs`
- `www/tools/service-portal.test.mjs`