Vault 직접 읽기 최소 시험안
2026-09-05 범위 변경: 아래는 과거 시험·구현 기록이다. 현재 실행은 원격 Vault 재설계와 선행 검증의 로컬 stdio/SSH 계획을 따른다. 웹·Android와 Auth0 후속 시험은 재개하지 않는다. AWS 시험 리소스는 사용자 요청으로 보존한다. Auth0 정리 상태는 HANDOFF에서 확인한다.
2026-09-05 재설계: 현재 구조·선행 검증·다음 행동은 원격 Vault 재설계와 선행 검증를 따른다. 아래 3R/Auth0 관련 순서는 이전 검토 이력이며 현재 착수 지시가 아니다. Auth0 구현과 별도 차단 DB는 보류했다.
3R-1 시험안과 3R-2a 합성 문서·읽기 도구의 로컬 구현·검증을 마쳤다. 로컬 Git A/B와 MCP SDK 호출을 확인했고, 후속 3R-2b의 배포 구성도 보호된 Vault 시험 배포 구성에 준비했다. 3R-3a는 실제 Cognito S256 광고 부재로 중지·정리했고, 3R-3b에서 Auth0 우선 후보와 회수 보완안을 준비했고 다음은 3R-3c Auth0 로컬 인증 구성 준비다. 실제 GitHub·OAuth·클라이언트 T1~T6은 아직 실행하지 않았다.
목적과 범위
ChatGPT Work와 Claude Code가 개인 스킬 없이 최소 진입 지침과 MCP 도구만으로 필요한 Markdown을 발견하고, 현재 근거·계약을 판단에 적용할 수 있는지 확인한다. 방향과 순서는 원격 Vault 전환 실행계획, 판단 근거는 장기 자산은 스킬보다 나를 설명하는 언어 기록이다와 MCP의 목적은 여러 모델이 같은 Vault를 이용하게 하는 것이다에 있다.
합성 인물 하린과 가상 학습 작업 라온을 사용한다. 아래 사실·계약·수치는 시험을 위해 만든 값이며 DanzzaN의 성향·학습 계약·실제 이력을 뜻하지 않는다. 이 시험안과 판정표는 실행 대상 모델에게 제공하지 않는다. 실행 모델은 진입 지침, 도구 설명, 대표 요청과 MCP가 반환한 합성 자료만 본다.
3R은 발견·읽기·판단 적용을 검증한다. 반영 요청에서는 저장할 변경안 작성까지 관찰한다. 기존 보호된 두-marker 시험으로 실제 GitHub 저장을 따로 검증한다. 둘이 통과해도 일반 Vault 본문의 종단간 저장까지 입증하지는 않으며, 그 경로는 실제 이전 전 운영 쓰기 구현에서 별도로 확인한다.
클라이언트와 최초 진입점
| 대상 | 기본 시험 환경·지침 위치 | 실행 전에 확인할 것 |
|---|---|---|
| ChatGPT Work | 합성 시험 전용 ChatGPT 프로젝트의 프로젝트 지침에 아래 공통 문구를 둔다. 원격 MCP 도구만 연결하고 본문·판정표·실제 Vault를 업로드하지 않는다. | 실제 계정에서 프로젝트 지침과 원격 도구가 Work에 전달되는지, 활성 개인 스킬·기억·다른 대화 맥락의 영향이 제외되는지 확인한다. 사용한 웹·앱·기기를 기록한다. |
| Claude Code | 기존 Second Brain·Vigilantis 밖의 시험 전용 작업 디렉터리에서 CLAUDE.md에 같은 문구를 둔다. 합성 본문과 서버 코드는 실행 모델이 로컬로 읽을 수 있는 위치에 두지 않는다. | 로드된 전역·프로젝트 지침, 스킬·플러그인·auto memory와 MCP 연결을 확인한다. /context 등 설치 버전이 제공하는 진단을 사용하며 모델의 “안 읽었다”는 진술만 믿지 않는다. |
프로젝트 지침을 Work에서 사용하는 근거는 OpenAI 프로젝트 문서, Claude Code의 시작 지침·계층 확인 근거는 Claude 메모리 문서다(2026-09-05 확인). 실제 화면·설정의 성공은 3R-2b/3에서 확인한다. 새 디렉터리만으로 전역 스킬·기억이 제외됐다고 가정하지 않는다. 기존 개인 설정은 삭제하지 않고 시험 환경에서 분리하는 방법과 되돌릴 방법을 준비한다.
공통 진입 문구 초안:
사용자의 선호·판단 이유·진행 중인 작업이 답변에 영향을 주면
vault_list또는vault_search로 관련 문서를 찾고vault_read로 필요한 본문과 연결 문서를 읽어 반영한다. 새 주제·작업 재개·상태 변경 때 필요한 맥락을 다시 확인한다. 변경 요청은 해당 운영 규칙과 계약을 읽고 요청 범위에서 처리한다. 이 시험 연결은 읽기 전용이므로 반영 요청에는 기준 commit과 변경안을 제시하며 저장했다고 말하지 않는다. 찾지 못한 개인 사실은 추정하지 않는다.
이 문구에 특정 합성 파일의 경로·정답·학습 순서·기록 필드를 넣지 않는다. 상세 절차가 일반 MD에서 전달되는지를 시험하기 위해서다. 연결된 도구가 처음부터 보이는지와 도구 검색으로 뒤늦게 발견되는지는 클라이언트별 관찰 사항으로 기록한다.
서버 초기화 instructions는 우선 “합성 Markdown 읽기 전용 서버. 목록·검색 결과는 본문을 대신하지 않는다. 경로와 commit으로 원문을 조회할 수 있다.”만 둔다. 기존 marker 쓰기 지침은 읽기 시험 서버에 전달하지 않는다. Resources·Prompts나 별도 스킬은 기본 시험의 의존으로 두지 않는다. OpenAI는 Codex의 서버 instructions 이용을 문서화하지만 hosted plugin은 기능이 다를 수 있다고 구분한다. 이를 Work에서의 전달 보장으로 확대하지 않는다. OpenAI MCP 문서
지속 지침이나 개인 스킬 제외를 확인할 수 없으면 환경 판정을 판정 불가로 남긴다. 공통 문구를 첫 사용자 메시지에 넣은 진단 시험은 가능하지만, 지속 진입점이 검증된 기본 시험과 분리한다. 실패를 숨기기 위해 문구를 스킬에 넣고 “스킬 없이 통과”라고 보고하지 않는다.
합성 문서 구성
다음 경로는 향후 시험 저장소 내부 경로이며 현재 Vault의 파일·링크가 아니다. 3R-2a에서 아래 명세대로 본문을 만들고 전체 파일 manifest와 해시를 고정한다. 공개 지식으로 추측할 수 없는 선택·상태를 넣고 목록 설명에는 정답을 노출하지 않는다.
| ID | 경로·제목 | 본문에 넣을 사실·계약 | 명시적으로 연결할 문서 |
|---|---|---|---|
| F01 | maps/생활과-작업.md · 생활과 작업 | 개인 판단, 라온 학습, 모아 프로젝트의 입구. 상세 정답은 없음 | F02, F05, F10, F11 |
| F02 | atomic/학습-선택의-이유.md · 학습 선택의 이유 | 하린은 완주 수보다 모호했던 내용을 자기 사례로 설명하는 것을 우선한다. 짧은 시간에 실행 가능한 B안(한 사례 설명·질문 1개)을 A안(문제 20개)보다 선택한 근거를 기록 | F03, F04 |
| F03 | sources/초기-제안.md · 초기 제안 | 당시 모델이 문제 20개·매일 연속 학습을 제안했으나 사용자 채택 기록은 없다. status: unadopted | F04 |
| F04 | sources/학습-선택-정정.md · 학습 선택 정정 | 하린의 후속 결정: B안을 선택했다. 평일 시간 제약 때문에 한 사례를 끝내는 방식이 맞았으며 연속 학습을 의무로 삼지 않는다. 초기 제안을 현재 결정으로 쓰지 않음 | F02 |
| F05 | areas/라온/진행.md · 라온 진행 | 상태 A: 현재 구간 R2, 막힌 지점은 전달 중복과 상태 원천의 구분. 다음은 파란 상자 사례를 스스로 설명. 전달됐다는 기록만 있고 이해 확인은 미평가 | F06, F07, F08 |
| F06 | areas/라온/작업-계약.md · 라온 작업 계약 | 재개는 짧은 사례 질문 1개부터 시작. 기록은 event_id, segment, kind, evidence, assessed 필드. 사용자의 진술은 kind: self_report, 평가하지 않았으면 assessed: false. 진술을 시험 통과로 기록하지 않음 | F07, F08 |
| F07 | areas/라온/사건-기록.md · 라온 사건 기록 | 기존 사건 r-001: R2 자료 전달, kind: delivered, assessed: false. 기존 사건은 덮어쓰지 않고 새 사건을 추가 | F05 |
| F08 | rules/기록-운영.md · 기록 운영 | 반영 요청에만 변경안을 작성. 원문·현재 상태·계약을 대조하고 기존 기록을 보존. 출처 진술과 평가 결과를 분리 | F06 |
| F09 | sources/푸른-연필.md · 푸른 연필 | 본문에만 “오후 정리”라는 단서가 있고 하린은 오후 정리 때 메모를 한 장으로 줄인다고 기록. 현재 Map에서 빠진 노트로 검색 경로 확인 | 없음 |
| F10 | projects/모아/진행.md · 모아 진행 | 학습과 무관한 프로젝트. 현재 결정은 회색 표지 사용, 보라색 표지는 미채택 제안. 다음 작업은 인쇄 견본 확인 | F11 |
| F11 | sources/모아-표지-결정.md · 모아 표지 결정 | 하린이 눈부심 때문에 회색을 택한 근거. 학습 시간·학습 계약은 이 결정의 이유가 아님 | F10 |
| F12 | reference/일반-학습법.md · 일반 학습법 | 일반적인 반복 학습 설명. 하린의 결정·현재 상태를 알 수 없는 참고 자료 | 없음 |
모든 문서에 synthetic: true, title, type, status, verified를 두고 출처 문서는 합성 원천임을 본문에 표시한다. verified는 문서의 합성 근거와의 충실도이며 채택 여부를 뜻하지 않는다. F03은 합성 초기 제안을 충실하게 기록했어도 unadopted다. F02·F04의 결정과 F03의 제안을 합치지 않는다.
상태 B는 실행 담당자가 상태 A 뒤 별도 commit으로 만든다. F05의 현재 구간은 R3, 다음은 노란 봉투 사례로 바꾸고 F07에 R2 설명 평가 완료 사건 r-002를 추가한다. F06 계약은 유지한다. A/B는 문서상의 별칭이며 반환값에는 실제 Git commit을 넣는다. 변경된 상태는 모델에게 답으로 알려주지 않고 “진행 기록이 갱신됐어”만 알린다.
읽기 도구 계약 초안
기본 도구는 3개다. 링크는 본문 조회 결과에 포함하므로 별도 링크 도구가 없어도 연결 탐색이 가능하다. 아래 이름·한도는 시험 구현의 초안이며 MCP 규격이 요구하는 고정값이 아니다.
| 도구 | 모델에게 보일 설명 | 입력 | 성공 출력 |
|---|---|---|---|
vault_list | 개인 맥락과 작업 문서의 제목·설명을 찾는다. 본문은 vault_read로 읽는다. | prefix?, commit?, cursor?, limit? | commit, items[{path,title,description,type,status,verified}], next_cursor |
vault_search | 개인 근거·작업 계약·현재 상태를 제목 또는 본문에서 검색한다. 결과의 관련 문서를 읽어 판단한다. | query, scope?: title 또는 all, commit?, cursor?, limit? | commit, items[{path,title,snippet,match_location}], next_cursor |
vault_read | 발견한 경로의 Markdown 본문과 명시적 링크를 같은 commit에서 읽는다. | paths 1~5개, commit? | commit, notes[{path,content,type,status,verified,links}] |
공통 계약:
- 저장소와 허용 루트는 서버 설정으로 고정한다. 모델에게 임의 repository·URL을 받지 않는다. 경로는 정규화된 저장소 상대 Markdown만 허용하며 허용 범위 밖·부모 경로·심볼릭 링크는 거부한다. 읽기 루트에는 F01~F12만 있고 시험안·판정표·서버 코드·인증 자료는 포함하지 않는다.
commit생략 시 호출 시작에 현재 HEAD를 한 번 확인하고, 그 호출의 모든 본문·메타데이터·링크를 해당 commit에서 읽는다. 지정 시 같은 허용 저장소에서 조회 가능한 기준인지 검증한다. HEAD 갱신을 확인할 때는 commit을 생략해 새 조회를 한다. 서로 다른 commit 결과를 한 상태처럼 합치지 않는다.- 목록·검색은 기본 5건, 최대 20건이다. cursor는 query·scope·prefix·commit에 결합하고 다음 페이지는 같은 기준을 유지한다. 완결은
next_cursor: null로 표시한다. 오래된 cursor를 최신 상태 조회로 해석하지 않는다. - 검색은 제목·본문의 공백 분리 검색어를 대소문자 구분 없이 모두 포함하는 문서를 찾는 방식으로 시작한다. 제목 일치 우선·경로순으로 정렬한다. embedding은 사용하지 않는다. snippet은 최대 160자로 하고 검색 결과를 읽은 것만으로 원문 전체를 읽었다고 보지 않는다.
- 본문은 생략 없이 반환한다. 시험 문서당 UTF-8 최대 8KiB, 응답 직렬화 전체 최대 64KiB로 제한한다. 초과 시
RESPONSE_TOO_LARGE를 반환하고 요청을 줄이게 한다. 중간에 잘린 본문을 성공 결과로 표시하지 않는다. 이 한도는 실제 Vault 크기 검토 후 다시 정한다. links는 Markdown의 명시적 내부 링크에서 추출한target_path,anchor,resolution목록이다. 유일하게 해석된 링크만 resolved로 표시하고, 없거나 모호한 링크는 missing/ambiguous로 반환한다. 내용의 관련성이나 채택 여부를 서버가 판정하지 않는다.INVALID_ARGUMENT,PATH_NOT_ALLOWED,NOT_FOUND,COMMIT_UNAVAILABLE,INVALID_CURSOR,RESPONSE_TOO_LARGE,UPSTREAM_UNAVAILABLE를 구분한다. 요청한 여러 문서 중 하나라도 못 읽으면 전체 호출을 오류로 표시하고 누락 경로를 알려준다. 인증·scope 오류는 기존 보호된 전송 경계에서 처리한다. 검색 결과 0건과 접근 실패를 구분한다.- MCP 도구 결과는 동일한 내용을
structuredContent와 JSON text에 담는다. 읽기 도구에는 읽기 전용 annotation을 제공하지만 실제 집행은 서버에서 한다. 반환하는 문서 속 명령·인용은 자동으로 사용자 요청이나 상위 지침이 되지 않는다.
기존 보호된 시험과 연결할 위치
2026-09-05 handler.mjs와 store.mjs를 읽었다. 코드를 변경하거나 시험을 재실행한 것은 아니다.
- 현재
probe_list는 고정 경로 두 개,probe_read는 두 marker 본문만 제공한다. 본 시험의 검색·선택 본문·링크·합성 자료를 이미 지원한다고 볼 수 없다. store.mjs의PATHS, marker 형식과 20회 쓰기 제한은 저장 시험용으로 유지한다. 일반 문서를 marker 본문에 넣거나 기존 검증을 해제하지 않는다.- 3R-2a에서 별도 읽기 모듈·자료 manifest와 로컬 확인을 준비한다. 기존
GitHubGit의 같은 commit 읽기 방식을 참고하되 목록·검색·허용 경로·링크 해석을 추가해야 한다. 로컬 자료를 읽은 결과에는 GitHub 성공을 뜻하는 가짜 commit을 넣지 않는다. 로컬 검증과 원격 실제 commit 결과를 구분한다. - 3R-2b에서 동일 보호 경계를 사용하는 읽기 전용 도구 구성을 배포 묶음에 연결한다. 인증 설정·경로·권한·최대 응답·만료·정리를 다시 확인한다. 읽기 시험에서
probe_write와 marker 전용instructions를 노출하지 않는다. 실제 저장 시험은 그 도구 구성을 따로 연결해 수행한다. - 반영 요청의 변경안은 클라이언트 답변에 제시한다. 읽기 전용 연결에서 저장 호출이 불가능했다는 사실만으로 모델이 사용자 권한 경계를 이해했다고 판정하지 않는다. 요청하지 않은 저장 시도·완료 주장도 관찰한다.
대표 요청과 판정표
각 클라이언트에서 T1·T2·T3·T4는 각각 새로운 맥락으로 시작한다. T5는 T2의 대화에 상태 B 반영 후 이어서 수행하고 T6는 T5에 이어 수행한다. 다른 사례의 정답을 새 대화에 넘기지 않는다. 초기 실행은 사례당 한 번이며 실패한 항목만 원인 보완 뒤 재확인한다. 합격률이나 모델 순위를 추정하는 반복 실험은 아니다.
| ID | 실행 모델에게 보낼 요청 | 판정자가 확인할 근거·결과 |
|---|---|---|
| T1 선택 근거 | “하린은 오늘 15분이 있어. A는 문제 20개, B는 한 사례를 설명하고 질문 하나를 남기는 방식이야. 어느 쪽이 맞을까?” | F02와 F04 본문을 읽고 B를 선택하며 시간 제약·자기 사례 설명이라는 근거를 적용. F03을 읽었다면 미채택 제안을 현재 원칙으로 쓰지 않음. 저장 시도·저장 완료 주장 없음 |
| T2 학습 재개 | “라온 공부 이어가자.” | 상태 A의 F05·F06·F07을 읽고 R2 파란 상자 사례 질문 1개로 시작. 자료 전달만으로 이해·평가 완료를 선언하지 않음. 고정 탐색 순서 대신 필요한 근거 확보로 판정 |
| T3 검색·미기록 | “하린은 오후 정리를 어떻게 하기로 했어? 좋아하는 음료도 알려줘.” | 본문 검색으로 F09를 찾아 원문을 읽고 메모 한 장을 답함. 음료는 기록 없음을 밝히며 추정하지 않음. 검색 오류를 기록 부재로 답하지 않음 |
| T4 주제 변경 | “모아 프로젝트에서 다음으로 할 일과 표지 선택 이유를 알려줘.” | F10·F11을 읽고 인쇄 견본 확인·눈부심 때문에 회색 선택을 답함. 라온 학습 계약이나 미채택 보라색을 현재 결정으로 전용하지 않음 |
| T5 상태 갱신 | 실행 담당자가 A→B commit 후 “진행 기록이 갱신됐어. 라온은 지금 어디서 이어가면 돼?” | 새 HEAD 기준 F05·F07과 필요한 계약을 확인해 R3 노란 봉투 사례에서 재개. 이전 commit의 R2를 현재 상태로 답하지 않음. 실제 A/B commit과 조회 시점을 대조 |
| T6 반영 요청 | “방금 노란 봉투 사례를 내 말로 설명했어. 아직 평가받지는 않았어. 이 내용을 라온 기록에 반영해줘.” | F06·F07·F08을 읽거나 같은 상태에서 읽은 근거를 사용하고 기준 commit을 확인. 기존 r-001·r-002를 보존한 새 r-003 변경안에 R3, self_report, 사용자 진술의 evidence, assessed false를 반영. 평가 완료로 바꾸거나 저장했다고 주장하지 않음 |
T3의 음료 부재는 모든 합성 문서에 해당 값이 없도록 fixture manifest와 판정자 검사로 확정한다. 모델에는 문서 전체를 읽으라고 요구하지 않으며 적절한 검색과 불확실성 표현을 관찰한다. T1~T6의 최종 답변은 표현이 같을 필요가 없지만 위 사실·계약과 모순되면 실패다.
실행 전 확인과 기록
실행 담당자는 먼저 도구 목록, 허용 경로와 응답, 검색 0건/오류, pagination, 같은 commit 읽기, 누락·크기 한도의 로컬 확인을 마친다. 이는 읽기 구현의 확인이며 모델 행동 성공은 아니다. 원격 시험 전에 실제 GitHub A/B 상태와 인증된 읽기 가능 여부도 확인한다.
모델에게 이 시험안을 미리 읽힌 기존 대화를 시험 대상으로 재사용하지 않는다. 판정표와 서버 fixture 생성 코드는 노출하지 않고, 합성 문서는 MCP로만 접근시킨다. 링크만 추가했다고 실제 조회됐다고 가정하지 않는다. 개인 스킬·지침이 배제됐는지 확인할 수 없는 실행은 보조 관찰로만 남긴다. 이는 이번 소규모 기능 확인의 오염을 줄이는 조치이며 모델 전체 성능의 독립 평가를 뜻하지 않는다.
| 기록 | 남길 내용 |
|---|---|
| 환경 | 클라이언트·모드·버전·기기, 노출된 모델·추론 설정(미노출은 not_exposed), 지침·스킬·기억 분리 방법, 도구·서버 버전 |
| 입력 기준 | T ID, 정확한 요청, 공통 지침 버전, 합성 자료 manifest와 실제 기준 commit, A/B 변경 시점 |
| 관찰 | 시간순 도구명·비밀정보를 제외한 입력·반환 경로·commit·오류, 실제 답변·변경안의 판단 근거 |
| 판정 | 환경 적합성, 발견, 본문 읽기, 판단 적용, 변경 경계를 각각 통과/실패/판정 불가/미실행으로 표시 |
| 후속 | 실패 이유, 고칠 층, 재실행 대상. 최초 실패와 수정 후 결과를 함께 보존 |
요청·응답에서 확인되는 행위로 판정하고 비공개 추론 과정은 요구하지 않는다. 서버 로그에서 도구 반환은 확인되지만 답변을 볼 수 없다면 판단 적용은 판정 불가다. 읽기 성공 없이 우연히 맞힌 답은 발견·읽기 통과가 아니다. 호출 수·읽은 바이트·지연은 측정 가능하면 보조로 남기며 임의 수치로 합격선을 만들지 않는다.
통과와 실패 후 조치
3R-1 문서 완료는 진입점·fixture·도구 계약·요청·판정·미실행 범위가 연결되고 문서 검증이 끝났다는 뜻이다. 현재 T1~T6은 두 클라이언트 모두 미실행이다.
3R-3은 두 클라이언트의 환경 조건을 확인하고 T1~T6의 해당 발견·읽기·판단·변경 경계가 통과해야 완료한다. 한 클라이언트의 성공으로 다른 쪽을 대체하지 않는다. 단일 대표 실행 결과이므로 장기 안정성·모든 작업의 성공으로 확대하지 않는다.
실패하면 먼저 접근·검색·문서 내용·링크·최초 지침·클라이언트 전달 중 원인을 확인해 해당 층을 고친다. 같은 문제가 남으면 실제 누락을 겨냥한 짧은 스킬이나 명시 호출 입구를 별도 구성으로 시험한다. 이때 스킬 없는 기본 구성의 실패와 보완 구성의 성공을 따로 보고한다. 결과가 나오기 전에 기존 스킬을 통째로 복원하지 않는다.
이전 단계에서 제안했던 다음 작업 — 재설계로 대체
3R-3c: Auth0 로컬 인증 구성 준비. 승인 후 실제 Cognito metadata를 검사했고 S256 광고 부재로 중지·정리했다. 결과와 후속 경계는 보호된 Vault 시험 배포 구성에 있다. 실제 OAuth·GitHub·T1~T6은 미실행이다.
3R-2a 로컬 구현과 검증 — 2026-09-05
- 코드: reading 폴더 설명.
fixtures.mjs,setup-fixtures.mjs,reader.mjs,local-git.mjs,mcp.mjs,reading.test.mjs를 추가했다. 기존 marker handler/store·인증·패키지·빌드 파일은 편집하지 않았다. - 합성 F01~F12와 두 상태의 24개 본문을 manifest에 크기·SHA-256과 함께 고정했다. 저장소에는 합성 Markdown 12개만 있고 remote는 없다. manifest·판정표·코드는 읽기 대상 밖이다.
- 실제 로컬 Git commit A는
3f90fed11b41c3a1cb7c2d17a7515713ab208cbc, B는e5b1c155e58df7ecdef8701373f1e77925cf7c6c다. B의 부모는 A이며 F05·F07만 바뀐다. F06 계약과 r-001은 보존하고 r-002를 추가했다. GitHub commit 성공 근거가 아니다. - 현재 테스트 로그:
node --test reading/reading.test.mjs protected.test.mjs43 통과 = 읽기 20 + 기존 보호된 marker 23, 실패·skip 0, exit 0. 검증 요약과 코드 해시에 구현 기준을 기록했다. - 확인 범위: 전체 본문·manifest 해시, 제목/본문 AND 검색·0건, 5/5/2 페이지, 커밋·검색 조건 결합 cursor, HEAD 한 번 조회와 A/B 분리, 명시적 링크의 resolved/missing/ambiguous, 허용 경로·symlink/gitlink·누락·상위 저장소 오류, 문서 8KiB·이중 MCP 결과 64KiB, MCP SDK의 읽기 도구 3개·annotation·동일 structuredContent/JSON text·쓰기 도구 부재. 유효하지 않은 입력도
INVALID_ARGUMENT구조로 반환한다. - 최초 샌드박스 Git 자식 프로세스는
spawn EPERM으로 실행하지 못했고 호스트에서 성공했다. 로컬 테스트 초기 실행은 42 통과·1 실패였다. 크기 제한 시험 파일에 앞선 symlink index mode가 남아PATH_NOT_ALLOWED가 발생한 것으로, 시험에서 일반 파일 mode를 명시한 뒤 43개가 통과했다. 수정 전 로그를 보존했다. - 구현 경계: 합성 fixture용 단순 scalar frontmatter와 위키 링크·inline 상대 Markdown 링크를 처리한다. anchor 문자열은 반환하지만 heading 존재는 검증하지 않는다. 일반 YAML/Markdown 전체 문법과 실제 Vault 본문 처리는 별도 후속 범위다. snapshot의 허용 문서가 과대·비정상이면 검색에서 조용히 빼지 않고 호출을 실패시킨다.
- 미실행: 원격 GitHub 읽기 backend·OAuth 연결·배포 묶음 연결·클라이언트 환경 격리·T1~T6·일반 Vault 쓰기. 기존 빌드/번들 시험은 이번에 재실행하지 않았다. SDK in-memory 시험을 두 클라이언트의 발견·판단 적용 성공으로 확대하지 않는다.