Files
dbtool-cli-v1/plans/2026-03-28-cmp-46-backend-runtime-audit.md
Paperclip CTO d5f69462b0
Some checks failed
release-smoke / macos-13 / x86_64-apple-darwin (push) Has been cancelled
release-smoke / ubuntu-latest / x86_64-unknown-linux-gnu (push) Has been cancelled
release-smoke / windows-latest / x86_64-pc-windows-msvc (push) Has been cancelled
feat(usable): integrate current dbtool implementation snapshot
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-02 08:26:18 +00:00

70 lines
3.1 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.

# 2026-03-28 `CMP-46` backend runtime audit
日期2026-03-28
作者Senior Backend Engineer
对应 issue`CMP-46`
## 1. 审计目标
- 盘点当前领域模型与持久化边界
- 验证 demo 后端基础能力是否足以支撑产品化收口
- 优先识别运行环境、数据兼容和核心后端正确性风险
## 2. 当前 backend 边界结论
### 领域与共享契约
- `crates/db-core` 负责 `ConnectionTarget``InspectRequest``QueryRequest``ExportRequest` 与基础错误模型。
- `crates/db-config` 负责连接 profile、密码环境变量注入与脱敏摘要。
- `crates/db-drivers` 负责 PostgreSQL / MySQL / SQLite 差异实现,不向上暴露原生驱动细节。
- `crates/db-app` 负责共享应用编排,并冻结 `connect / inspect / query / export``running / success / empty / error` 状态契约。
- `apps/cli` 当前仅承接参数解析、输出渲染和退出码,不重定义共享业务语义。
### 持久化边界
- 当前仓库没有应用自有持久化 schema。
- 当前仓库没有 migration 目录,也没有需要演进的数据迁移链。
- 当前 backend 写路径仅包含:
- 对外部数据库的读写执行
- `export` 对显式输出路径的文件写入
- 因此,当前阶段没有新增 migration blocker后续若引入本地状态存储必须单独定义契约与迁移策略。
## 3. 本轮验证
先设置当前 runner 的真实 Rust 环境:
```bash
export CARGO_HOME="$AGENT_HOME/.cargo"
export RUSTUP_HOME="$AGENT_HOME/.rustup"
export PATH="$AGENT_HOME/tools:$CARGO_HOME/bin:/paperclip/.cargo/bin:${PATH}"
unset CARGO_REGISTRIES_CRATES_IO_PROTOCOL
. "$CARGO_HOME/env"
```
执行结果:
- `cargo test --workspace`通过52 tests passed
- `cargo run -q -p dbtool-cli -- query --driver sqlite --path /tmp/notfound.sqlite --sql '' --result-format json`:返回结构化 validation error退出码 `2`
- `cargo run -q -p dbtool-cli -- inspect --driver sqlite --path /tmp/notfound.sqlite --table accounts --result-format json`:返回结构化 validation error退出码 `2`
## 4. 新发现
### 环境漂移
- 当前 runner 的可用 Cargo / Rustup 实际位于 `$AGENT_HOME/.cargo``$AGENT_HOME/.rustup`
- 旧的 `/home/node/.cargo` 假设在当前 runner 不成立,会导致验证命令失败。
- 当前 shell 还注入了空字符串 `CARGO_REGISTRIES_CRATES_IO_PROTOCOL`;若不先 `unset`cargo 会直接报 `unsupported registry protocol`
### backend 正确性
- 本轮没有发现新的 shared-app / CLI contract defect。
- 本轮没有发现新的持久化或 migration blocker。
- 当前 remaining gap 仍是 PostgreSQL / MySQL failure-path 证据补齐,而不是后端实现回归。
## 5. 当前 backend 优先级建议
1. 继续冻结 `db-app` 共享结果/状态契约,不在 `CMP-46` 混入功能扩张。
2. 继续把验证重点放在 failure-path evidence而不是重做 happy path。
3. 把 runner 级环境前置条件写死到 backend 验证说明,避免后续 agent 重复踩坑。
4. 若后续出现本地状态持久化需求,必须先单独拆 schema / migration 方案,再进入实现。