diff --git a/.agents/skills/unidesk-webdev/SKILL.md b/.agents/skills/unidesk-webdev/SKILL.md index e420215c..42f95339 100644 --- a/.agents/skills/unidesk-webdev/SKILL.md +++ b/.agents/skills/unidesk-webdev/SKILL.md @@ -35,6 +35,12 @@ description: UniDesk Web 开发与受控浏览器验证技能。用户提到 Web - 输出中的 `cleanup.state=confirmed` 才证明进程已停止,`cleanup.state=unknown` 表示远端传输或清理证据仍不完整。 - 涉及 Web 哨兵、`web-probe sentinel`、`monitor.pikapython.com`、定期/周期巡检或新建巡检时,必须同时加载 `$unidesk-monitor`。 - 真实用户入口验证优先;源码检查、构建通过或截图局部正常不能替代原入口验收。 +- Web/Workbench 内部校验不得压过核心业务: + - transport 已连接、用户输入可解释且目标/session scope 明确时,capabilities、delivery semantics、schema、contract version、commit 或 authority metadata 漂移只记录结构化 warning,并固定 `blocking=false`; + - warning 必须可由诊断、OTel 或受控 artifact 下钻,但不得禁用输入控件、阻止提交、清空业务选择、覆盖成功结果或切换数据 authority; + - 只有认证/权限失败、真实 transport 不可用、目标/session scope 无法唯一确定、业务必需输入缺失或继续执行会造成损害时才允许阻断; + - Provider catalog 成功且当前选择明确不可用时可自动选择 configured profile;catalog 失败或没有 configured profile 时保留当前值并允许提交,不得把 catalog 可见性变成新门禁; + - 验收必须同时证明 warning 可见和核心动作可完成,禁止通过隐藏 warning、伪造 capability、放宽 session scope 或增加 fallback 获得通过。 - 共享 `public-edge` 出现不同任务反复覆盖同一 Caddy desired state 时: - HTTPS 入口仍可用则直接继续用户交付,不因 fingerprint warning 阻塞业务; - HTTPS 入口不可用且用户需要即时交付时,可临时交付 owning 配置声明的固定 HTTP port; diff --git a/docs/MDTODO/details/hwlab-web-product-experience/R6.3_Task_Report.md b/docs/MDTODO/details/hwlab-web-product-experience/R6.3_Task_Report.md new file mode 100644 index 00000000..c8089dc7 --- /dev/null +++ b/docs/MDTODO/details/hwlab-web-product-experience/R6.3_Task_Report.md @@ -0,0 +1,33 @@ +# R6.3 任务报告 + +## 结论 + +已修复 Workbench 将非核心 realtime 元数据漂移升级为业务门禁的问题,并修正 Provider 默认选择。Kafka SSE 的 transport 与 session scope 仍是阻断边界;delivery、capabilities 等内部元数据漂移只记录 warning,不再清空 realtime ready。Provider catalog 成功且旧选择未配置时自动选择首个 configured profile;catalog 失败或无 configured profile 时保留原值。 + +## 交付 + +- HWLAB issue:pikasTech/HWLAB#2674。 +- HWLAB PR:pikasTech/HWLAB#2675。 +- merge commit:`8e215f010c2c69c93bbf8a4a3e30a4b3673123d5`。 +- 长期规则:`docs/reference/devops-hygiene.md`、`docs/reference/hwlab.md` 与 `$unidesk-webdev`。 + +## L0 + +- Provider/realtime 定点测试:33 pass。 +- `bun run workbench:native:smoke`:10 pass,native smoke `ok=true`。 +- 覆盖 capability 缺失仍 ready、session scope 错配仍阻断、旧 `codex` 自动选择 configured profile、catalog 失败或无 configured profile 非阻塞。 + +## L1 + +- NC01/v03 API、worker、web 通过 YAML-first CLI 重启并健康。 +- 固定入口 `https://lab-dev-workbench.hwpod.com/workbench` 的 native readiness 为 pass;console error、page error、关键失败响应均为 0。 +- observer:`webobs-mrqjohle-723ec1`,已停止且 `alive=false`。 +- command:`cmd-mrqjqt6i-6bf96d`,Provider 原生 select 实际值为 `gpt.pika`。 +- session:`ses_ece97e02-5082-4911-82cf-f925e1e2cd21`。 +- trace:`trc_7948aef2397849bf`,turn accepted 后 completed。 +- Final Response:`Hi. What would you like to work on?`。 +- 旧 `workbench_live_realtime_contract_invalid` 未再出现。 + +## 非阻塞残余 + +被动 observer 页未同步同一 trace 的 assistant、Final Response 与 Trace rows,已独立登记为 pikasTech/HWLAB#2676 和 R6.4;control 用户操作页已通过,不阻塞本任务。 diff --git a/docs/MDTODO/hwlab-web-product-experience.md b/docs/MDTODO/hwlab-web-product-experience.md index 56c95c8a..57f58b99 100644 --- a/docs/MDTODO/hwlab-web-product-experience.md +++ b/docs/MDTODO/hwlab-web-product-experience.md @@ -123,3 +123,11 @@ ### R6.2 [in_progress] 修复 [HWLAB #2669](https://github.com/pikasTech/HWLAB/issues/2669) 与 [HWLAB #2671](https://github.com/pikasTech/HWLAB/issues/2671):将 `POST /v1/workbench/commands` 纳入 Cloud Web authenticated same-origin proxy,并让 Workbench internal Cloud API adapter 按统一密钥契约规范化 Bearer 认证头,恢复 `lab-dev.hwpod.com` 的 L2 typed CLI fresh turn;通过正常 `v0.3` PR 自动交付,不修改 Secret、不新增 fallback 或第二认证 authority,保持 Temporal、AgentRun 与 Kafka 权威不变,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R6.2_Task_Report.md)。 + +### R6.3 [completed] + +修复 [HWLAB #2674](https://github.com/pikasTech/HWLAB/issues/2674):将 Workbench 已连接后的 delivery、capabilities、version 等非核心实时合同漂移降级为可见 warning,仅 transport 失败和 session scope 错配阻断;provider catalog 成功时自动选择可用 profile,catalog 失败或无可用 profile 不新增业务门禁;完成 L0/L1 与 native smoke 回归并沉淀长期规则,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R6.3_Task_Report.md)。 + +### R6.4 + +修复 [HWLAB #2676](https://github.com/pikasTech/HWLAB/issues/2676):保持 Kafka SSE 单一实时与终态权威,修复同 session/trace 的 Workbench 被动观察页未同步 assistant、Final Response 与 Trace rows 的跨页投影缺口,不新增 polling、result fallback、第二 EventSource 或第二状态 authority,完成任务后将详细报告写入[任务报告](./details/hwlab-web-product-experience/R6.4_Task_Report.md)。 diff --git a/docs/reference/devops-hygiene.md b/docs/reference/devops-hygiene.md index 4098ba65..c80ea879 100644 --- a/docs/reference/devops-hygiene.md +++ b/docs/reference/devops-hygiene.md @@ -25,8 +25,10 @@ When declared validation dependencies are missing, install them with the reposit The following practices are not acceptable as the long-term or hidden source of a working environment: - 微服务线上契约与版本校验必须非阻塞: - - 服务间的契约版本、源码版本、镜像版本、`commitId`、provenance 或部署对齐检查只能产生结构化 warning、OTel 事件和运维诊断; + - 服务间的 capabilities、delivery semantics、schema、契约版本、源码版本、镜像版本、`commitId`、provenance 或部署对齐检查只能产生结构化 warning、OTel 事件和运维诊断; - 这些检查不得拒绝、暂停、降级或延迟用户业务请求,也不得成为 admission、readiness、dispatch、CI/CD public gate 或 Web/CLI 可用性门禁; + - transport 已连接、用户请求可解释且业务所需的目标与会话范围明确时,内部元数据缺失、未知或漂移不得禁用输入控件、清空已选业务对象、覆盖成功结果或阻止提交; + - 只有认证与权限失败、目标或会话范围无法唯一确定、业务必需输入缺失、真实 transport 不可用,或继续执行会造成不可逆损害时才允许阻断; - 接收方必须按当前业务语义解析请求,并对可安全归一化的旧字段、冗余字段和版本差异做兼容归一化,同时记录 warning; - 只有业务数据本身无法解释、违反安全/权限边界或会造成不可逆损害时才允许拒绝,并返回与具体业务字段相关的 typed error; - 禁止把版本、commit 或契约漂移包装成 `schema-invalid`、`503` 或其他用户阻塞错误; diff --git a/docs/reference/hwlab.md b/docs/reference/hwlab.md index 29e92ee4..5affb454 100644 --- a/docs/reference/hwlab.md +++ b/docs/reference/hwlab.md @@ -201,6 +201,11 @@ Workbench 浏览器回归需求以 UniDesk OA [PJ2026-010401 Web工作台](../.. - `eventCount` 和 `--min-events` 不能证明 assistant、terminal 或 final,不得通过反复猜事件数量重开 inspect; - `event-timeout` 必须直接读取 `observedSemantics` 与 `missingSemantics` 分层定位; - AgentRun 冷启动仍未终态时,报告上游运行状态,不得对已结束的 live-only 窗口补读 snapshot、read-model、AgentRun `/events` 或 `/result` 冒充产品 SSE 验收。 + - `workbench.connected` 已到达且 `filters.sessionId` 与当前会话一致时,delivery semantics、capabilities、contract version 和 authority metadata 的缺失或漂移只记录 `blocking=false` warning; + - 上述内部元数据 warning 不得清空 realtime ready、禁用 Composer、覆盖业务错误或产生 `workbench_live_realtime_contract_invalid` 一类阻塞状态; + - EventSource 未连接、连接进入 error/closed/blocked,或 connected session scope 与当前会话不一致时仍可阻断,并必须返回与 transport 或 session scope 对应的 typed error; + - Provider catalog 成功且当前选择明确为 `configured=false` 时,前端选择首个 configured profile 并持久化; + - Provider catalog 请求失败或没有 configured profile 时保留当前选择,不禁用 Composer、不增加前置门禁;真实提交若被 provider 拒绝,按原业务错误投影。 - Workbench Cloud 内部统一密钥认证: - 认证 authority: