
oh-my-openagent:task_send always-steer 变更的 HEAVY 自审——证据标准、11 项编程复盘与源码级印证【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent本文以 oh-my-openagent 仓库中一份真实的变更自审记录.omo/evidence/20260727-senpi-task-always-steer/06-self-review.md为主体完整解读其HEAVY 级自审是如何组织的从成功标准的逐条证据核验、11 项编程后写复盘、check-no-excuse-rules规模检查到评审驱动清理的落地方式并结合senpi-task的现行源码schema、路由、渲染器、steering 引擎印证每个结论的实际实现位置帮助读者掌握一次公共工具接口收缩变更的完整自审方法论。背景这次改动的内容与验证等级自审记录对应的变更是从task_send的公共输入面中移除deliver_as投递模式选项使普通文本消息无条件以 steer 方式送达运行中的子任务。变更元数据记录在同目录的证据清单 README.md 中验证等级TierHEAVY——因为改动触及公共task_sendschema 与任务会话消息投递语义属于接口级变更分支fix/senpi-task-always-steer基线origin/dev的f2ae25041。四条成功标准成功判据全部继承自证据 READMEtask_send不暴露任何deliver_as属性且普通子任务消息无条件请求 steer运行中子任务与已退出常驻任务finished-resident的行为通过真实任务面real task surface在不带投递选项的情况下工作正常聚焦测试、senpi 兼容性、typecheck、build 与变更文件诊断全部干净Reviewer 批准且 PR 以仓库要求的 merge commit 合入。从当前仓库源码看这条公共契约已经稳定存在。send-schema.ts 定义的TaskSendParams只有五个字段其中没有任何投递模式export const TaskSendParams Type.Object({ to: Recipient, message: Type.Optional(Type.Union([PlainMessage, StructuredMessage])), team_run_id: Type.Optional(Type.String({ description: Team run id for lead-to-member messages or shutdown messages. })), summary: Summary, all_scope: Type.Optional( Type.Boolean({ description: Allow messaging a child owned by another session. Off by default. }), ), })参数语义对照参数类型说明tostring子任务 id/name 或团队成员名*表示广播lead-onlymessagestring 或结构化对象普通文本或{type:shutdown_request}/{type:shutdown_response, approve, reason?}team_run_idstring可选lead 发给成员、或 shutdown 消息使用的 team run idsummarystring可选团队消息的单行摘要all_scopeboolean可选默认关允许给其他会话拥有的子任务发消息而在路由层 send.ts普通字符串消息被硬编码为 steer 投递const outcome await manager.sendToTask({ idOrName: params.to, message: params.message, deliverAs: steer, // 公共面不再有选择权一律 steer ...(callerSessionId ! undefined ? { callerSessionId } : {}), ...(params.all_scope true ? { allScope: true } : {}), })工具描述send.ts 的DESCRIPTION也与之对齐Plain-text messages always steer a running child immediately.。这就是自审中行为敏感证据所锚定的公共契约。Criterion review四条标准的证据逐条核验自审文档的第一部分06-self-review.md逐条回应成功标准每条都给出证据具体到行为而非测试通过了这类模糊表述Criterion 1schema、runtime、renderer 三层均有 RED→GREEN 证据且证据是specific and behavior-sensitive具体且对行为敏感的。对应的就是 send-always-steer.test.ts 中的三个测试公共契约测试检查tool.parameters.properties的键名不含deliver_as且工具描述中不含deliver_as、followUp、interrupt字样路由测试mock 一个SendManager断言runTaskSend传给引擎的SendInput严格等于{ idOrName, message, deliverAs: steer, callerSessionId }且返回details为{ kind: steered, delivered: steer }渲染测试renderTaskSendCall输出的行包含task_send to:st_1与消息摘要但不包含deliver:前缀。这三个断言分别钉死 schema、runtime、renderer 三层——任何一层回退都会让对应测试失败这正是行为敏感的含义。Criterion 2运行中子任务的 steer 走真实 Senpi RPC 验证通道live running-child steer passed through the Senpi RPC harness常驻任务复活走直接的 changed-library driverresident revival passed through a direct changed-library driver。同时如实披露一个更宽范围的 mock-provider E2E 失败发生在task_send之前与本次变更无关但被记录在案。Criterion 3package 测试、兼容性、typecheck、build 与 diff 检查全部通过LSP 当时不可用这一缺口同样被显式披露而非掩盖。Criterion 4评审/合并状态为pending PR/reviewer/merge——自审记录的是当时的真实状态不越权声明已完成。这种通过项 披露项 待办项三分法是证据型自审区别于普通 checklist 的关键不完美之处也进入记录。Programming post-write review11 项编程后写复盘自审的第二部分按 11 项标准逐一给出 PASS/FAIL 判定每项都附带了可核验的理由。以下完整继承原文结论并逐项给出当前仓库中的源码印证单一职责Single responsibilityPASS。send-schema.ts拥有公共输入 schemasend.ts拥有task_send路由renderers.ts拥有控制类工具渲染新增的测试拥有 always-steer 公共契约。从源码结构看这四个文件确实各守一职send-schema.ts 只导出 schema 与类型守卫isStructuredMessagerenderers.ts 只产出渲染组件不触碰任何状态。边界纯度Boundary purityPASS。TypeBox 保持边界解析器角色移除deliver_as之后非法投递模式在TaskSendInput类型中不可表示unrepresentable。这正是用类型消除非法状态的实例——不需要运行时校验来拒绝一个在类型层面就不存在的值。变体判别Variant discriminationPASS。结构化消息与结果变体仍用assertNever做穷举 switch。当前 renderers.ts 的taskSendResultRow对SendResultDetails的 15 个变体逐一case末尾default: return assertNever(details)——新增任何结果变体而忘记渲染会直接编译/运行时报错。逃生舱Escape hatchesPASS。没有新增any、类型抑制、非空断言或被忽略的诊断。防御层Defensive layerPASS。补丁是移除过时的投递校验分支而不是添加冗余检查。这与 send.ts 的现状吻合validateParams现在只校验message 必填和shutdown 拒绝必须带 reason两条业务规则。一次性助手One-off helpersPASS。没有引入新的生产环境辅助函数。测试PASS。回退 schema/runtime/renderer 的改动能复现捕获到的三个 RED 失败。这与证据目录中01-red-focused-tests.txt/02-green-focused-tests.txt两份原始测试输出配套见 证据目录。参数膨胀Parameter bloatPASS。没有函数新增参数validateParams从三个参数简化到一个参数。当前源码 send.ts 中function validateParams(params: TaskSendInput)恰为单参数签名。冗余验证Redundant verificationPASS。运行时清理检查是 QA 收据QA receipts不是生产环境 setter/getter 的重复。负面命名Negative namingPASS。没有新增否定式命名的生产符号。日志LoggingPASS。日志行为零变化。值得注意的是第 2 项与第 5 项的组合逻辑先让非法状态不可表示再删掉为它服务的校验——收缩型变更的正确顺序反过来做先删校验会留下类型谎言。Size checkcheck-no-excuse-rules 规模检查自审第三部分记录了针对变更文件的规模检查命令与结果原样继承bun run packages/omo-senpi/plugin/skills/programming/scripts/typescript/check-no-excuse-rules.ts 14 changed TypeScript files结果No violations in 14 file(s).这个脚本的用途是静态扫描变更后的 TypeScript 文件拦截借口型代码违反既定编码纪律的写法。需要说明一个仓库现状差异自审记录引用的是packages/omo-senpi/plugin/...下的脚本路径而从当前仓库结构看该脚本现在位于 check-no-excuse-rules.tsshared-skills包内且有配套的 check-no-excuse-rules.test.ts即技能脚本在后续版本中从 omo-senpi 插件目录迁移到了共享技能包。复现此检查时应以当前仓库的实际路径为准。14 个变更文件与第 8 项复盘无新增参数共同构成规模约束变更面被压缩到 schema、路由、渲染、类型、引擎清理与测试的闭包之内。Review-driven cleanup评审驱动的死代码清理自审最后一部分记录了一个由评审过程发现的清理项公共选项移除后控制层的SendManager、SendResultDetails与渲染器中仍残留不可达的 interrupt/no-op 变体。这些死掉的公共控制变体被移除同时保留了底层 manager/steering 的 interrupt API供内部生命周期与对抗性测试使用。这句话对应源码中的两处现状公共面已收缩types.ts 中的SendResultDetails结果联合类型里steered变体的delivered字段类型是字面量steer{ readonly kind: steered; ...; readonly delivered: steer }——公共结果面同样只有一种投递形态。底层 API 保留steering/types.ts 的引擎级SendInput仍然带有deliverAs?: SendDelivery可选字段steering/engine.ts 中const deliverAs input.deliverAs ?? DEFAULT_SEND_DELIVERY表明引擎层默认值仍是followUp内部排队/生命周期路径如 pending 任务的enqueuePending、steerRunning继续使用该能力并有引擎级测试固定这一行为如engine-run-epoch.test.ts断言排队 payload 中deliverAs: followUp。这正是公共契约收缩、内部能力保留的分层手法对外删除选项以简化心智模型与错误面对内保留低层 API 以服务生命周期与对抗性测试——清理的对象是公共控制层而不是引擎本身。可复现的验证入口结合证据目录 README.md 与自审记录聚焦回归的最小命令为bun test packages/senpi-task/src/tools/control/send-always-steer.test.ts packages/senpi-task/src/tools/control/renderers.test.ts判据与自审一致实现之后 exit code 0若回退生产代码则因deliver_as重新出现、默认发送在引擎侧落成followUp、或渲染器重新打印deliver:而 RED。真实任务面的端到端场景运行中子任务 steer、finished-resident 复活的完整调用序列同样记录在证据 README 的 Planned exact scenarios 中可作为复现实验的操作脚本直接参考。小结这份 HEAVY 自审样本展示了接口收缩类变更的完整验证闭环标准逐条对证每条评价标准都落到具体测试与行为断言、11 项编程后写复盘类型层消除非法状态优先于删除校验、规模静态检查check-no-excuse-rules零违规、以及评审驱动清理只删公共层死变体、保留引擎层 interrupt API。四条成功标准之外的失败mock-provider E2E与工具缺口LSP 不可用被显式披露保证了证据链的可信度——这套标准、复盘、规模、清理、披露的组织方式可直接迁移到任何触碰公共 schema 与消息投递语义的变更自审中。【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考