/*
health monitor — track certification subsystem health signals and report degradation.
- Do not certify — the monitor only reports health.
- 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 { Sha256Digest } from "@warpgogol/werkstatt-shared/fingerprint";
import { byteHash } from "@warpgogol/werkstatt-shared/fingerprint";
import type { CertificationHealthDecisionV1 } from "../contracts/decisions.ts";
import type { CertificationStatus } from "../contracts/identifiers.ts";
import type { DriftAction } from "../profile/schemas.ts";
export type CertificationHealth = "current" | "degraded" | "revoked";
export type HealthDriftAction = DriftAction;
export type DriftCause =
| "expired-evidence"
| "public-output-drift"
| "dns-header-drift"
| "candidate-specific-regression"
| "shared-infrastructure-outage"
| "monitor-crash"
| "late-evidence"
| "duplicate-schedule-delivery";
export interface HealthRequirementResultV1 {
requirementId: string;
status: CertificationStatus;
evidenceId: string | null;
evidenceExpired: boolean;
ttlExceeded: boolean;
observedAt: string;
}
export interface HealthEvaluationInputV1 {
candidateId: string;
assessedAt: string;
previousHealth: CertificationHealth | null;
requirementResults: HealthRequirementResultV1[];
sharedOutageDetected: boolean;
rollbackCandidateAvailable: boolean;
rollbackCandidateId: string | null;
profileDriftAction: HealthDriftAction;
scheduleWindowId: string;
priorOperationId: string | null;
}
export interface HealthEvaluationResultV1 {
ok: true;
health: CertificationHealth;
action: HealthDriftAction;
triggeringRequirementIds: string[];
selectedEvidenceIds: string[];
incidentId: string | null;
reason: string;
}
export interface HealthEvaluationFailureV1 {
ok: false;
ruleId: string;
message: string;
}
export type HealthEvaluationOutcomeV1 = HealthEvaluationResultV1 | HealthEvaluationFailureV1;
export function evaluateHealth(input: HealthEvaluationInputV1): HealthEvaluationOutcomeV1 {
if (input.requirementResults.length === 0) {
return {
ok: false,
ruleId: "CERT-HEALTH-01",
message: "no requirement results provided for health evaluation",
};
}
const failedReqs = input.requirementResults.filter((r) => r.status === "fail");
const staleReqs = input.requirementResults.filter(
(r) => r.status === "stale" || r.evidenceExpired || r.ttlExceeded,
);
const incompleteReqs = input.requirementResults.filter((r) => r.status === "incomplete");
const triggeringReqs = [...failedReqs, ...staleReqs, ...incompleteReqs];
const triggeringIds = triggeringReqs.map((r) => r.requirementId);
const selectedEvidenceIds = triggeringReqs
.filter((r) => r.evidenceId !== null)
.map((r) => r.evidenceId!) as string[];
if (failedReqs.length > 0) {
const action = input.sharedOutageDetected ? "incident-only" : input.profileDriftAction;
return {
ok: true,
health: "degraded",
action,
triggeringRequirementIds: triggeringIds,
selectedEvidenceIds,
incidentId: `inc-${input.candidateId}-${input.scheduleWindowId}`,
reason: `${failedReqs.length} requirement(s) failed — health degraded`,
};
}
if (staleReqs.length > 0) {
const action = input.sharedOutageDetected ? "incident-only" : "retry";
return {
ok: true,
health: "degraded",
action,
triggeringRequirementIds: triggeringIds,
selectedEvidenceIds,
incidentId:
action === "incident-only" ? `inc-${input.candidateId}-${input.scheduleWindowId}` : null,
reason: `${staleReqs.length} requirement(s) stale or expired — health degraded`,
};
}
if (incompleteReqs.length > 0) {
return {
ok: true,
health: "degraded",
action: "retry",
triggeringRequirementIds: triggeringIds,
selectedEvidenceIds,
incidentId: null,
reason: `${incompleteReqs.length} requirement(s) incomplete — health degraded, retry scheduled`,
};
}
return {
ok: true,
health: "current",
action: "retry",
triggeringRequirementIds: [],
selectedEvidenceIds: [],
incidentId: null,
reason: "all requirements pass — health current",
};
}
export function shouldRevoke(
currentHealth: CertificationHealth,
consecutiveDegradedWindows: number,
revokeThreshold: number,
): boolean {
if (currentHealth !== "degraded") return false;
return consecutiveDegradedWindows >= revokeThreshold;
}
export function classifyDriftCause(
requirementResult: HealthRequirementResultV1,
sharedOutageDetected: boolean,
): DriftCause {
if (sharedOutageDetected) return "shared-infrastructure-outage";
if (requirementResult.evidenceExpired || requirementResult.ttlExceeded) {
return "expired-evidence";
}
if (requirementResult.status === "fail") {
return "candidate-specific-regression";
}
if (requirementResult.status === "stale") {
return "public-output-drift";
}
if (requirementResult.status === "incomplete") {
return "late-evidence";
}
return "public-output-drift";
}
export interface ScheduleWindowV1 {
windowId: string;
startedAt: string;
completedAt: string | null;
operationId: string;
candidateId: string;
effective: boolean;
}
export interface ScheduleWindowResultV1 {
ok: true;
effective: boolean;
windowId: string;
reason: string;
}
export interface ScheduleWindowFailureV1 {
ok: false;
ruleId: string;
message: string;
}
export type ScheduleWindowOutcomeV1 = ScheduleWindowResultV1 | ScheduleWindowFailureV1;
export function evaluateScheduleWindow(
window: ScheduleWindowV1,
priorWindows: ScheduleWindowV1[],
): ScheduleWindowOutcomeV1 {
const duplicate = priorWindows.find((w) => w.windowId === window.windowId);
if (duplicate) {
return {
ok: true,
effective: false,
windowId: window.windowId,
reason: `duplicate schedule window "${window.windowId}" — already processed`,
};
}
const priorForCandidate = priorWindows.filter(
(w) => w.candidateId === window.candidateId && w.effective,
);
const lastEffective = priorForCandidate[priorForCandidate.length - 1];
if (lastEffective && lastEffective.completedAt && lastEffective.completedAt > window.startedAt) {
return {
ok: true,
effective: false,
windowId: window.windowId,
reason: `late delivery — window started at ${window.startedAt} but prior window completed at ${lastEffective.completedAt}`,
};
}
return {
ok: true,
effective: true,
windowId: window.windowId,
reason: "schedule window is effective",
};
}
export interface HealthDecisionBuilderInputV1 {
candidateId: string;
currentStatus: CertificationStatus;
lastDecisionId: string | null;
lastDecisionAt: string | null;
staleEvidenceCount: number;
incompleteCount: number;
assessedAt: string;
}
export function buildHealthDecision(
input: HealthDecisionBuilderInputV1,
): CertificationHealthDecisionV1 {
return {
schema: "werkstatt/certification-health-decision@1",
candidateId: input.candidateId,
currentStatus: input.currentStatus,
lastDecisionId: input.lastDecisionId,
lastDecisionAt: input.lastDecisionAt,
staleEvidenceCount: input.staleEvidenceCount,
incompleteCount: input.incompleteCount,
assessedAt: input.assessedAt,
};
}
export interface HealthProjectionV1 {
schema: "werkstatt/health-projection@1";
projectionHash: Sha256Digest;
candidateId: string;
currentHealth: CertificationHealth;
lastHealthDecisionId: string | null;
lastHealthDecisionAt: string | null;
activeIncidentIds: string[];
consecutiveDegradedWindows: number;
projectedAt: string;
}
export function buildHealthProjection(
candidateId: string,
currentHealth: CertificationHealth,
lastHealthDecisionId: string | null,
lastHealthDecisionAt: string | null,
activeIncidentIds: string[],
consecutiveDegradedWindows: number,
projectedAt: string,
): HealthProjectionV1 {
const projectionData = {
candidateId,
currentHealth,
lastHealthDecisionId,
lastHealthDecisionAt,
activeIncidentIds,
consecutiveDegradedWindows,
projectedAt,
};
const projectionHash = byteHash(JSON.stringify(projectionData)) as Sha256Digest;
return {
schema: "werkstatt/health-projection@1",
projectionHash,
...projectionData,
};
}
export interface MonitorRecoveryStateV1 {
operationId: string;
candidateId: string;
scheduleWindowId: string;
requirementsStarted: boolean;
requirementsCompleted: boolean;
healthDecisionAppended: boolean;
incidentCreated: boolean;
projectionUpdated: boolean;
}
export interface MonitorRecoveryResultV1 {
ok: true;
resumeFrom: "requirements" | "health-decision" | "incident" | "projection" | "complete";
reason: string;
}
export interface MonitorRecoveryFailureV1 {
ok: false;
ruleId: string;
message: string;
}
export type MonitorRecoveryOutcomeV1 = MonitorRecoveryResultV1 | MonitorRecoveryFailureV1;
export function evaluateMonitorRecovery(state: MonitorRecoveryStateV1): MonitorRecoveryOutcomeV1 {
if (state.projectionUpdated) {
return {
ok: true,
resumeFrom: "complete",
reason: "monitor cycle completed — projection updated",
};
}
if (state.healthDecisionAppended && !state.incidentCreated) {
return {
ok: true,
resumeFrom: "incident",
reason: "health decision appended but incident not created — create incident",
};
}
if (state.healthDecisionAppended && state.incidentCreated) {
return {
ok: true,
resumeFrom: "projection",
reason: "health decision and incident complete — update projection",
};
}
if (state.requirementsCompleted && !state.healthDecisionAppended) {
return {
ok: true,
resumeFrom: "health-decision",
reason: "requirements completed but health decision not appended — append decision",
};
}
if (state.requirementsStarted && !state.requirementsCompleted) {
return {
ok: true,
resumeFrom: "requirements",
reason: "requirements started but not completed — re-run requirements",
};
}
if (!state.requirementsStarted) {
return {
ok: true,
resumeFrom: "requirements",
reason: "requirements not started — start from beginning",
};
}
return {
ok: false,
ruleId: "CERT-HEALTH-02",
message: `monitor recovery state is ambiguous for operation "${state.operationId}"`,
};
}
export function isHealthTransitionValid(
from: CertificationHealth | null,
to: CertificationHealth,
): boolean {
if (from === null) return true;
if (from === to) return true;
if (from === "current" && to === "degraded") return true;
if (from === "current" && to === "revoked") return true;
if (from === "degraded" && to === "current") return true;
if (from === "degraded" && to === "revoked") return true;
if (from === "revoked" && to === "current") return true;
if (from === "revoked" && to === "degraded") return true;
return false;
}