/** 공정 한 종류 — 이름과 「지금 무엇으로 도나」. */ export interface OperationBasisRow { /** 작업 종류(`FlowTask.kind` = `OperationDef.key`) — 선언이 겨누는 id 다. */ kind: string; /** 사람이 읽는 이름 — 원천 명세 행이 있을 때만(없으면 종류 이름이 곧 이름이다). */ label?: string; /** * 지금 이 종류의 시간이 어디서 오나 — 커널의 자기보고, 또는 **이력에서 배운 사실**. 없으면 모른다. * · `measured` — 이 현장의 이력에서 배운 값(가장 강한 근거). **선언보다 이긴다.** * · `declared` — 선언된 값(현장이 정한 것 또는 원천 명세 행). * · `default` — 커널 소스의 상수. 이 목록의 존재 이유다. */ basis?: 'measured' | 'declared' | 'default'; /** 원천 명세 행이 말한 시간(ISO 8601) — 있으면. 우리 선언이 이것을 이긴다. */ referenceDuration?: string; /** 우리가 선언해 둔 시간(ISO 8601) — 있으면. */ localDuration?: string; /** * 우리가 선언해 둔 공정 모수 — **커널이 읽는 표기 그대로**(수율 0..1, 셋업 ISO 8601). * * 사람 단위(퍼센트·분)로 되돌리지 않는다: 화면은 선언 겹에서 사용자가 넣은 값을 그대로 들고 있고, * 여기 있는 것은 **실제로 커널에 실린 값**이다 — 둘을 견주면 환산이 잘못된 것도 드러난다. */ localParams?: Record; /** 원천 명세 행이 말한 모수 — 있으면(우리 선언이 이것을 이긴다). */ referenceParams?: Record; /** * 모수를 **무엇으로 읽었나** — 커널의 자기보고(`id → measured|declared`) (2026-08-19). * * 수율이 이력에서 온 값이면 선언값은 예비로만 남는다(소요시간과 같은 규율) — 화면이 그 사실을 말해야 * 사람이 헛일을 하지 않는다. 커널이 아직 그 공정을 돌리지 않았으면 이 칸이 빈다(모른다). */ paramBasis?: Record; } /** * 공정 목록을 모은다 — **넷의 합집합**, 순서는 원천 행 → 돌린 것 → 이력에서 배운 것 → 선언한 것. * * `kernel` 이 없으면(정지 트윈) ②가 빠지고, `measuredKinds` 를 주지 않으면 ③이 빠진다: 그 사실은 * `basis` 가 비는 것으로 드러난다(빈칸이 곧 「모른다」다). */ export declare function operationBasis(model: any, kernel?: any, measuredKinds?: readonly string[]): OperationBasisRow[]; /** * 선언을 받아도 되는 공정 이름들 — **하나도 확인할 수 없으면 `undefined`**(모른다). * * 빈 배열로 답하지 않는 이유: 빈 배열은 「어떤 이름도 안 된다」로 읽히고, 그러면 아직 돌지 않은 트윈에는 * 아무것도 선언할 수 없다. 모르는 것과 없는 것은 다르다 — 모를 때는 받아 주고 그 사실을 말한다. */ export declare function knownOperationKinds(model: any, kernel?: any, measuredKinds?: readonly string[]): string[] | undefined;