import { ModelId } from './types'; import { FieldAuditRecord } from './projectFieldAudit'; import { ActionFieldChange, ActionSubject } from './projectActionLog'; /** 한 대상의 구간 net 결과 — verb + net 필드 변경(최초 old→최종 new). */ export interface SeqDiffEntry { subject: ActionSubject; /** added=구간 내 생성되어 B에 존재 / removed=A에 존재했고 구간 내 삭제 / modified=양쪽 존재+내용 변경. */ verb: 'added' | 'modified' | 'removed'; /** net 필드 변경. added=최종값(요약), removed=빈 배열(tombstone), modified=old→new(수렴分 제외). */ fields: ActionFieldChange[]; } export interface SeqDiff { fromSeq: number; /** 실효 상한 — 옵션 미지정 시 스트림 최신 seq(레코드 없으면 fromSeq). */ toSeq: number; /** subject 최초 등장 순(결정적). */ entries: SeqDiffEntry[]; } /** * op 이력 스트림을 구간 `(fromSeq, toSeq]`의 subject별 net diff로 투영한다. * * @param records seq 정렬 이력 레코드(전체 스트림 — old 파생 정확성을 위해 구간 밖 레코드도 포함해 전달). * @param range fromSeq(비포함)·toSeq(포함, 생략=최신). D1: 투영기는 일반형, UI는 "과거↔현재"부터. */ export declare function projectSeqDiff(records: readonly FieldAuditRecord[], range: { fromSeq: number; toSeq?: number; }): SeqDiff; /** 캔버스 오버레이 마크 — 엔티티 노드 단위(removed 대상은 캔버스에 없어 패널 전용, D3). */ export interface DiffMark { verb: 'added' | 'modified'; /** 구간 내 추가/변경된 속성 행(하이라이트 대상). 삭제 속성은 행이 없어 제외. */ changedAttributeIds: Set; /** 구간 내 추가/변경된 연산 행. */ changedOperationIds: Set; } /** * SeqDiff → 캔버스 마크 맵. 엔티티 subject는 자기 verb로, 자식(속성/연산/인덱스) 변경은 부모 엔티티를 * modified로 승격(이미 added면 유지)한다. 연관/그룹은 S3 스코프 밖(엔티티 오버레이 전용). */ export declare function buildDiffMarks(diff: SeqDiff): Map;