# Etunel 任务消息流程

准备派发、补充、跨角色中继、返回、完成、阻塞或结算 Hub 入站消息时读取。当前 Hook 和 MCP schema 是工具名、参数与授权的最终依据；本文只约束职责和消息意图。

## 标识与身份

| 标识 | 含义 |
|---|---|
| WORK_ID | 贯穿项目生命周期的工作容器 |
| 流程基线／阶段 | 当前 WORK_ID 已登记的流程版本与位置 |
| 任务波次 | 同一有效基线下依赖已满足、可连续派发的一组任务 |
| SUBTASK_ID | 一个主责角色和主责成员可独立判定的一项任务 |
| role/member/session | 语义角色、实际角色实例、主责成员和绑定会话 |
| message_id | 一条 Etunel 消息的单跳关联或结算标识 |

正文已有有效标识时复用。已终态 SUBTASK_ID 不重新作为活动任务；运行时字段命名不同则按实际 schema 映射。

## 工具职责

| 意图 | 调用者 | Etunel 工具 |
|---|---|---|
| 向一个角色派发一条任务消息 | Hub | etunel_send_to_role，kind=task |
| 向同一来源角色返回信息或终态状态 | Hub | etunel_send_to_role，kind=reply 或 kind=status，并按 schema 关联来源 message_id |
| Hub 已处理入站且无需回复 | Hub | etunel_complete_coordination |
| 成员向 Hub 补充、聚合询问或报告非终态状态 | 成员 | etunel_send_to_hub |
| 成员成功结束自己的任务 | 主责成员 | etunel_complete_task |
| 成员以具体阻塞结束自己的任务 | 主责成员 | etunel_report_blocked |
| 读取当前消息列出的必要附件 | 当前绑定会话 | etunel_receive_message |

工具未暴露、名称或参数不同，以当前 Hook 和 schema 为准并报告能力缺口；不得猜参数或请求内部授权字段。

## 任务波次如何发送

etunel_send_to_role 一次调用只发送一个接收角色和一条消息：

- 同一角色多个独立 SUBTASK_ID 可连续发送，由 Etunel 队列处理；
- 同一角色紧密相关且共同交付的内容可合并为内聚任务包；
- 不同角色的依赖就绪任务分别发送、独立返回；
- 排队不代表角色业务并行完成，也不代表下游依赖已经满足。

Hub 不实现队列、ACK、锁、重试、去重或文件传输；这些由 Etunel 软件承担。

## Hub 发送任务

每条正式任务消息应包含：

- WORK_ID、SUBTASK_ID、模式、流程基线、阶段和波次；
- semantic role、实际 role ID、主责成员、session、human owner 和协作角色；
- 目标、背景、上游成果、输入版本和成果引用；
- IN_SCOPE、OUT_OF_SCOPE、依赖、接口、限制和风险；
- 指定成果及最低内容、证据、版本、下游用途；
- 要求完成时间、完成条件和职责内结论；
- 专业自审和 human owner 确认要求；
- 信息不足、额外产出和阻塞的处理边界。

纯信息、澄清或授权消息写清问题、已确认事实、影响、选项和所需答复，不要求空文件。不要转发无关聊天、全量计划或无法消化的资料堆。

## 成员请求补充

成员先询问自己的负责人并完成必要线下沟通。仍需 Hub 时，用一条 etunel_send_to_hub 写清：

- SUBTASK_ID、已完成工作和现有成果；
- 聚合后的缺失信息／决定及用途；
- 已向负责人询问和线下协调的结果；
- 对结论、范围、期限、风险和下游的影响；
- 建议的信息所有者角色；
- 当前仍可继续的范围与希望 Hub 返回的具体内容。

Hub 已有登记答案时一次补足；没有时才产生必要的跨角色查询或任务。

## 经 Hub 的跨角色中继

当前 Etunel 没有成员间直连工具。跨角色交流必须是：来源成员 → Hub → 目标成员 → Hub → 来源成员。

- Hub 忠实保留问题、适用范围和来源，不替任一角色作专业改写；
- 目标角色返回前完成专业自审和负责人确认；
- Hub 校验并登记确认结论后，才向来源角色返回最小必要内容；
- 给另一个角色的新 task 是独立消息，不能拿来源角色的 message_id 充当跨角色结算；
- 只有按当前 schema 返回同一来源角色的关联 reply/status 才结算该来源协调项；
- 一个跨角色 task 的发送不能替代对原入站消息的正确处理。

默认一次聚合请求和一次答复；复杂异常使用 Meeting Decision Record，不把多轮聊天当成项目事实。

## Project Status Snapshot

状态快照只由 Hub 向受影响角色发送，是裁剪后的状态同步，不是新专业任务、成果或门禁。写明变化、有效版本、对接收方影响、下一步、责任方和期限；同一处理轮聚合一次。若需要角色执行动作，应另有明确 task 或按当前 schema 明确消息意图。

## 成员完成或阻塞

调用 etunel_complete_task 前，确认指定成果、证据、版本、期限状态、专业自审、负责人确认和明确结论均已包含。

调用 etunel_report_blocked 时至少说明：

- 阻塞条件；
- 已完成成果和已尝试排查／负责人／线下协调；
- 缺失输入或决定及建议责任人；
- 对本任务和下游的影响；
- 恢复条件和建议下一步。

成员只能结束自己的任务。Hub 不能代成员完成或阻塞；成员不能结算 Hub 的协调消息。

## Hub 处理成员入站

Hub 对每条入站消息选择：

- 需要向同一来源角色回复：按 schema 发送关联 reply/status；
- 无需回复且已处理：调用 etunel_complete_coordination；
- 需要其他角色：正确处理来源协调项，并按依赖创建一个或多个必要任务；
- 同一轮到达多个相关结果：先更新成果、状态和依赖，再统一选择下一波次。

消息结算、排队和送达不代表 SUBTASK_ID、成果、阶段或 WORK_ID 完成。

## 附件

直接使用当前消息正文和内嵌内容。仅当消息明确列出附件且为当前任务必要输入时，调用 etunel_receive_message 获取所需附件。不要为探测队列或重复确认而读取。
