import { act, cleanup, fireEvent, render, screen, waitFor } from "@testing-library/react";
import { afterEach, describe, expect, it, vi } from "vitest";
import { setOperatorCredential, clearOperatorCredential } from "../lib/api";
import { CapabilityWorkspace } from "./CapabilityWorkspace";
import type { CapabilityDeployment, SchedulerBudget } from "../types";
const deployment: CapabilityDeployment = {
id: "deployment-1", capability: "rag.embedding", contract_version: 1,
deployment_candidate_id: "candidate-1", production_approval_id: "approval-1",
artifact_set_id: "artifact-set-1", runtime_profile_id: "profile-1",
compute_node_id: "node-1", accelerator_id: "gpu-1",
embedding_space: { id: "space-1", identity_digest: "a".repeat(64), dimension: 1024, normalized: true, migration_class: "requires_reindex", identity_facts: {}, created_at: "2026-08-25T12:00:00Z" },
resource_envelope: { id: "envelope-1", runtime_probe_id: "probe-1", accelerator_kind: "NVIDIA RTX 4080 SUPER", accelerator_uuid: "GPU-test", environment_fingerprint: "b".repeat(64), concurrency: 1, batch_size: 8, max_sequence_length: 8192, baseline_vram_bytes: 1_100_000_000, resident_vram_bytes: 1_500_000_000, peak_vram_bytes: 2_700_000_000, required_vram_bytes: 1_600_000_000, cold_load_time_ms: 3690, inference_latency_ms: 1203, stale: false },
residency: { id: "residency-1", state: "warm", worker_instance_id: "worker-1", load_count: 1, active_requests: 0, measured_resident_vram_bytes: 1_500_000_000, external_baseline_vram_bytes: 636_000_000, health: { functional: true }, resident_since: "2026-08-25T12:00:00Z", last_used_at: "2026-08-25T12:01:00Z" },
channel: "stable", status: "stable", production: true, health_status: "healthy",
routing_weight: 100, fallback_policy: {}, residency_policy: "keep_warm",
keep_warm_seconds: 900, max_concurrency: 1, max_queue_depth: 16,
config_fingerprint: "c".repeat(64), provenance: { runtime_probe_id: "probe-1", compatibility_assessment_id: "assessment-1" },
rollback_policy: { mode: "drain_to_unavailable" }, promoted_at: "2026-08-25T12:00:00Z", created_at: "2026-08-25T12:00:00Z",
};
const budget: SchedulerBudget = {
compute_node_id: "node-1", node_name: "GPU Node", accelerator_id: "gpu-1",
accelerator_uuid: "GPU-test", accelerator_name: "NVIDIA RTX 4080 SUPER",
total_vram_bytes: 17_171_480_576, observed_used_vram_bytes: 2_200_000_000,
external_vram_bytes: 700_000_000, resident_vram_bytes: 1_500_000_000,
leased_vram_bytes: 0, safety_reserve_bytes: 1_073_741_824,
schedulable_free_vram_bytes: 13_897_738_752, pressure: false, observed_at: "2026-08-25T12:00:00Z",
pressure_state: "NORMAL", attribution_confidence: "KNOWN", invariant_delta_bytes: 0,
policy_revision: "m10-v1",
};
function mockServing(options: { deployments?: CapabilityDeployment[]; invokeError?: boolean; calls?: string[] } = {}): void {
vi.stubGlobal("fetch", vi.fn((input: RequestInfo | URL, init?: RequestInit) => {
const url = String(input);
let payload: unknown = [];
let status = 200;
if (url.endsWith("/api/v1/capabilities")) payload = [{ key: "rag.embedding", version: 1, description: "Local retrieval", stable_deployment: null, contract: { capability: "rag.embedding", version: 1, description: "Local retrieval", modalities: { input: ["text"], output: ["vector"] }, upgrade_class: "requires_reindex", vector: { dimensionality: 1024, normalized: true, cross_deployment_compatible: false }, slo: {}, privacy: { classification: "confidential", allow_persistence: false, allow_logging_payloads: false, allow_network_egress: false }, resources: { accelerator_required: true, cpu_fallback_allowed: false }, fallback: { allowed: false, mode: "hard_fail" }, production_priority: "production", default_residency: "keep_warm", estate: { category: "RAG", purpose: "Local retrieval", stability: "stable", resource_class: "MEDIUM", evaluation_type: "retrieval", consumers: [] } } }];
if (url.endsWith("/api/v1/capability-deployments")) payload = options.deployments ?? [deployment];
if (url.endsWith("/api/v1/capability-estate")) payload = [
{ capability: "rag.embedding", version: 1, category: "RAG", purpose: "Local retrieval", declared_stability: "stable", operational_state: options.deployments?.length === 0 ? "not_deployed" : "stable", current_deployment_id: "deployment-1", model: "Nomic", revision: "a".repeat(40), runtime: "sentence_transformers", node: "node-1", resource_class: "MEDIUM", measured_required_vram_bytes: 1_600_000_000, consumers: ["examplerag"], privacy_class: "confidential", evaluation_type: "retrieval", evaluation_state: "completed" },
{ capability: "document.ocr", version: 1, category: "DOCUMENT", purpose: "Local OCR", declared_stability: "experimental", operational_state: "not_deployed", resource_class: "MEDIUM", consumers: ["examplerag"], privacy_class: "restricted", evaluation_type: "ocr", evaluation_state: "not_evaluated" },
{ capability: "vision.embedding", version: 1, category: "VISION", purpose: "Visual retrieval", declared_stability: "experimental", operational_state: "not_deployed", resource_class: "HEAVY", consumers: ["examplevision"], privacy_class: "confidential", evaluation_type: "visual-retrieval", evaluation_state: "not_evaluated" },
{ capability: "speech.transcription", version: 1, category: "AUDIO", purpose: "Local transcription", declared_stability: "experimental", operational_state: "not_deployed", resource_class: "HEAVY", consumers: [], privacy_class: "restricted", evaluation_type: "asr", evaluation_state: "not_evaluated" },
];
if (url.endsWith("/api/v1/scheduler")) payload = [budget];
if (url.endsWith("/api/v1/deployment-candidates")) payload = [];
if (url.includes("/api/v1/gateway/requests")) payload = [{ request_id: "request-1", capability: "rag.embedding@1", client: "acceptance", status: "completed", cold: false, queue_time_ms: 1, total_latency_ms: 20, created_at: "2026-08-25T12:00:00Z" }];
if (url.endsWith("/api/v1/admin/production-approvals")) payload = [];
if (url.includes("/api/v1/admin/scheduler/placements")) payload = [];
if (url.endsWith("/api/v1/admin/scheduler/policy")) payload = { revision: "m10-v1", active: true, configuration: { lab_paused: false }, created_at: "2026-08-25T12:00:00Z" };
if (url.includes("/unload")) { options.calls?.push(url); payload = { unloaded: true }; }
if (url.endsWith("/api/v1/admin/service-clients") && init?.method !== "POST") payload = [];
if (url.endsWith("/api/v1/admin/service-clients") && init?.method === "POST") payload = { id: "client-1", name: "modelforge-m5-acceptance", status: "active", allowed_capabilities: ["rag.embedding@1"], requests_per_minute: 60, max_concurrent_requests: 1, credential_prefix: "mf_test", created_at: "2026-08-25T12:00:00Z", credential: "mf_test_one_time_secret" };
if (url.endsWith("/api/v1/capabilities/rag.embedding@1/invoke")) {
if (options.invokeError) { status = 429; payload = { error: { message: "rate limit exceeded", details: { failure_code: "RATE_LIMITED" } } }; }
else payload = { capability: "rag.embedding@1", dimension: 1024, normalized: true, embedding_space_id: "space-1", data: [Array(1024).fill(0.03125)], request_id: "request-2", execution: { cold: false, node: "GPU Node", residency: "warm", load_count: 1, timings: { gateway_ms: 1, queue_ms: 0, load_ms: 0, inference_ms: 12, total_ms: 14 } }, usage: { input_count: 1, input_tokens: 4 } };
}
return Promise.resolve(new Response(JSON.stringify(payload), { status }));
}));
}
afterEach(() => { clearOperatorCredential(); cleanup(); vi.unstubAllGlobals(); vi.restoreAllMocks(); });
describe("M5 capability operations UI", () => {
it("shows the healthy stable capability and warm residency", async () => {
mockServing(); setOperatorCredential("test-admin"); render();
expect(await screen.findByText("rag.embedding@1")).toBeInTheDocument();
fireEvent.click(screen.getByRole("button", { name: "Inspect rag.embedding@1" }));
fireEvent.click(screen.getByRole("button", { name: "Inspect deployment deployment-1" }));
expect(screen.getByText("healthy")).toBeInTheDocument();
expect(screen.getAllByText("warm").length).toBeGreaterThan(0);
expect(screen.getAllByText("requires_reindex").length).toBeGreaterThan(0);
});
it("shows unavailable honestly when promotion has not happened", async () => {
mockServing({ deployments: [] }); render();
fireEvent.click(await screen.findByRole("button", { name: "Inspect rag.embedding@1" }));
expect(screen.getByText(/No deployment records exist/)).toBeInTheDocument();
});
it("renders real scheduler budget categories including external usage", async () => {
mockServing(); setOperatorCredential("test-admin"); render();
fireEvent.click(await screen.findByRole("tab", { name: "scheduler" }));
expect(screen.getByText(/GPU SCHEDULING COCKPIT · GPU Node/)).toBeInTheDocument();
expect(screen.getByText("External / unmanaged")).toBeInTheDocument();
expect(screen.getByText("Safety reserve")).toBeInTheDocument();
expect(screen.getByText("Schedulable free")).toBeInTheDocument();
});
it("shows a newly created credential exactly in the one-time result", async () => {
mockServing(); setOperatorCredential("test-admin"); render();
fireEvent.click(await screen.findByRole("tab", { name: "clients" }));
fireEvent.click(await screen.findByRole("button", { name: /Create one-time credential/ }));
expect(await screen.findByText("mf_test_one_time_secret")).toBeInTheDocument();
expect(screen.getByText(/Only its hash is stored/)).toBeInTheDocument();
});
it("invokes by capability without asking for a concrete model name", async () => {
mockServing(); setOperatorCredential("test-admin"); render();
fireEvent.click(await screen.findByRole("tab", { name: "playground" }));
expect(screen.queryByLabelText(/model name/i)).not.toBeInTheDocument();
expect(screen.getByRole("option", { name: "document.ocr@1" })).toBeInTheDocument();
expect(screen.getByRole("option", { name: "vision.embedding@1" })).toBeInTheDocument();
expect(screen.getByRole("option", { name: "speech.transcription@1" })).toBeInTheDocument();
fireEvent.change(screen.getByLabelText("Service credential"), { target: { value: "client-secret" } });
fireEvent.click(screen.getByRole("button", { name: "Invoke capability" }));
expect(await screen.findByText("1 × 1024 finite values")).toBeInTheDocument();
});
it("surfaces typed gateway failures", async () => {
mockServing({ invokeError: true }); render();
fireEvent.click(await screen.findByRole("tab", { name: "playground" }));
fireEvent.change(screen.getByLabelText("Service credential"), { target: { value: "client-secret" } });
fireEvent.click(screen.getByRole("button", { name: "Invoke capability" }));
expect(await screen.findByText("rate limit exceeded (RATE_LIMITED)")).toBeInTheDocument();
});
});
describe("Capability state read semantics", () => {
it("shows a typed initial failure and retries instead of displaying an empty estate", async () => {
mockServing();
const normalFetch = fetch;
let failFirstRead = true;
vi.stubGlobal("fetch", vi.fn((input: RequestInfo | URL, init?: RequestInit) => {
if (failFirstRead && String(input).endsWith("/api/v1/capability-estate")) {
failFirstRead = false;
return Promise.resolve(new Response(JSON.stringify({ error: {
code: "SERVICE_UNAVAILABLE", message: "Capability estate read failed", correlation_id: "corr-capability-123",
details: { failure_code: "CAPABILITY_READ_UNAVAILABLE" },
} }), { status: 503 }));
}
return normalFetch(input, init);
}));
const onError = vi.fn();
render();
expect(await screen.findByRole("alert")).toHaveTextContent("Capability serving state is unavailable");
expect(screen.getByText(/No authoritative snapshot was loaded/)).toBeInTheDocument();
expect(screen.getByText("CAPABILITY_READ_UNAVAILABLE")).toBeInTheDocument();
expect(screen.getByText("corr-capability-123")).toBeInTheDocument();
expect(screen.getByText("Yes")).toBeInTheDocument();
expect(screen.queryByText(/0 declared contracts/)).not.toBeInTheDocument();
expect(screen.queryByText(/0 deployment records/)).not.toBeInTheDocument();
expect(onError).not.toHaveBeenCalled();
fireEvent.click(screen.getByRole("button", { name: "Retry capability state" }));
expect(await screen.findByRole("heading", { name: "1 declared contracts" })).toBeInTheDocument();
expect(screen.getByText("1 deployment records")).toBeInTheDocument();
});
it("discloses an offline polling failure with its stale snapshot and recovers on retry", async () => {
mockServing();
const pollCallbacks: Array<() => void> = [];
vi.spyOn(window, "setInterval").mockImplementation(((callback: TimerHandler) => {
if (typeof callback === "function") pollCallbacks.push(callback as () => void);
return 1;
}) as typeof window.setInterval);
vi.spyOn(window, "clearInterval").mockImplementation(() => undefined);
const onError = vi.fn();
render();
expect(await screen.findByRole("heading", { name: "1 declared contracts" })).toBeInTheDocument();
expect(pollCallbacks.length).toBeGreaterThan(0);
const normalFetch = fetch;
let failNextRead = true;
let offlineRequestAttempted = false;
vi.stubGlobal("fetch", vi.fn((input: RequestInfo | URL, init?: RequestInit) => {
if (failNextRead && String(input).endsWith("/api/v1/capability-estate")) {
failNextRead = false;
offlineRequestAttempted = true;
return Promise.reject(new TypeError("Failed to fetch"));
}
return normalFetch(input, init);
}));
await act(async () => { pollCallbacks.forEach(callback => callback()); });
expect(offlineRequestAttempted).toBe(true);
expect(await screen.findByText("Capability data may be out of date")).toBeInTheDocument();
expect(screen.getByText("OFFLINE")).toBeInTheDocument();
expect(screen.getByText("NETWORK_UNAVAILABLE")).toBeInTheDocument();
expect(screen.getByText("Retryable").parentElement).toHaveTextContent("Yes");
expect(screen.getByRole("heading", { name: "1 declared contracts" })).toBeInTheDocument();
expect(screen.getByText("1 deployment records")).toBeInTheDocument();
expect(onError).not.toHaveBeenCalled();
fireEvent.click(screen.getByRole("button", { name: "Retry capability state" }));
await waitFor(() => expect(screen.queryByText("Capability data may be out of date")).not.toBeInTheDocument());
expect(screen.getByRole("heading", { name: "1 declared contracts" })).toBeInTheDocument();
});
it("keeps manual refresh inside the public boundary when an admin-role session is inactive", async () => {
mockServing();
setOperatorCredential("viewer-session");
const normalFetch = fetch;
const requestedUrls: string[] = [];
vi.stubGlobal("fetch", vi.fn((input: RequestInfo | URL, init?: RequestInit) => {
requestedUrls.push(String(input));
return normalFetch(input, init);
}));
render();
expect(await screen.findByRole("heading", { name: "1 declared contracts" })).toBeInTheDocument();
fireEvent.click(screen.getByRole("button", { name: "Refresh capability state" }));
await waitFor(() => expect(requestedUrls.filter(url => url.endsWith("/api/v1/capability-deployments")).length).toBe(2));
expect(requestedUrls.some(url => url.includes("/api/v1/admin/"))).toBe(false);
});
});
describe("M18 closure · capability tabs and guarded residency unload", () => {
async function openScheduler(calls: string[]) {
mockServing({ calls });
setOperatorCredential("test-admin"); render();
fireEvent.click(await screen.findByRole("tab", { name: "scheduler" }));
return await screen.findByRole("button", { name: "Unload idle" });
}
it("pairs each capability tab with the panel it controls", async () => {
mockServing(); setOperatorCredential("test-admin"); render();
await screen.findByRole("tablist", { name: "Capability operations" });
const selected = screen.getByRole("tab", { selected: true });
const panel = screen.getByRole("tabpanel");
expect(selected.getAttribute("aria-controls")).toBe(panel.getAttribute("id"));
expect(panel.getAttribute("aria-labelledby")).toBe(selected.getAttribute("id"));
const ids = screen.getAllByRole("tab").map((tab) => tab.getAttribute("id"));
expect(new Set(ids).size).toBe(ids.length);
});
it("guards residency unload with the console safety dialog instead of a native confirm", async () => {
const confirmSpy = vi.spyOn(window, "confirm");
const calls: string[] = [];
fireEvent.click(await openScheduler(calls));
const dialog = await screen.findByRole("alertdialog", { name: "Unload idle residency?" });
expect(dialog).toBeInTheDocument();
// The native dialog is gone for good: it cannot carry this impact evidence.
expect(confirmSpy).not.toHaveBeenCalled();
expect(screen.getByText("rag.embedding@1")).toBeInTheDocument();
expect(screen.getByText("Resident VRAM released")).toBeInTheDocument();
expect(calls).toHaveLength(0);
confirmSpy.mockRestore();
});
it("performs no mutation when the guarded unload is cancelled", async () => {
const calls: string[] = [];
fireEvent.click(await openScheduler(calls));
await screen.findByRole("alertdialog", { name: "Unload idle residency?" });
fireEvent.click(screen.getByRole("button", { name: "Cancel" }));
await waitFor(() => expect(screen.queryByRole("alertdialog")).not.toBeInTheDocument());
expect(calls).toHaveLength(0);
});
it("requires acknowledgement and then unloads exactly once", async () => {
const calls: string[] = [];
fireEvent.click(await openScheduler(calls));
await screen.findByRole("alertdialog", { name: "Unload idle residency?" });
const confirm = screen.getByRole("button", { name: "Unload residency" });
expect(confirm).toBeDisabled();
fireEvent.click(screen.getByRole("checkbox", { name: /cold-load cost/ }));
expect(confirm).toBeEnabled();
fireEvent.click(confirm);
fireEvent.click(confirm);
expect(await screen.findByRole("status")).toHaveTextContent(/was unloaded/);
// Exactly one mutation, even though confirm was clicked twice.
expect(calls).toHaveLength(1);
});
it("dismisses the guarded unload with Escape", async () => {
const calls: string[] = [];
fireEvent.click(await openScheduler(calls));
await screen.findByRole("alertdialog", { name: "Unload idle residency?" });
fireEvent.keyDown(window, { key: "Escape" });
await waitFor(() => expect(screen.queryByRole("alertdialog")).not.toBeInTheDocument());
expect(calls).toHaveLength(0);
});
});
describe("Capability administrative role boundary", () => {
it.each(["viewer", "operator"] as const)("does not fetch admin data or offer another credential for %s", async role => {
mockServing(); setOperatorCredential("test-read-session"); render();
fireEvent.click(await screen.findByRole("tab", { name: "promotion" }));
expect(screen.getByText(/Read-only access/)).toBeInTheDocument();
expect(screen.queryByLabelText("Operator API key")).not.toBeInTheDocument();
expect(screen.queryByRole("button", { name: /Record reviewed/ })).not.toBeInTheDocument();
expect(vi.mocked(fetch).mock.calls.some(([url]) => String(url).includes("/admin/"))).toBe(false);
});
it("keeps a locked admin session read-only", async () => {
mockServing(); render();
fireEvent.click(await screen.findByRole("tab", { name: "promotion" }));
expect(screen.getByText(/Read-only access/)).toBeInTheDocument();
expect(vi.mocked(fetch).mock.calls.some(([url]) => String(url).includes("/admin/"))).toBe(false);
});
it("renders nullable embedding metadata without blocking access to promotion", async () => {
mockServing({ deployments: [{ ...deployment, embedding_space: null }] }); setOperatorCredential("test-admin"); render();
fireEvent.click(await screen.findByRole("tab", { name: "promotion" }));
expect(screen.getByRole("heading", { name: "Promotion evidence" })).toBeInTheDocument();
});
});
describe("Capability declaration refresh ordering", () => {
async function pendingRefreshes() {
mockServing();
const onError = vi.fn();
render();
fireEvent.click(await screen.findByRole("button", { name: "Inspect rag.embedding@1" }));
await screen.findByRole("region", { name: "Details for rag.embedding@1" });
const originalFetch = fetch;
const pending: Array<(response: Response) => void> = [];
vi.stubGlobal("fetch", vi.fn((input: RequestInfo | URL, init?: RequestInit) => {
if (String(input).endsWith("/api/v1/capabilities")) return new Promise(resolve => pending.push(resolve));
return originalFetch(input, init);
}));
const refresh = () => fireEvent.click(screen.getByRole("button", { name: "Refresh capability state" }));
const finish = async (index: number, success: boolean) => {
await act(async () => {
const response = success ? await originalFetch("/api/v1/capabilities") : new Response(JSON.stringify({ detail: "Declarations unavailable" }), { status: 503 });
pending[index](response);
});
};
return { refresh, finish, onError };
}
it("keeps the last good snapshot disclosed after a newer refresh failed", async () => {
const { refresh, finish } = await pendingRefreshes();
refresh(); refresh();
await finish(1, false);
expect(screen.getByText("Capability data may be out of date")).toBeInTheDocument();
expect(screen.getByRole("region", { name: "Details for rag.embedding@1" })).toBeInTheDocument();
await finish(0, true);
expect(screen.getByText("Capability data may be out of date")).toBeInTheDocument();
expect(screen.getByRole("region", { name: "Details for rag.embedding@1" })).toBeInTheDocument();
});
it("does not clear newer declarations or report an older refresh failure", async () => {
const { refresh, finish, onError } = await pendingRefreshes();
refresh(); refresh();
await finish(1, true);
onError.mockClear();
await finish(0, false);
expect(screen.getByRole("region", { name: "Details for rag.embedding@1" })).toBeInTheDocument();
expect(onError).not.toHaveBeenCalled();
});
it("ignores a pending contract failure after the operator session changes", async () => {
const { refresh, finish, onError } = await pendingRefreshes();
refresh();
setOperatorCredential("replacement-viewer-session");
onError.mockClear();
await finish(0, false);
expect(onError).not.toHaveBeenCalled();
expect(screen.getByRole("region", { name: "Details for rag.embedding@1" })).toBeInTheDocument();
});
});