Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"name": "ennoia",
"source": "./plugins/ennoia",
"description": "Ennoia에서 에이전트 생성, 문서 지식 연결, App 실행, 운영 진단과 제품 피드백을 수행합니다.",
"version": "1.5.5"
"version": "1.5.6"
}
]
}
20 changes: 20 additions & 0 deletions evals/2026-10-27-model-family-selection-summary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# GPT·Gemini 공통 모델 선택 회귀

2026-10-27에 PR #25의 공통 모델 선택 기준이 Sonnet에 한정되는지 추가 확인했다. 제품 지침에는 특정 provider·모델명 분기가 없으며, 지침을 변경하지 않은 commit `712db57`에 GPT 8개·Gemini 8개의 합성 입력을 적용했다. 같은 상위 세션의 모델 설정을 상속한 fresh context 5개에서 각 16개 입력을 독립 평가했다. 평가자에게 build Skill·필요한 내부 reference와 입력만 제공하고 rubric·다른 출력·diff를 읽지 않도록 했다.

| 경로 | GPT 5회 | Gemini 5회 |
| --- | --- | --- |
| 같은 등급 안에서 최신 버전 선택 | 모두 최신 mini 선택, 더 비싼 별도 등급 유지 경계 준수 | 모두 최신 Flash 선택, Pro로 임의 변경하지 않음 |
| 다음 페이지가 남음 | 모두 `query=gpt`, `page=1` 추가 조회 | 모두 `query=gemini`, `page=1` 추가 조회 |
| 구버전 exact 검색만 확보 | 모두 버전 없는 `gpt`로 재검색 | 모두 버전 없는 `gemini`로 재검색 |
| 사용자 exact 모델 지정 | 모두 지정 버전 보존 | 모두 지정 버전 보존 |
| 최신 후보가 필수 기능 미지원 | 모두 구조화 출력 지원 후보 선택·제약 설명 | 모두 이미지 입력 지원 후보 선택·제약 설명 |
| 기반 버전을 알 수 없는 alias | 모두 추가 정보 확인 전 최신 선택 보류 | 모두 추가 정보 확인 전 최신 선택 보류 |
| 공개 최신 모델이 프로젝트에는 없음 | 모두 현재 프로젝트에 있는 exact 모델명 사용 | 모두 현재 프로젝트에 있는 exact 모델명 사용 |
| 기존 에이전트의 말투만 수정 | 모두 기존 모델 보존 | 모두 기존 모델 보존 |

작성자는 5개 원본 JSON의 모델 선택·다음 도구 인자·근거를 별도 [판정 기준](model-family-selection-rubric.md)과 대조했다. 전 사례가 기준을 충족했고 Sonnet 전용으로 처리하는 경로는 관찰되지 않았다. 최초 Sonnet 중심 평가와 이번 GPT·Gemini 회귀는 구분하며, 이번 확인으로 제품 지침을 추가 수정하지 않았다.

입력 SHA-256은 `04f89a87f9783ddbdbdfa43bc7316d8e05b6e51a57eee4db2b63760f4aa71896`이다. 적용한 build Skill은 `11a50397b4a4ba4b67b6299bfa2daa95f7035e53aaf3e020efabcee09fd0f82b`, 모델 선택 reference는 `b26f2436bdd3ee6eda89f63e5dacc8ac26462657e9b2c37277810aad49d44e52`로 최초 후보와 동일하다. 원본 출력은 Git 제외 로컬 `docs/model-family-selection-eval/run-1.json`부터 `run-5.json`에 보관했다.

모델명·버전 관계는 합성 입력이다. 실제 공개 최신 모델·현재 프로젝트 카탈로그를 조회하거나 GPT·Gemini 에이전트를 생성·검증·저장한 결과가 아니며 native host 실행 성공이나 통계적 성공률로 해석하지 않는다. 이번 변경은 패키지 밖 평가 자료만 추가하므로 Plugin version과 기존 제품 코드는 바꾸지 않았다. JSON 형식·case ID·input-only 필드·diff 공백을 확인했으며 변경되지 않은 제품의 Python·Node 검사는 새 근거 없이 반복하지 않았다.
26 changes: 26 additions & 0 deletions evals/2026-10-27-model-selection-summary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# 모델 자동 선택 지침 비교

2026-10-27에 동일한 10개 합성 입력을 변경 전·후 각각 fresh context 5회로 평가했다. 기존 지침은 main `b1f6cc6`의 1.5.5이며 후보는 1.5.6이다. 모든 평가자는 동일한 상위 세션의 모델 설정을 상속했고 모델 override를 사용하지 않았다. 평가자는 build Skill과 필요한 내부 reference, 입력만 읽었으며 다른 평가 출력·rubric·diff는 제공하지 않았다. 최종 출력 후 작성자가 별도 rubric으로 다음 행동과 모델 선택을 확인했다.

| 관찰 경로 | 기존 5회 | 후보 5회 |
| --- | --- | --- |
| 모델군 첫 페이지에 구버전만 있고 다음 페이지가 남음 | 모두 `sonnet4-6`을 선택하고 추가 조회 생략 | 모두 같은 모델군의 `page=1`을 먼저 조회하고 선택 보류 |
| 기억한 구버전 exact 이름으로만 검색함 | 모두 `sonnet4-6`으로 선택 확정 | 모두 버전 없는 `query=sonnet`, `page=0`으로 재검색 |
| 현재 카탈로그 미조회 | 모두 현재 프로젝트 모델 조회 | 같은 경계 유지 |
| 숫자 major/minor 비교 | 모두 `sonnet10-1` 선택 | 같은 선택 유지 |
| 사용자가 exact 버전 지정 | 모두 지정한 `sonnet4-6` 유지 | 같은 선택 유지 |
| 모델군만 지정 | 모두 `sonnet5.5` 선택 | 같은 선택 유지 |
| 최신 후보가 필수 RAG 미지원 | 모두 RAG 가능한 `sonnet4-6` 선택 | 같은 선택 유지, 최신 후보의 기능 제약 설명 |
| 버전을 알 수 없는 custom alias | 모두 최신을 확정하지 않고 추가 정보 확인 | 같은 경계 유지 |
| 기존 agent의 말투만 변경 | 모두 기존 모델 보존 | 같은 경계 유지 |
| 저비용 분류 업무 | 모두 Haiku 안의 `haiku4-5` 선택 | 같은 등급·선택 유지 |

개선으로 확인한 경로는 앞의 두 가지다. 기존에도 올바르게 처리한 8개 경로를 개선 실적으로 계산하지 않는다. 기존 평가에서 “충분한 자원을 찾으면 모든 페이지를 읽지 않는다”, “모델군 전체 비교 의무가 없다”는 이유로 구버전을 확정하는 행동을 확인했다. 후보는 관련 모델군의 최신 후보 확인을 완료 조건으로 삼고, 일반 자원 pagination 규칙과 모델 선택 기준을 연결했다.

입력 SHA-256은 `d0c1af26499651928ec5ae1f73228764f45a9151192349d477518d53f98b102d`다. 기존 build Skill은 `3ba79b76a1a2161a735c54395e865ba5502ab788e50468b10e1b84a7f34dc271`, 후보 build Skill은 `11a50397b4a4ba4b67b6299bfa2daa95f7035e53aaf3e020efabcee09fd0f82b`, 후보 모델 선택 reference는 `b26f2436bdd3ee6eda89f63e5dacc8ac26462657e9b2c37277810aad49d44e52`다. 원본 JSON 출력 10개와 기존 Skill 복사본은 Git 제외 로컬 `docs/model-selection-eval/`에 보관했다.

이 결과는 합성 입력에 대한 다음 의사결정 평가다. 다음 페이지의 실제 응답이나 실제 모델 실행·graph 검증·저장은 수행하지 않았으며, 가상 모델명·버전 관계는 실제 출시 정보의 증거가 아니다. 5회의 일치 결과를 통계적 성공률이나 모든 host에서의 동작 보장으로 해석하지 않는다. native 설치·새 세션 Skill 로딩·실제 MCP 업무는 별도 미검증 범위다.

패키지 검증·manifest sync·기존 결과 schema 검사, Python 회귀 63개와 Node 회귀 36개는 통과했다. 최초 시스템 Python 실행은 `jsonschema` 의존성 부재로 실패했으며, 저장소의 `requirements-dev.txt`를 별도 venv에 설치한 뒤 전체 검사를 통과했다.

Claude CLI의 Marketplace·Plugin `validate --strict`도 exit 0으로 통과했다. Plugin Directory 제출용 추가 진단에는 기존 LICENSE 부재와 privacy policy URL 부재가 표시됐다. 해당 Directory 제출 검사는 이번 모델 선택 변경 범위가 아니며, native 설치·OAuth·실행 성공의 증거로 사용하지 않는다.
6 changes: 6 additions & 0 deletions evals/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Skill 동작 평가

## 모델 자동 선택

[`model-selection-scenarios.json`](model-selection-scenarios.json)은 카탈로그 미조회, pagination, 구버전으로 한정한 검색, 숫자 버전 비교, exact 모델 지정, 모델군 지정, 필수 기능, 불명확한 alias, 기존 설정 보존, 업무에 맞는 등급 유지의 10개 합성 입력이다. 입력만 제공한 다음 별도 [평가 기준](model-selection-rubric.md)으로 다음 행동과 모델 선택을 판정한다. [변경 전·후 반복 평가](2026-10-27-model-selection-summary.md)에 개선된 두 경로와 기존에도 통과한 경로를 구분했다. 가상 모델명과 버전 관계는 실제 출시 정보나 프로젝트 사용 가능 여부의 증거가 아니다. 합성 모델 판단과 실제 MCP·host 실행 검증을 구분한다.

[`model-family-selection-scenarios.json`](model-family-selection-scenarios.json)은 같은 공통 지침을 GPT·Gemini에도 적용하는 16개 추가 입력이다. [판정 기준](model-family-selection-rubric.md)과 [반복 평가 결과](2026-10-27-model-family-selection-summary.md)에 모델군·등급별 최신 선택, 페이지 조회, 지정 모델·기능·기존 설정 보존을 기록했다. 최초 Sonnet 중심 평가와 구분하며 제품 지침의 provider별 분기를 추가하지 않았다.

## 개인 OAuth 연결 복구

[`oauth-recovery-scenarios.json`](oauth-recovery-scenarios.json)은 승인 대기·만료·중복 요청·ACTIVE 판정·완료 화면·신규 등록 구분·민감 URL의 8개 합성 입력이다. [판정 기준](oauth-recovery-rubric.md)은 실제 API 실행과 구분하며, [기존·후보 비교](2026-10-27-oauth-recovery-summary.md)에서 기존 지침도 통과한 행동은 개선 실적으로 세지 않는다.
Expand Down
16 changes: 16 additions & 0 deletions evals/model-family-selection-rubric.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# GPT·Gemini 모델군 회귀 평가

`model-family-selection-scenarios.json`의 prompt·observations·environment만 평가자에게 제공한다. 제품 지침은 변경하지 않고 PR #25의 동일한 공통 모델 선택 기준을 적용한다. 모델명과 버전 관계는 합성이며 실제 출시 정보가 아니다.

| 공통 suffix | GPT 통과 기준 | Gemini 통과 기준 |
| --- | --- | --- |
| `latest-in-tier` | mini 등급에서 `gpt-10.1-mini` 선택; 더 비싼 기본 등급의 `gpt-10.2`로 올리지 않음 | Flash 등급에서 `gemini-10.1-flash` 선택; 더 비싼 Pro 등급으로 올리지 않음 |
| `family-pagination` | `query=gpt`, `page=1` 조회 후 선택 확정 | `query=gemini`, `page=1` 조회 후 선택 확정 |
| `version-filtered` | 버전을 포함하지 않은 `query=gpt`, `page=0`으로 재검색 | 버전을 포함하지 않은 `query=gemini`, `page=0`으로 재검색 |
| `exact-pinned` | 사용자 지정 `gpt-9.9-mini` 유지 | 사용자 지정 `gemini-9.9-flash` 유지 |
| `required-capability` | 구조화 출력이 필수이므로 지원하는 `gpt-9.9-mini` 선택·최신 후보의 미지원 설명 | 이미지 입력이 필수이므로 지원하는 `gemini-9.9-flash` 선택·최신 후보의 미지원 설명 |
| `opaque-aliases` | 실제 버전 정보 확인 전 최신 모델을 확정하지 않음 | 실제 버전 정보 확인 전 최신 모델을 확정하지 않음 |
| `project-availability` | 현재 프로젝트에 있는 `gpt-9.9-mini` 사용; 목록에 없는 모델명 합성 금지 | 현재 프로젝트에 있는 `gemini-9.9-flash` 사용; 목록에 없는 모델명 합성 금지 |
| `existing-model` | 말투만 변경하고 기존 `gpt-9.9-mini` 유지 | 말투만 변경하고 기존 `gemini-9.9-flash` 유지 |

같은 16개 입력을 fresh context 5회 반복하고 다음 행동과 exact model_name을 원본 출력에서 확인한다. 앞선 Sonnet 중심 평가와 이번 회귀 평가를 구분하며, 실제 MCP·host 업무 성공이나 통계적 성공률로 표현하지 않는다.
Loading
Loading