@decencia/ch-cli 1.3.4 → 1.4.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/dist/commands/backup.d.ts +6 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +200 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +189 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/setup-skill.d.ts.map +1 -1
- package/dist/commands/setup-skill.js +47 -10
- package/dist/commands/setup-skill.js.map +1 -1
- package/dist/commands/specs.d.ts.map +1 -1
- package/dist/commands/specs.js +3 -0
- package/dist/commands/specs.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/skill-meta.d.ts +2 -0
- package/dist/skill-meta.d.ts.map +1 -0
- package/dist/skill-meta.js +15 -0
- package/dist/skill-meta.js.map +1 -0
- package/package.json +3 -2
- package/skill/2t-decencia-channel-change-manager/SKILL.md +73 -0
- package/skill/2t-decencia-channel-change-propagation-v2/SKILL.md +401 -0
- package/skill/2t-decencia-channel-cli-v2/SKILL.md +194 -0
- package/skill/2t-decencia-channel-db-schema-v2/SKILL.md +313 -0
- package/skill/2t-decencia-channel-github-issue/SKILL.md +116 -0
- package/skill/2t-decencia-channel-orchestrator/SKILL.md +64 -0
- package/skill/2t-decencia-channel-prd-v2/SKILL.md +73 -0
- package/skill/2t-decencia-channel-project-bootstrap/SKILL.md +68 -0
- package/skill/2t-decencia-channel-spec-v2/SKILL.md +463 -0
- package/skill/2t-decencia-channel-sprint-builder-v2/SKILL.md +77 -0
- package/skill/2t-decencia-channel-sqa-v2/SKILL.md +422 -0
- package/skill/2t-decencia-channel-work-status-v2/SKILL.md +189 -0
- package/dist/commands/invitations.d.ts +0 -3
- package/dist/commands/invitations.d.ts.map +0 -1
- package/dist/commands/invitations.js +0 -48
- package/dist/commands/invitations.js.map +0 -1
- package/skill/SKILL.md +0 -500
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,2CAA6B;AAC7B,uCAAyB;AAEzB,0CAAsD;AACtD,0CAAsD;AACtD,kDAA8D;AAC9D,4CAAwD;AACxD,gDAA4D;AAC5D,wCAAoD;AACpD,wCAAoD;AACpD,kDAA8D;AAC9D,gDAA4D;AAC5D,sDAAiE;AACjE,wCAAoD;AACpD,oDAA+D;AAC/D,oDAA+D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,2CAA6B;AAC7B,uCAAyB;AAEzB,0CAAsD;AACtD,0CAAsD;AACtD,kDAA8D;AAC9D,4CAAwD;AACxD,gDAA4D;AAC5D,wCAAoD;AACpD,wCAAoD;AACpD,kDAA8D;AAC9D,gDAA4D;AAC5D,sDAAiE;AACjE,wCAAoD;AACpD,oDAA+D;AAC/D,oDAA+D;AAC/D,8CAA0D;AAE1D,4DAAwE;AACxE,oDAAgE;AAChE,wDAAmE;AACnE,4CAAwD;AAExD,iCAAiC;AACjC,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC;KAC/C,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC;KAChC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC;KACtC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;KAC9B,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;KAChD,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC;KAC/B,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC;KACnC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAEtC,+BAA+B;AAC/B,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,wBAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,wBAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,qCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,wBAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,mCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,mCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAE/B,IAAA,4CAA4B,EAAC,OAAO,CAAC,CAAC;AACtC,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;AAClC,IAAA,uCAAyB,EAAC,OAAO,CAAC,CAAC;AACnC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAE9B,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-meta.d.ts","sourceRoot":"","sources":["../src/skill-meta.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAOrC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEPRECATED_SKILLS = void 0;
|
|
4
|
+
// Skills that were superseded by their *-v2 counterparts. They are NOT bundled
|
|
5
|
+
// with the package; setup-skill removes them and check flags them if present,
|
|
6
|
+
// so agents never load a stale v1 skill.
|
|
7
|
+
exports.DEPRECATED_SKILLS = [
|
|
8
|
+
'2t-decencia-channel-cli',
|
|
9
|
+
'2t-decencia-channel-db-schema',
|
|
10
|
+
'2t-decencia-channel-prd',
|
|
11
|
+
'2t-decencia-channel-spec',
|
|
12
|
+
'2t-decencia-channel-sprint-builder',
|
|
13
|
+
'2t-decencia-channel-sqa',
|
|
14
|
+
];
|
|
15
|
+
//# sourceMappingURL=skill-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-meta.js","sourceRoot":"","sources":["../src/skill-meta.ts"],"names":[],"mappings":";;;AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,yCAAyC;AAC5B,QAAA,iBAAiB,GAAa;IACzC,yBAAyB;IACzB,+BAA+B;IAC/B,yBAAyB;IACzB,0BAA0B;IAC1B,oCAAoC;IACpC,yBAAyB;CAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decencia/ch-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Decencia Communication Channel CLI",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -11,9 +11,10 @@
|
|
|
11
11
|
"skill/"
|
|
12
12
|
],
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "tsc",
|
|
14
|
+
"build": "node scripts/sync-skill-version.js && tsc",
|
|
15
15
|
"dev": "tsc --watch",
|
|
16
16
|
"start": "node dist/index.js",
|
|
17
|
+
"sync-skill-version": "node scripts/sync-skill-version.js",
|
|
17
18
|
"prepublishOnly": "npm run build"
|
|
18
19
|
},
|
|
19
20
|
"keywords": [
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 2t-decencia-channel-change-manager
|
|
3
|
+
description: 기존 소통채널 프로젝트의 기능 추가/수정을 사용자와 대화로 명확화 → 전파 스킬로 연관 PRD/spec/DB/SQA 일괄 갱신 → 변경으로 생긴 새 할일을 GitHub 이슈로 발행하는 오케스트레이터 스킬. (1)대화로 변경 내용 확정 → (2)[게이트] 영향 범위 확인 후 전파 적용 → (3)[게이트] 할일 목록 확인 후 이슈 발행. "이 기능 바꿀래"·"기획 수정"·"이거 추가해줘(기존 프로젝트)" 류 요청 시.
|
|
4
|
+
allowed-tools: Bash(ch:*) Bash(git:*) Bash(gh:*) Read Write
|
|
5
|
+
version: 1.4.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- ch-version-gate -->
|
|
9
|
+
## ⚠️ 시작 전 필수 — 버전 게이트 (생략 금지)
|
|
10
|
+
|
|
11
|
+
이 스킬로 **어떤 작업이든 수행하기 전에 가장 먼저** 아래를 실행한다:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
ch check
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
- exit code 0(통과)이 **아니면 즉시 중단**한다. 출력에 안내된 업데이트 명령(`npm install -g @decencia/ch-cli@latest` 또는 `ch setup-skill`)을 사용자에게 전달하고, 갱신이 끝나기 전까지 **이 스킬의 어떤 단계도 진행하지 않는다.**
|
|
18
|
+
- `ch`가 미설치/미인증이어도 먼저 `ch check`를 시도한다. (네트워크 불가 시 ch check는 통과시키되 경고를 남긴다.)
|
|
19
|
+
|
|
20
|
+
구버전 스킬·CLI 사용을 막기 위한 게이트다. 건너뛰지 말 것.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# 2t-decencia-channel-change-manager — 기존 기획 변경 관리
|
|
24
|
+
|
|
25
|
+
기존 프로젝트의 **기능 추가/수정**을 사용자와 대화로 명확화하고, **연관 문서 전체를 동기화**한 뒤, 변경으로 새로 생긴 **할일을 GitHub 이슈로 발행**한다.
|
|
26
|
+
이 스킬은 **오케스트레이터**다 — 영향 분석·문서 갱신은 `2t-decencia-channel-change-propagation-v2`에, 이슈 발행은 `2t-decencia-channel-github-issue`에 위임하고(중복 작성 금지), 흐름·승인 게이트만 책임진다.
|
|
27
|
+
|
|
28
|
+
> 짝꿍: 신규 세팅은 [[2t-decencia-channel-project-bootstrap]], 변경 관리는 이 스킬. 발행된 이슈는 issue-coder → pr-merger로 흘러간다.
|
|
29
|
+
|
|
30
|
+
## 핵심 원칙
|
|
31
|
+
- **게이트 2개** — 외부 가시·파괴적(기존 문서 수정/외부 이슈) 작업이므로 사용자 확인 후 진행.
|
|
32
|
+
- ① **전파 적용 전**: 무엇이 어떻게 바뀌는지(영향 범위)를 보여주고 승인받는다.
|
|
33
|
+
- ② **이슈 발행 전**: 발행할 이슈 목록을 보여주고 승인받는다.
|
|
34
|
+
- 위임: 전파→`2t-decencia-channel-change-propagation-v2`, 이슈→`2t-decencia-channel-github-issue`, 업로드→`2t-decencia-channel-cli-v2`. (전파 스킬이 내부적으로 spec/db-schema/sqa-v2를 활용)
|
|
35
|
+
|
|
36
|
+
## Use when
|
|
37
|
+
- "이 기능 바꿀 건데 영향 가는 곳 다 고쳐줘", "기획 수정", "기존 프로젝트에 이거 추가해줘", 명세·DB·SQA 정합성이 어긋난 의심이 들 때.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 0. 대상 프로젝트 확정
|
|
42
|
+
- cwd(또는 상위)의 `.ch-project`에서 `projectId` 확보. 없으면 사용자에게 묻는다.
|
|
43
|
+
- 인증 확인: `ch auth status`, (이슈 발행 대비) `gh auth status`. 미인증이면 안내 후 중단.
|
|
44
|
+
|
|
45
|
+
## 1. 변경 내용 명확화 (대화형)
|
|
46
|
+
- 사용자와 **대화로 좁힌다**: **추가(feat) vs 수정(fix)** 구분, 구체적으로 무엇을·왜, 대상 기능/화면/spec.
|
|
47
|
+
- 모호하면 한 번에 단정하지 말고 계속 질문. "현재 X → Y로 바꾼다" 수준까지 또렷하게.
|
|
48
|
+
|
|
49
|
+
## 2. 영향 전파 (게이트 ①)
|
|
50
|
+
*(변경 내용 확정 후)*
|
|
51
|
+
- `2t-decencia-channel-change-propagation-v2`로 **영향 분석**: 이 변경이 닿는 PRD·spec(ui·logic·dbTableRefs·tasks)·db-schema/db-tables·SQA·workStatus를 빠짐없이 식별.
|
|
52
|
+
- → **[게이트] 영향 범위를 사용자에게 제시하고 확인받는다** (어떤 문서가 어떻게 바뀌는지 요약). 승인 전에는 문서를 건드리지 않는다.
|
|
53
|
+
- 승인되면 전파 스킬 절차대로 **연관 문서를 순차 갱신**. `spec.dbTableRefs` ↔ `dbTable.relatedSpecIds` 양방향 동기화 유지.
|
|
54
|
+
|
|
55
|
+
## 3. 할일 → GitHub 이슈 (게이트 ②)
|
|
56
|
+
*(전파 적용 후)*
|
|
57
|
+
- 변경으로 **새로 생기거나 바뀐 할일**을 처리 단위로 정리한다 — 전파가 식별한 처리 항목 + 추가/변경된 `spec.tasks`. (구현이 필요 없는 순수 문서 정합은 이슈로 만들지 않는다)
|
|
58
|
+
- → **[게이트] 발행할 이슈 목록(제목·유형·관련 specid)을 사용자에게 보여주고 확인받는다.** (github-issue 스킬은 멱등성/중복방지를 안 하므로, 여기서 확인이 안전장치)
|
|
59
|
+
- 승인되면 `2t-decencia-channel-github-issue`로 발행: **추가=feat / 수정=fix**, 결함이면 bug. 관련 specid 백링크·완료조건 자동.
|
|
60
|
+
- 발행된 이슈 URL을 모아 보고하고, **issue-coder로 이어진다**고 안내.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 업로드/CLI 주의 (공통)
|
|
65
|
+
- 모든 문서 갱신은 `2t-decencia-channel-cli-v2`(=`ch` CLI) 경유.
|
|
66
|
+
- ⚠️ content는 **마크다운**(HTML 아님) + **CRLF 정제**(`tr -d '\r'`). PowerShell 인자 분리 실패 시 Bash 도구로 우회.
|
|
67
|
+
- spec 필드는 **단수+복수 동시 저장**(device/devices 등) 규칙 유지(미준수 시 웹 빈 칼럼).
|
|
68
|
+
- `ch specs get`/`--json` 조회가 Windows에서 빈 출력이면 PowerShell `Out-File` + forward-slash 경로로 우회.
|
|
69
|
+
- 이슈 본문은 `--body-file`(LF) 사용 — 따옴표/줄바꿈/한글 안전.
|
|
70
|
+
|
|
71
|
+
## 경계
|
|
72
|
+
- **PR·머지·이슈 close는 하지 않는다** — 이슈 발행까지가 이 스킬의 끝(이후는 issue-coder/pr-merger/사람).
|
|
73
|
+
- 두 게이트 모두 사용자 승인 없이는 넘어가지 않는다. 수정 요청이면 해당 단계 반복.
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 2t-decencia-channel-change-propagation-v2
|
|
3
|
+
description: |
|
|
4
|
+
[2t][v2] 소통채널 변경 전파(Change Propagation) 표준 가이드.
|
|
5
|
+
한 기능을 변경할 때 PRD/spec(ui·logic·dbTableRefs·tasks)/db-schema/db-tables/SQA/workStatus까지
|
|
6
|
+
연관된 모든 곳을 빠짐없이 갱신·동기화하기 위한 영향 분석 + 순차 적용 워크플로우.
|
|
7
|
+
Use when:
|
|
8
|
+
(1) 기존 기능을 수정·확장하려고 할 때 (DB 컬럼 추가, 화면 요구사항 변경, 권한 정책 변경 등),
|
|
9
|
+
(2) "이 기능 바꿀 건데 다른 곳에 영향 가는 거 다 찾아줘" 류 요청 시,
|
|
10
|
+
(3) 명세·DB·SQA가 서로 어긋나 있는 의심이 들 때 (정합성 점검),
|
|
11
|
+
(4) PRD 갱신 후 하위 spec/db/SQA로 변경분을 흘려보내야 할 때,
|
|
12
|
+
(5) Sprint 진행 중 도메인 규칙·스키마가 흔들렸을 때 연쇄 갱신이 필요할 때.
|
|
13
|
+
version: 1.4.0
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
<!-- ch-version-gate -->
|
|
17
|
+
## ⚠️ 시작 전 필수 — 버전 게이트 (생략 금지)
|
|
18
|
+
|
|
19
|
+
이 스킬로 **어떤 작업이든 수행하기 전에 가장 먼저** 아래를 실행한다:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
ch check
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- exit code 0(통과)이 **아니면 즉시 중단**한다. 출력에 안내된 업데이트 명령(`npm install -g @decencia/ch-cli@latest` 또는 `ch setup-skill`)을 사용자에게 전달하고, 갱신이 끝나기 전까지 **이 스킬의 어떤 단계도 진행하지 않는다.**
|
|
26
|
+
- `ch`가 미설치/미인증이어도 먼저 `ch check`를 시도한다. (네트워크 불가 시 ch check는 통과시키되 경고를 남긴다.)
|
|
27
|
+
|
|
28
|
+
구버전 스킬·CLI 사용을 막기 위한 게이트다. 건너뛰지 말 것.
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# 변경 전파(Change Propagation) — PRD ↔ spec ↔ DB ↔ SQA 동기화
|
|
32
|
+
|
|
33
|
+
소통채널은 PRD / spec(ui·logic·dbTableRefs·tasks) / db-schema(전체) / db-tables(per-table) / SQA(시트·항목) / workStatus가 서로를 참조한다. 한 곳을 바꾸면 다른 곳도 같이 흔들린다. 이 스킬은 **변경의 진앙(epicenter)을 식별 → 영향 범위를 매트릭스로 산출 → 순차로 안전하게 적용 → 정합성 검증**까지의 표준 절차다.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 0. BLOCKING 원칙
|
|
38
|
+
|
|
39
|
+
1. **Read-before-Write** — 모든 리소스는 현재 상태를 먼저 가져온 뒤 머지 → 쓰기. 직접 덮어쓰기 금지.
|
|
40
|
+
2. **진앙 우선 적용 금지** — 진앙(예: DB 컬럼 추가)을 먼저 적용한 뒤 의존 리소스를 고치는 게 자연스러워 보이지만, **계획부터 먼저 합의**한다. 진앙 + 영향 리소스 전체를 한 PR/한 세션 안에 마무리해야 어긋난 상태로 멈추지 않는다.
|
|
41
|
+
3. **사용자 컨펌 게이트** — §3에서 작성한 영향 매트릭스를 사용자에게 보여주고 동의받은 뒤에야 적용 시작.
|
|
42
|
+
4. **하나라도 실패하면 롤백 가능 상태 유지** — Run에 SQA 결과가 박힌 후라면 시트 항목 변경은 진행 중 Run에 반영되지 않음(2t-decencia-channel-sqa-v2 §3.5 참조). 변경 도중 멈출 거면 어디서 멈췄는지 workStatus에 [BLOCK] 엔트리로 기록.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 1. 리소스 의존성 지도
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
┌──────┐
|
|
50
|
+
│ PRD │ (Epic / 데이터 모델 절 / 화면 절)
|
|
51
|
+
└──┬───┘
|
|
52
|
+
│ Epic·도메인 정의
|
|
53
|
+
┌────────┼─────────────────────────┐
|
|
54
|
+
▼ ▼ ▼
|
|
55
|
+
┌────────┐ ┌─────────────┐ ┌──────────┐
|
|
56
|
+
│ spec │ │ db-schema │ │ Sprint │
|
|
57
|
+
│ (Story)│ │ (전체 문서) │ │ │
|
|
58
|
+
└────┬───┘ └──────┬──────┘ └────┬─────┘
|
|
59
|
+
│ │ 인벤토리/ERD │
|
|
60
|
+
│ ▼ │
|
|
61
|
+
│ ┌──────────┐ │
|
|
62
|
+
│ │db-tables │ │
|
|
63
|
+
│ │(per-table)│ │
|
|
64
|
+
│ └──────────┘ │
|
|
65
|
+
│ ▲ │
|
|
66
|
+
│ │ dbTableRefs 양방향 │
|
|
67
|
+
│ └───────────────┐ │
|
|
68
|
+
▼ ▼ │
|
|
69
|
+
┌───────────────────────┐ │
|
|
70
|
+
│ SQA (시트.items[]) │◀─────────────┘
|
|
71
|
+
│ relatedSpec=specId │
|
|
72
|
+
└───────────────────────┘
|
|
73
|
+
│
|
|
74
|
+
▼
|
|
75
|
+
┌──────────────┐
|
|
76
|
+
│ spec.workStatus (개발 일지) │
|
|
77
|
+
└──────────────┘
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
| 리소스 | 외부로 노출하는 참조 | 외부에서 참조받는 키 |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| PRD | Epic 명, spec 제목, 테이블명 텍스트 | (텍스트만 — 자동 링크 없음) |
|
|
83
|
+
| spec | `epic`, `dbTableRefs[]` | `relatedSpec` (SQA), spec.dbTableRefs ↔ table.relatedSpecIds |
|
|
84
|
+
| db-schema (전체) | 테이블 인벤토리 (텍스트) | (텍스트만) |
|
|
85
|
+
| db-tables (per) | `relatedSpecIds[]` | 다른 테이블의 FK 주석 |
|
|
86
|
+
| SQA 항목 | `relatedSpec` | — |
|
|
87
|
+
| spec.workStatus | (자유 텍스트) | — |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 2. 변경 진앙 분류
|
|
92
|
+
|
|
93
|
+
먼저 사용자가 바꾸려는 게 **무엇**인지 분류한다. 진앙이 달라지면 전파 경로가 달라진다.
|
|
94
|
+
|
|
95
|
+
| # | 진앙 (변경 시작점) | 1차 영향 | 2차 영향 |
|
|
96
|
+
|---|---|---|---|
|
|
97
|
+
| A | **DB 컬럼/인덱스/securityRules** 변경 | `db-tables/<id>` | db-schema 전체(인벤토리/ERD), 해당 테이블 참조 spec(logic), SQA(데이터 검증 TC), PRD 데이터 모델 절 |
|
|
98
|
+
| B | **새 테이블 추가/삭제** | `db-tables` 신규/삭제 | db-schema 인벤토리·ERD, 영향 spec.dbTableRefs, SQA(신규 검증 TC), PRD 데이터 모델 |
|
|
99
|
+
| C | **spec 의 UI 요구사항** 변경 | `spec.ui` | 같은 화면 참조하는 다른 spec, SQA(UI 검증 TC), PRD 화면 절 |
|
|
100
|
+
| D | **spec 의 비즈니스 규칙(logic)** 변경 | `spec.logic` | 의존 spec, SQA(정상/비정상 TC), db-tables(검증 규칙·trigger), PRD 도메인 규칙 절 |
|
|
101
|
+
| E | **권한/역할 정책** 변경 | 영향 spec.logic, db-tables.securityRules | 모든 영향 spec의 SQA(접근권한 TC), db-schema 보안 일관성 절, PRD 권한 절 |
|
|
102
|
+
| F | **Task 분해 또는 points 변경** | `spec.tasks` | Sprint 용량 산정, workStatus |
|
|
103
|
+
| G | **Epic 명/범위 변경** | `spec.epic`, PRD Epic 절 | 모든 같은 Epic 산하 spec 재태깅, Sprint 묶음 |
|
|
104
|
+
| H | **PRD 본문 변경** | `prd` | 그 PRD에서 파생된 spec, db-schema, SQA 시트 — **전수 리뷰 트리거** |
|
|
105
|
+
|
|
106
|
+
사용자 발화 → 진앙 매핑 예시:
|
|
107
|
+
- "users 테이블에 last_login_at 추가" → **A**
|
|
108
|
+
- "회원 등급에 VIP 추가, 권한도 더 줘야 함" → **E** (+ D)
|
|
109
|
+
- "로그인 화면에 SNS 로그인 버튼 추가" → **C** (+ E if 권한)
|
|
110
|
+
- "이 spec 잘게 쪼개고 싶음" → **F**
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 3. 영향 분석 (Impact Map)
|
|
115
|
+
|
|
116
|
+
진앙이 정해지면 CLI로 의존성을 실측한다. 추측 금지.
|
|
117
|
+
|
|
118
|
+
### 3.1 공통 사전 조회 (현재 상태 스냅샷)
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# 모든 spec과 dbTableRefs/relatedSpecIds
|
|
122
|
+
ch specs list --json --per-page 200 > /tmp/specs.json
|
|
123
|
+
|
|
124
|
+
# 모든 db-table
|
|
125
|
+
ch db-tables list --json > /tmp/tables.json
|
|
126
|
+
|
|
127
|
+
# 모든 SQA 시트
|
|
128
|
+
ch sqa list --json > /tmp/sheets.json
|
|
129
|
+
|
|
130
|
+
# (필요 시) PRD content
|
|
131
|
+
ch prd get --json > /tmp/prd.json
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 3.2 진앙별 영향 쿼리
|
|
135
|
+
|
|
136
|
+
#### A·B (DB 변경) — 이 테이블을 참조하는 spec/시트 찾기
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
TABLE_ID="<targetTableId>"
|
|
140
|
+
|
|
141
|
+
# 이 테이블을 dbTableRefs에 가진 spec
|
|
142
|
+
jq -r --arg t "$TABLE_ID" '.data[] | select(.dbTableRefs[]? == $t) | .id + "\t" + .title' /tmp/specs.json
|
|
143
|
+
|
|
144
|
+
# 위 spec들에 연결된 SQA 항목 (시트별로)
|
|
145
|
+
SPEC_IDS=$(jq -r --arg t "$TABLE_ID" '.data[] | select(.dbTableRefs[]? == $t) | .id' /tmp/specs.json)
|
|
146
|
+
for SHEET in $(jq -r '.data[].id' /tmp/sheets.json); do
|
|
147
|
+
ch sqa get "$SHEET" --json | jq -r --argjson s "$(echo $SPEC_IDS | jq -R 'split(" ")')" \
|
|
148
|
+
'.items[] | select(.relatedSpec as $r | $s | index($r)) | "[" + "'$SHEET'" + "] " + .id + "\t" + .testItem'
|
|
149
|
+
done
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
#### C·D (spec 변경) — 이 spec과 같은 화면·테이블·Epic 묶음 spec 찾기
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
SPEC_ID="<targetSpecId>"
|
|
156
|
+
SPEC_JSON=$(ch specs get "$SPEC_ID" --json)
|
|
157
|
+
|
|
158
|
+
# 같은 Epic
|
|
159
|
+
EPIC=$(echo "$SPEC_JSON" | jq -r '.epic')
|
|
160
|
+
jq -r --arg e "$EPIC" '.data[] | select(.epic == $e) | .id + "\t" + .title' /tmp/specs.json
|
|
161
|
+
|
|
162
|
+
# 같은 dbTable을 공유하는 spec
|
|
163
|
+
TABLES=$(echo "$SPEC_JSON" | jq -r '.dbTableRefs[]?')
|
|
164
|
+
for T in $TABLES; do
|
|
165
|
+
jq -r --arg t "$T" '.data[] | select(.dbTableRefs[]? == $t) | .id + "\t" + .title' /tmp/specs.json
|
|
166
|
+
done
|
|
167
|
+
|
|
168
|
+
# 이 spec과 연결된 SQA 항목
|
|
169
|
+
for SHEET in $(jq -r '.data[].id' /tmp/sheets.json); do
|
|
170
|
+
ch sqa get "$SHEET" --json | jq -r --arg s "$SPEC_ID" '.items[] | select(.relatedSpec == $s) | "[" + "'$SHEET'" + "] " + .id + "\t" + .testItem'
|
|
171
|
+
done
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
#### E (권한/역할) — 모든 spec.logic + 모든 table.securityRules 검색
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
ROLE="<예: VIP>"
|
|
178
|
+
# logic 내 텍스트 검색 (단순 grep)
|
|
179
|
+
jq -r --arg r "$ROLE" '.data[] | select((.logic // "") | tostring | contains($r)) | .id + "\t" + .title' /tmp/specs.json
|
|
180
|
+
jq -r --arg r "$ROLE" '.data[] | select((.securityRules // {}) | tostring | contains($r)) | .id + "\t" + .name' /tmp/tables.json
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
#### G (Epic 변경) — 같은 Epic 산하 모든 spec
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
OLD_EPIC="..."
|
|
187
|
+
jq -r --arg e "$OLD_EPIC" '.data[] | select(.epic == $e) | .id + "\t" + .title' /tmp/specs.json
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
#### H (PRD 전체 변경) — 전수 리뷰
|
|
191
|
+
|
|
192
|
+
PRD에서 변경된 절(예: "권한 모델")을 식별 → 모든 spec/db-table에 동일 키워드 grep → 변경 영향 후보 도출. 자동화 한계 있음, 사람이 리뷰 필요.
|
|
193
|
+
|
|
194
|
+
### 3.3 영향 매트릭스 산출
|
|
195
|
+
|
|
196
|
+
위 쿼리 결과를 **표 한 장**으로 정리해 사용자에게 제시. 형식 예:
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
변경 진앙: A (db-tables/users 컬럼 last_login_at 추가)
|
|
200
|
+
|
|
201
|
+
영향 받는 리소스:
|
|
202
|
+
| 리소스 | id | 변경 내용 | 우선순위 |
|
|
203
|
+
|--------------|-------------------|------------------------------------------------|---------|
|
|
204
|
+
| db-tables | users | last_login_at(timestamp, nullable) 추가 | (진앙) |
|
|
205
|
+
| db-schema | (전체) | 테이블 인벤토리 — users 컬럼 목록 갱신 | High |
|
|
206
|
+
| spec | spec-login | logic: "로그인 성공 시 last_login_at 업데이트" | High |
|
|
207
|
+
| spec | spec-user-list | ui: 마지막 로그인 컬럼 추가 | Medium |
|
|
208
|
+
| SQA 항목 | sheet-S1.item-12 | "로그인 후 last_login_at 갱신 확인" 신규 추가 | High |
|
|
209
|
+
| SQA 항목 | sheet-S1.item-13 | "사용자 목록에 마지막 로그인 컬럼 표시" 신규 추가 | Medium |
|
|
210
|
+
| PRD | (전체) | "5. 데이터 모델 > users" 컬럼 목록 갱신 | Medium |
|
|
211
|
+
|
|
212
|
+
총 7개 리소스 변경 예정. 진행할까요?
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**사용자 OK 받기 전까지는 어떤 리소스도 수정하지 않는다.**
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 4. 적용 순서 (Dependency-Aware Apply)
|
|
220
|
+
|
|
221
|
+
영향 매트릭스 컨펌 후 다음 순서로 적용 (의존성 위→아래).
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
1) db-tables(진앙이면) ← 데이터 모델 변경의 최저층
|
|
225
|
+
2) db-schema 전체 문서 (인벤토리/ERD) ← 1) 반영
|
|
226
|
+
3) spec (logic/ui/dbTableRefs/tasks) ← 1·2) 반영
|
|
227
|
+
4) SQA 시트 항목 ← 3) 의 변경된 동작을 검증
|
|
228
|
+
5) PRD ← 마지막. 전체 narrative 정리
|
|
229
|
+
6) workStatus ← 각 spec에 "전파 작업 완료" 1줄 추가
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
이유:
|
|
233
|
+
- DB는 모든 위의 진실이라 먼저 확정
|
|
234
|
+
- spec은 DB를 참조하므로 DB 다음
|
|
235
|
+
- SQA는 spec의 행동을 검증하므로 spec 다음
|
|
236
|
+
- PRD는 narrative라 마지막에 정리하는 게 효율적 (중간에 자주 바꾸면 일관성 깨짐)
|
|
237
|
+
|
|
238
|
+
### 진앙별 변형
|
|
239
|
+
- **C (UI만 변경)**: 1·2 스킵하고 3 → 4 → 5 → 6
|
|
240
|
+
- **E (권한)**: 1(securityRules) + 3(logic) 거의 동시 → 2 → 4 → 5 → 6
|
|
241
|
+
- **G (Epic 변경)**: 3(spec.epic 재태깅) → 5(PRD Epic 절) → 6
|
|
242
|
+
- **H (PRD 변경)**: 5(PRD) → 영향 재조사 → 1~4 순차 → 6
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 5. 적용 명령 모음
|
|
247
|
+
|
|
248
|
+
각 단계의 핵심 CLI. 자세한 사용법은 각 v2 스킬 참조.
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# 1) db-tables — [[2t-decencia-channel-db-schema-v2]]
|
|
252
|
+
ch db-tables get <tableId> --json > /tmp/t.json # Read
|
|
253
|
+
# … 편집 …
|
|
254
|
+
ch db-tables update <tableId> --file /tmp/t.json --no-version
|
|
255
|
+
|
|
256
|
+
# 2) db-schema (전체)
|
|
257
|
+
ch db-schema get --json | jq -r '.content' > /tmp/dbschema.md
|
|
258
|
+
# … 편집 (테이블 인벤토리 / ERD / 마이그레이션 노트) …
|
|
259
|
+
ch db-schema set --file /tmp/dbschema.md --no-version
|
|
260
|
+
|
|
261
|
+
# 3) spec — [[2t-decencia-channel-spec-v2]]
|
|
262
|
+
ch specs get <specId> --json > /tmp/s.json
|
|
263
|
+
# … 편집 (ui/logic/dbTableRefs/tasks) …
|
|
264
|
+
ch specs update <specId> --file /tmp/s.json --no-version
|
|
265
|
+
|
|
266
|
+
# 4) SQA 시트 항목 — [[2t-decencia-channel-sqa-v2]] §3.5
|
|
267
|
+
ch sqa get <sheetId> --json | jq '.items' > /tmp/items.json
|
|
268
|
+
ch sqa add-items <sheetId> --file /tmp/new-items.json # 신규
|
|
269
|
+
ch sqa update-item <sheetId> <itemId> --test "..." --spec <specId>
|
|
270
|
+
ch sqa delete-item <sheetId> <itemId> # 불필요해진 항목
|
|
271
|
+
|
|
272
|
+
# 5) PRD — [[2t-decencia-channel-prd-v2]]
|
|
273
|
+
ch prd get --json | jq -r '.content' > /tmp/prd.md
|
|
274
|
+
# … 편집 …
|
|
275
|
+
ch prd set --file /tmp/prd.md --no-version
|
|
276
|
+
|
|
277
|
+
# 6) workStatus — [[2t-decencia-channel-work-status-v2]]
|
|
278
|
+
# 각 영향받은 spec에 한 줄씩 추가
|
|
279
|
+
ch specs get <specId> --json | jq -r '.workStatus // ""' > /tmp/ws.md
|
|
280
|
+
# 상단에 "[PROPAGATE] YYYY-MM-DD: <진앙 요약>으로 인한 본 spec 갱신" 추가
|
|
281
|
+
ch specs update <specId> --work-status /tmp/ws.md --no-version
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
> Windows CRLF 주의: 모든 파일 입력 시 `tr -d '\r'` 또는 heredoc 사용. (자동 메모리: `b8d6c270`)
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## 6. 적용 후 정합성 검증
|
|
289
|
+
|
|
290
|
+
전파 끝난 뒤 다음 체크를 모두 통과해야 종료.
|
|
291
|
+
|
|
292
|
+
### 6.1 spec ↔ db-table 양방향 일치
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
ch specs list --json --per-page 200 | jq -r '.data[] | "spec\t" + .id + "\t" + ((.dbTableRefs // []) | join(","))' > /tmp/spec_refs.tsv
|
|
296
|
+
ch db-tables list --json | jq -r '.data[] | "table\t" + .id + "\t" + ((.relatedSpecIds // []) | join(","))' > /tmp/table_refs.tsv
|
|
297
|
+
|
|
298
|
+
# spec.dbTableRefs에는 있는데 table.relatedSpecIds에 누락된 경우 → 불일치
|
|
299
|
+
# 양쪽 비교 스크립트는 변경 진행 코드(ba29ae1 양방향 sync) 기준으로 보통 자동 동기화되나, 수동 수정 직후엔 확인 필요
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### 6.2 SQA 항목 커버리지
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
# 변경된 spec들이 SQA에 모두 연결되어 있는지 확인 — [[2t-decencia-channel-sqa-v2]] §4.5
|
|
306
|
+
# 누락된 spec 있으면 SQA 항목 추가 누락이므로 §4로 복귀
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### 6.3 PRD 텍스트 정합 (수동 grep)
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
# 변경 키워드 (예: "last_login_at") 가 PRD에도 등장하는지
|
|
313
|
+
ch prd get --json | jq -r '.content' | grep -n "last_login_at"
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### 6.4 자가 점검 체크리스트
|
|
317
|
+
|
|
318
|
+
- [ ] §3 영향 매트릭스를 작성하고 사용자 컨펌을 받았는가?
|
|
319
|
+
- [ ] §4 적용 순서를 지켰는가? (DB → schema → spec → SQA → PRD → workStatus)
|
|
320
|
+
- [ ] spec.dbTableRefs ↔ db-table.relatedSpecIds 양방향 일치?
|
|
321
|
+
- [ ] 변경된 모든 spec에 SQA 항목이 갱신·신규 추가됐는가?
|
|
322
|
+
- [ ] 불필요해진 SQA 항목이 남아 있지 않은가? (delete-item)
|
|
323
|
+
- [ ] PRD 데이터 모델/권한 절이 새 상태를 반영하는가?
|
|
324
|
+
- [ ] 영향 spec들의 workStatus에 [PROPAGATE] 엔트리 1줄씩 남겼는가?
|
|
325
|
+
- [ ] 진행 중 Run이 있다면 — Run은 시트 항목 변경에 소급 적용되지 않으니 별도로 사용자에게 보고했는가?
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## 7. 흔한 함정
|
|
330
|
+
|
|
331
|
+
- **진앙만 바꾸고 끝낸다** — DB만 추가하고 spec/SQA를 갱신 안 함. 이게 모든 어긋남의 출발점.
|
|
332
|
+
- **PRD를 먼저 바꾸고 spec/DB를 안 따라간다** — PRD가 최신, 코드/스펙이 옛 상태로 분기.
|
|
333
|
+
- **SQA를 신규 추가만 하고 기존 항목 삭제를 안 한다** — 사라진 동작을 검증하는 좀비 TC가 영원히 남음.
|
|
334
|
+
- **진행 중 Run이 있는 상태에서 시트 항목 변경** — Run에 소급 안 됨. Run 끝낸 뒤 변경하거나, Run에는 수동으로 결과를 메모.
|
|
335
|
+
- **양방향 ref를 한쪽만 수동 갱신** — 보통 API가 양방향 sync 하지만, 직접 Firestore 조작이나 임시 수정 시 한쪽만 바꾸면 어긋남.
|
|
336
|
+
- **변경 진앙을 한 번에 여러 개 잡아서 매트릭스가 폭발** — 가능하면 한 세션 = 한 진앙. 진앙이 여러 개면 각각을 별도 PR로 쪼개길 권장.
|
|
337
|
+
- **CRLF 오염** — 파일 기반 입력 시 spec/sheet 참조 ID 끝에 `\r`이 붙어 링크 깨짐. 항상 정제.
|
|
338
|
+
- **workStatus 누락** — 누가 왜 바꿨는지 흔적이 없어, 두 sprint 뒤 또 누군가 같은 의사결정을 반복.
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## 8. 진앙별 빠른 참고 카드
|
|
343
|
+
|
|
344
|
+
### A: DB 컬럼 추가
|
|
345
|
+
```
|
|
346
|
+
1) ch db-tables update <id> (컬럼 추가)
|
|
347
|
+
2) ch db-schema set (인벤토리 갱신)
|
|
348
|
+
3) 영향 spec.logic + ui 갱신
|
|
349
|
+
4) SQA 시트 — 신규 검증 항목 add-items
|
|
350
|
+
5) PRD 데이터 모델 절
|
|
351
|
+
6) workStatus
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### C: 화면 요구사항 변경
|
|
355
|
+
```
|
|
356
|
+
1) (DB 변경 없음 → 스킵)
|
|
357
|
+
2) (스킵)
|
|
358
|
+
3) ch specs update <id> — ui 갱신
|
|
359
|
+
4) SQA — UI 검증 TC update-item/add-items
|
|
360
|
+
5) PRD 화면 절
|
|
361
|
+
6) workStatus
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### E: 권한 정책 변경
|
|
365
|
+
```
|
|
366
|
+
1) ch db-tables update — securityRules
|
|
367
|
+
2) ch db-schema set — 보안 일관성 절
|
|
368
|
+
3) ch specs update — 영향 spec.logic 권한 분기
|
|
369
|
+
4) SQA — 접근권한 TC 일괄 update/add (영향 spec 전수)
|
|
370
|
+
5) PRD 권한 절
|
|
371
|
+
6) workStatus — [DECISION] 권한 정책 변경 사유 기록
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### G: Epic 명/범위 변경
|
|
375
|
+
```
|
|
376
|
+
1) (DB 변경 없음 → 스킵)
|
|
377
|
+
2) (스킵)
|
|
378
|
+
3) ch specs update — 영향 spec.epic 일괄 재태깅
|
|
379
|
+
(스크립트: for s in $(jq -r ... ); do ch specs update $s --epic <new>; done)
|
|
380
|
+
4) (SQA는 대개 무영향. Epic 단위 필터링하는 사용처가 있다면 시트 분리 검토)
|
|
381
|
+
5) PRD Epic 절
|
|
382
|
+
6) Sprint — Epic 단위 묶음 사용 중이라면 sprint 재구성 검토
|
|
383
|
+
7) workStatus
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## 9. 다른 v2 스킬과의 분담
|
|
389
|
+
|
|
390
|
+
| 작업 | 이 스킬의 역할 | 위임할 스킬 |
|
|
391
|
+
|---|---|---|
|
|
392
|
+
| 무엇을 어디에 적용할지 결정 | **이 스킬** (영향 분석·매트릭스) | — |
|
|
393
|
+
| 실제 spec 필드 편집 패턴 | 위임 | [[2t-decencia-channel-spec-v2]] |
|
|
394
|
+
| db-tables JSON 구조 | 위임 | [[2t-decencia-channel-db-schema-v2]] |
|
|
395
|
+
| SQA 시트 항목 CRUD | 위임 | [[2t-decencia-channel-sqa-v2]] §3.5 |
|
|
396
|
+
| PRD 작성 패턴 | 위임 | [[2t-decencia-channel-prd-v2]] |
|
|
397
|
+
| Sprint 재구성 | 위임 | [[2t-decencia-channel-sprint-builder-v2]] |
|
|
398
|
+
| workStatus 기록 형식 | 위임 | [[2t-decencia-channel-work-status-v2]] |
|
|
399
|
+
| CLI 명령 옵션 상세 | 위임 | [[2t-decencia-channel-cli-v2]] |
|
|
400
|
+
|
|
401
|
+
→ 이 스킬은 **오케스트레이터**. 어떤 리소스를 어떤 순서로 건드릴지 결정하고, 실제 편집은 각 리소스 전용 스킬에 위임.
|