Browse Source

feat: establish phase two acceptance handover

马小龙 2 weeks ago
parent
commit
95023e59bf

+ 12 - 5
docs/DATAOPS_PHASE2_3_MONTH_DEVELOPMENT_PLAN_20260730.md

@@ -543,15 +543,22 @@ Alembic head、环境配置和锁定依赖,包内生成 CycloneDX 1.5 SBOM 与
 
 **主要工作:**
 
-- [ ] 建立覆盖 P2-WP01~P2-WP12 的业务 UAT 用例。
-- [ ] 按管理员、编辑者、查看者及第二业务域责任人验证权限。
-- [ ] 关闭 P0/P1 缺陷,记录 P2/P3 后续处置
-- [ ] 完成用户培训、运维培训、迁移和回滚演练
-- [ ] 更新 264 项功能台账成熟度及第三阶段待办。
+- [x] 建立覆盖 P2-WP01~P2-WP12 的业务 UAT 用例。
+- [x] 按管理员、编辑者、查看者及第二业务域责任人验证权限。
+- [x] 确认本地预验收 P0 为 0、未关闭 P1 为 0,并记录 P2/P3 后续处置规则
+- [x] 完成用户/运维培训材料,并复核本地迁移、升级和回滚演练证据
+- [x] 更新并审计 264 项功能台账成熟度及第三阶段待办。
 
 **完成门禁:** 第二业务域用户完成真实场景 UAT;P0 为 0;未关闭 P1 有书面
 决定;文档、培训、运维和签署材料完整。
 
+**工程状态:** 本地工程完成,企业正式验收未完成。已形成 24 条 UAT 用例,其中
+20 条以当前分支定向测试、真实 PostgreSQL 事务测试和本地演练证据判定为
+`PASS_LOCAL`,4 条企业真实数据、实际用户、正式环境、培训和签字用例保持
+`BLOCKED_EXTERNAL`;本地 P0 为 0、未关闭 P1 为 0。用户/运维指南、培训计划、
+缺陷台账、签署清单、264/264 功能台账审计和第三阶段待办均已形成。正式完成门禁仍需
+企业执行真实 UAT、培训、预生产升级/回滚和五方签字,本地材料不能替代企业验收。
+
 ## 8. 十二周排期
 
 | 周次 | 重点工作 | 工作包 | 周度输出 |

+ 29 - 29
docs/FUNCTION_MODULE_CENSUS_20260726.md

@@ -459,7 +459,7 @@ DataOps Platform 当前已经具备较完整的“治理对象 → 知识服务
 | IAM-10 | 租户与身份 / 账号生命周期 | 入职、转岗、离职、冻结、恢复和权限回收 | 规划中 |
 | IAM-11 | 租户与身份 / 会话安全 | Token 生命周期、刷新、注销、并发会话和风险会话终止 | 部分建设 |
 | IAM-12 | 租户与身份 / 应急访问 | SSO 故障时的紧急本地管理员和使用审计 | 规划中 |
-| IAM-13 | 租户与身份 / 机器身份 | 为 Runner、连接器、插件和 AI Agent 提供独立机器身份 | 部分建设 |
+| IAM-13 | 租户与身份 / 机器身份 | 为 Runner、连接器、插件和 AI Agent 提供独立机器身份 | 部分建设;Runner 与 Agent 独立主体、短期凭证及域/环境绑定已形成,连接器和插件统一机器身份待建设 |
 | IAM-14 | 租户与身份 / 多租户隔离 | SaaS 租户的数据、配置、密钥、索引、任务和审计隔离 | 能力预留 |
 | IAM-15 | 租户与身份 / 混合交付 | 同一产品支持私有化和多租户 SaaS 身份边界 | 能力预留 |
 | IAM-16 | 租户与身份 / 生态登录 | 企业微信、飞书和钉钉扫码登录 | 规划中 |
@@ -470,16 +470,16 @@ DataOps Platform 当前已经具备较完整的“治理对象 → 知识服务
 | 模块编号 | 模块分级 | 功能项 | 成熟度 |
 |---|---|---|---|
 | GOV-01 | 治理组织 / 业务域 | 业务域列表、详情、创建、更新、删除和图谱 | 已建设 |
-| GOV-02 | 治理组织 / 联邦治理 | 中央团队制定政策、业务域自治运营的联邦治理模型 | 工程完成,待企业组织与策略验收;中央策略、继承覆盖及第二业务域责任证据已形成 |
-| GOV-03 | 治理组织 / 责任角色 | 业务域 Owner、Data Steward、数据架构师和资产管理员 | 后端与管理界面完成,待企业配置 |
-| GOV-04 | 治理组织 / 责任矩阵 | 资产、标准、本体、质量和数据产品的 RACI | 设备域完成,其他对象待扩展 |
-| GOV-05 | 治理组织 / 责任继承 | 组织、业务域、资产层级的责任人继承与覆盖 | 规划中 |
-| GOV-06 | 治理组织 / 委派代理 | 责任人代理、休假委托、离岗转交和超时升级 | 规划中 |
-| GOV-07 | 治理组织 / 跨域协同 | 跨业务域资产、标准、本体和权限变更联合评审 | 规划中 |
-| GOV-08 | 治理组织 / 中央策略 | 中央治理政策、模板和强制规则向业务域下发 | 规划中 |
-| GOV-09 | 治理运营 / 治理任务 | 治理任务、责任人、截止时间、状态和结果 | 部分建设 |
-| GOV-10 | 治理运营 / 业务域评分 | 按完整性、责任覆盖、质量和整改结果评分 | 设备域五项实时指标与授权明细工程完成;综合评分、阈值和跨域验收待建设 |
-| GOV-11 | 治理运营 / 责任考核 | 质量问题闭环率、逾期率、复发率和责任人绩效 | 闭环率、复发率及责任/逾期明细工程完成;责任人绩效未建设 |
+| GOV-02 | 治理组织 / 联邦治理 | 中央团队制定政策、业务域自治运营的联邦治理模型 | 部分建设;责任中央策略、继承覆盖及第二业务域自治证据已形成,跨治理类型联邦策略待扩展 |
+| GOV-03 | 治理组织 / 责任角色 | 业务域 Owner、Data Steward、数据架构师和资产管理员 | 工程完成,待企业人员配置;第二业务域模板已声明三类责任角色 |
+| GOV-04 | 治理组织 / 责任矩阵 | 资产、标准、本体、质量和数据产品的 RACI | 工程完成,待企业矩阵验收;设备对象及六类通用治理对象已统一解析 |
+| GOV-05 | 治理组织 / 责任继承 | 组织、业务域、资产层级的责任人继承与覆盖 | 工程完成,待企业组织层级验收;支持多层继承、最近显式覆盖、防环和唯一负责人判定 |
+| GOV-06 | 治理组织 / 委派代理 | 责任人代理、休假委托、离岗转交和超时升级 | 部分建设;临时/范围委派、到期收回、主动收回和离岗转交已形成,人事自动同步与委派专项升级待集成 |
+| GOV-07 | 治理组织 / 跨域协同 | 跨业务域资产、标准、本体和权限变更联合评审 | 部分建设;参与域、最小同意数和全域同意判定已形成,各源模块联合评审接入待扩展 |
+| GOV-08 | 治理组织 / 中央策略 | 中央治理政策、模板和强制规则向业务域下发 | 部分建设;责任策略具备草稿、修订、不可变发布和作用域下发,其他治理类型中央策略待扩展 |
+| GOV-09 | 治理运营 / 治理任务 | 治理任务、责任人、截止时间、状态和结果 | 工程完成,待企业事项接入验收;质量、语义、产品和 Agent 已进入统一任务契约 |
+| GOV-10 | 治理运营 / 业务域评分 | 按完整性、责任覆盖、质量和整改结果评分 | 部分建设;设备域五项实时指标与授权明细已形成,综合评分、阈值和跨域验收待建设 |
+| GOV-11 | 治理运营 / 责任考核 | 质量问题闭环率、逾期率、复发率和责任人绩效 | 部分建设;闭环率、复发率及责任/逾期明细已形成,责任人绩效未建设 |
 | GOV-12 | 治理运营 / 排名看板 | 业务域治理看板、趋势和内部对标 | 规划中 |
 | GOV-13 | 治理运营 / 成熟度评估 | 治理成熟度模型、制度执行检查和管理层驾驶舱 | 规划中 |
 | GOV-14 | 治理运营 / 设备责任 | 设备资产管理员作为设备本体、映射和故障分类审批人 | 已建设 |
@@ -531,16 +531,16 @@ DataOps Platform 当前已经具备较完整的“治理对象 → 知识服务
 | CAT-14 | 资产标识 / 稳定 UID | 跨系统稳定业务标识和源系统 ID 映射 | 部分建设 |
 | CAT-15 | 资产标签 / 标签体系 | 标签新增、详情、列表、识别、图谱和删除 | 已建设 |
 | CAT-16 | 资产血缘 / 图谱血缘 | 业务域、DataFlow、产品、元数据和数据源血缘 | 已建设 |
-| CAT-17 | 资产血缘 / 字段血缘 | SQL 解析和作业采集形成字段级血缘 | 规划中 |
+| CAT-17 | 资产血缘 / 字段血缘 | SQL 解析和作业采集形成字段级血缘 | 部分建设;已纳管 SQL 的保守字段血缘、哈希证据和失败关闭已形成,更多作业解析器待扩展 |
 | CAT-18 | 资产血缘 / 运行血缘 | 将实际运行批次、输入、输出和制品关联到设计血缘 | 部分建设 |
 | CAT-19 | 资产影响 / 变更影响 | Schema、标准、本体和规则变更的下游影响分析 | 部分建设 |
 | CAT-20 | 资产生命周期 / 状态管理 | 草稿、审核、发布、停用、废弃和删除 | 部分建设;领域模板、语义、规则、流程、产品和 Agent 已有受控状态,跨类型统一生命周期仍待建设 |
 | CAT-21 | 资产版本 / 历史差异 | 版本快照、差异、回滚和来源追溯 | 部分建设;第二业务域包已绑定模板、来源、证据与报告摘要,跨类型统一差异/回滚视图待建设 |
 | CAT-22 | 主动元数据 / 使用热度 | 浏览、查询、订阅、运行和复用热度 | 部分建设 |
-| CAT-23 | 主动元数据 / 健康信号 | 质量、SLA、故障和漂移信号回写目录 | 规划中 |
+| CAT-23 | 主动元数据 / 健康信号 | 质量、SLA、故障和漂移信号回写目录 | 部分建设;质量、新鲜度、任务失败和使用热度四类信号已形成,通用漂移与更多故障源待扩展 |
 | CAT-24 | 主动元数据 / 推荐 | 基于角色、业务域、血缘和使用行为推荐资产 | 规划中 |
 | CAT-25 | 资产导入 / 批量导入 | HOPMS 数据集导入、dry-run 和结果报告 | 已建设 |
-| CAT-26 | 资产纠错 / 反馈 | 用户纠错、补充说明、问题上报和责任人处置 | 规划中 |
+| CAT-26 | 资产纠错 / 反馈 | 用户纠错、补充说明、问题上报和责任人处置 | 工程完成,待企业责任人验收;支持提交、指定责任人处置、乐观版本和追加式审计 |
 
 WP-04 已补齐设备垂直切片的工程拼图:设备、部件、测点、告警和维护记录可通过受控接口导入,按名称、源编码、位置、组织和负责人检索,并展示稳定平台 UID、来源映射和不可变版本。CAT-13、CAT-14、CAT-21 仍保留“部分建设”,因为跨来源实体匹配、合并/回滚、质量与血缘汇聚分别属于 WP-06、WP-07 和 WP-09;企业真实台账与维修数据尚待接入验收。
 
@@ -596,7 +596,7 @@ Agent 共十阶段证据由同一实施包绑定,未修改设备域专用服
 | DQA-06 | 数据质量 / 异常检测 | 数据量、分布、模式、重复和异常值检测 | 工程完成,待企业阈值验收;所有发现均由确定性统计生成 |
 | DQA-07 | 数据质量 / Schema 漂移 | 字段、类型、约束和枚举变化检测 | 部分建设;主动元数据字段变化和质量画像 Schema 退化已形成,通用约束及枚举漂移待扩展 |
 | DQA-08 | 数据质量 / 新鲜度 | 数据更新时间、延迟和过期检测 | 工程完成,待企业时间源与阈值验收 |
-| DQA-09 | 数据质量 / 质量 SLA | 质量目标、阈值、窗口、违约和升级 | 工程完成,待 P2-WP05/P2-WP07 事故与通知联调;已形成新鲜度、质量得分违约、恢复和升级级别事件 |
+| DQA-09 | 数据质量 / 质量 SLA | 质量目标、阈值、窗口、违约和升级 | 工程完成,待企业阈值和渠道验收;新鲜度/质量得分违约与恢复已接入事故及通知链 |
 | DQA-10 | 质量运营 / 质量问题 | 问题创建、分类、影响、责任人和优先级 | 工程完成,待企业质量问题验收 |
 | DQA-11 | 质量运营 / 整改工单 | 分派、整改、复核、关闭、重开和逾期 | 工程完成,待企业整改流程验收 |
 | DQA-12 | 质量运营 / 复发分析 | 重复问题识别、复发率和治理效果 | 部分建设;设备与第二业务域均已验证确定性质量发现和整改证据,跨资产治理效果聚合待建设 |
@@ -607,9 +607,9 @@ Agent 共十阶段证据由同一实施包绑定,未修改设备域专用服
 | OBS-01 | 数据可观测 / 任务运行 | 工作流执行、状态、失败、重试和日志 | 已建设 |
 | OBS-02 | 数据可观测 / 生产线 | DataFlow/Deployment、Runner 和制品运行证据 | 工程完成,受门禁 |
 | OBS-03 | 数据可观测 / 数据 SLA | 端到端新鲜度、完整性、质量和交付 SLA | 工程完成,待企业 SLO 验收;四类 SLI/SLO 及第二业务域新鲜度/质量事故证据已形成 |
-| OBS-04 | 数据可观测 / 事故管理 | 告警聚合、事故、责任人、时间线和复盘 | 规划中 |
-| OBS-05 | 数据可观测 / 告警治理 | 告警抑制、去重、升级、值班和送达回执 | 规划中 |
-| OBS-06 | 数据可观测 / 业务影响 | 将技术异常映射到数据产品、业务域和用户影响 | 规划中 |
+| OBS-04 | 数据可观测 / 事故管理 | 告警聚合、事故、责任人、时间线和复盘 | 工程完成,待企业事故流程验收;聚合、恢复观察、复盘和证据完备关闭已形成 |
+| OBS-05 | 数据可观测 / 告警治理 | 告警抑制、去重、升级、值班和送达回执 | 部分建设;抑制、去重、升级和送达回执已形成,企业排班和值班平台待集成 |
+| OBS-06 | 数据可观测 / 业务影响 | 将技术异常映射到数据产品、业务域和用户影响 | 工程完成,待企业影响关系验收;支持资产、产品、业务域、用户群和平台服务影响 |
 | OBS-07 | 设备质量 / 台账完整性 | 设备关系、位置、责任人和标识完整性检查 | 工程完成,待企业设备台账数据验收 |
 | OBS-08 | 设备质量 / 故障数据 | 故障代码映射、原因完整性和维修闭环检查 | 工程完成,待企业告警与维修数据验收 |
 | OBS-09 | 设备可观测 / 运行明细 | 近期运行明细、告警、停机和维修事件关联 | 工程完成,待企业运行事件接入与保留策略验收 |
@@ -669,7 +669,7 @@ Agent 共十阶段证据由同一实施包绑定,未修改设备域专用服
 | DFY-19 | 引擎迁移 / 双轨运行 | n8n/Kestra 影子运行、对账、切换和回切 | 工程完成,受门禁 |
 | DFY-20 | 引擎迁移 / n8n 退役 | 资产归档、观察、依赖扫描和最终退出门禁 | 规划中 |
 | DFY-21 | 环境发布 / 跨环境晋级 | 已建立资产、标准、本体、规则和流程的开发→测试→预生产不可变晋级包、审批/证据/摘要/回滚引用;自动导入与生产发布待企业流水线 | 部分建设 |
-| DFY-22 | 执行运营 / 运行监控 | 运行历史、资源、成本、失败、SLA 和告警 | 部分建设 |
+| DFY-22 | 执行运营 / 运行监控 | 运行历史、资源、成本、失败、SLA 和告警 | 部分建设;任务运行、失败、数据 SLA、告警和事故已统一,精细资源与成本计量待建设 |
 
 ### 12.9 治理知识库与 AI Agent
 
@@ -705,18 +705,18 @@ Agent 共十阶段证据由同一实施包绑定,未修改设备域专用服
 | WFC-01 | 审批中心 / 元数据审核 | 冗余、变更、别名、合并和忽略 | 已建设 |
 | WFC-02 | 审批中心 / 数据订单 | 分析、审批、驳回、交付和完成 | 已建设 |
 | WFC-03 | 审批中心 / 通用流程 | 配置化的申请、治理、发布和高风险动作审批 | 工程完成,受源模块状态门禁;第二业务域整改与产品/Agent 证据已复用统一任务契约,待企业流程验收 |
-| WFC-04 | 审批中心 / 条件路由 | 按业务域、敏感级别、风险、金额和环境路由 | 规划中 |
-| WFC-05 | 审批中心 / 多人审批 | 会签、或签、双人复核、加签和转签 | 规划中 |
-| WFC-06 | 审批中心 / 时限管理 | 截止时间、催办、超时、升级和自动关闭 | 规划中 |
-| WFC-07 | 任务中心 / 统一待办 | 审批、质量、治理、迁移和 Agent 待办 | 规划中 |
-| WFC-08 | 任务中心 / 治理工单 | 创建、分派、处理、复核、关闭和重开 | 规划中 |
-| WFC-09 | 任务中心 / 评论附件 | 评论、@提及、附件、操作记录和时间线 | 规划中 |
-| WFC-10 | 通知中心 / 站内消息 | 站内信、未读、分类、订阅和免打扰 | 规划中 |
-| WFC-11 | 通知中心 / 邮件 | 邮件模板、重试、送达状态和审计 | 规划中 |
-| WFC-12 | 通知中心 / 事件路由 | 按租户、事件、级别和角色路由通知 | 规划中 |
+| WFC-04 | 审批中心 / 条件路由 | 按业务域、敏感级别、风险、金额和环境路由 | 工程完成,待企业流程验收;仅执行五类结构化条件及封闭运算符,不运行脚本 |
+| WFC-05 | 审批中心 / 多人审批 | 会签、或签、双人复核、加签和转签 | 部分建设;单人、或签、会签、双人复核、最小同意数和转签已形成,动态加签待扩展 |
+| WFC-06 | 审批中心 / 时限管理 | 截止时间、催办、超时、升级和自动关闭 | 工程完成,待企业调度验收;支持截止时间、超时批次、升级、通知和受控自动关闭 |
+| WFC-07 | 任务中心 / 统一待办 | 审批、质量、治理、迁移和 Agent 待办 | 部分建设;质量、语义、数据产品和 Agent 四类待办已统一,迁移事项待接入 |
+| WFC-08 | 任务中心 / 治理工单 | 创建、分派、处理、复核、关闭和重开 | 工程完成,待企业流程验收;具备参与范围、版本、时间线、关闭和重开 |
+| WFC-09 | 任务中心 / 评论附件 | 评论、@提及、附件、操作记录和时间线 | 部分建设;评论、附件证据索引、操作记录和时间线已形成,@提及待扩展 |
+| WFC-10 | 通知中心 / 站内消息 | 站内信、未读、分类、订阅和免打扰 | 工程完成,待企业用户验收;具备站内送达、用户偏好、事件订阅和抑制记录 |
+| WFC-11 | 通知中心 / 邮件 | 邮件模板、重试、送达状态和审计 | 工程完成,受 SMTP 门禁;模板、指数退避、死信、送达状态和审计已形成 |
+| WFC-12 | 通知中心 / 事件路由 | 按租户、事件、级别和角色路由通知 | 部分建设;按事件、渠道、用户偏好和角色路由已形成,租户边界待多租户底座 |
 | WFC-13 | 协作集成 / 企业协作 | 企业微信、飞书和钉钉机器人、消息和待办 | 规划中 |
 | WFC-14 | 协作集成 / ITSM | Webhook、ServiceNow 和 Jira | 规划中 |
-| WFC-15 | 协同运营 / 治理看板 | 待办、逾期、闭环率、业务域评分和趋势 | 规划中 |
+| WFC-15 | 协同运营 / 治理看板 | 待办、逾期、闭环率、业务域评分和趋势 | 部分建设;待办、逾期、关闭、闭环率、类型分布和 30 天趋势已形成,综合业务域评分待建设 |
 
 ### 12.11 数据安全、合规与审计
 

+ 30 - 0
docs/acceptance/P2_WP13_DEFECT_REGISTER.md

@@ -0,0 +1,30 @@
+# P2-WP13 第二阶段缺陷登记与关闭台账
+
+## 1. 严重等级
+
+| 严重度 | 定义 | 处理要求 |
+|---|---|---|
+| P0 | 核心治理链不可用、数据损坏、权限绕过或无恢复路径 | 立即阻断验收,修复并复核后才能继续 |
+| P1 | 关键场景失败、关键结果错误或重要职责分离失效 | 本阶段关闭,或取得业务与技术负责人书面决定 |
+| P2 | 非关键功能异常且存在明确替代路径 | 明确负责人、目标阶段和验收标准 |
+| P3 | 体验、文案或低风险改进 | 纳入产品待办并排期 |
+
+## 2. 缺陷记录
+
+| 缺陷编号 | 严重度 | 状态 | 发现角色与场景 | 复现与证据 | 根因 | 修复 | 定向验证 | 处置决定 |
+|---|---|---|---|---|---|---|---|---|
+| 无 | - | 无本地新增缺陷 | P2-WP01~P2-WP12 本地工程预验收 | 24 条 UAT 中 20 条 PASS_LOCAL、4 条 BLOCKED_EXTERNAL、0 条 FAIL | - | - | P2-WP13 契约和第二阶段范围定向验证 | 外部未执行事项登记为门禁,不伪造为缺陷 |
+
+## 3. 当前统计
+
+- P0:0;未关闭 P0:0。
+- P1:0;未关闭 P1:0。
+- P2:0;未关闭 P2:0。
+- P3:0;未关闭 P3:0。
+- 企业真实来源、真实用户、正式环境、培训和签字属于 `BLOCKED_EXTERNAL`,不是已发现缺陷。
+
+## 4. 后续登记规则
+
+企业 UAT 发现问题后必须填写缺陷编号、严重度、状态、发现角色与场景、复现与证据、根因、
+修复、定向验证和处置决定。关闭必须具备可复核证据;P0 不允许豁免,未关闭 P1 必须由
+业务和技术负责人共同作出书面决定。P2/P3 必须关联第三阶段或后续版本待办,不能静默遗留。

+ 30 - 0
docs/acceptance/P2_WP13_SIGNOFF_CHECKLIST.md

@@ -0,0 +1,30 @@
+# P2-WP13 第二阶段验收与移交签署清单
+
+## 1. 使用规则
+
+本清单是企业正式验收模板,当前整体状态为 `BLOCKED_EXTERNAL`。签署人必须复核本人职责
+范围内的真实证据,所有签字不得预签、代签或用本地工程测试结果替代企业确认。
+
+## 2. 正式签署前门禁
+
+- 企业真实第二业务域 UAT 已执行,指标和差异清单已归档;
+- P0 为 0;未关闭 P1 已取得业务与技术负责人书面决定;
+- 正式用户、责任、权限、安全策略和 Agent 工具范围已确认;
+- 预生产安装、迁移、升级、候选回滚和 RPO/RTO 演练已完成;
+- 用户培训、运维培训、签到、练习、问题和补训记录齐全;
+- 代码提交、签名制品、配置清单、备份、运维责任和支持边界已移交。
+
+## 3. 责任签署
+
+| 签署角色 | 核对范围 | 当前状态 | 签署要求 |
+|---|---|---|---|
+| 产品负责人 | 范围、功能台账、缺陷和发布决定 | BLOCKED_EXTERNAL | 企业 UAT 完成后签署 |
+| 业务负责人 | 术语、指标、质量、责任和业务结果 | BLOCKED_EXTERNAL | 真实数据结果确认后签署 |
+| 技术负责人 | 架构、接口、迁移、升级和回滚 | BLOCKED_EXTERNAL | 预生产演练完成后签署 |
+| 安全负责人 | 身份、权限、分类、出域、审计和漏洞 | BLOCKED_EXTERNAL | 安全联调和抽样完成后签署 |
+| 运维负责人 | 监控、告警、备份、恢复、值班和支持 | BLOCKED_EXTERNAL | 运维演练和责任交接后签署 |
+
+## 4. 移交确认
+
+正式签署版必须记录版本/提交号、制品摘要、环境、执行日期、签署人、签署时间、未关闭缺陷、
+书面决定和附件索引。当前文件仅为未签署模板,不能作为上线批准或生产就绪证明。

+ 349 - 0
docs/acceptance/P2_WP13_UAT_CASES.json

@@ -0,0 +1,349 @@
+{
+  "schema_version": "1.0",
+  "work_package": "P2-WP13",
+  "generated_at": "2026-08-02",
+  "result_definitions": {
+    "PASS_LOCAL": "当前分支的本地工程证据通过,不能据此认定企业正式验收通过",
+    "FAIL": "已执行但不符合预期",
+    "BLOCKED_EXTERNAL": "需要企业人员、数据、环境、培训或签字,当前不能执行",
+    "NOT_RUN": "本轮未执行且不属于外部依赖"
+  },
+  "cases": [
+    {
+      "id": "P2-WP13-UAT-001",
+      "work_packages": ["P2-WP01"],
+      "module_ids": ["CAT-03", "CAT-13", "CAT-20", "CAT-21"],
+      "title": "管理员初始化第二业务域领域模板并保留版本审计",
+      "actor": "admin",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["备品备件领域模板已固化", "管理员具备模板管理权限"],
+      "steps": ["执行模板差异预检", "导入模板并核对六类对象", "复核版本和追加式回滚证据"],
+      "expected": ["模板导入不复制物料域服务", "六类对象、八条规则和三项指标一致", "历史版本不可变"],
+      "evidence": ["docs/validation/P2_WP01_DOMAIN_TEMPLATE_EVIDENCE.md"],
+      "result": "PASS_LOCAL",
+      "notes": "企业来源与责任人仍保持待绑定。"
+    },
+    {
+      "id": "P2-WP13-UAT-002",
+      "work_packages": ["P2-WP01"],
+      "module_ids": ["CAT-20", "GOV-03"],
+      "title": "领域模板管理员、编辑者和查看者权限分离",
+      "actor": "viewer",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["三级本地角色可构造", "模板接口启用鉴权"],
+      "steps": ["查看者读取模板", "编辑者执行 dry-run", "验证非管理员不能导入或回滚"],
+      "expected": ["查看者只读", "编辑者只预检", "只有管理员可导入和回滚"],
+      "evidence": ["tests/test_domain_template_api.py"],
+      "result": "PASS_LOCAL",
+      "notes": "角色为本地工程角色,不代表企业账号已配置。"
+    },
+    {
+      "id": "P2-WP13-UAT-003",
+      "work_packages": ["P2-WP02"],
+      "module_ids": ["CAT-09", "CAT-10", "CAT-17", "CON-15"],
+      "title": "主动元数据发现、增量游标和字段血缘",
+      "actor": "editor",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["受控发现计划存在", "编辑者具备运行权限"],
+      "steps": ["执行快照与增量批次", "重放相同批次", "检查字段变化、血缘和失败原因"],
+      "expected": ["成功批次才推进游标", "重放不追加版本", "无法解析的血缘失败关闭"],
+      "evidence": ["docs/validation/P2_WP02_ACTIVE_METADATA_EVIDENCE.md"],
+      "result": "PASS_LOCAL",
+      "notes": "企业调度器和真实文件/API 来源尚未验收。"
+    },
+    {
+      "id": "P2-WP13-UAT-004",
+      "work_packages": ["P2-WP02", "P2-WP06"],
+      "module_ids": ["CAT-23", "CAT-26", "GOV-09"],
+      "title": "第二业务域责任人处理健康信号和资产纠错",
+      "actor": "second_domain_owner",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["纠错已绑定责任角色", "资产版本号有效"],
+      "steps": ["读取四类健康信号", "提交资产纠错", "由指定责任人按版本处置"],
+      "expected": ["健康信号可追溯", "非责任人不能处置", "提交和处置均追加审计"],
+      "evidence": ["tests/core/data_source/test_active_metadata.py"],
+      "result": "PASS_LOCAL",
+      "notes": "企业真实责任人尚未绑定。"
+    },
+    {
+      "id": "P2-WP13-UAT-005",
+      "work_packages": ["P2-WP03"],
+      "module_ids": ["SEM-03", "SEM-04", "SEM-06", "SEM-07"],
+      "title": "术语、代码集、指标和字段映射发布链",
+      "actor": "second_domain_owner",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["通用语义对象样本已建立", "创建人与审批人分离"],
+      "steps": ["提交术语、代码集和指标", "独立审批并发布", "执行追加式回滚"],
+      "expected": ["引用完整性通过", "版本不原地覆盖", "指标不携带可执行 SQL"],
+      "evidence": ["docs/validation/P2_WP03_SEMANTIC_GOVERNANCE_EVIDENCE.md"],
+      "result": "PASS_LOCAL",
+      "notes": "企业正式术语、代码集和指标口径待业务签认。"
+    },
+    {
+      "id": "P2-WP13-UAT-006",
+      "work_packages": ["P2-WP03"],
+      "module_ids": ["SEM-02", "SEM-14", "SEM-22"],
+      "title": "查看者读取已发布语义且不能越权发布",
+      "actor": "viewer",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["已发布语义对象存在", "查看者已认证"],
+      "steps": ["读取语义对象和导出", "尝试提交发布动作", "检查知识同步待处理状态"],
+      "expected": ["已发布内容可读", "发布动作被拒绝", "知识配置缺失时事件保持 pending"],
+      "evidence": ["tests/data_research/test_semantic_governance_api.py"],
+      "result": "PASS_LOCAL",
+      "notes": "本地权限验证不替代企业用户映射。"
+    },
+    {
+      "id": "P2-WP13-UAT-007",
+      "work_packages": ["P2-WP04"],
+      "module_ids": ["DQA-02", "DQA-05", "DQA-06", "DQA-08", "DQA-09"],
+      "title": "通用画像、趋势、异常、新鲜度和质量 SLA",
+      "actor": "editor",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["质量模板已发布", "脱敏双业务域样本可用"],
+      "steps": ["执行质量画像", "核对趋势和异常", "触发 SLA 违约与恢复"],
+      "expected": ["统计结果确定性", "样例不可逆摘要", "违约和恢复形成事件"],
+      "evidence": ["docs/phase2/P2_WP04_QUALITY_OPERATIONS.md"],
+      "result": "PASS_LOCAL",
+      "notes": "企业阈值、时间源和统计窗口尚未验收。"
+    },
+    {
+      "id": "P2-WP13-UAT-008",
+      "work_packages": ["P2-WP04"],
+      "module_ids": ["DQA-02", "DQA-12", "DQA-13"],
+      "title": "查看者读取质量证据但不能执行规则",
+      "actor": "viewer",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["质量运行证据存在", "查看者已认证"],
+      "steps": ["查看画像和发现", "尝试执行质量模板", "核对根因仅引用权威证据"],
+      "expected": ["读取成功", "执行被拒绝", "不生成无证据因果结论"],
+      "evidence": ["tests/core/data_rules/test_quality_operations_api.py"],
+      "result": "PASS_LOCAL",
+      "notes": "企业真实数据质量结果尚未生成。"
+    },
+    {
+      "id": "P2-WP13-UAT-009",
+      "work_packages": ["P2-WP05"],
+      "module_ids": ["OBS-03", "OBS-04", "OBS-05", "OBS-06"],
+      "title": "数据 SLO、告警、事故、影响和复盘闭环",
+      "actor": "admin",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["采集或质量源事件可用", "管理员具备事故运营权限"],
+      "steps": ["采集违约事件并聚合告警", "执行抑制、回执和升级", "恢复后完成复盘关闭"],
+      "expected": ["重复事件幂等", "影响与责任可追溯", "证据不完整时不能关闭"],
+      "evidence": ["docs/phase2/P2_WP05_DATA_OBSERVABILITY_INCIDENTS.md"],
+      "result": "PASS_LOCAL",
+      "notes": "企业告警渠道、排班和正式 SLO 未绑定。"
+    },
+    {
+      "id": "P2-WP13-UAT-010",
+      "work_packages": ["P2-WP06"],
+      "module_ids": ["GOV-04", "GOV-05", "GOV-06"],
+      "title": "第二业务域责任继承、覆盖、委派和离岗转交",
+      "actor": "second_domain_owner",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["组织、业务域和对象层级存在", "责任矩阵版本有效"],
+      "steps": ["解析继承责任", "建立临时委派并验证到期", "执行离岗转交"],
+      "expected": ["最近显式配置优先", "唯一 Accountable 可确定", "责任绑定不授予数据权限"],
+      "evidence": ["docs/phase2/P2_WP06_UNIFIED_RESPONSIBILITIES.md"],
+      "result": "PASS_LOCAL",
+      "notes": "企业组织目录和正式人员仍待接入。"
+    },
+    {
+      "id": "P2-WP13-UAT-011",
+      "work_packages": ["P2-WP06"],
+      "module_ids": ["GOV-07", "GOV-08", "GOV-09"],
+      "title": "管理员发布中央责任策略并计算跨域联合评审",
+      "actor": "admin",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["两个业务域存在", "管理员具备责任管理权限"],
+      "steps": ["发布中央策略", "下发到业务域", "计算跨域联合评审结果"],
+      "expected": ["策略版本不可变", "最小同意数确定性计算", "责任运营指标可追溯"],
+      "evidence": ["tests/core/governance/test_unified_responsibilities.py"],
+      "result": "PASS_LOCAL",
+      "notes": "企业联合评审制度尚未签认。"
+    },
+    {
+      "id": "P2-WP13-UAT-012",
+      "work_packages": ["P2-WP07"],
+      "module_ids": ["WFC-03", "WFC-04", "WFC-05", "WFC-07", "WFC-08"],
+      "title": "统一流程、条件路由、多人审批和治理工单",
+      "actor": "editor",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["已发布结构化流程", "编辑者参与目标任务"],
+      "steps": ["创建四类源事项任务", "完成多人审批和转签", "关闭并重开治理工单"],
+      "expected": ["同一源事项活动任务幂等", "创建人不能自审", "源模块状态不被工作中心直接改写"],
+      "evidence": ["docs/phase2/P2_WP07_UNIFIED_WORK_CENTER.md"],
+      "result": "PASS_LOCAL",
+      "notes": "迁移类任务接入和企业流程参与人仍待配置。"
+    },
+    {
+      "id": "P2-WP13-UAT-013",
+      "work_packages": ["P2-WP07"],
+      "module_ids": ["WFC-06", "WFC-10", "WFC-11", "WFC-12", "WFC-15"],
+      "title": "站内通知、邮件重试、超时升级和运营看板",
+      "actor": "admin",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["通知模板和用户偏好存在", "管理员可执行投递批次"],
+      "steps": ["生成站内与邮件通知", "模拟失败重试和死信", "执行超时批次并核对看板"],
+      "expected": ["站内消息可追溯", "邮件失败脱敏且按指数退避", "待办、逾期和闭环率来自持久化数据"],
+      "evidence": ["tests/core/governance/test_unified_work_center.py"],
+      "result": "PASS_LOCAL",
+      "notes": "企业 SMTP、邮件目录字段和定时调度未绑定。"
+    },
+    {
+      "id": "P2-WP13-UAT-014",
+      "work_packages": ["P2-WP08"],
+      "module_ids": ["MKT-07", "MKT-08", "MKT-14", "MKT-15", "MKT-23", "MKT-24"],
+      "title": "数据产品申请、合同、合格证和反馈闭环",
+      "actor": "second_domain_owner",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["第二业务域产品已登记", "责任人和统一审批任务存在"],
+      "steps": ["提交 API 申请并同步审批", "发布兼容合同版本", "签发合格证并关闭用户反馈"],
+      "expected": ["产品责任人唯一", "合格证绑定质量、血缘、规则、运行和审批证据", "反馈关闭需用户确认"],
+      "evidence": ["docs/phase2/P2_WP08_DATA_PRODUCT_GOVERNANCE.md"],
+      "result": "PASS_LOCAL",
+      "notes": "企业数据产品条款和实际消费者尚未验收。"
+    },
+    {
+      "id": "P2-WP13-UAT-015",
+      "work_packages": ["P2-WP08"],
+      "module_ids": ["MKT-07", "MKT-23"],
+      "title": "查看者读取产品治理证据且不能修改生命周期",
+      "actor": "viewer",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["治理产品和合格证存在", "查看者已认证"],
+      "steps": ["读取产品治理详情", "读取本人可见申请", "尝试修改产品生命周期"],
+      "expected": ["授权详情可读", "全局申请不可见", "修改动作被拒绝"],
+      "evidence": ["tests/test_product_governance_api.py"],
+      "result": "PASS_LOCAL",
+      "notes": "本地角色矩阵不替代企业访问审批。"
+    },
+    {
+      "id": "P2-WP13-UAT-016",
+      "work_packages": ["P2-WP09"],
+      "module_ids": ["KAI-11", "KAI-12", "KAI-14", "KAI-15", "KAI-18"],
+      "title": "管理员登记 Agent、签发短期凭证并回放决策",
+      "actor": "admin",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["独立 Agent 凭证密钥可用", "管理员具备 Agent 管理权限"],
+      "steps": ["登记只读 Agent", "精确授权工具并签发一次性凭证", "执行请求并查看证据回放"],
+      "expected": ["凭证最长 15 分钟且明文只返回一次", "未授权默认拒绝", "回放不保存提示或输出正文"],
+      "evidence": ["docs/phase2/P2_WP09_AGENT_GOVERNANCE.md"],
+      "result": "PASS_LOCAL",
+      "notes": "企业正式 Agent、工具清单和独立密钥尚未绑定。"
+    },
+    {
+      "id": "P2-WP13-UAT-017",
+      "work_packages": ["P2-WP09"],
+      "module_ids": ["KAI-13", "KAI-15", "KAI-20"],
+      "title": "查看者只读 Agent 阻断跨域、提示注入和自动执行",
+      "actor": "viewer",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["只读 Agent 已绑定单一业务域", "引用策略已启用"],
+      "steps": ["提交带引用的域内读取", "尝试跨域读取", "提交提示注入和自动执行请求"],
+      "expected": ["域内读取按证据授权", "跨域和提示注入被拒绝", "只读 Agent 不允许自动执行"],
+      "evidence": ["tests/agent/test_agent_governance.py"],
+      "result": "PASS_LOCAL",
+      "notes": "企业红队语料和正式 MCP/API 清单待验收。"
+    },
+    {
+      "id": "P2-WP13-UAT-018",
+      "work_packages": ["P2-WP10"],
+      "module_ids": ["SEC-02", "SEC-03", "SEC-05", "SEC-06", "SEC-11", "SEC-20", "SEC-21"],
+      "title": "分类复核、访问与出域、审计和漏洞治理",
+      "actor": "admin",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["安全治理工作台可用", "管理员和独立复核人可构造"],
+      "steps": ["执行敏感识别和独立复核", "验证默认拒绝及高敏出域阻断", "登记 SBOM 发现并独立关闭漏洞"],
+      "expected": ["原始样本不落库", "高敏数据无绕过开关", "十一类审计与漏洞证据可追溯"],
+      "evidence": ["docs/phase2/P2_WP10_SECURITY_FOUNDATION.md"],
+      "result": "PASS_LOCAL",
+      "notes": "企业 SIEM、DLP、KMS 和合规测评尚未完成。"
+    },
+    {
+      "id": "P2-WP13-UAT-019",
+      "work_packages": ["P2-WP11"],
+      "module_ids": ["PLT-11", "PLT-13", "PLT-14", "PLT-22", "PLT-25", "PLT-26"],
+      "title": "多环境、迁移 dry-run、升级和恢复式回滚",
+      "actor": "admin",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["P2-WP11 本地演练证据已归档", "旧版镜像与匹配备份可用"],
+      "steps": ["复核三环境隔离和晋级包", "执行迁移 dry-run 和摘要对账", "复核 360 到 460 升级与候选回滚"],
+      "expected": ["环境值零碰撞", "迁移不写客户源或自动切流", "回滚不执行数据库 downgrade"],
+      "evidence": ["docs/validation/P2_WP11_PRODUCT_DELIVERY_EVIDENCE.md"],
+      "result": "PASS_LOCAL",
+      "notes": "企业断网主机、签名制品和 RPO/RTO 仍待演练。"
+    },
+    {
+      "id": "P2-WP13-UAT-020",
+      "work_packages": ["P2-WP12"],
+      "module_ids": ["CAT-03", "GOV-02", "DQA-04", "OBS-03", "MKT-23", "KAI-14"],
+      "title": "第二业务域十阶段治理复制且不修改设备服务",
+      "actor": "second_domain_owner",
+      "acceptance_level": "LOCAL_ENGINEERING",
+      "preconditions": ["P2-WP12 自包含实施包可用", "受控脱敏样本已批准用于本地验证"],
+      "steps": ["校验模板、证据和数据摘要", "执行增量采集和重放", "核对十阶段收据与设备代码差异"],
+      "expected": ["十阶段全部通过", "重放变更为 0", "设备专用核心改动为 0"],
+      "evidence": ["docs/validation/P2_WP12_SECOND_DOMAIN_REPLICATION_EVIDENCE.md"],
+      "result": "PASS_LOCAL",
+      "notes": "这是本地工程复制,不是企业真实业务 UAT。"
+    },
+    {
+      "id": "P2-WP13-UAT-021",
+      "work_packages": ["P2-WP01", "P2-WP02", "P2-WP03", "P2-WP04", "P2-WP05", "P2-WP06", "P2-WP07", "P2-WP08", "P2-WP09", "P2-WP10", "P2-WP12"],
+      "module_ids": ["CAT-03", "SEM-04", "DQA-02", "GOV-04", "MKT-23"],
+      "title": "企业真实第二业务域数据端到端治理 UAT",
+      "actor": "enterprise_acceptance",
+      "acceptance_level": "ENTERPRISE_FORMAL",
+      "preconditions": ["企业只读来源和脱敏批准到位", "正式责任人、口径和阈值已签认"],
+      "steps": ["接入真实来源并执行增量采集", "完成语义、质量、整改、事故和产品闭环", "按验收指标计算真实结果"],
+      "expected": ["指标达到第二阶段正式验收值", "证据可追溯", "无设备域专用代码复制"],
+      "evidence": ["企业真实数据 UAT 报告", "企业指标与差异清单"],
+      "result": "BLOCKED_EXTERNAL",
+      "notes": "本地脱敏样本不能替代企业真实数据 UAT。"
+    },
+    {
+      "id": "P2-WP13-UAT-022",
+      "work_packages": ["P2-WP01", "P2-WP06", "P2-WP07", "P2-WP09", "P2-WP10"],
+      "module_ids": ["IAM-04", "IAM-13", "GOV-03", "WFC-05", "KAI-12", "SEC-05"],
+      "title": "企业实际用户、第二业务域责任人和职责分离",
+      "actor": "enterprise_acceptance",
+      "acceptance_level": "ENTERPRISE_FORMAL",
+      "preconditions": ["企业提供用户与组织名单", "安全和业务负责人确认职责矩阵"],
+      "steps": ["配置管理员、编辑者、查看者和领域责任人", "验证委派、审批与高风险双人复核", "核对离职和权限回收"],
+      "expected": ["账号、角色、责任与企业组织一致", "无越权或责任空缺", "高风险操作职责分离"],
+      "evidence": ["企业签字版用户角色矩阵", "企业账号与责任验收记录"],
+      "result": "BLOCKED_EXTERNAL",
+      "notes": "企业单点登录属于第三阶段,当前仍需真实本地账号映射验收。"
+    },
+    {
+      "id": "P2-WP13-UAT-023",
+      "work_packages": ["P2-WP05", "P2-WP10", "P2-WP11"],
+      "module_ids": ["OBS-05", "SEC-15", "PLT-07", "PLT-08", "PLT-12", "PLT-25"],
+      "title": "企业监控安全联调、规模、安装、升级和灾备验收",
+      "actor": "enterprise_acceptance",
+      "acceptance_level": "ENTERPRISE_FORMAL",
+      "preconditions": ["企业预生产环境和签名制品到位", "RPO/RTO、容量和变更窗口已批准"],
+      "steps": ["接入 APM、日志、告警、SIEM 和排班", "执行目标规模容量和故障注入", "执行断网安装、升级和候选回滚"],
+      "expected": ["监控与安全事件可送达", "容量满足批准指标", "安装、升级和恢复达到企业 RPO/RTO"],
+      "evidence": ["企业预生产演练报告", "变更审批与安全签字"],
+      "result": "BLOCKED_EXTERNAL",
+      "notes": "本机小样本耗时不能作为企业承诺。"
+    },
+    {
+      "id": "P2-WP13-UAT-024",
+      "work_packages": ["P2-WP13"],
+      "module_ids": ["PLT-25", "PLT-26", "GOV-02"],
+      "title": "用户培训、运维培训、材料移交和正式签字",
+      "actor": "enterprise_acceptance",
+      "acceptance_level": "ENTERPRISE_FORMAL",
+      "preconditions": ["企业 UAT 完成", "P0 为 0且未关闭 P1 有书面决定", "接收人与培训名单已确认"],
+      "steps": ["完成用户和运维培训练习", "逐项核对移交清单", "由产品、业务、技术、安全和运维负责人签字"],
+      "expected": ["签到、练习、问题和补训记录齐全", "代码、制品、配置、备份和责任完成交接", "正式验收状态有签字"],
+      "evidence": ["企业培训记录", "签字版 UAT 报告与移交清单"],
+      "result": "BLOCKED_EXTERNAL",
+      "notes": "本轮仅交付培训和签署材料,不得预签。"
+    }
+  ]
+}

+ 113 - 0
docs/acceptance/P2_WP13_UAT_PLAN_AND_REPORT.md

@@ -0,0 +1,113 @@
+# P2-WP13 第二阶段 UAT 计划与本地工程预验收报告
+
+## 1. 文档信息
+
+- 工作包:P2-WP13 第二阶段验收与移交
+- 执行日期:2026-08-02
+- 验收分支:`codex/dataops-phase2-platformization`
+- 本地验收基线:P2-WP12 提交 `5267d8b`
+- 用例清单:`docs/acceptance/P2_WP13_UAT_CASES.json`
+- 验收层级:本地工程预验收
+
+## 2. 验收结论
+
+第二阶段已完成本地工程预验收材料编制和证据聚合。24 条 UAT 用例覆盖 P2-WP01~
+P2-WP12,其中 20 条使用当前分支既有定向测试、真实 PostgreSQL 事务测试和演练记录
+判定为 `PASS_LOCAL`,4 条依赖企业人员、真实来源、正式环境、培训或签字,保持
+`BLOCKED_EXTERNAL`。没有本地失败用例。
+
+本结论证明第二阶段工程能力可以移交给企业用户开展正式验收,但不能替代企业真实数据 UAT。
+企业实际账号和责任人、真实只读来源、正式口径与阈值、监控安全联调、目标规模、
+培训签到和验收签字未完成,因此企业正式验收未完成,也不表示生产已经部署。
+
+## 3. UAT 范围
+
+本次覆盖以下能力链:
+
+1. 通用治理对象、领域模板和追加式版本;
+2. 主动元数据、增量游标、字段血缘、健康信号和纠错;
+3. 术语、代码集、指标、字段映射和知识同步;
+4. 通用画像、趋势、异常、新鲜度、质量 SLA 和根因证据;
+5. 数据 SLO、告警、事故、影响、恢复和复盘;
+6. 责任继承、覆盖、委派、中央策略和跨域联合评审;
+7. 统一流程、多人审批、待办、治理工单、通知和运营看板;
+8. 数据产品申请、合同、合格证和反馈;
+9. Agent 身份、短期凭证、工具授权、风险策略和审计回放;
+10. 分类分级、敏感识别、访问/出域、审计、留存和漏洞治理;
+11. 多环境、迁移 dry-run、制品、升级和恢复式回滚;
+12. 备品备件/物料主数据第二业务域十阶段复制。
+
+## 4. 用例执行汇总
+
+| 验收层级 | 状态 | 数量 | 说明 |
+|---|---:|---:|---|
+| 本地工程预验收 | PASS_LOCAL | 20 | 当前分支、受控样本、定向测试和本地演练证据通过 |
+| 企业正式验收 | BLOCKED_EXTERNAL | 4 | 需要企业人员、数据、环境、培训或签字 |
+| 本地工程预验收 | FAIL | 0 | 没有本地失败用例 |
+
+详细前置条件、步骤、预期、证据和边界见 UAT 用例 JSON。`PASS_LOCAL` 只是一种工程
+证据分类,不允许转换为企业签署状态。
+
+## 5. 角色与权限
+
+| 角色 | 本地验证范围 | 权限边界 | 当前结论 |
+|---|---|---|---|
+| 管理员 | 模板导入、中央策略、事故、安全、Agent 与交付管理 | 高风险操作仍需职责分离 | PASS_LOCAL |
+| 编辑者 | 采集、质量、统一任务等受控运营 | 不可执行管理员专属配置 | PASS_LOCAL |
+| 查看者 | 已授权对象只读查询 | 写操作与管理接口拒绝 | PASS_LOCAL |
+| 第二业务域责任人 | 语义、责任、产品和纠错等对象级运营 | 责任本身不授予数据访问权限 | PASS_LOCAL |
+| 企业实际用户 | 正式账号、组织、职责和访问范围 | 需企业安全与业务负责人确认 | BLOCKED_EXTERNAL |
+
+## 6. 第二阶段指标核对
+
+| 指标 | 本地工程证据 | 企业正式验收要求 | 结论 |
+|---|---|---|---|
+| 第二业务域核心对象入账 | 6 类模板对象及 4 行脱敏最终状态 | 企业核心对象入账率 ≥95% | BLOCKED_EXTERNAL |
+| 来源身份和版本追溯 | 模板、来源、证据和报告摘要均绑定 | 企业样本 100% | PASS_LOCAL |
+| 增量采集 | 游标 100→102,重放变更 0 | 企业样本识别准确率 ≥99% | BLOCKED_EXTERNAL |
+| 术语、标准和责任 | 4 术语、3 代码集、3 指标、3 类责任 | 企业责任覆盖率 ≥95% | BLOCKED_EXTERNAL |
+| 质量整改 | 脱敏样本 1 个发现并完成独立关闭 | 企业首批问题闭环率 ≥85% | BLOCKED_EXTERNAL |
+| 事故责任与影响 | 本地事故恢复、复盘和关闭证据完整 | 企业样本 100% | BLOCKED_EXTERNAL |
+| 产品合同与合格证 | 本地产品合同和合格证完整 | 企业真实产品 100% | BLOCKED_EXTERNAL |
+| Agent 越权与审计 | 跨域拒绝、引用和审计回放通过 | 企业工具与红队样本 100% | BLOCKED_EXTERNAL |
+| 设备域专用代码修改 | 0 | 0 | PASS_LOCAL |
+| 安装、升级与回滚 | 本地 360→460 与候选回滚通过 | 企业环境各至少 1 次 | BLOCKED_EXTERNAL |
+
+本地计数只证明能力可执行,不推导企业生产指标。
+
+## 7. 缺陷结论
+
+本地工程预验收没有发现 P0/P1/P2/P3 新缺陷:P0 为 0,未关闭 P1 为 0。已有各工作包
+定向验证均通过,外部依赖统一登记为验收门禁而非产品缺陷。后续企业 UAT 发现的缺陷
+必须进入 `P2_WP13_DEFECT_REGISTER.md`,P0 阻断验收,未关闭 P1 必须取得书面决定。
+
+## 8. 培训、迁移和回滚
+
+用户指南、运维手册、培训课程、练习、签到/补训模板和签署清单已经就绪。本地迁移
+dry-run、360→460 升级和候选回滚证据复用 P2-WP11 已完成演练,不在 P2-WP13 重复执行
+高成本全量恢复。
+
+企业用户培训、运维培训、签到、练习、补训和正式交接仍为 `BLOCKED_EXTERNAL`;企业
+必须使用上一正式版本的签名完整制品和匹配备份,在批准窗口执行预生产升级与回滚。
+
+## 9. 功能台账与第三阶段
+
+功能模块台账已完成 264/264 唯一条目审计,并修正第二阶段已交付能力仍标为“规划中”
+的陈旧状态。所有成熟度继续区分“工程完成”“部分建设”“规划中”“能力预留”和明确
+产品边界,没有把本地工程证据升级为“生产已建设”。第三阶段待办单独登记企业单点登录、
+企业数据源、生产可观测、多租户、第三业务域和正式 UAT 等事项,产品仍专注数据运营与
+治理,不扩展为分析开发平台。
+
+## 10. 企业正式 UAT 流程
+
+1. 指定产品、业务、技术、安全、运维和验收负责人;
+2. 批准企业只读来源、脱敏样本、网络、字段字典、游标和回退方式;
+3. 绑定真实账号、责任矩阵、术语、质量阈值、SLO、产品合同和 Agent 工具范围;
+4. 执行 UAT-021~024,记录实际结果、证据、指标和缺陷;
+5. 关闭 P0,关闭 P1 或形成业务与技术负责人共同签署的书面决定;
+6. 完成用户与运维培训、预生产升级/回滚、移交清单和正式签字。
+
+## 11. 签署状态
+
+产品、业务、技术、安全和运维负责人均待企业指定并在正式 UAT 完成后签字。任何签字栏
+不得预签;本地工程负责人不能代替企业业务或验收负责人确认生产就绪。

+ 87 - 0
docs/guides/DATAOPS_PHASE2_USER_OPERATION_GUIDE.md

@@ -0,0 +1,87 @@
+# 数据运营平台第二阶段用户操作指南
+
+## 1. 适用范围
+
+本指南面向第二阶段的数据运营与治理用户,覆盖领域模板、主动元数据、语义、质量、事故、
+责任、统一任务、数据产品、Agent 和安全治理。平台专注数据运营与治理,不提供 NL2SQL、
+在线分析或 BI 开发能力。
+
+## 2. 角色边界
+
+| 角色 | 主要操作 | 关键限制 |
+|---|---|---|
+| 管理员 | 模板导入、策略发布、全局事故、安全、Agent 和交付配置 | 高风险操作仍需独立复核,不得替代业务确认 |
+| 编辑者 | 采集、质量、任务和日常治理运营 | 不能执行管理员专属发布和安全配置 |
+| 查看者 | 已授权对象、证据、产品和运营结果只读查询 | 不显示或不允许写操作,服务端权限为最终边界 |
+| 第二业务域责任人 | 术语、责任、纠错、质量整改和产品运营 | 责任身份本身不授予数据访问权限 |
+
+企业实施时应把上述平台角色映射到真实人员与组织;本地示范账号不能直接作为生产账号。
+
+## 3. 领域模板
+
+管理员先在模板页面执行差异预检,确认对象类型、来源身份、责任角色、规则、指标和初始化
+任务,再导入模板。编辑者只能预检,查看者只能读取。回滚会追加新版本,不覆盖历史版本;
+模板移除的对象类型只退役,不物理删除已有业务数据。
+
+## 4. 主动元数据
+
+1. 管理员创建发现计划,选择支持的数据库或受控文件/API 来源;
+2. 编辑者执行批次并检查游标、资产/字段变化、删除候选和失败原因;
+3. 重复批次应幂等,失败批次不得推进游标;
+4. 在字段血缘页检查成功关系或失败关闭原因;
+5. 查看质量、新鲜度、任务失败和使用热度健康信号;
+6. 用户提交纠错后,由指定责任人按当前版本处理并留下审计。
+
+## 5. 语义与标准
+
+第二业务域责任人维护术语、别名、代码集、指标、标准和物理字段映射。创建人提交版本后,
+由独立管理员审批发布。指标只保存定义、公式和维度,不接受 SQL 或运行脚本。知识同步未
+配置时,发布事件保持待处理,不应把未同步状态误报为成功。
+
+## 6. 质量与事故
+
+编辑者选择已发布质量模板,执行画像并查看完整率、唯一性、分布、模式、趋势、异常和
+新鲜度。发现项只能作为确定性质量证据,不能自动改写源数据。质量或采集违约进入事故
+中心后,运营人员完成告警聚合、抑制、送达回执、升级、影响绑定、恢复观察和复盘关闭。
+所有告警恢复且复盘证据齐全前,事故不能关闭。
+
+## 7. 责任与统一任务
+
+责任中心按组织、业务域和对象层级解析 RACI,最近的显式覆盖优先。临时委派、到期收回、
+离岗转交、中央策略和跨域联合评审均保留版本与审计。统一任务承载质量、语义、数据产品
+和 Agent 四类事项;任务结果只形成回执,不直接改写源模块业务状态。用户只可读取本人
+参与的任务、评论、附件和时间线。
+
+## 8. 数据产品
+
+第二业务域责任人登记产品并绑定唯一责任人、业务域、质量目标和 SLA。申请人可以提交
+数据库、API、文件或数据产品申请,统一工作中心负责审批证据。合同发布前检查兼容性;
+合格证必须同时引用质量、SLA、血缘、规则版本、成功运行批次和审批。评分与问题反馈要
+经过分诊、处理、解决和用户确认,不能由产品责任人单方面关闭用户反馈。
+
+## 9. Agent 治理
+
+管理员登记 Agent、定义用途与责任人,并按 Agent、工具、动作、业务域和环境精确授权。
+机器凭证明文只返回一次且最长有效 15 分钟。首批使用只读或建议级 Agent;建议必须携带
+证据引用,跨域、提示注入、固定禁止项和未授权动作默认拒绝。高风险动作即使审批通过也
+只能标记为人工执行,不得由平台自动完成。
+
+## 10. 安全治理
+
+安全工作台提供分类分级、敏感识别、人工复核、访问与出域策略、证据留存、SIEM 投递和
+漏洞闭环。扫描发起人不能自审,敏感样本原值不落库。未命中访问策略默认拒绝,高敏感
+出域固定拒绝。任何审批都不等于数据库权限已自动下发,真实导出仍需企业执行网关控制。
+
+## 11. 常见失败处理
+
+- 游标未推进:检查批次失败原因,不要人工跳过失败批次;
+- 血缘无法解析:保留哈希和失败原因,补充解析器后重新运行,不得猜测;
+- 责任不唯一:修正最近层级的 Accountable,不能用临时数据权限代替责任;
+- 合格证未签发:逐项补齐质量、SLA、血缘、规则、运行和审批证据;
+- Agent 被拒绝:核对业务域、环境、工具、动作、风险和引用,不得放宽默认拒绝;
+- 事故无法关闭:检查关联告警恢复、责任、影响、根因、纠正措施和关闭证据。
+
+## 12. 企业验收提示
+
+用户培训应使用企业批准的脱敏真实数据和正式账号。练习结果、问题、补训和签字需由企业
+培训负责人归档;本指南和本地测试不能替代企业正式 UAT。

+ 30 - 0
docs/roadmap/DATAOPS_PHASE3_BACKLOG.md

@@ -0,0 +1,30 @@
+# 数据运营平台第三阶段待办清单
+
+## 1. 产品边界
+
+第三阶段继续专注数据运营与治理,不扩展为分析开发平台:不建设 NL2SQL、在线分析、BI
+报表开发、通用 ETL 开发 IDE 或无人值守业务决策平台。优先补齐企业身份、真实来源、
+生产运营、安全交付和跨业务域规模化能力。
+
+## 2. 待办台账
+
+| 待办编号 | 来源模块 | 优先级 | 工作内容 | 启动条件 | 验收标准 | 依赖 | 目标阶段 |
+|---|---|---:|---|---|---|---|---|
+| P3-01 | IAM-06~12、IAM-17 | P0 | 企业单点登录:OIDC/OAuth 2.0、租户 IdP、Claims 映射、组织同步、账号生命周期、应急访问和认证审计 | 企业提供 IdP 测试租户、Issuer、Client、证书、Claims 和用户生命周期规则 | 同一用户完成登录、角色/域映射、转岗/离职回收、SSO 故障应急和完整审计 | 企业身份团队、安全负责人 | 第三阶段首批 |
+| P3-02 | CON-06~15、CON-17~21 | P0 | 企业数据源与边缘执行:Oracle/SQL Server/国产库、ERP/MES/API、流和客户内网边缘网关 | 选定企业只读数据源、网络区、脱敏与出站策略 | 至少两个新增连接器完成目录、增量、断点、失败恢复和凭据安全验收 | 企业网络、数据源负责人 | 第三阶段首批 |
+| P3-03 | OBS-03~06、WFC-11~14、PLT-11~12 | P0 | 生产可观测:APM、日志、告警、排班、邮件/协作/ITSM、容量和故障注入 | 企业监控、告警、排班和 ITSM 接口开放 | SLO、事故、送达、值班、升级、容量和复盘在目标规模闭环 | 企业运维与平台团队 | 第三阶段首批 |
+| P3-04 | P2-WP13 外部门禁 | P0 | 第二业务域企业正式 UAT、培训、预生产升级/回滚和签字移交 | 真实用户、只读来源、正式配置和预生产环境到位 | UAT 指标达标,P0 为 0,P1 有关闭或书面决定,培训及五方签字完成 | 产品、业务、技术、安全、运维负责人 | 第三阶段首批 |
+| P3-05 | CAT、SEM、DQA、GOV、WFC | P0 | 第三业务域复制和实施包工业化 | 第三业务域范围、责任人、来源和术语确定 | 不复制设备/物料专用服务完成十阶段治理,新增通用缺口有明确扩展契约 | P2-WP12 实施包、企业领域团队 | 第三阶段 |
+| P3-06 | IAM-14~15、PLT-30 | P1 | 多租户底座:数据、配置、密钥、索引、任务、审计和配额隔离 | 明确 SaaS 与私有化混合交付模式 | 租户上下文全链传播,跨租户访问默认拒绝,备份恢复和审计可分租户 | 身份、安全、数据库架构 | 第三阶段 |
+| P3-07 | SEC-04~07、SEC-14~22、MKT-09~18 | P1 | 细粒度访问、动态脱敏、DLP/KMS/SIEM、法务保全和授权回收执行 | 企业数据分类、KMS/DLP/SIEM 与访问网关方案批准 | 行列字段策略真实执行,高敏出域拒绝,授权到期回收,法务保全可证明 | 企业安全与法务 | 第三阶段 |
+| P3-08 | PLT-06~10、PLT-15、PLT-25~26 | P1 | Kubernetes/HA、签名制品、企业制品库、GitOps、灾备和版本兼容矩阵 | 目标基础设施、SLA、RPO/RTO 和发布流程批准 | 多实例、故障转移、签名验证、自动漂移门禁和灾备演练达到批准指标 | 企业基础设施与变更管理 | 第三阶段 |
+| P3-09 | KAI-08、KAI-12~21 | P1 | 模型网关、租户身份、预算配额、运行沙箱、异常处置及受治理插件/MCP | 合规模型、预算、沙箱和工具白名单确定 | 模型/Prompt/用量可追溯,预算与沙箱强制生效,异常可暂停降级,插件经审核 | 企业 AI 与安全团队 | 第三阶段 |
+| P3-10 | CAT-07~08、CON-13、KAI-09 | P2 | BI/AI 资产目录连接器与治理检索,不建设报表或模型开发器 | 选定 BI/AI 平台并开放只读元数据 API | 数据集、报表、模型、Prompt、Agent 及依赖可发现、检索、授权和审计 | 企业 BI/AI 平台 | 第三阶段后续 |
+| P3-11 | MKT-19~22、DFY-22、PLT-12 | P2 | 使用量、资源、模型调用、成本归集、预算和 Showback | 成本中心、计价口径和数据源明确 | 计量可对账、预算可预警、分摊可解释,不进行未经批准的财务结算 | 财务、平台运营 | 第三阶段后续 |
+| P3-12 | PLT-19~21、CON-21、KAI-21 | P2 | 连接器、通知、审批、质量和 Agent 插件 SDK、仓库与隔离 | 插件信任模型、签名、许可证和资源策略批准 | 插件声明权限、签名、扫描、沙箱、灰度和回滚均受治理 | 安全、架构、生态团队 | 第三阶段后续 |
+
+## 3. 排序原则
+
+P3-01~05 是企业验收与规模化的前置条件。单点登录只有在企业 IdP 信息和测试租户到位后
+启动;不得用模拟 Claims 宣称企业认证完成。多租户、Kubernetes、成本治理和插件生态不应
+阻塞单一企业私有化场景的真实 UAT,但其设计不得破坏现有业务域与权限边界。

+ 94 - 0
docs/runbooks/DATAOPS_PHASE2_OPERATIONS_HANDOVER.md

@@ -0,0 +1,94 @@
+# 数据运营平台第二阶段运维移交手册
+
+## 1. 移交范围与责任
+
+本手册覆盖第二阶段服务巡检、数据可观测、安全、备份恢复、多环境晋级、客户迁移、升级
+回滚和异常升级。企业正式移交时,每个组件必须指定主责、备岗和值班升级联系人;本地
+工程人员不能替代企业运维责任。
+
+| 组件/能力 | 运维责任 | 当前企业责任状态 |
+|---|---|---|
+| 前端、后端与 Worker | 健康、日志、发布和容量 | 待企业指定 |
+| PostgreSQL、Neo4j、MinIO | 备份、恢复、容量和完整性 | 待企业指定 |
+| Kestra、Runner、兼容 n8n | 调度、令牌、执行和失败恢复 | 待企业指定 |
+| 数据可观测与统一任务 | SLO、事故、通知和时限 | 待企业指定 |
+| 安全与 Agent 治理 | 策略、凭证、审计、SIEM 和漏洞 | 待企业指定 |
+
+## 2. 每日巡检
+
+- 检查服务、任务、PostgreSQL、Neo4j、MinIO 和外部数据源六类就绪状态;
+- 检查采集游标、失败批次、质量 SLA、未恢复告警和未关闭事故;
+- 检查统一任务逾期、邮件重试/死信和事务事件箱积压;
+- 检查登录、权限、数据产品、Agent 和安全治理关键审计是否持续产生;
+- 检查数据库、图、对象存储和日志容量,未配置容量上限时标记“未知”。
+
+## 3. 每周巡检
+
+- 抽查领域模板、语义、规则、流程和产品活动版本及摘要;
+- 抽查责任不唯一、过期委派、纠错逾期、重复质量问题和事故复盘;
+- 复核 Agent 有效凭证、授权、跨域拒绝、提示注入和高风险审批;
+- 核对安全分类复核、出域请求、SIEM 失败、到期留存候选和漏洞 SLA;
+- 验证最近备份清单、校验值和介质可读性,确认上一正式版本制品仍可用。
+
+## 4. 备份与恢复
+
+备份至少覆盖 PostgreSQL 逻辑导出、Compose 托管卷、Neo4j、MinIO、环境配置、密钥引用、
+签名制品、版本清单和校验文件。秘密由企业密钥系统独立保护,不得写入仓库或明文备份。
+
+恢复时先验签,再在隔离项目和独立端口恢复;核对数据库 Alembic 版本、核心表计数、图与
+对象摘要、审计证据和应用健康。恢复失败时保留现场,不覆盖最后可用备份。实际 RPO/RTO、
+差异、执行人和批准人必须写入企业演练报告。
+
+## 5. 环境晋级、迁移与升级
+
+开发、测试、预生产只允许相邻晋级。资产、标准、本体、规则和流程包必须绑定版本、摘要、
+审批、测试证据和回滚引用。客户迁移先执行只读 dry-run,确认字段映射、重复目标、游标、
+检查点、记录数和摘要;未经批准不得写目标、双写或切流。
+
+升级前必须校验制品签名、环境、Compose、镜像版本、Alembic head 和升级前备份。镜像内部
+迁移头必须与离线包版本清单一致。升级后重复健康、权限、安全和关键业务检查。
+
+## 6. 回滚
+
+回滚使用“上一正式版本完整制品 + 与升级前时点匹配的备份”恢复到新候选项目,不执行
+`alembic downgrade`,不覆盖当前已升级项目。候选项目完成数据和健康核对后,由企业变更
+负责人批准切流。没有匹配制品、备份、回滚引用或批准时必须失败关闭。
+
+## 7. 安全与秘密
+
+- 生产环境使用独立应用密钥、Agent 凭证密钥、数据库凭据、证书和 SIEM 鉴权;
+- 日志和事故记录不得包含密码、完整令牌、连接串或原始敏感样本;
+- 高敏数据出域固定拒绝,安全复核、漏洞关闭和高风险 Agent 操作实行职责分离;
+- 审计、留存和漏洞数据定期外送企业不可变归档与安全运营平台;
+- 发现权限绕过、密钥泄露、审计中断或制品篡改时按 P0 处理。
+
+## 8. 异常升级
+
+| 等级 | 示例 | 处置与升级 |
+|---|---|---|
+| P0 | 全站不可用、数据损坏、权限绕过、密钥泄露 | 冻结变更,通知业务/技术/安全/运维负责人,启动恢复或回滚 |
+| P1 | 关键治理链或交付链失败、关键结果错误 | 当日明确影响、替代路径、负责人和关闭时间 |
+| P2 | 非关键功能异常且有替代路径 | 登记缺陷并排入目标阶段 |
+| P3 | 体验或低风险改进 | 纳入产品待办 |
+
+异常记录必须包含时间线、影响、检测方式、临时处置、已确认根因、永久修复和验证证据。
+根因未确认时不得用 AI 或人员推测替代事实。
+
+## 9. 培训与演练
+
+运维培训覆盖六类就绪监控、日志定位、事故闭环、备份恢复、环境晋级、迁移 dry-run、升级
+回滚、安全审计、Agent 凭证和异常升级。企业运维人员至少独立完成一次隔离恢复和一次
+候选回滚练习,并记录签到、结果、问题与补训。
+
+## 10. 移交清单
+
+| 项目 | 当前状态 |
+|---|---|
+| 第二阶段 UAT 用例、报告和缺陷台账 | 本地工程材料已就绪 |
+| 用户指南、运维手册和培训计划 | 工程材料已就绪 |
+| P2-WP11 本地迁移、升级与回滚证据 | 本地证据已就绪 |
+| 264 项功能台账审计和第三阶段待办 | 工程材料已就绪 |
+| 企业运维主责、备岗和值班路径 | BLOCKED_EXTERNAL |
+| 企业监控、安全与制品平台联调 | BLOCKED_EXTERNAL |
+| 企业预生产升级、恢复与 RPO/RTO | BLOCKED_EXTERNAL |
+| 正式培训、验收与移交签字 | BLOCKED_EXTERNAL |

+ 43 - 0
docs/training/DATAOPS_PHASE2_TRAINING_PLAN.md

@@ -0,0 +1,43 @@
+# 数据运营平台第二阶段培训计划
+
+## 1. 目标与状态
+
+培训材料、角色课程、练习、签到/问题/补训记录要求已经形成。企业真实用户和运维人员尚未
+指定,实际培训状态为 `BLOCKED_EXTERNAL`,不得把阅读本文档登记为培训完成。
+
+## 2. 用户培训
+
+| 课程 | 对象 | 练习 | 验收证据 |
+|---|---|---|---|
+| 角色与权限 | 管理员、编辑者、查看者、第二业务域责任人 | 用各角色执行一项允许和一项禁止操作 | 角色矩阵、403/业务结果、签到 |
+| 领域与主动元数据 | 管理员、编辑者 | 预检模板,执行增量并解释游标和血缘失败 | 批次、版本、审计 |
+| 语义、质量与事故 | 领域责任人、编辑者 | 发布语义,运行质量,关闭一项真实事故 | 发布、质量、复盘证据 |
+| 责任与统一任务 | 领域责任人、审批人 | 完成委派、多人审批、转签和工单关闭 | 责任解析、任务时间线 |
+| 数据产品与 Agent | 产品责任人、Agent 责任人 | 签发合格证,验证跨域 Agent 拒绝 | 合同、证书、决策回放 |
+| 安全治理 | 管理员、安全复核人 | 复核分类,拒绝高敏出域,关闭一项漏洞 | 安全时间线和独立关闭证据 |
+
+## 3. 运维培训
+
+运维培训包括每日巡检、每周巡检、六类就绪状态、事故与通知、备份、恢复、环境晋级、客户
+迁移 dry-run、升级、候选回滚、安全审计、Agent 凭证轮换和异常升级。每位主责或备岗应
+在隔离环境独立完成至少一次恢复核对和一次回滚候选验证。
+
+## 4. 培训组织
+
+1. 企业培训负责人确认参训人、角色、时间、环境和脱敏数据;
+2. 讲师按角色分组,先说明权限、安全和不能自动执行的边界;
+3. 参训人独立完成练习,讲师只提供引导,不代替操作;
+4. 记录练习结果、失败步骤、问题和改进建议;
+5. 未通过人员安排补训并重新执行失败练习;
+6. 培训负责人核对签到、练习和补训后签字。
+
+## 5. 记录要求
+
+签到记录至少包含姓名、部门、角色、课程、日期和确认;练习记录包含环境、对象、步骤、
+预期、实际结果和证据;问题记录包含责任人和处置期限;补训记录必须关联原失败练习。
+培训资料不得记录密码、完整令牌、生产连接串或未经批准的敏感数据。
+
+## 6. 完成门禁
+
+用户培训和运维培训只有在企业人员实际参加、练习通过、问题完成处置、补训完成且培训
+负责人签字后才算完成。当前只完成材料准备,正式培训仍为 `BLOCKED_EXTERNAL`。

+ 94 - 0
docs/validation/P2_WP13_ACCEPTANCE_HANDOVER_EVIDENCE.md

@@ -0,0 +1,94 @@
+# P2-WP13 第二阶段验收与移交定向证据
+
+## 1. 结论
+
+P2-WP13 已完成本地工程预验收和移交材料。本地证据支持 20 条 `PASS_LOCAL` 用例;企业
+真实数据、实际用户、正式环境、培训和签字对应 4 条 `BLOCKED_EXTERNAL` 用例。当前分支
+具备进入企业正式 UAT 的工程条件,但企业正式验收未完成。
+
+本轮没有发现 P0/P1/P2/P3 新缺陷。该结论来自下述定向验证,不代表生产部署、企业容量、
+RPO/RTO、正式告警送达、合规测评或业务签字已经完成。
+
+## 2. 文档契约
+
+`tests/test_p2_wp13_acceptance_handover_contract.py` 机器检查十份交付物、UAT 字段、P2-WP01~
+P2-WP12 覆盖、五类验收角色、企业边界、缺陷门禁、培训/运维主题、第三阶段产品边界、
+264 项台账唯一性和阶段计划状态。结果为 `9 passed`。
+
+交付物包括 UAT 用例与报告、缺陷台账、签署清单、用户指南、运维手册、培训计划、第三阶段
+待办、功能台账审计和本证据文件。所有正式企业用例均禁止使用 `PASS_LOCAL`。
+
+## 3. UAT 覆盖
+
+24 条 UAT 用例中:
+
+- 20 条本地工程场景为 `PASS_LOCAL`;
+- 4 条企业正式场景为 `BLOCKED_EXTERNAL`;
+- `FAIL` 和 `NOT_RUN` 均为 0;
+- 覆盖 P2-WP01~P2-WP12,以及管理员、编辑者、查看者、第二业务域责任人和企业验收角色。
+
+本地场景引用已经存在的工作包说明、验证记录或测试文件;引用路径由契约逐项检查存在性。
+这些证据聚合不是一次企业真实来源上的端到端业务操作,不能用来填报正式生产指标。
+
+## 4. 角色与权限
+
+领域模板、主动元数据、语义、质量、可观测、责任、统一工作中心、数据产品、Agent 和安全
+治理十组 API 定向权限测试共 `28 passed`。覆盖管理员管理、编辑者运营、查看者只读和
+对象参与范围;第二业务域责任证据同时验证“责任不等于数据授权”。
+
+企业账号、组织目录、实际责任人、单点登录和账号生命周期尚未接入。企业单点登录已进入
+第三阶段 P3-01,不能把本地三级角色测试表述为 IdP 验收。
+
+## 5. 第二阶段能力与数据库证据
+
+领域模板、主动元数据、语义、质量、可观测、责任、工作中心、数据产品、Agent、安全和
+第二业务域实施包的核心/契约定向测试共 `77 passed`。同十个治理子系统的真实 PostgreSQL
+事务隔离集成测试共 `10 passed`。
+
+PostgreSQL 集成测试分别证明各子系统在真实约束下工作,P2-WP12 实施包证明十阶段证据可
+按同一业务域组合;两者都不是企业真实数据 UAT。测试事务已回滚,不把测试对象留作企业
+业务数据。
+
+## 6. 迁移、交付、安全与回滚
+
+P2-WP01~03 迁移契约、可观测迁移、责任 Schema、产品/Agent/安全契约、P2-WP11 产品
+工程、既有 WP13 交付契约以及 OpenAPI/路由可复现检查共 `51 passed`。本地 PostgreSQL
+`alembic current` 与源码 `alembic heads` 均为 `20260802_460 (head)`。
+
+本轮复核 P2-WP11 已归档的 360→460 隔离升级、六类就绪、迁移 dry-run、摘要对账和
+候选回滚证据,没有重复执行高成本完整离线包、卷备份和恢复演练。正式企业验收必须使用
+上一正式版本的签名完整制品和匹配备份,在企业预生产环境重新执行并签字。
+
+## 7. 缺陷结论
+
+- P0:0;未关闭 P0:0;
+- P1:0;未关闭 P1:0;
+- P2:0;P3:0;
+- 企业未执行事项登记为外部门禁,不伪造为产品缺陷。
+
+企业 UAT 后发现的问题必须补录严重度、复现与证据、根因、修复、定向验证和处置决定。
+P0 阻断验收;未关闭 P1 必须取得业务与技术负责人书面决定。
+
+## 8. 培训与移交
+
+用户操作指南、运维手册、用户培训和运维培训课程、练习、签到/问题/补训要求以及五方签署
+清单均已形成。材料就绪不等于培训完成;实际培训、运维独立演练、补训和签字仍为
+`BLOCKED_EXTERNAL`。
+
+## 9. 功能台账
+
+功能台账完成 264/264 项审计,264 个编号均唯一、成熟度非空。归一化分布为:已建设 43、
+工程完成 71、部分建设 80、规划中 61、能力预留 5、明确不扩展 2、兼容保留/退役中 1、
+影子模式 1。P2-WP05~07 等已形成能力但仍标“规划中”的记录已纠正,同时保留企业 UAT、
+平台集成和未建设部分,没有写成生产完成。
+
+## 10. 外部门禁
+
+- 企业真实第二业务域只读来源、脱敏批准、字段字典、游标和回退方式;
+- 企业实际管理员、编辑者、查看者、领域责任人、审批人和安全复核人;
+- 正式术语、质量阈值、SLO、产品合同、Agent 工具清单和风险政策;
+- 企业 APM、日志、告警、排班、SMTP/协作、ITSM、SIEM、DLP、KMS 和漏洞平台;
+- 目标规模容量、故障注入、断网安装、预生产升级/回滚和 RPO/RTO;
+- 用户培训、运维培训、缺陷确认及产品/业务/技术/安全/运维五方签字。
+
+上述事项完成前,第二阶段只能标记为“本地工程完成,可进入企业 UAT”。

+ 52 - 0
docs/validation/P2_WP13_FUNCTION_CENSUS_AUDIT.md

@@ -0,0 +1,52 @@
+# P2-WP13 功能模块台账审计记录
+
+## 1. 审计结论
+
+`docs/FUNCTION_MODULE_CENSUS_20260726.md` 已完成 264/264 条目机器计数和人工分组复核:
+模块编号共 264 个、唯一编号 264 个、空成熟度 0 个。审计后文件 SHA-256 为
+`7f4d2d4752766fcb524d0ee9a9ae70a388a6963fdc7a5da47598d2a1c0b79d3b`。
+
+本次只根据当前仓库的代码、测试、迁移、演练和既有工作包证据调整成熟度。企业真实数据、
+真实组织、正式环境或签字缺失时,只能标记为“工程完成,待企业 UAT”或“部分建设”,
+不能升级为更高成熟状态。
+
+## 2. 成熟度分布
+
+| 归一化成熟度 | 数量 |
+|---|---:|
+| 已建设 | 43 |
+| 工程完成 | 71 |
+| 部分建设 | 80 |
+| 规划中 | 61 |
+| 能力预留 | 5 |
+| 明确不扩展 | 2 |
+| 兼容保留/退役中 | 1 |
+| 影子模式 | 1 |
+| 合计 | 264 |
+
+归一化只取成熟度语义前缀,用于计数,不删除每条记录中的验收边界和剩余缺口。
+
+## 3. 本轮纠正的陈旧状态
+
+- GOV-02~11:复核联邦治理边界,补录通用责任角色、矩阵、继承、委派、跨域协同、中央策略和统一任务,并统一部分建设前缀;
+- CAT-17、CAT-23、CAT-26:补录保守字段血缘、四类健康信号和责任人纠错;
+- DQA-09:补录质量 SLA 已接入事故和通知链;
+- OBS-04~06:补录事故闭环、告警治理和业务影响,保留企业排班/渠道门禁;
+- WFC-04~12、WFC-15:补录条件路由、多人审批、时限、待办、工单、协作、通知和看板;
+- IAM-13、DFY-22:补充已形成能力与仍未建设边界。
+
+P2-WP01~P2-WP12 其他关联项此前已随各工作包更新,本次逐项复核后保持原成熟度,避免
+把局部实现误写成完整能力。例如全类型资产、通用质量评分、租户通知路由、综合业务域评分、
+动态脱敏执行、HA 和多租户仍是部分建设、规划中或能力预留。
+
+## 4. 十二大模块完整性
+
+台账仍保持 12 个一级分类,模块分级、功能项和成熟度字段完整。编号覆盖 IAM、GOV、CON、
+CAT、SEM、DQA/OBS、MKT、DFY、KAI、WFC、SEC 和 PLT,共 13 个编号前缀;DQA 与 OBS 共同
+属于“数据质量与可观测性”一级分类,因此不新增第十三个一级分类。
+
+## 5. 后续规则
+
+第三阶段每个工作包继续按同一规则更新台账:代码存在不等于可用,接口通过不等于生产,
+本地演练不等于企业 UAT。成熟度变更必须关联证据、剩余门禁和回滚边界;企业正式验收后
+再单独记录目标环境、签名制品、真实样本与签署结果。

+ 240 - 0
tests/test_p2_wp13_acceptance_handover_contract.py

@@ -0,0 +1,240 @@
+from __future__ import annotations
+
+import json
+import re
+from pathlib import Path
+
+ROOT = Path(__file__).resolve().parents[1]
+UAT_CASES = ROOT / "docs/acceptance/P2_WP13_UAT_CASES.json"
+UAT_REPORT = ROOT / "docs/acceptance/P2_WP13_UAT_PLAN_AND_REPORT.md"
+DEFECT_REGISTER = ROOT / "docs/acceptance/P2_WP13_DEFECT_REGISTER.md"
+SIGNOFF = ROOT / "docs/acceptance/P2_WP13_SIGNOFF_CHECKLIST.md"
+USER_GUIDE = ROOT / "docs/guides/DATAOPS_PHASE2_USER_OPERATION_GUIDE.md"
+OPERATIONS_HANDOVER = ROOT / "docs/runbooks/DATAOPS_PHASE2_OPERATIONS_HANDOVER.md"
+TRAINING = ROOT / "docs/training/DATAOPS_PHASE2_TRAINING_PLAN.md"
+PHASE3_BACKLOG = ROOT / "docs/roadmap/DATAOPS_PHASE3_BACKLOG.md"
+CENSUS = ROOT / "docs/FUNCTION_MODULE_CENSUS_20260726.md"
+CENSUS_AUDIT = ROOT / "docs/validation/P2_WP13_FUNCTION_CENSUS_AUDIT.md"
+EVIDENCE = ROOT / "docs/validation/P2_WP13_ACCEPTANCE_HANDOVER_EVIDENCE.md"
+PHASE2_PLAN = ROOT / "docs/DATAOPS_PHASE2_3_MONTH_DEVELOPMENT_PLAN_20260730.md"
+
+DELIVERABLES = (
+    UAT_CASES,
+    UAT_REPORT,
+    DEFECT_REGISTER,
+    SIGNOFF,
+    USER_GUIDE,
+    OPERATIONS_HANDOVER,
+    TRAINING,
+    PHASE3_BACKLOG,
+    CENSUS_AUDIT,
+    EVIDENCE,
+)
+
+P2_COMPLETED_LEDGER_IDS = {
+    "GOV-05",
+    "GOV-06",
+    "GOV-07",
+    "GOV-08",
+    "GOV-09",
+    "CAT-17",
+    "CAT-23",
+    "CAT-26",
+    "OBS-04",
+    "OBS-05",
+    "OBS-06",
+    "WFC-04",
+    "WFC-05",
+    "WFC-06",
+    "WFC-07",
+    "WFC-08",
+    "WFC-09",
+    "WFC-10",
+    "WFC-11",
+    "WFC-12",
+    "WFC-15",
+}
+
+
+def _read(path: Path) -> str:
+    return path.read_text(encoding="utf-8")
+
+
+def _cases() -> list[dict]:
+    payload = json.loads(_read(UAT_CASES))
+    assert payload["schema_version"] == "1.0"
+    assert payload["work_package"] == "P2-WP13"
+    return payload["cases"]
+
+
+def _ledger_rows() -> dict[str, list[str]]:
+    rows: dict[str, list[str]] = {}
+    for line in _read(CENSUS).splitlines():
+        match = re.match(r"^\| ([A-Z]{3}-\d{2}) \| (.+) \| (.+) \| (.+) \|$", line)
+        if match:
+            rows[match.group(1)] = [match.group(2), match.group(3), match.group(4)]
+    return rows
+
+
+def test_p2_wp13_deliverables_exist() -> None:
+    missing = [str(path.relative_to(ROOT)) for path in DELIVERABLES if not path.is_file()]
+    assert not missing, f"P2-WP13 交付物缺失: {missing}"
+
+
+def test_uat_cases_cover_all_work_packages_roles_and_external_boundaries() -> None:
+    cases = _cases()
+    assert len(cases) >= 24
+    required_fields = {
+        "id",
+        "work_packages",
+        "module_ids",
+        "title",
+        "actor",
+        "acceptance_level",
+        "preconditions",
+        "steps",
+        "expected",
+        "evidence",
+        "result",
+        "notes",
+    }
+    actors = {"admin", "editor", "viewer", "second_domain_owner", "enterprise_acceptance"}
+    for case in cases:
+        assert required_fields <= case.keys(), case.get("id")
+        assert case["id"].startswith("P2-WP13-UAT-")
+        assert case["actor"] in actors
+        assert case["acceptance_level"] in {"LOCAL_ENGINEERING", "ENTERPRISE_FORMAL"}
+        assert case["result"] in {"PASS_LOCAL", "FAIL", "BLOCKED_EXTERNAL", "NOT_RUN"}
+        assert case["work_packages"] and case["module_ids"]
+        assert case["preconditions"] and len(case["steps"]) >= 2
+        assert case["expected"] and case["evidence"]
+        if case["acceptance_level"] == "ENTERPRISE_FORMAL":
+            assert case["result"] != "PASS_LOCAL"
+
+    covered = {work_package for case in cases for work_package in case["work_packages"]}
+    assert {f"P2-WP{number:02d}" for number in range(1, 13)} <= covered
+    assert actors - {"enterprise_acceptance"} <= {case["actor"] for case in cases}
+    assert any(case["result"] == "BLOCKED_EXTERNAL" for case in cases)
+    assert not any(case["result"] == "FAIL" for case in cases)
+
+
+def test_local_uat_evidence_references_existing_workspace_files() -> None:
+    for case in _cases():
+        if case["result"] != "PASS_LOCAL":
+            continue
+        for reference in case["evidence"]:
+            path = ROOT / reference.split("#", 1)[0]
+            assert path.is_file(), f"{case['id']} evidence missing: {reference}"
+
+
+def test_acceptance_docs_are_explicit_about_local_and_enterprise_status() -> None:
+    report = _read(UAT_REPORT)
+    for phrase in (
+        "本地工程预验收",
+        "企业正式验收",
+        "不能替代企业真实数据 UAT",
+        "BLOCKED_EXTERNAL",
+        "P0",
+        "签字",
+    ):
+        assert phrase in report
+    for path in DELIVERABLES[1:]:
+        assert not re.search(r"\b(?:TBD|TODO)\b|\{\{[^}]+\}\}", _read(path)), path.name
+
+
+def test_defect_register_and_signoff_are_fail_closed() -> None:
+    defects = _read(DEFECT_REGISTER)
+    for field in ("缺陷编号", "严重度", "状态", "复现与证据", "处置决定"):
+        assert field in defects
+    for severity in ("P0", "P1", "P2", "P3"):
+        assert severity in defects
+    assert "P0:0" in defects
+    assert "未关闭 P1:0" in defects
+
+    signoff = _read(SIGNOFF)
+    for role in ("产品负责人", "业务负责人", "技术负责人", "安全负责人", "运维负责人"):
+        assert role in signoff
+    assert "不得预签" in signoff
+    assert "BLOCKED_EXTERNAL" in signoff
+
+
+def test_user_operations_and_training_materials_cover_handover_scope() -> None:
+    user_guide = _read(USER_GUIDE)
+    for topic in (
+        "管理员",
+        "编辑者",
+        "查看者",
+        "第二业务域责任人",
+        "主动元数据",
+        "语义",
+        "质量",
+        "事故",
+        "数据产品",
+        "Agent",
+        "安全",
+    ):
+        assert topic in user_guide
+
+    operations = _read(OPERATIONS_HANDOVER)
+    for topic in (
+        "每日巡检",
+        "每周巡检",
+        "备份",
+        "恢复",
+        "回滚",
+        "升级",
+        "异常升级",
+        "责任",
+        "移交清单",
+    ):
+        assert topic in operations
+
+    training = _read(TRAINING)
+    for topic in ("用户培训", "运维培训", "练习", "签到", "补训", "BLOCKED_EXTERNAL"):
+        assert topic in training
+
+
+def test_phase3_backlog_preserves_product_boundary_and_sso_gate() -> None:
+    backlog = _read(PHASE3_BACKLOG)
+    for field in ("待办编号", "来源模块", "优先级", "启动条件", "验收标准", "依赖", "目标阶段"):
+        assert field in backlog
+    for topic in ("单点登录", "OIDC", "IdP", "企业数据源", "多租户", "生产可观测", "第三业务域"):
+        assert topic in backlog
+    assert "不扩展为分析开发平台" in backlog
+
+
+def test_function_census_has_264_unique_audited_items_and_no_stale_p2_plans() -> None:
+    rows = _ledger_rows()
+    assert len(rows) == 264
+    assert all(row[2].strip() for row in rows.values())
+    for module_id in P2_COMPLETED_LEDGER_IDS:
+        assert rows[module_id][2] != "规划中", module_id
+
+    audit = _read(CENSUS_AUDIT)
+    assert "264" in audit
+    assert "264/264" in audit
+    assert "生产已建设" not in audit
+    assert "企业 UAT" in audit
+
+
+def test_phase2_plan_and_evidence_record_engineering_completion_without_formal_signoff() -> None:
+    plan = _read(PHASE2_PLAN)
+    section = plan.split("### P2-WP13 第二阶段验收与移交", 1)[1].split("## 8.", 1)[0]
+    assert section.count("- [x]") == 5
+    assert "本地工程完成" in section
+    assert "企业正式验收未完成" in section
+
+    evidence = _read(EVIDENCE)
+    for section_name in (
+        "文档契约",
+        "UAT 覆盖",
+        "角色与权限",
+        "缺陷结论",
+        "培训与移交",
+        "功能台账",
+        "外部门禁",
+    ):
+        assert section_name in evidence
+    assert "tests/test_p2_wp13_acceptance_handover_contract.py" in evidence
+    assert "PASS_LOCAL" in evidence
+    assert "BLOCKED_EXTERNAL" in evidence