Skip to content

docs(spec): HookEvent 枚举注释不再声称批量写把行级谓词放在 input (#5899) - #5964

Merged
qq9340100 merged 1 commit into
mainfrom
claude/issue-5899-hookevent-enum-comment
Aug 6, 2026
Merged

docs(spec): HookEvent 枚举注释不再声称批量写把行级谓词放在 input (#5899)#5964
qq9340100 merged 1 commit into
mainfrom
claude/issue-5899-hookevent-enum-comment

Conversation

@qq9340100

Copy link
Copy Markdown
Collaborator

Fixes#5899

问题

packages/spec/src/data/hook.zod.tsHookEvent 枚举注释里,写事件那段说批量写「with the
row-scoping predicate carried in input」。这是假的:引擎从不在写路径的 HookContext.input 上放
谓词,它在引擎内部 OperationContext.ast(#2982)。

这与 同一个文件 200 行外HookContextSchema.input 契约表(:340 起,PR #5668 落地 #5273
时写下)直接矛盾 —— 那段已经写着「The row-scoping predicate is NOT reachable from input at
all」。#5668 只改了契约表那一处,枚举注释这半句没被覆盖到(git log -L 显示该段最后一次变动是
#5306),于是文件自相矛盾:同一份契约,两个相反的答案,读者按哪一处写代码都说得通。

改动

纯注释订正,只动枚举注释那一段:

主句保留:批量写触发同名beforeUpdate/beforeDelete/afterUpdate/afterDelete,没有
per-cardinality 的 *Many 事件(#3195)。

未触及 .describe()、任何键或类型;未触及 #5900 的 skills / content/docs 那一面(devx 车道)。

真值来源

无需新测 —— PR #5668 已在 main 上留下钉子 packages/objectql/src/hook-input-shape-contract.test.ts,
其中三条直接钉死本句(含阳性对照:读路径确实带 input.ast,所以「写路径没有 ast」是测量而非空断言)。
本 PR 的新措辞即是那些断言的自然语言版本。

验证

pnpm --filter @objectstack/spec check:generated -> 10/10 artifacts up to date(零生成物漂移)
pnpm --filter @objectstack/spec typecheck -> tsc --noEmit 通过 + check:test-typecheck OK
pnpm --filter @objectstack/spec test -> 323 files / 8267 tests passed
pnpm --filter @objectstack/objectql test -> 128 files / 2116 tests passed
node scripts/check-nul-bytes.mjs -> OK(5726 个文件,无控制字节)

check:generated 首次因 api-surface.json 报 stale —— 该 gate 读的是 BUILT dist,fresh
worktree 尚未 build,gate 自己的提示即指出这是 phantom;pnpm --filter @objectstack/spec build
后复跑,10 项全绿,确认本改动零生成物漂移。

无 changeset

零生成物、零行为变化、.describe() 未涉及 —— 本 PR 不发布任何东西,故不加 changeset,改用
skip-changeset 标签。

https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY


Generated by Claude Code

枚举注释里「row-scoping predicate carried in `input`」与同文件 200 行外的
`HookContextSchema.input` 契约表(":340" 起,PR #5668 落地 #5273 时写下的
「NOT reachable from `input` at all」)自相矛盾。引擎从不在写路径的
HookContext.input 上放谓词,它在引擎内部 OperationContext.ast(#2982)。
改为与契约表一致的措辞,并把读者指向该表与其钉子测试
packages/objectql/src/hook-input-shape-contract.test.ts。主句(批量写触发同名
事件、没有 *Many 事件)保留。纯注释订正,未触及 .describe()、键或类型。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
@vercel

vercelBot commented Aug 6, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 6, 2026 1:13pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

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

  • content/docs/ai/agents.mdx(via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx(via @objectstack/spec)
  • content/docs/ai/skills.mdx(via @objectstack/spec)
  • content/docs/api/client-sdk.mdx(via @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/spec)
  • 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 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 packages/spec)
  • content/docs/concepts/north-star.mdx(via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx(via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx(via @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/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/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/spec)
  • content/docs/kernel/cluster.mdx(via @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 packages/spec)
  • content/docs/kernel/index.mdx(via packages/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 packages/spec)
  • content/docs/kernel/services-checklist.mdx(via @objectstack/spec)
  • content/docs/kernel/services.mdx(via @objectstack/spec)
  • content/docs/permissions/authorization.mdx(via @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/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/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx(via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx(via @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/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/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.

@qq9340100qq9340100 added skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed size/s protocol:data labels Aug 6, 2026 — with Claude
@qq9340100
qq9340100 marked this pull request as ready for review August 6, 2026 13:27
@qq9340100
qq9340100 added this pull request to the merge queueAug 6, 2026
Merged via the queue into main with commit 2381c19Aug 6, 2026
33 of 34 checks passed
@qq9340100
qq9340100 deleted the claude/issue-5899-hookevent-enum-comment branch August 6, 2026 13:41
baozhoutao pushed a commit that referenced this pull request Aug 6, 2026
#5964 刚把 `HookEvent` 的枚举注释对齐到契约表的「谓词不在 `input` 上」。
两句都对,但要分清:钩子拿不到的是 composed `ast`(生效谓词);`before*`
期间 `input.options` 仍是调用方那只 engine options 包(engine.ts 5516→5517 /
6137→6152 之后才重建成 DriverOptions),`where` 与 `multi` 都在 —— 守卫读的
正是它。中间件只收窄不放宽,所以把调用方谓词当目标集是上界近似,对
fail-closed 守卫恰是安全方向。契约表那两处 `before` 行的措辞另记为 #5997。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JwwiU9bjhwy2SWj13ho8uv
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

HookEvent 的枚举注释仍在说批量写把行级谓词「carried in input」—— 与 #5273 同一句假话,在同文件 40 行之外

2 participants

@qq9340100@claude