Repository navigation
content(blog): When Should You Not Use an Executable Business Ontology? (slot 2026-11-05) - #264
objectstack-fleet[bot] wants to merge 5 commits into
Conversation
…y? (slot 2026-11-05) One new post directory. en and zh-Hans authored (the Chinese re-derived from the same sources), zh-Hant generated by pnpm gen:zh-hant. Five workloads that are not a fit today, each with a scenario, the alternative and its case, the cost of choosing wrong and the deciding fact with its source; two further concessions from the comparison page; a sourced decision table and a ten-question self-check. Cover and self-check diagram as zh / en SVG pairs with an explicit fill on every text node. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
…or's 1000-byte window Astro's SVG metadata probe validates the root tag inside the first 1000 bytes; the long aria-label pushed it past that and the build failed with NoImageMetadata. The long description moves into a desc element and the aria-label is one sentence. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
…without sideways scroll The layout gives every column a 104px floor, so a four-column table scrolls at 390px; merging the fit verdict with the alternative keeps all four facets in three columns, and the sources move to short file names with a legend line. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
席位核对ACCEPT, held for the slot.
The dev's open question (zh-Hans links to Pointer for #261: Generated by Claude Code |
…keting-page link rewrite Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
…ogy pages The generator now rewrites a single-segment /zh-Hans/ link to a marketing page into /zh-Hant/, so the two links withheld in the first round come back: the comparison page where the post says it goes further than it, and the ontology page as the next thing to hand the agent. zh-Hant regenerated. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
席位核对 — re-recorded on head
|
| Check | Result |
|---|---|
Delta since f9955fa |
The merge commit 4e02c30 brings in origin/main 3c5b6c6 and changes no post file. 9f18a2f changes 2 lines in each zh file: zh-Hans gains [对比页](/zh-Hans/compare/) and [定义本身是什么](/zh-Hans/ontology/), and the regenerated zh-Hant carries [對比頁](/zh-Hant/compare/) and [定義本身是什麼](/zh-Hant/ontology/). This is the option-A follow-up named in the first record, done before the slot. |
File surface vs main |
Still the 7 post files only (git diff --stat origin/main... → 7 files, +762). |
| CI on head | Build and deploy: completed/success on 9f18a2f. |
Pointer for #261: ACCEPT (held to 2026-11-05) → PR #264 comment (this one).
Generated by Claude Code
Fixes #261
Refs #236 (item B)
Slot:
date: 2026-11-05(Thursday). Merge on the slot day, by the seat (AGENTS.md, "Publishing cadence"); thecontent:lintadvisory "Date is in the future" is expected until then. Draft PR only.What this adds
One new directory,
content/blog/when-not-to-use-an-executable-business-ontology/:index.mdx(en, authored) andindex.zh-Hans.mdx(re-derived from the same sources, not translated);index.zh-Hant.mdxgenerated bypnpm gen:zh-hant. No further locales.cover.svg/cover-en.svg(1200×675) and the body diagramself-check.svg/self-check-en.svg(1200×760): zh / en pairs, an explicitfillattribute on every text node and no stylesheet; every text/background pair measured at or above 4.77:1 (WCAG AA);pnpm svg:lintOK on 148 text boxes.The thesis is in the first paragraph: five workloads, named by the ObjectStack docs themselves, each with a better tool. The ownable concept is the six-kind test (is the hard part of the workload one of the six kinds the concepts page defines?). Each non-fit gets the same four beats: a concrete scenario, what to use instead and why that is the right call (the steelman), the cost of choosing wrong, and the deciding fact with its source. Two further concessions from
compare.mdxfollow (reasoning over heterogeneous data; ecosystem maturity). Proof artifact: a decision table (workload → fit today? and what to use instead → the deciding fact, every row sourced) and a ten-question self-check (five exclusions, then the page's five questions, quoted). The product appears only as the subject of its limits; the "point your agent at ObjectStack" CTA is confined to the last section, for the cases that passed. Positioning lines are quoted fromsrc/lib/positioning.ts: T2 verbatim in both locales, T4 standalone and E1 in the ObjectOS section. No token figures.Overlap fence: the site's
/en/compare/page is linked from the English post and not restated; the post goes further with scenarios, costs and the self-check. Variation against #211, #244, #245, #237 and PR #260: the opening is a five-item short answer rather than a definition, a refused key, a transcript or three definitions; the structure is five scenario sections on a fixed four-beat rhythm; the proof artifact is a decision table plus a self-check rather than a measured run or a mapping table; the bundled-CRM measurement is not repeated.Every factual claim, with its objectstack source
All sources read at objectstack
origin/main43567a8fon 2026-10-16.content/docs/concepts/when-to-use.mdxabstractremoved under ADR-0049; constrained JSX "is parsed into a server-driven UI tree, never executed as code"content/docs/concepts/ontology.mdxcontent/docs/concepts/compare.mdx, "Where the others are stronger"README.md, the "The runtime runs it" table and the Drivers section of the package directoryexternal.allowWrites: trueon the datasource andexternal.writable: trueon the object; "With either gate off, insert/update/delete on the federated object is rejected";schemaMode: 'external'forbids DDL and a schema mismatch fails bootcontent/docs/data-modeling/external-datasources.mdx, theschemaModetable and the writes section (lines 249–256)assertWriteAllowedruns at the top of the engine'sinsertandupdatepackages/objectql/src/engine.ts:8551, called at:14646and:15825objectis described as "Base object name"content/docs/data-modeling/analytics.mdx;packages/spec/src/ui/dataset.zod.ts:389ActionTypeisscript, url, modal, flow, api, form; ascriptaction's handler runs with the app's full data authority and the boundary is at invoke timepackages/spec/src/ui/action.zod.ts:561;content/docs/ai/actions-as-tools.mdx, the trusted-code calloutcontent/docs/getting-started/glossary.mdx, the TCK entrysrc/lib/security.ts:170(the security page FAQ)content/pages/en/compare.ts, FAQ "Is ObjectStack a semantic layer?"The scenarios (a manufacturer, a bank, a retailer, a logistics company, a hospital group) are illustrative and carry no figures.
Gates, all on HEAD
f9955fa, exit codes captured before any pipepnpm content:lint→ exit 0:✓ content lint passed (350 files, 44 glossary terms checked); the threeDate is in the future: Thu Nov 05 2026advisories are the slot.pnpm content:lint --published→ exit 0, the same verdict line.pnpm svg:linton the four new SVGs → exit 0:svg-text-fit: OK — no text box crosses the shape under it or runs under a shape painted over it, and no drop shadow is cut off by its filter region (4 SVGs, 148 text boxes, 0 filtered elements, tolerance 2px, 0 allowlisted).pnpm check→ exit 0:Result (158 files): 0 errors, 0 warnings, 0 hints.pnpm build→ exit 0, through the shared verify lock (VERDICT command-exit 0, held 102s on a shared box):907 page(s) built;✓ share images: 91 rendered at 1200x630;✓ content lint --dist passed (489 built blog pages checked);✓ content lint --dist CJK line breaks passed (907 built pages, 344 in zh/ja, 0 segment breaks between CJK characters);✓ content lint --dist quotation marks passed (907 built pages, 12650 curly marks, 0 pointing the wrong way or left open);✓ content lint --dist links passed (97929 internal links in 907 built pages resolve to built files).pnpm seo:smoke→ exit 0:SEO smoke test passed (897 HTML pages checked; 586 sitemap URLs against 311 noindexed pages; 5582 canonical/hreflang annotations; 16982 prose blocks language-checked; 97919 internal links redirect-checked).Browser check
Playwright library with the preinstalled Chromium, against
astro previewon the builtdist; every server stopped by its PID..cover×1, no body reference); two images per page (cover and self-check), each scrolled into view anddecode()d; no horizontal page overflow at 390.Deviations and notes
/compare/or/ontology/pages. Linking/zh-Hans/compare/is refused by the gates as they stand:scripts/gen-zh-hant.mjsleaves a single-segment marketing-page link in the generated zh-Hant file untouched (it prints "no provable Traditional build"), andpnpm content:lintthen fails that file with a blockingCross-locale internal link … /zh-Hant/compare/ IS built; linking/en/compare/from zh-Hans fails the same rule the other way. No existing zh-Hans post links any marketing or cluster page, so this is the first collision. The zh-Hans text names the page without a link and points at the objectstack concept pages instead; the English post links/en/compare/,/en/ontology/and/en/security/. The generator fix is one condition (rewrite/zh-Hans/SLUG/whencontent/pages/zh-Hans/SLUG.tsorcontent/pages/en/SLUG.tsexists, the way it already proves blog posts) and is outside this PR's file surface; reported to the seat in the dev report.aria-labelfailed the build withNoImageMetadata. The long description now lives in adescelement, and the MDX alt text carries it as well.dateis the slot; noupdated. No label writes from this seat.Acceptance notes
date, so it heads the blog list from the slot day and sits lower until then.Generated by Claude Code
Patch round 1 (added by the seat)
9f18a2f:f9955fa+ a merge oforigin/main3c5b6c6(4e02c30; gen-zh-hant never rewrites a /zh-Hans/ link to a marketing page, so a zh-Hans post that links /zh-Hans/ontology/ failspnpm build(content-lint cross-locale rule) #265's generator fix, PR fix(gen-zh-hant): rewrite /zh-Hans/ links to marketing pages and clusters #266) + the zh-Hans link restore.[对比页](/zh-Hans/compare/)and[定义本身是什么](/zh-Hans/ontology/), and the generated zh-Hant file carries/zh-Hant/compare/and/zh-Hant/ontology/.9f18a2f: all exit 0;build915 pages, 98827 internal links resolve;seo:smoke905 HTML pages. CIBuild and deploy: success. The article's 13 links per locale all answered 200 inastro preview.