@tienne/gestalt 0.82.0 → 0.82.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.82.0",
3
+ "version": "0.82.2",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "repository": {
6
6
  "type": "git",
@@ -44,6 +44,9 @@ pnpm build:output-style
44
44
  - 어투 규칙은 **S1으로 올려야 실제로 강제된다.** S2는 모델이 우선순위를 알아서 정하면서 빠져나간다.
45
45
  - 심각도를 바꿀 때는 근거를 남긴다. A-2, I-1, C-8은 대조 코퍼스 측정으로 조정했고 그 근거가
46
46
  [룰북 측정 근거](ai-tell-quick-rules.md#측정-근거)에 있다. 감으로 올리고 내리면 다음 사람이 되돌린다.
47
+ - **탐지기를 안 붙이기로 한 것도 같은 자리에 남긴다.** C-5, C-8, C-10, F-4가 그렇다. 형태로 셀 수
48
+ 있어 보이는 룰이라 후보로 다시 올라오는데, 안 붙인 근거가 없으면 다음 사람이 같은 프로토타입을
49
+ 또 만든다.
47
50
  - 경로를 참조하는 자리가 여러 곳이다. 파일을 옮기거나 이름을 바꾸면 `plugin/` 전체에서
48
51
  상대경로 참조를 다시 확인한다 (에이전트는 `../_shared/references/`, 에이전트의 `references/`
49
52
  하위 문서는 `../../_shared/references/`, 스킬은 `../../role-agents/_shared/references/`).
@@ -22,7 +22,7 @@
22
22
 
23
23
  **은유를 다 지우라는 게 아니다 (F-9 오적용 주의):** 겨냥하는 건 결함이나 코드 상태, 그 결함의 원인 관계를 뭉개 부른 말이다. 그 자리에서 지어낸 별칭이든 이미 있는 비유든 같다. "널 포인터"를 "널 값을 가리키는 포인터"로, "데드락"을 "서로 기다리다 멈춘 상태"로 풀어 쓰면 길이만 늘고 무엇을 말하는지는 오히려 흐려진다. **가르는 기준은 그 자리에서 무엇을 가리키는지가 말에 남아 있느냐 하나뿐이다.** 남이 정의해 둔 이름을 그 뜻 그대로 쓰면 그 기준을 통과한다. 그게 대표 사례다. **"뿌리"는 root 한 단어가 그 대상 이름인 자리에서만 남긴다** — 이를테면 트리와 스레드의 root, 디렉토리와 프로젝트와 git ref의 root다. **root cause처럼 root가 다른 명사를 수식하는 자리는 대상이다** — 원인이면 "원인", 출처면 "출처"로 쓴다. **이 기준이 아래 일반 예외보다 앞선다** — root cause analysis가 문헌에 뜻이 박힌 말이어도 "뿌리"로 옮기면 걸린다. **사전에 비유 뜻풀이가 실렸다는 것만으로는 정의해 둔 이름이 아니다** — "뿌리가 하나다"는 사전에 근본 뜻이 실려도 무엇이 같은지가 안 남는다. 명세나 교과서에 뜻이 박혀 있으면 가리킬 데가 있으니 그대로 둔다. 팀에서 몇 번 쓰였다는 것으로는 예외가 되지 않는다 — 아래 [측정 근거](#측정-근거) 문단과 B-4가 "팀에서 굳은 말"을 지키는 것과는 다른 자리다. B-4는 팀이 쓰기 시작하면 예외로 인정하는데 F-9는 그걸 예외로 안 본다. B-4가 막는 건 어색함이라 팀이 받아쓰면 풀리고 F-9가 막는 건 굳는 것 자체라 팀이 받아쓰면 그게 피해다.
24
24
 
25
- **근거가 붙은 룰 (→ 아래 [측정 근거](#측정-근거)):** A-2, I-1, C-8은 대조 코퍼스 측정으로 심각도를 조정했고 B-4는 팀이 실제로 쓰는 말이라 예시에서 뺐다. 원어민이 오히려 더 쓰는 표현이나 팀에서 이미 굳은 말을 지우면 사람 글을 AI 글로 만든다.
25
+ **근거가 붙은 룰 (→ 아래 [측정 근거](#측정-근거)):** A-2, I-1, C-8은 대조 코퍼스 측정으로 심각도를 조정했고 B-4는 팀이 실제로 쓰는 말이라 예시에서 뺐다. C-5, C-8, C-10, F-4는 탐지기를 안 붙인 이유가 거기 있다. 원어민이 오히려 더 쓰는 표현이나 팀에서 이미 굳은 말을 지우면 사람 글을 AI 글로 만든다.
26
26
 
27
27
  ---
28
28
 
@@ -101,11 +101,11 @@
101
101
 
102
102
  | ID | 패턴 | 심각도 | 처방 |
103
103
  |---|---|---|---|
104
- | C-5 | 이모지 남발 | S1 | 장르 칼럼·리포트면 전부 삭제 |
104
+ | C-5 | 이모지 남발 | S1 | 장르 칼럼·리포트면 전부 삭제 (탐지기가 없는 이유는 아래 [측정 근거](#측정-근거)) |
105
105
  | C-7 | "먼저·반면·결국" 3단 공식 | S2 | 접속사 1~2개로 줄이거나 본문에 녹여 제거 |
106
- | C-8 | "A인가, B인가" / "A가 아니라 B" 대구 반복 | S1 | 한 번만 살리고 나머지는 비대칭 평서문·직접 단언으로. 대조 코퍼스에서 인간 대비 9.2배(개인 글 기준 18배)로 나온 최강 신호이고 모델 계열을 안 가린다 |
106
+ | C-8 | "A인가, B인가" / "A가 아니라 B" 대구 반복 | S1 | 한 번만 살리고 나머지는 비대칭 평서문·직접 단언으로. 대조 코퍼스에서 인간 대비 9.2배(개인 글 기준 18배)로 나온 최강 신호이고 모델 계열을 안 가린다 (탐지기가 없는 이유는 아래 [측정 근거](#측정-근거)) |
107
107
  | C-9 | 숫자 괄호 인덱싱 "(1)·(2)·(3)" | S2 | 본문에 녹이거나 단순 줄바꿈 |
108
- | C-10 | 콜론 부제 헤딩 "X: Y" 반복 | S1 | 콜론 뒤를 버리고 앞부분만 남긴다. **더 좋은 부제로 바꾸지 않는다** — 부제를 갈아끼우면 패턴이 그대로 남는다. 앞부분만으로 뜻이 안 서면 평서 헤딩 한 문장으로. **단 콜론 앞이 구조 라벨이면 대상이 아니다** — 커밋과 PR 제목의 `type(scope):` 접두와 리뷰 코멘트의 `r:`/`c:`/`a:` 접두, **이 두 형태만** 예외다. 팀이 형식으로 정한 문법이라 라벨은 그대로 두고 콜론 뒤 본문만 다듬는다. 열거에 없는 "X: Y"는 라벨처럼 보여도 예외가 아니다 — "요약: 세 가지"는 그냥 콜론 부제다 |
108
+ | C-10 | 콜론 부제 헤딩 "X: Y" 반복 | S1 | 콜론 뒤를 버리고 앞부분만 남긴다. **더 좋은 부제로 바꾸지 않는다** — 부제를 갈아끼우면 패턴이 그대로 남는다. 앞부분만으로 뜻이 안 서면 평서 헤딩 한 문장으로. **단 콜론 앞이 구조 라벨이면 대상이 아니다** — 커밋과 PR 제목의 `type(scope):` 접두와 리뷰 코멘트의 `r:`/`c:`/`a:` 접두, **이 두 형태만** 예외다. 팀이 형식으로 정한 문법이라 라벨은 그대로 두고 콜론 뒤 본문만 다듬는다. 열거에 없는 "X: Y"는 라벨처럼 보여도 예외가 아니다 — "요약: 세 가지"는 그냥 콜론 부제다 (탐지기가 없는 이유는 아래 [측정 근거](#측정-근거)) |
109
109
  | C-11 | 연결어미 뒤 쉼표 (-고/-며/-지만/-며서/-아서/-어서 직후 쉼표) | S1 | 쉼표 제거. 6+회=강한 신호. KatFish 4.84배 분리도 |
110
110
  | C-12 | 가운뎃점(·) 나열 남발 — 본문 산문에서 "A·B·C"로 항목 압축 | S1 | 쉼표나 구어 연결로 풀기("A, B, C" / "A랑 B하고 C"). 사람은 산문에서 가운뎃점을 거의 안 쓴다. 단 표 안 압축, 용어 목록, 굳어진 합성어("입출력")는 예외 |
111
111
  | C-13 | 같은 문단에서 같은 수치를 다른 단위로 반복 표기("3%" 다음 "3할") — 참조 표현의 숫자만 바꿔 재사용하며 단위를 못 맞춘 경우 | S2 | 단위를 하나로 통일한다. 빌려 쓴 수치 예시는 값과 단위를 통째로 새로 쓴다("3%인데 3할이" → "3%인데 3%가") |
@@ -140,7 +140,7 @@
140
140
 
141
141
  | ID | 패턴 | 심각도 | 처방 |
142
142
  |---|---|---|---|
143
- | F-4 | 한자어 명사화 -성/-적/-화 + 영어 명사화 -tion/-ment/-ness/-ity 누적 (한 글 12회+) | S2 / **대화·리뷰 S1** | 동사·형용사 어근으로 환원("the implementation of the policy" → "정책 시행" 또는 "정책을 시행하기") |
143
+ | F-4 | 한자어 명사화 -성/-적/-화 + 영어 명사화 -tion/-ment/-ness/-ity 누적 (한 글 12회+) | S2 / **대화·리뷰 S1** | 동사·형용사 어근으로 환원("the implementation of the policy" → "정책 시행" 또는 "정책을 시행하기") (탐지기가 없는 이유는 아래 [측정 근거](#측정-근거)) |
144
144
  | F-5 | "~적 N" 추상 체인 ("전략적 함의", "실천적 기반") | S2 / **대화·리뷰 S1** | 명사+명사 또는 풀어쓰기("전략 함의", "실천의 기반") |
145
145
  | F-6 | 복합명사 압축 — 명사구를 조사·동사 없이 이어붙여 개념을 뭉침 ("시안 정합 버그픽스", "유지보수성 개선 작업", "권한 체크 로직") | S2 / **대화·리뷰 S1** | 동사·조사로 풀어 서술 ("디자인 시안과 다르게 렌더링되던 문제", "나중에 유지보수하기 편하게"). 사람은 압축 명사구 대신 무엇을 왜 했는지 풀어 말한다 |
146
146
  | F-7 | 기술·이공계 비유 명사를 일상 대화에 그대로 (증류·배선·결정화·평탄화·오케스트레이션·파이프라인화·축 등, 화학·전기·수학 어휘의 비유 차용) | S2 / **대화·리뷰 S1** | 일상 동사·명사로 환원 (증류 → "추려내다/뽑아내다", 배선 → "연결하다/걸어두다", 결정화 → "정리하다", 평탄화 → "밋밋하게 만들다", **축 → "측면"**·"기준"). 문법은 멀쩡해 룰 매칭이 안 되지만 사람은 대화에서 안 쓴다. "네 축을 잰다"가 아니라 "4가지 측면에서 측정한다". **예외는 그 프로젝트가 개념에 붙인 이름일 때만이고, 그 개념을 다루는 자리에서만이다** — 게슈탈트의 "스펙 결정화"는 `similarity-crystallizer` 에이전트 이름이자 인터뷰→Spec 변환의 정의라서 두지만, 같은 말을 지라 티켓 작성처럼 무관한 자리에 끌어다 쓰면 F-7이다. 코드의 "파이프라인" 자체, 그래프의 x축도 같은 기준. 테스트를 자물쇠에 빗댄 "잠그다"는 방향이 반대라 F-10이 본다 |
@@ -218,6 +218,7 @@ gestalt humanize-check --before before.md --after after.md --register chat
218
218
  ## 측정 근거
219
219
 
220
220
  감으로 올리고 내린 심각도는 다음 사람이 되돌린다. 바꿀 때는 근거를 남긴다.
221
+ **탐지기를 안 붙이기로 한 것도 같다** — 근거가 없으면 다음 사람이 같은 프로토타입을 다시 만든다.
221
222
 
222
223
  ### 대조 코퍼스 (A-2, I-1, C-8)
223
224
 
@@ -234,6 +235,24 @@ AI 생성 산문 60편(모델 3종)과 2022년 이전 발행이 확인된 한국
234
235
  "잘 쓴 글"과의 대조다. 그리고 이 측정은 **문서 산문**을 잰 것이라 대화, 리뷰 코멘트에는 그대로
235
236
  적용되지 않는다 — A-2와 I-1이 대화에서 S1로 남는 이유가 이것이다.
236
237
 
238
+ ### 탐지기를 안 붙인 이유 (C-5, C-8, C-10, F-4)
239
+
240
+ 심각도가 아니라 **코드가 이 룰을 재느냐**를 남긴다. 이 넷은 형태만 보면 셀 수 있어 보여서
241
+ 탐지기 후보로 몇 번 올라온다. 붙여서 레포 마크다운 87개에 돌려본 결과가 아래다.
242
+
243
+ | 룰 | 돌려본 결과 | 왜 못 붙이나 |
244
+ |---|---|---|
245
+ | F-4 명사화 누적 | 87개 중 48개 파일이 임계값을 넘었다 | "한 글에 12회+"가 절대값이라 긴 문서는 내용과 무관하게 넘는다. 길이에 비례하는 값이 아니면 판정이 글자 수를 재는 것이 된다 |
246
+ | C-5 이모지 | 23개 파일 | 스캔은 그 파일이 어느 장르인지 모른다. 규범 문서가 규칙 표기로 쓰는 마커와 산문에 뿌린 이모지가 형태로 같다. 이 룰은 처방부터 "칼럼이나 리포트면"이라는 조건을 달고 있다 |
247
+ | C-10 콜론 헤딩 | 12개 파일 | 걸린 자리가 대부분 `### 4.5단계: 리포트 워싱` 같은 번호 라벨이었다. 예외로 열거한 것은 `type(scope):`와 `r:`/`c:`/`a:` 둘뿐이라 나머지 라벨이 전부 걸린다 |
248
+ | C-8 부정 대구 | 0개 파일 | 오탐은 안 났는데 레포에 표본이 없어 실제로 무엇을 잡는지 확인할 방법이 없었다. 위 대조 코퍼스가 심각도를 올린 근거는 AI 산문이고 이 레포 문서가 아니다 |
249
+
250
+ **임계값을 비율로 바꾸면 F-4는 열린다.** 다만 그 비율을 정하려면 측정이 따로 필요하다.
251
+ 감으로 정한 비율은 감으로 정한 절대값과 다를 게 없다.
252
+
253
+ 나머지 비탐지 S1은 이 표에 없다. 돌려본 적이 없어서다 — 안 붙인 게 아니라 아직 안 본 것이라,
254
+ 여기 적으면 검증한 것처럼 읽힌다.
255
+
237
256
  ### 팀 실제 사용 (B-4)
238
257
 
239
258
  룰이 팀에서 이미 굳은 말을 금지하고 있으면 룰이 틀린 것이다. 산출물을 어색하게 만든다.
@@ -92,6 +92,10 @@ Phase 3의 레포 안 탐색까지 앞당기지는 않는다. 그건 실행 대
92
92
 
93
93
  ### 진행 패널
94
94
 
95
+ 세 Phase를 도는 동안 사용자가 어디까지 왔는지 볼 자리를 만든다. 패널은 best-effort다 — 패널을 못 만들거나 못 고쳐도 인터뷰와 스펙과 실행은 그대로 간다.
96
+
97
+ **`TaskCreate`가 없는 런타임이면 Phase가 바뀔 때마다 한 줄로 대신 알린다.** 이 도구는 호스트가 주는 것이라 없는 런타임이 있다. 없다고 멈추지 않는다.
98
+
95
99
  인터뷰 시작 시 `TaskCreate`로 패널 생성:
96
100
  ```
97
101
  subject: "Solve: {problem 앞 40자}"
@@ -145,6 +149,8 @@ execute 스킬의 전체 파이프라인(Planning → Execution → Evaluate →
145
149
 
146
150
  ### 진행 패널 업데이트
147
151
 
152
+ **Phase 1에서 만든 taskId를 그대로 쓴다.** `execute` 스킬은 자기 `TaskCreate`로 실행 패널을 따로 만들지만 여기서는 그 절을 건너뛴다 — 한 흐름인데 패널이 둘로 갈라지면 사용자가 어느 쪽을 봐야 하는지 모른다.
153
+
148
154
  Execute 시작 시:
149
155
  ```
150
156
  description: "Phase 3/3 — 실행 루프 시작"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.82.0",
3
+ "version": "0.82.2",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gestalt",
3
- "version": "0.82.0",
3
+ "version": "0.82.2",
4
4
  "description": "Gestalt psychology-driven AI development harness. Transforms scattered requirements into structured, validated specifications through interactive interviews.",
5
5
  "author": {
6
6
  "name": "tienne"
package/plugin/.mcp.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "gestalt": {
4
4
  "command": "npx",
5
- "args": ["-y", "@tienne/gestalt@0.82.0", "serve"],
5
+ "args": ["-y", "@tienne/gestalt@0.82.2", "serve"],
6
6
  "startup_timeout_sec": 180,
7
7
  "tool_timeout_sec": 900
8
8
  }
package/plugin/mcp.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "gestalt": {
4
4
  "command": "npx",
5
- "args": ["-y", "@tienne/gestalt@0.82.0", "serve"],
5
+ "args": ["-y", "@tienne/gestalt@0.82.2", "serve"],
6
6
  "startup_timeout_sec": 180,
7
7
  "tool_timeout_sec": 900
8
8
  }
@@ -44,6 +44,9 @@ pnpm build:output-style
44
44
  - 어투 규칙은 **S1으로 올려야 실제로 강제된다.** S2는 모델이 우선순위를 알아서 정하면서 빠져나간다.
45
45
  - 심각도를 바꿀 때는 근거를 남긴다. A-2, I-1, C-8은 대조 코퍼스 측정으로 조정했고 그 근거가
46
46
  [룰북 측정 근거](ai-tell-quick-rules.md#측정-근거)에 있다. 감으로 올리고 내리면 다음 사람이 되돌린다.
47
+ - **탐지기를 안 붙이기로 한 것도 같은 자리에 남긴다.** C-5, C-8, C-10, F-4가 그렇다. 형태로 셀 수
48
+ 있어 보이는 룰이라 후보로 다시 올라오는데, 안 붙인 근거가 없으면 다음 사람이 같은 프로토타입을
49
+ 또 만든다.
47
50
  - 경로를 참조하는 자리가 여러 곳이다. 파일을 옮기거나 이름을 바꾸면 `plugin/` 전체에서
48
51
  상대경로 참조를 다시 확인한다 (에이전트는 `../_shared/references/`, 에이전트의 `references/`
49
52
  하위 문서는 `../../_shared/references/`, 스킬은 `../../role-agents/_shared/references/`).
@@ -22,7 +22,7 @@
22
22
 
23
23
  **은유를 다 지우라는 게 아니다 (F-9 오적용 주의):** 겨냥하는 건 결함이나 코드 상태, 그 결함의 원인 관계를 뭉개 부른 말이다. 그 자리에서 지어낸 별칭이든 이미 있는 비유든 같다. "널 포인터"를 "널 값을 가리키는 포인터"로, "데드락"을 "서로 기다리다 멈춘 상태"로 풀어 쓰면 길이만 늘고 무엇을 말하는지는 오히려 흐려진다. **가르는 기준은 그 자리에서 무엇을 가리키는지가 말에 남아 있느냐 하나뿐이다.** 남이 정의해 둔 이름을 그 뜻 그대로 쓰면 그 기준을 통과한다. 그게 대표 사례다. **"뿌리"는 root 한 단어가 그 대상 이름인 자리에서만 남긴다** — 이를테면 트리와 스레드의 root, 디렉토리와 프로젝트와 git ref의 root다. **root cause처럼 root가 다른 명사를 수식하는 자리는 대상이다** — 원인이면 "원인", 출처면 "출처"로 쓴다. **이 기준이 아래 일반 예외보다 앞선다** — root cause analysis가 문헌에 뜻이 박힌 말이어도 "뿌리"로 옮기면 걸린다. **사전에 비유 뜻풀이가 실렸다는 것만으로는 정의해 둔 이름이 아니다** — "뿌리가 하나다"는 사전에 근본 뜻이 실려도 무엇이 같은지가 안 남는다. 명세나 교과서에 뜻이 박혀 있으면 가리킬 데가 있으니 그대로 둔다. 팀에서 몇 번 쓰였다는 것으로는 예외가 되지 않는다 — 아래 [측정 근거](#측정-근거) 문단과 B-4가 "팀에서 굳은 말"을 지키는 것과는 다른 자리다. B-4는 팀이 쓰기 시작하면 예외로 인정하는데 F-9는 그걸 예외로 안 본다. B-4가 막는 건 어색함이라 팀이 받아쓰면 풀리고 F-9가 막는 건 굳는 것 자체라 팀이 받아쓰면 그게 피해다.
24
24
 
25
- **근거가 붙은 룰 (→ 아래 [측정 근거](#측정-근거)):** A-2, I-1, C-8은 대조 코퍼스 측정으로 심각도를 조정했고 B-4는 팀이 실제로 쓰는 말이라 예시에서 뺐다. 원어민이 오히려 더 쓰는 표현이나 팀에서 이미 굳은 말을 지우면 사람 글을 AI 글로 만든다.
25
+ **근거가 붙은 룰 (→ 아래 [측정 근거](#측정-근거)):** A-2, I-1, C-8은 대조 코퍼스 측정으로 심각도를 조정했고 B-4는 팀이 실제로 쓰는 말이라 예시에서 뺐다. C-5, C-8, C-10, F-4는 탐지기를 안 붙인 이유가 거기 있다. 원어민이 오히려 더 쓰는 표현이나 팀에서 이미 굳은 말을 지우면 사람 글을 AI 글로 만든다.
26
26
 
27
27
  ---
28
28
 
@@ -101,11 +101,11 @@
101
101
 
102
102
  | ID | 패턴 | 심각도 | 처방 |
103
103
  |---|---|---|---|
104
- | C-5 | 이모지 남발 | S1 | 장르 칼럼·리포트면 전부 삭제 |
104
+ | C-5 | 이모지 남발 | S1 | 장르 칼럼·리포트면 전부 삭제 (탐지기가 없는 이유는 아래 [측정 근거](#측정-근거)) |
105
105
  | C-7 | "먼저·반면·결국" 3단 공식 | S2 | 접속사 1~2개로 줄이거나 본문에 녹여 제거 |
106
- | C-8 | "A인가, B인가" / "A가 아니라 B" 대구 반복 | S1 | 한 번만 살리고 나머지는 비대칭 평서문·직접 단언으로. 대조 코퍼스에서 인간 대비 9.2배(개인 글 기준 18배)로 나온 최강 신호이고 모델 계열을 안 가린다 |
106
+ | C-8 | "A인가, B인가" / "A가 아니라 B" 대구 반복 | S1 | 한 번만 살리고 나머지는 비대칭 평서문·직접 단언으로. 대조 코퍼스에서 인간 대비 9.2배(개인 글 기준 18배)로 나온 최강 신호이고 모델 계열을 안 가린다 (탐지기가 없는 이유는 아래 [측정 근거](#측정-근거)) |
107
107
  | C-9 | 숫자 괄호 인덱싱 "(1)·(2)·(3)" | S2 | 본문에 녹이거나 단순 줄바꿈 |
108
- | C-10 | 콜론 부제 헤딩 "X: Y" 반복 | S1 | 콜론 뒤를 버리고 앞부분만 남긴다. **더 좋은 부제로 바꾸지 않는다** — 부제를 갈아끼우면 패턴이 그대로 남는다. 앞부분만으로 뜻이 안 서면 평서 헤딩 한 문장으로. **단 콜론 앞이 구조 라벨이면 대상이 아니다** — 커밋과 PR 제목의 `type(scope):` 접두와 리뷰 코멘트의 `r:`/`c:`/`a:` 접두, **이 두 형태만** 예외다. 팀이 형식으로 정한 문법이라 라벨은 그대로 두고 콜론 뒤 본문만 다듬는다. 열거에 없는 "X: Y"는 라벨처럼 보여도 예외가 아니다 — "요약: 세 가지"는 그냥 콜론 부제다 |
108
+ | C-10 | 콜론 부제 헤딩 "X: Y" 반복 | S1 | 콜론 뒤를 버리고 앞부분만 남긴다. **더 좋은 부제로 바꾸지 않는다** — 부제를 갈아끼우면 패턴이 그대로 남는다. 앞부분만으로 뜻이 안 서면 평서 헤딩 한 문장으로. **단 콜론 앞이 구조 라벨이면 대상이 아니다** — 커밋과 PR 제목의 `type(scope):` 접두와 리뷰 코멘트의 `r:`/`c:`/`a:` 접두, **이 두 형태만** 예외다. 팀이 형식으로 정한 문법이라 라벨은 그대로 두고 콜론 뒤 본문만 다듬는다. 열거에 없는 "X: Y"는 라벨처럼 보여도 예외가 아니다 — "요약: 세 가지"는 그냥 콜론 부제다 (탐지기가 없는 이유는 아래 [측정 근거](#측정-근거)) |
109
109
  | C-11 | 연결어미 뒤 쉼표 (-고/-며/-지만/-며서/-아서/-어서 직후 쉼표) | S1 | 쉼표 제거. 6+회=강한 신호. KatFish 4.84배 분리도 |
110
110
  | C-12 | 가운뎃점(·) 나열 남발 — 본문 산문에서 "A·B·C"로 항목 압축 | S1 | 쉼표나 구어 연결로 풀기("A, B, C" / "A랑 B하고 C"). 사람은 산문에서 가운뎃점을 거의 안 쓴다. 단 표 안 압축, 용어 목록, 굳어진 합성어("입출력")는 예외 |
111
111
  | C-13 | 같은 문단에서 같은 수치를 다른 단위로 반복 표기("3%" 다음 "3할") — 참조 표현의 숫자만 바꿔 재사용하며 단위를 못 맞춘 경우 | S2 | 단위를 하나로 통일한다. 빌려 쓴 수치 예시는 값과 단위를 통째로 새로 쓴다("3%인데 3할이" → "3%인데 3%가") |
@@ -140,7 +140,7 @@
140
140
 
141
141
  | ID | 패턴 | 심각도 | 처방 |
142
142
  |---|---|---|---|
143
- | F-4 | 한자어 명사화 -성/-적/-화 + 영어 명사화 -tion/-ment/-ness/-ity 누적 (한 글 12회+) | S2 / **대화·리뷰 S1** | 동사·형용사 어근으로 환원("the implementation of the policy" → "정책 시행" 또는 "정책을 시행하기") |
143
+ | F-4 | 한자어 명사화 -성/-적/-화 + 영어 명사화 -tion/-ment/-ness/-ity 누적 (한 글 12회+) | S2 / **대화·리뷰 S1** | 동사·형용사 어근으로 환원("the implementation of the policy" → "정책 시행" 또는 "정책을 시행하기") (탐지기가 없는 이유는 아래 [측정 근거](#측정-근거)) |
144
144
  | F-5 | "~적 N" 추상 체인 ("전략적 함의", "실천적 기반") | S2 / **대화·리뷰 S1** | 명사+명사 또는 풀어쓰기("전략 함의", "실천의 기반") |
145
145
  | F-6 | 복합명사 압축 — 명사구를 조사·동사 없이 이어붙여 개념을 뭉침 ("시안 정합 버그픽스", "유지보수성 개선 작업", "권한 체크 로직") | S2 / **대화·리뷰 S1** | 동사·조사로 풀어 서술 ("디자인 시안과 다르게 렌더링되던 문제", "나중에 유지보수하기 편하게"). 사람은 압축 명사구 대신 무엇을 왜 했는지 풀어 말한다 |
146
146
  | F-7 | 기술·이공계 비유 명사를 일상 대화에 그대로 (증류·배선·결정화·평탄화·오케스트레이션·파이프라인화·축 등, 화학·전기·수학 어휘의 비유 차용) | S2 / **대화·리뷰 S1** | 일상 동사·명사로 환원 (증류 → "추려내다/뽑아내다", 배선 → "연결하다/걸어두다", 결정화 → "정리하다", 평탄화 → "밋밋하게 만들다", **축 → "측면"**·"기준"). 문법은 멀쩡해 룰 매칭이 안 되지만 사람은 대화에서 안 쓴다. "네 축을 잰다"가 아니라 "4가지 측면에서 측정한다". **예외는 그 프로젝트가 개념에 붙인 이름일 때만이고, 그 개념을 다루는 자리에서만이다** — 게슈탈트의 "스펙 결정화"는 `similarity-crystallizer` 에이전트 이름이자 인터뷰→Spec 변환의 정의라서 두지만, 같은 말을 지라 티켓 작성처럼 무관한 자리에 끌어다 쓰면 F-7이다. 코드의 "파이프라인" 자체, 그래프의 x축도 같은 기준. 테스트를 자물쇠에 빗댄 "잠그다"는 방향이 반대라 F-10이 본다 |
@@ -218,6 +218,7 @@ gestalt humanize-check --before before.md --after after.md --register chat
218
218
  ## 측정 근거
219
219
 
220
220
  감으로 올리고 내린 심각도는 다음 사람이 되돌린다. 바꿀 때는 근거를 남긴다.
221
+ **탐지기를 안 붙이기로 한 것도 같다** — 근거가 없으면 다음 사람이 같은 프로토타입을 다시 만든다.
221
222
 
222
223
  ### 대조 코퍼스 (A-2, I-1, C-8)
223
224
 
@@ -234,6 +235,24 @@ AI 생성 산문 60편(모델 3종)과 2022년 이전 발행이 확인된 한국
234
235
  "잘 쓴 글"과의 대조다. 그리고 이 측정은 **문서 산문**을 잰 것이라 대화, 리뷰 코멘트에는 그대로
235
236
  적용되지 않는다 — A-2와 I-1이 대화에서 S1로 남는 이유가 이것이다.
236
237
 
238
+ ### 탐지기를 안 붙인 이유 (C-5, C-8, C-10, F-4)
239
+
240
+ 심각도가 아니라 **코드가 이 룰을 재느냐**를 남긴다. 이 넷은 형태만 보면 셀 수 있어 보여서
241
+ 탐지기 후보로 몇 번 올라온다. 붙여서 레포 마크다운 87개에 돌려본 결과가 아래다.
242
+
243
+ | 룰 | 돌려본 결과 | 왜 못 붙이나 |
244
+ |---|---|---|
245
+ | F-4 명사화 누적 | 87개 중 48개 파일이 임계값을 넘었다 | "한 글에 12회+"가 절대값이라 긴 문서는 내용과 무관하게 넘는다. 길이에 비례하는 값이 아니면 판정이 글자 수를 재는 것이 된다 |
246
+ | C-5 이모지 | 23개 파일 | 스캔은 그 파일이 어느 장르인지 모른다. 규범 문서가 규칙 표기로 쓰는 마커와 산문에 뿌린 이모지가 형태로 같다. 이 룰은 처방부터 "칼럼이나 리포트면"이라는 조건을 달고 있다 |
247
+ | C-10 콜론 헤딩 | 12개 파일 | 걸린 자리가 대부분 `### 4.5단계: 리포트 워싱` 같은 번호 라벨이었다. 예외로 열거한 것은 `type(scope):`와 `r:`/`c:`/`a:` 둘뿐이라 나머지 라벨이 전부 걸린다 |
248
+ | C-8 부정 대구 | 0개 파일 | 오탐은 안 났는데 레포에 표본이 없어 실제로 무엇을 잡는지 확인할 방법이 없었다. 위 대조 코퍼스가 심각도를 올린 근거는 AI 산문이고 이 레포 문서가 아니다 |
249
+
250
+ **임계값을 비율로 바꾸면 F-4는 열린다.** 다만 그 비율을 정하려면 측정이 따로 필요하다.
251
+ 감으로 정한 비율은 감으로 정한 절대값과 다를 게 없다.
252
+
253
+ 나머지 비탐지 S1은 이 표에 없다. 돌려본 적이 없어서다 — 안 붙인 게 아니라 아직 안 본 것이라,
254
+ 여기 적으면 검증한 것처럼 읽힌다.
255
+
237
256
  ### 팀 실제 사용 (B-4)
238
257
 
239
258
  룰이 팀에서 이미 굳은 말을 금지하고 있으면 룰이 틀린 것이다. 산출물을 어색하게 만든다.
@@ -92,6 +92,10 @@ Phase 3의 레포 안 탐색까지 앞당기지는 않는다. 그건 실행 대
92
92
 
93
93
  ### 진행 패널
94
94
 
95
+ 세 Phase를 도는 동안 사용자가 어디까지 왔는지 볼 자리를 만든다. 패널은 best-effort다 — 패널을 못 만들거나 못 고쳐도 인터뷰와 스펙과 실행은 그대로 간다.
96
+
97
+ **`TaskCreate`가 없는 런타임이면 Phase가 바뀔 때마다 한 줄로 대신 알린다.** 이 도구는 호스트가 주는 것이라 없는 런타임이 있다. 없다고 멈추지 않는다.
98
+
95
99
  인터뷰 시작 시 `TaskCreate`로 패널 생성:
96
100
  ```
97
101
  subject: "Solve: {problem 앞 40자}"
@@ -145,6 +149,8 @@ execute 스킬의 전체 파이프라인(Planning → Execution → Evaluate →
145
149
 
146
150
  ### 진행 패널 업데이트
147
151
 
152
+ **Phase 1에서 만든 taskId를 그대로 쓴다.** `execute` 스킬은 자기 `TaskCreate`로 실행 패널을 따로 만들지만 여기서는 그 절을 건너뛴다 — 한 흐름인데 패널이 둘로 갈라지면 사용자가 어느 쪽을 봐야 하는지 모른다.
153
+
148
154
  Execute 시작 시:
149
155
  ```
150
156
  description: "Phase 3/3 — 실행 루프 시작"