From 620c73cbd24d936231bee5cb3469e5cff3424cd9 Mon Sep 17 00:00:00 2001 From: NINI Date: Fri, 9 Oct 2026 02:32:12 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9B=90=EA=B2=BD=20=EB=B3=B4=EC=A0=95=20?= =?UTF-8?q?=ED=9B=84=20=EC=B5=9C=EC=A2=85=20=EA=B2=80=EC=A6=9D=EA=B3=BC=20?= =?UTF-8?q?=EB=AA=A8=EB=8D=B8=20=EC=B1=84=ED=83=9D=20=EA=B8=B0=EB=A1=9D=20?= =?UTF-8?q?=EA=B0=B1=EC=8B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Models/Heroes/active-adoption.json | 610 ++++++++++++++--- .../Models/Meadow/active-adoption.json | 635 ++++++++++++++---- docs/asset-register.md | 4 +- docs/content.md | 4 +- docs/engineering-notes.md | 2 + docs/final-verification.md | 18 +- docs/handoff.md | 8 +- docs/operations.md | 4 +- docs/tracking/decisions/0005-hybrid-assets.md | 2 + docs/tracking/status.md | 8 +- 10 files changed, 1078 insertions(+), 217 deletions(-) diff --git a/SourceAssets/Models/Heroes/active-adoption.json b/SourceAssets/Models/Heroes/active-adoption.json index 3951fc5..76d8147 100644 --- a/SourceAssets/Models/Heroes/active-adoption.json +++ b/SourceAssets/Models/Heroes/active-adoption.json @@ -66,11 +66,11 @@ } ], "unity": { - "productSourceCommit": "83182e7f3e86926bf130817d401a331829401fac", + "productSourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", "applyScript": { "path": "Assets/MagnetismHeroes/Editor/VisualUpgradeAssets.cs", - "bytes": 17527, - "sha256": "8996b23a4da448562c34bd681529414e87fcaa809fc62c563d135f8c61dc2569", + "bytes": 19379, + "sha256": "640765adea45fa4cb18954f4c157480ed2b22f28839282943f8b3175e159c885", "guid": "40789cbe0397f8745bff78d14a544113", "metaSha256": "f017c6e684dd15cd8d1a3682eea8ff6f1b0e4ab75f04087c092484cd19a97821" }, @@ -255,7 +255,7 @@ "verification": { "finalCompletion": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/completion.json", - "sha256": "587b92a7f4f63986bfa32af647bc184745b5b100deeed2b0ca4b7818ac309414" + "sha256": "dd898f331a31fb49545e9c3ee2d1c5b52adca97d907f5cff1b0c21b1e6d429fd" }, "editorCaptureDirectory": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture", "previousGameReview": { @@ -268,154 +268,226 @@ { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-soft-shadow.json", - "sha256": "3b09516098a73d3fb76c7992feaf0123b206472458dacb718f4f21aeef58a1e0" + "sha256": "68ec9ed734cbd5919f30f708a4062d01084b7d54872f23ac7b3a904150e2af12" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-soft-shadow.png", - "sha256": "3cbe3c75bc6e864a2abf4a4275ca2aafb6f8ad61db8a09a4b7568053ea2e3902" + "sha256": "abced35a2047a504dce2d0322cc31f87f68ed88bb9d530c4bf658970d65d166b" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:03.7926755Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:42.2101736Z", "width": 1280, "height": 720, "balls": 1, "groups": 1, "equipmentAssemblies": 1, "boardOrigin": "Actual Main daylight with soft shadows", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 50, + "triangles": 91970, + "sharedMaterials": 27, + "textureMemory": 86683169, + "allocatedMemory": 460169970, + "editorCameraRenderMilliseconds": 1.1468000411987305, + "fieldOfView": 62.0 + } }, { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-soft-shadow.json", - "sha256": "43ec85a330d87af485051023ccb75752e1699ac7a9f02da3968577217c6957b3" + "sha256": "7480b58de0a332c30da016739d1c4a6d939f0886e999ae78f935df240667e6e8" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-soft-shadow.png", - "sha256": "6c1433aa7ddb80f7f08f6477e6254023a8b57ce18168b7a018a65f815fcb722c" + "sha256": "d3a656195a308feb9e6296b9425a1057c790d4391a92315c611600ee71fa9826" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:04.0908702Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:42.3114855Z", "width": 1280, "height": 720, "balls": 3, "groups": 1, "equipmentAssemblies": 1, "boardOrigin": "Actual Main daylight with soft shadows", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 52, + "triangles": 104900, + "sharedMaterials": 28, + "textureMemory": 86683169, + "allocatedMemory": 460286942, + "editorCameraRenderMilliseconds": 1.1657999753952026, + "fieldOfView": 62.0 + } }, { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-soft-shadow.json", - "sha256": "b3f0c277da8218d26854e42f92b64a8d4a82cf5329992cea4c8adf8da470deb1" + "sha256": "6a15bcc8a72db2d26e1c800aed8f38da4237413d7c133813a87109483cbedda7" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-soft-shadow.png", - "sha256": "a3688b2458fd8551f9b847a78b4f348e70dd7296d85be2437805aee6b8c1314d" + "sha256": "126d329c7de8619711568f7fd79bcabc4b19b8d2ee75a5c5cd9b77bae4710c5d" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:04.1905928Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:42.4126258Z", "width": 1280, "height": 720, "balls": 6, "groups": 2, "equipmentAssemblies": 2, "boardOrigin": "Actual Main daylight with soft shadows", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 78, + "triangles": 112532, + "sharedMaterials": 23, + "textureMemory": 86683169, + "allocatedMemory": 460479941, + "editorCameraRenderMilliseconds": 1.020400047302246, + "fieldOfView": 62.0 + } }, { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-two-plus-three-phone-default.json", - "sha256": "dfdbae399d6dc0671edca533807342cea44ed20d227cc74332eba133e6ca1355" + "sha256": "8baa85ef8454ab47d37dc051ce3b1642f1d38dd3704623b02e29094eb8683119" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-two-plus-three-phone-default.png", - "sha256": "610a1fd1a25f03a50757a17c7f6f01d463a8b430971aa3d882c2d88fe213ba22" + "sha256": "574652616f8cd0d3ac0d0be469e4c0f1b8b129a3266f93ccc8c9fc8d3cee9a1d" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:05.8152052Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:45.3385822Z", "width": 2400, "height": 1080, "balls": 5, "groups": 2, "equipmentAssemblies": 2, "boardOrigin": "Validated five-ball 2+3 free-play store fixture; actual Main app/session", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 77, + "triangles": 124524, + "sharedMaterials": 28, + "textureMemory": 118420769, + "allocatedMemory": 466851911, + "editorCameraRenderMilliseconds": 0.9291999936103821, + "fieldOfView": 62.0 + } }, { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-merged-five-phone-default.json", - "sha256": "cca93732bef1a2fb86622411295c4f2a638bd1ed2c96c2ef96ece26d1ee3e95b" + "sha256": "9ff48f6ec5ca6ee7dd09732ef4a5a9e7ae393f6220ed429d7e1dcc67d38929ca" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-merged-five-phone-default.png", - "sha256": "6c03e9c1d814cc88c28254e5357d98f3c50bde22f2e824da3475c43cf40a3c56" + "sha256": "b42e30691f84e76e9f12503e133ea2f4946fa83995e5131ddb022c20727b85eb" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:06.1027531Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:45.6171820Z", "width": 2400, "height": 1080, "balls": 5, "groups": 1, "equipmentAssemblies": 1, "boardOrigin": "Actual app/session 2+3 merge from labeled boundary fixture", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 54, + "triangles": 112836, + "sharedMaterials": 28, + "textureMemory": 118420769, + "allocatedMemory": 466829060, + "editorCameraRenderMilliseconds": 1.1601999998092651, + "fieldOfView": 62.0 + } }, { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-disconnected-split-two-three-tablet-orbitzoom.json", - "sha256": "e27b260c70273f1ec68c43bc1aac16e666dc4c494253df0055703610dd908ecd" + "sha256": "3abc8fae3b71dc5fa14bcf319d57436a0522fd9c4291e94cfef8dd29c1706ef1" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-disconnected-split-two-three-tablet-orbitzoom.png", - "sha256": "dea0046052f1400a0fd1e2e870b4546d01859c9463178867084c9fe21cd4c173" + "sha256": "1c6c9317e183a30ac7647a54d21881df25b12b974ea857b3b44afebc14a9f6d6" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:06.5677124Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:46.0651945Z", "width": 1600, "height": 1000, "balls": 5, "groups": 2, "equipmentAssemblies": 2, "boardOrigin": "Actual app/session split of disconnected five-group endpoints", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 77, + "triangles": 124524, + "sharedMaterials": 28, + "textureMemory": 99572769, + "allocatedMemory": 463953034, + "editorCameraRenderMilliseconds": 1.1318000555038452, + "fieldOfView": 62.0 + } }, { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-phone-default.json", - "sha256": "66521c24e42b09e02212409819e35ef30f9c01e39c7fc212722a9ad817413911" + "sha256": "28bf53b56db30cf861e115aee1e6f03ab3d59725a0e4ea8748a71fd8cad3d011" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-phone-default.png", - "sha256": "8f0a22475b6013c58ff5bd9addd285f3927eb94e48aa081f2046eb8c1e276c52" + "sha256": "2072f115be6faef2a02de3ad62a2634f9bdd5c605abe4b454bd74b2ec017cf06" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:08.5003167Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:47.9677285Z", "width": 2400, "height": 1080, "balls": 10, "groups": 10, "equipmentAssemblies": 10, "boardOrigin": "Validated synthetic Core FreePlay render fixture; session UI remains underlying stage 1", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 266, + "triangles": 232874, + "sharedMaterials": 27, + "textureMemory": 118420769, + "allocatedMemory": 467703162, + "editorCameraRenderMilliseconds": 2.098900079727173, + "fieldOfView": 62.0 + } }, { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-tablet-default.json", - "sha256": "54c6f106ead00b1ede9bebdf182b78cbeb66007c50b53583a9d0847c27fa3bf5" + "sha256": "305960074b579817f17aa4a44e0a2ef58c90bae56e12913d7b85acabb689170a" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-tablet-default.png", - "sha256": "3959e9679a5418b96d2b63d1de0479c2b537934dd3e7c5e71357c9f343d8ea54" + "sha256": "5b1b4883e19f1af9f28d9b00521260ad8aed8e5ae5571db510f08a6765b0e166" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:08.8364150Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:48.2929966Z", "width": 1600, "height": 1000, "balls": 10, "groups": 1, "equipmentAssemblies": 1, "boardOrigin": "Validated synthetic Core FreePlay render fixture; session UI remains underlying stage 1", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 59, + "triangles": 127684, + "sharedMaterials": 27, + "textureMemory": 99572769, + "allocatedMemory": 463947314, + "editorCameraRenderMilliseconds": 1.3295999765396118, + "fieldOfView": 62.0 + } } ], "modelRoundtripEvidence": { @@ -424,10 +496,10 @@ }, "finalEvidenceAudit": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/documentation-final-evidence-audit.json", - "sha256": "778be655b03b0e159dfdc981be368802b39e2c25cc34e54d24761cba0dd3701e" + "sha256": "14e62264a22f360f9afda94e1c8660507cda3b27c30d6f9916607889c2819e08" }, "actualFinalResults": { - "productSourceCommit": "83182e7f3e86926bf130817d401a331829401fac", + "productSourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", "phaseExitCodes": { "EditMode": 0, "PlayMode": 0, @@ -436,7 +508,7 @@ }, "editorTests": { "EditMode": 103, - "PlayMode": 52 + "PlayMode": 53 }, "androidChecks": 226, "children": [ @@ -444,40 +516,41 @@ "suite": "Fresh30", "checks": 151, "exitCode": 0, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "apkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "apkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "Fresh 30-stage sequential actual touch progression, no save writes or completion fixtures; separate boundary suites are labelled separately" }, { "suite": "FinalBoundary", "checks": 37, "exitCode": 0, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "apkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "apkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "Separate native boundaries after real30 completion; deliberate corrupt-file tests labelled, no fabricated completion or board injection" }, { "suite": "RapidBoundary", "checks": 39, "exitCode": 0, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "apkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "apkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "Separate QA planar collected10 replay20 fixture; real30 source record preserved. Actual offline native11 taps and complete numeric PCM; not fresh progression evidence." }, { "suite": "ContentBoundary", "checks": 69, "exitCode": 0, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "apkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "apkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "별도 명시 경계 검사. 정상 30단계 진행 수에 합산하지 않는다." } ], - "smokeStartedUtc": "2026-10-08T15:31:53.7694461Z", - "smokeFinishedUtc": "2026-10-08T15:47:20.6303343Z", + "smokeStartedUtc": "2026-10-08T17:04:22.9959710Z", + "smokeFinishedUtc": "2026-10-08T17:19:58.4677196Z", + "completedUtc": "2026-10-08T17:19:58.7340281Z", "androidReport": { "path": "artifacts/verification/Final/android-final-evidence.json", - "sha256": "070b33c70925eabebf33c66dfd08daa902ddffaa6591e052c765d7884e22ba8b" + "sha256": "18ec499dd9d30cd0a00df16012e8e8021e0cbf77a97089611a3954ed5c00aa7b" }, "freshAll30SuccessAndIdsChecked": true, "freshSavePushCommandCount": 0, @@ -485,34 +558,36 @@ { "phase": "AndroidSmoke", "command": "pwsh -NoProfile -File tools/verify.ps1 -Phase AndroidSmoke -Milestone Final", - "startedUtc": "2026-10-08T15:26:38.5225191Z", - "finishedUtc": "2026-10-08T15:30:38.1167761Z", + "startedUtc": "2026-10-08T16:58:49.3785491Z", + "finishedUtc": "2026-10-08T17:00:52.0393312Z", "exitCode": 1, "status": "failed", - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", "sourceDirty": false, "sourceDirtyEnd": null, - "outerLog": "artifacts/verification/VisualUpgrade/FinalProduct/FailedAndroidAttempt1/androidsmoke-outer.log", - "evidence": "artifacts/verification/VisualUpgrade/FinalProduct/FailedAndroidAttempt1/Final/androidsmoke-evidence.json", - "originalEvidencePath": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\Final\\androidsmoke-evidence.json", - "originalOuterLogPath": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\VisualUpgrade\\FinalProduct\\androidsmoke-outer.log" + "outerLog": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\VisualUpgrade\\HorizonFailedSmokeAttempt1\\artifacts\\verification\\VisualUpgrade\\FinalProduct\\androidsmoke-outer.log", + "evidence": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\VisualUpgrade\\HorizonFailedSmokeAttempt1\\artifacts\\verification\\Final\\androidsmoke-evidence.json", + "evidenceOriginalPath": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\Final\\androidsmoke-evidence.json", + "outerLogOriginalPath": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\VisualUpgrade\\FinalProduct\\androidsmoke-outer.log" } - ] + ], + "firstThreePhasesRerun": false, + "productRawFilesPreserved": 732 }, "apkProvenance": { "apk": { "path": "artifacts/android/MagnetismHeroes.apk", - "sha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "sha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "bytes": 57215937 }, "installedApk": { "path": "artifacts/verification/Final/Fresh30/installed-base.apk", - "sha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea" + "sha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829" }, "actualClipCount": 44, "voicePayload": { "path": "artifacts/verification/Final/VoicePayload/apk-voice-payload.json", - "sha256": "e89d1987d515ab958cc411f299297ccbea9c1a4f4b62c7886d6d7bc17be2a620" + "sha256": "a3c1fc9e0ef0170b3fcb60170ae4ca5b9ec640b644fd1f2b00fea591bdc28650" }, "notices": [ { @@ -534,49 +609,414 @@ "stage": 1, "image": { "path": "artifacts/verification/Final/Fresh30/stage-1-enter.png", - "sha256": "6eee00ef4b430cb0ad9c697ca24d5ac4fe8de3630f14488e74fe78c25c87a301" + "sha256": "24a1fee6f57ed238976dde803184895fbe4900e3ed218fc3064c9743ef9c7e63" }, "captureCommands": { "path": "artifacts/verification/Final/Fresh30/stage-1-enter-commands.json", - "sha256": "465c74bd14cb7cef440efd1e9007adb5f0626b4824fdd780cf8c637a0d6c07f5" + "sha256": "331258895e501db85925861d7b2211c42896b58c1169fcb24b748f832c8feaba" }, - "observedUtc": "2026-10-08T15:32:22.2063877Z", - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "installedApkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "observedUtc": "2026-10-08T17:04:51.8507959Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "installedApkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "실제 Android API37 AVD 2400×1080 화면. 정상 30단계 실제 입력의 한 시점이며 모든 얼굴의 동시 가시성을 보장하지 않는다." }, { "stage": 11, "image": { "path": "artifacts/verification/Final/Fresh30/stage-10-next.png", - "sha256": "4e64e2ed5706d4571ac43fad55616a457caea934c596a12d437195b13903e905" + "sha256": "a17e8540e959fcad55fcde48ccee3654999647e59f7e245839e3872108776fc9" }, "captureCommands": { "path": "artifacts/verification/Final/Fresh30/stage-10-next-commands.json", - "sha256": "b447368b273e8213a3644a1c4afb201597ba884c623d443190d18bbcfb686af5" + "sha256": "b9794ef9c33aab6b7f6379458701b3a89d075fce688517b222cfaf2ba79ff2a5" }, - "observedUtc": "2026-10-08T15:34:51.7253665Z", - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "installedApkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "observedUtc": "2026-10-08T17:07:23.9081359Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "installedApkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "실제 Android API37 AVD 2400×1080 화면. 정상 30단계 실제 입력의 한 시점이며 모든 얼굴의 동시 가시성을 보장하지 않는다." }, { "stage": 21, "image": { "path": "artifacts/verification/Final/Fresh30/stage-20-next.png", - "sha256": "030ca33f9f11da310c2ead3a78b61306eee195a162cec1b8f32c5fda009328ef" + "sha256": "79cf0d0bef7671ebc92c2d1cf1f9b557633f7832425b6fc01809944ea8b0b3b3" }, "captureCommands": { "path": "artifacts/verification/Final/Fresh30/stage-20-next-commands.json", - "sha256": "4d21313b8c846e97effc65c1bddc94de87c7ab454d94512b2b8f0e56f41b4255" + "sha256": "762d84fdeb5cc822f24be5256cb30a26501516dfd73f4a32d1182283cf910528" }, - "observedUtc": "2026-10-08T15:39:44.5484050Z", - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "installedApkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "observedUtc": "2026-10-08T17:12:18.2030067Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "installedApkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "실제 Android API37 AVD 2400×1080 화면. 정상 30단계 실제 입력의 한 시점이며 모든 얼굴의 동시 가시성을 보장하지 않는다." } ], - "newFinalProductUserApproval": "별도 최종 사용자 승인 대기이며 모델 승인과 구분한다." + "newFinalProductUserApproval": "별도 최종 사용자 승인 대기이며 모델 승인과 구분한다.", + "editorCaptureCount": 119, + "editorResourceMeasurements": [ + { + "theme": "Garden", + "balls": 10, + "groups": 1, + "equipmentAssemblies": 1, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 59, + "max": 59 + }, + "triangles": { + "min": 127684, + "max": 127684 + }, + "sharedMaterials": { + "min": 27, + "max": 27 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 463947314, + "max": 466923575 + }, + "editorCameraRenderMilliseconds": { + "min": 1.0715999603271484, + "max": 1.3295999765396118 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-phone-default.json", + "sha256": "6d70d89d9fbc4cf1aab09c528b26d05e7b32f4f5f3f72b9e5ae3772cd7f7d427" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-phone-orbitzoom.json", + "sha256": "158540fdd6f861ba4c77a02b5ddc3c380b57e261c80fa21d86a8a103e8596c69" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-tablet-default.json", + "sha256": "305960074b579817f17aa4a44e0a2ef58c90bae56e12913d7b85acabb689170a" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-tablet-orbitzoom.json", + "sha256": "5b2ee1a0781273ffa00ac07d21af32df4c410e01c81b48d282edcd3f70a7b8e2" + } + ] + }, + { + "theme": "Garden", + "balls": 10, + "groups": 10, + "equipmentAssemblies": 10, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 266, + "max": 266 + }, + "triangles": { + "min": 232874, + "max": 232874 + }, + "sharedMaterials": { + "min": 27, + "max": 27 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 464729023, + "max": 467705860 + }, + "editorCameraRenderMilliseconds": { + "min": 1.0825999975204468, + "max": 2.098900079727173 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-phone-default.json", + "sha256": "28bf53b56db30cf861e115aee1e6f03ab3d59725a0e4ea8748a71fd8cad3d011" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-phone-orbitzoom.json", + "sha256": "0ac5ad59d78ed82acaf212a574c668fd579f4583a3e9a6df24675768808ef867" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-tablet-default.json", + "sha256": "164d0ea6b3bc8051f05fd32794128dd37efecb8792a6e7fc57d3c995ae97629e" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-tablet-orbitzoom.json", + "sha256": "0f1ffda5331a68223a33deccf94d946e9f38116667d696fa362e16de64f7c7e1" + } + ] + }, + { + "theme": "Cloud", + "balls": 10, + "groups": 1, + "equipmentAssemblies": 1, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 59, + "max": 59 + }, + "triangles": { + "min": 132678, + "max": 132678 + }, + "sharedMaterials": { + "min": 28, + "max": 28 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 464024251, + "max": 467000560 + }, + "editorCameraRenderMilliseconds": { + "min": 0.9860000014305115, + "max": 1.3367999792099 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-one-group-phone-default.json", + "sha256": "84933bc2e667cb4f301e4dbd318b6b1a87733f41776402fafe562b6609d023bb" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-one-group-phone-orbitzoom.json", + "sha256": "8862fa8b8f8b705ed487016eff867f7eecbfc04d3fb0c0a4b3375bdf034a482c" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-one-group-tablet-default.json", + "sha256": "70b5abf41586fc9ca5dce7727b0fb311fdae7c210e46894104e63fe81505c75a" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-one-group-tablet-orbitzoom.json", + "sha256": "e8fa86a3a066e0d4c98b9b4a183dff0eaff97c5876f397b9906078a3c5043570" + } + ] + }, + { + "theme": "Cloud", + "balls": 10, + "groups": 10, + "equipmentAssemblies": 10, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 266, + "max": 266 + }, + "triangles": { + "min": 237868, + "max": 237868 + }, + "sharedMaterials": { + "min": 28, + "max": 28 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 464923569, + "max": 467899912 + }, + "editorCameraRenderMilliseconds": { + "min": 1.167099952697754, + "max": 1.2316999435424805 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-single-groups-phone-default.json", + "sha256": "5f6009a4bb941297aefd1ee1cf19392a3c402053903ff88e564137f27620e02b" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-single-groups-phone-orbitzoom.json", + "sha256": "a95c1cc7398392d033f601fc44358908b1ea284e7accfa1aab30726c54874b00" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-single-groups-tablet-default.json", + "sha256": "1df140d8544a772014844eb30709b140161307ff415a811580ec91b0eb06b5ab" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-single-groups-tablet-orbitzoom.json", + "sha256": "240d03e44df9ac90593bd3426efe71b2d88bf9acaad7b5827e2c20acd159272b" + } + ] + }, + { + "theme": "Workshop", + "balls": 10, + "groups": 1, + "equipmentAssemblies": 1, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 59, + "max": 59 + }, + "triangles": { + "min": 116718, + "max": 116718 + }, + "sharedMaterials": { + "min": 23, + "max": 23 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 464029688, + "max": 467005957 + }, + "editorCameraRenderMilliseconds": { + "min": 1.0276999473571777, + "max": 1.3801000118255615 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-one-group-phone-default.json", + "sha256": "79ea5335bc5994c96c39684cb5348b3dc5e1a5beb3bc7dc25051cc34f7e56ff2" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-one-group-phone-orbitzoom.json", + "sha256": "993a189c0d55d784651ccc3307518afda4b9f7c1ba16af5973562038d37bcc1a" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-one-group-tablet-default.json", + "sha256": "524e973c387d0c045c756964e8514f3f83863c5d2833917e6e6db07686396fad" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-one-group-tablet-orbitzoom.json", + "sha256": "7c1a25bf41784b9d629201cbb83f582546fb2d470be382fb386be553af8bdd89" + } + ] + }, + { + "theme": "Workshop", + "balls": 10, + "groups": 10, + "equipmentAssemblies": 10, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 266, + "max": 266 + }, + "triangles": { + "min": 221908, + "max": 221908 + }, + "sharedMaterials": { + "min": 23, + "max": 23 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 464961384, + "max": 467942131 + }, + "editorCameraRenderMilliseconds": { + "min": 1.2496000528335571, + "max": 1.4726999998092651 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-single-groups-phone-default.json", + "sha256": "db7b08da12c389326ea10de4c85ab784f33de73532c6fababcb18dced60168be" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-single-groups-phone-orbitzoom.json", + "sha256": "035b8464064c3a6bcff2d6ddb44a5e83ac9cf6ce69e4f39db1792b385cbb2a24" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-single-groups-tablet-default.json", + "sha256": "412293e68377787fae33333cd7db6af8a3f9bf7764f0eab509046df98d907a00" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-single-groups-tablet-orbitzoom.json", + "sha256": "834963a98cce4483bb9b5236968178ce52417e3e1c12d2227dec0d0927b5f161" + } + ] + } + ], + "editorResourceScope": "active hierarchy 상주 MeshFilter 인덱스 합계에는 Renderer가 꺼진 원래 바닥도 포함한다. GPU 제출 삼각형 수가 아니다. 전체 Editor-loaded texture 메모리/치수와 Camera.Render CPU wall time이며 Android FPS·GPU·실기기 비용으로 환산하지 않는다.", + "editorLoadedTextures": { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/editor-loaded-textures.txt", + "sha256": "d60f414fbb4753a288291d3efd8bf0de6e0d454fd6436bf2604d6ce584c31a54" + }, + "horizonFix": { + "commands.json": { + "path": "artifacts/verification/VisualUpgrade/HorizonFix/commands.json", + "sha256": "30aa2370d563444fb5354fd7aad6e4c996baa2d2bbfd5c67499931a314deea5e" + }, + "result.json": { + "path": "artifacts/verification/VisualUpgrade/HorizonFix/result.json", + "sha256": "d3b70ae81c29b15582fe77b0c9c6636432c62f68606d39faff1da8d48da2f7a4" + }, + "preservation.json": { + "path": "artifacts/verification/VisualUpgrade/HorizonFix/preservation.json", + "sha256": "cbab404eef5524a053cfca09be50a579f6bae858cfab78dc3dfdc6e2501ddb34" + }, + "geometryProofScope": "중앙 24m 복도 표본의 366→6→세 풍경 각각 0 및 실제 같은 카메라 화면 대조이며 전체 외곽·모든 픽셀·모든 시점을 보장하지 않는다.", + "farHorizonPositionsChanged": 120, + "previousRadius": 35, + "currentRadius": 27, + "approvedGeometryMaterialsUnchanged": true + }, + "previousFinalProduct": { + "manifest": { + "path": "artifacts/verification/VisualUpgrade/BeforeHorizonFix/manifest.json", + "sha256": "e717944ae93ca5ff5744c64968e66449bd3680022a301fa73e2b34df82bd6950" + }, + "productSourceCommit": "83182e7f3e86926bf130817d401a331829401fac", + "fileCount": 2311, + "previousAdoptionGitRecord": { + "commit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "repositoryRelativePath": "SourceAssets/Models/Heroes/active-adoption.json", + "canonicalBlobSha256": "46d569d80a51e60c6d46460e215fce5246d6deec05de00f644e17d74c5056c88" + }, + "scope": "원경 보정 전 성공 검증·APK·갤러리의 고정 이력이며 새 결과가 아니다." + }, + "failedAttemptArchive": { + "manifest": { + "path": "artifacts/verification/VisualUpgrade/HorizonFailedSmokeAttempt1/manifest.json", + "sha256": "e1a94d7e0480bdafe551a017ef7b6f696f9cd12c301d2cfc84e67e6731246592" + }, + "evidence": { + "path": "artifacts/verification/VisualUpgrade/HorizonFailedSmokeAttempt1/artifacts/verification/Final/androidsmoke-evidence.json", + "sha256": "08cba6e1754b552d8089c2092f14708fe3c413ae8b69b7ff0b4e8189883dca13" + }, + "outerLog": { + "path": "artifacts/verification/VisualUpgrade/HorizonFailedSmokeAttempt1/artifacts/verification/VisualUpgrade/FinalProduct/androidsmoke-outer.log", + "sha256": "919133a40d047d00471f0414ed83c1141260f77c564d59dc1c27c0c06a8ede2d" + }, + "fileCount": 1257, + "status": "failed", + "exitCode": 1, + "observedFailure": "Fresh30 stage5 ADB shell wm size의 localhost:5037 연결 timeout 10060. 이후 같은 query 종료 0 확인 후 Smoke만 재실행했다. AVD 충돌·게임 판정 실패로 단정하지 않는다." + } }, "preservation": "기존 13 FBX·원본·출처, 기존 GUID, 30 비시각 정의·초기 구 위치·ID·수량, 음성 44개·얼굴 6표정·폰트·UI·Mixer·Core·저장을 유지한다.", "fileHashScope": "실제 최종 빌드 저장소 파일 바이트이며 Git 체크아웃의 줄바꿈 차이와 구분한다.", diff --git a/SourceAssets/Models/Meadow/active-adoption.json b/SourceAssets/Models/Meadow/active-adoption.json index d467f37..b1baeae 100644 --- a/SourceAssets/Models/Meadow/active-adoption.json +++ b/SourceAssets/Models/Meadow/active-adoption.json @@ -177,11 +177,11 @@ } ], "unity": { - "productSourceCommit": "83182e7f3e86926bf130817d401a331829401fac", + "productSourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", "applyScript": { "path": "Assets/MagnetismHeroes/Editor/VisualUpgradeAssets.cs", - "bytes": 17527, - "sha256": "8996b23a4da448562c34bd681529414e87fcaa809fc62c563d135f8c61dc2569", + "bytes": 19379, + "sha256": "640765adea45fa4cb18954f4c157480ed2b22f28839282943f8b3175e159c885", "guid": "40789cbe0397f8745bff78d14a544113", "metaSha256": "f017c6e684dd15cd8d1a3682eea8ff6f1b0e4ab75f04087c092484cd19a97821" }, @@ -1155,8 +1155,8 @@ "stages": [ { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage01.asset", - "bytes": 5765, - "sha256": "1f0c26ba80824ee5bd8b60392b2562448f52b57e16a7f8e8d7d8a2cf8a68709b", + "bytes": 5751, + "sha256": "1cdb1898284177714b7bb18ae66f12d81296d2b82c08b57b97dfd3343d347bf8", "guid": "1bd91d4fcb826e54e861dc2275fcbdee", "metaSha256": "d191758be4296341ea14ef824080bffa7b6503c2707b83684c73573e57ff3576", "stageId": 1, @@ -1165,8 +1165,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage02.asset", - "bytes": 5800, - "sha256": "ef7afd99dd1dfe3a859c68090da420e15262529d7b3002c279bf7f5682ca1d37", + "bytes": 5786, + "sha256": "340eb5da36854984d6b5ce0a1504d87606838da2878fd69a89b1c9dcbe48f612", "guid": "74d68861704a8b541bb8ac1d37613620", "metaSha256": "0c4b446bddb0344d5f4100ce68123ee08d75f39f1e883535347b604a756ab3c6", "stageId": 2, @@ -1175,8 +1175,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage03.asset", - "bytes": 5829, - "sha256": "45485033ad2a4cada78ee3aefda9fab8ae95ee1d42806a838474589cafe2a477", + "bytes": 5815, + "sha256": "7e6c443c2333c6f6f5c468f255bff23b41b6d3a967fa216d96d577a7e9cdff3c", "guid": "66065b7308b742c4d9f9091a5ee3dee3", "metaSha256": "fbb526f0736e1e9a0863f50093a8b0323ae647bb6d10b81cfcfc2289eef1bfe7", "stageId": 3, @@ -1185,8 +1185,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage04.asset", - "bytes": 5867, - "sha256": "525117ca54e7c0039230ba09af053753b832be1ce6814f4242136ded7607a15f", + "bytes": 5853, + "sha256": "1b9e29137db701ba5f17575e9c1b9ea656a40edc5533c56edb697f6efca26ed3", "guid": "6a2de368c8604fd4191c1b74b33869d7", "metaSha256": "1bf89aa74b745936305791de5ffefdcfef3dee678e6a15506dd6a3284444db4e", "stageId": 4, @@ -1195,8 +1195,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage05.asset", - "bytes": 5904, - "sha256": "029a967e2102cea5d8778dd70d5ac04689ac83a651ab8b3aa1be4fdcabc302c1", + "bytes": 5890, + "sha256": "a59cae2495cd315778a579bc203a744de75eabeea20767785eb043122ed7c66a", "guid": "ac4be589f907bce4e87e19928a441c6e", "metaSha256": "dce6799d114e5f82ddeb662a632db10b145e177600a3475efd049d116d54e245", "stageId": 5, @@ -1205,8 +1205,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage06.asset", - "bytes": 5800, - "sha256": "73cfcfdc816328a88e2a8cbf94798d5a43680dcbdda9c35bf1e424f2e8ac5ac1", + "bytes": 5786, + "sha256": "34714ec0ca5e316d7edb2e444647478240fbeee65d598f024d6703ee3ce2bafd", "guid": "6e1df3aeda3cea54b8441c528e7f503a", "metaSha256": "81b5cc34fa2e14288468f6d524ff5423f29cdf453af1a6860f8b92fafdfabeae", "stageId": 6, @@ -1215,8 +1215,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage07.asset", - "bytes": 5833, - "sha256": "79ee3a7856e8a60e0b5edec3281afa1493be110a732ed760400eee232f09e6c1", + "bytes": 5819, + "sha256": "b9c9455e7019f6b55ba601377d9ad9c8dee867f0c4a9b08859b762e6f6c646e7", "guid": "d0f7075e9688d034ea03d349d4cc8784", "metaSha256": "12ec2ae9d4b3cd4ebdc72f422da385208e994ab0542422c03f29b58eed6b8da4", "stageId": 7, @@ -1225,8 +1225,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage08.asset", - "bytes": 5857, - "sha256": "c70df851ff7b549020524ebd615199d62fe60a3c8d445012f71a6d547f23f7c1", + "bytes": 5843, + "sha256": "1c41c3f8d46796e5ba4971f0b710e98222efa4f91998ce481e1b063d0fb1ad80", "guid": "a07d44f7ce9eef745951ed1ed7f53bc7", "metaSha256": "fa7787c13df551525c7a247b0913bd0edc3f9d302a8b1c61aeaa9b7ff4b215b4", "stageId": 8, @@ -1235,8 +1235,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage09.asset", - "bytes": 5888, - "sha256": "fd52bfd939c41bfe3ee88448fb02f7ee83017fae3d27fb2537a233bb54bbc5db", + "bytes": 5874, + "sha256": "b7f416e5ced4eb07fb1a5def82f67c08e4c5757ce7b7f22f286ebe0d65b2f4ac", "guid": "98e972adb6f5ec0478502ab7120e4582", "metaSha256": "290ea5f8135079a754f9441b7db5a844f96a3880fa160dfdd029cabdfe6699d9", "stageId": 9, @@ -1245,8 +1245,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage10.asset", - "bytes": 5801, - "sha256": "d4c75ac5e037a0f0e70914d7eb09c4b4141ea8a9eb069c69a5a7c4b08cd302a0", + "bytes": 5787, + "sha256": "278b367d55ee66ef3e5ce9085c61adc80406470b6315665d7c2724955a988b44", "guid": "65683957e8f990649a840e8648fd470a", "metaSha256": "667f87d6f986a344e3bdbb38806a9092b03313153d36512535451cc413183102", "stageId": 10, @@ -1255,8 +1255,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage11.asset", - "bytes": 5827, - "sha256": "3cd21a98bc9bb07cca4a0f254f463f81a8e9890793d94304c292efaa1a4d096c", + "bytes": 5813, + "sha256": "0964e1fbd9c08fc109471f49b7cf5ef637bb267e793d78934f1d5d17e2896e1f", "guid": "ca130f17dc450314081a99b4180609aa", "metaSha256": "d96ec6ce25ca5936703f3796d2d5fa946b0014a5b48a0b1d8f624cdc019ff486", "stageId": 11, @@ -1265,8 +1265,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage12.asset", - "bytes": 5861, - "sha256": "09e489d7a2338ea9a2f9137cad5c9e9bf86d9ecd482b0c72adef71e86b4bea77", + "bytes": 5847, + "sha256": "10e7fb5445c8a66d43d5b1a04bc78f8e3f25aa6f8b18ba92ac6ec17599482376", "guid": "37e7935b2b07c124ebbdc75cbb82e0b7", "metaSha256": "6b07067267abb134f1f2547ded3b5ecdad3a75a95e391aab4b08ef55983003ba", "stageId": 12, @@ -1275,8 +1275,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage13.asset", - "bytes": 5878, - "sha256": "86f8c67022969f34f43e2a34ad05aafc85a6657f80566682ecbc4c9554e94a2d", + "bytes": 5864, + "sha256": "b53571cb593ecfd5295bf74469ff67d01daf4a41a6acd96b7c89eb4b86c43ca7", "guid": "dbf1622f4b4222649a87dd7c4828148c", "metaSha256": "2b3abc72f2011fa59d9c4a0779ad6226dcc0120519b1e14ba3be4f8d7aa03093", "stageId": 13, @@ -1285,8 +1285,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage14.asset", - "bytes": 5861, - "sha256": "b4d3e70fa92a627c943588aa121e23dcfbd1bf57817657bd85f588af957f8321", + "bytes": 5847, + "sha256": "86d73766d0c9efd44835c8932a4c85380dde6dd99ea0690260002f985f855f79", "guid": "a8fae6d8bb4a24246b5cfc1e89d7075f", "metaSha256": "18204258707d0bc2b083c4fa8e73fec77a603e7a50d804ec318f4c220eb11710", "stageId": 14, @@ -1295,8 +1295,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage15.asset", - "bytes": 5908, - "sha256": "378a86f30a4365055f1ae8b7fa8cd117a21e25906c84218543b301b19a81b5a9", + "bytes": 5894, + "sha256": "33d84866506155b303a6f8f2628765ecfcc557cdc542cb1b7e8eac72cb0caeb2", "guid": "dfc0f57aca6d32048a02667c76874c8f", "metaSha256": "145360f4018881ca8724b752a8f2024005f64064bd4bb142dc57e07e038a2b1a", "stageId": 15, @@ -1305,8 +1305,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage16.asset", - "bytes": 5945, - "sha256": "5597096ff8284cb3d966a8986f6e1950dbe1d514701c30b20a01341b21b3c453", + "bytes": 5931, + "sha256": "d47768874bc9cb40e61c01732bda9cedb8b1f7e4964456ef28e7ae26ef82d149", "guid": "fb3433f6cc6d71f4ba326cc1b23248f4", "metaSha256": "87a0aeb1f8f50b2dc2137e7ce8c45fab93e741cb66e97b10ad8833a40077d2d9", "stageId": 16, @@ -1315,8 +1315,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage17.asset", - "bytes": 5984, - "sha256": "71ce054bfc2cfd941edadf704e38cc3c0806711123bdc176e5eb8bdeefa56d85", + "bytes": 5970, + "sha256": "08221f44534e74aa0443300d55e9ee3b7598dcaab85740b1f12ed551ca0e9870", "guid": "68221563ba0258e46aeff64acf18075b", "metaSha256": "f2cde45482d15f85beecde6e1ef37a17c4b32fd3d44d7fa09cdb48e298bc422d", "stageId": 17, @@ -1325,8 +1325,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage18.asset", - "bytes": 6022, - "sha256": "d598c0866264e38cbde194e5b278a491179676827bdf51b50618d02cdaaa0d6b", + "bytes": 6008, + "sha256": "0a0d3579c847152d2e27661efb1be5a21a1169f2f97a233a1bb1fab11b1f9edf", "guid": "39fd3c1246019a84cb898427f1b2f9d0", "metaSha256": "f8126d37d854fffda38b12d036218c78855ac2ea895460f879e9b0ddd7819da1", "stageId": 18, @@ -1335,8 +1335,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage19.asset", - "bytes": 6060, - "sha256": "6afdc6b32418d5b2966cd729e0c7c13ee0f8d2d595fee1aed49ddc2c9904e4d0", + "bytes": 6046, + "sha256": "a62f68ec09afefd955512b0cb0980cc88c8a156c4e2c268d5b0afcf9960f9aba", "guid": "5a704a7842fb71449affe1eb9694f30f", "metaSha256": "d2204076f08b08a6d8c173c7af67d2dfe142c2a048fd8fcb3cacbc17bea8ff8b", "stageId": 19, @@ -1345,8 +1345,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage20.asset", - "bytes": 6097, - "sha256": "82ea7b39cda58baa5d67e7e4cc5fc6da674e34bd8af1a14a6ae0e40abbac3b70", + "bytes": 6083, + "sha256": "4eb14a4688865f69278081f3ffeaac55e516f85499677da4cf88b1aed6b9a6e7", "guid": "08530afd1fbf53441a1283aa485994e4", "metaSha256": "eef5da97f2f010db711b0fbdd7e68864343d5cd41de8809ff4b0d61c3e2f45fe", "stageId": 20, @@ -1355,8 +1355,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage21.asset", - "bytes": 5919, - "sha256": "86c1e1f13ab090fa10610da9a744add8e9d0851552261af25a656f5df8f85c88", + "bytes": 5905, + "sha256": "6938a62609d9a237f70ae964f421ee0d193cac9241b3e1504bb066c8732ec445", "guid": "55fa76a23394b824089c062025ddfb4f", "metaSha256": "397ce3a027feee2145e77951099bb9b920e440a619815036b693a43f80104bb4", "stageId": 21, @@ -1365,8 +1365,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage22.asset", - "bytes": 5953, - "sha256": "350d0f2da7fa5ac8b12e3ce4c8c2c36575e608fa47228562e3e4aabdfae31cfa", + "bytes": 5939, + "sha256": "92158e2629b6a672ff4bb099b2a5cfeb5946ec6fb381ee0eba7b261c0596d4c5", "guid": "d63b5e31b7726f045a708205e5f22ab1", "metaSha256": "5b7467670a320b3b916c034f167d5726f9ec1b2c6abe3f22250a7138907124ab", "stageId": 22, @@ -1375,8 +1375,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage23.asset", - "bytes": 5990, - "sha256": "77ac571aff63ecc0a420c7d7431eb8e2ea1e2b1053d1382571e0f151de80b66e", + "bytes": 5976, + "sha256": "df516dd3f1f892a9a8ccb34406a6f97aec49dc0c47ea4f81bbc3b49d68168c1f", "guid": "44a130b124d49574696f87dc03e01f25", "metaSha256": "57761e15155453551024afb329aefd26f9743fbda9f8c4c0dfc30542aa4bbe58", "stageId": 23, @@ -1385,8 +1385,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage24.asset", - "bytes": 6029, - "sha256": "1404a2a7c5846f72a82c70e38b234d637688b0fac5b83fa969727b993bf38b13", + "bytes": 6015, + "sha256": "a8890656be3667008638fbe123c48730b84dd72ce6de95999115c497db5c8d41", "guid": "6cd35b0693a3e0547a8961243f6d6d84", "metaSha256": "5d6a6e2aa5c779ec46656bcd4895ef4c6849b657e34ba666b1cfbcf260f44615", "stageId": 24, @@ -1395,8 +1395,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage25.asset", - "bytes": 5915, - "sha256": "d7721566c6da52559f927e8f1e36641572cb38dd195d2ec00e0fde26f3f95dfa", + "bytes": 5901, + "sha256": "3f8fb5215e4482775c541152259dde5954839e97baf8e0f9d1d4a42b7b3edaf8", "guid": "c6adc178ad8bd44429bd88a765db77e1", "metaSha256": "6614ddd6e162508445a38ae49e8b14ac6c9b686be3a44ea42f24cd2913554dc4", "stageId": 25, @@ -1405,8 +1405,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage26.asset", - "bytes": 5928, - "sha256": "344707de48b3ed12a46e7cd4329572269f381383bdb83df05830fbae8efa32d7", + "bytes": 5914, + "sha256": "ee79f10f90541b3c09c0d77505ad22563e68b9c34ecefb40e51cb19b9b24074c", "guid": "a6b06e5cdc96e0943b79d05b9f9cec84", "metaSha256": "29e80e3ae35acdd5ea865fa4f39fdcd2974c460d02084b327abe3332826a85ea", "stageId": 26, @@ -1415,8 +1415,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage27.asset", - "bytes": 5979, - "sha256": "e84d5f2a29381a42d9e4a88b9a7ff5d902ae1f84c841edee2fa8a02819bd283f", + "bytes": 5965, + "sha256": "961352724367a97a6ea8dc9b8140ceac899bd5c7d5bc31698824f75effb59be5", "guid": "ca3d420d661ba9c4aba358fed934929f", "metaSha256": "025fc99567d27b618db5c7c292afac980db4ed14626a62cfa94f685e66e0839a", "stageId": 27, @@ -1425,8 +1425,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage28.asset", - "bytes": 6025, - "sha256": "49aab8034369966c2f27c08b67b997bf1623e812df8997dc18a8ea4909515b53", + "bytes": 6011, + "sha256": "52982c99e086fccbe0be0f01e840a516b2aa49624c7503d811d795ded7d18629", "guid": "e198d287ba9b836428f6b1b997d47ac0", "metaSha256": "2bfca1e2842f0ecb24ee94966228058e23729b0709e7755e7c7752bb5eaaea89", "stageId": 28, @@ -1435,8 +1435,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage29.asset", - "bytes": 5982, - "sha256": "85673f2ccaf2c79a53f03462931de43e46f5f83c2efeaece2cba5f12e5a10f07", + "bytes": 5968, + "sha256": "97caee1b10d1aa68a277e60958dabf2ad97f8972881be02df105cc44aac7e328", "guid": "6e96aade2a7d5c6479128a895b9a7d39", "metaSha256": "3414f5ce22d691417e16217f7d8881f100b966489443a8ec2f48a08acb26f234", "stageId": 29, @@ -1445,8 +1445,8 @@ }, { "path": "Assets/MagnetismHeroes/UnityRuntime/StageAssets/Stage30.asset", - "bytes": 6059, - "sha256": "5ef9d89c5c917287e5be6a5d1affef97d15e561064f18ed4112c5e3dc1e1e594", + "bytes": 6045, + "sha256": "8502c776806f71e119836a6897701c829346d2abad6d3825d5a218db3fd3d279", "guid": "c4d92b82bdf21af4a8e4e66e5723d62c", "metaSha256": "7135b990186907960b62c20cb41c11a7ae881c12adace71995bf29d3b4d44529", "stageId": 30, @@ -1465,7 +1465,7 @@ "verification": { "finalCompletion": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/completion.json", - "sha256": "587b92a7f4f63986bfa32af647bc184745b5b100deeed2b0ca4b7818ac309414" + "sha256": "dd898f331a31fb49545e9c3ee2d1c5b52adca97d907f5cff1b0c21b1e6d429fd" }, "editorCaptureDirectory": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture", "previousGameReview": { @@ -1478,59 +1478,86 @@ { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-soft-shadow.json", - "sha256": "3b09516098a73d3fb76c7992feaf0123b206472458dacb718f4f21aeef58a1e0" + "sha256": "68ec9ed734cbd5919f30f708a4062d01084b7d54872f23ac7b3a904150e2af12" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-soft-shadow.png", - "sha256": "3cbe3c75bc6e864a2abf4a4275ca2aafb6f8ad61db8a09a4b7568053ea2e3902" + "sha256": "abced35a2047a504dce2d0322cc31f87f68ed88bb9d530c4bf658970d65d166b" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:03.7926755Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:42.2101736Z", "width": 1280, "height": 720, "balls": 1, "groups": 1, "equipmentAssemblies": 1, "boardOrigin": "Actual Main daylight with soft shadows", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 50, + "triangles": 91970, + "sharedMaterials": 27, + "textureMemory": 86683169, + "allocatedMemory": 460169970, + "editorCameraRenderMilliseconds": 1.1468000411987305, + "fieldOfView": 62.0 + } }, { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-soft-shadow.json", - "sha256": "43ec85a330d87af485051023ccb75752e1699ac7a9f02da3968577217c6957b3" + "sha256": "7480b58de0a332c30da016739d1c4a6d939f0886e999ae78f935df240667e6e8" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-soft-shadow.png", - "sha256": "6c1433aa7ddb80f7f08f6477e6254023a8b57ce18168b7a018a65f815fcb722c" + "sha256": "d3a656195a308feb9e6296b9425a1057c790d4391a92315c611600ee71fa9826" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:04.0908702Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:42.3114855Z", "width": 1280, "height": 720, "balls": 3, "groups": 1, "equipmentAssemblies": 1, "boardOrigin": "Actual Main daylight with soft shadows", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 52, + "triangles": 104900, + "sharedMaterials": 28, + "textureMemory": 86683169, + "allocatedMemory": 460286942, + "editorCameraRenderMilliseconds": 1.1657999753952026, + "fieldOfView": 62.0 + } }, { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-soft-shadow.json", - "sha256": "b3f0c277da8218d26854e42f92b64a8d4a82cf5329992cea4c8adf8da470deb1" + "sha256": "6a15bcc8a72db2d26e1c800aed8f38da4237413d7c133813a87109483cbedda7" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-soft-shadow.png", - "sha256": "a3688b2458fd8551f9b847a78b4f348e70dd7296d85be2437805aee6b8c1314d" + "sha256": "126d329c7de8619711568f7fd79bcabc4b19b8d2ee75a5c5cd9b77bae4710c5d" }, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "utc": "2026-10-08T15:25:04.1905928Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "utc": "2026-10-08T16:57:42.4126258Z", "width": 1280, "height": 720, "balls": 6, "groups": 2, "equipmentAssemblies": 2, "boardOrigin": "Actual Main daylight with soft shadows", - "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다." + "scope": "실제 Main PlayMode 렌더링의 모의 viewport이다. Android 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", + "resourceMetrics": { + "meshInstances": 78, + "triangles": 112532, + "sharedMaterials": 23, + "textureMemory": 86683169, + "allocatedMemory": 460479941, + "editorCameraRenderMilliseconds": 1.020400047302246, + "fieldOfView": 62.0 + } } ], "modelRoundtripEvidence": { @@ -1539,10 +1566,10 @@ }, "finalEvidenceAudit": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/documentation-final-evidence-audit.json", - "sha256": "778be655b03b0e159dfdc981be368802b39e2c25cc34e54d24761cba0dd3701e" + "sha256": "14e62264a22f360f9afda94e1c8660507cda3b27c30d6f9916607889c2819e08" }, "actualFinalResults": { - "productSourceCommit": "83182e7f3e86926bf130817d401a331829401fac", + "productSourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", "phaseExitCodes": { "EditMode": 0, "PlayMode": 0, @@ -1551,7 +1578,7 @@ }, "editorTests": { "EditMode": 103, - "PlayMode": 52 + "PlayMode": 53 }, "androidChecks": 226, "children": [ @@ -1559,40 +1586,41 @@ "suite": "Fresh30", "checks": 151, "exitCode": 0, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "apkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "apkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "Fresh 30-stage sequential actual touch progression, no save writes or completion fixtures; separate boundary suites are labelled separately" }, { "suite": "FinalBoundary", "checks": 37, "exitCode": 0, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "apkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "apkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "Separate native boundaries after real30 completion; deliberate corrupt-file tests labelled, no fabricated completion or board injection" }, { "suite": "RapidBoundary", "checks": 39, "exitCode": 0, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "apkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "apkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "Separate QA planar collected10 replay20 fixture; real30 source record preserved. Actual offline native11 taps and complete numeric PCM; not fresh progression evidence." }, { "suite": "ContentBoundary", "checks": 69, "exitCode": 0, - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "apkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "apkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "별도 명시 경계 검사. 정상 30단계 진행 수에 합산하지 않는다." } ], - "smokeStartedUtc": "2026-10-08T15:31:53.7694461Z", - "smokeFinishedUtc": "2026-10-08T15:47:20.6303343Z", + "smokeStartedUtc": "2026-10-08T17:04:22.9959710Z", + "smokeFinishedUtc": "2026-10-08T17:19:58.4677196Z", + "completedUtc": "2026-10-08T17:19:58.7340281Z", "androidReport": { "path": "artifacts/verification/Final/android-final-evidence.json", - "sha256": "070b33c70925eabebf33c66dfd08daa902ddffaa6591e052c765d7884e22ba8b" + "sha256": "18ec499dd9d30cd0a00df16012e8e8021e0cbf77a97089611a3954ed5c00aa7b" }, "freshAll30SuccessAndIdsChecked": true, "freshSavePushCommandCount": 0, @@ -1600,34 +1628,36 @@ { "phase": "AndroidSmoke", "command": "pwsh -NoProfile -File tools/verify.ps1 -Phase AndroidSmoke -Milestone Final", - "startedUtc": "2026-10-08T15:26:38.5225191Z", - "finishedUtc": "2026-10-08T15:30:38.1167761Z", + "startedUtc": "2026-10-08T16:58:49.3785491Z", + "finishedUtc": "2026-10-08T17:00:52.0393312Z", "exitCode": 1, "status": "failed", - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", "sourceDirty": false, "sourceDirtyEnd": null, - "outerLog": "artifacts/verification/VisualUpgrade/FinalProduct/FailedAndroidAttempt1/androidsmoke-outer.log", - "evidence": "artifacts/verification/VisualUpgrade/FinalProduct/FailedAndroidAttempt1/Final/androidsmoke-evidence.json", - "originalEvidencePath": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\Final\\androidsmoke-evidence.json", - "originalOuterLogPath": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\VisualUpgrade\\FinalProduct\\androidsmoke-outer.log" + "outerLog": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\VisualUpgrade\\HorizonFailedSmokeAttempt1\\artifacts\\verification\\VisualUpgrade\\FinalProduct\\androidsmoke-outer.log", + "evidence": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\VisualUpgrade\\HorizonFailedSmokeAttempt1\\artifacts\\verification\\Final\\androidsmoke-evidence.json", + "evidenceOriginalPath": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\Final\\androidsmoke-evidence.json", + "outerLogOriginalPath": "C:\\git\\MagnetismHeroes\\artifacts\\verification\\VisualUpgrade\\FinalProduct\\androidsmoke-outer.log" } - ] + ], + "firstThreePhasesRerun": false, + "productRawFilesPreserved": 732 }, "apkProvenance": { "apk": { "path": "artifacts/android/MagnetismHeroes.apk", - "sha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "sha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "bytes": 57215937 }, "installedApk": { "path": "artifacts/verification/Final/Fresh30/installed-base.apk", - "sha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea" + "sha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829" }, "actualClipCount": 44, "voicePayload": { "path": "artifacts/verification/Final/VoicePayload/apk-voice-payload.json", - "sha256": "e89d1987d515ab958cc411f299297ccbea9c1a4f4b62c7886d6d7bc17be2a620" + "sha256": "a3c1fc9e0ef0170b3fcb60170ae4ca5b9ec640b644fd1f2b00fea591bdc28650" }, "notices": [ { @@ -1649,49 +1679,414 @@ "stage": 1, "image": { "path": "artifacts/verification/Final/Fresh30/stage-1-enter.png", - "sha256": "6eee00ef4b430cb0ad9c697ca24d5ac4fe8de3630f14488e74fe78c25c87a301" + "sha256": "24a1fee6f57ed238976dde803184895fbe4900e3ed218fc3064c9743ef9c7e63" }, "captureCommands": { "path": "artifacts/verification/Final/Fresh30/stage-1-enter-commands.json", - "sha256": "465c74bd14cb7cef440efd1e9007adb5f0626b4824fdd780cf8c637a0d6c07f5" + "sha256": "331258895e501db85925861d7b2211c42896b58c1169fcb24b748f832c8feaba" }, - "observedUtc": "2026-10-08T15:32:22.2063877Z", - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "installedApkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "observedUtc": "2026-10-08T17:04:51.8507959Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "installedApkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "실제 Android API37 AVD 2400×1080 화면. 정상 30단계 실제 입력의 한 시점이며 모든 얼굴의 동시 가시성을 보장하지 않는다." }, { "stage": 11, "image": { "path": "artifacts/verification/Final/Fresh30/stage-10-next.png", - "sha256": "4e64e2ed5706d4571ac43fad55616a457caea934c596a12d437195b13903e905" + "sha256": "a17e8540e959fcad55fcde48ccee3654999647e59f7e245839e3872108776fc9" }, "captureCommands": { "path": "artifacts/verification/Final/Fresh30/stage-10-next-commands.json", - "sha256": "b447368b273e8213a3644a1c4afb201597ba884c623d443190d18bbcfb686af5" + "sha256": "b9794ef9c33aab6b7f6379458701b3a89d075fce688517b222cfaf2ba79ff2a5" }, - "observedUtc": "2026-10-08T15:34:51.7253665Z", - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "installedApkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "observedUtc": "2026-10-08T17:07:23.9081359Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "installedApkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "실제 Android API37 AVD 2400×1080 화면. 정상 30단계 실제 입력의 한 시점이며 모든 얼굴의 동시 가시성을 보장하지 않는다." }, { "stage": 21, "image": { "path": "artifacts/verification/Final/Fresh30/stage-20-next.png", - "sha256": "030ca33f9f11da310c2ead3a78b61306eee195a162cec1b8f32c5fda009328ef" + "sha256": "79cf0d0bef7671ebc92c2d1cf1f9b557633f7832425b6fc01809944ea8b0b3b3" }, "captureCommands": { "path": "artifacts/verification/Final/Fresh30/stage-20-next-commands.json", - "sha256": "4d21313b8c846e97effc65c1bddc94de87c7ab454d94512b2b8f0e56f41b4255" + "sha256": "762d84fdeb5cc822f24be5256cb30a26501516dfd73f4a32d1182283cf910528" }, - "observedUtc": "2026-10-08T15:39:44.5484050Z", - "sourceCommit": "83182e7f3e86926bf130817d401a331829401fac", - "installedApkSha256": "bee8e80e03c4205edebf616a18940d58654e9115fdc91ee0a80f47dea91559ea", + "observedUtc": "2026-10-08T17:12:18.2030067Z", + "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "installedApkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "실제 Android API37 AVD 2400×1080 화면. 정상 30단계 실제 입력의 한 시점이며 모든 얼굴의 동시 가시성을 보장하지 않는다." } ], - "newFinalProductUserApproval": "별도 최종 사용자 승인 대기이며 모델 승인과 구분한다." + "newFinalProductUserApproval": "별도 최종 사용자 승인 대기이며 모델 승인과 구분한다.", + "editorCaptureCount": 119, + "editorResourceMeasurements": [ + { + "theme": "Garden", + "balls": 10, + "groups": 1, + "equipmentAssemblies": 1, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 59, + "max": 59 + }, + "triangles": { + "min": 127684, + "max": 127684 + }, + "sharedMaterials": { + "min": 27, + "max": 27 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 463947314, + "max": 466923575 + }, + "editorCameraRenderMilliseconds": { + "min": 1.0715999603271484, + "max": 1.3295999765396118 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-phone-default.json", + "sha256": "6d70d89d9fbc4cf1aab09c528b26d05e7b32f4f5f3f72b9e5ae3772cd7f7d427" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-phone-orbitzoom.json", + "sha256": "158540fdd6f861ba4c77a02b5ddc3c380b57e261c80fa21d86a8a103e8596c69" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-tablet-default.json", + "sha256": "305960074b579817f17aa4a44e0a2ef58c90bae56e12913d7b85acabb689170a" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-tablet-orbitzoom.json", + "sha256": "5b2ee1a0781273ffa00ac07d21af32df4c410e01c81b48d282edcd3f70a7b8e2" + } + ] + }, + { + "theme": "Garden", + "balls": 10, + "groups": 10, + "equipmentAssemblies": 10, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 266, + "max": 266 + }, + "triangles": { + "min": 232874, + "max": 232874 + }, + "sharedMaterials": { + "min": 27, + "max": 27 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 464729023, + "max": 467705860 + }, + "editorCameraRenderMilliseconds": { + "min": 1.0825999975204468, + "max": 2.098900079727173 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-phone-default.json", + "sha256": "28bf53b56db30cf861e115aee1e6f03ab3d59725a0e4ea8748a71fd8cad3d011" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-phone-orbitzoom.json", + "sha256": "0ac5ad59d78ed82acaf212a574c668fd579f4583a3e9a6df24675768808ef867" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-tablet-default.json", + "sha256": "164d0ea6b3bc8051f05fd32794128dd37efecb8792a6e7fc57d3c995ae97629e" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-tablet-orbitzoom.json", + "sha256": "0f1ffda5331a68223a33deccf94d946e9f38116667d696fa362e16de64f7c7e1" + } + ] + }, + { + "theme": "Cloud", + "balls": 10, + "groups": 1, + "equipmentAssemblies": 1, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 59, + "max": 59 + }, + "triangles": { + "min": 132678, + "max": 132678 + }, + "sharedMaterials": { + "min": 28, + "max": 28 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 464024251, + "max": 467000560 + }, + "editorCameraRenderMilliseconds": { + "min": 0.9860000014305115, + "max": 1.3367999792099 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-one-group-phone-default.json", + "sha256": "84933bc2e667cb4f301e4dbd318b6b1a87733f41776402fafe562b6609d023bb" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-one-group-phone-orbitzoom.json", + "sha256": "8862fa8b8f8b705ed487016eff867f7eecbfc04d3fb0c0a4b3375bdf034a482c" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-one-group-tablet-default.json", + "sha256": "70b5abf41586fc9ca5dce7727b0fb311fdae7c210e46894104e63fe81505c75a" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-one-group-tablet-orbitzoom.json", + "sha256": "e8fa86a3a066e0d4c98b9b4a183dff0eaff97c5876f397b9906078a3c5043570" + } + ] + }, + { + "theme": "Cloud", + "balls": 10, + "groups": 10, + "equipmentAssemblies": 10, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 266, + "max": 266 + }, + "triangles": { + "min": 237868, + "max": 237868 + }, + "sharedMaterials": { + "min": 28, + "max": 28 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 464923569, + "max": 467899912 + }, + "editorCameraRenderMilliseconds": { + "min": 1.167099952697754, + "max": 1.2316999435424805 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-single-groups-phone-default.json", + "sha256": "5f6009a4bb941297aefd1ee1cf19392a3c402053903ff88e564137f27620e02b" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-single-groups-phone-orbitzoom.json", + "sha256": "a95c1cc7398392d033f601fc44358908b1ea284e7accfa1aab30726c54874b00" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-single-groups-tablet-default.json", + "sha256": "1df140d8544a772014844eb30709b140161307ff415a811580ec91b0eb06b5ab" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-ten-single-groups-tablet-orbitzoom.json", + "sha256": "240d03e44df9ac90593bd3426efe71b2d88bf9acaad7b5827e2c20acd159272b" + } + ] + }, + { + "theme": "Workshop", + "balls": 10, + "groups": 1, + "equipmentAssemblies": 1, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 59, + "max": 59 + }, + "triangles": { + "min": 116718, + "max": 116718 + }, + "sharedMaterials": { + "min": 23, + "max": 23 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 464029688, + "max": 467005957 + }, + "editorCameraRenderMilliseconds": { + "min": 1.0276999473571777, + "max": 1.3801000118255615 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-one-group-phone-default.json", + "sha256": "79ea5335bc5994c96c39684cb5348b3dc5e1a5beb3bc7dc25051cc34f7e56ff2" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-one-group-phone-orbitzoom.json", + "sha256": "993a189c0d55d784651ccc3307518afda4b9f7c1ba16af5973562038d37bcc1a" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-one-group-tablet-default.json", + "sha256": "524e973c387d0c045c756964e8514f3f83863c5d2833917e6e6db07686396fad" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-one-group-tablet-orbitzoom.json", + "sha256": "7c1a25bf41784b9d629201cbb83f582546fb2d470be382fb386be553af8bdd89" + } + ] + }, + { + "theme": "Workshop", + "balls": 10, + "groups": 10, + "equipmentAssemblies": 10, + "captureCount": 4, + "metrics": { + "meshInstances": { + "min": 266, + "max": 266 + }, + "triangles": { + "min": 221908, + "max": 221908 + }, + "sharedMaterials": { + "min": 23, + "max": 23 + }, + "textureMemory": { + "min": 99572769, + "max": 118420769 + }, + "allocatedMemory": { + "min": 464961384, + "max": 467942131 + }, + "editorCameraRenderMilliseconds": { + "min": 1.2496000528335571, + "max": 1.4726999998092651 + } + }, + "captures": [ + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-single-groups-phone-default.json", + "sha256": "db7b08da12c389326ea10de4c85ab784f33de73532c6fababcb18dced60168be" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-single-groups-phone-orbitzoom.json", + "sha256": "035b8464064c3a6bcff2d6ddb44a5e83ac9cf6ce69e4f39db1792b385cbb2a24" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-single-groups-tablet-default.json", + "sha256": "412293e68377787fae33333cd7db6af8a3f9bf7764f0eab509046df98d907a00" + }, + { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-ten-single-groups-tablet-orbitzoom.json", + "sha256": "834963a98cce4483bb9b5236968178ce52417e3e1c12d2227dec0d0927b5f161" + } + ] + } + ], + "editorResourceScope": "active hierarchy 상주 MeshFilter 인덱스 합계에는 Renderer가 꺼진 원래 바닥도 포함한다. GPU 제출 삼각형 수가 아니다. 전체 Editor-loaded texture 메모리/치수와 Camera.Render CPU wall time이며 Android FPS·GPU·실기기 비용으로 환산하지 않는다.", + "editorLoadedTextures": { + "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/editor-loaded-textures.txt", + "sha256": "d60f414fbb4753a288291d3efd8bf0de6e0d454fd6436bf2604d6ce584c31a54" + }, + "horizonFix": { + "commands.json": { + "path": "artifacts/verification/VisualUpgrade/HorizonFix/commands.json", + "sha256": "30aa2370d563444fb5354fd7aad6e4c996baa2d2bbfd5c67499931a314deea5e" + }, + "result.json": { + "path": "artifacts/verification/VisualUpgrade/HorizonFix/result.json", + "sha256": "d3b70ae81c29b15582fe77b0c9c6636432c62f68606d39faff1da8d48da2f7a4" + }, + "preservation.json": { + "path": "artifacts/verification/VisualUpgrade/HorizonFix/preservation.json", + "sha256": "cbab404eef5524a053cfca09be50a579f6bae858cfab78dc3dfdc6e2501ddb34" + }, + "geometryProofScope": "중앙 24m 복도 표본의 366→6→세 풍경 각각 0 및 실제 같은 카메라 화면 대조이며 전체 외곽·모든 픽셀·모든 시점을 보장하지 않는다.", + "farHorizonPositionsChanged": 120, + "previousRadius": 35, + "currentRadius": 27, + "approvedGeometryMaterialsUnchanged": true + }, + "previousFinalProduct": { + "manifest": { + "path": "artifacts/verification/VisualUpgrade/BeforeHorizonFix/manifest.json", + "sha256": "e717944ae93ca5ff5744c64968e66449bd3680022a301fa73e2b34df82bd6950" + }, + "productSourceCommit": "83182e7f3e86926bf130817d401a331829401fac", + "fileCount": 2311, + "previousAdoptionGitRecord": { + "commit": "3346eb559bdfba24332feb4d9be4b7104520233e", + "repositoryRelativePath": "SourceAssets/Models/Meadow/active-adoption.json", + "canonicalBlobSha256": "1642da692b5ddb538da250005152dcf33cf25ccb2de4be28c31c1fe93e4dd386" + }, + "scope": "원경 보정 전 성공 검증·APK·갤러리의 고정 이력이며 새 결과가 아니다." + }, + "failedAttemptArchive": { + "manifest": { + "path": "artifacts/verification/VisualUpgrade/HorizonFailedSmokeAttempt1/manifest.json", + "sha256": "e1a94d7e0480bdafe551a017ef7b6f696f9cd12c301d2cfc84e67e6731246592" + }, + "evidence": { + "path": "artifacts/verification/VisualUpgrade/HorizonFailedSmokeAttempt1/artifacts/verification/Final/androidsmoke-evidence.json", + "sha256": "08cba6e1754b552d8089c2092f14708fe3c413ae8b69b7ff0b4e8189883dca13" + }, + "outerLog": { + "path": "artifacts/verification/VisualUpgrade/HorizonFailedSmokeAttempt1/artifacts/verification/VisualUpgrade/FinalProduct/androidsmoke-outer.log", + "sha256": "919133a40d047d00471f0414ed83c1141260f77c564d59dc1c27c0c06a8ede2d" + }, + "fileCount": 1257, + "status": "failed", + "exitCode": 1, + "observedFailure": "Fresh30 stage5 ADB shell wm size의 localhost:5037 연결 timeout 10060. 이후 같은 query 종료 0 확인 후 Smoke만 재실행했다. AVD 충돌·게임 판정 실패로 단정하지 않는다." + } }, "preservation": "기존 13 FBX·원본·출처, 기존 GUID, 30 비시각 정의·초기 구 위치·ID·수량, 음성 44개·얼굴 6표정·폰트·UI·Mixer·Core·저장을 유지한다.", "fileHashScope": "실제 최종 빌드 저장소 파일 바이트이며 Git 체크아웃의 줄바꿈 차이와 구분한다.", diff --git a/docs/asset-register.md b/docs/asset-register.md index 0c54d57..1e9fff4 100644 --- a/docs/asset-register.md +++ b/docs/asset-register.md @@ -66,4 +66,6 @@ Editor RT 캡처는 Camera.Render와 임시 ScreenSpaceCamera Canvas/안전영 원본 `PlaygroundProps.blend`·기존 13 FBX·과거 출처 기록을 보존한다. 새 원본의 후보 provenance도 당시 검수 상태의 고정 이력으로 유지하고, 실제 채택은 [영웅 채택 기록](../SourceAssets/Models/Heroes/active-adoption.json)과 [자연 배경 채택 기록](../SourceAssets/Models/Meadow/active-adoption.json)에 별도로 연결한다. 새 Unity 재질은 31개(영웅 6·배경 25)다. 30개 스테이지의 초기 구 ID·수량·배치·위치·목표·종류 등 비시각 필드, 기존 GUID, 44개 음성·6표정 atlas·폰트·UI·Mixer·Core·저장 형식을 바꾸지 않았다. -제품 소스 `83182e7f3e86926bf130817d401a331829401fac`의 실제 최종 결과는 EditMode 103/103·PlayMode 52/52·Android 226/226이며 네 명령 종료는 모두 0이다. 실행·APK 대응 원문은 `artifacts/verification/VisualUpgrade/FinalProduct/completion.json`이다. 기존 카메라의 yaw 210도·pitch −45도·거리 15에서는 넓어진 지면 뒷면이 보드를 더 많이 가리며 실제 대조는 `FinalProduct/EditorCapture/belowground-raycast-comparison.txt`에 있다. Editor의 스마트폰·태블릿 비율 렌더링과 실제 Android AVD 화면을 구분하며 실기기 성능·아이 대상 사용성·iOS·스토어 게시를 완료로 표시하지 않는다. +제품 소스 `3346eb559bdfba24332feb4d9be4b7104520233e`의 실제 최종 결과는 EditMode 103/103·PlayMode 53/53·Android 226/226이며 네 명령 종료는 모두 0이다. 실행·APK 대응 원문은 `artifacts/verification/VisualUpgrade/FinalProduct/completion.json`이다. 기존 카메라의 yaw 210도·pitch −45도·거리 15에서는 넓어진 지면 뒷면이 보드를 더 많이 가리며 실제 대조는 `FinalProduct/EditorCapture/belowground-raycast-comparison.txt`에 있다. Editor의 스마트폰·태블릿 비율 렌더링과 실제 Android AVD 화면을 구분하며 실기기 성능·아이 대상 사용성·iOS·스토어 게시를 완료로 표시하지 않는다. + +원경 하단의 실제 틈을 보정하기 위해 30개 Stage의 FarHorizon 120개 x/z 배치 반경만 35에서 27로 옮겼다. 승인 메시·31개 재질·높이·회전·크기·다른 배치와 카메라·입력·Collider는 유지했다. 실제 가져온 sharedMesh의 별도 물리 장면에서 중앙 24m 복도 표본 누락은 366→반경 28의 6→반경 27의 세 풍경 각각 0이었다. 같은 카메라의 근접 A/B와 지적된 두 전체 화면에서도 중앙 틈 제거를 확인했으며 모든 외곽·픽셀·시점의 무틈을 보장하지 않는다. 원문은 `artifacts/verification/VisualUpgrade/HorizonFix/result.json`과 `HorizonFix/final`의 119개 PNG다. diff --git a/docs/content.md b/docs/content.md index a3942eb..6210ceb 100644 --- a/docs/content.md +++ b/docs/content.md @@ -28,4 +28,6 @@ Android 음성 검사는 Content만 `record-native-audio.ps1`의 Android AudioRe 승인한 영웅 2 FBX와 자연 배경 21 FBX를 실제 Unity 참조로 연결했다. Garden 1..10의 맑은 초원, Cloud 11..20의 꽃 언덕, Workshop 21..30의 바위 언덕은 자유 놀이에서도 원래 sourceStageId를 따른다. 30개 정의의 수량·ID·초기 위치·목표·종류 등 비시각 필드와 기존 GUID를 유지한다. 장비는 실제 묶음당 한 벌이며 새 장식의 배치가 정답 조건이 되지 않는다. 기존 구 탐색·직접 pick/drag·숫자 가독성 검사의 기준을 낮추지 않았다. -현재 얼굴 6표정·한국어 UI·승인 음성 44개는 유지하며 SFX/BGM은 첫 버전 제외다. 당시 자유 놀이 배지 겹침의 후속 검수는 현재 단일/복수 묶음·합체/분리·10개 상태의 실제 캡처로 확인했다. 기존 카메라의 yaw 210도·pitch −45도·거리 15에서는 넓어진 지면 뒷면이 보드를 더 많이 가린다. 적용 원본은 `SourceAssets/Models/{Heroes,Meadow}/active-adoption.json`, 실제 실행은 `artifacts/verification/VisualUpgrade/FinalProduct/completion.json`에 연결한다. 제품 소스 `83182e7f3e86926bf130817d401a331829401fac`의 EditMode 103/103·PlayMode 52/52·Android 226/226와 네 명령의 실제 종료 0을 확인했다. +현재 얼굴 6표정·한국어 UI·승인 음성 44개는 유지하며 SFX/BGM은 첫 버전 제외다. 당시 자유 놀이 배지 겹침의 후속 검수는 현재 단일/복수 묶음·합체/분리·10개 상태의 실제 캡처로 확인했다. 기존 카메라의 yaw 210도·pitch −45도·거리 15에서는 넓어진 지면 뒷면이 보드를 더 많이 가린다. 적용 원본은 `SourceAssets/Models/{Heroes,Meadow}/active-adoption.json`, 실제 실행은 `artifacts/verification/VisualUpgrade/FinalProduct/completion.json`에 연결한다. 제품 소스 `3346eb559bdfba24332feb4d9be4b7104520233e`의 EditMode 103/103·PlayMode 53/53·Android 226/226와 네 명령의 실제 종료 0을 확인했다. + +원경 하단의 실제 틈을 보정하기 위해 30개 Stage의 FarHorizon 120개 x/z 배치 반경만 35에서 27로 옮겼다. 승인 메시·31개 재질·높이·회전·크기·다른 배치와 카메라·입력·Collider는 유지했다. 실제 가져온 sharedMesh의 별도 물리 장면에서 중앙 24m 복도 표본 누락은 366→반경 28의 6→반경 27의 세 풍경 각각 0이었다. 같은 카메라의 근접 A/B와 지적된 두 전체 화면에서도 중앙 틈 제거를 확인했으며 모든 외곽·픽셀·시점의 무틈을 보장하지 않는다. 원문은 `artifacts/verification/VisualUpgrade/HorizonFix/result.json`과 `HorizonFix/final`의 119개 PNG다. diff --git a/docs/engineering-notes.md b/docs/engineering-notes.md index 20486e6..208b55f 100644 --- a/docs/engineering-notes.md +++ b/docs/engineering-notes.md @@ -36,6 +36,8 @@ - 넓은 새 지면과 보존된 바닥 Collider는 가림 범위가 다르다. yaw 210도·pitch −45도·거리 15의 지면 아래 시점에서 여섯 Raycast의 첫 바닥 hit가 동일해도 새 지면 뒷면은 보드를 더 많이 가린다. 실제 원본/새 지면 A/B와 카메라 값은 `artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/belowground-raycast-comparison.txt` 및 같은 폴더의 두 PNG에 남겼다. - Editor 자원 기록의 active MeshFilter 합계에는 Renderer가 꺼진 원래 바닥도 포함된다. 제출 GPU 삼각형 수가 아니며 Editor 전체 texture memory에는 폰트·RenderTexture도 포함된다. Camera.Render의 CPU wall time을 Android FPS나 실기기 성능으로 환산하지 않는다. +- 유한한 원경 메시의 경계와 지면 가장자리가 충분히 겹치지 않으면 실제 하늘 틈이 생긴다. 실제 가져온 sharedMesh를 별도 LocalPhysics3D Scene에서 탐색하고 같은 카메라의 원래/새 배치를 대조했다. 반경 35→28→27에서 중앙 24m 표본 누락 366→6→0을 확인했다. ±12m·횡단 2m/방사 .25m의 표본이며 전체 폭 약 ±15.35m나 모든 각도를 검사한 것은 아니다. 근접 비교 FOV14를 실제 게임 FOV62 변경으로 해석하지 않는다. 원문은 `artifacts/verification/VisualUpgrade/HorizonFix/result.json`과 `HorizonFix/final`에 있다. + ## 제작 도구의 수명 초기 자산 builder는 현재 완성된 씬·스테이지·얼굴·음성 참조를 재작성할 수 있다. `ProjectBootstrap.Prepare/ConnectApp`, `CompositionAssets.Build`, `PersistenceAssets.Build`, `ContentAssets.Build`, `PresentationAssets.Build`를 정상 프로젝트 열기·검사 전 준비 작업으로 실행하지 않는다. 변경 대상과 생성 diff를 먼저 확인하고 승인된 기존 자산을 보존할 수 있을 때만 사용한다. diff --git a/docs/final-verification.md b/docs/final-verification.md index a286d05..6ef454e 100644 --- a/docs/final-verification.md +++ b/docs/final-verification.md @@ -2,26 +2,32 @@ ## 승인 모델 적용의 최종 실행 (2026-10-09 KST) -제품 소스는 `83182e7f3e86926bf130817d401a331829401fac`다. 네 단계 실제 종료 0을 확인했다. 최종 제품 전체의 새 사용자 승인은 별도이며 2026-10-08 KST의 승인은 모델 다섯 묶음·원본 2개·FBX 23개의 정확한 바이트에만 적용한다. +제품 소스는 `3346eb559bdfba24332feb4d9be4b7104520233e`다. 네 단계 실제 종료 0을 확인했다. 최종 제품 전체의 새 사용자 승인은 별도이며 2026-10-08 KST의 승인은 모델 다섯 묶음·원본 2개·FBX 23개의 정확한 바이트에만 적용한다. | 실제 명령 | 결과 | 실제 외부 종료 | |---|---|---| | `pwsh -NoProfile -File tools/verify.ps1 -Phase EditMode -Milestone Final` | 103/103 | 0 | -| `pwsh -NoProfile -File tools/verify.ps1 -Phase PlayMode -Milestone Final` | 52/52 | 0 | +| `pwsh -NoProfile -File tools/verify.ps1 -Phase PlayMode -Milestone Final` | 53/53 | 0 | | `pwsh -NoProfile -File tools/verify.ps1 -Phase AndroidBuild -Milestone Final` | ARM64 IL2CPP APK 생성 | 0 | | `pwsh -NoProfile -File tools/verify.ps1 -Phase AndroidSmoke -Milestone Final` | 226/226, 네 child 종료 0 | 0 | -현재 빌드 [APK](../artifacts/android/MagnetismHeroes.apk)는 57,215,937바이트, SHA-256 `BEE8E80E03C4205EDEBF616A18940D58654E9115FDC91EE0A80F47DEA91559EA`다. 표준 사본·Final 사본·Fresh30의 실제 설치 후 가져온 APK는 같은 바이트다. 실제 APK의 승인 44개 PCM과 고지 3개의 정확한 바이트를 대조했다. 실행 소스·시각·실제 종료 원문은 [completion.json](../artifacts/verification/VisualUpgrade/FinalProduct/completion.json), 별도 오프라인 원문 대조는 [문서 근거 확인](../artifacts/verification/VisualUpgrade/FinalProduct/documentation-final-evidence-audit.json)에 연결한다. +현재 빌드 [APK](../artifacts/android/MagnetismHeroes.apk)는 57,215,937바이트, SHA-256 `DA533F235A9869E5A68F4A244AF9A89E34A8E6FB9E7C7F2F57D830939507B829`다. 표준 사본·Final 사본·Fresh30의 실제 설치 후 가져온 APK는 같은 바이트다. 실제 APK의 승인 44개 PCM과 고지 3개의 정확한 바이트를 대조했다. 실행 소스·시각·실제 종료 원문은 [completion.json](../artifacts/verification/VisualUpgrade/FinalProduct/completion.json), 별도 오프라인 원문 대조는 [문서 근거 확인](../artifacts/verification/VisualUpgrade/FinalProduct/documentation-final-evidence-audit.json)에 연결한다. -성공한 Smoke는 2026-10-08 15:31:53.7694461~15:47:20.6303343 UTC에 실행했다. Fresh30 151/151, FinalBoundary 37/37, RapidBoundary 39/39, ContentBoundary 69/69가 각각 종료 0이다. 하위 수를 독립 제품 기능 수로 합산하지 않는다. 새 저장에서 실제 입력으로 1~30을 순서대로 해결했으며 저장 push는 0회다. 각 단계 실제 성공·전체 구 ID 보존, 두 미완료 퍼즐과 최근 자유 놀이·부분 계수·카메라의 독립 복원, 0..10·반납·재공급·취소·손상 복구·오프라인·전체 숫자 발화·마지막 발화 보존을 확인했다. 별도 빠른 계수·경계 QA 상태는 정상 진행 증거와 구분한다. +성공한 Smoke는 2026-10-08 17:04:22.9959710~17:19:58.4677196 UTC에 실행했다. Fresh30 151/151, FinalBoundary 37/37, RapidBoundary 39/39, ContentBoundary 69/69가 각각 종료 0이다. 하위 수를 독립 제품 기능 수로 합산하지 않는다. 새 저장에서 실제 입력으로 1~30을 순서대로 해결했으며 저장 push는 0회다. 각 단계 실제 성공·전체 구 ID 보존, 두 미완료 퍼즐과 최근 자유 놀이·부분 계수·카메라의 독립 복원, 0..10·반납·재공급·취소·손상 복구·오프라인·전체 숫자 발화·마지막 발화 보존을 확인했다. 별도 빠른 계수·경계 QA 상태는 정상 진행 증거와 구분한다. -세 자연 테마, 2+3 합체·떨어진 선택 구의 분리, 10개 단독/한 묶음, 0·재공급·재진입의 현재 Editor 화면은 `artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture`에 있다. [적용 검수 갤러리](../artifacts/verification/VisualUpgrade/FinalProduct/index.html)는 실제 Unity 렌더링의 스마트폰 2400×1080·태블릿 1600×1000 모의 viewport와 Android AVD 화면을 구분한다. 합성 Core 검수 상태는 정상 30단계 진행 증거가 아니다. 이전 101개 시각 검수의 원문은 [GameReview](../artifacts/verification/VisualUpgrade/GameReview/visual-review.json)이며 소스 b4d8854의 이력으로 보존한다. +세 자연 테마, 2+3 합체·떨어진 선택 구의 분리, 10개 단독/한 묶음, 0·재공급·재진입의 현재 Editor 화면 119개는 `artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture`에 있다. [적용 검수 갤러리](../artifacts/verification/VisualUpgrade/FinalProduct/index.html)는 실제 Unity 렌더링의 스마트폰 2400×1080·태블릿 1600×1000 모의 viewport와 Android AVD 화면을 구분한다. 합성 Core 검수 상태는 정상 30단계 진행 증거가 아니다. 이전 101개 시각 검수의 원문은 [GameReview](../artifacts/verification/VisualUpgrade/GameReview/visual-review.json)이며 소스 b4d8854의 이력으로 보존한다. 자원 측정은 active hierarchy의 상주 MeshFilter 인덱스 합계이며 Renderer가 꺼진 원래 바닥을 포함한다. GPU 제출 삼각형 수가 아니다. 전체 Editor-loaded texture의 메모리·치수와 Camera.Render CPU wall time은 Android FPS·GPU 비용·실기기 성능을 증명하지 않는다. 원래 30개 비시각 정의·구 ID/총량/초기 위치·기존 GUID·44개 음성·6표정·폰트·UI·Mixer·Core·저장 경계를 유지했다. yaw 210도·pitch −45도·거리 15의 지면 아래 시점에서 새 지면 뒷면은 원래 Island보다 보드를 더 많이 가린다. 같은 여섯 물리 Raycast가 원래 바닥을 먼저 맞아도 시각적 가림이 같다는 뜻은 아니다. 실제 대조는 `FinalProduct/EditorCapture/belowground-raycast-comparison.txt`와 같은 폴더의 원본/새 지면 PNG에 있다. 기존 카메라·pick·초기 배치 보존을 우선했으며 카메라 범위·복귀 동작은 별도 UX 결정으로 남겼다. 실제 기기·아이 대상 사용성·iOS·스토어 검증은 후속이다. -이전 Final 원문은 [PreviousFinal 보존 목록](../artifacts/verification/VisualUpgrade/PreviousFinal/manifest.json)에 2,517개 파일과 SHA로 보존했다. 첫 Smoke는 실제 종료 1이며 원문 113개를 `FinalProduct/FailedAndroidAttempt1`에 보존했다. Unity 빌드 뒤 서로 다른 SDK의 ADB daemon 연결이 막힌 실행 소유자는 daemon을 재연결하고 실제 device/boot를 확인한 뒤 같은 clean 소스·APK로 실패한 Smoke만 재실행했다. 실패 결과를 통과로 바꾸지 않았다. [보존·정리 원문](../artifacts/verification/VisualUpgrade/FinalProduct/FailedAndroidAttempt1/preservation-and-pruning.json)은 과거 잔여 2,480개를 고정 사본과 정확한 SHA 대조 후 제거한 기록이다. 현재 실행 UTC·소스·APK가 맞는 새 원문만 현재 결과로 채택한다. +원경 하단의 실제 틈을 보정하기 위해 30개 Stage의 FarHorizon 120개 x/z 배치 반경만 35에서 27로 옮겼다. 승인 메시·31개 재질·높이·회전·크기·다른 배치와 카메라·입력·Collider는 유지했다. 실제 가져온 sharedMesh의 별도 물리 장면에서 중앙 24m 복도 표본 누락은 366→반경 28의 6→반경 27의 세 풍경 각각 0이었다. 같은 카메라의 근접 A/B와 지적된 두 전체 화면에서도 중앙 틈 제거를 확인했으며 모든 외곽·픽셀·시점의 무틈을 보장하지 않는다. 원문은 `artifacts/verification/VisualUpgrade/HorizonFix/result.json`과 `HorizonFix/final`의 119개 PNG다. + +원경 보정 전 제품 소스 `83182e7f3e86926bf130817d401a331829401fac`의 성공 검증·APK·갤러리는 `artifacts/verification/VisualUpgrade/BeforeHorizonFix/manifest.json`에 2,311개 파일과 SHA로 보존했다. 그 결과를 새 제품의 증거로 혼용하지 않는다. + +이번 첫 AndroidSmoke는 2026-10-08 16:58:49.3785491~17:00:52.0393312 UTC에 실제 종료 1이었다. Fresh30 stage5의 ADB `shell wm size` 관찰 명령에서 localhost:5037 연결이 약 21초 뒤 timeout 10060으로 실패했다. AVD 충돌이나 게임 판정 실패로 원인을 단정하지 않는다. 실패 원문·부분 결과 1,257개는 `artifacts/verification/VisualUpgrade/HorizonFailedSmokeAttempt1/manifest.json`에 보존했다. 실행 소유자는 정상 장치와 같은 조회 명령의 종료 0을 확인한 뒤 실패한 Smoke만 재실행했다. 먼저 통과한 EditMode·PlayMode·AndroidBuild는 재실행하지 않았으며 소스와 제품 732개 바이트·APK SHA는 그대로였다. 실제 완료 시각은 2026-10-08 17:19:58.7340281 UTC다. 실패 시도를 통과로 바꾸지 않았다. + +2026-10-07 제품의 이전 Final 원문은 [PreviousFinal 보존 목록](../artifacts/verification/VisualUpgrade/PreviousFinal/manifest.json)에 2,517개 파일과 SHA로 보존했다. 원경 보정 전 제품의 첫 Smoke는 실제 종료 1이며 원문 113개를 `FinalProduct/FailedAndroidAttempt1`에 보존했다. Unity 빌드 뒤 서로 다른 SDK의 ADB daemon 연결이 막힌 실행 소유자는 daemon을 재연결하고 실제 device/boot를 확인한 뒤 같은 clean 소스·APK로 실패한 Smoke만 재실행했다. 실패 결과를 통과로 바꾸지 않았다. [보존·정리 원문](../artifacts/verification/VisualUpgrade/FinalProduct/FailedAndroidAttempt1/preservation-and-pruning.json)은 과거 잔여 2,480개를 고정 사본과 정확한 SHA 대조 후 제거한 기록이다. 당시 실행 UTC·소스·APK가 맞는 원문만 당시 결과로 채택했다. ## T8 이전 통합 dev 검사 (2026-10-07) diff --git a/docs/handoff.md b/docs/handoff.md index aee21fd..98012cd 100644 --- a/docs/handoff.md +++ b/docs/handoff.md @@ -2,9 +2,13 @@ ## 승인 모델 적용 인수인계 (2026-10-09 KST) -제품 소스 `83182e7f3e86926bf130817d401a331829401fac`는 기존 규칙·저장·배치를 보존하고 승인한 구 몸체·묶음당 기사 장비·30개 자연 테마를 연결했다. 모델 승인일은 2026-10-08 KST이며 제품 전체의 새 사용자 최종 승인은 별도다. 기존 13 소품과 출처 기록, 후보 원본 기록을 덮어쓰지 않고 `SourceAssets/Models/{Heroes,Meadow}/active-adoption.json`에 정확한 원본·FBX·도구·Unity 재질·프리팹·GUID·검수·APK 해시를 연결한다. +제품 소스 `3346eb559bdfba24332feb4d9be4b7104520233e`는 기존 규칙·저장·배치를 보존하고 승인한 구 몸체·묶음당 기사 장비·30개 자연 테마를 연결했다. 모델 승인일은 2026-10-08 KST이며 제품 전체의 새 사용자 최종 승인은 별도다. 기존 13 소품과 출처 기록, 후보 원본 기록을 덮어쓰지 않고 `SourceAssets/Models/{Heroes,Meadow}/active-adoption.json`에 정확한 원본·FBX·도구·Unity 재질·프리팹·GUID·검수·APK 해시를 연결한다. -네 단계 실제 종료 0을 확인했다. EditMode 103/103·PlayMode 52/52·Android 226/226, 하위 Fresh30 151·FinalBoundary 37·RapidBoundary 39·ContentBoundary 69개가 통과했다. 하위 수를 독립 기능 수로 합산하지 않는다. 실행·실제 설치 APK `BEE8E80E03C4205EDEBF616A18940D58654E9115FDC91EE0A80F47DEA91559EA`의 대응은 `artifacts/verification/VisualUpgrade/FinalProduct/completion.json`과 `documentation-final-evidence-audit.json`에 있다. 이전 Final 고정 사본은 `VisualUpgrade/PreviousFinal/manifest.json`이다. 이전 결과와 새 결과의 소스·UTC·APK를 섞지 않는다. 이 인수인계 변경은 문서와 채택 메타데이터만이며 제품 파일을 바꾸거나 Unity 재import를 실행하지 않는다. +네 단계 실제 종료 0을 확인했다. EditMode 103/103·PlayMode 53/53·Android 226/226, 하위 Fresh30 151·FinalBoundary 37·RapidBoundary 39·ContentBoundary 69개가 통과했다. 하위 수를 독립 기능 수로 합산하지 않는다. 실행·실제 설치 APK `DA533F235A9869E5A68F4A244AF9A89E34A8E6FB9E7C7F2F57D830939507B829`의 대응은 `artifacts/verification/VisualUpgrade/FinalProduct/completion.json`과 `documentation-final-evidence-audit.json`에 있다. 원경 보정 전 적용 제품의 고정 사본은 `VisualUpgrade/BeforeHorizonFix/manifest.json`의 2,311개이며, 그 이전 제품은 `VisualUpgrade/PreviousFinal/manifest.json`에 보존했다. 이전 결과와 새 결과의 소스·UTC·APK를 섞지 않는다. 이 인수인계 변경은 문서와 채택 메타데이터만이며 제품 파일을 바꾸거나 Unity 재import를 실행하지 않는다. + +원경 하단의 실제 틈을 보정하기 위해 30개 Stage의 FarHorizon 120개 x/z 배치 반경만 35에서 27로 옮겼다. 승인 메시·31개 재질·높이·회전·크기·다른 배치와 카메라·입력·Collider는 유지했다. 실제 가져온 sharedMesh의 별도 물리 장면에서 중앙 24m 복도 표본 누락은 366→반경 28의 6→반경 27의 세 풍경 각각 0이었다. 같은 카메라의 근접 A/B와 지적된 두 전체 화면에서도 중앙 틈 제거를 확인했으며 모든 외곽·픽셀·시점의 무틈을 보장하지 않는다. 원문은 `artifacts/verification/VisualUpgrade/HorizonFix/result.json`과 `HorizonFix/final`의 119개 PNG다. + +이번 첫 AndroidSmoke는 2026-10-08 16:58:49.3785491~17:00:52.0393312 UTC에 실제 종료 1이었다. Fresh30 stage5의 ADB `shell wm size` 관찰 명령에서 localhost:5037 연결이 약 21초 뒤 timeout 10060으로 실패했다. AVD 충돌이나 게임 판정 실패로 원인을 단정하지 않는다. 실패 원문·부분 결과 1,257개는 `artifacts/verification/VisualUpgrade/HorizonFailedSmokeAttempt1/manifest.json`에 보존했다. 실행 소유자는 정상 장치와 같은 조회 명령의 종료 0을 확인한 뒤 실패한 Smoke만 재실행했다. 먼저 통과한 EditMode·PlayMode·AndroidBuild는 재실행하지 않았으며 소스와 제품 732개 바이트·APK SHA는 그대로였다. 실제 완료 시각은 2026-10-08 17:19:58.7340281 UTC다. 실패 시도를 통과로 바꾸지 않았다. 체험은 기존 Main 씬을 연다. 초기 builder와 `VisualUpgradeAssets.Apply`는 정상 실행 준비로 재실행하지 않는다. 이미 승인된 모델·얼굴·44개 음성을 재생성하지 않는다. 검증·Editor·ADB·녹음 실행 소유자를 하나로 유지한다. diff --git a/docs/operations.md b/docs/operations.md index 021384b..b727b2d 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -50,7 +50,9 @@ AndroidSmoke 전에 `Medium_Phone_API_37.0` AVD를 Android Studio Device Manager 모델 채택은 원본 2개·FBX 23개의 사용자 승인 SHA와 실제 Unity 방향·재질·대표 장비·선택 경계를 확인한 뒤 수행한다. 대상이 제한된 `VisualUpgradeAssets.Apply`는 `MAGNETISM_VISUAL_APPROVAL`의 승인 JSON과 `MAGNETISM_VISUAL_EVIDENCE`의 별도 증거 경로를 요구하는 채택용 Editor API다. 정상 프로젝트 열기나 검사 전 준비 명령이 아니다. 후보 provenance의 과거 상태를 고쳐 승인으로 만들지 않고 별도 active-adoption에 원본·입력·도구·Unity 참조·검수 해시를 연결한다. -재검증 전에는 이전 Final의 로그·화면·PCM·APK 대응 기록을 해시 목록과 함께 고정 사본으로 보존한다. 같은 경로에 남은 과거 파일을 이번 결과로 세지 않는다. 현재 실행의 소스·UTC·설치 APK SHA가 맞는 phase/child 결과만 채택한다. 이번 이전 증거는 `artifacts/verification/VisualUpgrade/PreviousFinal/manifest.json`, 새 실행 연결은 `VisualUpgrade/FinalProduct/completion.json`에 있다. +재검증 전에는 이전 Final의 로그·화면·PCM·APK 대응 기록을 해시 목록과 함께 고정 사본으로 보존한다. 같은 경로에 남은 과거 파일을 이번 결과로 세지 않는다. 현재 실행의 소스·UTC·설치 APK SHA가 맞는 phase/child 결과만 채택한다. 현재 원경 보정 전 제품의 증거 2,311개는 `artifacts/verification/VisualUpgrade/BeforeHorizonFix/manifest.json`, 그 이전 제품은 `VisualUpgrade/PreviousFinal/manifest.json`, 새 실행 연결은 `VisualUpgrade/FinalProduct/completion.json`에 있다. 이번 첫 Smoke의 환경 관찰 명령 실패 원문 1,257개는 `VisualUpgrade/HorizonFailedSmokeAttempt1/manifest.json`에 실제 종료 1로 보존했다. 소스·제품 732개 바이트·APK 동일성을 확인한 뒤 Smoke만 재실행했으며 다른 세 단계의 통과는 유지했다. + +`VisualUpgradeAssets.ApplyHorizonContinuity`는 기존 30개 Stage의 FarHorizon x/z 반경만 27로 옮기는 대상 한정 Editor API다. 정상 실행 준비로 재실행하지 않는다. 해당 보정은 실제 메시의 중앙 24m 표본과 근접/전체 화면으로 확인했으며 모든 외곽·시점의 연속성을 주장하지 않는다. 승인 메시·재질·나머지 배치와 게임 카메라는 유지했다. 음성 제작은 conda `qwen3-tts`의 CUDA 환경과 고정 1.7B CustomVoice/Sohee를 사용한다. 이미 승인된 44개는 그대로 사용한다. 새 대본이 필요할 때만 선택 ID를 별도로 생성한다. diff --git a/docs/tracking/decisions/0005-hybrid-assets.md b/docs/tracking/decisions/0005-hybrid-assets.md index 2b816e0..a020ae5 100644 --- a/docs/tracking/decisions/0005-hybrid-assets.md +++ b/docs/tracking/decisions/0005-hybrid-assets.md @@ -17,3 +17,5 @@ Unity 기본 도형만 사용하면 제작 부담은 줄지만 배경 소품 표 FBX 방향·피벗·콜라이더와 PNG alpha·구 위의 표정 위치를 각각 검수해야 한다. 생성 이미지에 독점권을 주장하거나 도구가 공개하지 않은 모델 ID를 추측할 수 없다. 얼굴 장식은 별도 머리나 구가 아니며 숫자를 그림에 굳히지 않는다. 테마 소품·배치의 다양성은 학습 정답 조건을 늘리는 근거가 아니다. 2026-10-09 KST 적용은 `SourceAssets/Models/{Heroes,Meadow}/active-adoption.json`과 `artifacts/verification/VisualUpgrade/ModelReview/user-approval.json`의 정확한 원본·FBX·Unity 참조 해시를 따른다. 초기 Unity 기본 구와 13개 Blender 소품은 제작 이력으로 보존한다. 현재 세 테마는 맑은 초원·꽃 언덕·바위 언덕이며 Garden/Cloud/Workshop 식별자를 바꾸지 않는다. import root 회전과 sRGB 재질 변환을 실제 Unity 결과로 검수한다. yaw 210도·pitch −45도·거리 15의 지면 아래 시점에서는 넓어진 지면 뒷면이 보드를 더 많이 가리며 실제 대조는 `artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/belowground-raycast-comparison.txt`에 있다. 카메라 제한이나 앞쪽 Collider 무시를 이번 미술 채택에 섞지 않고 후속 카메라 UX 결정으로 남겼다. + +원경 하단 틈은 승인 메시·31개 재질을 다시 제작하는 대신 기존 FarHorizon이 지면과 겹치도록 배치해 보정했다. 사용자 승인 형태와 기존 카메라·Collider 경계를 보존하기 위해 전체 builder 재실행이나 새 카메라 동작을 추가하지 않았다. diff --git a/docs/tracking/status.md b/docs/tracking/status.md index c05b5b4..4b73af9 100644 --- a/docs/tracking/status.md +++ b/docs/tracking/status.md @@ -4,7 +4,13 @@ 청록색 구 몸체와 대표 친구의 투구·무딘 검·둥근 방패 한 벌, 정원 1..10의 맑은 초원·구름 11..20의 꽃 언덕·별 작업실 21..30의 바위 언덕을 연결했다. 원본 2개·새 FBX 23개와 Unity 재질 31개는 `SourceAssets/Models/{Heroes,Meadow}/active-adoption.json`에 해시로 연결한다. 기존 13 FBX·원본·후보 provenance는 보존한다. 기존 Garden/Cloud/Workshop 식별자, 30개 비시각 정의·구 ID/초기 위치/총량·GUID·44개 승인 음성·6표정·UI·폰트·Mixer·Core·저장은 유지한다. -현재 제품 소스 `83182e7f3e86926bf130817d401a331829401fac`의 최종 실행은 `artifacts/verification/VisualUpgrade/FinalProduct/completion.json`과 `documentation-final-evidence-audit.json`에 연결한다. EditMode 103/103·PlayMode 52/52·Android 226/226, 하위 Fresh30 151·FinalBoundary 37·RapidBoundary 39·ContentBoundary 69개가 각각 종료 0이며 하위 수를 독립 제품 기능 수로 합산하지 않는다. 네 단계 실제 종료 0을 확인했다. 현재 APK SHA-256은 `BEE8E80E03C4205EDEBF616A18940D58654E9115FDC91EE0A80F47DEA91559EA`다. 스마트폰·태블릿 Editor 비율 화면과 실제 AVD 결과를 구분한다. +현재 제품 소스 `3346eb559bdfba24332feb4d9be4b7104520233e`의 최종 실행은 `artifacts/verification/VisualUpgrade/FinalProduct/completion.json`과 `documentation-final-evidence-audit.json`에 연결한다. EditMode 103/103·PlayMode 53/53·Android 226/226, 하위 Fresh30 151·FinalBoundary 37·RapidBoundary 39·ContentBoundary 69개가 각각 종료 0이며 하위 수를 독립 제품 기능 수로 합산하지 않는다. 네 단계 실제 종료 0을 확인했다. 현재 APK SHA-256은 `DA533F235A9869E5A68F4A244AF9A89E34A8E6FB9E7C7F2F57D830939507B829`다. 스마트폰·태블릿 Editor 비율 화면과 실제 AVD 결과를 구분한다. + +원경 하단의 실제 틈을 보정하기 위해 30개 Stage의 FarHorizon 120개 x/z 배치 반경만 35에서 27로 옮겼다. 승인 메시·31개 재질·높이·회전·크기·다른 배치와 카메라·입력·Collider는 유지했다. 실제 가져온 sharedMesh의 별도 물리 장면에서 중앙 24m 복도 표본 누락은 366→반경 28의 6→반경 27의 세 풍경 각각 0이었다. 같은 카메라의 근접 A/B와 지적된 두 전체 화면에서도 중앙 틈 제거를 확인했으며 모든 외곽·픽셀·시점의 무틈을 보장하지 않는다. 원문은 `artifacts/verification/VisualUpgrade/HorizonFix/result.json`과 `HorizonFix/final`의 119개 PNG다. + +원경 보정 전 제품 소스 `83182e7f3e86926bf130817d401a331829401fac`의 성공 검증·APK·갤러리는 `artifacts/verification/VisualUpgrade/BeforeHorizonFix/manifest.json`에 2,311개 파일과 SHA로 보존했다. 그 결과를 새 제품의 증거로 혼용하지 않는다. + +이번 첫 Smoke 종료 1 원문을 보존하고 같은 소스·APK에서 Smoke만 재실행해 종료 0을 확인했다. 다른 세 단계의 통과는 유지했으며 새 최종 완료는 2026-10-08 17:19:58.7340281 UTC다. 기존 무제한 카메라의 yaw 210도·pitch −45도·거리 15에서는 넓어진 지면 뒷면이 보드를 더 많이 가린다. 실제 대조는 `artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/belowground-raycast-comparison.txt`에 있다. 엄격한 실제 구 탐색·Collider pick/drag·숫자 가독성 검사를 유지했지만 모든 시점 가독성을 보장하지 않는다. 기존 카메라·pick·초기 배치 보존을 우선했으며 카메라 범위·복귀 동작은 별도 UX 결정으로 남겼다.