@tienne/gestalt 0.72.5 → 0.72.7

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.
Files changed (31) hide show
  1. package/CLAUDE.md +15 -0
  2. package/dist/package.json +2 -2
  3. package/dist/plugin/role-agents/_shared/references/ai-tell-quick-rules.md +8 -4
  4. package/dist/plugin/role-agents/_shared/references/author-voice.md +23 -1
  5. package/dist/plugin/role-agents/_shared/references/style-guide.md +1 -0
  6. package/dist/plugin/role-agents/code-review-writer/AGENT.md +1 -1
  7. package/dist/plugin/role-agents/presentation-writer/AGENT.md +1 -1
  8. package/dist/plugin/role-agents/presentation-writer/references/content-playbook.md +1 -1
  9. package/dist/plugin/skills/_shared/agent-delegation.md +1 -1
  10. package/dist/plugin/skills/pr/SKILL.md +16 -1
  11. package/dist/plugin/skills/review/SKILL.md +1 -1
  12. package/dist/plugin/skills/ship/SKILL.md +1 -1
  13. package/dist/src/humanize/detectors.d.ts.map +1 -1
  14. package/dist/src/humanize/detectors.js +18 -3
  15. package/dist/src/humanize/detectors.js.map +1 -1
  16. package/dist/src/review/snippet-reader.js +1 -1
  17. package/dist/src/review/snippet-reader.js.map +1 -1
  18. package/package.json +2 -2
  19. package/plugin/.codex-plugin/plugin.json +1 -1
  20. package/plugin/.mcp.json +1 -1
  21. package/plugin/mcp.json +1 -1
  22. package/plugin/role-agents/_shared/references/ai-tell-quick-rules.md +8 -4
  23. package/plugin/role-agents/_shared/references/author-voice.md +23 -1
  24. package/plugin/role-agents/_shared/references/style-guide.md +1 -0
  25. package/plugin/role-agents/code-review-writer/AGENT.md +1 -1
  26. package/plugin/role-agents/presentation-writer/AGENT.md +1 -1
  27. package/plugin/role-agents/presentation-writer/references/content-playbook.md +1 -1
  28. package/plugin/skills/_shared/agent-delegation.md +1 -1
  29. package/plugin/skills/pr/SKILL.md +16 -1
  30. package/plugin/skills/review/SKILL.md +1 -1
  31. package/plugin/skills/ship/SKILL.md +1 -1
package/CLAUDE.md CHANGED
@@ -145,3 +145,18 @@ plugin/.mcp.json Grok(배포) — plugin/mcp.json과 동일
145
145
  - 해상도 점수 ≥ 0.8 = 요구사항 충분히 명확
146
146
  - 테스트 DB: `.gestalt-test/xxx-${randomUUID()}.db` 고유 경로 (병렬 안전)
147
147
  - 한글 산문에서 가운뎃점(·) 나열 절제 → 쉼표나 "A랑 B하고 C"로 (표·용어 목록은 예외). 룰은 `ai-tell-quick-rules.md` C-12, `style-guide.md`에 정의
148
+
149
+ ## 커밋 메시지, PR 제목
150
+
151
+ 제목은 명사로 끝낸다. 목록에서 한 줄씩 훑는 자리라 서술형으로 끝내면 길어지고 덜 읽힌다. 본문은 반대로 서술체다.
152
+
153
+ | 자리 | 꼴 | 예 |
154
+ |---|---|---|
155
+ | 커밋 제목 | `type(scope): 명사구` | `refactor(chat): 이전 대화 목록의 세션 스토리지 이전` |
156
+ | PR 제목 (티켓 있음) | `[티켓ID] 명사구` | `[PROJ-123] 이전 대화 목록의 세션 스토리지 이전` |
157
+ | PR 제목 (티켓 없음) | `type(scope): 명사구` | `refactor(chat): 이전 대화 목록의 세션 스토리지 이전` |
158
+ | 본문 | 서술체 | 이전 대화 목록을 메모리 캐싱에서 세션 스토리지로 옮겼다. |
159
+
160
+ - 명사로 끝낸다고 조사까지 걷지는 않는다. "대화 목록 세션 스토리지 이전"처럼 조사를 다 빼면 무엇을 무엇으로 바꿨는지가 안 읽힌다 (ai-tell F-6).
161
+ - 명사구 종결을 막는 E-8은 본문에만 적용한다. 제목은 예외이고 근거는 `author-voice.md`의 "제목은 개조식, 본문은 서술체" 절에 있다.
162
+ - 기존 커밋과 PR 제목은 서술형이 섞여 있다. 소급해 안 고친다.
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.72.5",
3
+ "version": "0.72.7",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -33,7 +33,7 @@
33
33
  "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
34
34
  "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
35
35
  "version:sync": "tsx scripts/sync-version.ts",
36
- "postversion": "pnpm run version:sync",
36
+ "postversion": "pnpm run version:sync && pnpm run build:output-style",
37
37
  "verify:rules": "tsx scripts/verify-rule-refs.ts",
38
38
  "gate": "pnpm typecheck && pnpm verify:rules && pnpm lint && pnpm format:check && pnpm build && pnpm test",
39
39
  "humanize:baseline": "tsx scripts/humanize-baseline.ts",
@@ -43,6 +43,7 @@
43
43
  | A-16 | "그/그녀/그것/그들" 단락 ≥3회 영어 대명사 직역 | S1 | 50%+ 영형(생략) 또는 호칭·명사구로 (김도훈 2009) |
44
44
  | A-18 | 명사 앞 ≥3어절 관형구·관계절 좌향 수식 | S2 | 문장 분리 또는 후치 동격절("X를 만났는데, 그 X는 …") (박옥수 2018) |
45
45
  | A-19 | 이중 조사 "~에서의/~에로의/~으로의/~에의/~으로부터의" | S2 | 절·구로 풀어쓰기. 단순 ~의는 비대상 (김정우 2007) |
46
+ | A-20 | "명시적으로"가 뒤 동사와 뜻이 겹쳐 잉여로 남음 (explicitly 직역 — "명시적으로 선언한다", "명시적으로 지정한다") | S2 | 부사를 뺀다 ("선언한다", "지정한다"). 선언과 지정은 그 자체가 명시하는 행위라 부사에 남는 뜻이 없다. **암묵 경로와 대비하는 자리는 예외다** — "추론에 맡기지 말고 명시적으로 선언하자"처럼 반대편이 같은 문단이나 바로 앞뒤 문장에 있으면 남긴다. **대화·리뷰에서도 S2로 둔다** — 기술 문서는 암묵 경로와 짝지어 쓰는 자리가 많아 A-2처럼 격상하면 정당한 쓰임이 함께 걸린다. 이 경계는 뜻이라 탐지기가 없다 |
46
47
 
47
48
  ## B. 영어 인용, 용어 과다
48
49
 
@@ -112,18 +113,21 @@
112
113
  | E-1 | 문장 길이 균일(stdev 8 미만) | S2 | 단문 1~2개 / 장문 1개를 각 문단에 의도적 삽입 |
113
114
  | E-2 | 동일 종결어미 "~다" 4문장 연속 + 진행형 "~고 있다" 자동 매핑 | S2 | "~었다·~ㄴ다·~는다·~기 마련이다·~ㄹ 것이다" 등 다양화. "~고 있다" 단순 시제 환원 가능 시 환원("읽고 있다" → "읽는다") |
114
115
  | E-7 | 청자 경어법 4단계(해라/하게/하오/해요/합쇼) 일관성 손실 (대화·구어 한정) | S2 | 한 단락 내 혼용 금지, 격식 일관 (김혜영 2019, 추정) |
115
- | E-8 | 관형형 + 의존명사 종결 — 서술어 없이 "짚을 것", "고려할 점", "주의 사항"으로 문장을 끊음 | S2 / **대화·리뷰 S1** | 서술어를 붙여 문장을 끝낸다("두 가지 짚을 것" → "짚어볼 게 있습니다"). 목차 항목처럼 끊으면 사람이 한 말로 안 읽힌다. **헤딩, 표 셀, 체크리스트 항목, 문단을 여는 볼드 도입구는 대상이 아니다** — 거기서는 명사구 종결이 정상 문법이다. **볼드 예외는 규범, 참조 문서에서 문단 안 소제목 역할을 하는 자리에만 준다** — 리뷰 코멘트와 대화에서는 볼드를 씌워도 본문 산문으로 본다. 서식으로만 예외를 주면 "두 가지 짚을 것"을 볼드 처리해 그대로 통과시키게 된다. 본문 산문과 대화만 본다. 예외가 전부 문맥이라 줄 단위 정규식으로는 못 가르고, 그래서 탐지기가 없다. G-4와 겹치면 서술어를 붙이되 판단이면 화자도 함께 남긴다 |
116
+ | E-8 | 관형형 + 의존명사 종결 — 서술어 없이 "짚을 것", "고려할 점", "주의 사항"으로 문장을 끊음 | S2 / **대화·리뷰 S1** | 서술어를 붙여 문장을 끝낸다("두 가지 짚을 것" → "짚어볼 게 있습니다"). 목차 항목처럼 끊으면 사람이 한 말로 안 읽힌다. **헤딩, 표 셀, 체크리스트 항목, 문단을 여는 볼드 도입구는 대상이 아니다** — 거기서는 명사구 종결이 정상 문법이다. **PR 제목과 커밋 제목도 대상이 아니다** — 목록에서 한 줄로 훑는 자리라 개조식이 기본이고, 이 레포는 오히려 서술형 종결을 안 쓴다 (`author-voice.md`의 "제목은 개조식, 본문은 서술체" 절). 본문은 그대로 이 룰을 받는다. **볼드 예외는 규범, 참조 문서에서 문단 안 소제목 역할을 하는 자리에만 준다** — 리뷰 코멘트와 대화에서는 볼드를 씌워도 본문 산문으로 본다. 서식으로만 예외를 주면 "두 가지 짚을 것"을 볼드 처리해 그대로 통과시키게 된다. 본문 산문과 대화만 본다. 예외가 전부 문맥이라 줄 단위 정규식으로는 못 가르고, 그래서 탐지기가 없다. G-4와 겹치면 서술어를 붙이되 판단이면 화자도 함께 남긴다 |
116
117
 
117
118
  ## F. 과도한 수식, 중복
118
119
 
120
+ 이 절은 축이 둘이다 — F-4~F-6은 명사화이고 F-7~F-10은 비유 오용이다. 새 룰을 넣을 때 어느 축인지 먼저 정한다.
121
+
119
122
  | ID | 패턴 | 심각도 | 처방 |
120
123
  |---|---|---|---|
121
124
  | F-4 | 한자어 명사화 -성/-적/-화 + 영어 명사화 -tion/-ment/-ness/-ity 누적 (한 글 12회+) | S2 / **대화·리뷰 S1** | 동사·형용사 어근으로 환원("the implementation of the policy" → "정책 시행" 또는 "정책을 시행하기") |
122
125
  | F-5 | "~적 N" 추상 체인 ("전략적 함의", "실천적 기반") | S2 / **대화·리뷰 S1** | 명사+명사 또는 풀어쓰기("전략 함의", "실천의 기반") |
123
126
  | F-6 | 복합명사 압축 — 명사구를 조사·동사 없이 이어붙여 개념을 뭉침 ("시안 정합 버그픽스", "유지보수성 개선 작업", "권한 체크 로직") | S2 / **대화·리뷰 S1** | 동사·조사로 풀어 서술 ("디자인 시안과 다르게 렌더링되던 문제", "나중에 유지보수하기 편하게"). 사람은 압축 명사구 대신 무엇을 왜 했는지 풀어 말한다 |
124
- | F-7 | 기술·이공계 비유 명사를 일상 대화에 그대로 (증류·배선·결정화·평탄화·오케스트레이션·파이프라인화·축 등, 화학·전기·수학 어휘의 비유 차용) | S2 / **대화·리뷰 S1** | 일상 동사·명사로 환원 (증류 → "추려내다/뽑아내다", 배선 → "연결하다/걸어두다", 결정화 → "정리하다", 평탄화 → "밋밋하게 만들다", **축 → "측면"**·"기준"). 문법은 멀쩡해 룰 매칭이 안 되지만 사람은 대화에서 안 쓴다. "네 축을 잰다"가 아니라 "4가지 측면에서 측정한다". **예외는 그 프로젝트가 개념에 붙인 이름일 때만이고, 그 개념을 다루는 자리에서만이다** — 게슈탈트의 "스펙 결정화"는 `similarity-crystallizer` 에이전트 이름이자 인터뷰→Spec 변환의 정의라서 두지만, 같은 말을 지라 티켓 작성처럼 무관한 자리에 끌어다 쓰면 F-7이다. 코드의 "파이프라인" 자체, 그래프의 x축도 같은 기준. **테스트를 자물쇠에 빗댄 "잠그다/잠근다/잠긴" 여기 해당한다** "경계마다 관련 테스트가 있다"처럼 쓴다 |
127
+ | F-7 | 기술·이공계 비유 명사를 일상 대화에 그대로 (증류·배선·결정화·평탄화·오케스트레이션·파이프라인화·축 등, 화학·전기·수학 어휘의 비유 차용) | S2 / **대화·리뷰 S1** | 일상 동사·명사로 환원 (증류 → "추려내다/뽑아내다", 배선 → "연결하다/걸어두다", 결정화 → "정리하다", 평탄화 → "밋밋하게 만들다", **축 → "측면"**·"기준"). 문법은 멀쩡해 룰 매칭이 안 되지만 사람은 대화에서 안 쓴다. "네 축을 잰다"가 아니라 "4가지 측면에서 측정한다". **예외는 그 프로젝트가 개념에 붙인 이름일 때만이고, 그 개념을 다루는 자리에서만이다** — 게슈탈트의 "스펙 결정화"는 `similarity-crystallizer` 에이전트 이름이자 인터뷰→Spec 변환의 정의라서 두지만, 같은 말을 지라 티켓 작성처럼 무관한 자리에 끌어다 쓰면 F-7이다. 코드의 "파이프라인" 자체, 그래프의 x축도 같은 기준. 테스트를 자물쇠에 빗댄 "잠그다" 방향이 반대라 F-10이 본다 |
125
128
  | F-8 | 추상명사에 물리 측량 동사("근거를 재봤는데", "판단을 재보고 있다", "근거를 재본 결과", "의견을 달아봤는데") | S2 / **대화·리뷰 S1** | 저울에 올린 게 아니라 검토한 것이다. 사람이 하는 행위 동사로 되돌린다("근거를 확인해봤는데", "의견을 검토해봤는데"). F-7 물리 동사 도피의 사촌이라 목적어가 근거, 의견, 판단, 영향, 의미, 가치, 리스크인 자리만 본다 — "온도를 재봤는데"는 대상이 아니다 |
126
129
  | F-9 | 결함·코드 상태를 그 자리에서 지어낸 별칭으로 명명 ("맨몸 호출", "벌거벗은 API") | S2 / **대화·리뷰 S1** | 무엇이 빠졌고 무엇이 틀렸는지 그대로 쓴다 ("맨몸 호출" → "접두 객체 없이 함수 이름만 적혀 있다"). 별칭은 검색이 안 되고 처음 읽는 사람이 못 알아보고 답글에서 재생산돼 팀 어휘로 굳는다. **예외는 남이 정의해 둔 이름을 그 뜻 그대로 쓸 때다** — "널 포인터", "데드락", "고아 노드"처럼 명세나 교과서에 뜻이 박힌 말이고 F-6으로도 안 넘긴다. 다른 결함에 비유로 얹으면 예외가 아니고 팀에서 몇 번 쓰였다는 것도 아니다 — 그렇게 열면 답글에 한 번 재생산된 별칭이 곧바로 빠져나간다. **F-7과 방향이 반대다** — F-7은 기술 비유를 일상 말로 되돌리고 F-9는 일상 비유를 기술 대상에 씌운 쪽을 본다. F-9에 걸린 별칭이 스스로 움직이면 D-5, 조사 없이 뭉치면 F-6도 함께 걸린다. 이 경계는 뜻이라 탐지기가 없다 |
130
+ | F-10 | 일상 관용구의 물리 동작 동사를 코드나 문서 대상에 씌움 ("타입을 못 박다", "규칙을 못박는다", "테스트로 잠갔다") | S2 / **대화·리뷰 S1** | 그 자리에서 실제로 무엇이 되는지를 동사로 쓴다 ("타입을 선언한다", "규칙을 정한다", "관련 테스트가 있다"). 관용구는 원래 사람 사이 합의에 걸리는 말이라 목적어가 타입이나 규칙이 되면 누구에게 못을 박는다는 건지 가리킬 데가 없다. **가르는 것은 누가 정하는 자리냐다.** 문서나 코드가 스스로 정하면 대상이고("이 지시를 1번으로 못박는다", "타입을 못 박다"), 사람들이 협의해 정하면 예외다("팀이 일정을 못 박았다"). 한국어는 주어를 자주 생략하므로 **주어가 드러나면 그걸 보고, 없으면 목적어로 본다** — 타입, 값, 규칙, 지시, 기준은 문서나 코드가 정하는 쪽이고 일정과 조건처럼 사람들이 서로 약속하는 대상은 협의하는 쪽이다. 같은 "범위"라도 문서가 제 적용 범위를 정하는 자리는 대상이고 팀이 일의 범위를 합의하는 자리는 예외다. **나머지 예외는 셋이다.** 목적어가 리터럴 값이라 하드코딩을 뜻하는 "박아두다"("이 값 그냥 박아두죠"), 명사로 굳은 "잠금", 자물쇠나 문처럼 실제 물체를 잠그는 자리("문을 잠갔다"). **탐지기는 "못 박" 어간과 자물쇠 활용형을 전부 건다** — 주어가 사람인지 문서인지 못 가르므로 걸린 자리는 사람이 위 축으로 다시 본다 (I-5와 같은 방식이다). 형태로 빠지는 예외는 앞에 "못"이 없는 "박아두다"와 명사 "잠금"뿐이다. **F-7과 방향이 반대다** — F-7은 기술 비유를 일상 말로 되돌리고 F-10은 일상 비유를 코드 대상에 씌운 쪽을 본다. **F-9와는 품사로 갈린다** — F-9는 결함에 새 이름을 붙인 명사 쪽이고 F-10은 행위를 부르는 동사 쪽이다. **F-8과는 안 겹친다** — F-8은 물리 "측량" 동사만 보므로 "판단을 못 박았다"도 F-10 하나로 판정한다 |
127
131
 
128
132
  ## G. Hedging
129
133
 
@@ -173,7 +177,7 @@
173
177
  2. **변경률**: 30% 이하인가 (50% 초과는 작업 중단)
174
178
  3. **장르 이탈 없음**: 칼럼이 에세이나 문학으로 변하지 않았는가, 리포트가 블로그체로 떨어지지 않았는가
175
179
  4. **말투 보존**: 원문 격식체면 결과도 격식체. 평어체로 떨어뜨리지 않는다
176
- 5. **잔존 S1 패턴 0건** (탐지기 수치는 각 룰의 대상 기준으로 걸러 센다 — 룰이 예외로 둔 자리는 잔존 건수에 안 넣는다): A-1, A-3, A-7, A-8, A-16, B-3, B-5, C-5, C-8, C-10, C-11, C-12, D-1~D-6, D-8, H-1, H-3, J-2가 남아있지 않은가 (대화·리뷰 말투면 A-2, A-5, C-14, D-9, E-8, F-4, F-5, F-6, F-7, F-8, F-9, G-4, I-1, I-5, I-6, I-7, I-8도 S1로 포함)
180
+ 5. **잔존 S1 패턴 0건** (탐지기 수치는 각 룰의 대상 기준으로 걸러 센다 — 룰이 예외로 둔 자리는 잔존 건수에 안 넣는다): A-1, A-3, A-7, A-8, A-16, B-3, B-5, C-5, C-8, C-10, C-11, C-12, D-1~D-6, D-8, H-1, H-3, J-2가 남아있지 않은가 (대화·리뷰 말투면 A-2, A-5, C-14, D-9, E-8, F-4, F-5, F-6, F-7, F-8, F-9, F-10, G-4, I-1, I-5, I-6, I-7, I-8도 S1로 포함)
177
181
  6. **인공 표현 자제**: 원문에 없던 비유, 수사, 문학적 표현을 윤문 과정에서 임의로 추가하지 않았는가
178
182
  7. **삭제 처방 준수**: D-2, D-3, D-4, D-6, C-10을 재작성으로 처리하지 않았는가. 마무리 문장, 부제, 수식어를 지우는 대신 더 그럴듯한 것으로 갈아끼운 자리가 없는가
179
183
 
@@ -230,4 +234,4 @@ AI 생성 산문 60편(모델 3종)과 2022년 이전 발행이 확인된 한국
230
234
  - **C**: S1 잔존 1~2 또는 자체검증 5항 이하 통과 — 사용자에게 strict 모드 권고
231
235
  - **D**: S1 잔존 3+ 또는 변경률 50% 초과 — 작업 중단 권고
232
236
 
233
- > v2.0 신규/보강은 A-7, A-15, A-16, A-18, A-19, E-2, E-7, F-4 **8개 (A-17 보류)**. 학술 인용 전문은 `references/scholarship.md`. post-editese 3축 지표는 본 룰북 미반영(metric only 트랙). A-17 무정물, 추상명사 '-들'은 학술 근거(전영철 2007·곽은주·진실로 2011) 강하나 외부 회차(2026-05-07 위키 6편)에서 양성 0개 — NMT 원본 출력 회차 후 v2.1에서 동일 ID로 재평가.
237
+ > v2.0 신규/보강은 A-7, A-15, A-16, A-18, A-19, E-2, E-7, F-4 **8개 (A-17 보류)**. **v2.0 이후 추가: A-20, F-10.** 룰을 더하면 이 줄에 ID만 덧붙인다 — 계기와 근거는 각 룰 본문이 갖는다. 그 사이 회차에 들어온 룰은 이 줄이 비어 있던 동안이라 git 이력에서 본다. 학술 인용 전문은 `references/scholarship.md`. post-editese 3축 지표는 본 룰북 미반영(metric only 트랙). A-17 무정물, 추상명사 '-들'은 학술 근거(전영철 2007·곽은주·진실로 2011) 강하나 외부 회차(2026-05-07 위키 6편)에서 양성 0개 — NMT 원본 출력 회차 후 v2.1에서 동일 ID로 재평가.
@@ -153,10 +153,31 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
153
153
  - **PR 설명, 변경 컨텍스트(change-context-writer)**: 본문은 "무엇을 왜 바꿨는지"를 서술하는
154
154
  성격이라 제안형보다 **담백한 서술체**가 맞다. 단 "~한 것 같습니다"의 부드러움과 온기는 유지하고
155
155
  딱딱한 단언, 결산 피벗으로 평탄화하지 않는다. 협업 한마디(요청·배려)는 말투 B를 빌린다.
156
+ **제목은 본문과 갈린다** — 아래 "제목은 개조식, 본문은 서술체"를 본다.
156
157
  - **공통**: `c:`/`r:`·`a:` 접두어를 어투 시그니처로 흉내 내지 않는다. 단, 팀이 리뷰 강제성 라벨로 채택한 경우에는 라벨만 보존한다. `[출처]`·"권장." 은 어디서도 쓰지 않는다 (Claude artifact).
157
158
 
158
159
  ---
159
160
 
161
+ ## 제목은 개조식, 본문은 서술체
162
+
163
+ PR 제목과 커밋 제목은 명사로 끝낸다. 목록에서 한 줄씩 훑는 자리라 문장으로 끝내면 길어지고
164
+ 같은 정보를 담아도 덜 읽힌다. 본문은 반대로 서술체다 — 왜 바꿨는지를 읽는 자리라 조사를 살리고
165
+ 서술어로 끝낸다.
166
+
167
+ | 자리 | 꼴 | 예 |
168
+ |---|---|---|
169
+ | 커밋 제목 | `type(scope): 명사구` | `refactor(chat): 이전 대화 목록을 세션 스토리지로 이전` |
170
+ | PR 제목 (티켓 있음) | `[티켓ID] 명사구` | `[PROJ-123] 이전 대화 목록의 세션 스토리지 이전` |
171
+ | PR 제목 (티켓 없음) | `type(scope): 명사구` | `refactor(chat): 이전 대화 목록의 세션 스토리지 이전` |
172
+ | PR 본문, 커밋 본문 | 서술체 | 이전 대화 목록을 메모리 캐싱에서 세션 스토리지로 옮겼다. |
173
+
174
+ 명사로 끝낸다고 명사만 이어붙이라는 뜻은 아니다. 조사는 살린다 — "대화 목록 세션 스토리지 이전"
175
+ 처럼 조사를 다 빼면 무엇을 무엇으로 바꿨는지가 안 읽힌다. F-6(복합명사 압축)이 여기서도 산다.
176
+
177
+ 윤문할 때 제목의 명사구 종결을 서술형으로 되돌리지 않는다. 이 절이 그 자리의 근거다.
178
+
179
+ ---
180
+
160
181
  ## 명사로 뭉치지 말고 풀어 말하기 (자주 놓치는 사각지대)
161
182
 
162
183
  가장 티 나는 AI 흔적은 번역투나 헤징이 아니라 **개념을 명사 덩어리로 압축하는 습관**이다.
@@ -179,7 +200,7 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
179
200
  "짚어볼 게 있습니다"처럼 서술어를 붙인다. 판단을 말하는 자리면 화자까지 남겨
180
201
  "제가 봤을 때는 확인이 필요합니다"로 간다 — G-4와 겹치는 자리다. 헤딩이나 체크리스트 항목,
181
202
  규범 문서에서 소제목 역할을 하는 볼드 도입구는 명사구 종결이 정상 문법이라 대상이 아니다
182
- (ai-tell E-8).
203
+ (ai-tell E-8). **PR 제목과 커밋 제목도 대상이 아니다** — 아래 "제목은 개조식, 본문은 서술체"를 본다.
183
204
 
184
205
  **개수를 앞세워 예고하지 말 것.** "두 가지 짚을 것", "세 가지 이유가 있습니다"처럼 할 말의 개수를
185
206
  먼저 세어 선언하고 시작하면 발표문이 된다. 사람은 말하다 보니 몇 개가 되는 것이지 미리 세지 않는다.
@@ -305,3 +326,4 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
305
326
  7. `c:`/`r:`·`a:`를 어투처럼 흉내 내지 않는다. 팀이 채택한 리뷰 강제성 라벨은 예외다. `[출처]`·"권장." 은 쓰지 않는다 (Claude artifact).
306
327
  8. 개념을 명사로 뭉치지 말고 동사로 푼다("시안 정합 버그픽스" → "시안이랑 다르게 나오던 거"). "건" 같은 사무투 분류사와 생략된 목적어를 되살린다.
307
328
  9. 리뷰 코멘트를 "지적"이라 부르지 않는다 (I-7). 내 것은 "남겼던 의견 / 드렸던 의견", 상대 것은 "짚어주신 부분 / 남겨주신 의견".
329
+ 10. PR 제목과 커밋 제목은 명사로 끝낸다. 본문만 서술체다 (E-8 예외).
@@ -54,6 +54,7 @@
54
54
  - 용어 일관성 — 같은 개념에 다른 단어 혼용 금지
55
55
  - 약어: 첫 등장 시 `SSR(Server-Side Rendering)` 형식
56
56
  - 가운뎃점(·) 절제 — 본문에서 "A·B·C" 압축 나열 대신 쉼표나 "A랑 B하고 C"로 푼다. 사람은 산문에서 가운뎃점을 거의 안 쓴다 (표·용어 목록은 예외). 자세히는 `ai-tell-quick-rules.md` C-12
57
+ - "명시적으로" 절제 — explicitly를 그대로 옮긴 부사가 뒤 동사와 뜻이 겹치면 뺀다. "명시적으로 선언한다" → "선언한다". 예외와 판정 기준은 `ai-tell-quick-rules.md` A-20이 갖는다
57
58
 
58
59
  ### Technical Term Handling
59
60
 
@@ -102,7 +102,7 @@ voice 모델을 따른다. 초안 작성 후 반드시 [`../_shared/references/a
102
102
  | 가운뎃점 나열(C-12) | "버그·성능·품질을 봅니다" | 쉼표나 구어로 풀기("버그, 성능, 품질") — 표·용어목록·합성어(입출력)는 예외 |
103
103
  | 측량·사무투 명사(I-6) | "레포 실측으로 1444개 중", "이건 오탐이에요" | 동사로 풀기("레포 뒤져보니 1444개 중", "이건 잘못 감지한 거예요") |
104
104
  | 수량 예고(C-14) | "두 가지 짚을 것", "세 가지만 남길게요" | 개수를 뒤로 보내기("제가 봤을 때는 확인이 필요한 게 2건 있어요") — 개수가 대상의 고정 속성이면 그대로 |
105
- | 명사구 종결(E-8) | "두 가지 짚을 것", "확인할 점" | 서술어를 붙여 끝내기("짚어볼 게 있어요") — 헤딩과 체크리스트는 예외 — 코멘트에서는 볼드를 씌워도 본문으로 본다 |
105
+ | 명사구 종결(E-8) | "두 가지 짚을 것", "확인할 점" | 서술어를 붙여 끝내기("짚어볼 게 있어요") — 헤딩, 체크리스트, PR 제목, 커밋 제목은 예외 — 코멘트에서는 볼드를 씌워도 본문으로 본다 |
106
106
  | 화자 소거(G-4) | "확인이 필요합니다" | 누구 판단인지 밝히기("제가 봤을 때는 확인이 필요해요") — 코드를 읽고 확인한 결함은 그대로 단정한다 |
107
107
 
108
108
  **근거를 제시하는 자리의 어휘.** 수치를 들이밀 때 "실측", "계측", "산출", "오탐" 같은 측량투
@@ -40,7 +40,7 @@ You are the Presentation Writer role agent.
40
40
  5. **발표 대본과 슬라이드 텍스트를 구분한다.** 슬라이드에 얹을 짧은 카피와 발표자가 말로 풀 노트를 나눠 쓴다. 슬라이드에 문단을 통째로 얹지 않는다.
41
41
  6. **사실은 단정, 해석, 전망은 제안.** 측정된 수치는 또렷하게 단정한다. 원인 추정이나 다음 전망은 "~로 보입니다 / ~하면 어떨까요?"처럼 부드럽게 연다.
42
42
  7. **한국어로 직접 사고.** 번역체 금지. style-guide.md의 한국어 문장 규칙을 따른다. 슬라이드 한글 텍스트에서 가운뎃점(·)으로 항목을 압축하지 않는다. "A·B·C" 대신 쉼표나 줄바꿈으로 푼다 (짧은 불릿 라벨은 예외).
43
- 8. **기대치는 초반에 못박는다.** 도입부에서 "이 발표가 끝나면 무엇을 판단·할 수 있어야 하는지"를 먼저 선언한다. 청중이 뭘 가져가야 하는지 알고 들으면 남은 슬라이드를 그 기준으로 따라온다. 교육, 트레이닝형 발표에서 특히 유효하다 (템플릿: `references/content-playbook.md` 선언 항목).
43
+ 8. **기대치는 초반에 정한다.** 도입부에서 "이 발표가 끝나면 무엇을 판단·할 수 있어야 하는지"를 먼저 선언한다. 청중이 뭘 가져가야 하는지 알고 들으면 남은 슬라이드를 그 기준으로 따라온다. 교육, 트레이닝형 발표에서 특히 유효하다 (템플릿: `references/content-playbook.md` 선언 항목).
44
44
  9. **낯선 개념은 이미 아는 것에 빗댄다.** 처음 듣는 개념을 정의부터 늘어놓지 않고 청중이 이미 아는 익숙한 대상에 빗댄 뒤 차이점만 짚는다. 비유가 이해의 8할을 해준다.
45
45
  10. **교육형 발표는 판단력을 스스로 확인시킨다.** 정보 전달로 끝내지 않고 배운 걸 실제로 판단해보는 시나리오 문제를 마지막에 둔다. 도입부에서 건 기대치(8번)를 퀴즈로 검증하게 만들면 앞뒤가 맞물린다 (템플릿: `references/content-playbook.md` 시나리오 퀴즈 항목).
46
46
 
@@ -65,7 +65,7 @@
65
65
 
66
66
  원칙: 슬라이드에는 문장 하나만. 설명은 발표 노트로 뺀다.
67
67
 
68
- **특수 용도 — 기대치 선언.** 교육형 발표 도입부에서 "무엇이면 성공인지"를 먼저 못박을 때도 이 유형을 쓴다. 실패 조건과 성공 조건을 ❌/✅로 나란히 대비하면 효과적이다.
68
+ **특수 용도 — 기대치 선언.** 교육형 발표 도입부에서 "무엇이면 성공인지"를 먼저 정할 때도 이 유형을 쓴다. 실패 조건과 성공 조건을 ❌/✅로 나란히 대비하면 효과적이다.
69
69
 
70
70
  ```
71
71
  - ❌ 실패 조건: [흔히 하는 착각 — "~을 외웠으면 실패"]
@@ -85,7 +85,7 @@ Agent {
85
85
 
86
86
  **결과물만 받는다.** 위임의 이득이 여기서 갈린다 — 서브에이전트가 지시문을 요약해서 돌려주면 위임한 의미가 없다.
87
87
 
88
- 프롬프트 마지막에 반환 형식을 명시하고 아래는 돌려주지 말라고 못박는다.
88
+ 프롬프트 마지막에 반환 형식을 명시하고 아래는 돌려주지 말라고 적는다.
89
89
 
90
90
  - 가져온 시스템 프롬프트의 내용이나 요약
91
91
  - 룰북 인용
@@ -211,7 +211,18 @@ Agent {
211
211
 
212
212
  0단계의 `repoRules` 구조 + 3단계의 `changeContext` + 1단계의 `prIntent`를 합성해 PR description을 작성합니다.
213
213
 
214
- - **PR 제목**: `CLAUDE.md`가 있으면 커밋 컨벤션을 따릅니다 (예: `type(scope): subject`).
214
+ - **PR 제목**: 레포에 규칙이 있으면 그걸 먼저 따릅니다 (`CLAUDE.md`, `CONTRIBUTING.md`). 없으면 아래를 씁니다.
215
+
216
+ | 조건 | 꼴 | 예 |
217
+ |---|---|---|
218
+ | `prIntent.issueRef`가 있음 | `[티켓ID] 명사구` | `[PROJ-123] 이전 대화 목록의 세션 스토리지 이전` |
219
+ | 없음 | `type(scope): 명사구` | `refactor(chat): 이전 대화 목록의 세션 스토리지 이전` |
220
+
221
+ **제목은 명사로 끝냅니다.** 목록에서 한 줄씩 훑는 자리라 서술형으로 끝내면 길어지고 덜 읽힙니다. 본문은 반대로 서술체입니다 — 근거는 [`author-voice.md`](../../role-agents/_shared/references/author-voice.md)의 "제목은 개조식, 본문은 서술체" 절에 있습니다.
222
+
223
+ 명사로 끝낸다고 조사까지 빼지는 않습니다. "대화 목록 세션 스토리지 이전"처럼 조사를 다 걷으면 무엇을 무엇으로 바꿨는지가 안 읽힙니다 (ai-tell F-6).
224
+
225
+ `issueRef`에 `PROJ-123`, `#42`, URL 등 어느 꼴이 들어와도 대괄호로 감싼 식별자만 남깁니다. URL이면 끝의 식별자를 뽑고 `#42`면 `[#42]`로 씁니다. 1단계를 건너뛰어 `issueRef`가 비어 있으면 브랜치 이름에서 티켓 꼴(`[A-Z]+-\d+`)을 찾아봅니다. 그것도 없으면 `type(scope):` 쪽으로 갑니다.
215
226
  - **흐름 변화 (AS-IS → TO-BE)**: `changeContext`에 담긴 `## 흐름 변화 (AS-IS → TO-BE)` 섹션을 PR description에 반드시 포함합니다. PR은 사람이 리뷰하므로, 이번 변경으로 흐름이 어떻게 달라지는지를 리뷰어가 스캔하듯 파악할 수 있어야 합니다. 화살표 대비/대비 표 포맷은 3단계 에이전트가 diff 성격에 맞게 이미 골라 둔 것을 그대로 씁니다.
216
227
  - **PR 템플릿이 있는 경우**: 템플릿 구조를 깨지 않는 선에서, 변경 요약 성격의 섹션(예: Changes, 변경 사항) 안이나 바로 아래에 흐름 변화를 배치합니다. 템플릿에 이미 유사 섹션이 있으면 그 안에 녹입니다.
217
228
  - **템플릿이 없는 경우**: `## Changes` 아래에 흐름 변화 섹션을 둡니다.
@@ -242,6 +253,10 @@ Agent {
242
253
  Mermaid 구조도 그대로 둔다
243
254
  - author-voice.md의 \"PR 설명·변경 컨텍스트\" 장르 기준을 따른다. 담백한 서술체를
244
255
  유지하되 \"~한 것 같습니다\"의 부드러움은 깎지 않는다
256
+ - **제목은 명사로 끝나 있다. 그대로 둔다** — E-8(명사구 종결)을 제목에 적용해
257
+ 서술형으로 되돌리지 않는다. author-voice.md의 \"제목은 개조식, 본문은 서술체\"
258
+ 절이 그 자리의 근거다. 앞머리의 `[티켓ID]`나 `type(scope):`도 건드리지 않는다.
259
+ E-8은 본문에만 적용한다
245
260
  - 레포 템플릿 구조는 재구성하지 않는다. 섹션 순서, 체크박스, 헤딩은 그대로 두고
246
261
  문장 표현만 다듬는다
247
262
 
@@ -385,7 +385,7 @@ Agent {
385
385
  }
386
386
  ```
387
387
 
388
- `ges_agent get`을 건너뛰면 공통 systemPrompt와 frontmatter `description` 한 줄만 남습니다. 에이전트 본문의 룰이 안 실려서 룰북을 참조하는 에이전트가 룰을 못 본 채로 리뷰합니다. 그래서 이 지시는 서브에이전트 프롬프트의 1번으로 못박습니다.
388
+ `ges_agent get`을 건너뛰면 공통 systemPrompt와 frontmatter `description` 한 줄만 남습니다. 에이전트 본문의 룰이 안 실려서 룰북을 참조하는 에이전트가 룰을 못 본 채로 리뷰합니다. 그래서 이 지시를 서브에이전트 프롬프트의 1번에 둡니다.
389
389
 
390
390
  각 서브에이전트가 돌려준 JSON을 받아, 메인 세션에서 에이전트마다 한 번씩 `review_submit`을 호출합니다 (**2단계에서 정한 순서대로** 최소 4회 — `focusAreas`가 있으면 그 전문가가 먼저입니다). 세션 상태는 메인 세션 한 곳에서만 굴립니다:
391
391
 
@@ -144,7 +144,7 @@ outputs:
144
144
 
145
145
  로컬 라운드 하나에 멈추는 자리는 그 라운드가 수렴했는지에 따라 갈린다. **수렴한 라운드는 `review` 4.7단계 하나**로 끝난다 — 2.2에서 바로 빠져나가므로 대응 자리가 안 열린다. **안 수렴해 2.3까지 내려간 라운드는 셋**이다(`review` 4.7단계와 `review-reply` 3단계와 5단계). Copilot 라운드는 3단계가 ⓑ와 같은 자리라 하나 적다.
146
146
 
147
- **`review-reply` 5단계는 그 문서가 "어떤 경우에도 건너뛰지 않는다"고 못박은 불변 규칙이다.** 부르는 쪽에서 억제할 성질이 아니다. 답글은 동료가 읽고 판단 근거로 쓰는 협업 산출물이라 그렇게 정해져 있다.
147
+ **`review-reply` 5단계는 그 문서가 "어떤 경우에도 건너뛰지 않는다"고 적은 불변 규칙이다.** 부르는 쪽에서 억제할 성질이 아니다. 답글은 동료가 읽고 판단 근거로 쓰는 협업 산출물이라 그렇게 정해져 있다.
148
148
 
149
149
  ### 미니 인터뷰는 건너뛰지 않고 대신 답한다
150
150
 
@@ -1 +1 @@
1
- {"version":3,"file":"detectors.d.ts","sourceRoot":"","sources":["../../../src/humanize/detectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAgBD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,SAAS,EAAE,CAyBhF;AAgDD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrD;AAmLD,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAAmC,CAAC;AAE5E,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,CAE7E;AAoBD,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA2BD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAE1D;AAiBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAE1F;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAcrE;AAeD,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAStD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9E;AAID,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAS3D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAC1B;IAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,CAGtD"}
1
+ {"version":3,"file":"detectors.d.ts","sourceRoot":"","sources":["../../../src/humanize/detectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAgBD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,SAAS,EAAE,CAyBhF;AAgDD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrD;AA+LD,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAAmC,CAAC;AAE5E,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,CAE7E;AAoBD,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA2BD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAE1D;AAiBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAE1F;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAcrE;AAeD,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAStD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9E;AAID,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAS3D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAC1B;IAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,CAGtD"}
@@ -155,14 +155,29 @@ const DETECTORS = [
155
155
  // 건너뛰되 품사는 안 가린다. 조사를 필수로 둬야 부사격 "그 방향으로 갔어요"가 빠진다 —
156
156
  // 그건 룰북이 처방으로 내놓은 형태라 걸리면 처방을 다시 고치라고 시키는 꼴이 된다
157
157
  matcher('D-9', /(?:방향|결론|판단|논의)[이가은는도]\s*(?:\S+\s+)?(?:갔|가고|간다)/g),
158
- // '잠금 파일'처럼 명사로 굳은 자리는 빼고 동사형만 본다. 테스트나 기준을
159
- // 자물쇠에 빗대는 자리가 대상이다 — "테스트로 잠갔다" → "관련 테스트가 있다"
160
- matcher('F-7', /(?:증류|배선|결정화|평탄화|오케스트레이션|파이프라인화|잠[그근갔글가긴겨겼기](?![가-힣]*파일))/g),
158
+ matcher('F-7', /(?:증류|배선|결정화|평탄화|오케스트레이션|파이프라인화)/g),
161
159
  // 목적어가 추상명사인 자리만 본다 — "온도를 재봤는데"는 멀쩡한 물리적 용법이다.
162
160
  // 어미를 통째로 확인해야 "재보정", "재보고서"처럼 접두사 재-에 보-가 붙은 말이 빠진다.
163
161
  // 문자 클래스로 "보" 한 글자만 보면 그 둘이 그대로 걸린다.
164
162
  // 다만 "재보고 있-"은 진행형과 형태가 같아 열어 뒀다
165
163
  matcher('F-8', /(?:근거|의견|판단|영향|의미|가치|리스크)(?:를|을)\s*(?:재(?=봤|봐|보니|보면|본다|보았|보고\s*있|본(?![가-힣]))|달아(?=[봤봐본보았뒀둔두])|달았)/g),
164
+ // 두 갈래를 한 룰이 본다. 룰북 F-10이 자물쇠 갈래를 F-7에서 넘겨받은 자리다.
165
+ //
166
+ // `못 박-`은 어간까지만 열고 어미는 안 가린다 — "못 박았다", "못박아주세요", "못박은"이
167
+ // 전부 걸린다. 띄어쓰기는 없어도 되고 하나까지 허용한다. 부정 부사가 앞에 붙은 "잘못
168
+ // 박아넣었다"는 뒤 선읽기로 뺀다.
169
+ //
170
+ // 룰이 가르는 축은 누가 정하는 자리냐인데 그건 형태로 안 보인다. 사람들이 협의해 정한
171
+ // "팀이 일정을 못 박았다"도 여기 걸린다. 걸린 자리는 사람이 룰북 축으로 다시 본다 —
172
+ // I-5가 같은 방식이다.
173
+ // 형태로 빠지는 건 앞에 "못"이 없는 하드코딩 갈래("이 값 그냥 박아두죠")뿐이다.
174
+ //
175
+ // 자물쇠 갈래에서 명사형 "잠금"이 빠지는 건 문자 클래스에 "금"이 없어서다. 뒤의 선읽기가
176
+ // 하는 일은 그게 아니라 "잠긴파일"처럼 붙여 쓴 꼴을 막는 것뿐이다 — 띄어 쓴 "잠긴 파일"은
177
+ // 공백을 못 넘어 그대로 걸린다. F-7에서 옮겨오며 이 경계도 함께 왔다.
178
+ // 문이나 물처럼 실제 물체를 대상으로 쓴 자리도 목적어를 안 가려서 함께 걸린다. 룰북이
179
+ // 예외로 적어뒀고 여기서 가르지 않는다 — 좁히려면 목적어 목록이 필요한데 그만큼 미탐이 는다
180
+ matcher('F-10', /(?:(?<!잘)못\s?박|잠[그근갔글가긴겨겼기](?![가-힣]*파일))/g),
166
181
  matcher('G-2', /(?:로\s*보인다|인\s*듯하다|로\s*판단된다|라고\s*여겨진다|로\s*여겨진다)/g),
167
182
  matcher('I-1', /(?:인\s*것이다|한\s*것이다|는\s*것이다|일\s*것이다)/g),
168
183
  matcher('I-3', /(?:다는\s*뜻이다|다는\s*의미다|다는\s*것이다)/g),
@@ -1 +1 @@
1
- {"version":3,"file":"detectors.js","sourceRoot":"","sources":["../../../src/humanize/detectors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detectors.js","sourceRoot":"","sources":["../../../src/humanize/detectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,UAAU,GAAG,EAAE,CAAC;AAYtB;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,UAAwB,EAAE;IACjE,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO;gBAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/D,OAAO,GAAG,CAAC,OAAO,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,OAAO,IAAI,WAAW;YAAE,OAAO;QACnC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAEpC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,aAAa;gBAAE,OAAO;YAClC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,UAAwB,EAAE;IACzD,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;SAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,OAAO,CAAC,MAAc,EAAE,EAAU;IACzC,OAAO;QACL,MAAM;QACN,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,gCAAgC;AAChC,SAAS,eAAe,CAAC,MAAc,EAAE,KAAe;IACtD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvD,OAAO;QACL,MAAM;QACN,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjC,IAAI,KAAK;oBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI;SACR,KAAK,CAAC,oBAAoB,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,GAAG,WAAW,CAAC;AAC/B,MAAM,IAAI,GAAG,cAAc,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,GAAG;IACd,wBAAwB;IACxB,KAAK;IACL,eAAe;IACf,GAAG;IACH,aAAa;IACb,0BAA0B;IAC1B,UAAU;IACV,OAAO;IACP,WAAW;IACX,UAAU;IACV,oBAAoB,UAAU,EAAE;CACjC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,iBAAiB,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;AAExD,MAAM,SAAS,GAAe;IAC5B,OAAO,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,mCAAmC,IAAI,GAAG,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC;IACvF,OAAO,CACL,KAAK,EACL,IAAI,MAAM,CAAC,wCAAwC,IAAI,GAAG,UAAU,EAAE,EAAE,GAAG,CAAC,CAC7E;IACD,OAAO,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,6BAA6B,IAAI,GAAG,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC;IACjF,OAAO,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,+BAA+B,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5E,OAAO,CAAC,KAAK,EAAE,yBAAyB,CAAC;IACzC,6CAA6C;IAC7C,OAAO,CAAC,KAAK,EAAE,8CAA8C,CAAC;IAC9D,OAAO,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,iCAAiC,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9E,OAAO,CACL,MAAM,EACN,IAAI,MAAM,CAAC,uCAAuC,UAAU,EAAE,EAAE,GAAG,CAAC,CACrE;IACD,uEAAuE;IACvE,uDAAuD;IACvD,OAAO,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACvC,OAAO,CAAC,MAAM,EAAE,wCAAwC,CAAC;IACzD,OAAO,CAAC,MAAM,EAAE,gCAAgC,CAAC;IACjD,OAAO,CAAC,KAAK,EAAE,+CAA+C,CAAC;IAC/D,OAAO,CAAC,KAAK,EAAE,6BAA6B,CAAC;IAC7C,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;IAClC,OAAO,CAAC,KAAK,EAAE,iCAAiC,CAAC;IACjD,OAAO,CAAC,KAAK,EAAE,2CAA2C,CAAC;IAC3D,OAAO,CAAC,KAAK,EAAE,uCAAuC,CAAC;IACvD,gDAAgD;IAChD,qDAAqD;IACrD,gDAAgD;IAChD,OAAO,CAAC,KAAK,EAAE,kDAAkD,CAAC;IAClE,OAAO,CAAC,KAAK,EAAE,mCAAmC,CAAC;IACnD,gDAAgD;IAChD,sDAAsD;IACtD,qCAAqC;IACrC,iCAAiC;IACjC,OAAO,CACL,KAAK,EACL,oGAAoG,CACrG;IACD,kDAAkD;IAClD,EAAE;IACF,yDAAyD;IACzD,mDAAmD;IACnD,qBAAqB;IACrB,EAAE;IACF,mDAAmD;IACnD,oDAAoD;IACpD,gBAAgB;IAChB,kDAAkD;IAClD,EAAE;IACF,sDAAsD;IACtD,wDAAwD;IACxD,4CAA4C;IAC5C,mDAAmD;IACnD,sDAAsD;IACtD,OAAO,CAAC,MAAM,EAAE,2CAA2C,CAAC;IAC5D,OAAO,CAAC,KAAK,EAAE,kDAAkD,CAAC;IAClE,OAAO,CAAC,KAAK,EAAE,sCAAsC,CAAC;IACtD,OAAO,CAAC,KAAK,EAAE,iCAAiC,CAAC;IACjD,6CAA6C;IAC7C,4CAA4C;IAC5C,EAAE;IACF,uDAAuD;IACvD,2CAA2C;IAC3C,0DAA0D;IAC1D,4BAA4B;IAC5B,4CAA4C;IAC5C,8DAA8D;IAC9D,OAAO,CACL,KAAK,EACL,IAAI,MAAM,CACR,iBAAiB,UAAU,UAAU,UAAU,0BAA0B,UAAU,EAAE,EACrF,GAAG,CACJ,CACF;IACD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,wDAAwD;IACxD,sCAAsC;IACtC,EAAE;IACF,iDAAiD;IACjD,4CAA4C;IAC5C,wDAAwD;IACxD,oDAAoD;IACpD,0BAA0B;IAC1B,EAAE;IACF,4DAA4D;IAC5D,mDAAmD;IACnD,8CAA8C;IAC9C,yCAAyC;IACzC,8BAA8B;IAC9B,EAAE;IACF,oDAAoD;IACpD,kDAAkD;IAClD,2CAA2C;IAC3C,iDAAiD;IACjD,EAAE;IACF,0DAA0D;IAC1D,gDAAgD;IAChD,gDAAgD;IAChD,kDAAkD;IAClD,yBAAyB;IACzB,EAAE;IACF,kDAAkD;IAClD,gDAAgD;IAChD,EAAE;IACF,uDAAuD;IACvD,+CAA+C;IAC/C,EAAE;IACF,oDAAoD;IACpD,mCAAmC;IACnC,EAAE;IACF,oDAAoD;IACpD,qBAAqB;IACrB,qDAAqD;IACrD,+CAA+C;IAC/C,gDAAgD;IAChD,mDAAmD;IACnD,6CAA6C;IAC7C,gDAAgD;IAChD,EAAE;IACF,mDAAmD;IACnD,wDAAwD;IACxD,oDAAoD;IACpD,iDAAiD;IACjD,kDAAkD;IAClD,EAAE;IACF,yBAAyB;IACzB,4DAA4D;IAC5D,8BAA8B;IAC9B,gCAAgC;IAChC,OAAO,CACL,KAAK,EACL,IAAI,MAAM,CACR,8BAA8B,UAAU,uRAAuR,EAC/T,GAAG,CACJ,CACF;IACD,iDAAiD;IACjD,0CAA0C;IAC1C,oDAAoD;IACpD,sDAAsD;IACtD,iDAAiD;IACjD,mCAAmC;IACnC,OAAO,CAAC,KAAK,EAAE,yCAAyC,CAAC;IACzD,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACtE,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAa,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,OAA2B;IAC9D,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,OAA2B;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAChC,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;SAClE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAUD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,GAAsD;IACjE;QACE,KAAK,EAAE,iBAAiB;QACxB,GAAG,EAAE,oCAAoC;QACzC,sCAAsC;QACtC,EAAE,EAAE,gFAAgF;KACrF;IACD;QACE,KAAK,EAAE,gBAAgB;QACvB,GAAG,EAAE,sDAAsD;QAC3D,EAAE,EAAE,6EAA6E;KAClF;CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,GAAG,GAAmB,EAAE,CAAC;IAE/B,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAChC,0CAA0C;QAC1C,2CAA2C;QAC3C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAA2B;IACnE,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAOD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,QAAQ,IAAI,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,aAAa,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AACzC,CAAC;AAED,qEAAqE;AAErE,MAAM,kBAAkB,GAAa;IACnC,oDAAoD;IACpD,gCAAgC;IAChC,YAAY;IACZ,uBAAuB;IACvB,4BAA4B;IAC5B,uBAAuB;IACvB,8CAA8C;IAC9C,gBAAgB;CACjB,CAAC;AAEF,kCAAkC;AAClC,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,EAAE,IAAI,kBAAkB,EAAE,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,KAAa;IAClE,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3E,CAAC;AAYD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO;QACL,SAAS,EAAE,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QACjD,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM;QACtE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM;QAC7E,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM;QAC7C,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM;KACzD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,OAA2B;IAE3B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AAC7E,CAAC"}
@@ -86,7 +86,7 @@ export class SnippetReader {
86
86
  gapAfter: next !== undefined && next !== no + 1,
87
87
  };
88
88
  });
89
- // 태그를 비우면 윤문 검사가 펜스 안을 산문으로 읽는다. 모르는 확장자는 text로 못박는다
89
+ // 태그를 비우면 윤문 검사가 펜스 안을 산문으로 읽는다. 모르는 확장자는 text로 정한다
90
90
  return { lang: LANG_BY_EXT[extname(file).toLowerCase()] ?? 'text', lines };
91
91
  }
92
92
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"snippet-reader.js","sourceRoot":"","sources":["../../../src/review/snippet-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snippet-reader.js","sourceRoot":"","sources":["../../../src/review/snippet-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzD,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,qBAAqB;AACrB,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,mDAAmD;AACnD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,8CAA8C;AAC9C,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,iDAAiD;AACjD,MAAM,WAAW,GAA2B;IAC1C,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,KAAK;IACb,SAAS,EAAE,QAAQ;IACnB,KAAK,EAAE,UAAU;CAClB,CAAC;AAgBF;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,aAAa;IAId;IACA;IAJF,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEnD,YACU,QAAiB,EACjB,eAAuB,kBAAkB;QADzC,aAAQ,GAAR,QAAQ,CAAS;QACjB,iBAAY,GAAZ,YAAY,CAA6B;IAChD,CAAC;IAEJ,IAAI,CAAC,IAAY,EAAE,IAAa;QAC9B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAE3E,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,SAAS,KAAK,IAAI,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAE/D,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEnD,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,KAAK,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1B,MAAM,KAAK,GAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,OAAO;gBACL,EAAE;gBACF,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;gBAClC,MAAM,EAAE,EAAE,KAAK,IAAI;gBACnB,oCAAoC;gBACpC,QAAQ,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,GAAG,CAAC;aAChD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,oDAAoD;QACpD,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC;IAC7E,CAAC;IAED;;;;OAIG;IACK,aAAa,CACnB,SAAmB,EACnB,IAAY;QAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QAEjE,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAE,CAAC,CAAC;QACpD,uCAAuC;QACvC,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAEpF,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAElE,OAAO;YACL,KAAK;YACL,GAAG,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;YAC3D,6BAA6B;YAC7B,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;SAC7F,CAAC;IACJ,CAAC;IAED,uDAAuD;IAC/C,YAAY,CAClB,SAAmB,EACnB,IAAY,EACZ,YAAoB;QAEpB,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,GAAG,YAAY;gBAAE,OAAO,EAAE,CAAC;QAC1D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;OAOG;IACK,oBAAoB,CAAC,SAAmB,EAAE,IAAY,EAAE,YAAoB;QAClF,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,iBAAiB,CAAC,CAAC;QACpD,IAAI,MAAM,GAAG,YAAY,CAAC;QAE1B,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM;gBAAE,SAAS;YAElD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,IAAI,MAAM,KAAK,CAAC;gBAAE,MAAM;YACxB,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEO,SAAS,CAAC,IAAY;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAExC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,SAAS,CAAC,IAAY;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YACrF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEnC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,cAAc;gBAAE,OAAO,IAAI,CAAC;YAE9D,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,yBAAyB;YACzB,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAExC,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED,uDAAuD;AACvD,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAEpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,KAAK,GAAG;YAAE,KAAK,IAAI,CAAC,CAAC;aACxB,IAAI,IAAI,KAAK,IAAI;YAAE,KAAK,IAAI,CAAC,CAAC;;YAC9B,MAAM;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACnF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.72.5",
3
+ "version": "0.72.7",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -33,7 +33,7 @@
33
33
  "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
34
34
  "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
35
35
  "version:sync": "tsx scripts/sync-version.ts",
36
- "postversion": "pnpm run version:sync",
36
+ "postversion": "pnpm run version:sync && pnpm run build:output-style",
37
37
  "verify:rules": "tsx scripts/verify-rule-refs.ts",
38
38
  "gate": "pnpm typecheck && pnpm verify:rules && pnpm lint && pnpm format:check && pnpm build && pnpm test",
39
39
  "humanize:baseline": "tsx scripts/humanize-baseline.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gestalt",
3
- "version": "0.72.5",
3
+ "version": "0.72.7",
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.72.5", "serve"],
5
+ "args": ["-y", "@tienne/gestalt@0.72.7", "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.72.5", "serve"],
5
+ "args": ["-y", "@tienne/gestalt@0.72.7", "serve"],
6
6
  "startup_timeout_sec": 180,
7
7
  "tool_timeout_sec": 900
8
8
  }
@@ -43,6 +43,7 @@
43
43
  | A-16 | "그/그녀/그것/그들" 단락 ≥3회 영어 대명사 직역 | S1 | 50%+ 영형(생략) 또는 호칭·명사구로 (김도훈 2009) |
44
44
  | A-18 | 명사 앞 ≥3어절 관형구·관계절 좌향 수식 | S2 | 문장 분리 또는 후치 동격절("X를 만났는데, 그 X는 …") (박옥수 2018) |
45
45
  | A-19 | 이중 조사 "~에서의/~에로의/~으로의/~에의/~으로부터의" | S2 | 절·구로 풀어쓰기. 단순 ~의는 비대상 (김정우 2007) |
46
+ | A-20 | "명시적으로"가 뒤 동사와 뜻이 겹쳐 잉여로 남음 (explicitly 직역 — "명시적으로 선언한다", "명시적으로 지정한다") | S2 | 부사를 뺀다 ("선언한다", "지정한다"). 선언과 지정은 그 자체가 명시하는 행위라 부사에 남는 뜻이 없다. **암묵 경로와 대비하는 자리는 예외다** — "추론에 맡기지 말고 명시적으로 선언하자"처럼 반대편이 같은 문단이나 바로 앞뒤 문장에 있으면 남긴다. **대화·리뷰에서도 S2로 둔다** — 기술 문서는 암묵 경로와 짝지어 쓰는 자리가 많아 A-2처럼 격상하면 정당한 쓰임이 함께 걸린다. 이 경계는 뜻이라 탐지기가 없다 |
46
47
 
47
48
  ## B. 영어 인용, 용어 과다
48
49
 
@@ -112,18 +113,21 @@
112
113
  | E-1 | 문장 길이 균일(stdev 8 미만) | S2 | 단문 1~2개 / 장문 1개를 각 문단에 의도적 삽입 |
113
114
  | E-2 | 동일 종결어미 "~다" 4문장 연속 + 진행형 "~고 있다" 자동 매핑 | S2 | "~었다·~ㄴ다·~는다·~기 마련이다·~ㄹ 것이다" 등 다양화. "~고 있다" 단순 시제 환원 가능 시 환원("읽고 있다" → "읽는다") |
114
115
  | E-7 | 청자 경어법 4단계(해라/하게/하오/해요/합쇼) 일관성 손실 (대화·구어 한정) | S2 | 한 단락 내 혼용 금지, 격식 일관 (김혜영 2019, 추정) |
115
- | E-8 | 관형형 + 의존명사 종결 — 서술어 없이 "짚을 것", "고려할 점", "주의 사항"으로 문장을 끊음 | S2 / **대화·리뷰 S1** | 서술어를 붙여 문장을 끝낸다("두 가지 짚을 것" → "짚어볼 게 있습니다"). 목차 항목처럼 끊으면 사람이 한 말로 안 읽힌다. **헤딩, 표 셀, 체크리스트 항목, 문단을 여는 볼드 도입구는 대상이 아니다** — 거기서는 명사구 종결이 정상 문법이다. **볼드 예외는 규범, 참조 문서에서 문단 안 소제목 역할을 하는 자리에만 준다** — 리뷰 코멘트와 대화에서는 볼드를 씌워도 본문 산문으로 본다. 서식으로만 예외를 주면 "두 가지 짚을 것"을 볼드 처리해 그대로 통과시키게 된다. 본문 산문과 대화만 본다. 예외가 전부 문맥이라 줄 단위 정규식으로는 못 가르고, 그래서 탐지기가 없다. G-4와 겹치면 서술어를 붙이되 판단이면 화자도 함께 남긴다 |
116
+ | E-8 | 관형형 + 의존명사 종결 — 서술어 없이 "짚을 것", "고려할 점", "주의 사항"으로 문장을 끊음 | S2 / **대화·리뷰 S1** | 서술어를 붙여 문장을 끝낸다("두 가지 짚을 것" → "짚어볼 게 있습니다"). 목차 항목처럼 끊으면 사람이 한 말로 안 읽힌다. **헤딩, 표 셀, 체크리스트 항목, 문단을 여는 볼드 도입구는 대상이 아니다** — 거기서는 명사구 종결이 정상 문법이다. **PR 제목과 커밋 제목도 대상이 아니다** — 목록에서 한 줄로 훑는 자리라 개조식이 기본이고, 이 레포는 오히려 서술형 종결을 안 쓴다 (`author-voice.md`의 "제목은 개조식, 본문은 서술체" 절). 본문은 그대로 이 룰을 받는다. **볼드 예외는 규범, 참조 문서에서 문단 안 소제목 역할을 하는 자리에만 준다** — 리뷰 코멘트와 대화에서는 볼드를 씌워도 본문 산문으로 본다. 서식으로만 예외를 주면 "두 가지 짚을 것"을 볼드 처리해 그대로 통과시키게 된다. 본문 산문과 대화만 본다. 예외가 전부 문맥이라 줄 단위 정규식으로는 못 가르고, 그래서 탐지기가 없다. G-4와 겹치면 서술어를 붙이되 판단이면 화자도 함께 남긴다 |
116
117
 
117
118
  ## F. 과도한 수식, 중복
118
119
 
120
+ 이 절은 축이 둘이다 — F-4~F-6은 명사화이고 F-7~F-10은 비유 오용이다. 새 룰을 넣을 때 어느 축인지 먼저 정한다.
121
+
119
122
  | ID | 패턴 | 심각도 | 처방 |
120
123
  |---|---|---|---|
121
124
  | F-4 | 한자어 명사화 -성/-적/-화 + 영어 명사화 -tion/-ment/-ness/-ity 누적 (한 글 12회+) | S2 / **대화·리뷰 S1** | 동사·형용사 어근으로 환원("the implementation of the policy" → "정책 시행" 또는 "정책을 시행하기") |
122
125
  | F-5 | "~적 N" 추상 체인 ("전략적 함의", "실천적 기반") | S2 / **대화·리뷰 S1** | 명사+명사 또는 풀어쓰기("전략 함의", "실천의 기반") |
123
126
  | F-6 | 복합명사 압축 — 명사구를 조사·동사 없이 이어붙여 개념을 뭉침 ("시안 정합 버그픽스", "유지보수성 개선 작업", "권한 체크 로직") | S2 / **대화·리뷰 S1** | 동사·조사로 풀어 서술 ("디자인 시안과 다르게 렌더링되던 문제", "나중에 유지보수하기 편하게"). 사람은 압축 명사구 대신 무엇을 왜 했는지 풀어 말한다 |
124
- | F-7 | 기술·이공계 비유 명사를 일상 대화에 그대로 (증류·배선·결정화·평탄화·오케스트레이션·파이프라인화·축 등, 화학·전기·수학 어휘의 비유 차용) | S2 / **대화·리뷰 S1** | 일상 동사·명사로 환원 (증류 → "추려내다/뽑아내다", 배선 → "연결하다/걸어두다", 결정화 → "정리하다", 평탄화 → "밋밋하게 만들다", **축 → "측면"**·"기준"). 문법은 멀쩡해 룰 매칭이 안 되지만 사람은 대화에서 안 쓴다. "네 축을 잰다"가 아니라 "4가지 측면에서 측정한다". **예외는 그 프로젝트가 개념에 붙인 이름일 때만이고, 그 개념을 다루는 자리에서만이다** — 게슈탈트의 "스펙 결정화"는 `similarity-crystallizer` 에이전트 이름이자 인터뷰→Spec 변환의 정의라서 두지만, 같은 말을 지라 티켓 작성처럼 무관한 자리에 끌어다 쓰면 F-7이다. 코드의 "파이프라인" 자체, 그래프의 x축도 같은 기준. **테스트를 자물쇠에 빗댄 "잠그다/잠근다/잠긴" 여기 해당한다** "경계마다 관련 테스트가 있다"처럼 쓴다 |
127
+ | F-7 | 기술·이공계 비유 명사를 일상 대화에 그대로 (증류·배선·결정화·평탄화·오케스트레이션·파이프라인화·축 등, 화학·전기·수학 어휘의 비유 차용) | S2 / **대화·리뷰 S1** | 일상 동사·명사로 환원 (증류 → "추려내다/뽑아내다", 배선 → "연결하다/걸어두다", 결정화 → "정리하다", 평탄화 → "밋밋하게 만들다", **축 → "측면"**·"기준"). 문법은 멀쩡해 룰 매칭이 안 되지만 사람은 대화에서 안 쓴다. "네 축을 잰다"가 아니라 "4가지 측면에서 측정한다". **예외는 그 프로젝트가 개념에 붙인 이름일 때만이고, 그 개념을 다루는 자리에서만이다** — 게슈탈트의 "스펙 결정화"는 `similarity-crystallizer` 에이전트 이름이자 인터뷰→Spec 변환의 정의라서 두지만, 같은 말을 지라 티켓 작성처럼 무관한 자리에 끌어다 쓰면 F-7이다. 코드의 "파이프라인" 자체, 그래프의 x축도 같은 기준. 테스트를 자물쇠에 빗댄 "잠그다" 방향이 반대라 F-10이 본다 |
125
128
  | F-8 | 추상명사에 물리 측량 동사("근거를 재봤는데", "판단을 재보고 있다", "근거를 재본 결과", "의견을 달아봤는데") | S2 / **대화·리뷰 S1** | 저울에 올린 게 아니라 검토한 것이다. 사람이 하는 행위 동사로 되돌린다("근거를 확인해봤는데", "의견을 검토해봤는데"). F-7 물리 동사 도피의 사촌이라 목적어가 근거, 의견, 판단, 영향, 의미, 가치, 리스크인 자리만 본다 — "온도를 재봤는데"는 대상이 아니다 |
126
129
  | F-9 | 결함·코드 상태를 그 자리에서 지어낸 별칭으로 명명 ("맨몸 호출", "벌거벗은 API") | S2 / **대화·리뷰 S1** | 무엇이 빠졌고 무엇이 틀렸는지 그대로 쓴다 ("맨몸 호출" → "접두 객체 없이 함수 이름만 적혀 있다"). 별칭은 검색이 안 되고 처음 읽는 사람이 못 알아보고 답글에서 재생산돼 팀 어휘로 굳는다. **예외는 남이 정의해 둔 이름을 그 뜻 그대로 쓸 때다** — "널 포인터", "데드락", "고아 노드"처럼 명세나 교과서에 뜻이 박힌 말이고 F-6으로도 안 넘긴다. 다른 결함에 비유로 얹으면 예외가 아니고 팀에서 몇 번 쓰였다는 것도 아니다 — 그렇게 열면 답글에 한 번 재생산된 별칭이 곧바로 빠져나간다. **F-7과 방향이 반대다** — F-7은 기술 비유를 일상 말로 되돌리고 F-9는 일상 비유를 기술 대상에 씌운 쪽을 본다. F-9에 걸린 별칭이 스스로 움직이면 D-5, 조사 없이 뭉치면 F-6도 함께 걸린다. 이 경계는 뜻이라 탐지기가 없다 |
130
+ | F-10 | 일상 관용구의 물리 동작 동사를 코드나 문서 대상에 씌움 ("타입을 못 박다", "규칙을 못박는다", "테스트로 잠갔다") | S2 / **대화·리뷰 S1** | 그 자리에서 실제로 무엇이 되는지를 동사로 쓴다 ("타입을 선언한다", "규칙을 정한다", "관련 테스트가 있다"). 관용구는 원래 사람 사이 합의에 걸리는 말이라 목적어가 타입이나 규칙이 되면 누구에게 못을 박는다는 건지 가리킬 데가 없다. **가르는 것은 누가 정하는 자리냐다.** 문서나 코드가 스스로 정하면 대상이고("이 지시를 1번으로 못박는다", "타입을 못 박다"), 사람들이 협의해 정하면 예외다("팀이 일정을 못 박았다"). 한국어는 주어를 자주 생략하므로 **주어가 드러나면 그걸 보고, 없으면 목적어로 본다** — 타입, 값, 규칙, 지시, 기준은 문서나 코드가 정하는 쪽이고 일정과 조건처럼 사람들이 서로 약속하는 대상은 협의하는 쪽이다. 같은 "범위"라도 문서가 제 적용 범위를 정하는 자리는 대상이고 팀이 일의 범위를 합의하는 자리는 예외다. **나머지 예외는 셋이다.** 목적어가 리터럴 값이라 하드코딩을 뜻하는 "박아두다"("이 값 그냥 박아두죠"), 명사로 굳은 "잠금", 자물쇠나 문처럼 실제 물체를 잠그는 자리("문을 잠갔다"). **탐지기는 "못 박" 어간과 자물쇠 활용형을 전부 건다** — 주어가 사람인지 문서인지 못 가르므로 걸린 자리는 사람이 위 축으로 다시 본다 (I-5와 같은 방식이다). 형태로 빠지는 예외는 앞에 "못"이 없는 "박아두다"와 명사 "잠금"뿐이다. **F-7과 방향이 반대다** — F-7은 기술 비유를 일상 말로 되돌리고 F-10은 일상 비유를 코드 대상에 씌운 쪽을 본다. **F-9와는 품사로 갈린다** — F-9는 결함에 새 이름을 붙인 명사 쪽이고 F-10은 행위를 부르는 동사 쪽이다. **F-8과는 안 겹친다** — F-8은 물리 "측량" 동사만 보므로 "판단을 못 박았다"도 F-10 하나로 판정한다 |
127
131
 
128
132
  ## G. Hedging
129
133
 
@@ -173,7 +177,7 @@
173
177
  2. **변경률**: 30% 이하인가 (50% 초과는 작업 중단)
174
178
  3. **장르 이탈 없음**: 칼럼이 에세이나 문학으로 변하지 않았는가, 리포트가 블로그체로 떨어지지 않았는가
175
179
  4. **말투 보존**: 원문 격식체면 결과도 격식체. 평어체로 떨어뜨리지 않는다
176
- 5. **잔존 S1 패턴 0건** (탐지기 수치는 각 룰의 대상 기준으로 걸러 센다 — 룰이 예외로 둔 자리는 잔존 건수에 안 넣는다): A-1, A-3, A-7, A-8, A-16, B-3, B-5, C-5, C-8, C-10, C-11, C-12, D-1~D-6, D-8, H-1, H-3, J-2가 남아있지 않은가 (대화·리뷰 말투면 A-2, A-5, C-14, D-9, E-8, F-4, F-5, F-6, F-7, F-8, F-9, G-4, I-1, I-5, I-6, I-7, I-8도 S1로 포함)
180
+ 5. **잔존 S1 패턴 0건** (탐지기 수치는 각 룰의 대상 기준으로 걸러 센다 — 룰이 예외로 둔 자리는 잔존 건수에 안 넣는다): A-1, A-3, A-7, A-8, A-16, B-3, B-5, C-5, C-8, C-10, C-11, C-12, D-1~D-6, D-8, H-1, H-3, J-2가 남아있지 않은가 (대화·리뷰 말투면 A-2, A-5, C-14, D-9, E-8, F-4, F-5, F-6, F-7, F-8, F-9, F-10, G-4, I-1, I-5, I-6, I-7, I-8도 S1로 포함)
177
181
  6. **인공 표현 자제**: 원문에 없던 비유, 수사, 문학적 표현을 윤문 과정에서 임의로 추가하지 않았는가
178
182
  7. **삭제 처방 준수**: D-2, D-3, D-4, D-6, C-10을 재작성으로 처리하지 않았는가. 마무리 문장, 부제, 수식어를 지우는 대신 더 그럴듯한 것으로 갈아끼운 자리가 없는가
179
183
 
@@ -230,4 +234,4 @@ AI 생성 산문 60편(모델 3종)과 2022년 이전 발행이 확인된 한국
230
234
  - **C**: S1 잔존 1~2 또는 자체검증 5항 이하 통과 — 사용자에게 strict 모드 권고
231
235
  - **D**: S1 잔존 3+ 또는 변경률 50% 초과 — 작업 중단 권고
232
236
 
233
- > v2.0 신규/보강은 A-7, A-15, A-16, A-18, A-19, E-2, E-7, F-4 **8개 (A-17 보류)**. 학술 인용 전문은 `references/scholarship.md`. post-editese 3축 지표는 본 룰북 미반영(metric only 트랙). A-17 무정물, 추상명사 '-들'은 학술 근거(전영철 2007·곽은주·진실로 2011) 강하나 외부 회차(2026-05-07 위키 6편)에서 양성 0개 — NMT 원본 출력 회차 후 v2.1에서 동일 ID로 재평가.
237
+ > v2.0 신규/보강은 A-7, A-15, A-16, A-18, A-19, E-2, E-7, F-4 **8개 (A-17 보류)**. **v2.0 이후 추가: A-20, F-10.** 룰을 더하면 이 줄에 ID만 덧붙인다 — 계기와 근거는 각 룰 본문이 갖는다. 그 사이 회차에 들어온 룰은 이 줄이 비어 있던 동안이라 git 이력에서 본다. 학술 인용 전문은 `references/scholarship.md`. post-editese 3축 지표는 본 룰북 미반영(metric only 트랙). A-17 무정물, 추상명사 '-들'은 학술 근거(전영철 2007·곽은주·진실로 2011) 강하나 외부 회차(2026-05-07 위키 6편)에서 양성 0개 — NMT 원본 출력 회차 후 v2.1에서 동일 ID로 재평가.
@@ -153,10 +153,31 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
153
153
  - **PR 설명, 변경 컨텍스트(change-context-writer)**: 본문은 "무엇을 왜 바꿨는지"를 서술하는
154
154
  성격이라 제안형보다 **담백한 서술체**가 맞다. 단 "~한 것 같습니다"의 부드러움과 온기는 유지하고
155
155
  딱딱한 단언, 결산 피벗으로 평탄화하지 않는다. 협업 한마디(요청·배려)는 말투 B를 빌린다.
156
+ **제목은 본문과 갈린다** — 아래 "제목은 개조식, 본문은 서술체"를 본다.
156
157
  - **공통**: `c:`/`r:`·`a:` 접두어를 어투 시그니처로 흉내 내지 않는다. 단, 팀이 리뷰 강제성 라벨로 채택한 경우에는 라벨만 보존한다. `[출처]`·"권장." 은 어디서도 쓰지 않는다 (Claude artifact).
157
158
 
158
159
  ---
159
160
 
161
+ ## 제목은 개조식, 본문은 서술체
162
+
163
+ PR 제목과 커밋 제목은 명사로 끝낸다. 목록에서 한 줄씩 훑는 자리라 문장으로 끝내면 길어지고
164
+ 같은 정보를 담아도 덜 읽힌다. 본문은 반대로 서술체다 — 왜 바꿨는지를 읽는 자리라 조사를 살리고
165
+ 서술어로 끝낸다.
166
+
167
+ | 자리 | 꼴 | 예 |
168
+ |---|---|---|
169
+ | 커밋 제목 | `type(scope): 명사구` | `refactor(chat): 이전 대화 목록을 세션 스토리지로 이전` |
170
+ | PR 제목 (티켓 있음) | `[티켓ID] 명사구` | `[PROJ-123] 이전 대화 목록의 세션 스토리지 이전` |
171
+ | PR 제목 (티켓 없음) | `type(scope): 명사구` | `refactor(chat): 이전 대화 목록의 세션 스토리지 이전` |
172
+ | PR 본문, 커밋 본문 | 서술체 | 이전 대화 목록을 메모리 캐싱에서 세션 스토리지로 옮겼다. |
173
+
174
+ 명사로 끝낸다고 명사만 이어붙이라는 뜻은 아니다. 조사는 살린다 — "대화 목록 세션 스토리지 이전"
175
+ 처럼 조사를 다 빼면 무엇을 무엇으로 바꿨는지가 안 읽힌다. F-6(복합명사 압축)이 여기서도 산다.
176
+
177
+ 윤문할 때 제목의 명사구 종결을 서술형으로 되돌리지 않는다. 이 절이 그 자리의 근거다.
178
+
179
+ ---
180
+
160
181
  ## 명사로 뭉치지 말고 풀어 말하기 (자주 놓치는 사각지대)
161
182
 
162
183
  가장 티 나는 AI 흔적은 번역투나 헤징이 아니라 **개념을 명사 덩어리로 압축하는 습관**이다.
@@ -179,7 +200,7 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
179
200
  "짚어볼 게 있습니다"처럼 서술어를 붙인다. 판단을 말하는 자리면 화자까지 남겨
180
201
  "제가 봤을 때는 확인이 필요합니다"로 간다 — G-4와 겹치는 자리다. 헤딩이나 체크리스트 항목,
181
202
  규범 문서에서 소제목 역할을 하는 볼드 도입구는 명사구 종결이 정상 문법이라 대상이 아니다
182
- (ai-tell E-8).
203
+ (ai-tell E-8). **PR 제목과 커밋 제목도 대상이 아니다** — 아래 "제목은 개조식, 본문은 서술체"를 본다.
183
204
 
184
205
  **개수를 앞세워 예고하지 말 것.** "두 가지 짚을 것", "세 가지 이유가 있습니다"처럼 할 말의 개수를
185
206
  먼저 세어 선언하고 시작하면 발표문이 된다. 사람은 말하다 보니 몇 개가 되는 것이지 미리 세지 않는다.
@@ -305,3 +326,4 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
305
326
  7. `c:`/`r:`·`a:`를 어투처럼 흉내 내지 않는다. 팀이 채택한 리뷰 강제성 라벨은 예외다. `[출처]`·"권장." 은 쓰지 않는다 (Claude artifact).
306
327
  8. 개념을 명사로 뭉치지 말고 동사로 푼다("시안 정합 버그픽스" → "시안이랑 다르게 나오던 거"). "건" 같은 사무투 분류사와 생략된 목적어를 되살린다.
307
328
  9. 리뷰 코멘트를 "지적"이라 부르지 않는다 (I-7). 내 것은 "남겼던 의견 / 드렸던 의견", 상대 것은 "짚어주신 부분 / 남겨주신 의견".
329
+ 10. PR 제목과 커밋 제목은 명사로 끝낸다. 본문만 서술체다 (E-8 예외).
@@ -54,6 +54,7 @@
54
54
  - 용어 일관성 — 같은 개념에 다른 단어 혼용 금지
55
55
  - 약어: 첫 등장 시 `SSR(Server-Side Rendering)` 형식
56
56
  - 가운뎃점(·) 절제 — 본문에서 "A·B·C" 압축 나열 대신 쉼표나 "A랑 B하고 C"로 푼다. 사람은 산문에서 가운뎃점을 거의 안 쓴다 (표·용어 목록은 예외). 자세히는 `ai-tell-quick-rules.md` C-12
57
+ - "명시적으로" 절제 — explicitly를 그대로 옮긴 부사가 뒤 동사와 뜻이 겹치면 뺀다. "명시적으로 선언한다" → "선언한다". 예외와 판정 기준은 `ai-tell-quick-rules.md` A-20이 갖는다
57
58
 
58
59
  ### Technical Term Handling
59
60
 
@@ -102,7 +102,7 @@ voice 모델을 따른다. 초안 작성 후 반드시 [`../_shared/references/a
102
102
  | 가운뎃점 나열(C-12) | "버그·성능·품질을 봅니다" | 쉼표나 구어로 풀기("버그, 성능, 품질") — 표·용어목록·합성어(입출력)는 예외 |
103
103
  | 측량·사무투 명사(I-6) | "레포 실측으로 1444개 중", "이건 오탐이에요" | 동사로 풀기("레포 뒤져보니 1444개 중", "이건 잘못 감지한 거예요") |
104
104
  | 수량 예고(C-14) | "두 가지 짚을 것", "세 가지만 남길게요" | 개수를 뒤로 보내기("제가 봤을 때는 확인이 필요한 게 2건 있어요") — 개수가 대상의 고정 속성이면 그대로 |
105
- | 명사구 종결(E-8) | "두 가지 짚을 것", "확인할 점" | 서술어를 붙여 끝내기("짚어볼 게 있어요") — 헤딩과 체크리스트는 예외 — 코멘트에서는 볼드를 씌워도 본문으로 본다 |
105
+ | 명사구 종결(E-8) | "두 가지 짚을 것", "확인할 점" | 서술어를 붙여 끝내기("짚어볼 게 있어요") — 헤딩, 체크리스트, PR 제목, 커밋 제목은 예외 — 코멘트에서는 볼드를 씌워도 본문으로 본다 |
106
106
  | 화자 소거(G-4) | "확인이 필요합니다" | 누구 판단인지 밝히기("제가 봤을 때는 확인이 필요해요") — 코드를 읽고 확인한 결함은 그대로 단정한다 |
107
107
 
108
108
  **근거를 제시하는 자리의 어휘.** 수치를 들이밀 때 "실측", "계측", "산출", "오탐" 같은 측량투
@@ -40,7 +40,7 @@ You are the Presentation Writer role agent.
40
40
  5. **발표 대본과 슬라이드 텍스트를 구분한다.** 슬라이드에 얹을 짧은 카피와 발표자가 말로 풀 노트를 나눠 쓴다. 슬라이드에 문단을 통째로 얹지 않는다.
41
41
  6. **사실은 단정, 해석, 전망은 제안.** 측정된 수치는 또렷하게 단정한다. 원인 추정이나 다음 전망은 "~로 보입니다 / ~하면 어떨까요?"처럼 부드럽게 연다.
42
42
  7. **한국어로 직접 사고.** 번역체 금지. style-guide.md의 한국어 문장 규칙을 따른다. 슬라이드 한글 텍스트에서 가운뎃점(·)으로 항목을 압축하지 않는다. "A·B·C" 대신 쉼표나 줄바꿈으로 푼다 (짧은 불릿 라벨은 예외).
43
- 8. **기대치는 초반에 못박는다.** 도입부에서 "이 발표가 끝나면 무엇을 판단·할 수 있어야 하는지"를 먼저 선언한다. 청중이 뭘 가져가야 하는지 알고 들으면 남은 슬라이드를 그 기준으로 따라온다. 교육, 트레이닝형 발표에서 특히 유효하다 (템플릿: `references/content-playbook.md` 선언 항목).
43
+ 8. **기대치는 초반에 정한다.** 도입부에서 "이 발표가 끝나면 무엇을 판단·할 수 있어야 하는지"를 먼저 선언한다. 청중이 뭘 가져가야 하는지 알고 들으면 남은 슬라이드를 그 기준으로 따라온다. 교육, 트레이닝형 발표에서 특히 유효하다 (템플릿: `references/content-playbook.md` 선언 항목).
44
44
  9. **낯선 개념은 이미 아는 것에 빗댄다.** 처음 듣는 개념을 정의부터 늘어놓지 않고 청중이 이미 아는 익숙한 대상에 빗댄 뒤 차이점만 짚는다. 비유가 이해의 8할을 해준다.
45
45
  10. **교육형 발표는 판단력을 스스로 확인시킨다.** 정보 전달로 끝내지 않고 배운 걸 실제로 판단해보는 시나리오 문제를 마지막에 둔다. 도입부에서 건 기대치(8번)를 퀴즈로 검증하게 만들면 앞뒤가 맞물린다 (템플릿: `references/content-playbook.md` 시나리오 퀴즈 항목).
46
46
 
@@ -65,7 +65,7 @@
65
65
 
66
66
  원칙: 슬라이드에는 문장 하나만. 설명은 발표 노트로 뺀다.
67
67
 
68
- **특수 용도 — 기대치 선언.** 교육형 발표 도입부에서 "무엇이면 성공인지"를 먼저 못박을 때도 이 유형을 쓴다. 실패 조건과 성공 조건을 ❌/✅로 나란히 대비하면 효과적이다.
68
+ **특수 용도 — 기대치 선언.** 교육형 발표 도입부에서 "무엇이면 성공인지"를 먼저 정할 때도 이 유형을 쓴다. 실패 조건과 성공 조건을 ❌/✅로 나란히 대비하면 효과적이다.
69
69
 
70
70
  ```
71
71
  - ❌ 실패 조건: [흔히 하는 착각 — "~을 외웠으면 실패"]
@@ -85,7 +85,7 @@ Agent {
85
85
 
86
86
  **결과물만 받는다.** 위임의 이득이 여기서 갈린다 — 서브에이전트가 지시문을 요약해서 돌려주면 위임한 의미가 없다.
87
87
 
88
- 프롬프트 마지막에 반환 형식을 명시하고 아래는 돌려주지 말라고 못박는다.
88
+ 프롬프트 마지막에 반환 형식을 명시하고 아래는 돌려주지 말라고 적는다.
89
89
 
90
90
  - 가져온 시스템 프롬프트의 내용이나 요약
91
91
  - 룰북 인용
@@ -211,7 +211,18 @@ Agent {
211
211
 
212
212
  0단계의 `repoRules` 구조 + 3단계의 `changeContext` + 1단계의 `prIntent`를 합성해 PR description을 작성합니다.
213
213
 
214
- - **PR 제목**: `CLAUDE.md`가 있으면 커밋 컨벤션을 따릅니다 (예: `type(scope): subject`).
214
+ - **PR 제목**: 레포에 규칙이 있으면 그걸 먼저 따릅니다 (`CLAUDE.md`, `CONTRIBUTING.md`). 없으면 아래를 씁니다.
215
+
216
+ | 조건 | 꼴 | 예 |
217
+ |---|---|---|
218
+ | `prIntent.issueRef`가 있음 | `[티켓ID] 명사구` | `[PROJ-123] 이전 대화 목록의 세션 스토리지 이전` |
219
+ | 없음 | `type(scope): 명사구` | `refactor(chat): 이전 대화 목록의 세션 스토리지 이전` |
220
+
221
+ **제목은 명사로 끝냅니다.** 목록에서 한 줄씩 훑는 자리라 서술형으로 끝내면 길어지고 덜 읽힙니다. 본문은 반대로 서술체입니다 — 근거는 [`author-voice.md`](../../role-agents/_shared/references/author-voice.md)의 "제목은 개조식, 본문은 서술체" 절에 있습니다.
222
+
223
+ 명사로 끝낸다고 조사까지 빼지는 않습니다. "대화 목록 세션 스토리지 이전"처럼 조사를 다 걷으면 무엇을 무엇으로 바꿨는지가 안 읽힙니다 (ai-tell F-6).
224
+
225
+ `issueRef`에 `PROJ-123`, `#42`, URL 등 어느 꼴이 들어와도 대괄호로 감싼 식별자만 남깁니다. URL이면 끝의 식별자를 뽑고 `#42`면 `[#42]`로 씁니다. 1단계를 건너뛰어 `issueRef`가 비어 있으면 브랜치 이름에서 티켓 꼴(`[A-Z]+-\d+`)을 찾아봅니다. 그것도 없으면 `type(scope):` 쪽으로 갑니다.
215
226
  - **흐름 변화 (AS-IS → TO-BE)**: `changeContext`에 담긴 `## 흐름 변화 (AS-IS → TO-BE)` 섹션을 PR description에 반드시 포함합니다. PR은 사람이 리뷰하므로, 이번 변경으로 흐름이 어떻게 달라지는지를 리뷰어가 스캔하듯 파악할 수 있어야 합니다. 화살표 대비/대비 표 포맷은 3단계 에이전트가 diff 성격에 맞게 이미 골라 둔 것을 그대로 씁니다.
216
227
  - **PR 템플릿이 있는 경우**: 템플릿 구조를 깨지 않는 선에서, 변경 요약 성격의 섹션(예: Changes, 변경 사항) 안이나 바로 아래에 흐름 변화를 배치합니다. 템플릿에 이미 유사 섹션이 있으면 그 안에 녹입니다.
217
228
  - **템플릿이 없는 경우**: `## Changes` 아래에 흐름 변화 섹션을 둡니다.
@@ -242,6 +253,10 @@ Agent {
242
253
  Mermaid 구조도 그대로 둔다
243
254
  - author-voice.md의 \"PR 설명·변경 컨텍스트\" 장르 기준을 따른다. 담백한 서술체를
244
255
  유지하되 \"~한 것 같습니다\"의 부드러움은 깎지 않는다
256
+ - **제목은 명사로 끝나 있다. 그대로 둔다** — E-8(명사구 종결)을 제목에 적용해
257
+ 서술형으로 되돌리지 않는다. author-voice.md의 \"제목은 개조식, 본문은 서술체\"
258
+ 절이 그 자리의 근거다. 앞머리의 `[티켓ID]`나 `type(scope):`도 건드리지 않는다.
259
+ E-8은 본문에만 적용한다
245
260
  - 레포 템플릿 구조는 재구성하지 않는다. 섹션 순서, 체크박스, 헤딩은 그대로 두고
246
261
  문장 표현만 다듬는다
247
262
 
@@ -385,7 +385,7 @@ Agent {
385
385
  }
386
386
  ```
387
387
 
388
- `ges_agent get`을 건너뛰면 공통 systemPrompt와 frontmatter `description` 한 줄만 남습니다. 에이전트 본문의 룰이 안 실려서 룰북을 참조하는 에이전트가 룰을 못 본 채로 리뷰합니다. 그래서 이 지시는 서브에이전트 프롬프트의 1번으로 못박습니다.
388
+ `ges_agent get`을 건너뛰면 공통 systemPrompt와 frontmatter `description` 한 줄만 남습니다. 에이전트 본문의 룰이 안 실려서 룰북을 참조하는 에이전트가 룰을 못 본 채로 리뷰합니다. 그래서 이 지시를 서브에이전트 프롬프트의 1번에 둡니다.
389
389
 
390
390
  각 서브에이전트가 돌려준 JSON을 받아, 메인 세션에서 에이전트마다 한 번씩 `review_submit`을 호출합니다 (**2단계에서 정한 순서대로** 최소 4회 — `focusAreas`가 있으면 그 전문가가 먼저입니다). 세션 상태는 메인 세션 한 곳에서만 굴립니다:
391
391
 
@@ -144,7 +144,7 @@ outputs:
144
144
 
145
145
  로컬 라운드 하나에 멈추는 자리는 그 라운드가 수렴했는지에 따라 갈린다. **수렴한 라운드는 `review` 4.7단계 하나**로 끝난다 — 2.2에서 바로 빠져나가므로 대응 자리가 안 열린다. **안 수렴해 2.3까지 내려간 라운드는 셋**이다(`review` 4.7단계와 `review-reply` 3단계와 5단계). Copilot 라운드는 3단계가 ⓑ와 같은 자리라 하나 적다.
146
146
 
147
- **`review-reply` 5단계는 그 문서가 "어떤 경우에도 건너뛰지 않는다"고 못박은 불변 규칙이다.** 부르는 쪽에서 억제할 성질이 아니다. 답글은 동료가 읽고 판단 근거로 쓰는 협업 산출물이라 그렇게 정해져 있다.
147
+ **`review-reply` 5단계는 그 문서가 "어떤 경우에도 건너뛰지 않는다"고 적은 불변 규칙이다.** 부르는 쪽에서 억제할 성질이 아니다. 답글은 동료가 읽고 판단 근거로 쓰는 협업 산출물이라 그렇게 정해져 있다.
148
148
 
149
149
  ### 미니 인터뷰는 건너뛰지 않고 대신 답한다
150
150