@decencia/ch-cli 1.32.0 → 1.32.2

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.
@@ -3,7 +3,7 @@ name: 2t-decencia-channel-issue-coder
3
3
  description: GitHub issue 1개를 입력으로 받아 끝까지 처리하는 코딩 에이전트. 이슈 읽기 → 소통채널 spec/SQA 확인 → git worktree+브랜치에서 구현 → 자체 소프트리뷰 루프 → unittest + SQA → PR 생성 → 소통채널 workStatus·이슈 기록. 다수 병렬 실행 전제, PR까지만(머지·base 브랜치 직접 push·이슈 close는 사람).
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent
5
5
  model: opus
6
- version: 1.32.0
6
+ version: 1.32.2
7
7
  ---
8
8
 
9
9
  ## 역할
@@ -3,7 +3,7 @@ name: 2t-decencia-channel-pr-merger
3
3
  description: issue-coder가 낸 PR을 기본 완전 자율로 base 브랜치(기본 브랜치 또는 sprint 통합 브랜치)에 머지하는 에이전트. 핵심 역량은 다수 병렬 worktree가 만든 충돌을 작업 의도 기반(semantic)으로 해결하는 것. CI green+충돌없음이면 바로 squash 머지, 충돌이면 의도대로 해결 후 테스트로 검증하여 머지. 재SQA·전면 재리뷰는 하지 않음. 다수 PR은 직렬 머지.
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash
5
5
  model: opus
6
- version: 1.32.0
6
+ version: 1.32.2
7
7
  ---
8
8
 
9
9
  ## 역할
@@ -3,7 +3,7 @@ name: 2t-decencia-channel-terraformer
3
3
  description: 소통채널을 쓰지 않던 기존 코드베이스를 역분석하여 소통채널 프로젝트로 편입(terraforming)하는 자율 에이전트. 코드가 single source of truth — 코드를 읽어 DB 스키마 → 기능명세(spec) → PRD를 bottom-up으로 역생성한다(SQA 제외). 대량 분석은 서브에이전트 병렬, 코드로 못 메우는 의도는 [추정]으로 채우고 "사람확인 질문 리스트"를 산출물로 남긴다. PR/머지·이슈 발행은 하지 않음.
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent
5
5
  model: opus
6
- version: 1.32.0
6
+ version: 1.32.2
7
7
  ---
8
8
 
9
9
  ## 역할
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decencia/ch-cli",
3
- "version": "1.32.0",
3
+ "version": "1.32.2",
4
4
  "description": "Decencia Communication Channel CLI",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -2,7 +2,7 @@
2
2
  name: 2t-decencia-channel-change-manager
3
3
  description: 기존 소통채널 프로젝트의 기능 추가/수정을 사용자와 대화로 명확화 → 전파 스킬로 연관 PRD/spec/DB/SQA 일괄 갱신 → 변경으로 생긴 새 할일을 GitHub 이슈로 발행하는 오케스트레이터 스킬. (1)대화로 변경 내용 확정 → (2)[게이트] 영향 범위 확인 후 전파 적용 → (3)[게이트] 할일 목록 확인 후 이슈 발행. "이 기능 바꿀래"·"기획 수정"·"이거 추가해줘(기존 프로젝트)" 류 요청 시.
4
4
  allowed-tools: Bash(ch:*) Bash(git:*) Bash(gh:*) Read Write
5
- version: 1.32.0
5
+ version: 1.32.2
6
6
  ---
7
7
 
8
8
  <!-- ch-version-gate -->
@@ -10,7 +10,7 @@ description: |
10
10
  (3) 명세·DB·SQA가 서로 어긋나 있는 의심이 들 때 (정합성 점검),
11
11
  (4) PRD 갱신 후 하위 spec/db/SQA로 변경분을 흘려보내야 할 때,
12
12
  (5) Sprint 진행 중 도메인 규칙·스키마가 흔들렸을 때 연쇄 갱신이 필요할 때.
13
- version: 1.32.0
13
+ version: 1.32.2
14
14
  ---
15
15
 
16
16
  <!-- ch-version-gate -->
@@ -10,7 +10,7 @@ description: |
10
10
  (4) ch screens 명령(list/get/create/update/delete/migrate)으로 화면을 다루거나 레거시 프로젝트를 화면 모드로 이관할 때,
11
11
  (5) spec의 화면 연결을 CLI로 걸거나 풀 때 (`ch specs screen-refs`),
12
12
  (6) Spec ID를 JIRA 스타일(`LOGIN-001`)로 직접 지정할 때 (`ch specs create --id`).
13
- version: 1.32.0
13
+ version: 1.32.2
14
14
  ---
15
15
 
16
16
  <!-- ch-version-gate -->
@@ -206,13 +206,20 @@ ch specs update <specId> --db-tables "" # 모두 해제
206
206
 
207
207
  ```bash
208
208
  ch ia get [--json]
209
- ch ia set --title "<제목>" --file ./ia.md --navigations ./navigations.json --hubs ./hubs.json --entry-rules ./entry-rules.json
209
+ ch ia set --title "<제목>" --file ./ia-tree.json --content ./ia.md [--expected-version <n>]
210
210
  ch ia versions
211
211
  ```
212
212
 
213
- - `--navigations`·`--hubs`·`--entry-rules`는 각각 **JSON 배열 파일**이고 **통째 교체**다. 수정 `ch ia get --json`으로 받아 편집한다(Read-before-Write).
214
- - 메뉴의 `screenId`는 실존 화면이어야 한다(없으면 400). 죽은 메뉴를 서버가 막는다.
215
- - **route는 여기 넣지 않는다** 배치의 SSOT는 `ch screens --route`다.
213
+ - `--file`은 **트리 JSON**이다(`IaNode[]`). 노드는 종류다 분류 `{"type":"group","name":"…","children":[…]}`,
214
+ 화면 `{"type":"screen","screenId":"SCR-…","children":[…]}`. **화면 노드도 자식을 가진다**
215
+ 관문 화면이 부모가 되는 기본이고, 분류 노드는 관문 페이지가 없을 때만 쓴다([[2t-decencia-channel-ia-v2]]).
216
+ **배열 순서가 곧 표시 순서**이고 **통째 교체**다. 수정 전 `ch ia get --json`으로 받아 편집한다(Read-before-Write).
217
+ - `--content`는 **배치 근거** 마크다운이다. 트리 자체는 `--file`이 갖는다.
218
+ - `screenId`는 실존 화면이어야 하고(없으면 400), 같은 화면을 두 번 배치해도 400이다.
219
+ - `--expected-version`을 주면 그 사이 남이 저장했을 때 409로 막는다. 트리가 통째 교체라 이게 없으면
220
+ 나중에 저장한 쪽이 앞사람 작업을 통째로 덮는다.
221
+ - **route는 여기 넣지 않는다** — route의 SSOT는 `ch screens --route`다. IA 계층에서 route를 유도하지도
222
+ 않는다(둘은 별개 그림이다).
216
223
 
217
224
  ### 화면 연결 (`ch specs screen-refs`)
218
225
 
@@ -8,7 +8,7 @@ description: |
8
8
  (2) DB 테이블 단위로 컬럼·인덱스·보안규칙을 등록·수정할 때,
9
9
  (3) 새 테이블을 추가하면서 전체 인벤토리도 함께 업데이트할 때,
10
10
  (4) spec.dbTableRefs와 양방향 동기화가 필요한 작업 시.
11
- version: 1.32.0
11
+ version: 1.32.2
12
12
  ---
13
13
 
14
14
  <!-- ch-version-gate -->
@@ -2,7 +2,7 @@
2
2
  name: 2t-decencia-channel-github-issue
3
3
  description: gh CLI로 현재 repo에 GitHub 이슈를 작성한다. 이슈 1개=유형 1개(feat/fix/bug), 표준 본문 양식(작업내용·관련 명세 백링크·완료조건)으로 발행. "이슈 만들어줘"/"깃헙 이슈로 등록해줘" 요청 시, 또는 소통채널 기획·명세 작업 후 처리할 일들을 GitHub 이슈로 옮길 때 사용. 멱등성/중복방지·확인단계는 다루지 않음(요청대로 바로 생성).
4
4
  allowed-tools: Bash(gh:*) Bash(git:*) Read Write
5
- version: 1.32.0
5
+ version: 1.32.2
6
6
  ---
7
7
 
8
8
  <!-- ch-version-gate -->
@@ -1,14 +1,9 @@
1
1
  ---
2
2
  name: 2t-decencia-channel-ia-v2
3
3
  description: |
4
- [2t][v2] 소통채널 화면 IA(정보구조) 설계 가이드.
5
- 화면을 만들기 전에 정보구조를 먼저 정한다 사람이 이름 붙인 분류 노드와 화면 노드로 트리를 세운다.
6
- 배치 기준은 "사용자가 어디서 찾는가"(탐색)이지 "어느 기능에 속하는가"(도메인·Epic)도, URL 경로도 아니다.
7
- Use when:
8
- (1) 화면설계서를 쓰기 전에 화면들의 배치·route를 정할 때,
9
- (2) 기존 프로젝트의 IA가 어색해 재배치를 검토할 때,
10
- (3) "이 화면이 왜 여기 있지" 같은 구조 문제를 점검할 때.
11
- version: 1.32.0
4
+ [2t][v2] 소통채널 화면 IA(정보구조) 설계. 화면들의 도달 구조를 트리로 세운다 — 관문이 부모다.
5
+ Use when: (1) 화면설계서 전에 화면 배치를 정할 때, (2) 기존 IA 재배치를 검토할 때.
6
+ version: 1.32.2
12
7
  ---
13
8
 
14
9
  <!-- ch-version-gate -->
@@ -28,164 +23,19 @@ ch check
28
23
 
29
24
  # 화면 IA(정보구조) 설계
30
25
 
31
- 화면들을 어떤 구조로 배치할지 정하는 단계다. 산출물은 **내비게이션 트리 + 화면별 route**다.
26
+ 유저플로우 뒤, 화면설계서 앞(④)에 화면들의 도달 구조를 트리 하나로 세운다.
32
27
 
33
- > **작성 순서상 ④다** ①기능명세 ②유저플로우 ③정책정의서 DB 스키마 다음, **⑤화면설계서 앞**이다.
34
- > 유저플로우 뒤여야 한다. 여정을 알아야 "사용자가 어디서 찾는가"로 배치할 수 있다.
28
+ **원리: 관문이 부모다.** 화면마다 "사용자가 어디를 먼저 클릭해 들어오나"를 묻고, 거쳐 가는
29
+ 화면 밑에 단다(목록→상세→후속). 어디도 거치지 않는 화면이 루트다 유저플로우의 여정
30
+ 시작점과 일치해야 한다.
35
31
 
36
- ## 0. 단계가 없으면 무슨 일이 생기나
32
+ - 분류 노드(이름표)는 관문 페이지가 없는 묶음(인증 등)에만 쓴다. 화면 노드도 자식을 가진다.
33
+ - Epic·모듈·URL로 묶지 않는다 — 그건 코드의 분류다.
34
+ - 진입로가 여럿이면 사용자가 찾으러 갈 곳 하나만 부모로. 나머지 길은 유저플로우 몫이다.
37
35
 
38
- IA를 따로 정하지 않으면 화면마다 route를 개별로 적게 되고, route들이 모여 트리로 그려진다.
39
- IA가 설계물이 아니라 **부산물**이 되는 것이다. 그러면 화면은 순간 손에 잡히는 분류를 근거로
40
- 삼는데, 보통 그게 Epic이다.
36
+ **절차**: `ch ia get`으로 기존 IA 확인 관문을 물어 배치 ③ 표가 아니라 트리로 사용자 승인
37
+ `ch ia set --file 트리.json --content 근거.md` 저장 (통째 교체 형식은
38
+ [[2t-decencia-channel-cli-v2]]).
41
39
 
42
- 실제로 겪은 사고: 문의·신고·계정은 `/my` 아래 넣고, 공고·내 견적·내 거래는 `/buyer`·`/supplier`로
43
- 갈랐다. 똑같은 "내 데이터"인데 왜 문의는 마이페이지이고 견적은 아닌지 설명할 근거가 없었다.
44
- 기준 없이 두 방식을 섞은 것이다.
45
-
46
- ## 1. IA의 축은 탐색이다
47
-
48
- **기준 질문: "사용자가 이 화면을 찾을 때 어디를 먼저 클릭하는가."**
49
- 모든 배치 판단은 이 질문 하나로 한다.
50
-
51
- - 🚫 **Epic을 IA로 쓰지 마라.** Epic(AUTH·ORDER·BID…)은 명세를 관리하는 축이다. 사용자가 화면을
52
- 찾아가는 축과 다르다. 우연히 겹칠 수는 있지만, 겹치는지 확인하지 않고 복사하면 안 된다.
53
- - 🚫 **기능 소속으로 route를 정하지 마라.** "견적 작성은 공급자 기능이니 `/supplier`"는 개발자의 분류다.
54
- 공급회원이 "내가 낸 견적"을 찾을 때 실제로 어디를 누르는지와는 별개다.
55
-
56
- ### 계층은 route가 아니라 기능의 포함 관계로 나눈다
57
-
58
- **URL은 결과이지 기준이 아니다.** 슬래시 개수는 계층이 아니다.
59
-
60
- Depth를 가르는 것은 "이 화면이 저 화면의 하위 기능인가"다. 실무 예로 1차 "주문하기" → 2차
61
- "배송지 확인"·"결제" → 3차 "주소 검색"처럼 나눈다. 순서(Step)와 계층(Depth)도 다르다 —
62
- 목록 다음에 상세가 온다고 해서 상세가 목록의 하위 분류인 것은 아니다.
63
-
64
- route는 개발 편의·REST 관례·SEO로 정해진다. 그 값으로 계층을 유도하면 IA가 URL에 종속된다.
65
- IA 트리와 route는 별개로 정하고, route는 노드에 붙는 부가 정보로 본다.
66
-
67
- **묶음의 근거가 흐릿하면 카드소팅을 쓴다.** 화면 이름을 카드로 만들어 사용자가 직접 묶게 하는
68
- 표준 방법이고, 결과가 곧 분류 노드의 후보가 된다.
69
-
70
- ## 2. 배치 규칙 4가지
71
-
72
- 1. **"내 ○○"는 한 부모 아래 모은다.** 내 공고·내 견적·내 거래·내 문의·내 계정은 역할이 달라도
73
- 같은 허브에 둔다. 하나만 밖에 있다면 그 이유를 한 줄로 답할 수 있어야 한다.
74
- 2. **역할 차이는 부모를 나누는 축이 아니다.** 같은 위치에서 내용이 갈리게 한다.
75
- 구매회원이 `/my/deals`를 열면 구매 거래가, 공급회원이 열면 공급 거래가 보인다.
76
- 3. **분류 노드는 화면이 없어도 된다.** "공개 영역"·"회원 영역"처럼 사람이 이름 붙인 묶음은
77
- 그 자체로 노드다. 다만 **이름이 있어야 한다** — 이름 없는 경로 조각을 노드로 남기지 않는다.
78
- 묶음에 입구 화면이 필요하다고 판단되면 그건 별개의 화면으로 만든다.
79
- 4. **최상위는 GNB에 담기는 수만큼.** 보통 5~7개다. 넘으면 묶고, 3~4단계보다 깊어지면 평평하게 편다.
80
-
81
- ## 3. 절차
82
-
83
- 입력: 화면 목록(아직 route는 없는 상태) · 유저플로우 · 역할 정의 · 허브 성격 spec
84
-
85
- 1. **역할별 진입 직후 화면**을 정한다. 로그인하면 어디로 가나. 그 화면이 그 역할의 허브다.
86
- 2. **최상위 내비게이션 항목**을 뽑는다. 비회원에게 보이는 것과 회원에게 보이는 것을 나눈다.
87
- 3. 화면을 항목 아래 **배치**한다. 배치할 때마다 §1의 기준 질문에 답한다. 답이 막히면 그 화면은
88
- 자리가 틀린 것이다.
89
- 4. **route는 따로 정한다.** 트리의 경로를 route로 그대로 옮기지 않는다. IA는 사용자가 찾는 길이고
90
- route는 개발·SEO 제약을 받는다. 둘이 닮을 수는 있지만 한쪽이 다른 쪽을 결정하지는 않는다.
91
- 5. **트리를 그려 사용자 승인을 받고, 그대로 저장한다**(§4).
92
- 6. §5 구조 검증을 통과할 때까지 3~5를 되풀이한다.
93
-
94
- ## 4. 산출물 — 트리로 제시한다
95
-
96
- ```
97
- 공개 영역 (분류)
98
- ├─ 인증 (분류)
99
- │ ├─ 로그인 SCR-LOGIN 누구나
100
- │ └─ 회원가입 SCR-SIGNUP 누구나
101
- ├─ 제품·공고 (분류)
102
- │ ├─ 제품 검색 SCR-PRODUCTS 누구나
103
- │ └─ 공개 공고 SCR-RFQ-LIST 누구나
104
- └─ 고객지원 (분류)
105
- └─ 문의 SCR-SUPPORT 누구나
106
- 회원 영역 (분류)
107
- ├─ 구매 활동 (분류)
108
- │ ├─ 내 구매공고 SCR-MY-RFQS 구매회원
109
- │ └─ 내 견적 SCR-MY-BIDS 공급회원
110
- └─ 계정 (분류)
111
- └─ 계정·회사 관리 SCR-MY-ACCOUNT 회원
112
- 관리자 (분류)
113
- └─ 관리자 콘솔 SCR-ADMIN-DASH 관리자
114
- ```
115
-
116
- **배치표(행=화면, 열 하나가 route)로 승인받지 않는다.** 표에서는 구조가 보이지 않아서, 잘못된 배치가
117
- 그대로 통과한다. 사람은 트리를 봐야 "견적이 왜 마이페이지 밖에 있지"를 즉시 알아챈다.
118
-
119
- ### 승인받은 트리가 곧 저장 형식이다
120
-
121
- 트리를 승인받고 대화에만 남기면, 나중에 구조가 바뀌었을 때 무엇이 진실인지 판별할 수 없다.
122
- **IA 리소스**(프로젝트당 1건)에 올린다 — 웹 "IA" 페이지가 이 트리를 그대로 그린다.
123
-
124
- 사람이 승인한 트리와 화면에 뜨는 트리는 **같아야 한다.** 도구가 route로 다시 그리던 시절에는
125
- 둘이 갈라졌고, 그게 이 개편의 이유다.
126
-
127
- ```bash
128
- ch ia get [--json] # 현재 IA (Read-before-Write)
129
- ch ia set --title "LUBridge 정보구조" \
130
- --file ./ia-tree.json \ # 트리 (아래 형식)
131
- --content ./ia.md # 배치 근거(마크다운)
132
- ch ia versions # 변경 이력
133
- ```
134
-
135
- `ia-tree.json` — 노드는 두 종류다 (통째 교체):
136
-
137
- ```json
138
- [
139
- { "type": "group", "name": "공개 영역", "note": "로그인 없이 접근", "children": [
140
- { "type": "group", "name": "인증", "children": [
141
- { "type": "screen", "screenId": "SCR-LOGIN" },
142
- { "type": "screen", "screenId": "SCR-SIGNUP" } ] },
143
- { "type": "screen", "screenId": "SCR-PRODUCTS" } ] },
144
- { "type": "group", "name": "관리자", "children": [
145
- { "type": "screen", "screenId": "SCR-ADMIN-DASH" } ] }
146
- ]
147
- ```
148
-
149
- - `group`은 `name`이 필수다. **화면이 없어도 노드가 된다** — 분류 노드가 여기 산다.
150
- - `screen`은 `screenId`만 갖는다. 이름·route는 화면에서 가져와 라벨로 쓰므로 **적지 않는다.**
151
- 같은 값을 두 곳에 두면 반드시 어긋난다.
152
- - **배열 순서가 곧 표시 순서다.** 순서 필드를 따로 두지 않는다.
153
- - `screenId`는 **실존 화면만 허용**한다(없으면 서버가 400). 같은 화면을 두 번 배치해도 400이다.
154
- - 트리에 없는 화면은 IA 페이지에서 **"IA 미배치"**로 모여 보인다. 화면을 새로 만들고 IA에 안 넣으면
155
- 거기 쌓이므로, 작업을 끝낼 때 0건인지 본다.
156
- - `--content`에는 **배치 근거**를 적는다. 근거가 사라지면 다음 사람은 이유를 모른 채 트리만 보게 되고,
157
- 그때부터 IA는 다시 흐트러진다.
158
-
159
- ## 5. 구조 검증 (승인 전 필수)
160
-
161
- - [ ] **형제 일관성** — 같은 성격의 화면이 서로 다른 부모에 흩어져 있지 않은가. ("내 ○○"가 대표적)
162
- - [ ] **IA 미배치 0건** — 트리에 안 들어간 화면이 남아 있지 않은가. IA 페이지가 따로 모아 보여준다.
163
- - [ ] **이름 없는 분류 없음** — 모든 `group`에 사람이 읽을 이름이 있는가. 경로 조각을 이름 대신 쓰지 않았는가.
164
- - [ ] **탐색 역질문** — 화면마다 "사용자가 이걸 찾으려면 어디부터 클릭하나"를 한 줄로 답할 수 있는가.
165
- 답이 "URL 직접 입력"이면 그 화면은 IA에 자리가 없는 것이다.
166
- - [ ] **명세 대조** — 허브 성격 spec(마이페이지 등)이 "무엇을 담는다"고 적어놨으면 IA가 그대로 따르는가.
167
- 어긋나면 둘 중 하나가 틀린 것이므로 임의로 정하지 말고 사용자에게 묻는다.
168
- - [ ] **깊이·폭** — 최상위 5~7개, 경로 3단계 이내.
169
- - [ ] **유저플로우 도달** — 각 플로우의 화면들이 트리 위에서 이어지는가.
170
- (누락 화면 전수 대조는 화면을 만든 뒤 [[2t-decencia-channel-screen-v2]] §5-1에서 따로 한다)
171
-
172
- ## 6. 기존 프로젝트의 IA를 고칠 때
173
-
174
- IA 트리만 고치는 것은 싸다. 트리는 통째 교체라 `ch ia set` 한 번이면 되고, route도 화면 ID도
175
- 건드리지 않는다. **IA가 어색하다고 route부터 고치지 마라.**
176
-
177
- route까지 함께 바꾸기로 했다면 그때 비용이 든다. **화면 ID는 불변**이라 재배치하면 ID와 경로가
178
- 어긋나 보인다(`SCR-SUPPLIER-BID-LIST`가 `/my/bids`에 놓이는 식). 감수하거나 삭제 후 재생성해야
179
- 하는데, 후자는 spec 연결(`screenRefs`)이 끊긴다. 와이어프레임의 GNB·서브내비와 `data-screen-link`도
180
- 함께 고쳐야 한다. **비용을 먼저 알리고 사용자 판단을 받는다.**
181
-
182
- ## 7. 흔한 함정
183
-
184
- - **Epic을 그대로 그룹으로 쓰기** — 이 단계가 생긴 이유다 (§1).
185
- - **URL로 IA를 짜기** — **슬래시 개수는 계층이 아니다.** route를 그대로 트리로 옮기면 성격이 다른
186
- 화면이 한 줄에 서고, 목록과 상세가 부모-자식이 되며, 깊이가 아무 정보도 주지 않는다 (§1).
187
- - **역할로 최상위를 가르기** — `/buyer`·`/supplier`로 시작하면 "내 것"이 두 곳으로 찢어진다 (§2-2).
188
- - **배치표로 승인받기** — 구조가 안 보인다 (§4).
189
- - **화면을 다 만든 뒤에 IA를 보기** — 그때는 되돌리는 비용이 크다 (§6).
190
- - **IA를 대화에만 남기기** — 승인받은 트리를 `ch ia set`으로 저장하지 않으면, 나중에 GNB가 바뀌어도
191
- 무엇이 진실인지 판별할 수 없다. 배치 근거는 특히 잃기 쉽다 (§4).
40
+ **검증**: 부모=관문이 사실인가 · 분류 노드마다 관문 부재를 답할 있는가 · IA 미배치 0건
41
+ (IA 페이지가 세어 준다).
@@ -2,7 +2,7 @@
2
2
  name: 2t-decencia-channel-orchestrator
3
3
  description: 소통채널 작업의 단일 진입점(디스패처). 사용자 요청을 듣고 7종(bootstrap·terraformer·change-manager·github-issue·issue-coder·pr-merger·sprint-runner) 중 적절한 곳으로 라우팅하고, 필요하면 여러 단계를 순차 오케스트레이션한다. 대화형 스킬은 메인 세션에서 Skill로, 자율 에이전트는 Agent로 위임. "소통채널 작업 해줘"·"이거 어떻게 처리하지?"처럼 무엇부터 할지 모를 때, 또는 신규기획/코드편입/기획변경/이슈/구현/머지/스프린트실행 어디로든 시작할 때.
4
4
  allowed-tools: Skill Agent Read Bash(ch:*) Bash(gh:*) Bash(git:*)
5
- version: 1.32.0
5
+ version: 1.32.2
6
6
  ---
7
7
 
8
8
  <!-- ch-version-gate -->
@@ -8,7 +8,7 @@ description: |
8
8
  (1) 정책정의서를 새로 쓰거나 수정할 때,
9
9
  (2) 유저플로우·기능명세를 검토하다 "이건 정해진 게 없다"는 질문이 나왔을 때,
10
10
  (3) 알림 발송 매트릭스·크레딧 지급 기준·타임아웃 처리 같은 횡단 정책을 정리할 때.
11
- version: 1.32.0
11
+ version: 1.32.2
12
12
  ---
13
13
 
14
14
  <!-- ch-version-gate -->
@@ -7,7 +7,7 @@ description: |
7
7
  (1) PRD를 작성하거나 갱신할 때,
8
8
  (2) PRD 구성에서 Epic/스토리 구조를 후속 spec 작성에 매핑할 때,
9
9
  (3) Read-before-Write 규칙으로 PRD content를 안전하게 수정해야 할 때.
10
- version: 1.32.0
10
+ version: 1.32.2
11
11
  ---
12
12
 
13
13
  <!-- ch-version-gate -->
@@ -2,7 +2,7 @@
2
2
  name: 2t-decencia-channel-project-bootstrap
3
3
  description: 신규 기획을 사용자와 대화하며 step-by-step으로 소통채널 프로젝트로 만드는 오케스트레이터 스킬. (1)대화로 PRD 완성 → (2)기능명세(spec) 내용 확정 → (3)spec 업로드 → (4)유저플로우 → (5)정책정의서 → (6)DB 스키마·spec 연결 → (7)화면설계서(화면 생성·연결) → (8)검증기준서(SQA). 각 단계 사용자 승인 게이트, 작성 디테일은 기존 2t-decencia-channel-*-v2 스킬을 적극 재사용. "새 기획 만들어줘"·"프로젝트 처음부터 세팅" 류 요청 시.
4
4
  allowed-tools: Bash(ch:*) Bash(git:*) Read Write
5
- version: 1.32.0
5
+ version: 1.32.2
6
6
  ---
7
7
 
8
8
  <!-- ch-version-gate -->
@@ -146,14 +146,20 @@ ch specs create --id PROJ-001 --name "프로젝트 목록" \
146
146
  **절차**
147
147
  1. 기능을 **사용자 맥락**으로 묶어 화면 목록을 만든다. 같은 사용자가 한 자리에서 연달아 하는 일이면 한 화면이다.
148
148
  (묶는 원칙과 이름 규칙은 아래 "🚫 1 spec = 1 화면으로 뽑지 마라"·"🔴 화면 이름" 참조)
149
- 2. 화면들을 **내비게이션 트리에 배치하고 route를 부여**한다 — [[2t-decencia-channel-ia-v2]] §1~§4.
150
- 배치 기준은 "사용자가 이 화면을 찾을 때 어디를 먼저 클릭하는가"다. **Epic을 그대로 그룹으로 쓰지 않는다.**
151
- 3. [[2t-decencia-channel-ia-v2]] §5 **구조 검증**을 돌린다(형제 일관성·고아 부모·탐색 역질문·명세 대조·깊이/폭).
149
+ 2. 화면들의 **도달 구조를 트리로 세운다** — [[2t-decencia-channel-ia-v2]]. 원리는 하나다:
150
+ **관문이 부모다.** 화면마다 "사용자가 어디를 먼저 클릭해 들어오나" 물어, 거쳐 가는 화면
151
+ 밑에 단다. 루트는 유저플로우의 여정 시작점이다. 분류 노드(이름표)는 관문 페이지가 없는
152
+ 묶음에만 쓴다. **Epic을 그대로 그룹으로 쓰지 않는다.**
153
+ ⚠️ **route는 여기서 부여하지 않는다** — 트리의 경로를 route로 옮기지 않는다. route는 화면을
154
+ 만들 때 개발·SEO 제약을 함께 보고 따로 정한다.
155
+ 3. [[2t-decencia-channel-ia-v2]]의 **검증**을 돌린다(부모=관문 사실 확인·분류 노드 정당성·
156
+ 루트=여정 시작점·형제 일관성·IA 미배치 0건·깊이/폭).
152
157
  4. → **[게이트] 사람이 승인한다.** **배치표가 아니라 트리로** 보여준다 — 표에서는 구조가 보이지 않아
153
158
  잘못된 배치가 그대로 통과한다. 승인 전에는 아무것도 만들지 않는다.
154
- 5. 승인받은 결과를 **저장한다** — `ch ia set --title ... --file ./ia.md --navigations ./navigations.json
155
- --hubs ./hubs.json --entry-rules ./entry-rules.json` ([[2t-decencia-channel-ia-v2]] §4).
156
- 대화에만 남기면 나중에 무엇이 진실인지 판별할 수 없다. 웹 "IA" 탭에서 같은 문서를 본다.
159
+ 5. 승인받은 결과를 **저장한다** — `ch ia set --title "정보구조" --file ./ia-tree.json --content ./ia.md`
160
+ ([[2t-decencia-channel-ia-v2]]). `--file`은 트리 JSON(화면 노드도 자식을 가진다)이고,
161
+ `--content`에는 배치 근거를 적는다. 대화에만 남기면 나중에 무엇이 진실인지 판별할 수 없다.
162
+ 웹 "IA" 탭에서 같은 트리를 본다.
157
163
  - → OK면 8단계.
158
164
 
159
165
  ## 8. 화면설계서 — 화면 생성·연결
@@ -9,7 +9,7 @@ description: |
9
9
  (1) 화면(screens) 문서를 작성·수정할 때,
10
10
  (2) 화면의 표시 데이터·액션·입력 검증·예외상태를 기재할 때,
11
11
  (3) 웹 "화면" 탭의 화면 구조 뷰·화면 상세에 올릴 내용을 쓸 때.
12
- version: 1.32.0
12
+ version: 1.32.2
13
13
  ---
14
14
 
15
15
  <!-- ch-version-gate -->
@@ -82,8 +82,8 @@ ch check
82
82
  - 노드를 클릭하면 화면 상세가 열린다: **좌측 와이어프레임 뷰 · 우측 디스크립션**(§1 항목들).
83
83
  - 트리가 읽히려면 route를 계층적으로 짓는다 (`/store/orders` → `/store/orders/[id]`). 화면 ID 슬러그도 계층을 반영한다.
84
84
  - 🚫 **이건 IA가 아니다.** 화면 목록을 경로로 정렬해 훑는 개발자용 그림이다. 정보구조는 **IA 페이지**에 따로 있고,
85
- 거기 트리는 사람이 이름 붙인 분류 노드로 세운다([[2t-decencia-channel-ia-v2]]).
86
- 슬래시 개수는 계층이 아니므로, 이 화면의 깊이를 IA 깊이로 읽지 않는다.
85
+ 거기 트리는 관문 화면을 부모로 세운 도달 구조다([[2t-decencia-channel-ia-v2]]).
86
+ 슬래시 개수는 도달 관계가 아니므로, 이 화면의 깊이를 IA 깊이로 읽지 않는다.
87
87
  - 배치가 어색해 보이면 화면을 고치지 말고 ④ IA 설계로 되돌아간다.
88
88
 
89
89
  ## 4-1. 와이어프레임 — HTML로 실제 렌더
@@ -212,7 +212,7 @@ IA는 낡아 있던 적이 있다. `ch ia get`으로 IA 트리를 받아 두 가
212
212
  - [ ] **죽은 참조** — 트리의 `screenId`가 전부 실존 화면인가. (서버가 저장 시 막지만, 화면을
213
213
  지운 뒤에는 트리에 그대로 남는다)
214
214
 
215
- 어긋나면 화면이 아니라 **IA를 고친다**([[2t-decencia-channel-ia-v2]] §4의 `ch ia set`).
215
+ 어긋나면 화면이 아니라 **IA를 고친다**([[2t-decencia-channel-ia-v2]]의 `ch ia set`).
216
216
 
217
217
  ## 6. 흔한 함정
218
218
 
@@ -12,7 +12,7 @@ description: |
12
12
  (3) 스토리문장·사전 조건·로직 플로우·비즈니스 규칙을 작성할 때,
13
13
  (4) Story 규모를 Story Point(`--points`)로 매길 때,
14
14
  (5) 신규 spec ID를 `AUTH-001` 같은 JIRA 스타일로 부여할 때 (`ch specs create --id`).
15
- version: 1.32.0
15
+ version: 1.32.2
16
16
  ---
17
17
 
18
18
  <!-- ch-version-gate -->
@@ -7,7 +7,7 @@ description: |
7
7
  (1) sprint를 구성할 때,
8
8
  (2) Σ spec.points 기반 sprint 용량 산정이 필요할 때,
9
9
  (3) Epic·도메인·의존성을 함께 고려해 spec을 sprint에 배분할 때.
10
- version: 1.32.0
10
+ version: 1.32.2
11
11
  ---
12
12
 
13
13
  <!-- ch-version-gate -->
@@ -2,7 +2,7 @@
2
2
  name: 2t-decencia-channel-sprint-runner
3
3
  description: 특정 Sprint를 끝까지 실행(run)하는 오케스트레이터 스킬. Sprint의 spec을 시드로 이슈 목록을 분해·발행(github-issue)하고, GitHub milestone에 묶인 이슈를 상태별로 분류해 issue-coder(병렬)·pr-merger(직렬)로 전진시킨 뒤, 사람확인이 필요한 곳에서 멈춘다. 사람이 확인·체크 후 재호출하면 멱등하게 이어간다(반복 루프). "스프린트 돌려줘"·"sprint N 실행"·"이 스프린트 개발 진행해줘" 류 요청 시.
4
4
  allowed-tools: Skill Agent Read Bash(ch:*) Bash(gh:*) Bash(git:*)
5
- version: 1.32.0
5
+ version: 1.32.2
6
6
  ---
7
7
 
8
8
  <!-- ch-version-gate -->
@@ -12,7 +12,7 @@ description: |
12
12
  (4) 보안/성능/접근성/호환성 비기능 TC를 시트에 채워야 할 때,
13
13
  (5) 명세 영역별 완성형 TC 번들(퍼블리싱/프론트/백엔드 디센시아 운영 관점 포함)을 가져다 쓸 때,
14
14
  (6) Sprint 종료 전 spec별 TC 통과·시나리오 통과 여부를 점검할 때.
15
- version: 1.32.0
15
+ version: 1.32.2
16
16
  ---
17
17
 
18
18
  <!-- ch-version-gate -->
@@ -8,7 +8,7 @@ description: |
8
8
  (1) 유저플로우(사용자 여정 분기도)를 새로 그리거나 수정할 때,
9
9
  (2) PRD·Epic-Story 목록에서 플로우로 그릴 대상을 고를 때,
10
10
  (3) 웹 "유저플로우" 탭에 올릴 Mermaid 코드를 작성할 때.
11
- version: 1.32.0
11
+ version: 1.32.2
12
12
  ---
13
13
 
14
14
  <!-- ch-version-gate -->
@@ -8,7 +8,7 @@ description: |
8
8
  (2) "작업 현황 적어줘", "workStatus 갱신해줘" 요청 시,
9
9
  (3) Sprint 종료 회고나 인수인계용으로 spec별 진행 상태를 정리할 때,
10
10
  (4) `ch specs update --work-status` 또는 웹 "작업 현황" 탭에서 갱신할 때.
11
- version: 1.32.0
11
+ version: 1.32.2
12
12
  ---
13
13
 
14
14
  <!-- ch-version-gate -->