docs: update web sentinel dashboard spec

This commit is contained in:
Codex
2026-06-26 02:35:49 +00:00
parent 8abf188ee2
commit 4bfeea541e
2 changed files with 107 additions and 10 deletions
@@ -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 idArgo green 但哨兵 red/timeout 时不得判定发布恢复成功。
@@ -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<br/>health scheduler maintenance latest run]
UI --> Runs[Runs history<br/>filter sort timeline]
UI --> Findings[Findings analysis<br/>severity code window]
UI --> Detail[Run detail]
Detail --> TurnSummary[Turn summary<br/>multi-turn user message and final summary]
Detail --> TraceFrame[Trace-frame viewer<br/>single turn/sample text snapshot]
Detail --> Evidence[Evidence<br/>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/CDTekton 构建,GitOps 发布,ArgoCD 收敛,git-mirror 同步,所有可调事实来自 YAML。PipelineRun 不依赖 operator 本地 dirty worktree;触发前后必须通过受控 git-mirror sync/flush/recheckcloseout 证明 source commit、image digest、GitOps revision、Argo revisionPipelineRun、`pendingFlush=false``githubInSync=true`
Web哨兵自身必须纳入受控且独立的 sentinel control-planesource 来自 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 状态。