Skip to content

Commit cf478ea

Browse files
docs(readme): a Website / Docs / Cloud / Discussions link row and one quick-start table the docs home links to (#30860)
<!-- claude-projects-attribution: {"github_login":"marchtian"} --> _Requested by **田騏** · [project thread](https://claude.ai/code/project/chan_01VmuUhXU9SSUzqJYyXSmYSi?thread=cmsg_01VmuUhXU9SSUzqJYyXSmYSiNjyvCdXYygFqntMNR7S2dW)_ Fixes #30820 Clause-②: no Metadata-protocol: none ## 维护者速读 - **改了什么:** README 顶部加了一行官网 / 文档 / Cloud / 讨论区链接;新增一张「我想做… → 命令」快速上手表,覆盖脚手架、无项目跑 CLI、官方镜像等六条入口;文档首页改为链接这张表。 - **为什么改:** 评估者打开仓库首页看不到产品入口,三处快速上手各说各话;现在只有一张表,其它地方链过来,不会再漂移。 - **风险与回滚:** 只改 README 与一页文档,不动任何产品行为、不发版;回滚即 revert 本 PR。 - **先看:** `README.md` 的 `## Quick start` 表(镜像那一行最长,需要三个环境变量);`content/docs/index.mdx` 的 Start here 第一条。 - **两分钟验证:** 打开本 PR 分支的 README 渲染页,预期在徽章下看到四个链接,在简介后看到快速上手表,表里的锚点链接都能跳转。 - **需要你做的:** 在下方 `## For the maintainer` 对两项提案拍板(分支清理规则、根目录内部文件去留);本 PR 落地不依赖它,席位落地。 ## What changes - `README.md`: a plain link row under the badges: [Website](https://www.objectos.ai) · [Docs](https://objectstack.ai/docs) · [Cloud](https://cloud.objectos.ai) · [Discussions](https://github.com/objectstack-ai/objectstack/discussions). The badges are unchanged. - Website is `PRODUCT_SITE_ORIGIN` in `apps/docs/redirects.mjs` (`https://www.objectos.ai`), the origin the docs nav's Product entry reads. - Docs is the repository homepage and the existing Docs badge (`https://objectstack.ai/docs`). - Cloud is `DEFAULT_CLOUD_URL` (`packages/cli/src/utils/cloud-config.ts`, `packages/cloud-connection/src/cloud-url.ts`), the URL the runtime's unbound-host page names as the "ObjectOS Cloud console" (`packages/cli/src/commands/serve.ts`). - Discussions: `has_discussions` is true on the repository. - `README.md`: a new `## Quick start` section, right after the intro, holds the one "I want to… → command" table: build a new app with an agent, run the platform with no project, run a compiled app in the official image, ship a scaffolded app, look on StackBlitz, work on the framework. The StackBlitz line that opened "Try it in five minutes" moved into the table. - `content/docs/index.mdx`: the first "Start here" entry links to that table (`https://github.com/objectstack-ai/objectstack#quick-start`) instead of stating its own quick start. How each command was checked against the tree at `677d542a0e`: | Row | Checked against | | :--- | :--- | | `npm create objectstack@latest my-app && cd my-app && npx os dev --ui` | `packages/create-objectstack/package.json` (name `create-objectstack`, bin `create-objectstack`); the scaffolder installs dependencies unless `--skip-install` (`src/index.ts`); `os dev` has a `--ui` flag (`packages/cli/src/commands/dev.ts`); same commands as the README's own walkthrough and the docs landing's start box | | `npm i -g @objectstack/cli && os start` | `packages/cli/package.json` bin `os` and `objectstack`; `os start` boots an empty kernel with the Console and marketplace when it finds no artifact and no config (`packages/cli/src/commands/start.ts`, its `description`); default port 3000 (`start.ts` port flag text, `serve.ts` default) | | `docker run … ghcr.io/objectstack-ai/objectstack:latest` | `docker/README.md` "Or run it directly" (same mount path, same three variables it says to inject); `docker/Dockerfile` presets `OS_ARTIFACT_PATH=/srv/app/objectstack.json` and `OS_PORT=8080`; `latest` is "quick starts only" in that README's tag table, and the row says to pin `X.Y.Z` in production | | `docker build -t my-app . && docker compose up -d` | the README's own "Ship it" section; the scaffold template ships `Dockerfile` and `docker-compose.yml` (`packages/create-objectstack/src/templates/blank/`) | Registry readings, 2026-11-06: `npm view create-objectstack version` → `18.3.0`; `npm view @objectstack/cli version bin` → `18.3.0`, bins `os` and `objectstack`; the anonymous ghcr tag list for `objectstack-ai/objectstack` has 49 tags, `latest` and `18.3.0` among them. ## For the maintainer These are proposals. ⛔ Nothing below was executed: no branch was deleted and no file was moved. ### Branches Census at 2026-11-06 about 06:45Z. Heads from `git ls-remote --heads https://github.com/objectstack-ai/objectstack.git` (1,591). Pull requests from REST `GET /repos/objectstack-ai/objectstack/pulls?state=open` (41) and `?state=closed`, paged to the end (14,969), matching only same-repo heads by `head.ref`. Each branch is counted once, in the first class that fits, in this order: | Class | Count | Notes | | :--- | ---: | :--- | | `main` | 1 | | | `changeset-release/*` | 1 | `changeset-release/main`, the open Version Packages PR | | Referenced by an open PR | 40 | all 41 open PRs have same-repo heads; the 41st is `changeset-release/main` | | Merged-PR branch | 626 | 606 merged more than 7 days ago with no commit after the merge; 15 have a tip newer than their merge | | Closed, never merged | 258 | 155 closed more than 30 days ago with no commit after the close | | Other (no PR at all) | 665 | 633 `claude/*`, 13 `copilot/*`, 5 `deploy/*`, 5 `jack/*`, 2 `codex/*`, 2 `gh-readonly-queue/*`, and `board-archive`, `dev`, `kernel-change`, `feat/view-as-independent-entity`, `fix/sandbox-test-deadlines` | | **Total** | **1,591** | | For the "other" class, tip ancestry was read against `b6182249c3` in a full (not shallow) checkout, with control leg `git merge-base --is-ancestor 61c0798 b618224` → exit 0. 520 tips are already in `main`, 127 are not, and 18 tips are not in the local object store. 368 have a tip already in `main` and older than 30 days. 34 have a tip from the last 7 days: in-flight work before its PR opens, this card's own branch among them at census time. `delete_branch_on_merge` is already `true` on the repository, and only 10 merged-PR branches from the last 30 days remain, so the merged backlog is mostly historical. Proposed rule, for the maintainer to run or delegate: 1. Never prune: `main`, `changeset-release/*`, `gh-readonly-queue/*` (the merge queue owns these), any branch an open PR names, and any branch whose tip is younger than 14 days. 2. Prune a merged-PR branch once its PR merged more than 7 days ago and nothing was pushed after the merge (606 today). 3. Prune a closed-unmerged branch once its PR closed more than 30 days ago and nothing was pushed after the close (155 today). GitHub keeps the PR's own head ref, so the commits stay reachable from the PR page. 4. Prune a no-PR branch whose tip is already in `main` and older than 30 days (368 today). 5. List, do not prune, the rest of the no-PR class (tip not in `main`), so their owners can say whether they are still wanted. `deploy/*`, `jack/*` and `board-archive` look human-owned. Steps 2 to 4 would take the count from 1,591 to about 460. A report-only scheduled job that lists the candidates each week would keep it there; whether to add one is a separate decision. ### Root files an evaluator sees | Path | What it is for | Who reads it at that path | Can it move? | | :--- | :--- | :--- | :--- | | `.claude/` | Claude Code agents, hooks, settings, skills | Claude Code reads `.claude/` at the repository root only | No. It is also governed (Tier S, `GOVERNED_SURFACES`) | | `AGENTS.md`, `CLAUDE.md` | agent instructions | agents read them at the root | No. Both governed (Tier H) | | `.mcp.json` | project MCP server config (`chrome-devtools-mcp`) | Claude Code reads it at the root only | No. It could be deleted if no seat uses it | | `.vscode/mcp.json` | the same server for VS Code | VS Code reads `.vscode/` at the workspace root | No. Same deletion question | | `paseo.json` | worktree setup for the Paseo agent tool (`pnpm install`, `pnpm build`) | Paseo, at the root; nothing in the repository reads it (only a comment in `scripts/check-ci-filter-parity.mjs` names it) | Not moved; it can be deleted if the fleet no longer uses Paseo | | `objectstack.code-workspace` | VS Code multi-root workspace: `.` plus `../objectui` | whoever opens it by path | Yes, or delete it: `../objectui` predates `ui/` living in this repository, so the second folder no longer exists for a fresh clone | | `sdui.manifest.json` | the committed SDUI manifest | `scripts/gen-sdui-manifest-node.mjs` writes it; `ci.yml`, `lint.yml`, `release.yml` read it at the root | Only with a workflow edit, which is governed (Tier H) | | `RELEASE_NOTES.md` | historical release notes, frozen | linked from `check-links.yml`, `docs/releases-maintenance.md`, `content/docs/protocol/backward-compatibility.mdx` | Yes, to `docs/`, with those three links updated (one is a governed workflow) | The ones an evaluator is most likely to read as internal are `paseo.json`, `.mcp.json` and `objectstack.code-workspace`. None of the three is needed by a user of the product, and none is governed. Deleting `objectstack.code-workspace` is the clearest win, since its second folder is gone. ## Tests Docs and README only; no package code changed, so there is no unit test to add. ## Acceptance notes - **Premise, partly.** At `b6182249c3`, the `npm i -g @objectstack/cli && os start` wording the card attributes to the docs home is not in `content/docs/index.mdx` or the docs landing (`apps/docs/app/[lang]/page.tsx`). The docs home had no quick start of its own; the landing's start box carries `npm create objectstack@latest my-app` / `cd my-app` / `npx os dev --ui`, the same commands as the table's first row. The deployed site may lag the tree. - **Docs landing not changed.** `apps/docs/app/[lang]/page.tsx` keeps its own "Start here" box. Its commands match the table, so nothing contradicts it. Whether it should also link to the table is the seat's call. - **Cloud target.** The README's Cloud link goes to `https://cloud.objectos.ai`, the console. The docs landing's "ObjectOS Cloud" card goes to `https://www.objectos.ai`, the product site. If the maintainer wants the Cloud link to land on the product page instead, it is a one-word change. - **Not run live.** The commands were checked against the source and the registries, not run in this container. Booting `os start`, or the image without Docker, is NOT MEASURED. - **Changeset.** None. The root `package.json` is `private` and no published package ships the root `README.md` or `content/docs/`, so this PR carries `skip-changeset`. ## Verification Head `23bcc39f49` (merges `origin/main` at `677d542a0e`). `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derives 44 commands for the 2 changed paths; all 44 ran locally. <details><summary>Gates: 44 derived, 44 run, every exit 0</summary> Two gates first exited 3 (prerequisite not met: a missing build). I built the named closure under the verify lock and reran: - `pnpm check:docs-transcript-drift`: exit 3, then `pnpm --filter '@objectstack/lint...' build` (VERDICT command-exit 0), then exit 0 - `pnpm --filter @objectstack/spec run check:skill-examples`: exit 3, then `pnpm --filter '@objectstack/client-react...' build` (VERDICT command-exit 0), then exit 0 Final record: ``` node scripts/check-adr-links.mjs --self-test :: exit 0 node scripts/check-adr-links.mjs :: exit 0 node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 node scripts/check-closing-keyword-parity.mjs :: exit 0 node scripts/check-comment-mask-corpus.mjs :: 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 --self-test :: exit 0 node scripts/check-docs-section-name.mjs :: exit 0 node scripts/check-section-landing-index.mjs --self-test :: exit 0 node scripts/check-section-landing-index.mjs :: exit 0 node scripts/ci/plan-test-core-shards.mjs --self-test :: 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:ci-filter-parity :: exit 0 pnpm check:closed-ceremony-text :: 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:doc-frontmatter :: 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:gitlink-declared :: exit 0 pnpm check:nul-bytes :: 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:release-notes :: 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 ``` `--ran` reconciliation: `✓ dispatch-gates --ran: 44 derived famil(ies) accounted for — 44 run, 0 NOT-MEASURED (a DERIVED zero — all 44 recorded an exit code and none of them is 3).` Lychee (`check-links.yml`, offline) and Build Docs are CI's to run. The table's one file link, `./docker/README.md`, exists. `pnpm check:doc-anchors` checked every README `#fragment` the table adds (`#try-it-in-five-minutes`, `#ship-it`, `#hack-on-the-framework`). </details> 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude <noreply@anthropic.com>
1 parent a2f523a commit cf478ea

2 files changed

Lines changed: 17 additions & 3 deletions

File tree

‎README.md‎

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue.svg)
55
[![Docs](https://img.shields.io/badge/docs-objectstack.ai-0a0a0a.svg)](https://objectstack.ai/docs)
66

7+
[Website](https://www.objectos.ai) · [Docs](https://objectstack.ai/docs) · [Cloud](https://cloud.objectos.ai) · [Discussions](https://github.com/objectstack-ai/objectstack/discussions)
8+
79
> ## The ontology is the software.
810
>
911
> **One executable business ontology.** AI writes it, the runtime runs it, agents
@@ -30,10 +32,21 @@ image, `os start` and the Console, free and self-hosted ([Ship it](#ship-it))
3032
while [ObjectOS](https://www.objectos.ai) Cloud is the hosted edition and ObjectOS
3133
Enterprise the self-managed, licensed one.
3234

33-
## Try it in five minutes
35+
## Quick start
36+
37+
Every way in, in one table. The [docs home](https://objectstack.ai/docs) links
38+
here instead of keeping its own copy.
3439

35-
No install at all? Open a live app on
36-
[StackBlitz](https://stackblitz.com/github/objectstack-ai/hotcrm).
40+
| I want to… | Run | Then |
41+
| :--- | :--- | :--- |
42+
| Build a new app with an agent | `npm create objectstack@latest my-app && cd my-app && npx os dev --ui` | Open `http://localhost:3000/_console/`. The walkthrough is [Try it in five minutes](#try-it-in-five-minutes). |
43+
| Run the platform with no project yet | `npm i -g @objectstack/cli && os start` | Open `http://localhost:3000/_console/`. With no artifact to load, `os start` boots an empty kernel and you install apps from the Console marketplace ([`os start`](https://objectstack.ai/docs/deployment/cli#os-start)). |
44+
| Run a compiled app in the official image | `docker run -p 8080:8080 -v "$PWD/dist/objectstack.json:/srv/app/objectstack.json:ro" -e OS_DATABASE_URL -e OS_AUTH_SECRET -e OS_SECRET_KEY ghcr.io/objectstack-ai/objectstack:latest` | Export the three variables first. `latest` is for trying it; pin an exact `X.Y.Z` tag in production ([image README](./docker/README.md)). |
45+
| Ship a scaffolded app with Postgres | `docker build -t my-app . && docker compose up -d` | Run it inside the scaffolded project ([Ship it](#ship-it)). |
46+
| Look first, install nothing | [Open the CRM example on StackBlitz](https://stackblitz.com/github/objectstack-ai/hotcrm) | It runs in the browser. |
47+
| Work on the framework itself | `git clone https://github.com/objectstack-ai/objectstack.git` | Then follow [Hack on the framework](#hack-on-the-framework). |
48+
49+
## Try it in five minutes
3750

3851
**1 · Create a project.** The scaffolder installs the AI skills bundle and writes
3952
an `AGENTS.md`, so your agent starts with the protocol's rules already loaded —

‎content/docs/index.mdx‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ flowchart LR
2121

2222
## Start here
2323

24+
- [Quick start](https://github.com/objectstack-ai/objectstack#quick-start) — one "I want to… → command" table for every way in: scaffold a new app, run the CLI with no project, or run the `ghcr.io/objectstack-ai/objectstack` image. It lives in the repository README; this page links to it rather than keeping a second copy
2425
- [What Can It Do?](/docs/capabilities) — the platform's capabilities in business language, no code — start here if you're evaluating
2526
- [Build Without Code](/docs/build-without-code) — what admins and analysts do visually in Console, Studio, and Setup
2627
- [Build with Claude Code](/docs/getting-started/build-with-claude-code) — the main workflow: an agent builds the app, you verify it in the Console

0 commit comments

Comments
 (0)