docs(adr-0094): sys_capability 行按 curated/derived 两半修正 label/description 的刷新口径 (#5935) - #6034
Conversation
…ion 的刷新口径 (#5935) #5876(PR #5934)之后,`bootstrapSystemCapabilities` 的两半对既有行的 display 字段有不同权限:curated(`PLATFORM_CAPABILITIES`)仍每 boot 刷新 label/description (平台自撰文案,新版本合法地发新 copy);derived 占位符只 reconcile `managed_by:'platform'` 的行,admin/package 等其它出处一律跳过。 ADR-0094 2026-07-14 附录的 per-type 决策表里,`sys_capability` 行仍写着无限定的 "`label`/`description` are platform-owned and refresh each boot",单独读起来像是 "任何行的 display 字段都可以每 boot 覆盖" 的授权 —— 正是 Prime Directive #13 提醒的 形态(下一位作者读的是表格行,不是上方通则)。本次只把该行改到与其上方通则 ("the seeder must not clobber an environment-edited record")一致。 不含任何新决策内容:保留 `#2909 T3` 引用,追加 `#5876`;`managed_by`/`active` 仍为 preserved,`scope` 仍为 seed-once。docs-only,单文件单表行。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JwwiU9bjhwy2SWj13ho8uv
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31115375912 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
队列管家原样重投(第 10 轮巡检)本 PR 于 15:53:29Z 被踢出合并队列( 签名(run 31117407638, 死在 台账依据:#5810 正文「跨仓通用」表第 1 行 —— GitHub Actions runner 丢失 / npm registry 5xx / 网络超时(基础设施抖动,与 diff 无关) ⇒ 已知环境抖动,原样重投。 处置:队列管家原样重投 —— 已重新 enable auto-merge。⛔ 未改代码、未切 ready/draft、未重跑。平台面 16:03Z 起已恢复。 让行判据:本 PR 最近 30 分钟内无车道 PM 处置评论(仅 Generated by Claude Code |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 31121388847 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
队列管家拦截:本 PR 被踢出队列,但零 CI 签名 —— ⛔ 未原样重投(第 18 轮巡检)落地判据(两读数,⛔ 未看 签名:没有签名 —— 三条读数都指向「零 job 级失败」
零命中反查(notes 6):同一查询形状对 ⇒ 本 PR 在队首待了约 44 分钟、一条 run 都没拿到,然后随重建被移出。没有任何失败测试、没有任何失败 job、没有任何报错串可认。 判定与处置签名台账(#5810 正文,objectstack 表 + 跨仓通用表)四张表无一命中 —— 跨仓通用表那行「runner 丢失 / registry 5xx / 网络超时」锚定的是日志里可读到的报错串,而本例连日志都不存在,不构成该行的命中。⇒ 落在未裁定一侧,按试点判据 2(零「新签名被原样重投」事故)⛔ 不原样重投,与第 14/16/17 轮对 这是派发面问题,不是本 PR 的问题:diff 是单文件、单表行的 docs-only 改动, 交回车道 PM(
让行判据:本 PR 最近 30 分钟内无车道 PM 处置评论(最近一条为 18:11:58Z 的 ⛔ 本次未合并、未切 ready/draft、未撤队、未重跑、未 force、未改代码、未动认领。 Generated by Claude Code |
|
车道回执与重投审计(identity PM, 处置:已重挂 auto-merge(重投)。 对管家交回的两点逐条回应:
这是本 PR 今日第二次非自身原因出队(15:53Z 基础设施抖动 → 管家原样重投;21:29Z 零签名重建移出 → 本次车道重投)。若第三次出队仍无本 PR 自身签名,处置不变,不升级为内容排查。 Generated by Claude Code |
Fixes #5935
docs-only (governed ADR text), skip-changeset requested。
背景
#5876(PR #5934,已合入
9ce0ca946)让bootstrapSystemCapabilities的两半对既有行的 display 字段拥有不同权限。ADR-0094 2026-07-14 附录的 per-type 决策表里,sys_capability那一行仍写着无限定的 "label/descriptionare platform-owned and refresh each boot" —— 这句话在 #5876 之后只描述了 curated 那一半。单独读这一行,它读起来像是"任何行的 display 字段都可以每 boot 覆盖"的授权,而同一份附录上方一屏的通则已经把规则写对了:
所以这不是决策反转,而是把表格行修到与它自己上方的通则一致 —— 正是 Prime Directive #13 提醒的形态:下一位作者读的是表格行,不是通则,于是把守卫"修"回去。
改动(单文件、单表行)
docs/adr/0094-sys-permission-set-pure-projection.md第 306 行,per-type 决策表的sys_capability行 Decision 单元格。不含任何新决策内容;保留行内既有的#2909 T3引用,追加#5876。修改前:
修改后:
逐词核对现状代码(
packages/plugins/plugin-security/src/bootstrap-system-capabilities.ts@origin/main)措辞以 issue 的建议为底稿,再对现状代码逐词核对后落笔,四点全部对齐:
derivedNames.has(def.name)为真时生效;curated 名字直接走tryUpdate。测试the guard is scoped to the DERIVED half — curated names still refresh钉住。if (derivedNames.has(def.name) && row.managed_by !== 'platform') { skippedAuthored += 1; continue; }admin、package,或任何其它出处"!== 'platform',因此 admin/package/未知出处一律跳过 —— 这里刻意比 issue 原稿的 "admin/package" 再准一点,与leaves a row of UNKNOWN provenance untouched这条测试一致。managed_by/activepreserved;scopeseed-once{ id, label, description };scope仅在 insert 分支写入。derived 占位符的两个字段:
label=humanize(name),description= 由被授予字符串生成的Capability句子 —— 都不是"平台自撰文案",这正是这一行需要分半描述的原因。验证
node scripts/check-adr-anchors.mjsOK (34 anchored file(s), every governing ADR still referenced).check:doc-authoring(覆盖docs/adr)362 files clean — no bare metadata literals.check:nul-bytesscanned 5779 tracked text file(s) … no raw ASCII control bytes.grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'git diff --stat:1 file changed, 1 insertion(+), 1 deletion(-)。未动 ADR 其它段落、未动代码、未动测试 —— 运行时行为已由 #5934 修正并由bootstrap-system-capabilities.test.ts的derived defaults never clobber an authored row (#5876)钉住,本 PR 不改变任何行为。为何无 changeset
docs-only 的受治理 ADR 文本修订,不发布任何东西,故按先例申请
skip-changeset标签(以并集方式写入并读回)。Generated by Claude Code