Repository navigation
No page explains the positioning: add an /ontology/ pillar page and a /compare/ page with a "when not to use it" section #235
Description
Filing-gate category: ③ maintainer-directed task. The maintainer, in the PM session chat on 2026-10-15, on the seat's evaluation that proposed these two pages: 「立卡处理」.
Who acts: the repo:www.objectos.ai seat (objectstack-ai/objectstack#12224), at its next dispatch; one dev per page if the seat prefers.
Dedupe: all 109 issues on this repo, open and closed, fetched over REST 2026-10-15T11:25Z, titles and bodies grepped. /ontology/|ontology page|pillar page: 1 hit (#219, inbound links to the existing cluster pillars — not a new page). /compare/|compare page|when.to.use: 0 hits.
Dispatch tier: ceiling (CONTRACT_REVIEW_TIER) — reason: positioning copy, under the dispatch-tier ruling quoted on #209 (2026-10-05).
Why
The site states the positioning in one line (positioning.ts T1) and never explains it. Readings on origin/main 53764e0, 2026-10-15T11:27Z: the only places that say what an executable ontology is are content/glossary/en/ontology.ts (one paragraph) and src/pages/llms.txt.ts:67 (one sentence). There is no comparison page either: the home #compare section links three blog posts, against Airtable, Retool and Lovable.
objectstack added both pages on 2026-10-08 (335c4737): content/docs/concepts/compare.mdx and content/docs/concepts/when-to-use.mdx.
Page 1 — /[lang]/ontology/
What an executable business ontology is, written for both readers: the person who chooses and the agent that writes. Source of truth is objectstack origin/main 1ced0f82: content/docs/concepts/ontology.mdx, README.md:79-217, and the three sentences of objectstack.ai's "00 · The idea" section (apps/docs/app/[lang]/page.tsx:127-131).
- The six kinds: objects and fields, relations, actions, permissions, flows, agent and tool definitions.
- Projections: views, dashboards, apps, translations.
- What it is not — all four guardrails (objectstack commit
d2e687fd). - The four promises, each with the mechanism that keeps it: Executable, AI-writable, Agent-operable, You own it.
- "You own it" states the mechanism only: files in your repo, Apache-2.0, self-hosting. objectstack's own roadmap still lists whole-ontology export as unverified (
docs/NORTH-STAR.md:96), so no "one-click export" claim.
Navigation: first entry under Product → Evaluate. Linked from the home positioning section, the glossary ontology term and llms.txt.
Page 2 — /[lang]/compare/
- The five categories as objectstack's compare page sets them: knowledge ontologies (RDF/OWL), semantic and context layers, operational ontologies (Palantir), metadata-driven platforms, AI code generation.
- The concessions objectstack makes (
compare.mdx:101-117), kept. - A "When not to use it" section from
when-to-use.mdx: core ERP, integration-heavy work, data lakes, certified platforms. - The existing comparison posts linked under their category.
- The home
#comparechips retargeted to this page.
Constraints
- Positioning text comes from
src/lib/positioning.ts, never paraphrased. No token figures (Adopt objectstack's 2026-10-03 positioning across www.objectos.ai: copy changes, five posts, an update sweep #209 Q5). - en and zh-Hans authored, re-derived rather than translated; zh-Hant generated; other locales follow the existing fallback rule.
- Hot files shared with in-flight work:
src/lib/home.ts(Non-blog copy sweep beyond #209: retired token figures, old descriptors, the "works on your existing systems" overclaim, no README agent path, templated capability FAQs, an authoring placeholder heading #222, Layout design debt on the marketing template: CTA below the laptop fold on 14 of 15 pages, CJK headline word splits, lone cards in fixed 3-column grids, phone-width decision tables cut off #223, Home video poster: the eyebrow and sub-line have no translations — eyebrow shows English on every locale, sub-line is omitted outside en #232),src/components/Header.astroandsrc/pages/llms.txt.ts(Non-blog copy sweep beyond #209: retired token figures, old descriptors, the "works on your existing systems" overclaim, no README agent path, templated capability FAQs, an authoring placeholder heading #222). Land the new page files first; the nav, home and llms.txt links go last, after those PRs. - A page on editions and ownership (ObjectStack vs ObjectOS) is not on this card. It waits for [Decision] Pricing headline: www shows $20 / $45 per AI seat "billed annually (about two months free)", docs License & Pricing shows $24 / $54 per month with no annual price — which is the source, and is the annual discount real? #214 and [Decision] Where does "Get started" go? Neither site has an ObjectOS Cloud signup URL, so every plan CTA loops www → docs → www #215 and is recorded on Post (slot Thu 2026-10-22): Who Owns the Business Ontology When the Platform Is Hosted? ObjectStack vs ObjectOS, Stated Plainly #231.
- For the dev:
AGENTS.md§Positioning predates this positioning (Adopt objectstack's 2026-10-03 positioning across www.objectos.ai: copy changes, five posts, an update sweep #209 item 5). Where they disagree,positioning.tsand the objectstack README win.
Done looks like
- Every factual line cites its objectstack source in the PR body.
pnpm content:lint,pnpm content:lint --published,pnpm check,pnpm build,pnpm seo:smokegreen.- Both pages browser-checked at the seat's viewports, in en and zh-Hans.
Activity
objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop round 1
Session:
session_017GeNDQH7E5S2rX8ajVAPxvAccount:
os-teslaBranch:
claude/sharp-mendel-1087cg-issue-235Worktree:
www.objectos.ai-issue-235Domain: none — single-lane repo (
repo:www.objectos.ai)Seat:
repo:www.objectos.ai#2File surface: new
content/pages/{en,zh-Hans}/{ontology,compare}.ts,src/content-pages/registry.ts,src/components/Header.astro(nav entry),src/lib/home.ts(#comparechips only),src/pages/llms.txt.ts(page entries only), generated zh-Hant output (stop on breach; explain in the report)Container & model:
M,mode:subagent,model: CONTRACT_REVIEW_TIER— reason: the maintainer's 2026-10-15 ruling that article cards dispatch at the ceiling tier, and #209's dispatch-tier ruling for positioning copy (2026-10-05)Clause-②: no
Responsibility:
n/a — not a defect cardThread-read: none
Serial constraints cleared: #233 (seat 2, same round) shares
src/lib/home.tsandsrc/pages/llms.txt.ts— ordinary concurrency, the later lander mergesmain; no open seat-1 PR touches this surface (#237 #244 #245 arecontent/blog/**, #255 isArticleList.astro+i18n.ts; files read 2026-10-16T06:33Z). Premise:content/pages/en/ontology.tsandcompare.tsabsent onorigin/main6ada491.objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 235, "status": "done", "branch": "claude/sharp-mendel-1087cg-issue-235", "pr": "https://github.com/objectstack-ai/www.objectos.ai/pull/258", "session": "session_017GeNDQH7E5S2rX8ajVAPxv", "premise_still_valid": true, "summary": "Premise re-read on origin/main 6ada491: content/pages/en/ontology.ts and compare.ts absent, home #compare chips still pointing at three blog posts, nav Evaluate group without an ontology entry. Landed two marketing pages in en and zh-Hans (Chinese re-derived from the objectstack sources, zh-Hant derived by the registry, other locales on the English fallback): /[lang]/ontology/ (six-kind core, four projections, the four guardrails of objectstack commit d2e687fd, the four promises each with its mechanism, You own it as mechanism only, T1/T2/T3/T4/E1 quoted from positioning.ts) and /[lang]/compare/ (the five categories, side-by-side table and the four concessions of compare.mdx, the Not-a-fit-today list and five questions of when-to-use.mdx, nine of the site's comparison posts filed under their category). Wiring: Ontology first under Product → Evaluate in every locale, a positioning-section link on the home, the #compare chips to /[lang]/compare/#in-depth and the section link to /[lang]/compare/, llms.txt lists both through the registry. Every factual line is cited to objectstack origin/main 1ecb08a1 path+line in the PR body. Draft PR #258, assignee os-tesla, head fb40251.", "tests": "All on head fb40251 after the last commit, exit codes captured before any pipe. pnpm content:lint exit 0 and pnpm content:lint --published exit 0: '✓ content lint passed (347 files, 44 glossary terms checked)' (12 snippet-width warnings are on the #212 post, not on touched files). pnpm check exit 0: 'Result (158 files): 0 errors, 0 warnings, 0 hints'. pnpm build exit 0 (gen-zh-hant 'generated 47, kept 0 hand-maintained', tree clean after; '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)'). 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)'. Browser check (Playwright + /opt/pw-browsers/chromium against astro preview of the built dist): /en/ontology/, /en/compare/, /zh-Hans/ontology/, /zh-Hans/compare/ at 1366x625, 1440x750, 390x844, 360x800 — 96 assertions, 0 failing: scrollWidth equals innerWidth on all 16 pairs; primary CTA above the fold on all 16 (bottom 457–727 px vs folds 625–844); on both phone widths the table sits in a real scroll container (overflow-x auto, tabindex 0) and fits outright after the template's cell wrapping; nav entry, three home chips (anchor #in-depth present), compare link and positioning link resolve 200 in en and zh-Hans; all 46 internal links on the four pages resolve 200. Screenshots looked at: full pages at 1366, phone crops (hero, artifact, cards, in-depth, tables), home positioning and #compare sections at 1366 and 390 in both locales, the open Product menu. One defect found in the first round and fixed in commit fb40251: the artifact diagram's 72-char lines were cut at 360/390 px; reflowed to 44 chars and re-verified on the rebuilt dist. No ablation: this repo has no unit tests and no tested behaviour changed (content modules plus two additive template options).", "gates": "Local subset, hand-derived from this repo's package.json per the dispatch (objectstack's dispatch-gates.mjs does not cover www.objectos.ai, so no --ran reconciliation exists here): content:lint 0 · content:lint --published 0 · check 0 · build 0 · seo:smoke 0, all at fb40251; check and build ran under the shared lock as slot www-235 ('VERDICT command-exit 0 · held the lock 122s · waited 0s'). CI: the repo's one workflow, cloudflare-pages.yml, check-run 'Build and deploy' status in_progress, conclusion null on fb40251 at report time (read via GET check-runs); not waited for, per the role file. Browser check as in tests.", "mcp_calls": "0 — no MCP GitHub tool was called; reads were gh api GET (issue 235, its comments, pulls/258, commits/fb40251/check-runs).", "api_writes": "2 relay strokes through scripts/pm/fleet-write/dispatch.mjs (route auto → dispatch, run 38865514873 success for the first): (1) pr_create = POST /repos/objectstack-ai/www.objectos.ai/pulls (draft) + its assignee leg POST /repos/objectstack-ai/www.objectos.ai/issues/258/assignees (read-back: 11551 bytes sent, 11551 stored, assignees os-tesla); (2) this report = POST /repos/objectstack-ai/www.objectos.ai/issues/235/comments. git push ×3 (empty-branch probe, ab4e800, fb40251) are git, not REST. No label writes, no PATCH, no issue creation.", "deviations": "File surface extended, each with the producer reason: src/content-pages/types.ts + src/components/MarketingEvidencePage.astro — MarketingPageTable gains optional eyebrow/title (the fixed 'Decision surface' heading is wrong over a side-by-side category table; ontology keeps the default) and localizeHref localizes /en/blog/SLUG/ links to the reader's locale only where that locale's post is built (measured in dist: zh-Hans → /zh-Hans/blog/ for 7 posts and /en/blog/ for the 2 English-only ones, zh-Hant → /zh-Hant/blog/, ja fallback → /en/blog/); src/lib/i18n.ts — siteNav.ontology in 7 authored locales + s2t, because every nav label is an i18n string, not the page's navLabel (#255 also edits i18n.ts: ordinary concurrency, later lander merges main); src/components/MarketingHome.astro — the chip hrefs live there (compareLinks), not in home.ts, plus the positioning link markup and a 4-line CSS rule; src/lib/home.ts — positioningLink in 7 locales. src/pages/llms.txt.ts untouched: the registry is the producer and both pages appear under Primary Pages in the built llms.txt. content/glossary untouched (#233 holds it). The two commits carry the harness-written attribution trailers (Co-Authored-By with a model name, Claude-Session); page copy and PR body carry no model identifier; reported, not rewritten. Scratchpad isolated under scratchpad/issue-235/. Preview server (port 4723) and lock runs started by me are stopped; no monitors left.", "files_changed": "content/pages/en/ontology.ts (new), content/pages/en/compare.ts (new), content/pages/zh-Hans/ontology.ts (new), content/pages/zh-Hans/compare.ts (new), src/content-pages/registry.ts (PAGE_ORDER), src/content-pages/types.ts, src/components/MarketingEvidencePage.astro, src/components/Header.astro, src/components/MarketingHome.astro, src/lib/home.ts, src/lib/i18n.ts — 11 files, +972/−11; no generated zh-Hant file changed (marketing zh-Hant is derived at build time, not written to disk).", "line_budget": "n/a", "open_questions": [ { "question": "Should the nav entry 'Why ObjectOS' (Product → Evaluate) point at /[lang]/compare/ directly, instead of the home #compare section whose chips now lead there (two hops)?", "options": [ "A — keep as is: the home section stays the nav contract documented in MarketingHome.astro; /compare/ is reached from the chips, the section link, the ontology page's secondary CTA, every page's next-links and llms.txt", "B — retarget whyObjectOs to marketingPagePath(locale, 'compare') and drop the id=compare nav-contract comment; one line in Header.astro, no copy change", "C — add a second Evaluate entry 'How it compares' beside Ontology and leave 'Why ObjectOS' alone (one more i18n key in 7 locales)" ], "recommendation": "B, when the seat touches Header.astro next: real need — a reader opening 'Why ObjectOS' wants the comparison, and the page now exists; long-run — one page as the comparison's home beats a home-section hop; AI-error axis — n/a (nav copy, not metadata); focus — zero new surface, one href. Not done here because the card named only the ontology nav entry and the home section's id is a documented contract." } ], "out_of_scope_findings": [ "follow-up for the seat (not a defect): content/glossary/*/ontology.ts pageSlugs should add 'ontology' and 'compare' so the glossary term links to the pillar — carrier: #233 (holds that file this round) or the seat after it lands; dedupe words: glossary ontology pageSlugs pillar link", "noted, not filed: the derived zh-Hant copy renders 运行时 as 執行時 (OpenCC s2twp) wherever positioning T2 appears, home hero included — site-wide behaviour of src/lib/positioning.ts zhHant = s2t(zhHans), pre-existing, a localization choice rather than a defect; carrier: none", "noted, not filed: pnpm content:lint prints 12 snippet-width warnings (title over 60 columns, description over 160) on content/blog/what-does-the-ontology-is-the-software-mean/ in all seven locales, landed in #212 on 2026-10-15; warnings, not errors; carrier: none" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Landed and live · 2026-10-16T07:22Z
a69829e(pinned to headfb40251), merged by seat 2. Seat record: PR comment 6210272944 (ACCEPT → PR #258 comment 6210272944)origin/maina69829econtent(pages): an /ontology/ pillar page and a /compare/ page … (#258)mainDeploy to Cloudflare Pages:completed/successona69829ewww.objectos.aiis refused by this container's egress (CONNECT 403). The deploy run's conclusion is the reading.State: closed
completedbyFixes #235;pm:dispatchedremoved. Follow-up (the glossaryontologyterm linking to/ontology/and/compare/) is in #233's patch round on PR #259.Generated by Claude Code