diff --git a/project-management/PJ2026-01/specs/PJ2026-010605-observability-monitoring.md b/project-management/PJ2026-01/specs/PJ2026-010605-observability-monitoring.md index 7794b477..5d93d1f4 100644 --- a/project-management/PJ2026-01/specs/PJ2026-010605-observability-monitoring.md +++ b/project-management/PJ2026-01/specs/PJ2026-010605-observability-monitoring.md @@ -93,7 +93,7 @@ | PJ2026-01060505 | Workbench性能 | [PJ2026-01060505 Workbench性能](PJ2026-01060505-workbench-performance.md) | Web 工作台用户可感知性能、RUM、AgentRun event visible latency 和 Prometheus 指标口径 | Web工作台、Agent编排、API契约 | 平台运维、客户端和性能回归调查 | | PJ2026-01060506 | Metrics接入 | 本规格 6.6 | metrics endpoint、scrape target 和 label 口径 | 各 L1 服务健康指标 | Prometheus 查询 | | PJ2026-01060507 | Rolling恢复观测 | 本规格 6.7 | active runner、reconciler backlog、terminal retry、projection lag 和不可恢复 blocker 的查询口径 | AgentRun核心、HWLAB接入、Workbench唯一投影、发布Lane | rolling 发布判定、故障收口 | -| PJ2026-01060508 | Web哨兵 | [PJ2026-01060508 Web哨兵](PJ2026-01060508-web-probe-sentinel.md) | `web-probe observe` 的 YAML-first 生产哨兵、持续 canary、报告视图和发布恢复验证 | Web工作台、Workbench唯一投影、YAML运维、公开入口、发布流水 | 平台值守、CI/CD targetValidation、用户入口恢复判定 | +| PJ2026-01060508 | Web哨兵 | [PJ2026-01060508 Web哨兵](PJ2026-01060508-web-probe-sentinel.md) | `web-probe observe` 的 YAML-first 生产哨兵、持续 canary、报告视图、dashboard 分析工作台和发布恢复验证 | Web工作台、Workbench唯一投影、YAML运维、公开入口、发布流水 | 平台值守、CI/CD targetValidation、用户入口恢复判定 | ## 6. 原子需求 @@ -268,6 +268,8 @@ rolling recovery 相关 span 应能用 OTel trace id/request id 关联 `sessionI Web 哨兵配置必须通过 node/lane root YAML 的 `observability.webProbe.sentinel.enabled/configRefs` 引用 runtime、scenario、promptSet、reportView、publicExposure、CI/CD 和 Secret owning YAML。parser 只校验引用、形状、类型和冲突;cadence、采样间隔、轮次、profile、prompt source、report view、retention、public exposure、maintenance 和 Secret 参数以 YAML 为准。 +Web 哨兵 dashboard 应作为平台值守和问题分析工作台展示同一 observe/analyze 事实:首屏健康摘要、scheduler/maintenance、latest run、finding severity、runs history、run detail、turn-summary 和 trace-frame。Dashboard 不得新增采样器、analyzer、截图保存源或 Workbench 状态仲裁;自动刷新只能读取 bounded/redacted API。 + Web 哨兵的首条生产 canary 应覆盖 `workbench-dsflash-go-tool-call-10x`:同一 HWLAB Workbench session 内十轮需要工具调用的任务,使用 `dsflash-go` backend profile,报告每轮 traceId、terminal status、tool-call evidence、耗时、慢 API、trace 顺序、terminal-not-last、session mismatch 和 final-response finding。`dsflash-go` profile、SecretRef、config 和 model catalog 缺失时必须结构化失败,不允许 fallback 到其他 profile。 发布流水可调用 Web 哨兵 maintenance start/stop。maintenance start 暂停告警但继续采样;maintenance stop 触发同一 observe CLI quick verify 和 analyze。CI/CD targetValidation 对 HWLAB Web 恢复的判断必须包含 quick verify、analysis report SHA、finding 摘要、public origin、scenario id 和 observer/run id;Argo green 但哨兵 red/timeout 时不得判定发布恢复成功。 diff --git a/project-management/PJ2026-01/specs/PJ2026-01060508-web-probe-sentinel.md b/project-management/PJ2026-01/specs/PJ2026-01060508-web-probe-sentinel.md index 9fc2a7b8..04fa46b1 100644 --- a/project-management/PJ2026-01/specs/PJ2026-01060508-web-probe-sentinel.md +++ b/project-management/PJ2026-01/specs/PJ2026-01060508-web-probe-sentinel.md @@ -20,6 +20,7 @@ | 层级 | L3 子课题 | | 状态 | 已生效 | | 实现引用版本 | draft-2026-06-25-p0-web-probe-sentinel | +| Dashboard 实现引用版本 | draft-2026-06-26-p7-web-probe-sentinel-dashboard | | 需求规格模板 | [ISO/IEC/IEEE 29148 需求规格模板](../../templates/iso-iec-ieee-29148-requirements-spec-template.md) | | 上级规格 | [PJ2026-010605 运维监控](PJ2026-010605-observability-monitoring.md) | | 关联规格 | [PJ2026-010401 Web工作台](PJ2026-010401-web-workbench.md)、[PJ2026-0104010803 Workbench唯一投影](PJ2026-0104010803-workbench-unique-projection.md)、[PJ2026-010403 API契约](PJ2026-010403-api-contract.md)、[PJ2026-010601 发布流水](PJ2026-010601-controlled-release.md)、[PJ2026-010602 源码同步](PJ2026-010602-source-sync.md)、[PJ2026-010603 YAML运维](PJ2026-010603-yaml-first-ops.md)、[PJ2026-010604 公开入口](PJ2026-010604-public-entry.md)、[PJ2026-01060505 Workbench性能](PJ2026-01060505-workbench-performance.md) | @@ -44,6 +45,7 @@ Web哨兵必须遵循 UniDesk YAML-first ops。目标 node/lane、public origin - 常驻 TypeScript 单 Pod wrapper 服务、scheduler、scenario runner、PVC/SQLite index、health、metrics、maintenance API 和 dashboard。 - `sentinel plan|apply|status|validate|report|maintenance` 与 `sentinel image|control-plane` 等受控 CLI 入口。 - 发布流水 maintenance start/stop、quick verify、targetValidation、GitOps/Argo/git-mirror closeout 和 public exposure 验证。 +- Dashboard 信息架构、规范化 API、前端组件分层、自动刷新、筛选、深链和 trace/turn 两层阅读视图。 - `workbench-dsflash-go-tool-call-10x` 生产 canary 和 24 小时 dry-run 收口。 - Secret、prompt、provider payload、artifact 和 dashboard 的脱敏边界。 @@ -55,6 +57,7 @@ Web哨兵必须遵循 UniDesk YAML-first ops。目标 node/lane、public origin - 第一阶段不交付分布式压测;loadtest 只保留同镜像、同 wrapper 的配置和命令扩展点。 - in-cluster 哨兵不是外部公网监控节点。若后续需要真正外网用户路径监控,应另行定义外部或边缘哨兵,不把当前服务伪装成外部观测点。 - SQLite index、dashboard、metrics 和 maintenance 状态不得替代 `samples.jsonl`、`control.jsonl`、network/artifact JSONL 或 `analysis/report.json` 成为探针事实源。 +- Dashboard 不负责修复 Workbench projection、trace timing、runner/envreuse 或 git mirror 慢路径;它只把 observe/analyze 已采集事实组织成可读的值守和分析入口。 ## 3. 术语表 @@ -73,6 +76,9 @@ Web哨兵必须遵循 UniDesk YAML-first ops。目标 node/lane、public origin | maintenance window | 发布或维护期间的哨兵状态:继续采样和记录,但暂停告警;结束时触发 quick verify 和 analyze。 | | quick verify | 由 maintenance stop 或 CI/CD targetValidation 触发的一次短巡检,底层仍使用 `web-probe observe` CLI 和 `observe analyze`。 | | SQLite index | PVC 上的轻量索引,只保存 run、scenario、finding、report hash、artifact 摘要和 dashboard 分页信息;它不是业务或探针事实源。 | +| dashboard workbench | 面向平台值守和问题分析的 Web 哨兵监控工作台,按 overview、runs、findings、run detail、trace-frame 等视图组织同一 report/index 数据。 | +| trace-frame viewer | Dashboard 内的第二层 trace 阅读视图,只从已有采样帧和 report view 渲染单帧文字版 trace,不另存截图或另造 analyzer。 | +| auto refresh | Dashboard 的受控刷新能力;刷新只读 API/report/index,不发送 control command、不启动采样、不制造第二事实源。 | | public exposure | YAML 声明的 `monitor.pikapython.com` HTTPS 暴露,通过共享 PK01 Caddy + FRP managed-block helper 到达 ClusterIP Service。 | | targetValidation | 发布流水中的目标验证结果;对 HWLAB Web 恢复的判定必须来自 observe/analyze 对 public origin 的观察,不得只看 Argo green。 | @@ -83,7 +89,7 @@ Web哨兵必须遵循 UniDesk YAML-first ops。目标 node/lane、public origin | 外部使用者 | 平台值守人员、发布操作人员、Workbench owner、CI/CD targetValidation、问题调查 agent。 | | 外部输入 | YAML configRefs、Secret sourceRef presence、HWLAB Web public origin、scenario cadence、maintenance 操作、observe artifacts、analyze reports、GitOps/Argo 状态。 | | 受控资源 | Web哨兵 Deployment、Service、PVC、ServiceAccount、NetworkPolicy、ConfigMap、publicExposure、SQLite index、dashboard 和 Prometheus metrics。 | -| 外部输出 | sentinel status、health、metrics、dashboard、run list、report summary、turn-summary、findings、trace-frame、maintenance 状态和 targetValidation 结果。 | +| 外部输出 | sentinel status、health、metrics、dashboard overview、run history、finding analysis、run detail、report summary、turn-summary、trace-frame、maintenance 状态和 targetValidation 结果。 | | 用户接口 | `bun scripts/cli.ts web-probe sentinel ...`、`https://monitor.pikapython.com` dashboard、CI/CD maintenance 调用和受控 GitOps/control-plane CLI。 | | 系统边界 | Web哨兵只生产运行监控和发布恢复证据;不定义业务成功,不写第二套 Workbench 状态,不直接修复 Web,不读取或打印 Secret/prompt/provider payload。 | @@ -94,11 +100,12 @@ Web哨兵必须遵循 UniDesk YAML-first ops。目标 node/lane、public origin | PJ2026-0106050801 | Wrapper边界 | 本规格 6.1 | 只 wrap 现有 observe CLI,禁止第二 runner/analyzer | web-probe observe、Workbench唯一投影 | 服务化入口、人工排障 | | PJ2026-0106050802 | YAML配置 | 本规格 6.2 | configRefs、owning YAML、parser 校验和 redacted plan | YAML运维、公开入口、Secret分发 | plan/status、部署渲染 | | PJ2026-0106050803 | 常驻服务 | 本规格 6.3 | scheduler、scenario runner、PVC/SQLite、health、metrics、maintenance API | Wrapper边界、YAML配置 | dashboard、CI/CD | -| PJ2026-0106050804 | 报告视图 | 本规格 6.4 | report/dashboard 渐进读取、分页、redaction、trace-frame | observe collect/analyze、Workbench唯一投影 | issue evidence、值守页面 | +| PJ2026-0106050804 | 报告视图 | 本规格 6.4 | CLI/report API 渐进读取、分页、redaction、trace-frame | observe collect/analyze、Workbench唯一投影 | issue evidence、dashboard | | PJ2026-0106050805 | 发布集成 | 本规格 6.5 | CI/CD、GitOps、Argo、maintenance、targetValidation、publicExposure | 发布流水、源码同步、公开入口 | 发布恢复判定 | | PJ2026-0106050806 | Canary验收 | 本规格 6.6 | dsflash-go 十轮工具调用、24 小时 dry-run 和 profile 结构化失败边界 | Agent编排、Workbench、web-probe | 生产巡检收口 | | PJ2026-0106050807 | 安全隔离 | 本规格 6.7 | Secret/prompt/provider redaction、NetworkPolicy、public dashboard auth | 用户管理、平台运维 | 安全 closeout | | PJ2026-0106050808 | 代码引用 | 本规格 6.8 | SPEC 头部标注和生成/配置追溯 | 规格治理 | 后续 PR 审计 | +| PJ2026-0106050809 | Dashboard工作台 | 本规格 6.9 | overview、runs、findings、run detail、trace-frame viewer、前端分层 | 报告视图、常驻服务、Workbench性能 | 平台值守和问题分析 | ### 5.1 目标架构图 @@ -124,9 +131,9 @@ flowchart LR Scheduler[Scheduler] Adapter[observe CLI wrapper adapter] Index[(SQLite index on PVC)] - API[/api health status runs maintenance] + API[/api overview status runs report views maintenance] Metrics[/metrics] - Dash[Dashboard SPA] + Dash[Dashboard workbench] Scheduler --> Adapter Scheduler --> Index API --> Index @@ -168,11 +175,11 @@ flowchart TD Root --> Refs[configRefs] Refs --> Runtime[runtime.d601-v03.yaml#sentinel.runtime] Refs --> Scenarios[scenarios.workbench.yaml#sentinel.scenarios] - Refs --> PromptSets[synthetic-prompts.yaml#promptSets] + Refs --> PromptSets[prompt-set.dsflash-go.yaml#sentinel.promptSet] Refs --> ReportViews[report-views.yaml#sentinel.reportViews] Refs --> PublicExposure[public-exposure.d601-v03.yaml#sentinel.publicExposure] - Refs --> Cicd[hwlab-node-control-plane.yaml#targets.D601.lanes.v03.webProbeSentinel] - Refs --> SecretRefs[secrets-distribution.yaml#scopes.hwlab.webProbeSentinel.d601V03] + Refs --> Cicd[cicd.d601-v03.yaml#sentinel.cicd] + Refs --> SecretRefs[secrets.d601-v03.yaml#sentinel.secrets] Scenarios --> PromptSets Scenarios --> ReportViews Scenarios --> AnalyzeThresholds[hwlab-node-lanes.yaml#...observe.analysisThresholds] @@ -199,8 +206,10 @@ flowchart TD Analyze --> ReportMd[analysis/report.md] ReportJson --> Index[SQLite index] ReportMd --> Index + ReportJson --> ViewApi[bounded report view API] Index --> ReportCli[sentinel report] Index --> Dashboard[Dashboard] + ViewApi --> Dashboard Index --> Metrics[Prometheus metrics] Index --> Validation[targetValidation] ``` @@ -286,6 +295,66 @@ sequenceDiagram 哨兵不可用、首次安装未完成或配置未就绪时,CI/CD 必须结构化失败并输出缺失项、恢复建议和可重试命令;不得自动切换到第二执行通道。人工排障仍可显式运行原 `web-probe observe` CLI,但该人工动作不属于 CI/CD targetValidation 的自动通过路径。 +### 5.8 Dashboard 信息架构图 + +```mermaid +flowchart TD + UI[Dashboard workbench] --> Overview[Overview
health scheduler maintenance latest run] + UI --> Runs[Runs history
filter sort timeline] + UI --> Findings[Findings analysis
severity code window] + UI --> Detail[Run detail] + Detail --> TurnSummary[Turn summary
multi-turn user message and final summary] + Detail --> TraceFrame[Trace-frame viewer
single turn/sample text snapshot] + Detail --> Evidence[Evidence
report SHA observer stateDir CLI command] + Overview --> Runs + Findings --> Runs + Runs --> Detail +``` + +Dashboard 首屏必须先呈现当前值守判断,再允许 drill-down。用户打开 `monitor.pikapython.com` 后应能在首屏判断哨兵自身是否健康、最近 canary 是否 blocked、blocked 的 red/amber/info 组成和最近一次 report SHA。 + +### 5.9 Dashboard API 数据流图 + +```mermaid +flowchart LR + Index[(SQLite index)] --> OverviewApi[/api/overview] + Index --> RunsApi[/api/runs filters cursor] + Index --> FindingsApi[/api/findings aggregate] + Report[analysis/report.json] --> DetailApi[/api/runs/:id] + Report --> ViewApi[/api/runs/:id/views] + Artifacts[observe artifacts] --> ViewApi + OverviewApi --> Dashboard + RunsApi --> Dashboard + FindingsApi --> Dashboard + DetailApi --> Dashboard + ViewApi --> Dashboard +``` + +Dashboard API 只能 reshape 已有 index、report 和 artifact view。筛选、分页、排序和聚合只改变读取方式,不新增采样、analyze、截图保存、Workbench API 读取或 trace 状态仲裁。 + +### 5.10 Dashboard trace drill-down 时序图 + +```mermaid +sequenceDiagram + participant U as User + participant D as Dashboard + participant API as Sentinel API + participant R as report/index/artifact view + participant CLI as sentinel report / observe collect + + U->>D: open latest blocked run + D->>API: run detail and turn-summary + API->>R: read bounded report view + R-->>D: turns, findings, report SHA + U->>D: select turn/trace/sample + D->>API: trace-frame view + API->>R: render existing frame text + R-->>D: trace rows and Final Response block + CLI-->>U: same facts available through CLI trace-frame +``` + +Trace drill-down 必须保持两层阅读:第一层是多 turn 摘要,第二层是选中 turn/trace/sample 后的文字版 trace-frame。`Final Response` 在第二层固定成块展示;空内容显示 `(空内容)`,有内容按 redaction 策略展示摘要、字节数或允许展示的正文。 + ## 6. 原子需求 ### 6.1 OPS-SENTINEL-REQ-001 非分叉 wrapper 边界 @@ -340,13 +409,17 @@ Web哨兵的 `sentinel report` 和 dashboard 必须按 YAML report views 渐进 自动 finding 必须能被 CLI trace 视图复核。若 analyzer finding 与 `trace-frame` 冲突,应以 `trace-frame` 暴露的有序 turn/message/part/final response 事实作为人工判定基准,并把 analyzer 精度问题登记到工具侧;dashboard 不得用聚合计数覆盖 CLI trace-frame。 +Dashboard report API 必须提供 bounded、redacted、可分页的 view contract。`/api/overview` 提供 health、scheduler、maintenance、latest run、severity counts 和 freshness;`/api/runs` 提供 scenario/status/severity/time/search 过滤与 cursor 分页;`/api/runs/:id` 提供 run detail、report refs、artifact refs 和 summary counts;`/api/findings` 提供 severity/code/scenario/window 聚合;`/api/runs/:id/views` 提供 summary、turn-summary、findings 和 trace-frame 的只读渲染。所有响应都必须能追溯到 run id、observer id、stateDir 和 report SHA。 + ### 6.5 OPS-SENTINEL-REQ-005 CI/CD、GitOps 和 maintenance | 编号 | 短名 | 主责模块 | 关联模块 | | --- | --- | --- | --- | | OPS-SENTINEL-REQ-005 | 发布集成 | PJ2026-0106050805 发布集成 | [发布流水](PJ2026-010601-controlled-release.md)、[源码同步](PJ2026-010602-source-sync.md)、[公开入口](PJ2026-010604-public-entry.md) | -Web哨兵自身必须纳入受控 CI/CD:Tekton 构建,GitOps 发布,ArgoCD 收敛,git-mirror 同步,所有可调事实来自 YAML。PipelineRun 不依赖 operator 本地 dirty worktree;触发前后必须通过受控 git-mirror sync/flush/recheck,closeout 证明 source commit、image digest、GitOps revision、Argo revision、PipelineRun、`pendingFlush=false` 和 `githubInSync=true`。 +Web哨兵自身必须纳入受控且独立的 sentinel control-plane:source 来自 UniDesk `master`,镜像、GitOps path、Argo Application、publicExposure 和 targetValidation 由 Web 哨兵 owning YAML 声明。D601/v03 当前可通过 `web-probe sentinel image|control-plane` 的独立 publish Job 实现构建、推送、GitOps 写回和 Argo 收敛;后续也可以切换到 Tekton Pipeline,但 builder 类型必须来自 YAML,不得依赖 operator 本地 dirty worktree。 + +哨兵 rollout 与 HWLAB runtime rollout 不是同一个滚动单元。哨兵 dashboard/API/服务代码变更应通过 Web 哨兵独立 control-plane 滚动;HWLAB runtime 发布流水只调用当前已部署哨兵的 `maintenance/start`、`maintenance/stop` 和 quick verify 作为恢复判定。哨兵 validate、maintenance 和 quick verify 控制路径必须优先走 k3s 内部 Service DNS,不绕 `monitor.pikapython.com` 公网入口。 哨兵镜像构建应使用 YAML 声明的 tools image、base image、registry、egress proxy 和 env-reuse 配方。Node/Bun/Playwright/Chromium 依赖不得在 runtime Pod 中临时下载。Secret 与 env 复用只走 sourceRef/keyMapping;日志、status、dashboard 和 issue closeout 只输出 object/key/presence/fingerprint/digest。 @@ -390,14 +463,36 @@ NetworkPolicy 默认只允许 DNS、YAML 声明 public origin/必要 service end | --- | --- | --- | --- | | OPS-SENTINEL-REQ-008 | 代码引用 | PJ2026-0106050808 代码引用 | [规格治理](spec-governance.md)、[YAML运维](PJ2026-010603-yaml-first-ops.md) | -Web哨兵实现必须先引用本规格,再进入代码变更。新增或修改的 CLI、adapter、service、scheduler、dashboard、metrics、manifest renderer、public exposure helper、CI/CD helper 和 report renderer 源码文件头部必须标注 `SPEC: PJ2026-01060508 Web哨兵 draft-2026-06-25-p0-web-probe-sentinel`,并用一句话说明文件职责。 +Web哨兵实现必须先引用本规格,再进入代码变更。新增或修改的 CLI、adapter、service、scheduler、metrics、manifest renderer、public exposure helper、CI/CD helper 和 report renderer 源码文件头部必须标注 `SPEC: PJ2026-01060508 Web哨兵 draft-2026-06-25-p0-web-probe-sentinel`,并用一句话说明文件职责。 + +P7 dashboard 增强范围内新增或修改的 dashboard API、frontend assets、renderer、format composable、auto refresh、run/detail/finding/trace-frame viewer 源码文件头部必须标注 `SPEC: PJ2026-01060508 Web哨兵 draft-2026-06-26-p7-web-probe-sentinel-dashboard`,或在既有 Web哨兵源码头部追加该实现引用版本。纯 YAML/config、锁文件、构建产物和无法承载注释头的静态资源可例外,但对应生成器、serving 入口或 manifest renderer 必须能追溯到该版本。 实现文件不得只写 issue 编号、`latest`、`current` 或“按最新方案”作为规格引用。自动生成文件、第三方 vendored 文件、纯 YAML/config、锁文件和无法承载注释头的二进制产物不要求加源码头部,但对应生成器、渲染器、owning YAML 或 CLI 入口必须能追溯到本 SPEC。 后续 P1-P6 阶段如果改变稳定需求、观察对象、数据流、接口、部署边界或验收口径,应先更新本规格和上级 [PJ2026-010605 运维监控](PJ2026-010605-observability-monitoring.md),再更新执行 issue。 +### 6.9 OPS-SENTINEL-REQ-009 Dashboard 值守和分析工作台 + +| 编号 | 短名 | 主责模块 | 关联模块 | +| --- | --- | --- | --- | +| OPS-SENTINEL-REQ-009 | Dashboard工作台 | PJ2026-0106050809 Dashboard工作台 | [Workbench性能](PJ2026-01060505-workbench-performance.md)、[Web工作台](PJ2026-010401-web-workbench.md) | + +Dashboard 必须是值守和分析工作台,而不是 raw JSON 或单列表格。首屏至少呈现 overall status、node/lane/public origin、config readiness、scheduler heartbeat age、maintenance 状态、latest run、120s targetValidation budget、severity counts 和最新 report SHA。超过 120s 的 quick verify 或 canary 仍应保持 warning/red,不得通过调大预算、减少轮数或 fallback 视图变绿。 + +Runs history 必须支持 scenario、status、severity、时间窗口、maintenance、observer id、run id 和文本搜索;排序至少覆盖 updated time、created time、finding count 和 severity。Run timeline 应稳定展示最近窗口状态,帮助用户判断 blocked 是否连续、同一 finding 是否反复出现。 + +Findings analysis 必须把 finding 升级为可点击分析对象:按 severity 分组,按 code/scenario/window 聚合,展示 count、最近出现、关联 run 和 latest report SHA。点击 finding 应能过滤 runs 或打开关联 run detail,不能只显示计数。 + +Run detail 必须展示 summary、findings、turn-summary、trace-frame 入口、artifact/report refs、CLI 对照命令和 valuesRedacted 标记。Trace 阅读必须分两层:多 turn 摘要用于选择 turn,单 turn trace-frame viewer 用于阅读具体采样帧并固定显示 `Final Response` 区块。 + +Dashboard 前端架构应借鉴 Sub2API 监控面板的分层方式:typed API client、format composable、auto refresh composable、Overview、Run table、Finding groups、Timeline、Run detail、Trace-frame viewer、loading/empty/error 状态和深链 query。实现不得继续把完整 UI、API shaping、DB 查询、CSS 和 artifact 解析堆进单个服务文件;超过 3000 行或职责混杂的文件必须按职责拆分。 + +Dashboard 自动刷新只能读取 bounded API,不得发送 `observe command`、不启动新采样、不重新 analyze、不保存额外截图。页面 hidden、loading 或上一次请求未完成时应暂停或跳过刷新,避免监控 UI 自身制造额外压力。 + ## 7. 过程控制 Web哨兵架构执行 issue 为 [#883](https://github.com/pikasTech/unidesk/issues/883)。阶段跟踪 issue 为 P0 [#885](https://github.com/pikasTech/unidesk/issues/885)、P1 [#886](https://github.com/pikasTech/unidesk/issues/886)、P2 [#887](https://github.com/pikasTech/unidesk/issues/887)、P3 [#888](https://github.com/pikasTech/unidesk/issues/888)、P4 [#889](https://github.com/pikasTech/unidesk/issues/889)、P5 [#890](https://github.com/pikasTech/unidesk/issues/890) 和 P6 [#891](https://github.com/pikasTech/unidesk/issues/891)。 P0 未完成前,不得推进 CLI wrapper、服务实现、YAML schema、CI/CD、dashboard 或部署代码阶段。P1-P6 的 PR closeout 必须回写:使用的 SPEC 编号和实现引用版本、触达的源码文件头部标注情况、owning YAML/configRef 变更、原 CLI 入口兼容性、验证命令、public origin 或运行面证据,以及是否需要继续修订本规格。 + +Dashboard 增强执行 issue 为 [#935](https://github.com/pikasTech/unidesk/issues/935)。P7 阶段跟踪 issue 为 P0 [#938](https://github.com/pikasTech/unidesk/issues/938)、P1 [#940](https://github.com/pikasTech/unidesk/issues/940)、P2 [#941](https://github.com/pikasTech/unidesk/issues/941)、P3 [#939](https://github.com/pikasTech/unidesk/issues/939)、P4 [#943](https://github.com/pikasTech/unidesk/issues/943)、P5 [#942](https://github.com/pikasTech/unidesk/issues/942) 和 P6 [#944](https://github.com/pikasTech/unidesk/issues/944)。P7 实现 PR closeout 必须回写 dashboard API contract、frontend 分层、trace-frame 对照、redaction、`monitor.pikapython.com` 验证和哨兵独立 CI/CD 状态。