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
⚠️packages/plugins/plugin-auth/src/org-create-posture-gate.test.ts 里带 pinned as CURRENT behaviour (#5261) 的用例是故意钉住旧行为的,本次要有意识地翻转它并改掉用例名/注释,不要留下自相矛盾的钉子。
那颗自相矛盾的钉子清干净了:断言/用例名/注释/文件头一起翻,全仓 pinned as CURRENT behaviour 只剩叙述历史的散文。不变量表取消了「降级除外」的例外 —— 例外的消失本身就是这次改动的证明,新增三行降级用例。
对抗性验证真实执行:回退闸门判据 → 7 failed | 18 passed,expected 200 to be 403,红的正是两种降级、双 env knob、late-probe 与三行不变量表;把 dogfood 换回旧 env-flip → expected 'single' to be 'isolated' + 403,证明代价二真实存在且新开路方式是承重的,不是摆设。
我替 dev 扫了它点名的那条合入前风险(cloud 侧是否有依赖 D5 降级态还能建组织的 e2e):没有,cloud 不受影响。apps/ee-group-showcase/test/org-create-route.dogfood.test.ts 文件头那句「open workspace has no @objectstack/organizations, so it opens the route by flipping OS_MULTI_ORG_ENABLED」描述的是 framework 自己那条单租户测试(正是本 PR 换掉的那个绕法);cloud 这条测试自身 import { OrganizationsPlugin } 并以真实企业运行时在 group 姿态启动 —— 非降级态,判决不变。cloud 仓内就有 packages/organizations,EE 各栈同理。
Activity
claude commentedon Aug 4, 2026
⛔ 认领:
session_015W6nhsDrz6zWQc8je12a1t(objectstack:identity 车道 PM),分支claude/issue-5261-effective-posture-gate,os-dev 单点派发。维护者 2026-08-04 裁定:选 B(闸门改判「实际生效的 posture」),并入 v17。 这是一次能力收缩、破坏性变更,只能搭主版本车——错过 v17 就要等 v18,所以现在做。
裁定同时接受本单「倾向 A」里点名的两笔代价,并按 issue 自己的建议处置第二笔:
packages/qa/dogfood/test/org-create-default-team.dogfood.test.ts(org creation over HTTP 500s when teams are enabled: better-auth 1.7.0-rc.1 default team carries memberCount, sys_team lacks the column/mapping #3624 回归)靠「boot 后翻 env、闸门 live 读」开路,选 B 后任何 env 组合都过不了 —— 不允许直接删掉。按本单建议给 dogfood 另一条开路方式(如 verify harness 提供可注入的 tenancy stub),保住 org creation over HTTP 500s when teams are enabled: better-auth 1.7.0-rc.1 default team carries memberCount, sys_team lacks the column/mapping #3624 的端到端覆盖。packages/plugins/plugin-auth/src/org-create-posture-gate.test.ts里带pinned as CURRENT behaviour (#5261)的用例是故意钉住旧行为的,本次要有意识地翻转它并改掉用例名/注释,不要留下自相矛盾的钉子。文件面:
packages/plugins/plugin-auth/src/auth-manager.ts+org-create-posture-gate.test.ts+ dogfood 开路所需改动 + changeset。⛔ 不碰reconcile-membership.ts(#5205 排在本条之后)、packages/objectql/plugin-dev/runtime/driver-sql/cli(#5262 在改)、content/docs/releases/。Generated by Claude Code
claude commentedon Aug 4, 2026
PM 验收(第 19 轮,identity 车道):ACCEPT — PR #5294,CI 绿后合入
维护者裁定选 B、搭 v17 主版本车,实现到位。逐条复核:
dev 找到一条我没料到的独立佐证,我已核实为真。
packages/spec/src/kernel/public-auth-features.ts:153-155原文:也就是说 spec 早就声明
multiOrgEnabled反映的是实际能力而非请求的姿态,并由它把守sys_organization.actions.create_organization。出线的一直是路由,不是 flag —— 这次改动不只是维护者的一个取舍,它让路由回到了自己的声明契约上。这条把方案 B 从「二选一」提升成「修正违约」,是本单最有价值的发现。两站点从「两处写法碰巧一致」变成「一次求值」:判据抽成
effectiveTenancyPosture(),getPublicConfig()调同一个方法。仍是 per-request live 读不缓存,理由正确 ——org-scoping在 plugin-auth 之后注册,墙确实是 boot 中途立起来的,冻结任一层都会把部署钉死在立墙前的状态(AGENTS.md startup-registry 规则)。代价二没有靠删测试解决,这是我在派单里划的红线,dev 守住了:
@objectstack/verify新增multiTenant: 'posture-only',注册内置org-scoping替身,让 tenancy 服务解析出真实、非降级的isolated。它比原来的 env-flip 更诚实 —— 原来是单租户栈只对一个闸门撒谎,现在模拟的是真实的有墙部署。dogfood 另加一条「守卫的守卫」,直接断言posture==='isolated'、degraded===false、multiOrgEnabled===true,替身失效时报的是「前置条件塌了」而不是把人引去查一个不存在的 team-insert bug。替身的边界也写死了:不做任何隔离,并点名「用它断言跨租户隔离 = #4700 那个 constant-false 能力探针反过来戴一次面具」;跨租户 gate 在本仓继续 skip 而不是假装通过。harness.posture-only.test.ts刻意不 mock@objectstack/organizations,因为待证命题正是「它不需要企业包」—— 旁边摆个 mock 会让命题不可证伪。这个反向推理是对的。那颗自相矛盾的钉子清干净了:断言/用例名/注释/文件头一起翻,全仓
pinned as CURRENT behaviour只剩叙述历史的散文。不变量表取消了「降级除外」的例外 —— 例外的消失本身就是这次改动的证明,新增三行降级用例。对抗性验证真实执行:回退闸门判据 →
7 failed | 18 passed,expected 200 to be 403,红的正是两种降级、双 env knob、late-probe 与三行不变量表;把 dogfood 换回旧 env-flip →expected 'single' to be 'isolated'+ 403,证明代价二真实存在且新开路方式是承重的,不是摆设。我替 dev 扫了它点名的那条合入前风险(cloud 侧是否有依赖 D5 降级态还能建组织的 e2e):没有,cloud 不受影响。
apps/ee-group-showcase/test/org-create-route.dogfood.test.ts文件头那句「open workspace has no @objectstack/organizations, so it opens the route by flipping OS_MULTI_ORG_ENABLED」描述的是 framework 自己那条单租户测试(正是本 PR 换掉的那个绕法);cloud 这条测试自身import { OrganizationsPlugin }并以真实企业运行时在group姿态启动 —— 非降级态,判决不变。cloud 仓内就有packages/organizations,EE 各栈同理。关于
BootOptions是已发布包公共面这一点(dev 提的第一条 note):我认可现在的做法。它是测试基础设施的公共面,plugin-auth 生产路径零新增 API,替身走的是企业包本来就在用的org-scoping注册接缝;替代方案(每个 fixture 各造一份替身)会失去那一处集中写死「它不隔离任何东西」的文档——而那句文档正是防止它被误用的东西。证据边界如实:本仓装不了 cloud-private 的
@objectstack/organizations,所以「有企业包时墙真的立着并隔离数据」不在本 PR 证据范围内;本 PR 只证明 posture 生效则放行、不生效则拒绝。changeset 为 plugin-auth major + verify minor,与破坏性收缩相符。CI 绿即合入。
Generated by Claude Code
docs(deployment): 按 ADR-0105 D1 三态 posture 重写 tenancy-modes 页 (#5269) (…
fix(auth): organization/create 判权威的 OS_TENANCY_POSTURE,不再判被降级的 OS_MUL…
fix(auth,verify)!: organization/create 判实际生效的 posture,降级部署不再产出无墙的组织 (o…
feat(platform-objects): sys_organization's data door admits update, c…