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
86 lines
7.9 KiB
Markdown
86 lines
7.9 KiB
Markdown
# 预设渲染与默认语言搬运修复(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)
|