Files
nexus/Project/fonrey/PRD/平台管理后台/平台管理后台PRD.md
2026-05-02 16:21:46 +08:00

52 KiB
Raw Blame History

PRD:平台管理后台(Platform Admin Console)

状态:Draft 作者:产品经理 最后更新:2026-05-02 版本:v1.1 关联模块:权限管理(仅平台侧管理员账号体系)、登录管理(管理员登录与 MFA)、所有租户业务模块(间接,仅作运营/监控对象) 利益相关方:工程负责人、运营团队、安全合规、客户成功团队、IT 运维


变更历史

版本 日期 作者 变更说明
v1.0 2026-05-02 产品经理 由 PRD/系统管理/系统管理模块PRD.md (v1.3) 与 PRD/发布管理/客户端发布管理模块PRD.md (v1.2) 合并而来;统一面向平台管理员视角,统一规划页面路由与业务 API 操作清单。原两份 PRD 文件同步删除,参见 ADR-20260502-001。
v1.1 2026-05-02 产品经理 修复 P-B-1:全部用户故事补齐功能编号 PA-001 ~ PA-011,与登录管理 PRD v3.0「功能 ID + 验收标准」风格对齐,建立需求→测试用例→Bug 单可追溯链条。修复 X-1:新增 PA-011「租户注销 SOP」用户故事(Persona E),覆盖删除前数据导出确认、双人复核审批流程、30 天冷静期可撤销机制;同步更新租户状态机(新增 Pending Cancellation 状态节点)、权限矩阵(新增注销审批相关操作行)、§5.1.4 删除章节(引用 PA-011 SOP)、§5.4 页面导航逻辑(注销审批待办流程)、租户列表筛选(新增 Pending Cancellation / Pending Delete 状态)、§5.5.1 API 操作清单(新增注销发起、审批、撤销、硬删除操作项)。

本 PRD 取代以下两份历史文档:

  • PRD/系统管理/系统管理模块PRD.md(v1.3,已删除,被本 PRD 替代)
  • PRD/发布管理/客户端发布管理模块PRD.md(v1.2,已删除,被本 PRD 替代)

决策依据:ADR-20260502-001(REQ)。


1. 问题陈述

1.1 背景

Fonrey(房睿)是面向房产经纪公司的 B2B SaaS 平台,采用 django-tenants 实现 PostgreSQL Schema 级别多租户隔离,同时通过 Electron 桌面客户端为终端经纪人提供统一入口。随着平台商业化推进,平台运营团队需要一套独立、跨租户的「平台管理后台」(Platform Admin Console)来统一承担:

  1. 租户全生命周期管理(开通、挂起、注销、License 续期)
  2. 平台版本治理(基础数据版本、租户数据版本、灰度升级、回滚)
  3. 数据备份与恢复(灾难场景应对)
  4. 客户端发布治理(桌面客户端版本上线、强制升级、版本分布监控)
  5. 操作审计与合规
  6. 平台管理员账号与安全(MFA、IP 白名单、强制登出)

平台管理后台部署于平台公共域名(与租户应用域名隔离),数据落在 public schema,跨租户。Tenant Admin 与 Agent 一律无访问权限。

1.2 核心痛点

痛点 影响方 当前代价
无统一租户管理界面,开通 / 挂起 / 注销依赖人工脚本 运营团队 高错误风险,操作耗时
平台版本升级需停机,影响所有租户 全量用户 SLA 违约风险
数据备份无策略,灾难恢复依赖人工 平台稳定性 数据丢失风险
高危操作无审计轨迹 管理层 / 合规 法律与客户信任风险
客户端浏览器版本碎片化,兼容性问题层出 Agent / 客户成功 支持成本飙升
客户端无统一发布渠道,旧版本与新后端 API 不兼容 全量用户 数据错误风险
无法跨租户掌握客户端版本分布与覆盖率 Platform Admin 无法定向催更

1.3 目标用户

角色 使用场景 频率
Platform Admin(平台超级管理员) 全局配置、高危操作、版本上线、强制升级 低频(每周)
运营人员(Ops Operator) 日常租户管理、监控巡检、客户咨询响应 高频(每日)
只读审计员(Read-only Auditor) 日志查询、合规报告导出 中频(每周)

本 PRD 不涉及租户内部的 Tenant Admin、Agent 角色——他们对本后台无访问权限。


2. 目标与成功指标

目标 指标 当前基线 目标值 测量窗口
租户开通效率 新租户开通耗时 人工脚本 ~30 分钟 < 5 分钟(含自动初始化) 上线后 30 天
平台升级零停机 升级期间受影响租户数 全量中断 灰度阶段 ≤ 5% 租户 每次升级
数据恢复能力 RTO(单租户恢复时间) 无标准流程 < 2 小时 v1 上线即达标
操作合规覆盖 高危操作审计日志覆盖率 0% 100% 上线后 30 天
管理员安全 平台管理员 MFA 启用率 0% 100%(强制) 上线即达标
客户端兼容性问题消除 因浏览器兼容产生的支持工单数 待统计 降低 ≥ 90% 客户端上线后 60 天
客户端版本一致性 在线用户使用最新客户端比例 0%(无客户端) ≥ 95% 版本发布后 7 天
客户端自动更新成功率 收到通知 → 升级完成的成功率 无基准 ≥ 98% 每次发布后 48 小时

3. 非目标(Non-Goals)

不在 v1 实现:

  • 自动化账单计费、多币种支持、Webhook 自定义集成市场
  • 租户端自助迁移工具
  • 客户响应数据导出请求(Story「响应客户数据导出请求」暂缓,列入后续迭代)

不属于本后台:

  • 租户内业务权限的细粒度配置(见权限管理模块 PRD)
  • 客服工单系统、SLA 自动赔付
  • macOS / Linux 桌面客户端、移动端 App
  • 客户端离线模式、私有化离线安装方案
  • 客户端代码混淆 / 反逆向加固

不支持:

  • 移动端浏览器访问平台管理后台(运营场景明确为 PC 桌面)
  • 多语言界面(运营团队为内部人员,中文已满足)

4. 用户角色与核心故事

Persona A — 运营人员 Lily(日常租户管理)

负责 Fonrey 的日常运营,每天处理新客户开通、异常租户处理、客户咨询。使用 PC 浏览器登录平台管理后台。

PA-001 Story A1:新租户开通

作为运营人员,我希望通过填写表单快速完成租户开通,并由系统自动完成数据库初始化与欢迎通知,无需手动执行脚本。

验收标准:

  • 表单提交后,系统在后台自动创建 PostgreSQL Schema 并注入默认配置(见 §5.1.2「默认配置内容」),完成耗时 < 60 秒
  • 默认配置注入包含两部分:
    • 权限定义(PermissionDef):注入平台所有权限码定义(permission_code、描述、模块归属),作为该租户 RBAC 体系基础
    • 系统默认角色与权限绑定:按「角色权限矩阵.md」注入 7 个系统内置业务角色(置业顾问、店管、区管、区总、副总、总经、其他职能),并完成角色—权限绑定
  • 初始 Tenant Admin(以联系人手机号创建)不通过业务角色赋权,由系统在租户创建时直接写入「租户管理员」专属权限集合;该集合独立于 7 个业务角色之外,不在租户角色管理界面显示,不可由 Tenant Admin 自行修改或分配。新增/变更租户管理员须由平台运营方在本后台操作
  • 新租户创建后:平台运营管理员收到站内消息;租户联系人收到欢迎邮件(见下方「欢迎邮件规范」)
  • 联系人无邮箱时,运营人员可在租户详情页下载「入驻信息 PDF 文档」,通过微信等渠道转发
  • 租户访问地址采用统一域名 + Tenant Code 参数形式(https://app.fonrey.com/?tenant={Tenant Code}),无需子域名;详情页展示该链接,可一键复制
  • 创建失败时回滚所有已创建资源,并显示明确错误原因

欢迎邮件规范(联系人有邮箱时自动发送):

字段 内容
主题 【房睿平台】您的账号已开通,欢迎登录
收件人 租户联系人邮箱
正文 公司名称、Tenant Code、登录地址、Tenant Admin 手机号(脱敏后三位)、系统初始密码(明文,首次登录后强制修改)、客服联系方式
备注 初始密码由系统随机生成(12 位,含大小写字母+数字),发送后立即标记为「首次登录强制修改」

入驻信息 PDF(无邮箱客户的备选方案):

  • 包含与欢迎邮件相同的关键信息
  • 入口:租户详情 → 基本信息 Tab → 「下载入驻信息」按钮
  • 文件名:{公司名称}_入驻信息_{日期}.pdf

PA-002 Story A2:挂起问题租户

作为运营人员,我希望快速冻结欠费租户的访问,同时保证数据不丢失,并在欠费解决后一键恢复。

验收标准:

  • 挂起后,该租户所有用户登录跳转至「账号已暂停」提示页;平台后台对该租户数据访问不受影响
  • 支持设置到期时间,到期后系统自动恢复租户状态,并发送通知邮件
  • 所有挂起 / 恢复操作记录于审计日志,包含操作人、时间、原因

PA-003 Story A3:License 时效管理与到期自动挂起

作为运营人员(或 Platform Admin),我希望每个租户能设置 License 有效期,到期后系统自动挂起租户,并在到期前提前预警。

验收标准:

  • 每个租户「基本信息」中包含 License 到期日期字段,由 Platform Admin 在创建或续费时设定
  • 系统每日自动检查 License 到期,到期后自动挂起,挂起原因标注为「License 到期」
  • 自动挂起后,租户联系人收到通知邮件;Platform Admin 续费后可手动解除挂起
  • 提前 15 天预警:租户内 Tenant Admin 登录后管理界面顶部出现倒计时横幅:「您的 License 将于 X 天后到期({到期日期}),请联系平台续费」
  • 倒计时横幅仅对 Tenant Admin 可见,不影响普通 Agent
  • License 到期日期在租户列表与详情页均可见,支持「即将到期(15 天内)」筛选

PA-004 Story A4:查看与控制租户用户数(License 计费维度)

作为运营人员(或 Platform Admin),我希望看到每个租户的当前用户数,并能设置用户数上限,以便根据 License 授权进行管控。

验收标准:

  • 租户列表新增「当前用户数」列,显示该租户当前有效用户总数(含 Tenant Admin + 全部 Agent,不含已删除/离职)
  • 租户详情页「基本信息」Tab 显示:当前用户数 / License 授权用户数上限(如:12 / 50)
  • Platform Admin 可设置「License 授权用户数上限」字段;达到上限时,Tenant Admin 在该租户内无法继续创建新用户,并收到提示:「当前用户数已达 License 上限,请联系平台扩容」
  • Platform Admin 可随时调整用户数上限(扩容 / 缩容),变更写入审计日志
  • 租户列表支持按「用户数已满(≥ 上限)」筛选,便于平台运营主动识别需续费的租户

PA-011 Story A5:响应客户数据导出请求 — 状态:暂缓(v1 不实现,列入后续迭代)。


Persona E — Platform Admin David(租户注销合规流程)

处理租户主动申请注销或因严重违规被强制注销的场景。注销操作不可逆(硬删除后),需要多重防护——数据导出存证、双人复核、30 天冷静期撤销窗口。

PA-011 Story E1:租户注销 SOP(Tenant Cancellation SOP)

作为 Platform Admin,我希望执行租户注销时有标准化的审批流程保障——要求数据导出完成、双人复核授权、30 天冷静期可撤销——防止因误操作或内部滥权导致客户数据不可恢复地丢失。

验收标准(AC):

AC-1 发起注销申请

  • 运营人员或 Platform Admin 可在租户详情页发起「注销申请」,填写:注销原因(客户主动申请 / 严重违规 / 其他)、申请说明(自由文本)
  • 发起后,租户状态流转至 Pending Cancellation(待审批注销),此时租户访问被阻断(等同挂起效果),不可通过常规「恢复」操作解除
  • 发起操作写入审计日志

AC-2 数据导出前置确认

  • 进入审批流程前,系统强制展示「数据导出确认」步骤:要求操作人触发该租户的完整数据导出(§5.1.5),等待导出任务完成(状态 Done)后方可提交审批
  • 若申请人选择「客户已自行备份,无需平台导出」,需勾选明确确认框,并填写备注(客户签字回执编号或说明),此记录写入审计日志
  • 审批单中需展示:导出任务 ID(或「已确认客户自备份」备注)、导出完成时间

AC-3 双人复核审批

  • 注销审批流需要第二名 Platform Admin(不得与申请人为同一账号)在系统内确认审批,确认时需通过 MFA 二次验证
  • 审批人可「批准」或「驳回」:驳回时必须填写驳回原因;驳回后租户状态恢复至 Suspended(仍不可直接恢复为 Active,需运营人员手动解除挂起)
  • 若 48 小时内无人审批,系统向所有 Platform Admin 发送催审通知(站内消息 + 邮件)

AC-4 软删除与 30 天冷静期

  • 审批通过后,租户立即进入软删除状态(Pending Delete,现有机制);冷静期默认 30 天
  • 冷静期内,Platform Admin 可在租户列表「待清除」筛选下找到该租户,执行「撤销注销」
  • 撤销注销需第二名 Platform Admin 同样通过 MFA 确认(与初始注销审批相同的双人复核机制)
  • 撤销成功后,租户状态恢复至 Suspended(需运营人员手动评估后恢复为 Active);撤销操作及原因写入审计日志

AC-5 硬删除与资源释放

  • 冷静期届满后,系统自动触发硬删除,或 Platform Admin 可在冷静期内提前手动触发硬删除(需再次 MFA 确认,并再次展示「此操作不可逆」警告)
  • 硬删除释放:PostgreSQL Schema、Cloudflare R2 存储桶、Tenant Code、License 席位
  • 硬删除完成后:向租户联系邮箱发送「账号已注销」通知(含注销日期、数据保留期说明);审计日志记录完整操作链

注销状态流转(补充至 §7 状态机):

[活跃 Active] 或 [已挂起 Suspended]
  ↓ 运营/Platform Admin 发起注销申请
[待审批注销 Pending Cancellation]
  ↓ 双人 MFA 审批通过
[待清除 Pending Delete](冷静期 30 天)
  ↓ 可在冷静期内由双人 MFA 撤销 → 恢复至 [已挂起 Suspended]
  ↓ 冷静期届满 或 提前手动硬删除(MFA)
[已删除 Deleted]

Persona B — Platform Admin David(系统升级、回滚与版本治理)

负责平台技术运维,周期性执行版本升级,关注升级稳定性与租户影响面。拥有所有高危操作权限。

PA-005 Story B1:灰度系统升级

作为 Platform Admin,我希望先对内测租户升级新版本,验证稳定后再全量推送,避免一次性影响所有客户。

验收标准:

  • 升级前自动执行健康检查,存在异常服务时阻断升级并提示
  • 支持指定目标租户进行灰度升级,灰度租户名单可编辑
  • 升级过程实时展示进度(每个租户的升级状态),支持查看升级日志
  • 升级失败时系统自动告警,并提供一键回滚入口

PA-006 Story B2:升级失败回滚

作为 Platform Admin,我希望在升级出现问题时立即回滚至上一稳定版本,并生成事件报告。

验收标准:

  • 回滚操作触发前自动保存当前状态快照
  • 支持全量回滚或单租户回滚
  • 回滚完成后生成事件报告:失败原因、回滚耗时、影响范围
  • 回滚操作需二次身份验证确认(MFA)

PA-007 Story B3:查看平台与租户版本总览

作为 Platform Admin,我希望在管理界面一眼看到整个平台的版本情况,包括基础数据版本和每个租户各自的数据升级版本。

验收标准:

「版本总览」页面分两部分:

  • Part 1:平台基础数据版本

    • 展示当前平台基础数据(公共 Schema 中的 PermissionDef、系统配置等 seed 数据)的版本号
    • 该版本对所有租户一致,每次平台升级为一次性全量升级
    • 字段:版本号、最后升级时间、升级描述、升级执行人
  • Part 2:租户数据升级版本

    • 列表展示每个租户当前数据版本号(即该租户 Schema 已完成的 migration 版本)
    • 灰度升级下各租户版本可能不一致
    • 字段:租户名称、当前数据版本、上次升级时间、升级状态(最新 / 待升级 / 升级中 / 升级失败)
    • 支持按「待升级」「升级失败」筛选,快速定位异常租户
    • 点击租户行可跳转至该租户详情的「备份记录」Tab
  • 页面支持手动刷新;版本数据允许最多 5 分钟缓存延迟


Persona C — Platform Admin David(客户端发布治理)

同 Persona B,但聚焦桌面客户端版本上线、强制升级与跨租户版本分布。

PA-008 Story C1:发布新版本客户端

作为 Platform Admin,我希望通过本后台上传新版客户端安装包并配置版本信息,使全平台所有租户的客户端能感知到更新并引导升级。

验收标准:

  • 平台管理后台提供「客户端版本管理」页面(位于本后台一级菜单,与租户系统管理隔离)
  • 支持上传 .exe 安装包,并填写:
    • 版本号(SemVer:X.Y.Z,自动校验格式)
    • 版本类型(普通更新 / 强制更新)
    • 最低兼容版本(低于此版本的客户端将被强制升级)
    • 更新日志(Markdown,最多 2000 字,对外展示)
    • 内部发布说明(不对外)
  • 支持版本状态:草稿(不对外生效)/ 已发布 / 已下线
  • 上传成功后,系统自动计算 SHA256 校验值并填充到该版本元数据,作为客户端下载完成后的完整性校验依据
  • 发布后,客户端下次检测时即可感知(无需等待)
  • 支持版本回滚:将指定历史版本重新置为「已发布」,自动将当前版本标记为「已下线」
  • 支持便携版(Portable ZIP)作为可选上传项

PA-009 Story C2:跨租户监控客户端版本分布

作为 Platform Admin,我希望跨租户查看当前所有在线客户端的版本分布,以了解全平台升级覆盖率,对仍使用旧版本的客户端发出提醒或强制升级。

验收标准:

  • 「客户端版本管理」页展示版本分布统计:各版本在线客户端数量及占比(饼图或条形图)
  • 支持按租户维度查看版本分布(区分不同经纪公司,便于识别落后租户)
  • 支持按租户统计安装数:可查看任一租户的「当前活跃安装数(最近 24h)」与「历史装机总数(不论是否活跃)」
  • 支持「全平台租户活跃榜」视图:以列表形式展示各 active 状态租户的 tenant_code、租户名称、活跃安装数、历史装机总数,按活跃安装数降序排列
  • 支持对指定版本范围的客户端推送「强制更新」标记(如:将所有低于 v1.5.0 的客户端标记为强制更新)
  • 支持升级进度趋势图:新版本发布后各天累计升级完成的用户比例

客户端侧用户故事不在本 PRD 范围(如「Agent 下载安装客户端」「Agent 自动升级」)。这些故事面向终端用户使用的桌面 App,不属于平台管理后台职责。但本 PRD 通过 Story C1/C2 为客户端侧故事提供版本数据源与控制能力。


Persona D — 只读审计员 Carol(合规审计)

负责平台合规审查,定期导出操作日志供法务或客户审查。无任何写权限。

PA-010 Story D1:审计日志查询与导出

作为审计员,我希望按操作人、时间范围、操作类型筛选操作日志,并导出为报告。

验收标准:

  • 日志列表支持多维度筛选:操作人、时间范围、操作对象、操作类型(创建 / 修改 / 删除 / 高危)
  • 每条日志包含:操作人、操作时间、操作对象(租户/用户ID)、内容摘要、结果(成功/失败)、来源 IP
  • 支持导出筛选结果为 CSV

5. 功能详细说明

5.1 租户与 License 管理

5.1.1 租户生命周期

新建租户表单字段:

字段 类型 必填 说明
公司名称 Text ✅ 最大 100 字符
联系人 Text ✅ 主联系人姓名
联系人手机号 Text ✅ 用于创建初始 Tenant Admin
联系邮箱 Email ❌(可选) 发送欢迎邮件;无邮箱改用 PDF 下载
所在地区 Select ✅ 省市两级
订阅套餐 Select ✅ Basic / Professional / Enterprise
License 到期日期 Date ✅ 到期后自动挂起
License 授权用户数上限 Number ✅ 用户数计费维度

创建流程:

  1. 表单校验通过后,后台异步任务执行:
    • 创建 PostgreSQL Schema(tenant_{id})
    • 执行 Migrate 初始化表结构
    • 注入默认配置(见下方「默认配置内容」)
    • 生成初始密码(12 位随机),标记为「首次登录强制修改」
    • 联系邮箱已填写时:发送欢迎邮件(含 Tenant Code、初始密码、平台访问链接)
  2. 任务完成后更新租户状态为 active;失败则全量回滚并标记为 failed
  3. 生成唯一 Tenant ID(UUID)及 Tenant Code(12位纯数字,如 202605023765)

5.1.2 默认配置内容(Schema 初始化时注入)

配置类型 内容 说明
权限定义(PermissionDef) 平台全量权限码 从 public schema 同步至租户 schema
系统默认业务角色 7 个内置角色(置业顾问/店管/区管/区总/副总/总经/其他职能)+ 角色—权限绑定 按「角色权限矩阵.md」
初始 Tenant Admin 用户 以联系人手机号创建 写入「租户管理员」专属权限集合,独立于 7 个业务角色

5.1.3 挂起(Suspend)

  • 触发方式:
    • 手动:运营人员选择挂起原因(欠费 / 违规 / 主动申请 / 其他)
    • 自动:系统每日检查 License 到期日期,到期自动挂起(原因「License 到期」)
  • 可设置挂起到期时间(留空表示永久挂起直至手动恢复)
  • 挂起效果:租户用户访问被拒,重定向至暂停提示页;平台管理后台对该租户数据访问不受影响
  • 自动恢复:手动设置了到期时间的挂起会到期自动恢复;License 到期挂起须 Platform Admin 手动恢复
  • 通知:挂起 / 恢复均向租户联系邮箱发送通知(无邮箱跳过)
  • License 到期前 15 天起,租户端 Tenant Admin 看到倒计时横幅

5.1.4 删除(Delete)

注意:租户注销是高危操作,须遵循「PA-011 租户注销 SOP」——发起注销申请 → 强制数据导出确认 → 双人 MFA 复核审批 → 软删除(30 天冷静期,可撤销)→ 自动或提前手动硬删除。不允许绕过此 SOP 直接执行删除。

模式 说明
软删除(Pending Delete) SOP 审批通过后自动进入;数据保留 30 天(默认,可配置)后自动清除
硬删除 冷静期内 Platform Admin 提前触发(需 MFA + 不可逆警告),或冷静期届满自动触发;仅 Platform Admin 可操作

删除前置条件(PA-011 SOP 强制执行):

  1. 发起申请时必须填写注销原因
  2. 审批前强制完成数据导出确认(平台导出 Done 或客户自备份书面确认)
  3. 须第二名 Platform Admin(≠ 申请人)MFA 审批通过
  4. 软删除冷静期内可由双人 MFA 执行「撤销注销」

删除完成后释放:访问域名 / Tenant Code、Cloudflare R2 存储桶、License 席位

5.1.5 数据导出(Export)

Story A5(响应客户数据导出请求)暂缓;本节描述能力为运营内部数据核查使用。

  • 触发:管理员手动,选择目标租户 + 模块 + 格式
  • 异步执行,状态实时刷新(Pending → In Progress → Done / Failed)
  • 内容:结构化数据(CSV / JSON / SQL Dump)+ 文件资产 URL 清单(不打包文件实体)
  • 模块选项:客户数据 / 房源数据 / 交易记录 / 系统配置 / 全量
  • 存储:压缩后存于 Cloudflare R2 临时目录,签名下载链接 24 小时有效

文件资产导出处理规则(v1 决策):

  • R2 Bucket 配置为 public read,文件通过 CDN 持久 URL 形式内嵌于导出数据
  • 账号未硬删除前,CDN URL 持续有效
  • 迁移类需求(需要文件实体)走「完整备份」流程,不走「数据导出」
导出格式 图片字段示例 附件字段示例
CSV photos 列:多个 CDN URL 以英文分号分隔 attachments 列:文件名|CDN URL 以分号分隔
JSON "photos": [{"url": "...", "filename": "...", "created_at": "..."}] "attachments": [{"url": "...", "filename": "..."}]
SQL Dump 文件元数据表原样导出,file_url 字段为 CDN URL 同左

导出包附 README.txt 说明文件资产链接策略。

数据导出 vs 完整备份:

维度 数据导出(Export) 完整备份(Backup)
用途 合规审计、数据核查、业务分析 灾难恢复、租户迁移
文件资产 CDN URL 清单 含 R2 文件实体
完成时间 分钟级 小时级
触发方式 运营人员手动 手动 / 系统自动(升级前)
存储成本 极低 较高

5.1.6 数据备份(Snapshot)

  • 自动触发:升级前系统对参与租户全量备份
  • 手动触发:管理员可在租户详情页发起
  • 内容:数据库 Schema(pg_dump)+ R2 文件存储(附件、图片)
  • 字段:备份时间、触发方式、备份大小、状态
  • 保留策略:默认最近 10 个版本,可在全局配置中调整
  • 存储:加密;目标可选(本地 / S3 / R2 / GCS)

5.1.7 数据恢复(Restore)

恢复流程:

选择目标备份版本
  → 二次确认(显示当前数据版本将被覆盖)
  → 自动对当前数据生成临时快照
  → 租户切换为维护模式
  → 执行恢复
  → 自动恢复服务 → 生成恢复报告

报告字段:操作人、操作时间、恢复前/后版本、耗时、结果。

5.1.8 套餐升级

  • 升级路径:Basic → Professional → Enterprise
  • 升级前展示差异对比表(功能项、用户数上限、存储空间、API 额度)
  • 生效模式:立即 / 下一账期
  • 升级前自动备份;升级失败可一键回滚
  • 升级历史:时间、操作人、升级前后套餐

5.1.9 租户用户与权限管理

Tenant Admin 管理:

  • 每个租户可设置 1 至多名 Tenant Admin
  • Platform Admin 可直接创建新用户并赋予 Tenant Admin,或从租户现有用户中指定
  • 支持新增 / 替换 / 撤销

密码重置(针对租户内任意用户):

  • 方式一:发送重置链接至注册邮箱(用户自助)
  • 方式二:管理员直接设置临时密码(首次登录强制修改)
  • 所有操作进审计日志

5.1.10 租户监控与统计

资源监控指标:

指标 展示维度
CPU / 内存占用 实时折线图
存储用量 当前值 vs 套餐上限
API 调用次数 当日 / 本月累计
活跃用户数 当日活跃
当日登录次数 累计折线图
异常请求数 4xx / 5xx 分类
慢查询数量 > 500ms

支持为每个指标配置阈值告警(邮件 / Webhook)。

可用性 / SLA:

  • 服务可用率统计:日 / 周 / 月
  • 故障事件记录:开始 / 恢复时间、持续时长、影响描述
  • SLA 达标率报告,可导出

5.2 平台版本治理

5.2.1 系统升级流程

上传/拉取升级包
  → 自动健康检查(所有服务正常才允许)
  → 配置升级策略:全量 / 灰度(指定内测租户)
  → 升级前自动备份(参与本次升级的租户)
  → 执行升级
  → 实时展示升级进度(租户维度状态列表)
  → 完成通知(成功/失败详情)

灰度升级策略:

  • 维护「内测租户组」列表,由 Platform Admin 配置
  • 灰度阶段仅对内测租户升级,其余租户保持原版本
  • 内测验证通过(手动确认)后,触发全量升级

5.2.2 升级回滚

  • 触发:手动 / 自动(监控检测到错误率超阈值)
  • 范围:全量回滚 / 单租户回滚
  • 前置:自动保存当前状态快照
  • 后续:生成事件报告(失败原因、回滚耗时、受影响租户列表)
  • 必需:MFA 二次验证

5.2.3 定时备份策略

配置项 选项
备份频率 每小时 / 每日 / 每周
执行时间窗口 默认每日 02:00
保留数量 最近 N 个版本(默认 10)
存储目标 本地 / AWS S3 / Cloudflare R2 / GCS

支持为单租户配置独立备份计划,覆盖全局策略。备份失败自动告警,支持手动重试。

5.2.4 版本总览

见 Story B3 验收标准。该视图为运营提供「平台基础数据版本 + 各租户数据版本」双维度可见性,是灰度升级时代的版本治理核心入口。


5.3 客户端发布治理

本节面向 Persona C 的 Story C1 / C2。客户端本身的技术形态、自动更新机制、签名分发等实现细节属于技术方案范畴,请参见 TECH_STACK/平台管理后台技术方案.md。本 PRD 仅描述产品视角的业务能力。

5.3.1 版本管理

平台管理后台提供独立的「客户端版本管理」一级页面,承担:

版本列表展示字段:

列 说明
版本号 SemVer 格式,如 v1.2.3
版本类型 普通更新 / 强制更新(后者标红)
状态 草稿 / 已发布(绿)/ 已下线(灰)
发布时间 设为已发布的时间
下载量 该版本安装包被下载次数
操作 发布 / 下线 / 编辑 / 复制下载链接

新增/编辑版本表单字段:

字段 类型 必填 说明
版本号 Text ✅ SemVer,自动校验
版本类型 单选 ✅ 普通更新 / 强制更新
最低兼容版本 Text ❌ 低于该版本的客户端被强制升级
安装包(EXE) File ✅ 上传至 R2,最大 500MB
便携版(ZIP) File ❌ 同上
SHA256 校验值 Text(自动) ✅ 上传后系统计算并填充
更新日志 Markdown ✅ 对外展示,最多 2000 字
发布说明(内部) Text ❌ 仅内部查看
状态 单选 ✅ 草稿 / 立即发布

5.3.2 版本分布统计

图表 说明
版本分布饼图 按客户端版本号统计当前活跃用户数量及占比
升级进度趋势图 新版本发布后各天累计升级完成的用户比例
租户版本明细 按租户展示其员工的客户端版本分布
全平台租户活跃榜 tenant_code + 租户名称 + 活跃安装数(最近 24h) + 历史装机总数,按活跃安装数降序

底层数据由 public.client_heartbeats 表的 tenant_id 维度聚合提供。

5.3.3 强制更新推送

  • Platform Admin 可对指定版本范围的客户端打上「强制更新」标记(如所有低于 v1.5.0 的客户端强制升级)
  • 客户端侧的强制更新行为(不展示「稍后提醒」、必须升级后方可继续使用)由客户端实现保障

5.4 平台管理后台总体规划

5.4.1 页面清单与访问权限

以下为产品视角的页面清单。「页面路径」以业务可读形式表达,不约束技术实现(具体 URL 由技术方案决定)。所有页面均位于平台管理后台域,无访问权限的角色(Tenant Admin、Agent 及未登录用户)一律重定向到登录页或 403。

# 页面 路径(业务可读) 访问权限 说明
1 登录页 /admin/login 公开(仅平台管理员账号可登录) 强制 MFA 配置
2 仪表盘 /admin 全部三类管理员 平台总览、健康度、近期告警、最近高危操作
3 租户列表 /admin/tenants Platform Admin / 运营人员(写)/ 审计员(只读) 检索、筛选、快捷操作
4 新建租户 /admin/tenants/new Platform Admin / 运营人员 —
5 租户详情:基本信息 /admin/tenants/{id} 同租户列表 含 License、用户数、状态等编辑入口
6 租户详情:用户管理 /admin/tenants/{id}/users 同上 Tenant Admin 列表、用户列表、密码重置
7 租户详情:套餐信息 /admin/tenants/{id}/plan 同上 套餐详情、用量、升级入口
8 租户详情:监控 /admin/tenants/{id}/monitoring 同上 资源使用、SLA
9 租户详情:备份记录 /admin/tenants/{id}/backups Platform Admin(写)/ 运营人员(仅触发备份)/ 审计员(只读) 备份列表、触发备份、恢复入口(仅 Platform Admin)
10 租户详情:操作历史 /admin/tenants/{id}/history 全部三类 该租户相关所有管理员操作日志
11 系统版本管理 /admin/system/versions Platform Admin(写)/ 运营人员(只读)/ 审计员(只读) 含「版本总览」(平台基础数据版本 + 各租户数据版本)、升级、回滚
12 备份管理 /admin/system/backups Platform Admin(写)/ 运营人员(触发)/ 审计员(只读) 全局备份计划、备份任务列表、恢复入口
13 监控与告警 /admin/monitoring Platform Admin / 运营人员(写)/ 审计员(只读) 全局监控图表、告警规则、告警历史
14 客户端版本管理 /admin/client-releases Platform Admin(写)/ 运营人员(只读)/ 审计员(只读) 版本列表、发布、下线、回滚、版本分布、租户活跃榜
15 审计日志 /admin/audit-logs 全部三类(含审计员) 多维度筛选、导出 CSV
16 管理员设置 /admin/settings/admins 仅 Platform Admin 管理员账号、角色、MFA、IP 白名单、登录会话

5.4.2 页面间导航逻辑(用户故事视角)

  • 用户访问任一受保护页面但未登录 → 跳转 /admin/login
  • 登录成功且未配置 MFA → 强制跳转 MFA 配置向导后再进入仪表盘
  • 仪表盘的「最近高危操作」区域,每条记录可点击跳转到「审计日志」并自动以该记录为筛选条件
  • 仪表盘的「系统健康」区域,点击异常服务可跳转「监控与告警」对应租户/服务视图
  • 租户列表点击「公司名称」→ 进入「租户详情:基本信息」(默认 Tab)
  • 租户详情各 Tab 之间通过页内 Tab 切换,URL 同步变化(页面 5–10)
  • 租户详情「备份记录」中点击「恢复」→ 出现二次确认弹窗 + MFA 验证(仅 Platform Admin 可见)
  • 「系统版本管理」中点击某租户行 → 跳转到该租户的「备份记录」Tab
  • 「客户端版本管理」中点击「全平台租户活跃榜」中的租户名称 → 跳转到该租户「基本信息」Tab
  • 客户端版本「发布 / 下线 / 强制更新推送」操作 → 二次确认;强制更新推送额外要求 MFA
  • 任何高危操作(删除/注销租户、数据恢复、系统回滚、客户端版本下线、强制更新推送)触发 MFA 二次确认弹窗
  • 租户详情「基本信息」页面,Platform Admin / 运营人员可发起「注销申请」;状态为 Pending Cancellation 时,原「挂起/恢复」按钮隐藏,显示「查看注销审批单」入口
  • 注销审批待办:系统向第二名 Platform Admin 发送站内通知;点击通知进入审批单详情,展示申请人、注销原因、数据导出确认记录,提供「批准(MFA)」/「驳回」操作
  • 审批批准后,租户自动进入 Pending Delete;租户列表「待清除」筛选下可见,提供「撤销注销(双人 MFA)」和「提前硬删除(MFA)」入口
  • 用户超过 30 分钟无操作 → 自动登出,下次操作跳转登录页
  • 「管理员设置」中 Platform Admin 强制登出某管理员 → 该管理员的所有会话立即失效,下次请求跳转登录页

5.4.3 仪表盘内容

模块 展示内容
全局概览 总租户数、活跃租户数、本月新增
系统健康 各核心服务状态(Django / PostgreSQL / Redis / Celery / R2)
近期告警 最近 24 小时告警,按严重程度分类
资源概览 平台整体存储用量、API 调用量趋势
客户端覆盖 当前活跃客户端总数、最新版本占比
最近操作 最近 10 条高危操作审计记录

5.4.4 租户列表

  • 分页(默认 20 条/页)
  • 搜索:公司名称、Tenant Code、联系邮箱关键词
  • 筛选:状态(Active / Suspended / Pending Cancellation / Pending Delete / Deleted)、套餐、注册时间、即将到期(15 天内)、用户数已满
  • 列:公司名称、Tenant Code、套餐、状态、注册时间、活跃用户数 / License 上限、客户端最新版本占比
  • 快捷操作:查看详情、挂起、发起备份、数据导出

5.5 业务 API 操作清单(产品视角)

仅描述「平台管理员需要能完成哪些业务操作」;不定义具体 RESTful 路径、HTTP 方法、参数结构。具体接口设计见对应技术方案文档。

5.5.1 租户管理

  • 平台管理员需要能查询租户列表(支持多维度筛选)
  • 平台管理员需要能查看单租户的完整详情(基本信息、套餐、用户、License、备份、操作历史)
  • 平台管理员需要能创建新租户(含异步初始化 Schema 与默认配置)
  • 平台管理员需要能编辑租户基本信息(公司名、联系人、邮箱、地区)
  • 平台管理员需要能挂起 / 恢复租户(含挂起原因、到期时间)
  • 平台管理员(运营人员)需要能发起租户注销申请(PA-011 SOP:填写原因、完成数据导出确认)
  • 第二名 Platform Admin 需要能审批租户注销申请(批准需 MFA;驳回需填写驳回原因)
  • 平台管理员需要能在冷静期内撤销租户注销(双人 MFA)
  • 平台管理员需要能在冷静期内提前手动触发硬删除(MFA + 不可逆确认)
  • 系统需能在冷静期届满后自动触发硬删除并释放所有资源
  • 平台管理员需要能软删除 / 硬删除租户(仅限通过 PA-011 SOP 触发,不提供绕过 SOP 的直接删除入口)
  • 平台管理员需要能调整租户的 License 到期日期
  • 平台管理员需要能调整租户的 License 授权用户数上限
  • 平台管理员需要能升级租户套餐
  • 平台管理员需要能下载租户的「入驻信息 PDF」

5.5.2 租户用户管理

  • 平台管理员需要能查询租户内的全部用户
  • 平台管理员需要能新增 / 替换 / 撤销 Tenant Admin
  • 平台管理员需要能为租户内任意用户重置密码(链接 / 临时密码两种方式)

5.5.3 数据导出与备份

  • 平台管理员需要能为指定租户触发数据导出(异步,可查询任务状态、获取下载链接)
  • 平台管理员需要能为指定租户手动触发完整备份
  • 平台管理员需要能查询某租户的备份记录列表
  • 平台管理员需要能基于某个备份执行恢复操作(需 MFA)
  • 平台管理员需要能配置全局 / 单租户的定时备份策略

5.5.4 平台版本与升级

  • 平台管理员需要能上传 / 拉取系统升级包
  • 平台管理员需要能配置升级策略(全量 / 灰度,含内测租户名单)
  • 平台管理员需要能触发升级,并实时查询升级进度(租户维度)
  • 平台管理员需要能查看升级日志
  • 平台管理员需要能触发升级回滚(全量 / 单租户,需 MFA)
  • 平台管理员需要能查询「平台基础数据版本」与「各租户数据升级版本」总览

5.5.5 客户端发布

  • 平台管理员需要能查询客户端版本列表(含状态、下载量)
  • 平台管理员需要能新增客户端版本(上传安装包,系统自动计算 SHA256)
  • 平台管理员需要能修改某版本元数据(更新日志、版本类型、最低兼容版本等)
  • 平台管理员需要能切换某版本状态(草稿 → 已发布 / 已发布 → 已下线)
  • 平台管理员需要能将某历史版本回滚为「已发布」(同时把当前版本置为已下线)
  • 平台管理员需要能对指定版本范围的客户端打上「强制更新」标记
  • 平台管理员需要能查询全平台客户端版本分布(饼图、趋势图)
  • 平台管理员需要能查询全平台租户活跃榜(活跃安装数、历史装机总数)
  • 平台管理员需要能查询任一租户的客户端版本分布与活跃数

客户端自身与更新服务的交互(如查询最新版本、上报心跳)属于客户端运行时与平台之间的接口,不属于平台管理员的操作;本 PRD 不在此章描述,由 TECH_STACK/平台管理后台技术方案.md 定义。

5.5.6 监控与告警

  • 平台管理员需要能查询全局 / 单租户的监控图表
  • 平台管理员需要能配置告警规则(指标 + 阈值 + 通知渠道)
  • 平台管理员需要能查询告警历史

5.5.7 审计日志

  • 平台管理员(含审计员)需要能按多维度筛选审计日志
  • 平台管理员(含审计员)需要能导出筛选结果为 CSV

5.5.8 平台管理员账号与安全

  • Platform Admin 需要能创建 / 编辑 / 停用平台管理员账号
  • Platform Admin 需要能配置管理员角色(Platform Admin / 运营人员 / 只读审计员)
  • 全部平台管理员需要能首次登录时配置 MFA(无法跳过)
  • 全部平台管理员需要能在高危操作时通过 MFA 二次确认
  • Platform Admin 需要能配置 IP 白名单
  • Platform Admin 需要能查看活跃会话并强制登出指定管理员

5.6 安全与访问控制

强制要求(不可降级):

安全要求 说明
MFA 强制启用 所有管理员账号首次登录强制配置 TOTP;不可跳过
IP 白名单 仅允许指定 IP 范围访问平台管理后台
高危操作二次验证 删除租户、数据恢复、系统回滚、客户端版本下线、强制更新推送均触发 MFA 二次确认
会话超时 无操作 30 分钟自动登出,Token 失效
强制登出 Platform Admin 可在「管理员设置」中强制终止指定管理员的所有会话
与租户应用隔离 平台管理后台部署在独立平台域名,不与租户应用共享 Session / Cookie

5.7 操作审计日志规范

所有写操作(Create / Update / Delete)及高危操作必须落审计日志,字段:

{
  "id": "UUID",
  "operator_id": "管理员用户 ID",
  "operator_name": "管理员显示名",
  "action_type": "CREATE_TENANT | SUSPEND_TENANT | RESUME_TENANT | DELETE_TENANT | HARD_DELETE_TENANT | RESTORE_DATA | SYSTEM_UPGRADE | ROLLBACK | RESET_PASSWORD | RELEASE_CLIENT_VERSION | OFFLINE_CLIENT_VERSION | FORCE_UPDATE_PUSH | UPDATE_LICENSE | UPDATE_LICENSE_USER_LIMIT | AUTO_SUSPEND_LICENSE_EXPIRED | ...",
  "target_type": "Tenant | User | System | Backup | ClientRelease | Admin",
  "target_id": "操作对象 ID",
  "target_name": "操作对象可读名称",
  "payload_summary": "操作内容摘要(非敏感字段)",
  "result": "SUCCESS | FAILED",
  "error_message": "失败原因(如有)",
  "ip_address": "操作来源 IP",
  "created_at": "ISO 8601 时间戳"
}

6. 角色权限矩阵

| 操作 | Platform Admin | 运营人员 | 只读审计员 | |------|---------------|---------|-----------|| | 创建租户 | ✅ | ✅ | ❌ | | 挂起 / 恢复租户 | ✅ | ✅ | ❌ | | 发起租户注销申请(PA-011 SOP) | ✅ | ✅ | ❌ | | 审批注销申请(第二人复核,MFA) | ✅ | ❌ | ❌ | | 撤销注销(冷静期内,双人 MFA) | ✅ | ❌ | ❌ | | 提前手动硬删除(MFA) | ✅ | ❌ | ❌ | | 软删除 → Pending Delete(仅经 SOP 自动触发) | 系统自动 | — | — | | 调整 License 到期日期 / 用户数上限 | ✅ | ✅ | ❌ | | 数据导出 | ✅ | ✅ | ❌ | | 手动触发备份 | ✅ | ✅ | ❌ | | 数据恢复 | ✅ | ❌ | ❌ | | 系统升级 | ✅ | ❌ | ❌ | | 系统回滚 | ✅ | ❌ | ❌ | | 查看版本总览 | ✅ | ✅ | ❌ | | 配置告警规则 | ✅ | ✅ | ❌ | | 发布 / 下线客户端版本 | ✅ | ❌ | ❌ | | 客户端版本回滚 | ✅ | ❌ | ❌ | | 推送强制更新标记 | ✅ | ❌ | ❌ | | 查看客户端版本分布与活跃榜 | ✅ | ✅ | ✅ | | 查看审计日志 | ✅ | ✅ | ✅ | | 导出审计日志 | ✅ | ✅ | ✅ | | 管理员账号管理 | ✅ | ❌ | ❌ | | 强制登出管理员 | ✅ | ❌ | ❌ | | 配置 IP 白名单 | ✅ | ❌ | ❌ |


7. 租户状态机

[新建中 Creating]
      ↓ 成功
[活跃 Active] ←──────────────────┐
      ↓ 手动 / License 到期挂起      │ 到期自动恢复(仅手动挂起且设置了到期时间)/ 手动恢复
[已挂起 Suspended] ───────────────┘
      ↓ 运营/PA 发起注销申请(PA-011)
[待审批注销 Pending Cancellation]
      ↓ 驳回(第二名 PA)→ [已挂起 Suspended]
      ↓ 批准(第二名 PA,MFA)
[待清除 Pending Delete](冷静期 30 天)
      ↓ 双人 MFA 撤销注销 → [已挂起 Suspended]
      ↓ 冷静期届满(自动)/ 提前手动硬删除(MFA)
[已删除 Deleted]

注意:Active / Suspended 状态下均可发起注销申请(后者更常见)。不允许直接跳过 SOP 从任何状态进入 Pending Delete 或 Deleted。


8. 不构建清单(What We're NOT Building)

请求/功能 原因 重新评估条件
自动化账单与发票 财务模块独立立项 财务模块 PRD 完成后接入
租户端自助迁移工具 当前规模不需要 租户数 > 500 时重新评估
平台管理后台移动端 运营场景明确为 PC v2 规划,用户调研支持时推进
Webhook 事件推送市场 集成复杂度高,无客户驱动 有 3+ 客户明确需求时评估
多语言管理界面 内部团队中文已满足 国际化扩张时规划
macOS / Linux 客户端 99% 用户为 Windows 市场需求出现时评估
移动端客户端 App v2 规划 v2 启动时
客户端离线模式 联网使用为既定形态 暂不考虑
客户端代码混淆 / 反逆向 优先功能交付 安全审计要求时启动
响应客户数据导出请求 暂缓 后续迭代排期时细化

9. 发布计划

阶段 时间 范围 通过标准
内部 Alpha Week 1–4 平台内部团队 核心租户 CRUD 流程无 P0 Bug;MFA 可用;客户端发布流程闭环
封闭 Beta Week 5–6 运营团队日常使用 + 1 家种子客户的客户端 备份/恢复完整可用;审计日志 100% 覆盖;客户端自动更新成功率 ≥ 95%
正式上线 Week 7 全量运营团队 + 全部客户的客户端 升级/回滚验证通过;监控告警规则配置完成;客户端版本一致性 ≥ 95%

回滚标准:

  • 正式上线 72 小时内发现租户数据隔离漏洞或审计日志丢失 → 立即回滚平台管理后台
  • 客户端版本上线 24 小时内:自动更新失败率 > 5%、白屏 / 崩溃率 > 2%、或收到 P0 安全报告 → 立即下线该版本并恢复上一稳定版本

10. 技术考量(指引性)

本节为产品视角对技术决策的影响概述,详细方案请见各技术文档。

维度 关键依赖 备注
多租户隔离 django-tenants 平台管理后台数据落 public schema,跨租户查询走 public 维度
异步任务 Celery + Celery Beat 创建租户、备份、导出、定时挂起检查等
数据库备份 PostgreSQL pg_dump(待评估流式方案) 大租户备份耗时风险
文件存储 Cloudflare R2 备份、导出包、客户端安装包
监控 Sentry + Grafana 已在技术栈中规划
MFA django-otp + TOTP 待最终选型
客户端 Electron + electron-updater 见 TECH_STACK/平台管理后台技术方案.md
客户端心跳/活跃统计 public.client_heartbeats(Upsert + 24h 活跃口径,见 ADR-20260430-007) 是租户活跃榜与版本分布的数据源
客户端 API 命名空间 统一 /api/release/...(见 ADR-20260430-009) 与租户客源管理 apps/client/ 命名空间隔离

待解决问题(开发启动前必须确认)

  • 数据库备份方案:pg_dump 直接执行还是基于 WAL 的增量备份(如 pgBackRest)?— Owner: 工程负责人
  • 监控数据来源:Grafana 直接对接 PostgreSQL 还是通过 Prometheus Exporter?— Owner: 运维团队
  • MFA 库选型:django-otp + TOTP 还是集成第三方认证?— Owner: 工程负责人
  • 审计日志存储:写入 public schema 还是独立日志服务(如 Elasticsearch)?— Owner: 工程负责人
  • 客户端 EV 代码签名证书采购主体与预算 — Owner: IT 负责人
  • CI/CD 平台选型(客户端构建签名流水线)— Owner: 运维负责人
  • 客户端便携版(Portable ZIP)是否纳入 v1 — Owner: PM
  • 客户端启动时租户 URL 分发方式(统一域名重定向 vs 内置配置文件)— Owner: 产品 + 工程

11. 附录

11.1 术语表

术语 定义
Platform Admin 平台超级管理员,拥有所有高危操作权限
运营人员 平台日常运营,承担租户管理、监控巡检
只读审计员 仅查询与导出审计日志,无写权限
Tenant Admin 租户内的最高权限用户,对平台管理后台无访问权限
Tenant Code 租户唯一可读短码,用作租户访问 URL 中的 tenant= 参数
灰度升级 先对内测租户升级、验证通过后再全量推送
数据导出 输出结构化数据 + 文件 CDN URL 清单,分钟级,不含文件实体
完整备份 数据库 + 文件实体的完整副本,小时级,用于灾难恢复与租户迁移
SemVer 语义化版本控制 主.次.补丁
EV 证书 Extended Validation 代码签名证书
SHA256 用于校验客户端安装包完整性的散列算法

11.2 关联文档

类型 文档
项目入口 README.md
开发约束 AGENTS.md
MVP 范围 PRD/PRD_MVP.md
客户端技术方案 TECH_STACK/平台管理后台技术方案.md
Public Schema 数据模型 DATA_MODEL/DATA_MODEL_PUBLIC.md
ADR ADR.md(含 ADR-20260502-001:本 PRD 合并决策)