import { ModelId } from './types'; import { OpShape } from '../command/op'; /** * 감사 대상 종류 — 논리 모델의 편집 단위 + **노트**. * * ★노트만 예외적으로 `layout` 에 사는데 감사 대상이다(2026-09-10 결정) — 노트는 *설계 의도*를 담는 * 편집 산출물이고, 그것이 언제 사라졌는지 못 보면 이미 동작하는 시점 복원에서 **어느 seq 로 돌릴지 * 고를 근거가 없다**. 편입 축은 존재·메모·연결 셋뿐이고 기하·스타일은 여전히 범위 밖이다(캔버스에서 * 가장 자주 바뀌어 이력을 덮는다). */ export type OpSubjectKind = 'entity' | 'attribute' | 'operation' | 'index' | 'association' | 'associationEnd' | 'group' | 'note'; /** 무엇이 바뀐 대상인가. `entityRef`는 자식(속성/연산/인덱스)의 부모(이름 조회·복원 스코프). */ export interface OpSubject { kind: OpSubjectKind; ref: ModelId; entityRef?: ModelId; end?: 'end1' | 'end2'; } /** op이 한 대상에 가하는 접촉 — 존재 변화(add/remove) 또는 내용 변경(existence 없음). */ export interface OpSubjectTouch { subject: OpSubject; /** 대상의 생성/삭제. 내용 변경(update)·기타는 undefined. */ existence?: 'add' | 'remove'; /** `entity.add` value에 인라인돼 태어난 자식(자기 op 없음) — 소비자가 top-level만 볼 때 거른다. */ inline?: true; } /** 인벤토리 한 행 — 이 kind를 감사 축이 어떻게 다루는가. */ export interface OpAuditHandling { /** 이 op이 지목하는 대상 종류. `null`=감사 범위 밖(레이아웃 축). */ subject: OpSubjectKind | null; /** 대상의 존재 변화 여부. */ existence: 'add' | 'remove' | null; /** `projectFieldAudit`가 필드 변경(born/patch/tombstone)으로 투영하는가. */ fieldAudit: boolean; /** 범위 밖이거나 예외적인 행의 근거. */ note?: string; } /** * **전 op 어휘 인벤토리.** lib이 방출하는 kind는 전부 여기 있어야 한다 — * `opSubject.coverage.test.ts`가 소스의 `kind:` 리터럴과 대조해 누락을 실패로 만든다. * (새 어휘를 추가하면 그 테스트가 깨진다 = "조용히 무시"가 "명시적 결정"으로 바뀌는 지점.) */ export declare const OP_AUDIT_INVENTORY: Record; /** * op이 건드리는 감사 대상 목록. 인벤토리에 없는(=이 lib이 모르는) kind는 빈 배열 — 발굴은 * `describeContainer`의 접두 폴백이 계속 덮는다. * * `entity.add`는 자신 + value에 인라인된 자식(속성/연산/인덱스)을 함께 낸다(`inline: true`). * 인라인 자식을 볼지 여부는 소비자가 정한다 — 필드 감사가 이미 필드로 잡는 축이면 거른다. */ export declare function describeOpSubjects(op: OpShape): OpSubjectTouch[]; /** 발굴용 top-level 소속 대상. */ export interface OpContainer { kind: 'entity' | 'association' | 'group' | 'note'; ref: ModelId; } /** * op이 속한 top-level 대상(엔티티/연관/그룹). **접두 매칭**이라 같은 계열의 미지 어휘도 덮는다 * (모듈 헤더 ★ 참조 — 발굴 누락은 그 seq를 이력에서 통째로 지운다). */ export declare function describeContainer(op: OpShape): OpContainer | null;