Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 

1447 rindas
54 KiB

  1. {
  2. "schemaVersion": 1,
  3. "features": [
  4. {
  5. "id": "project.new",
  6. "group": "工程与数据",
  7. "name": "新建工程",
  8. "source": {
  9. "file": "../../../unreal_tran_web/src/views/content/LegacyModelEditorView.vue",
  10. "line": 118,
  11. "symbol": "createNewProject"
  12. },
  13. "implementation": "本轮修复",
  14. "boundary": "宿主创建新项目 ID 并跳转;新建不是清空并覆盖当前工程。",
  15. "fix": "新建复用正式 create API;创建失败或取消保留原工程。",
  16. "acceptance": "新建前后 ID 不同,原工程内容/版本不被覆盖;取消不发创建请求。"
  17. },
  18. {
  19. "id": "project.import-glb",
  20. "group": "工程与数据",
  21. "name": "导入装备 GLB",
  22. "source": {
  23. "file": "../../../unreal_tran/src/main.js",
  24. "line": 1264,
  25. "symbol": "importModelFile"
  26. },
  27. "implementation": "已有实现",
  28. "boundary": "只支持单文件 GLB;上传→登记→解析→最终保存。",
  29. "fix": "延续导入 busy/失败阻断及稳定资产校验。",
  30. "acceptance": "选择轻量 GLB,真实模型可见;刷新仍加载同一资产。"
  31. },
  32. {
  33. "id": "project.import-json",
  34. "group": "工程与数据",
  35. "name": "导入工程 JSON",
  36. "source": {
  37. "file": "../../../unreal_tran/src/main.js",
  38. "line": 2863,
  39. "symbol": "importProjectFile"
  40. },
  41. "implementation": "本轮修复",
  42. "boundary": "导入到当前工程,不创建副本;受控引用必须属于当前可用资产。JSON 不含 GLB 字节。",
  43. "fix": "导入前 materialize 稳定资产引用。",
  44. "acceptance": "同项目导出后再导入,材质/动画/环境不丢;无效或跨项目缺失引用报错。"
  45. },
  46. {
  47. "id": "project.save",
  48. "group": "工程与数据",
  49. "name": "手动保存 / Ctrl+S",
  50. "source": {
  51. "file": "../../../unreal_tran/src/main.js",
  52. "line": 2748,
  53. "symbol": "saveProject"
  54. },
  55. "implementation": "已有实现",
  56. "boundary": "同一工程保存内容和当前视口封面;成功以 API 响应为准。",
  57. "fix": "保留队列、版本保护和封面失败回退。",
  58. "acceptance": "保存真实 PUT 成功,刷新字段不丢;重复点击不交错。"
  59. },
  60. {
  61. "id": "project.autosave",
  62. "group": "工程与数据",
  63. "name": "30 秒自动保存",
  64. "source": {
  65. "file": "../../../unreal_tran/src/main.js",
  66. "line": 2122,
  67. "symbol": "bindShellEvents"
  68. },
  69. "implementation": "已有实现",
  70. "boundary": "自动保存工程内容;不反复截图更新封面,恢复稿待确认期间暂停。",
  71. "fix": "导入/封面保存期间阻断重入。",
  72. "acceptance": "修改后等待自动保存并刷新;忙碌时不提交半成品。"
  73. },
  74. {
  75. "id": "project.name",
  76. "group": "工程与数据",
  77. "name": "修改工程名",
  78. "source": {
  79. "file": "../../../unreal_tran/src/main.js",
  80. "line": 457,
  81. "symbol": "projectNameInput"
  82. },
  83. "implementation": "已有实现",
  84. "boundary": "输入→失焦/Enter→保存;当前模型工程名。",
  85. "fix": "无本轮专门改动。",
  86. "acceptance": "改名保存后列表和重新打开一致。"
  87. },
  88. {
  89. "id": "project.export-json",
  90. "group": "工程与数据",
  91. "name": "另存项目 JSON",
  92. "source": {
  93. "file": "../../../unreal_tran/src/main.js",
  94. "line": 2883,
  95. "symbol": "saveProjectAs"
  96. },
  97. "implementation": "已有实现",
  98. "boundary": "下载工程 JSON;不是另建服务端项目,也不内嵌 GLB 文件。",
  99. "fix": "稳定资产引用保留,临时 blob 地址清除。",
  100. "acceptance": "下载文件可解析,包含轨道/蓝图/自定义字段,配套资源可重新解析。"
  101. },
  102. {
  103. "id": "project.undo",
  104. "group": "工程与数据",
  105. "name": "撤销 / Ctrl+Z",
  106. "source": {
  107. "file": "../../../unreal_tran/src/main.js",
  108. "line": 160,
  109. "symbol": "class HistoryStack"
  110. },
  111. "implementation": "本轮修复",
  112. "boundary": "最多 60 个历史快照;不是数据库版本回滚。",
  113. "fix": "异步互斥,失败不移动索引,托管 GLB 快照重新解析。",
  114. "acceptance": "属性/曲线修改撤销;连续点击不并发;下载失败索引与修改保留。"
  115. },
  116. {
  117. "id": "project.redo",
  118. "group": "工程与数据",
  119. "name": "重做 / Ctrl+Y",
  120. "source": {
  121. "file": "../../../unreal_tran/src/main.js",
  122. "line": 160,
  123. "symbol": "class HistoryStack"
  124. },
  125. "implementation": "本轮修复",
  126. "boundary": "撤销后重做;产生新编辑时清掉旧 redo 分支。",
  127. "fix": "与撤销共用异步恢复保护。",
  128. "acceptance": "重做恢复相同字段及姿态,不回放无效分支。"
  129. },
  130. {
  131. "id": "project.recovery",
  132. "group": "工程与数据",
  133. "name": "异常恢复副本",
  134. "source": {
  135. "file": "../../../unreal_tran/src/main.js",
  136. "line": 2554,
  137. "symbol": "reconcileApiRecovery"
  138. },
  139. "implementation": "本轮修复",
  140. "boundary": "同版本恢复稿需用户确认;旧版本隔离/下载,不静默覆盖服务器。",
  141. "fix": "恢复稿重新解析受控资源;指纹忽略对象键顺序,避免已保存页面刷新误生恢复稿。",
  142. "acceptance": "同版本恢复可见;旧版本保留/下载;主动保存前不自动 PUT。"
  143. },
  144. {
  145. "id": "project.conflict",
  146. "group": "工程与数据",
  147. "name": "保存/发布版本冲突",
  148. "source": {
  149. "file": "../../../unreal_tran/src/model-content-api.js",
  150. "line": 1025,
  151. "symbol": "queueSave"
  152. },
  153. "implementation": "已有实现",
  154. "boundary": "409 阻断;恢复稿保留。",
  155. "fix": "发布封面队列同样遵守冲突保护。",
  156. "acceptance": "定向模拟 409,无后续发布请求,不误报成功。"
  157. },
  158. {
  159. "id": "project.permissions",
  160. "group": "工程与数据",
  161. "name": "查看/编辑/新增/发布权限",
  162. "source": {
  163. "file": "../../../unreal_tran_web/src/features/editors/model/legacy-iframe-permissions.ts",
  164. "line": 32,
  165. "symbol": "installLegacyModelPermissions"
  166. },
  167. "implementation": "本轮修复",
  168. "boundary": "按 content.model.* 权限,不按 teacher/admin 身份推断写权限;只读仍能搜索、选择原生动画和键盘激活预览。",
  169. "fix": "新建接真实 create 能力;只发布可发布已保存版本;修复查看控件键盘事件误拦截。",
  170. "acceptance": "只读查看操作可用且无内容写请求;不可编辑/保存;publisher 不上传/PUT,正常发布已有版本。"
  171. },
  172. {
  173. "id": "project.leave",
  174. "group": "工程与数据",
  175. "name": "离开/切角色未保存确认",
  176. "source": {
  177. "file": "../../../unreal_tran_web/src/views/content/LegacyModelEditorView.vue",
  178. "line": 147,
  179. "symbol": "confirmLeave"
  180. },
  181. "implementation": "已有实现",
  182. "boundary": "取消留在当前页;保存失败不得离开;上传/保存/发布忙时保留状态。",
  183. "fix": "新建也复用现有未保存确认。",
  184. "acceptance": "取消、放弃、保存失败与 busy 分别验证,没有误清 dirty。"
  185. },
  186. {
  187. "id": "resource.catalog",
  188. "group": "资源库与场景树",
  189. "name": "资源库浏览 / 选择装备",
  190. "source": {
  191. "file": "../../../unreal_tran/src/main.js",
  192. "line": 1383,
  193. "symbol": "renderAssets"
  194. },
  195. "implementation": "本轮修复",
  196. "boundary": "切换装备可能应用其基准时间轴/蓝图;不是把第二个主装备追加进当前模型。",
  197. "fix": "修复单节点选择器误用导致启动报错;忙碌期间禁止切换资源。",
  198. "acceptance": "完整资源库 DOM 初始化、卡片事件、空目录启动正常;切换实际几何可见,保存后资源一致。"
  199. },
  200. {
  201. "id": "resource.search",
  202. "group": "资源库与场景树",
  203. "name": "资源搜索",
  204. "source": {
  205. "file": "../../../unreal_tran/src/main.js",
  206. "line": 1467,
  207. "symbol": "applyAssetSearch"
  208. },
  209. "implementation": "已有实现",
  210. "boundary": "按资源名称/关键词过滤现有目录,不搜索服务器全站。",
  211. "fix": "无本轮专门改动。",
  212. "acceptance": "关键字命中、空结果与清空恢复。"
  213. },
  214. {
  215. "id": "environment.builtin",
  216. "group": "资源库与场景树",
  217. "name": "内置车间 / 野外 / 装备车库",
  218. "source": {
  219. "file": "../../../unreal_tran/src/main.js",
  220. "line": 789,
  221. "symbol": "resetEnvironmentPlaceholder"
  222. },
  223. "implementation": "已有实现",
  224. "boundary": "车间/野外为程序化环境;车库为随包 GLB。",
  225. "fix": "保留真实 GLB 和占位环境来源区别。",
  226. "acceptance": "三种切换与重新打开可重现相应环境。"
  227. },
  228. {
  229. "id": "environment.external",
  230. "group": "资源库与场景树",
  231. "name": "导入外部车间 / 野外 GLB",
  232. "source": {
  233. "file": "../../../unreal_tran/src/main.js",
  234. "line": 1028,
  235. "symbol": "loadEnvironmentSceneFile"
  236. },
  237. "implementation": "本轮修复",
  238. "boundary": "一个环境根;受控 MODEL_FILE 资产 metadata.usage=environment,与主装备独立。",
  239. "fix": "上传、最终保存、JSON 与刷新恢复稳定引用;失败阻断半提交。",
  240. "acceptance": "小 GLB 上传后主装备不被替换;环境刷新仍可见且资产引用一致。"
  241. },
  242. {
  243. "id": "resource.loading",
  244. "group": "资源库与场景树",
  245. "name": "模型加载进度 / 失败 / 重试",
  246. "source": {
  247. "file": "../../../unreal_tran_web/src/views/content/LegacyModelEditorView.vue",
  248. "line": 33,
  249. "symbol": "installLegacyModelIframeLoadingScope"
  250. },
  251. "implementation": "已有实现",
  252. "boundary": "局部加载状态;错误短提示,中性失败状态可重试。",
  253. "fix": "复用前轮加载范围与错误消息修复。",
  254. "acceptance": "资源失败不无限转圈;重试恢复;无凭据泄露。"
  255. },
  256. {
  257. "id": "tree.browse",
  258. "group": "资源库与场景树",
  259. "name": "场景树节点与计数",
  260. "source": {
  261. "file": "../../../unreal_tran/src/main.js",
  262. "line": 1925,
  263. "symbol": "buildSceneTree"
  264. },
  265. "implementation": "现有边界",
  266. "boundary": "树行上限 220;统计节点总数不等于当前展开行数。",
  267. "fix": "无本轮容量重构。",
  268. "acceptance": "模型/环境节点可达,计数说明不当作全部节点已经逐项验收。"
  269. },
  270. {
  271. "id": "tree.expand",
  272. "group": "资源库与场景树",
  273. "name": "节点展开 / 折叠",
  274. "source": {
  275. "file": "../../../unreal_tran/src/main.js",
  276. "line": 1925,
  277. "symbol": "buildSceneTree"
  278. },
  279. "implementation": "已有实现",
  280. "boundary": "当前界面浏览状态;无须持久化展开布局。",
  281. "fix": "无本轮专门改动。",
  282. "acceptance": "展开和折叠子级不修改模型对象。"
  283. },
  284. {
  285. "id": "tree.search",
  286. "group": "资源库与场景树",
  287. "name": "场景树搜索",
  288. "source": {
  289. "file": "../../../unreal_tran/src/main.js",
  290. "line": 1925,
  291. "symbol": "buildSceneTree"
  292. },
  293. "implementation": "已有实现",
  294. "boundary": "搜索当前载入对象,不新增/删除对象。",
  295. "fix": "无本轮专门改动。",
  296. "acceptance": "搜索节点后选中正确对象,清空恢复树。"
  297. },
  298. {
  299. "id": "tree.visibility",
  300. "group": "资源库与场景树",
  301. "name": "显示 / 隐藏对象",
  302. "source": {
  303. "file": "../../../unreal_tran/src/main.js",
  304. "line": 1925,
  305. "symbol": "buildSceneTree"
  306. },
  307. "implementation": "本轮修复",
  308. "boundary": "对象 visible 保存;隐藏祖先的子对象不接受射线拾取。",
  309. "fix": "拾取与高亮统一检查祖先可见性。",
  310. "acceptance": "隐藏父级后不能点到子级,保存重开仍隐藏。"
  311. },
  312. {
  313. "id": "selection.scope",
  314. "group": "资源库与场景树",
  315. "name": "整体 / 部件级选择",
  316. "source": {
  317. "file": "../../../unreal_tran/src/main.js",
  318. "line": 1938,
  319. "symbol": "setSelectionScope"
  320. },
  321. "implementation": "已有实现",
  322. "boundary": "整体作用主装备根;部件作用实际节点。",
  323. "fix": "保留当前选择层级合同。",
  324. "acceptance": "点击可见 mesh,整体/部件切换选择目标不同。"
  325. },
  326. {
  327. "id": "selection.sync",
  328. "group": "资源库与场景树",
  329. "name": "树 / 视口 / 属性选择联动",
  330. "source": {
  331. "file": "../../../unreal_tran/src/main.js",
  332. "line": 1947,
  333. "symbol": "selectObject"
  334. },
  335. "implementation": "本轮修复",
  336. "boundary": "显示实际对象并更新辅助框;环境也是可编辑对象。",
  337. "fix": "关闭轮廓后重选不恢复辅助框。",
  338. "acceptance": "三处名称/对象 ID 一致,重选后轮廓状态保持。"
  339. },
  340. {
  341. "id": "view.orbit",
  342. "group": "三维视图与操作",
  343. "name": "鼠标旋转 / 平移 / 缩放视角",
  344. "source": {
  345. "file": "../../../unreal_tran/src/main.js",
  346. "line": 2,
  347. "symbol": "OrbitControls"
  348. },
  349. "implementation": "已有实现",
  350. "boundary": "当前三维相机;不是模型变换。",
  351. "fix": "无本轮专门改动。",
  352. "acceptance": "鼠标操作改变镜头但不改变对象局部坐标。"
  353. },
  354. {
  355. "id": "view.focus",
  356. "group": "三维视图与操作",
  357. "name": "聚焦选中 / F",
  358. "source": {
  359. "file": "../../../unreal_tran/src/main.js",
  360. "line": 2272,
  361. "symbol": "fitCamera"
  362. },
  363. "implementation": "已有实现",
  364. "boundary": "按当前对象包围盒定位相机。",
  365. "fix": "无本轮专门改动。",
  366. "acceptance": "小模型/部件聚焦后仍可见,不被裁剪。"
  367. },
  368. {
  369. "id": "view.move",
  370. "group": "三维视图与操作",
  371. "name": "移动工具 / W",
  372. "source": {
  373. "file": "../../../unreal_tran/src/main.js",
  374. "line": 2234,
  375. "symbol": "setTransformMode"
  376. },
  377. "implementation": "本轮修复",
  378. "boundary": "拖拽编辑对象局部位置,保存后重开一致。",
  379. "fix": "动画姿态下更新基值只扣实际偏移。",
  380. "acceptance": "移动后保存、刷新及动画再播放不漂移。"
  381. },
  382. {
  383. "id": "view.rotate",
  384. "group": "三维视图与操作",
  385. "name": "旋转工具 / E",
  386. "source": {
  387. "file": "../../../unreal_tran/src/main.js",
  388. "line": 2234,
  389. "symbol": "setTransformMode"
  390. },
  391. "implementation": "本轮修复",
  392. "boundary": "对象旋转;与当前时间轴旋转叠加需要一致。",
  393. "fix": "统一动画基值处理。",
  394. "acceptance": "旋转后保存/撤销/重做姿态一致。"
  395. },
  396. {
  397. "id": "view.scale",
  398. "group": "三维视图与操作",
  399. "name": "缩放工具 / R",
  400. "source": {
  401. "file": "../../../unreal_tran/src/main.js",
  402. "line": 2234,
  403. "symbol": "setTransformMode"
  404. },
  405. "implementation": "已有实现",
  406. "boundary": "对象缩放持久化;时间轴没有缩放轨道 UI。",
  407. "fix": "无新增缩放动画能力。",
  408. "acceptance": "对象缩放保存和重开正确。"
  409. },
  410. {
  411. "id": "view.grid",
  412. "group": "三维视图与操作",
  413. "name": "网格开关",
  414. "source": {
  415. "file": "../../../unreal_tran/src/main.js",
  416. "line": 2283,
  417. "symbol": "toggleGrid"
  418. },
  419. "implementation": "已有实现",
  420. "boundary": "临时视图选项,不要求写入工程。",
  421. "fix": "非持久化不计保存缺陷。",
  422. "acceptance": "开关只影响辅助网格,不改变模型。"
  423. },
  424. {
  425. "id": "view.pbr",
  426. "group": "三维视图与操作",
  427. "name": "PBR 光照开关",
  428. "source": {
  429. "file": "../../../unreal_tran/src/main.js",
  430. "line": 2236,
  431. "symbol": "handleView"
  432. },
  433. "implementation": "已有实现",
  434. "boundary": "当前照明预览选项;不是批量材质编辑。",
  435. "fix": "非持久化不计保存缺陷。",
  436. "acceptance": "开关改变显示,物体材质字段不被覆盖。"
  437. },
  438. {
  439. "id": "view.wireframe",
  440. "group": "三维视图与操作",
  441. "name": "线框开关",
  442. "source": {
  443. "file": "../../../unreal_tran/src/main.js",
  444. "line": 2236,
  445. "symbol": "handleView"
  446. },
  447. "implementation": "已有实现",
  448. "boundary": "当前视图选项;不承诺保存到工程。",
  449. "fix": "非持久化不计保存缺陷。",
  450. "acceptance": "线框开关恢复正常着色。"
  451. },
  452. {
  453. "id": "view.outline",
  454. "group": "三维视图与操作",
  455. "name": "选中轮廓开关",
  456. "source": {
  457. "file": "../../../unreal_tran/src/main.js",
  458. "line": 2236,
  459. "symbol": "handleView"
  460. },
  461. "implementation": "本轮修复",
  462. "boundary": "当前会话偏好,进出预览后保持;不要求跨重载存储。",
  463. "fix": "重选时不重新泄露轮廓。",
  464. "acceptance": "关闭→重选→预览→退出,轮廓仍关闭。"
  465. },
  466. {
  467. "id": "view.perspective",
  468. "group": "三维视图与操作",
  469. "name": "透视视角按钮",
  470. "source": {
  471. "file": "../../../unreal_tran/src/main.js",
  472. "line": 2236,
  473. "symbol": "handleView"
  474. },
  475. "implementation": "现有边界",
  476. "boundary": "重置透视观察角度;当前没有正交视角菜单。",
  477. "fix": "不把临时视图状态当作保存缺陷。",
  478. "acceptance": "点击后相机和聚焦目标正常。"
  479. },
  480. {
  481. "id": "view.snapshot",
  482. "group": "三维视图与操作",
  483. "name": "下载视口截图",
  484. "source": {
  485. "file": "../../../unreal_tran/src/main.js",
  486. "line": 3092,
  487. "symbol": "downloadSnapshot"
  488. },
  489. "implementation": "已有实现",
  490. "boundary": "当前 canvas PNG,可包含编辑辅助元素;保存封面是独立截图流程。",
  491. "fix": "无本轮专门改动。",
  492. "acceptance": "PNG 下载可打开,内容与当前视口对应。"
  493. },
  494. {
  495. "id": "view.panels",
  496. "group": "三维视图与操作",
  497. "name": "底部页签 / Tab / 面板高度",
  498. "source": {
  499. "file": "../../../unreal_tran/src/main.js",
  500. "line": 2215,
  501. "symbol": "switchBottomMode"
  502. },
  503. "implementation": "已有实现",
  504. "boundary": "时间轴、蓝图、曲线、日志切换;拖分割条只调整当前工作区。",
  505. "fix": "曲线入口接真实数据。",
  506. "acceptance": "各页签显示正确内容,调整高度后画布正确 resize。"
  507. },
  508. {
  509. "id": "view.preview",
  510. "group": "三维视图与操作",
  511. "name": "进入 / 退出运行预览",
  512. "source": {
  513. "file": "../../../unreal_tran/src/main.js",
  514. "line": 2284,
  515. "symbol": "togglePreview"
  516. },
  517. "implementation": "本轮修复",
  518. "boundary": "真实当前三维场景;隐藏辅助工具,退出不丢编辑状态。",
  519. "fix": "进入显式派发 auto;退出停止运行并恢复轮廓策略。",
  520. "acceptance": "进入/退出与 Esc,三维仍可见,无辅助框泄漏。"
  521. },
  522. {
  523. "id": "view.preview-step",
  524. "group": "三维视图与操作",
  525. "name": "预览播放 / 前后导航",
  526. "source": {
  527. "file": "../../../unreal_tran/src/main.js",
  528. "line": 2122,
  529. "symbol": "bindShellEvents"
  530. },
  531. "implementation": "现有边界",
  532. "boundary": "播放运行蓝图;前后按钮当前按时间轴 ±2 秒,不是按业务工序跳转。",
  533. "fix": "无新增业务工序导航。",
  534. "acceptance": "播放触发真实流程;前后跳时与时间轴一致。"
  535. },
  536. {
  537. "id": "property.name",
  538. "group": "对象属性与扩展标记",
  539. "name": "对象名称",
  540. "source": {
  541. "file": "../../../unreal_tran/src/main.js",
  542. "line": 1996,
  543. "symbol": "bindInspectorEvents"
  544. },
  545. "implementation": "已有实现",
  546. "boundary": "修改当前节点名,标识保持稳定。",
  547. "fix": "无本轮专门改动。",
  548. "acceptance": "树和属性同步,保存重开名称保留。"
  549. },
  550. {
  551. "id": "property.identity",
  552. "group": "对象属性与扩展标记",
  553. "name": "对象标识 / 状态说明",
  554. "source": {
  555. "file": "../../../unreal_tran/src/main.js",
  556. "line": 1958,
  557. "symbol": "renderInspector"
  558. },
  559. "implementation": "本轮修复",
  560. "boundary": "标识只读;可见性含祖先状态,阴影取实际castShadow;编辑能力由宿主权限注入。",
  561. "fix": "不再固定显示“可见/投射阴影”,补宿主可编辑状态钩子。",
  562. "acceptance": "标识不可编辑;选中对象、隐藏状态、阴影及只读权限标签一致。"
  563. },
  564. {
  565. "id": "property.position",
  566. "group": "对象属性与扩展标记",
  567. "name": "位置 XYZ 数值",
  568. "source": {
  569. "file": "../../../unreal_tran/src/main.js",
  570. "line": 1996,
  571. "symbol": "bindInspectorEvents"
  572. },
  573. "implementation": "本轮修复",
  574. "boundary": "局部坐标;动画当前帧下编辑也能生成正确基值。",
  575. "fix": "中性姿态与实际应用偏移统一。",
  576. "acceptance": "三个轴编辑、保存重开、动画回放一致。"
  577. },
  578. {
  579. "id": "property.rotation",
  580. "group": "对象属性与扩展标记",
  581. "name": "旋转 XYZ 数值",
  582. "source": {
  583. "file": "../../../unreal_tran/src/main.js",
  584. "line": 1996,
  585. "symbol": "bindInspectorEvents"
  586. },
  587. "implementation": "本轮修复",
  588. "boundary": "输入角度转弧度存储,显示角度。",
  589. "fix": "多轨旋转基值不重复扣除。",
  590. "acceptance": "度数显示与存储/播放的弧度一致。"
  591. },
  592. {
  593. "id": "property.scale",
  594. "group": "对象属性与扩展标记",
  595. "name": "缩放 XYZ 数值",
  596. "source": {
  597. "file": "../../../unreal_tran/src/main.js",
  598. "line": 1996,
  599. "symbol": "bindInspectorEvents"
  600. },
  601. "implementation": "已有实现",
  602. "boundary": "对象当前缩放,不添加新的缩放轨道。",
  603. "fix": "无本轮专门改动。",
  604. "acceptance": "非均匀缩放可保存和重开。"
  605. },
  606. {
  607. "id": "property.color",
  608. "group": "对象属性与扩展标记",
  609. "name": "材质基础色",
  610. "source": {
  611. "file": "../../../unreal_tran/src/main.js",
  612. "line": 1996,
  613. "symbol": "bindInspectorEvents"
  614. },
  615. "implementation": "现有边界",
  616. "boundary": "只编辑当前对象第一个材质槽;共享材质可能影响共享该实例的网格。",
  617. "fix": "界面明确材质槽 1/N。",
  618. "acceptance": "颜色修改、保存重开对应当前槽;不宣称所有槽可编辑。"
  619. },
  620. {
  621. "id": "property.metalness",
  622. "group": "对象属性与扩展标记",
  623. "name": "材质金属度",
  624. "source": {
  625. "file": "../../../unreal_tran/src/main.js",
  626. "line": 1996,
  627. "symbol": "bindInspectorEvents"
  628. },
  629. "implementation": "现有边界",
  630. "boundary": "当前首槽 PBR 参数 0~1。",
  631. "fix": "标明材质槽范围。",
  632. "acceptance": "拖动参数有效,保存重开值一致。"
  633. },
  634. {
  635. "id": "property.roughness",
  636. "group": "对象属性与扩展标记",
  637. "name": "材质粗糙度",
  638. "source": {
  639. "file": "../../../unreal_tran/src/main.js",
  640. "line": 1996,
  641. "symbol": "bindInspectorEvents"
  642. },
  643. "implementation": "现有边界",
  644. "boundary": "当前首槽 PBR 参数 0~1。",
  645. "fix": "标明材质槽范围。",
  646. "acceptance": "参数与当前槽持久化一致。"
  647. },
  648. {
  649. "id": "property.opacity",
  650. "group": "对象属性与扩展标记",
  651. "name": "材质透明度",
  652. "source": {
  653. "file": "../../../unreal_tran/src/main.js",
  654. "line": 1996,
  655. "symbol": "bindInspectorEvents"
  656. },
  657. "implementation": "现有边界",
  658. "boundary": "当前首槽;联动 transparent/depthWrite。",
  659. "fix": "保留实际透明度保存字段。",
  660. "acceptance": "透明效果与重开结果一致。"
  661. },
  662. {
  663. "id": "property.code",
  664. "group": "对象属性与扩展标记",
  665. "name": "自定义资源编码",
  666. "source": {
  667. "file": "../../../unreal_tran/src/main.js",
  668. "line": 1996,
  669. "symbol": "bindInspectorEvents"
  670. },
  671. "implementation": "本轮修复",
  672. "boundary": "对象 customProperties.resourceCode,不是服务器资产主键。",
  673. "fix": "输入真正回写、保存、恢复及撤销。",
  674. "acceptance": "编辑、清空、重选、JSON 往返、刷新均一致。"
  675. },
  676. {
  677. "id": "property.status",
  678. "group": "对象属性与扩展标记",
  679. "name": "自定义运行状态",
  680. "source": {
  681. "file": "../../../unreal_tran/src/main.js",
  682. "line": 1996,
  683. "symbol": "bindInspectorEvents"
  684. },
  685. "implementation": "本轮修复",
  686. "boundary": "NORMAL/SERVICE 标签,不会发起真实设备控制。",
  687. "fix": "真正写回对象,首次变更可撤销。",
  688. "acceptance": "两状态切换及刷新保留。"
  689. },
  690. {
  691. "id": "property.binding",
  692. "group": "对象属性与扩展标记",
  693. "name": "流程绑定说明",
  694. "source": {
  695. "file": "../../../unreal_tran/src/main.js",
  696. "line": 1958,
  697. "symbol": "renderInspector"
  698. },
  699. "implementation": "现有边界",
  700. "boundary": "只读显示模板/时间轴名称,不是教学任务的设备或物联网绑定。",
  701. "fix": "无本轮业务绑定改造。",
  702. "acceptance": "只读,不将其当作任务绑定操作验收。"
  703. },
  704. {
  705. "id": "component.inspect",
  706. "group": "对象属性与扩展标记",
  707. "name": "组件页内置能力说明",
  708. "source": {
  709. "file": "../../../unreal_tran/src/main.js",
  710. "line": 1975,
  711. "symbol": "renderComponents"
  712. },
  713. "implementation": "现有边界",
  714. "boundary": "变换、场景节点、渲染等派生说明,没有通用组件启停系统。",
  715. "fix": "区分内置说明与自定义标记。",
  716. "acceptance": "显示与对象类型一致,不虚报可执行组件配置。"
  717. },
  718. {
  719. "id": "component.tag",
  720. "group": "对象属性与扩展标记",
  721. "name": "添加扩展标记",
  722. "source": {
  723. "file": "../../../unreal_tran/src/main.js",
  724. "line": 1975,
  725. "symbol": "renderComponents"
  726. },
  727. "implementation": "本轮澄清",
  728. "boundary": "只保存名称标签;没有脚本、启停、运行时行为。",
  729. "fix": "从“添加组件”改为“扩展标记,仅保存标签”。",
  730. "acceptance": "新增标签保存/重开;不得声称已启用新行为。"
  731. },
  732. {
  733. "id": "timeline.play",
  734. "group": "时间轴与曲线",
  735. "name": "播放 / 暂停 / Space",
  736. "source": {
  737. "file": "../../../unreal_tran/src/timeline.js",
  738. "line": 393,
  739. "symbol": "play()"
  740. },
  741. "implementation": "已有实现",
  742. "boundary": "播放当前编辑时间轴;原生 GLB 动画单独控制。",
  743. "fix": "停止清理与时间同步由本轮补强。",
  744. "acceptance": "播放进度/真实对象姿态变化,暂停停在当前帧。"
  745. },
  746. {
  747. "id": "timeline.stop",
  748. "group": "时间轴与曲线",
  749. "name": "停止",
  750. "source": {
  751. "file": "../../../unreal_tran/src/timeline.js",
  752. "line": 429,
  753. "symbol": "stop()"
  754. },
  755. "implementation": "已有实现",
  756. "boundary": "停止并回到起始时间,按起始帧应用动画。",
  757. "fix": "无本轮语义扩展。",
  758. "acceptance": "按钮停止后不再自行前进。"
  759. },
  760. {
  761. "id": "timeline.loop",
  762. "group": "时间轴与曲线",
  763. "name": "循环开关",
  764. "source": {
  765. "file": "../../../unreal_tran/src/timeline.js",
  766. "line": 198,
  767. "symbol": "#bindEvents"
  768. },
  769. "implementation": "本轮修复",
  770. "boundary": "循环设置随 timeline 保存;不循环到达终点只完成一次。",
  771. "fix": "循环变更进入历史/dirty。",
  772. "acceptance": "开关、保存重开、到末尾/循环边界正确。"
  773. },
  774. {
  775. "id": "timeline.key-nav",
  776. "group": "时间轴与曲线",
  777. "name": "上一 / 下一关键帧",
  778. "source": {
  779. "file": "../../../unreal_tran/src/timeline.js",
  780. "line": 232,
  781. "symbol": "#onClick"
  782. },
  783. "implementation": "已有实现",
  784. "boundary": "按时间轴关键帧时间定位。",
  785. "fix": "无本轮专门改动。",
  786. "acceptance": "多个轨道时跳到正确相邻关键时刻。"
  787. },
  788. {
  789. "id": "timeline.seek",
  790. "group": "时间轴与曲线",
  791. "name": "拖播放头 / 点击刻度",
  792. "source": {
  793. "file": "../../../unreal_tran/src/timeline.js",
  794. "line": 263,
  795. "symbol": "#onPointerDown"
  796. },
  797. "implementation": "本轮修复",
  798. "boundary": "实时求值当前帧;键盘左右移动一帧,Shift 移动一秒。",
  799. "fix": "拖动补发 timechange,解绑指针监听。",
  800. "acceptance": "时间码、曲线和视口姿态同步。"
  801. },
  802. {
  803. "id": "timeline.add-track",
  804. "group": "时间轴与曲线",
  805. "name": "添加轨道",
  806. "source": {
  807. "file": "../../../unreal_tran/src/timeline.js",
  808. "line": 471,
  809. "symbol": "addTrack("
  810. },
  811. "implementation": "已有实现",
  812. "boundary": "当前主装备节点的变换轨道。",
  813. "fix": "无新增轨道类型。",
  814. "acceptance": "增加后可绑定节点并保存。"
  815. },
  816. {
  817. "id": "timeline.remove-track",
  818. "group": "时间轴与曲线",
  819. "name": "删除轨道",
  820. "source": {
  821. "file": "../../../unreal_tran/src/timeline.js",
  822. "line": 495,
  823. "symbol": "removeTrack("
  824. },
  825. "implementation": "本轮修复",
  826. "boundary": "删除后不再保留该轨道施加的旧姿态。",
  827. "fix": "宿主恢复此前作用的属性基值。",
  828. "acceptance": "删除即时复原,再保存/重开一致。"
  829. },
  830. {
  831. "id": "timeline.target",
  832. "group": "时间轴与曲线",
  833. "name": "修改轨道目标节点",
  834. "source": {
  835. "file": "../../../unreal_tran/src/timeline.js",
  836. "line": 506,
  837. "symbol": "updateSelectedTrack"
  838. },
  839. "implementation": "本轮修复",
  840. "boundary": "用稳定对象标识绑定,不靠同名第一项。",
  841. "fix": "重绑清理旧目标的应用姿态。",
  842. "acceptance": "从 A 改为 B,A 复原,B 播放。"
  843. },
  844. {
  845. "id": "timeline.property",
  846. "group": "时间轴与曲线",
  847. "name": "选择位置 / 旋转属性",
  848. "source": {
  849. "file": "../../../unreal_tran/src/timeline.js",
  850. "line": 506,
  851. "symbol": "updateSelectedTrack"
  852. },
  853. "implementation": "已有实现",
  854. "boundary": "位置 XYZ 向量、旋转 X/Y/Z;没有缩放轨道 UI。",
  855. "fix": "保留当前实际能力。",
  856. "acceptance": "属性切换后关键帧类型和播放一致。"
  857. },
  858. {
  859. "id": "timeline.mute",
  860. "group": "时间轴与曲线",
  861. "name": "轨道静音",
  862. "source": {
  863. "file": "../../../unreal_tran/src/timeline.js",
  864. "line": 232,
  865. "symbol": "#onClick"
  866. },
  867. "implementation": "本轮修复",
  868. "boundary": "仅忽略当前轨道,不关闭其他轨道。",
  869. "fix": "不再停留旧姿态或保存时重复扣值。",
  870. "acceptance": "静音/恢复后实际姿态与重开一致。"
  871. },
  872. {
  873. "id": "timeline.record",
  874. "group": "时间轴与曲线",
  875. "name": "记录当前姿态关键帧",
  876. "source": {
  877. "file": "../../../unreal_tran/src/main.js",
  878. "line": 2276,
  879. "symbol": "addKeyframeFromSelection"
  880. },
  881. "implementation": "本轮修复",
  882. "boundary": "记录相对对象基值的当前值。",
  883. "fix": "与多轨实际应用/保存采用同一基值。",
  884. "acceptance": "操作对象后记录,回放命中相同姿态。"
  885. },
  886. {
  887. "id": "timeline.add-key",
  888. "group": "时间轴与曲线",
  889. "name": "双击新增关键帧",
  890. "source": {
  891. "file": "../../../unreal_tran/src/timeline.js",
  892. "line": 255,
  893. "symbol": "#onDoubleClick"
  894. },
  895. "implementation": "已有实现",
  896. "boundary": "在轨道对应时刻创建/更新关键帧。",
  897. "fix": "时间碰撞保留当前编辑帧。",
  898. "acceptance": "新增后节点可选,时间/数值可保存。"
  899. },
  900. {
  901. "id": "timeline.delete-key",
  902. "group": "时间轴与曲线",
  903. "name": "删除关键帧 / Delete",
  904. "source": {
  905. "file": "../../../unreal_tran/src/timeline.js",
  906. "line": 584,
  907. "symbol": "deleteSelected"
  908. },
  909. "implementation": "已有实现",
  910. "boundary": "删除选中的关键帧;输入框编辑时不截获删除键。",
  911. "fix": "删除和监听清理回归。",
  912. "acceptance": "删除后曲线和播放变化,撤销可恢复。"
  913. },
  914. {
  915. "id": "timeline.drag-key",
  916. "group": "时间轴与曲线",
  917. "name": "关键帧拖动 / Alt 取消吸附",
  918. "source": {
  919. "file": "../../../unreal_tran/src/timeline.js",
  920. "line": 263,
  921. "symbol": "#onPointerDown"
  922. },
  923. "implementation": "本轮修复",
  924. "boundary": "默认 1/30 秒吸附;重叠时合并,保留正在编辑帧。",
  925. "fix": "拖动时间同步,碰撞处理确定。",
  926. "acceptance": "拖动/重叠/Alt 行为和保存后时间正确。"
  927. },
  928. {
  929. "id": "timeline.zoom",
  930. "group": "时间轴与曲线",
  931. "name": "时间轴缩放",
  932. "source": {
  933. "file": "../../../unreal_tran/src/timeline.js",
  934. "line": 451,
  935. "symbol": "setZoom"
  936. },
  937. "implementation": "已有实现",
  938. "boundary": "显示缩放随 timeline 记录;不改变时长/关键帧数值。",
  939. "fix": "无本轮专门改动。",
  940. "acceptance": "缩放不改变动作内容。"
  941. },
  942. {
  943. "id": "timeline.multitrack",
  944. "group": "时间轴与曲线",
  945. "name": "多轨组合与保存基值",
  946. "source": {
  947. "file": "../../../unreal_tran/src/model-editor-state.js",
  948. "line": 12,
  949. "symbol": "applyEditorTimelinePose"
  950. },
  951. "implementation": "本轮修复",
  952. "boundary": "不同属性组合;同对象同属性最后有效轨道生效。",
  953. "fix": "求值、手工编辑基值、序列化一致。",
  954. "acceptance": "两轨同属性、静音、删轨、重绑、重开无漂移。"
  955. },
  956. {
  957. "id": "timeline.baseline",
  958. "group": "时间轴与曲线",
  959. "name": "载入装备基准动作",
  960. "source": {
  961. "file": "../../../unreal_tran/src/main.js",
  962. "line": 3058,
  963. "symbol": "loadBaselineAnimation"
  964. },
  965. "implementation": "现有边界",
  966. "boundary": "匹配部件后直接替换当前时间轴/蓝图;当前没有单独确认框,不是任意维修流程自动生成。",
  967. "fix": "保持当前装备限定;无匹配只提示,不改工程。",
  968. "acceptance": "匹配时载入/保存/重开;无匹配时保留原数据并给出提示。"
  969. },
  970. {
  971. "id": "timeline.native",
  972. "group": "时间轴与曲线",
  973. "name": "GLB 原生动画选择 / 播放",
  974. "source": {
  975. "file": "../../../unreal_tran/src/main.js",
  976. "line": 1715,
  977. "symbol": "selectNativeAnimation"
  978. },
  979. "implementation": "已有实现",
  980. "boundary": "真实 GLB 自带片段;保存选择索引,不是蓝图 clip 字段。",
  981. "fix": "无片段时禁用。",
  982. "acceptance": "狐狸实际动画播放/暂停,选择保存后重开一致。"
  983. },
  984. {
  985. "id": "timeline.curve",
  986. "group": "时间轴与曲线",
  987. "name": "曲线选择轨道 / 关键帧",
  988. "source": {
  989. "file": "../../../unreal_tran/src/model-curve-editor.js",
  990. "line": 5,
  991. "symbol": "class ModelCurveEditor"
  992. },
  993. "implementation": "本轮修复",
  994. "boundary": "曲线与时间轴共用一份轨道和关键帧数据。",
  995. "fix": "移除固定 SVG 假数据。",
  996. "acceptance": "实际轨道名和点数匹配时间轴,点击同步当前帧。"
  997. },
  998. {
  999. "id": "curve.time",
  1000. "group": "时间轴与曲线",
  1001. "name": "曲线编辑时间",
  1002. "source": {
  1003. "file": "../../../unreal_tran/src/model-curve-editor.js",
  1004. "line": 30,
  1005. "symbol": "change(input)"
  1006. },
  1007. "implementation": "本轮修复",
  1008. "boundary": "更新实际 key.time,约束在时间轴时长内。",
  1009. "fix": "调用 timeline.updateKeyframe 并保持编辑目标。",
  1010. "acceptance": "改时间后重排、撤销、JSON 往返一致。"
  1011. },
  1012. {
  1013. "id": "curve.value",
  1014. "group": "时间轴与曲线",
  1015. "name": "曲线编辑标量 / XYZ 数值",
  1016. "source": {
  1017. "file": "../../../unreal_tran/src/model-curve-editor.js",
  1018. "line": 30,
  1019. "symbol": "change(input)"
  1020. },
  1021. "implementation": "本轮修复",
  1022. "boundary": "修改实际关键帧值,向量编辑保留其他分量。",
  1023. "fix": "无效空值拒绝提交。",
  1024. "acceptance": "标量和向量都驱动真实姿态并保存。"
  1025. },
  1026. {
  1027. "id": "curve.easing",
  1028. "group": "时间轴与曲线",
  1029. "name": "曲线插值",
  1030. "source": {
  1031. "file": "../../../unreal_tran/src/model-curve-editor.js",
  1032. "line": 30,
  1033. "symbol": "change(input)"
  1034. },
  1035. "implementation": "本轮修复",
  1036. "boundary": "支持线性、平滑、缓入、缓出、阶梯;没有 Bezier 切线 UI。",
  1037. "fix": "阶梯插值与已有下游时间轴求值一致。",
  1038. "acceptance": "修改插值改变中间帧,重开保留。"
  1039. },
  1040. {
  1041. "id": "curve.axis",
  1042. "group": "时间轴与曲线",
  1043. "name": "曲线 XYZ 分量显示",
  1044. "source": {
  1045. "file": "../../../unreal_tran/src/model-curve-editor.js",
  1046. "line": 30,
  1047. "symbol": "change(input)"
  1048. },
  1049. "implementation": "已有实现",
  1050. "boundary": "改变图上显示分量,不改另外两轴的数据。",
  1051. "fix": "当前实际向量轨道才出现。",
  1052. "acceptance": "切分量显示不同曲线,数值不被改写。"
  1053. },
  1054. {
  1055. "id": "blueprint.palette",
  1056. "group": "蓝图与交互反馈",
  1057. "name": "节点库搜索 / 拖入节点",
  1058. "source": {
  1059. "file": "../../../unreal_tran/src/blueprint.js",
  1060. "line": 287,
  1061. "symbol": "_renderPalette"
  1062. },
  1063. "implementation": "已有实现",
  1064. "boundary": "当前七类节点:触发、时间轴、等待、高亮、提示、条件、完成。",
  1065. "fix": "不新增任意脚本节点。",
  1066. "acceptance": "搜索、拖入后节点类型和参数可保存。"
  1067. },
  1068. {
  1069. "id": "blueprint.add",
  1070. "group": "蓝图与交互反馈",
  1071. "name": "添加节点按钮",
  1072. "source": {
  1073. "file": "../../../unreal_tran/src/blueprint.js",
  1074. "line": 257,
  1075. "symbol": "_bind()"
  1076. },
  1077. "implementation": "已有实现",
  1078. "boundary": "工具栏默认添加提示节点;其他类型来自节点库。",
  1079. "fix": "无本轮专门改动。",
  1080. "acceptance": "新增进入画布、历史与 JSON。"
  1081. },
  1082. {
  1083. "id": "blueprint.parameters",
  1084. "group": "蓝图与交互反馈",
  1085. "name": "节点标题 / 参数编辑",
  1086. "source": {
  1087. "file": "../../../unreal_tran/src/blueprint.js",
  1088. "line": 431,
  1089. "symbol": "_renderInspector"
  1090. },
  1091. "implementation": "已有实现",
  1092. "boundary": "按节点类型提供数字、文字、枚举、复选框。",
  1093. "fix": "保留数值边界与真实数据写回。",
  1094. "acceptance": "改参数与标题后重开保留。"
  1095. },
  1096. {
  1097. "id": "blueprint.move",
  1098. "group": "蓝图与交互反馈",
  1099. "name": "节点拖动 / 多选框选",
  1100. "source": {
  1101. "file": "../../../unreal_tran/src/blueprint.js",
  1102. "line": 566,
  1103. "symbol": "_onViewportPointerDown"
  1104. },
  1105. "implementation": "已有实现",
  1106. "boundary": "节点布局随蓝图 JSON 保存。",
  1107. "fix": "无本轮专门改动。",
  1108. "acceptance": "多选移动位置正确,撤销恢复。"
  1109. },
  1110. {
  1111. "id": "blueprint.connect",
  1112. "group": "蓝图与交互反馈",
  1113. "name": "连接 / 替换 / 删除执行线",
  1114. "source": {
  1115. "file": "../../../unreal_tran/src/blueprint.js",
  1116. "line": 767,
  1117. "symbol": "connect("
  1118. },
  1119. "implementation": "本轮修复",
  1120. "boundary": "单输出重连替换;允许多个来源汇聚同一输入。",
  1121. "fix": "不再清掉同一输入的其他合法来源。",
  1122. "acceptance": "true/false 汇聚保留两条,替换输出只影响该线。"
  1123. },
  1124. {
  1125. "id": "blueprint.delete",
  1126. "group": "蓝图与交互反馈",
  1127. "name": "删除节点 / 连线",
  1128. "source": {
  1129. "file": "../../../unreal_tran/src/blueprint.js",
  1130. "line": 786,
  1131. "symbol": "deleteSelection"
  1132. },
  1133. "implementation": "已有实现",
  1134. "boundary": "删除节点一并清理相关边。",
  1135. "fix": "复制/剪切使用同一图数据合同。",
  1136. "acceptance": "无悬空边;撤销恢复完整图。"
  1137. },
  1138. {
  1139. "id": "blueprint.copy",
  1140. "group": "蓝图与交互反馈",
  1141. "name": "复制 / 剪切 / 粘贴",
  1142. "source": {
  1143. "file": "../../../unreal_tran/src/blueprint.js",
  1144. "line": 714,
  1145. "symbol": "copySelection"
  1146. },
  1147. "implementation": "本轮修复",
  1148. "boundary": "Ctrl/Cmd+C/X/V;复制选区内部边,不复制指向外部的边。",
  1149. "fix": "新节点 ID 和内部连线同步生成,阻止快捷键冒泡。",
  1150. "acceptance": "副本内部连接正确,不误删外部对象。"
  1151. },
  1152. {
  1153. "id": "blueprint.canvas",
  1154. "group": "蓝图与交互反馈",
  1155. "name": "平移 / 缩放 / 适应画布",
  1156. "source": {
  1157. "file": "../../../unreal_tran/src/blueprint.js",
  1158. "line": 801,
  1159. "symbol": "frameAll"
  1160. },
  1161. "implementation": "已有实现",
  1162. "boundary": "蓝图画布浏览;不是三维相机。",
  1163. "fix": "无本轮专门改动。",
  1164. "acceptance": "滚轮、Space 拖动和适应可见全部节点。"
  1165. },
  1166. {
  1167. "id": "blueprint.run",
  1168. "group": "蓝图与交互反馈",
  1169. "name": "运行 / F5",
  1170. "source": {
  1171. "file": "../../../unreal_tran/src/blueprint.js",
  1172. "line": 871,
  1173. "symbol": "async run("
  1174. },
  1175. "implementation": "本轮修复",
  1176. "boundary": "在当前模型编辑器驱动真实场景;有 200 步循环上限。",
  1177. "fix": "条件与等待流程回归。",
  1178. "acceptance": "执行高亮、动作、反馈;循环图可终止不挂死。"
  1179. },
  1180. {
  1181. "id": "blueprint.stop",
  1182. "group": "蓝图与交互反馈",
  1183. "name": "停止运行",
  1184. "source": {
  1185. "file": "../../../unreal_tran/src/blueprint.js",
  1186. "line": 997,
  1187. "symbol": "stop("
  1188. },
  1189. "implementation": "本轮修复",
  1190. "boundary": "停止中断挂起等待,旧运行不覆盖新运行状态。",
  1191. "fix": "AbortSignal 贯穿宿主动作与高亮清理。",
  1192. "acceptance": "等待/动画中停止及时退出,无迟到完成提示。"
  1193. },
  1194. {
  1195. "id": "blueprint.reset",
  1196. "group": "蓝图与交互反馈",
  1197. "name": "重置执行",
  1198. "source": {
  1199. "file": "../../../unreal_tran/src/blueprint.js",
  1200. "line": 1014,
  1201. "symbol": "resetExecution"
  1202. },
  1203. "implementation": "已有实现",
  1204. "boundary": "复位执行状态、时间轴和高亮;保留蓝图编辑内容。",
  1205. "fix": "高亮恢复原材质。",
  1206. "acceptance": "运行后重置,进度归零且节点图不丢。"
  1207. },
  1208. {
  1209. "id": "blueprint.click",
  1210. "group": "蓝图与交互反馈",
  1211. "name": "点击触发目标",
  1212. "source": {
  1213. "file": "../../../unreal_tran/src/blueprint.js",
  1214. "line": 933,
  1215. "symbol": "async trigger("
  1216. },
  1217. "implementation": "本轮修复",
  1218. "boundary": "匹配事件和目标 ID/名称/祖先别名;空目标可通配。",
  1219. "fix": "不再点击 B 触发 A。",
  1220. "acceptance": "两个不同目标分别点击,只运行匹配分支。"
  1221. },
  1222. {
  1223. "id": "blueprint.double-click",
  1224. "group": "蓝图与交互反馈",
  1225. "name": "双击触发目标",
  1226. "source": {
  1227. "file": "../../../unreal_tran/src/main.js",
  1228. "line": 2256,
  1229. "symbol": "pickObject"
  1230. },
  1231. "implementation": "本轮修复",
  1232. "boundary": "双击独立派发 double-click,与单击区分。",
  1233. "fix": "增加真实视口双击派发并抑制待发单击。",
  1234. "acceptance": "双击只触发目标的双击分支。"
  1235. },
  1236. {
  1237. "id": "blueprint.auto",
  1238. "group": "蓝图与交互反馈",
  1239. "name": "自动触发",
  1240. "source": {
  1241. "file": "../../../unreal_tran/src/main.js",
  1242. "line": 2284,
  1243. "symbol": "togglePreview"
  1244. },
  1245. "implementation": "本轮修复",
  1246. "boundary": "仅进入预览显式派发 auto,不把每次单击当 auto。",
  1247. "fix": "事件匹配与进入预览联动。",
  1248. "acceptance": "进入预览触发一次,普通点击不重放自动分支。"
  1249. },
  1250. {
  1251. "id": "blueprint.timeline",
  1252. "group": "蓝图与交互反馈",
  1253. "name": "播放时间轴节点",
  1254. "source": {
  1255. "file": "../../../unreal_tran/src/main.js",
  1256. "line": 2024,
  1257. "symbol": "playTimelineForBlueprint"
  1258. },
  1259. "implementation": "本轮修复",
  1260. "boundary": "播放当前唯一时间轴,动作名称仅描述;支持起始时间、速度、等待。",
  1261. "fix": "起始末帧不反跳零,终止可取消。",
  1262. "acceptance": "起始时间和速度实际生效,等待与不等待分支正确。"
  1263. },
  1264. {
  1265. "id": "blueprint.wait",
  1266. "group": "蓝图与交互反馈",
  1267. "name": "等待节点",
  1268. "source": {
  1269. "file": "../../../unreal_tran/src/blueprint.js",
  1270. "line": 1,
  1271. "symbol": "NODE_TYPES"
  1272. },
  1273. "implementation": "已有实现",
  1274. "boundary": "指定毫秒等待;可被停止取消。",
  1275. "fix": "异步停止及时结束。",
  1276. "acceptance": "等待期间停止不会继续执行后续节点。"
  1277. },
  1278. {
  1279. "id": "blueprint.highlight",
  1280. "group": "蓝图与交互反馈",
  1281. "name": "高亮节点 / 呼吸效果",
  1282. "source": {
  1283. "file": "../../../unreal_tran/src/main.js",
  1284. "line": 2052,
  1285. "symbol": "highlightPart"
  1286. },
  1287. "implementation": "本轮修复",
  1288. "boundary": "准确命中可见对象;同名歧义要求标识;没有可高亮材质则报错。",
  1289. "fix": "拒绝错误整机回退,真实呼吸效果,保存忽略临时高亮。",
  1290. "acceptance": "目标正确、找不到报错、结束恢复、保存不永久染色。"
  1291. },
  1292. {
  1293. "id": "blueprint.message",
  1294. "group": "蓝图与交互反馈",
  1295. "name": "操作提示节点",
  1296. "source": {
  1297. "file": "../../../unreal_tran/src/main.js",
  1298. "line": 2099,
  1299. "symbol": "showTeachingMessage"
  1300. },
  1301. "implementation": "现有边界",
  1302. "boundary": "显示标题/文本,可点击关闭或约 1.8/2.5 秒自动继续;不是强制人员确认。",
  1303. "fix": "不将其当作业务审核/签名。",
  1304. "acceptance": "文本出现、关闭和停止不留弹层。"
  1305. },
  1306. {
  1307. "id": "blueprint.condition",
  1308. "group": "蓝图与交互反馈",
  1309. "name": "条件判断节点",
  1310. "source": {
  1311. "file": "../../../unreal_tran/src/main.js",
  1312. "line": 2095,
  1313. "symbol": "evaluateBlueprintCondition"
  1314. },
  1315. "implementation": "本轮修复",
  1316. "boundary": "当前运行变量、嵌套字段、truthy/布尔/数字比较。",
  1317. "fix": "false 没有出口不走 true,字符串布尔正确解析。",
  1318. "acceptance": "真假分支分别验证,缺出口不误执行。"
  1319. },
  1320. {
  1321. "id": "blueprint.finish",
  1322. "group": "蓝图与交互反馈",
  1323. "name": "流程完成节点",
  1324. "source": {
  1325. "file": "../../../unreal_tran/src/main.js",
  1326. "line": 1075,
  1327. "symbol": "initEditors"
  1328. },
  1329. "implementation": "已有实现",
  1330. "boundary": "本次预览结果/进度提示,不写教学任务成绩。",
  1331. "fix": "保持本次运行反馈边界。",
  1332. "acceptance": "成功/完成提示与实际执行结果一致。"
  1333. },
  1334. {
  1335. "id": "publish.preflight",
  1336. "group": "发布、交付与运行信息",
  1337. "name": "生成 / 发布检查面板",
  1338. "source": {
  1339. "file": "../../../unreal_tran/src/main.js",
  1340. "line": 2978,
  1341. "symbol": "togglePublishPanel"
  1342. },
  1343. "implementation": "现有边界",
  1344. "boundary": "本地主要检查资源引用存在及轨道/节点数量,不执行完整蓝图可达性、终止性或业务校验;服务端发布校验最终生效。",
  1345. "fix": "发布目标与离线交付能力明确。",
  1346. "acceptance": "可打开关闭;不完整工程不能凭界面绿标绕过服务端。"
  1347. },
  1348. {
  1349. "id": "publish.api",
  1350. "group": "发布、交付与运行信息",
  1351. "name": "发布到场景资源库",
  1352. "source": {
  1353. "file": "../../../unreal_tran/src/main.js",
  1354. "line": 2897,
  1355. "symbol": "publishToSceneLibrary"
  1356. },
  1357. "implementation": "本轮修复",
  1358. "boundary": "先保存当前工程再发布固定版本;纯 publisher 发布已保存版本。",
  1359. "fix": "整个保存/发布队列互斥,失败不发后续发布。",
  1360. "acceptance": "发布版本/模型资产/列表状态一致,保存失败不发布。"
  1361. },
  1362. {
  1363. "id": "publish.cover",
  1364. "group": "发布、交付与运行信息",
  1365. "name": "发布时当前三维截图封面",
  1366. "source": {
  1367. "file": "../../../unreal_tran/src/main.js",
  1368. "line": 2897,
  1369. "symbol": "publishToSceneLibrary"
  1370. },
  1371. "implementation": "本轮修复",
  1372. "boundary": "JPEG 当前视口;截图或上传失败可保留旧封面并明确提示。",
  1373. "fix": "与手动保存共用封面链路,409 阻断。",
  1374. "acceptance": "真实封面图对应当前模型;上传失败提示一次,旧图保留。"
  1375. },
  1376. {
  1377. "id": "publish.html",
  1378. "group": "发布、交付与运行信息",
  1379. "name": "导出步骤演示 HTML",
  1380. "source": {
  1381. "file": "../../../unreal_tran/src/main.js",
  1382. "line": 3011,
  1383. "symbol": "exportStandaloneHtml"
  1384. },
  1385. "implementation": "本轮澄清",
  1386. "boundary": "工程数据、静态截图和步骤演示;不包含 GLB、不执行真实三维交互。",
  1387. "fix": "生成面板和按钮移除完整离线运行的误导。",
  1388. "acceptance": "下载可打开、步骤导航可用,醒目标明不含三维模型。"
  1389. },
  1390. {
  1391. "id": "publish.downstream",
  1392. "group": "发布、交付与运行信息",
  1393. "name": "下游读取模型固定版本",
  1394. "source": {
  1395. "file": "../../../unreal_tran/src/model-content-api.js",
  1396. "line": 1159,
  1397. "symbol": "publishDocument"
  1398. },
  1399. "implementation": "现有边界",
  1400. "boundary": "已发布模型作为资源引用;下游自动执行模型 timeline/blueprint 尚无统一运行桥接。",
  1401. "fix": "本轮不将资源加载成功等同动作自动运行成功。",
  1402. "acceptance": "固定引用/可见性单独测;自动动作执行列为待确认范围。"
  1403. },
  1404. {
  1405. "id": "feedback.log",
  1406. "group": "发布、交付与运行信息",
  1407. "name": "运行日志",
  1408. "source": {
  1409. "file": "../../../unreal_tran/src/main.js",
  1410. "line": 3116,
  1411. "symbol": "log(message"
  1412. },
  1413. "implementation": "已有实现",
  1414. "boundary": "本次内存运行日志,最多 160 条;不是服务端审计日志。",
  1415. "fix": "错误信息转义,保留清晰运行结果。",
  1416. "acceptance": "选中/运行/保存产生相应日志,不要求刷新保留。"
  1417. },
  1418. {
  1419. "id": "feedback.stats",
  1420. "group": "发布、交付与运行信息",
  1421. "name": "节点 / 三角面 / FPS 等状态",
  1422. "source": {
  1423. "file": "../../../unreal_tran/src/main.js",
  1424. "line": 3094,
  1425. "symbol": "updateStats"
  1426. },
  1427. "implementation": "现有边界",
  1428. "boundary": "节点与三角面统计、当前 FPS;内存为估算值,不是精确浏览器内存剖析。",
  1429. "fix": "无本轮性能仪表重构。",
  1430. "acceptance": "载入模型后统计有合理变化,状态不作为性能验收数据。"
  1431. },
  1432. {
  1433. "id": "feedback.toast",
  1434. "group": "发布、交付与运行信息",
  1435. "name": "成功 / 错误短消息",
  1436. "source": {
  1437. "file": "../../../unreal_tran/src/main.js",
  1438. "line": 3117,
  1439. "symbol": "toast(message"
  1440. },
  1441. "implementation": "已有实现",
  1442. "boundary": "瞬时反馈;保存/发布成功以接口完成为准。",
  1443. "fix": "封面失败不伪报全部成功。",
  1444. "acceptance": "失败出现一次明确提示,自动消失,不形成重复常驻错误条。"
  1445. }
  1446. ]
  1447. }