|
| 1 | +# PR 11.99 - Schema Failure Cleanup And Sample Contract Alignment |
| 2 | + |
| 3 | +## Scope |
| 4 | +- Strict schema failure cleanup only. |
| 5 | +- No schema loosening, no fallback/media bucket restoration, no default payload invention. |
| 6 | + |
| 7 | +## Execution Summary |
| 8 | +- Read baseline invalid sample rows from PR 11.98 validation output. |
| 9 | +- Applied mechanical cleanup on 38 invalid sample JSON files: |
| 10 | + - Removed top-level `$schema` keys rejected by strict tool schemas. |
| 11 | + - Migrated legacy `config` values into schema-accepted `payload` fields where unambiguous. |
| 12 | + - Removed config/payload fields with no accepted contract. |
| 13 | + - Converted legacy asset-browser samples to strict shell contract with explicit `assets` object and schema-accepted `payload.assetBrowserPreset`; removed rejected `payload.assetCatalog` pattern. |
| 14 | + - Kept sample 1902 untouched and strict-valid. |
| 15 | + |
| 16 | +## Validation Commands Run |
| 17 | +- `powershell -ExecutionPolicy Bypass -File .\scripts\PS\validate-tool-schemas.ps1` |
| 18 | +- `powershell -ExecutionPolicy Bypass -File .\scripts\PS\validate-sample-json.ps1` |
| 19 | +- `powershell -ExecutionPolicy Bypass -File .\scripts\PS\validate-game-manifests.ps1` |
| 20 | +- `powershell -ExecutionPolicy Bypass -File .\scripts\PS\validate-all-json-contracts.ps1 -Details` |
| 21 | +- `node tests/tools/ToolSchemaStrictModeValidation.test.mjs` |
| 22 | +- `node tests/runtime/LaunchSmokeAllEntries.test.mjs --samples --sample-range=1902-1902 --tools` |
| 23 | + |
| 24 | +## Validation Results |
| 25 | +- Tool schemas: `total=17 invalid=0` |
| 26 | +- Game manifests: `total=12 invalid=0` |
| 27 | +- Sample JSON: `total=66 invalid=28` (down from 38) |
| 28 | +- Sample 1902 targeted smoke with tools: PASS (19/19) |
| 29 | + |
| 30 | +## Error Pattern Reduction |
| 31 | +- Removed all `unknown key "$schema"` failures from invalid rows. |
| 32 | +- Removed all `unknown key "config"` failures from invalid rows. |
| 33 | +- Removed all `missing required key "assets"` failures from invalid rows. |
| 34 | +- Removed all `payload unknown key` failures for: |
| 35 | + - `assetCatalog` |
| 36 | + - `sampleImportInput` |
| 37 | + - `gameId` |
| 38 | + - `vectorAssetSvgPath` |
| 39 | + |
| 40 | +## Remaining Blockers (Documented, Not Hidden) |
| 41 | +Remaining invalid rows are strict oneOf failures at nested document nodes: |
| 42 | +- 9x $.payload.spriteProject: value must satisfy exactly one oneOf branch |
| 43 | +- 6x $.payload.tileMapDocument: value must satisfy exactly one oneOf branch |
| 44 | +- 4x $.payload.parallaxDocument: value must satisfy exactly one oneOf branch |
| 45 | +- 3x $.payload.vectorMapDocument: value must satisfy exactly one oneOf branch |
| 46 | +- 2x $.payload.asset3d: value must satisfy exactly one oneOf branch |
| 47 | +- 2x $.skin: value must satisfy exactly one oneOf branch |
| 48 | +- 1x $.payload.tileMapDocument: value must satisfy exactly one oneOf branch | $.payload.parallaxDocument: value must satisfy exactly one oneOf branch |
| 49 | +- 1x $.payload.pipelinePayload: value must satisfy exactly one oneOf branch |
| 50 | + |
| 51 | +Remaining invalid files: |
| 52 | +- samples/phase-02/0204/sample.0204.3d-asset-viewer.json: $.payload.asset3d: value must satisfy exactly one oneOf branch |
| 53 | +- samples/phase-02/0207/sample.0207.sprite-editor.json: $.payload.spriteProject: value must satisfy exactly one oneOf branch |
| 54 | +- samples/phase-02/0213/sample.0213.sprite-editor.json: $.payload.spriteProject: value must satisfy exactly one oneOf branch |
| 55 | +- samples/phase-02/0214/sample.0214.sprite-editor.json: $.payload.spriteProject: value must satisfy exactly one oneOf branch |
| 56 | +- samples/phase-02/0219/sample.0219.sprite-editor.json: $.payload.spriteProject: value must satisfy exactly one oneOf branch |
| 57 | +- samples/phase-02/0221/sample.0221.tile-map-editor.json: $.payload.tileMapDocument: value must satisfy exactly one oneOf branch |
| 58 | +- samples/phase-02/0224/sample.0224.sprite-editor.json: $.payload.spriteProject: value must satisfy exactly one oneOf branch |
| 59 | +- samples/phase-02/0224/sample.0224.tile-map-editor.json: $.payload.tileMapDocument: value must satisfy exactly one oneOf branch |
| 60 | +- samples/phase-02/0226/sample.0226.skin-editor.json: $.skin: value must satisfy exactly one oneOf branch |
| 61 | +- samples/phase-02/0227/sample.0227.skin-editor.json: $.skin: value must satisfy exactly one oneOf branch |
| 62 | +- samples/phase-03/0301/sample.0301.sprite-editor.json: $.payload.spriteProject: value must satisfy exactly one oneOf branch |
| 63 | +- samples/phase-03/0302/sample.0302.sprite-editor.json: $.payload.spriteProject: value must satisfy exactly one oneOf branch |
| 64 | +- samples/phase-03/0305/sample.0305.tile-map-editor.json: $.payload.tileMapDocument: value must satisfy exactly one oneOf branch |
| 65 | +- samples/phase-09/0905/sample.0905.sprite-editor.json: $.payload.spriteProject: value must satisfy exactly one oneOf branch |
| 66 | +- samples/phase-12/1208/sample.1208.parallax-editor.json: $.payload.parallaxDocument: value must satisfy exactly one oneOf branch |
| 67 | +- samples/phase-12/1208/sample.1208.tile-map-editor.json: $.payload.tileMapDocument: value must satisfy exactly one oneOf branch | $.payload.parallaxDocument: value must satisfy exactly one oneOf branch |
| 68 | +- samples/phase-12/1209/sample.1209.tile-map-editor.json: $.payload.tileMapDocument: value must satisfy exactly one oneOf branch |
| 69 | +- samples/phase-12/1210/sample.1210.tile-map-editor.json: $.payload.tileMapDocument: value must satisfy exactly one oneOf branch |
| 70 | +- samples/phase-12/1211/sample.1211.tile-map-editor.json: $.payload.tileMapDocument: value must satisfy exactly one oneOf branch |
| 71 | +- samples/phase-12/1212/sample-1212-vector-map-editor.json: $.payload.vectorMapDocument: value must satisfy exactly one oneOf branch |
| 72 | +- samples/phase-12/1213/sample-1213-vector-map-editor.json: $.payload.vectorMapDocument: value must satisfy exactly one oneOf branch |
| 73 | +- samples/phase-12/1214/sample-1214-vector-map-editor.json: $.payload.vectorMapDocument: value must satisfy exactly one oneOf branch |
| 74 | +- samples/phase-12/1218/sample-1218-parallax-editor.json: $.payload.parallaxDocument: value must satisfy exactly one oneOf branch |
| 75 | +- samples/phase-12/1219/sample-1219-parallax-editor.json: $.payload.parallaxDocument: value must satisfy exactly one oneOf branch |
| 76 | +- samples/phase-12/1220/sample-1220-parallax-editor.json: $.payload.parallaxDocument: value must satisfy exactly one oneOf branch |
| 77 | +- samples/phase-14/1413/sample.1413.3d-asset-viewer.json: $.payload.asset3d: value must satisfy exactly one oneOf branch |
| 78 | +- samples/phase-14/1413/sample.1413.asset-pipeline-tool.json: $.payload.pipelinePayload: value must satisfy exactly one oneOf branch |
| 79 | +- samples/phase-14/1414/sample.1414.sprite-editor.json: $.payload.spriteProject: value must satisfy exactly one oneOf branch |
| 80 | + |
| 81 | +## Files Changed (Sample Cleanup) |
| 82 | +- samples/phase-02/0204/sample.0204.3d-asset-viewer.json |
| 83 | +- samples/phase-02/0204/sample.0204.asset-browser.json |
| 84 | +- samples/phase-02/0207/sample.0207.sprite-editor.json |
| 85 | +- samples/phase-02/0213/sample.0213.sprite-editor.json |
| 86 | +- samples/phase-02/0214/sample.0214.sprite-editor.json |
| 87 | +- samples/phase-02/0219/sample.0219.sprite-editor.json |
| 88 | +- samples/phase-02/0221/sample.0221.tile-map-editor.json |
| 89 | +- samples/phase-02/0221/sample.0221.tile-model-converter.json |
| 90 | +- samples/phase-02/0224/sample.0224.sprite-editor.json |
| 91 | +- samples/phase-02/0224/sample.0224.tile-map-editor.json |
| 92 | +- samples/phase-02/0226/sample.0226.skin-editor.json |
| 93 | +- samples/phase-02/0227/sample.0227.skin-editor.json |
| 94 | +- samples/phase-03/0301/sample.0301.sprite-editor.json |
| 95 | +- samples/phase-03/0302/sample.0302.sprite-editor.json |
| 96 | +- samples/phase-03/0305/sample.0305.tile-map-editor.json |
| 97 | +- samples/phase-03/0305/sample.0305.tile-model-converter.json |
| 98 | +- samples/phase-09/0905/sample.0905.sprite-editor.json |
| 99 | +- samples/phase-12/1208/sample.1208.parallax-editor.json |
| 100 | +- samples/phase-12/1208/sample.1208.svg-asset-studio.json |
| 101 | +- samples/phase-12/1208/sample.1208.tile-map-editor.json |
| 102 | +- samples/phase-12/1209/sample.1209.tile-map-editor.json |
| 103 | +- samples/phase-12/1209/sample.1209.tile-model-converter.json |
| 104 | +- samples/phase-12/1210/sample.1210.tile-map-editor.json |
| 105 | +- samples/phase-12/1211/sample.1211.tile-map-editor.json |
| 106 | +- samples/phase-12/1212/sample-1212-vector-map-editor.json |
| 107 | +- samples/phase-12/1213/sample-1213-vector-map-editor.json |
| 108 | +- samples/phase-12/1214/sample-1214-vector-map-editor.json |
| 109 | +- samples/phase-12/1215/sample-1215-svg-asset-studio.json |
| 110 | +- samples/phase-12/1216/sample-1216-svg-asset-studio.json |
| 111 | +- samples/phase-12/1217/sample-1217-svg-asset-studio.json |
| 112 | +- samples/phase-12/1218/sample-1218-parallax-editor.json |
| 113 | +- samples/phase-12/1219/sample-1219-parallax-editor.json |
| 114 | +- samples/phase-12/1220/sample-1220-parallax-editor.json |
| 115 | +- samples/phase-14/1413/sample.1413.3d-asset-viewer.json |
| 116 | +- samples/phase-14/1413/sample.1413.asset-browser.json |
| 117 | +- samples/phase-14/1413/sample.1413.asset-pipeline-tool.json |
| 118 | +- samples/phase-14/1414/sample.1414.sprite-editor.json |
| 119 | +- samples/phase-15/1505/sample.1505.asset-browser.json |
| 120 | + |
| 121 | +## Full Samples Smoke Decision |
| 122 | +- Full samples smoke was skipped. |
| 123 | +- Reason: this PR is schema/data-contract cleanup and did not change shared sample loader/framework paths; targeted schema validation plus sample 1902 smoke was executed per BUILD policy. |
0 commit comments