@decencia/ch-cli 1.14.0 → 1.16.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.
- package/agent/2t-decencia-channel-issue-coder.md +1 -1
- package/agent/2t-decencia-channel-pr-merger.md +1 -1
- package/agent/2t-decencia-channel-terraformer.md +1 -1
- package/dist/client.d.ts +16 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +34 -0
- package/dist/client.js.map +1 -1
- package/dist/commands/specs.d.ts +2 -0
- package/dist/commands/specs.d.ts.map +1 -1
- package/dist/commands/specs.js +56 -3
- package/dist/commands/specs.js.map +1 -1
- package/package.json +1 -1
- package/skill/2t-decencia-channel-change-manager/SKILL.md +27 -6
- package/skill/2t-decencia-channel-change-propagation-v2/SKILL.md +13 -3
- package/skill/2t-decencia-channel-cli-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-db-schema-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-github-issue/SKILL.md +1 -1
- package/skill/2t-decencia-channel-orchestrator/SKILL.md +1 -1
- package/skill/2t-decencia-channel-prd-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-project-bootstrap/SKILL.md +113 -9
- package/skill/2t-decencia-channel-spec-v2/SKILL.md +53 -16
- package/skill/2t-decencia-channel-sprint-builder-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-sprint-runner/SKILL.md +1 -1
- package/skill/2t-decencia-channel-sqa-v2/SKILL.md +1 -1
- package/skill/2t-decencia-channel-work-status-v2/SKILL.md +1 -1
|
@@ -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.
|
|
6
|
+
version: 1.16.0
|
|
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.
|
|
6
|
+
version: 1.16.0
|
|
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.
|
|
6
|
+
version: 1.16.0
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## 역할
|
package/dist/client.d.ts
CHANGED
|
@@ -16,6 +16,22 @@ export interface ClientOptions {
|
|
|
16
16
|
}
|
|
17
17
|
export declare function getLastProjectContext(): ProjectContext | null;
|
|
18
18
|
export declare function createClient(options?: ClientOptions): AxiosInstance;
|
|
19
|
+
/**
|
|
20
|
+
* 부가 조회(probe) 전용 클라이언트 — "있으면 좋은" 읽기에만 쓴다.
|
|
21
|
+
*
|
|
22
|
+
* createClient의 인터셉터는 실패를 프로세스 결과에 그대로 반영한다: 4xx/5xx면
|
|
23
|
+
* process.exitCode=1(RC2), 연결 실패면 process.exit(1)로 프로세스를 즉시 끝낸다.
|
|
24
|
+
* 그 계약을 부가 조회에 적용하면 안 된다 — 예를 들어 `ch specs create`가 경고를
|
|
25
|
+
* 띄울지 판단하려고 프로젝트를 한 번 읽는데, 그 읽기가 실패했다고 명세 생성이
|
|
26
|
+
* 실패로 뒤집히거나 프로세스가 죽어서는 안 된다.
|
|
27
|
+
*
|
|
28
|
+
* 그래서 이 클라이언트는 에러 인터셉터를 달지 않는다(조용히 reject → 호출자가 삼킨다).
|
|
29
|
+
* 프로젝트 컨텍스트 안내·강제도 하지 않는다 — 주 요청이 이미 한다(중복 안내 방지).
|
|
30
|
+
* API Key가 없으면 null을 돌려준다(로그인 안내·종료는 주 요청의 몫).
|
|
31
|
+
*
|
|
32
|
+
* 타임아웃도 짧게 잡는다. 부가 조회 때문에 주 명령이 오래 붙들리면 안 된다.
|
|
33
|
+
*/
|
|
34
|
+
export declare function createProbeClient(options?: ClientOptions): AxiosInstance | null;
|
|
19
35
|
/**
|
|
20
36
|
* Create a client that doesn't require projectId (for invitation endpoints)
|
|
21
37
|
*/
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAA0C,MAAM,OAAO,CAAC;AACrF,OAAO,EAKL,cAAc,EACf,MAAM,UAAU,CAAC;AAKlB;;;;GAIG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,qBAAqB,IAAI,cAAc,GAAG,IAAI,CAE7D;AAwDD,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,aAAa,CAuGvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,aAAkB,GAAG,aAAa,CA8B7E"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAA0C,MAAM,OAAO,CAAC;AACrF,OAAO,EAKL,cAAc,EACf,MAAM,UAAU,CAAC;AAKlB;;;;GAIG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,qBAAqB,IAAI,cAAc,GAAG,IAAI,CAE7D;AAwDD,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,aAAa,CAuGvE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,aAAkB,GAAG,aAAa,GAAG,IAAI,CAoBnF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,aAAkB,GAAG,aAAa,CA8B7E"}
|
package/dist/client.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.ProjectContextRequiredError = void 0;
|
|
7
7
|
exports.getLastProjectContext = getLastProjectContext;
|
|
8
8
|
exports.createClient = createClient;
|
|
9
|
+
exports.createProbeClient = createProbeClient;
|
|
9
10
|
exports.createUnauthClient = createUnauthClient;
|
|
10
11
|
const axios_1 = __importDefault(require("axios"));
|
|
11
12
|
const config_1 = require("./config");
|
|
@@ -153,6 +154,39 @@ function createClient(options = {}) {
|
|
|
153
154
|
});
|
|
154
155
|
return instance;
|
|
155
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* 부가 조회(probe) 전용 클라이언트 — "있으면 좋은" 읽기에만 쓴다.
|
|
159
|
+
*
|
|
160
|
+
* createClient의 인터셉터는 실패를 프로세스 결과에 그대로 반영한다: 4xx/5xx면
|
|
161
|
+
* process.exitCode=1(RC2), 연결 실패면 process.exit(1)로 프로세스를 즉시 끝낸다.
|
|
162
|
+
* 그 계약을 부가 조회에 적용하면 안 된다 — 예를 들어 `ch specs create`가 경고를
|
|
163
|
+
* 띄울지 판단하려고 프로젝트를 한 번 읽는데, 그 읽기가 실패했다고 명세 생성이
|
|
164
|
+
* 실패로 뒤집히거나 프로세스가 죽어서는 안 된다.
|
|
165
|
+
*
|
|
166
|
+
* 그래서 이 클라이언트는 에러 인터셉터를 달지 않는다(조용히 reject → 호출자가 삼킨다).
|
|
167
|
+
* 프로젝트 컨텍스트 안내·강제도 하지 않는다 — 주 요청이 이미 한다(중복 안내 방지).
|
|
168
|
+
* API Key가 없으면 null을 돌려준다(로그인 안내·종료는 주 요청의 몫).
|
|
169
|
+
*
|
|
170
|
+
* 타임아웃도 짧게 잡는다. 부가 조회 때문에 주 명령이 오래 붙들리면 안 된다.
|
|
171
|
+
*/
|
|
172
|
+
function createProbeClient(options = {}) {
|
|
173
|
+
const config = (0, config_1.loadConfig)();
|
|
174
|
+
const apiKey = options.apiKey || config?.apiKey;
|
|
175
|
+
if (!apiKey)
|
|
176
|
+
return null;
|
|
177
|
+
const projectCtx = (0, config_1.getProjectContext)(options.projectId);
|
|
178
|
+
const apiUrl = options.apiUrl ||
|
|
179
|
+
config?.apiUrl ||
|
|
180
|
+
'https://ch-api-618529407342.asia-northeast3.run.app';
|
|
181
|
+
const headers = {
|
|
182
|
+
'Content-Type': 'application/json',
|
|
183
|
+
Authorization: `Bearer ${apiKey}`,
|
|
184
|
+
};
|
|
185
|
+
if (projectCtx?.projectId) {
|
|
186
|
+
headers['X-Project-Id'] = projectCtx.projectId;
|
|
187
|
+
}
|
|
188
|
+
return axios_1.default.create({ baseURL: apiUrl, timeout: 5000, headers });
|
|
189
|
+
}
|
|
156
190
|
/**
|
|
157
191
|
* Create a client that doesn't require projectId (for invitation endpoints)
|
|
158
192
|
*/
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;;;;AAiCA,sDAEC;AAwDD,oCAuGC;AAKD,gDA8BC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/specs.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/** --ui 페이로드에 의미 있는 route 값이 들어 있는가? (빈 문자열=값 지우기는 경고 대상 아님) */
|
|
3
|
+
export declare function uiPayloadHasRoute(ui: unknown): boolean;
|
|
2
4
|
export declare function registerSpecsCommand(program: Command): void;
|
|
3
5
|
//# sourceMappingURL=specs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specs.d.ts","sourceRoot":"","sources":["../../src/commands/specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"specs.d.ts","sourceRoot":"","sources":["../../src/commands/specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAItD;AA8LD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgY3D"}
|
package/dist/commands/specs.js
CHANGED
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.uiPayloadHasRoute = uiPayloadHasRoute;
|
|
36
37
|
exports.registerSpecsCommand = registerSpecsCommand;
|
|
37
38
|
const client_1 = require("../client");
|
|
38
39
|
const output_1 = require("../output");
|
|
@@ -48,6 +49,54 @@ function warnTasksDeprecated() {
|
|
|
48
49
|
(0, output_1.printWarning)('경고: --tasks는 deprecated입니다 — Story는 Task로 쪼개지 않습니다. ' +
|
|
49
50
|
'spec 규모는 --points(Story Point)로 매기세요. (--tasks는 하위호환으로 계속 전송됩니다)');
|
|
50
51
|
}
|
|
52
|
+
// ── ui.route deprecation (SCREEN-010) ────────────────────────────────────────
|
|
53
|
+
// CLI에는 --route 플래그가 없다. route는 --ui <jsonFile> 안의 키로 들어온다.
|
|
54
|
+
// 화면(screens) 기능을 켠 프로젝트에서 route의 SSOT는 screens.route이고 spec은
|
|
55
|
+
// ui.screenRefs로 화면을 참조만 한다. 그래서 그런 프로젝트에 ui.route가 담긴 --ui가
|
|
56
|
+
// 오면 경고만 띄우고 요청은 손대지 않는다 — 막으면 기존 스크립트가 깨진다.
|
|
57
|
+
/** --ui 페이로드에 의미 있는 route 값이 들어 있는가? (빈 문자열=값 지우기는 경고 대상 아님) */
|
|
58
|
+
function uiPayloadHasRoute(ui) {
|
|
59
|
+
if (!ui || typeof ui !== 'object' || Array.isArray(ui))
|
|
60
|
+
return false;
|
|
61
|
+
const route = ui.route;
|
|
62
|
+
return typeof route === 'string' && route.trim() !== '';
|
|
63
|
+
}
|
|
64
|
+
let uiRouteDeprecationWarned = false;
|
|
65
|
+
function warnUiRouteDeprecated() {
|
|
66
|
+
if (uiRouteDeprecationWarned)
|
|
67
|
+
return;
|
|
68
|
+
uiRouteDeprecationWarned = true;
|
|
69
|
+
(0, output_1.printWarning)('경고: --ui 페이로드의 ui.route는 deprecated입니다 — 이 프로젝트는 화면(screens) 기능이 켜져 있습니다. ' +
|
|
70
|
+
'route의 SSOT는 screens.route이고, 기능명세는 ui.screenRefs로 화면을 참조만 합니다. ' +
|
|
71
|
+
'화면은 `ch screens create`로 만들고, 화면 연결은 전용 경로(웹 화면 선택기 / PATCH /specs/:id/screen-refs)로 바꾸세요. ' +
|
|
72
|
+
'(ui.route는 하위호환으로 계속 전송·저장됩니다)');
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 경고를 띄울지 판단하기 위한 부가 조회. 실패는 조용히 삼킨다.
|
|
76
|
+
*
|
|
77
|
+
* 부가 조회가 주 요청(spec 생성·수정)을 막거나 종료코드를 더럽히면 안 되므로
|
|
78
|
+
* probe 클라이언트(에러 인터셉터 없음)를 쓴다. 응답이 없거나 실패하면 "모른다"이고,
|
|
79
|
+
* 모를 때는 경고하지 않는다(거짓 경고보다 조용한 편이 낫다).
|
|
80
|
+
*/
|
|
81
|
+
async function isScreensEnabled(projectIdOption) {
|
|
82
|
+
try {
|
|
83
|
+
const probe = (0, client_1.createProbeClient)({ projectId: projectIdOption });
|
|
84
|
+
if (!probe)
|
|
85
|
+
return false;
|
|
86
|
+
const { data } = await probe.get('/projects/current');
|
|
87
|
+
return data?.screensEnabled === true;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** --ui에 route가 있고 프로젝트가 screensEnabled면 1회 경고. 요청은 그대로 진행한다. */
|
|
94
|
+
async function warnIfUiRouteDeprecated(ui, projectIdOption) {
|
|
95
|
+
if (!uiPayloadHasRoute(ui))
|
|
96
|
+
return; // route가 없으면 부가 조회조차 하지 않는다
|
|
97
|
+
if (await isScreensEnabled(projectIdOption))
|
|
98
|
+
warnUiRouteDeprecated();
|
|
99
|
+
}
|
|
51
100
|
// ── 작업 A: `ch specs get` 파생 해석 (additive, 원본 불변) ────────────────────
|
|
52
101
|
// spec 응답에 같은 프로젝트 db-tables를 조인해 (1) tableId→테이블명, (2) 상태
|
|
53
102
|
// 컬럼 ref(ref.field == db-table stateMachines[].columnRef)→그 머신 요약을,
|
|
@@ -310,11 +359,11 @@ function registerSpecsCommand(program) {
|
|
|
310
359
|
.option('--epic <name>', '에픽(분류 라벨)')
|
|
311
360
|
.option('--points <n>', 'Story Point (spec 단위 규모 점수, 0 이상). Story는 Task로 쪼개지 않고 이 값으로 규모를 매긴다')
|
|
312
361
|
.option('--tasks <jsonFile>', '[deprecated] 체크리스트 JSON 파일 (SpecTask[]). 신규 spec은 --points 권장 (하위호환 유지)')
|
|
313
|
-
.option('--ui <jsonFile>', 'UI 메타데이터 JSON 파일 (SpecUI)')
|
|
362
|
+
.option('--ui <jsonFile>', 'UI 메타데이터 JSON 파일 (SpecUI). 화면 기능을 켠 프로젝트에서 ui.route는 deprecated (경고만, 저장은 그대로)')
|
|
314
363
|
.option('--logic <jsonFile>', '비즈니스 로직 JSON 파일 (SpecLogic)')
|
|
315
364
|
.option('--db-tables <ids>', '연관 DB 테이블 ID (쉼표 구분)')
|
|
316
365
|
.option('--work-status <mdFile>', '작업 현황 마크다운 파일')
|
|
317
|
-
.addHelpText('after', `\nStory Point:\n --points <n> spec 단위 규모 점수(0 이상). Story는 Task로 쪼개지 않고 이 값으로 규모를 매긴다.\n 예: --points 5\n\nJSON 파일 형식 예시:\n tasks.json ([deprecated] — 신규 spec은 --points 사용. --tasks는 하위호환용):\n [\n {"id": "", "title": "로그인 폼 구현", "done": false, "estimate": 4, "points": 3, "description": "## 세부\\n- ..."},\n {"id": "", "title": "유효성 검증", "done": true, "completedAt": "2026-05-29T00:00:00Z"}\n ]\n\n ui.json:\n {\n "figmaNodeId": "123:456",\n "route": "/login",\n "file": "src/app/login/page.tsx",\n "access": "public",\n "interactionMap": "## 인터랙션\\n- 입력 → 검증 → 제출",\n "screenRefs": ["SCR-LOGIN"],\n "primaryActions": "- 이메일·비밀번호로 로그인한다",\n "keyInformation": "- 로그인 실패 사유"\n }\n (screenRefs·primaryActions·keyInformation은 화면(screens) 기능을 켠 프로젝트에서만 쓴다.)\n (screenRefs는 서버 관리 필드 — 생성 때만 입력을 받는다. 수정 시 --ui 로 보낸 screenRefs는 서버가 무시하고 기존 값을 지킨다.\n 화면 연결 변경은 전용 경로(웹 화면 피커)로만 한다. 존재하지 않는 화면 ID는 동기화에서 빠지고 서버 로그에 경고가 남는다.)\n\n logic.json (신구조 — 시나리오→순서 있는 단계→refs):\n {\n "dataFlowScenarios": [\n {\n "name": "로그인 성공",\n "description": "회원이 이메일과 비밀번호로 로그인에 성공하면 인증 토큰을 발급하고 마지막 로그인 시각을 갱신한다.",\n "steps": [\n { "description": "클라이언트가 입력한 이메일과 비밀번호를 인증 서버로 전송한다." },\n { "description": "인증에 성공하면 사용자 문서의 마지막 로그인 시각을 갱신한다.", "refs": [{ "tableId": "tbl_users", "field": "lastLoginAt", "direction": "WRITE", "note": "로그인 성공 시 갱신" }] }\n ]\n }\n ],\n "stateTransitions": "...",\n "businessRules": "..."\n }\n (신구조: dataFlowScenarios[]=시나리오, 각 시나리오의 steps[]=순서 있는 단계, 각 단계의 refs[]=db-tables의 tableId(+선택 field)를 가리키는 구조적 참조. direction은 READ|WRITE|READWRITE.)\n (SSOT: refs는 db-tables의 tableId/field를 가리키기만 한다 — 컬럼 정의는 db-tables에만.)\n (하위호환: 레거시 dataFlow(문자열)/dataFlowRefs[]/businessRuleRefs[]도 그대로 수용한다 — 점진 마이그레이션용.)\n\n --work-status <mdFile>: 마크다운 파일 (예: work-status.md)\n`)
|
|
366
|
+
.addHelpText('after', `\nStory Point:\n --points <n> spec 단위 규모 점수(0 이상). Story는 Task로 쪼개지 않고 이 값으로 규모를 매긴다.\n 예: --points 5\n\nJSON 파일 형식 예시:\n tasks.json ([deprecated] — 신규 spec은 --points 사용. --tasks는 하위호환용):\n [\n {"id": "", "title": "로그인 폼 구현", "done": false, "estimate": 4, "points": 3, "description": "## 세부\\n- ..."},\n {"id": "", "title": "유효성 검증", "done": true, "completedAt": "2026-05-29T00:00:00Z"}\n ]\n\n ui.json:\n {\n "figmaNodeId": "123:456",\n "route": "/login",\n "file": "src/app/login/page.tsx",\n "access": "public",\n "interactionMap": "## 인터랙션\\n- 입력 → 검증 → 제출",\n "screenRefs": ["SCR-LOGIN"],\n "primaryActions": "- 이메일·비밀번호로 로그인한다",\n "keyInformation": "- 로그인 실패 사유"\n }\n (screenRefs·primaryActions·keyInformation은 화면(screens) 기능을 켠 프로젝트에서만 쓴다.)\n (screenRefs는 서버 관리 필드 — 생성 때만 입력을 받는다. 수정 시 --ui 로 보낸 screenRefs는 서버가 무시하고 기존 값을 지킨다.\n 화면 연결 변경은 전용 경로(웹 화면 피커)로만 한다. 존재하지 않는 화면 ID는 동기화에서 빠지고 서버 로그에 경고가 남는다.)\n (route: 화면 기능을 켠 프로젝트에서 ui.route는 deprecated다 — route의 SSOT는 screens.route이고 명세는 screenRefs로 화면을 참조만 한다.\n 그런 프로젝트에 ui.route를 보내면 경고(stderr)만 띄우고 요청은 그대로 보낸다. 레거시 프로젝트에서는 지금처럼 ui.route가 화면 정보다.)\n\n logic.json (신구조 — 시나리오→순서 있는 단계→refs):\n {\n "dataFlowScenarios": [\n {\n "name": "로그인 성공",\n "description": "회원이 이메일과 비밀번호로 로그인에 성공하면 인증 토큰을 발급하고 마지막 로그인 시각을 갱신한다.",\n "steps": [\n { "description": "클라이언트가 입력한 이메일과 비밀번호를 인증 서버로 전송한다." },\n { "description": "인증에 성공하면 사용자 문서의 마지막 로그인 시각을 갱신한다.", "refs": [{ "tableId": "tbl_users", "field": "lastLoginAt", "direction": "WRITE", "note": "로그인 성공 시 갱신" }] }\n ]\n }\n ],\n "stateTransitions": "...",\n "businessRules": "..."\n }\n (신구조: dataFlowScenarios[]=시나리오, 각 시나리오의 steps[]=순서 있는 단계, 각 단계의 refs[]=db-tables의 tableId(+선택 field)를 가리키는 구조적 참조. direction은 READ|WRITE|READWRITE.)\n (SSOT: refs는 db-tables의 tableId/field를 가리키기만 한다 — 컬럼 정의는 db-tables에만.)\n (하위호환: 레거시 dataFlow(문자열)/dataFlowRefs[]/businessRuleRefs[]도 그대로 수용한다 — 점진 마이그레이션용.)\n\n --work-status <mdFile>: 마크다운 파일 (예: work-status.md)\n`)
|
|
318
367
|
.action(async (options) => {
|
|
319
368
|
const globalOpts = program.opts();
|
|
320
369
|
try {
|
|
@@ -370,6 +419,8 @@ function registerSpecsCommand(program) {
|
|
|
370
419
|
(0, output_1.printError)(e?.message ?? String(e));
|
|
371
420
|
return;
|
|
372
421
|
}
|
|
422
|
+
// 화면 우선 프로젝트의 ui.route는 deprecated — 경고만 하고 그대로 보낸다.
|
|
423
|
+
await warnIfUiRouteDeprecated(body.ui, globalOpts.project);
|
|
373
424
|
}
|
|
374
425
|
if (options.logic) {
|
|
375
426
|
try {
|
|
@@ -419,7 +470,7 @@ function registerSpecsCommand(program) {
|
|
|
419
470
|
.option('--epic <name>', '에픽(분류 라벨)')
|
|
420
471
|
.option('--points <n>', 'Story Point (spec 단위 규모 점수, 0 이상). Story는 Task로 쪼개지 않고 이 값으로 규모를 매긴다')
|
|
421
472
|
.option('--tasks <jsonFile>', '[deprecated] 체크리스트 JSON 파일 (SpecTask[]). 신규 spec은 --points 권장 (하위호환 유지)')
|
|
422
|
-
.option('--ui <jsonFile>', 'UI 메타데이터 JSON 파일 (SpecUI)')
|
|
473
|
+
.option('--ui <jsonFile>', 'UI 메타데이터 JSON 파일 (SpecUI). 화면 기능을 켠 프로젝트에서 ui.route는 deprecated (경고만, 저장은 그대로)')
|
|
423
474
|
.option('--logic <jsonFile>', '비즈니스 로직 JSON 파일 (SpecLogic)')
|
|
424
475
|
.option('--db-tables <ids>', '연관 DB 테이블 ID (쉼표 구분)')
|
|
425
476
|
.option('--work-status <mdFile>', '작업 현황 마크다운 파일')
|
|
@@ -481,6 +532,8 @@ function registerSpecsCommand(program) {
|
|
|
481
532
|
(0, output_1.printError)(e?.message ?? String(e));
|
|
482
533
|
return;
|
|
483
534
|
}
|
|
535
|
+
// 화면 우선 프로젝트의 ui.route는 deprecated — 경고만 하고 그대로 보낸다.
|
|
536
|
+
await warnIfUiRouteDeprecated(body.ui, globalOpts.project);
|
|
484
537
|
}
|
|
485
538
|
if (options.logic) {
|
|
486
539
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../../src/commands/specs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"specs.js","sourceRoot":"","sources":["../../src/commands/specs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -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.
|
|
5
|
+
version: 1.16.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -41,9 +41,12 @@ ch check
|
|
|
41
41
|
## 0. 대상 프로젝트 확정
|
|
42
42
|
- cwd(또는 상위)의 `.ch-project`에서 `projectId` 확보. 없으면 사용자에게 묻는다.
|
|
43
43
|
- 인증 확인: `ch auth status`, (이슈 발행 대비) `gh auth status`. 미인증이면 안내 후 중단.
|
|
44
|
+
- **화면 모드 확인**: `ch projects info --json`으로 `screensEnabled`를 본다.
|
|
45
|
+
- `true`면 화면 모드다. 기능을 추가할 때 **화면 배치를 함께 정한다**(§1.7).
|
|
46
|
+
- 키가 없거나 false면 레거시다. 종전 route 방식을 유지하고 §1.7을 건너뛴다.
|
|
44
47
|
|
|
45
48
|
## 1. 변경 내용 명확화 (대화형)
|
|
46
|
-
- 사용자와 **대화로 좁힌다**: **추가(feat) vs 수정(fix)** 구분, 구체적으로 무엇을·왜, 대상 기능/화면/spec
|
|
49
|
+
- 사용자와 **대화로 좁힌다**: **추가(feat) vs 수정(fix)** 구분, 구체적으로 무엇을·왜, 대상 기능/화면/spec, **어느 화면에 붙나**.
|
|
47
50
|
- 모호하면 한 번에 단정하지 말고 계속 질문. "현재 X → Y로 바꾼다" 수준까지 또렷하게.
|
|
48
51
|
|
|
49
52
|
## 1.5 분류 게이트 — 버그 vs 기획 변경 (전파 전 필수)
|
|
@@ -59,13 +62,30 @@ ch check
|
|
|
59
62
|
- 이 경우 §2(전파) 게이트는 적용하지 않는다. 구현 작업이 필요하면 §3으로 가서 **bug 유형 이슈**만 발행한다.
|
|
60
63
|
- 상세 처리 원칙은 [[2t-decencia-channel-change-propagation-v2]] §0.5.
|
|
61
64
|
|
|
62
|
-
### 기획 변경이면 — §
|
|
63
|
-
영향 전파(§2)를
|
|
65
|
+
### 기획 변경이면 — §1.7로 진행
|
|
66
|
+
화면 배치를 먼저 확인하고(§1.7), 그 다음 영향 전파(§2)를 수행한다.
|
|
67
|
+
|
|
68
|
+
## 1.7 화면 배치 확인 — "어느 화면에 붙나"
|
|
69
|
+
*(**기능 추가(feat)일 때만** 수행한다. 버그(fix/bug)는 건너뛴다. 레거시 프로젝트도 건너뛴다 — §0)*
|
|
70
|
+
|
|
71
|
+
새 기능은 **반드시 어느 화면엔가 붙는다.** 화면을 정하지 않고 spec을 만들면 화면에 연결되지 않은 spec이 남는다.
|
|
72
|
+
|
|
73
|
+
**절차**
|
|
74
|
+
1. `ch screens list --json`으로 후보 화면을 뽑아 사용자에게 보여준다.
|
|
75
|
+
2. **기존 화면에 붙일지, 새 화면을 만들지**를 사용자와 정한다.
|
|
76
|
+
3. 새 화면이면 `ch screens create`로 만든다.
|
|
77
|
+
4. 신규 spec을 만들 때 `ui.json`의 `screenRefs`에 그 화면 ID를 넣는다.
|
|
78
|
+
|
|
79
|
+
⚠️ **`screenRefs`는 spec 생성 때만 실린다.** 그래서 화면을 spec보다 먼저 정한다.
|
|
80
|
+
|
|
81
|
+
⚠️ **이미 있는 spec을 다른 화면으로 옮기는 재배치는 CLI로 안 된다.** 웹 화면 탭의 화면 피커로 안내한다.
|
|
82
|
+
|
|
83
|
+
🚫 **새 기능마다 새 화면을 만들지 마라.** 기본은 **기존 화면에 붙이는 것**이다. 새 화면은 사용자가 이동할 URL이 새로 생길 때만 만든다.
|
|
64
84
|
|
|
65
85
|
## 2. 영향 전파 (게이트 ①)
|
|
66
86
|
*(기획 변경으로 분류된 경우만 — 버그는 §1.5에서 §3으로 건너뜀)*
|
|
67
|
-
- `2t-decencia-channel-change-propagation-v2`로 **영향 분석**: 이 변경이 닿는 PRD·spec(ui·logic·dbTableRefs·points)
|
|
68
|
-
- → **[게이트] 영향 범위를 사용자에게 제시하고 확인받는다** (어떤 문서가 어떻게 바뀌는지 요약). 승인 전에는 문서를 건드리지 않는다.
|
|
87
|
+
- `2t-decencia-channel-change-propagation-v2`로 **영향 분석**: 이 변경이 닿는 PRD·spec(ui·logic·dbTableRefs·points)·**screens(route·목적·접근권한·relatedSpecIds)**·db-schema/db-tables·SQA·workStatus를 빠짐없이 식별.
|
|
88
|
+
- → **[게이트] 영향 범위를 사용자에게 제시하고 확인받는다** (어떤 문서가 어떻게 바뀌는지 요약). **붙는 화면 / 새로 생기는 화면**도 요약에 포함한다. 승인 전에는 문서를 건드리지 않는다.
|
|
69
89
|
- 승인되면 전파 스킬 절차대로 **연관 문서를 순차 갱신**. `spec.dbTableRefs` ↔ `dbTable.relatedSpecIds` 양방향 동기화 유지.
|
|
70
90
|
|
|
71
91
|
## 3. 할일 → GitHub 이슈 (게이트 ②)
|
|
@@ -83,6 +103,7 @@ ch check
|
|
|
83
103
|
- spec 필드는 **단수+복수 동시 저장**(device/devices 등) 규칙 유지(미준수 시 웹 빈 칼럼).
|
|
84
104
|
- `ch specs get`/`--json` 조회가 Windows에서 빈 출력이면 PowerShell `Out-File` + forward-slash 경로로 우회.
|
|
85
105
|
- 이슈 본문은 `--body-file`(LF) 사용 — 따옴표/줄바꿈/한글 안전.
|
|
106
|
+
- ⚠️ **`screenRefs`는 spec 생성 때만 실린다.** `ch specs update --ui`로 수정하면 서버가 무시한다(에러 없음). 화면 재배치는 웹 화면 피커로 한다.
|
|
86
107
|
|
|
87
108
|
## 경계
|
|
88
109
|
- **PR·머지·이슈 close는 하지 않는다** — 이슈 발행까지가 이 스킬의 끝(이후는 issue-coder/pr-merger/사람).
|
|
@@ -10,7 +10,7 @@ description: |
|
|
|
10
10
|
(3) 명세·DB·SQA가 서로 어긋나 있는 의심이 들 때 (정합성 점검),
|
|
11
11
|
(4) PRD 갱신 후 하위 spec/db/SQA로 변경분을 흘려보내야 할 때,
|
|
12
12
|
(5) Sprint 진행 중 도메인 규칙·스키마가 흔들렸을 때 연쇄 갱신이 필요할 때.
|
|
13
|
-
version: 1.
|
|
13
|
+
version: 1.16.0
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
<!-- ch-version-gate -->
|
|
@@ -111,7 +111,8 @@ ch check
|
|
|
111
111
|
| 리소스 | 외부로 노출하는 참조 | 외부에서 참조받는 키 |
|
|
112
112
|
|---|---|---|
|
|
113
113
|
| PRD | Epic 명, spec 제목 (기능 관점만 — 스키마/테이블 미포함) | (텍스트만 — 자동 링크 없음) |
|
|
114
|
-
| spec | `epic`, `dbTableRefs[]` | `relatedSpec` (SQA), spec.dbTableRefs ↔ table.relatedSpecIds |
|
|
114
|
+
| spec | `epic`, `dbTableRefs[]`, `ui.screenRefs[]` | `relatedSpec` (SQA), spec.dbTableRefs ↔ table.relatedSpecIds |
|
|
115
|
+
| screens | route·목적·접근권한·states, `relatedSpecIds[]` | spec.ui.screenRefs ↔ screen.relatedSpecIds 양방향 |
|
|
115
116
|
| db-schema (전체) | 테이블 인벤토리 (텍스트) | (텍스트만) |
|
|
116
117
|
| db-tables (per) | `relatedSpecIds[]`, `stateMachines[].transitions[].specRef` | 다른 테이블의 FK 주석 |
|
|
117
118
|
| SQA 항목 | `relatedSpec` | — |
|
|
@@ -129,7 +130,7 @@ ch check
|
|
|
129
130
|
|---|---|---|---|
|
|
130
131
|
| A | **DB 컬럼/인덱스/securityRules/stateMachines** 변경 | `db-tables/<id>` | db-schema 마이그레이션 노트, 해당 테이블 참조 spec(logic, *이름 참조만*), SQA(데이터 검증 TC). **stateMachines 변경 시** 추가로: 상태전이 SQA TC(§sqa-v2 4.3.5), 전이의 `specRef`가 가리키는 spec, spec.logic.stateTransitions와 경계 중복 없는지. **PRD 무영향**(스키마는 PRD에 없음) |
|
|
131
132
|
| B | **새 테이블 추가/삭제** | `db-tables` 신규/삭제 | db-schema 인벤토리·ERD(테이블 단위), 영향 spec.dbTableRefs, SQA(신규 검증 TC). **PRD 무영향**(새 *기능*이면 그건 C/H 진앙) |
|
|
132
|
-
| C | **spec 의 UI 요구사항** 변경 | `spec.ui` | 같은 화면 참조하는 다른 spec, SQA(UI 검증 TC), PRD 화면
|
|
133
|
+
| C | **spec 의 UI 요구사항** 변경 | `spec.ui` | 같은 화면 참조하는 다른 spec, **screens(화면 목적·핵심 액션·접근권한)**, SQA(UI 검증 TC), PRD 화면 절. **새 화면이 필요한 기능 추가도 진앙 C**다 |
|
|
133
134
|
| D | **spec 의 비즈니스 규칙(logic)** 변경 | `spec.logic` | 의존 spec, SQA(정상/비정상 TC), db-tables(검증 규칙·trigger), PRD 도메인 규칙 절 |
|
|
134
135
|
| E | **권한/역할 정책** 변경 | 영향 spec.logic, db-tables.securityRules | 모든 영향 spec의 SQA(접근권한 TC), db-schema 보안 일관성 절, PRD 권한 절 |
|
|
135
136
|
| F | **Story Point(points) 변경** | `spec.points` | Sprint 용량 산정, workStatus |
|
|
@@ -337,6 +338,11 @@ ch specs get <specId> --json > /tmp/s.json
|
|
|
337
338
|
# … 편집 (ui/logic/dbTableRefs/points) …
|
|
338
339
|
ch specs update <specId> --file /tmp/s.json --no-version
|
|
339
340
|
|
|
341
|
+
# 3.5) screens (화면 모드 프로젝트) — [[2t-decencia-channel-cli-v2]] §3
|
|
342
|
+
ch screens list --json # 후보 화면 확인
|
|
343
|
+
ch screens create --id SCR-XXX --name "..." --route /xxx --purpose "..." --access developer
|
|
344
|
+
ch screens update <screenId> --purpose "..." # 지정한 필드만 PATCH
|
|
345
|
+
|
|
340
346
|
# 4) SQA 시트 항목 — [[2t-decencia-channel-sqa-v2]] §3.5
|
|
341
347
|
ch sqa get <sheetId> --json | jq '.items' > /tmp/items.json
|
|
342
348
|
ch sqa add-items <sheetId> --file /tmp/new-items.json # 신규
|
|
@@ -355,6 +361,10 @@ ch specs get <specId> --json | jq -r '.workStatus // ""' > /tmp/ws.md
|
|
|
355
361
|
ch specs update <specId> --work-status /tmp/ws.md --no-version
|
|
356
362
|
```
|
|
357
363
|
|
|
364
|
+
> ⚠️ **화면 재배치(`spec.ui.screenRefs` 변경)는 CLI로 안 된다.** `ch specs update --ui`로 보낸 `screenRefs`는 서버가 무시한다(에러 없음). 웹 화면 탭의 **화면 피커**로 바꾼다. 신규 spec은 생성 때 `--ui`의 `screenRefs`로 함께 싣는다.
|
|
365
|
+
|
|
366
|
+
> 레거시 프로젝트(`screensEnabled` 미설정·false)는 screens 축을 **건너뛴다**. `spec.ui.route`가 여전히 SSOT다.
|
|
367
|
+
|
|
358
368
|
> Windows CRLF 주의: 모든 파일 입력 시 `tr -d '\r'` 또는 heredoc 사용. (자동 메모리: `b8d6c270`)
|
|
359
369
|
|
|
360
370
|
---
|
|
@@ -9,7 +9,7 @@ description: |
|
|
|
9
9
|
(3) ch db-tables 명령(list/get/create/update/delete)을 사용할 때,
|
|
10
10
|
(4) ch screens 명령(list/get/create/update/delete/migrate)으로 화면을 다루거나 레거시 프로젝트를 화면 모드로 이관할 때,
|
|
11
11
|
(5) Spec ID를 JIRA 스타일(`LOGIN-001`)로 직접 지정할 때 (`ch specs create --id`).
|
|
12
|
-
version: 1.
|
|
12
|
+
version: 1.16.0
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
<!-- 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.
|
|
5
|
+
version: 1.16.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -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.
|
|
5
|
+
version: 1.16.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 2t-decencia-channel-project-bootstrap
|
|
3
|
-
description: 신규 기획을 사용자와 대화하며 step-by-step으로 소통채널 프로젝트로 만드는 오케스트레이터 스킬. (1)대화로 PRD 완성 →
|
|
3
|
+
description: 신규 기획을 사용자와 대화하며 step-by-step으로 소통채널 프로젝트로 만드는 오케스트레이터 스킬. (1)대화로 PRD 완성 → (2)기능명세(spec) 내용 확정 → (3)화면 구성 → (4)DB 스키마 → (5)spec 업로드 → (6)SQA 시트. 각 단계 사용자 승인 게이트, 작성 디테일은 기존 2t-decencia-channel-*-v2 스킬을 적극 재사용. "새 기획 만들어줘"·"프로젝트 처음부터 세팅" 류 요청 시.
|
|
4
4
|
allowed-tools: Bash(ch:*) Bash(git:*) Read Write
|
|
5
|
-
version: 1.
|
|
5
|
+
version: 1.16.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|
|
@@ -23,15 +23,24 @@ ch check
|
|
|
23
23
|
# 2t-decencia-channel-project-bootstrap — 신규 기획 → 프로젝트
|
|
24
24
|
|
|
25
25
|
신규 기획을 **사용자와 대화하며 step-by-step**으로 소통채널 프로젝트로 만든다.
|
|
26
|
-
이 스킬은 **오케스트레이터**다 — PRD/spec
|
|
26
|
+
이 스킬은 **오케스트레이터**다 — PRD/spec/화면/DB/SQA의 실제 작성법은 기존 v2 스킬을 **적극 재사용**하고(중복 작성 금지), 흐름·승인 게이트만 책임진다.
|
|
27
27
|
|
|
28
28
|
## 핵심 원칙
|
|
29
29
|
- **각 단계마다 사용자 승인 게이트.** "괜찮다"는 확인 없이는 절대 다음 단계로 넘어가지 않는다. 수정 요청이면 그 단계를 반복.
|
|
30
|
-
-
|
|
30
|
+
- **화면은 기능에서 파생된다. 기능명세가 먼저, 화면 구성이 뒤다.** 기능을 알아야 화면을 짤 수 있다.
|
|
31
|
+
- 작성 디테일은 호출: PRD→`2t-decencia-channel-prd-v2`, 기능명세→`2t-decencia-channel-spec-v2`, 화면→`2t-decencia-channel-cli-v2` §3(screens 명령), DB→`2t-decencia-channel-db-schema-v2`, SQA→`2t-decencia-channel-sqa-v2`, 업로드→`2t-decencia-channel-cli-v2`.
|
|
31
32
|
|
|
32
33
|
## Use when
|
|
33
34
|
- "새 기획 만들어줘", "프로젝트 처음부터 세팅해줘", 아이디어/요구사항을 소통채널 프로젝트로 구조화하고 싶을 때.
|
|
34
35
|
|
|
36
|
+
## 전체 흐름
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
(1) PRD → (2) 기능명세 내용 확정 → (3) 화면 구성 → (4) DB 스키마 → (5) spec 업로드 → (6) SQA
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**spec 서버 업로드는 화면·DB를 만든 뒤에 한다.** 이유는 §5에 있다. 화면 연결(`screenRefs`)과 테이블 연결(`dbTableRefs`)이 spec 생성 시점에 함께 실려야 한다.
|
|
43
|
+
|
|
35
44
|
---
|
|
36
45
|
|
|
37
46
|
## 0. 프로젝트 준비
|
|
@@ -41,25 +50,120 @@ ch check
|
|
|
41
50
|
- **schema 설정**(⚠️ 빠지면 웹 UI가 빈 칼럼으로 보임) + **specVersion=2**(Epic-Story·Story Point).
|
|
42
51
|
- cwd에 `.ch-project`(`{"projectId":"..."}`) 기록 → 이후 issue-coder/머저가 사용.
|
|
43
52
|
|
|
53
|
+
### 0-1. 화면 모드 확인 (screensEnabled)
|
|
54
|
+
- **신규 프로젝트는 서버가 `screensEnabled: true`로 만든다.** 화면 정보의 SSOT는 screens 리소스다. **신규 프로젝트 spec에는 `ui.route`를 쓰지 않는다.**
|
|
55
|
+
- 기존 프로젝트를 이어 쓰면 `ch projects info --json`으로 `screensEnabled`를 본다. **키가 아예 없거나 false면 레거시다.** (레거시 프로젝트 응답에는 이 키가 없다. 없음 = false로 읽는다.)
|
|
56
|
+
- **레거시는 route 방식을 그대로 유지한다.** §3(화면 구성)을 건너뛰고 spec의 `ui.route`를 계속 쓴다.
|
|
57
|
+
|
|
58
|
+
### 0-2. 레거시를 화면 모드로 옮길 때만
|
|
59
|
+
- `ch screens migrate --dry-run`으로 계획을 보고 → 사용자 확인 → `ch screens migrate`.
|
|
60
|
+
- migrate는 `spec.ui.route`를 씨앗으로 화면을 만든다. 비파괴·멱등이다.
|
|
61
|
+
- ⚠️ migrate는 **서버가 화면 연결 API를 갖춘 뒤에만** 끝까지 간다. 구버전 서버면 연결 단계에서 중단된다. 이때도 `screensEnabled`는 켜지지 않아 프로젝트는 레거시 모드로 남는다.
|
|
62
|
+
- 터미널을 안 쓰는 기획자·디자이너에게는 웹 화면 탭의 **[기능명세에서 화면 가져오기]**를 안내한다. 같은 서버 로직을 쓴다.
|
|
63
|
+
- 🚫 **신규(화면 우선) 프로젝트에 `ch screens migrate --rollback`을 걸지 마라.** 신규 프로젝트 spec에는 route가 없다. 롤백하면 화면 SSOT가 꺼지는데 route도 비어 있어 화면 정보가 어디에도 남지 않는다. 롤백은 route에서 화면을 파생한 레거시 전용이다.
|
|
64
|
+
|
|
44
65
|
## 1. PRD (대화형)
|
|
45
66
|
- 사용자와 **Q&A로 요구사항 수집**(목적/사용자/핵심 기능/범위/제약). 한 번에 다 묻지 말고 대화로 좁혀간다.
|
|
46
67
|
- `2t-decencia-channel-prd-v2` 규칙대로 PRD 작성·업로드. 견적/유지보수성 항목은 제외.
|
|
47
68
|
- → **[게이트] 사용자에게 PRD 확인 요청.** "괜찮다" 하면 2단계, 수정 요청이면 반영 후 재확인.
|
|
48
69
|
|
|
49
|
-
## 2.
|
|
70
|
+
## 2. 기능명세(spec) — 내용 확정
|
|
50
71
|
*(PRD 승인 후에만)*
|
|
51
|
-
-
|
|
52
|
-
-
|
|
72
|
+
- `2t-decencia-channel-spec-v2` 규칙대로 PRD의 Epic/Story → spec 본문을 짠다.
|
|
73
|
+
- ui 필드는 화면 모드 기준으로 채운다: `file`·`figmaNodeId`·`interactionMap`·`primaryActions`·`keyInformation`. **`route`는 쓰지 않는다.** route의 SSOT는 `screens.route`다.
|
|
74
|
+
- 레거시 프로젝트(§0-1)는 예외다. 종전대로 `route`·`access`를 spec에 쓴다.
|
|
75
|
+
- 이 단계의 산출물은 **기능 목록 + spec 본문 초안**이다. 항목: 이름 · epic · points · 핵심 액션 · 필요 테이블 후보.
|
|
76
|
+
- ⚠️ **서버 업로드는 여기서 하지 않는다.** 화면과 테이블을 먼저 만들고 §5에서 `screenRefs`·`dbTableRefs`와 함께 생성한다.
|
|
53
77
|
- → **[게이트] 사용자 확인.** OK면 3단계.
|
|
54
78
|
|
|
55
|
-
## 3.
|
|
56
|
-
*(
|
|
79
|
+
## 3. 화면 구성
|
|
80
|
+
*(기능명세 승인 후에만. 레거시 프로젝트는 건너뛴다 — §0-1)*
|
|
81
|
+
|
|
82
|
+
기능들을 **화면에 배치**한다. 화면은 사용자가 실제로 마주하는 단위다.
|
|
83
|
+
|
|
84
|
+
**입력**: §2의 기능 목록.
|
|
85
|
+
|
|
86
|
+
**절차**
|
|
87
|
+
1. 기능을 **사용자 맥락**으로 묶는다. 같은 사용자가 한 자리에서 연달아 하는 일이면 한 화면이다.
|
|
88
|
+
2. 화면 배치 초안을 표로 제시한다.
|
|
89
|
+
|
|
90
|
+
| 화면ID | 화면명 | route | 목적 | 접근권한 | 담기는 기능(spec) | 진입/이탈 |
|
|
91
|
+
|---|---|---|---|---|---|---|
|
|
92
|
+
| SCR-PROJECTS | 프로젝트 목록 | /projects | 프로젝트를 찾아 들어간다 | developer | 목록 조회·검색·정렬·생성·삭제 | 대시보드에서 진입 / 행 클릭 시 상세로 |
|
|
93
|
+
|
|
94
|
+
3. → **[게이트] 사람이 승인한다.** 승인 전에는 아무것도 만들지 않는다.
|
|
95
|
+
4. 승인되면 화면을 만든다.
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
ch screens create --id SCR-PROJECTS --name "프로젝트 목록" \
|
|
99
|
+
--route /projects \
|
|
100
|
+
--purpose "프로젝트를 찾아 들어간다" \
|
|
101
|
+
--access developer --order 1 \
|
|
102
|
+
--epic "프로젝트" --states ./states.json
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
5. 승인된 배치표를 §5(spec 업로드)의 `ui.screenRefs` 입력으로 넘긴다.
|
|
106
|
+
|
|
107
|
+
### 🚫 1 spec = 1 화면으로 뽑지 마라
|
|
108
|
+
그러면 화면이 route의 복사본이 된다. 화면 모델을 만든 이유가 사라진다.
|
|
109
|
+
|
|
110
|
+
- **초안의 화면 수가 spec 수와 같으면 다시 묶는다.**
|
|
111
|
+
- 묶는 기준: 같은 진입점 · 같은 사용자 맥락 · 같은 데이터 대상.
|
|
112
|
+
- 대략 **화면 1개에 spec 2~5개**를 목표로 한다.
|
|
113
|
+
- 예: `프로젝트 목록 / 검색 / 정렬 / 생성 / 삭제` spec 5개 → 화면 1개(`SCR-PROJECTS`, `/projects`).
|
|
114
|
+
- 예: `대시보드` 화면 1개 = 통계 조회 + 최근 활동 + 알림 (spec 3개).
|
|
115
|
+
- 1:1이 정당한 경우도 있다(로그인처럼 단독 화면). 예외는 이유를 한 줄 적는다.
|
|
116
|
+
|
|
117
|
+
### 화면의 단위는 사용자가 이동하는 URL이다
|
|
118
|
+
탭·모달·바텀시트는 별도 화면이 아니다. 그 화면의 `states`·`entryPoints`로 적는다.
|
|
119
|
+
|
|
120
|
+
## 4. DB 스키마
|
|
121
|
+
*(화면 승인 후에만)*
|
|
122
|
+
- `2t-decencia-channel-db-schema-v2`로 db-schema(ERD/정책) + db-tables(컬럼·인덱스·보안규칙) 작성.
|
|
123
|
+
- `spec.dbTableRefs` ↔ `dbTable.relatedSpecIds` 양방향.
|
|
124
|
+
- **spec 업로드보다 앞선다.** spec 생성 시 `--db-tables`에 실제 tableId가 필요하기 때문이다([[2t-decencia-channel-spec-v2]] §6-3 — 테이블 먼저, spec 연결은 그 다음).
|
|
125
|
+
- → **[게이트] 사용자 확인.** OK면 5단계.
|
|
126
|
+
|
|
127
|
+
## 5. spec 업로드
|
|
128
|
+
*(화면·테이블이 다 만들어진 뒤)*
|
|
129
|
+
|
|
130
|
+
이제 spec을 서버에 만든다. 화면 연결과 테이블 연결을 **생성 한 번에** 싣는다.
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
ch specs create --id PROJ-001 --name "프로젝트 목록" \
|
|
134
|
+
--device 웹 --domain 프로젝트 --type 화면 \
|
|
135
|
+
--epic "프로젝트" --points 5 \
|
|
136
|
+
--ui ui.json --logic logic.json --db-tables tbl_projects,tbl_members
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
⚠️ `--device`·`--domain`·`--type`은 **필수 플래그**다. 빼면 CLI가 실행 즉시 실패한다. 값은 `ch specs meta --json`이 준 스키마 안에서 고른다.
|
|
140
|
+
|
|
141
|
+
`ui.json` (화면 모드):
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"file": "src/app/projects/page.tsx",
|
|
146
|
+
"figmaNodeId": "123:456",
|
|
147
|
+
"interactionMap": "## 인터랙션\n...",
|
|
148
|
+
"screenRefs": ["SCR-PROJECTS"],
|
|
149
|
+
"primaryActions": "- 프로젝트를 만든다",
|
|
150
|
+
"keyInformation": "- 진행 중 프로젝트 수"
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
- `route`를 넣지 않는다. `access`는 화면(screens)에 있다.
|
|
155
|
+
- 검증: `ch specs get PROJ-001 --json`의 `ui.screenRefs`와 `ch screens get SCR-PROJECTS --json`의 `relatedSpecIds`가 **양쪽 다** 채워졌는지 본다.
|
|
156
|
+
- ⚠️ 없는 화면 ID를 넣으면 spec 생성은 성공하지만 그 화면은 동기화에서 빠진다. 화면을 먼저 만드는 이유다.
|
|
157
|
+
|
|
158
|
+
## 6. SQA 시트
|
|
159
|
+
*(spec 업로드 후에만)*
|
|
57
160
|
- `2t-decencia-channel-sqa-v2`로 SQA 작성: **A축**(명세별 기능 TC — 영역별 번들에서 도출) + **B축**(비기능 표준 40).
|
|
58
161
|
|
|
59
162
|
---
|
|
60
163
|
|
|
61
164
|
## 업로드 주의 (전 단계 공통)
|
|
62
165
|
- 모든 업로드는 `2t-decencia-channel-cli-v2`(=`ch` CLI) 경유.
|
|
166
|
+
- ⚠️ **`screenRefs`는 spec 생성 때만 실린다.** `ch specs update --ui`로 보내면 **서버가 조용히 무시한다**(에러가 안 난다). 화면 재배치는 웹 화면 피커로 한다. 그래서 §3(화면)이 §5(spec 업로드)보다 앞이다.
|
|
63
167
|
- ⚠️ content는 **마크다운**(HTML 아님) + **CRLF 정제**(`tr -d '\r'`). PowerShell 인자 분리 실패 시 Bash 도구로 우회.
|
|
64
168
|
- spec 필드는 **단수+복수 동시 저장**(device/devices 등) 규칙 유지(미준수 시 웹 빈 칼럼).
|
|
65
169
|
- `--json` 조회가 Windows에서 깨지면 파일 저장 + forward-slash 경로로 우회.
|
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
(2) UI 메타데이터·비즈니스 로직·DB 참조를 함께 다룰 때,
|
|
12
12
|
(3) Story 규모를 Story Point(`--points`)로 매길 때,
|
|
13
13
|
(4) 신규 spec ID를 `LOGIN-001` 같은 JIRA 스타일로 부여하고 싶을 때 (`ch specs create --id`).
|
|
14
|
-
version: 1.
|
|
14
|
+
version: 1.16.0
|
|
15
15
|
---
|
|
16
16
|
|
|
17
17
|
<!-- ch-version-gate -->
|
|
@@ -43,7 +43,7 @@ CLI 명령은 [[2t-decencia-channel-cli-v2]], DB 테이블 작성은 [[2t-decenc
|
|
|
43
43
|
| **Epic** | `spec.epic` (string) | 분류 라벨. 같은 에픽 spec끼리 자동 그룹핑 |
|
|
44
44
|
| **Story** | spec 자체 (1 spec = 1 story) | 명세 1건. CLI 명칭은 `specs` 그대로 |
|
|
45
45
|
| **Story Point** | `spec.points` (number) | Story 규모 점수. Story를 Task로 쪼개지 않고 spec 단위로 매긴다. §3 |
|
|
46
|
-
| **UI** | `spec.ui` (object) | Figma·
|
|
46
|
+
| **UI** | `spec.ui` (object) | Figma·file·interactionMap·screenRefs (route·access는 레거시 프로젝트만 — §4-5) |
|
|
47
47
|
| **Logic** | `spec.logic` (object) | dataFlowScenarios·stateTransitions·businessRules |
|
|
48
48
|
| **DB** | `spec.dbTableRefs` (string[]) | db-tables 컬렉션의 테이블 ID 배열. 양방향 동기화 |
|
|
49
49
|
|
|
@@ -73,7 +73,7 @@ ch specs get <specId> --json | jq '.logic' # 3) 검증
|
|
|
73
73
|
| 위치 | 들어가는 것 |
|
|
74
74
|
|---|---|
|
|
75
75
|
| `content` | 개요 1~3줄 + 권한 요약. 짧게 유지 |
|
|
76
|
-
| `ui.*` |
|
|
76
|
+
| `ui.*` | `figmaNodeId`/`file`/`interactionMap` + `screenRefs`(화면 연결) + `primaryActions`/`keyInformation`. **`route`·`access`는 레거시 프로젝트에서만 쓴다** — 화면 모드의 SSOT는 `screens`다 (§4-5) |
|
|
77
77
|
| `logic.dataFlowScenarios` | 시나리오별 데이터 흐름. 시나리오 → 순서 있는 단계 → 단계별 테이블 참조(refs) |
|
|
78
78
|
| `logic.stateTransitions` | 화면 상태 전이 (저장되는 엔티티 상태는 db-table.stateMachines) |
|
|
79
79
|
| `logic.businessRules` | 도메인 규칙 |
|
|
@@ -158,8 +158,13 @@ ch specs meta --json
|
|
|
158
158
|
# 2) 기존 spec/db-tables 목록 확인 (중복·연결 대상 파악)
|
|
159
159
|
ch specs list --json --per-page 100
|
|
160
160
|
ch db-tables list --json
|
|
161
|
+
|
|
162
|
+
# 3) 이 명세가 붙을 화면 확인 (화면 모드 프로젝트)
|
|
163
|
+
ch screens list --json
|
|
161
164
|
```
|
|
162
165
|
|
|
166
|
+
붙을 화면이 없으면 `ch screens create`로 먼저 만든다(§4-5).
|
|
167
|
+
|
|
163
168
|
---
|
|
164
169
|
|
|
165
170
|
## 3. Story Point — spec 단위 규모
|
|
@@ -199,16 +204,14 @@ Story 하나를 끝내는 데 드는 규모를 매긴다.
|
|
|
199
204
|
|
|
200
205
|
---
|
|
201
206
|
|
|
202
|
-
## 4. UI —
|
|
207
|
+
## 4. UI — 화면 연결 · Figma · Interaction Map
|
|
203
208
|
|
|
204
|
-
### 4-1. ui.json 구조
|
|
209
|
+
### 4-1. ui.json 구조 (화면 모드 — 기본)
|
|
205
210
|
|
|
206
211
|
```json
|
|
207
212
|
{
|
|
208
213
|
"figmaNodeId": "12345:67890",
|
|
209
|
-
"route": "/login",
|
|
210
214
|
"file": "src/app/login/page.tsx",
|
|
211
|
-
"access": "public",
|
|
212
215
|
"interactionMap": "## 인터랙션\n\n| 요소 | 타입 | 액션 | 동작 |\n|---|---|---|---|\n| 이메일 input | input | onBlur | 형식 검증 |\n| 비밀번호 input | input + 토글 | 클릭 | 숨김/표시 |\n| 로그인 버튼 | 버튼 | 클릭 | 비동기 인증 |\n| 회원가입 링크 | 링크 | 클릭 | → /register |\n\n### 다이얼로그/바텀시트\n- 잠금 안내: 5회 실패 시 표시\n",
|
|
213
216
|
"screenRefs": ["SCR-LOGIN"],
|
|
214
217
|
"primaryActions": "- 이메일·비밀번호로 로그인한다\n- 비밀번호 재설정으로 이동한다",
|
|
@@ -216,6 +219,20 @@ Story 하나를 끝내는 데 드는 규모를 매긴다.
|
|
|
216
219
|
}
|
|
217
220
|
```
|
|
218
221
|
|
|
222
|
+
**신규 spec에는 `route`를 넣지 않는다.** 화면 경로는 `screens.route`가 SSOT다. 화면은 `screenRefs`로 참조만 한다(§4-5).
|
|
223
|
+
|
|
224
|
+
**레거시 예시** — `screensEnabled` 미설정·false 프로젝트만. 이 경우에만 `route`·`access`를 쓴다.
|
|
225
|
+
|
|
226
|
+
```json
|
|
227
|
+
{
|
|
228
|
+
"figmaNodeId": "12345:67890",
|
|
229
|
+
"route": "/login",
|
|
230
|
+
"file": "src/app/login/page.tsx",
|
|
231
|
+
"access": "public",
|
|
232
|
+
"interactionMap": "## 인터랙션\n..."
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
219
236
|
`screenRefs`·`primaryActions`·`keyInformation`은 **화면(screens) 기능을 켠 프로젝트**에서만 쓴다(§4-5).
|
|
220
237
|
|
|
221
238
|
### 4-2. 필드 작성 가이드
|
|
@@ -223,9 +240,9 @@ Story 하나를 끝내는 데 드는 규모를 매긴다.
|
|
|
223
240
|
| 필드 | 작성 규칙 |
|
|
224
241
|
|---|---|
|
|
225
242
|
| `figmaNodeId` | Figma URL의 `?node-id=` 값. `-` → `:` 치환. 예: `12345:67890` |
|
|
226
|
-
| `route` | 화면 경로.
|
|
243
|
+
| `route` | **[레거시]** 화면 경로. `screensEnabled=true` 프로젝트에서는 **쓰지 않는다**. route의 SSOT는 `screens.route`다 |
|
|
227
244
|
| `file` | 진입 컴포넌트 파일 경로(저장소 기준). 예: `src/app/login/page.tsx` |
|
|
228
|
-
| `access` | `public`, `auth`, `admin`, `role:센터장` 등 자유 문자열.
|
|
245
|
+
| `access` | **[레거시]** `public`, `auth`, `admin`, `role:센터장` 등 자유 문자열. 화면 모드에서는 `screens.access`가 SSOT다 |
|
|
229
246
|
| `interactionMap` | **모든 인터랙티브 요소**를 마크다운 표로. 다이얼로그/바텀시트/키보드 단축키는 별도 절 |
|
|
230
247
|
| `screenRefs[]` | 이 명세가 걸리는 **화면 ID 배열**. 서버가 `screen.relatedSpecIds`와 양방향으로 맞춘다. **생성 때만 넣는다** — 수정은 전용 경로로만 (§4-5) |
|
|
231
248
|
| `primaryActions` | 이 명세가 화면에서 하게 하는 **핵심 액션**. 마크다운 목록. 예: `- 프로젝트를 만든다` |
|
|
@@ -255,19 +272,30 @@ Story 하나를 끝내는 데 드는 규모를 매긴다.
|
|
|
255
272
|
|
|
256
273
|
### 4-5. 화면(screens) 연결 — screensEnabled 프로젝트만
|
|
257
274
|
|
|
275
|
+
**참조 원칙 — db-tables와 같은 구조다.** 정의는 전용 리소스에 있고, spec은 링크만 건다.
|
|
276
|
+
|
|
277
|
+
| | 정의의 SSOT | spec은 |
|
|
278
|
+
|---|---|---|
|
|
279
|
+
| DB | `db-tables` (컬럼·타입·인덱스) | `dbTableRefs[]`로 참조만 |
|
|
280
|
+
| 화면 | `screens` (route·목적·권한·상태) | `ui.screenRefs[]`로 참조만 |
|
|
281
|
+
|
|
258
282
|
프로젝트에 `screensEnabled`가 켜져 있으면 화면 정보의 SSOT가 **screens 리소스**로 바뀐다. 꺼져 있거나 필드 자체가 없으면(기존 프로젝트 전부) 지금까지처럼 `ui.route`가 화면 정보다 — 동작이 달라지지 않는다.
|
|
259
283
|
|
|
260
284
|
| 모드 | 화면 정보 | ui에 쓰는 것 |
|
|
261
285
|
|---|---|---|
|
|
262
286
|
| `screensEnabled` 미설정·false (레거시 기본) | `ui.route`·`figmaNodeId`·`access`·`interactionMap` | 기존 5필드만 |
|
|
263
|
-
| `screensEnabled=true` | screens 리소스 |
|
|
287
|
+
| `screensEnabled=true` | screens 리소스 | `figmaNodeId`·`file`·`interactionMap` + `screenRefs`·`primaryActions`·`keyInformation` (**route·access 없음**) |
|
|
288
|
+
|
|
289
|
+
**신규 spec 규칙**: `ui.route`를 쓰지 마라. 붙일 화면이 없으면 `ch screens create`(또는 웹 화면 탭)로 **먼저 화면을 만들고** 그 ID를 `screenRefs`에 넣는다.
|
|
290
|
+
|
|
291
|
+
**화면과 spec은 N:1이다.** 한 화면에 여러 spec이 붙는 것이 정상이다. `screenRefs`가 배열인 이유는 한 spec이 여러 화면에 걸칠 수도 있어서지, 화면과 spec이 1:1이라는 뜻이 아니다. **spec 수만큼 화면을 만들지 마라** — 그러면 화면이 route의 복사본이 된다.
|
|
264
292
|
|
|
265
293
|
**`screenRefs`는 서버 관리 필드다.** 규칙 두 개만 기억하면 된다.
|
|
266
294
|
|
|
267
295
|
1. **생성 때는 `ui.json`에 넣어도 된다.** 서버가 중복을 걷어내고 각 화면의 `relatedSpecIds`에 이 spec을 더한다. 없는 화면 ID를 넣으면 생성은 성공하되 그 화면은 동기화에서 빠지고 서버 로그에 경고가 남는다.
|
|
268
|
-
2. **수정 때는 `ui.json`으로 못 바꾼다.** 일반 `ch specs update --ui`가 보낸 `screenRefs`는 서버가 **무시하고 기존 값을 지킨다**. 화면 연결 변경은 전용 경로(`PATCH /specs/:id/screen-refs`)로만 한다 — 웹의 화면 피커가 그 경로를 쓴다. 없는 화면 ID를 그 경로로 보내면 400이다.
|
|
296
|
+
2. **수정 때는 `ui.json`으로 못 바꾼다.** 일반 `ch specs update --ui`가 보낸 `screenRefs`는 서버가 **무시하고 기존 값을 지킨다**. **에러가 안 난다** — 저장된 줄 알고 넘어가기 쉽다. 화면 연결 변경은 전용 경로(`PATCH /specs/:id/screen-refs`)로만 한다 — 웹의 화면 피커가 그 경로를 쓴다. 없는 화면 ID를 그 경로로 보내면 400이다.
|
|
269
297
|
|
|
270
|
-
이 규칙 덕분에 `--ui`로
|
|
298
|
+
이 규칙 덕분에 `--ui`로 `interactionMap` 한 줄만 고쳐 저장해도 화면 연결이 날아가지 않는다. `primaryActions`·`keyInformation`도 `ui.json`에 키가 없으면 기존 값이 보존된다(빈 문자열을 명시하면 지워진다). 그래도 안전한 습관은 §0의 Read-before-Write다 — `ch specs get <id> --json`으로 받아 편집한 뒤 보낸다.
|
|
271
299
|
|
|
272
300
|
---
|
|
273
301
|
|
|
@@ -542,7 +570,9 @@ spec 작성 시점이 아니라 **개발 진행 중에 누적**되는 일지(`sp
|
|
|
542
570
|
|
|
543
571
|
### 8-A. 화면 명세 (가장 흔함)
|
|
544
572
|
|
|
545
|
-
- `ui`
|
|
573
|
+
- `ui` 채움 — 모드에 따라 다르다:
|
|
574
|
+
- **화면 모드**(`screensEnabled=true`): `figmaNodeId`/`file`/`interactionMap`/`screenRefs`/`primaryActions`/`keyInformation` (route·access는 screens에 있다)
|
|
575
|
+
- **레거시**(`screensEnabled` 미설정·false): `figmaNodeId`/`route`/`file`/`access`/`interactionMap` 5필드
|
|
546
576
|
- `logic.dataFlowScenarios` 필수 (화면이 다루는 주요 동작 경로별 시나리오)
|
|
547
577
|
- `points` 화면 하나의 규모 (보통 3~8)
|
|
548
578
|
- `dbTableRefs` 화면이 R/W하는 테이블 전부
|
|
@@ -572,7 +602,10 @@ spec 작성 시점이 아니라 **개발 진행 중에 누적**되는 일지(`sp
|
|
|
572
602
|
| `points` (Story Point) | 13+ | sprint 1회로 못 끝남 → spec 분리 |
|
|
573
603
|
| `logic.dataFlowScenarios` 시나리오 수 | 6+ | 화면/기능이 다중일 가능성 → 분리 |
|
|
574
604
|
| `ui.interactionMap` 줄 수 | 80+ | 화면이 너무 큼 → 분리 |
|
|
575
|
-
|
|
|
605
|
+
| 한 spec이 서로 다른 화면 3개 이상에 걸침 | 기능이 너무 넓다 | 분리 검토 |
|
|
606
|
+
|
|
607
|
+
> 화면 모드에서 **한 화면에 spec 여러 개가 붙는 것은 정상**이다(N:1 — §4-5). 화면이 여러 개라고 무조건 쪼개지 않는다.
|
|
608
|
+
> 레거시 프로젝트(route 방식)에서는 종전 규칙(**1 화면 = 1 spec**)이 그대로 유효하다.
|
|
576
609
|
|
|
577
610
|
---
|
|
578
611
|
|
|
@@ -580,7 +613,9 @@ spec 작성 시점이 아니라 **개발 진행 중에 누적**되는 일지(`sp
|
|
|
580
613
|
|
|
581
614
|
- `--ui/--logic` JSON 통째 교체 → 일부 수정도 **반드시 get 후 편집**. (`--points`는 스칼라라 안전.)
|
|
582
615
|
- `dbTableRefs`를 손으로 JSON에 넣어도 서버가 무시 (CLI `--db-tables` 또는 웹 picker만 사용).
|
|
583
|
-
- **`ui.screenRefs`를 `--ui`로 바꾸려 하기** — 수정 경로에서는 서버가 무시한다. 화면 연결은 전용 경로(웹 화면 피커)로만 바꾼다(§4-5). 생성 때는 넣어도 된다.
|
|
616
|
+
- **`ui.screenRefs`를 `--ui`로 바꾸려 하기** — 수정 경로에서는 서버가 무시한다. **에러가 안 나서 성공한 줄 안다.** 화면 연결은 전용 경로(웹 화면 피커)로만 바꾼다(§4-5). 생성 때는 넣어도 된다.
|
|
617
|
+
- **신규 프로젝트 spec에 `ui.route`를 적기** — 기능과 화면이 1:1로 못박히고 screens가 껍데기가 된다. route의 SSOT는 `screens.route`다(§4-5).
|
|
618
|
+
- **화면을 spec 수만큼 만들기** — route와 다를 게 없다. 같은 사용자 맥락의 기능들을 한 화면으로 묶어라(§4-5).
|
|
584
619
|
- **Story를 Task로 쪼개려 하지 말 것.** 규모는 spec 단위 `--points`로 매기고, 너무 크면 spec 자체를 나눈다(§9).
|
|
585
620
|
- 시간축 진행 메모는 workStatus(별도 스킬)에 적는다.
|
|
586
621
|
- `tasks`는 deprecated. `--tasks`는 하위호환으로만 통과된다(사용 시 경고).
|
|
@@ -595,11 +630,13 @@ spec 작성 시점이 아니라 **개발 진행 중에 누적**되는 일지(`sp
|
|
|
595
630
|
|
|
596
631
|
1. `ch specs meta --json` → 스키마 옵션 확인
|
|
597
632
|
2. 화면이 사용하는 테이블 정리 → 없으면 `ch db-tables create` 먼저
|
|
633
|
+
2.5. **이 명세가 붙을 화면 확인** — `ch screens list --json`. 없으면 `ch screens create`를 **먼저** 한다 (§4-5). 화면 연결은 spec 생성 때만 실린다
|
|
598
634
|
3. **Spec ID 결정** (§1.5) — JIRA 스타일(`EPIC-NNN`) 사용 시 다음 번호 결정. 자동 ID로 가도 됨
|
|
599
635
|
4. `points`(Story Point) 산정 — Story 하나의 규모 (§3, 보통 3~8)
|
|
600
|
-
5. `ui.json` 작성 (figmaNodeId/
|
|
636
|
+
5. `ui.json` 작성 (figmaNodeId/file/interactionMap/screenRefs/primaryActions/keyInformation — **화면 모드는 route 없음**. 레거시는 route/access 포함 — §4-1)
|
|
601
637
|
6. `logic.json` 작성 (dataFlowScenarios 필수 — 시나리오→단계→refs, 나머지 해당 시)
|
|
602
638
|
7. `ch specs create [--id LOGIN-001] --name ... --epic ... --points 5 --ui ... --logic ... --db-tables tbl_a,tbl_b`
|
|
639
|
+
- `ui.json`의 `screenRefs`가 이때 함께 실린다. **생성 이후에는 `--ui`로 못 바꾼다**(§4-5)
|
|
603
640
|
8. `ch specs get <id> --json`으로 결과 검증
|
|
604
641
|
9. SQA 항목은 [[2t-decencia-channel-sqa-v2]]에 따라 별도 등록
|
|
605
642
|
10. 개발 착수 후의 진행 일지는 [[2t-decencia-channel-work-status-v2]]에서 관리
|
|
@@ -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.
|
|
5
|
+
version: 1.16.0
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- ch-version-gate -->
|