/** 효과가 있는 속성 하나. */ export interface PropertyEffect { /** 속성 id — 선언에 적히는 그 이름(`ResourceProperty.id`). */ id: string; /** 어느 축의 속성인가 — 그 축의 항목에만 이 효과를 말한다. */ axes: string[]; /** 무엇을 바꾸나 — 화면이 읽는 i18n 키(언어중립: 서버는 사람 말을 만들지 않는다). */ effect: string; /** 실제로 읽는 코드 — 지어낸 효과를 등록하지 않기 위한 표식이다(없는 자리를 가리키면 리뷰가 잡는다). */ readBy: string; } export declare const PROPERTY_EFFECTS: PropertyEffect[]; /** * 이 축의 속성 효과 — `속성 id → i18n 키`. * * 없는 속성은 **여기 없다**(빈 값으로 채우지 않는다) — 화면이 "등록된 효과가 없다" 를 스스로 말한다. */ export declare function propertyEffectsOf(axis: string): Record; /** * 이 속성을 **어느 대상에 얹을 수 있나** — 등록부의 축이 그대로 답한다. * * ── 왜 필요한가 (2026-08-18) ──────────────────────────────────────────────── * 지게차에 계약전력을 선언할 수 있었다. 문은 받아 주고 화면은 「넣었습니다」라고 말하는데, 그 값을 읽는 * 코드는 자리(수전)만 본다 — 아무 일도 일어나지 않고 그 사실이 어디에도 나오지 않았다. 효과가 어느 축의 * 것인지는 이미 등록부가 알고 있으므로, 그 지식을 검사에 쓴다(두 곳에 적지 않는다). * * 등록부에 없는 속성은 **비어 있는 목록이 아니라 `undefined`** 다: 「어디에도 못 얹는다」와 「우리가 * 제한을 모른다」는 다르다(후자는 받아 준다 — 속성은 열려 있다는 규약을 지킨다). */ export declare function declarationTargetsOf(propertyId: string): string[] | undefined;