/* isolation conformance — conformance fixture type definitions for isolation providers. Do not run conformance checks — this module defines the fixtures. RFC-1097: sweep — werkstatt-engine clean Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics. */ import type { AdversarialCaseKind, AdversarialCaseResultV1, IsolationAdapterV1, IsolationConformanceResultV1, IsolationConformanceStatus, IsolationPropertyEvidenceV1, IsolationPropertyKind, } from "./contracts.ts"; import { REQUIRED_PROPERTIES, REJECTED_ADAPTER_TIERS } from "./contracts.ts"; import type { Sha256Digest } from "@warpgogol/werkstatt-shared/fingerprint"; export interface IsolationConformanceFixtureV1 { readonly fixtureId: string; readonly fixtureHash: Sha256Digest; readonly adapter: IsolationAdapterV1; readonly cases: readonly AdversarialCaseKind[]; } export interface IsolationConformanceOptions { readonly now: () => number; } function checkProperties(evidence: IsolationPropertyEvidenceV1): { missing: IsolationPropertyKind[]; unsupported: IsolationPropertyKind[]; } { const provenKinds = new Set(); for (const prop of evidence.properties) { if (prop.proven) { provenKinds.add(prop.kind); } } const missing: IsolationPropertyKind[] = REQUIRED_PROPERTIES.filter((k) => !provenKinds.has(k)); const unsupported: IsolationPropertyKind[] = [...evidence.unsupported]; return { missing, unsupported }; } function runCase( caseKind: AdversarialCaseKind, adapter: IsolationAdapterV1, ): AdversarialCaseResultV1 { if (REJECTED_ADAPTER_TIERS.has(caseKind)) { return { caseKind, passed: false, violations: [ `ISOLATION-REJECTED: ${caseKind} — node:vm, worker_threads, and ordinary subprocesses cannot satisfy the untrusted isolation tier`, ], detail: `Adapter ${adapter.adapterId} is rejected for ${caseKind}: this tier is not a hostile-code security boundary`, }; } const { missing, unsupported } = checkProperties(adapter.properties); if (missing.length > 0 || unsupported.length > 0) { return { caseKind, passed: false, violations: [ ...missing.map((m) => `ISOLATION-INCOMPLETE: missing property ${m}`), ...unsupported.map((u) => `ISOLATION-INCOMPLETE: unsupported property ${u}`), ], detail: `Adapter ${adapter.adapterId} has incomplete property evidence for ${caseKind}`, }; } return { caseKind, passed: true, violations: [], detail: `Adapter ${adapter.adapterId} passed ${caseKind}`, }; } export function runIsolationConformance( fixture: IsolationConformanceFixtureV1, _options: IsolationConformanceOptions, ): IsolationConformanceResultV1 { const adapter = fixture.adapter; const { missing, unsupported } = checkProperties(adapter.properties); const defaultCases: readonly AdversarialCaseKind[] = [ "filesystem-escape", "network-escape", "process-escape", "environment-escape", "credential-escape", "descriptor-escape", "resource-exhaustion", "workload-separation", "teardown", "crash", "bridge-confusion", "bridge-replay", ]; const allCases: readonly AdversarialCaseKind[] = fixture.cases.length > 0 ? fixture.cases : defaultCases; const caseResults = allCases.map((c) => runCase(c, adapter)); const allViolations = caseResults.flatMap((r) => r.violations); if (missing.length > 0 || unsupported.length > 0) { allViolations.push( ...missing.map((m) => `ISOLATION-INCOMPLETE: missing required property ${m}`), ...unsupported.map((u) => `ISOLATION-INCOMPLETE: unsupported property ${u}`), ); } let status: IsolationConformanceStatus = "pass"; if (allViolations.length > 0) { const hasFail = caseResults.some((r) => !r.passed); const hasIncomplete = missing.length > 0 || unsupported.length > 0 || caseResults.some((r) => r.violations.some((v) => v.startsWith("ISOLATION-INCOMPLETE"))); status = hasIncomplete ? "incomplete" : hasFail ? "fail" : "fail"; } return { schema: "werkstatt/isolation-conformance-result@1", adapterId: adapter.adapterId, propertyEvidenceHash: adapter.properties.properties[0]?.evidenceHash ?? (("sha256:" + "0".repeat(64)) as Sha256Digest), grantSetHash: ("sha256:" + "0".repeat(64)) as Sha256Digest, fixtureHash: fixture.fixtureHash, cases: caseResults, violations: allViolations, status, testOnly: true, }; } export function createConformanceResult( adapterId: string, propertyEvidenceHash: Sha256Digest, grantSetHash: Sha256Digest, fixtureHash: Sha256Digest, cases: readonly AdversarialCaseResultV1[], violations: readonly string[], status: IsolationConformanceStatus, ): IsolationConformanceResultV1 { return { schema: "werkstatt/isolation-conformance-result@1", adapterId, propertyEvidenceHash, grantSetHash, fixtureHash, cases, violations, status, testOnly: true, }; }