Skip to content

Edition model: ObjectOS is one product in three editions — Community (open-source runtime, free), Cloud, Enterprise; ObjectStack is the protocol and SDK. Rewrite README, Editions, License & Pricing, TRADEMARK.md (ruling 2026-10-26) #338

Closed

Description

@objectstack-fleet

Filing gate ③: a maintainer-directed task. Maintainer (Sam, os-zhuang), 2026-10-26, verbatim: 「还是 ObjectStack 的运行时就叫 ObjectOS ,社区版免费,然后企业版是收费的」, then chose 「模型 2:ObjectOS 三版本」 on the decision card 「采用「ObjectOS 一个产品三个版本,ObjectStack 是协议与框架名」吗?」 (13:18Z), after 「同意,派卡处理」 on the README / brand evaluation. Business reason: the sales material and the price list can then say one thing — buyers of the China self-managed channel hear "ObjectOS 企业版" and self-hosters arrive at Cloud under the same name; today this repository says "There is no open-source edition of ObjectOS" while every npx os dev --ui shows the ObjectOS wordmark. Reader: the repo:objectos seat dispatches one dev; file surface README.md, TRADEMARK.md, content/docs/ pages that state editions (resources/license.mdx and the Deploy / Operate pages that call the image "licensed"). Dedupe: this repository's issues searched for "editions community open source README trademark" → 6 hits: #295 (closed decision: the self-managed edition is named "ObjectOS Enterprise" — kept), #59 (closed: Deploy rewritten for the commercial runtime — this card adds Community beside it, it does not restore the retired @objectos/server), #253 (closed: "the runtime image" named two images — the two names now become Community vs Enterprise), #300 (open, pm:blocked: no getting-started path for ObjectOS itself — this card gives that path a name; the seat decides whether #300 folds in), #334 (open decision, unrelated facts). Session session_01FMuBZmssbfQkVrKRtxNvng; sibling cards: objectstack-ai/objectstack (hosted-product name in CLI / Console i18n, Powered-by corner; root README #26129), objectstack-ai/www.objectos.ai#285 (pricing gains a Community column).

The model, as ruled

Thing Name Terms
The protocol, SDK, CLI and framework code (@objectstack/*, the objectstack repository, objectstack.ai docs) ObjectStack Apache-2.0
The open-source runtime + Console that run an app — today's ghcr.io/objectstack-ai/objectstack image and os start ObjectOS Community Free, Apache-2.0; code stays in the objectstack repository
The hosted service (cloud.objectos.ai) ObjectOS Cloud Free / Team (D2, 2026-10-24)
The self-managed licensed edition ObjectOS Enterprise Licensed (D2; #295 naming kept)

What Community has: the runtime, the Console, permissions and sharing, audit, MCP, every protocol capability — everything needed to run an app. What Cloud and Enterprise add: hosting and multi-environment operations, Build & Ask (the AI Builder), SSO, commercial support. The dividing line is unchanged; it is only written down now.

Scope

  1. README.md — the lead keeps "Build & ask online. Keep the data you own." and "The ontology is the software."; the paragraph "ObjectOS is a commercial product … There is no open-source edition of ObjectOS." becomes the three-edition table above with one sentence per edition; "Editions" becomes Community / Cloud (Free · Team) / Enterprise (D2 three columns; Business and Business Self-Managed stay as contract options under Enterprise, per [Decision] One name for the self-managed edition: "ObjectOS Enterprise" (positioning, 8 pages) vs "ObjectOS Self-Managed" with Business single-node and Enterprise under it (License & Pricing, Deploy) #295 and www.objectos.ai#285); "Building and running your own apps? That's ObjectStack — and it's open source" becomes "Run it yourself: ObjectOS Community" and keeps the os start / Docker lines; "What happened to the code that used to live here?" shrinks to two sentences (the 2026-07 @objectos/server retirement and the archive branch stay as facts; the sentence "There is no open-source edition" goes).
  2. TRADEMARK.md — add one clause: the ObjectOS Community runtime distributed from the objectstack repository carries the ObjectOS name and logo; running it for yourself keeps the name, redistributing a modified build does not (the existing MAY / MAY NOT lines already say this for "unmodified builds" — make Community the named case).
  3. content/docs — resources/license.mdx and any page that says "the licensed ObjectOS image" or "there is no open-source edition" (grep both phrases; [finding] "the runtime image" names two different images across the docs corpus — Deploy means the licensed ObjectOS image, resources/license.mdx means the Apache-2.0 framework image #253 lists the pages): state the edition by name. No new pages; There is no getting-started path for ObjectOS itself: Quickstart boots the open runtime, Deploy/Operate are not marked self-managed, and License & Pricing is buried #300's getting-started path is a separate decision for the seat.
  4. Not in this card — pricing numbers (www.objectos.ai#285 and cloud docs/design/pricing.md); the objectstack repository's own copy (its cards); the organisation profile (maintainer's hand).

Premises (re-check before dispatch)

  • P1 — grep -n "no open-source edition" README.md → 1 hit.
  • P2 — grep -rln "licensed ObjectOS image\|no open-source edition" content/docs | wc -l → the page list for step 3 (record the number in the claim).
  • P3 — grep -n "unmodified builds" TRADEMARK.md → 1 hit (the clause to extend).

Acceptance

  • README shows the three-edition table; the phrase "no open-source edition" does not occur anywhere in the repository (git grep -i "no open-source edition" → 0).
  • pnpm docs:build green; every locale's derived pages regenerate per AGENTS.md (English is the source).
  • TRADEMARK.md names ObjectOS Community.

维护者速读

按你 13:18 的裁决:ObjectOS 是一个产品三个版本(Community 开源免费 / Cloud / Enterprise),ObjectStack 是协议与 SDK 的名字。本卡只改 objectos 仓的文案:README 删「没有开源版」改三版本表;商标政策加 Community 条款;文档里「licensed image / no open-source edition」的页面改成按版本称呼。代码不动。

Activity

  1. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Filing audit · 2026-10-26T13:30Z · session_01FMuBZmssbfQkVrKRtxNvng · ⛔ not a claim, not a dispatch.

    Triage: lands in README.md, TRADEMARK.md, content/docs/** (this repository's own corpus; domain:docs); rationale: filing gate ③, the maintainer's ruling of 2026-10-26 13:18Z (「模型 2:ObjectOS 三版本」) quoted in the body; labels at filing are the filer's suggestion, the repo:objectos seat grades (this repository has only priority:p0, so no priority label). Dedupe hits are in the body (#295 closed, #59 closed, #253 closed, #300 open pm:blocked, #334 open decision). Two notes for the seat: (1) #300 ("no getting-started path for ObjectOS itself") is answered by this model — the Quickstart that boots the open runtime is the Community quickstart; the seat decides whether #300 folds into this card or closes as superseded. (2) The maintainer is considering renaming this repository to docs.objectos.ai (chat, 13:25Z–13:28Z, not yet done); a rename redirects and changes nothing in this card. Siblings: objectstack-ai/objectstack#26136 (hosted-product name + Powered-by mark), objectstack-ai/objectstack#26129 (root README, scope comment), objectstack-ai/www.objectos.ai#285 (Community column, scope comment).


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · 2026-10-26T13:59Z
    Session: session_01FMuBZmssbfQkVrKRtxNvng (project thread; maintainer-directed — Sam, 2026-10-26 13:38Z, verbatim 「相关卡片都归你派发处理落地」)
    Account: os-zhuang
    Branch: claude/issue-338-edition-model
    Worktree: docs.objectos.ai-issue-338 (the repository was renamed objectos → docs.objectos.ai by the maintainer at 13:44Z today; card numbers unchanged)
    Domain: domain:docs (single-lane repository)
    Seat: maintainer-directed (no lane seat post in this repository; seat identity recorded on objectstack-ai/objectstack#24145)
    File surface: README.md, TRADEMARK.md, content/docs/** English sources only (locale siblings regenerate per AGENTS.md — never hand-edited), plus the scope amendment posted after this claim (issue-tracker line) — stop on breach; explain in the report
    Container & model: M, mode:subagent (deviation: os-dev agent type not loaded in this project thread; general-purpose subagent under objectstack's .claude/agents/os-dev.md verbatim with this repository's AGENTS.md, same session ID, identity by branch), model: default tier (TIER_DEFAULT — dispatch-gates --tier --repo objectstack-ai/objectos README.md TRADEMARK.md content/docs/index.mdx at objectstack d1ea2363: "no path-derived mandate"; sister-repo gate families hand-derived from this repository's package.json / workflows), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6417232525
    Premise: holds (re-read on origin/main 9df8a92: P1 README.md:29 "There is no open-source edition of ObjectOS" → 1; P2 grep -rln "licensed ObjectOS image\|no open-source edition" content/docs → 2 pages; P3 TRADEMARK.md:15 "unmodified builds" → 1)
    Serial constraints cleared: #300 (pm:blocked, no getting-started path) stays separate — this card's PR carries Refs #300, does not close it; open PRs in this repository are dependabot bumps only (#325 #324 #323 #239 #164), none on the surface; #337 (cloud docs sync) touches content/docs/cloud/**, which this card does not edit


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Scope amendment under a newer maintainer ruling · 2026-10-26T14:04Z · session_01FMuBZmssbfQkVrKRtxNvng · follows the claim above, same dispatch.

    Maintainer (Sam), 2026-10-26, verbatim: 13:45Z 「其实我还是觉得 www.objectos.ai 应该是…包括下面的云服务都应该加到这个网站上,docs.objectos.ai 应该是她的一个子站点」; 13:47Z 「如果品牌不分开,issue tracker 应该就是 objectstack 仓库了」. He renamed this repository objectos → docs.objectos.ai at 13:44Z.

    Two lines are added to scope item 1 (README.md); nothing else changes:

    • The README's first sentence names what this repository now is: the source of the ObjectOS product documentation (docs.objectos.ai), a sub-site of www.objectos.ai. It is not the product's issue tracker.
    • One sentence routes issues: product issues (Community, Cloud or Enterprise) go to objectstack-ai/objectstack; this repository takes issues about the documentation itself. If the docs site layout carries a "report an issue" / GitHub link (apps/docs/lib, apps/docs/app — 0 hits at 9df8a92, so likely none), point it at the objectstack issues page.

    Acceptance adds: grep -n "objectstack/issues" README.md → ≥ 1.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 338,
      "status": "done",
      "branch": "claude/issue-338-edition-model",
      "pr": "https://github.com/objectstack-ai/docs.objectos.ai/pull/339",
      "session": "session_01FMuBZmssbfQkVrKRtxNvng",
      "premise_still_valid": true,
      "summary": "ObjectOS is written as one product in three editions across this repository: README (first sentence = the docs source, a sub-site of www.objectos.ai; three-edition table; Editions = Community / Cloud / Enterprise; 'Run it yourself: ObjectOS Community' with os start and the Docker image; product issues routed to objectstack-ai/objectstack; history shrunk to two sentences), TRADEMARK.md (ObjectOS Community is the named case of the existing MAY 'unmodified builds' and MAY NOT 'modified fork' lines), the English docs pages that said 'no open-source edition' or called the image 'licensed' / the free runtime 'a different product' (why, license, deploy index/docker/kubernetes, index, quickstart, architecture, glossary, faq), the docs pages that linked this repository as the ObjectOS issue tracker (support, faq, changelog, configure/email now link objectstack/issues), and the terms page's English licence paragraph. The phrase 'no open-source edition' occurs nowhere; pricing numbers and the license.mdx rate card are untouched (www.objectos.ai#285); no page added (#300 stays open, Refs only). CONTRIBUTING.md and AGENTS.md got the same two sentences as bounded in-place fixes, declared in the PR body. Draft PR #339 is open on 376aa22 with the maintainer's premise confirmed on origin/main 9df8a92 (P1 README:29 1 hit, P2 2 pages, P3 TRADEMARK:15 1 hit).",
      "tests": "At 376aa22 in /home/claude/docs.objectos.ai-issue-338, exit codes captured before any pipe. git grep -i 'no open-source edition' -> exit 1 (zero hits); grep -n 'objectstack/issues' README.md -> 1 line; grep -c Community TRADEMARK.md -> 3. node apps/docs/scripts/gen-zh-hant.mjs --check -> exit 0 ('46 generated file(s) match the zh-Hans sources byte for byte'). node .github/scripts/check-translations.mjs -> exit 0 ('translations gate passed'). check-translation-ownership.mjs --actor os-zhuang --files DIFF_LIST -> exit 0 ('0 translation artifact(s) and 18 other file(s)'; TRANSLATION_BOT_LOGIN unset, reports only). check-doc-samples.mjs -> exit 0 ('102 pass · 10 not a spec sample · 2 opted out', spec 17.7.0). Verify lock (slot issue-338, waited 45 s, held 90 s on a shared box): pnpm turbo run type-check --continue --filter=@objectos/docs --force -> 'type-check exit=0'; NEXT_PRIVATE_STANDALONE=true pnpm turbo run build --filter=@objectos/docs --force -> 'build exit=0'; lock line 'VERDICT batch-last-exit 0' on the final && conjunction of both parts. Post-build: check-positioning.mjs -> exit 0 ('4 copies equal their constants; the brand is right in 667 pages and 2 llms bodies; no stale sentence in 80 English sources and the en entry of 2 legal pages'); check-locale-surface.mjs -> exit 0; check-search-locales.mjs -> exit 0 ('all 8 locales answer 200'); pnpm turbo run test -> exit 0 ('11 self-test(s) passed'); scripts/pm/check-half-states.mjs --self-test -> exit 0 (1551 cases); check-node-floor.mjs -> exit 0. Built output under apps/docs/.next/server/app: zero occurrences of 'no open-source edition'. No ablation: no tested behaviour changed (docs and copy only). The live sites are unreachable from the container; verification is source- and build-level.",
      "gates": "Local subset (this repository has no dispatch-gates.mjs; families hand-derived from .github/workflows/ci.yml and translations.yml): gen-zh-hant --check exit 0; check-translations exit 0; check-translation-ownership exit 0; check-doc-samples exit 0; turbo type-check exit 0 and turbo build exit 0 under the lock (VERDICT batch-last-exit 0); check-positioning exit 0; check-locale-surface exit 0; check-search-locales exit 0; turbo test exit 0; check-half-states --self-test exit 0; check-node-floor exit 0. No --ran reconciliation: objectstack's dispatch-gates.mjs answers for objectstack only (--repo mismatch refuses). CI on PR #339 head 376aa22 at report time: Node floor = success; build = in_progress; Ownership & freshness = in_progress (not re-run, not waited for).",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0 — no MCP GitHub calls; reads via curl api.github.com (issue 338, its comments, pull 339, check-runs)",
      "api_writes": "2 — (1) pr_create via scripts/pm/fleet-write/dispatch.mjs: POST /repos/objectstack-ai/objectstack/dispatches, executed by run 40339157770 as POST /repos/objectstack-ai/docs.objectos.ai/pulls and POST /repos/objectstack-ai/docs.objectos.ai/issues/339/assignees (read-back identical, 7989 bytes, assignee os-zhuang); (2) this os-dev-report comment via scripts/pm/post-stamped.mjs: POST /repos/objectstack-ai/docs.objectos.ai/issues/338/comments. Plus 2 direct git pushes to origin claude/issue-338-edition-model (empty branch probe, then 376aa22) — not REST writes.",
      "deviations": [
        "The os-dev agent type is not loaded in this thread (claim notes it): a general-purpose subagent ran under objectstack's .claude/agents/os-dev.md and this repository's AGENTS.md, same session id, identity by branch.",
        "Relay dry run refused the ordered payload: 'actions[0].labels must name at least one item' for labels: []. The order names no labels, so the pr_create was re-sent on the same route with the labels key omitted (validate.mjs accepts a create 'with or without' labels); no label was invented, the PR carries none. Command: node scripts/pm/fleet-write/dispatch.mjs --repo objectstack-ai/docs.objectos.ai --actions-file actions.json --dry-run --json -> exit 2; second dry run exit 0; live dispatch exit 0.",
        "Footer form conflict: the dispatch prompt shows the bare footer for the PR body, os-dev.md prescribes the session-URL footer on a created PR body; os-dev.md wins, so the PR body carries the session-URL form and this comment the bare form.",
        "The lock command sequenced type-check and build with ';' to capture each exit, then ended in an && conjunction; the lock printed 'VERDICT batch-last-exit 0' with its ';' caveat. Both parts' own exit lines ('type-check exit=0', 'build exit=0') are quoted above, so the verdict covers both.",
        "File surface beyond the claim's listing, declared under the bounded in-place-fix rule (same ruling, mechanical, no other claim on the files, no new gate surface): CONTRIBUTING.md and AGENTS.md (repository description + issue-routing sentences); content/docs pages beyond the two grep hits — support, faq, changelog, configure/email (issue-tracker links, per the scope amendment), glossary, index Start table and License & pricing paragraph, quickstart intro, architecture 'What you deploy', deploy/docker seoTitle/description/no-licence bullet (pages that state editions or call the image 'licensed', per the order's file-surface line). The claim comment could not be amended (no write budget for it).",
        "No locale sibling was deleted: none of the edited pages has a *.LOCALE.mdx sibling (verified with ls), so AGENTS.md translation-workflow step 3 had nothing to act on; the periodic pass produces them from the new English.",
        "The terms page's zh-Hans.json (hand-maintained legal copy, outside the ownership gate's locale-artifact set) still says '没有开源版本'; left untouched because the order says English only — raised in open_questions."
      ],
      "open_questions": [
        {
          "question": "license.mdx's rate card places Business under ObjectOS Cloud ($54 / AI seat) while the ruling places Business as a contract option under Enterprise (the README in this PR follows the ruling, so README and license.mdx now disagree on where Business sits). Who rewrites the rate card?",
          "options": [
            "A — www.objectos.ai#285's dev (or the pricing card's owner) rewrites license.mdx's rate card in the same change as the pricing page, so numbers and plan placement move once, from one source.",
            "B — a docs-only follow-up here moves the Business column under Enterprise now, prices untouched, accepting a second edit when #285 lands."
          ],
          "recommendation": "A, because: business need — sales and the price list must say one thing, and that one thing is decided on #285, not here; long-term — one source for plan placement and numbers (the www pricing page), docs quoting it; AI-error — two tables edited in separate PRs drift, one edit at the source does not; startup focus — no new surface, no interim state to retire."
        },
        {
          "question": "The terms page's Simplified copy (apps/docs/app/[lang]/terms/zh-Hans.json, and the generated zh-Hant.json) still states ObjectOS has no open-source edition — a legal page, stale against the English entry this PR changed. How is it refreshed?",
          "options": [
            "A — the translation account (or the maintainer) updates the one Simplified paragraph and the 'updated' line and runs pnpm --filter @objectos/docs gen:zh-hant; a small follow-up PR under the ownership model.",
            "B — drop the zh-Hans / zh-Hant entries from the terms page until refreshed (stale is worse than missing), which also changes the page's sitemap / hreflang set and the generator's fixed pair, which expects the file to exist."
          ],
          "recommendation": "A, because: business need — the Chinese self-managed channel reads this page, so it must say the new model soon, not render English; long-term — keeps the ownership split (English by humans, translations by the pass); AI-error — B is a structural edit to a legal route and a generator pair for a one-paragraph refresh; startup focus — the smallest change that is correct."
        },
        {
          "question": "apps/docs/lib/positioning.ts and the opening paragraph of content/docs/index.mdx still say 'the commercial runtime environment built on ObjectStack' with two editions; they quote the objectstack README byte for byte under the ruling on #171 and check-positioning rule (a) pins four copies to the constant. When does the constant adopt the three editions?",
          "options": [
            "A — after objectstack-ai/objectstack#26129 lands the three editions in that README: copy its bytes into positioning.ts and index.mdx in one gate-driven PR here (and www.objectos.ai quotes it the same way).",
            "B — rewrite the constant here now with three editions and accept divergence from the objectstack README until #26129 lands."
          ],
          "recommendation": "A, because: business need — the three surfaces (README, docs, www) must read identically, which is the whole point of the #171 ruling; long-term — contract-first, the README is the declared source; AI-error — the gate exists precisely so a paraphrase cannot land; startup focus — one copy step after #26129 instead of two edits."
        }
      ],
      "out_of_scope_findings": [
        "class: a · reach: public door /zh-Hans/terms (and /zh-Hant/terms) renders the sentence '没有开源版本' that the English entry no longer says · evidence: apps/docs/app/[lang]/terms/zh-Hans.json body[0].text · dedupe words: terms zh-Hans open-source edition legal stale · carrier: translation account / the docs seat (open_questions 2) · noted, not filed",
        "class: b · reach: public door /docs and /llms.txt carry POSITIONING with two editions while the same site now names three · evidence: apps/docs/lib/positioning.ts OBJECTOS_DEFINITION / OBJECTOS_EDITIONS, pinned by check-positioning rule (a) to the objectstack README (ruling on #171) · dedupe words: positioning constant three editions README quote · carrier: objectstack-ai/objectstack#26129 then a docs follow-up (open_questions 3) · noted, not filed",
        "class: none (observation, zero reach — GitHub redirects the old name) · apps/docs/lib/layout.shared.tsx gitConfig.repo is 'objectos', and license.mdx's TRADEMARK.md link plus docs/TRANSLATION.md and AGENTS.md issue links still use objectstack-ai/objectos · dedupe words: repository rename docs.objectos.ai links gitConfig · carrier: maintainer's rename follow-up · noted, not filed",
        "class: none (observation) · license.mdx rate card places Business under ObjectOS Cloud, contrary to the ruling's 'Business and Business Self-Managed under Enterprise'; the README in this PR follows the ruling · dedupe words: rate card Business Cloud Enterprise column · carrier: www.objectos.ai#285 (open_questions 1) · noted, not filed",
        "class: none (wording drift, still true) · the privacy page's en entry says 'a deployment of the open-source ObjectStack runtime' where the product now calls that ObjectOS Community; the sentence remains accurate · dedupe words: privacy page Community wording · carrier: none · Acceptance notes only"
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Landing · 2026-10-26T15:11Z · session_01FMuBZmssbfQkVrKRtxNvng

    Reading Value
    PR #339 MERGED 2026-10-26T15:08:13Z by os-zhuang (hand merge; main has no required checks, see the ACCEPT's clause 6)
    origin/main 1ce3fdd "docs(editions): … (#339)", parent 9df8a92; squash of branch head 376aa22 — git diff 376aa22 origin/main empty
    Acceptance grep on origin/main git grep -i "no open-source edition" → 0 hits
    closed_by_pull_requests this card only; #300 (Refs) still open, pm:blocked, no closing reference

    Status: card closed by Fixes #338; pm:dispatched removed in the same stroke. Delivered: README three-edition table, TRADEMARK Community clause, edition names across 13 docs pages, issue routing to objectstack. Remainder: terms zh-Hans.json legal paragraph + post-rename link sweep → #340; positioning constant to three editions → #341 (blocked by objectstack-ai/objectstack#26148).


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions