Skip to content

Commit 289b7a8

Browse files
committed
Add asset roles and project-owned upload storage - PR_26156_142-147-asset-roles-storage
1 parent e481080 commit 289b7a8

8 files changed

Lines changed: 922 additions & 189 deletions

File tree

docs_build/dev/codex_commands.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,3 +1004,34 @@ Required reports:
10041004
- `docs_build/dev/reports/testing_lane_execution_report.md`
10051005
- `docs_build/dev/reports/codex_changed_files.txt`
10061006
- `docs_build/dev/reports/codex_review.diff`
1007+
1008+
1009+
## PR_26156_142-147
1010+
1011+
Changes:
1012+
- Read `docs_build/dev/PROJECT_INSTRUCTIONS.md`.
1013+
- Audited `archive/v1-v2/tools/old_asset-manager-v2` reference files for role coverage and preview expectations without copying archive code.
1014+
- Expanded the active Asset Tool repository to represent Audio, Color, Data, Font, Image, Localization, Shader, and Video role definitions.
1015+
- Added project-owned storage metadata under `assets/projects/<projectId>/<assetRole>/...`.
1016+
- Added SQL-shaped mock tables for role definitions and storage objects.
1017+
- Updated the Asset Tool page/runtime to show role coverage, role diagnostics, generated storage paths, metadata output, and project-required upload behavior.
1018+
- Implemented testable Image, Video, and Audio upload metadata workflows.
1019+
- Kept Color, Data, Font, Localization, and Shader represented with visible planned/upload-blocked validation.
1020+
- Updated targeted Asset Tool Playwright coverage for role listing, upload validation, previews, metadata, project-required handoff, and failure cases.
1021+
- Did not add CSS.
1022+
- Did not modify archived V1/V2 files.
1023+
- Did not modify `start_of_day`.
1024+
1025+
Validation:
1026+
- `node --check toolbox/assets/assets-mock-repository.js`
1027+
- `node --check toolbox/assets/assets.js`
1028+
- `node --check tests/playwright/tools/AssetToolMockRepository.spec.mjs`
1029+
- `node ./scripts/run-targeted-test-lanes.mjs --lane asset-tool --lane project-workspace`
1030+
- `git diff --check`
1031+
- Full samples smoke: skipped by request and because samples were not changed.
1032+
1033+
Required reports:
1034+
- `docs_build/dev/reports/asset-roles-storage-stacked-report.md`
1035+
- `docs_build/dev/reports/testing_lane_execution_report.md`
1036+
- `docs_build/dev/reports/codex_changed_files.txt`
1037+
- `docs_build/dev/reports/codex_review.diff`

docs_build/dev/commit_comment.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Rebuild Assets tool mock library and import preview - PR_26156_136-141
1+
Add project-owned Asset roles and upload workflow - PR_26156_142-147
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# PR_26156_142-147 Asset Roles and Storage Stacked Report
2+
3+
Generated: 2026-06-05
4+
5+
## Scope
6+
7+
Stacked PRs:
8+
- `PR_26156_142-asset-roles-reference-audit`
9+
- `PR_26156_143-asset-storage-contract`
10+
- `PR_26156_144-asset-role-library-model`
11+
- `PR_26156_145-asset-upload-workflow`
12+
- `PR_26156_146-asset-project-storage-integration`
13+
- `PR_26156_147-asset-validation-playwright`
14+
15+
Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` first. Continued from `PR_26156_136-141`.
16+
17+
Archive reference use:
18+
- Read `archive/v1-v2/tools/old_asset-manager-v2/README.md`.
19+
- Read `archive/v1-v2/tools/old_asset-manager-v2/js/assetManagerMetadata.js`.
20+
- Read `archive/v1-v2/tools/old_asset-manager-v2/js/assetPreviewHelpers.js`.
21+
- Read `archive/v1-v2/tools/old_asset-manager-v2/js/services/AssetSchemaValidator.js`.
22+
- Read `archive/v1-v2/tools/old_asset-manager-v2/js/controls/AssetFormControl.js`.
23+
- Used archive material only to identify behavior expectations. No archive code was copied. No archived V1/V2 files were modified.
24+
25+
No new CSS was added. No `start_of_day` folders were modified.
26+
27+
## PR_26156_142 Role Audit
28+
29+
| Role | Supported file types | Expected preview behavior | Validation needs | DB fields |
30+
| --- | --- | --- | --- | --- |
31+
| Audio | `.mp3`, `.wav`, `.ogg`, `.m4a`; audio MIME types | Browser audio metadata preview | MIME/extension match, non-zero size, project storage path | id, projectId, ownerProjectId, assetRole, originalName, storedPath, mimeType, size, checksum, createdAt, updatedAt |
32+
| Color | `.json` palette metadata | Swatch metadata preview | Hex/name metadata, deferred upload ownership | same uploaded metadata fields when implemented |
33+
| Data | `.json`, `.csv`, `.txt` | Text metadata preview | Format/schema declaration, deferred upload ownership | same uploaded metadata fields when implemented |
34+
| Font | `.woff`, `.woff2`, `.ttf`, `.otf` | Font sample preview | Font format validation, deferred upload ownership | same uploaded metadata fields when implemented |
35+
| Image | `.png`, `.jpg`, `.jpeg`, `.webp`, `.gif`, `.svg`; image MIME types | Image metadata preview | MIME/extension match, non-zero size, project storage path | id, projectId, ownerProjectId, assetRole, originalName, storedPath, mimeType, size, checksum, createdAt, updatedAt |
36+
| Localization | `.json`, `.po`, `.pot`, `.xliff`, `.xlf` | Localization key summary preview | Locale/format metadata, deferred upload ownership | same uploaded metadata fields when implemented |
37+
| Shader | `.glsl`, `.vert`, `.frag`, `.wgsl` | Shader source metadata preview | Stage metadata and render ownership, deferred upload ownership | same uploaded metadata fields when implemented |
38+
| Video | `.mp4`, `.webm`, `.mov`; video MIME types | Browser video metadata preview | MIME/extension match, non-zero size, project storage path | id, projectId, ownerProjectId, assetRole, originalName, storedPath, mimeType, size, checksum, createdAt, updatedAt |
39+
40+
## PR_26156_143 Storage Contract
41+
42+
Project-owned upload storage is represented by generated metadata paths:
43+
44+
`assets/projects/<projectId>/<assetRole>/<fileName>`
45+
46+
Examples:
47+
- `assets/projects/demo-project/image/player.png`
48+
- `assets/projects/demo-project/video/intro.mp4`
49+
- `assets/projects/demo-project/audio/theme.mp3`
50+
51+
User/project uploads are separated from:
52+
- `assets/theme-v2`
53+
- public site images
54+
- app chrome and Theme V2 assets
55+
56+
The mock repository stores metadata only. It does not persist file bytes, cloud state, auth state, or real database records.
57+
58+
## PR_26156_144 Role Library Model
59+
60+
Implemented in `toolbox/assets/assets-mock-repository.js`:
61+
- `ASSET_ROLE_DEFINITIONS` covers all eight roles.
62+
- `asset_role_definitions` table represents role metadata.
63+
- `asset_library_items` stores project asset records.
64+
- `asset_storage_objects` stores generated project storage metadata.
65+
- `asset_import_events` stores upload/import events.
66+
- `asset_validation_items` stores actionable validation findings.
67+
68+
Implemented visible diagnostics in `toolbox/assets/index.html` and `toolbox/assets/assets.js`:
69+
- Asset Role Coverage table lists every role.
70+
- Role diagnostics list reports missing/invalid metadata or ready state.
71+
- DB Metadata panel shows original name, stored path, role, MIME type, size, checksum, and owner project.
72+
73+
## PR_26156_145 Upload Workflow
74+
75+
Implemented upload workflow first for:
76+
- Image
77+
- Video
78+
- Audio
79+
80+
Upload validation checks:
81+
- active project and ready Game Configuration handoff
82+
- asset role
83+
- usage
84+
- file name
85+
- extension
86+
- MIME type
87+
- non-zero size
88+
- max size
89+
- generated storage path under the project-owned storage root
90+
91+
Non-upload roles remain represented but fail visibly as planned when uploaded:
92+
- Color
93+
- Data
94+
- Font
95+
- Localization
96+
- Shader
97+
98+
## PR_26156_146 Project Workspace Integration
99+
100+
The Asset Tool requires active project context through the existing Game Configuration handoff. Missing or invalid project/configuration context:
101+
- hides the upload form
102+
- shows the missing-requirements overlay
103+
- keeps the library blocked
104+
- does not create a silent fallback project
105+
- does not write a global/site asset path
106+
107+
Project Workspace lane was run because project-owned storage depends on active project context.
108+
109+
## PR_26156_147 Targeted Playwright
110+
111+
Updated `tests/playwright/tools/AssetToolMockRepository.spec.mjs` to cover:
112+
- SQL-shaped role/storage/metadata tables
113+
- all eight role definitions
114+
- visible role listing and diagnostics
115+
- active project handoff
116+
- Image upload metadata and preview
117+
- Video upload metadata and preview
118+
- Audio upload metadata and preview
119+
- no raw JSON output
120+
- no embedded data URL contract field in repository tables
121+
- visible extension/MIME validation failures
122+
- planned-role upload failure for Color
123+
- project-required upload overlay and hidden form
124+
125+
## Validation
126+
127+
Impacted lanes:
128+
- `asset-tool`
129+
- `project-workspace`
130+
131+
Executed:
132+
- `node --check toolbox/assets/assets-mock-repository.js`
133+
- `node --check toolbox/assets/assets.js`
134+
- `node --check tests/playwright/tools/AssetToolMockRepository.spec.mjs`
135+
- `node ./scripts/run-targeted-test-lanes.mjs --lane asset-tool --lane project-workspace`
136+
- `git diff --check`
137+
138+
Results:
139+
- Project Workspace lane: PASS, 8 tests.
140+
- Asset Tool lane: PASS, 4 tests.
141+
- `git diff --check`: PASS. Git reported line-ending warnings only for edited files.
142+
143+
Skipped lanes:
144+
- Full samples smoke skipped because no sample JSON, sample loader, or sample runtime framework behavior changed.
145+
- Game Design, Game Configuration, Build Path, Tools Progress, tool navigation, tool images, tool runtime, engine, integration, games, and samples lanes skipped because this stack only changed the Asset Tool page/repository/test and its Project Workspace handoff validation.
146+
147+
Theme V2 gaps:
148+
- None. Existing Theme V2 tables, cards, panels, buttons, status, and form table classes were sufficient.

0 commit comments

Comments
 (0)