diff --git a/docs/adr/0001-provider-selection-and-analysis-profiles.md b/docs/adr/0001-provider-selection-and-analysis-profiles.md index c760d9ca04..13b1d137c7 100644 --- a/docs/adr/0001-provider-selection-and-analysis-profiles.md +++ b/docs/adr/0001-provider-selection-and-analysis-profiles.md @@ -333,14 +333,14 @@ entries, so snapshots must be recaptured before they can be used as a cache. An embedded Evidence bundle can still be imported separately through the Evidence import flow; it is never promoted into an analysis cache. -### 8. Add profile commitments to new deep Evidence without rejecting legacy Evidence v2 +### 8. Add profile commitments to new deep Evidence while preserving legacy records -Evidence remains schema version 2. A backward-compatible optional -`analysis_profile` field uses the canonical envelope above. Every newly created -deep-analysis observation must include it, and its provider ID and version must -match the record's provider. The field participates in the Evidence semantic ID. +The optional `analysis_profile` field uses the canonical envelope above. Every +newly created deep-analysis observation must include it, and its provider ID +and version must match the record's provider. The field participates in the +Evidence semantic ID. -Existing Evidence v2 records without `analysis_profile` remain valid and keep +Existing Evidence records without `analysis_profile` remain valid and keep their existing IDs. Absence on a legacy deep record means the analysis profile is unknown; REA does not infer or enrich it during import. Such evidence can be displayed and cited but cannot establish profile compatibility, seed snapshot @@ -457,8 +457,8 @@ snapshot's provider. | `BinaryTarget.loaderArgs` | Removed; Hopper derives them inside its adapter and commits normalized semantics in the profile | | Legacy `.hop` input | Classified generically as an analysis database and accepted only by Hopper | | Snapshot v1 | Not accepted as the current snapshot format; recapture before cache replay | -| Existing Evidence v2 without a profile | Accepted unchanged; profile compatibility is unknown | -| New deep-analysis Evidence v2 | Must include `analysis_profile`; its semantic ID commits the field | +| Existing Evidence without a profile | Accepted unchanged; profile compatibility is unknown | +| New deep-analysis Evidence | Must include `analysis_profile`; its semantic ID commits the field | | Existing status fields | Retained for 1.x with additive binding and candidate fields | | Provider failure after selection | Returned from the selected provider; no transparent retry through another engine | diff --git a/docs/adr/0002-controlled-replay-authority-and-sandbox.md b/docs/adr/0002-controlled-replay-authority-and-sandbox.md index 820208c0da..e8e91b61e7 100644 --- a/docs/adr/0002-controlled-replay-authority-and-sandbox.md +++ b/docs/adr/0002-controlled-replay-authority-and-sandbox.md @@ -332,7 +332,7 @@ partial successful return. ### 7. Preserve exact provenance and the right Evidence authority -A run that reaches worker admission produces Evidence v2 with: +A run that reaches worker admission produces Evidence with: - provider `rea-javascript-replay` and a concrete implementation version; - operation `run_controlled_replay`; diff --git a/docs/process-capture.md b/docs/process-capture.md index 23930983de..eb3502b68c 100644 --- a/docs/process-capture.md +++ b/docs/process-capture.md @@ -117,7 +117,7 @@ inherited under operator policy. ## Reactive process scenarios -Set `reactive` to a Process Reactive Scenario v1 declaration when interaction +Set `reactive` to a process reactive scenario declaration when interaction must follow observed output instead of guessed delays. The graph declares an initial state, absolute scenario and state deadlines, explicitly prioritized transitions, bounded uses and visits, trigger predicates, ordered actions, and diff --git a/src/application/EvidenceLedger.ts b/src/application/EvidenceLedger.ts index aa5555c2be..e8c570ff5a 100644 --- a/src/application/EvidenceLedger.ts +++ b/src/application/EvidenceLedger.ts @@ -165,7 +165,7 @@ export class EvidenceLedger { return this.#appendUnknown(unknown, parsedMutation); } - /** Atomically record derived Evidence and an approved residual unknown. */ + /** Atomically record derived Evidence and a linked residual unknown. */ recordWithUnknown( evidenceInput: Evidence, input: RecordUnknownInput, diff --git a/src/application/ProcessReactiveCoordinator.test.ts b/src/application/ProcessReactiveCoordinator.test.ts index d033f992fc..ed5041abb3 100644 --- a/src/application/ProcessReactiveCoordinator.test.ts +++ b/src/application/ProcessReactiveCoordinator.test.ts @@ -43,7 +43,6 @@ const timerHost = () => { }; const twoStateScenario = (): ProcessReactiveScenario => processReactiveScenarioSchema.parse({ - version: 1, initial_state: "starting", deadline_ms: 30000, states: [ @@ -193,7 +192,6 @@ describe("process reactive coordinator ordering", () => { }); it("executes input, resize, root signal, and checkpoint in journal order", async () => { const scenario = processReactiveScenarioSchema.parse({ - version: 1, initial_state: "ready", deadline_ms: 30000, states: [ diff --git a/src/application/ProcessReactiveCoordinatorFailures.test.ts b/src/application/ProcessReactiveCoordinatorFailures.test.ts index 92a0f7c45a..e650cf762e 100644 --- a/src/application/ProcessReactiveCoordinatorFailures.test.ts +++ b/src/application/ProcessReactiveCoordinatorFailures.test.ts @@ -38,7 +38,6 @@ const timerHost = () => { }; const twoStateScenario = (): ProcessReactiveScenario => processReactiveScenarioSchema.parse({ - version: 1, initial_state: "starting", deadline_ms: 30000, states: [ diff --git a/src/application/ProcessReactiveCoordinatorFailuresPart2.test.ts b/src/application/ProcessReactiveCoordinatorFailuresPart2.test.ts index 1d8769abac..4ca41eb45a 100644 --- a/src/application/ProcessReactiveCoordinatorFailuresPart2.test.ts +++ b/src/application/ProcessReactiveCoordinatorFailuresPart2.test.ts @@ -36,7 +36,6 @@ const timerHost = () => { }; const twoStateScenario = (): ProcessReactiveScenario => processReactiveScenarioSchema.parse({ - version: 1, initial_state: "starting", deadline_ms: 30000, states: [ diff --git a/src/domain/callPathSchemas.ts b/src/domain/callPathSchemas.ts index 45f7f3208e..36c0e0d718 100644 --- a/src/domain/callPathSchemas.ts +++ b/src/domain/callPathSchemas.ts @@ -18,7 +18,6 @@ export const callPathInputSchema = z.object({ functions: z.array(evidenceSchema).min(1), start: z.object({ address: inputAddressSchema }).strict(), goal: z.object({ address: inputAddressSchema }).strict(), - unknown_registry_approved: z.literal(true).optional(), }); const citedNodeSchema = z.object({ diff --git a/src/domain/changedBehavior.ts b/src/domain/changedBehavior.ts index 79a9e9eb19..edb15fa14b 100644 --- a/src/domain/changedBehavior.ts +++ b/src/domain/changedBehavior.ts @@ -15,7 +15,6 @@ const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); /** Strict bounded input for aggregating existing comparison Evidence. */ export const changedBehaviorInputSchema = z.object({ comparisons: z.array(evidenceSchema).max(100).default([]), - unknown_registry_approved: z.literal(true).optional(), }); const findingSchema = z.object({ diff --git a/src/domain/evidenceCompletionLedger.test.ts b/src/domain/evidenceCompletionLedger.test.ts index 8eb2532a35..6ad50c5cf2 100644 --- a/src/domain/evidenceCompletionLedger.test.ts +++ b/src/domain/evidenceCompletionLedger.test.ts @@ -14,7 +14,7 @@ const record = ( evidenceIds: readonly string[] = [evidenceId("1")], ) => ({ claim_id: claimId, status, evidence_ids: evidenceIds }); -describe("Evidence v2 completion ledger", () => { +describe("Evidence completion ledger", () => { it("marks only an all-pass ledger complete", () => { const ledger = createEvidenceCompletionLedger([ record("scenario.launch", "pass"), diff --git a/src/domain/evidenceCompletionLedger.ts b/src/domain/evidenceCompletionLedger.ts index 6afc008479..406296d45d 100644 --- a/src/domain/evidenceCompletionLedger.ts +++ b/src/domain/evidenceCompletionLedger.ts @@ -130,7 +130,7 @@ const ledgerIssues = ( }); }; -/** Strict path-free Evidence v2 completion ledger. */ +/** Strict path-free Evidence completion ledger. */ export const evidenceCompletionLedgerSchema = completionLedgerObjectSchema.superRefine(ledgerIssues); diff --git a/src/domain/functionComparisonSchemas.ts b/src/domain/functionComparisonSchemas.ts index 840b63e9c2..8280877171 100644 --- a/src/domain/functionComparisonSchemas.ts +++ b/src/domain/functionComparisonSchemas.ts @@ -23,7 +23,6 @@ const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u); export const functionComparisonInputSchema = z.strictObject({ left_evidence_id: evidenceIdSchema, right_evidence_id: evidenceIdSchema, - unknown_registry_approved: z.literal(true).optional(), }); const textDeltaSchema = z.object({ diff --git a/src/domain/processReactiveRuntime.test.ts b/src/domain/processReactiveRuntime.test.ts index f512fc53d2..c14981a82a 100644 --- a/src/domain/processReactiveRuntime.test.ts +++ b/src/domain/processReactiveRuntime.test.ts @@ -28,7 +28,6 @@ const scenarioWith = ( transitions: readonly unknown[], ): ProcessReactiveScenario => processReactiveScenarioSchema.parse({ - version: 1, initial_state: "starting", deadline_ms: 30000, states: [ diff --git a/src/domain/processReactiveRuntimePart2.test.ts b/src/domain/processReactiveRuntimePart2.test.ts index 6599eb7a69..e689b21c02 100644 --- a/src/domain/processReactiveRuntimePart2.test.ts +++ b/src/domain/processReactiveRuntimePart2.test.ts @@ -28,7 +28,6 @@ const scenarioWith = ( transitions: readonly unknown[], ): ProcessReactiveScenario => processReactiveScenarioSchema.parse({ - version: 1, initial_state: "starting", deadline_ms: 30000, states: [ diff --git a/src/domain/processReactiveRuntimePart3.test.ts b/src/domain/processReactiveRuntimePart3.test.ts index 68310e05d0..f8b6038946 100644 --- a/src/domain/processReactiveRuntimePart3.test.ts +++ b/src/domain/processReactiveRuntimePart3.test.ts @@ -32,7 +32,6 @@ const scenarioWith = ( transitions: readonly unknown[], ): ProcessReactiveScenario => processReactiveScenarioSchema.parse({ - version: 1, initial_state: "starting", deadline_ms: 30_000, states: [ diff --git a/src/domain/processReactiveRuntimePredicates.test.ts b/src/domain/processReactiveRuntimePredicates.test.ts index e8b145e325..257d42b426 100644 --- a/src/domain/processReactiveRuntimePredicates.test.ts +++ b/src/domain/processReactiveRuntimePredicates.test.ts @@ -28,7 +28,6 @@ const scenarioWith = ( transitions: readonly unknown[], ): ProcessReactiveScenario => processReactiveScenarioSchema.parse({ - version: 1, initial_state: "starting", deadline_ms: 30000, states: [ @@ -225,7 +224,6 @@ describe("process reactive runtime predicates", () => { consume: true, }; const scenario = processReactiveScenarioSchema.parse({ - version: 1, initial_state: "one", deadline_ms: 30000, states: [ diff --git a/src/domain/processReactiveRuntimePredicatesPart2.test.ts b/src/domain/processReactiveRuntimePredicatesPart2.test.ts index 45df2f6ddf..84c58b6223 100644 --- a/src/domain/processReactiveRuntimePredicatesPart2.test.ts +++ b/src/domain/processReactiveRuntimePredicatesPart2.test.ts @@ -28,7 +28,6 @@ const scenarioWith = ( transitions: readonly unknown[], ): ProcessReactiveScenario => processReactiveScenarioSchema.parse({ - version: 1, initial_state: "starting", deadline_ms: 30000, states: [ @@ -147,7 +146,6 @@ const offer = ( describe("process reactive runtime predicates", () => { it("rejects an exhausted state visit before proposing effects", () => { const scenario = processReactiveScenarioSchema.parse({ - version: 1, initial_state: "loop", deadline_ms: 30000, states: [ diff --git a/src/domain/processReactiveScenario.test.ts b/src/domain/processReactiveScenario.test.ts index 8bf9213128..9a4e20772d 100644 --- a/src/domain/processReactiveScenario.test.ts +++ b/src/domain/processReactiveScenario.test.ts @@ -27,7 +27,6 @@ const finishTransition = () => ({ }); const baseScenario = () => ({ - version: 1 as const, initial_state: "starting", deadline_ms: 30_000, states: [ @@ -41,9 +40,8 @@ const baseScenario = () => ({ }); describe("process reactive scenario schema", () => { - it("parses the bounded v1 terminal scenario", () => { + it("parses a bounded terminal scenario", () => { expect(processReactiveScenarioSchema.parse(baseScenario())).toMatchObject({ - version: 1, initial_state: "starting", }); expect(PROCESS_REACTIVE_LIMITS.triggerDepth).toBe(6); @@ -176,7 +174,6 @@ describe("process reactive scenario graph validation", () => { it("accepts only explicitly bounded cycles", () => { const cycle = { - version: 1 as const, initial_state: "one", deadline_ms: 10_000, states: [ @@ -261,7 +258,6 @@ describe("process reactive scenario checkpoint validation", () => { since: { kind: "checkpoint" as const, name }, }); const input = { - version: 1 as const, initial_state: "one", deadline_ms: 10_000, states: [ @@ -331,7 +327,7 @@ describe("process reactive scenario nesting validation", () => { expect(result.success).toBe(false); if (!result.success) expect(result.error.issues.map(({ message }) => message)).toContain( - "trigger nesting exceeds the v1 limit", + "trigger nesting exceeds the configured limit", ); let hostile: unknown = terminalTrigger(); diff --git a/src/domain/processReactiveScenario.ts b/src/domain/processReactiveScenario.ts index e641622c7c..7fd07a7935 100644 --- a/src/domain/processReactiveScenario.ts +++ b/src/domain/processReactiveScenario.ts @@ -5,7 +5,7 @@ import { processObservationSourceSchema } from "./processObservation.js"; import { definitelyAvailableCheckpoints } from "./processReactiveCheckpointDataflow.js"; import { preflightProcessReactiveScenario } from "./processReactiveScenarioPreflight.js"; -/** Fixed public bounds for Process Reactive Scenario v1. */ +/** Fixed public bounds for process reactive scenarios. */ export const PROCESS_REACTIVE_LIMITS = { states: 32, transitions: 128, @@ -232,13 +232,12 @@ const stateSchema = z.strictObject({ }); const scenarioShapeSchema = z.strictObject({ - version: z.literal(1), initial_state: identifierSchema, deadline_ms: positiveRuntime, states: z.array(stateSchema).min(1).max(PROCESS_REACTIVE_LIMITS.states), }); -/** Parsed Process Reactive Scenario v1 declaration. */ +/** Parsed process reactive scenario declaration. */ export type ProcessReactiveScenario = z.infer; type TriggerMeasurements = { @@ -345,7 +344,7 @@ const validateTransition = (input: { if (measured.depth > PROCESS_REACTIVE_LIMITS.triggerDepth) context.addIssue({ code: "custom", - message: "trigger nesting exceeds the v1 limit", + message: "trigger nesting exceeds the configured limit", path: [...path, "when"], }); if (validation.transitionIds.has(transition.id)) diff --git a/src/domain/processReactiveScenarioPreflight.ts b/src/domain/processReactiveScenarioPreflight.ts index db867fb754..0c3526ad5d 100644 --- a/src/domain/processReactiveScenarioPreflight.ts +++ b/src/domain/processReactiveScenarioPreflight.ts @@ -39,16 +39,25 @@ const inspectJsonValue = ( if (current === undefined) break; nodes += 1; if (nodes > limits.jsonNodes) - return reject(context, "event exact JSON exceeds the v1 node limit"); + return reject( + context, + "event exact JSON exceeds the configured node limit", + ); if (current.depth > limits.jsonDepth) - return reject(context, "event exact JSON exceeds the v1 depth limit"); + return reject( + context, + "event exact JSON exceeds the configured depth limit", + ); if (typeof current.value !== "object" || current.value === null) continue; if (seen.has(current.value)) return reject(context, "event exact JSON must not contain cycles"); seen.add(current.value); if (Array.isArray(current.value)) { if (current.value.length + nodes > limits.jsonNodes) - return reject(context, "event exact JSON exceeds the v1 node limit"); + return reject( + context, + "event exact JSON exceeds the configured node limit", + ); for (const child of current.value) pending.push({ value: child, depth: current.depth + 1 }); continue; @@ -57,7 +66,10 @@ const inspectJsonValue = ( for (const key in current.value) { if (!Object.hasOwn(current.value, key)) continue; if (nodes + pending.length >= limits.jsonNodes) - return reject(context, "event exact JSON exceeds the v1 node limit"); + return reject( + context, + "event exact JSON exceeds the configured node limit", + ); pending.push({ value: current.value[key], depth: current.depth + 1, @@ -125,9 +137,9 @@ const inspectTriggerTree = ( if (current === undefined) break; nodes += 1; if (nodes > maximumNodes) - return reject(context, "trigger tree exceeds the v1 limit"); + return reject(context, "trigger tree exceeds the configured limit"); if (current.depth > limits.triggerDepth) - return reject(context, "trigger nesting exceeds the v1 limit"); + return reject(context, "trigger nesting exceeds the configured limit"); if ( isUnknownRecord(current.value) && current.value["kind"] === "event" && diff --git a/src/domain/processScenario.ts b/src/domain/processScenario.ts index b929fdd7a9..386531b946 100644 --- a/src/domain/processScenario.ts +++ b/src/domain/processScenario.ts @@ -87,7 +87,6 @@ export const processScenarioCommitment = ( ]), ), reactive: reactiveScenarioCommitment(scenario.reactive), - unknown_registry_approved: scenario.unknown_registry_approved === true, executable_sha256: executableSha256 ?? null, }); @@ -119,10 +118,6 @@ export const processComparisonContract = ( */ export const processScenarioSchema = z .object({ - unknown_registry_approved: z - .literal(true) - .optional() - .describe("Explicit approval to record capture residuals durably"), executable: z.string().startsWith("/"), arguments: z.array(z.string()).max(256).default([]), working_directory: z.string().startsWith("/"), diff --git a/src/domain/processTraceAdapters.test.ts b/src/domain/processTraceAdapters.test.ts index c807e86997..848ab29209 100644 --- a/src/domain/processTraceAdapters.test.ts +++ b/src/domain/processTraceAdapters.test.ts @@ -32,7 +32,6 @@ const capture = { } as const; const traceSpecification: ProcessTraceSpecification = { - version: 1, events: [ { id: "before", @@ -121,7 +120,6 @@ describe("declared trace comparison adapters", () => { }); }; const specification: ProcessTraceSpecification = { - version: 1, events: [ { id: "status", @@ -210,7 +208,6 @@ describe("declared trace comparison coverage", () => { ], }); const specification: ProcessTraceSpecification = { - version: 1, events: [ { id: "status", @@ -285,7 +282,6 @@ describe("declared trace comparison nonconformance", () => { ], }); const specification: ProcessTraceSpecification = { - version: 1, events: [ { id: "expected", diff --git a/src/domain/processTraceComparison.test.ts b/src/domain/processTraceComparison.test.ts index e41d3d2e61..662ef34575 100644 --- a/src/domain/processTraceComparison.test.ts +++ b/src/domain/processTraceComparison.test.ts @@ -108,7 +108,6 @@ const values = ( })), }); const partialSpecification = (): ProcessTraceSpecification => ({ - version: 1, events: [ { id: "ready", @@ -205,7 +204,6 @@ describe("process trace comparison", () => { }); it("enforces explicit negative not-before constraints", () => { const specification: ProcessTraceSpecification = { - version: 1, events: [ { id: "ready", @@ -267,7 +265,6 @@ describe("process trace comparison", () => { ], }); const specification: ProcessTraceSpecification = { - version: 1, events: [ { id: "tick1", diff --git a/src/domain/processTraceComparisonPart2.test.ts b/src/domain/processTraceComparisonPart2.test.ts index 249ac8dab5..77957334aa 100644 --- a/src/domain/processTraceComparisonPart2.test.ts +++ b/src/domain/processTraceComparisonPart2.test.ts @@ -107,7 +107,6 @@ const values = ( })), }); const partialSpecification = (): ProcessTraceSpecification => ({ - version: 1, events: [ { id: "ready", @@ -177,7 +176,6 @@ describe("process trace comparison", () => { ignore_fields: ["sequence", "at_ms"], }; const rangeSpecification: ProcessTraceSpecification = { - version: 1, events: [{ ...event, cardinality: { kind: "range", min: 2, max: 3 } }], language: { kind: "partial_order", @@ -204,7 +202,6 @@ describe("process trace comparison", () => { diagnostic: { kind: "cardinality", side: "right" }, }); const exactSpecification: ProcessTraceSpecification = { - version: 1, events: [{ ...event, cardinality: { kind: "exact", count: 2 } }], language: { kind: "finite_traces", diff --git a/src/domain/processTraceSpecification.test.ts b/src/domain/processTraceSpecification.test.ts index 428a93c4fd..1118b30ae3 100644 --- a/src/domain/processTraceSpecification.test.ts +++ b/src/domain/processTraceSpecification.test.ts @@ -33,7 +33,6 @@ const websocket = { outcome: "matched" as const, }; const partialSpecification = (): ProcessTraceSpecification => ({ - version: 1, events: [ { id: "ready", @@ -92,7 +91,6 @@ describe("process trace specification", () => { ).toBe(false); expect( processTraceSpecificationSchema.safeParse({ - version: 1, events: base.events.slice(0, 3), language: { kind: "partial_order", @@ -104,7 +102,6 @@ describe("process trace specification", () => { ).toBe(false); expect( processTraceSpecificationSchema.safeParse({ - version: 1, events: [ { id: "invalid-ignore", @@ -121,7 +118,6 @@ describe("process trace specification", () => { ).toBe(false); expect( processTraceSpecificationSchema.safeParse({ - version: 1, events: [ { id: "invalid-ignore", @@ -138,14 +134,12 @@ describe("process trace specification", () => { ).toBe(false); expect( processTraceSpecificationSchema.safeParse({ - version: 1, events: base.events.slice(0, 2), language: { kind: "partial_order" }, }).success, ).toBe(false); expect( processTraceSpecificationSchema.safeParse({ - version: 1, events: [base.events[0], { ...base.events[0], id: "duplicate" }], language: { kind: "partial_order", @@ -155,7 +149,6 @@ describe("process trace specification", () => { ).toBe(false); expect( processTraceSpecificationSchema.safeParse({ - version: 1, events: [ { ...base.events[0], @@ -170,7 +163,6 @@ describe("process trace specification", () => { ).toBe(false); expect( processTraceSpecificationSchema.safeParse({ - version: 1, events: [base.events[0]], language: { kind: "finite_traces", diff --git a/src/domain/processTraceSpecification.ts b/src/domain/processTraceSpecification.ts index e6243910e1..b51d2ea99f 100644 --- a/src/domain/processTraceSpecification.ts +++ b/src/domain/processTraceSpecification.ts @@ -104,7 +104,6 @@ const finiteTraceLanguageSchema = z.strictObject({ }); const specificationShapeSchema = z.strictObject({ - version: z.literal(1), events: z.array(eventDeclarationSchema).min(1).max(256), language: z.discriminatedUnion("kind", [ partialOrderLanguageSchema, diff --git a/src/domain/reconstructionVerificationSchemas.ts b/src/domain/reconstructionVerificationSchemas.ts index 0923d2a33e..423744f880 100644 --- a/src/domain/reconstructionVerificationSchemas.ts +++ b/src/domain/reconstructionVerificationSchemas.ts @@ -77,7 +77,6 @@ export const reconstructionSpecificationSchema = z /** Bounded reconstruction-verification input. */ export const reconstructionVerificationInputSchema = z.strictObject({ specification: reconstructionSpecificationSchema, - unknown_registry_approved: z.literal(true).optional(), }); export const reconstructionClaimResultSchema = z.object({ diff --git a/src/domain/staticRuntimeCorrelation.ts b/src/domain/staticRuntimeCorrelation.ts index 5eee93ef9c..e0c53d6ca8 100644 --- a/src/domain/staticRuntimeCorrelation.ts +++ b/src/domain/staticRuntimeCorrelation.ts @@ -88,7 +88,6 @@ export const staticRuntimeCorrelationInputSchema = z static_comparisons: z.array(evidenceSchema).min(1).max(100), runtime_comparisons: z.array(evidenceSchema).min(1).max(100), mappings: z.array(mappingSchema).min(1).max(500), - unknown_registry_approved: z.literal(true).optional(), }) .strict(); diff --git a/src/replay/JavaScriptReplayWorker.ts b/src/replay/JavaScriptReplayWorker.ts index e74bba8c8c..32f6dec1e9 100644 --- a/src/replay/JavaScriptReplayWorker.ts +++ b/src/replay/JavaScriptReplayWorker.ts @@ -72,12 +72,11 @@ const parseWorkerSide = (value: unknown): WorkerSide => { const parseWorkerRequest = (value: unknown): WorkerRequest => { const request = record(value, "request"); - if (request.schemaVersion !== 1 || !Array.isArray(request.cases)) - throw new TypeError("Unsupported replay worker protocol"); + if (!Array.isArray(request.cases)) + throw new TypeError("Invalid replay worker cases"); const determinism = record(request.determinism, "determinism"); const limits = record(request.limits, "limits"); return { - schemaVersion: 1, left: parseWorkerSide(request.left), ...(request.right === undefined ? {} diff --git a/src/replay/JavaScriptReplayWorkerTypes.ts b/src/replay/JavaScriptReplayWorkerTypes.ts index 21842169eb..b949821065 100644 --- a/src/replay/JavaScriptReplayWorkerTypes.ts +++ b/src/replay/JavaScriptReplayWorkerTypes.ts @@ -15,7 +15,6 @@ export interface WorkerSide { /** Parsed parent-to-worker runtime-hop request. */ export interface WorkerRequest { - readonly schemaVersion: 1; readonly left: WorkerSide; readonly right?: WorkerSide; readonly cases: readonly { diff --git a/src/replay/ReplayOutcome.ts b/src/replay/ReplayOutcome.ts index f57781c3be..f3cb44adb3 100644 --- a/src/replay/ReplayOutcome.ts +++ b/src/replay/ReplayOutcome.ts @@ -7,7 +7,6 @@ import { jsonValueSchema } from "../domain/jsonValue.js"; import type { WorkerProtocolOutcome } from "./ReplayWorkerProtocol.js"; export const workerRequest = (prepared: PreparedReplayPlan) => ({ - schemaVersion: 1, left: workerSide(prepared.publicPlan.left, prepared.leftSources), ...(prepared.publicPlan.right === undefined || prepared.rightSources === undefined diff --git a/tests/boundary/process/processCaptureMultisource.test.ts b/tests/boundary/process/processCaptureMultisource.test.ts index dd95bdd0d0..17f5d263ec 100644 --- a/tests/boundary/process/processCaptureMultisource.test.ts +++ b/tests/boundary/process/processCaptureMultisource.test.ts @@ -138,7 +138,6 @@ function createMultiSourceScenario(root: string, script: string) { }, ], reactive: { - version: 1, initial_state: "ready", deadline_ms: 8_000, states: [ diff --git a/tests/boundary/process/processCaptureReactive.test.ts b/tests/boundary/process/processCaptureReactive.test.ts index 19eb5dc11f..7753816bff 100644 --- a/tests/boundary/process/processCaptureReactive.test.ts +++ b/tests/boundary/process/processCaptureReactive.test.ts @@ -19,7 +19,6 @@ function createInteractiveScenario(root: string, script: string) { arguments: [script], working_directory: root, reactive: { - version: 1, initial_state: "waiting", deadline_ms: 5_000, states: [ @@ -311,7 +310,6 @@ it("records target loss before post-exit settlement can win the deadline race", working_directory: root, settle_ms: 500, reactive: { - version: 1, initial_state: "waiting", deadline_ms: 5_000, states: [ diff --git a/tests/boundary/process/processCaptureTerminal.test.ts b/tests/boundary/process/processCaptureTerminal.test.ts index 8ed5c3258e..5c1b9438bd 100644 --- a/tests/boundary/process/processCaptureTerminal.test.ts +++ b/tests/boundary/process/processCaptureTerminal.test.ts @@ -43,7 +43,6 @@ const buildTerminalScenario = (root: string, script: string) => }, ], reactive: { - version: 1, initial_state: "waiting_for_shim", deadline_ms: 5_000, states: [ diff --git a/tests/boundary/providers/replay/javascriptReplayWorker.test.ts b/tests/boundary/providers/replay/javascriptReplayWorker.test.ts index c0dca1367c..be43e5c454 100644 --- a/tests/boundary/providers/replay/javascriptReplayWorker.test.ts +++ b/tests/boundary/providers/replay/javascriptReplayWorker.test.ts @@ -38,7 +38,6 @@ const request = async ( entryExport: string, arguments_: readonly unknown[], ) => ({ - schemaVersion: 1, left: { modules: [ { @@ -68,7 +67,6 @@ const request = async ( describe("disposable JavaScript replay worker", () => { it("rejects malformed runtime-hop requests before loading modules", async () => { const result = await runWorker({ - schemaVersion: 1, left: { modules: "not-an-array", entryAlias: "entry", entryExport: "x" }, cases: [], determinism: { clockIso: "2000-01-01T00:00:00.000Z", randomSeed: 7 }, diff --git a/tests/process-global/vitestConfiguration.test.ts b/tests/process-global/vitestConfiguration.test.ts index 21e6ac65fa..c676078609 100644 --- a/tests/process-global/vitestConfiguration.test.ts +++ b/tests/process-global/vitestConfiguration.test.ts @@ -1,5 +1,5 @@ import { execFile } from "node:child_process"; -import { readdir, readFile } from "node:fs/promises"; +import { readdir } from "node:fs/promises"; import { availableParallelism } from "node:os"; import { join, relative, resolve } from "node:path"; import { promisify } from "node:util"; @@ -24,14 +24,6 @@ const EXPECTED_PROJECTS = [ "process-global", "services", ]; -const ALLOWED_DIRECT_TEMPORARY_ROOTS = new Set([ - "tests/support/workspace/workspaceFixture.ts", - "tests/acceptance/setup/packageInstallWorkflow.test.ts", - "tests/boundary/filesystem/temporaryDirectory.test.ts", - "tests/boundary/filesystem/referenceSourceReader.test.ts", - "tests/boundary/process/providerProcess.test.ts", -]); - describe("Vitest project configuration", () => { it("keeps deterministic execution retry-free and locally quiet", () => { expect(vitestConfiguration.test?.coverage?.enabled).toBe(false); @@ -91,20 +83,6 @@ describe("Vitest project configuration", () => { ).toEqual([]); expect([...classified.keys()].sort()).toEqual(repositoryTests); }, 20_000); - - it("keeps direct temporary-root creation behind the workspace seam", async () => { - const violations: string[] = []; - for (const path of await repositoryTypeScriptFiles("tests")) { - const source = await readFile(path, "utf8"); - if ( - /\b(?:mkdtemp|tmpdir)\s*\(/u.test(source) && - !ALLOWED_DIRECT_TEMPORARY_ROOTS.has(path) - ) { - violations.push(path); - } - } - expect(violations).toEqual([]); - }); }); const parseProjects = (output: string): Map => { @@ -133,16 +111,3 @@ const testFiles = async (root: string): Promise => { } return files; }; - -const repositoryTypeScriptFiles = async (root: string): Promise => { - const files: string[] = []; - for (const entry of await readdir(root, { withFileTypes: true })) { - const path = join(root, entry.name); - if (entry.isDirectory()) { - files.push(...(await repositoryTypeScriptFiles(path))); - } else if (entry.isFile() && entry.name.endsWith(".ts")) { - files.push(relative(process.cwd(), path)); - } - } - return files; -};