{"schemaVersion":1,"url":"/mika-avatar/api/live2d/mika/production-brief","markdownUrl":"/mika-avatar/handoff/mika-live2d/production-brief.md","avatarId":"mika_live2d","runtime":"live2d","displayName":"Mika","learnMoreDefaultUntilReady":"mao_pro","sampleFallbackAvatarId":"mao_pro","readyForLearnMore":false,"deliveryReady":true,"nextMilestone":"source","nextAction":"complete-mika-live2d-source-review","recommendedProductionRoute":"create-layered-art-source-then-rig-in-live2d-cubism-and-export-runtime","cannotAutoGenerateNotice":"mika_formal_2d is a static preview and cannot be promoted to mika_live2d without layered art, Cubism rigging, runtime export, license notes, and LearnMore acceptance.","remainingProductionQueueIds":["source"],"remainingProductionQueueCount":1,"productionQueue":[{"id":"runtime","name":"Live2D runtime export","done":true,"requiredArtifactIds":["runtimeModel","moc3","textures","displayInfo","physics","pose"],"blockingReasons":[],"nextAction":"export Cubism runtime model3.json, moc3, textures, DisplayInfo, Physics, and Pose","deliveryFileIds":["runtimeModelJson","moc3","textures","displayInfo","physics","pose"],"deliveryMissingIds":[],"deliveryBlockedIds":[],"deliveryBlockingReasons":[]},{"id":"source","name":"Layered art and editable Cubism source","done":false,"requiredArtifactIds":["sourceProject","partsMap"],"blockingReasons":["SOURCE_REVIEW_LEDGER.json sourceConfirmed 仍是 false"],"nextAction":"prepare layered Mika art source and editable Cubism project","deliveryFileIds":["sourceProject","sourceManifest","partsMap","riggingSpec"],"deliveryMissingIds":[],"deliveryBlockedIds":[],"deliveryBlockingReasons":[]},{"id":"expressions","name":"Mouth shapes and face expressions","done":true,"requiredArtifactIds":["expressions"],"blockingReasons":[],"nextAction":"produce a/i/u/e/o mouth shapes plus blink, smile, surprised, and thinking expressions","deliveryFileIds":["expressions","expressionMap"],"deliveryMissingIds":[],"deliveryBlockedIds":[],"deliveryBlockingReasons":[]},{"id":"motions","name":"Native motion and dance-ready gestures","done":true,"requiredArtifactIds":["motions"],"blockingReasons":[],"nextAction":"produce idle, lyric reading, pointing, rhythm sway, chorus gesture, and soft dance motions","deliveryFileIds":["motions","motionMap"],"deliveryMissingIds":[],"deliveryBlockedIds":[],"deliveryBlockingReasons":[]},{"id":"parameters","name":"Model-native mouth and motion parameters","done":true,"requiredArtifactIds":["parameterContract"],"blockingReasons":[],"nextAction":"confirm ParamA/I/U/E/O, ParamMouthDown, head, body, shoulder, and arm parameters in PARAMETER_MAP.json","deliveryFileIds":["parameterMap","parameterDriverContract"],"deliveryMissingIds":[],"deliveryBlockedIds":[],"deliveryBlockingReasons":[]},{"id":"license","name":"License, source, and attribution","done":true,"requiredArtifactIds":["licenseAndSource","attributionManifest"],"blockingReasons":[],"nextAction":"finalize source ownership, usage scope, and LearnMore attribution copy","deliveryFileIds":["license","artSources","attributionManifest"],"deliveryMissingIds":[],"deliveryBlockedIds":[],"deliveryBlockingReasons":[]},{"id":"acceptance","name":"LearnMore desktop and mobile acceptance","done":true,"requiredArtifactIds":["acceptanceMedia"],"blockingReasons":[],"nextAction":"record desktop and mobile preview media and approve LearnMore behavior","deliveryFileIds":["visualQa","acceptanceChecklist","acceptanceMedia"],"deliveryMissingIds":[],"deliveryBlockedIds":[],"deliveryBlockingReasons":[]}],"deliveryFilePlanSummary":{"totalCount":29,"presentCount":29,"readyCount":29,"missingCount":0,"blockedCount":0,"presentIds":["runtimeModelJson","moc3","textures","displayInfo","physics","pose","expressions","motions","sourceProject","deliveryManifest","modelProductionRequest","psdLayerSpec","sourceManifest","psdLayerManifest","partsMap","riggingSpec","license","artSources","attributionManifest","expressionMap","motionMap","parameterMap","parameterDriverContract","runtimeModelContract","runtimeExportManifest","visualQa","acceptanceChecklist","layerSplitChecklist","acceptanceMedia"],"readyIds":["runtimeModelJson","moc3","textures","displayInfo","physics","pose","expressions","motions","sourceProject","deliveryManifest","modelProductionRequest","psdLayerSpec","sourceManifest","psdLayerManifest","partsMap","riggingSpec","license","artSources","attributionManifest","expressionMap","motionMap","parameterMap","parameterDriverContract","runtimeModelContract","runtimeExportManifest","visualQa","acceptanceChecklist","layerSplitChecklist","acceptanceMedia"],"missingIds":[],"blockedIds":[]},"requiredExpressionTargets":["a","i","u","e","o","blink","smile","surprised","thinking"],"requiredMotionTargets":["idle","greeting","lyric-reading","point-lyrics","rhythm-sway","chorus-gesture","soft-dance-loop"],"requiredSourceLayerSplitContract":{"checklistFile":"LAYER_SPLIT_CHECKLIST.md","psdLayerSpecFile":"PSD_LAYER_SPEC.md","sourceManifestFile":"SOURCE_MANIFEST.json","sourceManifestUrl":"/mika-avatar/handoff/mika-live2d/source-manifest.json","sourceManifestSchemaUrl":"/mika-avatar/handoff/mika-live2d/source-manifest.schema.json","psdLayerManifestFile":"PSD_LAYER_MANIFEST.json","psdLayerManifestUrl":"/mika-avatar/handoff/mika-live2d/psd-layer-manifest.json","psdLayerManifestSchemaUrl":"/mika-avatar/handoff/mika-live2d/psd-layer-manifest.schema.json","partsMapFile":"PARTS_MAP.json","partsMapUrl":"/mika-avatar/handoff/mika-live2d/parts-map.json","partsMapSchemaUrl":"/mika-avatar/handoff/mika-live2d/parts-map.schema.json","riggingSpecFile":"RIGGING_SPEC.json","riggingSpecUrl":"/mika-avatar/handoff/mika-live2d/rigging-spec.json","riggingSpecSchemaUrl":"/mika-avatar/handoff/mika-live2d/rigging-spec.schema.json","sourceDir":"source/","editableSourceExtensions":[".cmo3",".psd",".clip",".kra"],"referenceUrls":["https://moonku44.com/live2d-psd/","https://www.live2d.com/en/learn/sample/","https://www.facebook.com/reel/908184438905522/"],"canvasRule":"front-facing sRGB source, long edge around 4000px or higher when full-body detail needs it","layerHygieneRule":"layers must be grouped by part, clearly named, non-duplicated, and cleaned for Cubism import","modelingReferenceAvatarId":"mao_pro","modelingReferenceRule":"Layered source must support mao_pro-like model-native Cubism parameters, not CSS or image overlays.","requiredChecks":[{"id":"arms-hands-separated","rule":"左右上臂、下臂、手掌需分離，能支援指歌詞、打拍子與抬手。","releaseBlocking":true},{"id":"clothes-accessories-separated","rule":"衣服片、帽子、飾品、緞帶、垂墜物需和身體分層，能接物理或姿勢控制。","releaseBlocking":true},{"id":"eyes-separated","rule":"左右眼需拆出眼白、眼球、高光、上下眼皮、睫毛與眉毛。","releaseBlocking":true},{"id":"face-base-occluded-fill","rule":"臉部底圖需補齊被頭髮遮住的區域，方便頭髮、表情與角度變形。","releaseBlocking":true},{"id":"front-facing-layered-source","rule":"正面角色來源必須是分層 PSD/CSP/KRA 或可編輯 .cmo3，不可只交單張合併圖。","releaseBlocking":true},{"id":"hair-separated","rule":"頭髮需拆前髮、側髮、後髮、髮束與可物理晃動小件。","releaseBlocking":true},{"id":"layer-hygiene","rule":"圖層需清楚命名、無重名、無無用隱藏圖層，特殊效果需整理成 Cubism 可匯入狀態。","releaseBlocking":true},{"id":"legs-shoes-separated","rule":"左右大腿、小腿、鞋子需分離，保留日後腿部與全身動作擴充空間。","releaseBlocking":true},{"id":"mao-pro-runtime-wiring","rule":"拆圖與建模需能像 mao_pro 一樣接 model3、DisplayInfo、Physics、Pose、Expressions、Motions。","releaseBlocking":true},{"id":"mouth-internals-separated","rule":"嘴巴需拆出上下唇、牙齒、口腔、舌頭或等效內部色塊，支援 a/i/u/e/o。","releaseBlocking":true}],"rejectedSourceTypes":["single merged illustration","static PNG standee","CSS mouth overlay","DOM motion overlay","uneditable placeholder source"],"partsMapRule":"PARTS_MAP.json must confirm source-layer parts for face, eyes, mouth, hair, body, arms, legs, clothes/accessories, physics targets, and pose targets before sourceProjectReady can be true.","riggingSpecRule":"RIGGING_SPEC.json must connect split source parts to model-native Cubism parameters, deformers, artMeshTargets, physics, and pose targets before Mika can replace mao_pro in LearnMore.","sourceManifestRule":"SOURCE_MANIFEST.json must inventory every source file with path, sizeBytes, sha256, editable/layered flags, producer, and source proof before sourceProjectReady can be true.","psdLayerManifestRule":"PSD_LAYER_MANIFEST.json must inventory every required Mika source layer id, group, PSD path, occluded-fill flag, mouth/physics/pose role, and Cubism-driven parameter set before sourceProjectReady can be true."},"requiredRuntimeMapContract":{"expressionMapFile":"EXPRESSION_MAP.json","motionMapFile":"MOTION_MAP.json","expressionRuntimeDir":"runtime/expressions","motionRuntimeDir":"runtime/motions","model3ReferenceRequired":true,"expressionValueRule":"each value must resolve to a non-empty runtime expression file and be declared in model3 Expressions name/file","motionValueRule":"each value must resolve to a non-empty runtime motion file and be declared in model3 Motions group/file","model3DeclarationRule":"all EXPRESSION_MAP.json and MOTION_MAP.json values must be declared in runtime/mika_live2d.model3.json"},"requiredRuntimeModelContract":{"schemaVersion":1,"avatarId":"mika_live2d","runtime":"live2d","compatibilityReferenceAvatarId":"mao_pro","requiredContractFile":"RUNTIME_MODEL_CONTRACT.json","requiredContractUrl":"/mika-avatar/handoff/mika-live2d/runtime-model-contract.json","requiredContractSchemaUrl":"/mika-avatar/handoff/mika-live2d/runtime-model-contract.schema.json","modelJson":"runtime/mika_live2d.model3.json","versionRequiredValue":3,"fileReferencesRoot":"FileReferences","mocReferenceRequired":true,"textureReferenceRequired":true,"displayInfoReferenceRequired":true,"physicsReferenceRequired":true,"poseReferenceRequired":true,"expressionReferencesRequired":true,"motionReferencesRequired":true,"displayInfoRequiredParameters":["ParamA","ParamI","ParamU","ParamE","ParamO","ParamMouthDown","ParamAngleX","ParamAngleY","ParamAngleZ","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ","ParamAllX","ParamAllY","ParamAllRotate","ParamBreath","ParamLeftShoulderUp","ParamRightShoulderUp","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamHandLA","ParamHandRA","ParamFingerL","ParamFingerR","ParamLegLA01","ParamLegLA02","ParamLegRA01","ParamLegRA02","ParamFootL","ParamFootR","ParamEyeLOpen","ParamEyeROpen","ParamEyeBallX","ParamEyeBallY","ParamEyeLSmile","ParamEyeRSmile","ParamCheek","ParamBrowLY","ParamBrowRY","ParamHairFront","ParamHairSideL","ParamHairSideR","ParamHairBack","ParamHairBackL","ParamHairBackR","ParamoHairMesh","ParamHairFrontFuwa","ParamHairSideFuwa","ParamHairBackFuwa","ParamSkirtFront","ParamSkirtSideL","ParamSkirtSideR","ParamSkirtFuwa","ParamSleeveL","ParamSleeveR"],"expressionNameRequired":true,"motionGroupNameRequired":true,"motionGroupNonEmptyRequired":true,"expressionReferencesMustExist":true,"motionReferencesMustExist":true,"physicsPoseReferencesMustExist":true,"physicsPoseReferencesMustPassSchema":true,"referenceRule":"all FileReferences paths must resolve to non-empty files under runtime/ and pass type-specific validation","textureReferenceFormatRule":"texture references must be valid PNG, JPEG, or WebP images with the required minimum texture dimensions","displayInfoFileSchemaRule":"DisplayInfo must be a .cdi3.json file with Version=3 and Parameters entries for every required Mika mouth and motion parameter","expressionNameRule":"each FileReferences.Expressions item must include a non-empty Name that is not a placeholder","motionGroupRule":"each FileReferences.Motions group name must be non-empty and not a placeholder, and each group must contain at least one motion","expressionFileSchemaRule":"expression files must be JSON objects with a non-empty Parameters array","motionFileSchemaRule":"motion files must be JSON objects with Meta and a non-empty Curves array","physicsFileSchemaRule":"declared physics files must be JSON objects with Version=3, Meta, and a non-empty PhysicsSettings array","poseFileSchemaRule":"declared pose files must be JSON objects with Groups and valid part Id values"},"sourceExportPreflight":{"tool":"tools/live2d/inspect_mika_live2d_source_export.py","command":"python3 tools/live2d/inspect_mika_live2d_source_export.py deliveries/mika-live2d/source","defaultSourceDir":"deliveries/mika-live2d/source","readyField":"ready","sourceFileReadyField":"sourceFileReady","sourceManifestConsistencyReadyField":"sourceManifestConsistency.ready","sourcePackageAcceptanceGateField":"sourcePackageAcceptanceGate","blockingField":"blockingReasons","requiredReadyFields":["sourceFileReady","sourceManifestConsistency.ready","manifestStatus.sourceProject.ready","manifestStatus.sourceManifest.ready","manifestStatus.psdLayerManifest.ready","manifestStatus.partsMap.ready","manifestStatus.riggingSpec.ready"],"requiredFileIds":["sourceProject","sourceManifest","psdLayerManifest","partsMap","riggingSpec"],"editableSourceExtensions":[".cmo3",".psd",".clip",".kra"],"requiredManifestFiles":["SOURCE_MANIFEST.json","PSD_LAYER_MANIFEST.json","PARTS_MAP.json","RIGGING_SPEC.json"],"requiredLayerSplitCheckIds":["arms-hands-separated","clothes-accessories-separated","eyes-separated","face-base-occluded-fill","front-facing-layered-source","hair-separated","layer-hygiene","legs-shoes-separated","mao-pro-runtime-wiring","mouth-internals-separated"],"rejects":["single merged illustration","static PNG standee","uneditable placeholder source","source files smaller than the minimum source project byte threshold","SOURCE_MANIFEST paths, sizeBytes, or sha256 that do not match source/ files","SOURCE_MANIFEST TODO placeholders","unconfirmed SOURCE_MANIFEST, PSD_LAYER_MANIFEST, PARTS_MAP or RIGGING_SPEC"]},"runtimeExportPreflight":{"tool":"tools/live2d/inspect_mika_live2d_runtime_export.py","command":"python3 tools/live2d/inspect_mika_live2d_runtime_export.py deliveries/mika-live2d/runtime","defaultRuntimeDir":"deliveries/mika-live2d/runtime","readyField":"ready","blockingField":"blockingReasons","requiredFileIds":["runtimeModelJson","moc3","textures","displayInfo","physics","pose","expressions","motions"],"requiredDisplayInfoParameters":["ParamA","ParamI","ParamU","ParamE","ParamO","ParamMouthDown","ParamAngleX","ParamAngleY","ParamAngleZ","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ","ParamAllX","ParamAllY","ParamAllRotate","ParamBreath","ParamLeftShoulderUp","ParamRightShoulderUp","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamHandLA","ParamHandRA","ParamFingerL","ParamFingerR","ParamLegLA01","ParamLegLA02","ParamLegRA01","ParamLegRA02","ParamFootL","ParamFootR","ParamEyeLOpen","ParamEyeROpen","ParamEyeBallX","ParamEyeBallY","ParamEyeLSmile","ParamEyeRSmile","ParamCheek","ParamBrowLY","ParamBrowRY","ParamHairFront","ParamHairSideL","ParamHairSideR","ParamHairBack","ParamHairBackL","ParamHairBackR","ParamoHairMesh","ParamHairFrontFuwa","ParamHairSideFuwa","ParamHairBackFuwa","ParamSkirtFront","ParamSkirtSideL","ParamSkirtSideR","ParamSkirtFuwa","ParamSleeveL","ParamSleeveR"],"rejects":["missing model3.json FileReferences","missing DisplayInfo a/i/u/e/o mouth parameters","missing Physics or Pose file references","unreferenced runtime files","empty or placeholder expression and motion files"]},"requiredOlvCustomModelContract":{"source":"Open-LLM-VTuber custom Live2D model workflow","referenceUrls":["https://github.com/Open-LLM-VTuber/OLV-Docker-Config/tree/main","https://blog.csdn.net/gitblog_00434/article/details/154483201"],"configMountDir":"/app/conf","live2dModelsDir":"live2d-models","runtimeDir":"live2d-models/mika_live2d/runtime","modelDictFile":"model_dict.json","modelDictRequiredEntry":{"name":"mika_live2d","url":"/live2d-models/mika_live2d/runtime/mika_live2d.model3.json","idleMotionGroupName":"Idle","emotionMapRequired":true},"characterConfigRequiredValues":{"character_config.live2d_model_name":"mika_live2d","character_config.conf_name":"mika_live2d"},"requiredRuntimeFiles":["runtime/mika_live2d.model3.json","runtime/*.moc3","runtime/*.physics3.json","runtime/*.pose3.json","runtime/textures/","runtime/expressions/","runtime/motions/"],"minimumModel3FileReferences":["Moc","Textures","Physics","Pose","Expressions","Motions"],"requiredPlacementRule":"A finished Mika delivery must be intakeable into live2d-models/mika_live2d/runtime and registered in model_dict.json with the same avatar id before LearnMore can switch from mao_pro."},"requiredParameterMapFile":"PARAMETER_MAP.json","requiredParameterDriverContract":{"schemaVersion":1,"avatarId":"mika_live2d","runtime":"live2d","compatibilityReferenceAvatarId":"mao_pro","driver":"live2d-core-parameters","requiredContractFile":"PARAMETER_DRIVER_CONTRACT.json","requiredContractUrl":"/mika-avatar/handoff/mika-live2d/parameter-driver-contract.json","requiredContractSchemaUrl":"/mika-avatar/handoff/mika-live2d/parameter-driver-contract.schema.json","requiredParameterMapFile":"PARAMETER_MAP.json","requiredParameterMapUrl":"/mika-avatar/handoff/mika-live2d/parameter-map.json","requiredParameterMapSchemaUrl":"/mika-avatar/handoff/mika-live2d/parameter-map.schema.json","forbiddenDriverModes":["dom-mouth-overlay","css-mouth-overlay","css-motion-animation"],"evidenceRule":"Every listed parameter must be present in runtime expression Parameters[].Id or runtime motion Curves[].Id before PARAMETER_MAP.json confirmedInRuntimeModel can be true.","poseRetargetContract":{"inputFile":"pose_record.json","inputSchemaFile":"docs/schemas/mika-live2d-pose-record.schema.json","inputSchemaUrl":"/mika-avatar/handoff/mika-live2d/pose-record.schema.json","sampleFile":"pose_record.sample.json","retargetTool":"tools/live2d/pose_record_to_live2d_motion.py","outputRuntimeFile":"runtime/motions/soft-dance-loop.motion3.json","outputFormat":"Cubism motion3.json parameter curves","dryRunReportUrl":"/mika-avatar/handoff/mika-live2d/pose-retarget-dry-run.json","dryRunReportMarkdownUrl":"/mika-avatar/handoff/mika-live2d/pose-retarget-dry-run.md","sampleMotionUrl":"/mika-avatar/handoff/mika-live2d/soft-dance-loop.sample.motion3.json","sampleMotionNote":"Dry-run retarget artifact for production review; not a release-ready runtime motion until the rigged Mika model exists.","sourceVideoFile":"source.mp4","sourceWorkflow":"source.mp4 -> human skeleton timeline -> pose_record.json -> model-native Live2D parameters","referenceUi":"Live2D Dancer style side-by-side source video, skeleton timeline, and full-body Live2D preview","pointFormat":"[x, y, confidence] normalized to source video frame","minimumFps":30,"requiresSynchronizedTimeline":true,"requiresFullBodyModel":true,"forbiddenFallback":"static PNG standee, CSS-only animation, or detached mouth/limb overlay","requiredSkeletonJoints":["head","neck","shoulder_L","shoulder_R","elbow_L","elbow_R","wrist_L","wrist_R","hip_L","hip_R","knee_L","knee_R","ankle_L","ankle_R"],"requiredDrivenParameters":["ParamAngleX","ParamAngleY","ParamAngleZ","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ","ParamAllX","ParamAllY","ParamAllRotate","ParamLeftShoulderUp","ParamRightShoulderUp","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamHandLA","ParamHandRA","ParamFingerL","ParamFingerR","ParamLegLA01","ParamLegLA02","ParamLegRA01","ParamLegRA02","ParamFootL","ParamFootR"],"acceptanceRule":"A recorded dance clip must visibly move head, body, shoulders, arms, and full-body pose in sync with the skeleton timeline without vertical jitter."},"mouthTargets":[{"key":"a","mapValue":"a","runtimeFile":"runtime/expressions/a.exp3.json","requiredParameters":["ParamA"],"amplitudeParameter":"ParamMouthDown","evidenceLocation":"runtime/expressions/a.exp3.json Parameters[].Id"},{"key":"i","mapValue":"i","runtimeFile":"runtime/expressions/i.exp3.json","requiredParameters":["ParamI"],"amplitudeParameter":"ParamMouthDown","evidenceLocation":"runtime/expressions/i.exp3.json Parameters[].Id"},{"key":"u","mapValue":"u","runtimeFile":"runtime/expressions/u.exp3.json","requiredParameters":["ParamU"],"amplitudeParameter":"ParamMouthDown","evidenceLocation":"runtime/expressions/u.exp3.json Parameters[].Id"},{"key":"e","mapValue":"e","runtimeFile":"runtime/expressions/e.exp3.json","requiredParameters":["ParamE"],"amplitudeParameter":"ParamMouthDown","evidenceLocation":"runtime/expressions/e.exp3.json Parameters[].Id"},{"key":"o","mapValue":"o","runtimeFile":"runtime/expressions/o.exp3.json","requiredParameters":["ParamO"],"amplitudeParameter":"ParamMouthDown","evidenceLocation":"runtime/expressions/o.exp3.json Parameters[].Id"}],"motionTargets":[{"key":"idle","mapValue":"idle","runtimeGroup":"idle","runtimeFile":"runtime/motions/idle.motion3.json","requiredParameters":["ParamAngleX","ParamAngleY","ParamAngleZ","ParamBreath"],"purpose":"base breathing and gentle head motion when music is not driving a special cue"},{"key":"greeting","mapValue":"greeting","runtimeGroup":"greeting","runtimeFile":"runtime/motions/greeting.motion3.json","requiredParameters":["ParamAngleX","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ"],"purpose":"short greeting or tap response without replacing Mika identity"},{"key":"lyric-reading","mapValue":"lyric-reading","runtimeGroup":"lyric-reading","runtimeFile":"runtime/motions/lyric-reading.motion3.json","requiredParameters":["ParamAllX","ParamAllY","ParamAllRotate","ParamAngleX","ParamAngleY"],"purpose":"reading a selected lyric line while mouth parameters handle phonemes"},{"key":"point-lyrics","mapValue":"point-lyrics","runtimeGroup":"point-lyrics","runtimeFile":"runtime/motions/point-lyrics.motion3.json","requiredParameters":["ParamLeftShoulderUp","ParamRightShoulderUp","ParamArmLA01","ParamArmRA01"],"purpose":"gesture toward the current lyric area"},{"key":"rhythm-sway","mapValue":"rhythm-sway","runtimeGroup":"rhythm-sway","runtimeFile":"runtime/motions/rhythm-sway.motion3.json","requiredParameters":["ParamBodyAngleX","ParamBodyAngleZ","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamHandLA","ParamHandRA","ParamLegLA01","ParamLegRA01","ParamFootL","ParamFootR","ParamSkirtFront","ParamSkirtFuwa","ParamSleeveL","ParamSleeveR"],"purpose":"song beat sway for tracks without bespoke choreography"},{"key":"chorus-gesture","mapValue":"chorus-gesture","runtimeGroup":"chorus-gesture","runtimeFile":"runtime/motions/chorus-gesture.motion3.json","requiredParameters":["ParamBodyAngleY","ParamRightShoulderUp","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamHandRA","ParamFingerR"],"purpose":"larger chorus hand and upper-body accent"},{"key":"soft-dance-loop","mapValue":"soft-dance-loop","runtimeGroup":"soft-dance-loop","runtimeFile":"runtime/motions/soft-dance-loop.motion3.json","requiredParameters":["ParamAngleX","ParamAngleY","ParamAngleZ","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ","ParamAllY","ParamAllRotate","ParamBreath","ParamLeftShoulderUp","ParamRightShoulderUp","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamHandLA","ParamHandRA","ParamFingerL","ParamFingerR","ParamLegLA01","ParamLegLA02","ParamLegRA01","ParamLegRA02","ParamFootL","ParamFootR","ParamHairFront","ParamHairSideL","ParamHairSideR","ParamHairBack","ParamHairBackL","ParamHairBackR","ParamoHairMesh","ParamHairFrontFuwa","ParamHairSideFuwa","ParamHairBackFuwa","ParamEyeLSmile","ParamEyeRSmile","ParamEyeLOpen","ParamEyeROpen","ParamEyeBallX","ParamEyeBallY","ParamCheek","ParamBrowLY","ParamBrowRY","ParamSkirtFront","ParamSkirtSideL","ParamSkirtSideR","ParamSkirtFuwa","ParamSleeveL","ParamSleeveR"],"purpose":"smooth loop for Mika-only choreographed songs"}]},"requiredExpressionStateContract":{"file":"RIGGING_SPEC.json","field":"expressionStateTargets","driverMode":"cubism-expression","forbiddenFallbacks":["css-overlay","dom-overlay","detached-png-layer"],"mouthAmplitudeParameter":"ParamMouthDown","releaseRule":"Every required expression state must be declared in RIGGING_SPEC.json expressionStateTargets, mapped by EXPRESSION_MAP.json, declared by model3 Expressions, and backed by expression Parameters that drive Cubism model parts instead of detached overlays.","mouthRule":"Japanese vowel expressions a/i/u/e/o must drive ParamA/ParamI/ParamU/ParamE/ParamO plus ParamMouthDown so singing and lyric reading can vary mouth shape and amplitude like mao_pro.","targets":[{"key":"a","kind":"mouth-vowel","runtimeExpressionFile":"runtime/expressions/a.exp3.json","targetRiggingGroups":["mouth"],"requiredParameterIds":["ParamA","ParamMouthDown"]},{"key":"i","kind":"mouth-vowel","runtimeExpressionFile":"runtime/expressions/i.exp3.json","targetRiggingGroups":["mouth"],"requiredParameterIds":["ParamI","ParamMouthDown"]},{"key":"u","kind":"mouth-vowel","runtimeExpressionFile":"runtime/expressions/u.exp3.json","targetRiggingGroups":["mouth"],"requiredParameterIds":["ParamU","ParamMouthDown"]},{"key":"e","kind":"mouth-vowel","runtimeExpressionFile":"runtime/expressions/e.exp3.json","targetRiggingGroups":["mouth"],"requiredParameterIds":["ParamE","ParamMouthDown"]},{"key":"o","kind":"mouth-vowel","runtimeExpressionFile":"runtime/expressions/o.exp3.json","targetRiggingGroups":["mouth"],"requiredParameterIds":["ParamO","ParamMouthDown"]},{"key":"blink","kind":"face-expression","runtimeExpressionFile":"runtime/expressions/blink.exp3.json","targetRiggingGroups":["eyes"],"requiredParameterIds":["ParamEyeLOpen","ParamEyeROpen"]},{"key":"smile","kind":"face-expression","runtimeExpressionFile":"runtime/expressions/smile.exp3.json","targetRiggingGroups":["face","eyes","mouth"],"requiredParameterIds":["ParamEyeLSmile","ParamEyeRSmile","ParamCheek","ParamA"]},{"key":"surprised","kind":"face-expression","runtimeExpressionFile":"runtime/expressions/surprised.exp3.json","targetRiggingGroups":["face","eyes","mouth"],"requiredParameterIds":["ParamBrowLY","ParamBrowRY","ParamEyeLOpen","ParamEyeROpen","ParamO"]},{"key":"thinking","kind":"face-expression","runtimeExpressionFile":"runtime/expressions/thinking.exp3.json","targetRiggingGroups":["face","eyes","body"],"requiredParameterIds":["ParamAngleX","ParamBodyAngleZ","ParamBrowLY","ParamBrowRY","ParamEyeBallX"]}]},"requiredMotionStateContract":{"file":"RIGGING_SPEC.json","field":"motionStateTargets","driverMode":"cubism-motion-parameter-curves","nativeMotionPolicy":"non-interrupting-section-aware","forbiddenFallbacks":["css-motion-animation","dom-transform-motion","detached-png-limb"],"verticalMotionLimit":{"maxParamAllYAbs":0.08,"maxRootScaleDelta":0.0,"forbidCssTransform":true,"noVerticalJitter":true},"releaseRule":"Every required motion state must be declared in RIGGING_SPEC.json motionStateTargets, mapped by MOTION_MAP.json, declared by model3 Motions, and backed by motion3 Curves that drive Cubism model parameters without CSS or DOM fallback animation.","interruptionRule":"Song-section motions must not be interrupted before minimumDurationSeconds except when switching to a higher-priority user action; gesture cooldownSeconds must be respected.","targets":[{"key":"idle","runtimeMotionFile":"runtime/motions/idle.motion3.json","motionGroup":"idle","requiredParameterIds":["ParamAngleX","ParamAngleY","ParamAngleZ","ParamBreath"],"minimumDurationSeconds":3.0,"cooldownSeconds":0.0},{"key":"greeting","runtimeMotionFile":"runtime/motions/greeting.motion3.json","motionGroup":"greeting","requiredParameterIds":["ParamAngleX","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ"],"minimumDurationSeconds":1.2,"cooldownSeconds":0.8},{"key":"lyric-reading","runtimeMotionFile":"runtime/motions/lyric-reading.motion3.json","motionGroup":"lyric-reading","requiredParameterIds":["ParamAllX","ParamAllY","ParamAllRotate","ParamAngleX","ParamAngleY"],"minimumDurationSeconds":1.0,"cooldownSeconds":0.4},{"key":"point-lyrics","runtimeMotionFile":"runtime/motions/point-lyrics.motion3.json","motionGroup":"point-lyrics","requiredParameterIds":["ParamLeftShoulderUp","ParamRightShoulderUp","ParamArmLA01","ParamArmRA01"],"minimumDurationSeconds":1.0,"cooldownSeconds":0.8},{"key":"rhythm-sway","runtimeMotionFile":"runtime/motions/rhythm-sway.motion3.json","motionGroup":"rhythm-sway","requiredParameterIds":["ParamBodyAngleX","ParamBodyAngleZ","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamHandLA","ParamHandRA","ParamLegLA01","ParamLegRA01","ParamFootL","ParamFootR","ParamSkirtFront","ParamSkirtFuwa","ParamSleeveL","ParamSleeveR"],"minimumDurationSeconds":4.0,"cooldownSeconds":0.0},{"key":"chorus-gesture","runtimeMotionFile":"runtime/motions/chorus-gesture.motion3.json","motionGroup":"chorus-gesture","requiredParameterIds":["ParamBodyAngleY","ParamRightShoulderUp","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamHandRA","ParamFingerR"],"minimumDurationSeconds":2.0,"cooldownSeconds":1.2},{"key":"soft-dance-loop","runtimeMotionFile":"runtime/motions/soft-dance-loop.motion3.json","motionGroup":"soft-dance-loop","requiredParameterIds":["ParamAngleX","ParamAngleY","ParamAngleZ","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ","ParamAllY","ParamAllRotate","ParamBreath","ParamLeftShoulderUp","ParamRightShoulderUp","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamHandLA","ParamHandRA","ParamFingerL","ParamFingerR","ParamLegLA01","ParamLegLA02","ParamLegRA01","ParamLegRA02","ParamFootL","ParamFootR","ParamHairFront","ParamHairSideL","ParamHairSideR","ParamHairBack","ParamHairBackL","ParamHairBackR","ParamoHairMesh","ParamHairFrontFuwa","ParamHairSideFuwa","ParamHairBackFuwa","ParamEyeLSmile","ParamEyeRSmile","ParamEyeLOpen","ParamEyeROpen","ParamEyeBallX","ParamEyeBallY","ParamCheek","ParamBrowLY","ParamBrowRY","ParamSkirtFront","ParamSkirtSideL","ParamSkirtSideR","ParamSkirtFuwa","ParamSleeveL","ParamSleeveR"],"minimumDurationSeconds":8.0,"cooldownSeconds":0.0}]},"requiredMouthParameters":{"a":"ParamA","i":"ParamI","u":"ParamU","e":"ParamE","o":"ParamO","amplitude":"ParamMouthDown"},"requiredMotionParameters":["ParamAngleX","ParamAngleY","ParamAngleZ","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ","ParamAllX","ParamAllY","ParamAllRotate","ParamBreath","ParamLeftShoulderUp","ParamRightShoulderUp","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamHandLA","ParamHandRA","ParamFingerL","ParamFingerR","ParamLegLA01","ParamLegLA02","ParamLegRA01","ParamLegRA02","ParamFootL","ParamFootR","ParamEyeLOpen","ParamEyeROpen","ParamEyeBallX","ParamEyeBallY","ParamEyeLSmile","ParamEyeRSmile","ParamCheek","ParamBrowLY","ParamBrowRY","ParamHairFront","ParamHairSideL","ParamHairSideR","ParamHairBack","ParamHairBackL","ParamHairBackR","ParamoHairMesh","ParamHairFrontFuwa","ParamHairSideFuwa","ParamHairBackFuwa","ParamSkirtFront","ParamSkirtSideL","ParamSkirtSideR","ParamSkirtFuwa","ParamSleeveL","ParamSleeveR"],"requiredParameterContract":{"file":"PARAMETER_MAP.json","url":"/mika-avatar/handoff/mika-live2d/parameter-map.json","schemaUrl":"/mika-avatar/handoff/mika-live2d/parameter-map.schema.json","driver":"live2d-core-parameters","confirmedInRuntimeModelField":"confirmedInRuntimeModel","confirmedInRuntimeModelRequiredValue":true,"cssOverlayAllowed":false,"cssMotionAllowed":false,"mouth":{"a":"ParamA","i":"ParamI","u":"ParamU","e":"ParamE","o":"ParamO","amplitude":"ParamMouthDown"},"motion":["ParamAngleX","ParamAngleY","ParamAngleZ","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ","ParamAllX","ParamAllY","ParamAllRotate","ParamBreath","ParamLeftShoulderUp","ParamRightShoulderUp","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamHandLA","ParamHandRA","ParamFingerL","ParamFingerR","ParamLegLA01","ParamLegLA02","ParamLegRA01","ParamLegRA02","ParamFootL","ParamFootR","ParamEyeLOpen","ParamEyeROpen","ParamEyeBallX","ParamEyeBallY","ParamEyeLSmile","ParamEyeRSmile","ParamCheek","ParamBrowLY","ParamBrowRY","ParamHairFront","ParamHairSideL","ParamHairSideR","ParamHairBack","ParamHairBackL","ParamHairBackR","ParamoHairMesh","ParamHairFrontFuwa","ParamHairSideFuwa","ParamHairBackFuwa","ParamSkirtFront","ParamSkirtSideL","ParamSkirtSideR","ParamSkirtFuwa","ParamSleeveL","ParamSleeveR"],"runtimeParameterEvidenceRule":"when confirmedInRuntimeModel=true, every mouth and motion parameter in PARAMETER_MAP.json must appear in runtime expression Parameters or motion Curves"},"requiredLicenseContract":{"licenseFile":"LICENSE.md","artSourcesFile":"ART_SOURCES.md","attributionManifestFile":"ATTRIBUTION_MANIFEST.json","requiredGrants":{"commercialUse":"可商用：yes","publicWebUse":"可公開網站使用：yes","learnMoreUse":"可用於 LearnMore：yes","sourceProof":"來源或授權 URL，或明確標示內部原創/自製"},"requiredArtSourceFields":["角色立繪","分層源檔","貼圖","製作者","素材來源 URL 或內部原創聲明"],"requiredAttributionLocationKeys":["mika-handoff","learnmore-site-notes"],"attributionVisibilityRule":"attribution locations must be publicly visible on Mika handoff and LearnMore/site notes","placeholderMarkersRejected":["TODO","待填寫","請填寫","<填寫"],"acceptedSourceProof":["http://","https://","內部原創","自製","original"]},"acceptanceChecks":["idle-breathing","lyric-mouth-a-i-u-e-o","lyric-reading-expression","point-lyrics-gesture","rhythm-sway","chorus-gesture","no-vertical-jitter","learnmore-mobile-framing"],"requiredAcceptanceEvidenceContract":{"visualQaFile":"VISUAL_QA.json","acceptanceChecklistFile":"ACCEPTANCE_CHECKLIST.md","acceptanceMediaDir":"acceptance/","requiredVisualQaFields":["schemaVersion","reviewer","reviewedMedia","checks","blockingReasons","notes"],"reviewerRule":"reviewer must be non-empty and not a placeholder","blockingReasonsRule":"blockingReasons must be an empty array after approval","notesRule":"notes must be non-empty and not a placeholder","reviewedMediaRequired":true,"reviewedMediaRule":"VISUAL_QA.json reviewedMedia must list existing non-empty acceptance media files","requiredReviewedMediaTargets":["desktop","mobile"],"reviewedMediaTargetRule":"reviewedMedia must include both desktop and mobile LearnMore acceptance evidence","mediaFormatRule":"reviewedMedia files must have a valid image/video container signature matching the file extension","minimumImageDimensions":{"width":320,"height":240},"imageDimensionRule":"image reviewedMedia must be parseable and at least 320x240 pixels","acceptedMediaExtensions":[".png",".jpg",".jpeg",".webp",".mp4",".webm",".mov"],"checklistRule":"all required acceptance checks must be checked with [x]","checklistEvidenceRule":"each checked acceptance checklist item must include an existing acceptance/ media reference"},"requiredDeliveryCommands":["python3 tools/live2d/inspect_mika_live2d_source_export.py deliveries/mika-live2d/source --no-fail","python3 tools/live2d/inspect_mika_live2d_runtime_export.py deliveries/mika-live2d/runtime --no-fail","python3 tools/live2d/validate_mika_live2d_pose_record.py deliveries/mika-live2d/pose_record.sample.json","python3 tools/live2d/pose_record_to_live2d_motion.py deliveries/mika-live2d/pose_record.sample.json --output reports/mika-live2d-soft-dance-loop.sample.motion3.json --report-output reports/mika-live2d-pose-retarget-dry-run.json --markdown-output reports/mika-live2d-pose-retarget-dry-run.md","python3 tools/live2d/validate_mika_live2d_delivery.py deliveries/mika-live2d","python3 tools/live2d/check_mika_live2d_delivery_readiness.py deliveries/mika-live2d --no-fail"],"requiredDeliveryDir":"deliveries/mika-live2d","requiredRuntimeDir":"live2d-models/mika_live2d/runtime","sourceProductionRequest":"deliveries/mika-live2d/MODEL_PRODUCTION_REQUEST.md","statusUrl":"/mika-avatar/api/live2d/mika/status","deliveryReadinessUrl":"/mika-avatar/api/live2d/mika/delivery-readiness","intakeReadinessUrl":"/mika-avatar/api/live2d/mika/intake-readiness","goLiveReadinessUrl":"/mika-avatar/api/live2d/mika/go-live-readiness","learnMoreContractSchemaUrl":"/mika-avatar/handoff/mika-live2d/learnmore-contract.schema.json","intakeReadyForApply":true,"intakeApplied":false,"intakeBlockingReasons":[],"intakeCopyPlan":[{"id":"runtime","source":"/app/deliveries/mika-live2d/runtime","destination":"/app/live2d-models/mika_live2d/runtime","mode":"replace-dir"},{"id":"source","source":"/app/deliveries/mika-live2d/source","destination":"/app/deliveries/mika-live2d/source","mode":"replace-dir"},{"id":"acceptance","source":"/app/deliveries/mika-live2d/acceptance","destination":"/app/deliveries/mika-live2d/acceptance","mode":"replace-dir"},{"id":"license","source":"/app/deliveries/mika-live2d/LICENSE.md","destination":"/app/docs/licenses/mika-live2d.md","mode":"copy-file"},{"id":"artSources","source":"/app/deliveries/mika-live2d/ART_SOURCES.md","destination":"/app/docs/licenses/mika-live2d-art-sources.md","mode":"copy-file"},{"id":"attributionManifest","source":"/app/deliveries/mika-live2d/ATTRIBUTION_MANIFEST.json","destination":"/app/docs/licenses/mika-live2d-attribution.json","mode":"copy-file"},{"id":"psdLayerSpec","source":"/app/deliveries/mika-live2d/PSD_LAYER_SPEC.md","destination":"/app/deliveries/mika-live2d/PSD_LAYER_SPEC.md","mode":"copy-file"},{"id":"expressionMap","source":"/app/deliveries/mika-live2d/EXPRESSION_MAP.json","destination":"/app/deliveries/mika-live2d/EXPRESSION_MAP.json","mode":"copy-file"},{"id":"motionMap","source":"/app/deliveries/mika-live2d/MOTION_MAP.json","destination":"/app/deliveries/mika-live2d/MOTION_MAP.json","mode":"copy-file"},{"id":"parameterMap","source":"/app/deliveries/mika-live2d/PARAMETER_MAP.json","destination":"/app/deliveries/mika-live2d/PARAMETER_MAP.json","mode":"copy-file"},{"id":"partsMap","source":"/app/deliveries/mika-live2d/PARTS_MAP.json","destination":"/app/deliveries/mika-live2d/PARTS_MAP.json","mode":"copy-file"},{"id":"sourceManifest","source":"/app/deliveries/mika-live2d/SOURCE_MANIFEST.json","destination":"/app/deliveries/mika-live2d/SOURCE_MANIFEST.json","mode":"copy-file"},{"id":"psdLayerManifest","source":"/app/deliveries/mika-live2d/PSD_LAYER_MANIFEST.json","destination":"/app/deliveries/mika-live2d/PSD_LAYER_MANIFEST.json","mode":"copy-file"},{"id":"attributionManifestDelivery","source":"/app/deliveries/mika-live2d/ATTRIBUTION_MANIFEST.json","destination":"/app/deliveries/mika-live2d/ATTRIBUTION_MANIFEST.json","mode":"copy-file"},{"id":"visualQa","source":"/app/deliveries/mika-live2d/VISUAL_QA.json","destination":"/app/deliveries/mika-live2d/VISUAL_QA.json","mode":"copy-file"},{"id":"acceptanceChecklist","source":"/app/deliveries/mika-live2d/ACCEPTANCE_CHECKLIST.md","destination":"/app/deliveries/mika-live2d/ACCEPTANCE_CHECKLIST.md","mode":"copy-file"},{"id":"layerSplitChecklist","source":"/app/deliveries/mika-live2d/LAYER_SPLIT_CHECKLIST.md","destination":"/app/deliveries/mika-live2d/LAYER_SPLIT_CHECKLIST.md","mode":"copy-file"}],"intakeReadiness":{"schemaVersion":1,"avatarId":"mika_live2d","runtime":"live2d","deliveryDir":"/app/deliveries/mika-live2d","rootDir":"/app","apply":false,"applied":false,"readyForApply":true,"deliveryValidation":{"schemaVersion":1,"avatarId":"mika_live2d","runtime":"live2d","deliveryDir":"/app/deliveries/mika-live2d","readyForIntake":true,"filePlanStatus":[{"id":"runtimeModelJson","path":"runtime/mika_live2d.model3.json","required":true,"description":"Live2D model3.json runtime entry.","present":true,"ready":true,"blockingReasons":[]},{"id":"moc3","path":"runtime/*.moc3","required":true,"description":"Live2D Cubism moc3 model.","present":true,"ready":true,"blockingReasons":[]},{"id":"textures","path":"runtime/textures/","required":true,"description":"Runtime texture atlas files.","present":true,"ready":true,"blockingReasons":[]},{"id":"displayInfo","path":"runtime/*.cdi3.json","required":true,"description":"Cubism DisplayInfo file listing model-native parameters like mao_pro.","present":true,"ready":true,"blockingReasons":[]},{"id":"physics","path":"runtime/*.physics3.json","required":true,"description":"Cubism Physics file for hair, accessories, and natural secondary motion.","present":true,"ready":true,"blockingReasons":[]},{"id":"pose","path":"runtime/*.pose3.json","required":true,"description":"Cubism Pose file for model part visibility and pose switching like mao_pro.","present":true,"ready":true,"blockingReasons":[]},{"id":"expressions","path":"runtime/expressions/","required":true,"description":"Model-native Cubism expression files for vowels and face states.","present":true,"ready":true,"blockingReasons":[]},{"id":"motions","path":"runtime/motions/","required":true,"description":"Motion files for idle, lyric reading, gestures, and rhythm movement.","present":true,"ready":true,"blockingReasons":[]},{"id":"sourceProject","path":"source/","required":true,"description":"Editable Cubism source and layered art source.","present":true,"ready":true,"blockingReasons":[]},{"id":"deliveryManifest","path":"DELIVERY_MANIFEST.json","required":true,"description":"Machine-readable delivery manifest.","present":true,"ready":true,"blockingReasons":[]},{"id":"modelProductionRequest","path":"MODEL_PRODUCTION_REQUEST.md","required":true,"description":"Production request and acceptance contract.","present":true,"ready":true,"blockingReasons":[]},{"id":"psdLayerSpec","path":"PSD_LAYER_SPEC.md","required":true,"description":"PSD/source layer split production specification.","present":true,"ready":true,"blockingReasons":[]},{"id":"sourceManifest","path":"SOURCE_MANIFEST.json","required":true,"description":"Machine-readable source file inventory with provenance and sha256 evidence.","present":true,"ready":true,"blockingReasons":[]},{"id":"psdLayerManifest","path":"PSD_LAYER_MANIFEST.json","required":true,"description":"Machine-readable per-layer source contract proving Mika is split for Cubism rigging.","present":true,"ready":true,"blockingReasons":[]},{"id":"partsMap","path":"PARTS_MAP.json","required":true,"description":"Machine-readable source part map proving mao_pro-like split parts.","present":true,"ready":true,"blockingReasons":[]},{"id":"riggingSpec","path":"RIGGING_SPEC.json","required":true,"description":"Machine-readable rigging target spec connecting split source parts to model-native parameters.","present":true,"ready":true,"blockingReasons":[]},{"id":"license","path":"LICENSE.md","required":true,"description":"Model, art, texture, and tool license notes with commercial, public web, and LearnMore usage grants.","present":true,"ready":true,"blockingReasons":[]},{"id":"artSources","path":"ART_SOURCES.md","required":true,"description":"Source notes for art, textures, generated inputs, references, and producer provenance.","present":true,"ready":true,"blockingReasons":[]},{"id":"attributionManifest","path":"ATTRIBUTION_MANIFEST.json","required":true,"description":"Machine-readable license grants, attribution text, and site display locations.","present":true,"ready":true,"blockingReasons":[]},{"id":"expressionMap","path":"EXPRESSION_MAP.json","required":true,"description":"Mika vowel/expression key to Live2D expression/motion mapping.","present":true,"ready":true,"blockingReasons":[]},{"id":"motionMap","path":"MOTION_MAP.json","required":true,"description":"LearnMore action to Live2D motion group mapping.","present":true,"ready":true,"blockingReasons":[]},{"id":"parameterMap","path":"PARAMETER_MAP.json","required":true,"description":"Live2D model-native mouth and motion parameter contract.","present":true,"ready":true,"blockingReasons":[]},{"id":"parameterDriverContract","path":"PARAMETER_DRIVER_CONTRACT.json","required":true,"description":"Machine-readable mouth and motion parameter driver contract.","present":true,"ready":true,"blockingReasons":[]},{"id":"runtimeModelContract","path":"RUNTIME_MODEL_CONTRACT.json","required":true,"description":"Machine-readable runtime model3/FileReferences contract.","present":true,"ready":true,"blockingReasons":[]},{"id":"runtimeExportManifest","path":"RUNTIME_EXPORT_MANIFEST.json","required":true,"description":"Machine-readable inventory of the actual Cubism runtime export files.","present":true,"ready":true,"blockingReasons":[]},{"id":"visualQa","path":"VISUAL_QA.json","required":true,"description":"Manual visual quality approval.","present":true,"ready":true,"blockingReasons":[]},{"id":"acceptanceChecklist","path":"ACCEPTANCE_CHECKLIST.md","required":true,"description":"Desktop/mobile LearnMore acceptance checklist.","present":true,"ready":true,"blockingReasons":[]},{"id":"layerSplitChecklist","path":"LAYER_SPLIT_CHECKLIST.md","required":true,"description":"PSD/source layer split checklist required for mao_pro-like model-native motion.","present":true,"ready":true,"blockingReasons":[]},{"id":"acceptanceMedia","path":"acceptance/","required":true,"description":"Screenshots or video proving the model in LearnMore.","present":true,"ready":true,"blockingReasons":[]}],"filePlanCount":29,"blockingReasons":[],"blockingReasonCount":0},"deliveryFilePlanSummary":{"totalCount":29,"presentCount":29,"readyCount":29,"missingCount":0,"blockedCount":0,"presentIds":["runtimeModelJson","moc3","textures","displayInfo","physics","pose","expressions","motions","sourceProject","deliveryManifest","modelProductionRequest","psdLayerSpec","sourceManifest","psdLayerManifest","partsMap","riggingSpec","license","artSources","attributionManifest","expressionMap","motionMap","parameterMap","parameterDriverContract","runtimeModelContract","runtimeExportManifest","visualQa","acceptanceChecklist","layerSplitChecklist","acceptanceMedia"],"readyIds":["runtimeModelJson","moc3","textures","displayInfo","physics","pose","expressions","motions","sourceProject","deliveryManifest","modelProductionRequest","psdLayerSpec","sourceManifest","psdLayerManifest","partsMap","riggingSpec","license","artSources","attributionManifest","expressionMap","motionMap","parameterMap","parameterDriverContract","runtimeModelContract","runtimeExportManifest","visualQa","acceptanceChecklist","layerSplitChecklist","acceptanceMedia"],"missingIds":[],"blockedIds":[]},"deliveryMilestoneSummary":[{"id":"runtime","label":"Live2D runtime export","fileIds":["runtimeModelJson","moc3","textures","displayInfo","physics","pose","runtimeModelContract","runtimeExportManifest"],"ready":true,"totalCount":8,"presentCount":8,"readyCount":8,"missingCount":0,"blockedCount":0,"readyIds":["runtimeModelJson","moc3","textures","displayInfo","physics","pose","runtimeModelContract","runtimeExportManifest"],"missingIds":[],"blockedIds":[],"blockingReasons":[],"blockingReasonCount":0},{"id":"source","label":"Layered source and part map","fileIds":["sourceProject","sourceManifest","psdLayerManifest","partsMap","riggingSpec"],"ready":true,"totalCount":5,"presentCount":5,"readyCount":5,"missingCount":0,"blockedCount":0,"readyIds":["sourceProject","sourceManifest","psdLayerManifest","partsMap","riggingSpec"],"missingIds":[],"blockedIds":[],"blockingReasons":[],"blockingReasonCount":0},{"id":"expressions","label":"Model-native expressions","fileIds":["expressions","expressionMap"],"ready":true,"totalCount":2,"presentCount":2,"readyCount":2,"missingCount":0,"blockedCount":0,"readyIds":["expressions","expressionMap"],"missingIds":[],"blockedIds":[],"blockingReasons":[],"blockingReasonCount":0},{"id":"motions","label":"Model-native motions","fileIds":["motions","motionMap"],"ready":true,"totalCount":2,"presentCount":2,"readyCount":2,"missingCount":0,"blockedCount":0,"readyIds":["motions","motionMap"],"missingIds":[],"blockedIds":[],"blockingReasons":[],"blockingReasonCount":0},{"id":"parameters","label":"Mao-pro-compatible parameter map","fileIds":["parameterMap","parameterDriverContract"],"ready":true,"totalCount":2,"presentCount":2,"readyCount":2,"missingCount":0,"blockedCount":0,"readyIds":["parameterMap","parameterDriverContract"],"missingIds":[],"blockedIds":[],"blockingReasons":[],"blockingReasonCount":0},{"id":"license","label":"License, source, and attribution","fileIds":["license","artSources","attributionManifest"],"ready":true,"totalCount":3,"presentCount":3,"readyCount":3,"missingCount":0,"blockedCount":0,"readyIds":["license","artSources","attributionManifest"],"missingIds":[],"blockedIds":[],"blockingReasons":[],"blockingReasonCount":0},{"id":"acceptance","label":"Desktop and mobile acceptance","fileIds":["visualQa","acceptanceChecklist","acceptanceMedia"],"ready":true,"totalCount":3,"presentCount":3,"readyCount":3,"missingCount":0,"blockedCount":0,"readyIds":["visualQa","acceptanceChecklist","acceptanceMedia"],"missingIds":[],"blockedIds":[],"blockingReasons":[],"blockingReasonCount":0}],"nextMilestoneId":"","copyPlan":[{"id":"runtime","source":"/app/deliveries/mika-live2d/runtime","destination":"/app/live2d-models/mika_live2d/runtime","mode":"replace-dir"},{"id":"source","source":"/app/deliveries/mika-live2d/source","destination":"/app/deliveries/mika-live2d/source","mode":"replace-dir"},{"id":"acceptance","source":"/app/deliveries/mika-live2d/acceptance","destination":"/app/deliveries/mika-live2d/acceptance","mode":"replace-dir"},{"id":"license","source":"/app/deliveries/mika-live2d/LICENSE.md","destination":"/app/docs/licenses/mika-live2d.md","mode":"copy-file"},{"id":"artSources","source":"/app/deliveries/mika-live2d/ART_SOURCES.md","destination":"/app/docs/licenses/mika-live2d-art-sources.md","mode":"copy-file"},{"id":"attributionManifest","source":"/app/deliveries/mika-live2d/ATTRIBUTION_MANIFEST.json","destination":"/app/docs/licenses/mika-live2d-attribution.json","mode":"copy-file"},{"id":"psdLayerSpec","source":"/app/deliveries/mika-live2d/PSD_LAYER_SPEC.md","destination":"/app/deliveries/mika-live2d/PSD_LAYER_SPEC.md","mode":"copy-file"},{"id":"expressionMap","source":"/app/deliveries/mika-live2d/EXPRESSION_MAP.json","destination":"/app/deliveries/mika-live2d/EXPRESSION_MAP.json","mode":"copy-file"},{"id":"motionMap","source":"/app/deliveries/mika-live2d/MOTION_MAP.json","destination":"/app/deliveries/mika-live2d/MOTION_MAP.json","mode":"copy-file"},{"id":"parameterMap","source":"/app/deliveries/mika-live2d/PARAMETER_MAP.json","destination":"/app/deliveries/mika-live2d/PARAMETER_MAP.json","mode":"copy-file"},{"id":"partsMap","source":"/app/deliveries/mika-live2d/PARTS_MAP.json","destination":"/app/deliveries/mika-live2d/PARTS_MAP.json","mode":"copy-file"},{"id":"sourceManifest","source":"/app/deliveries/mika-live2d/SOURCE_MANIFEST.json","destination":"/app/deliveries/mika-live2d/SOURCE_MANIFEST.json","mode":"copy-file"},{"id":"psdLayerManifest","source":"/app/deliveries/mika-live2d/PSD_LAYER_MANIFEST.json","destination":"/app/deliveries/mika-live2d/PSD_LAYER_MANIFEST.json","mode":"copy-file"},{"id":"attributionManifestDelivery","source":"/app/deliveries/mika-live2d/ATTRIBUTION_MANIFEST.json","destination":"/app/deliveries/mika-live2d/ATTRIBUTION_MANIFEST.json","mode":"copy-file"},{"id":"visualQa","source":"/app/deliveries/mika-live2d/VISUAL_QA.json","destination":"/app/deliveries/mika-live2d/VISUAL_QA.json","mode":"copy-file"},{"id":"acceptanceChecklist","source":"/app/deliveries/mika-live2d/ACCEPTANCE_CHECKLIST.md","destination":"/app/deliveries/mika-live2d/ACCEPTANCE_CHECKLIST.md","mode":"copy-file"},{"id":"layerSplitChecklist","source":"/app/deliveries/mika-live2d/LAYER_SPLIT_CHECKLIST.md","destination":"/app/deliveries/mika-live2d/LAYER_SPLIT_CHECKLIST.md","mode":"copy-file"}],"copied":[],"skipped":[],"modelDict":{"path":"/app/model_dict.json","present":true,"registered":true,"entry":{"name":"mika_live2d","displayName":"Mika","description":"LearnMore formal Mika Live2D model.","url":"/mika-avatar/live2d-models/mika_live2d/runtime/mika_live2d.model3.json","kScale":0.5,"initialXshift":0,"initialYshift":0,"kXOffset":1150,"idleMotionGroupName":"idle","emotionMap":{"neutral":"blink","joy":"smile","surprise":"surprised","thinking":"thinking"},"tapMotions":{"HitAreaHead":{"greeting":1},"HitAreaBody":{"rhythm-sway":1}}}},"registeredModelDict":false,"blockingReasons":[],"blockingReasonCount":0,"nextActions":["確認 copyPlan 後加上 --apply，正式寫入 runtime、授權、驗收資料並註冊 model_dict.json"]},"learnMorePromotionGate":{"targetAvatarId":"mika_live2d","targetRuntime":"live2d","statusUrl":"/mika-avatar/api/live2d/mika/status","deliveryReadinessUrl":"/mika-avatar/api/live2d/mika/delivery-readiness","requiredTrueFields":["readyForLearnMore","deliveryReady","intakeReadyForApply","olvCustomLive2dReady"],"blockingFields":["blockingReasons","deliveryBlockingReasons","intakeBlockingReasons","olvCustomLive2dBlockingReasons","remainingProductionQueueIds"],"currentDefaultAvatarId":"mao_pro","fallbackAvatarId":"mao_pro","switchOnlyWhen":"readyForLearnMore=true and deliveryReady=true and intakeReadyForApply=true and olvCustomLive2dReady=true"},"postDeliveryIntake":{"steps":["Extract the returned Mika Live2D delivery into deliveries/mika-live2d.","Run the source export preflight against deliveries/mika-live2d/source before full intake.","Run the runtime export preflight against deliveries/mika-live2d/runtime before full intake.","Run delivery validation and readiness checks.","Copy approved runtime files into live2d-models/mika_live2d/runtime.","Register mika_live2d in model_dict.json only after runtime files pass validation.","Run full core verification and LearnMore acceptance before changing LearnMore default."],"commands":["python3 tools/live2d/inspect_mika_live2d_source_export.py deliveries/mika-live2d/source","python3 tools/live2d/inspect_mika_live2d_runtime_export.py deliveries/mika-live2d/runtime","python3 tools/live2d/validate_mika_live2d_delivery.py deliveries/mika-live2d","python3 tools/live2d/check_mika_live2d_delivery_readiness.py deliveries/mika-live2d --no-fail","python3 tools/live2d/intake_mika_live2d_delivery.py deliveries/mika-live2d --no-fail","python3 tools/live2d/intake_mika_live2d_delivery.py deliveries/mika-live2d --apply","python3 tools/vrm/test_mika_live2d_status.py","bash scripts/verify_mika_avatar_core.sh"]},"blockingPromotionNotice":"Do not promote mika_live2d or switch LearnMore away from mao_pro until readyForLearnMore, deliveryReady, intakeReadyForApply, and olvCustomLive2dReady are all true.","sourceExportCurrentPreflightUrl":"/mika-avatar/api/live2d/mika/source-export-preflight","sourceExportCurrentPreflight":{"schemaVersion":1,"url":"/mika-avatar/api/live2d/mika/source-export-preflight","tool":"tools/live2d/inspect_mika_live2d_source_export.py","sourceDir":"/app/deliveries/mika-live2d/source","deliveryDir":"/app/deliveries/mika-live2d","ready":true,"sourceFileReady":true,"sourceFiles":[{"path":"source/mika-live2d-source-draft.psd","extension":".psd","sizeBytes":122186175,"ready":true,"blockingReasons":[]}],"sourceFileCount":1,"sourceFileExtensions":[".psd"],"editableSourceExtensions":[".clip",".cmo3",".kra",".psd"],"minimumSourceProjectBytes":1024,"sourceManifestConsistency":{"ready":true,"manifestPath":"/app/deliveries/mika-live2d/SOURCE_MANIFEST.json","present":true,"confirmedAgainstSourceProject":true,"confirmedLayerSplit":true,"confirmedPartsMap":true,"declaredFileCount":1,"actualSourceFileCount":1,"declaredFilePaths":["source/mika-live2d-source-draft.psd"],"actualSourceFilePaths":["source/mika-live2d-source-draft.psd"],"missingDeclaredFiles":[],"undeclaredSourceFiles":[],"placeholderFields":[],"placeholderFieldCount":0,"sizeMismatches":[],"sha256Mismatches":[],"blockingReasons":[]},"sourcePackageAcceptanceGate":{"ready":true,"requiredReadyFields":["sourceFileReady","sourceManifestConsistency.ready","manifestStatus.sourceProject.ready","manifestStatus.sourceManifest.ready","manifestStatus.psdLayerManifest.ready","manifestStatus.partsMap.ready","manifestStatus.riggingSpec.ready"],"requiredOutputs":["editable source project under deliveries/mika-live2d/source","SOURCE_MANIFEST.json with real sizeBytes and sha256","PSD_LAYER_MANIFEST.json confirmed against source project","PARTS_MAP.json confirmed against source project","RIGGING_SPEC.json confirmed against source project"]},"manifestStatus":[{"id":"sourceProject","present":true,"ready":true,"path":"source/","blockingReasons":[]},{"id":"sourceManifest","present":true,"ready":true,"path":"SOURCE_MANIFEST.json","blockingReasons":[]},{"id":"psdLayerManifest","present":true,"ready":true,"path":"PSD_LAYER_MANIFEST.json","blockingReasons":[]},{"id":"partsMap","present":true,"ready":true,"path":"PARTS_MAP.json","blockingReasons":[]},{"id":"riggingSpec","present":true,"ready":true,"path":"RIGGING_SPEC.json","blockingReasons":[]}],"requiredFileIds":["sourceProject","sourceManifest","psdLayerManifest","partsMap","riggingSpec"],"missingIds":[],"blockedIds":[],"requiredLayerSplitCheckIds":["arms-hands-separated","clothes-accessories-separated","eyes-separated","face-base-occluded-fill","front-facing-layered-source","hair-separated","layer-hygiene","legs-shoes-separated","mao-pro-runtime-wiring","mouth-internals-separated"],"rejectedSourceTypes":["single merged illustration","static PNG standee","CSS mouth overlay","DOM motion overlay","uneditable placeholder source"],"blockingReasons":[],"blockingReasonCount":0,"nextActions":[]},"sourceExportCurrentReady":true,"sourceExportCurrentSourceFileReady":true,"sourceExportCurrentMissingIds":[],"sourceExportCurrentBlockedIds":[],"sourceExportCurrentBlockingReasons":[],"runtimeExportCurrentPreflightUrl":"/mika-avatar/api/live2d/mika/runtime-export-preflight","runtimeExportCurrentPreflight":{"schemaVersion":1,"tool":"tools/live2d/inspect_mika_live2d_runtime_export.py","url":"/mika-avatar/api/live2d/mika/runtime-export-preflight","runtimeDir":"/app/deliveries/mika-live2d/runtime","ready":true,"fileGroupReady":true,"fileStatus":[{"id":"runtimeModelJson","pattern":"mika_live2d.model3.json","present":true,"count":1,"files":["mika_live2d.model3.json"]},{"id":"moc3","pattern":"*.moc3","present":true,"count":1,"files":["mika_live2d.moc3"]},{"id":"textures","pattern":"textures/*.{png,jpg,jpeg,webp}","present":true,"count":1,"files":["textures/texture_00.png"]},{"id":"displayInfo","pattern":"*.cdi3.json","present":true,"count":1,"files":["mika_live2d.cdi3.json"]},{"id":"physics","pattern":"*.physics3.json","present":true,"count":1,"files":["mika_live2d.physics3.json"]},{"id":"pose","pattern":"*.pose3.json","present":true,"count":1,"files":["mika_live2d.pose3.json"]},{"id":"expressions","pattern":"expressions/*.exp3.json","present":true,"count":9,"files":["expressions/a.exp3.json","expressions/blink.exp3.json","expressions/e.exp3.json","expressions/i.exp3.json","expressions/o.exp3.json","expressions/smile.exp3.json","expressions/surprised.exp3.json","expressions/thinking.exp3.json","expressions/u.exp3.json"]},{"id":"motions","pattern":"motions/*.motion3.json","present":true,"count":7,"files":["motions/chorus-gesture.motion3.json","motions/greeting.motion3.json","motions/idle.motion3.json","motions/lyric-reading.motion3.json","motions/point-lyrics.motion3.json","motions/rhythm-sway.motion3.json","motions/soft-dance-loop.motion3.json"]}],"missingIds":[],"model3ReferenceConsistency":{"ready":true,"path":"mika_live2d.model3.json","present":true,"version":3,"fileReferencesPresent":true,"requiredReferenceKeys":["Moc","Textures","DisplayInfo","Physics","Pose","Expressions","Motions"],"presentReferenceKeys":["DisplayInfo","Expressions","Moc","Motions","Physics","Pose","Textures"],"missingReferenceKeys":[],"expressionReferenceCount":9,"motionGroupCount":7,"textureReferenceCount":1,"blockingReasons":[]},"runtimeFileQuality":{"ready":true,"formalCubismExportReady":true,"model3":{"path":"mika_live2d.model3.json","present":true,"hasMikaRuntimeScaffold":false,"placeholder":null,"runtimeReady":null,"sourceConfirmed":null,"releaseReady":null,"learnMoreDefaultUntilReady":null,"blockingReasons":[]},"moc3Files":[{"path":"mika_live2d.moc3","sizeBytes":9728,"magic":"4d4f4333","magicAscii":"MOC3","magicValid":true,"formalSizeReady":true,"formalCubismBinary":true,"minimumBytes":1024,"blockingReasons":[]}],"textureFiles":[{"path":"textures/texture_00.png","sizeBytes":428613,"width":1024,"height":1024,"signatureValid":true,"deliveryMinimumReady":true,"formalMinimumReady":true,"blockingReasons":[]}],"scaffoldMarkerFileCount":0,"scaffoldMarkerFiles":[],"minimumTextureDimensions":{"delivery":{"width":512,"height":512},"formal":{"width":512,"height":512}},"minimumMoc3Bytes":1024,"blockingReasons":[]},"modelJsonProblems":[],"displayInfoParameterIds":["ParamA","ParamAllRotate","ParamAllX","ParamAllY","ParamAngleX","ParamAngleY","ParamAngleZ","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ","ParamBreath","ParamBrowLY","ParamBrowRY","ParamCheek","ParamE","ParamEyeBallX","ParamEyeBallY","ParamEyeLOpen","ParamEyeLSmile","ParamEyeROpen","ParamEyeRSmile","ParamFingerL","ParamFingerR","ParamFootL","ParamFootR","ParamHairBack","ParamHairBackFuwa","ParamHairBackL","ParamHairBackR","ParamHairFront","ParamHairFrontFuwa","ParamHairSideFuwa","ParamHairSideL","ParamHairSideR","ParamHandLA","ParamHandRA","ParamI","ParamLeftShoulderUp","ParamLegLA01","ParamLegLA02","ParamLegRA01","ParamLegRA02","ParamMouthDown","ParamO","ParamOpacity","ParamRightShoulderUp","ParamSkirtFront","ParamSkirtFuwa","ParamSkirtSideL","ParamSkirtSideR","ParamSleeveL","ParamSleeveR","ParamU","ParamoHairMesh"],"requiredDisplayInfoParameters":["ParamA","ParamI","ParamU","ParamE","ParamO","ParamMouthDown","ParamAngleX","ParamAngleY","ParamAngleZ","ParamBodyAngleX","ParamBodyAngleY","ParamBodyAngleZ","ParamAllX","ParamAllY","ParamAllRotate","ParamBreath","ParamLeftShoulderUp","ParamRightShoulderUp","ParamArmLA01","ParamArmLA02","ParamArmLA03","ParamArmRA01","ParamArmRA02","ParamArmRA03","ParamHandLA","ParamHandRA","ParamFingerL","ParamFingerR","ParamLegLA01","ParamLegLA02","ParamLegRA01","ParamLegRA02","ParamFootL","ParamFootR","ParamEyeLOpen","ParamEyeROpen","ParamEyeBallX","ParamEyeBallY","ParamEyeLSmile","ParamEyeRSmile","ParamCheek","ParamBrowLY","ParamBrowRY","ParamHairFront","ParamHairSideL","ParamHairSideR","ParamHairBack","ParamHairBackL","ParamHairBackR","ParamoHairMesh","ParamHairFrontFuwa","ParamHairSideFuwa","ParamHairBackFuwa","ParamSkirtFront","ParamSkirtSideL","ParamSkirtSideR","ParamSkirtFuwa","ParamSleeveL","ParamSleeveR"],"displayInfoParameterReady":true,"missingDisplayInfoParameters":[],"runtimePackageAcceptanceGate":{"ready":true,"requiredReadyFields":["fileGroupReady","model3ReferenceConsistency.ready","runtimeFileQuality.ready","displayInfoParameterReady","modelJsonProblems=[]","blockingReasons=[]"],"requiredOutputs":["runtime/mika_live2d.model3.json with complete FileReferences","runtime/*.moc3 referenced by FileReferences.Moc","runtime/textures/* referenced by FileReferences.Textures","runtime/*.cdi3.json referenced by FileReferences.DisplayInfo","runtime/*.physics3.json referenced by FileReferences.Physics","runtime/*.pose3.json referenced by FileReferences.Pose","runtime/expressions/*.exp3.json referenced by FileReferences.Expressions","runtime/motions/*.motion3.json referenced by FileReferences.Motions"]},"blockingReasons":[],"blockingReasonCount":0,"nextActions":[]},"runtimeExportCurrentReady":true,"runtimeExportCurrentMissingIds":[],"runtimeExportCurrentMissingDisplayInfoParameters":[],"runtimeExportCurrentBlockingReasons":[],"downloadVerification":{"publicBaseUrl":"https://ycspace.myvnc.com/mika-avatar","deliveryTemplate":{"url":"/mika-avatar/handoff/mika-live2d-delivery-template.zip","downloadUrl":"https://ycspace.myvnc.com/mika-avatar/handoff/mika-live2d-delivery-template.zip","outputPath":"dist/mika-live2d-delivery-template.zip","expectedBytes":74021,"expectedSha256":"2bb197ad475c9e226a55e4e78bc2aed63933f3c33efc888de5a65ebbf9479b73","sha256Command":"echo \"2bb197ad475c9e226a55e4e78bc2aed63933f3c33efc888de5a65ebbf9479b73  dist/mika-live2d-delivery-template.zip\" | sha256sum -c -","verifyCommand":"python3 tools/live2d/package_mika_live2d_delivery_template.py --verify dist/mika-live2d-delivery-template.zip"},"productionBrief":{"jsonUrl":"/mika-avatar/api/live2d/mika/production-brief","markdownUrl":"/mika-avatar/handoff/mika-live2d/production-brief.md"},"deliveryReadiness":{"url":"/mika-avatar/api/live2d/mika/delivery-readiness","verifyCommand":"python3 tools/live2d/check_mika_live2d_delivery_readiness.py deliveries/mika-live2d --no-fail"},"commands":["mkdir -p dist","curl -L https://ycspace.myvnc.com/mika-avatar/handoff/mika-live2d-delivery-template.zip -o dist/mika-live2d-delivery-template.zip","echo \"2bb197ad475c9e226a55e4e78bc2aed63933f3c33efc888de5a65ebbf9479b73  dist/mika-live2d-delivery-template.zip\" | sha256sum -c -","python3 tools/live2d/package_mika_live2d_delivery_template.py --verify dist/mika-live2d-delivery-template.zip","python3 tools/live2d/validate_mika_live2d_delivery.py deliveries/mika-live2d","python3 tools/live2d/check_mika_live2d_delivery_readiness.py deliveries/mika-live2d --no-fail"]}}