# module: task 职责: 任务运行时:生命周期与**终态五名裁定**、Harness 预算执行器 / 停滞熔断、 控制三语义、改派、断点续跑的就绪判定、封卷与蒸馏钩子的触发 不负责: 范式的推进逻辑(见 loop-engine / flow-engine,经 `ParadigmEngine` 端口)、 放行与落地(见 release)、工作流的编排与聚合(见 process) 公开出口: index.ts - 类型:`TaskService` `Task` `StartTaskInput` `TickOutcome` `Consumption` `HarnessVerdict` `ControlOutcome` `TerminalCause` `ResumeReadiness` - 错误:`TaskNotFoundError` `TaskAlreadyTerminalError` - 端口类型:`TaskStore` `ActivityLoader` `SchemaValidator` `ParadigmEngine` `MemoryRecorder` `ListenerProbe` `PersistenceProbe` `TaskEventPublisher` `ReassignNotifier` `InteractionPhaseSetter` - 用例工厂:`createTaskService(deps): TaskService` - 纯函数:`judge` `budgetBreaches` `isStalled` `terminalOf` `durationMs` `applyControl` `decideTerminal` `isSuccess` `triggersFailureDisposition` `resumeReadiness` `isPassiveOpen` `landingBlocked` `rejectionKeepsRunning` - adapter:`createTaskStore`;Drizzle 表:`taskTable` 层级: L6(编码规范 §4) 依赖: @contracts;@shared/db;loop-engine / flow-engine / activity-registry(L5/L4); port 注入:memory / event / message / interaction / ledger 被依赖: process, org(停用前置检查的在途任务), report, app 近变(2026-08-25):`TaskService.wake(taskId)` —— 人答复落库那一刻就把 runtime 翻成 `running` 并 setPhase('active')(顺带广播);只对 awaiting-event / awaiting-human 生效, 已终结 / suspended / 已在跑的原样不动并返回 false。回传路由在返回之前调它, 让对话区(卡状态)与工作区(runtime)读到同一份事实。 近变(2026-07-30):`Task` / `StartTaskInput` 加 `origin?`(`testbed` = 设计台试跑)+ `sys.task.origin` 列。**认得出试跑单才拔得掉** —— 工作流那侧靠 `source->>'ref'='testbed'` 认,任务这侧从前没有对应记号: 「试跑一个活动」起出来的单(不挂工作流)与登记直起单长得一模一样。 不变量(OS 04 / 4.3,AM 10 / 12.1): - **受理归一**(2026-07-30 宽进,替代旧 AM 12.1「缺项不得启动」):输入可以不定或为空 —— 缺必填不拒单,任务落成 `awaiting-human`,缺的字段做成补全卡(`IntakeDesk` 端口)发给 负责人并武装 human 监听;答复只收契约声明过的键,合并进 data,齐了(或答「没法填」) 才转 running 开跑。等人期间谱一步不走、不扣步数;补全不占活动的人卡预算 - **恰一负责人**:任务必绑定恰一个 `ownerId`;改派**留痕并通知双方** - **输入必过 schema**:`data` 缺项**不得启动**;`message` 计入初始观察但不得扩大授权 - **预算环外强制**:每一拍先 `judge` 再交引擎 —— 活动代码无从自查自守; 任一项触顶即 `exhausted`,空转即 `stalled` - **监听中是健康态**:有监听在等或等人回传一律**不算停滞** - **终态五名封闭**:`decideTerminal` 是唯一命名口;`released` 是唯一成功终态 - **已终结不得再推进**:`tick` / `deliver` 对终态任务抛 `TaskAlreadyTerminalError` —— 流级重做一律重开新实例,不复活旧任务 - **叫停不是终态**:转挂起待纠偏,并记**最重档纠正信号** - **封卷触发蒸馏**:终态后 `seal` + `distill`,产出活动记忆候选条目 - **断点续跑靠三份持久状态**:任务记忆 / 草稿层 / 运行时实例状态,缺一即不可续