代码变更 → 文档更新 & 验证映射

July 5, 2026 · View on GitHub

最后更新:2026-07-05 | 覆盖范围:变更工作流、验证命令、测试样本索引 交叉引用:architecture.mdviewer.mdfile-io.mdtesting.md

1. 代码变更工作流

通用准则(依赖方向、复用、类型、3D 生命周期)见 CLAUDE.md §架构红线与执行准则。本节只给流程:

  1. 定位任务所属模式与模块边界,区分 app 编排层 / 单一 feature / shared/core 通用层
  2. 应用 CLAUDE.md 的红线检查(依赖方向、复用、类型完整性、3D/USD 生命周期)
  3. 做最小必要改动并验证

当前 ownership 速查:

  • 格式检测:core/parsers/format_detection.ts
  • viewer backend:features/urdf-viewer/renderers/
  • source sync 策略:app/hooks/workspace-source-sync/
  • workspace mutation:app/hooks/workspace-mutations/
  • 纯 mesh renderer 组件:shared/components/3d/renderers/

2. 单文件与模块化策略

默认优先模块化拆分。

允许单文件:仅限小改动(文案、样式微调、局部 bug 修复)且不引入新职责。

必须拆分的场景:

  • 同时引入"状态 + 视图 + 业务逻辑"
  • 新增可复用逻辑(优先抽为 hook/utils)
  • 文件已明显过大且继续修改会降低可维护性
  • 新增 source sync / viewer backend / 格式检测逻辑时,应落到上面的 canonical ownership,不在 wrapper 文件里复制

3. 验收清单

  • Light / Dark / 高对比模式下可读性通过
  • 无新增分散硬编码颜色
  • 3D 资源无明显泄漏(材质/几何体/纹理释放)
  • worker/offscreen 生命周期完整释放
  • 新增的 observer / listener / timer / object URL / ImageBitmap / pending request map 均有对称 cleanup
  • USD hydration / roundtrip / export 未破坏 source-of-truth 流程
  • 浏览器验证产物放入 tmp/,未新增根目录截图/trace
  • 浏览器测试结束后已关闭 browser/context/page/dev server,并运行清理命令确认无残留临时进程
  • 回归调试接口默认关闭;仅 ?regressionDebug=1 路径暴露 window.__URDF_STUDIO_DEBUG__ 等全局调试对象
  • 变更符合模块职责,没有破坏依赖方向
  • 未新增 silent fallback / 吞错式兜底
  • import/export/hydration 等 worker bridge 失败时显式报错
  • 若改 USD worker / metadata 链路,已完成 test/unitree_model 全量验证且结果落盘到 tmp/regression/
  • 若改运行时代码,已完成对应测试或构建验证

4. 增量命令

基础命令(dev / lint / typecheck:quality / typecheck 债务检查 / test / build / verify:fast / verify:full)见 CLAUDE.md §常用命令。本节只列项目特有的回归与构建命令:

测试分层、日常命令选择和新增测试落点见 testing.md

# AI / agent 优先入口
npm run test:unit:list
npm run test:unit -- path/to/file.test.ts
npm run test:unit:all

# USD worker / metadata 回归
node --test \
  src/features/urdf-viewer/runtime/hydra/render-delegate/robot-metadata-stage-fallback.test.js \
  src/features/urdf-viewer/runtime/hydra/render-delegate/folded-fixed-link-truth.test.js

npx tsx --test \
  src/features/urdf-viewer/utils/usdViewerRobotAdapter.test.ts \
  src/features/urdf-viewer/utils/usdRuntimeRobotHydration.test.ts

# Unitree roundtrip / archive 验证
npm run test:fixtures:unitree-usd

# 现成 fixture 回归入口
npm run test:fixtures:imports
npm run test:fixtures:unitree-usd
npm run test:fixtures:unitree-ros-urdfs
npm run test:fixtures:unitree-ros-usda

# 打包对外库(仅在改到 src/lib 或 packages/react-robot-canvas 时)
npm run build:package:react-robot-canvas

说明: npm run verify:fast 只跑仓库内可自给的检查。 npm test / npm run test:unitscripts/test/runner/run-node-tests.mjs 统一管理,默认是 fast lane;变更邻近测试优先用 npm run test:unit -- path/to/file.test.ts。 依赖 test/ 目录大型语料的回归,统一走 npm run test:fixtures:*npm run verify:full

5. 测试样本索引

USD / worker / roundtrip 主样本(test/unitree_model/

样本用途
Go2/usd/go2.usd四足基准:USD stage open、worker metadata、hydration
Go2W/usd/go2w.usd轮足变体:资产命名差异与 roundtrip 稳定性
B2/usd/b2.usd更大体量四足:folded fixed link、复杂结构
H1-2/h1_2/h1_2.usdHumanoid:双足/人形链路与 viewer hydration
H1-2/h1_2_handless/h1_2_handless.usdHandless 变体:资产差异下的 runtime 行为
*.viewer_roundtrip.usd导出后 diff、回归对照与 roundtrip 验证

SDF / Gazebo 样本(test/gazebo_models/

样本用途
camera/model.sdf轻量 smoke
cordless_drill/model.sdfDAE + STL + texture 混合
bus_stop/model.sdf多 mesh + 贴图 + 混合格式
apartment/model.sdf大场景:纹理 + viewer 性能
camera/model-1_2.sdf版本化 SDF 兼容性

URDF 样本(test/awesome_robot_descriptions_repos/

样本用途
anymal_c_simple_description/urdf/anymal.urdf纹理 + DAE 完整四足
mini_cheetah_urdf/urdf/mini_cheetah.urdfOBJ/STL 混合资产
cassie_description/urdf/cassie_v4.urdf双足复杂关节层级
fanuc_m760ic_description/urdf/m710ic70.urdf工业机械臂
models/franka_description/urdf/panda_arm_hand.urdfgltf + ktx2 + png/bin

MJCF 样本(test/awesome_robot_descriptions_repos/mujoco_menagerie/

样本用途
unitree_go2/go2.xml标准 MuJoCo menagerie 样本
unitree_go2/scene.xml带 scene 包装的 MJCF

样本选择建议

  • 快速 smoke:gazebo_models/camera/model.sdffanuc.../m710ic70.urdfGo2/usd/go2.usd
  • 资源加载回归:bus_stop/model.sdfpanda_arm_hand.urdfmini_cheetah.urdf
  • 复杂层级:H1-2/h1_2/h1_2.usdcassie_v4.urdf
  • USD worker / metadata / roundtrip:整套 test/unitree_model

6. 浏览器验证规则

  • 默认使用无头模式(headless: true),除非用户要求可见窗口
  • 验证产物写入 tmp/(可分子目录 tmp/screenshots/tmp/playwright/ 等)
  • 禁止将截图直接写到仓库根目录
  • output/ 仅用于用户可见导出结果和回归归档
  • 截图前关闭遮挡画面的侧栏、浮层和调试面板
  • 所有 chrome-devtools / Playwright / Puppeteer / MCP 验证都必须用 try/finally 或等价机制关闭 page、context、browser;由 agent 启动的 npm run dev / Vite 进程也必须在结束前停止
  • 验证完成后关闭残留浏览器标签页、DevTools、Playwright 会话和临时进程,并运行 node test/usd-viewer/scripts/cleanup-headless.cjs
  • 如清理后仍怀疑有残留,使用 ps -eo pid=,command= | rg 'chrome-devtools-mcp|playwright|puppeteer_dev_chrome_profile|playwright_chromiumdev_profile|ms-playwright|chrome-profile' 核对;只清理自动化临时进程
  • 禁止为了省事执行宽泛 pkill chrome / killall chrome,避免误杀用户日常浏览器

7. 文档更新映射

变更范围应更新文档
新增 feature / 拆分 feature 目录CLAUDE.md §src 目录结构、architecture.md §4
新增 storeCLAUDE.md §状态管理、architecture.md
修改 USD worker / runtime 链路viewer.md §6-7、update-rules.md §5
修改 viewer backend / renderersviewer.md §2、§9、architecture.md §6
修改导入导出流程file-io.md §2
修改格式检测CLAUDE.md §架构红线、file-io.md §1-2
修改 workspace/source sync 策略file-io.md §1-3、architecture.md §8
修改 UI 样式 / 新增语义色 tokenstyle-guide.md §3
新增架构例外architecture.md §3
新增长期稳定测试样本update-rules.md §5
新增测试入口 / 调整测试分层testing.mdCLAUDE.md §测试分层与 AI 选命令规则