事实(对 origin/main 核实)
content/docs/kernel/runtime-services/data-service.mdx:42-51:
## Example
const contact = await services.data.get('contact', ctx.input.contact_id);
const orders = await services.data.find('sales_order', {
filter: { contact_id: contact.id },
sort: [{ field: 'created_at', order: 'desc' }],
top: 20,
});
ctx.input.… 只有 hook 上下文(和沙箱 body)才有这个读法,而 hook 上下文没有 services 键 —— #5720 已实测钉死:引擎五处 hookContext 构造点逐键构造(object / event / input / session / provenance / user / api / transaction / ql),buildHookSandboxContext 同样不产;把示例按 (ctx: HookContext) 如实标注即 TS2339: Property 'services' does not exist。
即这段 Example 把「hook 的 ctx.input」和「hook 拿不到的 services.data」拼在一起,和 #5720 修掉的 examples.mdx / sharing-service.mdx 是同一族缺陷,只是这一页没被 #5720 的裁定与派发面点名(#5720 的 PR #5938 严格按派发面只改那两页,故此处按 PD #10 单独记录,未夹带)。
为什么仍算缺陷
services.data 本身不是幻觉:runtime-services 索引页的 binding note 写明这是契约签名面,开放框架不往 hook ctx 注入 services,托管运行时才提供该绑定。缺陷在于 Example 用 ctx.input 把它写成了 hook 代码 —— 照抄进 hook 会在 services 上 TypeError(比 #5720 的「无条件 403」响,但同样是文档教了运行时不交付的形状)。
顺带一处措辞待核:同页 - **Canonical source:** packages/client/src/index.ts 指的是客户端 SDK,与「runtime service」标题的关系值得在修这页时一并说清。
建议修法(与 #5720 已落地的形状对齐)
PR #5938 给这两页定了模式,照搬即可:
关联
未加标签、未认领,交 PM 分诊定级。
事实(对
origin/main核实)content/docs/kernel/runtime-services/data-service.mdx:42-51:ctx.input.…只有 hook 上下文(和沙箱 body)才有这个读法,而 hook 上下文没有services键 —— #5720 已实测钉死:引擎五处hookContext构造点逐键构造(object/event/input/session/provenance/user/api/transaction/ql),buildHookSandboxContext同样不产;把示例按(ctx: HookContext)如实标注即TS2339: Property 'services' does not exist。即这段 Example 把「hook 的
ctx.input」和「hook 拿不到的services.data」拼在一起,和 #5720 修掉的examples.mdx/sharing-service.mdx是同一族缺陷,只是这一页没被 #5720 的裁定与派发面点名(#5720 的 PR #5938 严格按派发面只改那两页,故此处按 PD #10 单独记录,未夹带)。为什么仍算缺陷
services.data本身不是幻觉:runtime-services 索引页的 binding note 写明这是契约签名面,开放框架不往 hook ctx 注入services,托管运行时才提供该绑定。缺陷在于 Example 用ctx.input把它写成了 hook 代码 —— 照抄进 hook 会在services上TypeError(比 #5720 的「无条件 403」响,但同样是文档教了运行时不交付的形状)。顺带一处措辞待核:同页
- **Canonical source:** packages/client/src/index.ts指的是客户端 SDK,与「runtime service」标题的关系值得在修这页时一并说清。建议修法(与 #5720 已落地的形状对齐)
PR #5938 给这两页定了模式,照搬即可:
ctx.api.object('contact').findOne({ where: { id } })(docs(kernel): runtime-services 的 hook 示例改教真实通道 —— 去掉不存在的ctx.services(#5720) #5938 的 examples.mdx 第 2 节就是这个形状,已进os:check真编译);services.data的签名示范,就去掉ctx.的 hook 味道(用普通入参),并像 docs(kernel): runtime-services 的 hook 示例改教真实通道 —— 去掉不存在的ctx.services(#5720) #5938 给sharing-service.mdx加的那样,说明这是持有该绑定的代码(托管运行时)在调用。关联
ctx.services—— hook 上下文从来没有这个键,照抄的 hook 会拒掉每一次写入 #5720 / PR docs(kernel): runtime-services 的 hook 示例改教真实通道 —— 去掉不存在的ctx.services(#5720) #5938(同族,runtime-services 另两页,已 docs-only 修完并给出模式)check:skill-examples应拒绝 os:check 块内把入参标any—— 标记了却零覆盖的空门 #5943(check:skill-examples禁 os:check 块内入参标any)—— 注意本页 Example 没有 os:check 标记,所以此处不是"空门",而是"根本没进门":同一族缺陷的另一种藏法,修这页时值得考虑是否补标(补了就得真过)。未加标签、未认领,交 PM 分诊定级。