import { Entity, ModelId } from './types'; /** * 아직 모델에 반영되지 않은 임베드 간선 — AI 배치의 **같은 배치 선행 op** 산출분. * * ★이게 없으면 한 배치 안에서 `A→B`·`B→A` 를 나눠 보내 순환을 만들 수 있다(각 op 은 저장 전 모델만 * 보므로 혼자서는 무해해 보인다). resolver 가 `addedAttributes` 에서 뽑아 넘긴다. */ export interface PendingEmbedEdge { ownerId: ModelId; embeddableRef: ModelId; } /** * `ownerId` 가 `embeddableId` 를 임베드하면 순환이 되는가 — 되면 **그 순환 경로**, 아니면 `null`. * * 경로는 `findIdentifyingCycles`(validation)의 관례를 따라 **닫힘 반복 없이 멤버만** 담는다: * 자기 임베드는 `[A]`, `A→B→A` 는 `[A, B]`. 호출자는 `!= null` 로 거부하고, 필요하면 그 경로를 * 메시지·에러 payload 로 쓴다(«고칠 수 있는 자리»를 지목하기 위한 정보다). */ export declare function findEmbedCycle(entities: readonly Entity[], ownerId: ModelId, embeddableId: ModelId, pending?: readonly PendingEmbedEdge[]): ModelId[] | null;