Skip to content

feat(enterprise-ai-adoption): executive page on how AI lands in a company, fifth Why ObjectOS item - #386

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/pm-dispatch-objectos-ju9td1-issue-369
Nov 5, 2026
Merged

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

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Closes #369
Clause-②: no
Metadata-protocol: none

What

A new marketing page, /enterprise-ai-adoption/, for the chairman, GM or CIO who has been forwarded a link and asks "how would AI land in my company?". Placement follows the 2026-11-05 ruling (c): the fifth item under Why ObjectOS in the header panel and the drawer, plus a footer entry in the same column, as /use-cases/ did in #368.

  • content/pages/en/enterprise-ai-adoption.ts and content/pages/zh-Hans/enterprise-ai-adoption.ts (new). zh-Hant is derived. ja, de, es, fr and ko fall back to en (noindex, canonical to en, no self-hreflang), the same as /use-cases/.
  • src/content-pages/registry.ts: slug added to PAGE_ORDER after use-cases.
  • src/components/Header.astro: fifth whyItems entry. The drawer reuses groups, so it gets the entry too.
  • src/layouts/Base.astro: footer entry in the Why ObjectOS column, after Use cases.
  • src/components/MarketingEvidencePage.astro: one line in localizeHref, so cluster links render in the reader's locale (see Acceptance notes).
  • src/lib/i18n.ts: siteNav.aiAdoption in all 8 locales. en AI adoption, zh-Hans 企业 AI 落地, ja AI の導入, de AI-Einführung, es Adopción de AI, fr Adoption de l’AI, ko AI 도입. zh-Hant is s2t.

The page follows the card's outline, within the existing MarketingPage slots.

  1. Answer first (hero lead and the three metric tiles). Pilots stall on the organisation, not the model: rules that live in people's heads, systems the AI cannot reach, and no trail when it acts.
  2. The concept (artifact heading): "The more clearly the rules are written, the further AI can be trusted to act." / 「制度写得越清楚,AI 越能放手干。」
  3. One rule in three states (artifact.code plus a four-card section #three-states). A generic travel-expense rule:
    • (a) four policy clauses;
    • (b) an ObjectSchema with typed fields, a script validation, an approval step and an auditor's read-only permission set;
    • (c) the runtime. An over-budget claim is refused. A claim over the threshold is locked and waits for the department head. The auditor's edit is refused. Audit lines show the AI assistant acting as the signed-in employee.
  4. Where AI connects (#systems). Links the legacy-modernization cluster. States that federation is read-only by default, and early. Links /trust-center/ for what every AI action passes rather than restating the gates.
  5. Three-step pilot (#pilot). Pick a process with written rules, write it into the ontology, and measure hours saved, cycle time and error rate. Links /customer-stories/#evidence.
  6. What it does not solve (#limits): unwritten policy, judgement nobody can state, and integrations that do not exist yet.

Then a "before a pilot starts" checklist and three FAQs. Two FAQ answers are quotes: what ObjectStack is (t2) and the export clause (e1).

Ruling conditions:

  • Condition 2 holds. No "rollback / undo" wording and no "auto-closed within authority" metric appear anywhere on the page. Both were dropped, not reworded.
  • No customer names, logos or numbers. No third-party statistics. No model comparisons. The 5,000 / 6,200 / 8,000 figures are the example rule's own threshold, in the way /approvals/ uses its 15% discount.
  • No new colours or classes. The page renders through the existing template, so it uses the template's tokens and the .btn / .card / .chip classes. No inline script changed, so public/_headers is untouched (seo:smoke: "4 inline script digests CSP-checked").

Claims and where they ship

Each product sentence on the page restates a shipped page. File:line refers to origin/main a239294.

Page claim (en) Source quote
A validation is "refused on every write path: the form, the API, an import or an AI tool call" content/pages/en/data-modeling.ts:70: "enforced on every write path: UI, API, imports, and AI tools."
Approval step routed to a role, record locked while pending content/pages/en/approvals.ts:16: "Route to a user, role, team, or manager hierarchy"; :49 lockRecord: true; :17 "Records hold still while a decision is pending"
"Every request and decision is audited" content/pages/en/approvals.ts:18: "Every request, decision, and escalation is audited"
The assistant acts as the signed-in employee, inside that employee's permissions content/pages/en/permissions.ts:111: "every agent action runs as the signed-in user who asked for it, inside the same fence as that user"; :17
The auditor's (read-only) edit is refused content/pages/en/permissions.ts:30: crm_account: { allowRead: true, allowCreate: false, allowEdit: false, allowDelete: false }; :12 "enforced on every query, API call, and AI tool call"
"AI tool calls appear in the same audit log as people's actions" content/pages/en/permissions.ts:102: "AI tool calls appear in the same log as human activity"; :123
"Whether the agent is your own, connected over MCP, or the AI inside ObjectOS … through governed tools … not through raw database access" content/pages/en/permissions.ts:12: "whether the agent is your own over MCP or ObjectOS’s in-app AI"; content/pages/en/trust-center.ts:60: "AI acts through governed tools, not raw database access"
An existing ERP/CRM database mounted as governed objects without moving a record content/pages/en/data-modeling.ts:103: "introspect an existing ERP or CRM database and mount its tables as governed objects"; :154 "without moving the data"
"Federation is read-only by default; writes … enabled deliberately, per object. It is also early: expect the read path to be the mature one" content/pages/en/data-modeling.ts:103: "read-only by default; writes are enabled deliberately, per object"; :154 "read-only by default, and early: expect the read path to be the mature one"; src/lib/clusters.ts:92
FAQ "What is ObjectStack" src/lib/positioning.ts:85 (t2), read as positioning[locale].t2, not re-authored
FAQ "Can we take the ontology with us?" (export is planned) src/lib/positioning.ts:88 (e1), read as positioning[locale].e1
Code: Field.file, validations, type: 'script', condition, message objectstack packages/spec/src/data/field.zod.ts:3159, object.zod.ts:2825, validation.zod.ts:179. The shapes are the same as the /data-modeling/, /approvals/ and /permissions/ artifacts.

Header fit (ruling condition 1)

Both columns come from the same build. The second is measured with the fifth Why item removed from the DOM. The nav width, the gap between the last nav item and .bar-right, and the bar width are identical in all 24 rows. The bar height is 64 and scrollWidth equals the viewport everywhere. The Why panel is position: absolute, and the fifth item only adds panel height (213 px).

vw locale nav width (5th / without) gap to controls (5th / without) bar width (5th / without)
1100 en 474.4 / 474.4 135.2 / 135.2 1100 / 1100
1100 zh-Hans 380 / 380 257.7 / 257.7 1100 / 1100
1100 zh-Hant 380 / 380 257.7 / 257.7 1100 / 1100
1100 ja 409 / 409 229.3 / 229.3 1100 / 1100
1100 de 488.8 / 488.8 106.2 / 106.2 1100 / 1100
1100 es 526 / 526 54.2 / 54.2 1100 / 1100
1100 fr 513.4 / 513.4 41 / 41 1100 / 1100
1100 ko 435 / 435 202.8 / 202.8 1100 / 1100
1200 en 474.4 / 474.4 155.2 / 155.2 1120 / 1120
1200 zh-Hans 380 / 380 277.7 / 277.7 1120 / 1120
1200 zh-Hant 380 / 380 277.7 / 277.7 1120 / 1120
1200 ja 409 / 409 249.3 / 249.3 1120 / 1120
1200 de 488.8 / 488.8 126.2 / 126.2 1120 / 1120
1200 es 526 / 526 74.2 / 74.2 1120 / 1120
1200 fr 513.4 / 513.4 61 / 61 1120 / 1120
1200 ko 435 / 435 222.8 / 222.8 1120 / 1120
1366 en 474.4 / 474.4 155.2 / 155.2 1120 / 1120
1366 zh-Hans 380 / 380 277.7 / 277.7 1120 / 1120
1366 zh-Hant 380 / 380 277.7 / 277.7 1120 / 1120
1366 ja 409 / 409 249.3 / 249.3 1120 / 1120
1366 de 488.8 / 488.8 126.2 / 126.2 1120 / 1120
1366 es 526 / 526 74.2 / 74.2 1120 / 1120
1366 fr 513.4 / 513.4 61 / 61 1120 / 1120
1366 ko 435 / 435 222.8 / 222.8 1120 / 1120

Verification (at the final commit, b061cb1)

  • pnpm content:lint: passed (414 files).
  • pnpm check: 0 errors, 0 warnings, 0 hints (171 files).
  • pnpm build: exit 0. check-positioning PASS, content-lint --dist links, CJK breaks and quotation marks all pass.
  • pnpm seo:smoke: passed. en, zh-Hans and zh-Hant are self-canonical with hreflang en/zh-Hans/zh-Hant/x-default and are in the sitemap. ja, de, es, fr and ko are noindex, nofollow, canonical to /en/enterprise-ai-adoption/, and not in the sitemap.
  • 200 in all 8 locales, with no horizontal overflow at 1366×625, 1440×750, 1512×830, 1920×945, 390×844 and 360×800 (48 checks). As on /permissions/ and /approvals/, the code block scrolls inside its own pre on phones.
  • Links: all 104 links in the page body across the 8 locales resolve, including the #three-states and /customer-stories/#evidence anchors.
  • Reachability: in all 8 locales the page is reached by clicking the header panel (5th item, aria-current="page" on arrival), the drawer at 390 and the footer.
  • axe 4.10.2 (wcag2a/aa, 21a/aa, 22aa, best-practice): clean on the new page in en and zh-Hans, light and dark, at 1440 and 390. The control, /use-cases/ (same template), is also clean, so there is nothing new.
  • Screenshots, looked at: page in en and zh-Hans at 1440 and 390, light and dark. Also the Why panel at 1100/1200/1366 (en, zh-Hans, de) and the drawer at 390.

Acceptance notes

  • Cluster links are now localized (fixed in this PR). localizeHref in src/components/MarketingEvidencePage.astro gains one branch: if (clusterBySlug(slug)) return `${clusterPath(locale, slug)}${hash}`;. Both functions were already imported. The seat amended the claim's file surface for this one line. Both sources now write the legacy-modernization link as /en/legacy-system-modernization/, and each locale renders its own guide.
    • Built-dist href diff across all 152 marketing pages × locales (20,176 hrefs), before and after: 6 hrefs changed, all on this page. Each is a cluster link that now points to its own locale and returns 200. Examples: zh-Hant /zh-Hans/legacy-system-modernization/ → /zh-Hant/legacy-system-modernization/; ja /en/… → /ja/legacy-system-modernization/; de /en/… → /de/legacy-system-modernization/. No other marketing page changed.
  • /trust-center/ is linked, not restated. Once feat(trust-center): four gates every AI action passes #380 lands, that page carries the "Four gates" section.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr

…pany, fifth item under Why ObjectOS

A new marketing page, /enterprise-ai-adoption/, written for the chairman, GM
or CIO who is forwarded a link: the answer first (unwritten rules,
unreachable systems, no trail), the concept "the more clearly the rules are
written, the further AI can be trusted to act", one generic travel-expense
rule in three states (policy text, ontology, runtime with an audit row and a
read-only identity refused), where AI connects (federation read-only by
default, and early), a three-step pilot measured on hours saved, cycle time
and error rate, and what the approach does not solve.

en and zh-Hans sources; zh-Hant derived; ja, de, es, fr and ko fall back to
en (noindex, canonical to en). The page is the fifth item in the Why ObjectOS
header panel and drawer and has a footer entry in the same column, with
labels in all eight locales. The panel is an absolute dropdown: the header
bar width is unchanged at 1100, 1200 and 1366 in all eight locales.

No rollback claim and no auto-close metric (no shipped mechanism). What
ObjectStack is (t2) and the export clause (e1) are quoted from positioning.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对

ACCEPT。

  • 形态:7 个文件,+435/−3,一次提交 b061cb1(补丁轮 1 次后 amend),基于 a239294,与当前 main 合并无冲突。不涉及受管面。文件面已在认领评论 6646661830 中增补 MarketingEvidencePage.astro,只改其中一行。
  • 前提实测:Executive page: "How AI actually lands in an enterprise" — one page a chairman or GM can be forwarded (policy → ontology → enforced trail, three-step pilot) #369 已按维护者 2026-11-05「同意」的方案 (c) 加条件裁定(comment 6646250458)。
    • 条件 1:顶栏宽度不变。同一构建上逐项对比有无第 5 项,1100/1200/1366 × 8 语言共 24 行全部相同,最差 fr@1100 两种情况下余量都是 41px。
    • 条件 2:页面不写回滚和「权限内自动关闭占比」。grep 只在源文件注释里命中,注释说明了为什么不写;正文没有。
  • 门禁 check-runs:head b061cb1 上 Build and deploy = success;Post-deploy probe = skipped,PR 上按设计跳过。本地 content:lint、check、build(含 check-positioning)、seo:smoke 全部 exit 0。
  • 抽查读数:
    • zh-Hans 1440 整页截图看过,结构完整:答案先行 → 三个症结 → 制度三态代码与卡片 → 接入既有系统 → 三步试点 → 解决不了的三件事 → 清单 → FAQ。
    • 「是什么」与「导出 planned」两处分别引自 positioning t2 与 e1,未重写。
    • 8 种语言均返回 200,无溢出,104 条链接全部可达;axe 0 violations。
    • localizeHref 改动后,全站营销页共 20,176 个 href,只有新页上的 6 个 legacy 集群链接变成本语言,其余无变化。
  • 接受的偏差:为让 zh-Hant 正确本地化,zh-Hans 源稿里的集群链接改写成 /en/…,由 localizeHref 改写为各自语言。这与其它营销页的写法一致。
  • 范围外去向:无。
  • 落地条款:维护者点头 → pr_ready → 合并队列 → 确认部署和 probe → Executive page: "How AI actually lands in an enterprise" — one page a chairman or GM can be forwarded (policy → ontology → enforced trail, three-step pilot) #369 关闭。

Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 5, 2026 02:11
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 5, 2026
Merged via the queue into main with commit 3db27e9 Nov 5, 2026
2 checks passed
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Landed by the seat after ACCEPT, per pm-dispatch. Maintainer, 2026-11-05: 「你应该使用pm-dispatch技能审核和落地pr」.

reading value
merge commit on main 3db27e9 (merge queue)
push Build and deploy covering it (9a8afd2) success
Post-deploy probe on 9a8afd2 success

#369 is closed by this PR, and pm:dispatched is removed from it.


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

1 participant