docs(webdev): 记录 sentinel dashboard DOM 验证需显式 page.goto(sentinel publicBaseUrl)

web-probe script 默认 origin 是 lane 的 HWLAB Cloud Web (hwlab workbench),
不是 sentinel dashboard origin (monitor.pikapython.com);验证 sentinel
dashboard 页面 DOM 必须显式 page.goto(sentinel publicBaseUrl),不能用
gotoStable('/')。根因 (web-probe 缺 sentinel dashboard DOM 验证受控入口)
登记为 [FEEDBACK] #1030。

执行 issue #1025 P4 验证时发现的可复用坑。
This commit is contained in:
Codex
2026-06-26 12:46:08 +00:00
parent 7b3df965cc
commit 7459969471
@@ -150,6 +150,7 @@ bun scripts/cli.ts web-probe observe analyze webobs-xxxx
- `observe start/status/command/collect/analyze` 默认输出包含 `Wrapper contract` 区块;该区块证明 Web 哨兵只能 wrap 现有 observe CLI verb、现有 runner/analyzer 和既有 artifact contract,不新增第二套 Playwright runner、analyzer、状态机或私有 web-probe API。
- `web-probe sentinel plan|status` 只读取 `observability.webProbe.sentinel.enabled/configRefs` 和 owning YAML,渲染 redacted 配置引用图、文件 hash、缺失字段和跨 ref 冲突;`web-probe sentinel image|control-plane` 继续从 owning YAML 渲染 image、GitOps、Argo 和 manifest 计划,并在远端 publish job 接通前拒绝报告部署 mutation。它不启动浏览器、不读取 Secret 值、不保存采样结果,也不是第二套 runner/analyzer。真正的采样和判定仍以 `observe start|command|collect|analyze` artifacts 为准。
- Web 哨兵 public dashboard/origin 必须以 issue/SPEC/YAML 既定计划为准;当前 P6 计划沿用 `monitor.pikapython.com`,不要未经明确变更改成 `hwlab-monitor.pikapython.com` 或其他新域名。验证 report 时记录 `publicOrigin`,但不要把域名硬编码到 runner/analyzer 逻辑里。
- 验证 sentinel public dashboard **页面 DOM/截图**(区别于 CI/CD `sentinel status|plan|image|control-plane`)时,`web-probe script` 的默认 origin 是 lane 的 HWLAB Cloud Web`gotoStable('/')` 进入 hwlab workbench),不是 sentinel dashboard origin;必须用显式 `page.goto('<sentinel publicBaseUrl>/')``publicBaseUrl` 来自 `config/hwlab-web-probe-sentinel/public-exposure.*.yaml#sentinel.publicExposure.publicBaseUrl`,如 `https://monitor.pikapython.com`)进入 dashboard 页面,再用 `safeEvaluate`/`screenshot` 采样,不能用 `gotoStable('/')` 期望落到 sentinel dashboard。这是 web-probe 缺少 sentinel dashboard DOM 验证受控入口的临时绕过,根因见 [pikasTech/unidesk#1030](https://github.com/pikasTech/unidesk/issues/1030)dashboard DOM 验证脚本不要复用 hwlab workbench 的 `waitWorkbenchReady`/session helper 作为通过条件。
- `scripts/web-probe-sentinel-service.ts` 是 Web 哨兵 Pod entrypoint`--once` 只做 config/PVC/SQLite/scheduler/analyzer-command health 快照,`--scheduler-disabled` 仅用于本地服务健康冒烟,不能作为生产运行参数。HTTP 服务只提供 `/api/health``/api/status``/api/runs``/api/maintenance``/metrics` 和 redacted dashboard 外壳,底层采样仍只能经 observe CLI adapter。
- `trace-frame` 出现 `(无 trace rows;这是 blocker...)` 时,必须先看同一输出中的 `TRACE DIAGNOSTIC`:记录 pageRole/pageId、traceRows/turns/messages 数量、sampleTraceIds、尾部 traceRow/turn/message 归属。若目标 trace 的 turn/message/final 存在但 traceRows 全部属于旧 trace,应按 Workbench read model authority 分裂登记到架构/业务 issue(例:HWLAB #2124),不得把旧 traceRows 当作新 turn 通过证据,也不得让 analyzer 的聚合计数压过 CLI trace 视图。
- analyzer finding 不得压过 CLI `trace-frame` 人工视图。尤其 `trace-assistant-message-duplicates-final-response` 只有在 `trace-frame` 中同一 completed turn 可见多条相同 assistant final rows 时才按业务 bug 处理;如果 `trace-frame` 只有一条 assistant final row、后面固定 `Final Response` 区块正确且 API messages/turns 对齐,该 amber 归类为 analyzer 精度问题,应登记/修工具,不得阻止业务 closeout。