/** * Ruling on a fix to a defect that was never visual. * * Some findings come from reading source rather than pixels: a hand-rolled * control where the kit has a component, a token used raw. Re-capturing proves * nothing about those, because the screen can look identical either way and the * whole point of the finding is what the code says. So they are ruled by * re-reading the code, and this is the path that does it, kept apart from the * visual one because sharing a function between two verdicts reached from two * different kinds of evidence is how a rule ends up applying to the wrong one. */ import { type Backlog } from "../backlog/lib.js"; import type { FixCluster } from "../fix/cluster.js"; import type { ResolvedConfig } from "../types.js"; /** * Rule on a source finding, and record it the same way the visual path does. * * The bookkeeping is deliberately identical: same statuses, same attempt * accounting, same exit codes, same state file. What differs is only the * oracle, because the question differs. A caller cannot tell from the outside * which path ran, which is the point: an issue is an issue. */ export declare function ruleCodeIssue(resolved: ResolvedConfig, cluster: FixCluster, before: Backlog, opts: { attempt: number; maxAttempts: number; issueId: string; commit: string | null; note: string | null; json: boolean; /** Model for the conformance re-read, from `verify-fix --model`. */ model?: string | null; }): Promise;