/* * live State attention 보강 — projector 미러 State(관측)에 커널 deriveAttentions(계산)를 채운다. * live 스냅샷이 sim 동형(attentions 포함)이 되어 attention 질의/스트림이 live 에서도 신호를 준다. * 순수(입력 불변). face2-inbound-live §1.1 "State-순수 파생"(입력이 미러 State 에 있어 재적용 가능). * deriveAttentions 는 커널 공유 공식(sim/live 동일 임계값·규칙). */ import { deriveAttentions } from '@operato/twin-kernel' export function withLiveAttentions( state: S ): S { if (!state) return state return { ...state, /* * 입력을 **시뮬 쪽과 똑같이** 넣는다. 한쪽만 빠지면 같은 공장이 한쪽에서만 막힌 것처럼 보이고, * 그 어긋남은 규칙이 아니라 배선 때문이라 아무 데서도 안 잡힌다(`tasks` 를 빠뜨려 실제로 그럴 뻔했다). */ attentions: deriveAttentions( { equipment: state.equipment ?? [], locations: state.locations ?? [], orders: state.orders ?? [], tasks: state.tasks ?? [] }, /* * **확인(ack)해 둔 것을 함께 넘긴다.** 예전에는 여기에 undefined 를 넘겨서, 라이브에서는 * 확인 처리가 화면에 전혀 반영되지 않았다 — 사람이 확인해도 신호가 계속 활성으로 나갔다. * 확인 사실은 이제 저널에 남고(`attention.acked`) 프로젝터가 상태에 실어 오므로 여기서 받는다. */ state.acked?.length ? new Set(state.acked) : undefined, state.nowTime ) } }