flow/check-run¶
Source: src/flow/check-run.ts
The run stage of validation: a checked flow held to the project it is about to run in, still before the first spawn.
What the flow stage cannot know is here: the working tree, the ports the
launch hands over, and whether somebody is there. A flow valid on its own may
be refused on one project, since a check script belongs to the project,
and a commit, a copy or a read of diff needs a repository. With nobody
there, a flow that could reach a question nobody can leave unanswered is
refused now rather than failed there, behind a choice too: whether a case
is taken is only known once the run has spent what came before it. Every
rule reads the flows called too, where the call stands: a callee acts in
its caller’s tree, through the same ports.
What passes is a CheckedRun, which carries the tree and ports it was
checked against, so a flow checked for one project cannot run in another.
CheckedRun¶
type
export type CheckedRun = RunStage & {
/** The flow, as the flow stage checked it. */
readonly flow: CheckedFlow;
/**
* Each check script's content by its path, read here: what runs is what was
* read before the first spawn, whatever an agent does to the file after.
*/
readonly scripts: ReadonlyMap<string, string>;
readonly [checked]: true;
};
A checked flow that passed the run stage too. Only checkRun makes one, and it is what runFlow takes.
checkRun¶
function
export async function checkRun(flow: CheckedFlow, stage: RunStage, read?: ReadonlyMap<string, string>): Promise<CheckRun> { /* … */ }
flow held to stage. A missing port, a missing script and a tree that is
no repository are each reported once, at the first node needing it. Given
read, each script’s content is taken from there instead of the disk: a
resume runs the scripts its run started with.
CheckRun¶
type
export type CheckRun = { readonly ok: true; readonly run: CheckedRun } | { readonly ok: false; readonly faults: readonly Fault[] };
A checked run, or every fault that refused it.
FlowPorts¶
type
export type FlowPorts = {
/** Puts an `ask` node's question to the person. */
readonly ask?: AskUser;
/** Runs a `check` node's script. */
readonly check?: CheckScript;
/** Commits, reads `diff`, and makes and lands the copies of a `copies: true` block. */
readonly git?: GitPort;
};
How a run reaches the world. A node whose port is absent refuses the run; without ask, nobody is there.
RunStage¶
type
export type RunStage = {
/** The working tree, at the repository root: a check's path starts there. */
readonly cwd: string;
/** How the run reaches the world; a node whose port is absent refuses it. */
readonly ports: FlowPorts;
/** Whether a person can answer. With no `ask` port, nobody can, whatever this says. */
readonly somebodyThere: boolean;
};
What a launch says about where it runs.