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 740e7f2a5..b27bb0ce7 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 2ce6471a4..e38761e73 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 5c310539f..740d7958e 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 362a4f367..1adbcbbbc 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 311fb5f0a..8b0649e4b 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 51d5957c6..e8b6d2dd6 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 a0c71738b..05b12b85f 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 da2e79f24..81ee5afc6 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 cf59d4109..8d9e1d665 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 e97764867..c79b451b4 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 b4a3f84ce..650dd75fa 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 f2bcd43d3..80838c194 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 3e95bed1d..dfd092c69 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 f108cf7fa..8769edad8 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 50cd033ca..516eec478 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 e68059b7c..af10e95c8 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 4aa57dca3..5c021bb15 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 c02cb2041..b37a6f183 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 72a61f721..752f58742 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 000000000..3288fdac1 --- /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 5aed2939c..000000000 --- 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 390709974..39d444d0d 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 d939ff237..522b0e321 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 ba46372b9..c6d400540 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 13967a36b..45a241d9e 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 385d25c43..0079ef5c4 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 72bc2e47f..dc63cf54a 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 7e69e0ae3..b6e5a8cc0 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 233d95891..cd05abe07 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 95d6fc9e9..167d36ec5 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 bd4569ffc..5b61cb1c0 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 75e129e47..5c70dc4a2 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 a2a8573d6..b09a977d5 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 1900c93be..a4258832a 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 023cd3b11..4ce88ba7a 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 69d36b855..d5558ad27 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 4fbfe8c94..aaf15fda8 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 1414349cd..af4d592f6 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 3dedc4260..d554d8ee8 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 da57679ab..97d02ff6b 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 a40f11ac3..027d193c4 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 5810f5461..982bab430 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 119b153cc..3cc3d0b2c 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 a4c7112c1..59befa226 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 8c2d38bfc..80df39911 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 94609cc8e..813779a67 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 9baf1e4b6..d7d0101c4 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 aff05d33a..347c0e5cf 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 b559a8f7a..e8ee7cefb 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 922df07ee..5e70a226c 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 59cddcf24..e71e16d1e 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 44bf4d580..0a0492008 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 b02c5a35b..e82e1f006 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 868528322..3b47d9c42 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 fd601bfcf..fb6feb548 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 be151c59e..b1725b097 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 2472b3a5b..fd796634e 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 da1bddfa9..84d87dfea 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 2567976fa..271ca2a7a 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 64b45a220..d27f37e84 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 57000324c..c08aedfd1 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 0f20b3a5f..cc392308e 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 cffbc284a..026e0dd20 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 d24146362..27300d44e 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 b286cdcf0..65d8b764c 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 14d0f77cb..5843158e3 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 5a8e31150..375ca4706 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 4b345d734..3773ff88f 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 23e1df4d4..489866e96 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 4ff716b18..23730e6dc 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 028dd94fd..500d83c6b 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 816e78d04..6d8950736 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 228cd7ca8..74c6622cd 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 8dca27063..37c008492 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",