/*
deploy.status — report the current platform deployment status for the workspace (RFC-0566).
- Do not mutate symlinks or artifacts.
- RFC-0566: initial deploy.status handler.
- RFC-1097: step 6 — compass.migrate codemod run
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.
- 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.
- RFC-1249: wire werkstatt.commands.validate into packages.check + retire CMD-OUTPUT debt
*/
import type {
KernelCommandInput,
KernelCommandResult,
KernelRuntimeContext,
} from "@warpgogol/werkstatt-engine/kernel";
import type { DeployStatus } from "./types.ts";
import {
currentSymlinkPath,
manifestPath,
previousSymlinkPath,
readSymlinkBasename,
} from "./deploy-utils.ts";
export async function runDeployStatus(
_input: KernelCommandInput,
context: KernelRuntimeContext,
): Promise> {
const { workspaceRoot, logger } = context;
const currentHash = await readSymlinkBasename(currentSymlinkPath(workspaceRoot), context.io);
const previousHash = await readSymlinkBasename(previousSymlinkPath(workspaceRoot), context.io);
let currentGitSha: string | null = null;
let deployedAt: string | null = null;
if (currentHash) {
const mp = manifestPath(workspaceRoot, currentHash);
if (await context.io.exists(mp)) {
try {
const manifest = JSON.parse(await context.io.readFile(mp));
currentGitSha = manifest.gitSha ?? null;
deployedAt = manifest.builtAt ?? null;
} catch {
// corrupt manifest — leave null
}
}
}
const status: DeployStatus = {
currentHash,
previousHash,
currentGitSha,
deployedAt,
workshops: [],
};
logger.info(
`[deploy.status] current: ${currentHash ?? "none"}, previous: ${previousHash ?? "none"}`,
);
return {
data: status,
exitCode: 0,
summary: `[deploy.status] current: ${currentHash?.slice(0, 16) ?? "none"}..., previous: ${previousHash?.slice(0, 16) ?? "none"}...`,
nextSteps: [
{
action: `Check leitstand status: pnpm exec werkstatt run leitstand.status --site `,
kind: "optional",
},
],
};
}