Files
Mujoco_WASM/docs/website-language-render-fix.md
chenlin 7519309a27
web-platform-ci / Standalone decision service (no cloud credentials) (push) Has been cancelled
web-platform-ci / TypeScript, lint, unit, build (push) Has been cancelled
web-platform-ci / Playwright E2E (push) Has been cancelled
lekiwi-compatibility / cpu-compatibility (push) Has been cancelled
fix: release v1.0.3 预设渲染与语言搬运监督修复
2026-09-24 17:02:10 +08:00

86 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 预设渲染与默认语言搬运修复(2026-09-24)
## 状态
**已按用户授权同步发布前后端:`20260924T081555Z-language-render-fix`。** 网站为 <https://cadworld-sim.robotquan.com>,上一版本 `20260924T065821Z-language-v2`。本次发布重启了模型服务,旧访客会话失效;没有修改服务器密钥或删除共享预算。部署时未创建 Git 提交/标签,随后按用户要求将源码、测试与文档归档为 `v1.0.3`,同步 npm 版本;版本归档不重复部署或付费推理。
## 发布验收
- 发布前复验 TypeScript、675 项前端单测、51 项后端测试(48 通过、3 跳过)与网站构建。
- 显式白名单发布包 86 个文件,远端逐文件 SHA-256 通过;锁定基础镜像离线构建,先在无网络/无密钥挂载的容器中验证后端导入与 v2 契约,再切换线上。
- 新容器健康,OpenResty 配置检查/reload 通过;28 个线上静态文件与 manifest 一致,公网首页、主应用和 MuJoCoViewer 资源哈希匹配新包,运行容器内 Jev 源码哈希匹配本地修复。
- 公网 Playwright **6/6 通过**:预设/双相机、Python、会话与配置保护、允许/拒绝 iframe 来源及 CSRF。另在 RTX 5080、DPR=2 的真实浏览器检查前置/腕部双相机:绘图缓冲 1728×1912,CSS 与宿主均为 864×956,4×MSAA,无页面异常。
- 密钥文件和预算 SQLite 的 inode、权限、UID/GID 保持不变;已批准 iframe 配置哈希不变。**本次发布验收新增付费推理为 0**;下文真实 API 成功结果来自发布前本地源码接真实模型,不冒充发布后的公网付费回合。
发布证据:`build/website-deployment/language-render-release/`,含基线、构建/发布日志、远端/公网哈希校验、6 项浏览器结果与高 DPI 双相机截图。
- 发布包 SHA-256:`c2fa2e5dfea8b2fa60f2ee757d94ff32f4ead1a6e8f77cfa3cabfa68141a9501`
- 公网首页 SHA-256:`f3af1b1b42e73ad093e00cce356617e5efa2da3fda9b7a29b8966a26b0cdbcd1`
必要时前后端成对回滚到上一版本;旧包早于 iframe 热更新,回滚后须恢复本次保存的实际线上配置:
```bash
bash /opt/cadworld-sim/releases/20260924T065821Z-language-v2/deploy/publish.sh \
20260924T065821Z-language-v2
cp /opt/cadworld-sim/backups/20260924T081555Z-language-render-fix/openresty.conf \
/opt/1panel/apps/openresty/openresty/conf/conf.d/cadworld-sim.robotquan.com.conf
docker exec 1Panel-openresty-m72w nginx -t && \
docker exec 1Panel-openresty-m72w nginx -s reload
```
本次未执行回滚演练;旧版本及实际线上配置备份均保留,不得删除 secrets/budget。
## 定位与修改
- RTX 5080 实际浏览器重现腕部画面的块状阴影。此前使用默认 512² 阴影贴图及固定阴影范围,且 `DataTexture` 默认最近邻过滤。现为 2048²、PCFSoft、按场景中心/尺度适配阴影视锥和偏移、纹理 mipmap/各向异性过滤;GPU 像素比 1.5–2,软件 WebGL 保留原预算。不减面,不改变相机安装、接触或物理参数。
- `renderer.setSize(..., false)` 未设置 CSS 尺寸,DPR>1 时画布实际在页面上变大并被裁切,腕部视口也丢失高 DPI 收益。改为逻辑 CSS 尺寸与绘图缓冲分离,双相机继续共用同一画布/布局槽位。
- 公网默认指令 API 正常,但在 `descend → close` 收到 `choice=stop,noul=allow,reason=none`。原请求仅提供技能名作为 criteria,未说明 close 是闭爪、verify 建立抓持证据、放置时 secure 可能自然变为 false,也未明确当前/下一阶段关系。
- 请求现补充具名技能含义和前置条件、候选下一技能、相邻正常边界的 completedSkill、仿真等待时冻结的时钟语义。初始入口、跳阶段和失败恢复不冒充已完成;不修改原始观测,不用模型评分替代本地物理验收。
- Choice、名为 Noul/Score 的离散监督问题沿用现有 v2 契约。各问题独立判定,reason 不是可验证的模型解释,因此 `none` 不再直接展示为停止原因;显示“模型拒绝继续/无法确认安全,未提供具体原因”,同时终态保存否决响应。**deny/uncertain/stop 仍然停止,不私自用概率最高项覆盖官方 choice。**
## 真实 API 实测(经本次用户授权)
全部真实调用使用固定 `deepseek-flash` 与 `typesafe/jev-1.13`,未切换 mock、修改物理、自动重试或在同一任务内覆盖停止。每个测试会话最终销毁;密钥仅由后端从明确指定的文件读取,不进入浏览器、日志或证据。
| 阶段 | 环境 | 结果 | 尝试调用 LLM/Jev |
| ------------------ | --------------------- | ------------------------------------------------------------ | ---------------- |
| 线上复现 | 公网旧版、SwiftShader | `descend → close` 被 Choice 停止 | 2/7 |
| 补充技能语义 | 本地源码、RTX | 完整成功,搬运 0.728882 m | 2/14 |
| 回归发现剩余歧义 | 本地源码、SwiftShader | `stow → approach` 被 Choice 停止 | 2/3 |
| 补齐阶段完成上下文 | 本地源码、SwiftShader | 已完成 carry,下一次调用 `upstream_transport_error` 安全停止 | 2/10 |
| 隔离硬件复验 | 本地源码、RTX | 13 个技能全部通过,最终稳定放置成功 | 2/14 |
合计 **10 次 LLM / 48 次 Jev 调用尝试**,包含一次上游传输失败;不是完整费用账单。不把中间成功或最终单轮成功描述为多轮可靠性证明,模型与网络仍可能触发安全停止。
最终回合:`state=succeeded`、`phase=settle`、`transported=0.7288822577190641 m`、`onGoalSupport=true`、`succeeded=true`;`/command` 1 次、`/plan` 1 次、`/decide` 13 次,合计 2 LLM/14 Jev(含意图审核)。
主要本机证据(不入 Git):
- `build/website-deployment/language-repro/`:公网原始请求、响应及终态。
- `build/website-deployment/render-hardware-{before,after}/before.png`:同一初始场景硬件渲染对比。
- `build/website-deployment/language-fix-final-hardware/{receipts.json,result.json,after.png}`:最终真实模型完整闭环与截图。
- `build/website-deployment/language-fix-live-{regression,transition}/`:中间模型停止/网络失败,不覆盖失败记录。
## 非付费验证
- TypeScript、定向 TS/Python lint、网站生产构建通过;保留既有 Pyodide 浏览器外部模块和大 chunk 提示。
- Vitest **137 文件 / 675 项**通过;决策服务 **51 项(48 通过、3 个既有可选门禁跳过)**。
- 真实 WASM:连续 B 区→自由坐标搬运、锁开夹爪失败、目标边界 IK 标定通过;高 DPI 双相机尺寸回归通过,零推理。
- 主工作台假上游连续两次搬运在并行运行两个重 CAD 软件渲染浏览器时超时,隔离复跑 **1/1 通过**。其余上述四项首轮通过,不能将首轮整个 suite 说成一次全绿。
## 可复验入口
现有完整运动实测保持不变;新增预设专项,显式选择后不会再跑完整运动实测:
```bash
CADWORLD_LIVE_API=1 CADWORLD_LIVE_PRESET=1 \
npx playwright test -c web_platform/playwright.website-live.config.ts
```
默认访问已更新的公网网站,**此命令会产生新的付费推理,发布验收未执行**。开发服务已正确配置时,可显式加 `CADWORLD_LIVE_URL=http://127.0.0.1:5173` 测本地源码接真实模型。专项上限为 2 LLM/14 Jev,每轮零自动重试;普通 CI 不启用。
## Sources
- [Jev 官方教程:各问题独立判定、不能读取彼此答案](https://openrouter.ai/docs/guides/community/jev-tutorial)
- [Decisions API 契约](https://openrouter.ai/docs/api/api-reference/alphadecisions/submit-a-decisions-questions-and-answers-request)