Skip to content

feat(mcp): skill 的 instructions 半边投影为 MCP prompts 原语;tool-binding 半边标注 cloud-runtime-only (#3905) - #6077

Merged
qq9340100 merged 6 commits into
mainfrom
claude/issue-3905-skill-mcp-prompts
Aug 7, 2026
Merged

feat(mcp): skill 的 instructions 半边投影为 MCP prompts 原语;tool-binding 半边标注 cloud-runtime-only (#3905)#6077
qq9340100 merged 6 commits into
mainfrom
claude/issue-3905-skill-mcp-prompts

Conversation

@qq9340100

Copy link
Copy Markdown
Collaborator

Fixes #3905

按维护者 2026-08-03 裁 A(+ 2026-08-06 评估批复确认)落地:给 skill 一个开源消费方,把
tool-binding 半边如实标注 cloud-runtime-only,并修掉同仓重名。

1. 前提复核(issue 立于 07-28,已过 9 天)

逐条对 origin/main@9e3709a 重验,三条全部仍成立:

前提 复核结果
prompts/* 未实现 ✅ 仍未实现。grep 'prompts/list|prompts/get|listPrompts' packages/ 只命中 packages/spec/prompts/README.md(另一个东西:发行的 agent prompt 文本)。HTTP 面 handleHttpRequest 只声明 capabilities: { tools: {} }
skill 元数据零消费方 ✅ 仍是零。git grep SkillSchema origin/main -- packages/packages/spec/** 与 CHANGELOG 外无命中。
packages/mcp/src/skill.ts 重名 ✅ 仍在。
近日他人动过 packages/mcp? 该目录最后一次提交是 5426a80(docs-only,#5823);在飞分支中无一触碰 packages/mcp/**packages/runtime/src/domains/mcp.ts(含 #5837,其 76 个文件里没有 packages/mcp)。

一处修正:issue 说服务器「未实现 prompts 原语」。更准确的事实是 —— stdio 面早已有
一个 agent_prompt(bridgePrompts,SDK registerPrompt,所以 grep prompts/list
自然为空);网络可达的 HTTP 面才是零 prompts。这不改变结论(skill 元数据在两条
传输上都零消费),但本 PR 因此两条传输都补齐,而不是只补一条。

2. instructions 半边 → MCP prompts 原语

新模块 packages/mcp/src/skill-prompts.ts 拥有投影:

  • 投影什么:name → prompt 名(不改写),labeltitle,description 原样,
    instructionsprompts/get 的消息体(role: 'user' —— MCP 的 prompts/get
    没有 system 角色,交给模型的上下文即 user)。
  • 不投影什么:没有 instructions 的 skill(没有可服务的半边,不列,而不是列一个空的);
    active: false 的 skill。
  • 协议合规:capabilities.prompts 只在宿主确实能读到本环境 skill 元数据时声明并注册
    处理器(与 action 工具同一套按能力接线的优雅降级 —— 不声明「答不了的能力」);
    无 skill 时 prompts/list 返回空列表而非报错;prompts/get 取不存在的名字返回
    -32602 InvalidParams(MCP 规范对 prompts 的错误指引)。
  • 两条传输:HTTP 面每请求新建 server,投影从本请求自己的 bridge 读(与
    describeObject 同一条 per-environment 通道),多租户宿主不会把一个环境的 skill 服务给
    另一个环境;stdio 面在 bridgePrompts 里按 skill 注册(SDK 拥有该 server 的
    prompts/list),列表是接线时的快照、正文在 prompts/get 时重读,所以改了 skill 无需重启。
  • 保留名:skill 名撞上内建 agent_prompt告警并跳过(不静默丢弃),告诉作者代价与改法。

⚠️ 一处越界申报(请 PM/维护者确认)

认领申报的文件面是 packages/mcp/** + spec JSDoc + docs + 测试 + changeset。实现中确认:
HTTP 面的投影在 packages/mcp 内无法自足handleHttpRequest 的一切 per-request 环境
数据都来自 opts.bridge,而该 bridge 的唯一生产者是
packages/runtime/src/domains/mcp.tsbuildMcpBridge。可选路线:

  • (a) 只在 packages/mcp 里加 listSkills? 座位、不接生产者 → 就是本 issue 要消灭的
    declared ≠ enforced 形状,自相矛盾;
  • (b) 用插件在 start() 时捕获的 metadata service 供 HTTP 面读 → resolveService 存在
    「shared-kernel 多环境 + scoped 工厂」路径(http-dispatcher.ts:1720-1729),该 service
    可能是宿主的而非本环境的 → 跨租户元数据泄漏风险,不可接受;
  • (c) 在 buildMcpBridge 补 8 行 listSkills(与 listObjects/describeObject 同一条
    per-env 通道)→ 架构正确、安全、可测。

选了 (c) 并在此显式申报。碰撞检查:该文件在飞 0 触碰。这一读是元数据级(与
describeObject 同级、不做 EC 过滤),/mcp 路由本身要求已认证主体。

3. tool-binding 半边:文档明确 cloud-runtime-only

  • packages/spec/src/ai/skill.zod.ts —— schema 头部新增「skill 的两个半边各跑在哪」;
    tools / surface / triggerConditions 的 JSDoc + describe() 标注 CLOUD-RUNTIME-ONLY;
    instructions 标注「两个发行版都跑,开源里作为 MCP prompt 服务」。describe 变了,按 os-regen
    纪律重生成(见 §6)。
  • content/docs/ai/connect-mcp.mdx —— 新增「Prompts: your skills, served to the client」一节
    (含 defineSkill 例子 + prompts/list / prompts/get 报文)。
  • content/docs/ai/agents.mdx —— 把原先一句「skills 只在 ObjectOS 跑」换成两半边的表格:
    判断力(instructions)处处跑,接线(tools/surface/triggerConditions)只在 ObjectOS 跑,
    两半边在两个发行版里都照旧被校验 —— 所以开源里写的 skill 到 cloud 上语义完整。

lint 两条 ai 规则的语义未动(引用完整性在两个发行版里都仍然有效)。

4. 重名修复(方案与论证)

packages/mcp/src/skill.ts 从来不是 skill 元数据类型,而是 ADR-0036 Amendment C 的
SKILL.md 分发物。方案:按各自承载的产物命名,两侧模块头互指

承载
src/skill.ts src/skill-md.ts ADR-0036 Amendment C 的 SKILL.md 分发物
src/skill-prompts.ts skill 元数据类型(SkillSchema)→ MCP prompts 投影
src/skill.test.ts src/skill-md.test.ts 同上
src/skill-surface-guard.test.ts src/skill-md-surface-guard.test.ts SKILL.md ↔ 原生工具面漂移守卫

为什么是改名而不是挪位:该模块与 renderSkill() 同包、被 runtime 通过 'mcp' 服务鸭子调用
(domains/mcp.tsGET /mcp/skill),挪出去要动服务契约;而重名的成本全部发生在
grep 的第一跳,改名即根治。ADR-0036 Amendment C 的引用完整性保住:包的公开导出名
(renderSkillMarkdown / OBJECTSTACK_SKILL_NAME / OBJECTSTACK_SKILL_DESCRIPTION /
RenderSkillOptions)一个未变,ADR 正文引用的是包名与 amendment,不引用文件路径;仓内引用
(index.ts / mcp-server-runtime.ts / 两个测试 / 守卫失败提示 / plugin-auth 测试注释)全部跟名。

5. 测试

  • packages/mcp/src/skill-prompts.test.ts(新,13 例)—— 大部分走真实 JSON-RPC 线
    (handleHttpRequestprompts/list / prompts/get / initialize 往返),而不是内部
    helper 的返回值:本 issue 修的恰恰是「校验通过、lint 通过、客户端永远到不了」的面。
  • packages/mcp/src/__tests__/mcp-server-runtime.test.ts —— stdio 面用 SDK 的
    InMemoryTransport + 真 ClientlistPrompts() / getPrompt() 往返;另加「元数据服务
    读不了 skill 时不炸 boot、且 warn 而非吞掉」。
  • packages/runtime/src/http-dispatcher.mcp.test.ts —— 钉住 (c) 那条生产者:bridge 带
    listSkills 且读的是本环境元数据。

反向验证(方向事先预测:红,结果与预测一致):把 handleHttpRequest 里的
registerSkillPrompts + prompts 能力声明删掉后 ——

× lists an authored skill that carries instructions
× serves the skill instructions on prompts/get
× declares the prompts capability when the bridge can read skills
× returns an EMPTY list — not an error — when no skill is authored
× does not project a skill without instructions
× does not project an inactive skill
× rejects prompts/get for a name that is not a projected skill (-32602)
AssertionError: expected { code: -32601, …(1) } to be undefined
  "message": "Method not found",
Tests  7 failed | 90 passed (97)

—— 7 例转红,全部落在 -32601 Method not found;还原后 9 passed (9) / 97 passed (97)
剩下几例本就不该动(「宿主读不到 skill 时不声明能力」「工具面照常」「纯投影单测」),
它们保持绿正是正确的。

本地跑过的门:pnpm lint ✅、check:nul-bytes / doc-authoring / role-word /
adr-anchors / route-envelope / error-code-casing / engine-double-contract /
docs-audit-scope / published-files 全 0;@objectstack/spec 8309 例、
@objectstack/runtime 1477 例、@objectstack/mcp 97 例全绿;两包 typecheck 干净。

6. 生成物

describe() 变化 → 按纪律走 check:generated 判定 + --fix 只重生成它证明为陈旧的那一个
(content/docs/references/**,即 gen:docs),随后补跑 gen:openapi(#5371,无 diff),
再次 check:generated✓ All 10 generated artifacts are up to date.。未手改任何生成物。


Generated by Claude Code

claude added 2 commits August 6, 2026 16:43
…3905)

ADR-0063 §2 names skills the only third-party extension primitive, but the open
(BYO-AI) distribution consumed them nowhere: SkillSchema was authorable and
lint-validated with no code path reading it. The MCP server now implements
prompts/list + prompts/get from registered skill metadata, so a skill's
instructions half is reachable by any MCP client; the tool-binding half
(tools/surface/triggerConditions) is documented cloud-runtime-only rather than
faked. Also fixes the in-repo name collision: packages/mcp/src/skill.ts (the
ADR-0036 Amendment C SKILL.md distributable) is now skill-md.ts, next to the new
skill-prompts.ts that owns the metadata type.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
… docs (#3905)

The dispatcher test asserts buildMcpBridge hands the MCP runtime a listSkills
reader bound to the request's environment — the producer without which the
prompt surface has no source in the open distribution. content/docs/references
is the regenerated output of the skill.zod.ts describe() changes (check:generated
--fix, gen:docs only).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 7, 2026 2:18am

Request Review

…consumer (#3905)

The ledger's own note said the open edition consumes nothing here — true until
this PR. name/label/description/instructions/active now cite
packages/mcp/src/skill-prompts.ts as in-repo evidence; tools/surface/
triggerConditions are marked cloud-runtime-only in the same words the schema
now uses. Statuses unchanged (all were already live via the cloud runtime).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY

Copy link
Copy Markdown
Collaborator Author

CI 状态如实记录(交报告时刻,2026-08-06 19:05Z):

  • d43e8ba(承载全部代码 / 测试 / 文档 / 生成物的那一版)两条关卡作业均已收敛为绿:
    Lint & Type CheckESLint success(17:59:40,含 check:engine-double-contract /
    check:route-envelope / check:error-code-casing / check:adr-anchors 等全部家族门)、
    TypeScript Type Check success(18:12:08,含 check:authorable-surface /
    「Check generated reference docs are in sync with the spec」/ check:api-surface)。
  • 此后仅追加了 d153a82:只改 packages/spec/liveness/skill.json 一个 JSON 台账
    (记录 skill 属性的新开源消费方)。ESLint 与 tsc 都不读该文件;读它的两道门
    check:livenesscheck:generated 本地已跑 —— 分别是
    「✓ every governed-type property … is classified」与
    「✓ All 10 generated artifacts are up to date.」。
  • 该版本尚未被 GitHub 派发新的 Actions 运行(48 分钟无新 run)。这是仓库级 Actions 队列
    拥堵,不是本 PR 的信号:同批 17:54 创建的 CI / Spec Liveness Check /
    Duplicate Fix Guard / PR Automation 四个 run 到 19:05 仍为 queued,
    Docs Drift Check 的作业排队 50 分钟后被取消。队列疏通后请以新 run 的
    ESLint / TypeScript Type Check 结论为准。

本 PR 带 changeset(.changeset/skill-instructions-as-mcp-prompts.md),因此 skip-changeset
标签不适用;交报告时 PR 标签为空(打标签的 PR Automation 作业仍在排队)。


Generated by Claude Code


Generated by Claude Code

@github-actions github-actions Bot added the size/l label Aug 7, 2026
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 3 package(s): @objectstack/mcp, @objectstack/runtime, @objectstack/spec.

123 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/actions-as-tools.mdx (via @objectstack/mcp)
  • content/docs/ai/agents.mdx (via @objectstack/mcp, @objectstack/spec)
  • content/docs/ai/connect-mcp.mdx (via @objectstack/mcp)
  • content/docs/ai/index.mdx (via @objectstack/mcp)
  • content/docs/ai/natural-language-queries.mdx (via @objectstack/mcp)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via packages/runtime, @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/mcp, @objectstack/runtime, @objectstack/spec)
  • content/docs/api/wire-format.mdx (via @objectstack/runtime)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via @objectstack/runtime, packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via @objectstack/runtime, packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/runtime, @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/runtime, @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/environment-variables.mdx (via @objectstack/mcp)
  • content/docs/deployment/index.mdx (via @objectstack/runtime)
  • content/docs/deployment/production-readiness.mdx (via @objectstack/runtime)
  • content/docs/deployment/single-project-mode.mdx (via @objectstack/runtime)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/deployment/vercel.mdx (via @objectstack/runtime)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/runtime, @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/runtime, @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authentication.mdx (via @objectstack/runtime)
  • content/docs/permissions/authorization.mdx (via @objectstack/mcp, packages/runtime, @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/mcp, @objectstack/runtime, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/runtime, @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/runtime, @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/runtime, @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/mcp, @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/mcp, @objectstack/runtime, @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/runtime, @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests protocol:ai tooling labels Aug 7, 2026

Copy link
Copy Markdown
Collaborator Author

补圈同步完成(#5837 分片已 MERGED,main e3ef52b)。

新 head:d635b4e0(merge commit Merge remote-tracking branch 'origin/main')。

  1. 合并无冲突 —— 本 PR 从未碰过被分片的三个单体(authorable-surface.json /
    json-schema.manifest.json / api-surface.json),所以 main 侧的「删单体 + 建分片目录」
    整段直接进来,os-regen-pending 为空,无一处手改生成物。
  2. 动了哪些分片:一个都没有(0/14 · 0/14 · 0/16)。 重建 spec 后跑 check:generated,
    十道门全绿且工作区零 diff —— 这不是跳过,是判定:本 PR 的 spec 改动只是
    .describe() / JSDoc 文案,既不新增可作者化键(authorable-surface/)、也不改公开导出
    签名(api-surface/)、更不动 JSON schema 清单(json-schema.manifest/)。它落在
    未分片content/docs/references/ai/skill.mdx,那份早在合并前就已按 gen:docs 重生成。
    ✓ check:authorable-surface   authorable-surface/ (+ its .base.json anchor) + JSON schemas
    ✓ check:api-surface          api-surface/
    ✓ check:docs                 content/docs/references/**
    ✓ All 10 generated artifacts are up to date.
    
  3. 合并后重跑(§10「干净的合并不等于能跑的合并」,按重叠面收敛):@objectstack/mcp
    97 例、@objectstack/runtime 1477 例、@objectstack/spec 8336 例(main 侧新增
    sharded-artifacts.test.ts 后 326 个文件)全绿;两包 typecheck 干净;
    check:liveness 绿;check:nul-bytes 绿。
  4. 终 head 门禁结论:ESLint ✅ / TypeScript Type Check ✅ / Check Changeset ✅ /
    Spec property liveness ✅ / Flag docs affected ✅ / Duplicate Fix Guard ✅ /
    Console Pin Freshness ✅ / CI 全部作业(Build Core、Build Docs、Test Core 1-3、
    Dogfood Regression Gate 1-3、Dogfood Verify CLI、Temporal Conformance)✅。
    唯一非 success 的是 Console Pin Gate: skipped(条件门,本 PR 不动 console pin)。
    标签读回:documentation / size/l / tests / protocol:ai / tooling
    (本 PR 带 changeset,skip-changeset 不适用)。

Generated by Claude Code


Generated by Claude Code

@qq9340100
qq9340100 marked this pull request as ready for review August 7, 2026 01:24
@qq9340100
qq9340100 added this pull request to the merge queue Aug 7, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Aug 7, 2026
claude added 2 commits August 7, 2026 01:58
…erer change (#3905)

The os-regen merge driver flagged content/docs/references/ai/skill.mdx pending
after merging main: #5606 (6e82972) made docs-gen render a retiredKey tombstone
as `never` rather than `any`, and this branch had rewritten the same table's
describe column. Regenerated via check:generated --fix (gen:docs only, the one
gate it proved stale), so the row now carries main's `never` and this branch's
cloud-runtime-only wording. No generated file was hand-edited.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY

Copy link
Copy Markdown
Collaborator Author

解冲突补圈完成。新 head:23ab3d2c;mergeable_state: dirtyclean(base 已推进到 f7f54a96,含 #6100 的 slot-lookup 止血)。

冲突清单与解法(1 项,零手改生成物)

文件 性质 解法
content/docs/references/ai/skill.mdx 生成物,被 merge=os-regen 驱动挂起(os-regen-pending 唯一条目) 取合并后的树重生成:check:generated 判定它陈旧 → --fix 只跑 gen:docs → 复检十门全绿。驱动本身在 commit 时复核并自行清标(✓ … — current / marker cleared)

那一行的语义正是两侧叠加:6e829720f(#5606)把 retiredKey() 墓碑从 any 改渲染成 never,本分支改的是同表的 describe 列 —— 重生成后
| **triggerPhrases** | \never` | …取 main 的类型渲染,而surface/instructions/tools/triggerConditions` 四行保留本分支的 cloud-runtime-only 措辞。

源码零冲突。 特别核对了 PM 点名的相撞面:dca5bd36a(runtime 退役 ctx.user.roles 别名)与本 PR 在 packages/runtime/src/domains/mcp.ts 的落点不相交 —— 该文件内 roles/positions 零命中,本 PR 只在 buildMcpBridge 增了 listSkills(8 行,仍在原位)。830f3f16f(基线编码统一为裸字符)也未产生 diff:本 PR 不写基线。

合并后重跑(持 flock): check:generated✓ All 10 generated artifacts are up to date.;@objectstack/mcp 97 例全绿(含 skill-prompts.test.ts / mcp-server-runtime.test.ts)、@objectstack/runtime 1477 例全绿(含 http-dispatcher.mcp.test.ts)、两包 typecheck 干净、check:liveness 绿、check:nul-bytes 绿。

终 head 23ab3d2c 门禁全量结论:24 个 check 全部完成 —— ESLint ✅、TypeScript Type Check ✅、Check Changeset ✅、Spec property liveness ✅、Flag docs affected ✅、Duplicate Fix Guard ✅、Console Pin Freshness ✅、CI 全作业(Build Core / Build Docs / Test Core 1-3 + 聚合 / Dogfood Regression Gate 1-3 + 聚合 / Dogfood Verify CLI / Temporal Conformance)✅;唯一非 success 为 Console Pin Gate: skipped(条件门)。 标签:documentation / size/l / tests / protocol:ai / tooling


Generated by Claude Code


Generated by Claude Code

@qq9340100
qq9340100 added this pull request to the merge queue Aug 7, 2026
Merged via the queue into main with commit ae490ef Aug 7, 2026
25 checks passed
@qq9340100
qq9340100 deleted the claude/issue-3905-skill-mcp-prompts branch August 7, 2026 02:49
os-zhuang pushed a commit that referenced this pull request Aug 7, 2026
合并队列在 03:25:18Z 把本 PR 踢出,唯一红线是 `@objectstack/mcp`:
TEST_DEBT 记 52,`tsc --noEmit` 实测 53(+1)。这 +1 不是队列里排在
前面的 #6077 引入的(该 PR 自己那一代队列构建是绿的),而是一条此前
无人可见的既有漂移 —— ratchet 第一次对着移动的 base 重测,就把它照了
出来。换句话说,这个不变量在自己的引入 PR 上先抓到了一条真实漂移,
这本身就是它有效的证据。

+1 已完全归因:src/skill-prompts.test.ts(185,23),一处把
`SkillPrompt | null` 断言成 `Record< string, unknown >` 的 TS2352 ——
正是 #3905 / PR #6077 投影 skill `instructions` 为 MCP prompt 原语时
新增的文件,测试文件数也因此 8 -> 9。

按裁决走 option A(记实测 +10)而不是再跑一轮精确校准:packages/mcp
今天刚落一个 feature,属于活跃变动包,精确数字大概率会再输一次已经
被裁决判死的那场竞速(option D 连输五次)。RECORDED 63 = 实测 53 @
34558c2 + 10,note 按顶栏要求重写了成分 —— 旧 note 写的
"`error` is of type unknown, one catch-block idiom" 是错的,51 条
TS18046 全部是响应体 `json` 绑定,与 catch 块无关。

顶栏 BOOTSTRAP MARGINS 段同步从"四条"改为"五条"。

验证:`pnpm check:type-check-debt` 退出 0,34 条台账全部重测、无一条
高于记录值,五条余量各自打印 `ℹ can be lowered`;同一棵树上连测两次
数字逐字一致(mcp 53 / objectql 346 / rest 153 / lint 32 /
service-storage 42),故这是校准问题而非 tsc 不确定性。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation protocol:ai size/l tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Skills are declared the only third-party extension primitive, but nothing in the open distribution consumes them

2 participants