|
| 1 | +# PR_11_18_FULL_STRICT_SCHEMA_MODE Report |
| 2 | + |
| 3 | +## Result |
| 4 | +- PASS (required PR scope met) |
| 5 | + |
| 6 | +## Schemas Changed |
| 7 | +- `tools/schemas/workspace.manifest.schema.json` |
| 8 | +- `tools/schemas/sample.tool-payload.schema.json` |
| 9 | +- `tools/schemas/tool.manifest.schema.json` |
| 10 | +- `tools/schemas/tools/3d-asset-viewer.schema.json` |
| 11 | +- `tools/schemas/tools/3d-camera-path-editor.schema.json` |
| 12 | +- `tools/schemas/tools/3d-json-payload-normalizer.schema.json` |
| 13 | +- `tools/schemas/tools/asset-browser.schema.json` |
| 14 | +- `tools/schemas/tools/asset-pipeline-tool.schema.json` |
| 15 | +- `tools/schemas/tools/palette-browser.schema.json` |
| 16 | +- `tools/schemas/tools/palette.schema.json` |
| 17 | +- `tools/schemas/tools/parallax-editor.schema.json` |
| 18 | +- `tools/schemas/tools/performance-profiler.schema.json` |
| 19 | +- `tools/schemas/tools/physics-sandbox.schema.json` |
| 20 | +- `tools/schemas/tools/replay-visualizer.schema.json` |
| 21 | +- `tools/schemas/tools/skin-editor.schema.json` |
| 22 | +- `tools/schemas/tools/sprite-editor.schema.json` |
| 23 | +- `tools/schemas/tools/state-inspector.schema.json` |
| 24 | +- `tools/schemas/tools/tile-map-editor.schema.json` |
| 25 | +- `tools/schemas/tools/tile-model-converter.schema.json` |
| 26 | +- `tools/schemas/tools/vector-asset-studio.schema.json` |
| 27 | +- `tools/schemas/tools/vector-map-editor.schema.json` |
| 28 | + |
| 29 | +## Sample Updated (allowed scope) |
| 30 | +- `samples/phase-19/1902/sample.1902.workspace-all-tools.json` |
| 31 | + |
| 32 | +## Tests/Checks Added |
| 33 | +- `tests/tools/ToolSchemaStrictModeValidation.test.mjs` |
| 34 | +- `tests/run-tests.mjs` (wired new strict schema validation test) |
| 35 | + |
| 36 | +## Strictness Conversion Counts |
| 37 | +- `additionalProperties: true -> false`: 20 object schemas |
| 38 | +- missing `additionalProperties` fixed: 22 object schemas |
| 39 | +- post-change strictness audit: 0 missing, 0 true |
| 40 | + |
| 41 | +## Fields Explicitly Added |
| 42 | +- Workspace manifest top-level explicit fields: `$schema`, `documentKind`, `schema`, `version`, `id`, `name`, `tools` |
| 43 | +- Workspace `tools` explicit allowed ids with `additionalProperties: false` and required singular `palette` |
| 44 | +- Per-tool strict root fields: `tool`, `version`, `config` (+ explicit tool extras only where required: `sprite-editor.assetRegistry`, `skin-editor.gameId`, `skin-editor.skin`) |
| 45 | +- Per-tool strict `config` allowed keys explicitly declared per tool id |
| 46 | +- `sample.tool-payload` and `tool.manifest` converted to strict object contracts with explicit fields and strict nested object handling |
| 47 | + |
| 48 | +## Validation Evidence |
| 49 | + |
| 50 | +### 1) Syntax checks |
| 51 | +Command: |
| 52 | +- `node --check tests/tools/ToolSchemaStrictModeValidation.test.mjs` |
| 53 | +- `node --check tests/run-tests.mjs` |
| 54 | + |
| 55 | +Result: |
| 56 | +- PASS |
| 57 | + |
| 58 | +### 2) Strict schema + `$ref` + unknown field rejection + sample 1902 conformance |
| 59 | +Command: |
| 60 | +- `node -e "import { run } from './tests/tools/ToolSchemaStrictModeValidation.test.mjs'; await run(); console.log('PASS ToolSchemaStrictModeValidation');"` |
| 61 | + |
| 62 | +Result: |
| 63 | +- PASS |
| 64 | +- Includes proof of: |
| 65 | + - all schema objects strict (`additionalProperties: false`) |
| 66 | + - all `$ref` targets resolve |
| 67 | + - unknown field injection rejected (`asset-browser.config.__unknown`) |
| 68 | + - sample 1902 manifest validates against strict workspace/tool schema shape |
| 69 | + - sample 1902 includes all intended workspace tools |
| 70 | + - no `sample.1902.palette.json` sidecar |
| 71 | + |
| 72 | +### 3) Workspace/tool launch validation |
| 73 | +Command: |
| 74 | +- `npm run test:launch-smoke -- --tools` |
| 75 | + |
| 76 | +Result: |
| 77 | +- PASS (`PASS=287 FAIL=0 TOTAL=287`) |
| 78 | +- Includes `sample 1902` PASS and all tool entries PASS |
| 79 | + |
| 80 | +### 4) Additional check executed (not required by PR but recorded) |
| 81 | +Command: |
| 82 | +- `npm run test:sample-standalone:data-flow` |
| 83 | + |
| 84 | +Result: |
| 85 | +- FAIL (existing contract mismatch for sample 1902 being a workspace manifest, not standalone sample wrapper) |
| 86 | +- Failure details: |
| 87 | + - `tool field must match filename tool id (workspace-all-tools)` |
| 88 | + - `version must be a non-empty string` |
| 89 | + - `payload container must exist (config, payload, or toolState)` |
| 90 | + - `wrapper fields not allowed (documentKind, id)` |
| 91 | + |
| 92 | +## Workspace 1902 Tool List Validation |
| 93 | +- Verified present under `tools`: |
| 94 | + - `vector-map-editor` |
| 95 | + - `vector-asset-studio` |
| 96 | + - `tile-map-editor` |
| 97 | + - `parallax-editor` |
| 98 | + - `sprite-editor` |
| 99 | + - `skin-editor` |
| 100 | + - `asset-browser` |
| 101 | + - `palette-browser` |
| 102 | + - `state-inspector` |
| 103 | + - `replay-visualizer` |
| 104 | + - `performance-profiler` |
| 105 | + - `physics-sandbox` |
| 106 | + - `asset-pipeline-tool` |
| 107 | + - `tile-model-converter` |
| 108 | + - `3d-json-payload-normalizer` |
| 109 | + - `3d-asset-viewer` |
| 110 | + - `3d-camera-path-editor` |
| 111 | + - `palette` |
| 112 | + |
| 113 | +## start_of_day Confirmation |
| 114 | +- No `start_of_day` folders modified. |
0 commit comments