Skip to content

Site roles under the edition model: www.objectos.ai is the product site, objectstack.ai the developer site — add a Developers entry to the nav, host the one blog here, stop duplicating the framework hero (maintainer ruling 2026-10-26) #286

Closed

Description

@objectstack-fleet

Filing gate ③: a maintainer-directed task. Maintainer (Sam, os-zhuang), 2026-10-26: chose 「模型 2:ObjectOS 三版本」 (13:18Z) — ObjectOS is one product in three editions (Community / Cloud / Enterprise), ObjectStack the protocol and SDK; asked 「objectstack.ai 官网和 www.objectos.ai 官网不是很奇怪,区别是什么」 (13:19Z); on the answer (product site vs developer site, one blog, cross-linked navigation) wrote 「同意」 and 「立卡派发」 (13:24Z). Business reason: both homepages today open with the same hero ("The ontology is the software." + the same four-verb line) and both sell; a visitor cannot tell which one to buy from, and two pages with one text split search weight. Reader: the repo:www.objectos.ai seat dispatches one dev; file surface the site's layout / navigation, the homepage, and the blog section. Dedupe: this repository's issues searched for "navigation Developers link objectstack.ai blog product site developer site" → 2 hits: #209 (open, dispatched: adopt the 2026-10-03 positioning across the site, five posts — this card does not change positioning copy; serialize after #209's PR if it touches the same nav / homepage files), #235 (closed: /ontology/ and /compare/ pages). Session session_01FMuBZmssbfQkVrKRtxNvng; siblings: objectstack-ai/objectstack (the objectstack.ai side of the same split, filed today: "objectstack.ai becomes the developer site"), objectstack-ai/docs.objectos.ai#338 (edition model), #285 (pricing, Community column — scope comment).

Roles, as agreed

Site Audience Carries Does not carry
www.objectos.ai buyers and operators the product hero ("The ontology is the software."), the three editions, pricing, Build & Ask, templates, customers, the blog protocol / SDK documentation
objectstack.ai developers one-line positioning ("ObjectStack is the open protocol and SDK ObjectOS is built on"), docs, spec, CLI, "Build with Claude Code", GitHub a marketing hero, a second blog

Precedent: frappe.io (product: ERPNext, Frappe Cloud) and frappeframework.com (the framework); Kubernetes / OpenShift.

Scope (this repository's half)

  1. Navigation: a top-level "Developers" entry → https://objectstack.ai (docs), beside the existing Docs → docs.objectos.ai; the footer gets the same two links labelled by role ("Product docs" / "Developer docs & protocol").
  2. Homepage: keep the hero; the "Open-source ObjectStack" mention becomes the ObjectOS Community edition line (self-hosted, free) with "built on the open ObjectStack protocol → objectstack.ai" as the secondary link, so the page names three editions and one protocol, not two products.
  3. Blog: this site hosts the one blog. The framework posts published at objectstack.ai/blog (at least "The ontology is the software") are imported here with their original dates and canonical URLs set here; the objectstack side redirects (its card). If Adopt objectstack's 2026-10-03 positioning across www.objectos.ai: copy changes, five posts, an update sweep #209's five posts are in flight, land them here as planned — nothing moves to objectstack.ai.
  4. Pricing: nothing here — Pricing page: three columns, Free / Team / Enterprise (maintainer ruling D2, 2026-10-24) — Business moves to an Enterprise contract option, Free states the AI trial and the MCP terms, Team's button goes to self-serve checkout #285 (with its Community-column scope comment of today).

Premises (re-check before dispatch)

Acceptance

  • pnpm build green in every locale; the nav shows "Developers" → objectstack.ai; the homepage names ObjectOS Community / Cloud / Enterprise and links objectstack.ai once as the protocol.
  • The imported posts render under /en/blog/ with canonical URLs on this site.

维护者速读

按你 13:24 的「同意」「立卡派发」:www.objectos.ai 是产品站,objectstack.ai 是开发者站。本卡做官网这一半:导航加 Developers 指向 objectstack.ai,首页把「开源 ObjectStack」改成 ObjectOS Community 版本行、协议链接作次级,博客只留这一处并把 objectstack.ai 上的文章迁过来。objectstack.ai 那一半另有卡。

Activity

  1. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

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

    Triage: lands in this site's navigation, homepage and blog (site); rationale: filing gate ③, the maintainer's 「同意」 / 「立卡派发」 of 2026-10-26 13:24Z on the product-site / developer-site split quoted in the body; this repository carries no priority labels. Serialize after #209 where files overlap. The objectstack.ai half is objectstack-ai/objectstack#26140 (filed in the same minute); the blog redirects there wait for this card's import. Siblings: objectstack-ai/docs.objectos.ai#338 (edition model), #285 (pricing; 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-26T14:02Z
    Session: session_01FMuBZmssbfQkVrKRtxNvng (project thread; maintainer-directed — Sam, 2026-10-26 13:38Z, verbatim 「相关卡片都归你派发处理落地」)
    Account: os-zhuang
    Branch: claude/issue-286-developers-nav-community-line-blog-import
    Worktree: www.objectos.ai-issue-286
    Domain: n/a (single-lane repository, label site)
    Seat: maintainer-directed (no lane seat post in this repository; seat identity recorded on objectstack-ai/objectstack#24145)
    File surface: src/components/Header.astro, src/layouts/Base.astro (footer), src/components/MarketingHome.astro + src/lib/positioning.ts (the Community line, English source; other locales per AGENTS.md), content/blog/<four imported posts>/ (new folders with index.mdx + covers; original dates and slugs; canonical here) — 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 — objectstack's dispatch-gates refuses a sister-repo tier verdict without its checkout; this repository declares no tier globs, so default tier; gate families hand-derived from package.json: pnpm build = gen-zh-hant → content-lint --published → svg-text-fit → astro build → og-images → content-lint --dist, plus pnpm check and pnpm content:lint), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6417332389
    Premise: holds at source level (re-read on origin/main bf2d68a: P1 src/lib/positioning.ts:24 t1 = "The ontology is the software." and objectstack apps/docs/app/[lang]/page.tsx:35 the same title; P2 src/components/Header.astro links docs.objectos.ai and GitHub only, no objectstack.ai entry; P3 objectstack content/blog/the-ontology-is-the-software.mdx exists (dated 2026-10-05) and content/blog/ here has no folder of that slug — the live-site curls are unreachable from this container, proxy refuses both hosts)
    Serial constraints cleared: #209 (pm:dispatched, hotlong) and its open PRs #268 (AGENTS.md cadence) and #279–#284 (blog posts, folders of their own) touch none of this surface — rebase before PR, no shared lines; AGENTS.md cadence: the imported posts carry their original 2026 dates, so they take no publishing slot, and the dev reports if content-lint --published disagrees; the objectstack-side redirects (objectstack#26140, same round) merge after this PR


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 286,
      "status": "done",
      "branch": "claude/issue-286-developers-nav-community-line-blog-import",
      "pr": "https://github.com/objectstack-ai/www.objectos.ai/pull/288",
      "session": "session_01FMuBZmssbfQkVrKRtxNvng",
      "premise_still_valid": true,
      "summary": "Draft PR #288 (head 2838815, base main bf2d68a) does the card's three items. Navigation: the Developers menu and the footer carry both documentation sites labelled by role, Product docs (docs.objectos.ai) and Developer docs & protocol (objectstack.ai), in all eight locales; the header already had a Developers group, so the objectstack.ai entry went inside it beside the renamed Product docs rather than as a second top-level word. Homepage: E1 in src/lib/positioning.ts now names ObjectOS Community (open source, free to self-host), Cloud and Enterprise and keeps the export-and-run-elsewhere promise, in English and the six authored locales (zh-Hant derived), and the protocol is named once as the secondary link under the lead, Built on the open ObjectStack protocol, to objectstack.ai (OBJECTSTACK_URL, one spelling shared by header, footer and hero); llms.txt follows E1. Blog: the-ontology-is-the-software (2026-10-05), context-window-is-the-constraint (2026-07-17), metadata-driven-architecture (2024-01-20) and protocol-first-development (2024-01-22) land under content/blog/SLUG/index.mdx with original slugs and dates, canonical on this site (the layout's default), topic/audience mapped (ai-agents/general, ai-agents/developer, app-building/developer x2), /docs links re-pointed to objectstack.ai/docs, the ontology essay's four JSX figures ported to static SVG and a cover-en.svg per post; English-only, since AGENTS.md's Localization section requires nothing for an English post and the sources have no translations. Premises held at source level: P2 (no objectstack.ai link in the header) true, with the nuance that the group label Developers already existed; P3 true (no folder for any of the four slugs). Live-site curls (P1) are unreachable from the container.",
      "tests": "pnpm content:lint: exit 0, '✓ content lint passed (363 files, 46 glossary terms checked)', warnings only on pre-existing posts (the imports are dated before the 2026-10-06 snippet-width cutoff and are summarised). node scripts/svg-text-fit.mjs on the eight new SVGs: exit 0, '8 SVGs, 152 text boxes ... OK' (first run found one caption running 64px past its card on the context-window cover; fixed, re-run green). Under the verify lock (slot issue-286): pnpm check at 308771c, 'VERDICT command-exit 0', 'Result (160 files): 0 errors, 0 warnings, 0 hints'; pnpm build at 308771c 'VERDICT command-exit 0' and again at the final head 2838815 'VERDICT command-exit 0 · held the lock 124s', with '928 page(s) built', 'share images: 99 rendered at 1200x630', 'content lint --dist links passed (100395 internal links in 928 built pages resolve to built files)', CJK line-break and quotation gates passed. Built output: dist/en/blog/SLUG/index.html exists for all four, each with canonical https://www.objectos.ai/en/blog/SLUG/, no noindex, datePublished equal to the original date; dist/en/index.html carries the three-edition E1 and four href=https://objectstack.ai (desktop nav item, drawer item, footer, and the one hero link); all eight locale homes carry the translated Developer docs & protocol label. Browser check with headless Chromium against dist/: en home at 1366x625, 1440x750, 1512x830, 1920x945, 390x844, 360x800 (plus a 390x1700 capture to see the whole hero), ja home at 1440x750, zh-Hans home at 390x844, the ontology essay at 1440x750 and 390x844, the blog list at 1440x750, and the eight SVGs at native size, all looked at. One defect found and fixed before the PR: the protocol link rendered left-aligned in the centred hero and, on phones, above the eyebrow (the hero's phone layout orders its children explicitly); it now centres and shares the lead's order (commit 2838815). No ablation: no tested behaviour changed (this repository has no test suite; its gates are the scripts above).",
      "gates": "Local subset (exit codes captured before any pipe): pnpm content:lint exit 0; node scripts/svg-text-fit.mjs exit 0; pnpm check VERDICT command-exit 0 (at 308771c; not re-run at 2838815, whose delta is CSS inside a style block and one SVG canvas size, declared as a narrowing); pnpm build VERDICT command-exit 0 at 2838815 (gen-zh-hant, content-lint --published, svg-text-fit, astro build, og-images, content-lint --dist). --ran reconciliation: not applicable, scripts/pm/dispatch-gates.mjs answers only for objectstack and refuses a sister-repo verdict; families hand-derived from this repository's package.json and .github/workflows as the claim recorded. CI on PR #288 head 2838815 at report time: check-run 'Build and deploy' (cloudflare-pages.yml) in_progress; it is the one CI family here and is not re-run locally.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0 — no MCP GitHub calls; the card, its comments, objectstack#26140, the PR and the check-runs were read with curl against api.github.com",
      "api_writes": "2 — POST /repos/objectstack-ai/objectstack/dispatches via scripts/pm/fleet-write/dispatch.mjs (pr_create, landed as objectstack-ai/www.objectos.ai#288, read-back identical, assignee os-zhuang, no labels); POST /repos/objectstack-ai/www.objectos.ai/issues/286/comments via scripts/pm/post-stamped.mjs (this report). Plus three direct git pushes to the branch (not REST writes).",
      "deviations": [
        "Relay dry-run refused the first pr_create payload because the order's template labels list was empty ('actions[0].labels must name at least one item'; zero writes). The key was omitted, which the validator's own tests allow for pr_create, and the dry-run then the real create went through the same route; no label was ever sent, as the order says.",
        "The PR body spells two placeholders with angle brackets (content/blog/SLUG/ and the canonical link tag), against the no-angle-bracket rule for GitHub text; the relay read-back reports all 7616 bytes stored identical. The body is written once and not patched; the seat may rewrite it if the sanitizer matters there.",
        "The second lock run for the rebuild timed out in the queue (exit 99, holder: a sibling's @objectstack/cli vitest unit run held 693s) and is recorded as NOT MEASURED; the slot was kept and the same slot resumed 18s later, green at 2838815.",
        "pnpm check was not re-run on the final head (see gates); pnpm build was.",
        "Hero copy outside E1 in src/lib/home.ts still says 'open-source ObjectStack' (proof[3], aiCopy, the AI Builder and AI Ask cards, the data-residency item); left as positioning copy owned by #209 and listed under out_of_scope_findings.",
        "The ontology essay's description was shortened from 257 to 221 characters for the site's 230-character rule; titles, bodies and dates are the originals apart from link targets and the phrase 'In this documentation:' becoming 'In the ObjectStack documentation:'."
      ],
      "open_questions": [
        {
          "question": "Where should the objectstack.ai link live in the header: inside the existing Developers group beside Product docs (as shipped), or as a new top-level nav item?",
          "options": [
            "A inside the existing Developers group (shipped): the group label is already the card's word, and the footer carries the same pair by role",
            "B a new top-level item 'Developers' linking straight to objectstack.ai, with the existing group renamed (for example 'Build')"
          ],
          "recommendation": "A, because the business need (a developer finds objectstack.ai from the product site) is met with one click under the word they look for; B duplicates the word Developers on one bar or forces a rename that touches eight locales for no measured pull; a smaller nav is harder for the next edit to get wrong; and the startup focus axis says no new top-level surface without a maintainer naming it."
        },
        {
          "question": "docs.objectos.ai still quotes the previous E1 verbatim (apps/docs/lib/positioning.ts, content/docs/index.mdx, pinned by its own check:positioning gate). Should objectos#338 adopt this E1 byte for byte, or may the two sites phrase the editions differently?",
          "options": [
            "A objectos#338 copies this E1 and the protocol link label verbatim (both sites one spelling, as positioning.ts's header rule says)",
            "B each site keeps its own edition sentence"
          ],
          "recommendation": "A, because one spelling is what the positioning module declares and what a cross-site compare gate could later enforce; B lets the two sites drift again, which is the defect this ruling set out to remove."
        }
      ],
      "out_of_scope_findings": [
        "class: none of a/b/c (copy under the new edition model) · reach: public page https://www.objectos.ai/en/ (built dist/en/index.html) still says 'open-source ObjectStack' in src/lib/home.ts proof[3], aiCopy, the AI Builder / AI Ask cards and the data-residency item, which under 'three editions, one protocol' name the Community edition · evidence: grep 'open-source ObjectStack' src/lib/home.ts gives 6 lines at bf2d68a · dedupe: home.ts open-source ObjectStack Community edition copy · carrier: #209 (positioning copy) or the ObjectOS Cloud CTA card filed today · noted, not filed",
        "class: none of a/b/c (cross-site consistency) · reach: docs.objectos.ai site-wide meta description and /llms.txt quote the previous E1 · evidence: /home/claude/docs.objectos.ai/apps/docs/lib/positioning.ts and content/docs/index.mdx at 9df8a92 · dedupe: E1 edition clause docs.objectos.ai positioning · carrier: objectstack-ai/objectos#338 · noted, not filed",
        "class: none of a/b/c (sequencing) · reach: objectstack.ai/blog/SLUG for the four slugs keeps serving until objectstack#26140 lands its permanent redirects to https://www.objectos.ai/en/blog/SLUG/; those targets exist once #288 merges · dedupe: 26140 blog redirects imported slugs · carrier: objectstack-ai/objectstack#26140",
        "class: c-adjacent tooling trap, not metadata · reach: the dispatch order's pr_create template shows labels as a list of 'only the labels this order names'; with none named, an empty list is refused by scripts/pm/fleet-write/validate.mjs ('must name at least one item') while omitting the key passes · evidence: pr-dryrun.log vs pr-dryrun2.log in the issue-286 scratch directory · dedupe: fleet-write pr_create empty labels refused template · carrier: the pm-dispatch seat (common.md template) · noted, not filed"
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 286,
      "status": "done",
      "branch": "claude/issue-286-developers-nav-community-line-blog-import",
      "pr": "https://github.com/objectstack-ai/www.objectos.ai/pull/288",
      "session": "session_01FMuBZmssbfQkVrKRtxNvng",
      "premise_still_valid": true,
      "summary": "Patch round on PR #288, new head bf0cf5c. CI 'Build and deploy' was red at 2838815 on pnpm seo:smoke, which runs after pnpm build in the workflow and is not in the local build chain: the imported ontology essay linked the bare site root (https://www.objectos.ai), which this site serves as a language redirect. content/blog/the-ontology-is-the-software/index.mdx line 278 now links the home page as /en/, the convention three existing posts use; a re-grep of the four imported posts finds no other bare-root link. Nothing else in the PR was touched; the PR body stands as written.",
      "tests": "At bf0cf5c, under the verify lock (slot issue-286): pnpm build 'VERDICT command-exit 0 · held the lock 136s (2m16s) · waited 162s', with '928 page(s) built', 'content lint --dist links passed (100395 internal links in 928 built pages resolve to built files)'. Then on the same dist: pnpm seo:smoke exit 0, 'SEO smoke test passed (918 HTML pages checked; 603 sitemap URLs against 315 noindexed pages; 5693 canonical/hreflang annotations; 17898 prose blocks language-checked; 100385 internal links redirect-checked)'. grep -rn 'https://www.objectos.ai' over the four imported post folders: no match (exit 1).",
      "gates": "Local: pnpm build VERDICT command-exit 0 at bf0cf5c; pnpm seo:smoke exit 0 at bf0cf5c (exit codes captured before any pipe). pnpm content:lint and pnpm check not re-run: the delta is one link target in one MDX body, which content-lint --published does not read and astro check does not type. CI on PR #288 head bf0cf5c: 'Build and deploy' in_progress at report time, not re-run locally.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "1 this round — POST /repos/objectstack-ai/www.objectos.ai/issues/286/comments via scripts/pm/post-stamped.mjs (this follow-up); plus one direct git push. Cumulative on this claim: 3 REST writes (pr_create, two report comments).",
      "deviations": [
        "pnpm seo:smoke is a CI-only step after the build in cloudflare-pages.yml and is not part of pnpm build; the first round's local chain therefore could not see it. It is now run locally after every build on this branch."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "class: none of a/b/c (local gate chain) · reach: pnpm build passes locally while CI's Build and deploy also runs pnpm seo:smoke afterwards, so a dev's green chain can still go red in CI on a bare-root link · evidence: this round · dedupe: seo:smoke build chain local parity · carrier: the repo:www.objectos.ai seat (AGENTS.md 'run pnpm content:lint, pnpm check, and pnpm build' could name seo:smoke too) · noted, not filed"
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · 2026-10-27T00:49Z · session_01FMuBZmssbfQkVrKRtxNvng

    Reading Value
    PR #288 merged: true, merged_at 2026-10-27T00:44:05Z by the merge queue (objectstack-fleet[bot]), head bf0cf5c6 (3 commits, 17 files +2320/−23). First enqueued 2026-10-26T15:26Z and dequeued CI_TIMEOUT because cloudflare-pages.yml had no merge_group trigger; the queue works since #295 (card #293, the site seat's) merged at 2026-10-26T23:01Z; auto-merge re-armed 2026-10-27T00:40Z, merged on the next group.
    origin/main 657a634d "Merge pull request #288 …" (now under 1b74b4f7, #289's merge). On that tree: src/components/Header.astro names objectstack.ai twice (desktop nav + drawer), src/layouts/Base.astro once (footer), src/lib/i18n.ts carries the "Developer docs & protocol" label; src/lib/positioning.ts E1 reads "Community (open source, self-hosted, free), Cloud and Enterprise" and exports OBJECTSTACK_URL, read by MarketingHome.astro (2 uses: lead link + strip); content/blog/<slug>/index.mdx exists for all four imported slugs.
    closed_by_pull_requests this card only (#288 Fixes #286); #209 still open and untouched by the diff.

    Status: card closed by Fixes on merge; pm:dispatched removed in this stroke. Delivered: items 1–3 of the scope (nav + footer by role, the three-edition E1 with the protocol as the one secondary link, four framework posts canonical here). Remainder and owners: the objectstack.ai half (redirects /blog/<slug> → this site) is objectstack-ai/objectstack#26165, flipped ready + auto-merge in this same stroke (relay fw-20261027T004811Z); the "open-source ObjectStack" phrases in src/lib/home.ts are #209's positioning copy, not changed here; deleting the blog sources on objectstack.ai is a devx follow-up card once the redirects are measured on production (carrier: this seat). The seat's ## 席位核对 ACCEPT is on the PR.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Duplicate of the landing note directly above (comment 6430939985): the seat's post command ran twice. Disregard this one.


    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