[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CBWH846YDXMSGY7ANPRD06":3,"skill-same:01M6CBWH846YDXMSGY7ANPRD06":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},"01M6CBWH846YDXMSGY7ANPRD06","55-protocol-codegen",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\u002F80-tools\u002F11-builder\u002F55-protocol-codegen\u002FSKILL.md",[],[18,19],"protocol","55 protocol codegen","2026-11-10 10:12:30",false,"# 55-protocol-codegen\n\nStatus: ACTIVE  \nAppliesTo: v10  \nSSOT: skills\u002Fdevian\u002F10-module\u002F03-ssot\u002FSKILL.md\n\n## Purpose\n\nProtocol generator의 구현을 “문서로 재서술”하지 않기 위한 가드 문서다.\n\n이 스킬은 **정책적으로 필요한 검증 포인트만** 남기고,\n구체적인 구현\u002F산출 API는 모두 **런타임\u002F제너레이터 코드**로 위임한다.\n\n---\n\n## Implementation is Code Truth\n\n아래 항목은 SKILL이 아니라 **코드\u002FReference가 정답**이다.\n\n- 생성되는 C#\u002FTS 코드 구조, 클래스\u002F타입 이름\n- codec의 정확한 인코딩\u002F디코딩 구현\n- 프레임 포맷(바이트 레이아웃)\n- “sender \u002F transport” 계층 분리 방식과 인터페이스 시그니처\n\nSKILL은 위 내용을 단정해서는 안 된다.\n\n---\n\n## Policy-level Checks (MUST)\n\n1) ProtocolSpec 파일은 JSON이다.\n2) opcode\u002Ftag는 결정적이어야 한다.\n3) Tag reserved range(19000..19999)는 금지다.\n4) Registry 파일(opcodes\u002Ftags)은 키 정렬 등으로 **결정적으로 저장**되어야 한다.\n5) 생성되는 모든 PROTOCOL 모듈은 Common 모듈을 **무조건 참조**해야 한다.\n   - Common 참조 판정은 하지 않는다.\n   - C#: csproj ProjectReference + `*.g.cs`에 `using Devian;`\n   - TS: package.json dependencies에 `@devian\u002Fmodule-common`\n\n---\n\n## Complex Type Aliases (cint \u002F cfloat \u002F cstring)\n\n프로토콜 스펙에서 Complex 타입을 사용하기 위한 **별칭(alias)** 정책이다.\n\n### 지원 별칭\n\n| 별칭 | 설명 |\n|------|------|\n| cint | 마스킹된 정수 (masking only) |\n| cfloat | 마스킹된 실수 (masking only) |\n| cstring | 마스킹된 문자열 (masking only) |\n\n### JSON Shape (직렬화 표현)\n\n| 별칭 | JSON 표현 |\n|------|-----------|\n| cint | object: save1(int), save2(int) |\n| cfloat | object: save1(int), save2(int) |\n| cstring | object: data(string) |\n\n### 언어별 타입 매핑\n\n**C#:**\n\n| 별칭 | 매핑 타입 | 비고 |\n|------|-----------|------|\n| cint | Devian.CInt | struct (value type) |\n| cfloat | Devian.CFloat | struct (value type) |\n| cstring | Devian.CString | struct (value type) |\n\n**TypeScript:**\n\n| 별칭 | 매핑 타입 (shape) |\n|------|-------------------|\n| cint | { save1: number; save2: number } |\n| cfloat | { save1: number; save2: number } |\n| cstring | { data: string } |\n\nTS에서는 클래스가 아닌 shape 타입으로 취급한다.\n\n### 코덱 정책 (MUST)\n\n1) 프로토콜 파일 내에 cint\u002Fcfloat\u002Fcstring이 **1개라도 있으면** 기본 코덱은 **JSON**이다.\n2) protobuf 코덱은 별칭 타입을 지원하지 않는다.\n3) protobuf 코덱으로 별칭 포함 메시지를 encode\u002Fdecode 시도하면 **런타임에서 명확히 실패**한다 (NotSupportedException).\n4) CodecJson은 Newtonsoft.Json(JsonConvert)을 사용한다.\n\n---\n\n## Reference\n\n- Policy SSOT: `skills\u002Fdevian\u002F10-module\u002F03-ssot\u002FSKILL.md`\n- 동작 정본: 런타임\u002F제너레이터 코드",{},"main","8cb5bd877a3a7004867d2f55697cb9e4ff2f1734","skills\u002Fdevian\u002F80-tools\u002F11-builder\u002F55-protocol-codegen","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 55-protocol-codegen",{"tool":37,"command":38},"bunx","bunx skills add devwinsoft\u002Fdevian --skill 55-protocol-codegen",{"tool":40,"command":41},"pnpm","pnpm dlx skills add devwinsoft\u002Fdevian --skill 55-protocol-codegen","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F11-builder\u002F55-protocol-codegen\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"]