fix: surface preprocessing state error codes to the operator result
This commit is contained in:
@@ -20,11 +20,15 @@ export interface WorkspaceMaintenanceIo {
|
||||
|
||||
type Command = "inspect" | "preprocess-dwh" | "schema-suggest-fks" | "schema-check" | "index-schema" | "preprocess-evidence" | "preprocess-run";
|
||||
|
||||
function failureResult(operation: string, workspaceId = ""): WorkspaceOperationResult {
|
||||
function failureResult(
|
||||
operation: string,
|
||||
workspaceId = "",
|
||||
code: WorkspaceOperationResult["code"] = "workspace_not_activatable",
|
||||
): WorkspaceOperationResult {
|
||||
return {
|
||||
schemaVersion: 1,
|
||||
status: "failed",
|
||||
code: "workspace_not_activatable",
|
||||
code,
|
||||
workspaceId,
|
||||
workspaceRevision: "",
|
||||
descriptorBlob: "",
|
||||
@@ -33,6 +37,11 @@ function failureResult(operation: string, workspaceId = ""): WorkspaceOperationR
|
||||
};
|
||||
}
|
||||
|
||||
const STATE_ERROR_CODES: Record<string, WorkspaceOperationResult["code"]> = {
|
||||
preprocessing_resume_mismatch: "preprocessing_resume_mismatch",
|
||||
preprocessing_conflict: "preprocessing_conflict",
|
||||
};
|
||||
|
||||
function boundedJson(result: WorkspaceOperationResult): string {
|
||||
const encoded = JSON.stringify(result);
|
||||
if (Buffer.byteLength(encoded, "utf8") > 1024 * 1024) {
|
||||
@@ -131,9 +140,15 @@ export async function runWorkspaceMaintenanceCli(
|
||||
io.writeStdout(boundedJson(result));
|
||||
return exitCodeFor(result);
|
||||
} catch (error) {
|
||||
const failureCode = error instanceof Error
|
||||
&& "code" in error
|
||||
&& typeof (error as { code?: unknown }).code === "string"
|
||||
&& (error as { code: string }).code in STATE_ERROR_CODES
|
||||
? STATE_ERROR_CODES[(error as { code: string }).code]
|
||||
: "workspace_not_activatable";
|
||||
const result = failureResult(command, (() => {
|
||||
try { return JSON.parse(io.stdin).workspaceId ?? ""; } catch { return ""; }
|
||||
})());
|
||||
})(), failureCode);
|
||||
if (process.env.P2_CHILD_DEBUG === "1") {
|
||||
const detail = String((error as Error).message ?? "").replace(/[\r\n]+/g, " ").slice(0, 2048);
|
||||
result.warnings = detail.length > 0 ? [detail] : undefined;
|
||||
|
||||
Reference in New Issue
Block a user