export declare class TwinModelQuery { /** * 이 선이 **얼마나 이어져 있나** — 그리고 **얼마나 끊겨 있나.** * * 선이 "선언되었고 양끝이 존재한다" 만 말하면 지도는 그림일 뿐이다. 관계에서 가장 중요한 정보는 * 대개 **부재**다 — 기준 자리가 비어 있는 설비 열두 대, 어느 라우트에도 안 실린 공정. 그것이 * 조감도에서 보여야 사람이 끊긴 데를 찾아다니지 않는다. * * 셋을 센다: * · `linked` — 값이 있고 그 값이 상대편에 **실제로 있다** * · `dangling` — 값은 있는데 **가리키는 것이 없다**(끊어진 참조 — 가장 나쁜 부류) * · `missing` — 값 자체가 없다(선택 관계면 정상, 필수 관계면 결손) * * 문서 어휘로 푼다 — 관계 선언의 필드 이름이 원본 문서의 어휘이기 때문이다(행은 자기 컬럼 * 이름을 쓴다). 그 사실을 `fillBasis` 로 함께 낸다. */ private edgeFill; twinModelSummary(instanceId: string, context: ResolverContext): Promise; /** * **이 트윈에 무엇을 선언할 수 있나** — 값을 넣는 화면이 도메인의 모양을 알지 않게. * * 커널이 정한 명세(속성 id·단위·범위·설명)를 그대로 낸다. 화면이 「에너지 트윈이면 계약전력·요금 * 단가…」를 알고 있으면 도메인이 늘 때마다 화면을 고쳐야 하고 단위가 두 곳에 적힌다(ADR-0031). * * 지금 무엇이 선언돼 있는지도 함께 낸다(`declared`) — 화면이 두 번 묻지 않게, 그리고 「원천이 말한 * 값」과 「우리가 정한 값」을 한자리에서 견줄 수 있게(`PropertySource`, ADR-0034). * * 어휘가 없는 종류는 `properties: []` 다 — 「아직 없다」와 「아무 값이나 받는다」는 다르다. */ twinDeclarations(instanceId: string, context: ResolverContext): Promise; /** * **이 현장에 무엇을 선언할 수 있나** — 현장 값은 트윈의 것이 아니므로 트윈 없이 묻는다. * * ── 왜 트윈으로 묻지 않나 (2026-08-18) ───────────────────────────────────── * 처음에는 트윈 화면에서 범위만 골라 현장 값을 넣게 했다. 그런데 **현장 값을 넣으려고 트윈을 골라야 * 하는 것**은 개념이 거꾸로다 — 트윈은 그 값을 읽는 쪽이다(사용자가 그 어긋남을 지적했다). * * 어휘와 대상은 **그 현장 트윈들의 합집합**이다: 한 현장에 여러 종류가 살고(에너지·창고·야드), 요금은 * 에너지 트윈만 읽는다. 합집합으로 내되 **어느 트윈이 그 대상을 가졌는지** 함께 낸다 — 아무 트윈도 * 읽지 않는 값을 넣는 일을 화면이 미리 보여 줄 수 있어야 한다. */ spaceDeclarations(spaceId: string, context: ResolverContext): Promise; }