Repository navigation
content(blog): executable ontology vs knowledge ontology — post 2 of the positioning wave (slot 2026-10-20) - #244
Open
objectstack-fleet[bot] wants to merge 7 commits into
Conversation
…the positioning wave (slot 2026-10-13) New post content/blog/executable-ontology-vs-knowledge-ontology/ in en and zh-Hans (zh-Hant generated by gen-zh-hant), date 2026-10-13, no updated. It argues the second negation of the pillar post in full: a knowledge ontology is built to be reasoned over, an executable business ontology to be validated and run, and the README's "no inheritance, no axioms, no reasoner" is what makes a definition checkable and a diff reviewable. The proof artifact is the ADR-0049 retirement of the object `abstract` key, measured on the published @objectstack/spec 15.1.1, 16.0.0 and 17.7.0: parsed and kept, then refused by create() while parse() still stripped, then refused on both paths with the prescription "Remove the key." Six SVGs: cover-en/cover, two-pipelines(-en), abstract-before-after(-en); all pass svg-text-fit, text fills chosen for >= 4.5:1 on their fills. Also in this PR: enterprise-ontology-race-open-vs-closed, every locale — the title, description and TL;DR no longer name the contested layer "the business semantic layer"; they name the business ontology (the README's term) and say which of the five entrants shipped an ontology by name and which a semantic layer; the race-section line and the zh closing line match. updated set to 2026-10-07T10:00:00+08:00; date and slug unchanged. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
Astro's vendored image-size validates an SVG with a regex over the first 1,000 bytes only; the two abstract-before-after diagrams carried an aria-label longer than that, so the root tag never closed inside the window and `astro build` failed with NoImageMetadata. The root now holds a one-sentence aria-label (306 / 304 bytes) and the full description moved into <title>/<desc>, referenced by aria-labelledby. Text-fit gate and the metadata probe both pass on all six SVGs. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
…s lang="en" seo:smoke judges every prose block in <main> against its nearest lang; the README paragraph and the ADR-0049 three-state rule are quoted verbatim in English inside the zh-Hans post (quoted, never paraphrased), so each blockquote now carries lang="en". zh-Hant regenerated. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
… its box The 校验 sub line cleared its box by 6px at native size; svg-text-fit passed but the charter asks a fix to leave room, so two glyphs are dropped and the clearance is now 55px. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
…dated = the publish day Coordinator review of #228: "Who Owns the Business Ontology?" collides with post 5's planned title (#231), so enterprise-ontology-race-open-vs-closed is retitled in all 8 locales to "Open vs. Closed Enterprise Ontologies: Who Owns the Business Definition Layer?", using each locale's existing rendering of the glossary term definition-layer (业务定义层 · 業務定義層 · Geschäftsdefinitionsschicht · capa de definición del negocio · couche de définition du métier · 비즈니스 정의 계층) consistently in the title, the TL;DR and the race-section line (zh also its closing line). Descriptions unchanged. updated moves to 2026-10-13T10:00:00+08:00, the day the change publishes; zh-Hant regenerated. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
The positioning wave slipped by one week. Post 1 missed its Thursday 2026-10-08 slot and is being re-slotted to Thursday 2026-10-15, so post 2 cannot keep Tuesday 2026-10-13 without either going live ahead of post 1 or leaving the cadence's one-post-per-slot order. Per the Publishing cadence rules (two slots a week, one post per slot, an agent's `date` is its planned slot), post 2 moves to the next Tuesday slot, 2026-10-20. This post is unpublished, so its `date` may change; the forward-only rule covers posts that are already live. - executable-ontology-vs-knowledge-ontology: `date` 2026-10-13 -> 2026-10-20 (en, zh-Hans; zh-Hant regenerated with `pnpm gen:zh-hant`). - enterprise-ontology-race-open-vs-closed: the back-link revision's `updated` 2026-10-13T10:00 -> 2026-10-20T10:00 (+08:00) in all eight locales, so the sibling's revision lands on the same day as the post it links to. `updated` stays >= that post's `date` (2026-06-16). No other changes: no `2026-10-13` remains in content/, and the post bodies carry no prose reference to the old slot date. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
main (#254) moved the sweep's updated lines to 2026-10-15, the day the sweep went live. This post sets the same lines on its back-linked posts to its own slot day, which is later, so this side wins. main changed nothing else in these files since the branch point. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
This was referenced Oct 15, 2026
Draft
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #228
Post 2 of the positioning wave ruled on #209, slot Tuesday 2026-10-20. Merge on the slot day only: the charter says "merge time is publish time".
Re-slot. The post was slotted for Tue 10-13. Post 1 missed 10-08 and landed on 10-15 as #212, so the wave slipped one week. Commit
e2a55f1moves the post'sdateto 2026-10-20 and moves the sibling'supdatedto2026-10-20T10:00:00+08:00in all eight locales. 11 lines change. Gates on that commit all exit 0: content:lint, check, build (891 pages, tree clean) and seo:smoke. Built JSON-LD gives datePublished 2026-10-20 for the post and dateModified 2026-10-20T02:00Z for the sibling.Branch. This branch holds six commits from the staged
lin/issue-228, replayed ontomain@a7bd4af+1174309. The replay is patch-equal tolin/post-base..lin/issue-228, with byte-identical diffs. Headc3538ab. The staged SHAs quoted below are the pre-replay commits.Known follow-up. A seat fixup re-dates the stack's
updatedlines to their real landing day, 2026-10-15, and lands later today. This PR moves the same siblingupdatedlines to 10-20, so after that fixup the branch takesmainwith a merge commit that keeps 10-20.The post
content/blog/executable-ontology-vs-knowledge-ontology/— Executable Ontology vs Knowledge Ontology: Why "No Inheritance, No Axioms, No Reasoner" Is the Point (the ruled title, kept whole).date: 2026-10-13, noupdated,topic: app-building,audience: developer. Locales: en, zh-Hans, zh-Hant (generated bypnpm gen:zh-hant, never hand-edited).Angle. The second of the pillar post's three negations, argued in full: a knowledge ontology (OWL 2 / RDF) is built to be reasoned over; an executable business ontology is built to be validated, reviewed and run. The three refusals are what make a definition checkable and a diff reviewable.
Ownable concept. A reader for every key: a key you can write has a runtime reader, or it is removed. The one figure is ADR-0049's own, quoted: the audit "found that roughly half of all spec properties are dead".
Proof artifact (before/after, measured). The
abstractkey on the object schema, parsed through three published@objectstack/specreleases with the same object (scratchpad/issue-228/scripts/probe-abstract.mjs, logsprobe-v15.log,probe-v16.log,probe-v161.log,probe-v17.log):ObjectSchema.create()ObjectSchema.safeParse()abstract: truekeptabstract: truekeptabstractsilently strippedunrecognized_keys, with the prescriptionHonesty section. Steelmans OWL/knowledge graphs; states plainly what the executable ontology does not do (no reasoning, no open-world inference, no schema-level inheritance, no entity resolution) and that "validated" is only as true as the validators (the ledger is standing maintenance, not a finished state).
ObjectOS appears once, as T4 (
T4_STANDALONE) + E1 verbatim fromsrc/lib/positioning.ts.CTA:
npm create objectstack@latest my-app && cd my-app, a coding agent,npx os dev --ui.os startappears 0 times.No token figures. No competitor claims. OWL is cited to the W3C OWL 2 Primer by name only.
Every factual claim and its source (objectstack
origin/main=8caa131e52717ef35fe71742d758f10b8f2b77ee)README.md:79-89, line-exact:82-83src/lib/positioning.ts(this repo);README.md:7-16,:26-30abstractkey was removed from the spec for exactly that reason (ADR-0049)"content/docs/concepts/ontology.mdx:44-48objectstack.config.ts -> objectstack.json -> …ontology.mdx:61-63ontology.mdx:69-70ontology.mdx:21ontology.mdx:65-69os validate"rejects metadata that type-checks but would fail silently at runtime: dangling bindings, bad CEL predicates, missing security posture"README.md:174README.md:179README.md:173;object.zod.ts:2646(NoExcessObjectKeys)docs/adr/0049-no-unenforced-security-properties.md:7:25-34:21-23:91-92:162-164abstractin the verified-dead object setabstractwas removed … Remove the key.)packages/spec/src/data/object.zod.ts:1538-1541;:1694-1696packages/spec/liveness/README.md:958.strip()… vanished with no error, no warning, and a greentsc" (#1535)object.zod.ts:1446-1450; objectstack#1535object.zod.ts:1676-1679tags/active/abstract:ObjectSchema.create()now throws a located error naming the removal. None gated anything at runtime — remove them." (16.0.0)packages/spec/CHANGELOG.md:98572-98573(under## 16.0.0at:98195)abstract: z.boolean().optional().default(false).describe("Is abstract base object (cannot be instantiated)")@objectstack/spec@15.1.1dist/data/index.js:3239(published package)@objectstack/spec@15.1.1dist/data/index.js:5794@objectstack/spec@15.1.1liveness/object.json:224-229npm view @objectstack/spec timeprobe-v15.log,probe-v16.log,probe-v17.login the scratchpadAssets (six SVGs, all pass
svg:lint)cover-en.svg/cover.svg(1200×675),two-pipelines-en.svg/two-pipelines.svg(1200×660),abstract-before-after-en.svg/abstract-before-after.svg(1200×620). English set for en; Chinese set for zh-Hans/zh-Hant. Each diagram adds information the cover does not carry (the two pipelines; the three-release timeline with ADR-0049's three states). Text fills chosen for AA on every fill they sit on:#173a36,#256a5e,#52655f,#7a5a2c; measured in Chromium with each SVG opened as its own document, lowest ratio 5.68:1 (AA needs 4.5:1).Two build-side lessons, recorded in the commits: Astro's vendored
image-sizevalidates an SVG over its first 1,000 bytes, so a rootaria-labellonger than that failsastro buildwithNoImageMetadata— the two timeline diagrams now keep a shortaria-labeland carry the full description in title and desc elements; andseo:smokejudges every prose block against its nearestlang, so the two English source quotations in the zh post are blockquote elements carrying lang=en.Also in this PR:
enterprise-ontology-race-open-vs-closed(update, not retire)Every locale (en, zh-Hans, ja, de, es, fr, ko; zh-Hant regenerated). The title, description and TL;DR no longer name the contested layer "the business semantic layer"; they name the business definition layer — house vocabulary (glossary
definition-layer; AGENTS.md rule 1's "definition layer vs runtime layer"), chosen at review over "business ontology" because that collides with post 5's planned title (#231). Each locale uses its existing rendering of the term consistently in the title, the TL;DR and the race-section line (zh also its closing line): 业务定义层 · 業務定義層 · Geschäftsdefinitionsschicht · capa de definición del negocio · couche de définition du métier · 비즈니스 정의 계층. The TL;DR and race line say which of the five entrants shipped an ontology by name (Microsoft Fabric IQ, Palantir Foundry) and which a semantic layer (Snowflake, Google Looker, Databricks Unity Catalog), matching the post's own table.updated: 2026-10-13T10:00:00+08:00on all 8 files (the publish day, per review);dateand slug unchanged; tags unchanged (the post still discusses semantic layers). Descriptions kept ≤ 230 chars (en 218, de 226, es 224, fr 228).Gates on
835f9b5(throughscripts/pm/os-verify-lock.sh, slotwww-228, lock held 141 s, waited 0 s, shared-box seconds; the same six were green on680bfd8before the fixup)pnpm content:lint→ exit 0 —✓ content lint passed (350 files, 44 glossary terms checked); advisories on the new post, verbatim:Date is in the future: Tue Oct 13 2026 (now Oct 20 after the re-slot) 00:00:00 GMT+0000 (Coordinated Universal Time)×3 (en, zh-Hans, zh-Hant — expected for a slot-day post, date unchanged);Title is 100 columns wide (100 chars); search results show about 60, so the end is cut(the ruled title, kept);Description is 222 columns wide (222 chars); on the sibling post, verbatim:Updated is in the future: 2026-10-13×8 (one per locale file — expected, the publish-day value chosen at review).pnpm content:lint --published→ exit 0 — same line.pnpm check→ exit 0 —Result (152 files): 0 errors, 0 warnings, 0 hints.pnpm build→ exit 0 —✓ zh-Hant: generated 48, kept 0 hand-maintained;svg-text-fit: OK … (124 SVGs, 2661 text boxes …);[build] 891 page(s) built in 82.33s;✓ content lint --dist passed (489 built blog pages checked); CJK line breaks, quotation marks and 94,469 internal links all pass; tree clean afterwards.pnpm seo:smoke→ exit 0 —SEO smoke test passed (881 HTML pages checked; … 16525 prose blocks language-checked; 94459 internal links redirect-checked).pnpm svg:lint→ exit 0 —svg-text-fit: OK.Browser check (astro preview on
dist/, Playwright 1.56.1 Chromium at/opt/pw-browsers/chromium; the full run on680bfd8, the sibling re-take on835f9b5)scratchpad/issue-228/scripts/shots.mjs: the article in en and zh-Hans at 1366×625, 1440×750, 1512×830, 1920×945, 390×844 and 360×800, light and dark; the updated post in en and zh-Hans at 1440 and 390; the en blog list at 1440 and 390; each served SVG at native size as its own document. 182/182 assertions: HTTP 200,documentElement.scrollWidthequals the viewport and no element past it outside a scroll container, the cover renders, both diagrams render, no repeated image, the Updated line readsUpdated Oct 7, 2026/更新于 2026年10月7日, the new post is the first card of the Latest section, every SVG text AA. Element crops (scripts/crops.mjs) of every table, code block, blockquote and diagram at 1440 and 360 were looked at: tables wrap at 360, code blocks scroll sideways (the #213 design), thelang="en"quotes render as ordinary blockquotes in both schemes.Sibling re-take on
835f9b5(scripts/sib-shots.mjs,scratchpad/issue-228/shots-sibling/): en and zh-Hans at 1440×750 and 390×844, fold and full page, 20/20 assertions — HTTP 200, no overflow, cover renders, the H1 is the new title in both languages, the Updated line readsUpdated Oct 13, 2026/更新于 2026年10月13日(datetime 2026-10-13); the built en page carries the new meta description anddateModified2026-10-13T02:00:00.000Z. Looked at: all four folds and both full pages.Acceptance notes
src/components/ArticleList.astro:49and:55(recommendedLead) still say "why the business semantic layer should be open" / 「业务语义层为什么该开放」 next to the retitled Recommended card. Site code, outside this card's surface; carrier: the seat's planned Recommended-grid change (Post (slot Thu 2026-10-08): What Does "The Ontology Is the Software" Mean? An Executable Business Ontology, Defined #211 ACCEPT, answer 2). Noted, not filed.updated= the publish day; both applied in835f9b5.🤖 Generated with Claude Code
https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
🤖 Generated with Claude Code
https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr