Files
koseokmin dc6f60219b architecture.md를 현재 코드에 맞춘다
문서가 3de052a 시점 상태로 복구되면서 그 뒤 main의 코드 커밋 일곱 개가
반영되지 않았다. 계약 테스트가 보는 범위 밖이라 194건이 통과해도
드러나지 않는다. 코드와 대조해 확인한 아홉 건을 고친다.

사실이 틀린 것:

- 갱신 모델. ToolRegistryRefreshScheduler에는 @Scheduled가 없고
  ApplicationReadyEvent 하나만 있다. 갱신은 주기 실행이 아니라 요청
  시점 TTL 만료로 일어난다. 설정 키도 refresh-interval-seconds가 아니라
  refresh-ttl-seconds다.
- 1:1 배포 전제. ADR-0007은 Superseded이고 코드는 route당 N개 Tool
  Service를 병합한다. ADR-0013 기준으로 다시 쓴다.
- route table이 없다는 서술. McpController가 /mcp/{routeKey}를 받고
  PortalToolRegistryClient가 bundlesByRoute를, ToolRegistryService가
  route별 snapshot을 들고 있다. route 매핑은 애플리케이션 안에 있다.
- 실행 흐름 1번의 publicPath. route key는 URI에서만 결정된다.

빠진 것:

- 클래스 표에 McpRouteKeyValidator, PortalToolRegistryClient,
  RedisPortalRegistryCache, AgentRoutingHintsProperties,
  LocalFixtureProperties를 추가한다. 앞의 셋은 Portal 모드의 핵심
  경로인데 표에 없었다.
- Agent routing hint 절을 새로 쓴다. 9905d52가 들여온 기능이 문서에
  전혀 없었다.
- Tool 호출 retry 절을 새로 쓴다. 6526e73의 retrySafeByAnnotation이
  destructiveHint를 항상 금지하고 annotations 미선언 Tool은 재시도하지
  않는다는 사실이 없었다.
- 스키마 정책 두 클래스를 표에 넣고, 검사 지점이 ToolMetadata 생성자
  하나라는 것을 실행 흐름 9번에 적는다.

인용한 식별자 열여섯 개가 코드에 실재하는지, 상대링크가 깨지지 않는지
확인했다. retry 기본값도 application.yml과 대조했다. 194개 테스트 통과.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 17:42:01 +09:00
..