Files
ecm_sync_system/docs/node_state_definition.md
T
strepsiades 4a9c444b10 first commit
2026-03-09 16:31:42 +08:00

80 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 节点状态定义(业务核心)
本文档定义 `SyncNode` 的状态字段语义,并说明状态机如何把这些语义形式化为可执行规则。
## 1. 节点状态字段
### `binding_status`
- 含义:绑定判定结果,决定节点是否允许进入 create/update。
- 取值:`UNCHECKED | NORMAL | MISSING | PEER_CREATING | WARNING | ABNORMAL | DEPENDENCY_ERROR`
### `action`
- 含义:本轮同步意图。
- 取值:`NONE | CREATE | UPDATE | DELETE`
- 说明:本项目当前主路径使用 `NONE/CREATE/UPDATE`
### `status`
- 含义:执行状态。
- 取值:`PENDING | IN_PROGRESS | SUCCESS | FAILED | SKIPPED | PRECONDITION_FAILED`
### `data_id`
- 含义:目标系统业务主键是否就绪。
- 关键语义:`UPDATE` 路径要求目标节点具备 `data_id`,否则进入 `PRECONDITION_FAILED`
### `error`
- 含义:阻断/失败原因。
- 说明:依赖错误与执行错误都在该字段记录可读原因。
## 2. 绑定状态业务语义
| binding_status | 业务语义 | 是否允许进入 create/update |
|---|---|---|
| `UNCHECKED` | 尚未执行 bind 判定 | 否 |
| `NORMAL` | 绑定链路健康,可做差异检测与同步 | 是 |
| `MISSING` | 无绑定记录,需做依赖检查与自动绑定/创建策略 | 有条件 |
| `PEER_CREATING` | 对侧创建进行中(等待创建提交) | 否(等待 E20 提交) |
| `WARNING` | 风险态(如自动绑定歧义/关闭) | 否 |
| `ABNORMAL` | 数据损坏或核心绑定异常 | 否 |
| `DEPENDENCY_ERROR` | 依赖不可满足 | 否 |
## 3. create / update 语义
### create
- 来源:`MISSING` 节点在策略允许时生成目标 `CREATE` 节点。
- 形式化:`E20/E21` + `spawn_target_node_state: S06`
### update
- 来源:`NORMAL` 节点差异检测后生成目标 `UPDATE`
- 形式化:`E30`
- 前置失败:目标缺 `data_id` 或依赖 ID 解析失败时进入 `S08`,且必须 `action=UPDATE`
## 4. 执行状态语义(datasource
- `SUCCESS`:执行成功,必要时回填 `data_id`
- `FAILED`:执行失败,保留错误。
- `IN_PROGRESS`:异步任务进行中。
- `SKIPPED`handler 决策跳过;若由 UPDATE 降级为 NONE,则进入 `S14`
- `PRECONDITION_FAILED`:准备阶段失败,不进入实际 API 提交。
## 5. 状态机形式化映射
状态机把“业务语义”变成“可执行迁移”:
- 语义输入:strategy/datasource 提供 `context`
- 迁移判断:`StateMachineRuntime.dispatch(current_state, event_id, context)`
- 状态落地:`Decision.to_state` 对应 YAML `states[Sxx]`
- 不变量:每次落地后执行 `runtime.check_invariants()`
## 6. 关键一致性约束
- `UNCHECKED` 不允许带动作(`INV-1_UNCHECKED_ACTION_NONE`)。
- 阻断态(`ABNORMAL/WARNING/DEPENDENCY_ERROR`)不允许动作(`INV-2_BLOCKING_NO_ACTION`)。
- `PRECONDITION_FAILED` 必须 `action=UPDATE``INV-3_PRECOND_IMPLIES_UPDATE`)。
## 7. 当前默认依赖语义(业务取向)
以下是当前代码默认策略,不是单纯命名差异:
- 空依赖引用允许放行(`allow_empty_dependency_ref=True`)。
- 依赖节点缺失 `data_id` 默认允许放行(`allow_missing_dep_data_id=True`)。
这意味着:`DEPENDENCY_ERROR` 的触发更偏向“依赖节点不存在或状态异常”,而不是“依赖节点尚未回填 data_id”。如果要改为严格模式,需要在 strategy 语义层切换该策略并同步文档。