{ "schemaVersion": 1, "status": "APPROVED_MODELS_ADOPTED_VERIFIED_PRODUCT_CANDIDATE", "recordedKstDate": "2026-10-09", "scope": "사용자 승인 바이트와 실제 Unity 채택을 연결한다. 제품 전체의 새 사용자 최종 승인은 별도이며 원본 후보 이력을 덮어쓰지 않는다.", "approval": { "path": "artifacts/verification/VisualUpgrade/ModelReview/user-approval.json", "sha256": "b539d582aa77d032918bbb580d10d2374f65be4bdd6868432a84ed1d23a46bc5", "userResponse": "승인합니다", "confirmedUtc": "2026-10-08T14:05:56.585939+00:00", "approvedFileCount": 25, "reviewPacket": { "path": "artifacts/verification/VisualUpgrade/ModelReview/review-packet.json", "sha256": "4787e5679d1fe940060a889ffee42020258587ffb19eff32696ea6fc2f48cc99" } }, "approvedFiles": [ { "kind": "BLENDER_SOURCE", "repositoryRelativePath": "SourceAssets/Models/Heroes/MagneticKnight.blend", "bytes": 1833499, "sha256": "7ce1272dfe861aee986609cdb899f0edf8b8f2f0f17269c0eda472c8aa90ee3a" }, { "kind": "FBX", "repositoryRelativePath": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Models/Heroes/HeroBody.fbx", "bytes": 60076, "sha256": "56f3301176c612ebeab3fdaaba5c019674beeb0f727f97ed27dd67e32ff50a40" }, { "kind": "FBX", "repositoryRelativePath": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Models/Heroes/KnightEquipment.fbx", "bytes": 222764, "sha256": "a8059a020e79e080635e7326bb91576010cad10c60ee931d95536d47fe76e61c" } ], "historicalProvenance": { "path": "SourceAssets/Models/Heroes/provenance.json", "bytes": 6298, "sha256": "16d9e14f9e3ee66dce4b16737e1b1e3380fb0ffff35e322d24508cef42d52851" }, "authoringTool": { "name": "Blender", "version": "5.2.2 LTS", "script": { "path": "tools/models/build_hero.py", "bytes": 22664, "sha256": "6ac494c6207f2a49804db2b06691519920e28fd1af06224793b341854d63e638" }, "frozenToolRecord": { "name": "Blender", "actualVersion": "5.2.2 LTS" }, "toolBuildHash": null }, "originalPlaygroundHistory": [ { "path": "SourceAssets/Models/PlaygroundProps.blend", "bytes": 301307, "sha256": "59f543fc6d3b835fa282eac6459b9ed45ed2617052b7f1d2184895eb978b5775" }, { "path": "SourceAssets/Models/provenance.json", "bytes": 3848, "sha256": "4429c76007f59a6f3a2243204cae2b4ab0ab3d8d6fbf2cdaae9da01df50e9038" } ], "unity": { "productSourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", "applyScript": { "path": "Assets/MagnetismHeroes/Editor/VisualUpgradeAssets.cs", "bytes": 19379, "sha256": "640765adea45fa4cb18954f4c157480ed2b22f28839282943f8b3175e159c885", "guid": "40789cbe0397f8745bff78d14a544113", "metaSha256": "f017c6e684dd15cd8d1a3682eea8ff6f1b0e4ab75f04087c092484cd19a97821" }, "imports": [ { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Models/Heroes/HeroBody.fbx", "bytes": 60076, "sha256": "56f3301176c612ebeab3fdaaba5c019674beeb0f727f97ed27dd67e32ff50a40", "guid": "a1145d71b07ba34489a0290583fbe4ee", "metaSha256": "808a80e2c555d64c82fc42d09809a3d93313b305e268e12a7fa524504c1e4d69", "rootEuler": { "x": 89.98021697998047, "y": 0.0, "z": 0.0 }, "meshCount": 1, "triangleCount": 3968, "globalScale": 1, "bakeAxisConversion": true, "rootRotationPreserved": true }, { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Models/Heroes/KnightEquipment.fbx", "bytes": 222764, "sha256": "a8059a020e79e080635e7326bb91576010cad10c60ee931d95536d47fe76e61c", "guid": "ccc4dc45d61bc64499d7c0e1591e1b85", "metaSha256": "f4a1b0bc232425b5e678d6d90e65f76510644d55c83fe9189fe7db0eaf46222f", "rootEuler": { "x": 0.0, "y": 0.0, "z": 0.0 }, "meshCount": 22, "triangleCount": 11684, "globalScale": 1, "bakeAxisConversion": true, "rootRotationPreserved": true } ], "materials": [ { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Materials/VisualUpgrade/Hero_CyanSatin.mat", "bytes": 3919, "sha256": "1c8727d6437de82f5842e1acda727f65196c4d92355857c168e62a68a37abbab", "guid": "21b713eed8aa73146a39c8501b952ef9", "metaSha256": "a171f8daa3b2b70fdb0141bf5c17f152c0468822411fbf87fde440eea2dd463c", "sourceMaterial": "Hero_CyanSatin", "shader": "Universal Render Pipeline/Lit", "baseColorSrgb": [ 0.17, 0.72, 0.83 ], "roughness": 0.48, "smoothness": 0.52, "metallic": 0, "enableInstancing": true }, { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Materials/VisualUpgrade/Helmet_SilverTint.mat", "bytes": 3919, "sha256": "3aeca0f84d254552a3decf8004d4fbd6909fb26c75509069828605e1f3d9de39", "guid": "6bc3d158d578da846bebebd6363bd204", "metaSha256": "89a1606ce98219701647a35e393456945882a03011a45bfbc218b2be1e454c30", "sourceMaterial": "Helmet_SilverTint", "shader": "Universal Render Pipeline/Lit", "baseColorSrgb": [ 0.72, 0.85, 0.86 ], "roughness": 0.39, "smoothness": 0.61, "metallic": 0.18, "enableInstancing": true }, { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Materials/VisualUpgrade/Ceramic_WarmCream.mat", "bytes": 3922, "sha256": "04f690db82d0cf505e4822f8f309c2905367b1fa83670f5422ab952f13b1a559", "guid": "dad2eea71471abc488393ffb4dc0cc6f", "metaSha256": "e871bbbbcedbf57be1ebe507c40b13739d3e2d82b249efad0afc0fe577199692", "sourceMaterial": "Ceramic_WarmCream", "shader": "Universal Render Pipeline/Lit", "baseColorSrgb": [ 0.97, 0.92, 0.78 ], "roughness": 0.43, "smoothness": 0.5700000000000001, "metallic": 0, "enableInstancing": true }, { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Materials/VisualUpgrade/Trim_HoneyGold.mat", "bytes": 3928, "sha256": "d496af29ccbcfa9d3991818801535c68d21f549ff170978ef79627c21907f39f", "guid": "50c03e94de1db4a4daf15b060866ac70", "metaSha256": "102520158a20f5541cd883f1581fb1603f5ec2a0b080e454aa2b09a7bacc5658", "sourceMaterial": "Trim_HoneyGold", "shader": "Universal Render Pipeline/Lit", "baseColorSrgb": [ 0.94, 0.71, 0.34 ], "roughness": 0.42, "smoothness": 0.5800000000000001, "metallic": 0.12, "enableInstancing": true }, { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Materials/VisualUpgrade/Enamel_DeepTeal.mat", "bytes": 3939, "sha256": "d6b422ffa5b6a4e688c8734070a4246967f950b73f7a504732c3a3d4bc863242", "guid": "794c64e2850c3f541981a51bb4314d5e", "metaSha256": "8ead210e4db06ee198df147bbcce864292e502a676d131d45c0089146029f7ef", "sourceMaterial": "Enamel_DeepTeal", "shader": "Universal Render Pipeline/Lit", "baseColorSrgb": [ 0.055, 0.4, 0.44 ], "roughness": 0.42, "smoothness": 0.5800000000000001, "metallic": 0, "enableInstancing": true }, { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Materials/VisualUpgrade/Blade_SatinSilver.mat", "bytes": 3918, "sha256": "92c3fa6805b1c6405baf2fdfa113aa7689df1b73571cc9ed782bc6be4d54281b", "guid": "59b7934cb6c96624abd461dad0a6a8f2", "metaSha256": "440fb1197475cc9df36fafcd0c549cd5befb92b19ddbdb3de00e8baad268fc22", "sourceMaterial": "Blade_SatinSilver", "shader": "Universal Render Pipeline/Lit", "baseColorSrgb": [ 0.85, 0.92, 0.91 ], "roughness": 0.4, "smoothness": 0.6, "metallic": 0.2, "enableInstancing": true } ], "prefabs": [ { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Prefabs/MagnetFriend.prefab", "bytes": 18184, "sha256": "5e986e01ad9bcd2026e713b62601f92c7d8cfb9febf91d3591a833e38f7b4d46", "guid": "91ae23d420859244686c2c654ab58bf3", "metaSha256": "5e31161dac1026b55ff8b8c40fec85f1acdf7f154efb573036cda67c7e99139b" }, { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Prefabs/GroupBadge.prefab", "bytes": 18371, "sha256": "8804ed655c33dddff00f5b060e84ca67c9b91a65fbffb501fc83ada4e1594edc", "guid": "f6475c2f7cafe4441a6f4706a3b2b6a4", "metaSha256": "b76c78e7133454e8bf325948bcbc9f392c96c10fb4eb5a78b01eefac2109c8d7" }, { "path": "Assets/MagnetismHeroes/UnityRuntime/Presentation/Prefabs/GameApp.prefab", "bytes": 406884, "sha256": "a36a37bc84fe99dd8dc2c0bcf24ee5dfae266dd5da0c1a272caeb7bfbc7fc44c", "guid": "73c3215bc432df740b907a1edefa9ea1", "metaSha256": "248f9572123fca7ee45d9d56358e2e89a67c2a78b4c27cb74c4281170ace1db6" } ], "stages": [], "sourceImportEvidence": { "path": "artifacts/verification/VisualUpgrade/UnityApply/source-import.json", "sha256": "4a8788aff69cd30befe5c20d94e63542ee9ad4a102710bfd7c208a8beb14f9a6" }, "sourceImportEvidenceScope": "실제 초기 채택 import 기록이다. 현재 제품의 GUID·SHA는 별도로 위에 기록한다.", "colorMapping": "원본 sRGB 값을 URP Lit BaseColor에 연결하고 linearBaseColor를 sRGB 입력으로 재사용하지 않는다. smoothness=1−roughness, metallic은 원본 값이다.", "geometryBoundary": "원본 미터·Z-up 및 FBX -Z forward·Y-up, import scale 1·원래 import root 회전을 유지한다. 승인 메시·원본 재질 바이트를 변경하지 않는다." }, "verification": { "finalCompletion": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/completion.json", "sha256": "dd898f331a31fb49545e9c3ee2d1c5b52adca97d907f5cff1b0c21b1e6d429fd" }, "editorCaptureDirectory": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture", "previousGameReview": { "path": "artifacts/verification/VisualUpgrade/GameReview/visual-review.json", "sha256": "c1d86277177ae32b891a1b4be4ecb637fe48ecb0785e292ee6a43835206ee6dc" }, "previousGameReviewScope": "이전 통합 소스 b4d8854의 검수 이력이며 현재 최종 명령 결과를 대신하지 않는다.", "limitations": "지면 아래 시점의 넓어진 지면 가림은 docs/tracking/findings.md에 기록한다. Editor 비율 캡처·CPU 시간·상주 자원은 Android 실기기 성능이 아니다.", "representativeEditorCaptures": [ { "metadata": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-soft-shadow.json", "sha256": "68ec9ed734cbd5919f30f708a4062d01084b7d54872f23ac7b3a904150e2af12" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-soft-shadow.png", "sha256": "abced35a2047a504dce2d0322cc31f87f68ed88bb9d530c4bf658970d65d166b" }, "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 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", "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": "7480b58de0a332c30da016739d1c4a6d939f0886e999ae78f935df240667e6e8" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-soft-shadow.png", "sha256": "d3a656195a308feb9e6296b9425a1057c790d4391a92315c611600ee71fa9826" }, "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 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", "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": "6a15bcc8a72db2d26e1c800aed8f38da4237413d7c133813a87109483cbedda7" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world21-soft-shadow.png", "sha256": "126d329c7de8619711568f7fd79bcabc4b19b8d2ee75a5c5cd9b77bae4710c5d" }, "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 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", "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": "8baa85ef8454ab47d37dc051ce3b1642f1d38dd3704623b02e29094eb8683119" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-two-plus-three-phone-default.png", "sha256": "574652616f8cd0d3ac0d0be469e4c0f1b8b129a3266f93ccc8c9fc8d3cee9a1d" }, "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 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", "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": "9ff48f6ec5ca6ee7dd09732ef4a5a9e7ae393f6220ed429d7e1dcc67d38929ca" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-merged-five-phone-default.png", "sha256": "b42e30691f84e76e9f12503e133ea2f4946fa83995e5131ddb022c20727b85eb" }, "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 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", "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": "3abc8fae3b71dc5fa14bcf319d57436a0522fd9c4291e94cfef8dd29c1706ef1" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world11-disconnected-split-two-three-tablet-orbitzoom.png", "sha256": "1c6c9317e183a30ac7647a54d21881df25b12b974ea857b3b44afebc14a9f6d6" }, "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 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", "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": "28bf53b56db30cf861e115aee1e6f03ab3d59725a0e4ea8748a71fd8cad3d011" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-single-groups-phone-default.png", "sha256": "2072f115be6faef2a02de3ad62a2634f9bdd5c605abe4b454bd74b2ec017cf06" }, "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 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", "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": "305960074b579817f17aa4a44e0a2ef58c90bae56e12913d7b85acabb689170a" }, "image": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/EditorCapture/world1-ten-one-group-tablet-default.png", "sha256": "5b1b4883e19f1af9f28d9b00521260ad8aed8e5ae5571db510f08a6765b0e166" }, "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 화면이 아니며 합성 상태는 정상 진행 증거가 아니다.", "resourceMetrics": { "meshInstances": 59, "triangles": 127684, "sharedMaterials": 27, "textureMemory": 99572769, "allocatedMemory": 463947314, "editorCameraRenderMilliseconds": 1.3295999765396118, "fieldOfView": 62.0 } } ], "modelRoundtripEvidence": { "path": "artifacts/verification/VisualUpgrade/ModelReview/integration-verification.json", "sha256": "9dbe2c85a83c5f5098669724a8e0e73e34bda137a5cbe40e08e8c459e0a810ca" }, "finalEvidenceAudit": { "path": "artifacts/verification/VisualUpgrade/FinalProduct/documentation-final-evidence-audit.json", "sha256": "14e62264a22f360f9afda94e1c8660507cda3b27c30d6f9916607889c2819e08" }, "actualFinalResults": { "productSourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", "phaseExitCodes": { "EditMode": 0, "PlayMode": 0, "AndroidBuild": 0, "AndroidSmoke": 0 }, "editorTests": { "EditMode": 103, "PlayMode": 53 }, "androidChecks": 226, "children": [ { "suite": "Fresh30", "checks": 151, "exitCode": 0, "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": "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": "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": "3346eb559bdfba24332feb4d9be4b7104520233e", "apkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "별도 명시 경계 검사. 정상 30단계 진행 수에 합산하지 않는다." } ], "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": "18ec499dd9d30cd0a00df16012e8e8021e0cbf77a97089611a3954ed5c00aa7b" }, "freshAll30SuccessAndIdsChecked": true, "freshSavePushCommandCount": 0, "failedAttemptsPreserved": [ { "phase": "AndroidSmoke", "command": "pwsh -NoProfile -File tools/verify.ps1 -Phase AndroidSmoke -Milestone Final", "startedUtc": "2026-10-08T16:58:49.3785491Z", "finishedUtc": "2026-10-08T17:00:52.0393312Z", "exitCode": 1, "status": "failed", "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", "sourceDirty": false, "sourceDirtyEnd": null, "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": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "bytes": 57215937 }, "installedApk": { "path": "artifacts/verification/Final/Fresh30/installed-base.apk", "sha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829" }, "actualClipCount": 44, "voicePayload": { "path": "artifacts/verification/Final/VoicePayload/apk-voice-payload.json", "sha256": "a3c1fc9e0ef0170b3fcb60170ae4ca5b9ec640b644fd1f2b00fea591bdc28650" }, "notices": [ { "name": "NotoSansCJK-OFL.txt", "sha256": "88f117575237307bdd86a17ef15e21790fc9a662fe4dfb103ca1ca077f0d9982" }, { "name": "TTS-Apache-2.0.txt", "sha256": "7137274bab133744763a3906ace2a13844c2b34635136fc6d4454c25bfd76eda" }, { "name": "TTS-model-card.txt", "sha256": "2157466302fcaf8e4979d0505aa4b648ad32468aff98b3e964046db05e574f3c" } ] }, "actualAndroidAvdCaptures": [ { "stage": 1, "image": { "path": "artifacts/verification/Final/Fresh30/stage-1-enter.png", "sha256": "24a1fee6f57ed238976dde803184895fbe4900e3ed218fc3064c9743ef9c7e63" }, "captureCommands": { "path": "artifacts/verification/Final/Fresh30/stage-1-enter-commands.json", "sha256": "331258895e501db85925861d7b2211c42896b58c1169fcb24b748f832c8feaba" }, "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": "a17e8540e959fcad55fcde48ccee3654999647e59f7e245839e3872108776fc9" }, "captureCommands": { "path": "artifacts/verification/Final/Fresh30/stage-10-next-commands.json", "sha256": "b9794ef9c33aab6b7f6379458701b3a89d075fce688517b222cfaf2ba79ff2a5" }, "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": "79cf0d0bef7671ebc92c2d1cf1f9b557633f7832425b6fc01809944ea8b0b3b3" }, "captureCommands": { "path": "artifacts/verification/Final/Fresh30/stage-20-next-commands.json", "sha256": "762d84fdeb5cc822f24be5256cb30a26501516dfd73f4a32d1182283cf910528" }, "observedUtc": "2026-10-08T17:12:18.2030067Z", "sourceCommit": "3346eb559bdfba24332feb4d9be4b7104520233e", "installedApkSha256": "da533f235a9869e5a68f4a244af9a89e34a8e6fb9e7c7f2f57d830939507b829", "scope": "실제 Android API37 AVD 2400×1080 화면. 정상 30단계 실제 입력의 한 시점이며 모든 얼굴의 동시 가시성을 보장하지 않는다." } ], "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 체크아웃의 줄바꿈 차이와 구분한다.", "pathBase": "path와 repositoryRelativePath는 저장소 루트를 기준으로 한다. artifacts 경로는 검증 원문이며 제품 자산이 아니다." }