Skip to content

fix(spec): ADR-0005 白名单强制 —— 九类未获批 allowOrgOverride:true 回滚为 false (#6483) - #6608

Merged
os-zhuang merged 5 commits into
mainfrom
claude/issue-6483-adr0005-override-rollback
Aug 9, 2026
Merged

fix(spec): ADR-0005 白名单强制 —— 九类未获批 allowOrgOverride:true 回滚为 false (#6483)#6608
os-zhuang merged 5 commits into
mainfrom
claude/issue-6483-adr0005-override-rollback

Conversation

@qq9340100

Copy link
Copy Markdown
Collaborator

Fixes#6483

依据 2026-08-08 维护者三段式裁决(issue 评论)执行,与 #6283(flow 行)同一裁决家族。完整交付表、测量方法、16 处测试随动清单与验证读数见分支 head commit message(95ef570fb)—— 本正文摘要三个复核要点与一处需维护者知情的冲突。

交付摘要

⚠️ ADR-0094 冲突(已如实反转 pin,promote 路径留独立修订单)

permission 回滚与 ADR-0094「2026-07-14 方向确认:package 集经 ADR-0005 overlay 做环境定制」直接冲突 —— plugin-security 的 permission-set-projection.ts 有 4 处生产写点(:713/:752/:794/:928),回滚后 code-declared 集的 write-through 拒 403(runtime-created / metadata-door materialized 集经 allowRuntimeCreate 层不受影响)。裁决①明令 permission 免测量回滚且「爆炸半径入档」,故本 PR 按裁决执行并把 dogfood 两文件 4 条功能 pin 反转为 403 pin;若维护者意图保留 ADR-0094 定制通道,应在独立修订单中为 permission 补 admission pair 后 promote —— 本 PR 未做任何 promote。该裁处已由 PM 立决策卡跟踪。

交付通道注记

云端工头 F 会话(session_01DE52u4GiUSiVh1F7F75arw)无 GitHub 工具,走交付降级通道:dev 实现并 push 分支,PM(session_011M7UwH25Unfi73UHim7ajY)代开本 PR 并跟进 CI 至合并。


Generated by Claude Code

…6483)
依据 2026-08-08 维护者三段式裁决(issue #6483,os-project-manager 评论)执行,
与 #6283(flow)同一裁决家族。ADR 锚:docs/adr/0005-metadata-customization-overlay.md:53-68
(租户可定制类型白名单 + 收尾段「新类型默认 false + admission pair」)。
━━━ 逐类型交付表(registry 行号为本分支最终行号 / origin/main 行号)━━━
裁决分支①(立即回滚,免测量;row counts 仍测量入档):
- permission registry 877 (main 820) true→false 测量: 0 条仓内活 org-scoped overlay 行;
但发现 1 条生产写路径:plugin-security ADR-0094 write-through
(permission-set-projection.ts:713/752/794/928,方向确认注释 2026-07-14)。
详见下方「ADR-0094 冲突证据」。ADR 锚: ADR-0005 security 行(:58)
- tool registry 970 (main 904) true→false 测量: 0 行、0 生产写点。ADR 锚: ai 行(:60)
- skill registry 971 (main 905) true→false 测量: 0 行、0 生产写点。ADR 锚: ai 行(:60)
裁决分支②(先测量后定;六类全部测得 0 行 ⇒ 全部回滚):
- page registry 675 (main 653) true→false 0 行。ADR 锚: ui ❌ 行(:62)
- app registry 677 (main 655) true→false 0 行;生产写点 runtime/domains/packages.ts:232
(ADR-0045 publish unhide)经核实走 allowRuntimeCreate 层(DB-materialized 行,
sys_metadata provenance ≠ artifact),不受影响。ADR 锚: ui ❌ 行(:62)
- action registry 681 (main 656) true→false 0 行;其 supportsOverlay:false 与 true 并存
即 #6283 flow 的 #6190 幽灵写形态,本次一并关闭。ADR 锚: ui ❌ 行(:62)
- dataset registry 685 (main 660) true→false 0 行;表中缺席 ⇒ 收尾段默认 false。
- book registry 852 (main 817) true→false 0 行;表中缺席 ⇒ 默认 false。
- position registry 878 (main 821) true→false 0 行;表中缺席 ⇒ 默认 false。
admission pair 测量:九类均有 resolveOverlaySchema() 接受的 overlay schema
(schema registry 统一后 (a) 恒真),九类均无 ADR-0005 要求的书面 render-only
理据 ⇒ (b) 全部不成立。无「有行且理据齐全」形态,无需 promote 保留。
对照组不动(核实):view 674 / dashboard 676 / report 682 = true;
translation/email_template = true;flow 717 = false(#6283/PR #6478 已合并,未触碰)。
━━━ 测量方法(入档)━━━
1. 种子/夹具静态扫描: grep 全仓 *.seed.{ts,yml,json}·examples/·dogfood 数据·
sys_metadata insert 点 —— 仅 1 个生产 insert(repository 本身),0 条九类 overlay 行。
2. 逐类型字面量普查: grep "type: '<t>'" 全仓非测试代码,逐文件人工分类
(artifact 定义 vs overlay 写)。
3. 决定性实验:九类临时全部翻 false,跑
spec/metadata-protocol/objectql/rest/runtime/metadata/plugin-security/dogfood
全套 —— 失败 16 例 = 精确爆炸半径(全部为测试对旧 true 值的依赖,逐一如实对齐,
无一静默放宽;清单见下)。
━━━ 写侧消费者核实 ━━━
- OVERLAY_ALLOWED_TYPES (metadata-protocol/src/protocol.ts:6954) 派生读取 ✓ 自然收敛
- assertAllowed 白名单 (metadata-protocol/src/sys-metadata-repository.ts:184,995) 派生读取 ✓ 自然收敛
- 无任何硬编码副本需要对齐;promoteDraft 生产调用方(protocol.ts:8799)已正确
按 isArtifactBacked 传 intent,无需改动(仅测试补传 intent)。
━━━ 测试随动(16 处失败 → 全绿)━━━
新增: metadata-protocol/src/protocol.adr0005-org-override-rollback.test.ts
(40 例:9×声明 pin + 9×2 403 拒绝(org-scoped/无 environmentId)+ 9×runtime-create
仍开 + 派生集 pin + action 幽灵形态 pin + view/dashboard/report 对照)
对齐(specimen 改走 OS_METADATA_WRITABLE 文档化逃生门,机制覆盖不降):
- protocol.save-receipt-wording.test.ts / protocol.delete-receipt-wording.test.ts
(overlay-less-yet-overridable 种群 pin 为空集 + ACTION 收据案例挂逃生门)
- objectql/protocol-registry-shadow.test.ts(4 例,app 信封机制)
- objectql/protocol-meta.test.ts([#5265] app 收据案例)
- runtime/meta-overlay-read-your-writes.test.ts(action shadow/restore 机制)
对齐(断言新行为):
- objectql/overlay-precedence.test.ts(permission/position 期望 false + 重引入护栏注释)
- objectql/sys-metadata-repository.test.ts(promoteDraft 测试补 intent:'runtime-only',
与生产调用方一致)
反转(ADR-0094 行为 pin → 403 拒绝 pin,见冲突证据):
- dogfood/showcase-permission-projection.dogfood.test.ts(2 例反转 + 文件头改述)
- dogfood/two-doors-permission.dogfood.test.ts(块2 两例反转 + env-authored 案例
换真正 runtime-authored specimen + 新增 artifact-backed 拒绝案例)
━━━ ③ 治理锚 ━━━
- registry 四个域段落均加 ADR-0005 + #6483 注释(ui 段 675-685 前、book 852 前、
security 877 前、ai 970 前),含「promote 须修订 ADR-0005 而非改本文件」指路。
- scripts/adr-anchors.json 新增 packages/spec/src/kernel/metadata-plugin.zod.ts
→ ADR-0005 锚(#6191 同机制);check:adr-anchors 39/39 OK。
━━━ 验证读数 ━━━
- spec test: 342 files / 8786 全绿;spec typecheck 绿
- metadata-protocol test: 58 files / 651+40 全绿
- objectql: 147 files / 2470 全绿;runtime: 111 files / 1611 全绿
- metadata / plugin-security / rest / dogfood: 全绿(dogfood 86 files,
permission 两文件 13/13)
- check:adr-anchors OK(39);check:generated 10/10(registry 值不入生成物,
authorable-defaults 仅含 schema 默认值 false,无需重生成)
- pnpm lint(改动文件)0 error;三示例 objectstack validate exit 0/0/0
(仓内自身元数据不依赖被回滚的 overlay 能力,warnings 为存量与本单无关)
- 逆向验证(方向先判后跑):skill false→true 重建后,预测 4 红
(声明 pin + 派生集 pin + 2 拒绝断言以「promise resolved {success:true}
instead of rejecting」形态红)/其余 36 绿;实测 4 红/36 绿,恢复后 40/40 绿。
- push 前已 merge 最新 origin/main(d0a5ceb,快进,无重叠文件);合并基座上
复跑:metadata-protocol 58 files/651 全绿、spec test+typecheck 与 objectql
全绿、check:adr-anchors 39 OK、check:generated 10/10、ADR-0087 门禁绿。
━━━ ADR-0094 冲突证据(留独立 ADR-0005 修订单裁处)━━━
permission 回滚与 ADR-0094「2026-07-14 方向确认:package 集经 ADR-0005 overlay
做环境定制」直接冲突。证据链:
1. plugin-security/src/permission-set-projection.ts 文件头注释明写该方向及日期;
写路径 4 处 saveMetaItem({type:'permission'})。
2. dogfood 两文件 4 例曾以功能 pin 固化该行为(本 commit 已按裁决反转为 403 pin)。
3. 其单测 permission-set-projection.test.ts 为 mock saveMetaItem 的隔离 harness,
感知不到真实门 —— 回滚后依旧全绿(未改动;真实门行为由 dogfood + 新增
403 套件覆盖)。
4. 行为边界实测:门读 artifact-backing 而非记录 managed_by ——
code-declared 集(member_default、bootStack 下的 showcase_contributor)拒 403;
runtime-created / metadata-door materialized 集(sys_metadata provenance)
经 allowRuntimeCreate 层不受影响。
若维护者意图保留 ADR-0094 定制通道,应在独立修订单中为 permission 补
admission pair 后 promote —— 本 PR 未做任何 promote。
changeset: .changeset/adr0005-nine-type-org-override-rollback.md(minor —— 实测
全类型 0 活行,按裁决口径 minor 如实写明 403 行为收紧;ADR-0087 门禁绿,
无 breaking 声明故无需处置标记)。
范围红线遵守:未动 flow 行;未做 promote;未动 objectui(#5768 症状在
changeset/注释中交叉引用);未动 content/docs/releases/。
Closes#6483
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DE52u4GiUSiVh1F7F75arw
@vercel

vercelBot commented Aug 8, 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 4:02am

Request Review

@github-actions

github-actionsBot commented Aug 8, 2026

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.

…teral union
check:type-check-debt --re-measure caught +2 in metadata-protocol's DEBT
layer (63 -> 65): ROLLED_BACK and CONTROLS were bare string[], and the
derived-set pin calls Set<RegistryType>.has() on them. Typed via the
registry's own literal union — as const satisfies for the controls, a cast
for Object.keys(BODIES) whose keys are the nine rolled-back types by
construction. tsc raw count back to 63; the 40-case suite stays green.
…0005-override-rollback
# Conflicts:
#	scripts/adr-anchors.json
…LE 逃生门
合并 origin/main 后的 jointly-wrong 破坏(AGENTS.md §10):两侧各自正确、
合起来红。main 在 meta-overlay-read-your-writes.test.ts 新增了整个
`#5079 — list / get / dispatch agree immediately after deleteMeta` describe 块,
其中 `an ARTIFACT-backed delete resets to the shipped value` 用例对一个
PACKAGED action 做 overlay 写;本 PR 把 `action` 的 allowOrgOverride 回滚为
false(#6483 裁决),该写点遂抛 NOT_OVERRIDABLE。文本合并干净,故 git 无冲突。
对齐方式沿用本 PR 已提交的同类处置(#4521 块中的同形用例):打开
`OS_METADATA_WRITABLE` 运营逃生门并重置两处 memoised 缓存,配 afterEach 清理,
避免 action 可写性泄漏到相邻用例。该 describe 块其余用例写的都是全新名字,
走 allowRuntimeCreate,不受回滚影响,故只此一处需要逃生门。
pnpm --filter @objectstack/runtime test: 115 files / 1733 tests 全绿。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011sGk4SKHqGRgmmqUok1P8M
@os-zhuangClaude

Copy link
Copy Markdown
Contributor

Merge conflict resolved; branch re-greened

origin/main merged into the branch (merge commits only — no rebase, no force-push). Two merges: the first against 04c56aa, the second against 6595262 after main advanced mid-run.

The one conflict — scripts/adr-anchors.json — resolved by keeping BOTH sides' entries. Both sides appended to the anchors array: this PR added the ADR-0005 anchor for packages/spec/src/kernel/metadata-plugin.zod.ts, main added two ADR-0106 anchors (metadata-core/src/object-schema-fls.ts, plugin-security/src/security-plugin.ts). Nothing dropped, no duplicate file entries. Count is read off the merged file, not arithmetic from receipts: base 38 + branch 1 + main 2 = 41, and check:adr-anchors reports OK (41 anchored file(s)). The PR body's earlier "39/39" reading is superseded by this 41. Main-side arrivals verified intact, including the #5574 hook-wrappers invariant anchor.

One jointly-wrong breakage fixed (AGENTS.md §10 — a clean merge is not a working merge).packages/runtime/src/meta-overlay-read-your-writes.test.ts auto-merged textually clean, but main had added an entire new #5079 — list / get / dispatch agree immediately after deleteMeta describe block whose an ARTIFACT-backed delete resets to the shipped value case performs an overlay write against a PACKAGED action. With this PR rolling action's allowOrgOverride back to false, that write now throws NOT_OVERRIDABLE. Aligned using this PR's own already-committed disposition for the identical case in the #4521 block — the OS_METADATA_WRITABLE operator escape hatch plus both memoised cache resets, with an afterEach so writability cannot leak into neighbouring cases. Every other case in that block writes brand-new names and rides allowRuntimeCreate untouched, so only this one needed the hatch.

Sibling-survival assertions after the merge: the nine rolled-back rows (page/app/action/dataset/book/permission/position/tool/skill) are all still allowOrgOverride: false; the ADR-0005 ratified whitelist (view/dashboard/report/translation/email_template) is still true; flow still false per #6283.

Gates re-run locally, one by one, enumerated from .github/workflows/lint.yml:

  • ESLint job — 32/32 check:* green, plus pnpm lint clean.
  • TypeScript Type Check job — 13/13 pre-build gates green; workspace build, turbo typecheck, check:type-check-debt, the post-build consumer gates and check:generated all green.
  • Suites for the packages the 13 files touch: spec, metadata-protocol, objectql, dogfood green; runtime green after the fix above at 115 files / 1733 tests.

No generated spec artifact needed regeneration — the merged tree's generated paths are byte-identical to origin/main, and the merge driver recorded no deferred artifacts.

The branch merges cleanly against current main (verified read-only with git merge-tree). Auto-merge deliberately left unarmed by me — that remains the PM's action once CI converges.


Generated by Claude Code


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

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

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

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

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

    �[41m�[1m FAIL �[22m�[49m scripts/build-schemas-check-mode.test.ts�[2m > �[22mbuild-schemas.ts — the drift notice names the direction it measured (#5847)�[2m > �[22mclaims NO direction when the two re
    

历史信号:

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

分诊清单:

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

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

@os-zhuang
os-zhuang added this pull request to the merge queueAug 9, 2026
Merged via the queue into main with commit ee58392Aug 9, 2026
27 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-6483-adr0005-override-rollback branch August 9, 2026 05:05
@claude

claudeBot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Queue steward — NEW signature recorded, not re-queued (round 70)

This PR was kicked out of the merge queue once at 04:21Z. The steward's four-branch signature triage lands on new signature, whose prescription is ⛔ no re-queue — recording only. Moot in outcome (see "What actually happened"), but the signature is now on the record.

Full signature (read from the complete log archive, not the tail — SKILL note 7)

  • Run: 31294377737 (CI, merge_group), created 04:21:11Z, branch gh-readonly-queue/main/pr-6608-183b4c47…
  • Failing job: Test Core (1/3) › step Run this shard's tests. The shard aggregator job Test Core then failed at step Verify test shard results — consistent, not a second fault.
  • Failing test: packages/spec/scripts/build-schemas-check-mode.test.tsbuild-schemas.ts — the drift notice names the direction it measured (#5847)claims NO direction when the two revs are genuinely unordered
  • Error string: Error: git status --porcelain -uno failed (128): fatal: bad object HEAD
  • Lines: thrown at packages/spec/scripts/build-schemas-check-mode.test.ts:168:11 (the sandbox git() helper, declared at :160), called from :1611:14 (the expect(git('status','--porcelain','-uno')).toBe('') assertion)
  • Totals: Test Files 1 failed | 348 passed (349) · Tests 1 failed | 9037 passed (9038) · duration 354.08s
  • Read via the 4000-line job log archive; the Failed Tests 1 block and the ##[error] line agree verbatim. No turbo-adjacency inference was used (SKILL note 7), and no aggregate/completeness reading was substituted for a job conclusion (note 10).

Ledger check (#5810, human-only to amend)

Matches none of the four objectstack rows nor the cross-repo row: it is not a 5000ms timeout (so neither the #4796/#4856 "fixed signature" row nor the #6044 coverage-hole row), not the mongodb-memory-server download race, not merge_group cold-cache slowness, not infrastructure flakiness of the runner/registry kind. ⇒ New signature ⇒ ⛔ not re-queued by this seat.

What actually happened (no action was needed)

The PR re-entered the queue on its own at 04:49:19Z (gh-readonly-queue/main/pr-6608-255588bd…), all five merge_group workflows green, and merged at 05:05:06Z (ee58392e1). Landing is confirmed by the two readings the protocol requires — the queue branch is gone and the commit is on origin/main.

Preliminary reading (no verdict, no code touched)

The failing test is not in this PR's diff (13 files; none under packages/spec/scripts/), so this is the queue's full-suite surface rather than a regression this PR carries — exactly the case the queue-failure bot comment above describes. fatal: bad object HEAD comes from the test's own sandbox git repo via its git() helper, i.e. harness/environment state, not a product assertion about drift direction. The same head passed the very next queue build over the full suite, which is the strongest available evidence of non-determinism. Prior art: the same file failed once before in the queue (PR #6164, run 31155540281, 2026-08-07 06:53Z) but in a different describe block (--update-base … / #5370, five cases) — same file, different cases, so it is not yet an established repeating signature.

Routed to the spec lane on #6483 and proposed for ledger evaluation on #5810. ⛔ The steward does not amend the ledger itself.

Seat authority (unchanged)

No re-queue, no merge, no ready/draft flip, no assignment, no code touched by this seat.


Generated by Claude Code

hotlong pushed a commit that referenced this pull request Aug 13, 2026
…nting at D5-R (#8292) (#8385)
ADR-0086 carried three live-voiced, present-tense pointers at ADR-0094 D5's
2026-07-14 direction (an env overlay of a package-owned permission set is a
first-class ADR-0005 customization), which was RETIRED on 2026-08-09 by D5-R
(#6858 / PR #6962) after #6483 / PR #6608 rolled `permission` back to
`allowOrgOverride: false`:
- D7 status row: "an env edit of a package set is now a first-class overlay,
not a flat 403" — directly contradicted by the current 403 not_overridable.
- P2 status row: "Subtract layer landed as ADR-0005 first-class overlay".
- The superseded-mechanisms block, item 2 (the site named in #8292).
Each now names D5-R and marks the direction retired, following the idiom
PR #8291 used inside ADR-0094 D2. The upshot is recorded where it matters:
this ADR's own two-doors answer stands unsuperseded — edit the package and
re-publish. The narrow carry-overs D5-R preserves (data-door delete still
degrades to a reset; supportsOverlay unchanged, so a pre-rollback overlay row
still merges at read time) are stated so they are not mistaken for a re-route.
The historical record is deliberately kept as history, not rewritten.
A fourth D5 citation (D4 status row, composition anchored at the position) is
left untouched: D5-R does not withdraw that bullet.
Part of #8292
Claude-Session: https://claude.ai/code/session_01Jqe56GnYFddggeAyfkZFVz
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/lteststooling

Projects

None yet

3 participants

@qq9340100@os-zhuang@claude