mirror of
https://github.com/openclaw/openclaw.git
synced 2026-10-03 17:53:39 +00:00
* 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
38 lines
1.4 KiB
TypeScript
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;
|