mirror of
https://github.com/morluto/rea.git
synced 2026-11-08 15:56:35 +00:00
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:
1 parent
ed069bb9d4
commit
f4b2ba1313
13 files changed
+358
-171
No files matched your search
+14
-6
@@ -4,7 +4,7 @@ import { join } from "node:path";
|
||||
import { expect, it } from "vitest";
|
||||
|
||||
import {
|
||||
parseRuntimeReconciliationInput,
|
||||
readRuntimeReconciliationInput,
|
||||
reconcileJavaScriptRuntime,
|
||||
} from "../../../../src/domain/javascript/javascriptRuntimeReconciliation.js";
|
||||
import { reconcileRuntimeEntities } from "../../../../src/domain/javascript/javascriptRuntimeReconciliationMatching.js";
|
||||
@@ -22,6 +22,14 @@ import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js
|
||||
|
||||
const CAPTURED = "export const observed = 'different';\n";
|
||||
|
||||
const readInput = (
|
||||
input: Parameters<typeof readRuntimeReconciliationInput>[0],
|
||||
) => {
|
||||
const result = readRuntimeReconciliationInput(input);
|
||||
if (!result.ok) throw result.error;
|
||||
return result.value;
|
||||
};
|
||||
|
||||
const collisionInput = async (
|
||||
alternatives: number,
|
||||
explicitMapping: boolean,
|
||||
@@ -33,7 +41,7 @@ const collisionInput = async (
|
||||
: root;
|
||||
const extra = await createTestTempDirectory("rea-runtime-content-extra-");
|
||||
await writeFile(join(extra, "app.js"), CAPTURED);
|
||||
return parseRuntimeReconciliationInput(
|
||||
return readInput(
|
||||
reconcileJavaScriptRuntimeInputSchema.parse({
|
||||
static_layers: [
|
||||
{
|
||||
@@ -106,7 +114,7 @@ it("restricts content-and-location ambiguity to mapped candidates", async () =>
|
||||
const live = await createTestTempDirectory("rea-runtime-content-mapped-");
|
||||
const analysis = await analyzeFixture(application);
|
||||
const mapping = [{ kind: "file-root", root: live, artifact_prefix: "" }];
|
||||
const parsed = parseRuntimeReconciliationInput(
|
||||
const parsed = readInput(
|
||||
reconcileJavaScriptRuntimeInputSchema.parse({
|
||||
static_layers: [
|
||||
{ role: "application", analysis, runtime_mappings: mapping },
|
||||
@@ -148,7 +156,7 @@ it.each([false, true])(
|
||||
"rea-runtime-content-unlocated-",
|
||||
);
|
||||
const result = reconcileJavaScriptRuntime(
|
||||
parseRuntimeReconciliationInput(
|
||||
readInput(
|
||||
reconcileJavaScriptRuntimeInputSchema.parse({
|
||||
static_layers: [
|
||||
{
|
||||
@@ -245,7 +253,7 @@ const reconcileCapturedScript = async (input: {
|
||||
readonly includeWorker?: boolean;
|
||||
}) => {
|
||||
const result = reconcileJavaScriptRuntime(
|
||||
parseRuntimeReconciliationInput(
|
||||
readInput(
|
||||
reconcileJavaScriptRuntimeInputSchema.parse({
|
||||
static_layers: await Promise.all(
|
||||
input.layers.map(async ({ root, mapping }, index) => ({
|
||||
@@ -385,7 +393,7 @@ it.each([
|
||||
"applies URL-prefix mapping presence to captured script %s",
|
||||
async (url, status) => {
|
||||
const root = await applicationFixture();
|
||||
const parsed = parseRuntimeReconciliationInput(
|
||||
const parsed = readInput(
|
||||
reconcileJavaScriptRuntimeInputSchema.parse({
|
||||
static_layers: [
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user