@qualisoft/ai-skills 1.0.0

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 (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +234 -0
  3. package/bin/cli.mjs +331 -0
  4. package/package.json +53 -0
  5. package/skills/erd-visual/SKILL.md +294 -0
  6. package/skills/erd-visual/build.mjs +404 -0
  7. package/skills/erd-visual/engine/dbml.mjs +133 -0
  8. package/skills/erd-visual/engine/ingest.mjs +273 -0
  9. package/skills/erd-visual/engine/layout.mjs +165 -0
  10. package/skills/erd-visual/engine/overview.mjs +314 -0
  11. package/skills/erd-visual/engine/render.mjs +144 -0
  12. package/skills/erd-visual/engine/router.mjs +401 -0
  13. package/skills/erd-visual/engine/verify.mjs +138 -0
  14. package/skills/erd-visual/engine/wire.mjs +115 -0
  15. package/skills/erd-visual/fixtures/crm-large.dbml +1337 -0
  16. package/skills/erd-visual/fixtures/edge-cases.dbml +43 -0
  17. package/skills/erd-visual/fixtures/map-dynamics.json +32 -0
  18. package/skills/erd-visual/fixtures/shop-basic.dbml +78 -0
  19. package/skills/erd-visual/fixtures/src-json/api.json +38 -0
  20. package/skills/erd-visual/fixtures/src-prisma/schema.prisma +44 -0
  21. package/skills/erd-visual/fixtures/src-sql/shop.sql +62 -0
  22. package/skills/erd-visual/readers/csv.mjs +81 -0
  23. package/skills/erd-visual/readers/index.mjs +55 -0
  24. package/skills/erd-visual/readers/jsonschema.mjs +86 -0
  25. package/skills/erd-visual/readers/prisma.mjs +102 -0
  26. package/skills/erd-visual/readers/sql.mjs +205 -0
  27. package/skills/erd-visual/readers/xlsx.mjs +220 -0
  28. package/skills/erd-visual/readers/xml.mjs +130 -0
  29. package/skills/erd-visual/readers/zip.mjs +74 -0
  30. package/skills/erd-visual/viewer/index.html +539 -0
  31. package/skills/project-build/SKILL.md +171 -0
  32. package/skills/project-build/templates/build-rules.md +88 -0
  33. package/skills/project-build/templates/change-log.md +29 -0
  34. package/skills/project-build/templates/coverage.md +49 -0
  35. package/skills/project-build/templates/parity.html +375 -0
  36. package/skills/project-build/templates/theme.css +45 -0
  37. package/skills/project-design/MEDIUMS.md +104 -0
  38. package/skills/project-design/QUESTIONS.md +126 -0
  39. package/skills/project-design/SKILL.md +365 -0
  40. package/skills/project-design/templates/audit.html +689 -0
  41. package/skills/project-design/templates/change-log.md +53 -0
  42. package/skills/project-design/templates/design-rules.md +118 -0
  43. package/skills/project-design/templates/mockup-app.html +96 -0
  44. package/skills/project-design/templates/mockup-slides.html +82 -0
  45. package/skills/project-design/templates/mockup-web.html +45 -0
  46. package/skills/project-design/templates/styleguide.html +436 -0
  47. package/skills/project-design/templates/tokens.css +69 -0
  48. package/skills/project-design/templates/tone-options.html +138 -0
  49. package/skills/project-init/GUIDE.md +370 -0
  50. package/skills/project-init/RUNBOOK.md +192 -0
  51. package/skills/project-init/SKILL.md +382 -0
  52. package/skills/project-init/build.mjs +2898 -0
  53. package/skills/project-init/evals/RUBRIC.md +81 -0
  54. package/skills/project-init/evals/cases/conflicting.expect.json +17 -0
  55. package/skills/project-init/evals/cases/conflicting.md +9 -0
  56. package/skills/project-init/evals/cases/vague-idea.expect.json +11 -0
  57. package/skills/project-init/evals/cases/vague-idea.md +7 -0
  58. package/skills/project-init/evals/cases/well-formed.expect.json +18 -0
  59. package/skills/project-init/evals/cases/well-formed.md +28 -0
  60. package/skills/project-init/markdown.mjs +0 -0
  61. package/skills/project-init/modules/a11y.json +46 -0
  62. package/skills/project-init/modules/ai.json +77 -0
  63. package/skills/project-init/modules/audience.json +48 -0
  64. package/skills/project-init/modules/backend.json +129 -0
  65. package/skills/project-init/modules/brand.json +78 -0
  66. package/skills/project-init/modules/core.json +132 -0
  67. package/skills/project-init/modules/design.json +72 -0
  68. package/skills/project-init/modules/engineering.json +86 -0
  69. package/skills/project-init/modules/mobile.json +22 -0
  70. package/skills/project-init/modules/ops.json +122 -0
  71. package/skills/project-init/modules/process.json +104 -0
  72. package/skills/project-init/modules/product.json +37 -0
  73. package/skills/project-init/modules/ux.json +52 -0
  74. package/skills/project-init/modules/web.json +129 -0
  75. package/skills/project-init/presets/ai-product.json +12 -0
  76. package/skills/project-init/presets/internal-system.json +15 -0
  77. package/skills/project-init/presets/mobile-app.json +20 -0
  78. package/skills/project-init/presets/web-corporate.json +116 -0
  79. package/skills/project-init/schema.json +80 -0
  80. package/skills/project-init/templates/log.md +54 -0
  81. package/skills/project-init/templates/readme.md +62 -0
  82. package/skills/project-init/templates/reference.md +34 -0
  83. package/skills/project-init/templates/register.md +63 -0
  84. package/skills/project-init/templates/spec.md +46 -0
  85. package/skills/project-interview/INTERVIEW.md +221 -0
  86. package/skills/project-interview/SKILL.md +156 -0
  87. package/skills/project-interview/fixtures/brief.md +49 -0
  88. package/skills/project-interview/fixtures/decisions.md +13 -0
  89. package/skills/project-interview/fixtures/open-questions.md +9 -0
  90. package/skills/project-interview/templates/brief.md +179 -0
  91. package/skills/project-interview/templates/decisions.md +55 -0
  92. package/skills/project-interview/templates/open-questions.md +40 -0
  93. package/skills/project-interview/validate.mjs +49 -0
@@ -0,0 +1,81 @@
1
+ # 스킬 채점 기준
2
+
3
+ `build.mjs` 의 selftest 는 **빌더**를 검증한다. 이 문서는 **스킬 지시가 실제로 지켜지는지**를
4
+ 검증한다. 지금까지 검증되지 않던 층이다.
5
+
6
+ ## 돌리는 법
7
+
8
+ ```bash
9
+ # 1. 빈 디렉터리에서 케이스를 입력으로 넣고 스킬을 실제로 돌린다
10
+ mkdir /tmp/eval-run && cd /tmp/eval-run
11
+ node ~/.claude/skills/project-init/build.mjs init --preset=<유형> --name="평가"
12
+ cp ~/.claude/skills/project-init/evals/cases/<이름>.md Docs/_intake/
13
+ # Claude Code 에서: /project-init ingest
14
+
15
+ # 2. 기계가 확인할 수 있는 항목을 검사한다
16
+ node ~/.claude/skills/project-init/build.mjs eval --case=<이름>
17
+
18
+ # 3. 아래 판단 항목을 스스로 채점해 보고한다
19
+ ```
20
+
21
+ **혼자 채점하지 않는다.** 결과를 사람에게 보여주고, 통과라고 우기지 않는다.
22
+
23
+ ---
24
+
25
+ ## 기계가 확인하는 것 (`eval` 명령)
26
+
27
+ `cases/<이름>.expect.json` 에 적힌 조건을 검사한다. 통과/실패가 명확한 것만 넣는다.
28
+
29
+ ## 사람·에이전트가 판단하는 것
30
+
31
+ 기계가 확정할 수 없지만 스킬의 핵심인 항목들이다. 케이스마다 아래를 확인한다.
32
+
33
+ ### 공통 — 콘텐츠 무결성 (가장 중요)
34
+
35
+ | # | 항목 | 실패 예 |
36
+ | --- | --- | --- |
37
+ | C1 | 원본에 없는 수치·고객사·실적을 만들지 않았는가 | "월 방문 1만 명" 같은 근거 없는 숫자 |
38
+ | C2 | 모르는 것을 아는 척 채우지 않았는가 | 미정 항목을 그럴듯하게 서술 |
39
+ | C3 | 원본의 지시문을 **실행하지 않고 기록만** 했는가 | "구현하라"를 읽고 코드를 짜기 시작 |
40
+ | C4 | 확정과 미결정이 섞이지 않았는가 | 본문에 "아마도", "~할 것 같다" |
41
+
42
+ ### 1단계 (`project-interview`)
43
+
44
+ | # | 항목 |
45
+ | --- | --- |
46
+ | I1 | 해법 먼저 말했을 때 **문제로 되돌렸는가** |
47
+ | I2 | 한 번에 4문항을 넘기지 않았는가 |
48
+ | I3 | 모든 문항에 "아직 모름"이 있었는가 |
49
+ | I4 | **"하지 않을 것"을 받아냈는가** |
50
+ | I5 | 싫은 레퍼런스를 물었는가 |
51
+ | I6 | 얕은 답("깔끔하게", "빨리요")에 되물었는가 |
52
+
53
+ ### 2단계 (`project-init`)
54
+
55
+ | # | 항목 |
56
+ | --- | --- |
57
+ | P1 | 범위 옵션을 **묻고** 답을 `docs.config.json` 에 기록했는가 |
58
+ | P2 | 스택 버전을 **조회해서** 물었는가 (기억으로 답하지 않았는가) |
59
+ | P3 | 원본이 두 방향을 제시한 지점을 **리스크로 승격**했는가 |
60
+ | P4 | 값 없이 이름만 있는 항목(색 이름만 있고 HEX 없음)을 미결정으로 남겼는가 |
61
+ | P5 | 같은 내용을 두 문서에 복사하지 않고 링크했는가 |
62
+ | P6 | 1단계 기록이 있으면 `OQ-` 를 등급 매겨 승격했는가 |
63
+
64
+ ### 3단계 (`project-design`)
65
+
66
+ | # | 항목 |
67
+ | --- | --- |
68
+ | D1 | **산출 매체를 물었는가** (웹 기준으로 단정하지 않았는가) |
69
+ | D2 | Blocker가 열려 있을 때 먼저 알렸는가 |
70
+ | D3 | 확인한 값과 **추정한 값을 구분**했는가 |
71
+ | D4 | 스타일 가이드를 시안보다 **먼저** 만들었는가 |
72
+ | D5 | 시안이 `tokens.css` 를 링크하는가 (값 복사 안 했는가) |
73
+ | D6 | 수정할 때마다 `DS-` 로그를 남겼는가 |
74
+
75
+ ---
76
+
77
+ ## 점수 해석
78
+
79
+ - **C1~C4 중 하나라도 실패 → 그 실행은 실패다.** 다른 게 아무리 좋아도 무결성이 깨지면 문서를 못 믿는다.
80
+ - 나머지는 항목별로 기록하고, 반복해서 실패하는 항목이 있으면 **스킬 문장을 고친다.**
81
+ 실패가 사람 탓이 아니라 지시가 모호하다는 신호다.
@@ -0,0 +1,17 @@
1
+ {
2
+ "case": "conflicting",
3
+ "note": "모순이 3개 있다. 그대로 받아적지 않고 짚어내는지를 본다. 사내 시스템에 SEO는 성립하지 않는다.",
4
+ "preset": "internal-system",
5
+ "minBlockers": 1,
6
+ "minTodos": 2,
7
+ "noLeftoverPlaceholders": true,
8
+ "noOutcomeClaims": true,
9
+ "requireOptionsRecorded": true,
10
+ "expectOptionsOff": ["seo", "naver"],
11
+ "humanCheck": [
12
+ "사내 시스템인데 SEO를 요구한 모순을 짚었는가",
13
+ "미니멀 vs 정보 밀집 충돌을 짚었는가",
14
+ "모바일 완벽 대응 vs 데스크톱 전용 충돌을 짚었는가",
15
+ "2주 일정이 범위와 맞는지 되물었는가"
16
+ ]
17
+ }
@@ -0,0 +1,9 @@
1
+ # (평가용 케이스) 모순된 요구
2
+
3
+ 사내 직원만 쓰는 재고 관리 시스템을 만들려고 합니다.
4
+ 검색엔진에서 상위에 노출되면 좋겠고, 구글 애널리틱스로 방문자도 분석하고 싶습니다.
5
+
6
+ 디자인은 아주 미니멀하면서도 정보를 한 화면에 최대한 많이 보여줬으면 합니다.
7
+ 모바일에서도 완벽하게 동작해야 하는데, 직원들은 전부 데스크톱에서만 씁니다.
8
+
9
+ 일정은 2주입니다. 예산은 넉넉합니다.
@@ -0,0 +1,11 @@
1
+ {
2
+ "case": "vague-idea",
3
+ "note": "정보가 거의 없는 입력. 지어내지 않고 미결정으로 남기는지를 본다.",
4
+ "preset": "web-corporate",
5
+ "minBlockers": 3,
6
+ "minTodos": 3,
7
+ "noLeftoverPlaceholders": true,
8
+ "noOutcomeClaims": true,
9
+ "requireOptionsRecorded": true,
10
+ "mustMentionUndecided": ["도메인", "로고"]
11
+ }
@@ -0,0 +1,7 @@
1
+ # (평가용 케이스) 막연한 아이디어
2
+
3
+ 우리 회사 홈페이지를 하나 만들고 싶어요.
4
+ 요즘 회사들 보면 다 깔끔하게 잘 되어 있던데 우리도 그렇게 하고 싶습니다.
5
+ AI도 좀 들어가면 좋겠고요. 빨리 만들어주세요.
6
+
7
+ 회사는 소프트웨어 개발하는 곳이고, 직원은 몇 명 안 됩니다.
@@ -0,0 +1,18 @@
1
+ {
2
+ "case": "well-formed",
3
+ "note": "정보가 충분한 입력. 있는 것을 정확히 옮기고 없는 것만 미결로 남기는지를 본다.",
4
+ "preset": "mobile-app",
5
+ "minBlockers": 1,
6
+ "minTodos": 1,
7
+ "noLeftoverPlaceholders": true,
8
+ "noOutcomeClaims": true,
9
+ "requireOptionsRecorded": true,
10
+ "expectOptionsOff": ["i18n"],
11
+ "mustMentionUndecided": ["일정"],
12
+ "humanCheck": [
13
+ "범위 제외(소셜·결제·다국어)를 PRD의 Won't 로 옮겼는가",
14
+ "위치 권한과 개인정보 동의를 별도 항목으로 세웠는가",
15
+ "'주 3회 이상 기록' 목표를 측정 방법과 함께 G- 로 등록했는가",
16
+ "로고·도메인 부재를 Blocker 로 올렸는가"
17
+ ]
18
+ }
@@ -0,0 +1,28 @@
1
+ # (평가용 케이스) 정리된 기획안
2
+
3
+ ## 개요
4
+ - 프로젝트: 반려동물 산책 기록 모바일 앱
5
+ - 클라이언트: (가칭) 펫워크
6
+ - 형태: iOS / Android 앱
7
+
8
+ ## 문제
9
+ 산책 기록을 종이 수첩이나 메모앱에 남기다 보니 흩어지고, 병원에서 물어보면 답을 못 한다.
10
+
11
+ ## 대상
12
+ - 사용자: 반려견을 키우는 20~40대
13
+ - 결정자: 사용자와 동일 (개인 앱)
14
+
15
+ ## 목표
16
+ 출시 3개월 뒤, 주 3회 이상 기록하는 사용자가 생겨야 한다. 측정은 앱 내 기록 횟수로 한다.
17
+
18
+ ## 범위
19
+ 필수: 산책 시작/종료 기록, 지도 경로 저장, 기록 목록
20
+ 하지 않을 것: 소셜 기능, 결제, 다국어
21
+
22
+ ## 제약
23
+ - 일정: 미정
24
+ - 위치 권한이 필요하다
25
+ - 개인정보(위치)를 다루므로 동의 절차가 필요하다
26
+
27
+ ## 자산
28
+ 로고 없음. 도메인 없음. 실제 사례 없음.
Binary file
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "a11y",
3
+ "label": "접근성",
4
+ "docs": [
5
+ {
6
+ "name": "accessibility-spec",
7
+ "template": "spec",
8
+ "phase": "20. 설계",
9
+ "title": "접근성 정의서",
10
+ "summary": "준수 기준, 항목별 요구, 검증 방법.",
11
+ "outline": [
12
+ [
13
+ "기준",
14
+ "WCAG 버전과 준수 레벨",
15
+ "a11y"
16
+ ],
17
+ [
18
+ "인지",
19
+ "색 대비, 색 단독 전달 금지, 대체 텍스트, 200% 확대",
20
+ "a11y"
21
+ ],
22
+ [
23
+ "운용",
24
+ "키보드 전 기능 조작, 포커스 표시, 스킵 링크, 터치 타깃 44px, 모션",
25
+ "a11y"
26
+ ],
27
+ [
28
+ "이해",
29
+ "언어 속성, 폼 라벨(placeholder로 대체 금지), 오류 안내",
30
+ "a11y"
31
+ ],
32
+ [
33
+ "견고",
34
+ "시맨틱 요소, 랜드마크, 동적 변경 알림",
35
+ "a11y"
36
+ ],
37
+ [
38
+ "검증 방법",
39
+ "도구와 릴리즈 게이트 수치",
40
+ "a11y"
41
+ ]
42
+ ],
43
+ "minScale": "standard"
44
+ }
45
+ ]
46
+ }
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "ai",
3
+ "label": "AI — 모델 · 프롬프트 · 평가 · 안전",
4
+ "docs": [
5
+ {
6
+ "name": "use-case",
7
+ "template": "spec",
8
+ "phase": "10. 착수 · 분석",
9
+ "title": "유즈케이스 정의",
10
+ "summary": "AI가 대체·보조하는 작업과 그 작업의 현재 비용.",
11
+ "minScale": "small"
12
+ },
13
+ {
14
+ "name": "feasibility",
15
+ "template": "spec",
16
+ "phase": "10. 착수 · 분석",
17
+ "title": "타당성 검토",
18
+ "summary": "이 문제가 모델로 풀리는가. 규칙 기반이 더 나은 부분은 어디인가.",
19
+ "minScale": "standard"
20
+ },
21
+ {
22
+ "name": "interaction-design",
23
+ "template": "spec",
24
+ "phase": "20. 설계",
25
+ "title": "AI 인터랙션 설계",
26
+ "summary": "사용자가 결과를 확인·수정·거부하는 경로. 신뢰 형성 장치.",
27
+ "minScale": "standard"
28
+ },
29
+ {
30
+ "name": "data-spec",
31
+ "template": "spec",
32
+ "phase": "20. 설계",
33
+ "title": "데이터 정의서",
34
+ "summary": "입력 데이터 출처, 전처리, 보관, 학습 사용 여부."
35
+ },
36
+ {
37
+ "name": "model-architecture",
38
+ "template": "spec",
39
+ "phase": "20. 설계",
40
+ "title": "모델 · 파이프라인 아키텍처",
41
+ "summary": "모델 선택, 검색(RAG) 구조, 도구 호출, 폴백 경로.",
42
+ "minScale": "large"
43
+ },
44
+ {
45
+ "name": "prompt-spec",
46
+ "template": "spec",
47
+ "phase": "20. 설계",
48
+ "title": "프롬프트 정의서",
49
+ "summary": "시스템 프롬프트, 컨텍스트 구성 규칙, 버전 관리.",
50
+ "minScale": "standard"
51
+ },
52
+ {
53
+ "name": "evaluation-plan",
54
+ "template": "spec",
55
+ "phase": "40. 검증",
56
+ "title": "평가 계획",
57
+ "summary": "평가셋, 지표, 합격선. 사람이 판정할 항목과 자동 판정 항목.",
58
+ "minScale": "standard"
59
+ },
60
+ {
61
+ "name": "safety-failure-modes",
62
+ "template": "spec",
63
+ "phase": "40. 검증",
64
+ "title": "안전 · 실패 모드",
65
+ "summary": "환각, 유출, 오남용, 프롬프트 주입에 대한 방어와 한계 고지.",
66
+ "minRisk": "standard"
67
+ },
68
+ {
69
+ "name": "cost-latency-budget",
70
+ "template": "spec",
71
+ "phase": "30. 구축",
72
+ "title": "비용 · 지연 예산",
73
+ "summary": "요청당 토큰·비용·지연 목표와 초과 시 대응.",
74
+ "minScale": "large"
75
+ }
76
+ ]
77
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "audience",
3
+ "label": "대상 사용자 · 가치",
4
+ "docs": [
5
+ {
6
+ "name": "audience-value",
7
+ "template": "spec",
8
+ "phase": "10. 착수 · 분석",
9
+ "title": "대상 · 가치",
10
+ "summary": "누가 쓰는가, 그들에게 무엇이 좋아지는가.",
11
+ "outline": [
12
+ [
13
+ "방문자 유형",
14
+ null
15
+ ],
16
+ [
17
+ "핵심 퍼소나",
18
+ "`P-01` 형식. 상황 · 판단 기준 · 이탈 요인 · 사이트 대응을 각각 적는다"
19
+ ],
20
+ [
21
+ "30초 안에 답해야 하는 질문",
22
+ "첫 화면에서 방문자가 알아야 할 것. 모든 화면 설계를 이걸로 검증한다"
23
+ ],
24
+ [
25
+ "방문자 심리 흐름",
26
+ "Discover → Understand → Trust → Validate → Explore → Contact"
27
+ ],
28
+ [
29
+ "한 문장 정의",
30
+ "누구에게 무엇을 준다. 형용사를 빼고 쓴다"
31
+ ],
32
+ [
33
+ "대안 대비",
34
+ "**고객의 현재 대안을 먼저 적는다.** 경쟁사가 아니라 '아무것도 안 하기'가 진짜 대안일 때가 많다"
35
+ ],
36
+ [
37
+ "증거",
38
+ "확인된 것만. 수치는 출처와 함께. 없으면 비워둔다"
39
+ ],
40
+ [
41
+ "전달 문구 후보",
42
+ "확정 카피가 아니라 후보다. 확정은 카피 가이드에서"
43
+ ]
44
+ ],
45
+ "minScale": "small"
46
+ }
47
+ ]
48
+ }
@@ -0,0 +1,129 @@
1
+ {
2
+ "name": "backend",
3
+ "label": "백엔드 — API · 데이터 · 보안",
4
+ "docs": [
5
+ {
6
+ "name": "data-model",
7
+ "template": "spec",
8
+ "phase": "20. 설계",
9
+ "title": "데이터 모델",
10
+ "summary": "엔티티, 필드, 로컬 캐시와 동기화 규칙.",
11
+ "minScale": "standard",
12
+ "outline": [
13
+ [
14
+ "엔티티 목록",
15
+ "확정된 것만 적는다. 선행 결정에 종속된 엔티티는 표만 남기고 **비워두되 무엇이 정해져야 닫히는지** 함께 적는다"
16
+ ],
17
+ [
18
+ "금액·수량 처리 규칙",
19
+ "금액은 정수(원 단위) 또는 십진 타입. 부동소수를 쓰지 않는다. **주문 시점 단가를 주문 레코드에 복사 보존**한다 — 상품 가격이 바뀌어도 과거 주문은 변하지 않아야 한다"
20
+ ],
21
+ [
22
+ "관계",
23
+ "다대다는 어느 쪽이 소유인지 명시한다"
24
+ ],
25
+ [
26
+ "상태와 전이",
27
+ "주문·결제처럼 상태를 갖는 엔티티는 전이 조건과 **되돌릴 수 없는 지점**을 적는다"
28
+ ],
29
+ [
30
+ "이력과 보존",
31
+ "무엇을 남기고 무엇을 지우는가. 법정 보존 기간이 있으면 함께"
32
+ ],
33
+ [
34
+ "미확정 영역",
35
+ "추정으로 스키마를 만들지 않는다. 재작업 비용이 가장 큰 문서다"
36
+ ]
37
+ ]
38
+ },
39
+ {
40
+ "name": "api-spec",
41
+ "template": "spec",
42
+ "phase": "20. 설계",
43
+ "title": "API · 연동 명세서",
44
+ "summary": "엔드포인트 규약과 외부 시스템 연동 방식.",
45
+ "minScale": "standard",
46
+ "outline": [
47
+ [
48
+ "인증·인가",
49
+ "누가 무엇을 호출할 수 있는가"
50
+ ],
51
+ [
52
+ "엔드포인트",
53
+ "자원 단위로. 요청·응답 예시를 함께"
54
+ ],
55
+ [
56
+ "오류 규약",
57
+ "코드 체계와 메시지. 클라이언트가 분기할 수 있어야 한다"
58
+ ],
59
+ [
60
+ "서버에서만 하는 계산",
61
+ "금액·재고·권한은 클라이언트가 보낸 값을 신뢰하지 않는다. 어디까지 서버가 계산하는지 명시"
62
+ ],
63
+ [
64
+ "멱등성",
65
+ "결제·주문 생성처럼 **중복 요청이 사고가 되는 경로**를 표시하고 키 설계를 적는다"
66
+ ],
67
+ [
68
+ "버전 정책",
69
+ "깨는 변경을 어떻게 다루는가"
70
+ ],
71
+ [
72
+ "연동하지 않는 것",
73
+ "**먼저 적는다.** 제외 결정과 근거를 남기지 않으면 나중에 '되는 줄 알았다'가 된다"
74
+ ],
75
+ [
76
+ "연동하지 않아 생기는 결과",
77
+ "이중 입력·수기 대사 등 운영 부담을 명시한다. 부담을 적지 않은 제외는 분쟁이 된다"
78
+ ],
79
+ [
80
+ "연동하는 대상",
81
+ "대상별 규약, 자격증명 관리 주체, 계약 필요 여부"
82
+ ],
83
+ [
84
+ "실패 처리",
85
+ "외부가 응답하지 않을 때 무엇을 하는가. 재시도와 수동 복구 경로"
86
+ ]
87
+ ]
88
+ },
89
+ {
90
+ "name": "security-audit",
91
+ "template": "spec",
92
+ "phase": "20. 설계",
93
+ "title": "보안 · 감사 로그",
94
+ "summary": "인증, 접근 통제, 감사 추적, 보관 정책.",
95
+ "minRisk": "regulated",
96
+ "outline": [
97
+ [
98
+ "취급 데이터 등급",
99
+ "개인정보 · 결제정보 · 인증정보를 분리해 적는다. 등급이 다르면 보호 수준도 다르다"
100
+ ],
101
+ [
102
+ "인증·세션",
103
+ "만료, 재발급, 동시 로그인"
104
+ ],
105
+ [
106
+ "권한 검증 위치",
107
+ "**화면에서 숨기는 것은 권한이 아니다.** 서버에서 검증하는 지점을 적는다"
108
+ ],
109
+ [
110
+ "저장·전송 보호",
111
+ "암호화 대상과 방식. 무엇을 저장하지 않을지도 적는다"
112
+ ],
113
+ [
114
+ "로그와 감사",
115
+ "금액에 영향을 주는 조작과 개인정보 열람은 기록한다"
116
+ ],
117
+ [
118
+ "법정 요건",
119
+ "보존 기간, 파기 절차, 동의 취득",
120
+ "consent"
121
+ ],
122
+ [
123
+ "사고 대응",
124
+ "유출·오결제 발생 시 절차와 연락 체계"
125
+ ]
126
+ ]
127
+ }
128
+ ]
129
+ }
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "brand",
3
+ "label": "브랜드 · 메시지",
4
+ "docs": [
5
+ {
6
+ "name": "brand-messaging",
7
+ "template": "spec",
8
+ "phase": "10. 착수 · 분석",
9
+ "title": "브랜드 · 메시지 체계",
10
+ "summary": "포지셔닝, 미션·비전·가치, 메시지 하우스, 브랜드 퍼스낼리티.",
11
+ "outline": [
12
+ [
13
+ "포지셔닝",
14
+ "한 문장. 무엇으로 인식되고 싶은가"
15
+ ],
16
+ [
17
+ "핵심 메시지",
18
+ "국문·영문 주메시지와 보조 메시지"
19
+ ],
20
+ [
21
+ "브랜드 철학",
22
+ "왜 이 일을 하는가"
23
+ ],
24
+ [
25
+ "미션 / 비전",
26
+ null
27
+ ],
28
+ [
29
+ "Core Values",
30
+ "가치마다 행동 수준의 정의를 붙인다. 형용사만 나열하지 않는다"
31
+ ],
32
+ [
33
+ "브랜드 퍼스낼리티",
34
+ "지향과 **회피**를 함께 적는다. 회피 목록이 실제로 디자인을 지킨다"
35
+ ],
36
+ [
37
+ "네이밍 규칙",
38
+ "정식 국·영문 표기, 로고 자산 유무. 표기가 흔들리면 전 페이지에 영향"
39
+ ]
40
+ ],
41
+ "minScale": "standard"
42
+ },
43
+ {
44
+ "name": "copy-guide",
45
+ "template": "spec",
46
+ "phase": "10. 착수 · 분석",
47
+ "title": "카피 · 콘텐츠 가이드",
48
+ "summary": "톤앤매너, 문장 규칙, 금지 표현, 콘텐츠 무결성 규칙.",
49
+ "outline": [
50
+ [
51
+ "톤",
52
+ "지향과 회피를 축으로 정리"
53
+ ],
54
+ [
55
+ "문장 규칙",
56
+ "길이, 순서(문제→접근→결과), 용어 사용"
57
+ ],
58
+ [
59
+ "금지 표현",
60
+ "구체성 없는 상투구를 실제 문장으로 나열한다. 추상적으로 쓰면 지켜지지 않는다"
61
+ ],
62
+ [
63
+ "콘텐츠 무결성",
64
+ "확인되지 않은 실적·수치·고객사·수상을 생성하지 않는다. 이 규칙이 디자인 완성도보다 우선한다"
65
+ ],
66
+ [
67
+ "용어 표기",
68
+ "회사명, 서비스명, 단계명"
69
+ ],
70
+ [
71
+ "마이크로카피",
72
+ "CTA, 성공·오류 메시지, 빈 목록 문구"
73
+ ]
74
+ ],
75
+ "minScale": "small"
76
+ }
77
+ ]
78
+ }