1
0
Files
DiAL/openspec/changes/backend-architecture-hardening/proposal.md
lanyuanxiaoyao 147a2559ae refactor: 后端架构加固 — 泛型化、批量查询、bootstrap 统一、路径修复与 pageSize 上限
- CheckerDefinition 泛型化,HTTP/Command checker 移除 resolved target 断言
- 新增 ProbeStore.getAllRecentSamples 消除 targets 路由 N+1 查询
- 统一 getAllTargetStats 与 getTargetStats 的 availability 精度
- Engine rejected 结果写入 internal error 记录,提升可观测性
- 新增 bootstrap.ts 统一 dev/production 启动序列
- dataDir 相对路径改为基于配置文件目录解析
- validatePagination 增加 pageSize 上限 200 校验
- 修复 ErrorBoundary override 标记
- 更新 README/DEVELOPMENT 文档,新增完整测试覆盖
2026-05-13 18:15:46 +08:00

35 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Why
后端在 target 规模增长(预计到 100和 checker 类型扩展(预计超过 5 种)的趋势下,存在查询性能瓶颈、可观测性盲区、启动逻辑重复、路径解析 bug 和类型安全不足等问题。本次变更集中修复这些架构短板,为后续扩展打好基础。
## What Changes
- **targets 路由 N+1 查询优化**`handleTargets` 中对每个 target 单独调用 `getRecentSamples` 改为批量查询,消除 N 次独立 SQL
- **Engine rejected 结果持久化**`probeGroup``Promise.allSettled` 的 rejected 结果写入 `matched: false` 的 check_resultfailure 标记为 internal error替代仅 `console.warn`
- **启动逻辑统一**:抽取 `bootstrap.ts``dev.ts` 和 build 生成的 entry 共用同一启动序列,消除重复
- **dataDir 相对路径修复**`config-loader.ts` 中用 `resolve(configDir, dataDir)` 处理相对路径,确保从任意 cwd 启动时数据库位置一致
- **validatePagination 加 pageSize 上限**:限制最大 pageSize 为 200超出返回 400
- **CheckerDefinition 泛型化**:为 `CheckerDefinition` 加泛型参数 `<TResolved extends ResolvedTargetBase>`checker 内部获得完整类型安全registry 用类型擦除保持解耦
- **availability 精度统一**`getAllTargetStats``getTargetStats` 的 availability 计算精度不一致,统一为相同的四舍五入策略
## Capabilities
### New Capabilities
- `server-bootstrap`: 统一的服务启动引导流程dev 和 production 共用
### Modified Capabilities
- `batch-data-queries`: 新增 `getAllRecentSamples` 批量采样查询,消除 targets 路由的 N+1 问题;修复 availability 精度不一致
- `probe-engine`: Engine 对 rejected 结果写入 matched:false 记录而非静默丢弃
- `probe-config`: dataDir 相对路径基于 configDir 解析
- `probe-api`: validatePagination 增加 pageSize 上限校验
- `checker-runner-abstraction`: CheckerDefinition 接口泛型化checker 内部类型安全
## Impact
- **代码**`src/server/` 下约 8 个文件变更,新增 `bootstrap.ts``store.ts` 的批量查询方法;另修复 `src/web/components/ErrorBoundary.tsx``override` 标记typecheck 前置修复)
- **API**pageSize 超过 200 时返回 400新增约束当前前端未使用超大 pageSize
- **构建**`scripts/build.ts` 生成的 entry 改为调用 bootstrap
- **测试**:需新增/更新 engine、store、middleware、bootstrap 相关测试