import type { Board } from "./model.js"; /** * Where this work could be done differently. * * This is what describing a workflow was for, and it had been sitting behind item eight of a menu. * It is derived from the board rather than asked of a model, for two reasons: a model asked "what * could be automated here" will always find something, and an opening nobody can check against the * map is a sales pitch. Everything below points at jobs, tasks and waits that are already written * down, and carries the evidence it was drawn from. * * The three kinds are deliberately not all "use an agent". Naming the job that needs no model, and * the wait that no software fixes, is what makes the one that does need an agent worth believing. * * Nothing is offered on work staves invented. An opening derived from its own guess is a guess about * a guess, and it would arrive exactly when the person knows least about what they are looking at. */ export type OpeningKind = "agent" | "mechanical" | "waiting"; export interface Opening { id: string; kind: OpeningKind; /** the job it is about, by its own name */ about: string; job: string; /** what could change, in one sentence, in the person's terms */ says: string; /** what it would need that the board already has */ needs: string[]; /** what stays with a person, named — an agent proposal without a check is not a proposal */ keeps?: string; /** what on the board this was read off */ evidence: string[]; } export declare function openings(b: Board): Opening[];