Skip to content

Commit 84df713

Browse files
committed
Move shared tool behavior under contracts/tools and separate platform contracts - PR_26152_076-tool-contract-location-correction
1 parent 857e2a7 commit 84df713

52 files changed

Lines changed: 286 additions & 103 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/dev/reports/tool_contract_coverage.md

Lines changed: 69 additions & 27 deletions
Large diffs are not rendered by default.
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# Tool Contract Location Correction Validation
2+
3+
PR: PR_26152_076-tool-contract-location-correction
4+
Date: 2026-06-02
5+
6+
## Scope
7+
8+
- Updated contract ownership/location structure only.
9+
- Touched `src/shared/contracts/`, `tests/shared/`, and required reports.
10+
- No runtime, UI, CSS, HTML, database, or authentication changes were made.
11+
12+
## Location Corrections
13+
14+
- Moved shared tool behavior out of the top-level contracts folder and into `src/shared/contracts/tools/toolContract.js`.
15+
- Kept top-level `src/shared/contracts/` as platform/object contract ownership:
16+
- `assetContract.js`
17+
- `identityPermissionsContract.js`
18+
- `paletteContract.js`
19+
- `projectContract.js`
20+
- `replayContracts.js`
21+
- `sharedStateContracts.js`
22+
- `toolStateContract.js`
23+
- `vectorAssetContract.js`
24+
- Kept shared tool behavior under `src/shared/contracts/tools/toolContract.js`.
25+
- Kept per-tool declarations under `src/shared/contracts/tools/*Contract.js`.
26+
- Renamed V2-flavored tool declaration file names to requested tool declaration names while preserving tool IDs:
27+
- `assetManagerContract.js`
28+
- `audioSfxPlaygroundContract.js`
29+
- `collisionInspectorContract.js`
30+
- `inputMappingContract.js`
31+
- `midiStudioContract.js`
32+
- `objectVectorStudioContract.js`
33+
- `paletteManagerContract.js`
34+
- `previewGeneratorContract.js`
35+
- `storageInspectorContract.js`
36+
- `textToSpeechContract.js`
37+
- `workspaceManagerContract.js`
38+
- `worldVectorStudioContract.js`
39+
- Did not create `src/shared/contracts/tools/paletteContract.js`; the platform Palette object contract remains `src/shared/contracts/paletteContract.js`.
40+
- Did not create a standalone `vectorStudioContract.js`; registered vector tools are covered by `objectVectorStudioContract.js` and `worldVectorStudioContract.js`.
41+
42+
## Behavior Ownership
43+
44+
- `src/shared/contracts/tools/toolContract.js` owns shared tool behavior:
45+
- owner/project/visibility/status/version rules
46+
- import/export format rules
47+
- produced output rules
48+
- supported asset type rules
49+
- source tool state rules
50+
- archive/permission behavior
51+
- portable export behavior
52+
- Per-tool declaration modules own tool-specific data only:
53+
- `toolId`
54+
- `toolType`
55+
- `grouping`
56+
- `requiredInputs`
57+
- `producedOutputs`
58+
- `supportedAssetTypes`
59+
- `importFormats`
60+
- `exportFormats`
61+
- tool-specific metadata
62+
63+
## Validation
64+
65+
Targeted contract tests:
66+
67+
```powershell
68+
$rootContractTests = Get-ChildItem -Path tests/shared -Filter '*Contract.test.mjs' | Sort-Object Name | ForEach-Object { $_.FullName }
69+
$toolContractTests = Get-ChildItem -Path tests/shared/tools -Filter '*.test.mjs' | Sort-Object Name | ForEach-Object { $_.FullName }
70+
node ./scripts/run-node-test-files.mjs $rootContractTests $toolContractTests
71+
```
72+
73+
Result: PASS, `41/41 targeted node test file(s) passed`.
74+
75+
Static checks:
76+
77+
```powershell
78+
git diff --check -- src/shared/contracts tests/shared docs/dev/reports/tool_contract_coverage.md docs/dev/commit_comment.txt
79+
git diff --name-only -- '*.css' '*.html'
80+
# Targeted rg check for stale top-level tool behavior path and renamed V2 module filename patterns, scoped to source, tests, and the current coverage report.
81+
Get-ChildItem -Path src/shared/contracts -File | Select-Object -ExpandProperty Name | Sort-Object
82+
```
83+
84+
Results:
85+
86+
- PASS: no whitespace errors from `git diff --check`.
87+
- PASS: no CSS or HTML files changed.
88+
- PASS: no stale old tool behavior path or renamed V2 module references remain in source, tests, or the current coverage report.
89+
- PASS: top-level `src/shared/contracts/` contains platform/object contract files only.
90+
- PASS: shared tool behavior lives under `src/shared/contracts/tools/toolContract.js`.
91+
- PASS: every registered visible first-class tool still has matching coverage in `docs/dev/reports/tool_contract_coverage.md`.
92+
93+
## Skipped
94+
95+
- Repo-wide tests were not run.
96+
- Samples tests were not run.
97+
- Runtime, UI, CSS, and HTML validation were not run because they are outside this PR scope.

src/shared/contracts/tools/aiAssistantContract.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ import {
99
TOOL_CONTRACT_SUPPORTED_ASSET_TYPES,
1010
TOOL_CONTRACT_TYPES,
1111
createDraftToolContract,
12-
} from "../toolContract.js";
12+
} from "./toolContract.js";
1313

1414
export const AI_ASSISTANT_TOOL_CONTRACT = createDraftToolContract({
1515
toolId: "ai-assistant",
1616
toolType: TOOL_CONTRACT_TYPES.UTILITY,
17+
grouping: "AI",
1718
requiredInputs: [TOOL_CONTRACT_FORMATS.TEXT],
1819
producedOutputs: [TOOL_CONTRACT_FORMATS.TEXT],
1920
supportedAssetTypes: TOOL_CONTRACT_SUPPORTED_ASSET_TYPES.NONE,

src/shared/contracts/tools/animationStudioContract.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ import {
1111
TOOL_CONTRACT_FORMATS,
1212
TOOL_CONTRACT_TYPES,
1313
createDraftToolContract,
14-
} from "../toolContract.js";
14+
} from "./toolContract.js";
1515

1616
export const ANIMATION_STUDIO_TOOL_CONTRACT = createDraftToolContract({
1717
toolId: "animation-studio",
1818
toolType: TOOL_CONTRACT_TYPES.STUDIO,
19+
grouping: "Animation",
1920
requiredInputs: [TOOL_CONTRACT_FORMATS.IMAGE_FILE],
2021
producedOutputs: [TOOL_CONTRACT_FORMATS.ANIMATION_JSON],
2122
supportedAssetTypes: [ASSET_TYPES.IMAGE],

src/shared/contracts/tools/assetManagerV2Contract.js renamed to src/shared/contracts/tools/assetManagerContract.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@
22
Toolbox Aid
33
David Quesenberry
44
06/02/2026
5-
assetManagerV2Contract.js
5+
assetManagerContract.js
66
*/
77
import {
88
TOOL_CONTRACT_FORMATS,
99
TOOL_CONTRACT_SUPPORTED_ASSET_TYPES,
1010
TOOL_CONTRACT_TYPES,
1111
createToolContract,
12-
} from "../toolContract.js";
12+
} from "./toolContract.js";
1313

1414
export const ASSET_MANAGER_V2_TOOL_CONTRACT = createToolContract({
1515
toolId: "asset-manager-v2",
1616
toolType: TOOL_CONTRACT_TYPES.MANAGER,
17+
grouping: "Assets",
1718
requiredInputs: [TOOL_CONTRACT_FORMATS.PALETTE_JSON, TOOL_CONTRACT_FORMATS.METADATA_JSON],
1819
producedOutputs: [TOOL_CONTRACT_FORMATS.METADATA_JSON, TOOL_CONTRACT_FORMATS.PROJECT_PACKAGE],
1920
supportedAssetTypes: TOOL_CONTRACT_SUPPORTED_ASSET_TYPES.ALL,

src/shared/contracts/tools/assetPipelineContract.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ import {
99
TOOL_CONTRACT_SUPPORTED_ASSET_TYPES,
1010
TOOL_CONTRACT_TYPES,
1111
createToolContract,
12-
} from "../toolContract.js";
12+
} from "./toolContract.js";
1313

1414
export const ASSET_PIPELINE_TOOL_CONTRACT = createToolContract({
1515
toolId: "asset-pipeline",
1616
toolType: TOOL_CONTRACT_TYPES.PIPELINE,
17+
grouping: "Pipeline",
1718
requiredInputs: [TOOL_CONTRACT_FORMATS.METADATA_JSON, TOOL_CONTRACT_FORMATS.ASSET],
1819
producedOutputs: [TOOL_CONTRACT_FORMATS.METADATA_JSON, TOOL_CONTRACT_FORMATS.PROJECT_PACKAGE],
1920
supportedAssetTypes: TOOL_CONTRACT_SUPPORTED_ASSET_TYPES.ALL,

src/shared/contracts/tools/assetStudioContract.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ import {
1111
TOOL_CONTRACT_FORMATS,
1212
TOOL_CONTRACT_TYPES,
1313
createDraftToolContract,
14-
} from "../toolContract.js";
14+
} from "./toolContract.js";
1515

1616
export const ASSET_STUDIO_TOOL_CONTRACT = createDraftToolContract({
1717
toolId: "asset-studio",
1818
toolType: TOOL_CONTRACT_TYPES.STUDIO,
19+
grouping: "Assets",
1920
requiredInputs: [TOOL_CONTRACT_FORMATS.PALETTE_JSON],
2021
producedOutputs: [TOOL_CONTRACT_FORMATS.IMAGE_FILE, TOOL_CONTRACT_FORMATS.VECTOR_JSON, TOOL_CONTRACT_FORMATS.PALETTE_JSON],
2122
supportedAssetTypes: [ASSET_TYPES.IMAGE, ASSET_TYPES.VECTOR, ASSET_TYPES.PALETTE],

src/shared/contracts/tools/audioSfxPlaygroundV2Contract.js renamed to src/shared/contracts/tools/audioSfxPlaygroundContract.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Toolbox Aid
33
David Quesenberry
44
06/02/2026
5-
audioSfxPlaygroundV2Contract.js
5+
audioSfxPlaygroundContract.js
66
*/
77
import {
88
ASSET_TYPES,
@@ -11,11 +11,12 @@ import {
1111
TOOL_CONTRACT_FORMATS,
1212
TOOL_CONTRACT_TYPES,
1313
createToolContract,
14-
} from "../toolContract.js";
14+
} from "./toolContract.js";
1515

1616
export const AUDIO_SFX_PLAYGROUND_V2_TOOL_CONTRACT = createToolContract({
1717
toolId: "audio-sfx-playground-v2",
1818
toolType: TOOL_CONTRACT_TYPES.STUDIO,
19+
grouping: "Audio",
1920
requiredInputs: [],
2021
producedOutputs: [TOOL_CONTRACT_FORMATS.AUDIO_FILE],
2122
supportedAssetTypes: [ASSET_TYPES.AUDIO],

src/shared/contracts/tools/codeStudioContract.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ import {
99
TOOL_CONTRACT_SUPPORTED_ASSET_TYPES,
1010
TOOL_CONTRACT_TYPES,
1111
createDraftToolContract,
12-
} from "../toolContract.js";
12+
} from "./toolContract.js";
1313

1414
export const CODE_STUDIO_TOOL_CONTRACT = createDraftToolContract({
1515
toolId: "code-studio",
1616
toolType: TOOL_CONTRACT_TYPES.EDITOR,
17+
grouping: "Code",
1718
requiredInputs: [TOOL_CONTRACT_FORMATS.CODE_FILE],
1819
producedOutputs: [TOOL_CONTRACT_FORMATS.CODE_FILE],
1920
supportedAssetTypes: TOOL_CONTRACT_SUPPORTED_ASSET_TYPES.NONE,

src/shared/contracts/tools/collisionInspectorV2Contract.js renamed to src/shared/contracts/tools/collisionInspectorContract.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Toolbox Aid
33
David Quesenberry
44
06/02/2026
5-
collisionInspectorV2Contract.js
5+
collisionInspectorContract.js
66
*/
77
import {
88
ASSET_TYPES,
@@ -11,11 +11,12 @@ import {
1111
TOOL_CONTRACT_FORMATS,
1212
TOOL_CONTRACT_TYPES,
1313
createToolContract,
14-
} from "../toolContract.js";
14+
} from "./toolContract.js";
1515

1616
export const COLLISION_INSPECTOR_V2_TOOL_CONTRACT = createToolContract({
1717
toolId: "collision-inspector-v2",
1818
toolType: TOOL_CONTRACT_TYPES.INSPECTOR,
19+
grouping: "Debug",
1920
requiredInputs: [TOOL_CONTRACT_FORMATS.VECTOR_JSON, TOOL_CONTRACT_FORMATS.IMAGE_FILE],
2021
producedOutputs: [TOOL_CONTRACT_FORMATS.COLLISION_REPORT],
2122
supportedAssetTypes: [ASSET_TYPES.VECTOR, ASSET_TYPES.IMAGE],

0 commit comments

Comments
 (0)