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:
@@ -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) 한 화면.
|
||||
|
||||
Reference in New Issue
Block a user