# 数据规则 M5 验收记录(2026-07-24) ## 1. 验收范围 M5 对 M3A–M4 已交付的自然语言编写、封闭规则契约、SQL/Polars 执行、证据持久化、 数据标准/数据流程产品面和数据工厂生命周期做最终收口。完成声明以可重算证据和 自动化测试为准,不以页面存在或接口可调用代替。 ## 2. 真实模型验收 - Provider:本机 loopback OpenAI-compatible 服务。 - 模型:`Qwen/Qwen3-1.7B`,Transformers + PyTorch CPU;当前沙箱无 Metal, 因此不能把它描述为 MLX 测试。 - 输入:中文手机号标准化、11 位断言/隔离、按客户和更新时间去重。 - 控制:温度 0、封闭嵌套 JSON Schema、最多两次确定性修复、无语义 fixture、 无模型输出直接执行。 - 证据:`docs/acceptance/data-rule/real-qwen-authoring-evidence.json`。 真实模型门槛是:模型生成版本、候选类型和完整 `rule_spec`;候选通过确定性校验; 包含 normalize/assert+quarantine/deduplicate 三步语义;歧义为空;置信度不低于 本地 canary 阈值 0.5;保留模型、Prompt、上下文和候选四类 Hash。生产默认自动化 阈值仍为 0.85,M5 测试不降低生产策略。 `candidate_type=rule` 时省略 `standard_spec` 只做确定性规范化为 `null`。显式 `null` 与省略后的 canonical candidate Hash 完全一致;版本、类型和规则正文仍必须 由模型产生。 ## 3. 容量验收 可重算证据: - `docs/validation/data-rule-m5-capacity-targets.json` - `docs/validation/data-rule-m5-capacity-evidence.json` | 后端 | 行数 | 总耗时 | 吞吐(行/秒) | 峰值内存 | 连接池峰值 | 制品大小 | |---|---:|---:|---:|---:|---:|---:| | SQL pushdown | 100,000 | 0.165s | 606,851 | 3.53 MiB | 1 | 0 | | SQL pushdown | 1,000,000 | 1.380s | 724,725 | 10.06 MiB | 1 | 0 | | SQL pushdown | 10,000,000 | 14.812s | 675,136 | 10.06 MiB | 1 | 0 | | Polars batch | 100,000 | 0.033s | 3,020,635 | 62.55 MiB RSS | 0 | 0.18 MiB | | Polars batch | 1,000,000 | 0.058s | 17,233,518 | 243.92 MiB RSS | 0 | 1.51 MiB | | Polars batch | 10,000,000 | 0.448s | 22,308,913 | 1.176 GiB RSS | 0 | 14.73 MiB | 预算为 Runner 2 GiB、数据源池 2、单制品 512 MiB。10M Polars RSS 为 1.176 GiB, 低于 2 GiB;14.73 MiB Parquet 制品低于 512 MiB。SQL 内存是 PostgreSQL `EXPLAIN ANALYZE` 报告的峰值算子内存,Polars 是进程 RSS,两者口径已写入证据。 ## 4. 失败与安全验收矩阵 | 场景 | 可执行证据 | |---|---| | 计划正文/Hash 篡改、撤销计划 | `tests/runner/test_rules.py`、`tests/integration/test_data_rule_sql_execution.py` | | 发布后 Schema drift | `tests/core/data_rules/test_deployment.py`、`tests/core/data_rules/test_schema_resolver.py` | | 过期/损坏/超限制品 | `tests/runner/test_artifacts.py` | | 缺失或轮换数据源凭据 | `tests/core/data_rules/test_execution_contracts.py`、`tests/integration/test_runner_datasource_pool.py` | | 重复/过期/篡改任务令牌 | `tests/runner/test_task_tokens.py`、`tests/runner/test_replay_store.py` | | Runner 重启/lease 丢失 | `tests/runner/test_rule_evidence.py` | | Kestra 重启前后及定义漂移 | `tests/core/data_rules/test_deployment.py`、`tests/integration/test_kestra_runner_execution.py` | | 写失败和 known/unknown commit | `tests/runner/test_rule_evidence.py` | | 未授权发布/部署/激活/回滚 | `tests/test_permission_matrix.py`、`tests/test_data_rule_api.py` | | 违规样本脱敏和 TTL 删除 | `tests/runner/test_rule_evidence.py`、`tests/runner/test_artifacts.py` | | 激活/回滚原子性与恢复旧 active | `tests/integration/test_data_factory_postgres_lifecycle.py` | ## 5. 数据产品完整链 完整链的分层证据是: 1. 作者代理把数据标准/数据流程的自然语言转换成封闭 `RuleSpec` 并保留四类 Hash。 2. PostgreSQL 集成测试发布不可变 RuleVersion/StandardVersion,解析并发布 DataFlowVersion,固定规则、标准、Schema 与计划 Hash。 3. SQL 和 Polars 集成测试使用真实 PostgreSQL/MySQL/MinIO 数据和制品执行规则。 4. 数据工厂生命周期测试以 disabled → canary → active → rollback 运转, 回滚后验证旧 active 精确恢复;操作具备幂等、lease 和 unknown reconcile。 5. Kestra/Runner 合同测试证明调度层只传不可变引用、Hash 和短期令牌。 ## 6. 发布判定 满足以下所有条件后,目标环境才可显式打开 `DATA_FACTORY_ACTIVATION_ENABLED=true`: - 真实模型、容量、SQL、Polars、生命周期、安全矩阵测试通过; - 完整 Python 测试、前端生产构建和 release-copy/OpenAPI parity 通过; - Docker 中 PostgreSQL、Neo4j、MinIO、Kestra、Runner、Backend、Frontend 健康; - 浏览器验收确认数据标准、数据流程和数据工厂三处没有回退到旧的自由文本代码路径。 任一条件未满足时能力继续失败关闭,不能把局部链路通过报告为完整投产。