refactor(forms): enable approved Form A placements by default
This commit is contained in:
41 files changed
+862
-523
No files matched your search
@@ -0,0 +1,248 @@
|
||||
# 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`
|
||||
Reference in new issue
Block a user