Skip to content

Commit 11d0138

Browse files
committed
Keep State and make Objects Asset a linked render record display - PR_26161_010-objects-asset-return-display
1 parent ff389a0 commit 11d0138

9 files changed

Lines changed: 586 additions & 116 deletions

docs_build/dev/codex_commands.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,3 +1323,34 @@ Required reports:
13231323
- `docs_build/dev/reports/coverage_changed_js_guardrail.txt`
13241324
- `docs_build/dev/reports/codex_changed_files.txt`
13251325
- `docs_build/dev/reports/codex_review.diff`
1326+
1327+
1328+
## PR_26161_010-objects-asset-return-display
1329+
1330+
Changes:
1331+
- Read `docs_build/dev/PROJECT_INSTRUCTIONS.md`.
1332+
- Verified the current branch is `main` before edits.
1333+
- Continued from `PR_26161_009`.
1334+
- Kept `State` visible in the Objects table.
1335+
- Kept Object Type Catalog compact with only `Template` and `Capability`.
1336+
- Updated Objects render asset cells to display the linked shared sprite asset key/name instead of any user-editable Asset field.
1337+
- Added linked asset display refresh on return/focus and an Objects-local refresh event for deterministic validation.
1338+
- Kept `Edit Sprite` actions tied to the linked sprite asset key.
1339+
- Preserved table-first input, `Add Object` below the table, disabled Add while adding, Cancel, Edit, Trash, Reset Table, Object Status, and Sprite asset linking.
1340+
- Did not change engine runtime behavior, sample JSON, auth behavior, production DB behavior, or unrelated tool behavior.
1341+
1342+
Validation:
1343+
- `node --check toolbox/objects/objects.js`
1344+
- `node --check tests/playwright/tools/ObjectsTool.spec.mjs`
1345+
- HTML restriction check for `toolbox/objects/index.html`
1346+
- Objects forbidden wording scan for requested terms
1347+
- `npx playwright test tests/playwright/tools/ObjectsTool.spec.mjs --workers=1 --reporter=line`
1348+
- `git diff --check`
1349+
- Full samples validation skipped by request and because samples/runtime behavior were not changed.
1350+
1351+
Required reports:
1352+
- `docs_build/dev/reports/objects-asset-return-display-report.md`
1353+
- `docs_build/dev/reports/playwright_v8_coverage_report.txt`
1354+
- `docs_build/dev/reports/coverage_changed_js_guardrail.txt`
1355+
- `docs_build/dev/reports/codex_changed_files.txt`
1356+
- `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-
Compact Objects type catalog display - PR_26161_009-object-catalog-compact-display
1+
Display returned Objects render assets - PR_26161_010-objects-asset-return-display

docs_build/dev/reports/codex_changed_files.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ docs_build/dev/commit_comment.txt
33
docs_build/dev/reports/codex_changed_files.txt
44
docs_build/dev/reports/codex_review.diff
55
docs_build/dev/reports/coverage_changed_js_guardrail.txt
6-
docs_build/dev/reports/object-catalog-compact-display-report.md
6+
docs_build/dev/reports/objects-asset-return-display-report.md
77
docs_build/dev/reports/playwright_v8_coverage_report.txt
88
tests/playwright/tools/ObjectsTool.spec.mjs
9-
toolbox/objects/index.html
109
toolbox/objects/objects.js

docs_build/dev/reports/codex_review.diff

Lines changed: 334 additions & 95 deletions
Large diffs are not rendered by default.

docs_build/dev/reports/coverage_changed_js_guardrail.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Missing changed runtime JS files are WARN, not FAIL.
66
Source: Playwright/Chromium built-in V8 coverage from the active Playwright run.
77

88
Changed runtime JS files considered:
9-
(95%) toolbox/objects/objects.js - executed lines 985/985; executed functions 94/99
9+
(94%) toolbox/objects/objects.js - executed lines 1065/1065; executed functions 100/106
1010

1111
Guardrail warnings:
1212
(100%) none - no changed runtime JS coverage warnings
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# PR_26161_010 Objects Asset Return Display Report
2+
3+
## Branch Guard
4+
- Current branch: `main`
5+
- Expected branch: `main`
6+
- Local branches found: `* main`
7+
- Branch validation: PASS
8+
9+
## Source Of Truth
10+
- PASS: Read `docs_build/dev/PROJECT_INSTRUCTIONS.md` before branch validation and edits.
11+
- PASS: Used the user-provided `PR_26161_010-objects-asset-return-display` request as the active BUILD source.
12+
- PASS: Confirmed the PR purpose is singular: keep Objects render assets as linked shared-record display data.
13+
14+
## Requirement Checklist
15+
- PASS: Continued from `PR_26161_009`.
16+
- PASS: Left `State` visible in the Objects table.
17+
- PASS: Treated Asset as a linked render asset display, not a free-text user field.
18+
- PASS: When `Render = Sprite`, the Asset cell displays the linked shared sprite asset key/name.
19+
- PASS: Users cannot type an invalid Asset value in the Objects table.
20+
- PASS: Asset display and preview refresh from the linked shared asset record when returning to Objects.
21+
- PASS: `Edit Sprite` stays tied to the linked sprite asset key.
22+
- PASS: Preserved Object Type Catalog compact display with `Template` and `Capability` only.
23+
- PASS: Preserved table-first input, `Add Object` below the table, Add disabled while adding, Cancel, Edit, Trash, Reset Table, Object Status, and Sprite asset linking.
24+
- PASS: Did not add sample JSON alignment, auth behavior, production DB behavior, or unrelated tool rewrites.
25+
- PASS: Kept Theme V2 only and preserved HTML restrictions.
26+
27+
## Implementation Evidence
28+
- `toolbox/objects/objects.js`: render asset cells now resolve display text from the shared asset repository and refresh on return/focus.
29+
- `toolbox/objects/objects.js`: active and saved Asset cells are text-only display cells, with no text input for manual Asset entry.
30+
- `tests/playwright/tools/ObjectsTool.spec.mjs`: verifies State visibility, compact catalog preservation, linked Asset display, no Asset input, Sprite asset create/resolve, and return-refresh behavior.
31+
32+
## Impacted Lane
33+
- Impacted lane: Objects tool UI/runtime.
34+
- Playwright impacted: Yes.
35+
- Changed runtime JavaScript: `toolbox/objects/objects.js`.
36+
37+
## Testing Performed
38+
- PASS: `node --check toolbox/objects/objects.js`
39+
- PASS: `node --check tests/playwright/tools/ObjectsTool.spec.mjs`
40+
- PASS: HTML restriction check for `toolbox/objects/index.html`
41+
- PASS: Objects forbidden wording scan for requested terms.
42+
- PASS: `npx playwright test tests/playwright/tools/ObjectsTool.spec.mjs --workers=1 --reporter=line` (5 passed)
43+
- PASS: `docs_build/dev/reports/playwright_v8_coverage_report.txt` was produced by targeted Objects Playwright.
44+
- PASS: `docs_build/dev/reports/coverage_changed_js_guardrail.txt` reports no changed runtime JS coverage warnings.
45+
- PASS: `git diff --check` exited 0 with line-ending warnings only.
46+
47+
## Playwright Behavior Coverage
48+
- PASS: `State` remains visible in the Objects table headers.
49+
- PASS: Object Type Catalog shows only `Template` and `Capability`.
50+
- PASS: Active Sprite rows show Asset as display text with no input/select/textarea.
51+
- PASS: Saved Sprite rows show Asset as display text with no input/select/textarea.
52+
- PASS: Sprite render creates/resolves a linked shared asset record.
53+
- PASS: Updated linked sprite record data refreshes the Objects Asset display and preview on return.
54+
- PASS: `Edit Sprite` href remains tied to the linked sprite asset key after the display refresh.
55+
56+
## Skipped Lanes
57+
- Full samples validation: SKIP. Safe because no sample JSON, sample launch path, or sample runtime behavior changed.
58+
- Engine runtime validation beyond changed-file syntax/import coverage: SKIP. Safe because no engine runtime files or behavior changed.
59+
- Production DB/auth validation: SKIP. Safe because no production DB or auth behavior changed.
60+
- Broad Toolbox/Admin validation: SKIP. Safe because no shared navigation, registration, metadata, or admin surface changed.
61+
62+
## Manual Validation Steps
63+
- Open `/toolbox/objects/index.html`.
64+
- Confirm the Objects table still shows `State`.
65+
- Confirm Object Type Catalog shows only `Template` and `Capability`.
66+
- Add a Sprite object and confirm the Asset cell says `Links on save` and has no editable Asset input.
67+
- Save the Sprite object and confirm the Asset cell shows the linked sprite asset key/name.
68+
- Open the linked Sprite action, update the shared sprite asset record, and return to Objects.
69+
- Confirm the Objects Asset cell and Sprite Preview refresh to the updated shared asset record.
70+
- Confirm `Edit Sprite` still opens with the linked asset key.
71+
72+
## Required Artifacts
73+
- PASS: `docs_build/dev/reports/objects-asset-return-display-report.md`
74+
- PASS: `docs_build/dev/reports/codex_review.diff`
75+
- PASS: `docs_build/dev/reports/codex_changed_files.txt`
76+
- PASS: `docs_build/dev/reports/playwright_v8_coverage_report.txt`
77+
- PASS: `tmp/PR_26161_010-objects-asset-return-display_delta.zip`

docs_build/dev/reports/playwright_v8_coverage_report.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Exercised tool entry points detected:
1717
(59%) Theme V2 Shared JS - exercised 2 runtime JS files
1818

1919
Changed runtime JS files covered:
20-
(95%) toolbox/objects/objects.js - executed lines 985/985; executed functions 94/99
20+
(94%) toolbox/objects/objects.js - executed lines 1065/1065; executed functions 100/106
2121

2222
Files with executed line/function counts where available:
2323
(33%) src/engine/api/toolbox-votes-api-client.js - executed lines 46/46; executed functions 2/6
@@ -31,7 +31,7 @@ Files with executed line/function counts where available:
3131
(75%) src/engine/object-model/objectDefinitionSchema.js - executed lines 58/58; executed functions 3/4
3232
(77%) toolbox/tools-page-accordions.js - executed lines 965/965; executed functions 79/103
3333
(86%) toolbox/tool-registry-api-client.js - executed lines 152/152; executed functions 24/28
34-
(95%) toolbox/objects/objects.js - executed lines 985/985; executed functions 94/99
34+
(94%) toolbox/objects/objects.js - executed lines 1065/1065; executed functions 100/106
3535
(100%) src/engine/object-model/index.js - executed lines 29/29; executed functions 1/1
3636
(100%) toolbox/project-workspace/project-workspace-api-client.js - executed lines 12/12; executed functions 2/2
3737

@@ -40,4 +40,4 @@ Uncovered or low-coverage changed JS files:
4040

4141
Changed JS files considered:
4242
(0%) tests/playwright/tools/ObjectsTool.spec.mjs - changed JS file not collected as browser runtime coverage
43-
(95%) toolbox/objects/objects.js - changed JS file with browser V8 coverage
43+
(94%) toolbox/objects/objects.js - changed JS file with browser V8 coverage

tests/playwright/tools/ObjectsTool.spec.mjs

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,11 +345,13 @@ test("Objects table save preserves linked sprite asset create and resolve behavi
345345
type: "Projectile",
346346
});
347347
await expect(page.locator("[data-objects-row-render-asset-preview]")).toHaveText("Links on save");
348+
await expect(page.locator("[data-objects-row-render-asset-preview]").locator("input, textarea, select")).toHaveCount(0);
348349
await page.locator("[data-objects-save-row]").click();
349350

350351
await expect(page.locator("[data-objects-log]")).toContainText("Added Bolt.");
351352
await expect(page.locator("[data-objects-log]")).toContainText("Created editable default sprite asset sprite_bolt for Bolt.");
352353
await expect(page.locator("[data-objects-list]")).toContainText("sprite_bolt");
354+
await expect(page.locator("[data-objects-list] tr").first().locator("td").nth(5).locator("input, textarea, select")).toHaveCount(0);
353355
await expect(page.locator("[data-objects-asset-status]")).toHaveText("1 Linked");
354356
await expect(page.locator("[data-objects-status-summary]")).toContainText("Bolt");
355357
await expect(page.locator("[data-objects-status-summary]")).not.toContainText("Missing Render Asset");
@@ -376,12 +378,47 @@ test("Objects table save preserves linked sprite asset create and resolve behavi
376378
"/toolbox/sprites/index.html?assetKey=sprite_bolt&objectKey=bolt&sourceTool=objects"
377379
);
378380

381+
const originalSprite = await page.evaluate(async () => {
382+
const response = await fetch("/api/mock-db/snapshot");
383+
const payload = await response.json();
384+
return payload.data.tables.asset_library_items.find((row) => row.id === "sprite_bolt");
385+
});
386+
const updatedSprite = {
387+
...originalSprite,
388+
fileName: "sprite_bolt_reworked.png",
389+
name: "Bolt Reworked Sprite",
390+
originalName: "sprite_bolt_reworked.png",
391+
path: "projects/01K8M3K0EX7V5A3W9Q2Y6R4T1B/image/sprite/sprite_bolt_reworked.png",
392+
storedPath: "projects/01K8M3K0EX7V5A3W9Q2Y6R4T1B/image/sprite/sprite_bolt_reworked.png",
393+
updatedAt: new Date().toISOString(),
394+
};
395+
await page.route("**/api/toolbox/assets/repositories/*/methods/listAssets", async (route) => {
396+
await route.fulfill({
397+
body: JSON.stringify({ data: { result: [updatedSprite] }, ok: true }),
398+
contentType: "application/json",
399+
status: 200,
400+
});
401+
});
402+
expect(updatedSprite.name).toBe("Bolt Reworked Sprite");
403+
await page.evaluate(() => {
404+
window.dispatchEvent(new Event("focus"));
405+
window.dispatchEvent(new Event("gamefoundry:objects-refresh-assets"));
406+
});
407+
await expect(page.locator("[data-objects-list]")).toContainText("Bolt Reworked Sprite (sprite_bolt)");
408+
await expect(page.locator("[data-objects-output-render-asset]")).toHaveText("Bolt Reworked Sprite (sprite_bolt)");
409+
await expect(page.locator("[data-objects-output-sprite-preview]")).toContainText("sprite_bolt_reworked.png");
410+
await expect(page.locator("[data-objects-edit-sprite]")).toHaveAttribute(
411+
"href",
412+
"/toolbox/sprites/index.html?assetKey=sprite_bolt&objectKey=bolt&sourceTool=objects"
413+
);
414+
379415
await page.locator("[data-objects-edit-row='bolt']").click();
380-
await expect(page.locator("[data-objects-row-render-asset-preview]")).toHaveText("sprite_bolt");
416+
await expect(page.locator("[data-objects-row-render-asset-preview]")).toHaveText("Bolt Reworked Sprite (sprite_bolt)");
417+
await expect(page.locator("[data-objects-row-render-asset-preview]").locator("input, textarea, select")).toHaveCount(0);
381418
await page.locator("[data-objects-save-row]").click();
382419
await expect(page.locator("[data-objects-log]")).toHaveText("Saved Bolt.");
383420
await expect(page.locator("[data-objects-log]")).not.toContainText("Sprite asset link blocked");
384-
await expect(page.locator("[data-objects-list]")).toContainText("sprite_bolt");
421+
await expect(page.locator("[data-objects-list]")).toContainText("Bolt Reworked Sprite (sprite_bolt)");
385422
await expect(page.locator("main")).not.toContainText(OLD_INTERNAL_COPY_PATTERN);
386423

387424
await page.getByRole("button", { name: "Reset Table" }).click();

0 commit comments

Comments
 (0)