feat(usable): package gui-host validation snapshot
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

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Paperclip CTO
2026-03-31 10:21:36 +00:00
parent 19aeb7784b
commit a28dab4cd9
47 changed files with 6894 additions and 771 deletions

View File

@@ -10,37 +10,47 @@
### 已存在的共享资产
- `apps/tui/src/main.rs`TUI 主实现,当前包含静态连接、schema、query、results 示例状态
- `apps/tui/src/main.rs`TUI 主实现,当前已接入 `sqlite-local` 与 PostgreSQL / MySQL demo profile 的真实 connect / inspect / query / export 路径
- `apps/tui/README.md`:当前交互范围与产品/体验说明
- `TUI_ACCEPTANCE_CHECKLIST.md`:阶段 2 分层验收矩阵
- `TUI_REGRESSION_CHECKLIST.md`:阶段 2 分层回归清单
- `plans/2026-03-27-dbtool-tui-v1-phase-2-scope.md`CTO 第二阶段范围与 gating
- `backlog/2026-03-27-dbtool-tui-v1-phase-2-issues.md`owner-backed issue 分解
- `scripts/tui/demo-stack.sh`:无 `docker compose` 子命令时的 demo stack / seed 统一入口
- `scripts/tui/live-network-smoke.sh`PostgreSQL / MySQL 的 TTY live smoke 入口
### 已发现的测试资产
- `apps/tui/src/main.rs`5 个内联测试,覆盖:
- `apps/tui/src/main.rs`当前9 个内联测试,覆盖:
- query 草稿切换
- editor `Enter` 触发 running
- empty query 完成态
- results 宽表列分页
- insert mode 录入
- export 成功态映射
- 非 TTY 提示文案
- TTY 检测辅助函数
- connection-qualified query draft 生成
- 当前存在可执行的预构建二进制:`target/debug/dbtool-tui`
- 当前最小可重复 smoke 入口:`scripts/tui/smoke-tty.sh ./target/debug/dbtool-tui`
### 2026-03-27 已执行证据
### 2026-03-27 ~ 2026-03-31 已执行证据
- TTY shell smoke`./target/debug/dbtool-tui``120x40` 下可启动、渲染并以 `q` 退出,退出码 `0`
- 小终端降级:同一二进制在 `90x20` 下显示 `Terminal Too Small``Resize the terminal`,退出码 `0`
- 非交互限制:`./target/debug/dbtool-tui --help` 在当前无 TTY 场景下返回 `No such device or address`
- 源码重建:`CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse cargo build -p dbtool-tui` 直接通过
- 源码测试:`CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse cargo test -p dbtool-tui` 直接通过,`9` 个测试全绿
- 非交互限制:源码重建后的 `./target/debug/dbtool-tui --help` 在无 TTY 场景下返回退出码 `1`,并明确提示需要交互式 TTY 以及 `scripts/tui/smoke-tty.sh`
- PostgreSQL live smoke`scripts/tui/live-network-smoke.sh postgres ./target/debug/dbtool-tui` 直接通过
- MySQL live smoke`scripts/tui/live-network-smoke.sh mysql ./target/debug/dbtool-tui` 直接通过
### 当前缺口
- 当前 runner 默认 `cargo` / `rustc` 在 PATH
- 虽存在离线 Rust toolchain但源码重建 / 测试仍被系统缺少 `cc` / `zig cc` 阻塞
- 仓库暂无 TUI 专属 smoke runbook
- 当前 runner 默认 `cargo` 会因为空的 `CARGO_REGISTRIES_CRATES_IO_PROTOCOL` 环境变量直接失败runbook 必须显式写出 override
- `.github/workflows/release-smoke.yml` 当前只覆盖 `dbtool`
- 当前无 TUI 专属 demo / seed / Docker 路径
- 第二阶段 live integration 仍未整体完成:`[CMP-34](/CMP/issues/CMP-34)` 仍在 `in_progress``[CMP-35](/CMP/issues/CMP-35)` 仍待宿主机回填,而 `[CMP-36](/CMP/issues/CMP-36)` 已完成宿主机侧验收
- 当前已建立 PostgreSQL / MySQL live happy path但仍缺 failure / empty / restricted / browse-stability 的 runner 直证
- release artifact / packaged binary 仍缺真实 smoke
- 状态恢复与键盘一致性需要单独留痕,避免 QA 按旧文档复核不存在的快捷键
## 测试分层
@@ -48,24 +58,25 @@
- 目标:确认实现可重建、内联测试可运行
- 当前命令:
- `cargo build -p dbtool-tui`
- `cargo test -p dbtool-tui`
- `CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse cargo build -p dbtool-tui`
- `CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse cargo test -p dbtool-tui`
- 当前判断:
- 这是必要层,当前 runner 不能给出通过结论
- `cc` / `zig cc` 时,应记为环境 blocker,不能伪造成产品失败,也不能反向伪造成已通过
- 这是必要层,且 2026-03-28 当前 runner 已给出直接通过结论
- 默认裸 `cargo` 失败仍应记为环境口径风险,不能误写成产品失败
### 2. TTY shell smoke
- 目标:最低成本确认 TUI 可启动、可渲染、可退出、可在小终端降级
- 当前建议:
- 使用 `script` + `stty` 固化 TTY 启动路径
- 使用 `scripts/tui/smoke-tty.sh` 固化 TTY 启动路径
- 用预构建二进制先取证,再视环境补做源码重建后的同路径复核
- 注意:
- `dbtool-tui` 不是普通 CLI不要用 `--help` 替代交互 smoke
- 共享执行口径收敛到 `TUI_SMOKE_RUNBOOK.md`
### 3. Shell 交互回归(静态 / 示例数据
### 3. Shell 交互回归(当前可见工作区
- 目标:验证当前 shell 已实现的交互骨架,但不把示例状态误记为 live 能力
- 目标:验证当前 shell 已实现的交互骨架,但不把当前可见工作区直接误记为完整的 network-live 能力
- 范围:
- 视图切换
- 焦点切换
@@ -73,16 +84,16 @@
- 静态 schema / object 浏览
- 查询草稿切换、插入模式、运行占位、结果分页
- 错误 / 空状态 / 恢复路径
- `Esc` / `r` / `Enter` / `[` / `]` 的键位一致性
- 输出要求:
- 明确标记“这是 shell 示例状态验证,不是 shared app live 数据验证”
### 4. 第二阶段 live integration 验收
- 目标:在真实 shared app 接线落地后对连接、inspect、query、results、export 给出验收判断
- 前置条件
- `[CMP-34](/CMP/issues/CMP-34)` 完成并冻结契约
- `[CMP-35](/CMP/issues/CMP-35)` 完成真实连接与 schema browser 接线
- `[CMP-36](/CMP/issues/CMP-36)` 完成真实 query / results / export 接线
- 目标:在当前已存在的 runner-side live path 之上对连接、inspect、query、results、export 给出更完整的验收判断
- 当前已具备的 happy-path 入口
- `scripts/tui/live-network-smoke.sh postgres ./target/debug/dbtool-tui`
- `scripts/tui/live-network-smoke.sh mysql ./target/debug/dbtool-tui`
- 必验路径:
- 真实连接 `loading` / `success` / `failure`
- 真实 inspect ready / empty / restricted
@@ -109,13 +120,13 @@
## 当前优先级
1. 保住 shell baseline 证据,不让第二阶段重构把它冲掉
2. 等待 `[CMP-34](/CMP/issues/CMP-34)` 冻结 shared app 契约
3. `[CMP-35](/CMP/issues/CMP-35)` / `[CMP-36](/CMP/issues/CMP-36)` 完成后补 live integration 验收
2. 在已建立的 live happy path 上补 failure / empty / restricted / browse-stability 证据
3. 补 TUI CI / packaged-binary / release smoke
4. 最后再补 TUI 专属 CI / release / runbook
## 当前验收判断
- shell baseline有预构建二进制级别的可重复 smoke属“有条件通过”
- 源码层验证:当前 runner blocked不能给通过结论
- 第二阶段 live integration当前 blocked不能给通过结论
- 发布前状态:未就绪,因为 `dbtool-tui` 仍缺 CIrelease artifact smoke 和 live demo 路径
- shell baseline有预构建二进制级别的可重复 smoke属“通过”
- 源码层验证:当前 runner 已通过,但需要在 runbook 中固化 cargo 环境变量 override
- 第二阶段 live integration当前 runner 内 PostgreSQL / MySQL demo happy path 已通过,但 failure / empty / restricted / browse-stability 仍未补齐
- 发布前状态:未就绪,因为 `dbtool-tui` 仍缺 CIrelease artifact smoke