@tienne/gestalt 0.70.0 → 0.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/package.json +1 -1
- package/dist/plugin/role-agents/_shared/references/README.md +1 -1
- package/dist/plugin/role-agents/_shared/references/ai-tell-quick-rules.md +13 -9
- package/dist/plugin/role-agents/_shared/references/author-voice.md +8 -8
- package/dist/plugin/role-agents/_shared/references/style-guide.md +13 -0
- package/dist/plugin/role-agents/humanize-monolith/AGENT.md +1 -1
- package/dist/src/cli/commands/humanize-check.d.ts.map +1 -1
- package/dist/src/cli/commands/humanize-check.js +5 -6
- package/dist/src/cli/commands/humanize-check.js.map +1 -1
- package/dist/src/cli/commands/humanize-scan.d.ts +4 -2
- package/dist/src/cli/commands/humanize-scan.d.ts.map +1 -1
- package/dist/src/cli/commands/humanize-scan.js +15 -9
- package/dist/src/cli/commands/humanize-scan.js.map +1 -1
- package/dist/src/core/types.d.ts +1 -1
- package/dist/src/humanize/detectors.d.ts +31 -2
- package/dist/src/humanize/detectors.d.ts.map +1 -1
- package/dist/src/humanize/detectors.js +192 -7
- package/dist/src/humanize/detectors.js.map +1 -1
- package/dist/src/humanize/index.d.ts +1 -1
- package/dist/src/humanize/index.d.ts.map +1 -1
- package/dist/src/humanize/index.js +1 -1
- package/dist/src/humanize/index.js.map +1 -1
- package/dist/src/humanize/read-input.d.ts +21 -0
- package/dist/src/humanize/read-input.d.ts.map +1 -0
- package/dist/src/humanize/read-input.js +51 -0
- package/dist/src/humanize/read-input.js.map +1 -0
- package/dist/src/humanize/scan.d.ts +13 -0
- package/dist/src/humanize/scan.d.ts.map +1 -1
- package/dist/src/humanize/scan.js +16 -5
- package/dist/src/humanize/scan.js.map +1 -1
- package/dist/src/mcp/schemas.js +1 -1
- package/package.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/role-agents/_shared/references/README.md +1 -1
- package/plugin/role-agents/_shared/references/ai-tell-quick-rules.md +13 -9
- package/plugin/role-agents/_shared/references/author-voice.md +8 -8
- package/plugin/role-agents/_shared/references/style-guide.md +13 -0
- package/plugin/role-agents/humanize-monolith/AGENT.md +1 -1
package/README.md
CHANGED
|
@@ -60,7 +60,7 @@ The hardest part of building software isn't writing code — it's knowing what t
|
|
|
60
60
|
|
|
61
61
|
## Built with Gestalt, for Gestalt
|
|
62
62
|
|
|
63
|
-
This repository is developed using the `gestalt-develop` skill — the same pipeline you get when you install Gestalt. Every significant feature in [v0.26.0](#
|
|
63
|
+
This repository is developed using the `gestalt-develop` skill — the same pipeline you get when you install Gestalt. Every significant feature in [v0.26.0](CHANGELOG.md#0260---2026-06-14) was implemented through the Interview → Spec → Execute → Evolve loop:
|
|
64
64
|
|
|
65
65
|
- Memory → Interview feedback loop (prior specs auto-injected into new sessions)
|
|
66
66
|
- `execute-passthrough.ts` 1,296-line God File decomposed into 8 focused modules
|
package/dist/package.json
CHANGED
|
@@ -31,7 +31,7 @@ pnpm verify:rules
|
|
|
31
31
|
본문에 쓰면 산출물로 샌다. 금지어를 넣었으면 같은 문서를 grep한다.
|
|
32
32
|
- 어투 규칙은 **S1으로 올려야 실제로 강제된다.** S2는 모델이 우선순위를 알아서 정하면서 새어나간다.
|
|
33
33
|
- 심각도를 바꿀 때는 근거를 남긴다. A-2, I-1, C-8은 대조 코퍼스 측정으로 조정했고 그 근거가
|
|
34
|
-
룰북
|
|
34
|
+
[룰북 측정 근거](ai-tell-quick-rules.md#측정-근거)에 있다. 감으로 올리고 내리면 다음 사람이 되돌린다.
|
|
35
35
|
- 경로를 참조하는 자리가 여러 곳이다. 파일을 옮기거나 이름을 바꾸면 `plugin/` 전체에서
|
|
36
36
|
상대경로 참조를 다시 확인한다 (에이전트는 `../_shared/references/`, 에이전트의 `references/`
|
|
37
37
|
하위 문서는 `../../_shared/references/`, 스킬은 `../../role-agents/_shared/references/`).
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
**Do-NOT (탐지·윤문 모두 제외):** 고유명사, 제품명, 모델명, 기관명, 수치, 날짜, 단위, 큰따옴표 안 직접 인용, 법률 조문, 수학, 화학, 통계 표기, 영어 약어(LLM·GPU·MCP·API 등 업계 표준).
|
|
8
8
|
|
|
9
|
-
**약어 면제는 업계 표준에만 준다:** 풀어 썼을 때 안 굳어진 음차가 되는 약어는 면제 대상이 아니다. `SSOT`나 `SoT`를 그대로 두면 "소스 오브 트루스"를 약어로 우회한 것과 같다 — B-3로 우리말로 푼다. 무엇을 가리키느냐에 따라 말이 달라지므로 대체어 표는
|
|
9
|
+
**약어 면제는 업계 표준에만 준다:** 풀어 썼을 때 안 굳어진 음차가 되는 약어는 면제 대상이 아니다. `SSOT`나 `SoT`를 그대로 두면 "소스 오브 트루스"를 약어로 우회한 것과 같다 — B-3로 우리말로 푼다. 무엇을 가리키느냐에 따라 말이 달라지므로 대체어 표는 [style-guide.md의 single source of truth를 뭐라고 쓸까](style-guide.md#single-source-of-truth를-뭐라고-쓸까)에 둔다. LLM, API처럼 풀어 쓸 일이 없는 표준 약어만 그대로 둔다.
|
|
10
10
|
|
|
11
11
|
**굳어진 음차 화이트리스트 (B-3 제외 — 그대로 둔다):** 컴포넌트·토큰·커밋·인터페이스·메서드·빌드·디플로이·캐시·렌더링·콜백·프레임워크·라이브러리·리팩터링·마이그레이션·아이콘·레이아웃·그리드·모달·토스트·타이포그래피·플레이스홀더·프로젝트·스프린트·이슈·리뷰·머지·브랜치·사이드 이펙트·보일러플레이트·트레이드오프·딥다이브·얼라인·온보딩·소스·롤백·파싱·레지스트리·불릿 등 업계 정착어. 이 목록 밖의 안 굳어진 음차(소스 오브 트루스·룩 앤 필·로우 행잉 프룻 등)만 B-3로 교정한다.
|
|
12
12
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
**한자어를 피하는 게 목적이 아니다 (F-4·F-5 오적용 주의):** 겨냥하는 건 개념을 뭉친 **명사화**(-성/-적/-화)이지 한자어 동사가 아니다. "측정하다"를 "재다"로, "판단하다"를 "따지다"로 바꾸면 정확도만 잃는다. 그 자리의 정확한 말이 한자어면 한자어를 쓴다. 반대 방향 실수도 같다 — 한자어를 피하려고 비유 명사(축·증류)나 물리 동사(재다)로 도망가면 F-7에 걸린다. 셋 다 겪은 실례: `네 축을 따로 재고 판정한다` → `4가지 측면에서 각각 측정하고 판단한다`.
|
|
20
20
|
|
|
21
|
-
**근거가 붙은 룰 (→ 아래
|
|
21
|
+
**근거가 붙은 룰 (→ 아래 [측정 근거](#측정-근거)):** A-2, I-1, C-8은 대조 코퍼스 측정으로 심각도를 조정했고 B-4는 팀이 실제로 쓰는 말이라 예시에서 뺐다. 원어민이 오히려 더 쓰는 표현이나 팀에서 이미 굳은 말을 지우면 사람 글을 AI 글로 만든다.
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
|---|---|---|---|
|
|
49
49
|
| B-1 | 한글 + 괄호 영어 매번 ("~(Sovereign AI)" 처럼) | S2 | 첫 등장만 병기, 이후 한글만 |
|
|
50
50
|
| B-2 | 영어 어휘 직역 가능한데 그대로 | S2 | 한국어로 옮기되 업계 표준은 유지 |
|
|
51
|
-
| B-3 | 안 굳어진 영어 구·단어 음차 표기 ("소스 오브 트루스"), 그 음차를 약어로 우회한 표기(`SSOT`·`SoT`) | S1 | 한글 의역 + 첫 등장만 원어 괄호 병기("기준 문서(source of truth)", "단일 기준점(source of truth)" 등), 이후 한글만. 단 위 "굳어진 음차 화이트리스트"에 있는 정착어는 Do-NOT — of/and 등 기능어까지 통째 음차한 구(룩 앤 필·로우 행잉 프룻)가 최우선 대상. 무엇을 가리키는지 보고 고르는 표는
|
|
52
|
-
| B-4 | 영어 개념을 어색하게 옮긴 조어("생산처" ← producer, "응답처") | S2 | 억지 신조어 대신 이미 쓰이는 말로. 코드 맥락이면 "호출부"·"사용처". **팀에서 이미 굳은 조어는 예외** — "소비처"는 팀 지라 티켓에서 라이브러리를 가져다 쓰는 쪽을 가리키는 말로 정착했으므로 교정 대상이 아니다 (→ 아래
|
|
53
|
-
| B-5 | 영어 추상 개념어를 사전 첫 뜻으로 옮겨 레지스터가 어긋난 말 (materialize → "물질화", semantics → "의미론", virtue → "미덕", durably → "내구성 있게") | S1 | 그 자리에서 실제로 무슨 일이 벌어지는지를 동사로 쓴다. 아래
|
|
51
|
+
| B-3 | 안 굳어진 영어 구·단어 음차 표기 ("소스 오브 트루스"), 그 음차를 약어로 우회한 표기(`SSOT`·`SoT`) | S1 | 한글 의역 + 첫 등장만 원어 괄호 병기("기준 문서(source of truth)", "단일 기준점(source of truth)" 등), 이후 한글만. 단 위 "굳어진 음차 화이트리스트"에 있는 정착어는 Do-NOT — of/and 등 기능어까지 통째 음차한 구(룩 앤 필·로우 행잉 프룻)가 최우선 대상. 무엇을 가리키는지 보고 고르는 표는 [style-guide.md의 single source of truth를 뭐라고 쓸까](style-guide.md#single-source-of-truth를-뭐라고-쓸까)를 따른다 |
|
|
52
|
+
| B-4 | 영어 개념을 어색하게 옮긴 조어("생산처" ← producer, "응답처") | S2 | 억지 신조어 대신 이미 쓰이는 말로. 코드 맥락이면 "호출부"·"사용처". **팀에서 이미 굳은 조어는 예외** — "소비처"는 팀 지라 티켓에서 라이브러리를 가져다 쓰는 쪽을 가리키는 말로 정착했으므로 교정 대상이 아니다 (→ 아래 [측정 근거](#측정-근거)) |
|
|
53
|
+
| B-5 | 영어 추상 개념어를 사전 첫 뜻으로 옮겨 레지스터가 어긋난 말 (materialize → "물질화", semantics → "의미론", virtue → "미덕", durably → "내구성 있게") | S1 | 그 자리에서 실제로 무슨 일이 벌어지는지를 동사로 쓴다. 아래 [B-5 대체어](#b-5-대체어) 표 참조. 음차로 도망가지 않는다 — "머티리얼라이즈"로 바꾸면 B-3에 걸린다 |
|
|
54
54
|
|
|
55
55
|
### B-5 대체어
|
|
56
56
|
|
|
@@ -91,7 +91,8 @@
|
|
|
91
91
|
| D-5 | 의인화 추상 주어("기술이 묻는다·시대가 부른다") | S1 | 사람·기관 주어로 |
|
|
92
92
|
| D-6 | 결말 공식 "~할 때다/~해야 한다/~지금이야말로" | S1 | 삭제하고 **원문에 이미 있는 가장 구체적인 문장으로 끝낸다.** 더 나은 마무리 문장으로 고쳐쓰지 말고, 리듬을 살리려 하지도 않는다. 닫는 느낌이 꼭 필요하면 원문 근거만으로 쓸 수 있는 평서 한 줄(다음 할 일 등)까지만 |
|
|
93
93
|
| D-7 | 변환 공식 "X에서 Y로" 반복 | S2 | 한 번만, 나머지는 일반 서술 |
|
|
94
|
-
| D-8 | 과잉 자책, 감정 과장 반응("제일 아팠습니다·뼈아픕니다·부끄럽습니다·뜨끔했습니다") | S1 | 짧은 수긍으로 환원한다("아 그렇네요", "이거 놓쳤네요"). 사실 서술은 그대로 두고 감정 수식만 뺀다. D-4(hype 어휘)의 뒷면이다 — 칭찬 쪽만 막으면 같은 충동이 자책 쪽으로 샌다.
|
|
94
|
+
| D-8 | 과잉 자책, 감정 과장 반응("제일 아팠습니다·뼈아픕니다·부끄럽습니다·뜨끔했습니다") | S1 | 짧은 수긍으로 환원한다("아 그렇네요", "이거 놓쳤네요"). 사실 서술은 그대로 두고 감정 수식만 뺀다. D-4(hype 어휘)의 뒷면이다 — 칭찬 쪽만 막으면 같은 충동이 자책 쪽으로 샌다. 남긴 의견들 사이에 "제일"로 순위를 매기는 것도 여기 해당한다 |
|
|
95
|
+
| D-9 | 추상명사에 이동 동사("방향도 맞게 갔습니다", "결론이 그쪽으로 갔어요") | S2 / **대화·리뷰 S1** | 방향, 결론, 판단, 논의가 스스로 움직이게 두지 않는다. 사람이나 대상을 주어로 되돌린다("맞는 방향 같아요", "그렇게 결론 냈어요"). D-5 의인화 추상 주어의 사촌이다 |
|
|
95
96
|
|
|
96
97
|
## E. 리듬, 종결어미
|
|
97
98
|
|
|
@@ -109,6 +110,7 @@
|
|
|
109
110
|
| F-5 | "~적 N" 추상 체인 ("전략적 함의", "실천적 기반") | S2 / **대화·리뷰 S1** | 명사+명사 또는 풀어쓰기("전략 함의", "실천의 기반") |
|
|
110
111
|
| F-6 | 복합명사 압축 — 명사구를 조사·동사 없이 이어붙여 개념을 뭉침 ("시안 정합 버그픽스", "유지보수성 개선 작업", "권한 체크 로직") | S2 / **대화·리뷰 S1** | 동사·조사로 풀어 서술 ("디자인 시안과 다르게 렌더링되던 문제", "나중에 유지보수하기 편하게"). 사람은 압축 명사구 대신 무엇을 왜 했는지 풀어 말한다 |
|
|
111
112
|
| F-7 | 기술·이공계 비유 명사를 일상 대화에 그대로 (증류·배선·결정화·평탄화·오케스트레이션·파이프라인화·축 등, 화학·전기·수학 어휘의 비유 차용) | S2 / **대화·리뷰 S1** | 일상 동사·명사로 환원 (증류 → "추려내다/뽑아내다", 배선 → "연결하다/걸어두다", 결정화 → "정리하다", 평탄화 → "밋밋하게 만들다", **축 → "측면"**·"기준"). 문법은 멀쩡해 룰 매칭이 안 되지만 사람은 대화에서 안 쓴다. "네 축을 잰다"가 아니라 "4가지 측면에서 측정한다". **예외는 그 프로젝트가 개념에 붙인 이름일 때만이고, 그 개념을 다루는 자리에서만이다** — 게슈탈트의 "스펙 결정화"는 `similarity-crystallizer` 에이전트 이름이자 인터뷰→Spec 변환의 정의라서 두지만, 같은 말을 지라 티켓 작성처럼 무관한 자리에 끌어다 쓰면 F-7이다. 코드의 "파이프라인" 자체, 그래프의 x축도 같은 기준. **테스트를 자물쇠에 빗댄 "잠그다/잠근다/잠긴"도 여기 해당한다** — "경계마다 관련 테스트가 있다"처럼 쓴다 |
|
|
113
|
+
| F-8 | 추상명사에 물리 측량 동사("근거를 재봤는데", "판단을 재보고 있다", "근거를 재본 결과", "의견을 달아봤는데") | S2 / **대화·리뷰 S1** | 저울에 올린 게 아니라 검토한 것이다. 사람이 하는 행위 동사로 되돌린다("근거를 확인해봤는데", "의견을 검토해봤는데"). F-7 물리 동사 도피의 사촌이라 목적어가 근거, 의견, 판단, 영향, 의미, 가치, 리스크인 자리만 본다 — "온도를 재봤는데"는 대상이 아니다 |
|
|
112
114
|
|
|
113
115
|
## G. Hedging
|
|
114
116
|
|
|
@@ -135,7 +137,9 @@
|
|
|
135
137
|
| I-3 | "~다는 뜻이다/~다는 의미다" 결말 | S2 | 본문에 풀어 쓰기 |
|
|
136
138
|
| I-4 | 권고형 결말 "~해야 한다·~합니다" 반복 | S2 | 평서·단언으로 |
|
|
137
139
|
| I-5 | 사무투 분류사 "~ 건/해당 건/이번 건/그 건", 코드·문서 용어를 대화에 그대로("주석 건") | S2 / **대화·리뷰 S1** | 구체 명사로 풀기("Copilot이 짚은 주석 건" → "Copilot이 남긴 코멘트"). "건"은 공문서투 분류사라 대화에서 어색하다 |
|
|
138
|
-
| I-6 | 측량·사무투 명사 "실측·계측·산출·오탐" 등으로 판정·근거를 명사 하나로 압축 | S2 / **대화·리뷰 S1** | 동사로 풀어 말하기("레포 실측으로 1444개 중" → "레포 뒤져보니 1444개 중", "이건 오탐이에요" → "이건 잘못 감지한 거예요"). "잘못 걸리다"처럼 안 붙는 동사로 도망가지 말고 원래 짝이 맞는 동사(감지하다·측정하다)에 "잘못"을 붙인다 |
|
|
140
|
+
| I-6 | 측량·사무투 명사 "실측·계측·산출·오탐" 등으로 판정·근거를 명사 하나로 압축 (피동 "산출된다"도 같다. 파생어 예외는 "산출"에만 있다 — "산출물", "산출 근거", "산출도구"는 빠지고 "계측기", "실측값"은 걸린다. 서술격 "산출이에요"와 관형격 "산출의"는 탐지기가 못 본다) | S2 / **대화·리뷰 S1** | 동사로 풀어 말하기("레포 실측으로 1444개 중" → "레포 뒤져보니 1444개 중", "이건 오탐이에요" → "이건 잘못 감지한 거예요"). "잘못 걸리다"처럼 안 붙는 동사로 도망가지 말고 원래 짝이 맞는 동사(감지하다·측정하다)에 "잘못"을 붙인다 |
|
|
141
|
+
| I-7 | 리뷰 코멘트를 "지적"이라 부르기 ("지적 사항", "지적 N건", "지적했던 부분"처럼 뒤에 명사가 붙은 꼴도 같다. 코멘트가 아닌 일반 동사 용법 "원칙 위반을 지적하고", "논문이 지적한 점"은 예외. 탐지기가 어디까지 보고 어디서 새는지는 `src/humanize/detectors.ts` 의 I-7 주석과 코퍼스가 갖는다) | S2 / **대화·리뷰 S1** | 내가 남긴 건 "남겼던 의견"이나 "드렸던 의견", 상대가 남긴 건 "짚어주신 부분"이나 "남겨주신 의견"으로. "지적"은 상대를 잡아세우는 뉘앙스가 붙어 코멘트를 판정으로 만든다. 룰 원문은 [리뷰 코멘트를 "지적"이라고 부르지 않는다](author-voice.md#리뷰-코멘트를-지적이라고-부르지-않는다-ai-tell-i-7) 절이다 |
|
|
142
|
+
| I-8 | 형식명사 "수준"으로 정도 뭉개기("다듬는 수준", "확인만 하는 수준") | S2 / **대화·리뷰 S1** | "정도"를 쓰거나 형식명사를 빼고 동사로 푼다("가볍게 손보면 되는 것들"). "수준이 낮다"의 등급 어감이 딸려와 채점처럼 읽히기 때문이다. 남의 코드를 두고 쓰면 특히 그렇다. 등급을 실제로 말하는 자리("높은 수준의 격리")는 대상이 아니다 |
|
|
139
143
|
|
|
140
144
|
## J. 시각 장식
|
|
141
145
|
|
|
@@ -155,7 +159,7 @@
|
|
|
155
159
|
2. **변경률**: 30% 이하인가 (50% 초과는 작업 중단)
|
|
156
160
|
3. **장르 이탈 없음**: 칼럼이 에세이나 문학으로 변하지 않았는가, 리포트가 블로그체로 떨어지지 않았는가
|
|
157
161
|
4. **말투 보존**: 원문 격식체면 결과도 격식체. 평어체로 떨어뜨리지 않는다
|
|
158
|
-
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, F-4, F-5, F-6, F-7, I-1, I-5, I-6도 S1로 포함)
|
|
162
|
+
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, D-9, F-4, F-5, F-6, F-7, F-8, I-1, I-5, I-6, I-7, I-8도 S1로 포함)
|
|
159
163
|
6. **인공 표현 자제**: 원문에 없던 비유, 수사, 문학적 표현을 윤문 과정에서 임의로 추가하지 않았는가
|
|
160
164
|
7. **삭제 처방 준수**: D-2, D-3, D-4, D-6, C-10을 재작성으로 처리하지 않았는가. 마무리 문장, 부제, 수식어를 지우는 대신 더 그럴듯한 것으로 갈아끼운 자리가 없는가
|
|
161
165
|
|
|
@@ -174,7 +178,7 @@ gestalt humanize-check --before before.md --after after.md --register chat
|
|
|
174
178
|
변경률 2.8%인데 문장 3할이 갈려나간 사례가 있었다. **이 출력대로 판정하고 자기가 낸 값으로
|
|
175
179
|
덮어쓰지 않는다.** 측면별 임계와 탐지 대상 룰은 `src/humanize/`에 있다.
|
|
176
180
|
|
|
177
|
-
##
|
|
181
|
+
## 측정 근거
|
|
178
182
|
|
|
179
183
|
감으로 올리고 내린 심각도는 다음 사람이 되돌린다. 바꿀 때는 근거를 남긴다.
|
|
180
184
|
|
|
@@ -175,7 +175,7 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
|
|
|
175
175
|
|
|
176
176
|
**"수준"으로 정도를 말하지 말 것.** "다듬는 수준", "확인만 하는 수준"처럼 쓰면 정도를 말하려던 게
|
|
177
177
|
채점처럼 읽힌다 — "수준이 낮다"의 등급 어감이 딸려오기 때문이다. 남의 코드를 두고 쓰면 특히 그렇다.
|
|
178
|
-
범위를 말할 때는 **"정도"** 를 쓰고 가능하면 형식명사를 빼고 동사로 푼다("가볍게 손보면 되는 것들").
|
|
178
|
+
범위를 말할 때는 **"정도"** 를 쓰고 가능하면 형식명사를 빼고 동사로 푼다("가볍게 손보면 되는 것들") (ai-tell I-8).
|
|
179
179
|
|
|
180
180
|
**목적어를 생략하지 말 것.** "한 가지만 작게 남겨요"처럼 무엇을 남기는지(코멘트·의견)를 빼고
|
|
181
181
|
형식 수량사("한 가지")와 어색한 부사("작게")로 때우면 붕 뜬다. "코멘트 하나 남길게요",
|
|
@@ -184,14 +184,14 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
|
|
|
184
184
|
**추상명사에 이동 동사를 붙이지 말 것.** "방향도 맞게 갔습니다", "결론이 그쪽으로 갔어요"처럼
|
|
185
185
|
방향, 결론, 판단 같은 추상명사를 스스로 움직이게 만들면 붕 뜬다. 방향 자체가 가는 게 아니라
|
|
186
186
|
무언가가 그 방향으로 가는 것이다. "맞는 방향 같아요", "그렇게 결론 냈어요"처럼 사람이나
|
|
187
|
-
대상을 주어로 되돌린다 (ai-tell D-5 의인화 추상 주어의 사촌).
|
|
187
|
+
대상을 주어로 되돌린다 (ai-tell D-9, D-5 의인화 추상 주어의 사촌).
|
|
188
188
|
|
|
189
189
|
**추상명사에 측량 동사를 붙이지 말 것.** "근거를 재봤는데", "의견을 달아봤는데"처럼 재다나
|
|
190
190
|
달다처럼 물리적으로 계측하는 동사를 근거, 의견, 판단 같은 추상명사에 붙이면 붕 뜬다. 실제로
|
|
191
191
|
저울에 올린 게 아니라 검토하거나 확인한 것이다. "근거를 확인해봤는데", "의견을 검토해봤는데"처럼
|
|
192
|
-
사람이 하는 행위 동사로 되돌린다 (ai-tell F-7 물리 동사 도피의 사촌).
|
|
193
|
-
|
|
194
|
-
|
|
192
|
+
사람이 하는 행위 동사로 되돌린다 (ai-tell F-8, F-7 물리 동사 도피의 사촌). 목적어를 근거, 의견,
|
|
193
|
+
판단 같은 추상명사로 한정해서 탐지기가 본다 — "온도를 재봤는데"의 멀쩡한 물리적 용법은 목적어가
|
|
194
|
+
달라서 안 걸린다.
|
|
195
195
|
|
|
196
196
|
**얽힌 것에는 풀다, 막힌 것에는 해소하다.** "오해를 풀다", "갈등을 풀다"처럼 얽혀 있는
|
|
197
197
|
대상에는 풀다가 맞는다. 그런데 "진입을 막고 있던 두 가지를 풉니다"처럼 막혀 있는 대상(문제,
|
|
@@ -201,7 +201,7 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
|
|
|
201
201
|
|
|
202
202
|
---
|
|
203
203
|
|
|
204
|
-
## 리뷰 코멘트를 "지적"이라고 부르지 않는다
|
|
204
|
+
## 리뷰 코멘트를 "지적"이라고 부르지 않는다 (ai-tell I-7)
|
|
205
205
|
|
|
206
206
|
산출물에서 리뷰 코멘트를 가리킬 때 "지적"을 쓰지 않는다. 상대를 잡아세우는 뉘앙스가 붙어서
|
|
207
207
|
같은 내용이라도 제안형 어투와 어긋난다. 이 voice의 본질은 제안이지 판정이 아니다.
|
|
@@ -263,7 +263,7 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
|
|
|
263
263
|
- **가운뎃점(·) 나열 남발** — 본문에서 "A·B·C" 압축은 기계 티. 쉼표나 "A랑 B하고 C"로 푼다 (ai-tell C-12)
|
|
264
264
|
- **명사구 압축, 사무투 분류사** — "시안 정합 버그픽스", "주석 건" 같은 명사 뭉치는 동사로 풀고 "건"은 구체 명사로 (ai-tell F-6·I-5, 리뷰 코멘트에선 S1)
|
|
265
265
|
- **기술 비유 명사** — "증류·배선·결정화·평탄화" 같은 화학, 전기 어휘 차용은 일상 동사로 (ai-tell F-7, 리뷰 코멘트에선 S1)
|
|
266
|
-
- **"지적"** — 리뷰 코멘트를 가리키는 말로 쓰지 않는다. "남겼던 의견", "짚어주신 부분"으로 (위 "리뷰 코멘트를 '지적'이라고 부르지 않는다")
|
|
266
|
+
- **"지적"**(ai-tell I-7) — 리뷰 코멘트를 가리키는 말로 쓰지 않는다. "남겼던 의견", "짚어주신 부분"으로 (위 "리뷰 코멘트를 '지적'이라고 부르지 않는다")
|
|
267
267
|
- **`c:`/`r:`/`a:` 접두어를 어투 시그니처처럼 흉내 내기, `[출처]` 대괄호 태깅, "…권장." 체언 종지** — Claude가 만든 가짜 시그니처. 단, 팀이 채택한 리뷰 강제성 라벨은 예외다
|
|
268
268
|
|
|
269
269
|
---
|
|
@@ -278,4 +278,4 @@ OO님 이거 타겟 브랜치를 변경해주셔야 할 것 같아요!
|
|
|
278
278
|
6. 친근체, 물결, 이모지는 자연스럽게, 과하지 않게.
|
|
279
279
|
7. `c:`/`r:`·`a:`를 어투처럼 흉내 내지 않는다. 팀이 채택한 리뷰 강제성 라벨은 예외다. `[출처]`·"권장." 은 쓰지 않는다 (Claude artifact).
|
|
280
280
|
8. 개념을 명사로 뭉치지 말고 동사로 푼다("시안 정합 버그픽스" → "시안이랑 다르게 나오던 거"). "건" 같은 사무투 분류사와 생략된 목적어를 되살린다.
|
|
281
|
-
9. 리뷰 코멘트를 "지적"이라 부르지
|
|
281
|
+
9. 리뷰 코멘트를 "지적"이라 부르지 않는다 (I-7). 내 것은 "남겼던 의견 / 드렸던 의견", 상대 것은 "짚어주신 부분 / 남겨주신 의견".
|
|
@@ -24,6 +24,19 @@
|
|
|
24
24
|
- 🔴 Danger: data loss, security risk — never use Note for this
|
|
25
25
|
- Descriptive link text — Don't: `[여기](url)` / Do: `[설치 가이드](url)`
|
|
26
26
|
|
|
27
|
+
### 다른 문서의 절을 가리킬 때
|
|
28
|
+
|
|
29
|
+
절 참조는 대상 제목이 바뀌면 조용히 낡는다. 그래서 표기를 기계가 검사할 수 있는 꼴로 고정한다 (`pnpm verify:rules` 8번).
|
|
30
|
+
|
|
31
|
+
- **마크다운 → 마크다운**: 앵커 링크. `[측정 근거](ai-tell-quick-rules.md#측정-근거)`, 같은 문서 안이면 `[측정 근거](#측정-근거)`
|
|
32
|
+
- **코드 주석 → 마크다운**: `파일명 §「제목 전문」`. 주석에서는 링크가 안 눌리므로 낫표로 제목의 끝을 막는다. `author-voice.md §「기계적 점검 (어투는 아니지만 자주 틀리는 것)」`
|
|
33
|
+
- 마크다운 본문에 `§`를 쓰지 않는다. 앵커로 쓸 수 있는 자리에 `§`를 쓰면 검사가 비켜간다
|
|
34
|
+
- 앵커와 낫표 안은 **제목 전문**을 그대로 옮긴다. 꼬리를 잘라 적으면 검사에 걸린다. 매번 적기 버거운 제목은 참조를 줄이지 말고 제목을 줄인다
|
|
35
|
+
- 링크 텍스트는 짧게 써도 된다 — 검사하는 건 앵커지 표시 문구가 아니다
|
|
36
|
+
- 제목이 아닌 자리(볼드 라벨, 표의 행)는 `§`로 가리키지 않는다. 검사할 수 없어서 낡는 걸 못 잡는다
|
|
37
|
+
|
|
38
|
+
앵커 슬러그는 제목을 소문자로 내리고 문장부호를 지운 뒤 공백을 하이픈으로 바꾼 것이다. `### B-5 대체어` → `#b-5-대체어`.
|
|
39
|
+
|
|
27
40
|
### Content Principles
|
|
28
41
|
- Lead with business value, follow with technical detail
|
|
29
42
|
- Real-world examples before abstract definitions
|
|
@@ -81,7 +81,7 @@ S2
|
|
|
81
81
|
gestalt humanize-scan --file <원문> --register <doc|chat|report>
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
종료 코드로도 답한다. 걸린 게 있으면 0, 탐지기가 가리는 범위에서 0건이면 10이다.
|
|
84
|
+
종료 코드로도 답한다. 걸린 게 있으면 0, 어투는 깨끗한데 맞춤법만 걸리면 11, 탐지기가 가리는 범위에서 0건이면 10이다. 11이면 어투는 그대로 두고 맞춤법 절만 고쳐서 낸다.
|
|
85
85
|
파일이 없으면 3이다. 셸에서 분기할 때 stdout 을 파싱하지 않아도 된다.
|
|
86
86
|
|
|
87
87
|
스캔이 내놓는 것만 본다.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"humanize-check.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"humanize-check.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-check.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAWD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAyBxE"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { resolve } from 'node:path';
|
|
1
|
+
import { isReadFailure, readInput } from '../../humanize/read-input.js';
|
|
3
2
|
import { decide, formatReport, parseRegister, parseRuleBook, prescan, runCheck, EXIT_CODE, } from '../../humanize/index.js';
|
|
4
3
|
function read(label, path) {
|
|
5
|
-
const
|
|
6
|
-
if (
|
|
7
|
-
console.error(
|
|
4
|
+
const input = readInput(path, label);
|
|
5
|
+
if (isReadFailure(input)) {
|
|
6
|
+
console.error(input.message);
|
|
8
7
|
process.exit(EXIT_CODE.unknown);
|
|
9
8
|
}
|
|
10
|
-
return
|
|
9
|
+
return input;
|
|
11
10
|
}
|
|
12
11
|
export function humanizeCheckCommand(options) {
|
|
13
12
|
const register = parseRegister(options.register);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"humanize-check.js","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"humanize-check.js","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,MAAM,EACN,YAAY,EACZ,aAAa,EACb,aAAa,EACb,OAAO,EACP,QAAQ,EACR,SAAS,GACV,MAAM,yBAAyB,CAAC;AAWjC,SAAS,IAAI,CAAC,KAAa,EAAE,IAAY;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA6B;IAChE,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,qDAAqD;IACrD,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,qDAAqD;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -10,14 +10,16 @@ export interface HumanizeScanOptions {
|
|
|
10
10
|
* 계약이 갈린다. AGENT.md 0단계가 "S1 0건이면 윤문하지 않는다"를 분기로 세워 뒀는데
|
|
11
11
|
* 그걸 기계가 읽으려면 stdout 을 파싱해야 했다.
|
|
12
12
|
*
|
|
13
|
-
* scan 은 판정 도구가 아니라 자문 도구라 실패를 뜻하는 코드는 안 낸다.
|
|
14
|
-
*
|
|
13
|
+
* scan 은 판정 도구가 아니라 자문 도구라 실패를 뜻하는 코드는 안 낸다. 걸림, 맞춤법만
|
|
14
|
+
* 걸림, 아무것도 안 걸림 셋을 갈라 준다 — 뒤 둘은 다음에 할 일이 다르다.
|
|
15
15
|
*/
|
|
16
16
|
export declare const SCAN_EXIT: {
|
|
17
17
|
/** 걸린 S1 이 있다. 윤문할 자리다 */
|
|
18
18
|
readonly found: 0;
|
|
19
19
|
/** 탐지기가 가리는 범위에서는 0건이다. 비탐지 룰은 사람이 따로 본다 */
|
|
20
20
|
readonly clean: 10;
|
|
21
|
+
/** 어투는 안 걸렸고 맞춤법만 걸렸다. 어투를 건드리지 말고 그것만 고치는 자리다 */
|
|
22
|
+
readonly spacingOnly: 11;
|
|
21
23
|
};
|
|
22
24
|
export declare function humanizeScanCommand(options: HumanizeScanOptions): void;
|
|
23
25
|
//# sourceMappingURL=humanize-scan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"humanize-scan.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-scan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"humanize-scan.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-scan.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS;IACpB,0BAA0B;;IAE1B,4CAA4C;;IAE5C,kDAAkD;;CAE1C,CAAC;AAEX,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAetE"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { resolve } from 'node:path';
|
|
3
1
|
import { EXIT_CODE, formatScan, parseRegister, scan } from '../../humanize/index.js';
|
|
2
|
+
import { isReadFailure, readInput } from '../../humanize/read-input.js';
|
|
4
3
|
/**
|
|
5
4
|
* 스캔 결과의 종료 코드.
|
|
6
5
|
*
|
|
@@ -8,23 +7,30 @@ import { EXIT_CODE, formatScan, parseRegister, scan } from '../../humanize/index
|
|
|
8
7
|
* 계약이 갈린다. AGENT.md 0단계가 "S1 0건이면 윤문하지 않는다"를 분기로 세워 뒀는데
|
|
9
8
|
* 그걸 기계가 읽으려면 stdout 을 파싱해야 했다.
|
|
10
9
|
*
|
|
11
|
-
* scan 은 판정 도구가 아니라 자문 도구라 실패를 뜻하는 코드는 안 낸다.
|
|
12
|
-
*
|
|
10
|
+
* scan 은 판정 도구가 아니라 자문 도구라 실패를 뜻하는 코드는 안 낸다. 걸림, 맞춤법만
|
|
11
|
+
* 걸림, 아무것도 안 걸림 셋을 갈라 준다 — 뒤 둘은 다음에 할 일이 다르다.
|
|
13
12
|
*/
|
|
14
13
|
export const SCAN_EXIT = {
|
|
15
14
|
/** 걸린 S1 이 있다. 윤문할 자리다 */
|
|
16
15
|
found: 0,
|
|
17
16
|
/** 탐지기가 가리는 범위에서는 0건이다. 비탐지 룰은 사람이 따로 본다 */
|
|
18
17
|
clean: 10,
|
|
18
|
+
/** 어투는 안 걸렸고 맞춤법만 걸렸다. 어투를 건드리지 말고 그것만 고치는 자리다 */
|
|
19
|
+
spacingOnly: 11,
|
|
19
20
|
};
|
|
20
21
|
export function humanizeScanCommand(options) {
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
23
|
-
console.error(
|
|
22
|
+
const input = readInput(options.file);
|
|
23
|
+
if (isReadFailure(input)) {
|
|
24
|
+
console.error(input.message);
|
|
24
25
|
process.exit(EXIT_CODE.unknown);
|
|
25
26
|
}
|
|
26
|
-
const
|
|
27
|
+
const text = input;
|
|
28
|
+
const report = scan(text, { register: parseRegister(options.register) });
|
|
27
29
|
console.log(options.json ? JSON.stringify(report, null, 2) : formatScan(report));
|
|
28
|
-
|
|
30
|
+
// 맞춤법만 걸린 원고를 clean 으로 닫으면 "윤문하지 않는다"로 읽혀 그대로 나간다.
|
|
31
|
+
// 어투 0건과 맞춤법만 있는 상태는 다음 할 일이 달라서 코드를 가른다
|
|
32
|
+
if (report.worthHumanizing)
|
|
33
|
+
process.exit(SCAN_EXIT.found);
|
|
34
|
+
process.exit(report.spacing.length > 0 ? SCAN_EXIT.spacingOnly : SCAN_EXIT.clean);
|
|
29
35
|
}
|
|
30
36
|
//# sourceMappingURL=humanize-scan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"humanize-scan.js","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"humanize-scan.js","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAQxE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,0BAA0B;IAC1B,KAAK,EAAE,CAAC;IACR,4CAA4C;IAC5C,KAAK,EAAE,EAAE;IACT,kDAAkD;IAClD,WAAW,EAAE,EAAE;CACP,CAAC;AAEX,MAAM,UAAU,mBAAmB,CAAC,OAA4B;IAC9D,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC;IAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEzE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,mDAAmD;IACnD,yCAAyC;IACzC,IAAI,MAAM,CAAC,eAAe;QAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC"}
|
package/dist/src/core/types.d.ts
CHANGED
|
@@ -441,7 +441,7 @@ export interface ReviewPublishState {
|
|
|
441
441
|
* 밟는다.
|
|
442
442
|
*/
|
|
443
443
|
issuesKey: string;
|
|
444
|
-
/** 이 head에서 PR에 이미 쓴
|
|
444
|
+
/** 이 head에서 PR에 이미 쓴 의견 수. 합의 목록의 앞에서부터 이만큼이다. */
|
|
445
445
|
postedCount: number;
|
|
446
446
|
/** 판정까지 써서 한 바퀴가 끝났는지 */
|
|
447
447
|
completed: boolean;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 룰 ID별 결정적 탐지기.
|
|
3
3
|
*
|
|
4
|
-
* 여기 있는 건
|
|
5
|
-
*
|
|
4
|
+
* 여기 있는 건 정규식으로 셀 수 있는 룰뿐이다. D-5 의인화 주어처럼 뜻을 봐야 판단되는
|
|
5
|
+
* 룰은 일부러 뺐다 — 멀쩡한 문장에서 검사가 멈추면 아무도 안 쓴다.
|
|
6
|
+
*
|
|
7
|
+
* 전부 정확히 걸러내지는 못한다. 잘못 감지가 남는 갈래는 그 자리 주석이 어디까지 새는지 적고
|
|
8
|
+
* 코퍼스가 그 경계를 잡는다.
|
|
6
9
|
* 탐지기가 없는 룰은 모델이 자체검증으로 본다.
|
|
7
10
|
*/
|
|
8
11
|
export interface Detection {
|
|
@@ -30,6 +33,21 @@ export declare function proseLines(text: string, options?: ProseOptions): ProseL
|
|
|
30
33
|
export declare function splitSentences(text: string): string[];
|
|
31
34
|
export declare const DETECTABLE_RULE_IDS: string[];
|
|
32
35
|
export declare function detect(text: string, ruleIds?: readonly string[]): Detection[];
|
|
36
|
+
/** 맞춤법 한 건. 무엇이 틀렸고 무엇으로 고치는지, 몇 건인지와 실제 사례를 담는다 */
|
|
37
|
+
export interface SpacingIssue {
|
|
38
|
+
label: string;
|
|
39
|
+
fix: string;
|
|
40
|
+
count: number;
|
|
41
|
+
samples: string[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 어투가 아니라 맞춤법인 자리를 센다. 등급과 따로 가는 값이다.
|
|
45
|
+
*
|
|
46
|
+
* 리뷰 코멘트는 커밋 해시나 브랜치명을 문장에 그대로 섞기 때문에 조사 처리가 반복해서
|
|
47
|
+
* 어긋난다 (author-voice.md §「기계적 점검 (어투는 아니지만 자주 틀리는 것)」).
|
|
48
|
+
* S1 총계에 섞으면 윤문 등급이 맞춤법 때문에 떨어지므로 ScanReport가 이 값을 따로 들고 간다.
|
|
49
|
+
*/
|
|
50
|
+
export declare function spacingIssues(text: string): SpacingIssue[];
|
|
33
51
|
export declare function countByRule(text: string, ruleIds?: readonly string[]): Map<string, number>;
|
|
34
52
|
export interface ReportRegisterStats {
|
|
35
53
|
plainEndings: number;
|
|
@@ -51,4 +69,15 @@ export interface StructureStats {
|
|
|
51
69
|
links: number;
|
|
52
70
|
}
|
|
53
71
|
export declare function structureStats(text: string): StructureStats;
|
|
72
|
+
/**
|
|
73
|
+
* 어투와 맞춤법을 한 산문 위에서 함께 본다.
|
|
74
|
+
*
|
|
75
|
+
* detect 와 spacingIssues 를 따로 부르면 줄 분할과 인용 제거가 두 번 돈다. 비용은 작지만
|
|
76
|
+
* (500KB 입력에서 12%) 진짜 문제는 나중에 한쪽만 산문 기준이 바뀌면 어투와 맞춤법이 서로
|
|
77
|
+
* 다른 텍스트를 보게 되는 것이다. 산문 정의를 여기 한 군데로 모은다.
|
|
78
|
+
*/
|
|
79
|
+
export declare function scanProse(text: string, ruleIds?: readonly string[]): {
|
|
80
|
+
detections: Detection[];
|
|
81
|
+
spacing: SpacingIssue[];
|
|
82
|
+
};
|
|
54
83
|
//# sourceMappingURL=detectors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectors.d.ts","sourceRoot":"","sources":["../../../src/humanize/detectors.ts"],"names":[],"mappings":"AAAA
|
|
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;AA4KD,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"}
|