openclaw/scripts/full-release-validation-state.d.mts
Peter Steinberger f34c2a21db
feat(release): let a release lead record an exact-job flake instead of blocking publication (#161515)
* feat(release): accept exact-job recorded flakes in release validation

A release lead can classify one failed Normal CI job of a Full Release
Validation run as a flake through the trusted classification workflow. The
receipt binds the exact job id and attempt, CI child run, FRV parent run and
attempt, and Release SHA, and carries a tracking issue or PR plus a reason.
Release Decision, the manifest, the publisher's live re-derivation, the step
summary, and the GitHub release notes tail treat it as a visible advisory.
Required classes and every other child stay blocking.

* docs(release): fold recorded flakes into the shared release boundaries

* fix(release): scope flake receipt discovery to the CI child run

* fix(release): require main lineage for flake receipt producers

* test(release): copy the flake classification module into tooling fixtures

* fix(release): keep advisory-only release notes verifiable
2026-09-30 04:31:07 +00:00

38 lines
1.4 KiB
TypeScript

import type { ReleaseRecord } from "./full-release-validation-policy.mjs";
export * from "./full-release-validation-policy.mjs";
export function validateChildBinding(
child: ReleaseRecord,
run: ReleaseRecord,
composite: ReleaseRecord,
): ReleaseRecord;
export function readChild(
child: ReleaseRecord,
previous: ReleaseRecord | undefined,
signal?: AbortSignal,
options?: {
parentRunId?: string;
parentRunAttempt?: number;
targetSha?: string;
loadFlakeClassifications?: typeof import("./full-release-flake-classification.mjs").loadFlakeClassifications;
reuseSelection?: { runAttempt: number };
readAttemptJobs?: (
runId: string,
runAttempt: number,
signal?: AbortSignal,
) => Promise<ReleaseRecord[]>;
readRun?: (runId: string, signal?: AbortSignal) => Promise<ReleaseRecord>;
},
): Promise<ReleaseRecord>;
export function releaseGhRetryDelayMs(
attempt: number,
deadlineMonotonicMs?: number,
nowMonotonicMs?: number,
): number;
export function updateReleaseTransportEpisode(
previous: ReleaseRecord | undefined,
children: ReleaseRecord[],
options?: { deadline?: number; monotonicNow?: number; wallNow?: number },
): ReleaseRecord;
export function parsePlanInputs(value: string): ReleaseRecord;
export function hydrateReusedPlan(plan: ReleaseRecord[], evidence: ReleaseRecord): ReleaseRecord[];
export function formatReleaseStateHeartbeat(mode: string, decision: ReleaseRecord): string;