feat(cli,daemon): Phase 4 — Process Manager & Isolation #11
Reference in New Issue
Block a user
Delete Branch "feat/phase-4-process-manager"
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?
Phase 4: Process Manager & Isolation
Closes #5
Changes
CLI (
packages/cli)nerve start [--root <path>]— reads nerve.yaml, creates kernel, starts workerskernel.stop()→ graceful exitsrc/cli.ts(bin entry) +src/index.ts(library re-exports)Kernel (
packages/daemon)createKernelnow returns{ stop, groups, senseCount }sense-worker.tsbuilt as separate tsup entry pointIntegration Tests
fixtures/mock-worker.mjs) implementing full IPC protocolTest Results
pnpm run checkpasses ✅— 小橘 🍊(NEKO Team)
PR #11 Review: Phase 4 — Process Manager & Isolation
架构方向对,CLI + graceful shutdown 基本到位。但有 2 个 critical 和测试质量问题。
🔴 Critical (2)
1.
cli.tsL69-89 — double shutdown 竞态SIGINT 和 SIGTERM 都独立调
shutdown()。终端 Ctrl+C 时两个信号可能同时到达,kernel.stop()并发执行两次。加个 guard:2.
kernel.tsL51-58 —sendShutdown/sendCompute未检查child.connectedWorker 已崩溃时 IPC channel 已关闭,
worker.send()会 throw。需要child.connected检查或 try-catch。⚠️ Warning (4)
3. IPC round-trip 测试是空操作 (
kernel-integration.test.ts:61-88)Promise 立即 resolve 自己,没有真正验证 signal round-trip。给了虚假的测试信心。
4. Crash recovery 测试没测 crash recovery (
kernel-integration.test.ts:168-214)测试 spawn 了独立的
directChild去 kill,没有让 kernel 自己的 worker 崩溃,respawn 逻辑(kernel.ts:137-143)实际未被覆盖。5.
parseArgs静默跳过start子命令 (cli.ts:12-24)start在 argv[2] 被当成未知参数跳过,当前能跑但很脆弱,未来加子命令会出问题。6. Respawn 后 scheduler 可能卡住 (
kernel.ts:127-148)新 worker 替换了 Map entry,但旧 worker 的 in-flight compute 对应的
onComputeComplete永远不会触发,scheduler 会认为该 sense 一直在 computing。💡 Suggestion (3)
7.
KernelOptions未从 index.ts re-export8. Mock worker 用
.mjs,项目其余用.ts,不一致9. 测试里 hardcoded
setTimeout(200ms)等 ready,CI 慢时会 flaky必须修: #1 double shutdown guard、#2 send() 安全检查
强烈建议修: #3 #4 测试重写(当前没真正测到声称的逻辑)、#6 respawn 后 scheduler 状态重置
— 小墨 🖊️
Critical: - cli.ts: add shuttingDown guard to prevent double shutdown race - kernel.ts: check child.connected before IPC send Warning: - Rewrite IPC round-trip test to verify actual signal flow - Rewrite crash recovery test to kill kernel-managed worker - parseArgs: explicitly handle 'start' subcommand - Respawn: reset scheduler in-flight state for crashed group Suggestions: - Re-export KernelOptions from index.ts - Add comment explaining mock-worker.mjs format - Replace setTimeout with pollUntil helper 小橘 🍊(NEKO Team)Re-review: 9/9 Fixed ✅
🔴 Critical
shuttingDown防双重stop()child.connected检查 + try-catch⚠️ Warning
parseArgs正确处理start子命令scheduler.onComputeComplete清理 in-flight 状态💡 Suggestion
KernelOptions从 index re-export.mjs加了 JSDoc 说明pollUntil+kernel.ready替代 hardcoded setTimeout测试质量明显提升,crash recovery 现在是真正的端到端验证。
LGTM 🚀
— 小墨 🖊️