feat: v2.2.194 — Post-gen Term Validator (결정론적 글로서리 검증)

v2.2.192 Terminology Dictionary 가 *instructional* 지시 (LLM 에게 표준 표기 사용 권유)
였다면, 이번엔 *deterministic* 검증 — LLM 이 지시를 안 따랐을 때 결정론적 정규식 스캔.

신규 모듈: src/agent/termValidator.ts
- parseGlossary() — .astra/glossary.md 정규식 파싱 (mtime 캐시)
  Pattern 1: **Canonical** (X: typo1, typo2, ...) — typo 등장 시 "→ Canonical 권장"
  Pattern 2: H2/H3 "금지/비추/forbidden/avoid/don't" 섹션의 -  "phrase"
- validateTermUsage() — 정규식 스캔 + 발견 횟수
- formatTermValidatorFooter() — markdown 한 줄 footer

False-positive 필터:
- 한글 1음절·영문 1자·공백 포함 토큰 제외
- 영문 단어 경계 매치, 한글 substring

Wiring:
- agent.ts _maybeRunTermValidator — Self-Check 직후, swallow 패턴
- /glossary reload — Term Validator 캐시도 함께 비움

신규 설정: g1nation.termValidatorEnabled (기본 true)

Footer 누적:
- v2.2.191 🔍 Self-check (LLM 호출, opt-in)
- v2.2.194 🔤 Term validator (정규식, on by default)

시너지: Terminology Dictionary(instructional, 작성 중) + Term Validator(deterministic,
작성 후) → 사용자가 .astra/glossary.md 한 곳만 관리하면 2단 자동 동작.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-29 16:38:56 +09:00
parent 990ea0ae5f
commit 15a34e0889
21 changed files with 433 additions and 55 deletions
+59
View File
@@ -1,5 +1,64 @@
# Astra Patch Notes
## v2.2.194 (2026-05-29)
### 🔤 Post-gen Term Validator — 결정론적 글로서리 검증 (엔진 변경)
v2.2.192 의 Terminology Dictionary 가 *instructional* (LLM 에게 "표준 표기 사용" 지시) 였다면, 이건 *deterministic* — LLM 이 지시를 안 따랐을 때 결정론적 정규식 스캔으로 catch.
**감사 결과 (적용 범위 좁힘):**
- 사용자 제안 4종 중 **#1a Post-gen Validator** 만 적용 (사용자 선택)
- #1b Contextual Refiner (rewrite) — Self-Check 와 중복, latency 비용
- #2 Few-Shot Bad/Good 예시 — 글로서리 자유 markdown 이라 사용자가 직접 추가 가능
- #3 CoVe 검증 질문 — v2.2.184 + v2.2.191 에서 완료
---
**신규 모듈: [termValidator.ts](src/agent/termValidator.ts)**
- `parseGlossary(filePath)``.astra/glossary.md` 정규식 파싱 (mtime 캐시):
- **Pattern 1**: `- **Canonical** (X: typo1, typo2, ...)` — typo 등장 시 "→ Canonical 권장"
- **Pattern 2**: H2/H3 제목에 "금지/비추/forbidden/avoid/don't" 포함 섹션의 `- ❌ "phrase"` 또는 `- ❌ phrase`
- `validateTermUsage(answer, path)` — 정규식 스캔 + 발견 횟수
- `formatTermValidatorFooter(result)` — markdown 한 줄 footer
- 토큰 필터 — 한글 1음절·영문 1자·공백 포함 토큰 제외 (false-positive 최소화)
- 영문 토큰: 단어 경계 매치, 한글: substring (한글은 word boundary 의미 없음)
**비용·안전:**
- **LLM 호출 없음** — 정규식 1회, 수 ms
- 매 turn 자동 실행 (Self-Check 옆)
- 글로서리 없거나 비어 있으면 silent no-op
- 답변 자체엔 영향 없음 (Devil/Self-Check 와 같은 swallow 패턴)
**Footer 형식:**
- 위반 없음: `🔤 Term validator: ✓ 사전 N개 항목, 위반 없음`
- 위반 있음: `🔤 Term validator: ⚠️ 위반 3건 — "astra" → "ASTRA" · "chronicle 외" → "Chronicle" · "p-rein동" → "P-Reinforce"`
**Wiring:**
- [agent.ts](src/agent.ts) — `_maybeRunTermValidator` 메서드 추가, Self-Check 호출 직후
- `/glossary reload` — Term Validator 캐시도 함께 비움
**신규 설정 1개:**
- `g1nation.termValidatorEnabled` (boolean, 기본 true)
---
**ASTRA 답변 후 검증 누적 (footer 형식):**
| 빌드 | Footer | 비용 | Default |
|---|---|---|---|
| v2.2.191 | `🔍 Self-check`: 답함=✓ · 근거=○ · 모순=없음 | LLM 호출 1회 | off (opt-in) |
| **v2.2.194** | **`🔤 Term validator`: ✓ 사전 N개, 위반 없음** | **정규식 1회 (cheap)** | **on** |
**시너지:**
- Terminology Dictionary (v2.2.192) → LLM 에게 표준 표기 사용 지시 (작성 중)
- Term Validator (v2.2.194) → 그 결과를 *답변 후* 검증 + 위반 표시 (작성 후)
- 즉, *instructional + deterministic* 의 두 단계 방어선
**신규 패키징:** `astra-2.2.194.vsix`.
---
## v2.2.193 (2026-05-29)
### 📚 /help — 슬래시 명령 카테고리 브라우저 + 엔진 상태
누적된 슬래시 명령이 25개+. 사용자 발견 부담을 줄이기 위해 카테고리별 그룹핑 + ASTRA 추론 엔진 상태(6종 verification 블록 on/off) 한 화면.