feat(i18n): reconcile multilingual navigation and RTL rendering
This commit is contained in:
15 files changed
+806
-232
No files matched your search
+84
-146
@@ -1,163 +1,101 @@
|
||||
# AIA Astro Migration — Living Session Handoff
|
||||
|
||||
**Last updated:** October 10, 2026 (UTC)
|
||||
**Repository:** `AIAMarketing/azinstitute4autism.com`
|
||||
**Working branch:** `faithful-astro-migration`
|
||||
**Last accepted implementation:** Phase 6B.4 — URL and SEO Reconciliation
|
||||
**Verified pre-commit parent:** `8646792d46a8a117ef617f5dd2582c2550b45d19`
|
||||
**Repository:** `AIAMarketing/azinstitute4autism.com`
|
||||
**Working branch:** `faithful-astro-migration`
|
||||
**Last accepted implementation:** Phase 6B.5 — Multilingual, RTL, Accessibility, and Performance Acceptance
|
||||
**Verified pre-commit parent:** `8192ea71c47a7163b40a7fad144ebbd2523282d1`
|
||||
**Implementation checkpoint:** the commit containing this handoff update; obtain its actual SHA from Git history
|
||||
**Next planned milestone:** Phase 6B.5 — Multilingual, RTL, Accessibility, and Performance Acceptance
|
||||
**Next planned milestone:** Phase 6C — Missing English Library Article Reconciliation
|
||||
|
||||
> This is a short, continually updated orientation document, not a replacement for
|
||||
> the code, accepted project instructions, or detailed migration evidence.
|
||||
> GitHub branch HEAD may be newer than the implementation checkpoint above
|
||||
> because documentation-only commits can follow it. Always verify the branch.
|
||||
> This is a short orientation document. Repository policy, code, and the dated
|
||||
> evidence in `www/reports/migration-summary.md` remain authoritative. Verify the
|
||||
> branch and Git history before starting new work.
|
||||
|
||||
## Start a new session
|
||||
|
||||
1. Verify the current GitHub HEAD of `faithful-astro-migration`; inspect recent
|
||||
commits rather than assuming the checkpoint recorded here is HEAD.
|
||||
2. Read repository-root `AGENTS.md` (authoritative), `MIGRATION_BRIEF.md`,
|
||||
this handoff, and the relevant recent sections of
|
||||
`www/reports/migration-summary.md`.
|
||||
3. For Library architecture, read
|
||||
`www/reports/phase-6a-library-architecture.md` **together with the
|
||||
subsequently accepted Phase 6A ratification in the migration summary**.
|
||||
The ratification supersedes conflicting proposals in the original document.
|
||||
4. Inspect the relevant code before drafting the next complete Codex kickoff
|
||||
prompt. Do not presume an implementation is finished because it was planned.
|
||||
5. Continue only the next explicitly approved milestone.
|
||||
|
||||
## Verified implementation state
|
||||
## Accepted implementation state
|
||||
|
||||
- Phase 5C Team reconciliation: `34d5394b3ce765028a27b9cddd9952de3f09bfe7`.
|
||||
- Phase 6A Library architecture proposal: `76a035424dc5245443476b168d8c91ea62eed27b`.
|
||||
- Phase 6B.1 multilingual metadata search: `b20c253383440598c2d07bf6f852906ac00c42df`.
|
||||
- Phase 6B.2 static Library pagination and redirect definitions:
|
||||
`6f5ac3c0d233cee5fbbb62be79bc6909e6bec183`.
|
||||
- **Phase 6B.3 author archives and linked bylines: accepted in the checkpoint
|
||||
containing this handoff, with pre-commit parent
|
||||
`0957c06a18726a01531f5b46a1d74bc67aa58f60`.** The file intentionally does
|
||||
not invent the containing commit's SHA; verify it from Git history.
|
||||
- **Phase 6B.4 URL and SEO reconciliation: accepted in the checkpoint containing
|
||||
this handoff, with pre-commit parent
|
||||
`8646792d46a8a117ef617f5dd2582c2550b45d19`.** The file intentionally does
|
||||
not invent the containing commit's SHA; verify it from Git history.
|
||||
- Phase 6A Library architecture proposal: `76a035424dc5245443476b168d8c91ea62eed27b`;
|
||||
its later ratification in the migration summary controls implementation.
|
||||
- Phase 6B.1 multilingual static search: `b20c253383440598c2d07bf6f852906ac00c42df`.
|
||||
- Phase 6B.2 Library pagination: `6f5ac3c0d233cee5fbbb62be79bc6909e6bec183`.
|
||||
- Phase 6B.3 author archives and linked bylines: `8646792d46a8a117ef617f5dd2582c2550b45d19`.
|
||||
- Phase 6B.4 URL/SEO reconciliation: `8192ea71c47a7163b40a7fad144ebbd2523282d1`.
|
||||
- Phase 6B.5 is accepted in the checkpoint containing this handoff. The file
|
||||
intentionally does not invent that containing commit's SHA.
|
||||
|
||||
Other earlier milestones and acceptance details are recorded in
|
||||
`www/reports/migration-summary.md`. Keep phase checkpoints separate.
|
||||
### Phase 6B.5 accepted behavior
|
||||
|
||||
### Phase 6B.4 accepted behavior
|
||||
- Shared visitor navigation resolves only eligible publications and remains
|
||||
separate from SEO hreflang. Ordinary content uses explicit translation
|
||||
relationships; author archives use validated locale records and author
|
||||
translation keys. Numbered archive choices go to locale roots without
|
||||
claiming page-number equivalence.
|
||||
- English, Spanish, and Arabic desktop, mobile, footer, logo, and Tour links use
|
||||
valid locale destinations or visibly identified cross-language fallbacks.
|
||||
`/ar` remains unpublished; Arabic Home explicitly falls back to English `/`.
|
||||
- The author language selector uses native disclosure semantics and real links.
|
||||
The Arabic footer retains RTL layout while phone, email, and address values
|
||||
use narrow LTR bidi isolation.
|
||||
- The shared address is two structured lines and renders with one explicit line
|
||||
break. Contact obfuscation remains unchanged; reversed no-JavaScript strings
|
||||
are intentional fallbacks, and generated scripts decode the approved phone
|
||||
and email destinations.
|
||||
- Skip-link and mobile-menu labels are localized. The user completed the manual
|
||||
browser checklist across languages, desktop/mobile layouts, keyboard focus,
|
||||
search, RTL, and the final address refinement. No real screen-reader session
|
||||
was performed.
|
||||
- Search remains dependency-free, local, metadata-only, and demand-loaded. The
|
||||
three indexes contain 46 English, 12 Spanish, and seven Arabic records
|
||||
(44,407 raw bytes and 13,382 gzip bytes total); the shared client is 6,539 raw
|
||||
bytes and 2,651 gzip bytes.
|
||||
- Validation passed with zero Astro diagnostics; 37 Library, 34 SEO, 33
|
||||
publication, 20 Markdown, and 10 route tests; both build modes; clean
|
||||
route/link/image/blog audits; and final offline reconciliation from 70 saved
|
||||
requests. The accepted baseline remains 110 HTML routes, eight author
|
||||
archives, 97 indexing-enabled sitemap URLs, 174 hreflang links across 53
|
||||
routes, 65 Library records, three search indexes, nine redirects, and 133
|
||||
offline dispositions. Final staging has 110 `noindex,nofollow` pages, an empty
|
||||
sitemap, and no hreflang.
|
||||
- No production deployment, redirect activation, or cutover is authorized.
|
||||
|
||||
- The repository contains nine validated 301 definitions: three legacy service
|
||||
aliases, three Library `/page/1` aliases, and three author `/page/1` aliases.
|
||||
An isolated nginx instance verified every destination and final target. None
|
||||
has been activated on a deployed host.
|
||||
- Schema-2 offline reconciliation records 133 route/query dispositions using
|
||||
70 previously saved production requests. It distinguishes inherited public
|
||||
observations, current generated output, and repository-only redirects.
|
||||
- The publication baseline remains 110 generated HTML routes, eight author
|
||||
routes, 97 indexing-enabled sitemap URLs, and 174 hreflang links on 53
|
||||
routes. Canonical, robots, sitemap, translation, syndicated-article, and
|
||||
structured-data policies remain unchanged.
|
||||
- Automated acceptance includes zero Astro diagnostics; 33 Library, 34 SEO,
|
||||
33 publication, 20 Markdown, and 10 route tests; both build modes; clean
|
||||
route/link/image/blog audits; isolated nginx checks; and representative
|
||||
desktop/mobile headless Chromium checks. The final staging build has all 110
|
||||
pages `noindex,nofollow`, an empty sitemap, and no hreflang.
|
||||
- The user's staging inspection found five representative no-slash URLs
|
||||
redirecting to slash forms. `/search` also showed an HTTPS-to-HTTP-to-HTTPS
|
||||
chain. The user accepted deferral of this temporary Docker/nginx behavior;
|
||||
correct slashless serving and redirect activation must be separately
|
||||
implemented and verified on the eventual Contabo VPS before cutover.
|
||||
- No production deployment or cutover has been authorized.
|
||||
## Next: Phase 6C — Missing English Library Article Reconciliation
|
||||
|
||||
## Ratified Library rules to retain
|
||||
Reconcile the nine missing English articles from current, traceable source
|
||||
content through a separately authorized implementation and review. Preserve the
|
||||
Markdown-first content model and existing publication policy. Do not fabricate
|
||||
articles, dates, translations, metadata, assets, or pagination. Until the
|
||||
articles are reconciled, `/library/page/6` and
|
||||
`/library/author/rula-diab/page/6` remain cutover blockers and must not be
|
||||
created, copied from page 5, or redirected to unrelated pages.
|
||||
|
||||
- Use the existing publication-eligible catalog and explicit translation
|
||||
relationships. Ten posts/page; publication date descending, normalized
|
||||
route ascending to break ties. Generate only nonempty numbered pages.
|
||||
- Library page 1 is the unnumbered root. Numbered Library pages are
|
||||
self-canonical, indexable in an authorized indexing-enabled build,
|
||||
sitemap-eligible, and **not** numbered-page hreflang equivalents.
|
||||
- Retain two accessible English syndicated records in listings and search;
|
||||
preserve their external canonicals, `noindex`, sitemap and hreflang exclusions.
|
||||
- Embedded search is metadata-only and client-side with language-specific
|
||||
static JSON. Legacy `/search` accepts previous parameters but initially
|
||||
searches Library articles, **not** the entire website. No external search
|
||||
provider or query tracking.
|
||||
- Author archives, once generated, are **initially `noindex,follow` and
|
||||
outside the sitemap**. Only reviewed, indexable author roots may later receive
|
||||
reciprocal hreflang via explicit translation keys; never infer numbered
|
||||
archive equivalents.
|
||||
- Do not manufacture missing content or redirect distinct later pagination
|
||||
pages to earlier pages.
|
||||
## Outstanding pre-cutover requirements
|
||||
|
||||
## Next: Phase 6B.5 — Multilingual, RTL, Accessibility, and Performance Acceptance
|
||||
1. Perform a real screen-reader acceptance session.
|
||||
2. Obtain fluent Spanish and Arabic review of operational copy and localized
|
||||
author biographies.
|
||||
3. Obtain AIA approval of public author credentials, role, and biography claims
|
||||
where required.
|
||||
4. Keep author archives `noindex,follow`, sitemap-excluded, and hreflang-excluded
|
||||
until the indexing, sitemap, and hreflang decisions receive explicit review.
|
||||
5. On the eventual Contabo VPS, verify slashless canonical serving, HTTPS
|
||||
preservation, activation of the nine repository redirects, query-string
|
||||
preservation, locale destinations, loop avoidance, and real 404 behavior.
|
||||
6. Complete Phase 6C before accepting either missing English page-6 route.
|
||||
7. Treat cached HubSpot/CDN responses cautiously; preserve source timestamps and
|
||||
distinguish inherited evidence from fresh origin verification.
|
||||
|
||||
Address the three accepted multilingual defects through a bounded, separately
|
||||
reviewed milestone: Arabic footer contact direction; the high-priority
|
||||
author-archive language selector; and locale-appropriate desktop, mobile, and
|
||||
footer destinations. Visitor navigation may use explicitly validated locale
|
||||
counterparts while author SEO hreflang remains disabled unless separately
|
||||
approved.
|
||||
## Working protocol
|
||||
|
||||
## Outstanding blockers and subsequent milestones
|
||||
|
||||
1. **Phase 6C:** Nine missing English Library articles must be reconciled from
|
||||
source before `/library/page/6` and
|
||||
`/library/author/rula-diab/page/6` can be accepted for cutover.
|
||||
Do not generate empty substitutes or misleading redirects.
|
||||
2. **Hosting gate:** The repository's nine redirects are not active on deployed
|
||||
hosts. The eventual Contabo nginx configuration must eliminate the observed
|
||||
trailing-slash and HTTPS-to-HTTP chain, preserve queries and locales,
|
||||
implement approved aliases, and verify real HTTP 301/404 behavior before
|
||||
cutover.
|
||||
3. **Phase 6B.5:** Multilingual, RTL, accessibility, and performance acceptance.
|
||||
This includes human review of Spanish/Arabic content and three newly observed
|
||||
defects: Arabic footer contact direction, an apparently unresponsive Arabic
|
||||
author-archive language selector, and locale-inappropriate desktop/mobile/
|
||||
footer navigation destinations. Code inspection suggests the selector is
|
||||
coupled to SEO translation edges and Arabic MainNav falls back to English,
|
||||
but those are hypotheses requiring targeted verification. Visitor language
|
||||
navigation may use explicitly validated published counterparts without
|
||||
enabling author hreflang, indexing, or sitemap participation.
|
||||
Spanish and Arabic operational text and author biographies still require
|
||||
human language review; public author claims may require organizational
|
||||
approval.
|
||||
4. **Author SEO decision:** Author archive indexing, sitemap participation, and
|
||||
hreflang remain deferred human-decision gates.
|
||||
5. **Later phases:** Other content and language reconciliation (including
|
||||
missing Spanish privacy content), visual/accessibility review, operational
|
||||
integration decisions, and cutover.
|
||||
6. Site remains primarily live on HubSpot; production-origin freshness is not
|
||||
proved by cached prerender responses. Stage locally or at
|
||||
`aia.web3app.dev` without activating production forms, analytics,
|
||||
advertising tags, or new PHI flows.
|
||||
7. AIA general ABA ages are **18 months through 8 years**; narrower programs
|
||||
have their own eligibility and should not be conflated.
|
||||
|
||||
## Working protocol and handoff maintenance
|
||||
|
||||
1. Provide a complete, bounded Codex kickoff prompt; Codex implements locally
|
||||
and reports validation plus a structural diff **without staging/committing**.
|
||||
2. Review the results and, where needed, perform manual browser acceptance
|
||||
against built static files via the user's Docker/nginx reverse-proxy staging
|
||||
setup. The user runs the serving command from the built output directory;
|
||||
`npm run preview` is not required to duplicate that environment.
|
||||
3. After explicit approval, provide a narrow checkpoint commit prompt.
|
||||
Codex commits only reviewed files; **do not automatically push**. The user
|
||||
pushes, and the next session verifies GitHub HEAD.
|
||||
4. No production hosting/redirect activation, forms, analytics, search logging,
|
||||
dependency upgrades, fabricated translations, or unrelated modifications
|
||||
without separate authorization.
|
||||
5. Preserve the user's untracked root `merge-plan.md` (not stored on GitHub);
|
||||
user/Codex-reported SHA-256:
|
||||
1. Read repository-root `AGENTS.md`, `MIGRATION_BRIEF.md`, this handoff, and the
|
||||
relevant migration-summary sections before new work.
|
||||
2. Implement only an explicitly authorized milestone, then report validation and
|
||||
a read-only structural diff before staging or committing.
|
||||
3. After explicit acceptance, create a narrow local checkpoint. Do not push or
|
||||
deploy automatically.
|
||||
4. Do not activate forms, analytics, advertising, search logging, production
|
||||
redirects, or new PHI flows without separate authorization.
|
||||
5. Preserve the user-owned untracked root `merge-plan.md`: do not read, edit,
|
||||
move, stage, delete, or checksum it. Its previously reported SHA-256 is
|
||||
historical evidence only:
|
||||
`015db80cdbaf7d68799265d2070db760155c342b432ce6795f17ebc2218c641c`.
|
||||
A remote GitHub write cannot verify this local untracked file.
|
||||
6. **Update this handoff at every accepted milestone transition:** refresh
|
||||
last completed implementation checkpoint, next task, acceptance numbers,
|
||||
blockers, and status of deployed-vs-repository redirects. Keep it short;
|
||||
detailed validation belongs in `migration-summary.md`. Preserve the original
|
||||
architecture proposal and dated historical records rather than rewriting
|
||||
decisions retroactively.
|
||||
Reference in new issue
Block a user