Skip to content

content(pages): add the /ontology/ pillar and /compare/ with a "when not to use it" section - #258

Merged
os-tesla merged 2 commits into
mainfrom
claude/sharp-mendel-1087cg-issue-235
Oct 16, 2026
Merged

os-tesla merged 2 commits into
mainfrom
claude/sharp-mendel-1087cg-issue-235

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #235

What this adds

Two marketing pages, authored in English and Simplified Chinese (the Chinese re-derived from the objectstack sources, not translated from the English page), Traditional Chinese derived at build time by the registry's s2t pass, and the other five locales served the English body under the existing fallback rule (noindexed, canonical to /en/).

  • /[lang]/ontology/ — the pillar for the positioning line: the six-kind core, the four projections, the four guardrails on the word, and the mechanism behind each of the four promises. H1 is T1, the lead opens with T2, both read from src/lib/positioning.ts.
  • /[lang]/compare/ — ObjectStack beside the five categories of objectstack's compare page, with its concessions kept ("Where the others are stronger"), a "When not to use it" section carrying the "Not a fit today" list from when-to-use.mdx, the side-by-side table compressed to the template's three columns, the five questions as the review checklist, and the site's own comparison posts under the category each product falls in.

Links: Ontology is the first entry under Product → Evaluate in every locale (siteNav.ontology, seven authored labels, zh-Hant derived); the home positioning section carries a text link to /[lang]/ontology/; the home #compare chips go to /[lang]/compare/#in-depth (where each named product's post sits) and the section's "Read the comparison" link to /[lang]/compare/; llms.txt lists both pages under Primary Pages through the registry (no edit to src/pages/llms.txt.ts was needed — the registry is the producer), with ontology first and compare after platform in PAGE_ORDER.

Sources, line by line (objectstack origin/main 1ecb08a1)

O = content/docs/concepts/ontology.mdx, C = content/docs/concepts/compare.mdx, W = content/docs/concepts/when-to-use.mdx, R = README.md, P = src/lib/positioning.ts on this repo.

/ontology/

  • H1, lead opening, description opening, FAQ "Where does ObjectOS come in?": P t1, t2, t4, e1, quoted.
  • Lead and artifact body ("the definition of your business that the runtime executes… compiled into the objectstack.json artifact"; derives DB schema on an interchangeable driver, REST and realtime API, server-driven UI, MCP server; enforces on every call; "Nothing is reasoned over at runtime"): O 14–15, 68–73. Diagram: O 65.
  • Metrics: six kinds O 16–25; four projections O 34–35; "4 gates — Typed, validated, reviewed, governed" R 181–189 (the same phrase the platform and product-tour pages already carry).
  • Section "The core" copy: O 27–30. The six cards: O 20–25, one row each, verbatim.
  • Section "Projections": O 34–40 (each card is one clause of O 35–38; the copy is O 38–40).
  • Section "What it is not" — the four guardrails objectstack commit d2e687fd names (no inheritance/axioms/reasoner; not a semantic layer; projections are not part of it; code does not disappear): knowledge ontology O 44–48 (abstract removed, ADR-0049 O 47–48); semantic layer O 49–53; formal ontology O 56–57; code moves into the runtime O 75–79 and R 87–89. Projections are the preceding section.
  • Section "The four promises", titles P t3[0..3] quoted; Executable O 68–73; AI-writable O 85–91 and R 184–189; Agent-operable O 95–98 and R 163–167; You own it O 27–29, R 208–212 (Apache-2.0, "no open-core asterisks"), R 221–222 (container-ready). Mechanism only — no export claim; docs/NORTH-STAR.md:96 lists whole-ontology export as unverified.
  • Table rows: objects/fields/relations O 20–21, O 68–69, R 108; actions R 114, R 116, O 22; permissions O 70–72; flows R 110–111; agent and tool definitions R 163–166; projections O 36, O 39, O 69–70.
  • FAQ Palantir: C 45–56. FAQ code: O 75–79. FAQ size: R 195–200 and O 101–103 (phrased with R 195 "apps small enough for AI to hold whole", no token figure, no context-window framing — Adopt objectstack's 2026-10-03 positioning across www.objectos.ai: copy changes, five posts, an update sweep #209 Q5).

/compare/

  • Lead: C 7–12, closing with P t2 quoted. Hero line is C 11 ("ObjectStack is none of the five").
  • Artifact "A good fit" body and the five steps: W 7–8, W 15–30.
  • Five category cards: knowledge ontologies C 16–26; semantic and context layers C 30–41 (vendor list C 32–35 as written there, "as of late 2026"); operational ontologies C 45–56; metadata-driven platforms C 60–73; AI code generation C 77–86.
  • "Where the others are stronger", four cards: C 103–117, verbatim concessions.
  • "Not a fit today", five cards: W 34–53 (section copy W 7–8, W 51–53).
  • Side by side table: C 90–99, each row's five cells kept in order, two per column with · between (the template's table is three columns wide); column headers quote P t3.
  • Checklist "Five questions before you start": W 57–63. FAQ "How long does the first ontology take?": W 65–67.
  • FAQ semantic layer: O 49–53 and C 40–41, plus the llms.txt line "does not replace a warehouse semantic layer either" already on this site. FAQ low-code: C 60–73. FAQ "why not just let the agent write the code": C 80–86, C 111–114. FAQ ObjectOS: P t4, e1.
  • "In depth" cards: this site's posts, descriptions condensed from each post's frontmatter. The mapping of products onto the five categories is this page's, not objectstack's (Airtable, Retool, Power Platform and Agentforce are filed under metadata-driven platforms, Lovable and vibe coding under AI code generation).

Mechanism measured (PM assumption)

A new page is one module per authored locale under content/pages/{en,zh-Hans}/ with slug equal to the file name; the registry globs the tree, derives zh-Hant with deepS2t, and getMarketingPage falls back to English for the rest. No per-page registry entry exists; PAGE_ORDER only orders. Verified in the build: /zh-Hant/ontology/ renders the converted copy and is self-canonical; /ja/compare/ carries noindex, nofollow and canonical /en/compare/; seo:smoke asserts the hreflang set per locale. The compare page's categories and concessions are as in compare.mdx lines 14–86 and 101–117 at 1ecb08a1.

Two small changes outside the declared file surface, and why

  • src/content-pages/types.ts and src/components/MarketingEvidencePage.astro: MarketingPageTable takes an optional eyebrow/title. The template's table heading is the fixed "Decision surface — What changes, who reviews it, what runs"; over a side-by-side category comparison that heading is wrong. The ontology page keeps the default.
  • src/components/MarketingEvidencePage.astro, localizeHref: a page-module link of the form /en/blog/SLUG/ is localized to the reader's locale when that locale's post is built, and left on the English post otherwise (the same conditional rule as content-lint's cross-locale check and gen-zh-hant's rewrite). Without it the zh-Hans and derived zh-Hant compare pages would send readers to English posts that exist in their language. Measured in dist: zh-Hans → /zh-Hans/blog/… for seven posts and /en/blog/… for the two English-only ones; zh-Hant → /zh-Hant/blog/…; ja (fallback body) → /en/blog/….
  • src/lib/i18n.ts: the nav label producer is siteNav, not the page module (every nav label on the site is an i18n string), so siteNav.ontology was added in the seven authored locales; src/components/MarketingHome.astro is the producer of the chip hrefs (compareLinks) and the positioning-section markup, so the retarget and the new link live there, with positioningLink labels in src/lib/home.ts for seven locales.

No content/glossary/** file was touched (#233 holds content/glossary/*/ontology.ts); the glossary → /ontology/ link is a follow-up for the seat.

Gates (head fb40251)

  • pnpm content:lint — exit 0 — ✓ content lint passed (347 files, 44 glossary terms checked). The 12 snippet-width warnings printed are on content/blog/what-does-the-ontology-is-the-software-mean/ (landed in content(blog): what "the ontology is the software" means — post 1 of the positioning wave (slot 2026-10-15) #212), not on files this PR touches.
  • pnpm content:lint --published — exit 0 — same verdict line.
  • pnpm check — exit 0 — Result (158 files): 0 errors, 0 warnings, 0 hints.
  • pnpm build — exit 0 — 904 page(s) built in 83.93s; ✓ content lint --dist passed (486 built blog pages checked); ✓ content lint --dist CJK line breaks passed (904 built pages, 342 in zh/ja, 0 segment breaks between CJK characters); ✓ content lint --dist quotation marks passed (… 0 pointing the wrong way or left open …); ✓ content lint --dist links passed (97570 internal links in 904 built pages resolve to built files). gen-zh-hant reported generated 47, kept 0 hand-maintained and left the tree clean (no generated file changed).
  • pnpm seo:smoke — exit 0 — SEO smoke test passed (894 HTML pages checked; 583 sitemap URLs against 311 noindexed pages; 5570 canonical/hreflang annotations; 16791 prose blocks language-checked; 97560 internal links redirect-checked).
  • pnpm check and pnpm build ran under the shared verify lock (VERDICT command-exit 0 · held the lock 122s · waited 0s); exit codes were captured before any pipe.

Browser check (Chromium via Playwright, astro preview of the built dist)

/en/ontology/, /en/compare/, /zh-Hans/ontology/, /zh-Hans/compare/ at 1366×625, 1440×750, 390×844 and 360×800 — 96 assertions, 0 failing:

  • no horizontal page overflow at any of the 16 page × viewport pairs (scrollWidth equals innerWidth);
  • the primary CTA ("Point your agent at ObjectStack" / "把你的 Agent 指向 ObjectStack") renders above the fold on all 16 (bottom edge 457–727 px against folds of 625–844);
  • on both phone widths the table sits in a real scroll container (overflow-x: auto, tabindex=0, named by the heading), and with the template's phone cell wrapping both tables fit the viewport outright (scrollWidth equals clientWidth, no scroll needed);
  • the nav entry, the three home chips (/[lang]/compare/#in-depth, anchor present), the compare link and the positioning link resolve 200 in en and zh-Hans; all 46 internal links on the four pages resolve 200.

Looked at: full-page renders of all four pages at 1366 and crops of the phone renders (hero, artifact, category cards, in-depth cards, tables), the home positioning section and #compare section in en and zh-Hans at 1366 and 390, and the open Product menu. One defect found and fixed in the second commit: the artifact diagram's 72-character lines were cut off at 360/390 px; reflowed to 44 characters, re-verified.

Acceptance notes

  • Positioning strings are read from src/lib/positioning.ts everywhere they appear (T1, T2, T3, T4, E1); no paraphrase, no token figure.
  • AGENTS.md §Positioning ("target format and runtime for AI-written enterprise software") predates the positioning; where it disagrees, positioning.ts and the objectstack README were followed, per the card.
  • The derived zh-Hant copy renders 运行时 as 執行時 (OpenCC s2twp); that is the site-wide conversion the positioning module itself already applies to T2 and is not changed here.
  • "Why ObjectOS" in the nav still points at the home #compare section (a documented nav contract in MarketingHome.astro); whether it should point at /[lang]/compare/ directly is a seat decision, not taken here.
  • The commit messages carry the harness-written attribution trailers; the page copy and this body carry no model identifier.

Generated by Claude Code

os-dev and others added 2 commits October 16, 2026 06:59
…not to use it" section

Two marketing pages, en and zh-Hans (the Chinese re-derived from the
objectstack sources, not translated), zh-Hant derived at build time by the
registry. /ontology/ explains the positioning line: the six-kind core, the
four projections, the four guardrails on the word, and the mechanism behind
each of the four promises. /compare/ sets ObjectStack beside the five
categories of objectstack's compare page, keeps its concessions, carries the
"not a fit today" list from when-to-use, and links the site's comparison
posts under their category.

Wiring: nav entry first under Product > Evaluate; the home positioning
section links to /ontology/; the home #compare chips and link go to
/compare/; llms.txt lists both through the registry. The marketing table
takes an optional heading (the side-by-side comparison is not a decision
surface) and page-module links to blog posts localize where the post exists
in the locale.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
The pipeline diagram's 72-character lines were cut off at 360 and 390 px
(the block scrolls, but the right-hand comments were out of view). Every
line is now at most 44 characters, so the diagram fits a phone without a
horizontal scroll. en and zh-Hans.

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

Copy link
Copy Markdown
Contributor Author

席位核对

ACCEPT — repo:www.objectos.ai · seat 2 (session_017GeNDQH7E5S2rX8ajVAPxv), 2026-10-16T07:19Z, on head fb40251. Reviewed against GitHub and the seat's own build, not the report.

Check Result
Shape Draft PR to main. The first line is Fixes #235, the only closing keyword in the body. Assignee os-tesla.
Premise content/pages/en/{ontology,compare}.ts were absent on origin/main 6ada491, as claimed.
File surface 11 files. The 4 page modules are new; the template and nav files are as claimed, and deviations gives a reason for each extension. No governed path (AGENTS.md, .claude/**, .github/workflows/**), no content/docs/releases/.
CI on head Build and deploy: completed/success on fb40251. That run covers check, content:lint --published, build and seo:smoke.
Seat's own build Detached worktree at fb40251, pnpm build under the shared lock: VERDICT command-exit 0, 904 page(s) built, ✓ content lint --dist passed (486 built blog pages checked). Tree clean afterwards.
Browser (seat) /en/ontology/, /zh-Hans/ontology/, /en/compare/, /zh-Hans/compare/ at 1366×625 and 390×844: all 200, scrollWidth == clientWidth on all 8, 0 page errors. The first CTA sits above the fold on all 8 (bottom 457–698 px). The seat looked at full-page renders of en ontology and en compare at 1366, and zh-Hans ontology at 390. Home #compare hrefs: /en/compare/ plus three /en/compare/#in-depth.
Facts spot-checked against objectstack origin/main "read-only by default and early" → content/docs/concepts/ontology.mdx:52. MCP "on by default", objects and exposed actions as tools → README.md:116,165. Constrained JSX "parsed … never executed" → ontology.mdx:77. abstract removed → ontology.mdx:47. "no open-core asterisks", "container-ready" → README.md:209,221. "a day's work" → content/docs/concepts/when-to-use.mdx:65. The size FAQ carries no token figure (#209 Q5).
Positioning H1 = T1 on both pages and in both locales. T2/T3/T4/E1 come from positioning.ts, not retyped.

Accepted deviations: the template's optional table eyebrow and title; locale-aware post links (localized only where that locale's post is built); the siteNav.ontology i18n key, which touches src/lib/i18n.ts in different keys from #255's articles lead (ordinary concurrency); the chip hrefs moved in MarketingHome.astro, which is where they live; llms.txt left untouched because the registry produces its entries.

Follow-ups:

Landing: ready, then squash by the seat. Merge publishes, so the seat follows the change to the deploy run and a live probe.


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 16, 2026 07:20
@os-tesla
os-tesla merged commit a69829e into main Oct 16, 2026
1 check passed
os-tesla pushed a commit that referenced this pull request Oct 16, 2026
… claude/sharp-mendel-1087cg-issue-233

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
os-tesla pushed a commit that referenced this pull request Oct 16, 2026
…pare/ pages; llms.txt Articles line leaves "AI-native"

Patch round on #233's review: `pageSlugs` of the `ontology` term (en, zh-Hans)
now lead with the two pages #258 added on main; the llms.txt Articles entry
describes the blog in the ontology framing.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017GeNDQH7E5S2rX8ajVAPxv
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.

No page explains the positioning: add an /ontology/ pillar page and a /compare/ page with a "when not to use it" section

1 participant