매니페스트가 선언한 inputSchema는 외부가 정하는 입력이다. JSON Schema 검증기는 문서 밖 $ref를 만나면 그 주소로 직접 조회하므로 매니페스트가 서버의 outbound 호출 대상을 정하는 통로가 된다. pattern은 joni와 graal-js가 없어 java.util.regex의 백트래킹 경로로 처리되고, 인증이 없는 경계(ADR-0006)라 호출 빈도를 줄여 주는 계층도 없다. ToolSchemaReferencePolicy가 문서 밖 참조와 미지원 dialect를 막고, ToolSchemaPatternPolicy가 정규식 길이·무한 수량자 개수·중첩 반복을 검사하며 pattern을 쓰는 필드에 maxLength를 요구한다. 길이를 묶을 수 없는 patternProperties는 거부한다. 검사는 ToolMetadata의 표준 생성자 한 곳에서만 한다. Portal 매니페스트 파싱, local 파일 로딩, Redis snapshot 역직렬화가 모두 이 생성자를 지나므로 조회 경로가 늘어도 검사 지점은 하나로 남는다. 위반은 IllegalStateException이라 기존 매니페스트 형식 오류와 같게 다뤄지고 bundle 단위 실패 격리가 그대로 적용된다. 근거와 한계는 ADR-0011, ADR-0012에 있다. ADR-0012가 classpath 근거로 인용하는 docs/sbom도 함께 가져온다. 192개 테스트 전부 통과. 기존 169건은 새 검사에 걸리지 않는다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1.7 KiB
1.7 KiB
Architecture Decision Records
장기 설계 결정은 ADR로 관리한다.
Accepted: 확정된 결정Superseded: 후속 ADR로 대체된 결정Rejected: 검토했으나 채택하지 않은 결정
결정이 변경되면 기존 ADR을 삭제하거나 의미를 덮어쓰지 않고 새 ADR에서 대체 관계를 기록한다.
결정 목록
| ADR | 제목 | 상태 |
|---|---|---|
| ADR-0001 | Stateless 실행 책임 경계 | Accepted |
| ADR-0002 | Agent Builder Tool 노출 제한과 단일 Tool 호출 | Accepted |
| ADR-0003 | Builder Tool UID를 시스템 간 식별 키로 사용 | Superseded |
| ADR-0004 | 300초, Raw Data, unsafe retry 실행 가드레일 | Accepted |
| ADR-0005 | 표준 MCP Tool name을 실행 식별자로 사용 | Accepted |
| ADR-0006 | MCP Server는 인증·인가를 하지 않는다 | Accepted |
| ADR-0007 | MCP 배포 하나는 Tool Service 하나만 본다 | Accepted |
| ADR-0008 | 공유 host의 path를 독립 MCP 배포로 연결 | Superseded |
| ADR-0009 | 컨테이너가 공개 MCP path를 직접 처리 | Accepted |
| ADR-0011 | Tool inputSchema는 문서 밖을 참조하지 않는다 | Accepted |
| ADR-0012 | Tool inputSchema의 정규식에 예산을 둔다 | Accepted |