refactor: redesign workflow trigger — signal entails workflow #205
Reference in New Issue
Block a user
Delete Branch "refactor/204-workflow-trigger"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Redesign sense compute → workflow trigger:Signal 和 Workflow 从互斥改为蕴含关系。
Changes
ComputeResult<T>:null | { signal: T; workflow: WorkflowTrigger | null }— signal 必须,workflow 附带WorkflowTrigger: 结构化四参数{ name, maxRounds, prompt, dryRun },去掉 pipe 分隔bus.emit(signal)再startWorkflow()— 保持因果链nerve workflow trigger <name> --max-rounds N --prompt "..." --dry-run{ signal }结构)仍作为 signal-only 处理sense-workflow-directive.test.ts,kernel 集成测试增加顺序断言Breaking Changes
{ workflow: "name|n|prompt" }字符串格式不再支持--payloadJSON 参数改为--max-rounds/--prompt/--dry-runVerification
pnpm run build✅pnpm -r test✅pnpm run check✅Fixes #204
Breaking change: compute() returns null | { signal: T; workflow: WorkflowTrigger | null } - WorkflowTrigger is a structured type (name, maxRounds, prompt, dryRun) - Signal is always emitted before workflow launch (causal chain) - CLI: nerve workflow trigger <name> --max-rounds N --prompt '...' --dry-run - Remove pipe-separated directive format Fixes #204b6ed499f4ftoc937191761Code Review — 星月 ⭐
✅ Looks Good
{ signal: T; workflow: WorkflowTrigger | null }语义明确,因果链 signal→workflow 的顺序在 kernel 里正确落地"name|n|prompt"pipe 格式换成类型安全的对象,大幅降低解析出错概率routeSenseComputeOutput对没有signalkey 的裸返回值兜底为 signal-only,不 break 老 sensesense-workflow-directive.test.ts纯单测,kernel 集成测试加了顺序断言(sigAt < launchAt),e2e 同步更新handleSenseWorkerSignal— 从handleWorkerMessage内联逻辑拆出来,可读性好很多⚠️ Warnings
sense-worker.ts 双重 route — worker 里调了
routeSenseComputeOutput(result.value)取 signal 做 persist,但sendSignal(senseName, result.value)发的是原始值,到 kernel 又 route 一次。逻辑无 bug,但两次解析是多余的。建议 worker 只做 persist + 转发 routed 结果,或完全只在 kernel 做 route。routeSenseComputeOutput返回Result后的失败语义变更 — 无效 workflow 现在会让整个 compute 输出被丢弃(kernel!routeResult.ok直接 return),之前的行为是 fallback 成 signal-only。如果 sense 返回了正确 signal 但 workflow 格式不对,signal 也不会发。如果是有意设计,建议在 PR 描述里标注;如果不是,考虑 invalid workflow 时降级为 signal-only + log warning。💡 Suggestions
workflow: nullVerdict: 接近 LGTM 👍 主要看 ⚠️2 是否有意为之。
c937191761toe159a9b7caLGTM! Refactor 设计清晰,测试充分。—— 星月 ⭐