适用范围:数据标准与数据流程的自然语言规则编写、不可变规则/标准版本发布、 数据生产线发布,以及数据工厂中的 disabled 部署、canary、激活和回滚。
component_binding_id、execution_plan_hash 和短期任务令牌。RuleVersion、编译器和执行证据。标准条款固定到
StandardVersion,数据流程发布时再冻结为 DataFlowVersion 包。DataFlowVersion。不得修改自然语言、
RuleSpec、规则顺序或重新编译业务语义;语义变化必须回到设计态创建新版本。DATA_FACTORY_ACTIVATION_ENABLED 默认关闭。只有本手册的发布门禁通过后,
才能在目标环境显式设为 true。本地验收栈至少包含 PostgreSQL、Neo4j、MinIO、Kestra、Runner、Backend 和 Frontend。执行:
docker compose -f deploy/docker/docker-compose.yml ps
curl -fsS http://127.0.0.1:15500/health
curl -fsS http://127.0.0.1:15600/health
curl -fsS http://127.0.0.1:18080/api/v1/health
curl -fsS http://127.0.0.1:19000/minio/health/live
继续部署前应确认:
/api/rules/capabilities 对未通过门禁的环境仍返回
data_factory_activation=false。排障和变更单必须同时记录:
rule_version_id、rule_spec_hash、模型/Prompt/上下文/候选 Hash;standard_version_id 与固定的规则版本;dataflow_version_id、package_hash;deployment_id、binding_hash、schema_snapshot_hash;execution_plan_hash;workflow_spec_hash、schedule_hash、engine_definition_hash;任一 Hash 与部署快照不一致时必须停止激活,不能现场重新生成或“修复”计划。
以下命令中的令牌、ID 和幂等键均由调用方安全注入;示例不包含凭据。
# 能力检查
curl -fsS -H "Authorization: Bearer $DATAOPS_OPERATOR_TOKEN" \
http://127.0.0.1:15500/api/rules/capabilities
# disabled 部署
curl -fsS -X POST \
-H "Authorization: Bearer $DATAOPS_OPERATOR_TOKEN" \
-H "Content-Type: application/json" \
http://127.0.0.1:15500/api/rules/deployments/$DEPLOYMENT_ID/deploy-disabled \
-d '{"idempotency_key":"change-id:deploy","reason":"approved change"}'
# canary
curl -fsS -X POST \
-H "Authorization: Bearer $DATAOPS_OPERATOR_TOKEN" \
-H "Content-Type: application/json" \
http://127.0.0.1:15500/api/rules/deployments/$DEPLOYMENT_ID/canary \
-d '{"idempotency_key":"change-id:canary","reason":"approved canary"}'
# 激活
curl -fsS -X POST \
-H "Authorization: Bearer $DATAOPS_ACTIVATOR_TOKEN" \
-H "Content-Type: application/json" \
http://127.0.0.1:15500/api/rules/deployments/$DEPLOYMENT_ID/activate \
-d '{"idempotency_key":"change-id:activate","reason":"canary passed"}'
# 回滚到部署快照记录的上一 active 版本
curl -fsS -X POST \
-H "Authorization: Bearer $DATAOPS_ROLLBACK_TOKEN" \
-H "Content-Type: application/json" \
http://127.0.0.1:15500/api/rules/deployments/$DEPLOYMENT_ID/rollback \
-d '{"idempotency_key":"incident-id:rollback","reason":"incident rollback"}'
不要复用别的操作者、动作或业务原因的幂等键。响应丢失或外部状态不明时,先调用对应
reconcile-deploy、reconcile-activate 或 reconcile-rollback,不得换键重试。
Canary 只有同时满足下列条件才算通过:
committed 或明确 rolled_back,不能是 unknown;/api/rules/rule-versions/{id}/evidence。/api/rules/catalog/assets/{asset_type}/{id}/evidence。rule_runs 记录执行状态、计数、计划 Hash、提交结果和 correlation ID。rule_violation_samples 只保存脱敏且有界的引用,不保存秘密或完整敏感行。rule_artifacts 保存 digest、Schema、行数、大小、过期时间和 MinIO 引用。过期清理必须同时删除目录行和服务端拥有的 MinIO 对象,并按 correlation 范围执行。 业务数据、非规则前缀对象或未过期制品不得被清理。
| 故障域 | 先检查 | 处置 |
|---|---|---|
| 模型 | Provider 健康、超时、模型/Prompt Hash、歧义与置信度 | 不执行未验证输出;允许有界确定性修复,仍失败则请求澄清或切换已批准模型 |
| 编译器 | 算子/方言支持、Schema Hash、计划状态 | 不允许 best-effort 改义;回到设计态修改并发布新版本 |
| Runner | 任务令牌、计划 Hash、lease/heartbeat、提交结果 | 重放令牌直接拒绝;unknown 先对账和 reconcile,不能盲目重跑 |
| 数据源 | 定义版本、secret reference、连接池、Schema drift | 轮换凭据只改秘密存储;重新绑定/发布,不把凭据放入请求 |
| MinIO | digest、TTL、Schema、对象所有权、大小限制 | 损坏或过期制品拒绝读取;从上游受治理节点重建 |
| Kestra | Flow Hash、execution、disabled/active 状态 | 重启后按服务端快照 reconcile;不得直接在 Kestra UI 修改业务 Flow |
| 写入 | 幂等策略、目标唯一键、commit outcome | 明确失败可按策略重试;未知提交结果先查目标与 ledger |
紧急回滚仍必须走受治理 API。若激活/回滚操作 lease 丢失,旧操作者不得补偿新 owner 的 Flow;先恢复或对账持久化 operation,再继续。
PYTHONPATH=. .venv/bin/pytest -q tests/core/data_rules tests/runner
PYTHONPATH=. .venv/bin/pytest -q \
tests/integration/test_data_rule_sql_execution.py \
tests/integration/test_data_rule_polars_execution.py \
tests/integration/test_data_factory_postgres_lifecycle.py
PYTHONPATH=. .venv/bin/pytest -q \
tests/e2e/test_ai_rule_to_data_product.py \
tests/performance/test_rule_execution_capacity.py
npm --prefix frontend run build
容量证据位于 docs/validation/data-rule-m5-capacity-evidence.json,真实本地模型证据位于
docs/acceptance/data-rule/real-qwen-authoring-evidence.json。两者均不包含凭据、
完整 Prompt 或数据样本。