REPOSITORY SOURCE

terrain-paint-acceptance.json

docs/evidence/terrain-paint-acceptance.json

1{
2  "date": "2026-10-25",
3  "baseCommit": "71c31f5187c5d137bb81e084ca7893ece1b1cb6b",
4  "scope": "Blended grass/earth/stone/sand painting, source format 2, independent paint undo, portable compilation, editor preview/save/reload, shared Apply and publication. Full milestones 0\u201318 remain open.",
5  "environment": {
6    "node": "22.23.4",
7    "browser": "Playwright 1.56.1 / Chromium 141 / SwiftShader Vulkan WebGPU",
8    "isolation": "Fresh acceptance servers; interactive editor and beta kept alive."
9  },
10  "checks": {
11    "headless": {
12      "tests": 919,
13      "passed": 859,
14      "skipped": 60,
15      "failed": 0,
16      "concurrency": 4,
17      "report": "terrain-paint-headless.tap"
18    },
19    "build": {
20      "passed": true,
21      "packageFiles": 167,
22      "engine": {
23        "engine": "c9843f020504be3c74f9fb7edeaae4ca8328f467e1d305ae4222eb3257bf9705",
24        "files": 28,
25        "bytes": 51215017,
26        "output": "/home/jason/coding/dw-web/engine-dist"
27      },
28      "report": "terrain-paint-build.log"
29    },
30    "portable": {
31      "passed": true,
32      "report": "terrain-paint-portable.json"
33    },
34    "browser": {
35      "report": "terrain-paint-browser.json",
36      "passingUniqueScenarios": 12,
37      "qualification": "Each of twelve relevant scenarios has a passing run; the repeated shared scenario in the combined terrain/template run times out overall after its final gameplay assertions. No deadline was relaxed. Not a wholly green campaign."
38    }
39  },
40  "observations": [
41    "Paint and height use independent sample revisions and undo conflict checks. Existing format-1 source and unpainted mesh identities remain unchanged.",
42    "All painted chunks share global UVs and identical mip chains; painting preserves geometry/collision. Saved patch undo/redo survives a real AuthoringStore restart.",
43    "Exact full-data texture memoization is limited to eight entries and an 8 MiB retained-string budget. Forged hashes, malformed mips and cancelled reads do not bypass validation.",
44    "Sixteen chunks initially exceeded the 16 MiB portable document limit. Atlas sizing now reserves a worst-case 12 MiB repeated texture payload; the regression passes. One-, two-, four- and eight-chunk sample model hashes before/after this budget correction are identical.",
45    "Browser UI journeys precede only the final maximum-chunk atlas budget adjustment. The four-chunk meadow atlas is unchanged; final native main/worker tests and the full headless suite run after it.",
46    "Duplicate structural transaction preparation and repeated model validation were removed from editor preview. Exact matching saves reuse the accepted scene, fenced by content/place/behavior/scene/renderer identity. Handle, material and behavior regressions pass.",
47    "Native main and worker observations: 40,370 changed pixels, exact paint undo/recovery, maximum 23 buffers and 5 textures; disposal returns owned resources to zero.",
48    "Desktop/narrow paint controls and native terrain captures were visually inspected. Colors are an initial material palette; final environment and character art are still deferred."
49  ],
50  "limits": [
51    "Shared-journey cleanup/readiness timing remains narrow; one complete isolated pass does not establish sustained performance.",
52    "Previously reproduced published-world restoration reload contention remains open; not retested or claimed fixed here.",
53    "Texture normal/roughness layers, per-sample collaborative submission, streamed chunks, LOD seams, voxels, procedural environment recipes, physical devices and long-session qualification remain open.",
54    "No Docker/Coolify deployment or production qualification performed."
55  ],
56  "sourceFiles": {
57    "apps/editor/main.ts": "051c0e72b4edff7e99d06236b9084c7a100834adb2c5127ef30a62779c1f1e6a",
58    "apps/editor/scene.ts": "e881be8887a9d577070f311eda4ba015c195b72b14871ff8a6ff95d703a5bb05",
59    "apps/editor/style.css": "e6b640b8e91a658256311833dd37b942fa3e5d839df993c285b3443a1a73db2e",
60    "apps/editor/terrain.ts": "5af93e2b290908f93e2dc455081b20ca91712124b7f5194b9fac048cc16f6f00",
61    "packages/assets/catalog.ts": "4b13fe55d2308fbc748627a3bcd44bfca7d8f9f74faab4cd126fac1691841cf7",
62    "packages/assets/png.ts": "c7808b01bfd8b1924d0156af127220a00d036b8df0506ecfa61092baf6cef536",
63    "packages/assets/runtime.ts": "6b20aae7e0a020080a480deaa2a36a9c40f76efcf3c9434350e56ce01e2f4b16",
64    "packages/assets/texture.ts": "f46d6d9ed806b6635bc1eb241d3808fa9736731340cbc2401bef715a45fbc910",
65    "packages/terrain/compiler.ts": "665fd439a90b24f98ae5fb90c7f00e19ce90ed0ab63faac4752854d966514e9c",
66    "packages/terrain/index.ts": "958d7619653684e84fa5ca76cf6282597fe0f55c32df9ce6ecc5f91a3001f850",
67    "packages/terrain/materials.ts": "29132b4700ab1334246b7a1398153fbdc446a8ad61cb739717757a59333d9f86",
68    "tests/authoring-terrain.test.ts": "dc57641bf08e03c752358a2438bfb6dd9de81e1404952d7067bd738acc85e2b2",
69    "tests/browser/editor-terrain-tools.spec.ts": "3d6f7fd513a0067586be77af83f5848420e8d14662659116cbabfc61958013cd",
70    "tests/browser/terrain.spec.ts": "d510f586e098bdab7d17f3e1e736b0e21427ac19ab031be53bd6b459d31ea4cb",
71    "tests/fixtures/terrain-native.ts": "616f0c6e9cff0f4341c122eab127d0196a580655c86e9bba793e386a6b5f1071",
72    "tests/terrain-paint.test.ts": "9935003672fcde9a6430838e16237de85292ec2a72fec57feb93b87cee8256cf",
73    "tests/texture-admission.test.ts": "0b827c14a27993863b702d4e0d4ec98cd968bb237218d9206f55f4e3dd6e3aa9",
74    "tools/cli/terrain.ts": "aae0277b96b7b0cef6319ce8a1d8221e37d4ff692fdaefe3c7906c84333d5b5d"
75  }
76}
77