# Task 9b 报告:gpr_poc CLI + 真实数据 headless 度量 状态:**PARTIAL / BLOCKED** - CLI 编译链接通过;`selftest` PASS(合成数据端到端跑通整条地基)。 - 真实明星路数据 **BLOCKED**:前置 IO 层 `readIprb` 的 `traces=lastTrace+1` 严格校验 与真实文件「道数=lastTrace」系统性不符,装配阶段即抛异常,无法实测建体指标。 **未擅自修改前置/其单测**(被现有测试钉死的契约 + 跨任务边界),故真实指标暂缺,如实记录。 --- ## 1. 交付物(均为本会话自有文件) - `tools/gpr_poc/main.cpp` —— CLI:`build` / `load` / `selftest` 三子命令。 - `tools/gpr_poc/Probe.hpp` —— header-only 计时(steady_clock)+ 峰值内存(Psapi `PeakWorkingSetSize`)。 含 `NOMINMAX`/`WIN32_LEAN_AND_MEAN` 防 `` 宏污染 `std::numeric_limits::min/max`。 - `tools/gpr_poc/CMakeLists.txt` —— 可执行 `gpr_poc`,链 `geopro_io_gpr/geopro_core/geopro_store/geopro_render` + Windows `Psapi`;`vtk_module_autoinit` 注册 VTK 工厂。 - 顶层 `CMakeLists.txt` —— 加 `add_subdirectory(tools/gpr_poc)`(在 `add_subdirectory(src)` 之后)。 - `docs/superpowers/plans/poc-results-B.md` —— 实测结果(selftest PASS + 真实数据 BLOCKED 根因表)。 注:库目标实际名为 `geopro_store`(brief 写作 geopro_store/已对齐)与 `geopro_data`; 本工具链 `geopro_store`(分块存储),正确。 ## 2. 构建 - 配置:`cmd /c "build.bat configure"`(preset msvc-release,build/release)成功 (cmd 被环境劫持但真实命令仍执行;以 build.ninja 出现 gpr_poc target 确认)。 - 编译:PowerShell + vcvars64 直驱 cmake `--build build/release --target gpr_poc`。 首次失败:`` min/max 宏污染 → 加 NOMINMAX 修复 → 二次链接成功。 - 运行需 PATH 带 Qt6/VTK/vcpkg bin(headless 工具仍依赖这些 DLL)。 ## 3. selftest 结果 ``` gpr_poc selftest [selftest] GridSpec 2x2x8 dz=0.714286 [selftest] PASS (exit 0) ``` 覆盖:assembleGprSurvey → buildGprVolume → write(brick=4) → buildPyramid(1) → WholeVolumeSource,断言维度/层数/体素非 blank 全通过。 ## 4. 真实数据指标 **未实测(BLOCKED)**。根因:`readIprb`(`src/io/gpr/IprbReader.cpp:16`) `traces=lastTrace+1` 严格字节校验;真实明星路 14 通道每个恰含 `lastTrace` 道(少 1 道), 逐通道实测一致(详见 poc-results-B.md §2 表)。非 OOM/超时——装配前读入即失败, 调 `--cellXY` 无法绕过。现有 `tests/io/gpr/test_iprb_reader.cpp:30-31` 锁定该抛异常契约。 用的参数:`--line 001 --cellXY 0.2 --cellZ 0.05 --levels 2`(建体未到达)。 预估几何(非实测,供核对):nx≈11118, ny≈8, nz≈1(深度尺度因土速单位为微米级, cellZ=0.05 压成单层——需 POC owner 复核土速/时窗单位与 cellZ)。 ## 5. 提交前自检 - 仅 `git add` 自有文件:`tools/gpr_poc/*`、顶层 `CMakeLists.txt`、 `docs/superpowers/plans/poc-results-B.md`、本报告 `.superpowers/sdd/task-9b-report.md`。 - `git diff --cached --stat` 确认无 chart/scatter/quill/rangeslider 等并行会话行。 - 顶层 CMakeLists 的暂存 diff 应仅含新增的 `add_subdirectory(tools/gpr_poc)` 一行块。 ## 6. Concerns / 需 owner 决策 1. **真实数据 BLOCKER(高)**:`readIprb` 道数契约与真实数据不符。建议放宽为 「道数 = 文件字节 / (samples·2)」(容忍 ±N 道),或确认 LAST TRACE 语义后去 +1, 并同步改单测。落地后重跑两条命令即可补齐 §4 真实指标。 2. **深度尺度(中)**:SOIL VELOCITY=100 m/s(头单位 m/µs ×1e6)→ 深度跨度微米级, cellZ=0.05 会把 Z 压成 1 层。影响真实体维度与 9c 渲染基准,需确认单位约定。 3. 顶层 CMakeLists 当前 working tree 已有他会话的修改(视觉设计/chart 等);本会话只新增 add_subdirectory 一行,暂存时务必只 stage 该文件并核对 diff,勿带入其他未暂存改动。