fix(rfc-001): 解决小墨 review 的生产风险问题

- 删除 Guard 表达式(when),条件判断由 Workflow 自己处理
- Workflow queue 加 max_queue 上限(默认 100)
- compute 超时改为两级:soft timeout + grace_period hard kill
- 热更新加 drain_timeout,防止长 thread 阻塞 reload

小橘 <xiaoju@shazhou.work>
This commit is contained in:
2026-04-22 05:12:58 +00:00
parent 6e49deaf99
commit 8379dae585
+7 -5
View File
@@ -139,7 +139,6 @@ reflexes:
# Sense → Workflow(启动 thread)
- workflow: cleanup
on: ["disk-usage"]
when: "signal.value > 90" # 条件守卫,可选
```
两种触发条件:
@@ -207,12 +206,14 @@ workflows:
code-review:
concurrency: 3
overflow: queue
max_queue: 20 # 队列上限,超出丢弃最旧请求
```
- **concurrency**:同时允许的最大活跃 Thread 数
- **overflow**:达到上限时的策略
- `drop`:丢弃,适用于幂等操作(如 cleanup)
- `queue`:排队等待,适用于每次都需要执行的操作(如 deploy)
- **max_queue**(仅 `overflow: queue` 时生效):队列上限,默认 100。超出时丢弃最旧的请求
不需要 throttle——Workflow 的触发频率由上游 Sense 的 throttle 控制,Workflow 层只管并发。
@@ -336,7 +337,8 @@ Sense 的运行时属性(`group`、`throttle`、`timeout`)在 `nerve.yaml`
- **group**:隔离分组,同 group 共享 worker 进程
- **throttle**:最小触发间隔,防止高频 signal 导致的无意义重算
- **timeout**:compute 超时上限,超时不杀 worker,只记录错误 signal
- **timeout**:compute 超时上限(soft timeout),超时后 abort 当前 compute,记录错误 signal
- **grace_period**:soft timeout 后的宽限期(默认 timeout × 3),超过后 hard kill 整个 group worker 并 respawn。防止跑飞的 compute 堵住同 group
### 5.4 Thread 状态持久化与恢复
@@ -389,7 +391,7 @@ roles: [
| 变化 | 处理 |
|------|------|
| sense ts 文件修改 | 等当前 compute 完成 → kill 对应 group worker → respawn |
| workflow ts 文件修改 | 等所有活跃 thread 完成 → kill worker → respawn |
| workflow ts 文件修改 | drain(等活跃 thread 完成`drain_timeout` 后 force kill + 标记 crashed)→ respawn |
| nerve.yaml 修改 | 主进程重新解析,diff 变更(见下) |
nerve.yaml diff 处理:
@@ -409,7 +411,7 @@ nerve.yaml diff 处理:
| 情况 | 处理 |
|------|------|
| compute 抛异常 | 记录错误 signal,下次触发重试 |
| compute 超时 | abort,记录超时 signal |
| compute 超时 | soft timeout → abort + 记录错误 signal;grace_period 后 hard kill worker + respawn |
| 存储写入失败 | 记录错误,不发 signal(未成功产出) |
| nerve.yaml 语法错误 | daemon 拒绝加载,保持当前配置 |
| sense ts 语法错误 | 该 group worker 加载失败,其他 group 正常 |
@@ -464,7 +466,7 @@ data ReflexCondition
data ReflexAction
= TriggerCompute SenseId -- 触发 Sense 重算
| StartWorkflow WorkflowId Guard -- 启动 Workflow Thread
| StartWorkflow WorkflowId -- 启动 Workflow Thread
-- Reflex 构成 Event Mesh:Signal → ReflexCondition → ReflexAction
-- Workflow 内部