/* RFC-1028: validation.state.inspect command handler — reads the .validation-state.json file and the persistent SQLite cache to report per-validator status for a mission. Do not execute validators — this command is read-only. Do not modify the cache or validation state. RFC-1028: initial implementation — readValidationState + cache list() for inspection. RFC-1249: wire werkstatt.commands.validate into packages.check + retire CMD-OUTPUT debt */ import type { KernelCommandInput, KernelCommandResult, KernelRuntimeContext, } from "@warpgogol/werkstatt-shared/kernel"; import { readValidationState, type ValidatorState } from "./validation-state.ts"; import { createCacheLayer, type CacheEntryInfo } from "../kernel/cache/cache-layer.ts"; import { COMMAND_RESULT_CACHE_NAMESPACE } from "../kernel/cache/command-result-cache.ts"; export interface ValidationStateInspectData { missionId: string; lastValidatedAt: string | null; lastValidationStatus: "pass" | "fail" | "incomplete" | null; validatorStates: ValidatorState[]; cacheEntries: CacheEntryInfo[]; } export async function runValidationStateInspect( input: KernelCommandInput, context: KernelRuntimeContext, ): Promise> { const missionId = input.flags.mission as string | undefined; if (!missionId) { return { data: undefined, exitCode: 1, summary: "[validation.state.inspect] missing required --mission flag", nextSteps: [{ action: "Provide --mission flag", kind: "required" }], }; } const state = await readValidationState(context.workspaceRoot, missionId); const cache = await createCacheLayer(context.workspaceRoot); try { const cacheEntries = cache.list ? await cache.list({ namespace: COMMAND_RESULT_CACHE_NAMESPACE }) : []; const validatorStates = state?.validatorStates ?? []; const data: ValidationStateInspectData = { missionId, lastValidatedAt: state?.lastValidatedAt ?? null, lastValidationStatus: state?.lastValidationStatus ?? null, validatorStates, cacheEntries, }; return { data, exitCode: 0, summary: "[validation.state.inspect] Done", }; } finally { await cache.close(); } }