Skip to content
bitzorcas
中EN

Concept

ADR 0504:签名社区许可证与小型部署内建权益

community.web.v1 的签名准入,以及 community.small.v1 的部署级权威计量、30 人原子边界和商业 License 优先级。

Last updated

状态

Accepted(Revised,2026-07-25)。

背景

最小网站、API 和小程序外壳可以不采用核心 Platform 业务能力;小型应用或 SaaS 在活跃自然人用户不超过 30 人时,也应能直接使用业务能力,不被首张许可证签发流程阻断。

“无需客户 License”不能实现为接受未签名 License、客户端自报人数或散落的 Development bypass。人数边界必须来自 Identity 主体生命周期的权威事实,并在所有用户写入口并发安全地执行。

决策

  1. community.web.v1 保持厂商签名的 protocol v2 共享许可证策略,精确固定到 mini-api、mini-api-single、single-tenant、无 Platform/行业扩展,以及仅 framework.core 与 framework.aspnetcore 两项 Feature。

  2. community.small.v1 激活为产品内建容量权益,不是 License Envelope。Host 必须显式配置 Licensing:Runtime:PolicyId=community.small.v1;只有 Identity owner 的持久权威计量可以触发放行。

  3. 同一持久 DeploymentId 下跨全部租户汇总。Active、Locked 的非 Host 自然人用户占用席位;PendingActivation、Disabled、Expired、软删除用户、Host 运维主体、API Client 和应用身份不占用。

  4. 用户聚合、(DeploymentId, TenantId, UserId) 唯一分配状态、唯一计量行与追加式流水处于同一工作单元。创建、注册、激活或重新启用先以分配状态选出唯一赢家,再以 ActiveUserCount < 30 的数据库条件更新原子取得席位;禁用、过期、删除或 GDPR 擦除以条件切换幂等释放,禁止“先 Count 再 Save”。

  5. API 在接收业务流量前从 Identity 权威事实重建分配状态与计量;无 Host 的租户 provisioning 在创建首个管理员前调用同一入口。计量未知时失败关闭。

  6. 商业权益优先级固定:

    签名 License 状态小型社区权益行为
    Valid / Grace签名权益优先,解除 30 人上限但继续维护计量
    Unavailable / Expired权威人数为 0..30 时回退到内建权益
    Invalid / Revoked禁止回退,避免掩盖篡改或撤销事件
  7. /health/license 表示当前可用运行权益。内建权益有效时报告 LIC.COMMUNITY_SMALL、当前人数、上限和计量序列;基础 /health/ready 不受商业权益污染。

策略状态与证据口径登记在 0013-runtime-license-policy-catalog.json,由 Runtime、Identity、迁移与架构测试共同保护。

后果

  • Development 默认选择 community.small.v1 后,无 License 文件和公钥也能调试 30 人以内业务。
  • 第 31 名用户在数据库原子写入点返回 Identity.User.CommunityActiveUserLimitExceeded;并发请求不能穿透。
  • 重复或并发释放同一用户席位只允许一次递减;GDPR 擦除遇到聚合版本冲突时整事务失败,不能按陈旧状态修改计量。
  • 超额部署仍可搜索、查看、禁用和删除用户以恢复到 30 人;创建、邀请、激活和重新启用继续拒绝。
  • 有效商业 License 无缝解除人数上限;Invalid/Revoked 仍失败关闭。
  • community.small.v1 不授予私有 NuGet Feed entitlement,也不改变 community.web.v1 的签名边界。

另见

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%