From b3aca5289bf973ffb4072253eebe86e0acced347 Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Tue, 29 Sep 2026 11:23:06 +0800 Subject: [PATCH] refactor(process): remove redundant schema version markers --- ...rovider-selection-and-analysis-profiles.md | 16 ++++---- ...controlled-replay-authority-and-sandbox.md | 2 +- docs/process-capture.md | 2 +- src/application/EvidenceLedger.ts | 2 +- .../ProcessReactiveCoordinator.test.ts | 2 - ...ProcessReactiveCoordinatorFailures.test.ts | 1 - ...ssReactiveCoordinatorFailuresPart2.test.ts | 1 - src/domain/callPathSchemas.ts | 1 - src/domain/changedBehavior.ts | 1 - src/domain/evidenceCompletionLedger.test.ts | 2 +- src/domain/evidenceCompletionLedger.ts | 2 +- src/domain/functionComparisonSchemas.ts | 1 - src/domain/processReactiveRuntime.test.ts | 1 - .../processReactiveRuntimePart2.test.ts | 1 - .../processReactiveRuntimePart3.test.ts | 1 - .../processReactiveRuntimePredicates.test.ts | 2 - ...cessReactiveRuntimePredicatesPart2.test.ts | 2 - src/domain/processReactiveScenario.test.ts | 8 +--- src/domain/processReactiveScenario.ts | 7 ++-- .../processReactiveScenarioPreflight.ts | 24 +++++++++--- src/domain/processScenario.ts | 5 --- src/domain/processTraceAdapters.test.ts | 4 -- src/domain/processTraceComparison.test.ts | 3 -- .../processTraceComparisonPart2.test.ts | 3 -- src/domain/processTraceSpecification.test.ts | 8 ---- src/domain/processTraceSpecification.ts | 1 - .../reconstructionVerificationSchemas.ts | 1 - src/domain/staticRuntimeCorrelation.ts | 1 - src/replay/JavaScriptReplayWorker.ts | 5 +-- src/replay/JavaScriptReplayWorkerTypes.ts | 1 - src/replay/ReplayOutcome.ts | 1 - .../process/processCaptureMultisource.test.ts | 1 - .../process/processCaptureReactive.test.ts | 2 - .../process/processCaptureTerminal.test.ts | 1 - .../replay/javascriptReplayWorker.test.ts | 2 - .../vitestConfiguration.test.ts | 37 +------------------ 36 files changed, 39 insertions(+), 116 deletions(-) diff --git a/docs/adr/0001-provider-selection-and-analysis-profiles.md b/docs/adr/0001-provider-selection-and-analysis-profiles.md index c760d9ca0..13b1d137c 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 820208c0d..e8e91b61e 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 23930983d..eb3502b68 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 aa5555c2b..e8c570ff5 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 d033f992f..ed5041abb 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 92a0f7c45..e650cf762 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 1d8769aba..4ca41eb45 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 45f7f3208..36c0e0d71 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 79a9e9eb1..edb15fa14 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 8eb2532a3..6ad50c5cf 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 6afc00847..406296d45 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 840b63e9c..828087717 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 f512fc53d..c14981a82 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 6599eb7a6..e689b21c0 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 68310e05d..f8b603894 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 e8b145e32..257d42b42 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 45df2f6dd..84c58b622 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 8bf921312..9a4e20772 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 e641622c7..7fd07a793 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 db867fb75..0c3526ad5 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 b929fdd7a..386531b94 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 c807e8699..848ab2920 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 e41d3d2e6..662ef3457 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 249ac8dab..77957334a 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 428a93c4f..1118b30ae 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 e6243910e..b51d2ea99 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 0923d2a33..423744f88 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 5eee93ef9..e0c53d6ca 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 e74bba8c8..32f6dec1e 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 21842169e..b94982106 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 f57781c3b..f3cb44adb 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 dd95bdd0d..17f5d263e 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 19eb5dc11..7753816bf 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 8ed5c3258..5c1b9438b 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 c0dca1367..be43e5c45 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 21e6ac65f..c67607860 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; -};