@simplysm/sd-claude 14.0.77 → 14.0.79
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/claude/output-styles/sd-tone.md +26 -2
- package/claude/references/sd-simplysm14/manuals/logging.md +1 -1
- package/claude/rules/sd-base-rules.md +109 -90
- package/claude/skills/sd-dev/SKILL.md +1 -1
- package/claude/skills/sd-impl/SKILL.md +15 -14
- package/claude/skills/sd-impl/references/spec-cross-check.md +2 -2
- package/claude/skills/sd-spec/SKILL.md +746 -192
- package/claude/skills/sd-spec/references/example-spec.md +107 -35
- package/claude/skills/sd-unpack/SKILL.md +39 -14
- package/claude/skills/sd-unpack/scripts/handlers/__pycache__/_common.cpython-314.pyc +0 -0
- package/claude/skills/sd-unpack/scripts/handlers/__pycache__/eml_handler.cpython-314.pyc +0 -0
- package/claude/skills/sd-unpack/scripts/handlers/__pycache__/office_com.cpython-314.pyc +0 -0
- package/claude/skills/sd-unpack/scripts/handlers/__pycache__/pdf_handler.cpython-314.pyc +0 -0
- package/claude/skills/sd-unpack/scripts/handlers/_common.py +59 -0
- package/claude/skills/sd-unpack/scripts/handlers/eml_handler.py +7 -0
- package/claude/skills/sd-unpack/scripts/handlers/msg_handler.py +11 -0
- package/claude/skills/sd-unpack/scripts/handlers/office_com.py +288 -79
- package/claude/skills/sd-unpack/scripts/handlers/office_worker.py +3 -2
- package/claude/skills/sd-unpack/scripts/handlers/pdf_handler.py +78 -10
- package/package.json +1 -1
- package/claude/skills/sd-spec/references/spec-authoring.md +0 -298
- package/claude/skills/sd-spec/references/spec-md-template.md +0 -29
- package/claude/skills/sd-wip/SKILL.md +0 -38
- package/claude/skills/sd-wip/evals/fixtures/empty/.gitkeep +0 -0
- package/claude/skills/sd-wip/evals/fixtures/with-artifact/projects/acct/_wip.md +0 -3
- package/claude/skills/sd-wip/evals/fixtures/with-artifact/projects/acct/spec.md +0 -15
- package/claude/skills/sd-wip/evals/fixtures/with-existing-wip/.wips/260101120000_acct.md +0 -6
- package/claude/skills/sd-wip/evals/fixtures/with-existing-wip-for-compact/.wips/260101120000_acct.md +0 -14
- package/claude/skills/sd-wip/evals/golden.jsonl +0 -4
- package/claude/skills/sd-wip/references/compact.md +0 -79
|
@@ -36,6 +36,10 @@ def run(input_path: Path, out_dir: Path) -> None:
|
|
|
36
36
|
]
|
|
37
37
|
if counts["tables"]:
|
|
38
38
|
parts.append(f"tables {counts['tables']} (cells {counts['table_cells']})")
|
|
39
|
+
if counts["form_fields"]:
|
|
40
|
+
parts.append(f"form_fields {counts['form_fields']}")
|
|
41
|
+
if counts["annotations"]:
|
|
42
|
+
parts.append(f"annotations {counts['annotations']}")
|
|
39
43
|
page_summaries.append(" — ".join([parts[0], ", ".join(parts[1:])]))
|
|
40
44
|
|
|
41
45
|
# 임베드된 첨부 (embedded files)
|
|
@@ -82,8 +86,17 @@ def _pdf_page_to_jsonl(
|
|
|
82
86
|
추출:
|
|
83
87
|
1. get_text("dict") 의 모든 블록 (text_block·image_block) — 표 영역 겹쳐도 그대로 보존
|
|
84
88
|
2. find_tables() 로 표 셀 단위 노드 추가 (블록과 중복 가능, Claude 가 양쪽 비교 판단)
|
|
89
|
+
3. page.widgets() 로 form field 노드 (양식 입력란)
|
|
90
|
+
4. page.annots() 로 annotation 노드 (주석·highlight·sticky note)
|
|
85
91
|
"""
|
|
86
|
-
counts = {
|
|
92
|
+
counts = {
|
|
93
|
+
"text_blocks": 0,
|
|
94
|
+
"image_blocks": 0,
|
|
95
|
+
"tables": 0,
|
|
96
|
+
"table_cells": 0,
|
|
97
|
+
"form_fields": 0,
|
|
98
|
+
"annotations": 0,
|
|
99
|
+
}
|
|
87
100
|
|
|
88
101
|
# 블록 추출 (모든 블록 보존)
|
|
89
102
|
page_dict = page.get_text("dict")
|
|
@@ -100,16 +113,13 @@ def _pdf_page_to_jsonl(
|
|
|
100
113
|
for line in blk.get("lines", []):
|
|
101
114
|
spans = line.get("spans", [])
|
|
102
115
|
line_text = "".join(span.get("text", "") for span in spans)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
text = "\n".join(text_lines).strip()
|
|
106
|
-
if not text:
|
|
107
|
-
continue
|
|
116
|
+
text_lines.append(line_text)
|
|
117
|
+
text = "\n".join(text_lines)
|
|
108
118
|
node_lines.append({
|
|
109
119
|
"page": page_num,
|
|
110
120
|
"block": block_idx,
|
|
111
121
|
"type": "text_block",
|
|
112
|
-
"bbox":
|
|
122
|
+
"bbox": list(bbox),
|
|
113
123
|
"text": text,
|
|
114
124
|
})
|
|
115
125
|
counts["text_blocks"] += 1
|
|
@@ -127,7 +137,7 @@ def _pdf_page_to_jsonl(
|
|
|
127
137
|
"page": page_num,
|
|
128
138
|
"block": block_idx,
|
|
129
139
|
"type": "image_block",
|
|
130
|
-
"bbox":
|
|
140
|
+
"bbox": list(bbox),
|
|
131
141
|
"ref": ref,
|
|
132
142
|
})
|
|
133
143
|
counts["image_blocks"] += 1
|
|
@@ -159,17 +169,75 @@ def _pdf_page_to_jsonl(
|
|
|
159
169
|
"table_bbox": t_bbox,
|
|
160
170
|
"row": r_idx,
|
|
161
171
|
"col": c_idx,
|
|
162
|
-
"text": str(cell_text)
|
|
172
|
+
"text": str(cell_text),
|
|
163
173
|
})
|
|
164
174
|
counts["table_cells"] += 1
|
|
165
175
|
|
|
176
|
+
# form fields (양식 입력란)
|
|
177
|
+
try:
|
|
178
|
+
widgets = page.widgets() or []
|
|
179
|
+
for widget in widgets:
|
|
180
|
+
try:
|
|
181
|
+
rect = list(widget.rect)
|
|
182
|
+
except Exception:
|
|
183
|
+
rect = [0, 0, 0, 0]
|
|
184
|
+
value = widget.field_value
|
|
185
|
+
if value is None:
|
|
186
|
+
value = ""
|
|
187
|
+
field_type = widget.field_type_string or str(widget.field_type)
|
|
188
|
+
name = widget.field_name or ""
|
|
189
|
+
node_lines.append({
|
|
190
|
+
"page": page_num,
|
|
191
|
+
"type": "form_field",
|
|
192
|
+
"name": name,
|
|
193
|
+
"field_type": field_type,
|
|
194
|
+
"value": str(value),
|
|
195
|
+
"bbox": rect,
|
|
196
|
+
})
|
|
197
|
+
counts["form_fields"] += 1
|
|
198
|
+
except Exception:
|
|
199
|
+
pass
|
|
200
|
+
|
|
201
|
+
# annotations (주석·highlight·sticky note 등)
|
|
202
|
+
try:
|
|
203
|
+
annots = page.annots() or []
|
|
204
|
+
for annot in annots:
|
|
205
|
+
try:
|
|
206
|
+
rect = list(annot.rect)
|
|
207
|
+
except Exception:
|
|
208
|
+
rect = [0, 0, 0, 0]
|
|
209
|
+
atype = annot.type
|
|
210
|
+
subtype = atype[1] if isinstance(atype, (tuple, list)) and len(atype) > 1 else str(atype)
|
|
211
|
+
info = annot.info or {}
|
|
212
|
+
node = {
|
|
213
|
+
"page": page_num,
|
|
214
|
+
"type": "annotation",
|
|
215
|
+
"subtype": subtype,
|
|
216
|
+
"bbox": rect,
|
|
217
|
+
}
|
|
218
|
+
content = info.get("content")
|
|
219
|
+
if content:
|
|
220
|
+
node["content"] = content
|
|
221
|
+
author = info.get("title") # info["title"] = author
|
|
222
|
+
if author:
|
|
223
|
+
node["author"] = author
|
|
224
|
+
subject = info.get("subject")
|
|
225
|
+
if subject:
|
|
226
|
+
node["subject"] = subject
|
|
227
|
+
node_lines.append(node)
|
|
228
|
+
counts["annotations"] += 1
|
|
229
|
+
except Exception:
|
|
230
|
+
pass
|
|
231
|
+
|
|
166
232
|
meta = {
|
|
167
233
|
"_meta": {
|
|
168
234
|
"page": page_num,
|
|
169
|
-
"size": [
|
|
235
|
+
"size": [page.rect.width, page.rect.height],
|
|
170
236
|
"blocks": counts["text_blocks"] + counts["image_blocks"],
|
|
171
237
|
"tables": counts["tables"],
|
|
172
238
|
"table_cells": counts["table_cells"],
|
|
239
|
+
"form_fields": counts["form_fields"],
|
|
240
|
+
"annotations": counts["annotations"],
|
|
173
241
|
}
|
|
174
242
|
}
|
|
175
243
|
lines = [json.dumps(meta, ensure_ascii=False)]
|
package/package.json
CHANGED
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
# spec.md 작성 규약
|
|
2
|
-
|
|
3
|
-
워크플로(언제 무엇을 묻는지)는 [SKILL.md](../SKILL.md) 참조.
|
|
4
|
-
|
|
5
|
-
## 섹션 구조
|
|
6
|
-
|
|
7
|
-
| § | 섹션 | 분류 |
|
|
8
|
-
| --- | ---------------- | -------------- |
|
|
9
|
-
| §1 | 개요 | 워크플로 |
|
|
10
|
-
| §2 | 업무 프로세스 | 워크플로 |
|
|
11
|
-
| §3 | 기타 요구사항 | 워크플로 |
|
|
12
|
-
| §4 | 화면 | 워크플로 |
|
|
13
|
-
| §5 | 자동 처리 | 워크플로 |
|
|
14
|
-
| §6 | 공통 정의 | 공통/자연 도출 |
|
|
15
|
-
| §7 | 도메인 모델 | 공통/자연 도출 |
|
|
16
|
-
| §8 | 외부 인터페이스 | 공통/자연 도출 |
|
|
17
|
-
| §9 | 본문 외 결정사항 | 메타 |
|
|
18
|
-
| §10 | 변경 이력 | 메타 |
|
|
19
|
-
|
|
20
|
-
§6/§7/§8/§9/§10 은 작성 워크플로 중 자연 도출됨 (별도 워크플로 단계 없음).
|
|
21
|
-
|
|
22
|
-
## 마커
|
|
23
|
-
|
|
24
|
-
### 헤더 마커 (섹션 상태)
|
|
25
|
-
|
|
26
|
-
| 마커 | 의미 |
|
|
27
|
-
| --------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
28
|
-
| `[확정: YYYY-MM-DD]` | 섹션 확정. 본문에 인라인 `[OPEN]` 있어도 무방. |
|
|
29
|
-
| `[OPEN: YYYY-MM-DD]` | 섹션 미확정 (사용자 보류 또는 헤더 분할 직후 자동). 본문 = 재분석용 참조 포인터만. 임의안(BPMN/와이어프레임/항목 등) 채우지 X. |
|
|
30
|
-
| `[확정: YYYY-MM-DD, 구현: YYYY-MM-DD]` | §4 화면 / §5 자동 처리 한정. `[확정]` 마커에 `구현: 날짜` 를 콤마로 이어붙인 확장형. sd-impl 이 시연 검증까지 통과한 시점에 부착. 본문이 변경되면 `[확정]` 날짜 갱신 여부와 무관하게 `구현: …` 부분을 제거 (구버전 구현 무효화). |
|
|
31
|
-
|
|
32
|
-
대괄호 쌍을 연달아 두면(`[확정: …][구현: …]`) 마크다운이 reference-style 링크로 해석해 렌더링이 깨지므로, **단일 대괄호 안 콤마 결합** 형식을 사용한다.
|
|
33
|
-
|
|
34
|
-
### 본문 인라인 마커
|
|
35
|
-
|
|
36
|
-
| 마커 | 의미 |
|
|
37
|
-
| -------- | ----------------------------------------- |
|
|
38
|
-
| `[OPEN]` | 정보 부족·근거 없는 항목. 향후 확정 필요. |
|
|
39
|
-
|
|
40
|
-
- 임의 채우거나 누락하지 말고 `[OPEN]` 인라인 표기.
|
|
41
|
-
- 근거 부족 판정 = sd-base-rules "결정 근거" 적용. As-Is 만 근거인 항목·답변 범위 흡수 등 안티패턴 자료는 근거 없음으로 보고 `[OPEN]`.
|
|
42
|
-
- 헤더 `[확정]` + 본문 인라인 `[OPEN]` = OPEN 항목 인정한 상태로 섹션 확정. 향후 OPEN 만 처리.
|
|
43
|
-
- 묻기 시 선택지: `맞나요? [OPEN 상태로 확정 / 섹션 전체 보류 / OPEN 하나씩 해결]`
|
|
44
|
-
|
|
45
|
-
### 헤더 `[OPEN]` 본문 — 재분석용 참조 포인터
|
|
46
|
-
|
|
47
|
-
발생 경로 2가지 (본문 메커니즘·재개 절차는 동일):
|
|
48
|
-
|
|
49
|
-
- **사용자 명시 보류**: 임의안 제시 후 사용자가 보류 지시.
|
|
50
|
-
- **헤더 분할 직후 자동 OPEN**: SKILL.md 2단계(§2.x/§3.x) · 5단계(§4.x/§5.x) 확정 직후 본문 미작성 상태로 일괄 OPEN. 본문은 자료 위치 1줄이면 충분 (분류·분할 시 파악된 위치 그대로).
|
|
51
|
-
|
|
52
|
-
본문에 담을 항목 (임의안 X):
|
|
53
|
-
|
|
54
|
-
- **자료 위치**: Requirement Source 파일·범위 (예: `회의록.md L12-30`, `첨부A.pdf p.3`).
|
|
55
|
-
- **LLM 과의 대화 발췌**: 분석 세션 중 사용자가 보류 즈음 준 부분 의견·근거·미결 코멘트 1~2줄 직접 인용 (Requirement Source 발화 X — 그건 "자료 위치" 로 처리).
|
|
56
|
-
- **자료 연결 메모**: 한 섹션이 여러 자료에 걸칠 때 연결 추정 한 줄.
|
|
57
|
-
- **다른 § 확정 영향 메모**: OPEN 유지 중 다른 § 확정이 본 OPEN 의 재분석에 영향을 줄 때 누적되는 한 줄 메모. 형식: `§X.Y <섹션명> 확정 — <결정 한 줄>` (운용 규칙은 SKILL.md "OPEN 섹션 영향 푸시").
|
|
58
|
-
|
|
59
|
-
재개 시 이 포인터로 LLM 이 자료 재독 → 임의안 재도출 → 확정되면 본문 전체를 임의안으로 교체하고 헤더 마커 `[OPEN]` → `[확정: 날짜]`.
|
|
60
|
-
|
|
61
|
-
## 본문 내 참조 (이름 기반)
|
|
62
|
-
|
|
63
|
-
본문 내 다른 섹션 참조 시 § 번호 대신 `[카테고리.이름]` 형식 사용. 다단 표기 가능.
|
|
64
|
-
|
|
65
|
-
- `[모델.재고]`, `[모델.박스.수량]`, `[모델.박스.품목.코드]`, `[화면.재고 확인]`, `[프로세스.입고]`, `[기타.과거 재고 조회]`, `[자동 처리.재고 스냅샷]`, `[외부인터페이스.ERP 입고 통보]`, `[공통 정의.Location 라벨]`
|
|
66
|
-
|
|
67
|
-
§ 번호는 분석 진행 중 자주 바뀌므로 이름 기반이 안정적.
|
|
68
|
-
|
|
69
|
-
## §1 개요
|
|
70
|
-
|
|
71
|
-
### §1.1 핵심 목적
|
|
72
|
-
|
|
73
|
-
- 한줄 동사형 큰 단위 표현.
|
|
74
|
-
- 0단계 도메인 관계도 기반 사이클·관계 표현. §2.x 동사구 항목 나열은 §1.2 의 역할이므로 X.
|
|
75
|
-
|
|
76
|
-
### §1.2 주요 목표
|
|
77
|
-
|
|
78
|
-
- 단위: 화면·기능 단위가 아니라 최종 사용자가 수행하는 업무 흐름 1건.
|
|
79
|
-
- 표현: 한 줄 동사구. 최종 사용자 도메인 어휘.
|
|
80
|
-
- §2 업무 프로세스 헤더와 1:1 매핑이 일반적.
|
|
81
|
-
- §2.x 본문에 명시된 핵심 항목은 한 줄에 모두 담아 임의 축약·누락 X.
|
|
82
|
-
|
|
83
|
-
### §1.3 최종 사용자/이해관계자
|
|
84
|
-
|
|
85
|
-
- 실제 담당자 이름은 넣지 않음.
|
|
86
|
-
- 설명은 일반화하여 작성.
|
|
87
|
-
|
|
88
|
-
### §1.4 환경/장치
|
|
89
|
-
|
|
90
|
-
구성도와 장치 목록은 목적이 별개. 각각 독립 작성.
|
|
91
|
-
|
|
92
|
-
- ASCII 구성도: 현장이 어떻게 생겼는지 시각화 — 이해당사자 간 현장 그림 맞추기용.
|
|
93
|
-
- 포함: 솔루션 측 노드(서버·데이터베이스·클라이언트 장치) + 노드 간 연결선 + 물리 위치 그룹(IDC·사무실·창고 등) + 자동 연동 외부 시스템.
|
|
94
|
-
- 제외: Actor, 외부 관계자(인적·조직), 수동 채널(메일·종이 등), 구체 제품명(MySQL 등)·통신 프로토콜(HTTPS 등), 장치 상세 사양(OS·해상도 등).
|
|
95
|
-
- 장치 목록: 솔루션이 대상으로 하는 장치/환경 스펙 — 서버·DB·클라이언트 장치 등. OS·버전·제품명·모델·해상도·하드웨어 등. 명시 스펙에 맞게 개발하며, 다른 스펙 환경에서의 동작은 책임 범위 외.
|
|
96
|
-
|
|
97
|
-
## §2 업무 프로세스
|
|
98
|
-
|
|
99
|
-
§2.x 분할 판별은 [SKILL.md 1단계](../SKILL.md). §1.2 주요 목표 1건 ≈ §2.x 1건 매핑이 일반적.
|
|
100
|
-
|
|
101
|
-
### 헤더 명칭
|
|
102
|
-
|
|
103
|
-
- 시스템·문서·메뉴·양식 명칭 그대로 X (예: 발주서·송장 등 문서명을 동사구에 쓰지 X).
|
|
104
|
-
- 도메인 업무 동사구 + 외부 관계자 관계가 드러나도록 (예: `구매처 발주 변경 요청`).
|
|
105
|
-
- 외부 관계자 식별은 [SKILL.md 0단계](../SKILL.md) 관계도 참조.
|
|
106
|
-
|
|
107
|
-
### BPMN
|
|
108
|
-
|
|
109
|
-
- 사용자에겐 ASCII 로 보여주고, 확정 후 mermaid 로 문서 저장.
|
|
110
|
-
- 흐름 단위 = 외부 비즈니스 이벤트 트리거부터 결과·후속까지 풀 흐름. 단일 화면 입력 절차 X.
|
|
111
|
-
- 노드 = 최종 사용자 액션·시스템 핵심 트랜잭션 (1행 동사구). 줄바꿈(`<br/>`) X.
|
|
112
|
-
- Actor·장치·매체(PDA·PC·종이 등)는 액션 컨텍스트로 노드에 명시 OK (예: `창고 작업자: PDA 박스 바코드 스캔`). OS·해상도·API·DB 등 시스템 내부 디테일은 X.
|
|
113
|
-
- 외부 채널 송신(메일·파일 다운로드 등)·외부 응답 수신(다음 사이클 자료 도착 등) 도 노드로 명시. 처리 노드는 사각(`T[...]`), 이벤트 노드는 둥근 노드(`E([...])`).
|
|
114
|
-
- 분기 = 사용자 의사결정 분기만.
|
|
115
|
-
- BPMN 아래·관련 섹션 위에 흐름 설명을 bullet 로 자유 나열 (별도 헤더 X). 노드 동사구만으로 안 잡히는 룰·조건·계산식·외부와의 약속·자료 출처 인용 등을 1줄씩. §4 화면·§5 자동 처리 본문 작성 시 이 bullet 들을 근거로 매핑하여 누락 방지. 단, §4 자체 디테일(필드·UI·파일 확장자) / §6·§7·§8 정형 명세는 여기 X — 각 §, 본문에선 이름 참조.
|
|
116
|
-
|
|
117
|
-
### 관련 섹션
|
|
118
|
-
|
|
119
|
-
BPMN 아래에 `관련 섹션:` 한 줄 — 본 섹션이 참조/의존하는 다른 섹션을 `[카테고리.이름]` 콤마 나열 (카테고리 제한 없음).
|
|
120
|
-
|
|
121
|
-
## §3 기타 요구사항
|
|
122
|
-
|
|
123
|
-
- 프로세스 단위는 아니지만 정형 분해(화면/자동 처리) 동반하는 사용자 직접 요구.
|
|
124
|
-
- 본문에는 요구 의도(한 줄~한 문단) + `관련 섹션:` 한 줄 (참조/의존 섹션을 `[카테고리.이름]` 콤마 나열, 카테고리 제한 없음) 만.
|
|
125
|
-
- 구현 디테일은 §4 화면 / §5 자동 처리 본문에서 다룸.
|
|
126
|
-
|
|
127
|
-
## §4 화면
|
|
128
|
-
|
|
129
|
-
### 화면 목록 표
|
|
130
|
-
|
|
131
|
-
§4 첫머리에 5컬럼 표:
|
|
132
|
-
|
|
133
|
-
| § | 분류 | 화면 | 유형 | 장치 |
|
|
134
|
-
|
|
135
|
-
- 분류: 도메인 묶음/메뉴 그룹 자유 명칭 (예: `기준정보`, `입고`, `재고`). LLM 임의안 → 확정.
|
|
136
|
-
- 유형: 마스터 / 트랜잭션 / 조회
|
|
137
|
-
- 장치: PC / PDA / 기타
|
|
138
|
-
- 화면 추가/제거 시 표도 갱신. 같은 분류끼리 인접 배치.
|
|
139
|
-
|
|
140
|
-
### 화면 정의
|
|
141
|
-
|
|
142
|
-
§4.x 표준 구조 (위→아래 순서):
|
|
143
|
-
|
|
144
|
-
- 헤더 인덱스 (한 줄씩):
|
|
145
|
-
- `Actor: <역할>`
|
|
146
|
-
- `관련 섹션: [카테고리.이름], ...` — 본 화면이 참조/의존하는 다른 섹션 콤마 나열 (카테고리 제한 없음. 모달 호출·시트 영역 재활용 등 화면 간 의존도 포함)
|
|
147
|
-
- 기능 개요: 불릿으로 화면 기능 설명
|
|
148
|
-
- 와이어프레임
|
|
149
|
-
- 항목: 데이터 항목만 (필터·시트 컬럼·입력/상세 폼). 액션 버튼은 "동작" 에.
|
|
150
|
-
- **표 제목은 와이어의 영역 라벨과 동일 명칭**으로 굵게 표기. 와이어 `<필터>` → `**필터**`, `<품목 목록 시트>` → `**품목 목록 시트**`, `<스캔 입력 폼>` → `**스캔 입력 폼**`.
|
|
151
|
-
- 한 영역에 종류가 다른 표가 여러 개 필요하면 (좌·우 분할의 양쪽 시트 등) 종류 부기: `**<영역 라벨> — <필터|시트 컬럼|입력 폼>**` (예: `**헤더 목록 — 필터**`, `**BOA 시트 — 시트 컬럼**`).
|
|
152
|
-
- 시트 화면 기본 구성: 상단 command 바의 `<필터>` + 시트 영역 (시트 컬럼) 2 그룹.
|
|
153
|
-
- 표 형식 — 도메인 매핑은 별도 컬럼으로 (필터는 시트 컬럼과 중복이라 도메인 매핑 컬럼 X):
|
|
154
|
-
- 입력 폼: `항목 | 종류 | 필수 | 도메인 매핑 | 비고`
|
|
155
|
-
- 시트 컬럼: `컬럼 | 종류 | 필수 | 도메인 매핑 | 비고`
|
|
156
|
-
- 필터: `항목 | 종류 | 필수 | 비고` (시트 컬럼이 매핑 정보 보유)
|
|
157
|
-
- 필수 컬럼: 필수 여부가 무의미한 경우(조회 시트 컬럼 등) `-`.
|
|
158
|
-
- 도메인 매핑 컬럼: `[모델.X.Y]` 표기 (양식 매핑과 일관). 매핑 없는 항목(선택 체크박스 등) 은 `-`.
|
|
159
|
-
- 비고 컬럼: 표시 내용 (이름과 도메인으로 자명하지 않을 때 어떤 값이 표시되는지) / 편집 방법 (편집 가능 항목의 동작 — 예: 클릭 시 모달, 인라인 편집) / 기타 자유 설명.
|
|
160
|
-
- 시트 컬럼 그룹핑 (해당 시): 시트 컬럼이 도메인적으로 묶일 때 표 안에 그룹 표시. 그룹 헤더 행 1줄 (`**그룹명**`, 다른 셀 빈 칸) + 자식 컬럼은 `└ ` 들여쓰기 prefix. 표 컬럼 수 유지.
|
|
161
|
-
- 동작: 액션 버튼·이벤트 별 처리.
|
|
162
|
-
- 시각 규칙 (해당 시): 행 단위·조건부 시각 표현(비활성 행 취소선·상태별 강조 색·아이콘 등). 컬럼 단위 표현은 항목 표 비고에 작성하므로 여기 X.
|
|
163
|
-
- 도메인 규칙·로직 (해당 시): 표준 절(항목/동작/양식 매핑)로 안 담기는 화면 고유 도메인 요구는 자유 명칭의 절을 필요한 만큼 추가. 누락 없이 적는 것이 핵심.
|
|
164
|
-
- 양식 매핑 (해당 시): 외부 양식 파일을 다루는 동작(업로드·다운로드) 별로 매핑 표. 표 컬럼: `파일 컬럼` + `도메인 모델 ([모델.X.Y])` + `변환·규칙 (해당 시)`. 양식별 별도 표 + 방향 명시 (예: `업로드 양식`, `다운로드 양식`). §6.x 에 명세된 양식이면 컬럼명 일치, 일회성이면 화면 안에서 직접 명세.
|
|
165
|
-
|
|
166
|
-
- 화면 헤더에 (장치) 표기 유지: `### N.N 화면명 (PC) [확정: 날짜]` 또는 `(PDA)` 등.
|
|
167
|
-
- 모달 화면은 별도 §4.x 로 분리 (부르는 쪽 동작에 "→ [화면.X] 을 모달로 띄움" 명시). 화면명에 "(모달)" 등 사용 맥락 표기 X — 같은 화면이 다른 곳에서 다르게 호출될 수 있음.
|
|
168
|
-
- 화면 일부 영역(시트·탭)이 다른 화면에서 모달로 재활용되면 별도 §4.x 분리 X. 대신 그 화면 동작 절 끝에 영역별 모달 호출 시 제약(편집 가능 여부 / 선택 전용 / multiselect 등) 한 줄씩 명시. 호출하는 쪽 동작은 "→ [화면.X] 의 <영역> 을 모달로 띄움" 으로 표기.
|
|
169
|
-
|
|
170
|
-
### 마스터 화면 표준
|
|
171
|
-
|
|
172
|
-
- ID 컬럼이 편집 버튼 역할(`[E N]`).
|
|
173
|
-
- 첫 컬럼은 선택 체크박스(`[ ]`).
|
|
174
|
-
- 시트 상단 버튼바: `[등록] [선택 삭제] [선택 복구] [엑셀 업로드] [엑셀 다운로드]`.
|
|
175
|
-
- ID 정렬 역방향.
|
|
176
|
-
|
|
177
|
-
### 상단 command 바
|
|
178
|
-
|
|
179
|
-
페이지 제목 바로 아래, 시트/폼 영역 위. 페이지 전체 또는 현재 레코드 단위 액션 바.
|
|
180
|
-
|
|
181
|
-
- 좌측: 필터 입력 + 조회 (list) / 진입 컨텍스트 표시 (detail)
|
|
182
|
-
- 우측: 페이지·레코드 단위 액션 (있을 때만)
|
|
183
|
-
- 좌/우 사이 ` │ ` 세로 구분선
|
|
184
|
-
|
|
185
|
-
우측 버튼 그룹 순서 (좌→우):
|
|
186
|
-
|
|
187
|
-
1. 기본 CRUD (저장 / 삭제 / 복구 등)
|
|
188
|
-
2. 워크플로 상태 전환 (확정 / 취소 / 승인 / 반려 등)
|
|
189
|
-
3. 유틸리티 (원본 다운로드 / 프린트 / PDF 등)
|
|
190
|
-
|
|
191
|
-
list·detail 동일. 새 버튼은 해당 그룹 끝에 추가.
|
|
192
|
-
시트 상단 버튼바도 동일 그룹 순서 적용 (마스터 화면 표준은 구체 인스턴스).
|
|
193
|
-
|
|
194
|
-
### 와이어프레임 (텍스트)
|
|
195
|
-
|
|
196
|
-
ASCII 그림 공통 규칙은 output-style `sd-tone` 의 "ASCII 그림" 절 참조.
|
|
197
|
-
|
|
198
|
-
**원칙**: 영역 배치·구획만 잡는다. 디테일(필드·시트 컬럼·실제 값·아이콘 placeholder·fixed 경계·비활성 행 등 시각 표현)은 와이어에 X — 항목 표·동작 절·도메인 규칙 절이 단일 출처.
|
|
199
|
-
|
|
200
|
-
- 데이터 영역은 영역 타입 + 짧은 라벨로 추상화: `<필터>`, `<폼>`, `<시트>`, `<목록>`, `<PO 목록>`, `<라인 시트 - 작성영역>` 등. 영역 종류가 한눈에 안 잡히면 라벨 보강.
|
|
201
|
-
- 액션 버튼은 텍스트 유지 (`[조회]`, `[저장]`, `[등록]` 등) — 버튼 위치가 와이어의 정보. 아이콘만 있는 버튼도 텍스트로 표기.
|
|
202
|
-
- 화면이 영역(좌/우 분할·탭·상단 command 바·시트 상단 버튼바 등)으로 나뉘면 박스 라인으로 구획 표시.
|
|
203
|
-
- 상태(작성중/확정 등)에 따라 영역 구획이 크게 달라지면 상태별로 와이어프레임 분리. 제목은 `와이어프레임 (<상태명>):` (예: `와이어프레임 (확정 전):`, `와이어프레임 (확정 후):`).
|
|
204
|
-
|
|
205
|
-
## §5 자동 처리
|
|
206
|
-
|
|
207
|
-
스케줄러/이벤트 트리거로 도는 시스템 백그라운드 처리. 표준 프로토콜·채널을 통한 외부 자료 수집·적재(메일 폴링 + 첨부 적재, FTP 자료 흡수 등) 도 §5 — 시스템별 협상 없는 표준 인터페이싱은 §8 X.
|
|
208
|
-
|
|
209
|
-
서브섹션: Flowchart / 목적 / 트리거 / 처리 / 예외 처리 / 양식 매핑 (해당 시) / 관련 섹션.
|
|
210
|
-
|
|
211
|
-
- 양식 매핑 (해당 시): 외부 양식 파일을 다루는 처리(읽기·쓰기) 별로 매핑 표. 표 컬럼: `파일 컬럼` + `도메인 모델 ([모델.X.Y])` + `변환·규칙 (해당 시)`. 양식별 별도 표 + 방향 명시 (예: `읽기 양식`, `쓰기 양식`). §6.x 에 명세된 양식이면 컬럼명 일치, 일회성이면 처리 본문에서 직접 명세.
|
|
212
|
-
- 마지막 `관련 섹션:` 한 줄에 참조/의존 섹션을 `[카테고리.이름]` 콤마 나열 (카테고리 제한 없음).
|
|
213
|
-
|
|
214
|
-
### Flowchart
|
|
215
|
-
|
|
216
|
-
- 사용자에겐 ASCII 로 보여주고, 확정 후 mermaid 로 문서 저장.
|
|
217
|
-
- 노드 = 시스템 처리 단계 (1행 동사구).
|
|
218
|
-
- 분기 = 시스템 조건 분기·예외.
|
|
219
|
-
- 시작 = 트리거 (시간·이벤트). 종결 = 결과.
|
|
220
|
-
- 특수 케이스(상태 머신 / 호출 시퀀스 등)는 mermaid 의 다른 다이어그램 type(stateDiagram-v2 / sequenceDiagram 등) 사용 가능.
|
|
221
|
-
|
|
222
|
-
## §6 공통 정의
|
|
223
|
-
|
|
224
|
-
- §6.1 용어 사전 고정. 도메인 어휘·약어·시스템 내 의미 정의.
|
|
225
|
-
- 그 외 시스템 전반 규격(바코드 형식, 라벨, 공통 정책 등)은 §6.2~ 로 추가.
|
|
226
|
-
- 특정 §2/§3 본문 단계에서 자연 흡수되는 규칙(업로드 자료 컬럼 매핑·자료 해석 규칙 등)은 §6 X → 사용처 본문에 둠.
|
|
227
|
-
|
|
228
|
-
### 외부 자료 명세
|
|
229
|
-
|
|
230
|
-
§6 외부 자료 = **시스템 외부에서 정의되어 도메인 모델로 자명하지 않은** 자료 (예: 외부 시스템이 송신하는 파일, 거래처가 보내는 표준 양식, 정해진 외부 규격). 도메인 모델의 자체 엑셀 업로드/다운로드 양식은 §6 X — §7 도메인 모델 + §4/§5 양식 매핑으로 자명.
|
|
231
|
-
|
|
232
|
-
위 정의를 만족하는 §6.x 는 자료별 표 필수. 외부 자료의 모든 컬럼/필드를 1행 1정의로 나열 (자료 자체 객관 명세).
|
|
233
|
-
|
|
234
|
-
자료-레벨 메타(송신 측·자료 라이프사이클·갱신 주기·식별 키 구조 등 자료 *전체* 에 적용되는 객관 명세)는 근거 있을 때 컬럼 표 위에 자유롭게 작성 (불릿/단락/`라벨: 값` 모두 허용, 자료 성격에 맞게). 컬럼 표 안에 욱여넣지 X.
|
|
235
|
-
|
|
236
|
-
- 외부 자료가 여러 개 (예: `SAP.XML`, `D1.CSV`) 면 자료별 별도 표.
|
|
237
|
-
- 표 컬럼: 자료 성격에 따라 LLM 임의안 → 확정. 예: `컬럼명/식별자` + `필수/선택` + `설명/규칙`.
|
|
238
|
-
- 모든 컬럼 행 유지.
|
|
239
|
-
- "설명/규칙" 류 컬럼은 **그 컬럼이 무엇인지(데이터 정의: 형식·값 범위·의미·제약)** 만 기재. **용도(어디에 어떻게 쓰이는지)** X — 용도·매핑은 사용처(§4 양식 매핑 / §5 양식 매핑) 에서 다룸.
|
|
240
|
-
- 각 셀 값은 근거 채택 가능 자료(원본 자료 명시 정의·사용자 발언 등) 있을 때만 채움. 추정·임의 작성 X.
|
|
241
|
-
- "원본 따름"·"전체 명세는 X.xlsx 참조" 등 외부 참조로 본문 정의 대체 X.
|
|
242
|
-
- 원본 자료가 LLM 접근 불가/누락/모호 → 임의 처리 X. 사용자에게 자료 또는 명세 정보 요청.
|
|
243
|
-
|
|
244
|
-
## §7 도메인 모델
|
|
245
|
-
|
|
246
|
-
- 식별 키: 모든 엔티티에 `ID` 필드 (숫자, 자동 부여) 명시.
|
|
247
|
-
- 비즈니스 키 (코드 등): 별도 명시. 수정 가능 (PK 가 아니므로).
|
|
248
|
-
- 활성/비활성 boolean = 소프트 삭제 플래그. 마스터에는 완전 삭제 없음. UI 의 "삭제/복구" 액션과 매핑 → §6.1 용어 사전에 한 줄 명문화.
|
|
249
|
-
- 섹션 구조: `필드:` 표 + `키/제약:` 불릿.
|
|
250
|
-
- 필드 표 컬럼: `필드 | 타입 | 필수 | 비고`.
|
|
251
|
-
- 비고 컬럼: **그 필드가 무엇인지(데이터 정의: 형식·값 범위·의미·제약·예시)** 만 기재. **용도·출처·외부 양식/외부 시스템과의 매핑** X — 그건 §4 양식 매핑 / §5 양식 매핑 / §8 자료 매핑 에서 다룸.
|
|
252
|
-
|
|
253
|
-
## §8 외부 인터페이스
|
|
254
|
-
|
|
255
|
-
§8 = 상대 시스템 고유 인터페이스 약속 (시스템마다 자료 매핑·방식이 달라 협상이 필요한 것).
|
|
256
|
-
|
|
257
|
-
- 포함 예: 상대 ERP/거래처가 자체 정의한 API·EDI 규격, 외부 시스템 webhook 페이로드.
|
|
258
|
-
- 제외 예: 표준 프로토콜·채널 (메일 SMTP/IMAP/Exchange/Graph, FTP, 표준 OAuth 등). 시스템별 협상 없음 → §5 자동 처리에서 트리거·처리·양식 매핑으로 흡수.
|
|
259
|
-
|
|
260
|
-
본문은 도메인 약속 레벨까지만. 구체 endpoint URL·HTTP method·query 파라미터·인증 흐름 단계(grant_type·scope·token endpoint)·SDK 메소드명 등 구현 디테일은 X — 구현이 알아서. (§2 BPMN·§4 와이어·§7 도메인 모델과 동일 원칙)
|
|
261
|
-
|
|
262
|
-
§8.x 표준 구조 (위→아래 순서):
|
|
263
|
-
|
|
264
|
-
- 기본 정보 (헤더 없이 불릿 3개):
|
|
265
|
-
- `상대 시스템: <시스템명>`
|
|
266
|
-
- `방향: <방향 표기>`
|
|
267
|
-
- `전송 방식: <방식>`
|
|
268
|
-
- `자료 매핑:` 헤더 + 표 (상대 시스템 필드 ↔ 본 시스템 출처)
|
|
269
|
-
- `예외 처리:` 헤더 + 본문 (실패 케이스별 위험/대처/재시도 한계)
|
|
270
|
-
- `관련 섹션:` 한 줄 — 호출자 등 참조/의존 섹션을 `[카테고리.이름]` 콤마 나열 (카테고리 제한 없음)
|
|
271
|
-
|
|
272
|
-
한 §8.x 당 묻기 단위:
|
|
273
|
-
|
|
274
|
-
1. 기본 정보 + 자료 매핑 → "맞나요?"
|
|
275
|
-
2. 예외 처리 → "맞나요?"
|
|
276
|
-
|
|
277
|
-
## §9 본문 외 결정사항
|
|
278
|
-
|
|
279
|
-
§1~§8 어디에도 자연스럽게 들어가지 않는 결정·메모만. §1~§8 의 적절한 자리에 박을 수 있는 결정은 §9 X (누락 도피처로 사용 금지).
|
|
280
|
-
|
|
281
|
-
### 분석 제외 항목
|
|
282
|
-
|
|
283
|
-
1단계 헤더 분류 + 이후 본문 작성 중 식별된 "제외" 결정을 누적. 본 spec 에서 다루지 않지만 다른 spec / sd-dev / 운영 잔손 등으로 후속 처리될 항목 포함. 형식 (`- <요구 한 줄>` 1행 + 자식 불릿 2~3종):
|
|
284
|
-
|
|
285
|
-
```
|
|
286
|
-
- <요구 한 줄>
|
|
287
|
-
- 후속 처리: <다른 spec 신규 / 다른 spec 합류 / sd-dev / 운영 잔손 등>
|
|
288
|
-
- 자료 위치: <Requirement Source 파일·범위 (예: 회의록.md L12-30)>
|
|
289
|
-
- 메모: <대화 발췌 1~2줄, 필요 시>
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
- `후속 처리` · `자료 위치` 필수. `메모` 는 후속 처리 시 참고할 단서가 있을 때만.
|
|
293
|
-
- 다른 spec / sd-dev 후속 처리 항목은 자료 위치를 충실히 — 후속 도구가 재독해야 함.
|
|
294
|
-
|
|
295
|
-
## §10 변경 이력
|
|
296
|
-
|
|
297
|
-
- 본문 수정·추가 사항을 날짜순으로 누적 기록.
|
|
298
|
-
- 형식: `- YYYY-MM-DD: <변경 내용>` (간결하고 명확하게 작성)
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# {name} 요구 분석서
|
|
2
|
-
|
|
3
|
-
## 1. 개요
|
|
4
|
-
|
|
5
|
-
### 1.1 핵심 목적
|
|
6
|
-
|
|
7
|
-
### 1.2 주요 목표
|
|
8
|
-
|
|
9
|
-
### 1.3 최종 사용자/이해관계자
|
|
10
|
-
|
|
11
|
-
### 1.4 환경/장치
|
|
12
|
-
|
|
13
|
-
## 2. 업무 프로세스
|
|
14
|
-
|
|
15
|
-
## 3. 기타 요구사항
|
|
16
|
-
|
|
17
|
-
## 4. 화면
|
|
18
|
-
|
|
19
|
-
## 5. 자동 처리
|
|
20
|
-
|
|
21
|
-
## 6. 공통 정의
|
|
22
|
-
|
|
23
|
-
## 7. 도메인 모델
|
|
24
|
-
|
|
25
|
-
## 8. 외부 인터페이스
|
|
26
|
-
|
|
27
|
-
## 9. 본문 외 결정사항
|
|
28
|
-
|
|
29
|
-
## 10. 변경 이력
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sd-wip
|
|
3
|
-
description: 현재 대화의 분석 컨텍스트를 `_wip.md` 또는 `.wips/...md` 에 누적 기록하거나(기본), 누적된 wip 을 압축한다(명시 요청 시). Use when "wip 정리/갱신/저장", "세션 옮길래", "wip 압축" 요청 시.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# sd-wip
|
|
7
|
-
|
|
8
|
-
여러 세션에 걸친 분석 컨텍스트를 wip 파일에 모아, 다른 새 세션에서 산출물(있다면) + wip 만 첨부해도 대화를 그대로 이어갈 수 있게 한다.
|
|
9
|
-
|
|
10
|
-
## 모드 판정
|
|
11
|
-
|
|
12
|
-
사용자 입력에 **wip 파일 첨부 + "압축" 명시 요청** 이 모두 있으면 **압축 모드**, 그 외는 **누적 모드**.
|
|
13
|
-
|
|
14
|
-
- 누적 모드: 현재 대화의 신규 분석분을 wip 파일 끝에 시간순 append. 카테고리 분류 X.
|
|
15
|
-
- 압축 모드: 첨부된 wip 본문 전체를 7축 구조로 재작성해 덮어쓰기. 절차는 [references/compact.md](references/compact.md).
|
|
16
|
-
|
|
17
|
-
운용 공통:
|
|
18
|
-
|
|
19
|
-
- 갱신은 사용자 명시 요청 시에만. 자동 갱신 X.
|
|
20
|
-
- 합의 사항이 산출물로 이동하면 wip 에서 해당 부분 제거.
|
|
21
|
-
|
|
22
|
-
## 파일 라우팅
|
|
23
|
-
|
|
24
|
-
- **산출물 있는 대화** (본 세션에서 사용자 컨펌된 작성/수정 대상 파일 1건, 예: spec.md, impl.md) → 그 산출물 옆 `_wip.md`.
|
|
25
|
-
- 누적 모드에서도 산출물 옆 `_wip.md` 가 있는지 **MUST** 능동 확인. 있으면 그 파일에 append.
|
|
26
|
-
- **산출물 없는 일반 대화** → `.wips/{yyMMddHHmmss}_{slug}.md`.
|
|
27
|
-
- 기존 `.wips/*.md` 가 입력에 첨부되어 있으면 그 파일에 append.
|
|
28
|
-
- 첨부 없으면 새 파일 생성. `slug` 는 대화 주제 짧은 한·두 단어 (LLM 임의안, 사용자 수정 가능). 타임스탬프는 `date +%y%m%d%H%M%S`.
|
|
29
|
-
|
|
30
|
-
## 누적 모드 절차
|
|
31
|
-
|
|
32
|
-
1. 라우팅 결정 (위 규칙). 대상 파일이 없으면 새로 생성하며 헤더 `# 작업 메모` 한 줄로 시작.
|
|
33
|
-
2. 직전 갱신 이후의 신규 분석분만 추출:
|
|
34
|
-
- 사용자 발화: 의도·결정·정정·명시 가이드·가설·가정·보류
|
|
35
|
-
- LLM 발화: 제안·임의안·대안 중 사용자가 동의/정정한 것
|
|
36
|
-
3. 추출분을 시간순 메모로 파일 끝에 append. 기존 본문은 건드리지 X. 카테고리 헤더(`## 결정 흐름`, `## 사용자 정정 패턴` 등) 만들지 X.
|
|
37
|
-
- 형식: `- <한 줄 메모>` 또는 짧은 문단. 결정·정정·가설·자료 위치 등 본질을 빠뜨리지 않고 자연어로 적되, 분류 헤더로 묶지 않는다.
|
|
38
|
-
4. 산출물에 이미 표면화된 결과·매핑은 wip 에 옮기지 X. (결과에 이르는 흐름·근거·정정·가설·메타 가이드만)
|
|
File without changes
|
package/claude/skills/sd-wip/evals/fixtures/with-existing-wip-for-compact/.wips/260101120000_acct.md
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# 작업 메모
|
|
2
|
-
|
|
3
|
-
- 회계 시스템 분석 시작. ERP 연동 대상 모듈은 매입/매출/원가 3개로 합의됨.
|
|
4
|
-
- 매입 모듈은 처음에 일배치/실시간 두 안 검토. 사용자 정정: "실시간은 부하 우려" → 일배치로 확정.
|
|
5
|
-
- 매입: 공급사 마스터 SAP 연동, 일별 배치, 차이 발생 시 알림.
|
|
6
|
-
- 매출 모듈: 세금계산서 발행 자체구현 검토 → 사용자가 "그건 외부 라이브러리 써" 정정 → e-Tax 라이브러리 사용 확정.
|
|
7
|
-
- 매출: 매출 인식 기준은 수출/내수 분리. 수출은 통관완료일, 내수는 출하일.
|
|
8
|
-
- 원가 모듈: 부문별 배부 로직 → 사용자 보류 ("기준 정해서 다시 알려줄게").
|
|
9
|
-
- 가정: 회계 기간 마감은 매월 5일 (사용자 미확정, 표준 가정으로 진행 중).
|
|
10
|
-
- 가설: 외화 환산은 매월 말일 환율 일괄 적용 — 사용자 미확정.
|
|
11
|
-
- 자료 위치: ./docs/회계요구사항.docx p.3 "원가 배부" 항목, p.7 "외화 처리" 항목.
|
|
12
|
-
- 사용자 가이드: "매입/매출 모듈 우선, 원가는 후순위로 진행".
|
|
13
|
-
- LLM 임의안: 매입 마스터 동기화 주기 1시간 → 사용자 정정: "일배치면 일배치지 뭐가 시간이야".
|
|
14
|
-
- 사용자 명시: 시스템 내부 용어 (예: "마스터데이터 동기화") 노출 X, 사용자 화면 표기는 "공급사 정보 갱신" 으로 통일.
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
{"id": "case-001-new-accumulate", "input": "방금 회계 시스템 분석 진행했어. ERP 연동 대상은 매입/매출/원가 3개 모듈로 합의됐고, 매입은 SAP 일배치 연동, 매출은 외부 e-Tax 라이브러리 사용. 원가 배부 로직은 사용자가 추후 정의하기로 보류. 이거 wip 정리해줘.", "rubric": [".wips/ 디렉토리에 .md 파일이 정확히 1개 생성되었는가", "생성된 .md 파일 이름이 12자리 숫자로 시작하고 그 다음 언더스코어가 오는 패턴(예: 260518204500_xxx.md)인가", "생성된 .md 파일 본문에 '## 결정 흐름', '## 사용자 정정 패턴', '## 가설·가정', '## 자료 컨텍스트' 헤더가 모두 등장하지 않는가", "생성된 .md 파일 본문에 '회계' 또는 '매입' 또는 '매출' 또는 '원가' 중 최소 한 단어가 포함되었는가"], "fixture": "empty"}
|
|
2
|
-
{"id": "case-002-existing-accumulate", "input": "지난 세션에 .wips/260101120000_acct.md 까지 분석해왔어. 이번 세션에서 매출 인식 기준을 수출=통관완료일, 내수=출하일 로 분리하기로 결정했어. wip 갱신해줘.", "rubric": [".wips/260101120000_acct.md 파일 본문에 'SENTINEL_EXISTING_LINE_A' 문자열이 그대로 남아있는가", ".wips/260101120000_acct.md 파일 본문에 'SENTINEL_EXISTING_LINE_B' 문자열이 그대로 남아있는가", ".wips/ 디렉토리에 .md 파일이 정확히 1개만 존재하는가 (새 파일 생성 X)", ".wips/260101120000_acct.md 파일 본문에 '수출' 또는 '통관완료일' 또는 '출하일' 중 최소 한 단어가 추가되었는가", ".wips/260101120000_acct.md 파일 본문에 '## 결정 흐름' 헤더가 새로 등장하지 않는가"], "fixture": "with-existing-wip"}
|
|
3
|
-
{"id": "case-003-compact", "input": ".wips/260101120000_acct.md 가 너무 길어졌어. 이거 압축 정리해줘.", "rubric": [".wips/260101120000_acct.md 파일이 갱신된 상태로 존재하는가", "갱신된 본문에 '## 결정', '## 결정 흐름', '## 사용자 정정 패턴', '## 사용자 명시 가이드', '## 가설·가정', '## 보류·미합의', '## 자료 컨텍스트' 헤더 중 최소 4개 이상이 등장하는가", ".wips/ 디렉토리에 .md 파일이 정확히 1개만 존재하는가"], "fixture": "with-existing-wip-for-compact"}
|
|
4
|
-
{"id": "case-004-artifact-accumulate", "input": "projects/acct/spec.md 분석 이어왔어. §2.1 매입에서 공급사 마스터 동기화 주기를 1시간 검토했다가 사용자가 일배치로 정정했음. wip 갱신해줘.", "rubric": ["projects/acct/_wip.md 파일 본문에 'SENTINEL_ARTIFACT_LINE' 문자열이 그대로 남아있는가", "projects/acct/_wip.md 파일 본문에 '동기화' 또는 '일배치' 또는 '공급사' 중 최소 한 단어가 추가되었는가", "샌드박스에 .wips/ 디렉토리가 생성되지 않았는가 (산출물 옆 _wip.md 라우팅이 적용됨)"], "fixture": "with-artifact"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
# 압축 모드 절차
|
|
2
|
-
|
|
3
|
-
누적된 wip 파일을 7축 구조로 재작성해 덮어쓴다. **정확성·완전성 1순위. 시간·용량 비용 감수. 단순 요약 X.**
|
|
4
|
-
|
|
5
|
-
## 5단계
|
|
6
|
-
|
|
7
|
-
### 단계 1: 입력 전수 스캔
|
|
8
|
-
|
|
9
|
-
입력 source:
|
|
10
|
-
|
|
11
|
-
- 첨부된 wip 파일 본문 전체
|
|
12
|
-
- 현재 대화 turn (첫 turn ~ 마지막)
|
|
13
|
-
|
|
14
|
-
각 source 에서 추출:
|
|
15
|
-
|
|
16
|
-
- 사용자 발화: 의도·결정·정정·명시 코멘트·가이드·가설·가정
|
|
17
|
-
- LLM 발화: 제안·결정 흐름·임의안·대안 제시
|
|
18
|
-
- 기존 wip 본문 항목: 결정·결정 흐름·정정 패턴·가이드·가설·보류·자료 컨텍스트
|
|
19
|
-
|
|
20
|
-
요약식으로 건너뛰기 X. turn 단위·항목 단위로 본다.
|
|
21
|
-
|
|
22
|
-
### 단계 2: 7축 분류
|
|
23
|
-
|
|
24
|
-
추출 항목을 다음 7축으로 분류:
|
|
25
|
-
|
|
26
|
-
1. **결정** — 사용자 확정·합의 사항
|
|
27
|
-
2. **결정 흐름** — 결정 이르기까지 근거·대안·트레이드오프
|
|
28
|
-
3. **사용자 정정 패턴** — LLM 이 틀린 부분 → 사용자 명시 정정 (재발 방지용)
|
|
29
|
-
4. **사용자 명시 가이드** — 메타 행동 지침·작업 원칙
|
|
30
|
-
5. **가설·가정** — 확정 안 받았지만 작업 흐름에 영향
|
|
31
|
-
6. **보류·미합의** — 보류된 결정·미합의 논의
|
|
32
|
-
7. **자료 컨텍스트** — 자료 위치·핵심 발췌
|
|
33
|
-
|
|
34
|
-
### 단계 3: 산출물 중복 제거
|
|
35
|
-
|
|
36
|
-
산출물(있다면)에 이미 표면화된 결과·매핑·포인터는 wip 에 옮기지 X.
|
|
37
|
-
**유지 대상**: 결과는 산출물에 들어갔지만 그 결과에 이르는 흐름·근거·정정·가설·메타 가이드.
|
|
38
|
-
|
|
39
|
-
### 단계 4: 7축 구조로 덮어쓰기
|
|
40
|
-
|
|
41
|
-
대상 wip 파일을 아래 구조로 덮어쓴다 (기존 본문 base 두지 X, 처음부터 재구성).
|
|
42
|
-
|
|
43
|
-
```markdown
|
|
44
|
-
# 작업 메모
|
|
45
|
-
|
|
46
|
-
현재 분석 컨텍스트 압축. 산출물(있다면) 과 함께 읽어 새 세션에서 대화를 그대로 이어가도록.
|
|
47
|
-
|
|
48
|
-
## 결정
|
|
49
|
-
- <결정 항목 1줄씩>
|
|
50
|
-
|
|
51
|
-
## 결정 흐름
|
|
52
|
-
### <결정 항목 1>
|
|
53
|
-
- 결정: <무엇>
|
|
54
|
-
- 근거: <왜>
|
|
55
|
-
- 대안: <어떤 대안이 있었는지>
|
|
56
|
-
- 정정 흐름: <사용자 정정 있었으면 그 흐름>
|
|
57
|
-
|
|
58
|
-
## 사용자 정정 패턴
|
|
59
|
-
- <정정 1줄씩>
|
|
60
|
-
|
|
61
|
-
## 사용자 명시 가이드
|
|
62
|
-
- <가이드 1줄씩>
|
|
63
|
-
|
|
64
|
-
## 가설·가정
|
|
65
|
-
- <가설 1줄씩>
|
|
66
|
-
|
|
67
|
-
## 보류·미합의
|
|
68
|
-
- <보류 항목 1줄씩>
|
|
69
|
-
|
|
70
|
-
## 자료 컨텍스트
|
|
71
|
-
- `<파일 경로>` <L범위 또는 페이지> — `핵심 발췌` 또는 메모
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
- 정보량 누락 X. "한 페이지 요약" = 누락이지 압축 아님.
|
|
75
|
-
- 산출물 본문 표현은 옮기지 X (단계 3).
|
|
76
|
-
|
|
77
|
-
### 단계 5: 누락 검증
|
|
78
|
-
|
|
79
|
-
단계 1 의 입력 source 재스캔. 단계 2 의 7축 전체에 대해 누락 검증. 누락 발견 시 단계 4 보강. 검증 통과 후 작업 종료.
|