Repository navigation
docs: two positioning pages under Core Concepts — 'How ObjectStack compares' and 'When to use ObjectStack, and when not to' — linked from the ontology page and the concepts index #22240
Description
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentationand removed
on Oct 8, 2026 objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_011hRnra93sK5Q2gTYYTbdJR
Account:hotlong(the seat's linked user asGET /useranswers it; the card's assignee; the maintainer's own session, dispatching on the maintainer's direct instruction)
Branch:claude/issue-22240-compare-when-to-use(cut fromorigin/main3ae59661dc)
Worktree:objectstack-issue-22240
Domain:domain:devx
Seat:domain:devx#2
File surface: content/docs/concepts/compare.mdx (new); content/docs/concepts/when-to-use.mdx (new); content/docs/concepts/meta.json (two entries); content/docs/concepts/ontology.mdx (two pointer sentences); content/docs/concepts/index.mdx (one sentence); scripts/docs-audit/handwritten-docs.json (regenerated by its generator only). ⛔ No packages/, no apps/docs/, no content/blog/, no README.md, no content/docs/references/, no content/docs/releases/**, no CHANGELOG.md, no binaries. Stop on a breach and explain it in the report.
Container & model:M(two new hand-written pages, four wiring edits, one docs build),mode:subagent,model: opus(the default judgment tier; this card's--tierrun printed no path-derived mandate, "floor sonnet · default opus · ceiling fable")
Clause-②: no
Thread-read: none
Serial constraints cleared: board read at 2026-10-08T08:23Z. No open PR touches content/docs/concepts; #22224 and #22232 (both in flight) touch README.md only, which this card does not. The precedent on the same section, #21586 via PR #21591 (concepts/ontology.mdx and the ledger), is closed and landed on main.
Generated by Claude Code
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 22240, "status": "done", "branch": "claude/issue-22240-compare-when-to-use", "pr": "https://github.com/objectstack-ai/objectstack/pull/22247", "session": "session_011hRnra93sK5Q2gTYYTbdJR", "premise_still_valid": true, "summary": "Added content/docs/concepts/compare.mdx (How ObjectStack compares: five kinds, each with what it is / what it is good at / the one difference; a six-row table with the five named columns in short words; an unsoftened Where the others are stronger section; the four-promise sentence with links to concepts/ontology and the blog essay) and content/docs/concepts/when-to-use.mdx (A good fit / Not a fit today / Five questions before you start / What you get and when / Next steps). Wired per Part C: meta.json puts compare and when-to-use after ontology; ontology.mdx gains one pointer sentence closing What it is not and one closing the page; index.mdx gains one sentence in the paragraph at old line 97; handwritten-docs.json regenerated by check-audit-scope --write (+2/-0). Draft PR 22247 is open, labelled skip-changeset, and assigned hotlong; the body was read back byte-identical (6598 bytes). Partial-premise notes are in deviations; the core premise (no compare or fit page exists) held on 3ae59661. Order of the last steps: this comment is posted from the worktree, then node_modules is removed and git worktree remove runs.", "pages": { "content/docs/concepts/compare.mdx": { "body_words_wc": 1074, "description_chars": 155, "title_chars": 64, "navTitle": "How It Compares" }, "content/docs/concepts/when-to-use.mdx": { "body_words_wc": 870, "description_chars": 152, "title_chars": 40, "navTitle": "When to Use It" }, "word_count_method": "awk 'BEGIN{n=0} /^---$/{n++; next} n>=2' FILE | wc -w" }, "files_changed": [ "content/docs/concepts/compare.mdx (new, +125)", "content/docs/concepts/when-to-use.mdx (new, +100)", "content/docs/concepts/meta.json (+2)", "content/docs/concepts/ontology.mdx (+6, two pointer sentences)", "content/docs/concepts/index.mdx (+2, one sentence)", "scripts/docs-audit/handwritten-docs.json (+2, generator-written)" ], "tests": [ "HEAD e0c7be11 (git rev-parse --short HEAD), base 3ae59661dc; packages/** changed: 0 (git diff --name-only BASE HEAD).", "docs build: bash scripts/pm/os-verify-lock.sh -c \"NODE_OPTIONS=--max-old-space-size=4096 pnpm --filter @objectstack/docs build\" on e0c7be11 -> os-verify-lock: VERDICT command-exit 0, held the lock 84s, waited 0s; .next/server/app/en/docs/concepts/compare.html and when-to-use.html emitted. An earlier build on 3e9c89e5 was also VERDICT command-exit 0 (153s).", "prereq builds under lock: spec build VERDICT command-exit 0 (85s); turbo build formula+lint+client+client-react VERDICT command-exit 0 (266s, 34/34 tasks).", "dispatch-gates --commands --repo objectstack-ai/objectstack (no paths, repo and commit e0c7be11 named on stderr) derived 50 commands; all 50 exit 0 on e0c7be11; --ran reconciliation with exit codes: 50 derived, 50 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero).", "PM-named extras outside the derivation, all exit 0 on e0c7be11: pnpm check:docs-locale-catch-all, pnpm check:page-declaration-shape, node scripts/check-docs-nav-label.mjs --self-test, node scripts/check-docs-nav-label.mjs.", "Round 1 on an earlier head: check:doc-formula-expressions, check:doc-security-posture and spec check:skill-examples exit 3 (PREREQUISITE NOT MET, nothing measured), green after the prereq builds; check:role-word exit 1 on the word roles in when-to-use, fixed to the ADR-0090 permission-set vocabulary and green.", "check:docs-audit-scope before regeneration exit 1 naming both new pages, generator --write exit 0, then green.", "Control-character self-scan over both new pages: no match (grep exit 1).", "NOT MEASURED: lychee link check (CI only); Test Core and type-check lanes (no TypeScript touched); the Build Docs CI job itself (the local docs build runs the same package script)." ], "gates": [ "node scripts/check-ci-filter-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0", "node scripts/check-comment-mask-corpus.mjs :: exit 0", "node scripts/check-doc-frontmatter.mjs :: exit 0", "node scripts/check-doc-frontmatter.mjs --self-test :: exit 0", "node scripts/check-doc-route-spelling.mjs --advisory :: exit 0", "node scripts/check-doc-route-spelling.mjs --self-test :: exit 0", "node scripts/check-docs-section-name.mjs :: exit 0", "node scripts/check-docs-section-name.mjs --self-test :: exit 0", "node scripts/check-scripts-symbol-anchors.mjs :: exit 0", "node scripts/check-scripts-symbol-anchors.mjs --self-test :: exit 0", "node scripts/check-section-landing-index.mjs :: exit 0", "node scripts/check-section-landing-index.mjs --self-test :: exit 0", "node scripts/docs-audit/check-affected-docs.mjs :: exit 0", "node scripts/docs-audit/check-drift-comment.mjs :: exit 0", "pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0", "pnpm --filter @objectstack/lint run check:doc-security-posture :: exit 0", "pnpm --filter @objectstack/spec run check:docs :: exit 0", "pnpm --filter @objectstack/spec run check:empty-state :: exit 0", "pnpm --filter @objectstack/spec run check:liveness :: exit 0", "pnpm --filter @objectstack/spec run check:skill-examples :: exit 0", "pnpm --filter @objectstack/spec run check:strictness-ledger :: exit 0", "pnpm --filter @objectstack/spec run check:variant-docs :: exit 0", "pnpm --filter @objectstack/spec run check:yaml-examples :: exit 0", "pnpm check:agent-test-spelling :: exit 0", "pnpm check:bash32-floor :: exit 0", "pnpm check:cli-command-ids :: exit 0", "pnpm check:corpus-claim-drift :: exit 0", "pnpm check:cross-package-test-inputs :: exit 0", "pnpm check:doc-anchors :: exit 0", "pnpm check:doc-authoring :: exit 0", "pnpm check:docs-audit-scope :: exit 0", "pnpm check:docs-redirects :: exit 0", "pnpm check:docs-single-h1 :: exit 0", "pnpm check:docs-spec-enumerations :: exit 0", "pnpm check:docs-transcript-drift :: exit 0", "pnpm check:driver-memory-census :: exit 0", "pnpm check:entry-guard :: exit 0", "pnpm check:gitlink-declared :: exit 0", "pnpm check:nul-bytes :: exit 0", "pnpm check:parse-guard :: exit 0", "pnpm check:pnpm-filter-targets :: exit 0", "pnpm check:published-readme-links :: exit 0", "pnpm check:react-page-adapter-contract :: exit 0", "pnpm check:refd-timer-probe :: exit 0", "pnpm check:role-word :: exit 0", "pnpm check:skill-identifier-liveness :: exit 0", "pnpm check:vendor-version-stamps :: exit 0", "pnpm check:watch-hint-literal :: exit 0", "pnpm check:docs-locale-catch-all :: exit 0", "pnpm check:page-declaration-shape :: exit 0", "node scripts/check-docs-nav-label.mjs --self-test :: exit 0", "node scripts/check-docs-nav-label.mjs :: exit 0" ], "dropped_vendor_facts": [ "Operational ontologies: open-source reference implementations of the same pattern exist -- dropped, not traceable to a named public source.", "Metadata platforms: most of which added MCP servers in 2025 and 2026 -- narrowed to Several of them now offer MCP servers (public docs confirm Salesforce hosted MCP servers, NocoBase MCP plugin, Twenty MCP marked alpha, Payload MCP plugin, Frappe experimental MCP package; no first-party Odoo server found; dates not confirmed for all).", "Metadata platforms: their metadata is configuration held in a database and authored in a UI -- narrowed to In most of these platforms, with Payload Config and Odoo modules named as the code-configured exceptions.", "AWS Context: named as an example without availability status (public sources disagree on preview vs GA).", "Microsoft Fabric IQ: kept as in preview behind As of late 2026 (Learn overview marks the Ontology item preview)." ], "deviations": [ "CRM size: the card allows the example CRM size as the ontology page states it; concepts/ontology states none. The figure lives on concepts/metadata-driven and getting-started/how-ai-development-works (1,792 lines / 31 files) and has drifted (the page command on 3ae59661 prints 1,929 lines / 31 files). when-to-use therefore states no number and links to the metadata-driven measurement section.", "Try it: the card says quick-start; that page calls itself the map, not a starting point. Try it links getting-started/build-with-claude-code, with quick-start (Anatomy of an ObjectStack App) linked beside it.", "Opening paragraph: two of the five card sections (metadata platforms, AI code generation) do not use the word ontology, so the opening says three that use the word and two that answer the same question without it, instead of four kinds of ontology plus a fifth.", "Vendor research: 12 WebSearch reads; WebFetch to vendor domains failed DNS in this container (2 attempts), so the vendor facts rest on search-result excerpts of the vendors own documentation pages." ], "mcp_calls": "0 -- no MCP GitHub tool used. Reads went over REST (gh api: issue 22240, its comments, PR 22247, PR 22247 files).", "api_writes": "3 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches) executing 4 writes as objectstack-fleet[bot]: POST /repos/objectstack-ai/objectstack/pulls (draft PR 22247); POST /issues/22247/labels (skip-changeset) and POST /issues/22247/assignees (hotlong) in one label-write; POST /issues/22240/comments (this os-dev-report). Plus 5 git pushes (empty-branch probe and 4 commits), which are not REST writes.", "open_questions": [], "out_of_scope_findings": [ "class: a · reach: public docs page concepts/metadata-driven section 4 tells the reader to Count it yourself with find examples/app-crm/src -name *.ts -not -name *.test.ts | xargs cat | wc -l; on main 3ae59661 that prints 1929 while the page states 1,792 (files still 31); the same 1,792 lines / 16k tokens figure is on getting-started/how-ai-development-works line 37 · evidence: command output 1929 vs table row Lines 1,792 at metadata-driven.mdx line 232 · dedupe words: app-crm 1,792 lines; Count it yourself; example CRM size drift; context window 8%", "carrier: none for the two blog posts (content/blog/context-window-is-the-constraint.mdx, the-ontology-is-the-software.mdx carry the same dated figure) · noted, not filed -- dated essays, not current-state docs" ] }objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsReview: ACCEPT — PR #22247 at head
e0c7be11Seat
domain:devx#2·session_011hRnra93sK5Q2gTYYTbdJR· reviewed against GitHub and the fetched branch at 2026-10-08T09:13Z, not against the report.PR shape. Draft, base
main, body opensFixes #22240,Clause-②: noat line start, session-URL footer, no model identifier in body or commits (four commits, model-free trailers). Labels documentation · size/m · skip-changeset; assignee matches the card. 6 files, +237 / −0.node scripts/pm/check-governed-merges.mjs --pr 22247: 0 of 6 paths governed, 237 changed lines, under the human-merge threshold.Scope and wiring, exactly the card's Part C.
content/docs/concepts/compare.mdx(new, +125) andwhen-to-use.mdx(new, +100);meta.jsongainscompareandwhen-to-useafterontology;ontology.mdxgains one sentence closing "What it is not" and one closing the page, nothing else;index.mdxgains one sentence in the paragraph that introduces the ontology;scripts/docs-audit/handwritten-docs.json+2 / −0, generator-written. Nopackages/**,apps/docs/**,content/blog/**,README.md,content/docs/references/**,content/docs/releases/**, CHANGELOG, binaries.skip-changesetholds: nothing publishes.Part A, read sentence by sentence against the card. The five kinds in the card's order, each with what it is, what it is good at, and the one difference. Vendor rule kept: categories first, products as examples; "As of late 2026" on the semantic-layer list with Fabric IQ marked preview; Palantir described only by action types and writeback as its public documentation describes them; the metadata-platform MCP sentence narrowed to "Several of them now offer MCP servers"; no star counts, market claims, analyst or consulting-firm quotes, "the only" or "the first". Table: five kinds plus ObjectStack, the five columns, short words, one line saying each cell reads a category as a whole. "Where the others are stronger" carries all four items and is not softened (federation "early and read-only by default; not a way to put one model over an existing estate"; a reasoner "ObjectStack has none"; "expect to build more of it yourself"). Closes on the four-promise sentence as
concepts/ontologystates it, linking the ontology page, the blog essay andwhen-to-use.Part B, same. A good fit (the card's five), Not a fit today (the card's five, each with its reason), Five questions (the five parts, then "The first investment is answering these five questions, not installing anything"), What you get and when (first weeks / after a year / later, the card's items), Next steps (Try it, examples, ontology, compare). No number on the page: the CRM size is a link to the measurement section, not a figure.
Facts about ObjectStack, re-checked on the branch. Federation read-only by default with the double opt-in on datasource and object (
external-datasources.mdx, section 5). MCP on by default (connect-mcp.mdx, line 9).os validateas the gate (ontology.mdx). "A small readable diff in the Console" is the README's own wording (line 175). Apache-2.0 (LICENSE, rootpackage.json). All ten link targets exist on the branch, and#4-small-enough-to-fit-in-an-agents-contextresolves to the heading atmetadata-driven.mdxline 220. Descriptions 155 and 152 characters, inside the 110 to 160 range;titleandnavTitleon both pages.Gates. The report's 50 derived commands all exit 0,
--ranreconciliation "50 derived, 50 run, 0 NOT-MEASURED, 0 UNRUN", docs build under the verify lock exit 0 with both routes emitted; thecheck:role-wordfailure on an earlier head was fixed by the permission-set vocabulary. CI one0c7be11: Build Docs and Check Documentation Links green, 22 success, 10 expected skips, 3 still in progress at this review (Test Core 1/6, Lint & Repo Gates, Type Check · workspace); landing waits for them and forcheck-expected-skips.mjs --pr 22247.Out-of-scope findings and Acceptance notes from the report.
- Measured CRM size drifted: three pages say 1,792 lines across 31 files, the page's own command prints 1,929 on main (re-measured by this seat on
31cd2104) → filed docs: the example CRM size stated on three pages (1,792 lines across 31 files) has drifted — the pages' own count command prints 1,929 lines on main #22248 (class a, reach measured; one card for all three locations, the blog post included). - "Try it" links Build with Claude Code first, with the quick-start page beside it, because the quick-start page calls itself the map → Acceptance notes, accepted.
- Opening paragraph says "three that use the word and two that answer the same question without it" rather than "four kinds and a fifth", because two of the card's five sections do not use the word → Acceptance notes, accepted; the card's own item 2 lists five.
- Five vendor facts dropped or narrowed under the card's drop-rather-than-guess rule (open-source operational-ontology implementations; "most added MCP servers in 2025 and 2026"; "configuration held in a database" not true of Payload or Odoo; AWS Context availability; Fabric IQ preview kept behind the date hedge) → accepted as written.
Contract review: not owed (hand-written docs under
content/docs/concepts/and the audit ledger; no spec or metadata contract touched).
Generated by Claude Code
- Measured CRM size drifted: three pages say 1,792 lines across 31 files, the page's own command prints 1,929 on main (re-measured by this seat on
objectstack-fleet commented
on Oct 8, 2026 ContributorAuthorMore actionsLanded — PR #22247 merged as
335c4737Seat
domain:devx#2·session_011hRnra93sK5Q2gTYYTbdJR· verified onorigin/mainat 2026-10-08T10:02Z.Verified on main.
content/docs/concepts/compare.mdxandcontent/docs/concepts/when-to-use.mdxare byte-identical to the reviewed heade0c7be11.meta.jsonlistscompareandwhen-to-use, andscripts/docs-audit/handwritten-docs.jsonregisters both pages (the ledger and the three wired pages were compared by content, since main's copies may carry other landings). The two routes are/docs/concepts/compare("How It Compares") and/docs/concepts/when-to-use("When to Use It"), reachable from the ontology page and the concepts index. The card closed on the merge;pm:dispatchedleaves with this comment.Finding filed from this card's report: #22248 — the example CRM size stated on three pages (1,792 lines across 31 files) has drifted; the pages' own count command prints 1,929 on main. Awaiting first grading. The new pages carry no number for that reason and link to the measurement section instead.
Still the maintainer's, outside this card: where the pages are surfaced beyond the docs nav (README's "and who it is not for" line, the home page), and the open blog decisions from the session.
Generated by Claude Code
- added a commit that references this issue
on Oct 9, 2026
立卡门类别 ③ — 维护者直派的任务 (maintainer-directed task).
Maintainer ruling (verbatim, untranslated)
Given in session https://claude.ai/code/session_011hRnra93sK5Q2gTYYTbdJR on 2026-10-08. The pages are English only; Chinese readers are served by objectos.ai, which this card does not touch.
Why
The docs site states what the ontology is (concepts/ontology, landed by #21586) and argues it (the blog essay, #21838), but a visitor who arrives asking "how is this different from Palantir, from a semantic layer, from low-code" or "is this for me" finds no page that answers either. Those are the two questions the project's positioning work keeps meeting, and the two searches ("palantir alternative", "ontology for AI agents", "when to use") that currently land nowhere on objectstack.ai. This card adds one page for each, as hand-written docs in the Core Concepts section.
Part A. content/docs/concepts/compare.mdx — How ObjectStack compares
Audience: a technical reader deciding what kind of thing this is. Tone: the README's, factual, specific, no superlatives. Structure:
Rules for naming others: use public product names as their vendors spell them; state only what their public documentation says, in present tense, hedged with "as of late 2026" where status is changing (Fabric IQ Ontology was in preview in September 2026); no star counts, no market claims, no analyst or consulting-firm quotes, no "the only" or "the first" claims about ObjectStack; describe categories first and name products as examples. Where unsure of a vendor fact, drop the fact rather than guess.
Part B. content/docs/concepts/when-to-use.mdx — When to use ObjectStack, and when not to
Audience: a reader deciding whether to start. Structure:
Part C. Wiring
Guardrails for the author
Non-goals
Who acts
domain:devx lane, this seat, one os-dev dispatch at the default tier, one docs-only draft PR. Base is origin/main at 3ae5966. Precedent on the same section: #21586 via PR #21591 added concepts/ontology.mdx and registered it in the ledger.
Duplicate check (2026-10-08, open and closed)
sharing.publicLinkreads as the "Generated public share URL" but is only a slug — the authored path (/forms/contact-us) answers 404, and the real anonymous URL (/_console/f/<slug>) is shown to the author nowhere #22079, qa:os testprints suite and scenario names, filters bytags, and skips on unmetrequires(5 keys) #20289, docs content: meta descriptions too thin to serve as snippets — median 46 chars, 228 of 403 under 70 #12238 (thin meta descriptions, closed; its rule is applied in Part C), service-datasource: onobjectstack startthe federation service reads ametadataservice it captured at init, before that service registers —external/validateanswers no rows and the boot gate checks zero federated objects #21876, docs: publish 'The Ontology Is the Software' on the blog, add a Blog entry to the docs nav and home, point README's 'Read why' at it, and bridge the two 2024 posts #21838 (the blog, closed), runtime strings in thedomain:specpackages carry tracker numbers (spec175 andlint83 messages): this lane's share of the #20513 A/A burn-down #20749. None adds a fit or comparison page.Generated by Claude Code