Skip to content

site(home,zh): one-line home H1 without terminal punctuation; zh-Hant runtime/platform/metadata terms; English edition names; ruled zh-Hans wording - #365

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/pm-dispatch-objectos-ju9td1-issue-361
Nov 4, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/pm-dispatch-objectos-ju9td1-issue-361

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Closes #360
Closes #361

Implements the two maintainer rulings of 2026-11-04 (#360 comment 6621549296, #361 comment 6621550660) in one PR, as both rulings direct.

#360: home H1 on one line, without the full stop

  • src/lib/positioning.ts: t1Lines is now t1Hero: [lead, emphasis], which is T1 with its terminal full stop dropped. The load-time check now reads: T1 minus one trailing [.。] equals lead + heroLineJoin + emphasis. It still throws at load, so astro build fails on any drift. The header gains one paragraph on the display rule and why Q4 still holds. T1, CANONICAL and the README snapshot are unchanged, and check-positioning.mjs passes inside pnpm build.
  • src/components/MarketingHome.astro: the H1 lead no longer carries title-line (display: block). .hero h1 strong stays inline in the emphasis green and now takes the H1's own size (the old 0.9em was a second-line size). Comments are updated to match.
  • The rule lives in one place. No page strips the stop itself.

Measured on the built dist (Playwright, Chromium, light), as lines / H1 height in px. No viewport shows H1 overflow or page horizontal overflow:

viewport en zh-Hans zh-Hant ja de es fr ko
1440×750 1/63 1/72 1/72 1/72 1/58 1/58 1/58 1/72
1366×625 1/53 1/60 1/60 1/60 1/49 1/49 1/49 1/60
390×844 2/84 1/48 1/48 2/72 2/76 2/76 2/76 2/96
360×800 2/84 1/48 1/48 2/72 2/63 2/63 1/32 2/96

#361: Chinese copy

  1. zh-Hant vocabulary (src/lib/zhconvert.ts, TWP_PHRASE_OVERRIDES): added ['運行時','執行環境'], ['在運行時','在執行時'], ['運行時校驗','執行階段校驗'], ['平臺','平台'] and ['元數據','中繼資料'], with comments explaining them. The header now notes that 平臺 comes from the first group (plain tw already yields it), so that one entry rewrites what reaches TWPhrases rather than shadowing a TWPhrases rule. pnpm gen:zh-hant regenerated 53 zh-Hant blog files. The ruling allows this as derived output, and no zh-Hans post was touched.
  2. Edition and plan names in English, with a Chinese gloss on first use, across home, security, pricing, legal and cluster-i18n. Examples: ObjectOS Cloud(托管版), Enterprise(自管版), ObjectOS Community(开源自托管), Free(免费方案), Team(团队). Pricing cards are now Community / Free / Team / Enterprise. Prices are unchanged ([Decision] Pricing headline: www shows $20 / $45 per AI seat "billed annually (about two months free)", docs License & Pricing shows $24 / $54 per month with no annual price — which is the source, and is the annual discount real? #214).
    • A second commit applies the same rule to the remaining zh-Hans content pages: content/pages/zh-Hans/{ai,trust-center,platform,analytics,automation,permissions,forward-deployed-engineers}.ts. The ai.ts table rows now read ObjectOS Cloud Free / ObjectOS Cloud Team / ObjectOS Enterprise(自管或按合同), matching en. The gloss is skipped where the sentence already says it, as on trust-center, where the first use reads 以 ObjectOS Enterprise 自管部署.
    • After both commits, old zh-Hans edition and plan names (社区版 / 云端版 / 云端与企业版 / 云端或企业版 / 企业版 / 团队版 / 免费版) are at 0 across src and content/pages/zh-Hans. In dist, the 4 non-blog pages that still show 企业版 get it from a quoted excerpt of a published post (extend-existing-systems-with-ai), which is a post body and left as is.
  3. Home links (all 8 locales):
    • 3a: the capability-section link keeps /LOCALE/agent-developer/. Its label now reads 看 Agent 怎样编写本体 / "See how your agent writes the ontology".
    • 3b: the closing solid button now goes to marketingPagePath(locale, 'data-modeling') instead of the integration-data blog topic. Its label now reads 连接你现有的系统 / "Connect your existing systems". The de and fr labels were already action phrases and are unchanged. The now-unused topicLink helper is removed.
  4. Positioning headline: 保留运转良好的系统,/ 补上受治理的 Agent 运行时。 This derives to zh-Hant as 補上受治理的 Agent 執行環境。
  5. The 23-row table: rows 5a–5p are applied. 遗留系统 → 老旧系统 is fixed at the zh-Hans source: cluster-i18n.ts:59, plus content/pages/zh-Hans/compare.ts:84, the other non-post zh-Hans hit. Rows already landed via site(home,nav): small fixes from the 11-03 browser review — CJK eyebrow casing, Resources panel column label, footer Platform label, home security link to the /security/ hub #357 are skipped (eyebrow casing, footer 平台).
    • The same rationale is applied to three wordings outside the table:
      • 智能体 → Agent in forward-deployed-engineers.ts (4 uses).
      • 案件 → 个案 in customer-stories.ts (2 uses, both CRM sense).
      • 数据问询 → 数据查询 in the pricing.ts Team feature list.
  6. Left untouched: the site(nav): phase 2 — Why ObjectOS top level, GitHub into Developers, Guides column, four-column footer, ruled 8-locale labels #348 labels (从你的 Agent 开始, 开发者文档与协议), 参考案例, and published post bodies, apart from the zh-Hant regeneration.

Two fixes this change needed

  • scripts/lib/cjk-phrases.mjs: ICU segments 執行|環境, 執行|階段 and 中繼|資料 as two words. With only the new override in place, the zh-Hant hero lead at 1440 still broke inside the term, as 「…AI 編寫它,執行 / 環境執行它…」. That break was 决策:首页与导航的中文文案(11-03 浏览器评估)——繁体「运行时」译法、版本名约定、两条链接去向、定位区标题、24 处措辞 #361's own motivating defect. A three-entry ZH_COMPOUNDS set now merges those adjacent segments into one word. Re-shot, the lead breaks at 「AI 編寫它, / 執行環境執行它」.
  • src/components/ArticleList.astro: the blog-home lead had a hand-kept zh-Hant copy that still said 後設資料. It is now derived with s2t from the zh-Hans copy, following the site's "zh-Hant is never hand-kept" rule. With this change, 後設資料 reaches 0 in dist.

zh-Hant dist, before → after (dist/zh-Hant/**/index.html)

term occurrences pages
執行時 1162 → 53 105 → 29
執行時 not preceded by 在 1109 → 1 105 → 1
平臺 1236 → 0 124 → 0
後設資料 896 → 0 114 → 0
元數據 0 → 0 0 → 0
執行環境 27 → 1111
中繼資料 0 → 863

The 53 remaining 執行時 are 52 phase-sense 在執行時 and one 財務 agent 執行時 ("when the finance agent executes"). That one comes from a source that says 执行时, not 运行时. On the home page, 執行時 goes from 16 to 0.

Gates (re-run on tip 7b211a7)

  • pnpm content:lint: passes (407 files, 46 glossary terms checked).
  • pnpm check, run under os-verify-lock.sh: 0 errors, 0 warnings, 0 hints.
  • pnpm build, run under os-verify-lock.sh: VERDICT command-exit 0. This covers the positioning gate, gen:zh-hant, the content-lint dist passes and links across 972 built pages.
  • pnpm seo:smoke: passes (962 HTML pages checked).

Screenshots, all looked at: en, zh-Hans and zh-Hant home at 1440 and 390 (light), plus the zh-Hant positioning section at 1440.

Acceptance notes

  • Left as is:
    • analytics.ts still names its assistant “数据问询” in two places (lines 12 and 154). The residual pass covered only the pricing.ts feature line, so the pricing feature line now says 数据查询 while the analytics assistant keeps 数据问询.
    • ai.ts keeps 在云端用对话 (lines 16 and 46). These are generic path labels ("in the cloud, by chat"), not edition names.
  • Derived zh-Hant wording: the 3b label derives as 連線你現有的系統, because the s2twp preset turns 连接 into 連線. The site already ships the same conversion elsewhere, for example 正在連線應用、資料與 Agent. This PR does not change it.
  • Gloss: in the cluster-i18n self-hosted FAQ, "自管部署的 ObjectOS 即 ObjectOS Enterprise" already glosses the name inside the sentence, so no parenthetical was added there.
  • Mirror in objectos (out of scope): objectos apps/docs/scripts/gen-zh-hant.mjs runs the same opencc conversion, so the five keys should be mirrored there.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr

…6-11-04 rulings

H1 (#360): positioning.ts derives the hero from T1 minus one trailing
[.。] (t1Hero = lead + join + emphasis, asserted at load); the emphasis
stays inline in green at the H1's size. T1 and the README are untouched.

Chinese copy (#361): five TWP_PHRASE_OVERRIDES keys (執行環境, 在執行時,
執行階段校驗, 平台, 中繼資料) with zh-Hant blog files regenerated;
edition and plan names in English with a gloss on first use (home,
security, pricing, legal, cluster-i18n); home capability link relabelled
and the closing CTA retargeted to /data-modeling/ in all 8 locales; the
positioning headline and the evaluation's wording table; 遗留系统 ->
老旧系统 at the zh-Hans source. cjk-phrases keeps 執行環境 / 執行階段 /
中繼資料 together, and the blog-home zh-Hant lead is derived via s2t
instead of hand-kept.

Co-Authored-By: Claude <noreply@anthropic.com>
…sidual wording

Extends the 2026-11-04 #361 ruling to the content pages outside the first
pass: ai, trust-center, platform, analytics, automation, permissions and
forward-deployed-engineers now name ObjectOS Cloud / Enterprise and the
Free / Team plans in English, glossed on first use where the sentence
does not already say it. 智能体 -> Agent (forward-deployed-engineers),
案件 -> 个案 (customer-stories, CRM sense), 数据问询 -> 数据查询 (pricing
Team features). Prices unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 4, 2026 03:38
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对

Verdict: ACCEPT. Reviewed against GitHub, not the dev's report. This implements the 2026-11-04 rulings on #360 (comment 6621549296) and #361 (comment 6621550660). The maintainer's words were 「同意」.

Item Reading
Shape get_files lists 74 files, 1571 lines (under 3000), with no governed path. 53 are content/blog/*/index.zh-Hant.mdx, which gen:zh-hant regenerated; the 11-04 ruling explicitly allows this derived output, and no other post file is touched. The remaining 21 are sources: positioning.ts, MarketingHome.astro, home.ts, i18n.ts, zhconvert.ts, cjk-phrases.mjs, cluster-i18n.ts, pricing/security/legal/term-data, ArticleList.astro, and 9 content/pages/zh-Hans files.
#360 The H1 renders on one line with terminal punctuation dropped at render time only. t1Hero = [lead, emphasis], and the load check now requires t1 minus one trailing [.。] to equal lead + join + emphasis. T1 and the README are untouched, and check-positioning PASS. Measured with Chromium: one line at 1440 and 1366 in all 8 locales (en 120→63 px); at 390/360 it wraps naturally, and zh is one line. Overflow 0 in 32 cases.
#361 zh-Hant counts on dist (before→after): 執行時 1162→53 (what remains is the phase-sense 在執行時 plus one source 执行时); 平臺 1236→0; 後設資料 896→0; 中繼資料 0→863; the home page has 0 執行時. cjk-phrases.mjs adds ZH_COMPOUNDS so the zh-Hant hero breaks at 「AI 編寫它, / 執行環境執行它」 and not 執行 / 環境. Edition names: 0 old zh-Hans edition/plan names across src and content/pages, outside quoted post text. Links: the capability link → /agent-developer/ and the closing CTA → /data-modeling/ in 8 locales. Copy: the positioning headline and the table wording are applied; 遗留系统 → 老旧系统 at source. Untouched: the labels ruled on #348 and 「参考案例」. Seat checked the zh-Hans 1440 home (single-line H1, English edition names) and the en 390 home.
Gate check-runs Build and deploy = success on head 7b211a7; Post-deploy probe was skipped on the PR, as designed. Mergeable clean. Locally: content:lint 0, check 0, build 0, seo:smoke 0.
Accepted deviations Two additions needed for the ruling to take visible effect: the ZH_COMPOUNDS phrase list, and a hand-kept zh-Hant blog lead in ArticleList.astro that now derives via s2t. Also: 智能体 ×4 → Agent, 案件 ×2 → 个案, and 数据问询 → 数据查询 on pricing, all by the same rule.
Out-of-scope dispositions analytics.ts still calls the assistant 数据问询 in 2 places: Acceptance notes, a same-rule follow-up. One quoted 企业版 on 4 pages comes from a published post's excerpt: dropped, because published posts stay as published. The objectos docs gen-zh-hant should mirror the 5 keys: Acceptance notes, for the docs owner.
Landing Relay automerge_enable → merge queue → confirm the push deploy and the post-deploy probe. Closes #360 and Closes #361. #359 is dispatched after this lands, because it overlaps home/i18n.

Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 4, 2026
Merged via the queue into main with commit 8b7571f Nov 4, 2026
2 checks passed
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