[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CBB9CTF2NRX8DTYEXV7AQZ":3,"skill-same:01M6CBB9CTF2NRX8DTYEXV7AQZ":67},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":13,"repositoryHtmlUrl":26,"repositoryHomepageUrl":6,"ownerHtmlUrl":27,"ownerBlogUrl":6,"ownerDescription":28,"updatedAt":29,"install":30,"resources":43},"01M6CBB9CTF2NRX8DTYEXV7AQZ","12-asset-id",null,"devwinsoft\u002Fdevian","devwinsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F22570160?v=4","01M6C6RR8W05NH8NPKQNCE3Q72","maoshy","01M6C6RRDJ5TJJCZXRTY801YDH",0,"MIT","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian-unity\u002F20-common-package\u002F12-asset-id\u002FSKILL.md",[],[18],"12 asset id","2026-11-10 10:12:30",false,"# 12-asset-id\n\nStatus: ACTIVE\nAppliesTo: v10\nType: Component Specification\n\n## 1. 목적\n\nUnity Editor에서 특정 폴더의 prefab 목록을 스캔하여,\nInspector에서 string 기반 ID를 선택할 수 있도록 하는 **AssetId 패턴**을 정의한다.\n\n- TableId 패턴과 동일한 UX (Select 버튼 + 검색 + 그리드 선택, 클릭 즉시 적용)\n- 폴더 경로는 **BundleSettings(`Assets\u002FResources\u002FDevian\u002FBundleSettings.asset`)** 에서 공급받는다.\n- deprecated\u002Ffallback 레이어는 만들지 않는다.\n\n---\n\n## 2. 네임스페이스\n\n모든 코드는 `namespace Devian`.\n\n---\n\n## 3. 패키지\n\n- selector base 클래스는 `com.devian.foundation` (Editor)\n- runtime ID 타입과 Generated selector는 해당 owning package에 둔다\n\n---\n\n## 4. 파일 위치 (정본)\n\nEditor (base — `com.devian.foundation`):\n\n```\ncom.devian.foundation\u002FEditor\u002FAssetId\u002F\n├── BaseEditorAssetIdSelector.cs\n└── BaseEditorScriptableAssetIdSelector.cs\n```\n\nSettings (단일 정본):\n\n- `Assets\u002FResources\u002FDevian\u002FBundleSettings.asset` (JSON 형태 금지)\n- `com.devian.foundation\u002FRuntime\u002FUnity\u002FSettings\u002FBundleSettings.cs`\n\nRuntime ID 타입 + Generated selector는 owning package 기준:\n\n```\n{owning-package}\u002FRuntime\u002F{Feature}\u002F\n└── {ASSET}_ID.cs\n{owning-package}\u002FEditor\u002FGenerated\u002F\n└── {ASSET}_ID.Editor.cs\n```\n\nParent:\n\n- `skills\u002Fdevian-unity\u002F20-common-package\u002F00-overview\u002FSKILL.md`\n- `skills\u002Fdevian-unity\u002F20-common-package\u002F18-bundle-settings\u002FSKILL.md`\n\n---\n\n## 5. SearchDir 공급 규약(Hard)\n\nSelector는 `BundleSettings.asset`에서 key로 SearchDir를 찾는다.\n\n- `BundleSettings.GetEntry(key)`로 조회 (key = ID 타입명, e.g. `COMMON_EFFECT_ID`)\n- 매칭 실패 시 `\"Assets\"` fallback (최후 수단)\n\nAssetId key는 **단일 SearchDir(string)** 만 지원한다.\n\n---\n\n## 6. Selector Window 표시 규약 (Hard)\n\n- Drawer는 Select 버튼 클릭 시 **반드시 Selector 창을 화면에 표시**해야 한다.\n- Selector 창에는 **Apply\u002FCreate 버튼이 존재하면 안 된다**. (SSOT: skills\u002Fdevian\u002F10-module\u002F03-ssot\u002FSKILL.md)\n- 따라서 Selector는 **EditorWindow(Utility) 기반**으로 생성\u002F표시한다.\n- Selector 캐싱은 금지한다. (창을 닫았다가 다시 Select 시 창이 안 뜨는 버그 방지)\n- `CreateInstance` 후 **반드시 ShowUtility()** 로 표시 상태로 만들어야 한다.\n\n권장 패턴(정본):\n\n```csharp\nprotected override TSelector GetSelector()\n{\n    var w = ScriptableObject.CreateInstance\u003CTSelector>();\n    w.ShowUtility();\n    return w;\n}\n```\n\n> NOTE: 기존 \"ScriptableWizard 기반\u002FDisplayWizard 강제\" 문구는 SSOT의 \"Apply 버튼 금지\"와 충돌하므로 제거한다.\n\n---\n\n## 7. 금지(Hard)\n\n- deprecated\u002Ffallback settings 추가\u002F유지 금지 (예: AssetIdSearchSettings)\n- BundleSettings.json 형태 금지 (.asset 단일 정본)\n- Selector 캐싱 금지 (창을 닫았다가 다시 Select 시 창이 안 뜨는 버그 방지)\n- `@`로 시작하는 prefab name은 목록에서 제외한다. (AssetManager 정책과 일치)\n- ID 값은 prefab.name 그대로 저장한다.\n- Apply 버튼 금지: 선택 리스트(SelectionGrid)에서 항목을 클릭하는 즉시 Value가 적용되고, Selector 창은 자동으로 닫혀야 한다.\n",{},"main","8cb5bd877a3a7004867d2f55697cb9e4ff2f1734","skills\u002Fdevian-unity\u002F20-common-package\u002F12-asset-id","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian","https:\u002F\u002Fgithub.com\u002Fdevwinsoft","Kim Hyong Joon","2026-04-12 18:44:10",{"source":7,"skillName":5,"commands":31,"prompt":41,"zipAvailable":42},[32,35,38],{"tool":33,"command":34},"npx","npx skills add devwinsoft\u002Fdevian --skill 12-asset-id",{"tool":36,"command":37},"bunx","bunx skills add devwinsoft\u002Fdevian --skill 12-asset-id",{"tool":39,"command":40},"pnpm","pnpm dlx skills add devwinsoft\u002Fdevian --skill 12-asset-id","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian-unity\u002F20-common-package\u002F12-asset-id\u002FSKILL.md",true,[44,50,54,59,63],{"path":45,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":48,"sourceHtmlUrl":49},"evals\u002Fcode-evals.json","REFERENCE","参考文档",2582,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fmystenlabs-move-unit-testing\u002Fevals\u002Fcode-evals.json",{"path":51,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":52,"sourceHtmlUrl":53},"evals\u002Fevals.json",2541,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fmystenlabs-move-unit-testing\u002Fevals\u002Fevals.json",{"path":55,"resourceType":55,"resourceTypeDesc":56,"sizeBytes":57,"sourceHtmlUrl":58},"LICENSE","许可证",11357,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fmystenlabs-move-unit-testing\u002FLICENSE",{"path":60,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":61,"sourceHtmlUrl":62},"SOURCE.md",333,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fmystenlabs-move-unit-testing\u002FSOURCE.md",{"path":64,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":65,"sourceHtmlUrl":66},"TRUST.auto.yaml",2201,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fchains\u002Fmystenlabs-move-unit-testing\u002FTRUST.auto.yaml",[68,74,82,90,99,106],{"skillNo":69,"name":70,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":19},"01M6CBX3K2JJV38ANHVGCAT8A0","devian","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002FSKILL.md",[],[70],{"skillNo":75,"name":76,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M6CBX210BFMM8AMN770J9WY8","90-project-archive","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F90-project-archive\u002FSKILL.md",[],[80,81],"archive","90 project archive",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":19},"01M6CBWZSGRR9R3YJZB3177667","30-env-management","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F30-env-management\u002FSKILL.md",[],[88,89],"management","30 env management",{"skillNo":91,"name":92,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":19},"01M6CBWYD3TGWBQV7V35551THF","19-page-push-send","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F20-operation\u002F19-page-push-send\u002FSKILL.md",[],[96,97,98],"push","page","19 page push send",{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":19},"01M6CBWWRQ05A7604GHJKTPJTF","18-page-savedata","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F20-operation\u002F18-page-savedata\u002FSKILL.md",[],[97,105],"18 page savedata",{"skillNo":107,"name":108,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":19},"01M6CBWVH4S2VF1V7B2GBTESCT","17-page-deobfuscate","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F20-operation\u002F17-page-deobfuscate\u002FSKILL.md",[],[97,112],"17 page deobfuscate"]