|
| 1 | +# Workspace Manager Auto Mount Tool Selection Validation |
| 2 | + |
| 3 | +## Changed Files |
| 4 | + |
| 5 | +- `tools/Workspace Manager/index.html` |
| 6 | +- `tools/Workspace Manager/main.js` |
| 7 | +- `tools/Workspace Manager/toolHost.css` |
| 8 | +- `docs/dev/reports/workspace_manager_auto_mount_tool_selection_validation.md` |
| 9 | + |
| 10 | +## Proof Initial Page Shows One Dropdown Above Editors |
| 11 | + |
| 12 | +Page shell/status and a single explicit dropdown above the editor surface: |
| 13 | + |
| 14 | +- title: `tools/Workspace Manager/index.html:11` |
| 15 | +- game source: `tools/Workspace Manager/index.html:12` |
| 16 | +- workspace status: `tools/Workspace Manager/index.html:13` |
| 17 | +- first-class tools surface copy: `tools/Workspace Manager/index.html:21` |
| 18 | +- one dropdown above Editors: `tools/Workspace Manager/index.html:24` |
| 19 | +- editors region: `tools/Workspace Manager/index.html:29` |
| 20 | + |
| 21 | +Required URL resolver output: |
| 22 | + |
| 23 | +```text |
| 24 | +{ |
| 25 | + href: '/tools/Workspace%20Manager/index.html?gameId=Bouncing-ball&mount=game', |
| 26 | + error: '' |
| 27 | +} |
| 28 | +``` |
| 29 | + |
| 30 | +## Proof Detached Top Banner/Tool Controls Are Gone |
| 31 | + |
| 32 | +`tools/Workspace Manager/index.html` no longer includes detached button/banner controls: |
| 33 | + |
| 34 | +```text |
| 35 | +actionApplyCount 0 |
| 36 | +mountButtonCountExact 0 |
| 37 | +prevButtonCount 0 |
| 38 | +nextButtonCount 0 |
| 39 | +unmountButtonCount 0 |
| 40 | +standaloneCount 0 |
| 41 | +stateInputCount 0 |
| 42 | +currentLabelCount 0 |
| 43 | +switchMetaCount 0 |
| 44 | +``` |
| 45 | + |
| 46 | +## Proof Editors/Tools Are Overlaid/Disabled Before Tool Selection |
| 47 | + |
| 48 | +Overlay markup exists directly over the editors region: |
| 49 | + |
| 50 | +- editor region: `tools/Workspace Manager/index.html:29` |
| 51 | +- overlay node: `tools/Workspace Manager/index.html:31` |
| 52 | + |
| 53 | +Overlay lock behavior is enforced in runtime: |
| 54 | + |
| 55 | +- overlay lock helper: `tools/Workspace Manager/main.js:220` |
| 56 | +- init starts locked: `tools/Workspace Manager/main.js:713` |
| 57 | +- no explicit tool remains locked: `tools/Workspace Manager/main.js:771` |
| 58 | +- missing/invalid context remains locked: `tools/Workspace Manager/main.js:644`, `tools/Workspace Manager/main.js:655` |
| 59 | + |
| 60 | +Overlay styling proves visual lock layer above editors: |
| 61 | + |
| 62 | +- `tools/Workspace Manager/toolHost.css:97` |
| 63 | +- `tools/Workspace Manager/toolHost.css:113` |
| 64 | +- `tools/Workspace Manager/toolHost.css:127` |
| 65 | + |
| 66 | +## Proof No Default Tool Selected On Load |
| 67 | + |
| 68 | +Tool select is populated with explicit empty option first, and only set to requested tool when explicitly present: |
| 69 | + |
| 70 | +- placeholder option: `tools/Workspace Manager/main.js:516` |
| 71 | +- explicit tool query validation: `tools/Workspace Manager/main.js:284-291` |
| 72 | +- no requested tool path returns without mount: `tools/Workspace Manager/main.js:771-773` |
| 73 | + |
| 74 | +## Proof Selecting Tool From Dropdown Auto-Mounts/Activates It |
| 75 | + |
| 76 | +Auto-mount is bound directly to dropdown change (no extra action required): |
| 77 | + |
| 78 | +- dropdown change event: `tools/Workspace Manager/main.js:632-636` |
| 79 | +- `mountSelectedTool("select")` invoked directly: `tools/Workspace Manager/main.js:635` |
| 80 | +- mount call path executes runtime mount: `tools/Workspace Manager/main.js:593-603` |
| 81 | +- overlay clears after activation: `tools/Workspace Manager/main.js:542` |
| 82 | + |
| 83 | +## Proof Separate Select Tool/Mount Actions Are Not Required For Initial Flow |
| 84 | + |
| 85 | +- No `Select Tool` button exists (`actionApplyCount 0`). |
| 86 | +- No `Mount` button exists (`mountButtonCountExact 0`). |
| 87 | +- Initial flow uses one dropdown; selection directly mounts via change handler (`tools/Workspace Manager/main.js:632-636`). |
| 88 | + |
| 89 | +## Proof `toolIds[0]` Not Restored |
| 90 | + |
| 91 | +Command output: |
| 92 | + |
| 93 | +```text |
| 94 | +toolIds0 0 |
| 95 | +``` |
| 96 | + |
| 97 | +## Proof `gameId || game` Not Restored |
| 98 | + |
| 99 | +Command output: |
| 100 | + |
| 101 | +```text |
| 102 | +gameIdOrGame 0 |
| 103 | +legacyGameParamRead 0 |
| 104 | +``` |
| 105 | + |
| 106 | +## Proof Valid `gameId` Still Loads Game Context |
| 107 | + |
| 108 | +- valid game context status update: `tools/Workspace Manager/main.js:663-665` |
| 109 | +- init valid game context status update: `tools/Workspace Manager/main.js:748-750` |
| 110 | + |
| 111 | +## Proof Invalid/Missing Context Renders Visible Diagnostic |
| 112 | + |
| 113 | +- missing gameId diagnostic: `tools/Workspace Manager/main.js:648`, `tools/Workspace Manager/main.js:731` |
| 114 | +- invalid gameId diagnostic: `tools/Workspace Manager/main.js:659`, `tools/Workspace Manager/main.js:741` |
| 115 | +- diagnostic panel in markup: `tools/Workspace Manager/index.html:14-17` |
| 116 | + |
| 117 | +## Proof External Memory Clear Remains Intact |
| 118 | + |
| 119 | +Runtime check output: |
| 120 | + |
| 121 | +```text |
| 122 | +clearResult true |
| 123 | +localAfterClear [ [ 'keep.one', 'x' ] ] |
| 124 | +sessionAfterClear [ [ 'keep.two', 'y' ] ] |
| 125 | +launchResult true |
| 126 | +assignCalls [ |
| 127 | + '/tools/Workspace%20Manager/index.html?gameId=Bouncing-ball&mount=game' |
| 128 | +] |
| 129 | +localAfterLaunch [ [ 'keep.one', 'x' ] ] |
| 130 | +sessionAfterLaunch [ [ 'keep.two', 'y' ] ] |
| 131 | +``` |
| 132 | + |
| 133 | +## Proof Samples `Open <tool>` Remain Untouched |
| 134 | + |
| 135 | +- sample label remains: `samples/index.render.js:104` |
| 136 | +- sample launch memory-reset path unchanged: `samples/index.render.js:539` |
| 137 | + |
| 138 | +## Static Validation |
| 139 | + |
| 140 | +Commands run successfully: |
| 141 | + |
| 142 | +```bash |
| 143 | +node --check tools/Workspace\ Manager/main.js |
| 144 | +node --check games/index.render.js |
| 145 | +node --check samples/index.render.js |
| 146 | +``` |
| 147 | + |
| 148 | +## Anti-Pattern Self-Check |
| 149 | + |
| 150 | +- No sample launch behavior/labels changed. |
| 151 | +- No `gameId || game` fallback restored. |
| 152 | +- No `toolIds[0]` fallback restored. |
| 153 | +- No first-tool auto-selection restored. |
| 154 | +- No tool mounted on initial game launch before explicit selection. |
| 155 | +- No second SSoT introduced. |
| 156 | +- No broad Workspace Manager refactor performed. |
| 157 | +- No start_of_day files changed. |
0 commit comments