refactor(javascript): own runtime reconciliation failures

Return expected source and semantic failures from the runtime input owner as tagged Results. Bind source schema validation to concrete schemas, preserve nested active-capture paths, and let unexpected interpretation and derivation failures reach the adapter boundary.

Remove broad protocol-error wrappers, duplicate active identity validation, and redundant JSON result parsing. Migrate parsed-fact consumers and retain CLI/MCP contracts. Relevant source and public-boundary tests pass; six injected implementation-fault controls fail on the prior revision. Live Electron behavior was not exercised.
This commit is contained in:
morluto
2026-10-23 09:55:02 +08:00
parent ed069bb9d4
commit f4b2ba1313
13 changed files with 358 additions and 171 deletions
@@ -7,7 +7,6 @@ import type {
JavaScriptRuntimeReconciliationResult,
ReconcileJavaScriptRuntimeInput,
} from "../../domain/javascript/javascriptRuntimeReconciliationSchemas.js";
import { jsonValueSchema } from "../../domain/jsonValue.js";
import { JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER } from "../InvestigationProviders.js";
/** Create derived Evidence for one exact set of static/runtime inputs. */
@@ -19,7 +18,7 @@ export const createJavaScriptRuntimeReconciliationEvidence = (
predicateType: "rea.javascript-runtime-reconciliation",
operation: "reconcile_javascript_runtime",
parameters: parameters(input),
result: jsonValueSchema.parse(result),
result,
rawResult: null,
confidence: "inferred",
authority: "analyst-inference",
@@ -1,14 +1,12 @@
import { resolve } from "node:path";
import { z } from "zod";
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
import type { AnalysisError } from "../../domain/analysisErrorBase.js";
import type { Evidence } from "../../domain/evidence.js";
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
import {
parseRuntimeReconciliationInput,
readRuntimeReconciliationInput,
reconcileJavaScriptRuntime,
type ParsedRuntimeReconciliationInput,
} from "../../domain/javascript/javascriptRuntimeReconciliation.js";
import { reconcileJavaScriptRuntimeInputSchema } from "../../domain/javascript/javascriptRuntimeReconciliationSchemas.js";
import { err, ok, type Result } from "../../domain/result.js";
@@ -32,37 +30,14 @@ export const reconcileJavaScriptRuntimeEvidence = (
export const reconcileJavaScriptRuntimeEvidenceValidated = (
parsedInput: z.output<typeof reconcileJavaScriptRuntimeInputSchema>,
): Result<Evidence, AnalysisError> => {
let parsed: ParsedRuntimeReconciliationInput;
try {
parsed = parseRuntimeReconciliationInput(
normalizeRuntimeMappingRoots(parsedInput),
);
} catch (cause: unknown) {
if (cause instanceof z.ZodError)
return err(
analysisInputErrorFromIssues(OPERATION, cause.issues, parsedInput),
);
return err(
new AnalysisProtocolError(
"JavaScript runtime reconciliation input parsing failed",
{ cause },
),
);
}
try {
const result = reconcileJavaScriptRuntime(parsed);
return ok(
createJavaScriptRuntimeReconciliationEvidence(parsed.input, result),
);
} catch (cause: unknown) {
return err(
new AnalysisProtocolError(
"JavaScript runtime reconciliation produced an invalid result",
{ cause },
),
);
}
const parsed = readRuntimeReconciliationInput(
normalizeRuntimeMappingRoots(parsedInput),
);
if (!parsed.ok) return parsed;
const result = reconcileJavaScriptRuntime(parsed.value);
return ok(
createJavaScriptRuntimeReconciliationEvidence(parsed.value.input, result),
);
};
const normalizeRuntimeMappingRoots = (