fix(self): 자기 평가 구식 제안 재발 — 개념 매핑·관측성·앵커 차단 3중 보강 (v2.2.227)

v2.2.226 후에도 동일 구식 제안("CoVe 도입하라" 등 + 출처: 모델 지식) 재현.
이번 보강의 핵심은 실패를 *관측 가능*하게 만드는 것 — "주입이 안 됨" vs
"주입됐는데 무시"를 구분 못 해 같은 버그를 3번 쫓았다.

- 개념 매핑 갭 봉쇄: 인벤토리에 "학술 개념 ↔ 구현 매핑" 섹션 자동 생성
  (CoVe/Self-Critique↔coveEnabled+critic-loop, 노후점검 자동화↔주간 사이클,
  충돌 해결↔일일 스캔+신뢰도 권고, 피드백 태깅↔Correction Loop 등 8건).
  모델이 학술 명칭으로 제안할 때 설정 키와 같은 것임을 모르는 갭 제거.
- 관측성: 주입 성공 logInfo + 모델에게 "출처: ASTRA 기능 인벤토리 v<버전>"
  표기 지시 — 답변만 봐도 인벤토리가 도달했는지 판별 가능.
- 감지 확대: SELF_RE 에 connectai/프로젝트/업무 능력 추가, 길이 상한 600→1500
  (배경 설명 붙은 실사용 질문 포착).
- 앵커 차단: "직전 대화의 본인 제안 반복 금지 — 인벤토리가 우선" 지시
  (같은 세션 재질문 시 이전 답변 히스토리에 끌려가는 것 방지).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 12:19:02 +09:00
parent 960f43f643
commit c9ce36138f
5 changed files with 35 additions and 8 deletions
+7 -4
View File
@@ -16,16 +16,17 @@ import * as path from 'path';
import { INVENTORY_FILE } from '../../extension/featureInventory';
const IMPROVE_RE = /(개선|고도화|발전|보완|제안|평가|분석|방향|방법|아이디어|로드맵|업그레이드|날카롭|강화)/i;
const SELF_RE = /(기능|역량|능력|아키텍처|구조|시스템|self.?evolv|자기\s*진화|자기\s*개선|아스트라|astra|너(가|의|는)?|네가)/i;
const SELF_RE = /(기능|역량|능력|아키텍처|구조|시스템|self.?evolv|자기\s*진화|자기\s*개선|아스트라|astra|connectai|프로젝트|업무\s*능력|너(가|의|는)?|네가)/i;
const CAPABILITY_RE = /(무슨|어떤|할\s*수\s*있는)\s*(기능|일|것)|기능\s*(목록|리스트)|capabilit/i;
/**
* 자기 평가·개선·기능 질의인지. 오탐 비용이 낮으므로(인벤토리 ~3KB 추가 주입뿐)
* 누락(또 구식 제안)보다 과잉 감지를 택한다.
* 누락(또 구식 제안)보다 과잉 감지를 택한다. 길이 상한 1500 — 사용자의 개선 요청은
* 배경 설명이 붙어 길어지는 경우가 많다 (600 으로는 실사용 질문을 놓침).
*/
export function isSelfAssessRequest(prompt: string): boolean {
const p = (prompt || '').trim();
if (!p || p.length > 600) return false;
if (!p || p.length > 1500) return false;
return CAPABILITY_RE.test(p) || (IMPROVE_RE.test(p) && SELF_RE.test(p));
}
@@ -49,9 +50,11 @@ export function buildSelfAssessContext(brainPath: string): string {
return [
header,
'자기 기능 평가·개선 제안 시 반드시 아래 인벤토리와 대조하라:',
'- 아래에 **이미 있는 기능을 신규 제안하지 마라.**',
'- 아래에 **이미 있는 기능을 신규 제안하지 마라.** 특히 "개선 제안 전 필독" 섹션의 개념들(CoVe·노후 점검 자동화·충돌 해결·피드백 태깅 등)은 명칭이 달라도 이미 구현돼 있다 — 이를 "도입하라"고 제안하면 그 답변은 오답이다.',
'- 제안은 "현재 X가 있고, 빠진 증분은 Y" 형태로.',
'- 아래에 없는 기능을 있다고 주장하지도 마라.',
'- 직전 대화에서 본인이 했던 제안 목록을 그대로 반복하지 마라 — 이 인벤토리가 그 제안들보다 우선하는 최신 사실이다.',
'- 답변 끝에 "출처: ASTRA 기능 인벤토리 v<버전>" 을 표기하라 (이 블록을 실제로 읽었다는 증거).',
'',
body,
].join('\n');