Add provider triage health contract
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { buildProviderTriageResult, type ProviderTriageSignal } from "./provider-triage";
|
||||
|
||||
function signal(
|
||||
id: string,
|
||||
scope: ProviderTriageSignal["scope"],
|
||||
status: ProviderTriageSignal["status"],
|
||||
): ProviderTriageSignal {
|
||||
return {
|
||||
id,
|
||||
scope,
|
||||
status,
|
||||
independentPath: true,
|
||||
observedAt: "2026-05-20T00:00:00.000Z",
|
||||
summary: `${id}:${scope}:${status}`,
|
||||
};
|
||||
}
|
||||
|
||||
describe("provider triage contract", () => {
|
||||
test("single path provider offline stays non-global blocker", () => {
|
||||
const result = buildProviderTriageResult("D601", [
|
||||
signal("runner-local", "runner-local", "failed"),
|
||||
signal("backend-core-node", "provider-gateway", "ok"),
|
||||
signal("host-ssh-probe", "ssh", "ok"),
|
||||
], "2026-05-20T00:00:00.000Z");
|
||||
|
||||
expect(result.blockingDisposition).toBe("runner-local-observation-gap");
|
||||
expect(result.retryable).toBe(true);
|
||||
expect(result.scope).toBe("runner-local");
|
||||
expect(result.contract.singlePathProviderOfflineIsGlobalBlocker).toBe(false);
|
||||
});
|
||||
|
||||
test("multiple independent critical failures can global block", () => {
|
||||
const result = buildProviderTriageResult("D601", [
|
||||
signal("backend-core-node", "provider-gateway", "failed"),
|
||||
signal("host-ssh-probe", "ssh", "failed"),
|
||||
signal("code-queue-health", "scheduler", "failed"),
|
||||
], "2026-05-20T00:00:00.000Z");
|
||||
|
||||
expect(result.blockingDisposition).toBe("global-blocker");
|
||||
expect(result.retryable).toBe(false);
|
||||
expect(result.failedIndependentScopes).toContain("provider-gateway");
|
||||
expect(result.failedIndependentScopes).toContain("ssh");
|
||||
});
|
||||
|
||||
test("registry failure with healthy heartbeat and ssh is degraded, not global blocker", () => {
|
||||
const result = buildProviderTriageResult("D601", [
|
||||
signal("backend-core-node", "provider-gateway", "ok"),
|
||||
signal("host-ssh-probe", "ssh", "ok"),
|
||||
signal("artifact-registry-health", "registry", "failed"),
|
||||
signal("k3sctl-adapter-health", "k3s", "ok"),
|
||||
], "2026-05-20T00:00:00.000Z");
|
||||
|
||||
expect(result.blockingDisposition).toBe("service-degraded");
|
||||
expect(result.retryable).toBe(true);
|
||||
expect(result.healthyIndependentScopes).toContain("provider-gateway");
|
||||
expect(result.healthyIndependentScopes).toContain("ssh");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user