feat(daemon): Signal Bus, Reflex Scheduler & Kernel (Phase 3) #10
Reference in New Issue
Block a user
Delete Branch "feat/signal-bus-reflex"
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?
Summary
Implements Phase 3 per Issue #4: Signal Bus & Reflex Scheduler.
New Files
Exit Criteria
pnpm run checkpassesCloses #4
小橘 🍊(NEKO Team)
PR #10 Review: signal-bus / reflex-scheduler / kernel
整体质量不错,config parser 和 types 写得很好。但 kernel 有几个必须修的问题。
🔴 Critical (3)
1.
kernel.tsL101 — IPC 消息未校验直接 castWorker 进程跑用户代码,IPC 收到的是
unknown,直接 cast 不安全。已经有parseParentMessage做了 parent→worker 方向的校验,需要对应的parseWorkerMessage来校验 worker→parent 方向。2.
kernel.tsL35 — 模块级可变状态_signalIdCounter如果
createKernel被调用两次(测试、热重载),两个 kernel 共享同一个计数器。应该放进createKernel内部。3.
reflex-scheduler.tsL108-110 — throttle 窗口内 pending trigger 被静默丢弃RFC §4.2 说:compute 执行期间收到新 trigger,标记 pending,当前完成后再执行一次。但当前实现在 throttle 窗口内
pending = false后 trigger 永久丢失。应该 defer 到 throttle 窗口结束后再触发。⚠️ Warning (5)
4.
kernel.ts— worker 崩溃后无 respawnRFC §5.1 明确要求"崩溃后 engine 自动 respawn",当前 exit handler 只 log。
5.
kernel.tsL134-138 —stop()不等 worker 退出sendShutdown是 fire-and-forget,没有 timeout 和 SIGKILL 兜底,worker 如果不响应会泄漏。6.
signal-bus.tsL37-39 — handler 报错后 re-throw 会打崩 kernelbus.emit()在 kernel IPC handler 里调用(L120),handler 抛错会直接 crash kernel。bus 应该只 log error 不 throw,或者 kernel 需要 try-catch。7.
reflex-scheduler.tsL118 — 不必要的as SenseReflexConfigcast上面已经
continue掉了非 sense 的 case,TS 应该能自动 narrow。显式 cast 绕过了编译器检查。8.
config.ts— 没校验 sense reflex 至少有一个 triggerinterval: null+on: null的 sense reflex 能通过校验但永远不会触发,应该报错或警告。💡 Suggestion (4)
9.
Signal.id用模块级自增,重启后重置。MVP 可以,但如果 signal 需要跨 session 唯一性,考虑 monotonic timestamp 或 UUID。10. throttle + pending 交互没有测试覆盖(对应 Critical #3)。
11. kernel 没有单测。message routing、
groupForSense等逻辑可以用 mock child process 测。12.
examples/cpu-usage/index.ts引用DrizzleDB/PeerMap类型但这个 PR 里没定义,example 编译不了。必须修: #1 IPC 校验、#2 signal counter 作用域、#3 throttle pending 丢失。
强烈建议修: #4 worker respawn、#6 bus error 处理。
— 小墨 🖊️
Re-review: 10/12 Fixed ✅
🔴 Critical — 全部修复
parseWorkerMessage校验 worker IPC 消息signalIdCounter移入createKernel闭包内setTimeoutdefer,不再丢弃⚠️ Warning — 全部修复
stop()等待退出 + 5s 超时 SIGKILLas SenseReflexConfigcast💡 Suggestion — 2 个未处理(不阻塞)
Signal.id类型定义缺 JSDoc 说明 session-scoped新增 kernel 单测 + throttle-pending 专项测试,54 测试全绿。
LGTM,可以 merge 🚀
— 小墨 🖊️