# module: human-tool 职责: 人类工具的卡协议与回传校验:工单两模式(执行 / 验收)+ 对话卡族(决策 / 补全 / 评价)、 到达面两路、跨人卡、驳回重答、调人预算的环外强制、落地失败卡的预置形态 不负责: 卡内容由谁决定(loop 临场判定 / flow 步序声明给定,见范式引擎)、 落地预检与落地执行(见 release)、消息的存放与呈现(见 message,经 `MessageOutbox` 端口) 公开出口: index.ts - 类型:`HumanToolService` `IssueContext` `IssuedWorkOrder` `IssuedChatCard` `ReplyOutcome` `ArrivalSurface` `CardViolation` - 错误:`BareCallError` `ReplyRejectedError` `HumanCallBudgetExceededError` - 端口类型:`CardStore` `MessageOutbox` `MemoryRecorder` `HumanEventPublisher` `Clock` `IdGenerator` - 用例工厂:`createHumanToolService(deps): HumanToolService` - 纯函数:`checkWorkOrder` `checkChatCard` `checkWorkOrderReply` `checkChatCardReply` `arrivalOf` `producesCompletion` `allCriteriaGreen` - adapter:`createCardStore`;Drizzle 表:`workOrderTable` `chatCardTable` 层级: L3(编码规范 §4) 依赖: @contracts;@shared/db;port:`MessageOutbox`(app 注入 message)、 `MemoryRecorder`(app 注入 memory)、`HumanEventPublisher`(app 注入 event) 被依赖: release(落地失败卡)、loop-engine、flow-engine、task、org(停用前置检查的待答卡)、app 不变量(人类工具三规矩,OS 05): - **调用必附上下文**:`basis` 为空即 `BareCallError` —— 无上下文的裸调用基座拒发 - **回传即留痕**:每次回传都写任务记忆并以人事件抛回任务,无静默通道 - **完成只出自放行通过**:`producesCompletion` 仅在验收工单 `verdict === 'pass'` 时为真; 判据全绿只是可提交,认账永远是人的动作 - **驳回必附意见**:驳回而无意见即 `ReplyRejectedError` - **只增不改**:已回传的工单 / 已作答的卡不得再答;驳回重答是新卡实例,原卡闭合 - **到达面两路**:收件人 = 负责人 → 任务对话流;否则 → 系统消息(跨人卡不是责任转移) - **调人预算环外强制**:超过契约声明的打扰上限即 `HumanCallBudgetExceededError`, 活动代码无从自查自守 - **落地失败卡是执行工单的 preset**,不构成第五种卡