Skip to content

content(blog): what "the ontology is the software" means — post 1 of the positioning wave (slot 2026-10-08) - #212

Open
objectstack-fleet[bot] wants to merge 1 commit into
mainfrom
claude/pm-dispatch-objectos-ju9td1
Open

objectstack-fleet[bot] wants to merge 1 commit into
mainfrom
claude/pm-dispatch-objectos-ju9td1

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #211

Post 1 of the positioning wave (coordinating card: #209; the copy PR #210 landed as 8a258d4, which this branch restarts from). Merge on the slot day, Thursday 2026-10-08, and no earlier — the charter's "merge time is publish time" rule; date: 2026-10-08, no updated.

What this adds

One new post directory, content/blog/what-does-the-ontology-is-the-software-mean/, in all eight locales: the pillar definition behind the line the site now quotes. It defines the executable business ontology from the objectstack README and the Business Ontology concepts page, quoted rather than paraphrased — the six-kind core (mapped onto the bundled CRM example, file by file), the four projections with a removal test for telling core from projection, the three negations, where code goes (hooks, action bodies, CEL, constrained JSX, with the real hook and CEL lines from the CRM example), "validated, then run" with the README's ticket object, the four promises led by Executable, an honest "what this does not solve", and the README's agent path as the CTA (npm create objectstack@latest my-app, point a coding agent at it, npx os dev --ui; not os start). ObjectOS appears exactly once, as the canonical T4 + E1.

The one number (charter rule 1): the CRM example's whole definition is 1,917 lines of TypeScript across 31 files, measured with the command the README prints under "measure it yourself", at objectstack origin/main 9f9510f2. No token figures (ruling Q5). No competitor claims.

Final commit: 177a68476dd6f681b6b270eab38e56d3576a792b (branch claude/pm-dispatch-objectos-ju9td1, from main @ 8a258d4). 14 files, +2118 lines; no file outside the post directory.

Canonical strings as used

All from src/lib/positioning.ts on main (PR #210), per locale, verbatim:

  • T1 The ontology is the software. — zh-Hans 本体即软件。 (the README's own line, README.md:12); ja/de/es/fr/ko as in positioning[locale].t1.
  • T2 One executable business ontology. AI writes it, the runtime runs it, agents operate it, you own it. — and each locale's t2.
  • T3 Executable · AI-writable · Agent-operable · You own it — rendered as the four words joined with ·, each locale's t3.
  • T4 Want the same loop hosted, in the browser, nothing to install? That's ObjectOS, the commercial runtime environment built on ObjectStack. — this is T4_STANDALONE: the one substitution the canonical note allows ("this stack" → "ObjectStack"), made because the post quotes T4 outside the README where "this stack" has no referent. Every locale uses its t4, which already carries the substitution.
  • E1 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. — each locale's e1.

The English README quotes inside the post (the six-kind definitions, the projection sentences, the negations, the four-gate wording, the "you own it" paragraph) are quoted verbatim in English and translated faithfully in the other locales; the claims are identical in every locale.

Every factual claim and its source line

Sources are objectstack origin/main 9f9510f2 unless stated; README = README.md, ontology = content/docs/concepts/ontology.mdx, crm = examples/app-crm/src/.

Claim in the post Source
"The ontology is the software." is the README's first sentence; the line under it is T2 README:7, README:9-10
Six kinds and what each declares (table, middle column verbatim) ontology:14-25; README:79-80
Pipeline line objectstack.config.ts -> objectstack.json -> ObjectStack runtime -> … ontology:61-63
"One typed definition → database · REST API · client SDK · UI · MCP tools." README:34
"It is one definition, open and versioned. … not a graph held inside a vendor's system …" ontology:27-30
Projections: views, dashboards, apps, translations; the four clauses; "authored in metadata too, validated by the same gate, but not part of the ontology" ontology:34-38; README:85-86
"Change the core and the projections follow; remove a projection and the business it showed is unchanged." (the removal test is this sentence turned into a test — the post says so) ontology:38-39
"The distinction bounds what an agent must hold to reason about the business: the core, not every screen." ontology:40
Not a knowledge ontology: OWL/RDF/knowledge graphs, inheritance, axioms, reasoner; validated by Zod and os validate; abstract removed (ADR-0049) ontology:44-48; README:81-83
Not the semantic layer: read-only mapping over existing systems; federation possible, read-only by default, early; the docs' narrower analytics-dataset sense ontology:49-55; README:83-85
Not a formal ontology in the philosophical sense ontology:56-57
"Nothing is reasoned over at runtime: what runs is what was validated." ontology:69-70
Derives: database schema on an interchangeable driver, REST and realtime API, server-driven UI, MCP server; enforces RBAC/RLS/FLS/sharing/audit on REST, Console click and tool call alike ontology:65-69
"code does not disappear: it moves into the runtime, as hooks, action bodies, CEL, and constrained JSX"; "inside the runtime's permission and audit fence"; "none of it is scattered across a codebase the ontology would then have to describe" README:86-87; ontology:72-76
CEL for formulas, predicates and policies ontology:72-73; README:284
Constrained JSX "parsed into a server-driven UI tree, never executed as code"; the package "parse, never execute" ontology:74-75; README:287
The ticket object and curl …/support_desk_ticket; "the REST API exists the moment the object does — no controllers to write" README:117-142
os validate "rejects metadata that type-checks but would fail silently at runtime: dangling bindings, bad CEL predicates, missing security posture" README:174
AI-writable: "The agent writes typed metadata — not a codebase. …"; the scaffolder installs the skills bundle and writes AGENTS.md; four gates; "an agent's errors become located, corrective text it can read and fix itself" README:55-56, README:39-41, README:168-180
Agent-operable: objects/actions are tools; MCP server at /api/v1/mcp on by default; same permissions and RLS as a human; actions opt in with ai: { exposed: true } README:150-154, README:162-163
You own it: "Everything in this repo is the open stack … Apache-2.0 with no open-core asterisks"; the definition in your repository as ordinary TypeScript README:195-199
"apps small enough for AI to hold whole"; "what breaks if I change this?"; the measure-it-yourself command README:14, README:182-191
1,917 lines / 31 files the README:190 command run over git show origin/main:PATH for every non-test .ts under examples/app-crm/src at 9f9510f2; roster from git ls-tree -r origin/main --name-only examples/app-crm/src
CRM roster: six objects, three views, a dashboard, an app, a flow, an action, a hook, two permission sets, three positions, a translation bundle, a page, seed data the same ls-tree; crm/security/sales-positions.ts (two definePermissionSet, three definePosition); examples/app-crm/objectstack.config.ts:70-119
Field.lookup('crm_account', …) on the opportunity; the line item is a master-detail child crm/objects/opportunity.object.ts:25-28; crm/security/sales-positions.ts:44-50
Convert-lead action visible only while not converted crm/actions/convert-lead.action.ts:31
Guest profile may only insert leads crm/security/sales-positions.ts:65-72
Screen flow creates account and opportunity, marks the lead converted crm/flows/convert-lead.flow.ts:25-30
The hook snippet (verbatim) crm/hooks/opportunity.hook.ts:9-19
The expected_revenue CEL formula (verbatim) crm/objects/opportunity.object.ts:48-51
No agent or tool definition in the CRM example zero hits for defineAgent/defineTool/agents: across crm/**/*.ts; no agents key in objectstack.config.ts:70-119
"a discount above 30%" crm/security/sales-positions.ts:30-33
Modelling "remains slow, contested, human work"; the format decides size and strictness this site, content/glossary/en/ontology.ts, fourth explanation paragraph
The CTA: npm create objectstack@latest my-app && cd my-app; the support-desk requirement; npm run validate; npx os dev --ui README:44, README:50-53, README:61
"a coding agent writes the metadata in your repo and operates the running app over MCP" README:26-27

Assets

File viewBox Bytes Used by
cover-en.svg 1200×675 4266 en, ja, de, es, fr, ko (frontmatter cover)
cover.svg 1200×675 4163 zh-Hans, zh-Hant
six-kind-core-en.svg 1200×720 8803 body, "Projections, and the removal test"
six-kind-core.svg 1200×720 8725 zh-Hans/zh-Hant body
validated-not-reasoned-en.svg 1200×640 5660 body, "Three things it is not"
validated-not-reasoned.svg 1200×640 5447 zh-Hans/zh-Hant body

The cover is the sentence plus a 6 / 4 / 3 card; diagram 1 shows the six kinds compiling through the runtime into the four derived surfaces, with the projections drawn outside the ontology box and the code fence drawn inside the runtime; diagram 2 is the three negations side by side. Both diagrams add information the cover does not carry.

Mechanical fit check (scratchpad/issue-211/svgcheck.mjs, Chromium at native size): for every text element, its box lies inside its enclosing rect (3 px tolerance) or the viewport, no two text boxes overlap, and no text box crosses a line or arrow outside its own container. Result on the committed files: PASS × 6 — 25, 24, 52, 52, 38, 38 text elements, 0 failures each. A first pass found three overruns (the cover's footer line, the → objectstack.json label in both diagram variants); they were fixed by re-laying out, not by shrinking type. Renders: scratchpad/www/shots-211/svg/*.png.

Locales

File Title chars Description chars Words (content-lint formula)
index.mdx (en) 87 206 3133
index.zh-Hans.mdx 27 72 2578
index.zh-Hant.mdx (generated) 27 72 2591
index.ja.mdx 46 100 3831
index.de.mdx 93 190 3212
index.es.mdx 91 187 3714
index.fr.mdx 87 199 4039
index.ko.mdx 46 117 3212

title, description and tags are translated; topic: app-building, audience: developer, date: 2026-10-08, status: published are identical in all eight. The three English-only companion posts are linked under /en/ from every locale (the content-lint cross-locale rule accepts that when no same-locale target exists). zh-Hant was produced only by pnpm gen:zh-hant and carries the @generated marker; the build's own regeneration left the tree clean.

Gates (on 177a684, through scripts/pm/os-verify-lock.sh, slot www-211, lock held 95 s, waited 0 s — shared-box seconds)

Gate Exit Evidence
pnpm content:lint 0 ✓ content lint passed (347 files, 44 glossary terms checked); 8 advisories, one per locale file: Date is in the future: Thu Oct 08 2026 00:00:00 GMT+0000 (Coordinated Universal Time) — expected for a slot-day post; the date is not changed
pnpm content:lint --published 0 same line, same 8 advisories
pnpm check 0 Result (137 files): 0 errors, 0 warnings, 0 hints
pnpm build 0 ✓ zh-Hant: generated 47, kept 0 hand-maintained; 879 page(s) built in 72.42s; ✓ content lint --dist passed (486 built blog pages checked); git status clean afterwards
pnpm seo:smoke 0 SEO smoke test passed (878 HTML pages checked)

The eight built pages exist at dist/LOCALE/blog/what-does-the-ontology-is-the-software-mean/index.html with the translated title and the right asset set; the en page carries hreflang alternates for all eight locales plus x-default; the en RSS feed's first item is this post.

Browser check (Playwright 1.56.1, Chromium at /opt/pw-browsers/chromium, dist/ served by python3 -m http.server on 127.0.0.1:48211, killed by PID after a /proc cmdline check)

Script: scratchpad/issue-211/shots.mjs; measurements: scratchpad/www/shots-211/measurements.json. 38 / 38 assertions passed:

  • Article en and zh-Hans at 1440×900 and 390×844: HTTP 200; documentElement.scrollWidth equals the viewport width and 0 elements extend past it outside a scroll container; the cover img.cover is complete with natural size > 0 and laid out; the two body diagrams are complete and laid out (860×517 and 860×460 at 1440; 358×216 and 358×192 at 390); no body image repeated; the cover not repeated in the body.
  • Blog list en at 1440 and 390: no overflow; the post is the first card of the Latest section (fifth overall — the four cards above it are the curated Recommended grid hard-coded in ArticleList.astro); its thumbnail renders.
  • Each of the six served SVGs rendered on a plain page at its native viewBox size: complete, natural size > 0.

Screenshots (fold + full page): scratchpad/www/shots-211/article-en-1440x900{,-full}.png, article-en-390x844{,-full}.png, article-zh-Hans-1440x900{,-full}.png, article-zh-Hans-390x844{,-full}.png, list-en-1440x900{,-full}.png, list-en-390x844{,-full}.png, svg-served-*.png, and the native renders under svg/.

A first run of the script reported the body diagrams and the 390-wide list thumbnail as not loaded: they are loading="lazy" and were measured before being scrolled into view. The script now scrolls the page and waits for every image to complete before measuring; the first log is kept as scratchpad/issue-211/shots.log.

Deviations from the dispatch

  1. The commit's trailer pair is model-free (Co-Authored-By: Claude, plus the session line), as the dispatch contract requires; this repository's prior commits (f0ab139, 8a258d4) carry model-named trailers. Reported, not imitated.
  2. The dispatch's git fetch origin main claude/pm-dispatch-objectos-ju9td1 stored the branch head only in FETCH_HEAD; I additionally fetched it into refs/remotes/origin/claude/pm-dispatch-objectos-ju9td1 (a local read-only ref) so the lease value could be checked against a named ref before the forced push. No extra write.

Acceptance notes

  • date: 2026-10-08 is written exactly as ruled (a bare date, midnight UTC), where most posts carry a T10:00:00+08:00 time. Both render as Oct 8, 2026 in every locale; sort order is unaffected because no other post shares the day.
  • audience: developer and topic: app-building: the post quotes CEL, hooks and permission sets, and the charter's developer definition is "how your agent writes ObjectStack correctly, and how you review the diff". If the seat prefers the pillar to read as general, it is a one-line frontmatter change in all eight files.
  • The zh-Hans/zh-Hant pair shares the Simplified-text SVGs, as the charter's asset rule prescribes; a Traditional reader sees Simplified text inside the diagrams.
  • The generator renders 运行时运行它 as 執行時執行它 in zh-Hant (same note as on PR content(positioning): quote the objectstack README's canonical lines across the site #210); the generated file is left as generated.
  • At 3,133 English words the post is longer than the house median; it is the pillar definition and every section is a distinct claim with its own source, so nothing was cut to hit a length.
  • This repository has no .changeset/ directory and publishes no package; no changeset applies.

Generated by Claude Code

… definition post (slot 2026-10-08)

Post 1 of the positioning wave: the executable business ontology defined
from the objectstack README and the Business Ontology concepts page,
quoted rather than paraphrased — the six-kind core mapped onto the
bundled CRM example, the four projections with a removal test to tell
core from projection, the three things it is not, where code goes, and
the four promises led by Executable. ObjectOS appears only as the
canonical T4 + E1. Eight locales (zh-Hant generated by gen:zh-hant), one
cover and two diagrams, in English text and in Chinese text for the
zh-Hans/zh-Hant pair.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 5, 2026 13:07
This was referenced Oct 5, 2026
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.

Post (slot Thu 2026-10-08): What Does "The Ontology Is the Software" Mean? An Executable Business Ontology, Defined

2 participants