You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
WARN [security] permission-set backfill into metadata failed (ADR-0094 D4)
{"name":"d8_qc_user","error":"[invalid_metadata] permission/d8_qc_user failed spec
validation: <root>: Unrecognized key(s) on this permission set: `active`.
Until #4001 these were dropped silently — the set still parsed, so the author
believed a capability boundary was declared that the runtime never saw."}
Activity
os-zhuang commentedon Aug 3, 2026
🔒 认领 —— 第 2 轮(发布窗口 bug 批)
session_015Br2xsJsczFsTR9bvbh2Ny(PM 循环)claude/issue-4669-permission-backfill-strict-specobjectstack-issue-4669两个方向的 PM 裁定(维护者可否决):选投影侧挑键(正文方案 1)。理由:
active的现有消费面(表列 +highlightFields+ 两个启停动作的bodyExtra)全是行状态语义 —— 它是运行时开关,不是作者声明的能力边界;进 spec(方案 2)等于把状态提升为契约,方向不对,且是窗口内禁的 spec 变更、属对侧车道。permissionSetBodyFromRow()改为显式挑 spec 认的键(白名单),存储列(active、时间戳、managed_by等)全部不进 metadata body。白名单从 spec 的 schema 键表派生而不是手抄一份,否则 spec 加键时这里又静默漏。第二半交付(与修复同 PR):这个
catch+warn正是 #4632 刚定的规则里的第二类降级 —— backfill 全线停摆但测试全绿、无任何自动信号。按新规则(AGENTS.md「Degradation log levels」节)把它变响亮:失败计数进结果、级别提到error、文案含后果与修复动作。若check:durability-log-level的词表覆盖不到这类投影写入,在 PR 里说明(那是闸门已声明的局限,不是你的债)。约束:⛔
packages/spec/**零改动(白名单派生用运行时可及的 schema 导出,不改 spec);⛔content/docs/releases/不碰;资源纪律照旧。cloud 侧复现属参考,本单不碰 cloud 仓。验收:backfill 对带
active列的行成功(backfilledIntoMetadata计数增长);两个启停动作行为不变;真失败时响亮(测试钉住);正文 WARN 在同场景下消失。Generated by Claude Code
os-zhuang commentedon Aug 3, 2026
✅ PM 验收通过 —— PR #4755,CI 全绿(18 success + 2 skipped,0 失败),已转 ready 并入合并队列
复核对着 GitHub:
PermissionSetSchema.shape派生(首用解析 + 缓存,不拆 lazySchema 代理),照裁定;覆盖面比 backfill 大 —— 未知键静默剥离仍是全仓默认:把 #3405 的 strict 收紧从一个 schema 推广到整个可授权面(ADR-0078 完整性闸门) #4001 前落库、body 仍带active的历史 overlay 同闸口被滤saveMetaItem换成跑真 schema(与resolveOverlaySchema同一 422 信封)—— 此前 mock 什么都收,套件全绿而真实 backfill 全灭,这个替身升级本身就是修复的一半;缺陷回填 6 红,报错逐字是 issue 正文那条active(陈旧 body 不会把刚停用的 set 重新打开)backfillFailed进结果结构;汇总行在有失败时不再 INFO 盖脸backfilledIntoMetadata: 1,WARN 消失,列不动spec/cloud/tenant.test.ts贴着 5s 默认超时(spec 双源清账 C16:TenantPlan(./cloud ≠ ./system)—— 路线 B:删 system 侧 provisioning 家族,2 条 #4739/feat(spec)!: 删除./system的 declared-only tenant-provisioning 家族 —— C16 双源清账,基线 12 → 10 (#4739) #4752 车道带入),合 main 重跑后全绿 —— dev 的诊断比 PM 的第一判断更准,超时余量隐患已记在 PR 评论场外发现处置
saveMetaItem是 #4632 词表覆盖不到的持久性接缝:8 处 catch 完全静默吞掉元数据写入失败 #4754(saveMetaItem进 durability 词表 → 8 处全静默 catch 待清账)→ tooling 入队,留下轮派发(本会话暂停)Generated by Claude Code
fix(security): permission-set 投影只写 spec 认的键;失败的 backfill 变响亮 (objects…
fix(runtime,tooling): add saveMetaItem to the durability vocabulary a…
fix(scripts): teach check:durability-log-level a declared failure-pro…
fix(plugin-security)!: a package-declared position is refused at the …