Skip to content
API reference

git-steps

Import
import * as api from "@fungi.computer/agar/git-steps";
Kind Export Description
class GitStepMaterialError Permanent continuation failure: background owners settle their lane instead of retrying it.
type alias GitStepMaterial Facet-owned immutable material, split into individually bounded rows.
type alias GitStepSql Existing facet SQLite owner; no transaction or scheduler is introduced here.
type alias GitStep Durable checkpoint, suitable for a Watchdog payload and fresh-frame re-admission.
type alias GitStepOperation Caller-owned operation; begin fixes the timestamp and stores file bytes outside the checkpoint.
type alias GitStepOutcome Final Git outcome; oversize material refuses before any receive-pack.
type alias GitStepResult One step either checkpoints, settles, or yields before transport.
type alias GitStepPorts Per-frame transport plus the existing facet’s durable material owner.
constant gitStepSchema Strict, JSON-only continuation grammar; material and authority are not stored in it.
function sqliteGitStepMaterial() One-MiB material rows; exact replays are idempotent, conflicting material refuses.
function memoryGitStepMaterial() Volatile foreground driver material; background callers use the facet owner.
function begin() Prepare immutable request material before atomically enqueueing the first checkpoint.
function runStep() Execute one fresh-admitted frame; the caller persists next and its successor job atomically.
function dropMaterial() Drop material only after the owner has durably recorded the terminal outcome.

Permanent continuation failure: background owners settle their lane instead of retrying it.

  • Error
Signature
new GitStepMaterialError(code): GitStepMaterialError;

Construct the canonical permanent continuation error.

Parameter Type Description
code | "unavailable" | "conflict" | "digest_mismatch" | "atomic_unavailable" | "push_refused" Permanent continuation failure reason.

GitStepMaterialError

Signature
Error.constructor;
Signature
readonly code:
| "unavailable"
| "conflict"
| "digest_mismatch"
| "atomic_unavailable"
| "push_refused";

Invalid material, unavailable atomic support, or an exhausted unchanged-head push refusal.

GitStepMaterialtype alias

Section titled “GitStepMaterial”
Signature
type GitStepMaterial = Readonly<{
put: Promise<void>;
read: Promise<Uint8Array<ArrayBufferLike>>;
drop: Promise<void>;
}>;

Facet-owned immutable material, split into individually bounded rows.


GitStepSqltype alias

Section titled “GitStepSql”
Signature
type GitStepSql = Readonly<{
exec: {
toArray: readonly Readonly<
Record<string, string | number | ArrayBuffer | null>
>[];
};
}>;

Existing facet SQLite owner; no transaction or scheduler is introduced here.


Signature
type GitStep = z.output<typeof gitStepSchema>;

Durable checkpoint, suitable for a Watchdog payload and fresh-frame re-admission.


GitStepOperationtype alias

Section titled “GitStepOperation”
Signature
type GitStepOperation =
| Readonly<{
kind: "commit";
requestKey: string;
request: CommitFilesRequest;
tags?: readonly Readonly<{
ref: string;
expected: string | null;
}>[];
timestamp?: number;
}>
| Readonly<{
kind: "merge";
requestKey: string;
request: MergeBranchRequest;
timestamp?: number;
}>;

Caller-owned operation; begin fixes the timestamp and stores file bytes outside the checkpoint.


GitStepOutcometype alias

Section titled “GitStepOutcome”
Signature
type GitStepOutcome =
| GitWriteOutcome
| GitMergeOutcome
| Readonly<{
kind: "too_large";
}>;

Final Git outcome; oversize material refuses before any receive-pack.


GitStepResulttype alias

Section titled “GitStepResult”
Signature
type GitStepResult =
| Readonly<{
next: GitStep;
}>
| Readonly<{
done: GitStepOutcome;
}>
| Readonly<{
yield: true;
}>;

One step either checkpoints, settles, or yields before transport.


GitStepPortstype alias

Section titled “GitStepPorts”
Signature
type GitStepPorts = Readonly<{
git: GitCommitStore;
material: GitStepMaterial;
}>;

Per-frame transport plus the existing facet’s durable material owner.

gitStepSchemaconstant

Section titled “gitStepSchema”
Signature
const gitStepSchema: ZodDiscriminatedUnion<[ZodObject<{
key: ZodString;
timestamp: ZodNumber;
operation: ZodDiscriminatedUnion<[ZodObject<{
kind: ZodLiteral<"commit">;
request: ZodObject<{
repository: ZodString;
branch: ZodString;
expectedHead: ZodNullable<...>;
startFrom: ZodOptional<...>;
message: ZodString;
author: ZodObject<..., ...>;
}, $strict>;
changesDigest: ZodCustomStringFormat<"sha256_hex">;
tags: ZodArray<ZodObject<{
ref: ...;
expected: ...;
}, $strict>>;
}, $strict>, ZodObject<{
kind: ZodLiteral<"merge">;
request: ZodObject<{
target: ZodString;
source: ZodString;
branch: ZodString;
sourceBranch: ZodString;
expectedSource: ZodString;
expectedTarget: ZodOptional<...>;
behind: ZodOptional<...>;
message: ZodString;
author: ZodObject<..., ...>;
}, $strict>;
}, $strict>], "kind">;
phase: ZodLiteral<"fetch-base">;
base: ZodNullable<ZodString>;
}, $strict>, ZodObject<{
key: ZodString;
timestamp: ZodNumber;
operation: ZodDiscriminatedUnion<[ZodObject<{
kind: ZodLiteral<"commit">;
request: ZodObject<{
repository: ZodString;
branch: ZodString;
expectedHead: ZodNullable<...>;
startFrom: ZodOptional<...>;
message: ZodString;
author: ZodObject<..., ...>;
}, $strict>;
changesDigest: ZodCustomStringFormat<"sha256_hex">;
tags: ZodArray<ZodObject<{
ref: ...;
expected: ...;
}, $strict>>;
}, $strict>, ZodObject<{
kind: ZodLiteral<"merge">;
request: ZodObject<{
target: ZodString;
source: ZodString;
branch: ZodString;
sourceBranch: ZodString;
expectedSource: ZodString;
expectedTarget: ZodOptional<...>;
behind: ZodOptional<...>;
message: ZodString;
author: ZodObject<..., ...>;
}, $strict>;
}, $strict>], "kind">;
phase: ZodLiteral<"too-large">;
}, $strict>, ZodObject<{
key: ZodString;
timestamp: ZodNumber;
operation: ZodDiscriminatedUnion<[ZodObject<{
kind: ZodLiteral<"commit">;
request: ZodObject<{
repository: ZodString;
branch: ZodString;
expectedHead: ZodNullable<...>;
startFrom: ZodOptional<...>;
message: ZodString;
author: ZodObject<..., ...>;
}, $strict>;
changesDigest: ZodCustomStringFormat<"sha256_hex">;
tags: ZodArray<ZodObject<{
ref: ...;
expected: ...;
}, $strict>>;
}, $strict>, ZodObject<{
kind: ZodLiteral<"merge">;
request: ZodObject<{
target: ZodString;
source: ZodString;
branch: ZodString;
sourceBranch: ZodString;
expectedSource: ZodString;
expectedTarget: ZodOptional<...>;
behind: ZodOptional<...>;
message: ZodString;
author: ZodObject<..., ...>;
}, $strict>;
}, $strict>], "kind">;
phase: ZodLiteral<"inspect-base">;
}, $strict>], "phase">;

Strict, JSON-only continuation grammar; material and authority are not stored in it.

sqliteGitStepMaterial()function

Section titled “sqliteGitStepMaterial()”
Signature
function sqliteGitStepMaterial(sql): GitStepMaterial;

One-MiB material rows; exact replays are idempotent, conflicting material refuses.

Parameter Type
sql GitStepSql

GitStepMaterial


memoryGitStepMaterial()function

Section titled “memoryGitStepMaterial()”
Signature
function memoryGitStepMaterial(): GitStepMaterial;

Volatile foreground driver material; background callers use the facet owner.

GitStepMaterial


Signature
function begin(
input,
material,
): Promise<
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
phase: "fetch-base";
base: string | null;
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
phase: "too-large";
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
phase: "inspect-base";
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
phase: "inspect-source";
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
phase: "fetch-source";
target?: string;
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
phase: "inspect-target";
sourceDigest: string;
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
phase: "fetch-target";
sourceDigest: string;
target: string;
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
old: string | null;
built: string;
packDigest: string;
attempt: number;
pushBefore?: string | null;
atomic?: true;
phase: "inspect-merge-push";
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
old: string | null;
built: string;
packDigest: string;
attempt: number;
pushBefore?: string | null;
atomic?: true;
phase: "inspect-atomic";
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
old: string | null;
built: string;
packDigest: string;
attempt: number;
pushBefore?: string | null;
atomic?: true;
phase: "push";
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
old: string | null;
built: string;
packDigest: string;
attempt: number;
pushBefore?: string | null;
atomic?: true;
phase: "confirm";
}
| {
key: string;
timestamp: number;
operation:
| {
kind: "commit";
request: {
repository: string;
branch: string;
expectedHead: string | null;
startFrom?: string;
message: string;
author: {
name: string;
email: string;
};
};
changesDigest: string;
tags: object[];
}
| {
kind: "merge";
request: {
target: string;
source: string;
branch: string;
sourceBranch: string;
expectedSource: string;
expectedTarget?: string;
behind?: number;
message: string;
author: {
name: string;
email: string;
};
};
};
old: string | null;
built: string;
packDigest: string;
attempt: number;
pushBefore?: string | null;
atomic?: true;
phase: "confirm-ancestry";
head: string;
}
>;

Prepare immutable request material before atomically enqueueing the first checkpoint.

Parameter Type
input GitStepOperation
material GitStepMaterial

Promise< | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "fetch-base"; base: string | null; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "too-large"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "inspect-base"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "inspect-source"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "fetch-source"; target?: string; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "inspect-target"; sourceDigest: string; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "fetch-target"; sourceDigest: string; target: string; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "inspect-merge-push"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "inspect-atomic"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "push"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "confirm"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "confirm-ancestry"; head: string; }>


Signature
function runStep(raw, ports, signal): Promise<GitStepResult>;

Execute one fresh-admitted frame; the caller persists next and its successor job atomically.

Parameter Type
raw | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "fetch-base"; base: string | null; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "too-large"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "inspect-base"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "inspect-source"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "fetch-source"; target?: string; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "inspect-target"; sourceDigest: string; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "fetch-target"; sourceDigest: string; target: string; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "inspect-merge-push"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "inspect-atomic"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "push"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "confirm"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "confirm-ancestry"; head: string; }
ports GitStepPorts
signal AbortSignal

Promise<GitStepResult>


dropMaterial()function

Section titled “dropMaterial()”
Signature
function dropMaterial(step, material): Promise<void>;

Drop material only after the owner has durably recorded the terminal outcome.

Parameter Type
step | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "fetch-base"; base: string | null; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "too-large"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "inspect-base"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "inspect-source"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "fetch-source"; target?: string; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "inspect-target"; sourceDigest: string; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; phase: "fetch-target"; sourceDigest: string; target: string; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "inspect-merge-push"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "inspect-atomic"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "push"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "confirm"; } | { key: string; timestamp: number; operation: | { kind: "commit"; request: { repository: string; branch: string; expectedHead: string | null; startFrom?: string; message: string; author: { name: string; email: string; }; }; changesDigest: string; tags: object[]; } | { kind: "merge"; request: { target: string; source: string; branch: string; sourceBranch: string; expectedSource: string; expectedTarget?: string; behind?: number; message: string; author: { name: string; email: string; }; }; }; old: string | null; built: string; packDigest: string; attempt: number; pushBefore?: string | null; atomic?: true; phase: "confirm-ancestry"; head: string; }
material GitStepMaterial

Promise<void>