Skip to content

docs: positioning follow-up: stale home title, cover image and alt; README restructured on the four promises; an ontology concept page; glossary and north-star bridges #21586

Closed

Description

@objectstack-fleet

立卡门类别 ③ — 维护者直派的任务 (maintainer-directed task).

Maintainer ruling (verbatim, untranslated)

README 和文档还有进一步的修改建议嘛?

创建一个issue,然后用 fable 派发处理。

Given in session https://claude.ai/code/session_011hRnra93sK5Q2gTYYTbdJR on 2026-10-03, after #21574 (PR #21579, landed as cc645f2) put the slogan on the README, the docs landing page, the glossary and the two concepts pages. This card is the follow-up pass: four inconsistencies that pass left behind, plus the structural changes that make the README and the docs read as one system around the slogan. Same slogan, descriptor and proof line as #21574; nothing here reopens that wording.

Part A. Inconsistencies left on main at cc645f2 (must fix)

A1. apps/docs/app/[lang]/page.tsx line 34: HOME_TITLE still reads "Metadata framework for AI-written apps". It feeds the document title (line 56), the Open Graph title (67), the Twitter card title (76) and the JSON-LD headline (112), so every share card pairs the new description with the old title. Set it to "The ontology is the software".

A2. apps/docs/lib/site.ts line 86: the HERO_COVER alt still reads "ObjectStack — the metadata framework for AI-written apps". Replace with "ObjectStack: the ontology is the software. One executable business ontology, written by AI, run by the runtime, operated by agents, owned by you."

A3. The hero cover image carries a third, older headline. docs/screenshots/hero-cover-dark.png (2400 by 1200, the README hero) reads "Your whole app, as typed metadata." with the chips "Fits in an agent's context", "Typed, validated, governed", "Self-host anywhere", "Apache-2.0"; apps/docs/public/hero-cover-dark.webp is derived from it and is the docs site's og:image. Re-render both with the new copy: headline "The ontology is the software.", subhead "One executable business ontology. AI writes it, the runtime runs it, agents operate it, you own it.", chips "Executable", "AI-writable", "Agent-operable", "You own it", "Apache-2.0". There is no design source in the repo, so build a 2400 by 1200 HTML template that reproduces the current layout (dark backdrop, copy on the left, the ticket code card and the dashboard screenshot on the right), screenshot it with the preinstalled Playwright Chromium, commit the PNG as the new master and the template beside it so the next copy change is a re-render, then derive the WebP exactly as the provenance block in apps/docs/lib/site.ts says (sharp, quality 80, effort 6, from the PNG). Pixel dimensions stay 2400 by 1200; the declared sizes in site.ts must still match the bytes. If the re-render cannot reach the quality of the current image, leave both image files untouched, land the rest of this card, and say so in the report with the template committed anyway.

A4. content/docs/getting-started/glossary.mdx line 39, the UI Protocol entry, still lists Themes. Stack themes were retired at protocol 18 (packages/spec/src/migrations/entries/semantic/18.stack-themes-carrier-retired.ts). Drop the word from that sentence.

Part B. README restructured on the four promises

B1. Hero. The blockquote now stacks five paragraphs. Cut it to: the slogan line, the English descriptor, and one proof line "Apps small enough for AI to hold whole." Keep the Chinese signature as one short line, "本体即软件。", directly under the descriptor; the Chinese descriptor sentence moves out (PM ruling for this card: no README.zh-CN.md; a separate card if the maintainer wants one). Move the ontology paragraph with its caveat (no inheritance, no axioms, no reasoner; executable, not knowledge-representation) out of the hero into a new short section "What we mean by ontology", three sentences plus a link to the glossary entry, placed right before the capability section.

B2. The chip row under the hero becomes the four promises plus the licence: "Executable", "AI-writable", "Agent-operable", "You own it", "Apache-2.0".

B3. Section order and headings, so the README's spine is the slogan. Keep "Try it in five minutes" first as the onboarding. Then "The runtime runs it" (today's "What one definition gives you", body unchanged). Then "Agents are the first users" (today's "Your app is AI-operable, for free", moved up; open it with one sentence: objects are tools, actions are tools, permissions decide what an agent may call, audit records what it did; keep the claude mcp add snippet). Then "Why the mistakes don't ship" (unchanged body; it is the "AI writes it" promise). Then a short "You own it" section that consolidates the LICENSING sentence from the paragraph under the video and the blog quote near the end of the file. Then "Ship it" and "Hack on the framework" as they are. Renaming a heading changes its anchor: grep content/docs and apps/docs for links into README anchors and update them; the published-readme-links gate reads this.

Part C. Docs site

C1. content/docs/index.mdx: the first paragraph becomes the slogan and the descriptor, then the existing build-loop diagram and the rest unchanged; align the frontmatter description with it.

C2. A concept page, content/docs/concepts/ontology.mdx, registered in content/docs/concepts/meta.json right after "metadata-driven". Five sections: what the ontology is (objects and fields, relations, actions, permissions, flows, agent and tool definitions); what the projections are (views, dashboards, apps, translations); what it is not (a knowledge ontology with inheritance, axioms and a reasoner; the industry's semantic layer, a read-only mapping over existing systems; a formal ontology in the philosophical sense); how the runtime executes it (derive the database, REST, UI and MCP; enforce permissions and audit on every call; validated, not reasoned over); how AI writes it and uses it (skills bundle and AGENTS.md, the validation gate, the Console review, the MCP surface). The page is the authority; the glossary "Business Ontology" entry shrinks to a short definition of at most six lines plus a link to it, no duplicated long text.

C3. Glossary, in the shortened entry: one sentence that distinguishes this ontology from the industry's "semantic layer" (a read-only mapping over existing systems that describes the business but does not run it), beside the existing sentence about the analytics dataset layer.

C4. content/docs/concepts/north-star.mdx: one bridge sentence in the first paragraph, "In the enterprise-AI vocabulary, the ontology is the software", nothing else on that page.

Guardrails for the author

  • The four facts survive in every piece of copy: no object inheritance, axioms or reasoner; not a semantic layer over existing systems; views, dashboards, apps and translations are projections, not ontology; code does not disappear, it moves into the runtime. The 150k / 100k number discipline from docs:主 README 与文档首页统一换用新定稿 tagline(150k 整体 + 100k 业务逻辑拆分) #9241 applies to any retained figure.
  • Docs only: no packages/** change, never content/docs/references/** (generated), content/docs/releases/** (release-owned) or any CHANGELOG.md. The only binary files touched are the two cover images in A3.
  • The new page is the one meta.json change. The docs build (pnpm --filter @objectstack/docs build) and the doc gates must stay green; derive the gate list from the real file surface with scripts/pm/dispatch-gates.mjs.
  • Changeset: nothing publishes, so skip-changeset applies once packages/** is confirmed untouched.
  • Out of git, for the maintainer, not this card: the repository description field, and the 90-second YouTube video still narrates the old tagline.

Non-goals

  • A README.zh-CN.md or any Chinese docs tree. Separate card if wanted.
  • Naming the ontology core inside packages/spec. Separate spec-lane card if wanted.
  • Console or Studio copy; that is the objectui sibling repo.

Who acts

domain:devx lane, this seat, one os-dev dispatch at the fable tier (maintainer directed), one docs-only draft PR. Precedent: #21574 landed by #21579 on the same surfaces earlier today; this card builds on that head, so the dev merges current main before touching the same files.

Duplicate check (2026-10-03, open and closed)


Generated by Claude Code

Activity

  1. added
    documentationImprovements or additions to documentation
    pm:queueReady for the PM dispatch loop
    domain:devxDomain lane — seat card indexed by label:pm:seat
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 3, 2026
  2. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_011hRnra93sK5Q2gTYYTbdJR
    Account: hotlong (the seat's linked user as GET /user answers it; the card's assignee; this is the maintainer's own session, dispatching on the maintainer's direct instruction)
    Branch: claude/issue-21586-positioning-follow-up (cut from origin/main cc645f2385)
    Worktree: objectstack-issue-21586
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: README.md; apps/docs/app/[lang]/page.tsx; apps/docs/lib/site.ts; docs/screenshots/hero-cover-dark.png plus a committed render template beside it; apps/docs/public/hero-cover-dark.webp; content/docs/index.mdx; content/docs/concepts/ontology.mdx (new); content/docs/concepts/meta.json; content/docs/concepts/north-star.mdx; content/docs/getting-started/glossary.mdx; plus any content/docs or apps/docs page that links a README anchor the restructure renames. ⛔ No packages/, no content/docs/references/, no content/docs/releases/, no CHANGELOG.md, no content/blog/. Stop on a breach and explain it in the report.
    Container & model: M (copy across ten files, one cover re-render, one new page, one docs build), mode:subagent, model: CONTRACT_REVIEW_TIER (the ceiling; this card's --tier run printed no path-derived mandate, "floor sonnet · default opus · ceiling fable"; reason: maintainer directed, verbatim 「创建一个issue,然后用 fable 派发处理。」)
    Clause-②: no
    Thread-read: none
    Serial constraints cleared: board read at 2026-10-03T12:47Z. #21574 covers the same surfaces and is closed, landed as cc645f2 on main today, so the dev starts from that head and merges current main before touching the same files. Open PRs on the repo at the read are #21584, #21545 and #21581; none touches README.md, apps/docs or content/docs. No remote branch names these surfaces and no other devx claim is in flight on them.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 21586,
      "status": "done",
      "branch": "claude/issue-21586-positioning-follow-up",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/21591",
      "session": "session_011hRnra93sK5Q2gTYYTbdJR",
      "premise_still_valid": true,
      "base": "origin/main 901e7cf1 at worktree creation (the Claim named cc645f23; two merges landed between, packages/rest and packages/cloud-connection only, none on this surface). Head 7a49e296, five commits, tree clean.",
      "summary": "All three parts landed as one docs-only draft PR. Part A: HOME_TITLE on the docs home page is \"The ontology is the software\" (one constant, four measured readers); HERO_COVER.alt is the descriptor; the hero cover PNG and its webp are re-rendered on the slogan from a new committed HTML template plus a render script; the glossary UI Protocol entry drops Themes. Part B: README hero cut to slogan, descriptor, 本体即软件。 and the proof line; chips are the four promises plus Apache-2.0; new \"What we mean by ontology\" section before the capability section; sections reordered and renamed on the slogan spine; LICENSING sentence and blog quote consolidated under \"You own it\". Part C: index.mdx opens on slogan plus descriptor; new content/docs/concepts/ontology.mdx registered in meta.json after metadata-driven; glossary Business Ontology shrunk from 44 to 13 lines with the semantic-layer distinction beside the analytics-dataset sentence; north-star gained the one bridge sentence. One file outside the named surface: scripts/docs-audit/handwritten-docs.json, which check:docs-audit-scope requires for every new hand-written page.",
      "tests": "Builds under scripts/pm/os-verify-lock.sh (OS_VERIFY_LOCK_SLOT=issue-21586): `pnpm --filter @objectstack/spec build` VERDICT command-exit 0 (97s); `pnpm --filter @objectstack/docs build` VERDICT command-exit 0 (173s; log: \"Compiled successfully in 114s\", \"Finished TypeScript in 5.9s\"; next.config has ignoreBuildErrors:false so this is the docs app type check); `turbo run build --filter=@objectstack/formula --filter=@objectstack/lint` VERDICT command-exit 0 (85s); `pnpm --filter \"@objectstack/client-react...\" build` VERDICT command-exit 0 (228s). 68 gate families derived by `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`, every one run with $? captured before any pipe, record `command :: exit N`, reconciled: \"68 derived, 68 run, 0 NOT-MEASURED, 0 UNRUN\". Doc gates re-run on the final head 7a49e296 after the last commit: 22 commands, all exit 0 (list in the gates field). First-round exits that were NOT measurements: check:docs-transcript-drift, lint check:doc-formula-expressions, lint check:doc-security-posture and spec check:skill-examples answered exit 3 PREREQUISITE NOT MET until lint/formula/client-react were built, then exit 0; `pnpm check:docs-nav-label` / `pnpm check:docs-section-name` exit 254 (no such root script; the derived spelling is `node scripts/check-docs-nav-label.mjs`, which was run, exit 0). Narrowed eslint measurement: `pnpm exec eslint --no-inline-config --format json` over the 3 changed JS/TS files: 3 files, 0 errors, 0 warnings; population = the config generic block files [**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}] covering all three; not type-aware (no parserOptions.project), so the diff cannot move an untouched file; whole-tree `pnpm lint` left to CI. No ablation (no logic under test). Cover: fonts asserted loaded in-page (Inter 400-800, IBM Plex Mono 400/500) before the screenshot; dimensions asserted 2400x1200 by sharp metadata on both files.",
      "gates": [
        {
          "command": "pnpm --filter @objectstack/spec build (lock)",
          "exit": 0,
          "verdict": "os-verify-lock: VERDICT command-exit 0 · held the lock 97s"
        },
        {
          "command": "pnpm --filter @objectstack/docs build (lock)",
          "exit": 0,
          "verdict": "os-verify-lock: VERDICT command-exit 0 · held the lock 173s · Compiled successfully in 114s · Finished TypeScript in 5.9s"
        },
        {
          "command": "pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint --concurrency=2 (lock)",
          "exit": 0,
          "verdict": "os-verify-lock: VERDICT command-exit 0 · held the lock 85s"
        },
        {
          "command": "pnpm --filter \"@objectstack/client-react...\" build --workspace-concurrency=2 (lock)",
          "exit": 0,
          "verdict": "os-verify-lock: VERDICT command-exit 0 · held the lock 228s"
        },
        {
          "command": "on head 7a49e296, each exit 0: pnpm check:nul-bytes · check:doc-anchors · check:doc-authoring · check:docs-single-h1 · check:docs-transcript-drift · check:published-readme-links · check:docs-redirects · check:docs-locale-catch-all · check:page-declaration-shape · check:docs-audit-scope · check:corpus-claim-drift · check:docs-spec-enumerations · check:role-word · check:published-files · node scripts/check-docs-nav-label.mjs · check-docs-section-name.mjs · check-doc-frontmatter.mjs · check-doc-route-spelling.mjs --advisory · check-section-landing-index.mjs · check-undeclared-dep-imports.mjs · pnpm --filter @objectstack/lint run check:doc-formula-expressions · check:doc-security-posture",
          "exit": 0,
          "verdict": "22 of 22 exit 0"
        },
        {
          "command": "pnpm --filter @objectstack/spec run check:docs / check:empty-state / check:liveness / check:skill-examples / check:strictness-ledger / check:variant-docs / check:yaml-examples",
          "exit": 0,
          "verdict": "all exit 0; skill-examples: 260 prose examples type-check across 3 surfaces"
        },
        {
          "command": "remaining derived families (ci-filter-parity, closing-keyword-parity, comment-mask-corpus, keyed-text-bounds, registry-log-declared, rest-log-spy-declared, cross-package-test-inputs, driver-memory-census, gitlink-declared, logger-receiver-detach, org-identifier, react-page-adapter-contract, refd-timer-probe, release-notes, skill-identifier-liveness, test-source-alias, tier-file-adoption, vendor-version-stamps, watch-hint-literal, scripts-symbol-anchors, docs-audit affected-docs, drift-comment, agent-test-spelling, bash32-floor, cli-command-ids, entry-guard, parse-guard, pnpm-filter-targets, plus every --self-test the list names)",
          "exit": 0,
          "verdict": "all exit 0"
        },
        {
          "command": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran record",
          "exit": 0,
          "verdict": "dispatch-gates --ran: 68 derived famil(ies) accounted for — 68 run, 0 NOT-MEASURED"
        },
        {
          "command": "pnpm exec eslint --no-inline-config --format json docs/screenshots/render-hero-cover.mjs apps/docs/lib/site.ts apps/docs/app/[lang]/page.tsx",
          "exit": 0,
          "verdict": "3 files, 0 errors, 0 warnings (narrowed; evidence in tests)"
        }
      ],
      "files_changed": [
        "README.md",
        "apps/docs/app/[lang]/page.tsx",
        "apps/docs/lib/site.ts",
        "apps/docs/public/hero-cover-dark.webp (binary, 83,272 to 85,472 B)",
        "content/docs/concepts/meta.json",
        "content/docs/concepts/north-star.mdx",
        "content/docs/concepts/ontology.mdx (new, 100 lines)",
        "content/docs/getting-started/glossary.mdx",
        "content/docs/index.mdx",
        "docs/screenshots/hero-cover-dark.html (new, template)",
        "docs/screenshots/hero-cover-dark.png (binary, 406,703 to 563,953 B)",
        "docs/screenshots/render-hero-cover.mjs (new, render script)",
        "scripts/docs-audit/handwritten-docs.json (+1 line, outside the named surface, required by check:docs-audit-scope)"
      ],
      "anchor_sweep": {
        "grep -rn \"README.md#\" content/docs apps/docs README.md": 0,
        "git grep of the six README section slugs across the whole tree": 0,
        "updated_links": 0
      },
      "cover": {
        "updated": true,
        "png": "docs/screenshots/hero-cover-dark.png 2400x1200 563,953 B",
        "webp": "apps/docs/public/hero-cover-dark.webp 2400x1200 85,472 B (15.2% of the PNG), sharp 0.35.4 / libwebp 1.6.0, quality 80, effort 6, from the PNG",
        "method": "docs/screenshots/hero-cover-dark.html screenshot by docs/screenshots/render-hero-cover.mjs; Chromium at /opt/pw-browsers/chromium via @playwright/test resolved from examples/app-showcase; sharp resolved beside the docs app Next dependency; Inter + IBM Plex Mono fetched from Google Fonts through the proxy and asserted loaded before the screenshot; the script refuses to overwrite the committed files when they did not load",
        "right_panel": "simplified CSS dashboard card (no standalone dashboard screenshot exists in the repo; no new binary allowed)",
        "site_ts": "provenance block updated to the new bytes and sharp 0.35.4; width/height 2400x1200 unchanged and verified against both files"
      },
      "mechanism_assumptions": [
        "HOME_TITLE at page.tsx line 34 with readers at 56/67/76/112: confirmed; one edit moved all four.",
        "sharp in the closure: 0.35.4, resolved beside next in the pnpm store (apps/docs declares no sharp; provenance said 0.35.3, now recorded as 0.35.4). cwebp not needed.",
        "Playwright: @playwright/test 1.63.0 is declared only by examples/app-showcase, not packages/qa or apps/docs; resolved from there. Chromium at PLAYWRIGHT_BROWSERS_PATH as stated.",
        "README anchors: expected several hits, measured 0 (both spellings). check:published-readme-links reads packages READMEs, not the root README, but is green either way.",
        "Themes retirement entry 18.stack-themes-carrier-retired.ts read before the word was dropped.",
        "Same-day churn: main moved cc645f23 to 901e7cf1 before the branch was cut; neither commit touches this surface. The card quoted fragments matched current main."
      ],
      "deviations": [
        "scripts/docs-audit/handwritten-docs.json edited (one added line) although not on the named file surface: check:docs-audit-scope reds on an unlisted hand-written page and prescribes its own --write.",
        "README \"What we mean by ontology\" links the concept page first and the glossary entry second (card said the glossary entry); index.mdx first paragraph carries one link sentence after slogan + descriptor. Both toward C2 making the page the authority.",
        "Glossary entry: six-line definition paragraph plus link, then a second short paragraph holding the knowledge-ontology sentence, the industry semantic-layer sentence and the existing analytics-dataset sentence (13 lines in all, heading included).",
        "Render needs network for Google Fonts; no font binary vendored (card allows only the two cover binaries). The script fails loudly rather than shipping the system fallback.",
        "The PR body was sent once through the relay (read-back: 8640 bytes sent, 8640 stored, identical); the first relay attempt was refused for payload shape (envelope instead of a bare array) with zero writes and resent.",
        "The PR body's last acceptance note says the repository description field still carries the old tagline; the PR read-back shows it already carries the slogan. The body is written once and not PATCHed by this seat; the seat may amend that one sentence if it wants the body exact."
      ],
      "mcp_calls": "3 — mcp__github__issue_read get (#21586), mcp__github__issue_read get_comments (#21586), mcp__github__pull_request_read get (#21591); all reads, no write tool.",
      "api_writes": "3 relay strokes via scripts/pm (objectstack-fleet[bot]) — pr_create POST /repos/objectstack-ai/objectstack/pulls (run 37126243316, PR #21591 draft); label-write POST /repos/objectstack-ai/objectstack/issues/21591/labels + POST .../issues/21591/assignees (run 37126302311; read-back matches: labels documentation, size/l, skip-changeset; assignee hotlong); os-dev-report comment POST /repos/objectstack-ai/objectstack/issues/21586/comments (this comment). git push x5 to the branch (not REST). skip-changeset applied after measuring packages/** untouched (0 paths).",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: the next positioning pass (PM) · noted, not filed — apps/docs/app/[lang]/page.tsx chip row near line 261 (\"Fits in an agent's context\", \"Typed, validated, governed\", \"Self-host anywhere\") still carries the pre-slogan chips, directly above the re-rendered poster whose chips are the four promises; the card does not name it.",
        "carrier: maintainer, out of git (the card's own note) · noted, not filed — the 90-second video narration still carries the old tagline. The repository description field already reads the new slogan (measured on the PR read-back: \"The ontology is the software. One executable business ontology: AI writes it, the runtime runs it, agents operate it, you own it.\"), so that half of the card's note is already done."
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 21586,
      "status": "done",
      "round": "patch round on the same claim: PR #21591, no new PR, assignee untouched",
      "branch": "claude/issue-21586-positioning-follow-up",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/21591",
      "session": "session_011hRnra93sK5Q2gTYYTbdJR",
      "premise_still_valid": true,
      "head": "cb089e2b (previous head 7a49e296; one commit added, tree clean)",
      "summary": "This round changed one thing: the chip row under the docs home page hero in apps/docs/app/[lang]/page.tsx (the div near line 258, same markup and separator spelling) now reads Executable | AI-writable | Agent-operable | You own it instead of the pre-slogan trio, so it matches the re-rendered poster directly below it. No other file, no other copy touched. Commit cb089e2b \"docs(home): align the hero chip row with the four promises\", pushed to the same branch; the PR body was not PATCHed.",
      "tests": "On head cb089e2b in a rebuilt worktree: `pnpm --filter @objectstack/spec build && turbo run build --filter=@objectstack/formula --filter=@objectstack/lint` under os-verify-lock (OS_VERIFY_LOCK_SLOT=issue-21586): VERDICT command-exit 0 (74s). `pnpm --filter @objectstack/docs build` under the lock: VERDICT command-exit 0 (130s; \"Compiled successfully in 78s\", \"Finished TypeScript in 4.5s\"); no tracked file moved by the build. `pnpm check:nul-bytes` exit 0; `pnpm check:doc-anchors` exit 0; `pnpm check:docs-transcript-drift` exit 0 (4 declared transcript values across 409 pages equal the registry). Narrowed eslint measurement: `pnpm exec eslint --no-inline-config --format json apps/docs/app/[lang]/page.tsx` → 1 file, 0 errors, 0 warnings; population = the config generic block files [**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}], which covers the file; the config states it never enables type-aware linting (no parserOptions.project), so this diff cannot move an untouched file. Every exit captured to disk before being read. Edit verified by occurrence count: new row present once, old chip strings 0.",
      "gates": [
        {
          "command": "pnpm --filter @objectstack/spec build && turbo run build --filter=@objectstack/formula --filter=@objectstack/lint (lock)",
          "exit": 0,
          "verdict": "os-verify-lock: VERDICT command-exit 0 · held the lock 74s"
        },
        {
          "command": "pnpm --filter @objectstack/docs build (lock)",
          "exit": 0,
          "verdict": "os-verify-lock: VERDICT command-exit 0 · held the lock 130s · Compiled successfully in 78s · Finished TypeScript in 4.5s"
        },
        {
          "command": "pnpm check:nul-bytes",
          "exit": 0,
          "verdict": "exit 0"
        },
        {
          "command": "pnpm check:doc-anchors",
          "exit": 0,
          "verdict": "exit 0"
        },
        {
          "command": "pnpm check:docs-transcript-drift",
          "exit": 0,
          "verdict": "4 declared transcript value(s) across 409 page(s) equal what the registry derives today"
        },
        {
          "command": "pnpm exec eslint --no-inline-config --format json apps/docs/app/[lang]/page.tsx",
          "exit": 0,
          "verdict": "1 file, 0 errors, 0 warnings (narrowed; evidence in tests)"
        }
      ],
      "files_changed": [
        "apps/docs/app/[lang]/page.tsx (+5 / -3: four spans, three separators)"
      ],
      "deviations": [],
      "mcp_calls": "3 cumulative, none this round — issue_read get, issue_read get_comments (#21586), pull_request_read get (#21591); all reads.",
      "api_writes": "4 relay strokes cumulative via scripts/pm as objectstack-fleet[bot] — pr_create (run 37126243316), label-write labels + assignees on #21591 (run 37126302311), os-dev-report comment 5969649788 (run 37126450806), and this patch-round comment POST /repos/objectstack-ai/objectstack/issues/21586/comments. git push x6 to the branch (not REST). No PR body PATCH.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: maintainer, out of git · noted, not filed — the 90-second video narration still carries the old tagline (the repository description field already reads the slogan)."
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Review: ACCEPT — PR #21591 at head cb089e2b

    Seat domain:devx#2 · session_011hRnra93sK5Q2gTYYTbdJR · reviewed against GitHub and the fetched branch at 2026-10-03T13:42Z, not against the report.

    PR shape. Draft, base main, body opens Fixes #21586, Clause-②: no at line start, session-URL footer. Labels documentation · size/l · skip-changeset; assignee matches the card. 13 files, +567 / −110. node scripts/pm/check-governed-merges.mjs --pr 21591: 0 of 13 paths governed, 677 changed lines, under the human-merge threshold.

    Scope and changeset. No packages/**, no content/docs/references/**, no content/docs/releases/**, no CHANGELOG. skip-changeset holds: nothing published is touched. One file outside the card's named surface, scripts/docs-audit/handwritten-docs.json (+1 line): gate-required registration of the new page, regenerated with the gate's own --write, mechanical, same doc-gate family, no other claim on it, named in the PR body with evidence. Accepted as an in-place fix.

    Prose checked sentence by sentence (docs faces are seat-reviewed, no contract-review record owed).

    • README: hero is the slogan, the English descriptor, 本体即软件。, and "Apps small enough for AI to hold whole."; chip row is Executable · AI-writable · Agent-operable · You own it · Apache-2.0; "What we mean by ontology" carries all four guardrail facts (no inheritance, axioms or reasoner; not a semantic layer; projections; code moves into the runtime) and links the concept page and the glossary entry; sections run Try it → What we mean by ontology → The runtime runs it → Agents are the first users → Why the mistakes don't ship → You own it → Ship it → Hack on the framework; the "Agents are the first users" opener (objects are tools, actions are tools, permissions decide, audit records) and the claude mcp add snippet are present; the LICENSING sentence and the blog quote sit under "You own it". Anchor sweep: 0 links into README anchors in content/docs, apps/docs and README.md; check:published-readme-links and check:doc-anchors green on the head.
    • content/docs/index.mdx: first paragraph is slogan + descriptor + one link sentence to the concept page; frontmatter description aligned; the build-loop diagram unchanged.
    • content/docs/concepts/ontology.mdx (new, 100 lines): five sections as the card asked; the six core kinds match the spec (lookup and master-detail relations; actions; permissions incl. RLS/FLS/sharing; flows; agent and tool definitions); "not a knowledge ontology" cites the retired abstract key and ADR-0049; "not the industry's semantic layer" and the narrower analytics-dataset sense are both stated; "constrained JSX … parsed into a server-driven UI tree, never executed" matches the sdui-parser contract; registered in content/docs/concepts/meta.json after metadata-driven; navTitle present.
    • Glossary "Business Ontology": 44 → 13 lines, six-line definition ending in the link, then the knowledge-ontology, industry semantic-layer and analytics-dataset sentences; UI Protocol entry no longer lists Themes (retired at protocol 18, 18.stack-themes-carrier-retired.ts read first).
    • content/docs/concepts/north-star.mdx: exactly one bridge sentence added.
    • apps/docs/app/[lang]/page.tsx: HOME_TITLE → "The ontology is the software" (feeds title, OG, Twitter, JSON-LD at lines 56/67/76/112); hero chip row → the four promises (patch round, commit cb089e2b, +5/−3, nothing else).
    • apps/docs/lib/site.ts: HERO_COVER.alt is the descriptor; provenance block records the template, the render script, sharp 0.35.4 and the new byte counts; width/height 2400×1200 unchanged.

    Cover. docs/screenshots/hero-cover-dark.png (2400×1200, 563,953 B) viewed: headline "The ontology is the software.", subhead the descriptor, chips the four promises + Apache-2.0, layout, type and right-hand code card preserved; quality on par with the previous master. apps/docs/public/hero-cover-dark.webp derived per the provenance recipe (85,472 B). Design source now committed: docs/screenshots/hero-cover-dark.html + render-hero-cover.mjs (preinstalled Chromium only, refuses to overwrite when web fonts did not load, never playwright install).

    Verification readings (dev's, pinned to head). Docs build VERDICT command-exit 0 on both heads; 68 derived gate families run and reconciled on 7a49e296; doc gates re-run on cb089e2b (nul-bytes, doc-anchors, docs-transcript-drift) exit 0; narrowed eslint on the changed TS/JS files with the three required pieces (population from the config, JSON file count, non-type-aware invariance). API reads that git could have answered: none flagged. mcp_calls: 3 reads, no write tool. api_writes: 4 relay strokes, all through scripts/pm.

    Deviations accepted. (1) README "What we mean by ontology" links the concept page before the glossary entry, and index.mdx carries one link sentence — both toward C2's "the page is the authority". (2) The glossary entry no longer keeps the two bullets of the earlier wording verbatim; their substance (you own it; it is executed) lives on the concept page, and C2's six-line cap governs. (3) The PR body's last acceptance note says the repository description field still carries the old tagline; measured on the PR read-back, it already reads the slogan — that half of the card's reminder is done. Only the 90-second video narration remains, out of git, for the maintainer.

    CI at acceptance (head cb089e2b). TypeScript Type Check success, Build Docs success, Dogfood Regression Gate success, Governed Surface Queue Guard success, Test Core 2–6/6 success; Lint & Repo Gates and Test Core 1/6 in progress; Build Core, Temporal Conformance, Console Pin Gate expected skips (docs-only path filter). Landing (ready + auto-merge through the queue) follows once every check on this head is green.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #21591 → d2e687fdff, verified on origin/main by content at 2026-10-03T14:33Z.

    • Every surface on main is blob-identical to the landing head cb089e2bc0: README.md 7790eb1d02, apps/docs/app/[lang]/page.tsx 405ba5fed4, apps/docs/lib/site.ts 3698c4d98a, content/docs/concepts/ontology.mdx b773ce35b7, content/docs/getting-started/glossary.mdx b2b073e243, content/docs/index.mdx d4fa32d4dd, docs/screenshots/hero-cover-dark.png 7b3dc8c96a, apps/docs/public/hero-cover-dark.webp f8f2e7c42b.
    • README on main opens on the slogan, the descriptor, 本体即软件。 and the proof line; the chip row is the four promises; sections run Try it → What we mean by ontology → The runtime runs it → Agents are the first users → Why the mistakes don't ship → You own it → Ship it → Hack on the framework.
    • The docs home title, OG/Twitter/JSON-LD titles and the hero chip row carry the slogan and the four promises; the cover master and its WebP are the re-render from the committed template; the Business Ontology page is registered in the concepts nav and the hand-written doc ledger; the glossary UI Protocol entry no longer lists the retired Themes.
    • One patch round on the same claim (the docs home chip row, cb089e2b); contract review not owed (docs faces only), seat-reviewed sentence by sentence in the ACCEPT above. Queue build green; merged by the queue at 14:32Z.
    • Changeset: none, skip-changeset, packages/** untouched.

    Out of git, for the maintainer: the repository description already carries the slogan (measured); the 90-second video narration still carries the old tagline.

    pm:dispatched removed with this comment. Seat domain:devx#2 · session_011hRnra93sK5Q2gTYYTbdJR


    Generated by Claude Code

  7. added a commit that references this issue on Oct 7, 2026
    d2e687f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:devxDomain lane — seat card indexed by label:pm:seat

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions