Skip to content

docs(spec): 补齐 preserveAudit 的 .describe(),并按实测形态重写 RLS using 的描述 (#6881, #6762) - #6918

Merged
os-project-manager merged 4 commits into
mainfrom
claude/issue-6881-6762-describe-sweep
Aug 9, 2026
Merged

docs(spec): 补齐 preserveAudit 的 .describe(),并按实测形态重写 RLS using 的描述 (#6881, #6762)#6918
os-project-manager merged 4 commits into
mainfrom
claude/issue-6881-6762-describe-sweep

Conversation

@os-project-manager

@os-project-manageros-project-manager commented Aug 9, 2026

Copy link
Copy Markdown
Collaborator

Fixes#6881
Fixes#6762

Paired 「spec-surface sweep」卡(#6243 模型) —— 两条同类问题:已发布的 .describe() 说明不足
属性上方的 TSDoc 块不进生成器,只有 .describe() 会进 content/docs/references/**,所以这两处直接决定参考文档里那一格渲染出什么。

按条目 checklist 复核,两条彼此独立、可分别裁决。


条目 1 —— #6881ExecutionContextSchema.preserveAudit 没有 .describe()

锚点(实测)packages/spec/src/kernel/execution-context.zod.ts:356(卡上写 ~:356,实测一致)

口径对齐的两处已合入站点(读过,不另造第三种拼法)

站点借用的词汇
packages/spec/src/data/field.zod.tsFieldSchema.readonly(PR #6823「Exempt on the UPDATE path ONLY」、「On INSERT the exemption does NOT apply (#6640)」、whitelist = 审计/时间戳族 + 作者声明的业务 readonly 字段
content/docs/protocol/objectql/security.mdx 的 callout(同一 PR #6823「CREATE is stripped earlier, at the DataProtocol ingress,whose only exemption is context.isSystem」、「the server logs a WARN … the strip still applies」

即落到描述里的规则:豁免仅在 UPDATE 路径成立;INSERT 侧只认 context.isSystem,非 system 的 create 请求即便携带 preserveAudit,字段仍被剥离并记 WARN。


条目 2 —— #6762rls.zod.tsusing.describe() 既 under-promise 又指向正在退役的方言

锚点(实测)packages/spec/src/security/rls.zod.ts:358(打标记后现为 :364

  • Before —— 「One of the four compiler-supported forms: field = current_user.< prop >, field = 'literal', field IN (current_user.< array >), or 1 = 1.」两个方向都不准:比实际编译的,且四种拼写全是 SQL 方言(ADR-0058 D1 定其为过渡态,sqlPredicateToCel@deprecated)。
  • After —— 改为按编译器实际下推的形态描述,用规范 CEL;SQL 拼写降格为「过渡桥接」而非定义。

须实测:门实际接受什么(不照抄卡上的清单)

我自己跑了 isSupportedRlsExpression实测 ENFORCES(远宽于「四种」):

形态样例结果
== 对上下文值 / 字面量organization_id == current_user.organization_id / status == 'published'ENFORCES
!=region != nullENFORCES
<<=>>=amount > 100amount <= 100ENFORCES
incurrent_user.* 数组assigned_to_id in current_user.team_member_idsENFORCES
in内联字面量列表status in ['draft', 'pending']ENFORCES
&& / ||a == 1 && b == 2a == 1 || b == 2ENFORCES
裸 allow-alltrueENFORCES
传统 SQL(经桥接)===INin1 = 1ENFORCES

实测 FAILS CLOSED:SQL 的 AND / OR / NOT IN / IS NULL / LIKE、算术 amount + 1 > 2、子查询、跨对象 record.a.b == 1、裸真值字段 is_active、取反 !is_active、空串。

没有换一个新的固定计数。 「四」换成「八」是同一个缺陷。描述改为讲形态(哪些算子、可否组合),把「数目」这件事整个去掉;pin 里还有一条断言明确禁止再出现固定计数。

|| 与内联字面量列表这两项是本次实测的增量发现(issue 正文只提到 &&),已写进描述。
CEL 拼写与同文件 PR #6729 落下的 check@examplestatus in ['draft', 'pending'])一致。


Lane admission —— acceptance 逐字节不变

domain:spec-surface.describe() 不参与 parsing;无任何 key / 类型 / 枚举成员 / refinement / 默认值移动。证据gen:schema 之后

$ git status --porcelain packages/spec/authorable-surface packages/spec/json-schema.manifest packages/spec/authorable-defaults packages/spec/authorable-surface.base.json
(空 —— 零 diff)
🔒 authorable-defaults/ verified against upstream — 1308 default(s) unchanged (#4666).

packages/spec/json-schema/.gitignore:61 的构建产物,不进版本库;已确认其磁盘内容确实随本次改动重生成。)

生成产物(两条同乘一次重生成)

pnpm --filter @objectstack/spec gen:docs恰好两个受版本控制的文件变化,各一行,无附带 churn:

 content/docs/references/kernel/execution-context.mdx | 2 +-
content/docs/references/security/rls.mdx | 2 +-

均为生成器产出,未手改;content/docs/releases/ 未触碰。

验证 —— 方向在跑之前先预测

两条都是正向内容断言,pin 读回 schema 上的 description 并断言其必须承载的实质。

反向臂预测实测
A. 把原描述原样放回git checkout origin/main -- 两个 zod 文件)REDRED,13/13。条目 1 的 7 条全部对 '' 失败(正是「空单元格」缺陷本身);条目 2 的 6 条对旧 four-forms 串失败,含「不得再出现固定计数」那条抓到字面量 four
B. anti-vacuity:两处都设为 .describe('')RED,且须由非空臂抓到RED,13 failed / 46 passed。两条目的「is present and non-empty」臂各自触发;而条目 2 的「does not re-close the set」臂出现在失败列表里 —— 它在 ''空洞通过,这正是非空臂存在的理由。

按 idiom 而非逐字断言:改写自由(用 toMatch 交替式),丢失实质不自由。
pin 覆盖检索时同时搜了转义正则拼法toMatch(/…/))而不只字面量(#6854 的教训)—— 两处此前均无既有 pin。

门的行为半边不重复 pin:packages/formula/src/rls-predicate.test.ts:46-67 已经钉住 isSupportedRlsExpression 的红/绿线,本 PR 只钉「散文与之相符」,避免同一事实两处钉。

结果

  • pnpm --filter @objectstack/spec test348 files / 8967 tests passed(合入 origin/main 之后、以及加标记之后各复跑一次)
  • pnpm --filter @objectstack/spec typecheck → 通过
  • pnpm lintcheck:generatedcheck:docscheck:authorable-surfacecheck:api-surfacecheck:spec-changescheck:upgrade-guidecheck:skill-refscheck:doc-authoringcheck:docs-audit-scopecheck:adr-anchorscheck:nul-bytes → 全部 exit 0
  • test-typecheck-debt.json 账本(@ts-expect-error 退役 pin 在 packages/spec 里是幽灵检查:tsconfig 把 **/*.test.ts 排除出唯一的 tsc --noEmit #5286 ratchet):前后均为 58 file(s) / 266 error(s),文件 sha256 b5e1c38e…逐字节未变 —— 两处新 pin 不带 tsc 错误。

范围 —— 刻意留在范围外的相邻问题,已立卡 #6919

⛔ 只有这两条修复,无搭车。相邻问题已作为正式 GitHub issue 立卡:#6919(未指派;finding + domain:spec-surface,无 pm:queue —— 观察类归档,不进派发池)。不是 PR 评论:合入后评论就不再是任何人会看的地方。

#6919 记录的是同一句话的两处副本,其中一处是我在复核期间新实测到的,且已发布

位置是否进生成器现状
rls.zod.ts 属性级 TSDoc(:296-354❌ 不进(gen:docs 只渲染 .describe() 与模块级 docblock)「Exactly four forms compile」「no support for AND/OR/NOT、= 以外的比较算子」
rls.zod.ts:79模块级 docblock —— 逐字渲染到 content/docs/references/security/rls.mdx:79「A small, fixed expression grammar (equality, set-membership, always-true)」

第二行是本 PR 没有动、但值得分诊优先看的一处:合入后 rls.mdx同一张渲染页上会同时有 :79 的旧三项说法和 :174 已改正的 using 行 —— 自相矛盾落在已发布面上。之所以仍未动它:派发卡把条目 2 限定为 .describe() 字符串,改它会额外改动一个已发布页面、超出本 PR「恰好两文件各一行」的证据面。按纪律记录、交分诊,不自行扩面。

本 PR 就近做了一件事:给 TSDoc 那段打 ⚠️ STALE 标记,不是重写。 改之前两处一致地错,改之后会互相矛盾 —— 而读源码者(常是 AI,ADR-0033)先撞上的是那段更长、更像权威的语法规范。标记把「两条互相矛盾的断言」降级为「一条断言 + 一句诚实警告」,指向 #6919,一行成本,不破坏 per-item 复核模型。重写那 60 行语法规范散文(连同 5 条 SQL 方言 @example)是 #6919 自己的卡。

实测确认标记不进生成器:加入后 content/docs/references/**零 diff —— 这也再次印证了 TSDoc 那半是观察类。

Changeset:.changeset/describe-preserve-audit-and-rls-using.md@objectstack/spec: patch)。


🤖 Generated with Claude Code

https://claude.ai/code/session_018ffcE95NaMJcL9XJ9VDYgk

, #6762)
两条同类的 spec-surface sweep:已发布的 `.describe()` 说明不足。属性上方的
TSDoc 块不进生成器,只有 `.describe()` 会进 `content/docs/references/**`,
所以这两处直接决定参考文档里那一格渲染出什么。纯文本改动 —— 没有 key、
类型、枚举成员、refinement 或默认值变动,acceptance surface 逐字节不变
(authorable-surface/、json-schema.manifest/、authorable-defaults/ 三者
gen:schema 后零 diff)。
#6881 —— ExecutionContextSchema.preserveAudit
此前是裸声明,语义只写在上方块注释里,于是 references/kernel/
execution-context.mdx:69 的描述列渲染为空。现在补上描述,并按 #6640 收窄
后的契约措辞,与已合入的两处(FieldSchema.readonly、protocol/objectql/
security.mdx 的 callout,均出自 PR #6823)保持同一口径:豁免仅在 UPDATE
路径成立;INSERT 侧在 DataProtocol ingress 更早剥离,只认 context.isSystem,
非 system 的 create 即便携带 preserveAudit 仍被剥离并记 WARN。
#6762 —— RowLevelSecurityPolicySchema.using
此前宣称「四种编译器支持的形式之一」且四种拼写全是 SQL 方言,两个方向都不准:
实测 isSupportedRlsExpression 之下 `!=`/`<`/`<=`/`>`/`>=`、对内联字面量列表
的 `in`、`&&`、`||` 与裸 `true` 都真正生效(比宣称的宽);而 ADR-0058 D1 定
CEL 为规范方言、sqlPredicateToCel 标 @deprecated(指向正在退役的方言)。
改为按能被下推的形态描述 —— 不重新数一个固定数目,换一个同样错的计数是同一
个缺陷 —— 并把 SQL 拼写降格为过渡桥接(`=`→`==`、`IN`→`in` 仍接受;SQL 的
AND/OR/NOT IN/IS NULL/LIKE 不在桥接内,fail-closed)。
两处各加了一条读回 description 的 pin,按 idiom 而非逐字断言(改写自由,
丢失实质不自由),并各带一条 anti-vacuity 非空断言。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ffcE95NaMJcL9XJ9VDYgk
@vercel

vercelBot commented Aug 9, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 9, 2026 5:18am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

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

113 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 @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/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/permissions/system-context.mdx(via packages/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.

PR #6918 修好了 `using` 的 `.describe()`,但同属性上方 45 行处的 TSDoc 块
(`:313`「Exactly four forms compile」)仍是旧说法。改之前两处一致地错,改
之后两处互相矛盾 —— 而读源码的人(常常是 AI,ADR-0033)先撞上的是那段更长、
更像权威的语法规范,没有任何信号提示下方那一行 `.describe()` 才是当前事实。
这里只加标记,不重写:重写那 60 行语法规范散文(连同 5 条 SQL 方言的
`@example`)是 #6919 自己的卡,塞进这张两条目 sweep 卡会破坏其 per-item
复核模型。标记把「两条互相矛盾的断言」降级为「一条断言 + 一句诚实警告」,
直到真正的修复落地。
该块不进生成器(gen:docs 只渲染 `.describe()` 与模块级 docblock),已实测
确认:加这段标记后 content/docs/references/** 零 diff。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ffcE95NaMJcL9XJ9VDYgk
PM 复核裁定:该行与属性级 TSDoc 性质不同,应并入本 PR。
`packages/spec/src/security/rls.zod.ts:79` 的
「A small, fixed expression grammar (equality, set-membership, always-true)」
是**模块级** docblock,会逐字渲染到 content/docs/references/security/rls.mdx:79
—— 与属性级 TSDoc(不进生成器,留给 #6919)不同,它是已发布面。
不改的话,本 PR 合入后同一张渲染页会自相矛盾:`:79` 说三项,`:174` 是按实测
改正的 using 行,而读者先撞上 `:79`。
改法与 `.describe()` 同一口径:讲能被下推的形态、canonical CEL,⛔ 不换一个
新的固定计数(「三」换「八」是同一个缺陷)。实测依据:比较算子全套、对
`current_user.*` 数组与内联字面量列表的 `in`、`&&`/`||` 均真正下推;其余
fail-closed。
现在 rls.mdx 相对 origin/main 恰好两行变化,且页内无残留旧说法。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ffcE95NaMJcL9XJ9VDYgk
@os-project-manager
os-project-manager marked this pull request as ready for review August 9, 2026 05:40
@os-project-manager
os-project-manager added this pull request to the merge queueAug 9, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 31297338477 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Test Core (3/3) — 失败步骤: Run this shard's tests

    �[41m�[1m FAIL �[22m�[49m src/commands/database-driver-allowlist.pin.test.ts�[2m > �[22m#6860 — --database-driver allowlist agrees with resolveStorageDefinition�[2m > �[22mos start�[2m > �[22moffers e
    �[41m�[1m FAIL �[22m�[49m src/commands/database-driver-allowlist.pin.test.ts�[2m > �[22m#6860 — --database-driver allowlist agrees with resolveStorageDefinition�[2m > �[22mos dev�[2m > �[22moffers eve
    �[41m�[1m FAIL �[22m�[49m src/commands/database-driver-allowlist.pin.test.ts�[2m > �[22m#6860 — --database-driver allowlist agrees with resolveStorageDefinition�[2m > �[22mos start�[2m > �[22mparses e
    �[41m�[1m FAIL �[22m�[49m src/commands/database-driver-allowlist.pin.test.ts�[2m > �[22m#6860 — --database-driver allowlist agrees with resolveStorageDefinition�[2m > �[22mos dev�[2m > �[22mparses eve
    

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 9 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 在其他 PR 的同类评论里搜同名测试;出现过 ⇒ flaky 实锤,开 issue 修/隔离那条测试。修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

@os-project-managerClaude

Copy link
Copy Markdown
CollaboratorAuthor

队列失败分诊 —— 与本 PR 无关,⛔ 暂不重排。完整分析在 #6935同类评论

简述,因为这两张是同一件事的两个观测点:

本 PR 只改 packages/spec 的两处 .describe() 与一处模块 docblock,外加两条 pin 与生成产物。失败的是 packages/cli/src/commands/database-driver-allowlist.pin.test.ts,够不到。

决定性的一点:本席的另一张 PR #6935 在一次独立的队列构建里红在完全相同的四条断言上(本 PR build 31297338477,#693531297316580)。两张 PR 文件面完全不同(#6935 折的是 ai/tool.zod.ts / data/object.zod.ts 的错误映射),唯一共同点是都不碰 packages/cli

两次独立构建、同一组失败、两个无关的 diff ⇒ 排除「某一张 PR 造成的回归」。

因此不重排: 两张都中,说明触发条件与 diff 无关,重排只会再烧一轮全队列然后红在同一处。对照今晚的 #6847 —— 那次重排一次即过,但判据是同批的 #6846 跑同一套全量套件并合并成功,存在绿的对照;这次没有。

本席正在独立探针里跑该钉在干净 main 上的结论,以区分「main 已坏、影响所有排队 PR」与「同批语义冲突」。拿到读数前不动,拿到后若是前者会立卡并通知维护者(归 domain:cli)。


Generated by Claude Code

Merged via the queue into main with commit d03fe25Aug 9, 2026
27 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-6881-6762-describe-sweep branch August 9, 2026 06:05
@github-actionsgithub-actionsBot mentioned this pull request Aug 10, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/mteststooling

Projects

None yet

2 participants

@os-project-manager@claude