Repository navigation
site(nav): phase 2 — Why ObjectOS top level, GitHub into Developers, Guides column, four-column footer, ruled 8-locale labels - #348
Merged
objectstack-fleet[bot] merged 1 commit intoNov 2, 2026
Conversation
…Templates and GitHub, Resources with Guides, four-column footer, ruled 8-locale labels Implements the phase-2 navigation ruled on #303 (maintainer, 2026-11-02, comment 6570300432): Why ObjectOS becomes a top-level group (Comparison & fit · Security & trust · Reference stories); the GitHub icon leaves the bar and Developers gains "GitHub ↗"; Resources is Blog · Glossary · Videos ↗ with a labelled Guides column (the five pillar guides); the blog browse row's first link reads "All articles"; the footer is four equal columns (Product · Why ObjectOS · Developers · Resources) with Company & Legal as a row beside the brand line, and the FDE page is linked from the footer's Why column as "For FDE teams". New siteNav keys in all eight locales: compareFit, blog, videos, guides (was topicClusters), featuredGuides (was featuredClusters), forFde; `all` is gone (the row uses backToList). The en cluster eyebrows read "… guide". Measured in Chromium, the four-group bar needs 1070px in fr and 1057px in es, so the drawer breakpoint moves from 1024 to 1100 (CSS query and the drawer's matchMedia; the Header script's CSP digest in public/_headers is updated) and the bar's spacing is tightened a little (trigger padding 0.6rem, nav margin 1.5rem, right-group gap 0.4rem). Co-Authored-By: Claude <noreply@anthropic.com>
Contributor
Author
席位核对Verdict: ACCEPT. I reviewed this against GitHub, not the report. It implements #303 phase 2 as ruled in comment 6570300432 (maintainer, 2026-11-02, 「同意」).
Generated by Claude Code |
This was referenced Nov 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #342
Part of #303
Phase 2 of the navigation ruling on #303 (maintainer, 2026-11-02, comment 6570300432:
1a 2a 3a 4a 5a 6a 7同意). The eight-locale label table on #342 is applied as ruled. The header CTA and Sign in are untouched (#305). ArticleCard, the BlogPost hero and the cover scripts (#343) are not touched.维护者速读(草稿)
What changed
/compare/· Security & trust →/security/(trust center and permissions fold under it,aria-current="true") · Reference stories →/customer-stories/. No "Editions & pricing": Pricing stays the one flat link.backToList, all eight locales); theallkey ("Home") is removed.footer.pricing) · For FDE teams) · Developers (5, with GitHub ↗) · Resources (Blog · Glossary · Videos ↗, then Guides ▸ 5). Company & Legal is one row beside the brand line (Privacy · Terms & License · Refunds · llms.txt · RSS · GitHub ↗), its ownnavlandmark named bycompanyLegal. Thewidecolumn,column-countand the ≤900nth-childplacement are gone; the phone keeps two tracks (2×2, no empty cell).siteNavkeys insrc/lib/i18n.ts, eight locales, exactly the ruled table:compareFit,blog(=notFound.blog),videos,guides(wastopicClusters),featuredGuides(wasfeaturedClusters, the home strip'saria-label),forFde; zh-Hant throughs2t. The four en cluster eyebrows read "Modernization / Governance / Solution / Industry guide".matchMedia; the Header script's CSP digest inpublic/_headersis updated,w59b…→u2Ya…). See the fit table. The bar's spacing is tightened a little so the margin at 1100 is real: trigger side padding 0.72rem → 0.6rem, nav left margin 2rem → 1.5rem, right-group gap 0.5rem → 0.4rem, language button padding 0.72rem → 0.6rem.GITHUB_REPO_URLandYOUTUBE_CHANNEL_URLnow live insrc/lib/positioning.ts(the header, the footer and the home page's video section read the same constants; the home page had its own copy).Files:
src/components/Header.astro,src/layouts/Base.astro,src/lib/i18n.ts,src/lib/positioning.ts,src/lib/clusters.ts,src/components/MarketingHome.astro,public/_headers. One commit,8ed6ba5.Measured before and after
Before is
origin/main@7dfd903(the #341 build of6e3e1be, whose tree equals7dfd903); after is8ed6ba5. Chromium (Playwright 1.63,/opt/pw-browsers/chromium), where the site's font stack falls back to Liberation Sans (Arial metrics); production faces (Avenir Next, Segoe UI) are 5–8% narrower for Latin text, so every slack figure here is a floor. Screenshots are in the session scratchpad (www/shots-nav2-342/{after,final}), looked at.Header fit, 8 locales × widths. Slack = bar width − the bar's max-content width (the width it needs with no flex shrink: the logo, Sign in and the CTA at their natural size), in px; "drawer" = the hamburger bar. A negative number is the CTA pushed off the edge.
At 1200 and above the bar is capped at
--maxw(1120px), so the slack stops growing; before this change fr had 132px there, now 50px. Sign in, the language button and the CTA are hit-testable at every desktop width in every locale; the hamburger at every drawer width. 0 fails in 48 locale × width checks.Inbound links (static over
dist/, 964 pages; the language switcher not counted): every menu target — compare, security, customer-stories, templates, agent-developer, pricing, blog, glossary, the five guides, ontology, product-tour, platform, data-modeling, automation, ai, mcp, analytics — has header, drawer and footer links from every page of its locale in all 8 locales (en 139 pages, zh-Hans/zh-Hant 123, ja/de/es/fr/ko 114). Header-unreachable among them: none. Footer-only by ruling: trust-center, permissions (under the security hub) and forward-deployed-engineers (footer Why column, all 8 locales; it had 0 nav links before).Active state and
aria-current, 23 pages × 1366 and 390:/compare/→ Why ObjectOS lit, "Comparison & fit"page;/security/→ "Security & trust"page;/trust-center/,/permissions/→ "Security & trust"true;/customer-stories/→ Why ObjectOS lit, "Reference stories"page(it lit Resources before);/templates/,/agent-developer/→ Developers lit, entrypage;/blog/→ Resources, "Blog"page; a post and a topic hub → "Blog"true;/glossary/→ "Glossary"page; the five guides → Resources lit, the guidepage;/pricing/→ Pricingpage; the capability pages as before. Same in zh-Hans, ja, fr, ko spot checks. Active links withoutaria-current: 0 in 46 page × viewport checks. The FDE page lights nothing (footer-only, as ruled).Drawer (390×844 and 360×800; en, zh-Hans, de, fr; en dark). Collapsed: four groups + Pricing + CTA + Sign in all in the first screen (CTA 354–404px). Product expanded: scroll height 1115 (was 1147), Pricing 692–747 and the CTA 761–811 in the first screen at 390; at 360 the CTA is 11px under the first screen and reachable by scroll, as before. Resources expanded (Blog · Glossary · Videos · Guides ▸ 5): 1092, Pricing and the CTA in the first screen at both sizes. No horizontal overflow in the panel.
Footer. Desktop ≥1168: four 238px columns (214 at 1024, 233 at 1100), column heights 337px, footer 456px (was 400). Labels over two lines at 1366: 0 in all 8 locales (es and fr each have one two-line label, "Documentación para desarrolladores y protocolo" / "Documentation développeur et protocole"). Links outside their column: 0. The Company & Legal row sits on the brand line in one row in all 8 locales (417px en, 542px fr). Phone: 2×2 at 169px (390) / 154px (360) tracks, 44px rows, legal row wraps to two rows under the brand line; footer 1143px at 390/360 (was 1017: four full columns instead of one wide + three, plus the legal row). The one three-line label is es "Documentación para desarrolladores y protocolo ↗" in a 169px track at 390. Document horizontal overflow: 0 in all 70 page × viewport × theme captures.
Menus at 1366 (en / zh-Hans): Why 201px wide, Developers 226 / 201, Resources 458 / 410 (two columns, 185 + 233); de Resources 475 (longest guide "Ausführbare Geschäftsontologie"), es Developers 371. All inside the viewport. The unlabelled Resources column starts its items level with the Guides column's items (91 vs 92px from the top).
axe (axe-core 4.10.2; 14 pages × 1366 and 390 × light and dark, plus the home pages scrolled to the footer, the Resources and Why menus open, the drawer open with Resources expanded): before 4 violations in 72 runs, after 4 in 76 runs — the same four:
target-sizeon the footer row that sits under the sticky bar at 390 on/en/and/zh-Hans/, the bar over whatever is scrolled under it (documented on #339). Nothing new.Browser check: en and zh-Hans at 1366×625, 1440×750, 1512×830, 1920×945, 390×844 and 360×800, light and dark; ja, ko, de, es, fr, zh-Hant at 1024, 1100 and 390. Pages: home,
/compare/,/customer-stories/, a guide, a post,/blog/; the footer on every page; the Why, Developers and Resources menus open; the drawer open and with Resources expanded. 328 captures plus 8 final ones.Gates, on the tree committed as
8ed6ba5pnpm content:lint: exit 0,✓ content lint passed (399 files, 46 glossary terms checked)pnpm check, underos-verify-lock.sh(slotwww-nav2-342):0 errors, 0 warnings, 0 hintspnpm build, same lock run:check-positioning: PASS,✓ content lint --dist links passed (109909 internal links in 964 built pages resolve to built files),VERDICT command-exit 0(held 116s)pnpm seo:smoke: exit 0,SEO smoke test passed (954 HTML pages checked; … 4 inline script digests CSP-checked)For review: choices that were mine to make
aria-current="true"on a post or a topic hub (it was "All articles" with no current state off the index), the same section semantics the Glossary entry already had.allkey is removed rather than retranslated: the row reusesbackToList, which already reads "All articles" in all eight locales.navlandmark named "Company & Legal" (the existingcompanyLegalstring), beside the brand line; the footer columns stay in the "Footer" landmark.Acceptance notes (seen, not changed here)
llms.txtstill titles its section "Topic Cluster Pages"; it is the machine-facing map, in English, left as is.Generated by Claude Code
🤖 Generated with Claude Code
https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr