You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -37,4 +37,4 @@ PASS - Coverage reporting was generated during `npm run test:workspace-v2`.
37
37
38
38
## PR-Specific Note
39
39
40
-
The Workspace V2 run exercised Object Vector Studio V2 frame creation/duplication/deletion/reordering, palette sort controls, Paint/Stroke mode application through canvas clicks, and icon-only shape order/group controls under Objects.
40
+
The Workspace V2 run exercised Object Vector Studio V2 state selection, contextual state help text, legacy state/frame manifest loading, generic frame duplication, playback, runtime preview, and export paths.
- Verified canvas clicks still apply the currently selected Paint/Stroke color.
23
-
- Verified shape order/group actions moved under Objects and render as icon-only controls with titles.
17
+
- Verified the Object Vector Studio V2 frame state dropdown renders beside a `?` help button.
18
+
- Verified the `idle` help text title is `Default stationary state.` and `No movement or action animation active.`
19
+
- Verified the `move` help text title is `Movement/action state.` and `Used for thrusting, walking, flying, or active movement visuals.`
20
+
- Verified new schema-valid state IDs include `move` while legacy `thrust` manifests still load.
21
+
- Verified duplicate frame generation uses generic `frame-x` IDs and does not continue legacy `idle-frame-x` naming.
22
+
- Verified a legacy `idle-frame-1` import duplicates into `frame-1`.
24
23
25
24
## Additional Validation
26
25
27
-
- Targeted Playwright check passed for Object Vector Studio layout, animation frame controls, and Asteroids runtime rendering.
28
-
- Node syntax checks passed for `tools/object-vector-studio-v2/js/ToolStarterApp.js` and `tools/object-vector-studio-v2/js/bootstrap.js`.
29
-
- Node schema-service check passed for `games/Asteroids/game.manifest.json` and its workspace manifest.
26
+
- Targeted Playwright check passed for `supports Object Vector Studio V2 animation states and frame timeline foundation`.
30
27
-`git diff --check` passed.
31
-
32
-
## Frame Control Note
33
-
34
-
`Left` and `Right` are directional aliases for the same frame-order mutation used by `Frame Earlier` and `Frame Later`; all four controls preserve the selected state linkage and only change frame order.
await expect(page.locator("#objectVectorStudioV2StateHelpButton")).toHaveAttribute("title", "Default stationary state.\nNo movement or action animation active.");
await expect(page.locator("#objectVectorStudioV2StateHelpButton")).toHaveAttribute("title", "Movement/action state.\nUsed for thrusting, walking, flying, or active movement visuals.");
await expect(page.locator("#statusLog")).toHaveValue(/FAIL Object Vector Studio V2 schema validation failed from import:object-vector-invalid-animation\.json: root\.objects\[0\]\.states\[0\]\.id must be one of idle, thrust, damaged, destroyed, active, inactive\./);
4134
+
await expect(page.locator("#statusLog")).toHaveValue(/FAIL Object Vector Studio V2 schema validation failed from import:object-vector-invalid-animation\.json: root\.objects\[0\]\.states\[0\]\.id must be one of idle, move, active, inactive, damaged, destroyed, thrust\./);
<buttonid="objectVectorStudioV2StateHelpButton" class="object-vector-studio-v2__state-help" type="button" disabledtitle="Disabled until a state is selected" aria-label="State help">?</button>
168
172
<buttonid="objectVectorStudioV2PlayButton" type="button" disabledtitle="Disabled until a state frame is selected">Play</button>
169
173
<buttonid="objectVectorStudioV2PauseButton" type="button" disabledtitle="Disabled until playback starts">Pause</button>
170
174
<buttonid="objectVectorStudioV2StopButton" type="button" disabledtitle="Disabled until a state frame is selected">Stop</button>
this.statusLog.write(`WARN Create state skipped: ${OBJECT_STATE_LABELS[stateId]} already exists for ${object.name}.`);
2931
+
this.statusLog.write(`WARN Create state skipped: ${OBJECT_STATE_LABELS[stateId]||stateId} already exists for ${object.name}.`);
2864
2932
this.selectState(stateId,"existing state");
2865
2933
return;
2866
2934
}
@@ -2872,9 +2940,9 @@ export class ToolStarterApp {
2872
2940
nextObject.states.push({
2873
2941
frames: [frame],
2874
2942
id: stateId,
2875
-
name: OBJECT_STATE_LABELS[stateId]
2943
+
name: OBJECT_STATE_LABELS[stateId]||stateId
2876
2944
});
2877
-
this.commitPayloadUpdate(nextPayload,object.id,this.selectedShapeIndex,`OK Created state ${OBJECT_STATE_LABELS[stateId]} with frame ${frame.id}.`,"Create state failed schema validation",{
2945
+
this.commitPayloadUpdate(nextPayload,object.id,this.selectedShapeIndex,`OK Created state ${OBJECT_STATE_LABELS[stateId]||stateId} with frame ${frame.id}.`,"Create state failed schema validation",{
2878
2946
selectedFrameId: frame.id,
2879
2947
selectedStateId: stateId
2880
2948
});
@@ -2917,7 +2985,7 @@ export class ToolStarterApp {
2917
2985
}
2918
2986
constframes=sortedFrames(state);
2919
2987
if(frames.length<=1){
2920
-
this.statusLog.write(`WARN Delete frame skipped: frame ${frame.id} is the only frame in ${OBJECT_STATE_LABELS[state.id]}.`);
2988
+
this.statusLog.write(`WARN Delete frame skipped: frame ${frame.id} is the only frame in ${OBJECT_STATE_LABELS[state.id]||state.id}.`);
0 commit comments