Skip to content

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 into
mainfrom
claude/pm-dispatch-objectos-ju9td1-issue-342
Nov 2, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/pm-dispatch-objectos-ju9td1-issue-342

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

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.

维护者速读(草稿)

  • 改了什么:页头一级变成 Product · Why ObjectOS · Developers · Resources · Pricing。「Why ObjectOS」是新的一级菜单(对比与适用边界 · 安全与信任 · 参考案例);GitHub 图标移出页头,进 Developers 菜单作「GitHub ↗」;Resources 变成双列(博客 · 术语表 · 视频 ↗ |「专题指南」列:五张 pillar 页);博客副栏首项「首页」改「全部文章」;页脚改成四等栏(Product · Why ObjectOS · Developers · Resources),公司与法务六条链接并成品牌行旁的一行;FDE 页只从页脚 Why 栏链出(「面向 FDE 团队」)。八种语言的新标签按 site(nav): phase 2 of #303 — Why ObjectOS top level, Developers with Templates and GitHub, Resources with Guides, four-column footer, ruled 8-locale labels #342 的终表落地。
  • 为什么改:决策:官网导航与首屏布局(导航结构 A/B · 主按钮 · 首屏 · 安全入口) #303 的审计——评估类页面(对比、安全、案例)在一级菜单里没有自己的入口;页脚的 2fr 宽栏和 nth-child 挪位是为旧结构写的特例。
  • 风险与代价(含回滚):汉堡断点从 1024 上调到 1100——四组菜单在 1024 宽下 de/es/fr 会压住右侧按钮(实测 −15 / −68 / −82px),1100 是实测第一个八语全部放得下的宽度;1024–1099 的窗口(横屏 iPad 第 9 代等)改走抽屉。不改 URL、不改价格、不改首页正文。回滚即 revert 这一个提交。
  • 席位意见:(留空)
  • 你要做的:任意页面点「Why ObjectOS」应见三项;Developers 末项「GitHub ↗」;Resources 右列标题「Guides / 专题指南」下五条;博客页副栏首项「All articles / 全部文章」;页脚四栏等宽、底部品牌行右侧一行法务链接;把窗口缩到 1100 宽,法语页头仍放得下。

What changed

Item Ruling Change
Top level 1 Product · Why ObjectOS · Developers · Resources · Pricing. No "Docs ↗" text link; the GitHub icon leaves the bar. Right side: theme · language · Sign in · Get started.
Why ObjectOS 7, 2 Comparison & fit → /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.
Developers 3, 1 Start with your agent · Product docs ↗ · Developer docs & protocol ↗ · Templates · GitHub ↗ (brand name, not translated).
Resources 6 Two-column panel: Blog · Glossary · Videos ↗ (the YouTube channel) beside a labelled Guides column with the five pillar guides. The blog topic hubs leave the menu (they are the blog row's Topics axis). In the drawer, Guides is a section label. The guides have no index page, so the label is a label, not a link.
Blog row 7 The first link reads All articles (backToList, all eight locales); the all key ("Home") is removed.
Footer 4, 5, 2 Four equal columns titled like the groups: Product (11: Platform · Product tour · Ontology · the seven capability pages · Sign in) · Why ObjectOS (7: Comparison & fit · Security & trust · Trust center · Permissions & security · Reference stories · Pricing (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 own nav landmark named by companyLegal. The wide column, column-count and the ≤900 nth-child placement are gone; the phone keeps two tracks (2×2, no empty cell).
Labels 7 New siteNav keys in src/lib/i18n.ts, eight locales, exactly the ruled table: compareFit, blog (= notFound.blog), videos, guides (was topicClusters), featuredGuides (was featuredClusters, the home strip's aria-label), forFde; zh-Hant through s2t. The four en cluster eyebrows read "Modernization / Governance / Solution / Industry guide".
Breakpoint measured 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, 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_URL and YOUTUBE_CHANNEL_URL now live in src/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 of 6e3e1be, whose tree equals 7dfd903); after is 8ed6ba5. 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.

width en zh-Hans zh-Hant ja ko de es fr
before, 1024 +104 +254 +254 +235 +240 +91 +40 +36
4 groups, old spacing, 1024 +16 +142 +142 +112 +85 −15 −68 −82
4 groups, old spacing, 1100 +92 +218 +218 +188 +161 +61 +8 −6
after, 1024 / 1099 drawer drawer drawer drawer drawer drawer drawer drawer
after, 1100 +127 +254 +254 +224 +196 +97 +43 +30
after, 1200 / 1280 / 1366 +147 +274 +274 +244 +216 +117 +63 +50

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, entry page; /blog/ → Resources, "Blog" page; a post and a topic hub → "Blog" true; /glossary/ → "Glossary" page; the five guides → Resources lit, the guide page; /pricing/ → Pricing page; the capability pages as before. Same in zh-Hans, ja, fr, ko spot checks. Active links without aria-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-size on 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 8ed6ba5

  • pnpm content:lint: exit 0, ✓ content lint passed (399 files, 46 glossary terms checked)
  • pnpm check, under os-verify-lock.sh (slot www-nav2-342): 0 errors, 0 warnings, 0 hints
  • pnpm 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

  1. Breakpoint 1100, not 1024. The card says keep 1024 and re-measure; the ruling (决策:官网导航与首屏布局(导航结构 A/B · 主按钮 · 首屏 · 安全入口) #303 decision 1) says the breakpoint goes to the first measured width where all eight locales fit, 1024 or 1100 to be decided by the measurement. Measured, 1024 fails de, es and fr by 15–82px even after tightening would take back about 40px, and nothing short of hiding the language name or shrinking type closes 82px. 1100 passes with 30px to spare in fr. The cost is the 1024–1099 window (a 9th-generation iPad in landscape); 1180-wide and 1366-wide iPads keep the desktop bar.
  2. The spacing tightening (about 37px) is there so that 1100 has a real margin and so the ≥1168 slack for fr is 50px rather than 14px; it is three constants, no new rule.
  3. GitHub appears twice in the footer (Developers, and the Company & Legal row), as the ruling's counts say (Developers 5, Company & Legal 6). Drop the legal-row copy if one is preferred.
  4. "Blog" is 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.
  5. The all key is removed rather than retranslated: the row reuses backToList, which already reads "All articles" in all eight locales.
  6. The Company & Legal row is its own nav landmark named "Company & Legal" (the existing companyLegal string), beside the brand line; the footer columns stay in the "Footer" landmark.

Acceptance notes (seen, not changed here)

  • The phone footer is 1143px tall at 390 (1017 before): four columns in two tracks plus the legal row. A collapsed footer on phones would be its own card.
  • llms.txt still titles its section "Topic Cluster Pages"; it is the machine-facing map, in English, left as is.
  • The 1024–1099 window now gets the drawer; if an intermediate compact bar (language button as a globe only) is wanted for it, that is the 1b shape the ruling did not take.
  • es "Documentación para desarrolladores y protocolo" runs to three lines in a 169px phone track; it did before as well.

Generated by Claude Code

🤖 Generated with Claude Code

https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr

…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>
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 2, 2026 06:44
@objectstack-fleet

Copy link
Copy Markdown
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, 「同意」).

Item Reading
Shape get_files lists 7 files: Header, Base (footer), MarketingHome (2 lines), clusters.ts, i18n.ts, positioning.ts (URL constants moved here), and public/_headers (the CSP digest of the Header script). No governed path. merge-tree shows no conflict with #347, which merged as 02cdb7a. The merge queue will rebuild this on the current main.
Premise measured Phase-1 nav was in place: Why ObjectOS and Security sat under Product, the GitHub icon was in the bar, the footer had a wide/nth-child layout, and the blog row read "Home".
After Why ObjectOS is now a top-level menu (Comparison & fit · Security & trust · Reference stories). Developers gains Templates and GitHub ↗, and the bar has no GitHub icon. Resources holds Blog · Glossary · Videos ↗ plus a labelled Guides column. The footer has four columns of 238px each, with Company & Legal as a row. The blog row reads "All articles". The new keys exist in 8 locales. Measured in real Chromium: every menu target is reachable from header, drawer and footer on every page in every locale, and 0 active links are missing aria-current. I looked at the en 1366 Resources panel and the footer.
Breakpoint The card said to keep 1024, but measurement showed that de/es/fr do not fit the four-group bar at 1024 (−15/−68/−82 px) and fr still misses at 1100 (−6). Ruling decision 1 left the choice between 1024 and 1100 to measurement. Accepted: tighter spacing plus the hamburger below 1100. All 8 locales fit at 1100 (fr has the least margin, +30) and at ≥1200 (+50).
Gate check-runs Build and deploy = success on head 8ed6ba5. Post-deploy probe was skipped on the PR, as designed. Mergeable clean. Locally: content:lint 0, check 0 + build 0 (including check-positioning PASS), seo:smoke 0.
Seat decisions (1) Breakpoint 1100: option A. (2) GitHub appears in both the Developers column and the legal row, matching the ruled counts: option A.
Out-of-scope dispositions Phone footer grows from 1017 to 1143 px: Acceptance notes (an accordion would need its own card). /llms.txt still says "Topic Cluster Pages": dropped (machine-facing). The es 3-line label at 390 predates this PR: Acceptance notes.
Landing Relay automerge_enable → merge queue → confirm the push deploy and the post-deploy probe. #342 closes via Closes #342. That unblocks #345.

Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants