import { type Frame } from "../issues/frames.js"; import { type IssueRecord } from "../backlog/lib.js"; import { forgeOf } from "./forge.js"; import type { ClusterState } from "../fix/state.js"; import type { FixCluster } from "../fix/cluster.js"; import type { ResolvedConfig } from "../types.js"; import type { BoardEntry, BoardShot, BoardStep, IssueStatus } from "./board-types.js"; export declare function shotsOf(resolved: ResolvedConfig, c: FixCluster): BoardShot[]; /** * The commit behind this issue, if anything has claimed one. * * A ruled fix outranks a reported one: `fixedIn` is written by `verify-fix` * when it agreed the defect was gone, and the attempt log holds whatever the * last fixer said, ruled or not. */ export declare function fixOf(c: FixCluster, state: ClusterState, forge: Awaited>): BoardEntry["fix"]; /** * A frozen frame, in the two path forms the page needs. Frames live in the * issue's own folder, so the served path is `issues/...` rather than a * workspace shot's, and the ui routes each to its own root. */ export declare function asBoardShot(resolved: ResolvedConfig, id: string, f: Frame): BoardShot; /** * Where an issue stands. * * Every state here is something lookout itself established: the backlog says * whether the finding is open, blocked, fixed or waived, and `verify-fix` says * what happened the last time somebody asked it to rule. Nothing here tracks * who is working on it: the queue knows which issue was handed over and when, * and that is a separate record precisely because it is about lookout's own * doing rather than about where the defect stands. */ export declare function durableStatus(c: FixCluster, state: ClusterState, record: IssueRecord | undefined): IssueStatus; /** * What lookout has recorded about this issue: when it first saw it, and every * time it was asked to rule on a claimed fix. */ export declare function durableTimeline(state: ClusterState, foundAt: string | null): BoardStep[]; /** * When lookout last saw this issue: the mtime of the newest screenshot it was * filed against. There is no dispatch to date it by any more, and "last seen" * is the honest thing anyway, since a finding is only as current as the capture * that produced it. */ export declare function lastSeenAt(resolved: ResolvedConfig, c: FixCluster, state: ClusterState): string | null;