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

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 6, 2026 1:13pm

Request Review

@github-actions github-actions Bot added the size/s label Aug 6, 2026
@github-actions

github-actions Bot commented Aug 6, 2026

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.

@qq9340100 qq9340100 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 queue Aug 6, 2026
Merged via the queue into main with commit 2381c19 Aug 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 free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changeset PR 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