Filed by the domain:cli 执行 PM 席位(#6024 ),会话 session_01TvqBFLRzXdSPcbusDoED9k。这是 #13260 的修复半边 —— 测量半边已由 PR #13369 落地(a1df501e47),本卡承接它量出来的东西。
⚠️ 直到 #13369 合并前本卡都不能开 :它要改 authz-conformance.test.ts / .matrix.ts,而 #13369 刻意让这两个文件逐字节不动。现已合并 ⇒ 解锁。
已测量的缺口 packages/qa/dogfood/test/authz-conformance.matrix.ts 的头部承诺:该棘轮*「ratchets completeness over a CURATED table of HTTP/transport entry points」,且一条新的未加门路由 「is UNCLASSIFIED … and breaks CI」*。
PR #13369 对 PROBES 点名的全部 11 个文件 做了普查:16 条探针 / 11 文件 / 9 个可铸键 ,而落在所有可铸键之外 的入口点是 80 个 (运行时读数;静态读数 75)。其中 rest-server.ts 一家就占 66 —— 它有 17 个 registrar,探针表只够得到 1 个。
⭐ 承重结论:registerUiEndpoints 不特殊 ,它只是某次普查恰好走过的那个 registrar。
⛔ 明确不主张的 ⛔ 本卡不主张 那 80 个入口点里任何一条未受保护。路由级执行大多在 handler 内(enforceAuth / shouldDenyAnonymous / 逐对象权限检查)。被主张的是棘轮看不见它们 —— 一个保证缺陷 ,⛔ 不是一次突破。⇒ 本卡是加强门 ,⛔ 不是削弱门。
⭐ 要先回答的问题:population 从哪来 ⛔ 不要从"把正则加宽"起步。 PR #13369 记录了一条决定性读数:
packages/rest/src/rest-route-ledger.ts 持有 94 行审计过的行,覆盖 @objectstack/rest 挂载的每一条路由,经 RestServer.getRoutes()运行时枚举 ,并由 rest-route-ledger.conformance.test.ts 守护(实测绿 7/7 );packages/runtime/src/route-ledger.ts 对 dispatcher 做同样的事,80 行。
⇒ authz 棘轮的路由 population 是一张正则表 ,够得到 17 个 registrar 里的 1 个;而一份完整的、运行时导出的、已经有人守着的同一批路由的枚举 就在隔壁包里。
⚠️ 加宽正则、或手工把文件补进表里,都会在下一次有人加文件时重新腐烂 —— 这正是本卡要终结的机制,⛔ 不是要再演一遍。
⭐ 一个必须带上的分类,否则会数错 PROBES 表混了三种承诺不同的仪器 (#13369 立的分类):
类型 承诺 「盲区 0」的含义 ROUTE_ENUMERATION 自动发现:「ANY new route matching this pattern mints a new key」 缺口就是 盲区 GATE_PIN 对某个具名门 的防回归,按构造只铸一个键 ⛔ 「本文件汇流到那道门」,不是 「每条路由都被枚举了」 TRIPWIRE 今天故意匹配不到东西 ⭐ 0 键是正确读数 ,⛔ 不是洞
⛔ 用一个口径去数,会把 6 条正常工作的绊线读成 6 个洞 。
三条一并处理的附带缺陷(#13369 已测,未修) data:hono-plugin.ts 是死探针 。提交 e5a4d26901(2026-07-31)删掉了它的 population(匹配挂载 3 → 0),探针留下来至今一言不发 —— 因为 STALE 只对「某行 covers 的键」触发,而从没有行 cover 过 它的键。⭐ 这是第二条独立的盲区机制 :不是探针太窄,是它的 population 被删了而没人吭声。matrix 头部写「15 probes」 ,而表里自 2026-08-18 起是 16 条。test(qa): census the authz-conformance probe table's reach across all 11 probe files #13369 把这个漂移钉在 census 里、⛔ 刻意没改那句话(好让它的无修复围栏毫不含糊)。本卡改。[finding] The authz-conformance PROBES table names 4 of the 17 runtime domain files — the same blind spot one layer out, at file selection rather than probe reach #13376 —— PROBES 只点名了 packages/runtime/src/domains/ 下 17 个文件中的 4 个(该目录 15 个声明了 DomainRoute prefix)。⚠️ 这是同一缺陷的上一层 :在文件选择 而非探针伸展。⭐ 且它有下一层没有的性质:一个从未被点名的文件不产生任何信号 —— 没有 STALE、没有 UNCLASSIFIED、没有键 ⇒ 它的缺席在结构上不可观测 。⛔ 停手条件 若实测发现那两份 route ledger 并不覆盖 本棘轮需要的 population(例如它们不含 transport 层的 dispatcher handler、或粒度对不上),⇒ 停手回报 ,⛔ 不要退回去加宽正则当作次优解。那说明这是一个需要重新设计 population 来源的问题,值得单独判。
Refs Generated by Claude Code
Filed by the
domain:cli执行 PM 席位(#6024),会话session_01TvqBFLRzXdSPcbusDoED9k。这是 #13260 的修复半边 —— 测量半边已由 PR #13369 落地(a1df501e47),本卡承接它量出来的东西。authz-conformance.test.ts/.matrix.ts,而 #13369 刻意让这两个文件逐字节不动。现已合并 ⇒ 解锁。已测量的缺口
packages/qa/dogfood/test/authz-conformance.matrix.ts的头部承诺:该棘轮*「ratchets completeness over a CURATED table of HTTP/transport entry points」,且一条新的未加门路由「is UNCLASSIFIED … and breaks CI」*。PR #13369 对
PROBES点名的全部 11 个文件做了普查:16 条探针 / 11 文件 / 9 个可铸键,而落在所有可铸键之外的入口点是 80 个(运行时读数;静态读数 75)。其中rest-server.ts一家就占 66 —— 它有 17 个 registrar,探针表只够得到 1 个。⭐ 承重结论:
registerUiEndpoints不特殊,它只是某次普查恰好走过的那个 registrar。⛔ 明确不主张的
⛔ 本卡不主张那 80 个入口点里任何一条未受保护。路由级执行大多在 handler 内(
enforceAuth/shouldDenyAnonymous/ 逐对象权限检查)。被主张的是棘轮看不见它们 —— 一个保证缺陷,⛔ 不是一次突破。⇒ 本卡是加强门,⛔ 不是削弱门。⭐ 要先回答的问题:population 从哪来
⛔ 不要从"把正则加宽"起步。 PR #13369 记录了一条决定性读数:
⇒ authz 棘轮的路由 population 是一张正则表,够得到 17 个 registrar 里的 1 个;而一份完整的、运行时导出的、已经有人守着的同一批路由的枚举就在隔壁包里。
⭐ 一个必须带上的分类,否则会数错
PROBES表混了三种承诺不同的仪器(#13369 立的分类):⛔ 用一个口径去数,会把 6 条正常工作的绊线读成 6 个洞。
三条一并处理的附带缺陷(#13369 已测,未修)
data:hono-plugin.ts是死探针。提交e5a4d26901(2026-07-31)删掉了它的 population(匹配挂载 3 → 0),探针留下来至今一言不发 —— 因为 STALE 只对「某行 covers 的键」触发,而从没有行 cover 过它的键。⭐ 这是第二条独立的盲区机制:不是探针太窄,是它的 population 被删了而没人吭声。PROBES只点名了packages/runtime/src/domains/下 17 个文件中的 4 个(该目录 15 个声明了DomainRouteprefix)。⛔ 停手条件
若实测发现那两份 route ledger 并不覆盖本棘轮需要的 population(例如它们不含 transport 层的 dispatcher handler、或粒度对不上),⇒ 停手回报,⛔ 不要退回去加宽正则当作次优解。那说明这是一个需要重新设计 population 来源的问题,值得单独判。
Refs
discover()reaches 1 of 17 route registrars in rest-server.ts — the ratchet's route-completeness guarantee is false for 66 of 85 mounted routes #13260 / PR test(qa): census the authz-conformance probe table's reach across all 11 probe files #13369 —— 测量半边,本卡全部读数的出处GET /api/v1/ui/view/:object/:typeresolves a UI view with no identity resolution and no anonymous-deny at the REST seam #13214 ——registerUiEndpoints那条被走过的路由,仍在等维护者裁。⛔ 本卡不重开、不重判它Generated by Claude Code