/** * The reader half of the promotion-artifact concern: which of a layer's required * artifacts are NOT present, under a given project root. * * Extracted from `./feedback-promotion-service.ts` for the file-size cap, the way * `./promotion-artifact-evidence.ts` was extracted before it. That module builds * the decision from a file's text; this one decides whether the file is there to * read. The service re-exports `missingArtifacts` from its own path, so no * importer changed. */ import { type PromotionArtifactCheck } from './promotion-artifact-evidence.js'; /** * Which of `checks` are not satisfied under `projectRoot`. Empty means the * promotion is backed by its artifact. Never throws, and never permits: a file * that is absent, unreadable, or unparseable is a finding, not a warning — * "cannot read the evidence" must not read as "the evidence is good". * * A check is satisfied when `path` OR any of its `alternatives` carries the * evidence; one that no candidate satisfies is reported ONCE, naming every * location it looked in, so a reader is never told about half the search. */ export declare function missingArtifacts(checks: readonly PromotionArtifactCheck[], projectRoot: string): string[];