|
1 | 1 | # Phase 20 Recovery UAT Validation |
2 | 2 |
|
| 3 | +## Run Date |
| 4 | + |
| 5 | +April 25, 2026 |
| 6 | + |
3 | 7 | ## Status |
4 | 8 |
|
5 | 9 | BLOCKED |
6 | 10 |
|
7 | | -## Required Inputs Read |
| 11 | +## Inputs Read |
8 | 12 |
|
9 | 13 | - `docs/dev/codex_rules.md` |
10 | 14 | - `docs/dev/reports/tool_launch_ssot_routing_validation.md` |
11 | 15 | - `docs/dev/reports/tool_launch_ssot_data_layer_validation.md` |
12 | 16 | - `docs/dev/reports/legacy_launch_fallback_residue_validation.md` |
13 | 17 |
|
14 | | -`docs/dev/specs/TOOL_LAUNCH_SSOT.md` is still not present at the requested path in this repository. |
15 | | - |
16 | | -## Validation Scope |
17 | | - |
18 | | -Validation-only pass. No runtime implementation changes were made. |
| 18 | +`docs/dev/specs/TOOL_LAUNCH_SSOT.md` is not present at the requested path in this repository. |
19 | 19 |
|
20 | | -## Samples Validation |
| 20 | +## 1. Samples Validation |
21 | 21 |
|
22 | 22 | Result: PASS |
23 | 23 |
|
24 | | -- Action label remains `Open <tool>` in `samples/index.render.js:104`. |
25 | | -- Sample launch resolves through SSoT resolver in `samples/index.render.js:92` and `tools/shared/toolLaunchSSoT.js:62`. |
26 | | -- Target path resolves to `tools/<tool>/index.html` via SSoT data (`tools/shared/toolLaunchSSoTData.js:53`, `tools/shared/toolLaunchSSoTData.js:57`). |
27 | | -- External launch memory clear remains in use through `launchWithExternalToolWorkspaceReset` (`samples/index.render.js:539`, `tools/shared/toolLaunchSSoT.js:121`, `tools/shared/toolLaunchSSoT.js:138`). |
| 24 | +- Label is `Open <tool>` at `samples/index.render.js:104`. |
| 25 | +- Launch uses SSoT resolver at `samples/index.render.js:92` -> `tools/shared/toolLaunchSSoT.js:62`. |
| 26 | +- Resolved target path format is `tools/<tool>/index.html`: |
| 27 | + - `sampleLaunch.href = /tools/Sprite%20Editor/index.html?...` |
| 28 | +- External launch memory clear remains intact via: |
| 29 | + - `samples/index.render.js:539` |
| 30 | + - `tools/shared/toolLaunchSSoT.js:121` |
| 31 | + - `tools/shared/toolLaunchSSoT.js:138` |
28 | 32 | - Missing/invalid context fails visibly: |
29 | | - - `sampleMissingContext { href: '', error: 'Tool "sprite-editor" launch is missing sampleId.' }` |
30 | | - - `sampleMissingTarget { href: '', error: 'Tool "not-a-real-tool" is not available in launch SSoT.' }` |
31 | | -- No default/fallback route chosen in sample launch resolver path. |
| 33 | + - `sampleMissingContext => href: ''` |
| 34 | + - `sampleMissingTarget => href: ''` |
| 35 | +- No fallback/default route selection in sample launch resolver path. |
32 | 36 |
|
33 | | -## Games Validation |
| 37 | +## 2. Games Validation |
34 | 38 |
|
35 | 39 | Result: PASS |
36 | 40 |
|
37 | | -- Action label remains `Open with Workspace Manager` in `games/index.render.js:263`. |
38 | | -- Game launch resolves through SSoT resolver in `games/index.render.js:148` and `tools/shared/toolLaunchSSoT.js:95`. |
39 | | -- Target path resolves to `tools/Workspace Manager/index.html` via SSoT data (`tools/shared/toolLaunchSSoTData.js:67`). |
40 | | -- External launch memory clear remains in use through `launchWithExternalToolWorkspaceReset` (`games/index.render.js:419`, `tools/shared/toolLaunchSSoT.js:121`, `tools/shared/toolLaunchSSoT.js:138`). |
| 41 | +- Label is `Open with Workspace Manager` at `games/index.render.js:263`. |
| 42 | +- Launch uses SSoT resolver at `games/index.render.js:148` -> `tools/shared/toolLaunchSSoT.js:95`. |
| 43 | +- Resolved target path format is `tools/Workspace Manager/index.html`: |
| 44 | + - `gameLaunch.href = /tools/Workspace%20Manager/index.html?gameId=2001&mount=game` |
| 45 | +- External launch memory clear remains intact via: |
| 46 | + - `games/index.render.js:419` |
| 47 | + - `tools/shared/toolLaunchSSoT.js:121` |
| 48 | + - `tools/shared/toolLaunchSSoT.js:138` |
41 | 49 | - Missing/invalid context fails visibly: |
42 | | - - invalid source/type returns no href in `gameInvalidContext`. |
43 | | - - missing game metadata href yields visible `Workspace launch error` text (`games/index.render.js:268`, `games/index.render.js:334`). |
44 | | -- No default/fallback route chosen in game launch resolver path. |
| 50 | + - `gameInvalidContext => href: ''` |
| 51 | + - visible UI error path: `Workspace launch error` in `games/index.render.js:268` |
| 52 | +- No fallback/default route selection in game launch resolver path. |
45 | 53 |
|
46 | | -## Workspace Manager UAT Validation |
| 54 | +## 3. Workspace Manager UAT |
47 | 55 |
|
48 | 56 | Result: FAIL |
49 | 57 |
|
50 | | -Validated path: |
| 58 | +Validated route path: |
51 | 59 |
|
52 | 60 | `games/index.html -> Open with Workspace Manager -> /tools/Workspace%20Manager/index.html?gameId=2001&mount=game` |
53 | 61 |
|
54 | | -Observed/pass evidence: |
| 62 | +Pass evidence: |
| 63 | + |
| 64 | +- Route resolves correctly from SSoT (`gameLaunch` output). |
| 65 | +- Memory clear occurs before navigation (`assignCalls` output after clear). |
| 66 | +- Explicit context load exists in Workspace Manager: |
| 67 | + - `writeToolHostSharedContext(...)` at `tools/Workspace Manager/main.js:381` |
| 68 | + - `hostMode: "game"` / `gameId: gameEntry.id` at `tools/Workspace Manager/main.js:386-387` |
| 69 | + |
| 70 | +Fail evidence (fallback/default behavior still present): |
| 71 | + |
| 72 | +- First-item default selection remains: |
| 73 | + - `tools/Workspace Manager/main.js:270` -> `return toolIds[0] || "";` |
| 74 | + - `tools/Workspace Manager/main.js:463` |
| 75 | + - `tools/Workspace Manager/main.js:475` |
| 76 | +- Legacy compatibility query fallback remains: |
| 77 | + - `tools/Workspace Manager/main.js:153` (`searchParams.get("gameId") || searchParams.get("game")`) |
| 78 | + - `tools/Workspace Manager/main.js:284` (`url.searchParams.get("game") || url.searchParams.get("gameId")`) |
55 | 79 |
|
56 | | -- Route is correct from SSoT (`gameLaunch` output). |
57 | | -- Memory clear is executed before navigation (`assignCalls` output after clear). |
58 | | -- Explicit context load logic exists (`writeToolHostSharedContext` with `hostMode: "game"`, `gameId`) in `tools/Workspace Manager/main.js:381-388`. |
| 80 | +## 4. Codex Rules Recheck (Summary) |
59 | 81 |
|
60 | | -Blocking evidence (fallback/default residue still present in this touched flow file): |
| 82 | +- no alias variables: PASS |
| 83 | +- no pass-through variables: PASS |
| 84 | +- no duplicate launch state: PASS |
| 85 | +- no duplicated launch paths: PASS |
| 86 | +- no silent redirects: PASS |
| 87 | +- no stale memory reuse: PASS |
| 88 | +- no label-text/DOM-order guessing: PASS |
| 89 | +- no fallback/default behavior in Workspace Manager gate path: FAIL |
61 | 90 |
|
62 | | -- Default first-item selection remains in Workspace Manager: |
63 | | - - `tools/Workspace Manager/main.js:270` (`return toolIds[0] || "";`) |
64 | | - - `tools/Workspace Manager/main.js:463` and `tools/Workspace Manager/main.js:475` (tool select fallback to `toolIds[0]`). |
65 | | -- Legacy compatibility branch remains for query fallback: |
66 | | - - `tools/Workspace Manager/main.js:153` (`gameId || game`) |
67 | | - - `tools/Workspace Manager/main.js:284` (`searchParams.get("game") || searchParams.get("gameId")`). |
| 91 | +## Gate Result |
68 | 92 |
|
69 | | -These branches violate the gate requirement that validated launch flow should not depend on default/fallback behavior. |
| 93 | +Recovery gate cannot be locked in this run. |
70 | 94 |
|
71 | | -## Gate Outcome |
| 95 | +Next required BUILD_PR: |
72 | 96 |
|
73 | | -- Workspace Manager UAT requirement is not fully satisfied. |
74 | | -- Recovery gate cannot be locked in this PR. |
75 | | -- Next required repair PR: `BUILD_PR_LEVEL_20_13_REMOVE_WORKSPACE_MANAGER_DEFAULT_AND_QUERY_FALLBACKS`. |
| 97 | +`BUILD_PR_LEVEL_20_13_REMOVE_WORKSPACE_MANAGER_DEFAULT_AND_QUERY_FALLBACKS` |
76 | 98 |
|
77 | | -## Validation Commands Run |
| 99 | +## Validation Commands Executed |
78 | 100 |
|
79 | 101 | - `node --check tools/shared/toolLaunchSSoTData.js` |
80 | 102 | - `node --check tools/shared/toolLaunchSSoT.js` |
81 | 103 | - `node --check samples/index.render.js` |
82 | 104 | - `node --check games/index.render.js` |
83 | 105 | - `node --check tools/Workspace Manager/main.js` |
84 | | -- module validation scripts for launch ids, route resolution, error behavior, and memory-clear behavior |
| 106 | +- module scripts validating launch resolution, error behavior, and memory-clear behavior |
0 commit comments