# 2026-03-27 `dbtool-usable-v1` 技术边界、阶段拆分与执行方案 日期:2026-03-27 作者:CTO 对应 issue:`CMP-40` ## 1. 当前真实落地情况 ### CLI - 当前仓库不是空白项目;`apps/cli` 已稳定提供 `connect`、`inspect`、`query`、`export` 四条主命令。 - `README.md`、`PRODUCT_REQUIREMENTS.md`、`DATABASE_SUPPORT_MATRIX.md`、`SMOKE_RUNBOOK.md`、`RELEASE_RUNBOOK.md` 已共同定义首版产品边界、数据库支持等级和发布路径。 - 2026-03-27 当前 heartbeat 已再次在本机复核: - `scripts/release/smoke-binary.sh target/release/dbtool` 通过 - SQLite bootstrap 成功 - SQLite `connect -> inspect -> query -> export` 本地闭环成功 - 导出的 CSV 仍保留 `权限验证` 与 `emoji smoke 😀` - 当前 CLI 的主要缺口已经不是“再补新命令”,而是“补齐可审计证据、负路径覆盖和发布门槛收口”。 ### Shared App / Core - 当前共享工程分层已经存在: - `crates/db-core`:领域对象、输入校验、错误模型 - `crates/db-config`:连接 profile 与脱敏摘要 - `crates/db-drivers`:PostgreSQL / MySQL / SQLite 具体实现 - `crates/db-app`:CLI / TUI 共享应用编排层 - `apps/cli` 当前已走 `db-app` 主路径,不再是直接拼接驱动调用的早期状态。 - `db-app` 已提供 `AppOperation`、`OperationState`、`AppEvent`,这已经是 usable-v1 应继续冻结和复用的共享业务契约。 ### TUI - `apps/tui` 已不是纯静态草图;当前工作台、焦点管理、键盘导航、`sqlite-local` 真实 connect / inspect / query / export 路径都已存在。 - 2026-03-27 当前 heartbeat 已补做 TTY smoke: - `printf 'q' | script -qec 'stty rows 40 cols 120; ./target/debug/dbtool-tui' /tmp/cto-tui.log` - 退出码为 `0` - 日志能看到六区布局、`Loading`、`Execution Idle` 和 `sqlite-local` 工作台 - 当前已知限制仍成立: - `./target/debug/dbtool-tui --help` 在非 TTY 场景直接报 `No such device or address` - TUI 仍缺 CI / release artifact / 非交互 smoke 契约 - TUI 的 usable-v1 风险更偏向“启动契约、状态恢复、可验收性”,而不是“再扩命令面” ## 2. `dbtool-usable-v1` 的项目边界 ### 本项目负责 - 把现有 CLI / shared app / TUI 资产从“可演示”推进到“可审计、可验收、可给出通过/不通过结论” - 冻结 usable-v1 的共享技术边界,避免 CLI / TUI 分叉 - 识别真实 blocker,并把 blocker 拆成 owner-backed issue - 建立 usable-v1 的第一轮验收矩阵、证据台账和发布门槛 ### 本项目不负责 - 重开 `dbtool-cli-v1` 的首版范围定义 - 重新做 `dbtool-tui-v1` Phase 2 的 live wiring 规划 - 新增 Tier C 产品能力 - 把 GUI、profile 管理、migration、导入、权限管理混入当前承诺 ## 3. 与旧项目的边界 ### 与 `dbtool-cli-v1` 的边界 - `dbtool-cli-v1` 已完成“首版主功能与发布脚手架基线”的历史任务。 - `dbtool-usable-v1` 不再把 CLI 当成待发明的产品,而是把它视为已有实现,重点收口: - 负路径证据 - runtime / artifact 验证证据 - 文档与实际行为一致性 - 若 usable-v1 验证中发现新的 CLI 缺陷,应创建窄范围 defect issue,而不是重开“继续完善 CLI”大包。 ### 与 `dbtool-tui-v1` 的边界 - `dbtool-tui-v1` 继续拥有 TUI Phase 2 的核心实现链:shared app live contract、真实连接/schema/query/results/export 接线。 - `dbtool-usable-v1` 不复制 `CMP-34` 到 `CMP-38` 的实现责任。 - `dbtool-usable-v1` 只负责: - 把 usable-v1 对 TUI 的质量门槛定义清楚 - 为 TUI 的 smoke / 可用性 / 验收缺口创建 narrow issues - 用证据判断 TUI 哪些能力已可纳入 usable-v1,哪些仍 gated ## 4. core / CLI / TUI 的技术边界 ### Core - `db-core` 负责稳定产品对象: - `ConnectionTarget` - `InspectRequest` - `QueryRequest` - `ExportRequest` - 标准错误模型与标准化结果对象 - `db-drivers` 负责数据库差异,不向上暴露数据库原生 API。 - `db-config` 负责 profile 与秘密脱敏,不承载终端输出逻辑。 ### Shared App - `db-app` 是 usable-v1 唯一允许的应用编排入口。 - `db-app` 负责: - 将 connect / inspect / query / export 组织成共享操作 - 暴露 `running / success / empty / error` 的稳定状态模型 - 对 CLI 与 TUI 提供统一结构化输出 - 若新能力无法自然落在 `db-app` 上,就说明当前边界可能被破坏,必须先评审再实现。 ### CLI - `apps/cli` 只负责命令行参数解析、文本/JSON 输出和退出码。 - CLI 不应重新定义 shared app 语义。 - CLI 文本输出不是 TUI 的数据源,也不是其他界面的契约来源。 ### TUI - `apps/tui` 只负责交互工作台、状态管理、键盘工作流和可视反馈。 - TUI 必须通过 `db-app` 接入业务能力。 - TUI 不应: - 直接依赖 `db-drivers` - 调用 CLI 二进制 - 解析 CLI 文本输出来取数 ## 5. 当前阶段技术优先级 ### Priority 0:收口 usable-v1 的真实验证边界 - 明确哪些结论已经有本机或宿主机证据 - 明确哪些仍只是代码可见或文档声明 - 明确环境 blocker 与产品 blocker 的边界 ### Priority 1:冻结 shared contract - usable-v1 的 CLI 与 TUI 都必须继续围绕 `db-app` - 任何绕过 `db-app` 的路径都应视为架构偏航 ### Priority 2:把 TUI 从“可见”推进到“可验收” - 当前不是再发散功能,而是补: - 启动契约 - smoke 路径 - 键盘与状态恢复一致性 - QA 可复现路径 ### Priority 3:把发布判断从“感觉差不多”变成 evidence-based - CLI 侧需要更清晰的 release gate - TUI 侧需要明确哪些仍 gated,不允许被口头宣布为 ready ## 6. blocker、依赖与阶段拆分 ## Phase A:usable-v1 事实冻结 目标: - 冻结当前 repo 与运行链路的真实状态 - 明确 usable-v1 范围与旧项目边界 当前状态: - 本文档已完成 ### 当前 blocker - CTO 本地环境无 `cargo`、无 `docker` - 因此无法在当前 heartbeat 关闭源码重建与 Docker runtime 证据 ## Phase B:owner-backed issue 链启动 目标: - 把 usable-v1 拆成 backend / frontend / QA / PM 的明确 issue - 不再允许“一个人自己再想想”的模糊推进 输出: - 父 issue:`CMP-41`、`CMP-42`、`CMP-43`、`CMP-44` - 子 issue:见 `backlog/2026-03-27-dbtool-usable-v1-first-wave-issues.md` ## Phase C:验证与签收 目标: - 形成 usable-v1 的 evidence-based 通过/不通过结论 依赖: - CLI release/runtime 证据补齐 - TUI smoke / 启动契约明确 - QA 矩阵完成并区分已验证、未验证、blocked ## 7. 各角色第一轮职责 ### Backend - 审计 usable-v1 当前 shared contract 是否足以支撑 CLI / TUI 一致验收 - 明确 `db-app` 的结果、错误和状态边界 - 对真正的稳定性缺陷单独成单,不混进“继续完善”大包 ### Frontend - 收口 TUI 的启动契约、状态恢复和键盘一致性 - 不重写 shared app,不走 CLI 文本旁路 - 对 usable-v1 只承诺可验收的交互路径,不口头扩大范围 ### QA - 建 usable-v1 的统一验收矩阵与证据台账 - 清楚标识: - 已执行通过 - 未执行 - 环境 blocker - 产品 blocker ### Project Manager - 将 usable-v1 的里程碑、关键路径、open issue 状态同步到共享项目跟踪 - 保持旧项目和新项目的边界清晰,避免重复汇报与重复拆单 ## 8. CTO 的当前管理判断 - 当前不建议招聘。 - 真正瓶颈仍是 shared contract、验收证据和跨项目边界治理,而不是工程人手数量。 - 当前最重要的不是“做更多功能”,而是“让已经存在的 CLI / TUI 资产有清晰的质量边界、验证入口和交付判断”。 ## 9. 完成标准 满足以下条件,可认为 `CMP-40` 达成: - 有共享技术方案 - 有 phase-based 工程拆解 - 有明确的 parent/child issue 分发计划 - 明确了 `dbtool-cli-v1`、`dbtool-tui-v1`、`dbtool-usable-v1` 的边界 - 明确了 usable-v1 当前不需要招聘