Skip to content

docs: docs/NORTH-STAR.md — the maintainer's North Star, verbatim (finalized in chat 2026-09-18) #19131

Description

@os-elon-musk

Filed by the domain:skills execution seat (session_01BTeBejoPUvRHN8WdAJC6oF, seat post #7623) at 2026-09-18T22:09Z on the maintainer's word in chat (「同意,北极星定稿」 · 「其他同意」). Labels domain:skills · priority:p1 · pm:dispatched set by the seat (its own lane; claimed in the same act). ⛔ Not a decision card: the text is final — the maintainer edits it only by deleting or replacing lines on the PR.

Deliverable

One new file docs/NORTH-STAR.md whose content is the block below, byte-for-byte (the dev copies it, ⛔ never rewords, reformats, translates, adds a number, a date, a provenance line or a footer). It is the fleet's law above AGENTS.md; the enforcement (SKILL.md 优先序 · 取卡全序 · 分诊判据 · governed register · AGENTS.md pointer · PRIORITIZATION.md pointer) is #18489 and ⛔ not this card. Draft PR, Fixes this card, Clause-②: no, skip-changeset; the maintainer merges by hand (a governed-by-intent surface until #18489 registers it).

The text

# ObjectStack 北极星

**我们是什么**:一个应用开发平台;创业阶段。

**给谁**:第三方开发者,AI 代理为主、人验收——AI 进入我们的元数据协议写应用,人看结果、拍板。应用的终端用户是企业里的业务人员,他们通过 Agent 和界面使用应用。

**做出来的是什么**:**AI 原生的企业管理应用**——业务对象与记录、看数据的视图、能用的表单、真挡得住的权限、审批与自动化、经营报表、登录与身份、可对外的 API、文件、客户的语言,以及不写代码在运行中改应用。AI 原生的意思:应用自带一个能替用户操作它的 Agent——本仓(社区版)通过 MCP 把对象与动作暴露出去,用户接入自己的 Agent;企业版把 Agent 内置在用户界面里,那一半住 cloud 仓。缺任何一样就不是这个应用。这一行是定义,不是清单;每一项做到什么、怎么验证,在 `docs/qa/platform-checklist/`。参考实现 hotcrm。

**什么算做好**:一个建在协议上的应用,过了验证才算做好——它的元数据对应的清单项在一次 run 里通过,`objectstack verify` 在它上面是绿的。没过验证的交付不算 done。

**唯一的度量,那条路**:一个新的 AI 开发者(人在旁验收)从 `npm create objectstack` 出发:写元数据 → 本地跑起来、看到 → 验证响亮拒绝错的、放行对的 → 发布并装进一个环境 → 接一个 Agent(社区版走 MCP),让它在应用里完成一次真实业务操作 → 按客户一句话需求迭代一次。每周真走一遍,结果落一张 run record。第一个断掉的步骤就是当前的 P0;跑得通但结果错的是 P2。

**优先级**:
1. 安全与数据完整性永远最高,不等路。
2. 路断了、或清单上的能力断了 ⇒ P0/P1;能跑但出错 ⇒ P2;不在路上、不在清单上 ⇒ p3 或不做。
3. 产品仓还有开放的 P0/P1 时,任何车道不派 p2/p3 的工具卡、契约卫生卡;解锁产品 P0/P1 的仪器卡沿链继承其优先级。
4. 因为写的是 AI、用的也是 AI:元数据既要 AI 能写——错的必须被响亮拒绝并给处方,永不静默落库;也要 AI 能用——声明了的对象、动作、agent / tool / skill 元数据在运行时兑现,MCP 面暴露的就是应用真能做的。写给 AI 的文档与 skills 说错一句,等于产品缺陷。

**阶段姿态**:速度优先于兼容。用的人少:退役立即生效,无过渡窗口、无别名双拼;兼容层、迁移窗口一类的工作默认 p3;声明了但不兑现的键按发布批量退役,不一键一卡。

**仪器为车队服务**:改 PM 协议、门禁、棘轮、技能的卡,以「它落地后车队的哪个决定或动作会不一样」评级——说得出(一次本来会派错的派发、一次落不了的落地、一次放过假货的复核、一个卡住的席位),就按上面的规则定级,与产品卡同场竞争;说不出,就不做。

**现在不做**:云服务的旅程(注册、控制面、托管)另有自己的清单;企业版内置 Agent 属 cloud 仓,不在本仓的路与清单里;计费未建。

**账本**:能力与验证的账本是 `docs/qa/platform-checklist/`,本页不复制它。本页不带任何数字;数字从命令来。

Acceptance

  • diff between the PR's file and the fenced block above is empty (the dev pastes the block verbatim and proves it with a byte diff in the PR body).
  • check:doc-authoring and the doc gates the derivation names are green; no other file moves.

Generated by Claude Code

Activity

  1. self-assigned this
    on Sep 18, 2026
  2. os-elon-musk commented on Sep 18, 2026

    @os-elon-musk
    CollaboratorAuthor

    Claim: PM loop round 2 (R2 — the North Star file, the maintainer's word in chat 2026-09-18)
    Session: session_01BTeBejoPUvRHN8WdAJC6oF
    Branch: claude/issue-19131-north-star
    Worktree: objectstack-issue-19131
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: docs/NORTH-STAR.md (new file, the card body's fenced block byte-for-byte); nothing else
    Container & model: S, mode:subagent, model: claude-opus-5 (a verbatim paste — no judgment to serve); governed by intent ⇒ draft, the maintainer merges by hand
    Clause-②: no
    Thread-read: card body only (the seat's own filing, the text finalized in chat)
    Serial constraints cleared: no open PR touches docs/NORTH-STAR.md (a new path); stem scan of origin heads for north-star: none. Batch: 2 in flight (#18489 + this). Lock free.
    Ruling-ref: maintainer, chat 2026-09-18, 「同意,北极星定稿」 · 「其他同意」


    Generated by Claude Code

  3. os-elon-musk commented on Sep 18, 2026

    @os-elon-musk
    CollaboratorAuthor

    os-dev-report

    {
      "issue": 19131,
      "status": "done",
      "branch": "claude/issue-19131-north-star",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/19134",
      "session": "session_01BTeBejoPUvRHN8WdAJC6oF",
      "premise_still_valid": true,
      "summary": "Added exactly one new file, docs/NORTH-STAR.md, whose 3271 bytes are the card body's fenced markdown block byte for byte: nothing reworded, reformatted, translated or annotated, no added heading/date/number/provenance/status/TOC/footer, no trailing whitespace on any line, exactly one terminating newline. Source was this session's scratchpad north-star.md, proven equal to the card block by two independent extractions (a sed fence range and a JSON-side split) that agree on sha256. The card body was checked for sanitizer damage before use (one opening and one closing fence, no image-bracket sequence, complete Markdown). Draft PR #19134 opened against main, Fixes #19131 on line 1, Clause-②: no at line start; governed by intent, so it stays draft for the maintainer to merge by hand. The PR carries size/s, a label set by another actor (the size labeler) and deliberately left alone.",
      "files_changed": [
        "docs/NORTH-STAR.md (new, 25 lines, 3271 bytes)"
      ],
      "byte_diff_proof": "diff card-block.md docs/NORTH-STAR.md :: exit 0, no output. sha256 identical across all four readings: the scratchpad source, the sed-extracted card block, the JSON-extracted card block, and git show HEAD:docs/NORTH-STAR.md.",
      "file_sha256": "b94152a07b9fd81aa59e019875aa5a53a00a7c058e53e098bb1b6f65ac6f67a8",
      "tests": "No package build or package test is owed: pnpm-workspace.yaml's globs (packages/*, its seven nested roots, apps/*, examples/*) do not reach repo-root docs/, so this path belongs to no workspace package. All 11 gate families derived by 'node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack' were run at commit 37f1830fd, each exit code captured redirect-then-$? and never through a pipe: all 11 exit 0. Reconciliation with --ran: '11 derived families accounted for - 11 run, 0 NOT-MEASURED (a DERIVED zero - all 11 recorded an exit code and none of them is 3)'. check:doc-authoring is the family that really reads this file (its ROOTS are .claude, docs, skills, content, and its self-test pins the live docs/ corpus as in scope): '402 files clean - no bare metadata literals'. check:doc-formula-expressions first exited 3 (PREREQUISITE NOT MET: @objectstack/lint resolves to source but its compiled entry point was absent) - recorded as NOT MEASURED, not as a failure - then passed after @objectstack/formula and @objectstack/lint were built through scripts/pm/os-verify-lock.sh (VERDICT command-exit 0 on both runs, 100s and 110s held, 0s waited): '22 record-scoped formula examples across 439 files / 1378 TS blocks judged clean'. After a fresh git fetch origin main the derivation was re-run: the command list is byte-identical, so no newly landed family touches this diff. One extra audit outside the derivation, for a doc-only diff: node scripts/docs-audit/check-affected-docs.mjs :: exit 0. No ablation or reverse verification applies - this card adds a verbatim document and introduces no guard that could be ablated.",
      "gates": [
        "node scripts/check-ci-filter-parity.mjs :: exit 0",
        "node scripts/check-closing-keyword-parity.mjs :: exit 0",
        "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0",
        "node scripts/check-comment-mask-corpus.mjs :: exit 0",
        "pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 (first run exit 3 = PREREQUISITE NOT MET, then built under os-verify-lock.sh)",
        "pnpm check:cross-package-test-inputs :: exit 0",
        "pnpm check:doc-authoring :: exit 0",
        "pnpm check:driver-memory-census :: exit 0",
        "pnpm check:nul-bytes :: exit 0",
        "pnpm check:refd-timer-probe :: exit 0",
        "pnpm check:watch-hint-literal :: exit 0",
        "extra, outside the derivation: node scripts/docs-audit/check-affected-docs.mjs :: exit 0",
        "repo-wide lint narrowed to empty, with all three readings: (1) population read off eslint.config.mjs - every files: entry targets ts/tsx/mts/cts/js/jsx/mjs/cjs only, no config object matches Markdown; (2) file count read off --format json - eslint on docs/NORTH-STAR.md returns errorCount 0 with the single message \"File ignored because no matching configuration was supplied.\", so the diff contributes 0 linted files; (3) invariance - eslint.config.mjs is not in this diff and this repo runs one config that never enables type-aware linting for any file (no parserOptions.project, no typed rules; stated in the config header and true of every languageOptions block), so this diff cannot move the verdict on any untouched file. All three taken at 37f1830fd, the final commit. turbo ls --affected is deliberately NOT cited: with no base in a fresh worktree it printed all 81 packages, a fallback rather than a reading.",
        "CI: not awaited, per the standing contract (the PR was opened and this report filed without polling any check run)."
      ],
      "changeset": "skip-changeset, measured not assumed: an npm tarball can only contain files inside its own package directory and docs/NORTH-STAR.md sits outside every workspace package; cross-checked from the other side, no manifest under packages/**, apps/**, examples/** or skills/** has a files[] entry referencing a docs/ path, and the repo-root manifest is private: true. Nothing published moves.",
      "labels": "skip-changeset applied through node scripts/pm/label-write.mjs --repo objectstack-ai/objectstack --issue 19134 --add skip-changeset (additive POST .../labels, HTTP 200), four steps performed and the comparative read-back MATCHES the target: size/s, skip-changeset. size/s was set by another actor and left untouched. needs:contract-review is not present on the PR and was neither added nor removed - that label belongs to the seat.",
      "mcp_calls": "0 - no mcp__github__* tool was called, read or write.",
      "api_writes": "3 REST proxy writes: POST /repos/objectstack-ai/objectstack/pulls (draft, Content-Type application/json, HTTP 201), POST /repos/objectstack-ai/objectstack/issues/19134/labels (HTTP 200, via scripts/pm/label-write.mjs), POST /repos/objectstack-ai/objectstack/issues/19131/comments (this report). Plus 2 git pushes on claude/issue-19131-north-star: the empty-branch routing probe, then the one commit. No PATCH of the PR body: it was written once, on creation, and read back in full - 8245 stored bytes vs 8246 sent, the single difference being the trailing newline the platform drops, with exactly one footer in the session-URL form and the fenced proof block intact.",
      "deviations": [
        "One conflict between the dispatch and .claude/agents/os-dev.md, resolved in favour of the agent file as that file requires, and named here rather than chosen silently: the dispatch asked the '## 维护者速读(草稿)' section to say only three things, while the agent file fixes five sections for a rules-layer PR body. The PR carries all five, with the dispatch's three points as their content and 席位意见 left empty.",
        "No write was denied or refused by the classifier. No write outside the budget was attempted."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "noted, not filed: AGENTS.md Prime Directive #8 still points readers at content/docs/concepts/north-star.mdx, so after this lands two north-star documents coexist until the pointers are rewired. Carrier: 18489, which remains open and owns exactly that work (AGENTS.md and SKILL.md pointers, PRIORITIZATION.md, the governed register). Not a defect today and not filed."
      ]
    }

    Generated by Claude Code

  4. os-elon-musk commented on Sep 18, 2026

    @os-elon-musk
    CollaboratorAuthor

    ACCEPT — PR #19134 @ 37f1830fdf (one commit; one new file, +25) · skills seat session_01BTeBejoPUvRHN8WdAJC6oF · 2026-09-18T22:31Z

    Read on GitHub: draft, base main, body line 1 Fixes #19131, Clause-②: no at line start; closing keywords touch this card only; get_files = docs/NORTH-STAR.md; skip-changeset present (size/s, documentation are the labellers'); report on this card names the head, literal first line os-dev-report, no HTML comment, read back to the tail. Seat verification: git diff of the PR's file against the finalized text (this card's fenced block, and the seat's own copy) is EMPTY — byte-for-byte, sha256 b94152a07b9fd81a… on both sides; 25 lines, 3,271 bytes, one terminating newline. Gates: 11 derived / 11 run / 0 NOT-MEASURED at 37f1830fd (check:doc-authoring 402 files clean; the formula-expressions prerequisite cleared under the verify lock); docs-audit/check-affected-docs.mjs 0. CI at 2026-09-18T22:30Z: 17 success · 11 skipped · 5 in progress, nothing red. The newest Claim: (5736797586) names this branch.

    No contract review is owed on a verbatim paste of the maintainer's own text; the seat's judgment is the byte identity above. One reading the dev surfaced, carried by the seat to the maintainer in chat and to #18489's dev: content/docs/concepts/north-star.mdx (141 lines, the architecture direction — Zod first, metadata as the app contract, runtime shape, environment artifact) already exists and is what AGENTS.md Prime Directive #8 points at; after this lands two documents carry the name until the pointers say which is which (#18489 rewires AGENTS.md; whether the .mdx is retitled is the maintainer's word).

    Path face: governed by intent (the law above AGENTS.md; #19133 / #18489 register it) ⇒ draft; the maintainer merges by hand. The final 维护者速读 is on the PR; review requested from os-zhuang and hotlong. This card closes on the merge (Fixes).


    Generated by Claude Code

  5. removed their assignment
    on Sep 18, 2026
  6. added a commit that references this issue on Sep 28, 2026
    aadea24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions