import type { StageEvidence, StageId } from './stage-path.ts'; export type ProbeId = 'connect' | 'discover' | 'master' | 'master-warnings' | 'items' | 'live-ingest' | 'live-removal' | 'declarations' | 'forecast' | 'actuate-declared' | 'actuate-effect'; export interface ProbeSpec { id: ProbeId; /** 이 프로브가 증거를 대는 단계. */ stage: StageId; /** **무엇을 증명하나** — 언어중립 키(사람 말은 표현계층이 렌더). 「무엇을 호출하나」가 아니다. */ proves: string; /** 대상 시스템을 바꾸는가. 참이면 사람이 켜야 돈다. */ writes: boolean; /** 이 프로브가 실패하면 뒤 프로브를 돌릴 의미가 없다. */ gating: boolean; } /** * 시퀀스 — 순서가 곧 방법론이다. 앞이 막히면 뒤는 돌리지 않는다(돌려도 답이 무의미하다). * * `master-warnings` 를 **별개 프로브**로 둔 이유: 구조가 들어오는 것과 못 옮긴 값을 세는 것은 다른 * 사실이고, 세지 않은 인제스트는 도크를 랙으로 바꿔 놓고도 성공으로 보인다. */ export declare const PROBE_SEQUENCE: readonly ProbeSpec[]; /** 프로브 한 건의 결과. `ran: false` = 돌리지 않았다(실패가 아니다). */ export interface ProbeResult { id: ProbeId; ran: boolean; /** * 이 대상에 **해당하지 않는다**. 통과도 실패도 미측정도 아닌 네 번째 값이다. * * 시뮬레이션 트윈에 라이브 프로브를 들이대면 빨간 칸이 생기는데 그건 결함이 아니다 — 시뮬은 원천에서 * 받는 것이 없다. 레퍼런스 없이 템플릿으로 세운 트윈에는 옮겨 온 마스터가 없으므로 「못 옮긴 값」도 없다. * 이걸 통과로 처리하면 없는 능력을 주장하고, 미측정으로 처리하면 영원히 배선을 기다린다. */ applicable?: boolean; /** 돌렸을 때의 판정. 돌리지 않았으면 무의미하다. */ passed?: boolean; /** 센 값(자리 수·반출 건수·선언 수 등). 세지 않았으면 없다. */ count?: number; /** 선언 적재량 프로브만 — `declared`/`total`. */ coverage?: { declared: number; total: number; }; /** 왜 실패했나·왜 건너뛰었나. 언어중립 코드 또는 원문 오류. */ detail?: string; } /** * 프로브 결과를 **증거**로 처리한다. * * 계산 규칙의 정수: **돌리지 않은 프로브는 `null`** 로 간다. 그러면 판정이 그 단계를 달성으로 * 만들지 않고 `unmeasured` 로 말한다 — 스위트를 절반만 돌리고 초록을 주장할 길이 없다. */ export declare function foldProbeResults(results: readonly ProbeResult[]): StageEvidence; /** * 지금 돌릴 프로브 — 게이팅과 쓰기 동의를 지킨다. * * 앞의 게이팅 프로브가 실패했으면 **거기서 멈춘다.** 뒤를 돌려 빨간 칸을 늘리는 것은 정보를 주지 * 않는다(원인은 이미 앞에 있다). 쓰기 프로브는 `allowWrites` 없이는 목록에 들어오지 않는다. */ export declare function plannedProbes(results: readonly ProbeResult[], opts?: { allowWrites?: boolean; }): ProbeId[]; /** 해당 없음으로 판정된 프로브 — 화면이 「왜 회색인가」를 말할 수 있게 사유와 함께 낸다. */ export declare function notApplicable(results: readonly ProbeResult[]): { id: ProbeId; detail?: string; }[];