|
| 1 | +# BUILD_PR_LEVEL_11_149_WORKSPACE_MANAGER_DIRECT_PAYLOAD_CARD_STATUS |
| 2 | + |
| 3 | +## Purpose |
| 4 | +Fix Workspace Manager card/status population so Sample 1902 shows active assets for direct tool payload entries. |
| 5 | + |
| 6 | +## Problem |
| 7 | +Sample 1902 now launches Workspace Manager and the manifest loads, but Workspace Manager cards still show: |
| 8 | + |
| 9 | +- Asset: none |
| 10 | +- Asset: N/A |
| 11 | +- Palette: none |
| 12 | +- disabled-looking tool cards |
| 13 | + |
| 14 | +This means Workspace Manager parsing accepts the manifest, but the UI/presence/status layer is still not deriving asset availability from the direct tool payloads. |
| 15 | + |
| 16 | +## STRICT SCOPE |
| 17 | + |
| 18 | +### ALLOWED FILES |
| 19 | + |
| 20 | +- tools/workspace-manager/main.js |
| 21 | +- docs/dev/reports/workspace_direct_payload_card_status_11_149.txt |
| 22 | + |
| 23 | +### ALLOWED CHANGES |
| 24 | + |
| 25 | +- update Workspace Manager card/status/presence detection to use direct payload objects from `workspaceManifest.tools[toolId]` |
| 26 | +- derive display labels from direct payload root keys |
| 27 | +- mark tools available when their direct payload exists and validates |
| 28 | +- preserve exact payload pass-through behavior |
| 29 | +- create report |
| 30 | + |
| 31 | +## FORBIDDEN |
| 32 | + |
| 33 | +Codex MUST NOT: |
| 34 | + |
| 35 | +- modify schemas |
| 36 | +- modify Sample 1902 manifest |
| 37 | +- modify runtime host |
| 38 | +- modify routing outside Workspace Manager |
| 39 | +- modify other samples |
| 40 | +- re-add `tool/version/payload` wrappers |
| 41 | +- add fallback/default/preset data |
| 42 | +- transform payloads before launch |
| 43 | +- infer missing payloads |
| 44 | +- add fake assets |
| 45 | + |
| 46 | +## Required Behavior |
| 47 | + |
| 48 | +Given manifest: |
| 49 | + |
| 50 | +```json |
| 51 | +"tools": { |
| 52 | + "vector-map-editor": { |
| 53 | + "vectorMapDocument": { ... } |
| 54 | + }, |
| 55 | + "palette-browser": { |
| 56 | + "schema": "html-js-gaming.palette", |
| 57 | + "swatches": [ ... ] |
| 58 | + } |
| 59 | +} |
| 60 | +``` |
| 61 | + |
| 62 | +Workspace Manager must: |
| 63 | + |
| 64 | +1. Treat the tool as present if `tools[toolId]` exists and validates. |
| 65 | +2. Use the direct payload object for card/status display. |
| 66 | +3. Show a useful status label instead of `Asset: none` when data exists. |
| 67 | +4. Show `Palette: <palette name>` for palette-browser when palette data exists. |
| 68 | +5. Keep disabled/no-data state only when the direct payload is missing or invalid. |
| 69 | +6. Launch tools with the exact direct payload object unchanged. |
| 70 | + |
| 71 | +## Suggested Display Labels |
| 72 | + |
| 73 | +Codex may derive labels from direct payload content using explicit root fields only. |
| 74 | + |
| 75 | +Examples: |
| 76 | + |
| 77 | +- vector-map-editor: |
| 78 | + - `vectorMapDocument.name` |
| 79 | +- svg-asset-studio: |
| 80 | + - `vectorAssetDocument.sourceName` |
| 81 | +- tile-map-editor: |
| 82 | + - `tileMapDocument.map.name` |
| 83 | +- parallax-editor: |
| 84 | + - `parallaxDocument.map.name` |
| 85 | +- sprite-editor: |
| 86 | + - `spriteProject.assetRefs.spriteId` or `Sprite Project` |
| 87 | +- skin-editor: |
| 88 | + - `skin.name` or schema-specific skin name |
| 89 | +- asset-browser: |
| 90 | + - count of `assets` entries if present |
| 91 | +- state-inspector: |
| 92 | + - `snapshot.toolId` or snapshot schema |
| 93 | +- replay-visualizer: |
| 94 | + - count of `events` |
| 95 | +- performance-profiler: |
| 96 | + - `profileSettings.frameSamples` |
| 97 | +- physics-sandbox: |
| 98 | + - `physicsBody` |
| 99 | +- asset-pipeline: |
| 100 | + - `pipelinePayload.projectId` |
| 101 | +- tile-model-converter: |
| 102 | + - `candidate.name` |
| 103 | +- 3d-json-payload: |
| 104 | + - `mapPayload.mapId` |
| 105 | +- 3d-asset-viewer: |
| 106 | + - `asset3d.assetId` |
| 107 | +- 3d-camera-path-editor: |
| 108 | + - `cameraPath.pathId` |
| 109 | +- palette-browser: |
| 110 | + - direct `name` |
| 111 | + |
| 112 | +Do not mutate payloads while deriving labels. |
| 113 | + |
| 114 | +## Validation |
| 115 | + |
| 116 | +Run targeted validation only. |
| 117 | + |
| 118 | +Required: |
| 119 | + |
| 120 | +- Sample 1902 workspace loads. |
| 121 | +- Direct payload tool entries are accepted. |
| 122 | +- Cards no longer show `Asset: none` for tools with valid payloads. |
| 123 | +- Palette card shows the direct palette name. |
| 124 | +- Tool launch still passes direct payload unchanged. |
| 125 | +- no schema files changed. |
| 126 | +- no sample files changed. |
| 127 | +- `git diff --name-only` contains only ALLOWED FILES. |
| 128 | + |
| 129 | +## Report |
| 130 | + |
| 131 | +Write: |
| 132 | + |
| 133 | +- `docs/dev/reports/workspace_direct_payload_card_status_11_149.txt` |
| 134 | + |
| 135 | +Report must include: |
| 136 | + |
| 137 | +- file changed |
| 138 | +- previous status behavior |
| 139 | +- new status behavior |
| 140 | +- Sample 1902 cards verified |
| 141 | +- validation command/result |
| 142 | +- strict scope confirmation |
| 143 | +- remaining blockers if any |
| 144 | + |
| 145 | +## Full Samples Smoke Test |
| 146 | + |
| 147 | +Skipped. |
| 148 | + |
| 149 | +Reason: |
| 150 | +- targeted Workspace Manager card/status population fix only |
| 151 | +- full samples smoke test takes approximately 20 minutes |
| 152 | + |
| 153 | +## Acceptance |
| 154 | + |
| 155 | +- Workspace Manager shows Sample 1902 tools as populated from direct payloads. |
| 156 | +- Palette Browser shows Sample 1902 palette name. |
| 157 | +- No direct payload is wrapped, converted, or mutated. |
| 158 | +- No schemas or sample files changed. |
0 commit comments