export declare class TwinModelMutation { reprojectTwinModel(instanceId: string, context: ResolverContext): Promise; /** * 현장이 정하는 수를 트윈에 얹는다 — **구조는 원천이, 수는 현장이.** * * ── 왜 이 문이 필요했나 (2026-08-18) ────────────────────────────────────── * 커넥터로 만든 트윈은 계통도·계량 지점을 원 시스템에서 읽어 온다. 그런데 요금 단가·계약 정보· * 축전지 충전율은 원 시스템이 모른다(SCADA 게이트웨이는 우리 전기 계약을 알지 못한다). 그래서 * 계량이 흐르는 트윈에서도 **금액이 영원히 나오지 않았다** — 넣을 문이 없었기 때문이다. * * 값은 `model` 에 직접 쓰지 않고 **겹**으로 보관한다: 모델은 원천의 사본이므로 다시 읽기가 그것을 * 새로 그리면 직접 쓴 값은 오류 없이 사라진다. 겹은 모델을 그릴 때마다 다시 얹힌다. * * ── 돌고 있는 트윈에 어떻게 반영하나 ──────────────────────────────────────── * 미러는 **동작 중에** 새 구조를 받는다(현실은 멈추지 않는다). 시뮬레이션은 받지 않는다 — 조건이 * 바뀐 실험은 다른 실험이고, 커널이 그렇게 거절한다. 그때는 저장만 하고 **그 사실을 말한다**: * 알리지 않고 성공으로 답하면 사용자는 지금 화면의 수가 새 선언으로 계산된 줄로 읽는다. */ declareTwinProperties(instanceId: string, declarations: any[], context: ResolverContext): Promise; /** * 선언을 **철회한다** — 잘못 넣은 값을 원천으로 되돌리는 문. * * ── 왜 따로 문이 필요한가 (2026-08-18) ────────────────────────────────────── * 선언은 겹에 보관되지만 **저장된 모델에 구워진다.** 그래서 겹에서 줄만 지워도 원래 값이 돌아오지 * 않는다 — 되돌릴 방법이 아예 없어서, 오타를 「원래 값을 다시 선언하는」 우회로만 고칠 수 있었다 * (사용자가 원래 값을 알고 있어야 한다는 뜻이고, 모르면 그 값은 영구히 이긴다). * * 그래서 겹이 **무엇을 덮었는지** 함께 기억하게 했고(`replaced`), 철회는 그 기억으로 되돌린다. * 기억이 없는 옛 선언은 **손대지 않고 그렇게 말한다**(`unknownSource`) — 원래 값을 지어내는 것은 * 잘못 넣은 값을 그대로 두는 것보다 나쁘다. 그 자리는 다음 원천 재읽기가 바로잡는다. * * 반영 방식은 선언과 같다: 미러는 지금 받고(`adoptStructure`), 시뮬레이션은 재기동 때 받는다. */ revokeTwinDeclarations(instanceId: string, revocations: any[], context: ResolverContext): Promise; /** * **현장의 값을 선언한다** — 트윈이 아니라 현장이 주어다. * * ── 왜 트윈 문과 갈랐나 (2026-08-18) ─────────────────────────────────────── * 처음에는 트윈 문에 범위 인자를 두었다. 그러면 **현장 값을 넣으려고 트윈을 골라야 한다** — 트윈은 그 * 값을 읽는 쪽이므로 개념이 거꾸로다(사용자가 그 어긋남을 지적했다). 주어가 다르면 문도 다르다. * * 어휘는 **그 현장 트윈들의 합집합**으로 검사한다: 한 현장에 여러 종류가 살고, 요금은 에너지 트윈만 * 읽는다. 어느 종류도 읽지 않는 속성은 거절한다(모르는 값을 받아 두면 사용자는 넣었다고 믿는다). * * 넣은 값은 그 현장의 **트윈 전부**에 얹힌다 — 한 트윈만 바꿔 두면 「현장 전체가 읽는다」가 거짓이 된다. * 얹을 자리가 없는 트윈은 정상이고(창고 트윈에 요금 자리가 없다), 아무 트윈도 받지 않았다면 그 사실을 * 말한다. */ declareSpaceProperties(spaceId: string, declarations: any[], context: ResolverContext): Promise; /** * 현장의 선언을 철회한다 — 그 현장의 **모든 트윈에서** 사라진다. * * 트윈이 같은 속성을 자기 겹에 갖고 있으면 그 값은 남는다(좁은 것이 이긴다) — 현장 값을 뺐는데 그 * 트윈만 그대로인 것이 옳다. 트윈마다 「원천으로 되돌리고 남은 두 겹을 다시 얹기」를 한다. */ revokeSpaceDeclarations(spaceId: string, revocations: any[], context: ResolverContext): Promise; }