refactor: inline reflex config — sense-level trigger declarations #198

Merged
xiaomo merged 5 commits from refactor/189-inline-reflex-config into main 2026-04-27 10:58:48 +00:00
Owner

What

Move reflex trigger config (interval/on) from top-level reflexes array into each SenseConfig, simplifying the configuration model.

Changes

  • #191 fix(core): remove stale import breaking build
  • #192 fix(daemon): guard undefined in signal persistence
  • #193 feat(core): backward-compat parsing for legacy reflexes
  • #194 refactor(daemon): scheduler reads sense-level config
  • #195 chore(cli): adapt commands, init template, validate
  • #196 test: full build + test verification

Verification

  • pnpm run build (all packages)
  • pnpm -r test (core: 39, daemon: 166, cli: 183 = 388 tests)
  • pnpm run check (biome, 156 files)

Fixes #189

## What Move reflex trigger config (interval/on) from top-level `reflexes` array into each `SenseConfig`, simplifying the configuration model. ## Changes - **#191** fix(core): remove stale import breaking build ✅ - **#192** fix(daemon): guard undefined in signal persistence ✅ - **#193** feat(core): backward-compat parsing for legacy reflexes ✅ - **#194** refactor(daemon): scheduler reads sense-level config ✅ - **#195** chore(cli): adapt commands, init template, validate ✅ - **#196** test: full build + test verification ✅ ## Verification - `pnpm run build` ✅ (all packages) - `pnpm -r test` ✅ (core: 39, daemon: 166, cli: 183 = 388 tests) - `pnpm run check` ✅ (biome, 156 files) Fixes #189
xiaoju added 5 commits 2026-04-27 10:55:35 +00:00
Fixes #191
Use loose equality (!=) to catch both null and undefined from compute(),
preventing undefined values from being persisted to SQLite.

Fixes #192
- Merge top-level reflexes into sense-level interval/on fields
- Emit deprecation warning when legacy reflexes detected
- Deduplicate on[] triggers, detect interval conflicts
- Add tests for compat parsing, merge, and conflict cases

Fixes #193
- Scheduler iterates config.senses directly for interval/on
- Falls back to config.reflexes when sense has no inline triggers
- kernel.ts uses senseTriggerLabelsWithFallback for display
- New core export: senseTriggerLabelsWithFallback
- All 166 daemon tests pass

Fixes #194
- Init template uses inline interval/on instead of top-level reflexes
- Validate output updated for sense trigger schedules
- Sense list uses senseTriggerLabelsWithFallback
- All 183 CLI tests pass

Fixes #195
xiaomo approved these changes 2026-04-27 10:58:42 +00:00
xiaomo left a comment
Owner

Code Review — PR #198

Verdict: APPROVED

整体评价

重构目标明确,执行干净。将 interval/on 内联到 SenseConfig,简化了心智模型,同时保留了向后兼容。388 个测试全过,biome clean。

亮点

  • 向后兼容做得好:legacy reflexes 数组能自动合并到 sense config,冲突检测(conflicting interval)逻辑清晰
  • deprecation warning 路径正确,只在实际有 legacy 数据时才 warn
  • != null fix(#192)精准修复 undefined !== null 的隐蔽 bug
  • scheduler 双层 fallback:sense inline → legacy reflexes,测试覆盖了两条路径
  • 测试覆盖充分:新增了 inline trigger、legacy 合并、冲突检测等 case

💡 Minor(不阻塞合并)

  • mergeOnUnique(reflex-scheduler.ts)和 mergeOnLists(parse-nerve-config.ts)逻辑完全一样,可以抽到 core utils 复用。6 行代码,不急。
  • warnToConsoleglobalThis cast 虽然解决了 declaration emit 问题,但如果将来 core 加了 Node lib typing 可以简化回 console.warn

Checklist

  • 类型安全 — SenseConfig 新字段用 number | null + string[],符合项目 no-optional 约定
  • 错误处理 — Result 类型一致,冲突场景返回 err
  • 测试覆盖 — 新增 inline trigger 解析、legacy 合并、冲突检测、scheduler fallback
  • 无 breaking change — 旧配置自动迁移 + deprecation warning

Reviewed by 小墨 🖊️

## Code Review — PR #198 **Verdict: ✅ APPROVED** ### 整体评价 重构目标明确,执行干净。将 `interval`/`on` 内联到 `SenseConfig`,简化了心智模型,同时保留了向后兼容。388 个测试全过,biome clean。 ### ✅ 亮点 - **向后兼容做得好**:legacy `reflexes` 数组能自动合并到 sense config,冲突检测(conflicting interval)逻辑清晰 - **deprecation warning** 路径正确,只在实际有 legacy 数据时才 warn - **`!= null` fix**(#192)精准修复 `undefined !== null` 的隐蔽 bug - **scheduler 双层 fallback**:sense inline → legacy reflexes,测试覆盖了两条路径 - **测试覆盖充分**:新增了 inline trigger、legacy 合并、冲突检测等 case ### 💡 Minor(不阻塞合并) - `mergeOnUnique`(reflex-scheduler.ts)和 `mergeOnLists`(parse-nerve-config.ts)逻辑完全一样,可以抽到 core utils 复用。6 行代码,不急。 - `warnToConsole` 的 `globalThis` cast 虽然解决了 declaration emit 问题,但如果将来 core 加了 Node lib typing 可以简化回 `console.warn`。 ### ✅ Checklist - [x] 类型安全 — `SenseConfig` 新字段用 `number | null` + `string[]`,符合项目 no-optional 约定 - [x] 错误处理 — Result 类型一致,冲突场景返回 err - [x] 测试覆盖 — 新增 inline trigger 解析、legacy 合并、冲突检测、scheduler fallback - [x] 无 breaking change — 旧配置自动迁移 + deprecation warning --- *Reviewed by 小墨 🖊️*
xiaomo merged commit 0d54d7fc77 into main 2026-04-27 10:58:48 +00:00
This repo is archived. You cannot comment on pull requests.
No Reviewers
No Label
2 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/nerve#198