Skip to content

v0.0.22

Latest

Choose a tag to compare

@github-actions github-actions released this 09 Oct 19:24
· 1 commit to main since this release
80c3e39

[0.0.22] - 2026-10-09

Added

  • session: 会话记录主登录方式 auth_method 并随跨主机交接保留,出站 SAML 对社交登录与企业 SSO 会话不再断言密码类 AuthnContextClassRef (567fe5e)
  • passkey: 根域账户页交接到组织地址登记或 step-up 后交回根域原页面并携带 step-up,提示已验证;PasskeySection 按主题拆分 (823a856)
  • sso: 出站 SAML 按 RequestedAuthnContext 判定认证强度,需要时补 MFA 或重新登录,满足不了回 NoAuthnContext,断言写入实际满足的 AuthnContextClassRef 与认证时间 (2450212)
  • passkey: 登录页与 MFA 页提供「使用较早地址创建的 passkey」入口,账户页标出早期凭证,账户登记、step-up 与第二因子在根域时跳到组织地址完成 (cec2640)
  • console: 审计日志为 passkey 吊销、attestation 可信根、出站 SAML 证书轮换与 MAU 补报写出完整句子 (08727b5)
  • console: 认证策略页新增 passkey 证明分节与可信根管理,无可信根时禁止选择 direct;单点登录分节开放强制 SSO 与密码登录开关 (4aeb21a)
  • auth-policy: 开放 force_sso 与 allow_password_login 读写,强制 SSO 需 active 连接,direct attestation 需可信根 (b3cd46e)
  • saml: 新增以断言为根元素的 SAML 2.0 断言验证,供 WS-Federation 使用 (928eab7)
  • sso: Atlassian 出站预设发出不可变用户 ID,Console 出站应用输入类型支持 metadata 导入 (ad64aac)
  • console: 出站 SAML 应用创建和编辑支持按 URL 或粘贴 XML 导入 SP metadata,错误按字段显示 (37ef65b)
  • sso: 出站 SAML 属性映射支持 userId 键输出 XID user id (7a30680)
  • webauthn: Attestation 新增 tpm、android-key、apple 格式校验,android-safetynet 明确拒绝 (4d8df30)
  • console: 企业 SSO 预设只提供服务端已有的 SAML,旧协议按字段填写地址与只写密钥,支持上传 metadata XML、稳定用户 ID 属性和 IdP 发起登录落地页,详情页提示 metadata 刷新失败 (93e472e)
  • saml: 新增构造并签名非 Success 状态 Response 的函数 (51f6289)
  • saml: 新增 SAML 1.1 断言验证,供 WS-Federation 令牌使用 (0fd197a)
  • sso: 出站 SAML 签名证书按 next、active、retiring 轮换,cron 提前 60 天发布下一张并告警,metadata 同时发布,管理员显式切换 (7cb5708)
  • passkey: 新增 /v1/webauthn/trusted-roots 管理租户 attestation 可信根,注册仪式合并实例级与租户级根 (f2aace2)
  • saml: AuthnRequest 校验结果返回 RequestedAuthnContext 的 Comparison 与 AuthnContext 引用 (a127867)
  • saml: 语义校验可选不要求 SubjectConfirmationData Recipient,验证结果返回 SubjectConfirmationData NotOnOrAfter (88b872b)
  • account: 安全页挂载应用登录区块 (020b281)
  • sso: LegacyProfile 增加 legacyIdpId,WS-Fed 改用 idpId 属性后沿用按 NameID 建立的账号 (194b4b9)
  • account: 账户门户新增应用登录区块,成员可保存、删除 SWA 凭据并打开应用 (ede048e)
  • console: 用量页列出待在 Stripe 核对的 MAU 上报,支持标记为已上报或重新上报 (4f62904)
  • auth: 配置 Apple Team ID、Key ID 和私钥时按需签发短期 ES256 client_secret,部分配置时拒绝 (85410c9)
  • users: 管理员可吊销单个 passkey,吊销后撤销该用户全部会话并写 user.passkey_revoked 审计 (e6b6321)
  • saml: AuthnRequest 校验结果返回 ForceAuthn、IsPassive 和 NameIDPolicy (f6dfcea)

Fixed

  • sso: 未提供显示名的连接不再存预设英文默认名,Console 与账户页对空值和存量默认名显示本地化名称 (ebac679)
  • sso: 旧协议连接不参与邮箱域名路由,向导第 3 步与详情页改为说明成员如何登录,强制 SSO 只认 SAML 与 OIDC 连接 (e670053)
  • sso: 删除后新建连接复用原行时重置旧连接的 metadata、刷新错误、证书保留记录、密钥、落地页与显示名 (dc953c4)
  • console-audit: 审计日志补齐 SSO 连接删除与 SAML 应用增改删的事件句子 (01895f5)
  • console-saml: 证书表头与行对齐,下载链接按钮居中无下划线,列表与详情补齐边距,metadata 缺失错误显示在对应字段 (902e73b)
  • console-sso: 旧协议字段错误落到对应输入框,详情页按协议显示旧协议配置并隐藏 SAML 专属项,向导去掉原生边框与文件控件,详情标签区补齐左右边距 (7c6ffc4)
  • console-auth: 强制 SSO 缺少启用连接时给出明确提示,认证策略页与标题对齐,可信根指纹按 SHA-256 缩写显示,方式摘要按语言列举 (b03ca91)
  • sign-in: 浏览器支持自动填充时也显示较早地址通行密钥入口 (b502162)
  • account: 组织未开启通行密钥时不再提示为当前地址创建通行密钥 (932fea7)
  • mfa: MFA 因子列表不再返回号码不在允许区号内的 SMS 因子 (59d2c83)
  • db: 清理旧预设写入但从未生效的 idpId,并补齐 0030 至 0032 迁移元数据 (74b40d1)
  • cron: IdP metadata 中消失的旧证书记录消失时间,保留到 notAfter 与 30 天重叠期中较早者,手动保存证书时清空保留记录 (505e550)
  • mfa: 号码不在允许区号内的 SMS 因子不再出现在 MFA 方法列表 (3798541)
  • sso: 早期预设写入的 idpId=nameID 标记按未配置处理,存量 SAML 连接继续以 NameID 登录 (0664851)
  • cron: IdP metadata 刷新改为合并证书集合,新证书加入,消失的旧证书保留到自身 notAfter 后移除,只在新增证书时发送续期 webhook (edc08fe)
  • passkey: 交接携带 step-up 的验证与到期时间,目标主机按原到期时间为新会话重签,已到期不签发 (6914348)
  • scim: Daily cron 的出站全量入队与 org 级全量共用 full_sync_queued_at 去重,同一 target 未开始的自动全量只入队一次;手动立即同步不受去重限制 (3569730)
  • mfa: MFA 短信发码与 SMS 因子登记按短信区域白名单校验号码,不在白名单时返回 invalid_request (e11138a)
  • sso: OIDC 连接配置 idpId claim 时以它作稳定主键,缺值拒绝,按 sub 建立的旧绑定经 legacyIdpId 沿用 (8239186)
  • passkey: 存量根域 passkey 在组织地址可用,根域登记与 passkey 第二因子经双向会话交接转到组织主机完成,交接失败回登录页 (9729dd1)
  • console: 密码登录只保留 Sign-in methods 一个开关,同时写入 hostedAuth 密码方式与 loginPolicy.allowPasswordLogin (501e0ac)
  • passkey: 交接 state cookie 只在 grant 消费成功后清除 (91008fb)
  • passkey: 多租户 passkey 仪式只在组织 rpId 主机进行,根域经一次性交接 grant 与 __Host- state cookie 建立会话并续跑 /authorize (d118ccd)
  • sso: WS-Fed SAML 2.0 断言改用以断言为根的内核验证,不再套一层 Response (1392fdf)
  • saml: XID 发出的 XML 签名改用 exclusive C14N 规范化 SignedInfo,补独立实现签名的回归样本 (9452a96)
  • sso: WS-Fed 连接配置 idpId 属性时把 NameID 作为旧绑定传给 JIT,沿用迁移前的账号 (5501758)
  • console: OIDC 连接也可配置稳定用户 ID claim,编辑保存时不再丢弃 idpId 映射 (4d77731)
  • sso: WS-Fed 支持 SAML 1.1 断言并放宽 SAML 2.0 Recipient,假 IdP 改发签名 RSTR,dev 与生产走同一条验证路径 (b823a2f)
  • queues: 死信重放校验 SCIM 消息的 userId 与 cursor 类型 (fed5f95)
  • memberships: 改角色、移除、恢复和主动离开组织时只为该成员入队出站 SCIM 单用户同步 (9596f95)
  • delivery: 发送方缺省或为空时视为未配置,只对读取 from 的 provider 校验发送方格式 (c94df03)
  • sso: 删除出站 SAML 应用时一并删除该应用的成对持久 NameID (e72c792)
  • account: 注册 WebAuthn 可信根路由,删除已无调用方的 Conditional Create 参数,MFA 短信缺少来源 IP 时只做租户上限 (64a8f47)
  • privacy: 擦除时删除 SAML persistent NameID 映射,导出包含该映射 (f50df47)
  • scim: 核心 schema URN 下嵌套的 password 同样不入库;补 Bulk 子请求经外层 ExecutionContext 保活的测试;拆出 patch-paths.ts (1c852ba)
  • sso: 预设按厂商文档修正并只作模板,保存时拒绝占位符与客户端内部映射键,SAML 连接同步导入 metadata URL 或 XML,出站应用支持 SP metadata 导入与 NameID 格式校验,投递渠道与社交登录保存期校验 (dba0efc)
  • sso: Persistent NameID 改为首次签发随机生成并持久化,错误状态 Response 使用 SP 签名证书签名 (65e16cf)
  • scim: 出站同步按变化的用户增量推送,全量对账按成员游标分批续传,同一 target 未开始的全量只入队一次;拆分 outbound.ts (feef135)
  • auth: 联系方式验证与 MFA 短信发码同样受 IP 和租户总量上限约束 (da728a7)
  • account: 修正 sign-in-methods 与 user-detail 的类型错误 (5231f4a)
  • webauthn: Attestation 证书链逐级验签到配置的可信根,校验有效期、basicConstraints 与 AAGUID 扩展,packed 从证书取 SPKI 并转换 DER 签名,新增 fido-u2f,direct 拒绝 fmt=none 与不可校验格式 (d423ab7)
  • scim: Filter 与 PATCH path 改用词法分析加递归下降解析,支持子属性、URN、valuePath 和 members 过滤删除;id 与当前资源相同时忽略;唯一性只在未删除资源之间判断并返回 409;PATCH 同步 externalId 列;Bulk 传递 ExecutionContext、按整数 failOnErrors 截断并解析 data 中的 bulkId;创建响应带 Location 与 ETag;按主题拆分 shared.ts (33ef667)
  • sso: SWA 凭据改存独立表 swa_credentials,保存用按租户绑定的 UPSERT,新增成员 SWA 应用列表接口 (381f107)
  • sso: WS-Fed 按 RSTR 解析 wresult 并经 SAML 内核验证断言签名、Audience 与有效期,wctx 不再与 InResponseTo 比对,属性按连接映射 (871f8c5)
  • sso: 上游 JWKS 任何一次回源都计入最短刷新间隔 (1bda3b7)
  • saml: 按 EncryptionMethod 选择 RSA-OAEP 摘要并支持 ISO 10126 填充的 AES-CBC 与兄弟放置的 EncryptedKey (6f5a678)
  • billing: Stripe 上报失败按指数退避重试,去重窗口从第一次可能入账的发送起算,并提供 Instance Manager 对账与重报接口和审计 (cdb13f5)
  • console: 投递渠道对话框按服务端配置名提交,标明 Meta 和 Bird 不使用发送方及 WhatsApp 模板要求 (10dbd69)
  • queues: WhatsApp 验证码改用 authentication 模板,Infobip 改用 v3 字段并检查消息状态,MessageBird 改用 Bird Channels API,统一发送方规则 (a061c0a)
  • queues: Provider 返回 429 或 5xx 时按 Retry-After 或指数退避重试,用尽后记为失败 (3c4adaa)
  • sso: SAML 按连接配置的 idpId 属性取稳定主键并兼容迁移前的 NameID 绑定,IdP 发起登录按连接 relay_state_url 落地 (0414dca)
  • passkey: 租户子域上 passkey 验证以当前主机 TenantContext 为准,client_id 只核对归属 (dfec00c)
  • saml: AuthnRequest 接受 SAML Core 标准可选元素与属性,ACS 和 ProtocolBinding 缺省时回退登记值 (50f469e)
  • sso: 出站 SAML 按格式生成 NameID 并遵守 NameIDPolicy,ForceAuthn 要求重新认证,IsPassive 无会话时返回 NoPassive (847c477)
  • sso: HRD 逐级匹配通配父域并排除已删除域名,与 JIT 可信邮箱共用同一覆盖规则 (b5da222)
  • auth: 保存 Apple 首次授权 form_post 回传的姓名,作为新建账号的显示姓名 (2f20b41)
  • sso: OIDC RP 允许端点与 issuer 不同源,上游 JWKS 改用 KV 缓存并在未知 kid 时限速刷新,id_token 强制 exp/iat/azp,claims 按 attributeMapping 映射 (31125d5)
  • billing: 按订阅 id 分别记录 Stripe 订阅状态,旧订阅的 deleted 不再把仍有有效订阅的租户标成 canceled;paused 与 incomplete_expired 按终止处理并删除排序 SQL 中的 invoice 死分支 (0b50b49)
  • sso: SWA vault 写入先校验会话再校验请求体 (4344710)
  • auth: 社交登录只信任可验证的邮箱:Microsoft 以 xms_edov 判定、邮箱规范化、白名单拒绝无可信邮箱的建号、未知 kid 限速刷新 JWKS (bd2ab0c)
  • saml: 同时要求两层签名时接受任一层有效签名,出现的签名必须验过 (b06a318)
  • sso: 出站 SAML 签发断言前要求用户是 SP 所属 org 的成员或管理者,restricted 名单与成员关系取交集 (4949717)
  • sso: Header SSO authenticate 按连接和来源 IP 限流,失败统一 401;目录连接器校验接口要求管理员认证 (63a0c14)
  • sso: SWA 改为下游应用密码代填,凭据按成员 KEK 加密,launch 自动提交到 swaTargetUrl,删除用 SWA 登录 XID 的路径 (0280dd7)
  • sso: LDAP gateway 改用按连接 KEK 加密的独立密钥,拒绝占位 URL;legacy-shared 按主题拆分 (3447eae)
  • saml: AuthnInstant 早于 Conditions NotBefore 不再判为过期,按 SAML Core 分别校验各元素时间字段 (0bb1d93)
  • console: 计费提示改为在 metered subscription 的 metadata 上设置 xid_tenant_id,与 webhook 读取位置一致 (360e403)
  • billing: 没有 xid_tenant_id 且 customer 未绑定租户的 Stripe 订阅事件记为 ignored 并返回 200 (1bd2cfe)
  • tenancy: Org_policies 的 force_sso 和 allow_password_login 在 buildPolicy 中收紧 hostedAuth,删除无读取方的 policy.login (1904eba)
  • billing: 每日同时派发上月与当月 MAU 上报,月末最后一天 02:00 之后新增的 MAU 补报到上月 (cb8e930)
  • cron: IdP metadata 刷新失败写日志并记录连接刷新状态,UPDATE 绑定 tenant_id,内容未变时不改写配置 (b2d9bf0)
  • account: 移除登录方式前只把租户当前允许的密码、passkey、社交和企业 SSO 身份算作可用方式 (60b8916)
  • auth: 社交登录 token 响应带 error 或缺 access_token 时按 invalid_grant 处理 (b8219a2)
  • passkey: 登录后引导页删除 Conditional Create 分支,只保留显式创建按钮 (4d21f3b)
  • passkey: 断言 BE 位须与注册时一致,克隆检测按存储值跳过,sign_count 异常审计改为 waitUntil (200c16c)
  • auth: 手机 OTP 增加 IP 与租户维度的发送总量上限,号段白名单只保留美国和加拿大区号 (46f3048)
  • console: 消息渠道 24 小时失败统计纳入 provider 层的拒绝与不确定结果 (612e0cf)
  • sso: 有 SP 签名证书时对 AuthnRequest 做 Redirect binding 签名,metadata 的 AuthnRequestsSigned 按签名证书判断 (e68cb68)
  • sso: 断言重放键保留到 NotOnOrAfter 加最大时钟偏差,超出重放窗口的断言直接拒绝 (62c6620)
  • sso: JIT 只在 roleMapping 命中时提升成员角色,不再把 owner/admin 降级 (753b4e2)

Changed

  • passkey: 可信根加载收口到 webauthn-trusted-roots,auth-policy 与注册仪式共用,GET configured 计入实例级根 (b10b520)
  • ttl: 出站 SCIM 全量同步去重窗口收口到 lib/ttl.ts (6761021)
  • scim: ScimSyncQueueMessage 正式声明 userId 与 cursor,调用方直接从 outbound-enqueue 导入,去掉 outbound.ts 的中转导出 (9170f05)
  • webauthn: StoredCredential 并入 backupEligible,删除 webauthn 包内的扩展类型 (24cfaad)
  • cron: 每日任务按用量维护、guest 回收和租户分页拆分文件,行为不变 (d5f347f)
  • queues: 通知投递状态的 D1 读写拆到独立文件,行为不变 (b12680d)
  • me-auth: Passwordless 按魔法链接、OTP 发送、OTP 验证拆分文件,行为不变 (9eb2499)
  • ttl: 上游 JWKS 强制刷新间隔与 Apple client_secret 有效期收口到 lib/ttl.ts,社交登录与企业 OIDC 共用同一刷新间隔 (ce407fa)
  • organizations: 组织路由按资源拆分为企业 SSO、出站 SAML、认证策略、投递渠道和社交登录模块,路径与行为不变 (421b9ce)
  • sso: 拆分 saml.ts,入站 SLO、binding 表单校验和断言映射独立成文件 (339e46d)
  • sso: 拆分 oidc-rp,上游调用、id_token 校验和 flow 状态独立成文件 (99cbfac)
  • saml: 按主题拆分结构白名单与 Response 验证测试,行为不变 (cc32b2b)
  • billing: 把 MAU 上报游标的读写拆到 stripe-meter-cursor.ts (2b1f019)
  • auth: 按主题拆分 hosted-policy 与 social 路由,行为不变 (cfb60e8)
  • sso: 拆分 saml-do,一次性记录原语与 SLO 一次性状态独立成文件 (c966d52)
  • sso: 出站 SAML IdP 按 SSO、SLO、签名证书和共用部分拆分文件 (f252f83)
  • sso: PrepareLegacyAttributeMapping 接收 env,为按连接加密 gateway 凭据做准备 (68d45ac)

Documentation

  • sso: 04 章写明只有 SAML 与 OIDC 参与域名路由、删除后新建连接的列重置与显示名规则 (8e0d18b)
  • stdai: References 补每日 cron 的 IdP 证书保留与出站 SCIM 全量、会话 auth_method 和短信区号白名单范围,并同步生成文件 (540eb56)
  • design: 01、08 章与协议页写明会话 auth_method、IdP 证书保留记录、无效 idpId 清理、MFA 短信区号白名单、出站 SAML 认证上下文和 SCIM 全量去重 (9382661)
  • sso: 04 章写明 OIDC RP idpId 缺值拒绝与旧绑定迁移、出站 SAML 认证上下文判定、IdP 证书 30 天重叠期、SWA launch 目标规则与 SCIM 自动全量去重 (588c713)
  • protocols: Source-map 与 gap-audit 写明出站 SAML 执行 RequestedAuthnContext,SWA launch 目标规则和出站 SCIM 自动全量去重 (c6adfa5)
  • sso: IdP metadata 刷新按合并证书集合描述,旧证书保留到 notAfter,只在新增证书时发送续期 webhook (7abd916)
  • passkey: 写明会话交接携带 step-up 并按原到期时间重签,根域账户页登记与 step-up 完成后交回原页面 (9acd07c)
  • stdai: Webauthn 规则与 references 写明组织主机仪式、SessionHandoffDO 交接、较早地址验签、attestation 可信根、passkey 吊销与 loginPolicy,并同步生成文件 (c60fc91)
  • protocols: Source-map 的 passkey 行补上组织主机交接、较早地址验签与 attestation 可信根的代码和测试路径 (a5b86f0)
  • passkey: 01、08 章与 passkey 协议页写明组织主机仪式、会话交接、较早地址入口与 rp_id 验签规则、attestation 格式和 Console 可信根要求 (6ccf499)
  • auth-policy: Api-contracts 与 02、06 章写明 passkey 交接接口、单个 passkey 吊销与恢复、可信根 configured、loginPolicy 写入与强制 SSO 收紧规则 (499be24)
  • protocols: Source-map 的 legacy SSO 与 SCIM 行补齐拆分后的代码路径和对应测试文件 (b7b162b)
  • protocols: 协议页、source-map 与 gap-audit 指向拆分后的文件并按代码更新 SWA、SCIM、C14N 和证书轮换描述,runbook 按预设取值改写并删除替换占位符步骤 (6de8996)
  • api: Api-contracts 写明 SSO 写入校验、出站 SAML 证书轮换端点、SWA vault 与 launch、LDAP 按连接网关密钥和 Header SSO 失败响应 (50e5ec1)
  • design: 01、06、08 章与 passkey 协议页按代码更新社交登录邮箱信任与 Apple 姓名、手机 OTP 限额、attestation 可信根、SSO 写入校验、出站证书审计和新增表列 (8a51871)
  • sso: 04 章按代码更新 SAML 签名层、时间校验、加密算法、C14N、出站证书轮换与 NameID、WS-Fed RSTR、OIDC RP、SWA、LDAP、Header SSO 与 SCIM 规则 (537e55d)
  • stdai: References 按代码更新上游 JWKS 刷新、通知重试、计费对账、出站 SAML 证书轮换、SCIM 队列消息、租户表数与手机 OTP 限额,并同步生成文件 (87e5331)
  • deployment: 部署与运营文档按代码写明 Apple 签发密钥、Microsoft 邮箱信任、WhatsApp 与 Bird 配置、通知重试和 Stripe 订阅状态与 MAU 对账 (24780ea)

Testing

  • harness: 生产门禁用例改为检查当前的 fake-swa 登录路由 (f4b80df)
  • key-path: 证书轮换测试迁到独立文件后,关键路径清单按新位置登记 (0a6f2f1)
  • smoke: 生产门禁 smoke 的默认号码改用允许区号内的号码,确保拒绝来自渠道未启用 (3bab4df)
  • smoke: Delivery OTP 与 hosted authorize smoke 的测试号码改用短信区域白名单内的区号 (b39e52c)
  • sso: SWA smoke 改走 vault 保存与 launch 表单提交,假下游改为校验字段名和凭据的登录表单;dev/test 下 launch 允许回环 HTTP 目标 (cab5cd1)
  • auth: WhatsApp 就绪用例按模板配置规则补齐 Meta 模板名和语言 (b40130c)
  • sso: RandomUUID 契约去掉 wsfed-token.ts 的计数 (fda547f)
  • auth: Apple 私钥夹具改为运行时生成,源码不再出现 PEM 私钥头 (571e314)
  • auth-policy: 跨租户用例补 CACHE 绑定以覆盖 direct attestation 可信根检查 (c33cd36)
  • sso: SAML 连接创建拆为内部键拒绝与 metadata 同步拉取两条用例,测试 onError 带回 meta (93a1f89)
  • sso: 预设按厂商文档的签名层、metadata 来源与 Entity ID 断言,Apple 签发密钥作为社交登录凭据来源 (01d08e5)
  • ids: 持久化 id 契约清单对齐 SCIM、通知队列、SSO 与组织路由拆分后的文件 (f3208fc)
  • saml: 出站 IdP 证书仍在有效期时沿用 cert_old 并保持 active,不再断言后台自动换证 (10a15c6)
  • delivery: WhatsApp 跨租户用例补模板配置与 Twilio WhatsApp Content SID,Meta secretRefs 改为 4 项 (3208ae8)
  • billing: Webhook 测试辅助函数改用订阅覆盖,满足参数个数限制 (6056c33)
  • sso: Legacy ldap 跨租户用例改用非占位网关地址和 32 位以上网关密钥 (2001fbf)

Build

  • db: 迁移兼容门禁精确放行旧预设 idpId 清理语句 (bc520db)
  • db: 补齐 0024 至 0029 迁移的 drizzle journal 与快照 (7e43ee6)
  • webauthn: ASN.1 与 X.509 依赖版本迁入 pnpm catalog (fec56a4)
  • db: 迁移兼容门禁精确放行 0024 重建的三个 SCIM 唯一索引 (d7ff612)
  • db: 迁移兼容门禁精确放行计费上报发送时间回填 (b1782c1)

Maintenance

  • i18n: 抽取旧协议登录说明与连接本地化名称文案并补齐 7 种语言翻译 (082fe00)
  • i18n: 抽取走查修复新增文案,补齐 7 种语言翻译并修正签名证书状态与登录链接译名 (098c369)
  • i18n: 抽取集成修复轮新文案并补齐 7 种语言翻译 (a19ffbd)
  • env: 删除实例级 LDAP_GATEWAY_SHARED_SECRET,LDAP gateway 密钥改为按连接配置 (8329c62)
  • env: 预留 Apple 签发密钥、WhatsApp 模板和 Bird 渠道的环境变量类型 (990e016)