/*
producers registry — register certification evidence producers keyed by kind.
- Do not produce evidence — the registry only maps kinds to producers.
- 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 { ReleaseCandidateV1 } from "../contracts/candidate.ts";
import type { CertificationPolicyBundleV1 } from "../contracts/policy-bundle.ts";
import type { EvidenceEnvelopeV1 } from "../contracts/evidence.ts";
import type {
CertificationProfileV1,
ProducerDeclarationV1,
CertificationRequirementV1,
ApplicabilityRuleV1,
} from "../profile/schemas.ts";
import type { Environment } from "../contracts/identifiers.ts";
import type { Diagnostic } from "@warpgogol/werkstatt-shared/kernel";
import type { Sha256Digest } from "@warpgogol/werkstatt-shared/fingerprint";
export type ProducerKind = "kernel-command" | "evaluator-agent" | "remote-workload";
export interface ProducerContextV1 {
candidate: ReleaseCandidateV1;
profile: CertificationProfileV1;
policyBundle: CertificationPolicyBundleV1;
environment: Environment;
toolchainId: string;
timestamp: string;
}
export interface ProducerResultV1 {
producerId: string;
requirementIds: string[];
diagnostics: Diagnostic[];
applicabilityResults: ApplicabilityResultV1[];
bindingHash: Sha256Digest;
producedAt: string;
}
export interface ApplicabilityResultV1 {
applicable: boolean;
reason: string;
}
export type ProducerHandlerV1 = (context: ProducerContextV1) => Promise;
export interface RegisteredProducerV1 {
declaration: ProducerDeclarationV1;
handler: ProducerHandlerV1;
}
export interface ProducerRegistryV1 {
register(
declaration: ProducerDeclarationV1,
handler: ProducerHandlerV1,
): ProducerRegisterOutcomeV1;
get(producerId: string): RegisteredProducerV1 | null;
has(producerId: string): boolean;
list(): readonly string[];
validateAgainstProfile(profile: CertificationProfileV1): ProducerValidationOutcomeV1;
}
export interface ProducerRegisterResultV1 {
ok: true;
producerId: string;
}
export interface ProducerRegisterFailureV1 {
ok: false;
ruleId: "CERT-PRODUCER-01" | "CERT-PRODUCER-02";
message: string;
}
export type ProducerRegisterOutcomeV1 = ProducerRegisterResultV1 | ProducerRegisterFailureV1;
export interface ProducerValidationResultV1 {
ok: true;
missing: string[];
extra: string[];
}
export interface ProducerValidationFailureV1 {
ok: false;
ruleId: "CERT-PRODUCER-03" | "CERT-PRODUCER-04";
message: string;
missing: string[];
extra: string[];
}
export type ProducerValidationOutcomeV1 = ProducerValidationResultV1 | ProducerValidationFailureV1;
export function createProducerRegistry(): ProducerRegistryV1 {
const producers = new Map();
return {
register(
declaration: ProducerDeclarationV1,
handler: ProducerHandlerV1,
): ProducerRegisterOutcomeV1 {
if (producers.has(declaration.id)) {
return {
ok: false,
ruleId: "CERT-PRODUCER-01",
message: `producer "${declaration.id}" is already registered`,
};
}
producers.set(declaration.id, { declaration, handler });
return { ok: true, producerId: declaration.id };
},
get(producerId: string): RegisteredProducerV1 | null {
return producers.get(producerId) ?? null;
},
has(producerId: string): boolean {
return producers.has(producerId);
},
list(): readonly string[] {
return [...producers.keys()];
},
validateAgainstProfile(profile: CertificationProfileV1): ProducerValidationOutcomeV1 {
const profileProducerIds = new Set(Object.keys(profile.producers));
const registeredIds = new Set(producers.keys());
const missing: string[] = [];
for (const id of profileProducerIds) {
if (!registeredIds.has(id)) {
missing.push(id);
}
}
const extra: string[] = [];
for (const id of registeredIds) {
if (!profileProducerIds.has(id)) {
extra.push(id);
}
}
if (missing.length > 0) {
return {
ok: false,
ruleId: "CERT-PRODUCER-03",
message: `profile references ${missing.length} unregistered producer(s): ${missing.join(", ")}`,
missing,
extra,
};
}
return { ok: true, missing, extra };
},
};
}
export function evaluateApplicability(
rule: ApplicabilityRuleV1,
_context: ProducerContextV1,
): ApplicabilityResultV1 {
switch (rule.kind) {
case "always":
return { applicable: true, reason: "always applicable" };
case "entitlement":
return {
applicable: true,
reason: `entitlement ref "${rule.ref}" expected=${rule.expected}`,
};
case "config": {
return {
applicable: true,
reason: `config ref "${rule.ref}" predicate="${rule.predicate}"`,
};
}
case "surface": {
return {
applicable: true,
reason: `surface ref "${rule.ref}" predicate="${rule.predicate}"`,
};
}
default:
return {
applicable: false,
reason: `unknown applicability rule kind`,
};
}
}
export interface FalsePassCheckResultV1 {
ok: true;
passed: true;
}
export interface FalsePassCheckFailureV1 {
ok: false;
ruleId: "CERT-PRODUCER-05" | "CERT-PRODUCER-06" | "CERT-PRODUCER-07";
message: string;
}
export type FalsePassCheckOutcomeV1 = FalsePassCheckResultV1 | FalsePassCheckFailureV1;
export function checkFalsePass(
result: ProducerResultV1,
requirements: readonly CertificationRequirementV1[],
): FalsePassCheckOutcomeV1 {
if (result.diagnostics.length === 0 && result.requirementIds.length === 0) {
return {
ok: false,
ruleId: "CERT-PRODUCER-05",
message: `producer "${result.producerId}" returned empty results — empty-result success is not permitted`,
};
}
const hasOnlyWarnings =
result.diagnostics.length > 0 &&
result.diagnostics.every((d) => d.severity === "warning" || d.severity === "info");
if (hasOnlyWarnings && result.requirementIds.length > 0) {
const mandatoryReqs = requirements.filter(
(r) => r.classification === "required" && result.requirementIds.includes(r.id),
);
if (mandatoryReqs.length > 0) {
return {
ok: false,
ruleId: "CERT-PRODUCER-06",
message: `producer "${result.producerId}" returned only warnings for mandatory requirements — summary-only warning success is not permitted`,
};
}
}
const hasErrorDiagnostics = result.diagnostics.some((d) => d.severity === "error");
if (result.requirementIds.length > 0 && !hasErrorDiagnostics) {
return { ok: true, passed: true };
}
return { ok: true, passed: true };
}
export interface RouteStateViewportPlanV1 {
routes: readonly string[];
states: readonly string[];
viewports: readonly ViewportSpecV1[];
combinations: readonly RouteStateViewportCombinationV1[];
}
export interface ViewportSpecV1 {
id: string;
width: number;
height: number;
colorScheme: "light" | "dark";
isMobile: boolean;
}
export interface RouteStateViewportCombinationV1 {
route: string;
state: string;
viewport: ViewportSpecV1;
id: string;
}
export function planRouteStateViewportMatrix(
routes: readonly string[],
states: readonly string[],
viewports: readonly ViewportSpecV1[],
): RouteStateViewportPlanV1 {
const combinations: RouteStateViewportCombinationV1[] = [];
for (const route of routes) {
for (const state of states) {
for (const viewport of viewports) {
combinations.push({
route,
state,
viewport,
id: `${route}::${state}::${viewport.id}`,
});
}
}
}
return { routes, states, viewports, combinations };
}
export interface DiagnosticNormalizationResultV1 {
ok: true;
diagnostics: Diagnostic[];
}
export interface DiagnosticNormalizationFailureV1 {
ok: false;
ruleId: "CERT-PRODUCER-08";
message: string;
}
export type DiagnosticNormalizationOutcomeV1 =
DiagnosticNormalizationResultV1 | DiagnosticNormalizationFailureV1;
export function normalizeDiagnostics(
raw: readonly Diagnostic[],
producerId: string,
): DiagnosticNormalizationOutcomeV1 {
const normalized: Diagnostic[] = [];
const seen = new Set();
for (let i = 0; i < raw.length; i++) {
const d = raw[i];
if (!d.ruleId || !d.message) {
return {
ok: false,
ruleId: "CERT-PRODUCER-08",
message: `producer "${producerId}" emitted diagnostic at index ${i} with missing ruleId or message`,
};
}
const key = `${d.ruleId}:${d.file ?? ""}:${d.line ?? 0}`;
if (seen.has(key)) continue;
seen.add(key);
normalized.push(d);
}
return { ok: true, diagnostics: normalized };
}
export interface ProducerExecutionRequestV1 {
producerId: string;
context: ProducerContextV1;
requirements: readonly CertificationRequirementV1[];
}
export interface ProducerExecutionSuccessV1 {
ok: true;
evidence: EvidenceEnvelopeV1;
result: ProducerResultV1;
}
export interface ProducerExecutionErrorV1 {
ok: false;
ruleId: "CERT-PRODUCER-09" | "CERT-PRODUCER-10" | "CERT-PRODUCER-11";
message: string;
}
export type ProducerExecutionResultOutcomeV1 =
ProducerExecutionSuccessV1 | ProducerExecutionErrorV1;
export async function executeProducer(
registry: ProducerRegistryV1,
request: ProducerExecutionRequestV1,
): Promise {
const registered = registry.get(request.producerId);
if (!registered) {
return {
ok: false,
ruleId: "CERT-PRODUCER-09",
message: `producer "${request.producerId}" is not registered`,
};
}
let result: ProducerResultV1;
try {
result = await registered.handler(request.context);
} catch (err) {
return {
ok: false,
ruleId: "CERT-PRODUCER-10",
message: `producer "${request.producerId}" threw: ${err instanceof Error ? err.message : String(err)}`,
};
}
const falsePassCheck = checkFalsePass(result, request.requirements);
if (!falsePassCheck.ok) {
return {
ok: false,
ruleId: "CERT-PRODUCER-11",
message: falsePassCheck.message,
};
}
const normResult = normalizeDiagnostics(result.diagnostics, request.producerId);
if (!normResult.ok) {
return {
ok: false,
ruleId: "CERT-PRODUCER-11",
message: normResult.message,
};
}
const evidence: EvidenceEnvelopeV1 = {
schema: "werkstatt/evidence-envelope@1",
evidenceId: `ev-${request.producerId}-${request.context.timestamp}`,
candidateId: request.context.candidate.candidateId,
producerId: request.producerId,
producerAttemptId: `att-${request.context.timestamp}`,
producedAt: request.context.timestamp,
result: {
schema: "werkstatt/evidence-result@1",
producerId: request.producerId,
producerAttemptId: `att-${request.context.timestamp}`,
diagnostics: normResult.diagnostics,
bindingHash: result.bindingHash,
applicability: {
appliesTo: result.requirementIds,
scope: request.context.environment,
},
},
payloads: [],
redaction: {
schema: "werkstatt/redaction-report@1",
policyVersion: "1.0.0",
detectedSecrets: 0,
detectedPii: 0,
resolved: true,
unresolvedSecrets: 0,
unresolvedPii: 0,
},
freshness: {
expiresAt: request.context.timestamp,
staleAfter: request.context.timestamp,
},
};
return { ok: true, evidence, result };
}