From 6aa9afb5493a97801eb1126a0dcf11f9705165db Mon Sep 17 00:00:00 2001 From: Ysopwnable <161784452+N0zoM1z0@users.noreply.github.com> Date: Thu, 8 Oct 2026 00:46:21 +0800 Subject: [PATCH] refactor(process): separate capture implementation from analyst workflows (#988) * refactor(process): separate capture implementation from analyst workflows * fix(ci): generate source catalog before shard tests --- .github/workflows/ci.yml | 4 +++ docs/capability-migration.md | 26 +++++++++++++++++++ docs/testing.md | 9 +++++++ docs/user-visible-errors.csv | 12 ++++----- scripts/lib/catalog-core.mjs | 2 +- scripts/lib/module-boundaries.d.mts | 1 + scripts/lib/module-boundaries.mjs | 8 ++++++ scripts/verify-package-install.mjs | 4 +-- src/application/EvidenceBundleFiles.ts | 2 +- .../ReconstructionObligationCandidates.ts | 2 +- ...tructionObligationLedger.authority.test.ts | 6 ++--- ...nstructionObligationLedger.closure.test.ts | 6 ++--- src/application/WindowsCapabilities.ts | 2 +- src/application/{ => process}/ProcessCli.ts | 20 +++++++------- .../{ => process}/ProcessEvidence.ts | 12 ++++----- src/cli/processCommands.ts | 2 +- src/cliEnvironmentSeam.test.ts | 6 ++--- src/cliLogging.test.ts | 2 +- src/contracts/investigationExamples.ts | 4 +-- .../process/processCaptureExample.ts | 2 ++ src/contracts/processCaptureExample.ts | 2 -- src/contracts/sessionToolSchemas.ts | 4 +-- src/contracts/toolOutputSchemaGroups.ts | 2 +- src/domain/changedBehavior.ts | 4 +-- src/domain/inputIssueProjection.test.ts | 2 +- .../{ => process}/eventProcessTree.fixture.ts | 0 .../{ => process}/eventProcessTree.test.ts | 0 src/domain/{ => process}/eventProcessTree.ts | 0 .../processCapture.comparison.test.ts | 0 .../{ => process}/processCapture.fixture.ts | 0 .../processCapture.traceProjection.test.ts | 0 src/domain/{ => process}/processCapture.ts | 2 +- .../processCapture.validation.test.ts | 0 .../{ => process}/processCaptureExample.ts | 2 +- .../{ => process}/processCaptureParsing.ts | 0 .../{ => process}/processCaptureValidation.ts | 0 src/domain/{ => process}/processComparison.ts | 2 +- .../processEvidenceProvider.test.ts | 0 .../{ => process}/processEvidenceProvider.ts | 2 +- .../{ => process}/processObservation.test.ts | 0 .../{ => process}/processObservation.ts | 2 +- .../{ => process}/processScenario.test.ts | 0 src/domain/{ => process}/processScenario.ts | 0 .../processTraceAdapters.test.ts | 0 .../processTraceComparison.fixture.ts | 0 .../processTraceComparison.test.ts | 0 .../{ => process}/processTraceComparison.ts | 0 .../processTraceDimensionProjection.ts | 0 .../{ => process}/processTraceEvaluation.ts | 2 +- .../processTraceSpecification.test.ts | 0 .../processTraceSpecification.ts | 2 +- src/domain/reconstructionVerification.test.ts | 2 +- src/domain/reconstructionVerification.ts | 4 +-- .../reconstructionVerificationSchemas.ts | 2 +- src/domain/staticRuntimeCorrelation.ts | 6 ++--- .../capture}/FilesystemSnapshot.test.ts | 0 .../capture}/FilesystemSnapshot.ts | 5 +++- .../capture}/ProcessCaptureCapability.ts | 0 .../capture}/ProcessCaptureEnvironment.ts | 2 +- .../capture}/ProcessCaptureError.test.ts | 2 +- .../capture}/ProcessCaptureError.ts | 2 +- .../capture}/ProcessCaptureJournal.test.ts | 0 .../capture}/ProcessCaptureJournal.ts | 2 +- .../capture}/ProcessCaptureLifecycle.ts | 12 ++++----- .../ProcessCaptureObservation.test.ts | 4 +-- .../capture}/ProcessFilesystemEffects.ts | 2 +- .../capture}/ProcessHarness.test.ts | 10 +++---- .../capture}/ProcessHarness.ts | 12 ++++----- .../capture}/ProcessNormalization.test.ts | 2 +- .../capture}/ProcessNormalization.ts | 2 +- .../capture}/ProcessSampling.ts | 6 ++--- .../ProcessScenarioRuntimeValidation.test.ts | 2 +- .../ProcessScenarioRuntimeValidation.ts | 2 +- .../capture}/ProcessTimer.test.ts | 0 .../capture}/ProcessTimer.ts | 0 .../capture}/TerminalRenderer.ts | 2 +- src/server/promptCompletion.ts | 2 +- src/server/registerProcessComparisonTool.ts | 2 +- src/server/registerSessionTools.ts | 6 ++--- src/server/sessionToolPolicies.ts | 2 +- tests/boundary/cli/processCli.test.ts | 4 +-- .../outputSchemaSemanticConstraints.test.ts | 4 +-- .../mcp/processEvidenceIdentityMcp.test.ts | 6 ++--- .../mcp/processTraceAdaptersParity.test.ts | 8 +++--- tests/boundary/mcp/serverUnknownsMcp.test.ts | 4 +-- tests/boundary/mcp/sessionMcp.test.ts | 2 +- tests/boundary/mcp/toolSchemaValidity.test.ts | 2 +- .../process}/ProcessEvidence.host.test.ts | 10 +++---- .../boundary/process}/ProcessEvidence.test.ts | 10 +++---- .../filesystemSnapshotFifoRace.test.ts | 2 +- .../process/processCaptureCapability.test.ts | 2 +- .../process/processCaptureCapability.ts | 2 +- .../process/processCaptureLifecycle.test.ts | 6 ++--- .../processCaptureNormalization.test.ts | 6 ++--- .../process/processCaptureTerminal.test.ts | 4 +-- .../process/processHostIdentity.test.ts | 4 +-- .../contracts/analysisErrorProjection.test.ts | 2 +- tests/evaluation/moduleBoundaries.test.ts | 22 ++++++++++++++++ 98 files changed, 214 insertions(+), 141 deletions(-) rename src/application/{ => process}/ProcessCli.ts (89%) rename src/application/{ => process}/ProcessEvidence.ts (76%) create mode 100644 src/contracts/process/processCaptureExample.ts delete mode 100644 src/contracts/processCaptureExample.ts rename src/domain/{ => process}/eventProcessTree.fixture.ts (100%) rename src/domain/{ => process}/eventProcessTree.test.ts (100%) rename src/domain/{ => process}/eventProcessTree.ts (100%) rename src/domain/{ => process}/processCapture.comparison.test.ts (100%) rename src/domain/{ => process}/processCapture.fixture.ts (100%) rename src/domain/{ => process}/processCapture.traceProjection.test.ts (100%) rename src/domain/{ => process}/processCapture.ts (99%) rename src/domain/{ => process}/processCapture.validation.test.ts (100%) rename src/domain/{ => process}/processCaptureExample.ts (97%) rename src/domain/{ => process}/processCaptureParsing.ts (100%) rename src/domain/{ => process}/processCaptureValidation.ts (100%) rename src/domain/{ => process}/processComparison.ts (99%) rename src/domain/{ => process}/processEvidenceProvider.test.ts (100%) rename src/domain/{ => process}/processEvidenceProvider.ts (90%) rename src/domain/{ => process}/processObservation.test.ts (100%) rename src/domain/{ => process}/processObservation.ts (98%) rename src/domain/{ => process}/processScenario.test.ts (100%) rename src/domain/{ => process}/processScenario.ts (100%) rename src/domain/{ => process}/processTraceAdapters.test.ts (100%) rename src/domain/{ => process}/processTraceComparison.fixture.ts (100%) rename src/domain/{ => process}/processTraceComparison.test.ts (100%) rename src/domain/{ => process}/processTraceComparison.ts (100%) rename src/domain/{ => process}/processTraceDimensionProjection.ts (100%) rename src/domain/{ => process}/processTraceEvaluation.ts (99%) rename src/domain/{ => process}/processTraceSpecification.test.ts (100%) rename src/domain/{ => process}/processTraceSpecification.ts (99%) rename src/{application => process/capture}/FilesystemSnapshot.test.ts (100%) rename src/{application => process/capture}/FilesystemSnapshot.ts (98%) rename src/{application => process/capture}/ProcessCaptureCapability.ts (100%) rename src/{application => process/capture}/ProcessCaptureEnvironment.ts (90%) rename src/{application => process/capture}/ProcessCaptureError.test.ts (92%) rename src/{application => process/capture}/ProcessCaptureError.ts (95%) rename src/{application => process/capture}/ProcessCaptureJournal.test.ts (100%) rename src/{application => process/capture}/ProcessCaptureJournal.ts (98%) rename src/{application => process/capture}/ProcessCaptureLifecycle.ts (97%) rename src/{application => process/capture}/ProcessCaptureObservation.test.ts (98%) rename src/{application => process/capture}/ProcessFilesystemEffects.ts (96%) rename src/{application => process/capture}/ProcessHarness.test.ts (83%) rename src/{application => process/capture}/ProcessHarness.ts (96%) rename src/{application => process/capture}/ProcessNormalization.test.ts (98%) rename src/{application => process/capture}/ProcessNormalization.ts (98%) rename src/{application => process/capture}/ProcessSampling.ts (98%) rename src/{application => process/capture}/ProcessScenarioRuntimeValidation.test.ts (93%) rename src/{application => process/capture}/ProcessScenarioRuntimeValidation.ts (97%) rename src/{application => process/capture}/ProcessTimer.test.ts (100%) rename src/{application => process/capture}/ProcessTimer.ts (100%) rename src/{application => process/capture}/TerminalRenderer.ts (98%) rename {src/application => tests/boundary/process}/ProcessEvidence.host.test.ts (67%) rename {src/application => tests/boundary/process}/ProcessEvidence.test.ts (91%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 740e7f2a5b..b27bb0ce73 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -102,6 +102,8 @@ jobs: with: name: rea-dist path: dist + - name: Generate source catalog from downloaded build + run: node scripts/generate-mcp-tool-catalog.mjs - run: npm run test:ci:shard:run -- --shard=${{ matrix.shard }} - uses: actions/upload-artifact@v4 if: ${{ !cancelled() }} @@ -314,6 +316,8 @@ jobs: run: npm run test:focused -- tests/boundary/cli/nativePlistCli.test.ts tests/boundary/cli/nativePlistPrototypeKeyCli.test.ts tests/boundary/cli/nativePlistSelectionFailureCli.test.ts - name: Native Swift demangling CLI and MCP regressions run: npm run test:focused -- tests/boundary/cli/nativeDemangleCli.test.ts tests/boundary/mcp/nativeDemangleMcp.test.ts + - name: Process filesystem snapshot descriptor regressions + run: npm run test:focused -- src/process/capture/FilesystemSnapshot.test.ts reconstruction-readiness: name: Reconstruction readiness diff --git a/docs/capability-migration.md b/docs/capability-migration.md index 2ce6471a4b..e38761e733 100644 --- a/docs/capability-migration.md +++ b/docs/capability-migration.md @@ -425,3 +425,29 @@ native-value verifier locations are retained until their own proof lanes migrate interactive macOS UI success and real dependency tracing require their respective host/engine workflows. Portable source fixtures and injected call-route tests establish their narrower boundaries, without expanding provider/platform support. + +## Process capture and analyst workflow ownership + +`src/domain/process/` owns scenario/capture validation, portable process trees, +trace specifications, observations, comparisons and the canonical process Evidence +identity. The standalone contract example lives in `src/contracts/process/`; +shared session contracts retain their broader investigation owner. + +`src/process/capture/` owns the actual PTY boundary, terminal rendering, sampling, +selected child environment, filesystem snapshots/effects, runtime path admission, +event journal, settlement and resource cleanup. It reuses `src/process/` ownership +primitives and the Windows host substrate. Its identity import follows the +existing pure declaration directly. A source guard rejects outward application, +composition and caller imports; no new provider or lifecycle interface is added. + +`src/application/process/` retains Evidence projection and file-backed CLI +capture/comparison workflows. Capture helper tests use the forked adapter lane; +Evidence/host integration tests use the serial process-boundary lane. Their +fixtures and assertions remain unchanged. Installed capability-probe URLs follow +the new compiled adapter path, including the optional-dependency failure probe. + +Windows PTY capture retains its existing unavailable outcome because descendant +cleanup is not yet verified. Native Job Objects and a PTY binary do not establish +that capture workflow. Real POSIX capture/cleanup and installed terminal/PTY module +resolution require their actual host and package lanes; portable comparison +fixtures establish their separate evidence semantics. diff --git a/docs/testing.md b/docs/testing.md index 5c310539fb..740d7958e3 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -103,6 +103,15 @@ names remain unchanged. The existing Apple CI job also runs the host Swift-demangling CLI/MCP regression suites, including option-like symbols, carriage returns and multiline rejection. +Process semantics/tests live in `src/domain/process/`; PTY capture implementation +and forked helper tests live in `src/process/capture/`. Evidence projection and +file workflows live in `src/application/process/`; producer-backed Evidence/host +cases run in the serial `tests/boundary/process/` lane. Installed-package probes +load the compiled capture capability owner, including the missing-optional-module +case. Real capture tests preserve actual descendant and cleanup checks. +The existing Apple job also exercises the relocated filesystem snapshot identity, +cancellation and descriptor cleanup regressions on macOS. + MCP SDK transport tests with recording providers remain integration tests. They are useful for schema drift and failure projection but do not prove that Hopper, Ghidra or another substituted engine works. `verify:package` proves diff --git a/docs/user-visible-errors.csv b/docs/user-visible-errors.csv index 362a4f3671..1adbcbbbc8 100644 --- a/docs/user-visible-errors.csv +++ b/docs/user-visible-errors.csv @@ -68,12 +68,12 @@ harm_rank,location,trigger,current_copy,user_risk,proposed_replacement,implement 58,src/application/SetupHost.ts:unsupported Node,Runtime version cannot run setup,"Install Node.js 22.x (>=22.19), 24.x (>=24.11), or 26+ and rerun setup.",Low risk; exact dependency and retry,Keep current copy,unchanged,verified by setup host tests 59,src/application/Setup.ts:unsupported macOS,macOS version is missing or older than 12,Upgrade to macOS 12 or newer.,Low risk; exact support floor,Keep current copy,unchanged,verified by setup host tests 60,src/application/Setup.ts:unsupported Linux,Linux distribution is outside supported set,"REA supports Hopper on Ubuntu 24.04+, Fedora 41+, 64-bit Arch Linux, and CachyOS.",Low risk; exact supported alternatives,Keep current copy,unchanged,verified by setup unit test -61,src/application/ProcessCli.ts:readJson read,Process scenario or evidence file cannot be read,Raw filesystem exception through CLI framework,Can expose local paths/codes and no recovery,"Process input file could not be read. Check that the path exists and is readable.",implemented,verified by focused CLI test -62,src/application/ProcessCli.ts:readJson size,Process scenario or evidence file exceeds 64 MiB,Process JSON input exceeds byte limit,Does not state limit or recovery,"Process input file is too large. Reduce it below 64 MiB, then try again.",implemented,verified by focused sparse-file CLI test -63,src/application/ProcessCli.ts:readJson parse,Process scenario or evidence file is malformed JSON,Raw JSON parser exception through CLI framework,Can expose parser implementation and lacks recovery,"Process input file is not valid JSON. Repair the file, then try again.",implemented,verified by focused CLI test -64,src/application/ProcessCli.ts:capture scenario parse,Scenario fails Process Capture schema,Raw Zod validation exception through CLI framework,Exposes schema internals and field paths without stable recovery,"Process scenario is invalid. Check its required fields and limits, then try again.",implemented,verified by focused CLI test -66,src/application/ProcessCli.ts:wrong evidence,Comparison receives valid Evidence from another workflow,Expected REA process capture Evidence,Uses internal schema name and does not explain recovery,"Capture evidence is not from the current process-capture workflow. Create new capture evidence, then try again.",implemented,verified by focused CLI test -67,src/application/ProcessCli.ts:unexpected,Unexpected parser/comparison/canonicalization failure escapes expected classifications,Raw thrown exception through CLI framework,Can expose stack or internal invariant,"Process command could not complete. Check the input files and run `rea doctor`, then try again.",implemented,verified by direct unexpected-cause projection test +61,src/application/process/ProcessCli.ts:readJson read,Process scenario or evidence file cannot be read,Raw filesystem exception through CLI framework,Can expose local paths/codes and no recovery,"Process input file could not be read. Check that the path exists and is readable.",implemented,verified by focused CLI test +62,src/application/process/ProcessCli.ts:readJson size,Process scenario or evidence file exceeds 64 MiB,Process JSON input exceeds byte limit,Does not state limit or recovery,"Process input file is too large. Reduce it below 64 MiB, then try again.",implemented,verified by focused sparse-file CLI test +63,src/application/process/ProcessCli.ts:readJson parse,Process scenario or evidence file is malformed JSON,Raw JSON parser exception through CLI framework,Can expose parser implementation and lacks recovery,"Process input file is not valid JSON. Repair the file, then try again.",implemented,verified by focused CLI test +64,src/application/process/ProcessCli.ts:capture scenario parse,Scenario fails Process Capture schema,Raw Zod validation exception through CLI framework,Exposes schema internals and field paths without stable recovery,"Process scenario is invalid. Check its required fields and limits, then try again.",implemented,verified by focused CLI test +66,src/application/process/ProcessCli.ts:wrong evidence,Comparison receives valid Evidence from another workflow,Expected REA process capture Evidence,Uses internal schema name and does not explain recovery,"Capture evidence is not from the current process-capture workflow. Create new capture evidence, then try again.",implemented,verified by focused CLI test +67,src/application/process/ProcessCli.ts:unexpected,Unexpected parser/comparison/canonicalization failure escapes expected classifications,Raw thrown exception through CLI framework,Can expose stack or internal invariant,"Process command could not complete. Check the input files and run `rea doctor`, then try again.",implemented,verified by direct unexpected-cause projection test 68,src/server/registerEvidenceTools.ts:object guard,Validated provider-tool input is unexpectedly not an object,Provider tool input was not an object,Exposes provider architecture and implies caller can fix impossible state,Remove the impossible duplicate guard and parse through the declared JSON-object schema.,removed,verified by typecheck and MCP integration tests 69,src/server/registerEnhancedTools.ts:object guard,Validated enhanced-tool input is unexpectedly not an object,Validated enhanced input was not a JSON object,Exposes validation/JSON implementation detail,Remove the impossible duplicate guard and parse through the declared JSON-object schema.,removed,verified by typecheck and enhanced MCP integration tests 70,src/server/registerOfficialTools.ts:object guard,Validated direct-tool input is unexpectedly not an object,Validated MCP tool input was not a JSON object,Exposes MCP validation implementation detail,Remove the impossible duplicate guard and parse through the declared JSON-object schema.,removed,verified by typecheck and official MCP integration tests diff --git a/scripts/lib/catalog-core.mjs b/scripts/lib/catalog-core.mjs index 311fb5f0a5..8b0649e4b5 100644 --- a/scripts/lib/catalog-core.mjs +++ b/scripts/lib/catalog-core.mjs @@ -75,7 +75,7 @@ const SOURCE_PATHS = { evidenceBundle: "dist/domain/evidenceBundle.js", evidenceCompletion: "dist/domain/evidenceCompletionLedger.js", completionGeneration: "dist/domain/completionLedgerGeneration.js", - processCapture: "dist/domain/processCapture.js", + processCapture: "dist/domain/process/processCapture.js", analysisSnapshot: "dist/domain/analysisSnapshot.js", artifactGraph: "dist/domain/artifactGraph.js", browserObservation: "dist/domain/browserObservation.js", diff --git a/scripts/lib/module-boundaries.d.mts b/scripts/lib/module-boundaries.d.mts index 51d5957c6b..e8b6d2dd67 100644 --- a/scripts/lib/module-boundaries.d.mts +++ b/scripts/lib/module-boundaries.d.mts @@ -6,6 +6,7 @@ export interface ModuleBoundaryViolation { readonly target: string; readonly boundary: | "artifact-acquisition" + | "process-capture" | "pure-layer" | "application-composition" | "provider-construction" diff --git a/scripts/lib/module-boundaries.mjs b/scripts/lib/module-boundaries.mjs index a0c71738b4..05b12b85f8 100644 --- a/scripts/lib/module-boundaries.mjs +++ b/scripts/lib/module-boundaries.mjs @@ -60,6 +60,14 @@ const failedBoundary = (file, target) => { if (!file.startsWith("src/") || !target.startsWith("src/")) return undefined; const layer = file.split("/")[1]; const targetLayer = target.split("/")[1]; + if ( + file.startsWith("src/process/capture/") && + (["application", "composition", "server", "cli", "main"].includes( + targetLayer, + ) || + /^src\/(?:cli|main)\./u.test(target)) + ) + return "process-capture"; if ( file.startsWith("src/application/javascript/") && /^src\/artifacts\/(?:Asar|Directory)ArtifactReader\.(?:js|ts)$/u.test( diff --git a/scripts/verify-package-install.mjs b/scripts/verify-package-install.mjs index da2e79f24f..81ee5afc66 100644 --- a/scripts/verify-package-install.mjs +++ b/scripts/verify-package-install.mjs @@ -31,7 +31,7 @@ export async function verifyPackageInstall({ const processCaptureCapabilityUrl = pathToFileURL( join( prefix, - "lib/node_modules/rea-agents/dist/application/ProcessCaptureCapability.js", + "lib/node_modules/rea-agents/dist/process/capture/ProcessCaptureCapability.js", ), ).href; const processCaptureCapability = json( @@ -77,7 +77,7 @@ export async function verifyPackageInstall({ const noOptionalCapabilityUrl = pathToFileURL( join( noOptionalPrefix, - "lib/node_modules/rea-agents/dist/application/ProcessCaptureCapability.js", + "lib/node_modules/rea-agents/dist/process/capture/ProcessCaptureCapability.js", ), ).href; const noOptionalCapability = json( diff --git a/src/application/EvidenceBundleFiles.ts b/src/application/EvidenceBundleFiles.ts index cf59d41097..8d9e1d665a 100644 --- a/src/application/EvidenceBundleFiles.ts +++ b/src/application/EvidenceBundleFiles.ts @@ -8,7 +8,7 @@ import { EvidenceIntegrityError, } from "../domain/evidenceErrors.js"; import { err, ok, type Result } from "../domain/result.js"; -import { parseProcessCapture } from "../domain/processCapture.js"; +import { parseProcessCapture } from "../domain/process/processCapture.js"; import { readJsonFile, writeTextFile } from "./JsonFiles.js"; type EvidenceReadFailure = EvidenceFileError | EvidenceIntegrityError; diff --git a/src/application/ReconstructionObligationCandidates.ts b/src/application/ReconstructionObligationCandidates.ts index e977648677..c79b451b45 100644 --- a/src/application/ReconstructionObligationCandidates.ts +++ b/src/application/ReconstructionObligationCandidates.ts @@ -7,7 +7,7 @@ import { parseEvidenceBundle, type EvidenceBundle, } from "../domain/evidenceBundle.js"; -import { parseProcessCapture } from "../domain/processCapture.js"; +import { parseProcessCapture } from "../domain/process/processCapture.js"; import type { ReconstructionObligation, ReviewedReconstructionObligation, diff --git a/src/application/ReconstructionObligationLedger.authority.test.ts b/src/application/ReconstructionObligationLedger.authority.test.ts index b4a3f84ced..650dd75fab 100644 --- a/src/application/ReconstructionObligationLedger.authority.test.ts +++ b/src/application/ReconstructionObligationLedger.authority.test.ts @@ -1,15 +1,15 @@ import { describe, expect, it } from "vitest"; -import { PROCESS_PROVIDER } from "./ProcessEvidence.js"; +import { PROCESS_PROVIDER } from "./process/ProcessEvidence.js"; import { buildReconstructionObligationLedgerEvidenceValidated, resolveReconstructionObligationLedgerRequest, } from "./ReconstructionObligationLedgerService.js"; -import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../domain/processCapture.fixture.js"; +import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../domain/process/processCapture.fixture.js"; import { createEvidence, type Evidence } from "../domain/evidence.js"; import { createEvidenceBundle } from "../domain/evidenceBundle.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; -import { processCaptureSchema } from "../domain/processCapture.js"; +import { processCaptureSchema } from "../domain/process/processCapture.js"; import { reconstructionObligationLedgerSchema, type ReconstructionObligationLedgerInput, diff --git a/src/application/ReconstructionObligationLedger.closure.test.ts b/src/application/ReconstructionObligationLedger.closure.test.ts index f2bcd43d30..80838c1942 100644 --- a/src/application/ReconstructionObligationLedger.closure.test.ts +++ b/src/application/ReconstructionObligationLedger.closure.test.ts @@ -1,15 +1,15 @@ import { describe, expect, it } from "vitest"; -import { PROCESS_PROVIDER } from "./ProcessEvidence.js"; +import { PROCESS_PROVIDER } from "./process/ProcessEvidence.js"; import { buildReconstructionObligationLedgerEvidenceValidated, resolveReconstructionObligationLedgerRequest, } from "./ReconstructionObligationLedgerService.js"; -import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../domain/processCapture.fixture.js"; +import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../domain/process/processCapture.fixture.js"; import { createEvidence, type Evidence } from "../domain/evidence.js"; import { createEvidenceBundle } from "../domain/evidenceBundle.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; -import { processCaptureSchema } from "../domain/processCapture.js"; +import { processCaptureSchema } from "../domain/process/processCapture.js"; import { reconstructionObligationLedgerSchema, type ReconstructionObligationLedgerInput, diff --git a/src/application/WindowsCapabilities.ts b/src/application/WindowsCapabilities.ts index 3e95bed1d9..dfd092c69c 100644 --- a/src/application/WindowsCapabilities.ts +++ b/src/application/WindowsCapabilities.ts @@ -10,7 +10,7 @@ import { import { probeProcessCaptureCapability, type ProcessCaptureCapability, -} from "./ProcessCaptureCapability.js"; +} from "../process/capture/ProcessCaptureCapability.js"; /** One named Windows host observation without inferred authority. */ export type WindowsCapabilityOutcome = diff --git a/src/application/ProcessCli.ts b/src/application/process/ProcessCli.ts similarity index 89% rename from src/application/ProcessCli.ts rename to src/application/process/ProcessCli.ts index f108cf7fa5..8769edad8e 100644 --- a/src/application/ProcessCli.ts +++ b/src/application/process/ProcessCli.ts @@ -1,18 +1,18 @@ import { readFile } from "node:fs/promises"; -import { AnalysisError } from "../domain/analysisErrorBase.js"; -import { AnalysisInputError } from "../domain/analysisErrorCore.js"; -import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; -import { createEvidence, parseEvidence } from "../domain/evidence.js"; -import { jsonValueSchema } from "../domain/jsonValue.js"; -import { projectInputIssues } from "../domain/inputIssueProjection.js"; -import { processTraceSpecificationSchema } from "../domain/processTraceComparison.js"; -import { processScenarioSchema } from "../domain/processScenario.js"; +import { AnalysisError } from "../../domain/analysisErrorBase.js"; +import { AnalysisInputError } from "../../domain/analysisErrorCore.js"; +import { projectAnalysisError } from "../../domain/analysisErrorProjection.js"; +import { createEvidence, parseEvidence } from "../../domain/evidence.js"; +import { jsonValueSchema } from "../../domain/jsonValue.js"; +import { projectInputIssues } from "../../domain/inputIssueProjection.js"; +import { processTraceSpecificationSchema } from "../../domain/process/processTraceComparison.js"; +import { processScenarioSchema } from "../../domain/process/processScenario.js"; import { compareProcessCaptures, parseProcessCapture, -} from "../domain/processCapture.js"; -import { captureProcessScenario } from "./ProcessHarness.js"; +} from "../../domain/process/processCapture.js"; +import { captureProcessScenario } from "../../process/capture/ProcessHarness.js"; import { PROCESS_PROVIDER, createProcessCaptureEvidence, diff --git a/src/application/ProcessEvidence.ts b/src/application/process/ProcessEvidence.ts similarity index 76% rename from src/application/ProcessEvidence.ts rename to src/application/process/ProcessEvidence.ts index 50cd033cac..516eec4787 100644 --- a/src/application/ProcessEvidence.ts +++ b/src/application/process/ProcessEvidence.ts @@ -1,13 +1,13 @@ -import type { JsonValue } from "../domain/jsonValue.js"; -import { createEvidence } from "../domain/evidence.js"; -import { PROCESS_PROVIDER } from "../domain/processEvidenceProvider.js"; -import { jsonValueSchema } from "../domain/jsonValue.js"; +import type { JsonValue } from "../../domain/jsonValue.js"; +import { createEvidence } from "../../domain/evidence.js"; +import { PROCESS_PROVIDER } from "../../domain/process/processEvidenceProvider.js"; +import { jsonValueSchema } from "../../domain/jsonValue.js"; import type { ProcessCapture, ProcessScenario, -} from "../domain/processCapture.js"; +} from "../../domain/process/processCapture.js"; -export { PROCESS_PROVIDER } from "../domain/processEvidenceProvider.js"; +export { PROCESS_PROVIDER } from "../../domain/process/processEvidenceProvider.js"; /** Project one process scenario into secret-free Evidence parameters. */ const processEvidenceParameters = ( diff --git a/src/cli/processCommands.ts b/src/cli/processCommands.ts index e68059b7c4..af10e95c82 100644 --- a/src/cli/processCommands.ts +++ b/src/cli/processCommands.ts @@ -4,7 +4,7 @@ import { captureProcessScenarioFile, compareProcessEvidenceFiles, isProcessCliFailure, -} from "../application/ProcessCli.js"; +} from "../application/process/ProcessCli.js"; import { logCliCommand } from "../cliLogging.js"; import type { Logger } from "../logger.js"; import { CLI_COMMANDS } from "../cliCommandNames.js"; diff --git a/src/cliEnvironmentSeam.test.ts b/src/cliEnvironmentSeam.test.ts index 4aa57dca39..5c021bb153 100644 --- a/src/cliEnvironmentSeam.test.ts +++ b/src/cliEnvironmentSeam.test.ts @@ -6,11 +6,11 @@ import { describe, expect, it } from "vitest"; import { createCli } from "./cli.js"; import { createSystemDoctorHost } from "./doctorRuntime.js"; -import { captureProcessScenarioFile } from "./application/ProcessCli.js"; +import { captureProcessScenarioFile } from "./application/process/ProcessCli.js"; import { runCapabilityStatus } from "./composition/directAnalysis.js"; -import { probeProcessCaptureCapability } from "./application/ProcessHarness.js"; +import { probeProcessCaptureCapability } from "./process/capture/ProcessHarness.js"; import { parseEvidence } from "./domain/evidence.js"; -import { parseProcessCapture } from "./domain/processCapture.js"; +import { parseProcessCapture } from "./domain/process/processCapture.js"; describe("the CLI takes its environment as an input", () => { it("builds from an explicitly supplied environment", () => { diff --git a/src/cliLogging.test.ts b/src/cliLogging.test.ts index c02cb2041e..b37a6f183e 100644 --- a/src/cliLogging.test.ts +++ b/src/cliLogging.test.ts @@ -24,7 +24,7 @@ import { type UninstallHost, } from "./application/Uninstall.js"; import { CLI_COMMANDS } from "./cliCommandNames.js"; -import { isProcessCliFailure } from "./application/ProcessCli.js"; +import { isProcessCliFailure } from "./application/process/ProcessCli.js"; describe("CLI operation status classification", () => { it.each([ diff --git a/src/contracts/investigationExamples.ts b/src/contracts/investigationExamples.ts index 72a61f721a..752f58742b 100644 --- a/src/contracts/investigationExamples.ts +++ b/src/contracts/investigationExamples.ts @@ -4,9 +4,9 @@ import { jsonValueSchema } from "../domain/jsonValue.js"; import { compareProcessCaptures, parseProcessCapture, -} from "../domain/processCapture.js"; +} from "../domain/process/processCapture.js"; import { FUNCTION_COMPARISON_EXAMPLE } from "./functionComparisonExample.js"; -import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "./processCaptureExample.js"; +import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "./process/processCaptureExample.js"; const comparison = compareFunctions( FUNCTION_COMPARISON_EXAMPLE.left, diff --git a/src/contracts/process/processCaptureExample.ts b/src/contracts/process/processCaptureExample.ts new file mode 100644 index 0000000000..3288fdac1d --- /dev/null +++ b/src/contracts/process/processCaptureExample.ts @@ -0,0 +1,2 @@ +/** Minimal valid process capture retained as a public contract example. */ +export { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../domain/process/processCaptureExample.js"; diff --git a/src/contracts/processCaptureExample.ts b/src/contracts/processCaptureExample.ts deleted file mode 100644 index 5aed2939c6..0000000000 --- a/src/contracts/processCaptureExample.ts +++ /dev/null @@ -1,2 +0,0 @@ -/** Minimal valid process capture retained as a public contract example. */ -export { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../domain/processCaptureExample.js"; diff --git a/src/contracts/sessionToolSchemas.ts b/src/contracts/sessionToolSchemas.ts index 390709974f..39d444d0d0 100644 --- a/src/contracts/sessionToolSchemas.ts +++ b/src/contracts/sessionToolSchemas.ts @@ -6,8 +6,8 @@ import { callPathInputSchema } from "../domain/callPath.js"; import { changedBehaviorInputSchema } from "../domain/changedBehavior.js"; import { functionComparisonInputSchema } from "../domain/functionComparison.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; -import { processScenarioSchema } from "../domain/processCapture.js"; -import { processTraceSpecificationSchema } from "../domain/processTraceComparison.js"; +import { processScenarioSchema } from "../domain/process/processCapture.js"; +import { processTraceSpecificationSchema } from "../domain/process/processTraceComparison.js"; import { recordUnknownInputSchema } from "../domain/residualUnknown.js"; import { reconstructionVerificationInputSchema } from "../domain/reconstructionVerification.js"; import { staticRuntimeCorrelationInputSchema } from "../domain/staticRuntimeCorrelation.js"; diff --git a/src/contracts/toolOutputSchemaGroups.ts b/src/contracts/toolOutputSchemaGroups.ts index d939ff2379..522b0e3219 100644 --- a/src/contracts/toolOutputSchemaGroups.ts +++ b/src/contracts/toolOutputSchemaGroups.ts @@ -15,7 +15,7 @@ import { evidenceBundleSchema } from "../domain/evidenceBundle.js"; import { processCaptureComparisonSchema, processCaptureSchema, -} from "../domain/processCapture.js"; +} from "../domain/process/processCapture.js"; import { functionInstructionWindowSchema, referenceKindSchema, diff --git a/src/domain/changedBehavior.ts b/src/domain/changedBehavior.ts index ba46372b9d..c6d400540d 100644 --- a/src/domain/changedBehavior.ts +++ b/src/domain/changedBehavior.ts @@ -7,13 +7,13 @@ import { functionComparisonResultSchema } from "./functionComparison.js"; import { PROCESS_PROVIDER, isProcessEvidenceProvider, -} from "./processEvidenceProvider.js"; +} from "./process/processEvidenceProvider.js"; import { comparisonStatusSchema, deriveProcessComparisonStatus, PROCESS_COMPARISON_DIMENSIONS, processCaptureComparisonSchema, -} from "./processCapture.js"; +} from "./process/processCapture.js"; import { prefixedDigestSchema } from "./../domain/digests.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); diff --git a/src/domain/inputIssueProjection.test.ts b/src/domain/inputIssueProjection.test.ts index 13967a36b9..45a241d9ee 100644 --- a/src/domain/inputIssueProjection.test.ts +++ b/src/domain/inputIssueProjection.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from "vitest"; import { z } from "zod"; import { projectInputIssues } from "./inputIssueProjection.js"; -import { processScenarioSchema } from "./processScenario.js"; +import { processScenarioSchema } from "./process/processScenario.js"; describe("input issue projection", () => { it("preserves static regex guidance without echoing the rejected value", () => { diff --git a/src/domain/eventProcessTree.fixture.ts b/src/domain/process/eventProcessTree.fixture.ts similarity index 100% rename from src/domain/eventProcessTree.fixture.ts rename to src/domain/process/eventProcessTree.fixture.ts diff --git a/src/domain/eventProcessTree.test.ts b/src/domain/process/eventProcessTree.test.ts similarity index 100% rename from src/domain/eventProcessTree.test.ts rename to src/domain/process/eventProcessTree.test.ts diff --git a/src/domain/eventProcessTree.ts b/src/domain/process/eventProcessTree.ts similarity index 100% rename from src/domain/eventProcessTree.ts rename to src/domain/process/eventProcessTree.ts diff --git a/src/domain/processCapture.comparison.test.ts b/src/domain/process/processCapture.comparison.test.ts similarity index 100% rename from src/domain/processCapture.comparison.test.ts rename to src/domain/process/processCapture.comparison.test.ts diff --git a/src/domain/processCapture.fixture.ts b/src/domain/process/processCapture.fixture.ts similarity index 100% rename from src/domain/processCapture.fixture.ts rename to src/domain/process/processCapture.fixture.ts diff --git a/src/domain/processCapture.traceProjection.test.ts b/src/domain/process/processCapture.traceProjection.test.ts similarity index 100% rename from src/domain/processCapture.traceProjection.test.ts rename to src/domain/process/processCapture.traceProjection.test.ts diff --git a/src/domain/processCapture.ts b/src/domain/process/processCapture.ts similarity index 99% rename from src/domain/processCapture.ts rename to src/domain/process/processCapture.ts index 385d25c43a..0079ef5c4e 100644 --- a/src/domain/processCapture.ts +++ b/src/domain/process/processCapture.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { jsonValueSchema } from "./jsonValue.js"; +import { jsonValueSchema } from "../jsonValue.js"; import { normalizationSchema } from "./processScenario.js"; import { collectProcessCaptureIssues } from "./processCaptureValidation.js"; diff --git a/src/domain/processCapture.validation.test.ts b/src/domain/process/processCapture.validation.test.ts similarity index 100% rename from src/domain/processCapture.validation.test.ts rename to src/domain/process/processCapture.validation.test.ts diff --git a/src/domain/processCaptureExample.ts b/src/domain/process/processCaptureExample.ts similarity index 97% rename from src/domain/processCaptureExample.ts rename to src/domain/process/processCaptureExample.ts index 72bc2e47f6..dc63cf54af 100644 --- a/src/domain/processCaptureExample.ts +++ b/src/domain/process/processCaptureExample.ts @@ -1,4 +1,4 @@ -import type { JsonValue } from "./jsonValue.js"; +import type { JsonValue } from "../jsonValue.js"; import { digestProcessCommitment } from "./processCapture.js"; const normalization = { diff --git a/src/domain/processCaptureParsing.ts b/src/domain/process/processCaptureParsing.ts similarity index 100% rename from src/domain/processCaptureParsing.ts rename to src/domain/process/processCaptureParsing.ts diff --git a/src/domain/processCaptureValidation.ts b/src/domain/process/processCaptureValidation.ts similarity index 100% rename from src/domain/processCaptureValidation.ts rename to src/domain/process/processCaptureValidation.ts diff --git a/src/domain/processComparison.ts b/src/domain/process/processComparison.ts similarity index 99% rename from src/domain/processComparison.ts rename to src/domain/process/processComparison.ts index 7e69e0ae34..b6e5a8cc0a 100644 --- a/src/domain/processComparison.ts +++ b/src/domain/process/processComparison.ts @@ -2,7 +2,7 @@ import canonicalize from "canonicalize"; import { z } from "zod"; import type { ProcessCapture } from "./processCapture.js"; -import { jsonValueSchema } from "./jsonValue.js"; +import { jsonValueSchema } from "../jsonValue.js"; import { compareProcessTraces, processTraceOutcomesDiffer, diff --git a/src/domain/processEvidenceProvider.test.ts b/src/domain/process/processEvidenceProvider.test.ts similarity index 100% rename from src/domain/processEvidenceProvider.test.ts rename to src/domain/process/processEvidenceProvider.test.ts diff --git a/src/domain/processEvidenceProvider.ts b/src/domain/process/processEvidenceProvider.ts similarity index 90% rename from src/domain/processEvidenceProvider.ts rename to src/domain/process/processEvidenceProvider.ts index 233d958919..cd05abe076 100644 --- a/src/domain/processEvidenceProvider.ts +++ b/src/domain/process/processEvidenceProvider.ts @@ -1,4 +1,4 @@ -import type { EvidenceProvider } from "./evidence.js"; +import type { EvidenceProvider } from "../evidence.js"; /** Canonical provider identity for controlled process capture Evidence. */ export const PROCESS_PROVIDER = { diff --git a/src/domain/processObservation.test.ts b/src/domain/process/processObservation.test.ts similarity index 100% rename from src/domain/processObservation.test.ts rename to src/domain/process/processObservation.test.ts diff --git a/src/domain/processObservation.ts b/src/domain/process/processObservation.ts similarity index 98% rename from src/domain/processObservation.ts rename to src/domain/process/processObservation.ts index 95d6fc9e9c..167d36ec5f 100644 --- a/src/domain/processObservation.ts +++ b/src/domain/process/processObservation.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -import { jsonValueSchema, type JsonValue } from "./jsonValue.js"; +import { jsonValueSchema, type JsonValue } from "../jsonValue.js"; import type { UnverifiedProcessCapture } from "./processCapture.js"; /** Process-capture observation families shared by live drivers and trace assertions. */ diff --git a/src/domain/processScenario.test.ts b/src/domain/process/processScenario.test.ts similarity index 100% rename from src/domain/processScenario.test.ts rename to src/domain/process/processScenario.test.ts diff --git a/src/domain/processScenario.ts b/src/domain/process/processScenario.ts similarity index 100% rename from src/domain/processScenario.ts rename to src/domain/process/processScenario.ts diff --git a/src/domain/processTraceAdapters.test.ts b/src/domain/process/processTraceAdapters.test.ts similarity index 100% rename from src/domain/processTraceAdapters.test.ts rename to src/domain/process/processTraceAdapters.test.ts diff --git a/src/domain/processTraceComparison.fixture.ts b/src/domain/process/processTraceComparison.fixture.ts similarity index 100% rename from src/domain/processTraceComparison.fixture.ts rename to src/domain/process/processTraceComparison.fixture.ts diff --git a/src/domain/processTraceComparison.test.ts b/src/domain/process/processTraceComparison.test.ts similarity index 100% rename from src/domain/processTraceComparison.test.ts rename to src/domain/process/processTraceComparison.test.ts diff --git a/src/domain/processTraceComparison.ts b/src/domain/process/processTraceComparison.ts similarity index 100% rename from src/domain/processTraceComparison.ts rename to src/domain/process/processTraceComparison.ts diff --git a/src/domain/processTraceDimensionProjection.ts b/src/domain/process/processTraceDimensionProjection.ts similarity index 100% rename from src/domain/processTraceDimensionProjection.ts rename to src/domain/process/processTraceDimensionProjection.ts diff --git a/src/domain/processTraceEvaluation.ts b/src/domain/process/processTraceEvaluation.ts similarity index 99% rename from src/domain/processTraceEvaluation.ts rename to src/domain/process/processTraceEvaluation.ts index bd4569ffca..5b61cb1c0b 100644 --- a/src/domain/processTraceEvaluation.ts +++ b/src/domain/process/processTraceEvaluation.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -import type { JsonValue } from "./jsonValue.js"; +import type { JsonValue } from "../jsonValue.js"; import type { ProcessCapture } from "./processCapture.js"; import { processObservationLocationSchema, diff --git a/src/domain/processTraceSpecification.test.ts b/src/domain/process/processTraceSpecification.test.ts similarity index 100% rename from src/domain/processTraceSpecification.test.ts rename to src/domain/process/processTraceSpecification.test.ts diff --git a/src/domain/processTraceSpecification.ts b/src/domain/process/processTraceSpecification.ts similarity index 99% rename from src/domain/processTraceSpecification.ts rename to src/domain/process/processTraceSpecification.ts index 75e129e477..5c70dc4a2f 100644 --- a/src/domain/processTraceSpecification.ts +++ b/src/domain/process/processTraceSpecification.ts @@ -1,7 +1,7 @@ import canonicalize from "canonicalize"; import { z } from "zod"; -import { jsonValueSchema } from "./jsonValue.js"; +import { jsonValueSchema } from "../jsonValue.js"; import { comparableProcessObservationPayload, processObservationSourceSchema, diff --git a/src/domain/reconstructionVerification.test.ts b/src/domain/reconstructionVerification.test.ts index a2a8573d62..b09a977d5e 100644 --- a/src/domain/reconstructionVerification.test.ts +++ b/src/domain/reconstructionVerification.test.ts @@ -7,7 +7,7 @@ import { verifyReconstruction, } from "./reconstructionVerification.js"; import type { JsonValue } from "./jsonValue.js"; -import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "./processCapture.fixture.js"; +import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "./process/processCapture.fixture.js"; import { reconstructionSpecificationSchema } from "./reconstructionVerificationSchemas.js"; import { ARTIFACT_COMPARISON_EXAMPLE } from "../contracts/artifactComparisonExample.js"; import { createResidualUnknown } from "./residualUnknown.js"; diff --git a/src/domain/reconstructionVerification.ts b/src/domain/reconstructionVerification.ts index 1900c93bea..a4258832aa 100644 --- a/src/domain/reconstructionVerification.ts +++ b/src/domain/reconstructionVerification.ts @@ -12,14 +12,14 @@ import { functionComparisonResultSchema } from "./functionComparison.js"; import { PROCESS_PROVIDER, isProcessEvidenceProvider, -} from "./processEvidenceProvider.js"; +} from "./process/processEvidenceProvider.js"; import { functionDossierSchema } from "./hopperValues.js"; import { deriveProcessComparisonStatus, PROCESS_COMPARISON_DIMENSIONS, processCaptureComparisonSchema, processCaptureSchema, -} from "./processCapture.js"; +} from "./process/processCapture.js"; import { reconstructionClaimResultSchema, reconstructionSpecificationSchema, diff --git a/src/domain/reconstructionVerificationSchemas.ts b/src/domain/reconstructionVerificationSchemas.ts index 023cd3b11c..4ce88ba7a0 100644 --- a/src/domain/reconstructionVerificationSchemas.ts +++ b/src/domain/reconstructionVerificationSchemas.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { digestSchema } from "./../domain/digests.js"; import { prefixedDigestSchema } from "./../domain/digests.js"; -import { PROCESS_COMPARISON_DIMENSIONS } from "./processComparison.js"; +import { PROCESS_COMPARISON_DIMENSIONS } from "./process/processComparison.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); const unknownIdSchema = prefixedDigestSchema("unk"); diff --git a/src/domain/staticRuntimeCorrelation.ts b/src/domain/staticRuntimeCorrelation.ts index 69d36b8553..d5558ad277 100644 --- a/src/domain/staticRuntimeCorrelation.ts +++ b/src/domain/staticRuntimeCorrelation.ts @@ -10,13 +10,13 @@ import { functionComparisonResultSchema } from "./functionComparison.js"; import { PROCESS_PROVIDER, isProcessEvidenceProvider, -} from "./processEvidenceProvider.js"; +} from "./process/processEvidenceProvider.js"; import type { JsonValue } from "./jsonValue.js"; import { comparisonStatusSchema, processCaptureComparisonSchema, -} from "./processCapture.js"; -import { PROCESS_COMPARISON_DIMENSIONS } from "./processComparison.js"; +} from "./process/processCapture.js"; +import { PROCESS_COMPARISON_DIMENSIONS } from "./process/processComparison.js"; import { prefixedDigestSchema } from "./../domain/digests.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); diff --git a/src/application/FilesystemSnapshot.test.ts b/src/process/capture/FilesystemSnapshot.test.ts similarity index 100% rename from src/application/FilesystemSnapshot.test.ts rename to src/process/capture/FilesystemSnapshot.test.ts diff --git a/src/application/FilesystemSnapshot.ts b/src/process/capture/FilesystemSnapshot.ts similarity index 98% rename from src/application/FilesystemSnapshot.ts rename to src/process/capture/FilesystemSnapshot.ts index 4fbfe8c944..aaf15fda82 100644 --- a/src/application/FilesystemSnapshot.ts +++ b/src/process/capture/FilesystemSnapshot.ts @@ -2,7 +2,10 @@ import { createHash } from "node:crypto"; import { constants as fsConstants } from "node:fs"; import { lstat, open, readdir, readlink } from "node:fs/promises"; import { dirname, join, relative, resolve } from "node:path"; -import type { FileState, ProcessScenario } from "../domain/processCapture.js"; +import type { + FileState, + ProcessScenario, +} from "../../domain/process/processCapture.js"; import type { Stats } from "node:fs"; export interface SnapshotResult { diff --git a/src/application/ProcessCaptureCapability.ts b/src/process/capture/ProcessCaptureCapability.ts similarity index 100% rename from src/application/ProcessCaptureCapability.ts rename to src/process/capture/ProcessCaptureCapability.ts diff --git a/src/application/ProcessCaptureEnvironment.ts b/src/process/capture/ProcessCaptureEnvironment.ts similarity index 90% rename from src/application/ProcessCaptureEnvironment.ts rename to src/process/capture/ProcessCaptureEnvironment.ts index 1414349cdb..af4d592f6b 100644 --- a/src/application/ProcessCaptureEnvironment.ts +++ b/src/process/capture/ProcessCaptureEnvironment.ts @@ -1,4 +1,4 @@ -import type { ProcessScenario } from "../domain/processCapture.js"; +import type { ProcessScenario } from "../../domain/process/processCapture.js"; interface ProcessCaptureEnvironmentOptions { readonly scenario: ProcessScenario; diff --git a/src/application/ProcessCaptureError.test.ts b/src/process/capture/ProcessCaptureError.test.ts similarity index 92% rename from src/application/ProcessCaptureError.test.ts rename to src/process/capture/ProcessCaptureError.test.ts index 3dedc42600..d554d8ee89 100644 --- a/src/application/ProcessCaptureError.test.ts +++ b/src/process/capture/ProcessCaptureError.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; +import { projectAnalysisError } from "../../domain/analysisErrorProjection.js"; import { ProcessCaptureError, processCaptureCancelled, diff --git a/src/application/ProcessCaptureError.ts b/src/process/capture/ProcessCaptureError.ts similarity index 95% rename from src/application/ProcessCaptureError.ts rename to src/process/capture/ProcessCaptureError.ts index da57679abe..97d02ff6b5 100644 --- a/src/application/ProcessCaptureError.ts +++ b/src/process/capture/ProcessCaptureError.ts @@ -1,4 +1,4 @@ -import { AnalysisError } from "../domain/analysisErrorBase.js"; +import { AnalysisError } from "../../domain/analysisErrorBase.js"; interface ProcessCaptureErrorOptions extends ErrorOptions { readonly userMessage?: string; diff --git a/src/application/ProcessCaptureJournal.test.ts b/src/process/capture/ProcessCaptureJournal.test.ts similarity index 100% rename from src/application/ProcessCaptureJournal.test.ts rename to src/process/capture/ProcessCaptureJournal.test.ts diff --git a/src/application/ProcessCaptureJournal.ts b/src/process/capture/ProcessCaptureJournal.ts similarity index 98% rename from src/application/ProcessCaptureJournal.ts rename to src/process/capture/ProcessCaptureJournal.ts index a40f11ac36..027d193c47 100644 --- a/src/application/ProcessCaptureJournal.ts +++ b/src/process/capture/ProcessCaptureJournal.ts @@ -5,7 +5,7 @@ import type { ProcessCaptureEventJournalEntry, ProcessScenario, RecordProcessCaptureEvent, -} from "../domain/processCapture.js"; +} from "../../domain/process/processCapture.js"; import { normalizeProcessElapsedTime, normalizeProcessText, diff --git a/src/application/ProcessCaptureLifecycle.ts b/src/process/capture/ProcessCaptureLifecycle.ts similarity index 97% rename from src/application/ProcessCaptureLifecycle.ts rename to src/process/capture/ProcessCaptureLifecycle.ts index 5810f5461f..982bab4309 100644 --- a/src/application/ProcessCaptureLifecycle.ts +++ b/src/process/capture/ProcessCaptureLifecycle.ts @@ -16,18 +16,18 @@ import type { ProcessCaptureEventJournalEntry, RecordProcessCaptureEvent, TerminalFrame, -} from "../domain/processCapture.js"; +} from "../../domain/process/processCapture.js"; import { digestProcessCommitment, processComparisonContract, processScenarioCommitment, -} from "../domain/processCapture.js"; -import { PRODUCT_IDENTITY } from "../identity.js"; +} from "../../domain/process/processCapture.js"; +import { PRODUCT_IDENTITY } from "../../identity.js"; import type { SnapshotResult } from "./FilesystemSnapshot.js"; import { snapshotRoots } from "./FilesystemSnapshot.js"; import { classifyFilesystemEffects } from "./ProcessFilesystemEffects.js"; -import { cleanupOwnedProcessGroup } from "../process/ProcessOwnership.js"; -import { observeOwnedProcessGroup } from "../process/ProcessOwnershipObservation.js"; +import { cleanupOwnedProcessGroup } from "../ProcessOwnership.js"; +import { observeOwnedProcessGroup } from "../ProcessOwnershipObservation.js"; import { ProcessCaptureError } from "./ProcessCaptureError.js"; import { assertNotCancelled } from "./ProcessScenarioRuntimeValidation.js"; import { @@ -35,7 +35,7 @@ import { normalizeProcessSamples, normalizeProcessText, } from "./ProcessNormalization.js"; -import { PROCESS_PROVIDER } from "./ProcessEvidence.js"; +import { PROCESS_PROVIDER } from "../../domain/process/processEvidenceProvider.js"; import { TerminalRenderer } from "./TerminalRenderer.js"; import { scheduleProcessInterval, type ProcessTimer } from "./ProcessTimer.js"; diff --git a/src/application/ProcessCaptureObservation.test.ts b/src/process/capture/ProcessCaptureObservation.test.ts similarity index 98% rename from src/application/ProcessCaptureObservation.test.ts rename to src/process/capture/ProcessCaptureObservation.test.ts index 119b153cca..3cc3d0b2cf 100644 --- a/src/application/ProcessCaptureObservation.test.ts +++ b/src/process/capture/ProcessCaptureObservation.test.ts @@ -10,8 +10,8 @@ import { parseProcessCapture, parseProcessScenario, type ProcessCapture, -} from "../domain/processCapture.js"; -import { emptyProcessCapture as emptyCapture } from "../domain/processCapture.fixture.js"; +} from "../../domain/process/processCapture.js"; +import { emptyProcessCapture as emptyCapture } from "../../domain/process/processCapture.fixture.js"; const base = { executable: "/bin/sh", diff --git a/src/application/ProcessFilesystemEffects.ts b/src/process/capture/ProcessFilesystemEffects.ts similarity index 96% rename from src/application/ProcessFilesystemEffects.ts rename to src/process/capture/ProcessFilesystemEffects.ts index a4c7112c1b..59befa226a 100644 --- a/src/application/ProcessFilesystemEffects.ts +++ b/src/process/capture/ProcessFilesystemEffects.ts @@ -1,7 +1,7 @@ import type { FileState, FilesystemCheckpoint, -} from "../domain/processCapture.js"; +} from "../../domain/process/processCapture.js"; /** Classify path-stable filesystem effects between two bounded states. */ export const classifyFilesystemEffects = ( diff --git a/src/application/ProcessHarness.test.ts b/src/process/capture/ProcessHarness.test.ts similarity index 83% rename from src/application/ProcessHarness.test.ts rename to src/process/capture/ProcessHarness.test.ts index 8c2d38bfc8..80df399117 100644 --- a/src/application/ProcessHarness.test.ts +++ b/src/process/capture/ProcessHarness.test.ts @@ -1,11 +1,11 @@ import { expect, it } from "vitest"; -import { processScenarioSchema } from "../domain/processScenario.js"; -import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; +import { processScenarioSchema } from "../../domain/process/processScenario.js"; +import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js"; import { captureProcessScenario } from "./ProcessHarness.js"; import { settleProcessCaptureJournal } from "./ProcessCaptureLifecycle.js"; -import { processCaptureSchema } from "../domain/processCapture.js"; -import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../domain/processCapture.fixture.js"; -import { projectAnalysisError } from "../domain/analysisErrorProjection.js"; +import { processCaptureSchema } from "../../domain/process/processCapture.js"; +import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../domain/process/processCapture.fixture.js"; +import { projectAnalysisError } from "../../domain/analysisErrorProjection.js"; it("rejects legacy replay output instead of silently discarding it", () => { expect( diff --git a/src/application/ProcessHarness.ts b/src/process/capture/ProcessHarness.ts similarity index 96% rename from src/application/ProcessHarness.ts rename to src/process/capture/ProcessHarness.ts index 94609cc8e2..813779a678 100644 --- a/src/application/ProcessHarness.ts +++ b/src/process/capture/ProcessHarness.ts @@ -8,11 +8,11 @@ import type { ProcessScenario, RecordProcessCaptureEvent, TerminalFrame, -} from "../domain/processCapture.js"; -import { parseProcessCapture } from "../domain/processCapture.js"; -import { err, ok, type Result } from "../domain/result.js"; -import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js"; -import { type AnalysisError } from "../domain/analysisErrorBase.js"; +} from "../../domain/process/processCapture.js"; +import { parseProcessCapture } from "../../domain/process/processCapture.js"; +import { err, ok, type Result } from "../../domain/result.js"; +import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js"; +import { type AnalysisError } from "../../domain/analysisErrorBase.js"; import { ProcessCaptureError, processCaptureCancelled, @@ -23,7 +23,7 @@ import { snapshotRoots } from "./FilesystemSnapshot.js"; import { TerminalRenderer } from "./TerminalRenderer.js"; import type { ProcessTimer } from "./ProcessTimer.js"; import { normalizeProcessText } from "./ProcessNormalization.js"; -import { selectCapturedProcessGroupIds } from "../process/ProcessOwnershipProcessTree.js"; +import { selectCapturedProcessGroupIds } from "../ProcessOwnershipProcessTree.js"; import { awaitTerminalExit, buildCaptureResult, diff --git a/src/application/ProcessNormalization.test.ts b/src/process/capture/ProcessNormalization.test.ts similarity index 98% rename from src/application/ProcessNormalization.test.ts rename to src/process/capture/ProcessNormalization.test.ts index 9baf1e4b64..d7d0101c4d 100644 --- a/src/application/ProcessNormalization.test.ts +++ b/src/process/capture/ProcessNormalization.test.ts @@ -4,7 +4,7 @@ import { normalizeProcessSamples } from "./ProcessNormalization.js"; import { parseProcessScenario, type ProcessSample, -} from "../domain/processCapture.js"; +} from "../../domain/process/processCapture.js"; const rootPid = 41_010; const samples = Object.freeze( diff --git a/src/application/ProcessNormalization.ts b/src/process/capture/ProcessNormalization.ts similarity index 98% rename from src/application/ProcessNormalization.ts rename to src/process/capture/ProcessNormalization.ts index aff05d33af..347c0e5cfb 100644 --- a/src/application/ProcessNormalization.ts +++ b/src/process/capture/ProcessNormalization.ts @@ -1,7 +1,7 @@ import type { ProcessSample, ProcessScenario, -} from "../domain/processCapture.js"; +} from "../../domain/process/processCapture.js"; /** Bucket one elapsed process-capture timestamp under scenario normalization. */ export const normalizeProcessElapsedTime = ( diff --git a/src/application/ProcessSampling.ts b/src/process/capture/ProcessSampling.ts similarity index 98% rename from src/application/ProcessSampling.ts rename to src/process/capture/ProcessSampling.ts index b559a8f7ac..e8ee7cefb4 100644 --- a/src/application/ProcessSampling.ts +++ b/src/process/capture/ProcessSampling.ts @@ -2,9 +2,9 @@ import { readFile, readdir } from "node:fs/promises"; import type { ProcessSample, RecordProcessCaptureEvent, -} from "../domain/processCapture.js"; -import { execFileOutput } from "../process/ExecFileOutput.js"; -import { readProcessRunId } from "../process/ProcessOwnership.js"; +} from "../../domain/process/processCapture.js"; +import { execFileOutput } from "../ExecFileOutput.js"; +import { readProcessRunId } from "../ProcessOwnership.js"; const PROC_READ_CONCURRENCY = 64; interface ProcessRow { diff --git a/src/application/ProcessScenarioRuntimeValidation.test.ts b/src/process/capture/ProcessScenarioRuntimeValidation.test.ts similarity index 93% rename from src/application/ProcessScenarioRuntimeValidation.test.ts rename to src/process/capture/ProcessScenarioRuntimeValidation.test.ts index 922df07eeb..5e70a226ce 100644 --- a/src/application/ProcessScenarioRuntimeValidation.test.ts +++ b/src/process/capture/ProcessScenarioRuntimeValidation.test.ts @@ -7,7 +7,7 @@ import { resolveExecutable, resolveProcessScenarioRuntimePaths, } from "./ProcessScenarioRuntimeValidation.js"; -import { parseProcessScenario } from "../domain/processCapture.js"; +import { parseProcessScenario } from "../../domain/process/processCapture.js"; it("preserves the caller-selected executable symlink for process invocation", async () => { const root = await mkdtemp(join(tmpdir(), "rea-process-executable-alias-")); diff --git a/src/application/ProcessScenarioRuntimeValidation.ts b/src/process/capture/ProcessScenarioRuntimeValidation.ts similarity index 97% rename from src/application/ProcessScenarioRuntimeValidation.ts rename to src/process/capture/ProcessScenarioRuntimeValidation.ts index 59cddcf24a..e71e16d1e5 100644 --- a/src/application/ProcessScenarioRuntimeValidation.ts +++ b/src/process/capture/ProcessScenarioRuntimeValidation.ts @@ -2,7 +2,7 @@ import { access, realpath, stat } from "node:fs/promises"; import { constants as fsConstants } from "node:fs"; import { delimiter, isAbsolute, join, resolve } from "node:path"; -import type { ProcessScenario } from "../domain/processCapture.js"; +import type { ProcessScenario } from "../../domain/process/processCapture.js"; import { ProcessCaptureError, processCaptureCancelled, diff --git a/src/application/ProcessTimer.test.ts b/src/process/capture/ProcessTimer.test.ts similarity index 100% rename from src/application/ProcessTimer.test.ts rename to src/process/capture/ProcessTimer.test.ts diff --git a/src/application/ProcessTimer.ts b/src/process/capture/ProcessTimer.ts similarity index 100% rename from src/application/ProcessTimer.ts rename to src/process/capture/ProcessTimer.ts diff --git a/src/application/TerminalRenderer.ts b/src/process/capture/TerminalRenderer.ts similarity index 98% rename from src/application/TerminalRenderer.ts rename to src/process/capture/TerminalRenderer.ts index 44bf4d5809..0a0492008d 100644 --- a/src/application/TerminalRenderer.ts +++ b/src/process/capture/TerminalRenderer.ts @@ -3,7 +3,7 @@ import { createRequire } from "node:module"; import type { RecordProcessCaptureEvent, RenderedTerminalFrame, -} from "../domain/processCapture.js"; +} from "../../domain/process/processCapture.js"; const require = createRequire(import.meta.url); // SAFETY: both pinned xterm packages publish CommonJS at runtime and matching declarations. diff --git a/src/server/promptCompletion.ts b/src/server/promptCompletion.ts index b02c5a35ba..e82e1f0062 100644 --- a/src/server/promptCompletion.ts +++ b/src/server/promptCompletion.ts @@ -7,7 +7,7 @@ import type { BinarySessionPort } from "../application/binary/BinarySession.js"; import type { PromptCompletionKind } from "../contracts/promptContracts.js"; import { artifactInventoryResultSchema } from "../domain/artifactGraph.js"; import { artifactInspectionResultSchema } from "../domain/artifactInspection.js"; -import { processCaptureSchema } from "../domain/processCapture.js"; +import { processCaptureSchema } from "../domain/process/processCapture.js"; const documentListSchema = z.array(z.string().min(1)); const providerStatusSchema = z.object({ diff --git a/src/server/registerProcessComparisonTool.ts b/src/server/registerProcessComparisonTool.ts index 8685283229..3b47d9c423 100644 --- a/src/server/registerProcessComparisonTool.ts +++ b/src/server/registerProcessComparisonTool.ts @@ -13,7 +13,7 @@ import { jsonValueSchema } from "../domain/jsonValue.js"; import { compareProcessCaptures, parseProcessCapture, -} from "../domain/processCapture.js"; +} from "../domain/process/processCapture.js"; import type { RecordUnknownInput } from "../domain/residualUnknown.js"; import { err } from "../domain/result.js"; import { recordDerivedEvidence } from "./recordDerivedEvidence.js"; diff --git a/src/server/registerSessionTools.ts b/src/server/registerSessionTools.ts index fd601bfcfb..fb6feb548f 100644 --- a/src/server/registerSessionTools.ts +++ b/src/server/registerSessionTools.ts @@ -7,14 +7,14 @@ import { } from "../application/AnalysisContextQueries.js"; import { readAnalysisSnapshot } from "../application/binary/AnalysisSnapshotFiles.js"; import type { BinarySessionPort } from "../application/binary/BinarySession.js"; -import { createProcessCaptureEvidence } from "../application/ProcessEvidence.js"; -import { captureProcessScenario } from "../application/ProcessHarness.js"; +import { createProcessCaptureEvidence } from "../application/process/ProcessEvidence.js"; +import { captureProcessScenario } from "../process/capture/ProcessHarness.js"; import { toolContract } from "../contracts/toolContracts.js"; import type { AnalysisSnapshot } from "../domain/analysisSnapshot.js"; import { UnknownRegistryError } from "../domain/unknownRegistryError.js"; import { type AnalysisError } from "../domain/analysisErrorBase.js"; import type { Evidence } from "../domain/evidence.js"; -import type { ProcessCapture } from "../domain/processCapture.js"; +import type { ProcessCapture } from "../domain/process/processCapture.js"; import { ok, type Result } from "../domain/result.js"; import type { Logger } from "../logger.js"; import { mcpProgressReporter } from "./mcpProgress.js"; diff --git a/src/server/sessionToolPolicies.ts b/src/server/sessionToolPolicies.ts index be151c59e1..b1725b0975 100644 --- a/src/server/sessionToolPolicies.ts +++ b/src/server/sessionToolPolicies.ts @@ -1,4 +1,4 @@ -export { PROCESS_PROVIDER } from "../application/ProcessEvidence.js"; +export { PROCESS_PROVIDER } from "../application/process/ProcessEvidence.js"; export { ARTIFACT_COMPARISON_PROVIDER, BUNDLE_COMPARISON_PROVIDER, diff --git a/tests/boundary/cli/processCli.test.ts b/tests/boundary/cli/processCli.test.ts index 2472b3a5b4..fd796634e6 100644 --- a/tests/boundary/cli/processCli.test.ts +++ b/tests/boundary/cli/processCli.test.ts @@ -13,9 +13,9 @@ import { captureProcessScenarioFile, compareProcessEvidenceFiles, projectProcessCliError, -} from "../../../src/application/ProcessCli.js"; +} from "../../../src/application/process/ProcessCli.js"; import { createEvidence } from "../../../src/domain/evidence.js"; -import { PROCESS_PROVIDER } from "../../../src/application/ProcessEvidence.js"; +import { PROCESS_PROVIDER } from "../../../src/application/process/ProcessEvidence.js"; const roots: string[] = []; const execFileAsync = promisify(execFile); diff --git a/tests/boundary/mcp/outputSchemaSemanticConstraints.test.ts b/tests/boundary/mcp/outputSchemaSemanticConstraints.test.ts index da1bddfa9e..84d87dfea3 100644 --- a/tests/boundary/mcp/outputSchemaSemanticConstraints.test.ts +++ b/tests/boundary/mcp/outputSchemaSemanticConstraints.test.ts @@ -8,14 +8,14 @@ import { z } from "zod"; import { toolContract } from "../../../src/contracts/toolContracts.js"; import { MANAGED_NATIVE_VERIFICATION_EXAMPLE } from "../../../src/contracts/managed/managedWorkflowExamples.js"; -import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../../src/domain/processCaptureExample.js"; +import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../../src/domain/process/processCaptureExample.js"; import { managedNativeVerificationInputSchema, managedNativeVerificationResultSchema, verifyManagedNativeBoundaries, } from "../../../src/domain/managed/managedNativeVerification.js"; import { nativeUiResultSchema } from "../../../src/domain/native/nativeUiObservation.js"; -import { processCaptureSchema } from "../../../src/domain/processCapture.js"; +import { processCaptureSchema } from "../../../src/domain/process/processCapture.js"; import { toolRegistrationOptions } from "../../../src/server/toolRegistrationOptions.js"; const record = (value: unknown): Record => { diff --git a/tests/boundary/mcp/processEvidenceIdentityMcp.test.ts b/tests/boundary/mcp/processEvidenceIdentityMcp.test.ts index 2567976faa..271ca2a7ad 100644 --- a/tests/boundary/mcp/processEvidenceIdentityMcp.test.ts +++ b/tests/boundary/mcp/processEvidenceIdentityMcp.test.ts @@ -5,14 +5,14 @@ import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; import { expect, it, onTestFinished } from "vitest"; import { z } from "zod"; -import { compareProcessEvidenceFiles } from "../../../src/application/ProcessCli.js"; -import { PROCESS_PROVIDER } from "../../../src/application/ProcessEvidence.js"; +import { compareProcessEvidenceFiles } from "../../../src/application/process/ProcessCli.js"; +import { PROCESS_PROVIDER } from "../../../src/application/process/ProcessEvidence.js"; import { FUNCTION_COMPARISON_EXAMPLE } from "../../../src/contracts/functionComparisonExample.js"; import { FUNCTION_COMPARISON_EVIDENCE, INVESTIGATION_EXAMPLES, } from "../../../src/contracts/investigationExamples.js"; -import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../../src/contracts/processCaptureExample.js"; +import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../../src/contracts/process/processCaptureExample.js"; import { findChangedBehavior } from "../../../src/domain/changedBehavior.js"; import { createEvidence, diff --git a/tests/boundary/mcp/processTraceAdaptersParity.test.ts b/tests/boundary/mcp/processTraceAdaptersParity.test.ts index 64b45a220a..d27f37e844 100644 --- a/tests/boundary/mcp/processTraceAdaptersParity.test.ts +++ b/tests/boundary/mcp/processTraceAdaptersParity.test.ts @@ -6,12 +6,12 @@ import { afterEach, describe, expect, it } from "vitest"; import { createTestBinarySession } from "../../fixtures/binarySession.js"; import type { AnalysisClient } from "../../../src/application/AnalysisProvider.js"; -import { compareProcessEvidenceFiles } from "../../../src/application/ProcessCli.js"; -import { PROCESS_PROVIDER } from "../../../src/application/ProcessEvidence.js"; -import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../../src/contracts/processCaptureExample.js"; +import { compareProcessEvidenceFiles } from "../../../src/application/process/ProcessCli.js"; +import { PROCESS_PROVIDER } from "../../../src/application/process/ProcessEvidence.js"; +import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../../src/contracts/process/processCaptureExample.js"; import { createEvidence, parseEvidence } from "../../../src/domain/evidence.js"; import { jsonValueSchema } from "../../../src/domain/jsonValue.js"; -import type { ProcessTraceSpecification } from "../../../src/domain/processTraceComparison.js"; +import type { ProcessTraceSpecification } from "../../../src/domain/process/processTraceComparison.js"; import { createServer } from "../../../src/server/createServer.js"; import { observed as ok } from "../../fixtures/analysisExecution.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; diff --git a/tests/boundary/mcp/serverUnknownsMcp.test.ts b/tests/boundary/mcp/serverUnknownsMcp.test.ts index 57000324cd..c08aedfd13 100644 --- a/tests/boundary/mcp/serverUnknownsMcp.test.ts +++ b/tests/boundary/mcp/serverUnknownsMcp.test.ts @@ -15,8 +15,8 @@ import { observed as ok } from "../../fixtures/analysisExecution.js"; import { createServer } from "../../../src/server/createServer.js"; import { createEvidence, parseEvidence } from "../../../src/domain/evidence.js"; import { parseEvidenceBundle } from "../../../src/domain/evidenceBundle.js"; -import { processCaptureSchema } from "../../../src/domain/processCapture.js"; -import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../../src/contracts/processCaptureExample.js"; +import { processCaptureSchema } from "../../../src/domain/process/processCapture.js"; +import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../../src/contracts/process/processCaptureExample.js"; import { jsonValueSchema } from "../../../src/domain/jsonValue.js"; import { PROCESS_PROVIDER } from "../../../src/server/sessionToolPolicies.js"; diff --git a/tests/boundary/mcp/sessionMcp.test.ts b/tests/boundary/mcp/sessionMcp.test.ts index 0f20b3a5fe..cc392308eb 100644 --- a/tests/boundary/mcp/sessionMcp.test.ts +++ b/tests/boundary/mcp/sessionMcp.test.ts @@ -15,7 +15,7 @@ import type { AnalysisProvider, CapabilityDescriptor, } from "../../../src/application/AnalysisProvider.js"; -import { probeProcessCaptureCapability } from "../../../src/application/ProcessHarness.js"; +import { probeProcessCaptureCapability } from "../../../src/process/capture/ProcessHarness.js"; import { observed as ok } from "../../fixtures/analysisExecution.js"; import { createServer } from "../../../src/server/createServer.js"; import { toolContract } from "../../../src/contracts/toolContracts.js"; diff --git a/tests/boundary/mcp/toolSchemaValidity.test.ts b/tests/boundary/mcp/toolSchemaValidity.test.ts index cffbc284a9..026e0dd201 100644 --- a/tests/boundary/mcp/toolSchemaValidity.test.ts +++ b/tests/boundary/mcp/toolSchemaValidity.test.ts @@ -6,7 +6,7 @@ import { z } from "zod"; import { TOOL_CONTRACTS } from "../../../src/contracts/toolContracts.js"; import { emptyArraySchema } from "../../../src/domain/emptyArraySchema.js"; -import { processScenarioSchema } from "../../../src/domain/processScenario.js"; +import { processScenarioSchema } from "../../../src/domain/process/processScenario.js"; import { GENERATED_MCP_TOOL_CATALOG } from "../../../src/generatedMcpToolCatalog.js"; import { toolRegistrationOptions } from "../../../src/server/toolRegistrationOptions.js"; diff --git a/src/application/ProcessEvidence.host.test.ts b/tests/boundary/process/ProcessEvidence.host.test.ts similarity index 67% rename from src/application/ProcessEvidence.host.test.ts rename to tests/boundary/process/ProcessEvidence.host.test.ts index d241463620..27300d44ea 100644 --- a/src/application/ProcessEvidence.host.test.ts +++ b/tests/boundary/process/ProcessEvidence.host.test.ts @@ -1,10 +1,10 @@ import { expect, it } from "vitest"; -import { emptyUnverifiedProcessCapture } from "../domain/processCapture.fixture.js"; -import { parseProcessCapture } from "../domain/processCapture.js"; -import { parseProcessScenario } from "../domain/processScenario.js"; -import { createProcessCaptureEvidence } from "./ProcessEvidence.js"; -import { observeSettlement } from "./ProcessCaptureLifecycle.js"; +import { emptyUnverifiedProcessCapture } from "../../../src/domain/process/processCapture.fixture.js"; +import { parseProcessCapture } from "../../../src/domain/process/processCapture.js"; +import { parseProcessScenario } from "../../../src/domain/process/processScenario.js"; +import { createProcessCaptureEvidence } from "../../../src/application/process/ProcessEvidence.js"; +import { observeSettlement } from "../../../src/process/capture/ProcessCaptureLifecycle.js"; it("stamps process Evidence from the capture manifest host", () => { const scenario = parseProcessScenario({ diff --git a/src/application/ProcessEvidence.test.ts b/tests/boundary/process/ProcessEvidence.test.ts similarity index 91% rename from src/application/ProcessEvidence.test.ts rename to tests/boundary/process/ProcessEvidence.test.ts index b286cdcf07..65d8b764c2 100644 --- a/src/application/ProcessEvidence.test.ts +++ b/tests/boundary/process/ProcessEvidence.test.ts @@ -1,18 +1,18 @@ import { expect, it } from "vitest"; -import { createProcessCaptureEvidence } from "./ProcessEvidence.js"; -import { createRunManifest } from "./ProcessCaptureLifecycle.js"; -import { emptyUnverifiedProcessCapture } from "../domain/processCapture.fixture.js"; +import { createProcessCaptureEvidence } from "../../../src/application/process/ProcessEvidence.js"; +import { createRunManifest } from "../../../src/process/capture/ProcessCaptureLifecycle.js"; +import { emptyUnverifiedProcessCapture } from "../../../src/domain/process/processCapture.fixture.js"; import { compareProcessCaptures, parseProcessCapture, -} from "../domain/processCapture.js"; +} from "../../../src/domain/process/processCapture.js"; import { digestProcessCommitment, parseProcessScenario, processComparisonContract, processScenarioCommitment, -} from "../domain/processScenario.js"; +} from "../../../src/domain/process/processScenario.js"; const captureEvidenceForSensitiveInput = (data: string) => { const scenario = parseProcessScenario({ diff --git a/tests/boundary/process/filesystemSnapshotFifoRace.test.ts b/tests/boundary/process/filesystemSnapshotFifoRace.test.ts index 14d0f77cbd..5843158e3b 100644 --- a/tests/boundary/process/filesystemSnapshotFifoRace.test.ts +++ b/tests/boundary/process/filesystemSnapshotFifoRace.test.ts @@ -23,7 +23,7 @@ it.skipIf(process.platform === "win32")( ); const snapshotModule = fileURLToPath( new URL( - "../../../dist/application/FilesystemSnapshot.js", + "../../../dist/process/capture/FilesystemSnapshot.js", import.meta.url, ), ); diff --git a/tests/boundary/process/processCaptureCapability.test.ts b/tests/boundary/process/processCaptureCapability.test.ts index 5a8e311506..375ca47065 100644 --- a/tests/boundary/process/processCaptureCapability.test.ts +++ b/tests/boundary/process/processCaptureCapability.test.ts @@ -4,7 +4,7 @@ import { processCaptureProbeFailureReason, processCaptureOwnershipUnavailableReason, probeProcessCaptureCapability, -} from "../../../src/application/ProcessCaptureCapability.js"; +} from "../../../src/process/capture/ProcessCaptureCapability.js"; describe("process capture capability diagnostics", () => { it("distinguishes missing native modules from runtime ABI mismatches", () => { diff --git a/tests/boundary/process/processCaptureCapability.ts b/tests/boundary/process/processCaptureCapability.ts index 4b345d7341..3773ff88f0 100644 --- a/tests/boundary/process/processCaptureCapability.ts +++ b/tests/boundary/process/processCaptureCapability.ts @@ -1,6 +1,6 @@ import { it } from "vitest"; -import { probeProcessCaptureCapability } from "../../../src/application/ProcessCaptureCapability.js"; +import { probeProcessCaptureCapability } from "../../../src/process/capture/ProcessCaptureCapability.js"; /** * Process-capture tests need real native PTY authority. Probing once at module diff --git a/tests/boundary/process/processCaptureLifecycle.test.ts b/tests/boundary/process/processCaptureLifecycle.test.ts index 23e1df4d4d..489866e96a 100644 --- a/tests/boundary/process/processCaptureLifecycle.test.ts +++ b/tests/boundary/process/processCaptureLifecycle.test.ts @@ -7,9 +7,9 @@ import { expect } from "vitest"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { itWithCaptureCapability } from "./processCaptureCapability.js"; -import { captureProcessScenario } from "../../../src/application/ProcessHarness.js"; -import { snapshotRoots } from "../../../src/application/FilesystemSnapshot.js"; -import { parseProcessScenario } from "../../../src/domain/processCapture.js"; +import { captureProcessScenario } from "../../../src/process/capture/ProcessHarness.js"; +import { snapshotRoots } from "../../../src/process/capture/FilesystemSnapshot.js"; +import { parseProcessScenario } from "../../../src/domain/process/processCapture.js"; const processFixture = fileURLToPath( new URL("../../fixtures/processFidelity.mjs", import.meta.url), diff --git a/tests/boundary/process/processCaptureNormalization.test.ts b/tests/boundary/process/processCaptureNormalization.test.ts index 4ff716b180..23730e6dc7 100644 --- a/tests/boundary/process/processCaptureNormalization.test.ts +++ b/tests/boundary/process/processCaptureNormalization.test.ts @@ -4,13 +4,13 @@ import { fileURLToPath } from "node:url"; import { expect, it } from "vitest"; import { z } from "zod"; -import { captureProcessScenario } from "../../../src/application/ProcessHarness.js"; -import { createProcessCaptureEvidence } from "../../../src/application/ProcessEvidence.js"; +import { captureProcessScenario } from "../../../src/process/capture/ProcessHarness.js"; +import { createProcessCaptureEvidence } from "../../../src/application/process/ProcessEvidence.js"; import { digestProcessCommitment, parseProcessCapture, parseProcessScenario, -} from "../../../src/domain/processCapture.js"; +} from "../../../src/domain/process/processCapture.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { itWithCaptureCapability } from "./processCaptureCapability.js"; diff --git a/tests/boundary/process/processCaptureTerminal.test.ts b/tests/boundary/process/processCaptureTerminal.test.ts index 028dd94fd7..500d83c6b2 100644 --- a/tests/boundary/process/processCaptureTerminal.test.ts +++ b/tests/boundary/process/processCaptureTerminal.test.ts @@ -6,8 +6,8 @@ import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { captureProcessScenario, probeProcessCaptureCapability, -} from "../../../src/application/ProcessHarness.js"; -import { parseProcessScenario } from "../../../src/domain/processCapture.js"; +} from "../../../src/process/capture/ProcessHarness.js"; +import { parseProcessScenario } from "../../../src/domain/process/processCapture.js"; it("captures one command's terminal output, selected files, and owned cleanup", async () => { const root = await createTestTempDirectory("rea-process-capture-"); diff --git a/tests/boundary/process/processHostIdentity.test.ts b/tests/boundary/process/processHostIdentity.test.ts index 816e78d043..6d89507368 100644 --- a/tests/boundary/process/processHostIdentity.test.ts +++ b/tests/boundary/process/processHostIdentity.test.ts @@ -1,10 +1,10 @@ import { expect, it } from "vitest"; -import { parseProcessScenario } from "../../../src/domain/processScenario.js"; +import { parseProcessScenario } from "../../../src/domain/process/processScenario.js"; import { createRunManifest, observeSettlement, -} from "../../../src/application/ProcessCaptureLifecycle.js"; +} from "../../../src/process/capture/ProcessCaptureLifecycle.js"; it("uses one selected host identity for manifest and settlement", async () => { const scenario = parseProcessScenario({ diff --git a/tests/conformance/contracts/analysisErrorProjection.test.ts b/tests/conformance/contracts/analysisErrorProjection.test.ts index 228cd7ca8f..74c6622cdc 100644 --- a/tests/conformance/contracts/analysisErrorProjection.test.ts +++ b/tests/conformance/contracts/analysisErrorProjection.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { ProcessCaptureError } from "../../../src/application/ProcessCaptureError.js"; +import { ProcessCaptureError } from "../../../src/process/capture/ProcessCaptureError.js"; import { analysisErrorProjectionSchema } from "../../../src/contracts/errorSchemas.js"; import { ArtifactOperationError } from "../../../src/domain/artifactOperationError.js"; import { EvidenceFileError } from "../../../src/domain/evidenceErrors.js"; diff --git a/tests/evaluation/moduleBoundaries.test.ts b/tests/evaluation/moduleBoundaries.test.ts index 8dca270636..37c008492b 100644 --- a/tests/evaluation/moduleBoundaries.test.ts +++ b/tests/evaluation/moduleBoundaries.test.ts @@ -8,6 +8,28 @@ import { describe, expect, it } from "vitest"; import { inspectModuleBoundaries } from "../../scripts/lib/module-boundaries.mjs"; import { createTestTempDirectory } from "../fixtures/temporaryDirectory.js"; +describe("process capture implementation ownership", () => { + it.each([ + ["../../application/process/ProcessEvidence.js", false], + ["../../composition/binary.js", false], + ["../../server/createServer.js", false], + ["../../cli.ts", false], + ["../../main.js", false], + ["../../domain/process/processEvidenceProvider.js", true], + ["../ProcessOwnership.js", true], + ["../../windows/WindowsOwnedProcess.js", true], + ["./TerminalRenderer.js", true], + ])("checks capture importing %s", (dependency, allowed) => { + const violations = inspectModuleBoundaries( + "src/process/capture/ProcessHarness.ts", + `import { value } from "${dependency}";`, + process.cwd(), + ); + if (allowed) expect(violations).toEqual([]); + else expect(violations).toMatchObject([{ boundary: "process-capture" }]); + }); +}); + describe("binary production construction ownership", () => { it.each([ "hopper/HopperProvider.js",