249 lines
13 KiB
Markdown
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`
|