Problem
DI와 module provider visibility 오류는 상당 부분 런타임 초기화 시점에야 드러난다. Croco가 Type-first/Build-time-first framework가 되려면 provider token, scope, dependency, module import/export visibility가 검사 가능한 manifest와 CI check로 승격되어야 한다.
Evidence
packages/framework-context/src/libs/Container.ts:147-165의 Container.validate()는 runtime Container 상태를 기반으로 circular dependency를 검사한다.
- 같은 파일
:183-190은 validation 여부를 CROCO_DI_VALIDATE/NODE_ENV에 의존한다.
- 같은 파일
:647-659는 resolution trace status로 circular, scope-mismatch, missing을 모델링한다.
packages/framework-module/src/ModuleRegistry.ts:72-110는 module setup/start 중 provider를 등록하고 초기화한다.
packages/framework-module/src/ModuleRegistry.ts:321-407는 module import/export visibility를 runtime state와 reflect metadata로 검증한다.
- open issue #931은 일반 package/layer architecture policy다. 이 이슈는 DI/module provider graph에 좁게 집중한다.
Desired Outcome
Croco app은 실행 전에 DI/module graph manifest를 생성하고, missing provider, circular dependency, scope mismatch, module visibility violation을 CI에서 실패시킬 수 있어야 한다.
Proposed Implementation Path
- Component/provider decorator와 module metadata에서 deterministic DI graph manifest를 생성하는 API 또는 CLI를 추가한다.
- manifest에는 token id, provider class, scope, dependency tokens, module name, imports/exports, source location을 포함한다.
Container.validate()와 ModuleRegistry runtime validation이 같은 diagnostic model을 공유하게 한다.
croco di check 또는 croco modules check 형태의 명령을 제공하고 generated app scripts에 연결한다.
- TypeDI fallback처럼 정적 검증 불가능한 provider는 explicit unknown capability로 표시하고 silent success로 처리하지 않는다.
Acceptance Criteria
- missing provider fixture가 app startup 전에 check 명령에서 실패한다.
- circular dependency fixture가 source-location 포함 diagnostic으로 실패한다.
- singleton/request scope mismatch fixture가 check 명령에서 실패한다.
- module export 없이 다른 module provider를 주입하는 fixture가 check 명령에서 실패한다.
- manifest JSON은 deterministic하게 정렬되고 generated docs/LLM-readable artifact로 사용할 수 있다.
Validation
pnpm test --filter=@croco/framework-context
pnpm test --filter=@croco/framework-module
pnpm test --filter=@croco/cli
pnpm create-croco-app:smoke
pnpm typecheck
Scope Boundaries
Problem
DI와 module provider visibility 오류는 상당 부분 런타임 초기화 시점에야 드러난다. Croco가 Type-first/Build-time-first framework가 되려면 provider token, scope, dependency, module import/export visibility가 검사 가능한 manifest와 CI check로 승격되어야 한다.
Evidence
packages/framework-context/src/libs/Container.ts:147-165의Container.validate()는 runtime Container 상태를 기반으로 circular dependency를 검사한다.:183-190은 validation 여부를CROCO_DI_VALIDATE/NODE_ENV에 의존한다.:647-659는 resolution trace status로circular,scope-mismatch,missing을 모델링한다.packages/framework-module/src/ModuleRegistry.ts:72-110는 module setup/start 중 provider를 등록하고 초기화한다.packages/framework-module/src/ModuleRegistry.ts:321-407는 module import/export visibility를 runtime state와 reflect metadata로 검증한다.Desired Outcome
Croco app은 실행 전에 DI/module graph manifest를 생성하고, missing provider, circular dependency, scope mismatch, module visibility violation을 CI에서 실패시킬 수 있어야 한다.
Proposed Implementation Path
Container.validate()와ModuleRegistryruntime validation이 같은 diagnostic model을 공유하게 한다.croco di check또는croco modules check형태의 명령을 제공하고 generated app scripts에 연결한다.Acceptance Criteria
Validation
pnpm test --filter=@croco/framework-contextpnpm test --filter=@croco/framework-modulepnpm test --filter=@croco/clipnpm create-croco-app:smokepnpm typecheckScope Boundaries