Problem
DiagnosticsCollector.registerProvider가 provider name 충돌을 검증하지 않고 Map#set으로 덮어씁니다. 운영 진단 provider가 중복 등록되면 먼저 등록된 provider가 사라지고, report에는 마지막 provider만 남아 원인 파악이 어려워집니다.
Evidence
packages/diagnostics-core/src/libs/DiagnosticsCollector.ts:24-30는 providers를 Map<string, DiagnosticsProvider>로 관리하고 registerProvider에서 this.providers.set(provider.name, provider)만 호출합니다.
packages/diagnostics-core/src/libs/DiagnosticsCollector.ts:40-45는 Map에 남은 provider만 report 대상으로 사용합니다.
- 다른 registry들은 duplicate registration을 명시적으로 문제로 다루는 패턴이 있습니다.
Desired Outcome
Diagnostics provider 이름은 유일해야 하며, 충돌 시 조용한 overwrite가 아니라 명시적인 오류 또는 idempotent no-op 규칙으로 처리되어야 합니다.
Suggested Approach
- 같은 name의 다른 provider 등록 시 Croco Problem 또는 명시 오류를 던집니다.
- 동일 인스턴스 재등록을 허용할지 여부를 결정하고 테스트로 고정합니다.
- provider name 규칙을 타입/문서에 명시합니다.
Acceptance Criteria
- 서로 다른 provider가 같은 name으로 등록되면 기존 provider가 조용히 사라지지 않습니다.
- 중복 등록 정책이 테스트로 고정됩니다.
- diagnostics report에 provider 누락이 발생하지 않습니다.
Validation
pnpm test --filter=@croco/diagnostics-core
- duplicate provider regression test
Problem
DiagnosticsCollector.registerProvider가 provider name 충돌을 검증하지 않고Map#set으로 덮어씁니다. 운영 진단 provider가 중복 등록되면 먼저 등록된 provider가 사라지고, report에는 마지막 provider만 남아 원인 파악이 어려워집니다.Evidence
packages/diagnostics-core/src/libs/DiagnosticsCollector.ts:24-30는providers를Map<string, DiagnosticsProvider>로 관리하고registerProvider에서this.providers.set(provider.name, provider)만 호출합니다.packages/diagnostics-core/src/libs/DiagnosticsCollector.ts:40-45는Map에 남은 provider만 report 대상으로 사용합니다.Desired Outcome
Diagnostics provider 이름은 유일해야 하며, 충돌 시 조용한 overwrite가 아니라 명시적인 오류 또는 idempotent no-op 규칙으로 처리되어야 합니다.
Suggested Approach
Acceptance Criteria
Validation
pnpm test --filter=@croco/diagnostics-core