← ClaudeAtlas

enumlisted

Scaffold a protocol enum in the shared SSOT module with the unknown-value fallback convention. Use when adding a domain/protocol enum shared across modules.
ch4570/vulpora · ★ 1 · AI & Automation · score 65
Install: claude install-skill ch4570/vulpora
# enum — protocol enum scaffold (shared SSOT module) Generate a shared enum in the single source of truth, with the unknown-value handling that forward-compatible deserialization relies on. > **Authority**: 프로젝트 규약(AGENTS.md 등)이 바인딩. 원칙: `reference/principles.md`, > 지식: `reference/kb/INDEX.md`. ## Where it goes - 프로토콜 공유 모듈(`<protocol-module>`, 공유 enum SSOT 모듈), 패키지 `com.example.protocol.enums.<domain>`. - **`public enum class`** — `explicitApi = Enabled`로 설정된 모듈은 `public`이 필수다. ## Skeleton ```kotlin // 외부/불안정 소스에서 역직렬화 → UNKNOWN 폴백 + 표시 텍스트: public enum class MemberType(public val text: String) { @JsonEnumDefaultValue UNKNOWN("미상"), INDIVIDUAL("개인"), BUSINESS("기업"), } // 내부/닫힌 집합(예: @Enumerated(STRING)으로 영속화) → 단순: public enum class OrderStatus { PENDING, PAID, SHIPPED, CANCELLED } ``` ## Rules (MUST) - 이 모듈이 프로토콜/도메인 enum의 **SSOT**. 다른 모듈은 `typealias <Alias> = <Name>`로 재사용 — **재정의 금지**. - 외부/불안정 소스에서 역직렬화하는 enum은 `@JsonEnumDefaultValue UNKNOWN(...)`을 선언하고, 소비 측 `ObjectMapper`/`JsonMapper`가 `EnumFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE`를 활성화해야 한다 — 이건 **Jackson 3.x의 `EnumFeature`**이지 구버전 `DeserializationFeature`가 아니다. - 이름→값 변환은 제네릭 헬퍼(`enumFromNameOrDefault` 류)로 통일하고, per-enum companion은 피한다. - 표시 라벨이 필요하면 `public val text: String` 생성자 파라미터로 매핑(코드와 표시 텍스트 분리). - 생성 코드에 단일 파라미터 람다가 있으면 중첩되지 않은 경우 `it`을 쓰고, 중첩 스코프를 구분해야 할 때만 내부 파라미터에 이름을 붙인다. 여러 파라미터가 필요한 API는 예외다. ## Hard constraints (build/runtime fail otherwise) - `public` 누락 시 explic