本贴是 domain:identity 座位的唯一权威登记。 座位贴协议(维护者 2026-08-06 批准,自 #4604 单正文座位表迁移而来):索引 = label:pm:seat,总入口 #4604 (指针页)。
单写手规则 :只有在任座位 PM 编辑本贴正文;接管/移交 = 改正文 + 一条审计评论(评论只作交接存档,不承载状态)。空缺争用时:动手前重拉正文、审计评论时间戳先到先得、写后回读。活性判定(惰性,无心跳,仅接管冲突时评估):Routine 座位查调度器(last_fired/next_run),会话座位查最近产出评论时间戳,>24h 无产出即可回收(改正文 + 审计评论)。
范围
plugin-auth / plugin-security / plugin-sharing / plugin-audit
当前 PM(会话或 Routine ID)
会话 session_01JwwiU9bjhwy2SWj13ho8uv(2026-08-06 05:4xZ 接管;2026-08-07 04:1xZ 起按维护者指令停止派发,仅收尾 rc.4 发版链,链闭环后转 dormant )
说明
终态:2026-08-06/07 两日,十二轮 + 发版执行,累计 22 单全闭环(21 单业务 + #6135 发版对账),零返工。维护者指令「开发完了就停」已执行:⛔ 本座位不再认领/派发任何新单。
收尾中(发版链,维护者已批) :chore(release): 发版状态对账 —— main 版本对齐 2026-08-03 已发布的 17.0.0-rc.3 #6149 (对账 PR,ACCEPT,auto-merge 已挂,合入全自动)→ chore: version packages (rc) #4935 刷新为 rc.4(验证后送队,唯一剩余人工动作)→ Release workflow 发布 → npm rc = 17.0.0-rc.4 确认 → 队列管家 Routine(三仓总管):合并队列健康专责化 —— flaky 签名分诊 / 原样重投 / 新签名拦截 / 跨仓 pin 链停滞观测(座位 Routine 化第二例,维护者 2026-08-06 拍板) #5810 发布确认。链闭环即本座位 dormant。
已 MERGED(21) :tenancy-service.ts 的 degraded 注释仍说「只有 isolated 会降级」—— 与同文件 120 行后的实现和 ADR-0105 D12 修正相反 #5360 、plugin-auth: better-auth 的 contains 被译成裸 $regex,用户输入当正则求值 —— 且是 $regex 退役唯一挡路的生产者 #5710 、controlled_by_parent derivation ignores the master's ownership and share grants — children are readable (and writable) regardless of parent access #5386 、仓内两处文档仍把 /api/v1/auth/login(及 /register、/logout、/session)列为已注册 auth 路由 —— 四条端点均不存在 #5772 、getReadFilter never applies the controlled_by_parent derivation — the analytics read-scope path is missing the master half entirely #5815 、plugin-auth: convertWhere() 对 not_in / starts_with / ends_with 没有分支,谓词被整条丢弃 —— 认证路径上的过滤放大 #5813 、A refused capability declaration still suppresses the back-compat derivation, so the capability exists nowhere — and an app-declared capability can never get registry provenance #4967 (两半)、观察:两份仓内开发文档(plugin-auth IMPLEMENTATION_SUMMARY.md / client CLIENT_SERVER_INTEGRATION_TESTS.md)整体已与实现脱节,不止 #5772 修的那两处 #5824 、[finding] #5704 收口后仓内新增一个 driver-memory 测试消费者:plugin-auth/auth-contains-filter.test.ts(#5710 pin 测试,与 #5704 程序不变量的张力,请分诊裁处置) #5830 、The back-compat capability derivation refreshes label/description on ANY existing sys_capability row, including admin-authored ones — the comment above it says the opposite #5876 、plugin-auth: break-glass 守卫 —— SCIM/ban 不得停用最后一个管理员(ADR-0024 D5.2,cloud#621 转入) #5892 、最后一个管理员的「删除」路径无守卫:目标不持本地密码时,SCIM/admin remove 可删掉环境最后一个管理员 #5941 、「这个 membership 是不是管理员」有两种拼写,大小写敏感性不同:isOrgOrPlatformAdmin 对 role='Owner' 答否,等级尺答是 #5942 、ADR-0094 addendum's sys_capability row still says label/description "refresh each boot" — true only for the curated half after #5876 #5935 、[#5852 producer 半边] resolveOwnerScopeIds 按权威字段填充 hierarchy resolver context + 补「resolver 收到的 org 非空」断言 #5859 、break-glass 不变量的第三条路径无守卫:撤掉最后一个管理员的「身份」(sys_member 降级 / 删 admin_full_access 授权)同样锁死环境 #5978 、fix(plugin-auth): 短信日配额拒发时 OTP 端点回 500 而非 429 —— deliverPhoneOtp 抛的是普通 Error #6039 、break-glass 不变量的第四条路径无守卫:删/改名 admin_full_access 那条 sys_permission_set 行,一次废掉所有 platform admin #6084 、发版状态对账:main 的 fixed 组版本(rc.2)落后 npm 已发布的 rc.3 —— 版本 PR 因此计算出已占用的版本号,直合会静默丢失一次发布 #6135 (对应 PR 见各单)。
移交给下任座位/分诊的登记 (本座位不再处理):blocked ×3 —— auth-contains-filter.test.ts 的见证后端迁 sqlite 排在 #5702 之后 —— #5830 裁决 C 的到期单 #5893 (等 drivers: $regex 响亮拒收 + $icontains 各后端实现(#4706 裁决 B 案 · 驱动半边) #5702 )、plugin-audit 的 5 个 hook 全部无 object 注册 ⇒ 引擎「按对象」需求门(#5284 单 id / #5038 批量)在 audit 启用时恒真 #5860 (等 spec hook 注册契约只能表达「命中这些对象」,无法表达「全局但排除这些对象」—— #5860 因此在 plugin-audit 内无法落地 #5928 )、plugin-auth: convertWhere() 整体忽略 better-auth 的 Where.mode: 'insensitive'(SCIM 会发它) #5814 (needs-user-decision);findings 待分诊 ×2 —— HookContext 契约表把 before* 的 input.options 记成 DriverOptions —— 实测那里仍是调用方的 engine options(含 where),两个 break-glass 守卫正读它 #5997 、两处手写的 ExecutionContext 组装已漂移:REST 传输不带 principalKind / onBehalfOf,而 explain / security 会读它 #6071 ;flaky(service-datasource): datasource-pool-support.test.ts 的「sqlite WITHOUT a pool still builds」在合并队列全量跑间歇红 —— 今日已踢 2 个不相关 PR(#5999、#5973) #6044 发版优先级注记已留 services;CI 聚合门禁把合并队列重建的 aggregate result: abandoned 判成红 —— 在队 PR 零测试失败被踢出(ci.yml 两处白名单缺 abandoned) #6082 -C 已立项归 devx。维护者收件箱:plugin-auth: convertWhere() 整体忽略 better-auth 的 Where.mode: 'insensitive'(SCIM 会发它) #5814 、spec 契约四决策(GET /ui/view/:object/:type 发的是 {list} / {form},spec 的 GetViewResponseSchema 声明的是 {object, view} —— 同一路由声明与实际两种形状(#5563 同族) #5948 /[spec] HookContext.api 声明为 z.unknown() —— 按 (ctx: HookContext) 标类型的 hook 无法调用 ctx.api.object(…),而文档/技能全在这么教 #5945 /AppContextSelectorSchema.persist 的三个取值消费侧只兑现了一部分:'none' 照样写两处、'session' 与 'query' 无差别 —— enforce-or-remove 待裁(objectui#3500 拆出) #5994 /analytics: compareTo 在「日期维度本身就是网格维度」时从不对齐 —— 比较行按自己平移后的桶键落地,于是每行一半是真值一半是自信的 0,还多出窗口外的幻影行 #6007 )、rc.0–rc.3 版本合并未落 main 的流程排查(未获点头,未立单)。
两日实测纪律存档 :dev 证伪/修正 PM 或 issue 预设八次(含 发版状态对账:main 的 fixed 组版本(rc.2)落后 npm 已发布的 rc.3 —— 版本 PR 因此计算出已占用的版本号,直合会静默丢失一次发布 #6135 验收表述、fix(plugin-auth): break-glass 守卫扩到 sys_permission_set,并把「零管理员」从引导期豁免里分辨出来 (#6084) #6107 头注释自证伪),全部走证伪出口、公开确认;PM 侧证伪一次(「合并 chore: version packages (rc) #4935 = 发布 rc.4」执行前核验推翻,停手上报换来维护者 A 案);故障处方全部留档:auto-merge 静默停摆 disable→enable 翻转(3 例)、PR 假红 close→reopen(1 例,遇事件丢弃)、update-branch 重触发(3 例)、零签名/假红踢出重投重推(2 例)、SendMessage 复活(1 例)。
迁移注记:本贴自 #4604 座位表迁移(2026-08-06,经办 PM 会话 session_01GcjbQLUQKysMU9uXB34iyv);迁移时刻起本贴即该座位唯一权威。2026-08-06 15:2xZ 起由在任座位 PM(session_01JwwiU9bjhwy2SWj13ho8uv)接管维护。
本贴是
domain:identity座位的唯一权威登记。 座位贴协议(维护者 2026-08-06 批准,自 #4604 单正文座位表迁移而来):索引 =label:pm:seat,总入口 #4604(指针页)。单写手规则:只有在任座位 PM 编辑本贴正文;接管/移交 = 改正文 + 一条审计评论(评论只作交接存档,不承载状态)。空缺争用时:动手前重拉正文、审计评论时间戳先到先得、写后回读。活性判定(惰性,无心跳,仅接管冲突时评估):Routine 座位查调度器(last_fired/next_run),会话座位查最近产出评论时间戳,>24h 无产出即可回收(改正文 + 审计评论)。
范围
plugin-auth / plugin-security / plugin-sharing / plugin-audit
当前 PM(会话或 Routine ID)
会话
session_01JwwiU9bjhwy2SWj13ho8uv(2026-08-06 05:4xZ 接管;2026-08-07 04:1xZ 起按维护者指令停止派发,仅收尾 rc.4 发版链,链闭环后转 dormant)说明
终态:2026-08-06/07 两日,十二轮 + 发版执行,累计 22 单全闭环(21 单业务 + #6135 发版对账),零返工。维护者指令「开发完了就停」已执行:⛔ 本座位不再认领/派发任何新单。
rc= 17.0.0-rc.4 确认 → 队列管家 Routine(三仓总管):合并队列健康专责化 —— flaky 签名分诊 / 原样重投 / 新签名拦截 / 跨仓 pin 链停滞观测(座位 Routine 化第二例,维护者 2026-08-06 拍板) #5810 发布确认。链闭环即本座位 dormant。tenancy-service.ts的degraded注释仍说「只有 isolated 会降级」—— 与同文件 120 行后的实现和 ADR-0105 D12 修正相反 #5360、plugin-auth: better-auth 的contains被译成裸$regex,用户输入当正则求值 —— 且是$regex退役唯一挡路的生产者 #5710、controlled_by_parentderivation ignores the master's ownership and share grants — children are readable (and writable) regardless of parent access #5386、仓内两处文档仍把/api/v1/auth/login(及/register、/logout、/session)列为已注册 auth 路由 —— 四条端点均不存在 #5772、getReadFilternever applies thecontrolled_by_parentderivation — the analytics read-scope path is missing the master half entirely #5815、plugin-auth:convertWhere()对not_in/starts_with/ends_with没有分支,谓词被整条丢弃 —— 认证路径上的过滤放大 #5813、A refused capability declaration still suppresses the back-compat derivation, so the capability exists nowhere — and an app-declared capability can never get registry provenance #4967(两半)、观察:两份仓内开发文档(plugin-auth IMPLEMENTATION_SUMMARY.md / client CLIENT_SERVER_INTEGRATION_TESTS.md)整体已与实现脱节,不止 #5772 修的那两处 #5824、[finding] #5704 收口后仓内新增一个 driver-memory 测试消费者:plugin-auth/auth-contains-filter.test.ts(#5710 pin 测试,与 #5704 程序不变量的张力,请分诊裁处置) #5830、The back-compat capability derivation refreshes label/description on ANY existing sys_capability row, including admin-authored ones — the comment above it says the opposite #5876、plugin-auth: break-glass 守卫 —— SCIM/ban 不得停用最后一个管理员(ADR-0024 D5.2,cloud#621 转入) #5892、最后一个管理员的「删除」路径无守卫:目标不持本地密码时,SCIM/admin remove 可删掉环境最后一个管理员 #5941、「这个 membership 是不是管理员」有两种拼写,大小写敏感性不同:isOrgOrPlatformAdmin对role='Owner'答否,等级尺答是 #5942、ADR-0094 addendum's sys_capability row still says label/description "refresh each boot" — true only for the curated half after #5876 #5935、[#5852 producer 半边]resolveOwnerScopeIds按权威字段填充 hierarchy resolver context + 补「resolver 收到的 org 非空」断言 #5859、break-glass 不变量的第三条路径无守卫:撤掉最后一个管理员的「身份」(sys_member 降级 / 删 admin_full_access 授权)同样锁死环境 #5978、fix(plugin-auth): 短信日配额拒发时 OTP 端点回 500 而非 429 —— deliverPhoneOtp 抛的是普通 Error #6039、break-glass 不变量的第四条路径无守卫:删/改名admin_full_access那条sys_permission_set行,一次废掉所有 platform admin #6084、发版状态对账:main 的 fixed 组版本(rc.2)落后 npm 已发布的 rc.3 —— 版本 PR 因此计算出已占用的版本号,直合会静默丢失一次发布 #6135(对应 PR 见各单)。auth-contains-filter.test.ts的见证后端迁 sqlite 排在 #5702 之后 —— #5830 裁决 C 的到期单 #5893(等 drivers:$regex响亮拒收 +$icontains各后端实现(#4706 裁决 B 案 · 驱动半边) #5702)、plugin-audit 的 5 个 hook 全部无object注册 ⇒ 引擎「按对象」需求门(#5284 单 id / #5038 批量)在 audit 启用时恒真 #5860(等 spec hook 注册契约只能表达「命中这些对象」,无法表达「全局但排除这些对象」—— #5860 因此在 plugin-audit 内无法落地 #5928)、plugin-auth:convertWhere()整体忽略 better-auth 的Where.mode: 'insensitive'(SCIM 会发它) #5814(needs-user-decision);findings 待分诊 ×2 —— HookContext 契约表把before*的input.options记成 DriverOptions —— 实测那里仍是调用方的 engine options(含 where),两个 break-glass 守卫正读它 #5997、两处手写的 ExecutionContext 组装已漂移:REST 传输不带principalKind/onBehalfOf,而 explain / security 会读它 #6071;flaky(service-datasource):datasource-pool-support.test.ts的「sqlite WITHOUT a pool still builds」在合并队列全量跑间歇红 —— 今日已踢 2 个不相关 PR(#5999、#5973) #6044 发版优先级注记已留 services;CI 聚合门禁把合并队列重建的aggregate result: abandoned判成红 —— 在队 PR 零测试失败被踢出(ci.yml 两处白名单缺abandoned) #6082-C 已立项归 devx。维护者收件箱:plugin-auth:convertWhere()整体忽略 better-auth 的Where.mode: 'insensitive'(SCIM 会发它) #5814、spec 契约四决策(GET /ui/view/:object/:type发的是{list}/{form},spec 的GetViewResponseSchema声明的是{object, view}—— 同一路由声明与实际两种形状(#5563 同族) #5948/[spec]HookContext.api声明为z.unknown()—— 按(ctx: HookContext)标类型的 hook 无法调用ctx.api.object(…),而文档/技能全在这么教 #5945/AppContextSelectorSchema.persist的三个取值消费侧只兑现了一部分:'none'照样写两处、'session'与'query'无差别 —— enforce-or-remove 待裁(objectui#3500 拆出) #5994/analytics: compareTo 在「日期维度本身就是网格维度」时从不对齐 —— 比较行按自己平移后的桶键落地,于是每行一半是真值一半是自信的 0,还多出窗口外的幻影行 #6007)、rc.0–rc.3 版本合并未落 main 的流程排查(未获点头,未立单)。迁移注记:本贴自 #4604 座位表迁移(2026-08-06,经办 PM 会话
session_01GcjbQLUQKysMU9uXB34iyv);迁移时刻起本贴即该座位唯一权威。2026-08-06 15:2xZ 起由在任座位 PM(session_01JwwiU9bjhwy2SWj13ho8uv)接管维护。