@g1cloud/entity-modeler-next 5.2.52 → 5.2.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -342,6 +342,36 @@ export type ResolveError = {
342
342
  entity: Handle;
343
343
  handle: Handle;
344
344
  }
345
+ /**
346
+ * `@MapsId` 파생 식별이 **방출 시점에 합성하는 스칼라 `@Id` 필드명**과 같은 이름으로 속성을 만들려 함.
347
+ *
348
+ * ★그 필드는 **모델 속성이 아니다** — 모델은 FK 속성 «하나»만 갖고 코드젠이 두 필드를 낸다
349
+ * (`core/scaffoldJava.derivedIdScalarNameOf`). 그대로 통과시키면 관용구⑤(FK-as-PK) 형상이 되어
350
+ * 같은 물리 컬럼을 두 속성이 쓰고 `CHK-NAME-2`(컬럼 중복) error + DDL 중복으로 착지한다.
351
+ *
352
+ * ⚠️★**유입 경로는 「오독」이 아니라 「규칙 준수」다** — sync 의 diff 규칙이 「코드에 있고 모델에
353
+ * 없음 → `attribute.add`」이고 코드에는 그 스칼라가 실재한다. 그래서 방어가 **세 겹**이다:
354
+ * `/text` 의 `derivedIdField=` 표시(읽는 쪽이 존재를 안다) · playbook 예외(규칙이 스스로 면제한다) ·
355
+ * **이 거부**(둘 다 안 읽혔을 때의 구조적 차단). 앞 둘은 준수에 기대고 이것만 기대지 않는다.
356
+ *
357
+ * ★★**거부는 «갈 곳»을 함께 말한다** — `fk` 가 그 스칼라를 내는 FK 속성명이다. 필드명을 바꾸려는
358
+ * 의도였다면 답은 새 속성이 아니라 그 FK 에 대한 `attribute.update {derivedIdFieldName}` 이다.
359
+ *
360
+ * ⚠️★**`attribute.update {name}` 의 rename 은 «의도적으로» 막지 않는다** — 이 축의 유입원인 sync 는
361
+ * 속성을 **이름으로 매칭**하므로 rename op 자체를 낼 수 없다(이름이 다르면 add/remove 로 갈린다 —
362
+ * playbook §4 의 「수정」 비교 필드에 `name` 이 없는 이유가 그것이다) ⇒ 남는 경로는 **사람이 지시한
363
+ * AI 조작**뿐이고 그때는 의도가 있다. 발동 근거 0 인 가드를 세우지 않는 것이 이 리포 규율이다.
364
+ * ⚠️단 그 경로의 착지점은 **무신호**다(물리명은 안 겹쳐 `CHK-NAME-2` 가 안 울리고, 스칼라는 모델에
365
+ * 없어 `CHK-NAME-1` 도 못 본다 — 코드젠 산출에서 필드명이 겹쳐 컴파일이 깨진다).
366
+ * 트리거 = **사람 지시 rename 으로 그 형상이 실제로 관측될 때**.
367
+ */
368
+ | {
369
+ code: 'derived-id-scalar-conflict';
370
+ opIndex: number;
371
+ entity: Handle;
372
+ handle: Handle;
373
+ fk: string;
374
+ }
345
375
  /** EMBED_PREDEF SHARED_REF 서브컬럼의 공유 대상 물리명이 소속 엔터티 내 컬럼과 0개 매칭. */
346
376
  | {
347
377
  code: 'shared-column-target-not-found';
@@ -187,6 +187,21 @@ export declare function isMapsIdFk(fk: Attribute, assoc: Association | undefined
187
187
  * (호출부가 fillIn으로 표면화).
188
188
  */
189
189
  export declare function mapsIdScalarName(fk: Attribute, assoc: Association, byId: Map<ModelId, Entity>): string;
190
+ /**
191
+ * 이 속성이 **방출 시점에 합성되는** `@MapsId` 스칼라 `@Id` 를 낳으면 그 **필드명**, 아니면 빈 문자열.
192
+ *
193
+ * ★**「모델 속성 하나가 Java 필드 «둘» 을 낸다」의 단일 출처**다 — 판정(`isMapsIdFk`)·관계 조달
194
+ * (`findFkOwningAssociation`)·이름 파생(`mapsIdScalarName`) 셋을 한 자리에 묶어, 소비처가 조건을
195
+ * 재기술하지 않게 한다. 재기술하면 축이 갈린다(이 리포가 반복해서 대가를 치른 형태).
196
+ *
197
+ * ⚠️**소비처는 같은 술어를 쓰되 처방이 다르다**: 코드젠은 **방출**하고(`buildClassFieldPlan`),
198
+ * 캔버스는 코드명으로 **표시**하며(`view/columnResolution`), `/text` 는 `derivedIdField=` 로
199
+ * **자기기술**하고(`core/text`), AI 쓰기 경로는 같은 이름의 속성 생성을 **거부**한다(`agent/resolver`).
200
+ * 넷이 한 술어를 공유하는 것이 이 함수의 목적이다.
201
+ *
202
+ * 근거=`.claude/docs/MapsIdIdiom-entry_2026-08-26.md` §3.A
203
+ */
204
+ export declare function derivedIdScalarNameOf(attr: Attribute, entity: Entity, logical: LogicalModel, byId?: Map<ModelId, Entity>): string;
190
205
  /**
191
206
  * `@MapsId` 스칼라 @Id의 **Java 타입** — 이름과 **같은 경로**(`derivedFrom.sourceAttributeRef`)로 조달한다.
192
207
  *