Skip to content

docs: one positioning constant, one gate, ObjectOS as Cloud or Enterprise (PR 1 of #171) - #293

Merged
os-zhuang merged 3 commits into
mainfrom
claude/pm-dispatch-objectos-ju9td1
Oct 5, 2026
Merged

os-zhuang merged 3 commits into
mainfrom
claude/pm-dispatch-objectos-ju9td1

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #171 — PR 1 of two. PR 2 (the terms and privacy pages, Q3) and #167's titles follow, so this PR closes nothing.

What this does

One constant. apps/docs/lib/positioning.ts quotes the objectstack README.md (lines 7-16 and 26-30 at main) verbatim, plus the edition clause the maintainer fixed under Q1 and Q2. Three surfaces read it: the site-wide meta description (app/layout.tsx), the /llms.txt summary line (app/llms.txt/route.ts, which also takes its # ObjectOS title from SITE_NAME now), and the description frontmatter of content/docs/index.mdx, written out because frontmatter cannot import. llms-full.txt carried no copy and is untouched.

One gate. .github/scripts/check-positioning.mjs, a Positioning step in ci.yml after build, listed in tools/ci-scripts/run-self-tests.mjs, with pnpm check:positioning at the root. Its rules are below.

The prose. Nine English pages say what ObjectOS is the way the README does, carry both editions in every positioning sentence, and correct the licence facts. Every changed sentence is in the table below.

The sitemap. The redirecting root (priority: 1 in every locale) leaves app/sitemap.ts, following www.objectos.ai's noindex dispatch page that is filtered out of its sitemap. check-locale-surface.mjs's oracle no longer expects the root, and its self-test gains a case that pins a returning root as unexpected-url.

Siblings. 41 locale files are deleted under ruling 5989567068 on #256 — the list and the triggering English sentence per page are below.

The canonical strings, as used

Text Source
T1 ONTOLOGY_HEADLINE The ontology is the software. README line 7
T2 ONTOLOGY_PROMISE One executable business ontology. AI writes it, the runtime runs it, agents operate it, you own it. README lines 9-10
T4 OBJECTOS_DEFINITION Want the same loop hosted, in the browser, nothing to install? That's ObjectOS, the commercial runtime environment built on ObjectStack. README lines 27-30
E1 OBJECTOS_EDITIONS ObjectOS runs hosted in the browser with nothing to install (ObjectOS Cloud) or self-managed on your own infrastructure (ObjectOS Enterprise), and on either edition you can export your ontology and run it on the open-source ObjectStack runtime. CANONICAL.md, from rulings Q1 + Q2
POSITIONING T1 + T2 + T4 + E1, joined by single spaces the three machine-facing copies

One substitution, declared as CANONICAL.md asks: T4 reads "built on ObjectStack" where the README reads "built on this stack". Inside the README the phrase has a referent; on this site it has none. The module's header says the same so nobody corrects it back. T3 (the pills) is not used: every page that needs the four promises spells them out as the four bold bullet heads on why.mdx, and the paragraph form already carries each claim once.

The gate's rules

node .github/scripts/check-positioning.mjs (gate) · --self-test (37 fixture cases; every one of the 16 rules fires and the baseline is silent).

(a) The copies agree with the constant

  • positioning-source — the four literals parse out of lib/positioning.ts and the module imports nothing (it sits on the root layout, so an import ships in every bundle).
  • index-description — index.mdx frontmatter description is byte-equal to POSITIONING.
  • layout-description — app/layout.tsx imports POSITIONING from @/lib/positioning and its metadata description: reads it.
  • llms-summary-source — app/llms.txt/route.ts imports POSITIONING.
  • llms-summary-built — the built /llms.txt summary line is > POSITIONING. This also pins the composition: the gate joins the four literals with single spaces and the shipped line proves the module did the same.
  • index-meta-built — the built English index page's description and og:description are POSITIONING.

(b) One brand spelling in shipped output (the 2026-09-08 mandate)

  • site-name — lib/source.ts declares SITE_NAME = 'ObjectOS'.
  • title-suffix — every built docs page's title ends with | ObjectOS.
  • og-site-name — every built docs page's og:site_name is ObjectOS.
  • llms-title — the built /llms.txt opens with # ObjectOS.
  • brand-spelling — no built page and neither llms body carries Object OS, Object-OS, ObjectOs, Objectos, OBJECTOS, objectOS, ObjectStack Protocol or ObjectStack Documentation. Case-sensitive, so the host and the package scope are not hits.

(c) A stale sentence does not come back — over the English sources under content/docs/, outside fences and MDX comments, paragraph by paragraph so a wrapped sentence is still one sentence

  • stale-self-hosted — "ObjectOS is a self-hosted runtime".

  • stale-open-source — a paragraph calling ObjectOS "Open source, Apache-2.0" without naming ObjectStack (the glossary shape; the licence page's contrast names both and stays silent).

  • stale-phones-home — "never phones home", "does not call home" and kin; a question ("Does ObjectOS phone home?") is not a claim.

  • stale-license-server — "No license server.", "No license check.", "does not check a license server"; the lowercase list form about the open runtime ("no seats, no usage tier, no license server") stays silent.

  • build-missing — apps/docs/.next/server/app absent, or holding no docs page: a failure, never a skip.

Why (a) and (b) read the build and (c) reads the sources: the mandate is about shipped output, and lib/i18n.ts:4 still says "ObjectStack Documentation" in a code comment the ruling on #171 re-measured and accepted, so a source scan would cry wolf there. (c) stops at content/docs/ on purpose: app/[lang]/privacy/page.tsx:20 still says "The runtime does not phone home" and is PR 2's file; a gate red on main until a held PR lands is a gate someone disables. PR 2 should widen STALE_SOURCE_DIRS to apps/docs/app when it corrects that copy.

Measured on this tree: green on 632 built docs pages, both llms bodies and 79 English sources.

Every changed sentence

path:line is the line in this PR. Table cells that were themselves table rows are quoted with their pipes escaped.

content/docs/index.mdx

Where Before After
:2 title: ObjectOS title: Introduction
:3 The runtime for internal tools that stays in your network. One command to start, your database, your auth, your data — never ours. POSITIONING (the four strings above)
:6-12 ObjectOS is a self-hosted runtime for building internal tools, admin panels, and back-office apps without giving up your data. Describe what you need to the built-in AI Builder — or fork a template — and get REST APIs, a generated admin UI, authentication, RBAC, audit logs, file storage, background jobs, webhooks, and AI integration. All running in your network, on your database. Describe what the business needs to the built-in AI Builder — a helpdesk, an approval flow, a CRM — or install a template, and the ontology it writes is live at once: REST APIs, generated screens, authentication, RBAC, audit logs, file storage, background jobs, webhooks, and every object exposed as an MCP tool your agents can call. Each change is a small, readable diff that a person approves before it runs.
:14-19 It's what you'd get if Retool, Supabase, and Salesforce had a child that ran inside your firewall — with an AI that builds the apps for you. The open-source (Apache-2.0) ObjectStack stack — protocol, kernel, CLI and production runtime — is what executes the ontology and what ObjectOS is built on. Everything you build on ObjectOS is ordinary ObjectStack metadata, so it is portable to that runtime by construction.
:21 ## Get running in 60 seconds ## Start
:23-27 npm i -g @objectstack/cli / os start code block, then: Open http://localhost:3000 and you have a working ObjectOS with its UI and Account portal, an audit log, and a SQLite database — zero configuration, zero scaffolding. A three-row table: ObjectOS, nothing to install → Sign in to ObjectOS Cloud — the Free plan is enough to build your first app · ObjectOS on your own infrastructure → ObjectOS Enterprise (or Business Self-Managed) runs the licensed runtime image on your servers — see License & Pricing and Deployment · The open runtime, locally, free → That is ObjectStack, not ObjectOS: npm i -g @objectstack/cli && os start boots it with a SQLite database and no configuration — see Quickstart
:29 Then either: Either ObjectOS edition then takes you to the same place — sign in, and:
:37-38 Fork a template if you want TypeScript source under your control. … under your control — the same metadata, authored in your repo with your coding agent.
:44 Retool / Appsmith row: Your data never leaves your network; open-source foundation (ObjectStack, Apache-2.0), no seat tax Hosted (ObjectOS Cloud) or inside your network (ObjectOS Enterprise); built on open-source ObjectStack (Apache-2.0), so the ontology is yours to export; no seat tax — AI seats only
:45 Supabase / Firebase row: Same DX (auto APIs, auth, storage), but you own the runtime and database Same DX (auto APIs, auth, storage), but the definition is yours: export it and run it on the open ObjectStack runtime, or run ObjectOS Enterprise on your own database
:46 Salesforce / NetSuite row: Same metadata-driven model (objects, fields, roles, sharing rules), self-hosted, no seat tax Same metadata-driven model (objects, fields, roles, sharing rules), hosted or self-managed, no seat tax — viewers and non-AI users are free
:58 ## What you keep control of ## What stays yours
:60-63 (none) On either edition, the ontology: your objects, fields, relations, actions, permissions, flows and agent definitions are ordinary ObjectStack metadata, and you can export them and run them on the open-source ObjectStack runtime. On ObjectOS Enterprise, everything else stays with you too:
:72 The runtime itself → Your servers, containers, or laptop Your servers or containers
:74-77 ObjectOS never phones home. No telemetry. No license server. Air-gapped networks are a first-class deployment target — see Air-gapped. Self-managed ObjectOS validates its licence online; Enterprise air-gapped licences validate offline, so a network with no internet access is a first-class Enterprise deployment target — see Air-gapped.
:94 (none) Where to go next: Start without installing anything → ObjectOS Cloud

content/docs/quickstart.mdx (the two transcribed blocks, the 17.5.0 pins, the two declaration paragraphs and the port paragraph are byte-identical)

Where Before After
:3 From zero to a running ObjectOS — install one CLI, run one command, you have an app. From zero to a running app on the open-source ObjectStack runtime — install one CLI, run one command. ObjectOS Cloud needs none of it, sign in and build in the browser.
:6-13 (none) This page boots the open-source ObjectStack runtime on your own machine — the stack ObjectOS is built on. ObjectOS itself needs none of it: ObjectOS Cloud is hosted in the browser with nothing to install (sign in at www.objectos.ai), and ObjectOS Enterprise is the same runtime environment self-managed on your infrastructure, deployed from the licensed image described under Deployment. What you build here is ordinary ObjectStack metadata, so it runs on either.
:15-16 There are two ways to start, depending on what you're doing. There are two ways to start the open runtime, depending on what you're doing.
:20 Trying ObjectOS for the first time, or running it in production → Path A Trying the open runtime for the first time, or running it in production → Path A
:71-74 That's it. You're running ObjectOS. That's it. You're running the open-source ObjectStack runtime — the stack ObjectOS is built on, not ObjectOS itself. See License & Pricing for what the ObjectOS editions add on top of it.
:109-114 Once you're signed in, open the AI assistant (top-right sparkle icon) and describe what you need: The in-product AI Builder is ObjectOS's: it ships in ObjectOS Cloud and ObjectOS Enterprise, not in the open runtime you just started, whose AI path is the MCP endpoint printed in the banner (http://localhost:3000/api/v1/mcp — point Claude Code or any MCP client at it). On ObjectOS, once you're signed in, open the AI assistant (top-right sparkle icon) and describe what you need:
:127-128 … how to author ObjectOS metadata against the real Zod schemas. … how to author ObjectStack metadata — the ontology ObjectOS runs — against the real Zod schemas.
:278-280 dist/objectstack.json is what you ship to production — mount it on a running ObjectOS container and that becomes your app. … — mount it on the runtime, the open ObjectStack image or an ObjectOS Enterprise deployment, and that becomes your app.

content/docs/why.mdx

Where Before After
:11-15 ObjectOS makes one opinionated bet: AI writes your application's metadata, you own the runtime that runs it. The ontology is the software. One executable business ontology. AI writes it, the runtime runs it, agents operate it, you own it. Four promises — and ObjectOS keeps them hosted in the browser with nothing to install (ObjectOS Cloud) or self-managed on your own infrastructure (ObjectOS Enterprise):
:17-34 You don't hand-write objects, fields, views, flows, and permissions file-by-file. Your users describe what they need in plain language to the built-in AI Builder; it calls a small set of audited tools, queues every change for human approval, and the result is live — REST endpoints, generated screens, RBAC, audit log, everything generated from the same metadata. / The runtime sits in your VPC, on your database — the underlying ObjectStack runtime is Apache-2.0, yours to fork. The model talks to a sandboxed metadata API, not your data warehouse. Four bullets. Executable. Your objects, fields, relations, actions, permissions, flows and agent definitions are one typed, versioned definition that the runtime runs. REST endpoints, generated screens, RBAC, the audit log and the MCP tools are all derived from it — no code generation step, no deploy pipeline between "described" and "live". AI-writable. You don't hand-write that definition file by file. Describe what the business needs to the built-in AI Builder; it calls a small set of audited tools, every mutation queues for human approval, and the result is a small diff you can actually read. Agent-operable. Every object and every exposed action doubles as an MCP tool, so agents operate the running app under the same permissions, row-level security and audit as a person — never raw SQL, never a scraped UI. You own it. The ontology is ordinary ObjectStack metadata, Apache-2.0, and on either edition you can export it and run it on that open-source runtime. ObjectOS Enterprise also keeps the runtime and the database on your infrastructure.
:45-46 can't (or won't) put the data in someone else's cloud, and want it hosted and operated for you (ObjectOS Cloud) — or must run it inside your own perimeter (ObjectOS Enterprise), and
:54 Retool replacement row: ObjectOS runs in your VPC; data never leaves ObjectOS Enterprise runs in your VPC; data never leaves
:56 Internal admin row: One Node process, slots in next to your existing services … — or a Cloud tenant with nothing to run
:57 Air-gapped row: First-class deployment target, no internet egress required (BYO local model) A first-class ObjectOS Enterprise target: air-gapped licences validate offline, and the AI service can point at a local model
:67-69 want a no-code drag-and-drop builder for non-engineers and a hosted cloud → use Retool, Bubble, or Airtable. ObjectOS is code-first AI-driven, self-hosted. want a drag-and-drop canvas for non-engineers → use Retool, Bubble, or Airtable. ObjectOS generates its UI from the ontology; the builder is the AI and the diff it proposes, not a canvas.
:79 Data location (vs Retool): Your network, always ObjectOS Cloud, or your network on ObjectOS Enterprise
:81 Pricing (vs Retool): Self-hostable (open-source ObjectStack); ObjectOS bills AI seats only AI seats only; viewers free. Free self-hosting is the open-source ObjectStack runtime
:84 Best for (vs Retool): Apps that own their data Apps whose definition you own
:91 Database (vs Supabase): Any Postgres / MySQL / SQLite / Turso / Mongo, yours Managed on ObjectOS Cloud; any Postgres / MySQL / SQLite / Turso / Mongo, yours, on ObjectOS Enterprise
:97 Vendor lock-in (vs Supabase): None — every layer is a plugin The ontology exports to the open-source ObjectStack runtime; every layer is a plugin
:98 Best for (vs Supabase): Apps that need to own the runtime Apps that need to own their definition — and, on Enterprise, their runtime
:106 Per-user cost (vs Salesforce): $0 Viewers and non-AI users free; you pay for AI seats only
:108 Where it runs (vs Salesforce): Your infrastructure ObjectOS Cloud, or your infrastructure (ObjectOS Enterprise)
:131-133 TypeScript-first. Non-engineers won't author objects directly. Salesforce admins are used to clicking through a UI builder; here, it's git. TypeScript-first. Non-engineers won't author objects directly in a repo. Salesforce admins are used to clicking through a UI builder; here, it's the AI Builder's diff or git.
:137-141 Open-source foundation. The underlying ObjectStack framework is Apache-2.0 — use it in commercial products, embed it, modify it privately, no copyleft surprises. ObjectOS (the commercial layer) and support subscriptions are available separately. Open-source foundation, commercial product. The underlying ObjectStack stack is Apache-2.0 — use it in commercial products, embed it, modify it privately, no copyleft surprises. ObjectOS itself is commercial, in two editions, Cloud and Enterprise; there is no open-source edition of ObjectOS.
:145-149 The smallest viable ObjectOS deployment is a single pnpm dev or a single Docker container with SQLite. The largest in production today serves tens of thousands of internal users across multiple regions with Postgres + S3 + Redis. Both are the same software. The smallest ObjectOS is a Free tenant on ObjectOS Cloud; the smallest self-managed one is a single-node container with SQLite. The largest in production today serves tens of thousands of internal users across multiple regions with Postgres + S3 + Redis. All of them run the same software.
:151-153 Start with npx @objectstack/cli init my-app and decide in 5 minutes. If it's not for you, you've burned 5 minutes. Start on ObjectOS Cloud, or boot the open ObjectStack runtime with npx @objectstack/cli init my-app, and decide in 5 minutes. If it's not for you, you've burned 5 minutes.

content/docs/architecture.mdx

Where Before After
:6-8 A practical view of what runs on your machines when you deploy ObjectOS, what data leaves your network, and what doesn't. A practical view of what runs when you deploy ObjectOS — on your own machines with ObjectOS Enterprise, or operated for you on ObjectOS Cloud — what data leaves your network, and what doesn't.
:26-28 One Node.js process, serving one app. That's it. … That's it. On ObjectOS Cloud we run that process for you; on ObjectOS Enterprise you deploy it, from the licensed runtime image described under Deployment.
:64-68 (none, above the data table) On ObjectOS Enterprise — the self-managed edition this table describes — nothing below leaves your network. On ObjectOS Cloud the same process runs in our infrastructure instead, and on either edition the ontology itself is yours: export it and run it on the open-source ObjectStack runtime.
:79-82 ObjectOS does not call home. No telemetry. No license check. If you cut internet access entirely, it keeps running indefinitely. See Air-gapped. Self-managed ObjectOS validates its licence online; Enterprise air-gapped licences validate offline, so a deployment with no internet access at all keeps running. See Air-gapped for the supported licence and cloud-posture pairs.
:105-106 Most customers deploy only ObjectOS. Most customers run only ObjectOS.
:112 ObjectOS layer row: The runtime you operate → Your infrastructure The commercial runtime environment built on the framework → ObjectOS Cloud (we operate it) or your infrastructure (ObjectOS Enterprise)
:135 A self-hosted runtime authenticates to a control plane … A self-managed runtime authenticates to a control plane …

content/docs/reference/security.mdx

Where Before After
:11-16 ObjectOS runs as a single Node.js process inside your network, talks to your database, and never calls home. The blast radius of a compromise is the data on the database it connects to — nothing more. ObjectOS runs as a single Node.js process that talks to one database — inside your network on ObjectOS Enterprise, in ours on ObjectOS Cloud. Self-managed, its only outbound call of its own is licence validation, and Enterprise air-gapped licences validate offline. The blast radius of a compromise is the data on the database it connects to — nothing more.
:20-23 (none, above the residency table) This table describes ObjectOS Enterprise, the self-managed edition. On ObjectOS Cloud the same classes of data live in the infrastructure we operate for you, and on either edition your ontology is exportable to the open-source ObjectStack runtime.
:34-38 ObjectOS makes zero outbound calls unless you explicitly configure them (OIDC discovery, email provider, AI provider, webhook targets, external storage). It does not phone home, does not check a license server, does not ping for updates. Beyond the integrations you explicitly configure (OIDC discovery, email provider, AI provider, webhook targets, external storage), the one outbound call self-managed ObjectOS makes on its own is licence validation — Enterprise air-gapped licences validate offline, so an air-gapped deployment makes none. See License & Pricing.
:140 CCPA / China DSL / Russia 152-FZ row: Self-hosting in the right region satisfies residency; … ObjectOS Enterprise in the right region satisfies residency; …
:167-171 Required outbound (only if you configure these features): Required outbound: — Licence validation, for self-managed ObjectOS — Enterprise air-gapped licences validate offline and need no egress for it. / Required outbound only if you configure these features:

content/docs/resources/faq.mdx

Where Before After
:9-11 A: npm i -g @objectstack/cli && os start — then open http://localhost:3000. A: Sign in to ObjectOS Cloud — hosted in the browser, nothing to install. To run the open-source ObjectStack runtime on your own machine instead, npm i -g @objectstack/cli && os start and open http://localhost:3000.
:15-17 A: No. Node 22+ and the CLI are enough. Docker is the recommended production deployment shape. A: No. ObjectOS Cloud needs nothing installed. For the open runtime, Node 22+ and the CLI are enough; Docker is the recommended shape for a self-managed production deployment.
:20-22 A: No, not to start — ObjectOS uses local SQLite by default. Swap for Postgres / MySQL / Turso / Mongo when you go to production. A: No, not to start — ObjectOS Cloud is managed for you, and the open runtime uses local SQLite by default. A self-managed deployment swaps in Postgres / MySQL / Turso / Mongo when it goes to production.
:25-28 A: No. ObjectOS is fully self-contained. ObjectOS Cloud is optional for multi-environment / multi-app deployments with a control plane. A: ObjectOS Cloud is the account: sign in and build. ObjectOS Enterprise is self-managed and needs no cloud service to run — connecting it to a control plane is optional. The open-source ObjectStack runtime needs no account at all.
:163-164 A: For your self-hosted deployment, status is your concern — … A: For a self-managed (Enterprise) deployment, status is your concern — …

content/docs/resources/glossary.mdx

Where Before After
:39-50 (none) New entry Business ontology: Your app's definition — objects and fields, relations, actions, permissions, flows, and agent and tool definitions — as one executable, versioned whole: authored as typed ObjectStack metadata, validated rather than reasoned over, and run by the runtime, which derives the database, REST API, UI and MCP tools from it. Views, dashboards, apps and translations are projections of it, not part of it. It is yours on either ObjectOS edition: export it and run it on the open-source ObjectStack runtime. The full account is Business Ontology in the ObjectStack docs.
:88 A self-hosted ObjectOS is a single-environment runtime … A self-managed ObjectOS is a single-environment runtime …
:151-156 ObjectOS: The runtime — a single Node.js process that serves your apps. Open source, Apache-2.0. This documentation site is for ObjectOS. The commercial runtime environment built on ObjectStack: hosted in the browser with nothing to install (ObjectOS Cloud) or self-managed on your own infrastructure (ObjectOS Enterprise), licensed per AI seat. Not open source — the stack it runs is, and on either edition you can export your ontology and run it on that open runtime. This documentation site is for ObjectOS.
:166-170 ObjectStack: The umbrella project: the framework (@objectstack/* npm packages), the runtime (ObjectOS), the optional cloud service, and the marketplace. Sometimes called "the platform." The open stack, Apache-2.0: the protocol, microkernel, SDK, CLI and production runtime that execute a business ontology — the @objectstack/* npm packages and the runtime image. ObjectOS is the commercial runtime environment built on it; the two are different products under different licences.

content/docs/build/ai-skills.mdx

Where Before After
:3 Install ObjectOS skills into your coding agent so … know how to author ObjectOS metadata correctly. Install the ObjectStack skills into your coding agent so … know how to author ObjectStack metadata — the ontology ObjectOS runs — correctly.
:11-13 ObjectOS ships 9 first-party agent skills that teach coding assistants how to author every kind of ObjectOS metadata. ObjectStack ships 9 first-party agent skills that teach coding assistants how to author every kind of ObjectStack metadata — the ontology ObjectOS runs.

content/docs/extend-existing-systems.mdx

Where Before After
:3 Connect ObjectOS to the business systems you already run, then add AI-native query, analysis, and automation — without a migration. Federate a database you already run into ObjectOS as an external datasource — read-only by default, and early — and model the tables you care about as objects, without a migration.
:9-10 It's "can we make the thing we already have AI-native, without a risky migration?" It's "can we work with the thing we already have, without a risky migration?"
:12-21 That's exactly the path this page describes: connect ObjectOS to your existing database, model the tables you care about as objects, and let AI agents query, analyze, and act on that data — under your permissions, on your infrastructure, with the original system untouched. One boundary first, because it decides what this page can promise. The ontology ObjectOS runs is not a semantic layer over your existing systems: it is the system — the database, API, UI and agent tools are derived from it. What it offers for a system you already run is narrower, and stated the way the ObjectStack README states it: federating an external datasource is read-only by default and early. You connect the database as a datasource, model the tables you care about as objects, and ObjectOS reads them through the same permission model as everything else. The system of record stays the system of record.
:29-31 Credentials come from your environment; the connection can be read-only if you only want to analyze. Credentials come from your environment. Start read-only — a readOnly datasource, or a read-only database user — and enable writes deliberately.
:36-38 4. Use AI — the moment a table is an object, every agent, tool, flow, and dashboard works on it, routed automatically to the right database. 4. Read — the moment a table is an object, every view, dashboard, flow and agent tool can read it, routed automatically to the right database and gated by the same permissions.
:41 The rows stay where they are. ObjectOS becomes the AI-native, permission-aware surface on top. The rows stay where they are, and the legacy application keeps writing them.
:48 "We can't risk writes to production" row: Bind objects to a read-only datasource (or a read-only DB user). Analyze safely first; enable writes deliberately. Start read-only — the readOnly capability, or a read-only database user — and enable writes deliberately, per object, once you trust the model.
:51 "Our data can't leave our network" row: ObjectOS runs in your environment. Business data and prompts stay inside your perimeter. On ObjectOS Enterprise, ObjectOS runs in your environment: business data and prompts stay inside your perimeter.
:78-79 Governed automation. Flows and actions can read and (where allowed) write the same data, with every step audited. Governed automation. Flows and actions read the same data and — where you have enabled writes — write it, with every step audited.
:81 … come from the same metadata — no extra integration layer. … come from the same metadata.
:85-92 (none) New section What it is not, yet: Federation is early. Expect the read path to be the mature one, and check Data Sources and the framework's own External Datasources guide for what each datasource protocol supports today. If what you need is a semantic layer that describes many systems without running any of them, that is a different kind of product.
:99 Quickstart — stand up a runtime in minutes Quickstart — stand up the open runtime in minutes

Code and repo files

Where Before After
apps/docs/app/layout.tsx:18 description: 'Customer-hosted runtime for ObjectStack applications. Private, compliant, yours.' description: POSITIONING
apps/docs/app/llms.txt/route.ts:19-25 SUMMARY = "ObjectStack is the open target format and runtime for AI-written enterprise software; ObjectOS is the commercial production platform where teams build, review, deploy, and operate ObjectStack applications." · TITLE = 'ObjectOS' SUMMARY = POSITIONING · TITLE = SITE_NAME
apps/docs/app/sitemap.ts:14-21 { path: '', priority: 1, locales: i18n.languages } removed, with the reason in the comment
.github/scripts/check-locale-surface.mjs root expected in every locale (expectedSitemapUrls, BASE_URLS, one case) root not expected; new self-test case "the redirecting root creeps back into the sitemap" → unexpected-url
.github/scripts/smoke-docs.mjs:151-152 h1: /^ObjectOS$/i for / and /en/docs h1: /^Introduction$/i — the index H1 changed by the ruling, and this script also runs post-deploy with a rollback behind it
.github/scripts/smoke-docs.mjs:431 fixture prose "ObjectOS is a self-hosted runtime for building internal tools." "The ontology is the software, and this fixture carries enough prose to clear the floor."
README.md:5 ObjectOS is the **commercial runtime environment for … The ontology is the software. ObjectOS is the **commercial runtime environment for … (T1 added as the lead; the README's structure is unchanged)

Locale siblings deleted (ruling 5989567068)

Deleted when the English edit removes or reverses an assertion the sibling still makes; zh-Hans and zh-Hant go together. 41 files.

Page Siblings The English sentence whose reversal triggered it
index de, es, fr, ja, ko, zh-Hans, zh-Hant "ObjectOS never phones home. No telemetry. No license server." — a behaviour reversed to licence validation online; also "ObjectOS is a self-hosted runtime …"
quickstart de, es, fr, ja, ko, zh-Hans, zh-Hant "That's it. You're running ObjectOS." — reversed: the open runtime is ObjectStack, and the AI Builder it then describes ships in ObjectOS, not there
why de, es, fr, ja, ko, zh-Hans, zh-Hant "ObjectOS is code-first AI-driven, self-hosted." and "The runtime sits in your VPC" — reversed by ObjectOS Cloud
resources/glossary de, es, fr, ja, ko, zh-Hans, zh-Hant ObjectOS: "Open source, Apache-2.0." — a licence fact reversed
resources/faq de, es, fr, ja, ko, zh-Hans, zh-Hant "Do I need an account / cloud service? No. ObjectOS is fully self-contained." — reversed by ObjectOS Cloud
reference/security es, fr, ja, ko, zh-Hans, zh-Hant (no de existed) "never calls home" / "does not check a license server" — reversed

Left alone, by the "pure reframing or wording" half of the ruling: build/ai-skills (the change is who ships the skills, not what they do), and architecture and extend-existing-systems have no siblings. gen-zh-hant.mjs --check is green on the pruned set; check-translations.mjs reports the removed pages as missing, which is non-blocking by design.

Verification on this tree

  • pnpm turbo run type-check and pnpm turbo run build --force for @objectos/docs: green.
  • pnpm turbo run test --force: 9 self-tests passed, including check-positioning.mjs --self-test (37 cases, 16 rules), check-locale-surface.mjs --self-test (29 cases, with the new root case firing unexpected-url) and smoke-docs.mjs --self-test.
  • node .github/scripts/check-positioning.mjs: green — 632 built docs pages, both llms bodies, 79 English sources.
  • node .github/scripts/check-locale-surface.mjs: green against the rebuilt sitemap (no root entry, no priority 1).
  • gen-zh-hant.mjs --check: 65 generated files match. check-translations.mjs: gate passed.
  • Ownership with the workflow's argv (git diff --name-status --no-renames origin/main...HEAD): 41 translation artifacts deleted, none added or modified — exit 0 with TRANSLATION_BOT_LOGIN unset and with it set. Output gate on the changed list: passed.
  • Browser: the built site served locally and screenshotted with Playwright at 1440 and 390 for /docs, /docs/quickstart, /docs/why, /docs/resources/glossary; all four render with the expected title, H1 and meta description. Paths are in the report on [Decision] What does docs.objectos.ai target — the root URL is a redirect, the index title is "ObjectOS | ObjectOS", and the brand is spelled three ways #171.

Acceptance notes

  • Observation, not filed: reference/security.mdx "Supply chain" still says pre-built images are published from github.com/objectstack-ai/objectos with reproducible provenance, while README.md says the product source is not in this repository and deploy/index.mdx says the Self-Managed image is licensed and private. Outside this card's rows; listed in the report as a finding for the seat.
  • Observation: E1 names Enterprise as the self-managed edition; resources/license.mdx also sells Business Self-Managed (single node). Where a page lists entry points, this PR says "ObjectOS Enterprise (or Business Self-Managed)"; the positioning sentence itself stays verbatim.
  • app/[lang]/privacy/page.tsx:20 ("self-hosted ObjectOS deployment … does not phone home") is PR 2's copy and is the reason rule (c) stops at content/docs/.

Generated by Claude Code

objectstack-fleet Bot and others added 2 commits October 5, 2026 11:33
…rame ObjectOS as Cloud or Enterprise

One constant, apps/docs/lib/positioning.ts, quotes the objectstack README
verbatim (the headline, the four promises, the ObjectOS sentence) plus the
edition clause the maintainer fixed. The site-wide meta description, the
/llms.txt summary and the index frontmatter all carry it, and a new gate,
.github/scripts/check-positioning.mjs, fails CI when a copy differs, when a
brand spelling other than ObjectOS ships, or when a retired sentence
("self-hosted runtime", "Open source, Apache-2.0", "never phones home",
"No license server") comes back. Wired after the build in ci.yml and into
the self-test runner.

Prose: the index, quickstart, why, architecture, security, FAQ, glossary,
AI-skills and extend-existing-systems pages now say what ObjectOS is the
way the README does, carry both editions (Cloud, Enterprise) in every
positioning sentence, correct the licence facts (ObjectOS is commercial;
self-managed validates its licence online, air-gapped Enterprise offline),
attribute the agent skills to ObjectStack, and adopt the README's boundary
on federation (read-only by default, early). The open `os start` path is
named as ObjectStack's runtime and linked as such.

The redirecting root leaves the sitemap, and check-locale-surface.mjs's
oracle follows (its self-test now pins the root as unexpected-url). The 41
locale siblings whose assertions the English edits reverse are deleted.

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

smoke-docs.mjs asserts the H1 of `/` and `/en/docs` after their redirects,
and the same list runs post-deploy with a rollback behind it. The index
page's title changed from the bare brand to "Introduction", so the two
targets follow; the comment says what a pre-change version reads as.

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

Copy link
Copy Markdown
Contributor Author

维护者速读(终稿) · 2026-10-05T12:07Z

改了什么

  • 文档站 docs.objectos.ai 的定位改为 objectstack 新 README 的说法。首页导语就是规范的四句:"The ontology is the software." 加上 ObjectOS = 同一套循环的托管版或自管版。
  • 首页、Quickstart、Why、架构、安全、FAQ、术语表、AI Skills、对接既有系统,共 9 个英文页,统一写成 "ObjectOS Cloud(托管)或 ObjectOS Enterprise(自管)"。
  • 改正三处与 README 矛盾的事实:
    • 术语表原写 ObjectOS 是开源;
    • 首页原写"从不联网、无许可证服务器",实际自管版会在线校验许可证;
    • 全站 meta 描述原为"客户自托管"。
  • 新增一个常量统一定位文字,再加一道门禁:文字不一致、品牌出现第四种拼法、旧说法回流,都会报红。
  • sitemap 去掉空跳转的根地址。
  • 按 [Decision] An English docs correction leaves its locale siblings asserting the corrected-away claim — #59 says delete them, the seat post says leave them, and #68 blocks the pass that would fix them #256 的判据,删除 41 个说法已被反转的外语页,这些页面改为回退显示英文。

为什么改

风险与代价(含回滚)

  • 改动 9060 行(主要是删外语页),超过 5000 行人工合并线,所以请你批准。
  • 外语读者在这 6 个页面上会看到英文,直到翻译流水线(The ownership check is inert on main until TRANSLATION_BOT_LOGIN is set #68)恢复。
  • CI 全绿,含新门禁和合并前预览冒烟。
  • 合并即发布。部署 job 会做线上冒烟,失败自动回滚。手动回滚就是 revert 这一个 squash 提交。

席位意见

你要做的(一个动作)

  • 在本 PR 上点 Approve。之后由席位翻 ready、合并并核验线上部署。

Generated by Claude Code

The maintainer asked why the gate was 895 lines for three rules. It now
keeps exactly those three and nothing else:

(a) the index frontmatter description, the site-wide meta description (as
    the built _not-found.html carries it) and the built /llms.txt summary
    line each equal POSITIONING, composed from lib/positioning.ts's own
    literals and its own join line;
(b) no built HTML page and neither llms body spells the brand
    "ObjectStack Protocol", "ObjectStack Documentation", "Object OS",
    "objectOS" or "ObjectOs" (the build is read, so the accepted comment in
    lib/i18n.ts stays out of scope);
(c) the eight stale sentences stay out of the English content/docs
    sources, outside code fences and MDX comments, with the open-source
    check scoped to the glossary's ObjectOS entry.

The --self-test is six inline cases, one good and one bad fixture per
rule, each bad one pinned to an exact finding count. The ci.yml step, the
run-self-tests.mjs entry and the check:positioning script are unchanged;
the runner's comment now describes the inline fixtures.

Part of #171

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

Copy link
Copy Markdown
Contributor Author

维护者速读(更新) · 2026-10-05T13:47Z

改了什么(与上一版的差别)

  • 按你的选择 A,门禁脚本从 895 行压到 173 行。三条规则保留:定位文字一致、品牌拼法统一、旧说法不回流。
  • 文档改动、41 个外语页删除和定位常量都没动。
  • 整个 PR 现在是 +576 / −7761(原来是 +1299 / −7761)。删除的 7761 行里,7584 行是那 41 个外语页的整文件删除。

为什么改

  • 你问"怎么修改这么多代码"。真正的文字改动约 400 行,写重的是门禁,这次已经瘦身。

风险与代价(含回滚)

  • 新 head d56f248 上 CI 全绿,门禁的 6 个自测用例逐个做过反向验证。
  • 合并即发布。部署 job 自带线上冒烟,失败自动回滚。手动回滚就是 revert 这一个 squash 提交。

席位意见

你要做的(一个动作)

  • 在本 PR 上点 Approve。之后由席位翻 ready、合并并核验线上部署。

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

Development

Successfully merging this pull request may close these issues.

3 participants