@wooojin/forgen 0.4.7 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CHANGELOG.md +40 -0
  3. package/assets/dev-guide/be/README.md +226 -0
  4. package/assets/dev-guide/be/adapters/build-agents-md.sh +63 -0
  5. package/assets/dev-guide/be/principles/common.md +433 -0
  6. package/assets/dev-guide/be/principles/go.md +469 -0
  7. package/assets/dev-guide/be/principles/node.md +388 -0
  8. package/assets/dev-guide/be/skills/go/be-build/SKILL.md +262 -0
  9. package/assets/dev-guide/be/skills/go/be-perf/SKILL.md +308 -0
  10. package/assets/dev-guide/be/skills/go/be-review/SKILL.md +119 -0
  11. package/assets/dev-guide/be/skills/go/be-security/SKILL.md +362 -0
  12. package/assets/dev-guide/be/skills/node/be-build/SKILL.md +239 -0
  13. package/assets/dev-guide/be/skills/node/be-perf/SKILL.md +272 -0
  14. package/assets/dev-guide/be/skills/node/be-review/SKILL.md +118 -0
  15. package/assets/dev-guide/be/skills/node/be-security/SKILL.md +355 -0
  16. package/assets/dev-guide/be/sources/12factor/INDEX.md +53 -0
  17. package/assets/dev-guide/be/sources/api-design/INDEX.md +56 -0
  18. package/assets/dev-guide/be/sources/ddia/INDEX.md +55 -0
  19. package/assets/dev-guide/be/sources/go-runtime/INDEX.md +62 -0
  20. package/assets/dev-guide/be/sources/node-runtime/INDEX.md +60 -0
  21. package/assets/dev-guide/be/sources/otel/INDEX.md +53 -0
  22. package/assets/dev-guide/be/sources/owasp-api/INDEX.md +52 -0
  23. package/assets/dev-guide/be/sources/postgres/INDEX.md +55 -0
  24. package/assets/dev-guide/be/sources/sre-book/INDEX.md +48 -0
  25. package/assets/dev-guide/fe/README.md +197 -0
  26. package/assets/dev-guide/fe/adapters/build-agents-md.sh +63 -0
  27. package/assets/dev-guide/fe/adapters/refresh.sh +68 -0
  28. package/assets/dev-guide/fe/principles/common.md +160 -0
  29. package/assets/dev-guide/fe/principles/react.md +183 -0
  30. package/assets/dev-guide/fe/principles/vue.md +196 -0
  31. package/assets/dev-guide/fe/skills/react/fe-build/SKILL.md +139 -0
  32. package/assets/dev-guide/fe/skills/react/fe-perf/SKILL.md +179 -0
  33. package/assets/dev-guide/fe/skills/react/fe-review/SKILL.md +141 -0
  34. package/assets/dev-guide/fe/skills/vue/fe-build/SKILL.md +148 -0
  35. package/assets/dev-guide/fe/skills/vue/fe-perf/SKILL.md +163 -0
  36. package/assets/dev-guide/fe/skills/vue/fe-review/SKILL.md +136 -0
  37. package/assets/dev-guide/fe/sources/a11y-dx/INDEX.md +41 -0
  38. package/assets/dev-guide/fe/sources/a11y-dx/chrome-devtools-memory.md +150 -0
  39. package/assets/dev-guide/fe/sources/a11y-dx/chrome-devtools-performance.md +99 -0
  40. package/assets/dev-guide/fe/sources/a11y-dx/lighthouse-audits.md +146 -0
  41. package/assets/dev-guide/fe/sources/a11y-dx/react-devtools-profiler.md +128 -0
  42. package/assets/dev-guide/fe/sources/a11y-dx/wcag22-new-criteria.md +174 -0
  43. package/assets/dev-guide/fe/sources/perf/01-core-web-vitals.md +58 -0
  44. package/assets/dev-guide/fe/sources/perf/02-inp.md +83 -0
  45. package/assets/dev-guide/fe/sources/perf/03-lcp-cls.md +130 -0
  46. package/assets/dev-guide/fe/sources/perf/04-speculation-rules.md +148 -0
  47. package/assets/dev-guide/fe/sources/perf/05-view-transitions.md +153 -0
  48. package/assets/dev-guide/fe/sources/perf/06-nextjs-caching.md +188 -0
  49. package/assets/dev-guide/fe/sources/perf/07-server-components.md +181 -0
  50. package/assets/dev-guide/fe/sources/perf/08-ppr.md +133 -0
  51. package/assets/dev-guide/fe/sources/perf/09-nextjs-image.md +200 -0
  52. package/assets/dev-guide/fe/sources/perf/10-optimize-lcp.md +201 -0
  53. package/assets/dev-guide/fe/sources/perf/INDEX.md +88 -0
  54. package/assets/dev-guide/fe/sources/react/INDEX.md +41 -0
  55. package/assets/dev-guide/fe/sources/react/keeping-components-pure.md +135 -0
  56. package/assets/dev-guide/fe/sources/react/no-effect-patterns.md +183 -0
  57. package/assets/dev-guide/fe/sources/react/react-compiler.md +182 -0
  58. package/assets/dev-guide/fe/sources/react/server-components.md +194 -0
  59. package/assets/dev-guide/fe/sources/react/server-functions.md +192 -0
  60. package/assets/dev-guide/fe/sources/react/suspense.md +218 -0
  61. package/assets/dev-guide/fe/sources/react/use-action-state.md +123 -0
  62. package/assets/dev-guide/fe/sources/react/use-form-status.md +158 -0
  63. package/assets/dev-guide/fe/sources/react/use-hook.md +153 -0
  64. package/assets/dev-guide/fe/sources/react/use-optimistic.md +194 -0
  65. package/assets/dev-guide/fe/sources/toss-ff/INDEX.md +58 -0
  66. package/assets/dev-guide/fe/sources/toss-ff/cohesion-code-directory.md +79 -0
  67. package/assets/dev-guide/fe/sources/toss-ff/cohesion-form-fields.md +110 -0
  68. package/assets/dev-guide/fe/sources/toss-ff/cohesion-magic-number.md +47 -0
  69. package/assets/dev-guide/fe/sources/toss-ff/coupling-item-edit-modal.md +124 -0
  70. package/assets/dev-guide/fe/sources/toss-ff/coupling-use-bottom-sheet.md +57 -0
  71. package/assets/dev-guide/fe/sources/toss-ff/coupling-use-page-state.md +71 -0
  72. package/assets/dev-guide/fe/sources/toss-ff/overview-4-principles.md +77 -0
  73. package/assets/dev-guide/fe/sources/toss-ff/predictability-hidden-logic.md +59 -0
  74. package/assets/dev-guide/fe/sources/toss-ff/predictability-http.md +77 -0
  75. package/assets/dev-guide/fe/sources/toss-ff/predictability-use-user.md +110 -0
  76. package/assets/dev-guide/fe/sources/toss-ff/readability-comparison-order.md +52 -0
  77. package/assets/dev-guide/fe/sources/toss-ff/readability-condition-name.md +64 -0
  78. package/assets/dev-guide/fe/sources/toss-ff/readability-login-start-page.md +183 -0
  79. package/assets/dev-guide/fe/sources/toss-ff/readability-magic-number.md +53 -0
  80. package/assets/dev-guide/fe/sources/toss-ff/readability-submit-button.md +73 -0
  81. package/assets/dev-guide/fe/sources/toss-ff/readability-ternary-operator.md +38 -0
  82. package/assets/dev-guide/fe/sources/toss-ff/readability-use-page-state.md +77 -0
  83. package/assets/dev-guide/fe/sources/toss-ff/readability-user-policy.md +98 -0
  84. package/assets/dev-guide/fe/sources/vue/INDEX.md +17 -0
  85. package/assets/dev-guide/fe/sources/vue/composition-api.md +251 -0
  86. package/assets/dev-guide/fe/sources/vue/nuxt-data-fetching.md +232 -0
  87. package/assets/dev-guide/fe/sources/vue/pinia-state-management.md +134 -0
  88. package/assets/dev-guide/fe/sources/vue/reactivity-pitfalls.md +261 -0
  89. package/assets/dev-guide/fe/sources/vue/style-guide-priority-a.md +117 -0
  90. package/assets/dev-guide/fe/sources/vue/style-guide-priority-b.md +231 -0
  91. package/assets/dev-guide/fe/sources/vue/style-guide-priority-c.md +86 -0
  92. package/assets/dev-guide/fe/sources/vue/style-guide-priority-d.md +72 -0
  93. package/dist/checks/self-score-deflation.js +6 -4
  94. package/dist/cli.js +47 -2
  95. package/dist/core/auto-compound-runner.js +6 -2
  96. package/dist/core/dashboard-cli.d.ts +12 -0
  97. package/dist/core/dashboard-cli.js +226 -0
  98. package/dist/core/dashboard.js +2 -2
  99. package/dist/core/dev-guide-injector.d.ts +26 -0
  100. package/dist/core/dev-guide-injector.js +137 -0
  101. package/dist/core/doctor.d.ts +10 -0
  102. package/dist/core/doctor.js +49 -8
  103. package/dist/core/harness.js +8 -2
  104. package/dist/core/init.js +53 -0
  105. package/dist/core/inspect-cli.js +4 -4
  106. package/dist/core/lifecycle-classifier.d.ts +23 -0
  107. package/dist/core/lifecycle-classifier.js +104 -0
  108. package/dist/core/migrate-evidence-host.js +1 -1
  109. package/dist/core/notify.js +7 -0
  110. package/dist/core/observability-backfill.d.ts +31 -0
  111. package/dist/core/observability-backfill.js +178 -0
  112. package/dist/core/observability-store.d.ts +58 -0
  113. package/dist/core/observability-store.js +195 -0
  114. package/dist/core/paths.d.ts +16 -2
  115. package/dist/core/paths.js +16 -2
  116. package/dist/core/session-store.d.ts +12 -1
  117. package/dist/core/session-store.js +77 -1
  118. package/dist/core/spawn.d.ts +17 -0
  119. package/dist/core/spawn.js +191 -8
  120. package/dist/core/statusline-cli.js +34 -1
  121. package/dist/core/v1-bootstrap.d.ts +7 -0
  122. package/dist/core/v1-bootstrap.js +28 -6
  123. package/dist/engine/compound-extractor.js +40 -1
  124. package/dist/engine/compound-loop.js +6 -0
  125. package/dist/engine/compound-retire.d.ts +20 -0
  126. package/dist/engine/compound-retire.js +85 -0
  127. package/dist/engine/learn-cli.js +2 -2
  128. package/dist/engine/lifecycle/bypass-detector.js +3 -2
  129. package/dist/engine/lifecycle/meta-reclassifier.js +1 -1
  130. package/dist/engine/lifecycle/signals.js +2 -2
  131. package/dist/engine/lifecycle/trigger-t1-correction.js +1 -1
  132. package/dist/engine/solution-candidate.js +1 -1
  133. package/dist/engine/solution-outcomes.js +1 -1
  134. package/dist/engine/solution-quarantine.js +1 -1
  135. package/dist/engine/solution-weakness.js +8 -2
  136. package/dist/forge/cli.js +1 -1
  137. package/dist/hooks/context-guard.js +25 -1
  138. package/dist/hooks/keyword-detector.js +1 -1
  139. package/dist/hooks/post-tool-use.js +48 -0
  140. package/dist/hooks/secret-filter.js +2 -2
  141. package/dist/hooks/shared/hook-response.js +1 -1
  142. package/dist/hooks/shared/hook-timing.js +3 -3
  143. package/dist/hooks/solution-injector.js +94 -1
  144. package/dist/hooks/stop-guard.js +3 -3
  145. package/dist/host/install-claude.d.ts +6 -2
  146. package/dist/host/install-claude.js +74 -2
  147. package/dist/host/install-codex.d.ts +4 -0
  148. package/dist/host/install-codex.js +72 -1
  149. package/dist/host/install-orchestrator.js +1 -0
  150. package/dist/mcp/tools.js +1 -1
  151. package/dist/preset/facet-catalog.js +2 -2
  152. package/dist/renderer/rule-renderer.js +7 -7
  153. package/dist/store/compound-usage-store.js +1 -1
  154. package/dist/store/implicit-feedback-store.js +2 -2
  155. package/dist/store/profile-store.d.ts +11 -0
  156. package/dist/store/profile-store.js +23 -0
  157. package/package.json +6 -6
  158. package/plugin.json +1 -1
  159. package/scripts/postinstall.js +134 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://claude.ai/schemas/claude-plugin.json",
3
3
  "name": "forgen",
4
- "version": "0.4.7",
4
+ "version": "0.4.9",
5
5
  "description": "Claude Code harness — the more you use Claude, the better it gets",
6
6
  "author": {
7
7
  "name": "jang-ujin",
package/CHANGELOG.md CHANGED
@@ -7,6 +7,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.8] — 2026-05-15 — Codex 동등화 마무리 + 잔재 청소
11
+
12
+ 테마: v0.4.6 (Unattended Resilience) 이후 남아 있던 **Codex 동등화 마무리**
13
+ (A 묶음) 와 v0.4.7 매트릭스 첫 활성화에서 노출된 **사전 존재 결함 청소**
14
+ (E 묶음) 을 한 번에 정리.
15
+
16
+ ### Added
17
+ - **A1**: Codex transcript FTS5 인덱싱 — `session-store.ts:indexCodexSession()`
18
+ 신설. 이전엔 spawn.ts 가 `runtime === 'claude'` 가드로 Codex 세션을 SQLite
19
+ / FTS5 인덱싱에서 제외해 `session-search` MCP 도구가 Codex 대화를 회수
20
+ 못 했음. Claude/Codex schema 별 함수 분기.
21
+ - **A2**: corrupt profile 자동 복구 — `profileExists()=true && loadProfile()=null`
22
+ 케이스 (parse 실패 / v1 shape 위반) 에서 `profile.json.corrupt-<ts>` 로
23
+ 자동 backup → `needsOnboarding=true` 흐름. 데이터 손실 없음. `harness.ts`
24
+ 가 backup 경로를 user-visible warning 으로 표시.
25
+ - **A3**: `SESSIONS_DIR` (legacy session log) 와 `V1_SESSIONS_DIR` (v1 effective
26
+ state) 정합화 — `V1_DIRS` 에 `SESSIONS_DIR` 추가 (bootstrap early-return
27
+ 경로에서도 보장), `forgen doctor` 가 두 dir 모두 노출, `paths.ts` 책임
28
+ 주석 확장.
29
+ - **E3**: `forgen doctor --repair` — plugin cache / installPath 검사 실패 시
30
+ `npm run build` + `node scripts/postinstall.js` 를 forgen pkgRoot 안에서
31
+ 자동 실행. fail-open (실패해도 doctor 진단 흐름은 계속).
32
+
33
+ ### Fixed
34
+ - **E1**: `notify.ts` spawn 'error' event 핸들러 — headless CI / Docker /
35
+ notifier 미설치 환경에서 `osascript`/`notify-send` ENOENT 가 unhandled
36
+ 로 caller process 를 죽이던 사전 존재 버그. v0.4.7 CI 매트릭스 첫
37
+ 활성화에서 노출. 추가로 `rate-limit-spawn-integration` 의 v0.4.7 CI
38
+ skip 가드를 제거 (production fail-safe 보장).
39
+ - **E2**: biome lint warnings 24 건 → 0 — `biome --unsafe` 자동 fix 17
40
+ 건 + 수동 fix 7 건 (`useTemplate`, `noAssignInExpressions`,
41
+ `noExplicitAny`, `noNonNullAssertion` 등 33 files touched).
42
+
43
+ ### Verified
44
+ - vitest 2454 / 2454 PASS (이전 2442 + 새 회귀 가드 12: notify 2, profile-
45
+ corrupt 3, doctor-repair 5, codex-fts 2).
46
+ - 로컬 build / lint 0 warning.
47
+ - CI 매트릭스 (Linux x64 + arm64, macOS, Windows hooks-portability) 모두
48
+ PASS — 별도 PR 머지 (#31 부분) 후 본 PR 에서 다시 확인.
49
+
10
50
  ## [0.4.7] — 2026-05-15 — fgx --codex 권한 플래그 수정
11
51
 
12
52
  ### Fixed
@@ -0,0 +1,226 @@
1
+ # be-guide — 사내 백엔드 스킬 (Claude + Codex)
2
+
3
+ > AI 코딩 에이전트가 사내 합의된 BE 원칙대로 *구현 / 리뷰 / 성능 진단 / 보안 감사* 하게 만드는 스킬 번들.
4
+ > 단일 소스 (이 폴더), 양쪽 어댑터 (Claude SKILL.md / Codex AGENTS.md).
5
+
6
+ ## 1. 무엇이 들어있는가
7
+
8
+ ```
9
+ be-guide/
10
+ ├─ sources/ # 원본 코퍼스 (수집일 예정 — 2026-05-18 스캐폴드)
11
+ │ ├─ 12factor/ 12-Factor App (12개 Factor)
12
+ │ ├─ sre-book/ Google SRE Book (SLO, RED Method, Monitoring)
13
+ │ ├─ owasp-api/ OWASP API Security Top 10 (2023)
14
+ │ ├─ otel/ OpenTelemetry (Traces/Metrics/Logs)
15
+ │ ├─ ddia/ Designing Data-Intensive Applications
16
+ │ ├─ api-design/ Stripe + GitHub + Google AIP
17
+ │ ├─ postgres/ Use The Index Luke + PostgreSQL 공식
18
+ │ ├─ node-runtime/ Node.js docs + Fastify + NestJS + Pino
19
+ │ └─ go-runtime/ Effective Go + Go scheduler + pprof + golangci-lint
20
+ ├─ principles/ # 합의 원칙 (코퍼스 위에서 사내 의사결정)
21
+ │ ├─ common.md 스택 중립 (API 설계 4원칙, Error Model, Observability, Security, DB)
22
+ │ ├─ node.md Node.js/TypeScript 특화
23
+ │ └─ go.md Go 특화
24
+ ├─ skills/ # 실제 호출되는 스킬
25
+ │ ├─ node/{be-build,be-review,be-perf,be-security}/SKILL.md
26
+ │ └─ go/{be-build,be-review,be-perf,be-security}/SKILL.md
27
+ ├─ adapters/
28
+ │ └─ build-agents-md.sh SKILL.md → Codex AGENTS.md 변환
29
+ └─ README.md
30
+ ```
31
+
32
+ 4개 스킬 × 2개 스택 = **8개 스킬**:
33
+
34
+ | 스킬 | 호출 시점 | 무엇을 해주는가 |
35
+ |------|-----------|----------------|
36
+ | **be-build** | "이 API 명세대로 구현해줘" | 명세→API contract→체크리스트→테스트 매핑 강제, 에러 모델·관찰가능성·보안 기준선 적용 |
37
+ | **be-review** | "이 OpenAPI 스펙 리뷰해줘", "이 PR 리뷰해줘" | `[SEVERITY] file:line — 이슈` 형식 리뷰, 머지 차단/비차단 명시 |
38
+ | **be-perf** | "p99가 800ms야 잡아줘", "DB 쿼리 느려졌어" | p95/p99 진단 절차 (N+1, GC, Event Loop, lock, network) |
39
+ | **be-security** | "이 핸들러 OWASP 관점에서 검토해줘" | OWASP API Top 10 카테고리별 체크리스트 + 픽스 패턴 |
40
+
41
+ ## 2. Claude Code 사용법
42
+
43
+ ### 2.1 전역 설치 (모든 프로젝트에서 사용)
44
+
45
+ ```bash
46
+ # 1. be-guide 를 원하는 위치에 clone (또는 이미 받아둔 경로)
47
+ export BE_GUIDE_ROOT=~/work/be-guide # 본인 환경에 맞게
48
+
49
+ # 2. ~/.claude/skills 에 심볼릭 링크
50
+ cd ~/.claude/skills
51
+ ln -s "$BE_GUIDE_ROOT/skills/node/be-build" be-build-node
52
+ ln -s "$BE_GUIDE_ROOT/skills/node/be-review" be-review-node
53
+ ln -s "$BE_GUIDE_ROOT/skills/node/be-perf" be-perf-node
54
+ ln -s "$BE_GUIDE_ROOT/skills/node/be-security" be-security-node
55
+ ln -s "$BE_GUIDE_ROOT/skills/go/be-build" be-build-go
56
+ ln -s "$BE_GUIDE_ROOT/skills/go/be-review" be-review-go
57
+ ln -s "$BE_GUIDE_ROOT/skills/go/be-perf" be-perf-go
58
+ ln -s "$BE_GUIDE_ROOT/skills/go/be-security" be-security-go
59
+ ```
60
+
61
+ 이후 Claude Code 에서:
62
+ ```
63
+ /be-build-node # 또는 자연어로 "be-build-node 스킬로 이 명세 구현해줘"
64
+ ```
65
+
66
+ ### 2.2 프로젝트별 설치 (저장소에 묶어 배포)
67
+
68
+ ```bash
69
+ cd <your-repo>
70
+ mkdir -p .claude/skills
71
+ ln -s "$BE_GUIDE_ROOT/skills/node/be-build" .claude/skills/be-build
72
+ # 또는 git submodule / sparse-checkout 으로 be-guide 자체를 묶음
73
+ ```
74
+
75
+ `.claude/skills/` 의 SKILL.md 는 Claude Code 가 자동 인식.
76
+
77
+ ## 3. Codex CLI 사용법
78
+
79
+ Codex 는 프로젝트 루트의 `AGENTS.md` (또는 `~/.codex/AGENTS.md` 전역) 를 읽음.
80
+
81
+ ### 3.1 AGENTS.md 생성
82
+
83
+ ```bash
84
+ export BE_GUIDE_ROOT=~/work/be-guide
85
+ export BE_GUIDE_SOURCE="사내 공유 be-guide v2026-05-18 (배포: <본인 이름>)" # AGENTS.md 출처 표기용 (선택)
86
+
87
+ cd <your-repo>
88
+ "$BE_GUIDE_ROOT/adapters/build-agents-md.sh" node be-build > AGENTS.md
89
+
90
+ # 또는 여러 스킬 합치기:
91
+ {
92
+ "$BE_GUIDE_ROOT/adapters/build-agents-md.sh" node be-build
93
+ echo
94
+ "$BE_GUIDE_ROOT/adapters/build-agents-md.sh" node be-review
95
+ echo
96
+ "$BE_GUIDE_ROOT/adapters/build-agents-md.sh" node be-perf
97
+ echo
98
+ "$BE_GUIDE_ROOT/adapters/build-agents-md.sh" node be-security
99
+ } > AGENTS.md
100
+ ```
101
+
102
+ 생성된 `AGENTS.md` 는 Codex 가 매 세션 자동 로딩.
103
+
104
+ ### 3.2 sources/principles 도 같이 배포
105
+
106
+ `AGENTS.md` 가 `principles/common.md`, `principles/node.md` 를 참조하므로:
107
+
108
+ - **Option A** — `be-guide/` 자체를 저장소에 git submodule 로 포함
109
+ - **Option B** — 빌드 시 `cp -R be-guide/{principles,sources} <repo>/.be-guide/`
110
+ - **Option C** — 사내 npm 패키지 또는 Go 모듈로 배포
111
+
112
+ 권장: **A (submodule)** — 버전 명시적, AI가 직접 참조 가능.
113
+
114
+ ## 4. 사용 시나리오 예시
115
+
116
+ ### 4.1 be-build
117
+
118
+ ```
119
+ 사용자: 첨부한 OpenAPI 명세대로 주문 생성 API 구현해줘.
120
+ /be-build-node
121
+
122
+ AI: ## 요구사항 체크리스트
123
+ - [ ] R-01: "POST /v1/orders, userId와 items 필수"
124
+ - [ ] R-02: "couponCode는 optional"
125
+ ...
126
+ 체크리스트 확인 후 API contract → TDD 들어갑니다.
127
+ ```
128
+
129
+ ### 4.2 be-review
130
+
131
+ ```
132
+ 사용자: PR #456 리뷰해줘. 이 OpenAPI 스펙 기준으로.
133
+ /be-review-go
134
+
135
+ AI: ## 리뷰 요약
136
+ - 변경: 5 files +248 -32
137
+ - HIGH 2, MED 3, LOW 1 / 머지 차단
138
+
139
+ [HIGH] internal/handler/order.go:55 — API1: 소유권 검증 없음
140
+ [HIGH] internal/repo/order.go:88 — SQL 문자열 concat, injection 위험
141
+ [MED] internal/service/order.go:120 — goroutine 종료 조건 없음
142
+ ...
143
+ ```
144
+
145
+ ### 4.3 be-perf
146
+
147
+ ```
148
+ 사용자: 주문 목록 API p99가 800ms야. 잡아줘.
149
+ /be-perf-node
150
+
151
+ AI: ## p99 진단
152
+ - 분류: DB N+1
153
+ - 측정 절차: Prisma 쿼리 이벤트 로깅으로 단일 요청 쿼리 수 확인
154
+ - 가설: findMany 후 루프에서 user를 N번 조회
155
+ - 검증 후 픽스: include: { user: { select: { id, name } } }
156
+ ```
157
+
158
+ ### 4.4 be-security
159
+
160
+ ```
161
+ 사용자: 이 결제 핸들러 OWASP 관점에서 검토해줘.
162
+ /be-security-node
163
+
164
+ AI: ## 보안 감사 결과
165
+ [HIGH] API1 src/payments/payment.handler.ts:42 — 소유권 검증 없음
166
+ [HIGH] API6 src/auth/auth.handler.ts:15 — 로그인 rate limit 없음
167
+ - API2: JWT RS256 + 만료 검증 ✅
168
+ - API4: Rate limit 전역 설정 ✅
169
+ ```
170
+
171
+ ## 5. 유지보수
172
+
173
+ ### 5.1 코퍼스 갱신
174
+
175
+ 외부 문서 (OWASP, OTel, Go 공식 등) 가 갱신될 수 있으므로 **분기 1회 수동 갱신** 권장:
176
+
177
+ ```
178
+ sources/<dir>/INDEX.md 의 출처들을 최신화해서 같은 형식으로 재저장해줘
179
+ ```
180
+
181
+ ### 5.2 principles 수정 시
182
+
183
+ `principles/*.md` 는 사내 합의 문서. 수정 시:
184
+ 1. 출처 (sources/ 또는 외부 URL) 명시
185
+ 2. 변경 이력 PR 로 남김
186
+ 3. 영향받는 SKILL.md 의 참조 위치 확인
187
+
188
+ ### 5.3 새 스킬 추가
189
+
190
+ `skills/<stack>/<name>/SKILL.md` 한 파일 추가 + `adapters/build-agents-md.sh` 그대로 사용.
191
+
192
+ ## 6. 출처 우선순위 (충돌 시)
193
+
194
+ 코퍼스 간 충돌 발생 시 `principles/common.md` 에 명시된 순서 적용:
195
+
196
+ 1. **12-Factor App** (실행 환경·운영 기준)
197
+ 2. **Google SRE Book** (가용성·SLO)
198
+ 3. **OWASP API Security** (보안)
199
+ 4. **OpenTelemetry** (관찰가능성)
200
+ 5. **DDIA** (데이터 시스템)
201
+ 6. **프레임워크 공식** (Fastify, NestJS, Go stdlib)
202
+ 7. **벤더 권장** (AWS, Stripe 등)
203
+
204
+ 사용자 영향 우선순위: **security > availability > correctness > performance > readability**.
205
+
206
+ ## 7. 라이선스 / 출처 주의
207
+
208
+ - 12-Factor App: CC BY 4.0
209
+ - Google SRE Book: CC BY-NC-ND 4.0 (비상업적 사용)
210
+ - OWASP API Security: CC BY-SA 4.0
211
+ - OpenTelemetry: Apache-2.0
212
+ - DDIA: O'Reilly 저작권 (요약만 수록, 원문 미포함)
213
+ - Stripe API 문서: 공개 참조 가능, 재배포 금지
214
+ - GitHub REST API 문서: CC BY 4.0
215
+ - Google AIP: Apache-2.0
216
+ - Use The Index, Luke: CC BY-NC 4.0
217
+ - PostgreSQL 공식 문서: PostgreSQL License
218
+ - Node.js / Fastify / NestJS / Pino: MIT
219
+ - Go 공식 문서: BSD-3-Clause
220
+
221
+ 사내 배포 시 각 코퍼스 원본 출처 보존 (`sources/<dir>/INDEX.md` 에 명시됨).
222
+
223
+ ## 8. 관련 문서
224
+
225
+ - fe-guide: `../fe/README.md` — 자매 프로젝트 (프론트엔드 스킬 번들)
226
+ - be-build/be-review 의 "명세→API contract→체크리스트→테스트 매핑" 강제는 명세 위반으로 인한 운영 장애 패턴에서 도출 — 스키마 optional/required 불일치가 핵심.
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env bash
2
+ # build-agents-md.sh
3
+ #
4
+ # Claude SKILL.md (frontmatter + body) 를 Codex AGENTS.md 형식으로 변환.
5
+ #
6
+ # 사용법:
7
+ # ./adapters/build-agents-md.sh node be-build > /path/to/project/AGENTS.md
8
+ # ./adapters/build-agents-md.sh go be-review
9
+ #
10
+ # 동작:
11
+ # 1. skills/<stack>/<skill>/SKILL.md 읽음
12
+ # 2. YAML frontmatter (name, description) 떼어내고 본문만 추출
13
+ # 3. AGENTS.md 표준 헤더로 감싸고 stdout 출력
14
+ #
15
+ # Codex CLI 는 프로젝트 루트의 AGENTS.md 를 자동으로 읽음 (또는 ~/.codex/AGENTS.md 전역).
16
+ # Claude Code 는 SKILL.md 를 직접 사용 (skill loader 가 frontmatter 인식).
17
+
18
+ set -euo pipefail
19
+
20
+ if [[ $# -lt 2 ]]; then
21
+ echo "Usage: $0 <stack> <skill>" >&2
22
+ echo " stack: node | go" >&2
23
+ echo " skill: be-build | be-review | be-perf | be-security" >&2
24
+ exit 1
25
+ fi
26
+
27
+ STACK="$1"
28
+ SKILL="$2"
29
+ ROOT="$(cd "$(dirname "$0")/.." && pwd)"
30
+ SKILL_FILE="$ROOT/skills/$STACK/$SKILL/SKILL.md"
31
+
32
+ if [[ ! -f "$SKILL_FILE" ]]; then
33
+ echo "Error: $SKILL_FILE not found" >&2
34
+ exit 2
35
+ fi
36
+
37
+ # frontmatter 파싱: 첫 --- 부터 두번째 --- 사이가 YAML
38
+ NAME=$(awk '/^---$/{c++; next} c==1 && /^name:/ {sub(/^name:[[:space:]]*/,""); print; exit}' "$SKILL_FILE")
39
+ DESC=$(awk '/^---$/{c++; next} c==1 && /^description:/ {sub(/^description:[[:space:]]*/,""); print; exit}' "$SKILL_FILE")
40
+
41
+ # 본문: 두번째 --- 이후
42
+ BODY=$(awk '/^---$/{c++; next} c>=2 {print}' "$SKILL_FILE")
43
+
44
+ cat <<EOF
45
+ # ${NAME:-$SKILL}
46
+
47
+ > ${DESC:-BE engineering guide for $STACK}
48
+ >
49
+ > Generated from \`skills/$STACK/$SKILL/SKILL.md\` on $(date +%Y-%m-%d).
50
+ > Source of truth: ${BE_GUIDE_SOURCE:-be-guide (OSS skill bundle — set BE_GUIDE_SOURCE to override)}
51
+
52
+ ## When to apply
53
+
54
+ When working on $STACK code in this repository, follow the guidance below.
55
+ You can also load the principles via:
56
+
57
+ - \`principles/common.md\` — framework-neutral rules
58
+ - \`principles/$STACK.md\` — $STACK-specific rules
59
+
60
+ ---
61
+
62
+ $BODY
63
+ EOF