[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CBSC80MB3MSZXK9F9J4F2T":3,"skill-same:01M6CBSC80MB3MSZXK9F9J4F2T":45},{"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":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":13,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M6CBSC80MB3MSZXK9F9J4F2T","01-policy",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\u002F01-policy\u002FSKILL.md",[],[18,19],"policy","01 policy","2026-11-10 10:12:30",false,"# Devian — Framework Common Policy\n\n## Scope\n\n이 문서는 Devian 프레임워크 공통 운용 정책을 다룬다:\n- 문서 구조 \u002F SKILL 작성 규격\n- 인덱스 원칙\n- 플레이스홀더 사용 원칙\n- SSOT 우선순위\n- Git 정책\n\n---\n\n## SSOT 우선순위\n\n- **정본**: [skills\u002Fdevian\u002F10-module\u002F03-ssot\u002FSKILL.md](..\u002F10-module\u002F03-ssot\u002FSKILL.md)\n- 충돌 시 SSOT 문서가 우선한다.\n- 다른 문서에서 SSOT 상세 규칙을 장문 복제하지 않는다 (링크로 해결).\n\n---\n\n## Skills 구조 규칙\n\n### 필수 폴더 구조\n\n모든 `skills\u002Fdevian-*` 폴더는 다음을 필수로 가진다:\n\n| 폴더 | 역할 |\n|------|------|\n| `00-overview\u002F` | 그룹 개요, 핵심 링크 |\n| `01-policy\u002F` | 그룹 정책\u002F규약 |\n\n### Index 문서\n\n- `skills\u002Fdevian\u002FSKILL.md`는 전체 인덱스(목차) 역할을 한다.\n- 각 그룹의 `00-overview`는 그룹 내 문서 탐색 시작점이다.\n\n---\n\n## Input JSON 플레이스홀더 원칙\n\n### 표준 플레이스홀더\n\n| Placeholder | 설명 | 예시 |\n|-------------|------|------|\n| `{buildInputJson}` | 빌드 입력 JSON 경로 | `input\u002Fbuild_input.json` |\n| `{projectConfigJson}` | 프로젝트 설정 JSON 경로 | `input\u002Fbuild_config.json` |\n\n### 사용 규칙\n\n1. 문서에서 특정 파일명을 하드코딩하지 않는다.\n2. 플레이스홀더를 사용하고, 예시는 괄호로 표기한다.\n   - Good: `{buildInputJson}` (예: `input\u002Fbuild_input.json`)\n   - Bad: `input\u002Fbuild_input.json`\n\n---\n\n## Link Policy\n\n- 상세 규칙(금지 키, 머지, 경로 템플릿)은 [SSOT](..\u002F10-module\u002F03-ssot\u002FSKILL.md)로 링크한다.\n- 중복 서술을 금지한다.\n- 링크는 상대 경로를 사용한다.\n\n---\n\n## 의존 방향 규칙 (Dependency Direction)\n\n### 기반 스킬은 소비자 스킬을 언급하지 않는다\n\n- **기반 스킬**(사용 당하는 스킬)은 자신을 사용하는 **소비자 스킬**(사용하는 스킬)의 이름·링크·도메인 상세를 포함하지 않는다.\n- 의존 참조는 **소비자 → 기반** 방향만 허용한다.\n- 기반 스킬이 \"자신의 비책임\"을 명시할 때는 소비자 이름 대신 **일반 용어**(\"호출자\", \"상위 시스템\")를 사용한다.\n\n예:\n- Good: \"멱등\u002F기록\u002F복구는 호출자가 책임진다.\"\n- Bad: \"멱등\u002F기록\u002F복구는 MissionManager \u002F PurchaseManager가 책임진다.\"\n\n이유:\n- 소비자가 추가\u002F변경되어도 기반 스킬 문서를 수정할 필요가 없다.\n- 기반 스킬의 독립성과 재사용성을 보장한다.\n\n---\n\n## 00-overview 규칙\n\n각 그룹의 `00-overview\u002FSKILL.md`는 다음을 포함한다:\n\n1. **그룹 설명** (3~6줄): 이 그룹이 담당하는 것\n2. **Start Here 표**:\n   - 해당 그룹 `01-policy`\n   - 그룹에서 가장 중요한 2~4개 문서 링크\n3. **Related**:\n   - SSOT 링크\n   - Devian Index 링크\n\n---\n\n## SKILL 작성 규격\n\n### SKILL 문서가 포함해야 하는 것\n\n1) **정책(Policy)** — 무엇이 정본인지(SSOT), 금지\u002F필수 규칙\n2) **입력 규약(Input contract)** — 입력 파일 포맷, 테이블 작성 규칙\n3) **경로 규약(Path contract)** — `{buildInputJson}` 기준 staging\u002Ffinal 경로 해석, 플레이스홀더 표준\n4) **검증 규칙(Validation)** — 빌드 실패 조건(FAIL fast), Hard\u002FSoft conflict 분류\n\n### SKILL 문서에 쓰면 안 되는 것\n\n아래는 **SKILL에서 금지**한다(코드가 정본):\n\n- 생성되는 클래스\u002F인터페이스\u002F함수 시그니처\n- 프레임 바이너리 레이아웃의 바이트 단위 정의\n- 런타임 패키지의 파일 목록\u002F구현 디테일\n- \"예시 코드\"가 실제 코드 API와 동기화되지 않을 가능성이 있는 내용\n\n예외: 입력 규약을 설명하는 최소한의 짧은 예시(JSON 한 조각, 테이블 한 셀 값 등)은 허용한다.\n\n### Hard Conflicts \u002F Soft Conflicts 표기 규칙\n\n- Hard Conflicts: 빌드\u002F호환성\u002F입력 규약이 깨지는 수준 → **즉시 FAIL**\n- Soft Conflicts: 용어\u002F표기\u002F톤\u002F링크 → **정리 대상(충돌 아님)**\n\nSoft를 이유로 \"충돌 0개 만들기\" 무한 루프를 돌리지 않는다.\n\n### 문서 헤더 표준\n\n모든 SKILL은 상단에 아래 메타를 가진다:\n\n- `Status: ACTIVE | DRAFT`\n- `AppliesTo: v10`\n- `SSOT: skills\u002Fdevian\u002F10-module\u002F03-ssot\u002FSKILL.md`\n\n---\n\n## Git Policy\n\n### 줄바꿈 문자 (Line Endings) — Hard Rule\n\n| 파일 유형 | 줄바꿈 | 설명 |\n|----------|--------|------|\n| Shell 스크립트 (`*.sh`) | **LF** | CRLF 사용시 shebang 오류 발생 |\n| 모든 텍스트 파일 | **LF** | 플랫폼 간 일관성 유지 |\n\n`.gitattributes` 필수:\n\n```gitattributes\n* text=auto eol=lf\n*.sh text eol=lf\n*.png binary\n*.jpg binary\n*.dll binary\n*.exe binary\n```\n\nCRLF 진단: `file script.sh` → \"with CRLF line terminators\" 표시 시 `sed -i 's\u002F\\r$\u002F\u002F' script.sh`로 변환.\n\n### 커밋 메시지 규칙\n\n```\n\u003Ctype>: \u003Csubject>\n```\n\n| Type | 설명 |\n|------|------|\n| `feat` | 새 기능 |\n| `fix` | 버그 수정 |\n| `refactor` | 리팩토링 (기능 변경 없음) |\n| `docs` | 문서 변경 |\n| `chore` | 빌드, 설정 변경 |\n| `test` | 테스트 추가\u002F수정 |\n\n### 브랜치 규칙\n\n| 유형 | 패턴 | 예시 |\n|------|------|------|\n| 기능 | `feature\u002F\u003Cname>` | `feature\u002Fws-reconnect` |\n| 버그 수정 | `fix\u002F\u003Cname>` | `fix\u002Flogin-crash` |\n| 릴리스 | `release\u002F\u003Cversion>` | `release\u002F10.1.0` |\n\n보호 브랜치: `main`, `develop` — 직접 푸시 금지, PR 통해서만 병합.\n\n### .gitignore 필수 항목\n\n```gitignore\nnode_modules\u002F\n*.g.cs\n*.g.ts\nGenerated\u002F\n.idea\u002F\n.vs\u002F\n*.suo\n*.user\n.DS_Store\nThumbs.db\n*.env\n*.local\n```\n\n### Git Hard Conflicts (DoD)\n\n아래 상태가 발견되면 **FAIL**:\n\n1. `.sh` 파일에 CRLF 줄바꿈 사용\n2. `.gitattributes` 파일 없음\n3. `node_modules\u002F` 디렉토리가 커밋됨\n4. `*.env` 파일이 커밋됨\n\n---\n\n## See Also\n\n- [SSOT](..\u002F10-module\u002F03-ssot\u002FSKILL.md)\n- [Devian Index](.\u002FSKILL.md)\n- [Glossary](..\u002F04-glossary\u002FSKILL.md)\n",{},"main","8cb5bd877a3a7004867d2f55697cb9e4ff2f1734","skills\u002Fdevian\u002F01-policy","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":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add devwinsoft\u002Fdevian --skill 01-policy",{"tool":37,"command":38},"bunx","bunx skills add devwinsoft\u002Fdevian --skill 01-policy",{"tool":40,"command":41},"pnpm","pnpm dlx skills add devwinsoft\u002Fdevian --skill 01-policy","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F01-policy\u002FSKILL.md",true,[],[46,52,60,68,77,84],{"skillNo":47,"name":48,"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":49,"categories":50,"keywords":51,"publishedAt":20},"01M6CBX3K2JJV38ANHVGCAT8A0","devian","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002FSKILL.md",[],[48],{"skillNo":53,"name":54,"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":55,"categories":56,"keywords":57,"publishedAt":20},"01M6CBX210BFMM8AMN770J9WY8","90-project-archive","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F90-project-archive\u002FSKILL.md",[],[58,59],"archive","90 project archive",{"skillNo":61,"name":62,"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":63,"categories":64,"keywords":65,"publishedAt":20},"01M6CBWZSGRR9R3YJZB3177667","30-env-management","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F30-env-management\u002FSKILL.md",[],[66,67],"management","30 env management",{"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":20},"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",[],[74,75,76],"push","page","19 page push send",{"skillNo":78,"name":79,"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":80,"categories":81,"keywords":82,"publishedAt":20},"01M6CBWWRQ05A7604GHJKTPJTF","18-page-savedata","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F20-operation\u002F18-page-savedata\u002FSKILL.md",[],[75,83],"18 page savedata",{"skillNo":85,"name":86,"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":87,"categories":88,"keywords":89,"publishedAt":20},"01M6CBWVH4S2VF1V7B2GBTESCT","17-page-deobfuscate","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F20-operation\u002F17-page-deobfuscate\u002FSKILL.md",[],[75,90],"17 page deobfuscate"]