import { Domain } from '@things-factory/shell'; import { User } from '@things-factory/auth-base'; export declare class TwinActuationRule { readonly id: string; domain?: Domain; domainId?: string; /** * **어느 트윈인가** — 전역 규칙을 두지 않는다. * * 라인이 공장마다 다르므로 한 규칙이 모든 트윈에 걸리면 어느 공장에서는 반드시 틀린다. 트윈을 지목하면 * 그 사실이 행에 드러나고, 화면이 「이 공장에 걸린 규칙」을 그대로 보여 줄 수 있다. */ instanceId: string; name?: string; /** 어느 관측인가 — 커널의 안정 코드(`Attention.kind`). */ attentionKind: string; minSeverity?: string; /** * **조건이 이만큼 이어졌을 때** 올린다. * * 없으면 처음 본 주기에 올린다. 깜빡이는 조건에 현장 지시가 나가는 것을 막는 유일한 칸이다. */ minHeldMs?: number; /** * 무엇을 내는가 — **선언된 조치 종류**(`CommandTypeSpec.type`). * * 커널 자극(`CMD`)이 아니다. 자극을 적으면 판정이 「선언되지 않은 조치 종류」로 거절한다 — 그 값은 * 모델 상태를 바꾸는 것이고 현장에 나가는 지시가 아니다. */ commandType: string; /** * 지시의 내용 — `{이름}` 을 관측의 값으로 바꿔 넣는다. * * 바꿀 값은 `Attention.params` 와 `anchor` 에서 온다. 바꿀 것이 없으면 그 칸을 비우고, 요구하는 칸이 * 비면 판정이 거절한다 — 지어낸 값으로 현장 지시를 만들지 않는다. */ payloadTemplate?: any; /** * **한 번 낸 근거에 다시 내기까지 기다리는 시간(ms).** * * 비워 두면 기본값이 걸린다(한 시간). 0 으로 두면 기다리지 않는데, 그러면 승인하는 순간 같은 것이 * 다시 올라온다 — 걸어 보고 실제로 그 상태를 만들었다. */ cooldownMs?: number; /** 지우지 않고 끌 수 있어야 한다 — 잘못 낸 것을 본 사람이 가장 먼저 하려는 일이다. */ enabled?: boolean; lastRunAt?: string; proposedCount?: number; /** 마지막에 왜 안 올렸나 — 사람 말로. */ lastSkipReason?: string; creator?: User; updater?: User; createdAt?: Date; updatedAt?: Date; }