Repository: sverweij/dependency-cruiser
Pull request #851 (2023-10-08 13:48:27)

refactor: introduces use of node imports aliasses in package.json
## Description

Use import aliases in package.json for ...
- [x] `utl/*`
- [x] `meta.js`
- [x] `graph-utl/*`
- [x] `extract/*`
- [x] `enrich/*`
- [x] `report/*`
- [x] `main/*`
- [x] `cache/*`
- [x] `cli/*`
- [x] the json schemas
- [x] `validate/*`
- [x] `config-utl/*`

## Motivation and Context

- Makes code easier to read (and move around, might it come to that)
- Dog fooding a feature I've not used in any other project


## How Has This Been Tested?

- [x] green ci

## Types of changes

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] Documentation only change
- [x] Refactor (non-breaking change which fixes an issue without changing functionality)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)

## Checklist

- [x] :book:

  - My change doesn't require a documentation update, or ...
  - it _does_ and I have updated it

- [x] :balance_scale:
  - The contribution will be subject to [The MIT license](https://github.com/sverweij/dependency-cruiser/blob/main/LICENSE), and I'm OK with that.
  - The contribution is my own original work.
  - I am ok with the stuff in [**CONTRIBUTING.md**](https://github.com/sverweij/dependency-cruiser/blob/main/.github/CONTRIBUTING.md).


codeclimate[bot]: Code Climate has analyzed commit 2c810358 and detected **0 issues** on this pull request.

View more on [Code Climate](https://codeclimate.com/github/sverweij/dependency-cruiser/pull/851).

codeclimate[bot]: Code Climate has analyzed commit ea4eb4e7 and detected **0 issues** on this pull request.

View more on [Code Climate](https://codeclimate.com/github/sverweij/dependency-cruiser/pull/851).

codeclimate[bot]: Code Climate has analyzed commit 5ffbb383 and detected **0 issues** on this pull request.

View more on [Code Climate](https://codeclimate.com/github/sverweij/dependency-cruiser/pull/851).

codeclimate[bot]: Code Climate has analyzed commit 2ea6b36c and detected **0 issues** on this pull request.

View more on [Code Climate](https://codeclimate.com/github/sverweij/dependency-cruiser/pull/851).

codeclimate[bot]: Code Climate has analyzed commit c204f668 and detected **0 issues** on this pull request.

View more on [Code Climate](https://codeclimate.com/github/sverweij/dependency-cruiser/pull/851).

codeclimate[bot]: Code Climate has analyzed commit 764489df and detected **0 issues** on this pull request.

View more on [Code Climate](https://codeclimate.com/github/sverweij/dependency-cruiser/pull/851).

codeclimate[bot]: Code Climate has analyzed commit 989d21a3 and detected **0 issues** on this pull request.

View more on [Code Climate](https://codeclimate.com/github/sverweij/dependency-cruiser/pull/851).

codeclimate[bot]: Code Climate has analyzed commit 33158825 and detected **0 issues** on this pull request.

View more on [Code Climate](https://codeclimate.com/github/sverweij/dependency-cruiser/pull/851).

codeclimate[bot]: Code Climate has analyzed commit ef970df5 and detected **0 issues** on this pull request.

View more on [Code Climate](https://codeclimate.com/github/sverweij/dependency-cruiser/pull/851).


Patch:
diff --git a/.eslintrc.js b/.eslintrc.js
index 08c7d430..7a1488ca 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -11,11 +11,14 @@ module.exports = {
     "@typescript-eslint/no-var-requires": "off", // we kind-of live off of those in here
     "@typescript-eslint/no-unused-vars": "off", // duplicate of the same in several other sets
     "budapestian/global-constant-pattern": "off", // currently does not work with the AST as emitted @typescript-eslint parser (FIXME)
-    "no-param-reassign": "error",
     "security/detect-non-literal-fs-filename": "off",
-    "unicorn/no-useless-fallback-in-spread": "off", // useful, probably. We'll try it later, though
     "import/exports-last": "off", // Useless remnant of the time when single pass compilers were in vogue
+    "import/no-unresolved": "off", // Does not recognize package.json #imports, which we use (in nodejs since v12.9.0), nor does it understand self-references to exports (e.g. dependency-cruiser/mermaid-reporter-plugin)
+    "no-param-reassign": "error",
+    "node/no-missing-import": "off", // Does not recognize package.json #imports, which we use (in nodejs since v12.9.0), nor does it understand self-references to exports (e.g. dependency-cruiser/mermaid-reporter-plugin)
+    "node/no-missing-require": "off", // Does not recognize package.json #imports, which we use (in nodejs since v12.9.0), nor does it understand self-references to exports (e.g. dependency-cruiser/mermaid-reporter-plugin)
     "unicorn/no-empty-file": "off", // See https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2175
+    "unicorn/no-useless-fallback-in-spread": "off", // useful, probably. We'll try it later, though
   },
   overrides: [
     {
diff --git a/bin/depcruise-baseline.mjs b/bin/depcruise-baseline.mjs
index 4d2c6ae4..29cfd836 100755
--- a/bin/depcruise-baseline.mjs
+++ b/bin/depcruise-baseline.mjs
@@ -1,8 +1,8 @@
 #!/usr/bin/env node
 import { program } from "commander";
-import assertNodeEnvironmentSuitable from "../src/cli/assert-node-environment-suitable.mjs";
-import meta from "../src/meta.js";
-import cli from "../src/cli/index.mjs";
+import assertNodeEnvironmentSuitable from "#cli/assert-node-environment-suitable.mjs";
+import cli from "#cli/index.mjs";
+import meta from "#meta";
 
 function formatError(pError) {
   process.stderr.write(pError.message);
diff --git a/bin/depcruise-fmt.mjs b/bin/depcruise-fmt.mjs
index 8c0fea8c..969e5f83 100755
--- a/bin/depcruise-fmt.mjs
+++ b/bin/depcruise-fmt.mjs
@@ -1,9 +1,9 @@
 #!/usr/bin/env node
 
 import { program } from "commander";
-import assertNodeEnvironmentSuitable from "../src/cli/assert-node-environment-suitable.mjs";
-import meta from "../src/meta.js";
-import format from "../src/cli/format.mjs";
+import assertNodeEnvironmentSuitable from "#cli/assert-node-environment-suitable.mjs";
+import format from "#cli/format.mjs";
+import meta from "#meta";
 
 function formatError(pError) {
   process.stderr.write(pError.message);
diff --git a/bin/dependency-cruise.mjs b/bin/dependency-cruise.mjs
index 83dc3e55..a6dff209 100755
--- a/bin/dependency-cruise.mjs
+++ b/bin/dependency-cruise.mjs
@@ -1,9 +1,9 @@
 #!/usr/bin/env node
 import { EOL } from "node:os";
 import { program } from "commander";
-import assertNodeEnvironmentSuitable from "../src/cli/assert-node-environment-suitable.mjs";
-import meta from "../src/meta.js";
-import cli from "../src/cli/index.mjs";
+import assertNodeEnvironmentSuitable from "#cli/assert-node-environment-suitable.mjs";
+import cli from "#cli/index.mjs";
+import meta from "#meta";
 
 try {
   assertNodeEnvironmentSuitable();
diff --git a/bin/wrap-stream-in-html.mjs b/bin/wrap-stream-in-html.mjs
index 5beb829a..44d4dbef 100755
--- a/bin/wrap-stream-in-html.mjs
+++ b/bin/wrap-stream-in-html.mjs
@@ -1,5 +1,5 @@
 #!/usr/bin/env node
 
-import wrapStreamInHtml from "../src/cli/tools/wrap-stream-in-html.mjs";
+import wrapStreamInHtml from "#cli/tools/wrap-stream-in-html.mjs";
 
 wrapStreamInHtml(process.stdin, process.stdout);
diff --git a/package.json b/package.json
index 5c9acb3f..84cf1051 100644
--- a/package.json
+++ b/package.json
@@ -44,6 +44,21 @@
     "depcruise-wrap-stream-in-html": "bin/wrap-stream-in-html.mjs"
   },
   "main": "src/main/index.mjs",
+  "imports": {
+    "#cache/*": "./src/cache/*",
+    "#config-utl/*": "./src/config-utl/*",
+    "#configuration-schema": "./src/schema/configuration.schema.mjs",
+    "#cli/*": "./src/cli/*",
+    "#cruise-result-schema": "./src/schema/cruise-result.schema.mjs",
+    "#enrich/*": "./src/enrich/*",
+    "#extract/*": "./src/extract/*",
+    "#graph-utl/*": "./src/graph-utl/*",
+    "#main/*": "./src/main/*",
+    "#meta": "./src/meta.js",
+    "#report/*": "./src/report/*",
+    "#utl/*": "./src/utl/*",
+    "#validate/*": "./src/validate/*"
+  },
   "exports": {
     ".": {
       "import": "./src/main/index.mjs",
diff --git a/src/cache/cache.mjs b/src/cache/cache.mjs
index f5036657..2f198559 100644
--- a/src/cache/cache.mjs
+++ b/src/cache/cache.mjs
@@ -1,11 +1,13 @@
 // @ts-check
 import { readFile, mkdir, writeFile } from "node:fs/promises";
 import { join } from "node:path";
-import { scannableExtensions } from "../extract/transpile/meta.mjs";
-import { bus } from "../utl/bus.mjs";
 import { optionsAreCompatible } from "./options-compatible.mjs";
 import MetadataStrategy from "./metadata-strategy.mjs";
 import ContentStrategy from "./content-strategy.mjs";
+// @ts-expect-error ts(2307) - the ts compiler is not privy to the existence of #imports in package.json
+import { scannableExtensions } from "#extract/transpile/meta.mjs";
+// @ts-expect-error ts(2307) - the ts compiler is not privy to the existence of #imports in package.json
+import { bus } from "#utl/bus.mjs";
 
 const CACHE_FILE_NAME = "cache.json";
 
@@ -36,19 +38,19 @@ export default class Cache {
         pCruiseOptions,
         {
           extensions: new Set(
-            scannableExtensions.concat(pCruiseOptions.extraExtensionsToScan)
+            scannableExtensions.concat(pCruiseOptions.extraExtensionsToScan),
           ),
-        }
+        },
       ));
     bus.debug("cache: - comparing");
     return (
       this.cacheStrategy.revisionDataEqual(
         pCachedCruiseResult.revisionData,
-        this.revisionData
+        this.revisionData,
       ) &&
       optionsAreCompatible(
         pCachedCruiseResult.summary.optionsUsed,
-        pCruiseOptions
+        pCruiseOptions,
       )
     );
   }
@@ -60,7 +62,7 @@ export default class Cache {
   async read(pCacheFolder) {
     try {
       return JSON.parse(
-        await readFile(join(pCacheFolder, CACHE_FILE_NAME), "utf8")
+        await readFile(join(pCacheFolder, CACHE_FILE_NAME), "utf8"),
       );
     } catch (pError) {
       return { modules: [], summary: {} };
@@ -81,10 +83,10 @@ export default class Cache {
       JSON.stringify(
         this.cacheStrategy.prepareRevisionDataForSaving(
           pCruiseResult,
-          lRevisionData
-        )
+          lRevisionData,
+        ),
       ),
-      "utf8"
+      "utf8",
     );
   }
 }
diff --git a/src/cache/find-content-changes.mjs b/src/cache/find-content-changes.mjs
index 4cebf3cc..c34d6e76 100644
--- a/src/cache/find-content-changes.mjs
+++ b/src/cache/find-content-changes.mjs
@@ -1,8 +1,6 @@
 /* eslint-disable no-inline-comments */
 // @ts-check
 import { join } from "node:path/posix";
-import { bus } from "../utl/bus.mjs";
-import findAllFiles from "../utl/find-all-files.mjs";
 import {
   getFileHashSync,
   excludeFilter,
@@ -10,6 +8,10 @@ import {
   hasInterestingExtension,
   moduleIsInterestingForDiff,
 } from "./helpers.mjs";
+// @ts-expect-error ts(2307) - the ts compiler is not privy to the existence of #imports in package.json
+import { bus } from "#utl/bus.mjs";
+// @ts-expect-error ts(2307) - the ts compiler is not privy to the existence of #imports in package.json
+import findAllFiles from "#utl/find-all-files.mjs";
 
 /**
  * @param {Set<string>} pFileSet
@@ -19,7 +21,7 @@ import {
 function diffCachedModuleAgainstFileSet(
   pFileSet,
   pBaseDirectory,
-  pFileHashFunction = getFileHashSync
+  pFileHashFunction = getFileHashSync,
 ) {
   return (pModule) => {
     if (!moduleIsInterestingForDiff(pModule)) {
@@ -31,7 +33,7 @@ function diffCachedModuleAgainstFileSet(
     }
 
     const lNewCheckSum = pFileHashFunction(
-      join(pBaseDirectory, pModule.source)
+      join(pBaseDirectory, pModule.source),
     );
     if (lNewCheckSum !== pModule.checksum) {
       return {
@@ -72,7 +74,7 @@ function diffCachedModuleAgainstFileSet(
 export default function findContentChanges(
   pDirectory,
   pCachedCruiseResult,
-  pOptions
+  pOptions,
 ) {
   bus.debug("cache: - getting revision data");
   const lFileSet = new Set(
@@ -80,12 +82,12 @@ export default function findContentChanges(
       baseDir: pOptions.baseDir,
       excludeFilterFn: excludeFilter(pOptions.exclude),
       includeOnlyFilterFn: includeOnlyFilter(pOptions.includeOnly),
-    }).filter(hasInterestingExtension(pOptions.extensions))
+    }).filter(hasInterestingExtension(pOptions.extensions)),
   );
 
   bus.debug("cache: - getting (cached - new)");
   const lDiffCachedVsNew = pCachedCruiseResult.modules.map(
-    diffCachedModuleAgainstFileSet(lFileSet, pOptions.baseDir)
+    diffCachedModuleAgainstFileSet(lFileSet, pOptions.baseDir),
   );
 
   bus.debug("cache: - getting (new - cached)");
diff --git a/src/cache/helpers.mjs b/src/cache/helpers.mjs
index 194819ff..fcb147a4 100644
--- a/src/cache/helpers.mjs
+++ b/src/cache/helpers.mjs
@@ -4,7 +4,7 @@ import { readFileSync } from "node:fs";
 import { readFile } from "node:fs/promises";
 import { extname } from "node:path";
 import memoize from "lodash/memoize.js";
-import { filenameMatchesPattern } from "../graph-utl/match-facade.mjs";
+import { filenameMatchesPattern } from "#graph-utl/match-facade.mjs";
 
 /**
  * @param {string} pString
@@ -101,10 +101,10 @@ export function hasInterestingExtension(pExtensions) {
 export function changeHasInterestingExtension(pExtensions) {
   return (pChange) => {
     const lNameHasInterestingExtension = hasInterestingExtension(pExtensions)(
-      pChange.name
+      pChange.name,
     );
     const lOldNameHasInterestingExtension = Boolean(
-      pChange.oldName && hasInterestingExtension(pExtensions)(pChange.oldName)
+      pChange.oldName && hasInterestingExtension(pExtensions)(pChange.oldName),
     );
     return lNameHasInterestingExtension || lOldNameHasInterestingExtension;
   };
@@ -128,7 +128,7 @@ const DEFAULT_INTERESTING_CHANGE_TYPES = new Set([
 export function isInterestingChangeType(pInterestingChangeTypes) {
   return (pChange) =>
     (pInterestingChangeTypes ?? DEFAULT_INTERESTING_CHANGE_TYPES).has(
-      pChange.changeType
+      pChange.changeType,
     );
 }
 
diff --git a/src/cache/metadata-strategy.mjs b/src/cache/metadata-strategy.mjs
index adee90a4..f29b1100 100644
--- a/src/cache/metadata-strategy.mjs
+++ b/src/cache/metadata-strategy.mjs
@@ -2,7 +2,6 @@
 // @ts-check
 import { isDeepStrictEqual } from "node:util";
 import { getSHA, list } from "watskeburt";
-import { bus } from "../utl/bus.mjs";
 import {
   isInterestingChangeType,
   addCheckSumToChangeSync,
@@ -10,6 +9,8 @@ import {
   includeOnlyFilter,
   changeHasInterestingExtension,
 } from "./helpers.mjs";
+// @ts-expect-error ts(2307) - the ts compiler is not privy to the existence of #imports in package.json
+import { bus } from "#utl/bus.mjs";
 
 export default class MetaDataStrategy {
   /**
@@ -27,7 +28,7 @@ export default class MetaDataStrategy {
     _pDirectory,
     _pCachedCruiseResult,
     pCruiseOptions,
-    pOptions
+    pOptions,
   ) {
     const lOptions = {
       shaRetrievalFn: getSHA,
@@ -45,7 +46,7 @@ export default class MetaDataStrategy {
       const lChanges = lDiff
         .filter(({ name }) => excludeFilter(pCruiseOptions.exclude)(name))
         .filter(({ name }) =>
-          includeOnlyFilter(pCruiseOptions.includeOnly)(name)
+          includeOnlyFilter(pCruiseOptions.includeOnly)(name),
         )
         .filter(changeHasInterestingExtension(lOptions.extensions))
         .filter(isInterestingChangeType(lOptions.interestingChangeTypes));
@@ -56,7 +57,7 @@ export default class MetaDataStrategy {
       };
     } catch (pError) {
       throw new Error(
-        `The --cache option works in concert with git - and it seems either the current folder isn't version managed or git isn't installed. Error:${`\n\n          ${pError}\n`}`
+        `The --cache option works in concert with git - and it seems either the current folder isn't version managed or git isn't installed. Error:${`\n\n          ${pError}\n`}`,
       );
     }
   }
diff --git a/src/cli/assert-node-environment-suitable.mjs b/src/cli/assert-node-environment-suitable.mjs
index 40f819ae..8927662e 100644
--- a/src/cli/assert-node-environment-suitable.mjs
+++ b/src/cli/assert-node-environment-suitable.mjs
@@ -1,5 +1,5 @@
 import satisfies from "semver/functions/satisfies.js";
-import meta from "../meta.js";
+import meta from "#meta";
 
 export default function assertNodeEnvironmentSuitable(pNodeVersion) {
   // not using default parameter here because the check should run
diff --git a/src/cli/format-meta-info.mjs b/src/cli/format-meta-info.mjs
index e0bd66ad..5c149fa3 100644
--- a/src/cli/format-meta-info.mjs
+++ b/src/cli/format-meta-info.mjs
@@ -1,7 +1,7 @@
 import chalk from "chalk";
 import figures from "figures";
 
-import { getAvailableTranspilers, allExtensions } from "../main/index.mjs";
+import { getAvailableTranspilers, allExtensions } from "#main/index.mjs";
 
 function bool2Symbol(pBool) {
   return pBool ? chalk.green(figures.tick) : chalk.red(figures.cross);
@@ -13,7 +13,7 @@ function formatTranspilers() {
       `${pAll}    ${bool2Symbol(pThis.available)} ${pThis.name} (${
         pThis.version
       })\n`,
-    `    ${bool2Symbol(true)} javascript (>es1)\n`
+    `    ${bool2Symbol(true)} javascript (>es1)\n`,
   );
 }
 
@@ -21,7 +21,7 @@ function formatExtensions(pExtensions) {
   return pExtensions.reduce(
     (pAll, pThis) =>
       `${pAll}    ${bool2Symbol(pThis.available)} ${pThis.extension}\n`,
-    ""
+    "",
   );
 }
 
@@ -30,7 +30,7 @@ export default function formatMetaInfo() {
   Supported:
 
     If you need a supported, but not enabled transpiler ('${chalk.red(
-      figures.cross
+      figures.cross,
     )}' below), just install
     it in the same folder dependency-cruiser is installed. E.g. 'npm i livescript'
     will enable livescript support if it's installed in your project folder.
diff --git a/src/cli/format.mjs b/src/cli/format.mjs
index 1a39f3f5..440bf7f8 100644
--- a/src/cli/format.mjs
+++ b/src/cli/format.mjs
@@ -1,7 +1,7 @@
-import _format from "../main/format.mjs";
 import assertFileExistence from "./utl/assert-file-existence.mjs";
 import normalizeOptions from "./normalize-cli-options.mjs";
 import { getInStream, write } from "./utl/io.mjs";
+import _format from "#main/format.mjs";
 
 /**
  *
diff --git a/src/cli/index.mjs b/src/cli/index.mjs
index 4325f41d..0efa3da6 100644
--- a/src/cli/index.mjs
+++ b/src/cli/index.mjs
@@ -4,15 +4,14 @@ import set from "lodash/set.js";
 import isInstalledGlobally from "is-installed-globally";
 import chalk from "chalk";
 
-import cruise from "../main/cruise.mjs";
-import { INFO, bus } from "../utl/bus.mjs";
-
 import assertFileExistence from "./utl/assert-file-existence.mjs";
 import normalizeCliOptions from "./normalize-cli-options.mjs";
 import { write } from "./utl/io.mjs";
 import setUpCliFeedbackListener from "./listeners/cli-feedback.mjs";
 import setUpPerformanceLogListener from "./listeners/performance-log/index.mjs";
 import setUpNDJSONListener from "./listeners/ndjson.mjs";
+import cruise from "#main/cruise.mjs";
+import { INFO, bus } from "#utl/bus.mjs";
 
 async function extractResolveOptions(pCruiseOptions) {
   let lResolveOptions = {};
@@ -21,7 +20,7 @@ async function extractResolveOptions(pCruiseOptions) {
 
   if (lWebPackConfigFileName) {
     const { default: extractWebpackResolveConfig } = await import(
-      "../config-utl/extract-webpack-resolve-config.mjs"
+      "#config-utl/extract-webpack-resolve-config.mjs"
     );
     lResolveOptions = await extractWebpackResolveConfig(
       lWebPackConfigFileName,
@@ -35,7 +34,7 @@ async function extractResolveOptions(pCruiseOptions) {
 async function addKnownViolations(pCruiseOptions) {
   if (pCruiseOptions.knownViolationsFile) {
     const { default: extractKnownViolations } = await import(
-      "../config-utl/extract-known-violations.mjs"
+      "#config-utl/extract-known-violations.mjs"
     );
     const lKnownViolations = await extractKnownViolations(
       pCruiseOptions.knownViolationsFile,
@@ -57,7 +56,7 @@ async function extractTSConfigOptions(pCruiseOptions) {
 
   if (lTSConfigFileName) {
     const { default: extractTSConfig } = await import(
-      "../config-utl/extract-ts-config.mjs"
+      "#config-utl/extract-ts-config.mjs"
     );
     lReturnValue = extractTSConfig(lTSConfigFileName);
   }
@@ -71,7 +70,7 @@ async function extractBabelConfigOptions(pCruiseOptions) {
     pCruiseOptions?.ruleSet?.options?.babelConfig?.fileName ?? null;
   if (lBabelConfigFileName) {
     const { default: extractBabelConfig } = await import(
-      "../config-utl/extract-babel-config.mjs"
+      "#config-utl/extract-babel-config.mjs"
     );
     lReturnValue = extractBabelConfig(lBabelConfigFileName);
   }
diff --git a/src/cli/init-config/find-extensions.mjs b/src/cli/init-config/find-extensions.mjs
index 57caa0cb..0d84e02d 100644
--- a/src/cli/init-config/find-extensions.mjs
+++ b/src/cli/init-config/find-extensions.mjs
@@ -1,8 +1,11 @@
 // @ts-check
 /* eslint-disable security/detect-object-injection */
-import getExtension from "../../utl/get-extension.mjs";
-import { scannableExtensions } from "../../extract/transpile/meta.mjs";
-import findAllFiles from "../../utl/find-all-files.mjs";
+// @ts-expect-error ts(2307) - the ts compiler is not privy to the existence of #imports in package.json
+import { scannableExtensions } from "#extract/transpile/meta.mjs";
+// @ts-expect-error ts(2307) - the ts compiler is not privy to the existence of #imports in package.json
+import getExtension from "#utl/get-extension.mjs";
+// @ts-expect-error ts(2307) - the ts compiler is not privy to the existence of #imports in package.json
+import findAllFiles from "#utl/find-all-files.mjs";
 
 /**
  * @param {Record<string,number>} pAll
@@ -42,7 +45,7 @@ export default function findExtensions(pDirectories, pOptions) {
         ignoreFileContents: lOptions?.ignoreFileContents,
       })
         .map(getExtension)
-        .filter(Boolean)
+        .filter(Boolean),
     )
     .reduce(reduceToCounts, {});
 
diff --git a/src/cli/init-config/normalize-init-options.mjs b/src/cli/init-config/normalize-init-options.mjs
index a96c2ebf..88a53527 100644
--- a/src/cli/init-config/normalize-init-options.mjs
+++ b/src/cli/init-config/normalize-init-options.mjs
@@ -1,5 +1,4 @@
 import has from "lodash/has.js";
-import meta from "../../meta.js";
 import {
   getSourceFolderCandidates,
   getTestFolderCandidates,
@@ -7,6 +6,7 @@ import {
   toSourceLocationArray,
 } from "./environment-helpers.mjs";
 import findExtensions from "./find-extensions.mjs";
+import meta from "#meta";
 
 /**
  * @param {import("./types.js").IInitConfig} pInitOptions
diff --git a/src/cli/init-config/write-run-scripts-to-manifest.mjs b/src/cli/init-config/write-run-scripts-to-manifest.mjs
index ce576b0f..ca0a1a5b 100644
--- a/src/cli/init-config/write-run-scripts-to-manifest.mjs
+++ b/src/cli/init-config/write-run-scripts-to-manifest.mjs
@@ -2,10 +2,10 @@
 import { writeFileSync } from "node:fs";
 import figures from "figures";
 import chalk from "chalk";
-import wrapAndIndent from "../../utl/wrap-and-indent.mjs";
 import { PACKAGE_MANIFEST as _PACKAGE_MANIFEST } from "../defaults.mjs";
 import { readManifest } from "./environment-helpers.mjs";
 import { folderNameArrayToRE } from "./utl.mjs";
+import wrapAndIndent from "#utl/wrap-and-indent.mjs";
 
 const PACKAGE_MANIFEST = `./${_PACKAGE_MANIFEST}`;
 
diff --git a/src/cli/listeners/cli-feedback.mjs b/src/cli/listeners/cli-feedback.mjs
index 4e37ad19..5cdfc877 100644
--- a/src/cli/listeners/cli-feedback.mjs
+++ b/src/cli/listeners/cli-feedback.mjs
@@ -1,6 +1,6 @@
 import chalk from "chalk";
 import figures from "figures";
-import { SUMMARY } from "../../utl/bus.mjs";
+import { SUMMARY } from "#utl/bus.mjs";
 
 const FULL_ON = 100;
 
@@ -19,7 +19,7 @@ function getPercentageBar(pPercentage, pParameters) {
   const lBlanks = lParameters.barSize - lBlocks;
 
   return `${chalk.green(lParameters.block.repeat(lBlocks))}${chalk.green(
-    lParameters.blank.repeat(lBlanks)
+    lParameters.blank.repeat(lBlanks),
   )} ${Math.round(FULL_ON * lPercentage)}%`;
 }
 
@@ -36,7 +36,7 @@ function getProgressMessageWriter(pStream, pState, pMaxLogLevel) {
     if (pStream.isTTY && lOptions.level <= pMaxLogLevel) {
       pStream.clearLine(1);
       pStream.write(
-        `  ${getPercentageBar(lOptions.complete)} ${pMessage} ...\n`
+        `  ${getPercentageBar(lOptions.complete)} ${pMessage} ...\n`,
       );
       pStream.moveCursor(0, -1);
     }
@@ -57,14 +57,14 @@ function getStartWriter(pStream) {
 export default function setUpCliFeedbackListener(
   pEventEmitter,
   pMaxLogLevel = SUMMARY,
-  pStream = process.stderr
+  pStream = process.stderr,
 ) {
   const lState = {
     complete: 0,
   };
   pEventEmitter.on(
     "progress",
-    getProgressMessageWriter(pStream, lState, pMaxLogLevel)
+    getProgressMessageWriter(pStream, lState, pMaxLogLevel),
   );
 
   pEventEmitter.on("write-start", getStartWriter(pStream));
diff --git a/src/cli/listeners/ndjson.mjs b/src/cli/listeners/ndjson.mjs
index 58d2b716..67f3ebe2 100644
--- a/src/cli/listeners/ndjson.mjs
+++ b/src/cli/listeners/ndjson.mjs
@@ -1,5 +1,5 @@
 import { EOL } from "node:os";
-import { INFO, SUMMARY } from "../../utl/bus.mjs";
+import { INFO, SUMMARY } from "#utl/bus.mjs";
 
 const MICRO_SECONDS_PER_SECOND = 1000000;
 
@@ -72,7 +72,7 @@ function getProgressWriter(pStream, pState, pMaxLevel) {
 export default function setUpNDJSONListener(
   pEventEmitter,
   pMaxLevel = INFO,
-  pStream = process.stderr
+  pStream = process.stderr,
 ) {
   let lState = {
     runStartTime: new Date(Date.now()).toISOString(),
diff --git a/src/cli/listeners/performance-log/format-helpers.mjs b/src/cli/listeners/performance-log/format-helpers.mjs
index f0a76b13..f277c4a4 100644
--- a/src/cli/listeners/performance-log/format-helpers.mjs
+++ b/src/cli/listeners/performance-log/format-helpers.mjs
@@ -1,6 +1,5 @@
- 
 import chalk from "chalk";
-import { INFO } from "../../../utl/bus.mjs";
+import { INFO } from "#utl/bus.mjs";
 
 const MS_PER_SECOND = 1000;
 const MS_PER_MICRO_SECOND = 0.001;
@@ -39,7 +38,7 @@ export function formatDividerLine() {
   const lMessageColumnHDivider = "-".repeat(MAX_EXPECTED_MESSAGE_LENGTH);
 
   return `${`${lNumberColumnDivider} `.repeat(
-    NUMBER_OF_COLUMNS - 1
+    NUMBER_OF_COLUMNS - 1,
   )}${lMessageColumnHDivider}\n`;
 }
 
@@ -54,7 +53,7 @@ export function formatHeader() {
         pad("⏱  system") +
         pad("⏱  user") +
         pad("⏱  real")
-      }after step...\n`
+      }after step...\n`,
     )
     .concat(formatDividerLine());
 }
@@ -66,24 +65,24 @@ function formatMessage(pMessage, pLevel) {
 export function formatTime(
   pNumber,
   pConversionMultiplier = MS_PER_SECOND,
-  pLevel
+  pLevel,
 ) {
   return formatMessage(
     gTimeFormat(pConversionMultiplier * pNumber)
       .padStart(MAX_EXPECTED_METRIC_LENGTH)
       .concat(" "),
-    pLevel
+    pLevel,
   );
 }
 
 export function formatMemory(pBytes, pLevel) {
   const lReturnValue = gSizeFormat(pBytes / K).padStart(
-    MAX_EXPECTED_METRIC_LENGTH
+    MAX_EXPECTED_METRIC_LENGTH,
   );
 
   return formatMessage(
     (pBytes < 0 ? chalk.blue(lReturnValue) : lReturnValue).concat(" "),
-    pLevel
+    pLevel,
   );
 }
 
diff --git a/src/cli/listeners/performance-log/index.mjs b/src/cli/listeners/performance-log/index.mjs
index da84bc2c..904d4a66 100644
--- a/src/cli/listeners/performance-log/index.mjs
+++ b/src/cli/listeners/performance-log/index.mjs
@@ -1,5 +1,5 @@
-import { INFO, SUMMARY } from "../../../utl/bus.mjs";
 import { getHeader, getProgressLine, getEndText } from "./handlers.mjs";
+import { INFO, SUMMARY } from "#utl/bus.mjs";
 
 function getHeaderWriter(pStream, pMaxLevel) {
   return (_pMessage, pOptions) => {
@@ -16,7 +16,7 @@ function getProgressWriter(pStream, pState, pMaxLevel) {
       pMessage,
       pState,
       lOptions.level,
-      pMaxLevel
+      pMaxLevel,
     );
     pStream.write(lProgressLine);
   };
@@ -32,7 +32,7 @@ function getEndWriter(pStream, pState, pMaxLevel) {
 export default function setUpPerformanceLogListener(
   pEventEmitter,
   pMaxLevel = INFO,
-  pStream = process.stderr
+  pStream = process.stderr,
 ) {
   let lState = {
     previousMessage: "nodejs starting",
diff --git a/src/cli/normalize-cli-options.mjs b/src/cli/normalize-cli-options.mjs
index 31206e4d..bdad08f0 100644
--- a/src/cli/normalize-cli-options.mjs
+++ b/src/cli/normalize-cli-options.mjs
@@ -3,7 +3,6 @@ import { isAbsolute } from "node:path";
 import set from "lodash/set.js";
 import get from "lodash/get.js";
 import has from "lodash/has.js";
-import loadConfig from "../config-utl/extract-depcruise-config/index.mjs";
 import {
   RULES_FILE_NAME_SEARCH_ARRAY,
   DEFAULT_BASELINE_FILE_NAME,
@@ -14,6 +13,7 @@ import {
   BABEL_CONFIG,
   OLD_DEFAULT_RULES_FILE_NAME,
 } from "./defaults.mjs";
+import loadConfig from "#config-utl/extract-depcruise-config/index.mjs";
 
 function getOptionValue(pDefault) {
   return (pValue) => (typeof pValue === "string" ? pValue : pDefault);
diff --git a/src/config-utl/extract-babel-config.mjs b/src/config-utl/extract-babel-config.mjs
index 886738f6..c1b87f4b 100644
--- a/src/config-utl/extract-babel-config.mjs
+++ b/src/config-utl/extract-babel-config.mjs
@@ -3,8 +3,8 @@ import { readFile } from "node:fs/promises";
 import { extname } from "node:path";
 import json5 from "json5";
 import tryImport from "semver-try-require";
-import meta from "../meta.js";
 import makeAbsolute from "./make-absolute.mjs";
+import meta from "#meta";
 
 async function getJSConfig(pBabelConfigFileName) {
   let lReturnValue = {};
@@ -19,7 +19,7 @@ async function getJSConfig(pBabelConfigFileName) {
       `${
         `Encountered an error while parsing babel config '${pBabelConfigFileName}':` +
         `\n\n          ${pError}`
-      }\n\n         At this time dependency-cruiser only supports babel configurations\n         in either commonjs or json5.\n`
+      }\n\n         At this time dependency-cruiser only supports babel configurations\n         in either commonjs or json5.\n`,
     );
   }
 
@@ -28,7 +28,7 @@ async function getJSConfig(pBabelConfigFileName) {
     // function with a bunch of params (lReturnValue = lReturnValue(APIPAPI))
     throw new TypeError(
       `The babel config '${pBabelConfigFileName}' returns a function. At this time\n` +
-        `         dependency-cruiser doesn't support that yet.`
+        `         dependency-cruiser doesn't support that yet.`,
     );
   }
   return lReturnValue;
@@ -42,7 +42,7 @@ async function getJSON5Config(pBabelConfigFileName) {
   } catch (pError) {
     throw new Error(
       `Encountered an error while parsing the babel config '${pBabelConfigFileName}':` +
-        `\n\n          ${pError}\n`
+        `\n\n          ${pError}\n`,
     );
   }
 
@@ -65,7 +65,7 @@ async function getConfig(pBabelConfigFileName) {
 
   if (!lExtensionToParseFunction.has(lExtension)) {
     throw new Error(
-      `${`The babel config '${pBabelConfigFileName}' is in a format ('${lExtension}')\n`}         dependency-cruiser doesn't support yet.\n`
+      `${`The babel config '${pBabelConfigFileName}' is in a format ('${lExtension}')\n`}         dependency-cruiser doesn't support yet.\n`,
     );
   }
   // eslint-disable-next-line no-return-await
diff --git a/src/config-utl/extract-depcruise-config/index.mjs b/src/config-utl/extract-depcruise-config/index.mjs
index 9a9c6466..c0b0c8fb 100644
--- a/src/config-utl/extract-depcruise-config/index.mjs
+++ b/src/config-utl/extract-depcruise-config/index.mjs
@@ -1,9 +1,9 @@
 import { dirname } from "node:path";
 import has from "lodash/has.js";
-import { resolve } from "../../extract/resolve/resolve.mjs";
-import normalizeResolveOptions from "../../main/resolve-options/normalize.mjs";
 import readConfig from "./read-config.mjs";
 import mergeConfigs from "./merge-configs.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import { resolve } from "#extract/resolve/resolve.mjs";
 
 /* eslint no-use-before-define: 0 */
 async function processExtends(pReturnValue, pAlreadyVisited, pBaseDirectory) {
diff --git a/src/config-utl/extract-ts-config.mjs b/src/config-utl/extract-ts-config.mjs
index 9947b86b..3ea30bf5 100644
--- a/src/config-utl/extract-ts-config.mjs
+++ b/src/config-utl/extract-ts-config.mjs
@@ -1,10 +1,10 @@
 import { dirname, resolve } from "node:path";
 import tryImport from "semver-try-require";
-import meta from "../meta.js";
+import meta from "#meta";
 
 const typescript = await tryImport(
   "typescript",
-  meta.supportedTranspilers.typescript
+  meta.supportedTranspilers.typescript,
 );
 
 const FORMAT_DIAGNOSTICS_HOST = {
@@ -44,12 +44,12 @@ export default function extractTSConfig(pTSConfigFileName) {
   if (typescript) {
     const lConfig = typescript.readConfigFile(
       pTSConfigFileName,
-      typescript.sys.readFile
+      typescript.sys.readFile,
     );
 
     if (typeof lConfig.error !== "undefined") {
       throw new TypeError(
-        typescript.formatDiagnostics([lConfig.error], FORMAT_DIAGNOSTICS_HOST)
+        typescript.formatDiagnostics([lConfig.error], FORMAT_DIAGNOSTICS_HOST),
       );
     }
     lReturnValue = typescript.parseJsonConfigFileContent(
@@ -57,15 +57,15 @@ export default function extractTSConfig(pTSConfigFileName) {
       typescript.sys,
       dirname(resolve(pTSConfigFileName)),
       {},
-      pTSConfigFileName
+      pTSConfigFileName,
     );
 
     if (lReturnValue.errors.length > 0) {
       throw new Error(
         typescript.formatDiagnostics(
           lReturnValue.errors,
-          FORMAT_DIAGNOSTICS_HOST
-        )
+          FORMAT_DIAGNOSTICS_HOST,
+        ),
       );
     }
     // lRetval.fileNames; // all files included in the project
diff --git a/src/enrich/add-validations.mjs b/src/enrich/add-validations.mjs
index 7e6a3bda..c5391584 100644
--- a/src/enrich/add-validations.mjs
+++ b/src/enrich/add-validations.mjs
@@ -1,4 +1,4 @@
-import validate from "../validate/index.mjs";
+import validate from "#validate/index.mjs";
 
 function addDependencyViolations(pModule, pDependency, pRuleSet, pValidate) {
   return {
@@ -26,7 +26,7 @@ export default function addValidations(pModules, pRuleSet, pValidate) {
     ...pModule,
     ...(pValidate ? validate.module(pRuleSet, pModule) : { valid: true }),
     dependencies: pModule.dependencies.map((pDependency) =>
-      addDependencyViolations(pModule, pDependency, pRuleSet, pValidate)
+      addDependencyViolations(pModule, pDependency, pRuleSet, pValidate),
     ),
   }));
 }
diff --git a/src/enrich/derive/folders/aggregate-to-folders.mjs b/src/enrich/derive/folders/aggregate-to-folders.mjs
index 29084cd8..989579ff 100644
--- a/src/enrich/derive/folders/aggregate-to-folders.mjs
+++ b/src/enrich/derive/folders/aggregate-to-folders.mjs
@@ -2,7 +2,6 @@
 import { dirname } from "node:path/posix";
 import { calculateInstability, metricsAreCalculable } from "../module-utl.mjs";
 import detectCycles from "../circular.mjs";
-import IndexedModuleGraph from "../../../graph-utl/indexed-module-graph.mjs";
 import {
   findFolderByName,
   getAfferentCouplings,
@@ -10,6 +9,7 @@ import {
   getParentFolders,
   object2Array,
 } from "./utl.mjs";
+import IndexedModuleGraph from "#graph-utl/indexed-module-graph.mjs";
 
 function upsertCouplings(pAllDependents, pNewDependents) {
   pNewDependents.forEach((pNewDependent) => {
@@ -29,13 +29,13 @@ function upsertFolderAttributes(pAllMetrics, pModule, pDirname) {
 
   upsertCouplings(
     pAllMetrics[pDirname].dependents,
-    getAfferentCouplings(pModule, pDirname)
+    getAfferentCouplings(pModule, pDirname),
   );
   upsertCouplings(
     pAllMetrics[pDirname].dependencies,
     getEfferentCouplings(pModule, pDirname).map(
-      (pDependency) => pDependency.resolved
-    )
+      (pDependency) => pDependency.resolved,
+    ),
   );
   pAllMetrics[pDirname].moduleCount += 1;
   return pAllMetrics;
@@ -43,7 +43,7 @@ function upsertFolderAttributes(pAllMetrics, pModule, pDirname) {
 
 function aggregateToFolder(pAllFolders, pModule) {
   getParentFolders(dirname(pModule.source)).forEach((pParentDirectory) =>
-    upsertFolderAttributes(pAllFolders, pModule, pParentDirectory)
+    upsertFolderAttributes(pAllFolders, pModule, pParentDirectory),
   );
   return pAllFolders;
 }
@@ -58,9 +58,9 @@ function getFolderLevelCouplings(pCouplingArray) {
       pCouplingArray.map((pCoupling) =>
         dirname(pCoupling.name) === "."
           ? pCoupling.name
-          : dirname(pCoupling.name)
-      )
-    )
+          : dirname(pCoupling.name),
+      ),
+    ),
   ).map((pCoupling) => ({ name: pCoupling }));
 }
 
@@ -101,7 +101,9 @@ function uniq(pArray) {
 function getSinks(pFolders) {
   const lKnownFolders = new Set(pFolders.map(({ name }) => name));
   const lAllFolders = uniq(
-    pFolders.flatMap(({ dependencies }) => dependencies.map(({ name }) => name))
+    pFolders.flatMap(({ dependencies }) =>
+      dependencies.map(({ name }) => name),
+    ),
   );
   const lReturnValue = lAllFolders
     .filter((pFolder) => !lKnownFolders.has(pFolder))
@@ -116,7 +118,7 @@ function getSinks(pFolders) {
 
 export default function aggregateToFolders(pModules) {
   let lFolders = object2Array(
-    pModules.filter(metricsAreCalculable).reduce(aggregateToFolder, {})
+    pModules.filter(metricsAreCalculable).reduce(aggregateToFolder, {}),
   )
     .map(calculateFolderMetrics)
     .map(deNormalizeInstability);
diff --git a/src/enrich/derive/folders/index.mjs b/src/enrich/derive/folders/index.mjs
index a6707bca..b1932df0 100644
--- a/src/enrich/derive/folders/index.mjs
+++ b/src/enrich/derive/folders/index.mjs
@@ -1,5 +1,5 @@
-import validate from "../../../validate/index.mjs";
 import aggregateToFolders from "./aggregate-to-folders.mjs";
+import validate from "#validate/index.mjs";
 
 /**
  * @param {import("../../../../types/dependency-cruiser.js").IFolder} pFolder
@@ -18,7 +18,7 @@ function addFolderDependencyViolations(pOptions) {
     ...pFolder,
 
     dependencies: pFolder.dependencies.map(
-      validateFolderDependency(pFolder, pOptions)
+      validateFolderDependency(pFolder, pOptions),
     ),
   });
 }
@@ -34,7 +34,7 @@ export default function deriveFolderMetrics(pModules, pOptions) {
   if (pOptions.metrics) {
     lReturnValue = {
       folders: aggregateToFolders(pModules).map(
-        addFolderDependencyViolations(pOptions)
+        addFolderDependencyViolations(pOptions),
       ),
     };
   }
diff --git a/src/enrich/derive/metrics/get-module-metrics.mjs b/src/enrich/derive/metrics/get-module-metrics.mjs
index 912ccfa0..389dcc0e 100644
--- a/src/enrich/derive/metrics/get-module-metrics.mjs
+++ b/src/enrich/derive/metrics/get-module-metrics.mjs
@@ -1,5 +1,5 @@
-import IndexedModuleGraph from "../../../graph-utl/indexed-module-graph.mjs";
 import { calculateInstability, metricsAreCalculable } from "../module-utl.mjs";
+import IndexedModuleGraph from "#graph-utl/indexed-module-graph.mjs";
 
 export function addInstabilityMetric(pModule) {
   return {
@@ -8,7 +8,7 @@ export function addInstabilityMetric(pModule) {
       ? {
           instability: calculateInstability(
             pModule.dependencies.length,
-            pModule.dependents.length
+            pModule.dependents.length,
           ),
         }
       : {}),
@@ -28,12 +28,12 @@ function addInstabilityToDependency(pAllModules) {
 export function deNormalizeInstabilityMetricsToDependencies(
   pModule,
   _,
-  pAllModules
+  pAllModules,
 ) {
   return {
     ...pModule,
     dependencies: pModule.dependencies.map(
-      addInstabilityToDependency(pAllModules)
+      addInstabilityToDependency(pAllModules),
     ),
   };
 }
diff --git a/src/enrich/derive/reachable.mjs b/src/enrich/derive/reachable.mjs
index 68d8706b..fba70704 100644
--- a/src/enrich/derive/reachable.mjs
+++ b/src/enrich/derive/reachable.mjs
@@ -1,8 +1,8 @@
 /* eslint-disable security/detect-object-injection, no-inline-comments */
 import has from "lodash/has.js";
-import matchers from "../../validate/matchers.mjs";
-import { extractGroups } from "../../utl/regex-util.mjs";
-import IndexedModuleGraph from "../../graph-utl/indexed-module-graph.mjs";
+import matchers from "#validate/matchers.mjs";
+import IndexedModuleGraph from "#graph-utl/indexed-module-graph.mjs";
+import { extractGroups } from "#utl/regex-util.mjs";
 
 function getReachableRules(pRuleSet) {
   return (pRuleSet?.forbidden ?? [])
diff --git a/src/enrich/enrich-modules.mjs b/src/enrich/enrich-modules.mjs
index 4309fe7d..2af17a79 100644
--- a/src/enrich/enrich-modules.mjs
+++ b/src/enrich/enrich-modules.mjs
@@ -1,6 +1,3 @@
-import { bus } from "../utl/bus.mjs";
-import addFocus from "../graph-utl/add-focus.mjs";
-import IndexedModuleGraph from "../graph-utl/indexed-module-graph.mjs";
 import deriveCycles from "./derive/circular.mjs";
 import deriveOrphans from "./derive/orphan/index.mjs";
 import addDependents from "./derive/dependents/index.mjs";
@@ -8,6 +5,9 @@ import deriveReachable from "./derive/reachable.mjs";
 import addValidations from "./add-validations.mjs";
 import softenKnownViolations from "./soften-known-violations.mjs";
 import deriveModuleMetrics from "./derive/metrics/index.mjs";
+import IndexedModuleGraph from "#graph-utl/indexed-module-graph.mjs";
+import addFocus from "#graph-utl/add-focus.mjs";
+import { bus } from "#utl/bus.mjs";
 
 export default function enrichModules(pModules, pOptions) {
   bus.info("analyzing: cycles");
diff --git a/src/enrich/soften-known-violations.mjs b/src/enrich/soften-known-violations.mjs
index 22882a53..0b9cb68b 100644
--- a/src/enrich/soften-known-violations.mjs
+++ b/src/enrich/soften-known-violations.mjs
@@ -1,18 +1,18 @@
-import { bus } from "../utl/bus.mjs";
 import isSameViolation from "./summarize/is-same-violation.mjs";
+import { bus } from "#utl/bus.mjs";
 
 function softenModuleViolation(
   pRule,
   pModuleSource,
   pKnownModuleViolations,
-  pSoftenedSeverity
+  pSoftenedSeverity,
 ) {
   return {
     ...pRule,
     severity: pKnownModuleViolations.some(
       (pKnownError) =>
         pKnownError.from === pModuleSource &&
-        pKnownError.rule.name === pRule.name
+        pKnownError.rule.name === pRule.name,
     )
       ? pSoftenedSeverity
       : pRule.severity,
@@ -22,12 +22,12 @@ function softenModuleViolation(
 function softenDependencyViolation(
   pViolationKey,
   pKnownDependencyViolations,
-  pSoftenedSeverity
+  pSoftenedSeverity,
 ) {
   return {
     ...pViolationKey.rule,
     severity: pKnownDependencyViolations.some((pKnownError) =>
-      isSameViolation(pKnownError, pViolationKey)
+      isSameViolation(pKnownError, pViolationKey),
     )
       ? pSoftenedSeverity
       : pViolationKey.rule.severity,
@@ -38,7 +38,7 @@ function softenDependencyViolations(
   pDependency,
   pModuleSource,
   pKnownDependencyViolations,
-  pSoftenedSeverity
+  pSoftenedSeverity,
 ) {
   if (!pDependency.valid) {
     return {
@@ -52,8 +52,8 @@ function softenDependencyViolations(
             cycle: pDependency.cycle,
           },
           pKnownDependencyViolations,
-          pSoftenedSeverity
-        )
+          pSoftenedSeverity,
+        ),
       ),
     };
   }
@@ -78,10 +78,10 @@ function softenKnownViolation(pModule, pKnownViolations, pSoftenedSeverity) {
           pModule.source,
           pKnownViolations.filter(
             (pKnownError) =>
-              pKnownError.from === pKnownError.to && !pKnownError.cycle
+              pKnownError.from === pKnownError.to && !pKnownError.cycle,
           ),
-          pSoftenedSeverity
-        )
+          pSoftenedSeverity,
+        ),
       ),
     };
   }
@@ -94,10 +94,10 @@ function softenKnownViolation(pModule, pKnownViolations, pSoftenedSeverity) {
         pModule.source,
         pKnownViolations.filter(
           (pKnownError) =>
-            pKnownError.from !== pKnownError.to || pKnownError.cycle
+            pKnownError.from !== pKnownError.to || pKnownError.cycle,
         ),
-        pSoftenedSeverity
-      )
+        pSoftenedSeverity,
+      ),
     ),
   };
 
@@ -114,12 +114,12 @@ function softenKnownViolation(pModule, pKnownViolations, pSoftenedSeverity) {
 export default function softenKnownViolations(
   pModules,
   pKnownViolations,
-  pSoftenedSeverity = "ignore"
+  pSoftenedSeverity = "ignore",
 ) {
   if (Boolean(pKnownViolations)) {
     bus.info("analyzing: comparing against known errors");
     return pModules.map((pModule) =>
-      softenKnownViolation(pModule, pKnownViolations, pSoftenedSeverity)
+      softenKnownViolation(pModule, pKnownViolations, pSoftenedSeverity),
     );
   }
   return pModules;
diff --git a/src/enrich/summarize/index.mjs b/src/enrich/summarize/index.mjs
index 1e53a47c..3269a48a 100644
--- a/src/enrich/summarize/index.mjs
+++ b/src/enrich/summarize/index.mjs
@@ -1,4 +1,3 @@
-import compare from "../../graph-utl/compare.mjs";
 import addRuleSetUsed from "./add-rule-set-used.mjs";
 import summarizeModules from "./summarize-modules.mjs";
 import summarizeFolders from "./summarize-folders.mjs";
@@ -8,6 +7,7 @@ import {
   getModulesCruised,
   getDependenciesCruised,
 } from "./get-stats.mjs";
+import compare from "#graph-utl/compare.mjs";
 
 /**
  *
@@ -27,7 +27,7 @@ export default function summarize(
   pModules,
   pOptions,
   pFileDirectoryArray,
-  pFolders
+  pFolders,
 ) {
   const lViolations = summarizeModules(pModules, pOptions.ruleSet)
     .concat(summarizeFolders(pFolders || [], pOptions.ruleSet))
diff --git a/src/enrich/summarize/summarize-folders.mjs b/src/enrich/summarize/summarize-folders.mjs
index 0e89695d..0c9bc92c 100644
--- a/src/enrich/summarize/summarize-folders.mjs
+++ b/src/enrich/summarize/summarize-folders.mjs
@@ -1,5 +1,5 @@
 import has from "lodash/has.js";
-import { findRuleByName } from "../../graph-utl/rule-set.mjs";
+import { findRuleByName } from "#graph-utl/rule-set.mjs";
 
 function classifyViolation(pRule, pRuleSet) {
   const lRule = findRuleByName(pRuleSet, pRule.name);
@@ -38,7 +38,7 @@ function getViolations(pFolder, pRuleSet) {
               }
             : {}),
         };
-      })
+      }),
     );
 }
 
diff --git a/src/enrich/summarize/summarize-modules.mjs b/src/enrich/summarize/summarize-modules.mjs
index ab08a57c..3b922ed1 100644
--- a/src/enrich/summarize/summarize-modules.mjs
+++ b/src/enrich/summarize/summarize-modules.mjs
@@ -1,15 +1,15 @@
 import flattenDeep from "lodash/flattenDeep.js";
 import has from "lodash/has.js";
 import uniqWith from "lodash/uniqWith.js";
-import { findRuleByName } from "../../graph-utl/rule-set.mjs";
-import compare from "../../graph-utl/compare.mjs";
 import isSameViolation from "./is-same-violation.mjs";
+import { findRuleByName } from "#graph-utl/rule-set.mjs";
+import compare from "#graph-utl/compare.mjs";
 
 function cutNonTransgressions(pModule) {
   return {
     ...pModule,
     dependencies: pModule.dependencies.filter(
-      (pDependency) => pDependency.valid === false
+      (pDependency) => pDependency.valid === false,
     ),
   };
 }
@@ -76,10 +76,10 @@ function extractDependencyViolations(pModules, pRuleSet) {
       .map((pModule) =>
         pModule.dependencies.map((pDependency) =>
           pDependency.rules.map((pRule) =>
-            toDependencyViolationSummary(pRule, pModule, pDependency, pRuleSet)
-          )
-        )
-      )
+            toDependencyViolationSummary(pRule, pModule, pDependency, pRuleSet),
+          ),
+        ),
+      ),
   );
 }
 
@@ -96,9 +96,9 @@ function toModuleViolationSummary(pRule, pModule, pRuleSet) {
             pReachable.modules.map((pReachableModule) => ({
               to: pReachableModule.source,
               via: pReachableModule.via,
-            }))
+            })),
           ),
-        []
+        [],
       )
       .map((pToModule) => ({
         type: "reachability",
@@ -121,12 +121,12 @@ function extractModuleViolations(pModules, pRuleSet) {
           pModule.rules.reduce(
             (pAllRules, pRule) =>
               pAllRules.concat(
-                toModuleViolationSummary(pRule, pModule, pRuleSet)
+                toModuleViolationSummary(pRule, pModule, pRuleSet),
               ),
-            []
-          )
+            [],
+          ),
         ),
-      []
+      [],
     );
 }
 
@@ -135,6 +135,6 @@ export default function summarizeModules(pModules, pRuleSet) {
     extractDependencyViolations(pModules, pRuleSet)
       .concat(extractModuleViolations(pModules, pRuleSet))
       .sort(compare.violations),
-    isSameViolation
+    isSameViolation,
   );
 }
diff --git a/src/extract/ast-extractors/extract-typescript-deps.mjs b/src/extract/ast-extractors/extract-typescript-deps.mjs
index f5bbec73..09f7e81d 100644
--- a/src/extract/ast-extractors/extract-typescript-deps.mjs
+++ b/src/extract/ast-extractors/extract-typescript-deps.mjs
@@ -1,11 +1,11 @@
 /* eslint-disable no-inline-comments */
 import tryImport from "semver-try-require";
-import meta from "../../meta.js";
+import meta from "#meta";
 
 /** @type {import("typescript")} */
 const typescript = await tryImport(
   "typescript",
-  meta.supportedTranspilers.typescript
+  meta.supportedTranspilers.typescript,
 );
 
 function isTypeOnly(pStatement) {
@@ -41,7 +41,7 @@ function extractImportsAndExports(pAST) {
       (pStatement) =>
         (typescript.SyntaxKind[pStatement.kind] === "ImportDeclaration" ||
           typescript.SyntaxKind[pStatement.kind] === "ExportDeclaration") &&
-        Boolean(pStatement.moduleSpecifier)
+        Boolean(pStatement.moduleSpecifier),
     )
     .map((pStatement) => ({
       module: pStatement.moduleSpecifier.text,
@@ -69,7 +69,7 @@ function extractImportEquals(pAST) {
         typescript.SyntaxKind[pStatement.kind] === "ImportEqualsDeclaration" &&
         pStatement.moduleReference &&
         pStatement.moduleReference.expression &&
-        pStatement.moduleReference.expression.text
+        pStatement.moduleReference.expression.text,
     )
     .map((pStatement) => ({
       module: pStatement.moduleReference.expression.text,
@@ -97,14 +97,14 @@ function extractTripleSlashDirectives(pAST) {
         module: pReference.fileName,
         moduleSystem: "tsd",
         exoticallyRequired: false,
-      }))
+      })),
     )
     .concat(
       pAST.amdDependencies.map((pReference) => ({
         module: pReference.path,
         moduleSystem: "tsd",
         exoticallyRequired: false,
-      }))
+      })),
     );
 }
 
@@ -267,14 +267,14 @@ function extractNestedDependencies(pAST, pExoticRequireStrings) {
  */
 export default function extractTypeScriptDependencies(
   pTypeScriptAST,
-  pExoticRequireStrings
+  pExoticRequireStrings,
 ) {
   return Boolean(typescript)
     ? extractImportsAndExports(pTypeScriptAST)
         .concat(extractImportEquals(pTypeScriptAST))
         .concat(extractTripleSlashDirectives(pTypeScriptAST))
         .concat(
-          extractNestedDependencies(pTypeScriptAST, pExoticRequireStrings)
+          extractNestedDependencies(pTypeScriptAST, pExoticRequireStrings),
         )
         .map((pModule) => ({ dynamic: false, ...pModule }))
     : /* c8 ignore next */ [];
diff --git a/src/extract/ast-extractors/swc-dependency-visitor.mjs b/src/extract/ast-extractors/swc-dependency-visitor.mjs
index 7d473e0c..cbf6c9dd 100644
--- a/src/extract/ast-extractors/swc-dependency-visitor.mjs
+++ b/src/extract/ast-extractors/swc-dependency-visitor.mjs
@@ -1,12 +1,12 @@
 /* eslint-disable no-inline-comments */
 /* eslint-disable max-classes-per-file */
 import tryImport from "semver-try-require";
-import meta from "../../meta.js";
+import meta from "#meta";
 
 /** @type {import('@swc/core/Visitor')} */
 const { Visitor } = await tryImport(
   "@swc/core/Visitor.js",
-  meta.supportedTranspilers.swc
+  meta.supportedTranspilers.swc,
 );
 
 function pryStringsFromArguments(pArguments) {
@@ -39,7 +39,7 @@ function argumentsAreUsable(pArguments) {
   return (
     pArguments.length > 0 &&
     ["StringLiteral", "TemplateLiteral"].includes(
-      pArguments[0].expression.type
+      pArguments[0].expression.type,
     ) &&
     (!(pArguments[0].expression.type === "TemplateLiteral") ||
       isPlaceholderlessTemplateLiteral(pArguments[0]))
@@ -209,7 +209,7 @@ export default Visitor
 
         // using "window.require" as an exotic require string...
         this.lResult = this.lResult.concat(
-          extractExoticMemberCallExpression(pNode, this.lExoticRequireStrings)
+          extractExoticMemberCallExpression(pNode, this.lExoticRequireStrings),
         );
 
         return super.visitCallExpression(pNode);
diff --git a/src/extract/gather-initial-sources.mjs b/src/extract/gather-initial-sources.mjs
index 97930e2f..62f796d3 100644
--- a/src/extract/gather-initial-sources.mjs
+++ b/src/extract/gather-initial-sources.mjs
@@ -1,10 +1,10 @@
 import { readdirSync, statSync } from "node:fs";
 import { join, normalize } from "node:path";
 import picomatch from "picomatch";
-import { filenameMatchesPattern } from "../graph-utl/match-facade.mjs";
-import getExtension from "../utl/get-extension.mjs";
-import pathToPosix from "../utl/path-to-posix.mjs";
 import { scannableExtensions } from "./transpile/meta.mjs";
+import { filenameMatchesPattern } from "#graph-utl/match-facade.mjs";
+import getExtension from "#utl/get-extension.mjs";
+import pathToPosix from "#utl/path-to-posix.mjs";
 
 /**
  *
diff --git a/src/extract/get-dependencies.mjs b/src/extract/get-dependencies.mjs
index 9f54f22e..f5964c4b 100644
--- a/src/extract/get-dependencies.mjs
+++ b/src/extract/get-dependencies.mjs
@@ -1,6 +1,5 @@
 import { join, extname, dirname } from "node:path";
 import uniqBy from "lodash/uniqBy.js";
-import { intersects } from "../utl/array-util.mjs";
 import resolve from "./resolve/index.mjs";
 import extractES6Deps from "./ast-extractors/extract-es6-deps.mjs";
 import extractCommonJSDeps from "./ast-extractors/extract-cjs-deps.mjs";
@@ -14,22 +13,23 @@ import {
   detectPreCompilationNess,
   extractModuleAttributes,
 } from "./helpers.mjs";
+import { intersects } from "#utl/array-util.mjs";
 
 function extractFromSwcAST({ baseDir, exoticRequireStrings }, pFileName) {
   return extractSwcDeps(
     toSwcAST.getASTCached(join(baseDir, pFileName)),
-    exoticRequireStrings
+    exoticRequireStrings,
   );
 }
 
 function extractFromTypeScriptAST(
   { baseDir, exoticRequireStrings },
   pFileName,
-  pTranspileOptions
+  pTranspileOptions,
 ) {
   return extractTypeScriptDeps(
     toTypescriptAST.getASTCached(join(baseDir, pFileName), pTranspileOptions),
-    exoticRequireStrings
+    exoticRequireStrings,
   );
 }
 
@@ -65,12 +65,12 @@ function shouldUseSwc({ parser }, pFileName) {
 function extractFromJavaScriptAST(
   { baseDir, moduleSystems, exoticRequireStrings },
   pFileName,
-  pTranspileOptions
+  pTranspileOptions,
 ) {
   let lDependencies = [];
   const lAST = toJavascriptAST.getASTCached(
     join(baseDir, pFileName),
-    pTranspileOptions
+    pTranspileOptions,
   );
 
   if (moduleSystems.includes("cjs")) {
@@ -88,7 +88,7 @@ function extractFromJavaScriptAST(
 
 function extractWithSwc(pCruiseOptions, pFileName) {
   return extractFromSwcAST(pCruiseOptions, pFileName).filter(
-    ({ moduleSystem }) => pCruiseOptions.moduleSystems.includes(moduleSystem)
+    ({ moduleSystem }) => pCruiseOptions.moduleSystems.includes(moduleSystem),
   );
 }
 
@@ -96,15 +96,15 @@ function extractWithTsc(pCruiseOptions, pFileName, pTranspileOptions) {
   let lDependencies = extractFromTypeScriptAST(
     pCruiseOptions,
     pFileName,
-    pTranspileOptions
+    pTranspileOptions,
   ).filter(({ moduleSystem }) =>
-    pCruiseOptions.moduleSystems.includes(moduleSystem)
+    pCruiseOptions.moduleSystems.includes(moduleSystem),
   );
 
   if (pCruiseOptions.tsPreCompilationDeps === "specify") {
     lDependencies = detectPreCompilationNess(
       lDependencies,
-      extractFromJavaScriptAST(pCruiseOptions, pFileName, pTranspileOptions)
+      extractFromJavaScriptAST(pCruiseOptions, pFileName, pTranspileOptions),
     );
   }
   return lDependencies;
@@ -128,13 +128,13 @@ function extractDependencies(pCruiseOptions, pFileName, pTranspileOptions) {
       lDependencies = extractWithTsc(
         pCruiseOptions,
         pFileName,
-        pTranspileOptions
+        pTranspileOptions,
       );
     } else {
       lDependencies = extractFromJavaScriptAST(
         pCruiseOptions,
         pFileName,
-        pTranspileOptions
+        pTranspileOptions,
       );
     }
   }
@@ -159,14 +159,14 @@ function matchesDoNotFollow({ resolved, dependencyTypes }, pDoNotFollow) {
 function addResolutionAttributes(
   { baseDir, doNotFollow },
   pFileName,
-  pResolveOptions
+  pResolveOptions,
 ) {
   return function addAttributes(pDependency) {
     const lResolved = resolve(
       pDependency,
       baseDir,
       join(baseDir, dirname(pFileName)),
-      pResolveOptions
+      pResolveOptions,
     );
     const lMatchesDoNotFollow = matchesDoNotFollow(lResolved, doNotFollow);
 
@@ -190,13 +190,13 @@ function matchesPattern(pFullPathToFile, pPattern) {
  */
 function getDependencyUniqueKey({ module, moduleSystem, dependencyTypes }) {
   return `${module} ${moduleSystem} ${(dependencyTypes || []).includes(
-    "type-only"
+    "type-only",
   )}`;
 }
 
 function compareDeps(pLeft, pRight) {
   return getDependencyUniqueKey(pLeft).localeCompare(
-    getDependencyUniqueKey(pRight)
+    getDependencyUniqueKey(pRight),
   );
 }
 
@@ -223,12 +223,12 @@ export default function getDependencies(
   pFileName,
   pCruiseOptions,
   pResolveOptions,
-  pTranspileOptions
+  pTranspileOptions,
 ) {
   try {
     return uniqBy(
       extractDependencies(pCruiseOptions, pFileName, pTranspileOptions),
-      getDependencyUniqueKey
+      getDependencyUniqueKey,
     )
       .sort(compareDeps)
       .map(addResolutionAttributes(pCruiseOptions, pFileName, pResolveOptions))
@@ -237,11 +237,11 @@ export default function getDependencies(
           (!pCruiseOptions?.exclude?.path ||
             !matchesPattern(resolved, pCruiseOptions.exclude.path)) &&
           (!pCruiseOptions?.includeOnly?.path ||
-            matchesPattern(resolved, pCruiseOptions.includeOnly.path))
+            matchesPattern(resolved, pCruiseOptions.includeOnly.path)),
       );
   } catch (pError) {
     throw new Error(
-      `Extracting dependencies ran afoul of...\n\n  ${pError.message}\n... in ${pFileName}\n\n`
+      `Extracting dependencies ran afoul of...\n\n  ${pError.message}\n... in ${pFileName}\n\n`,
     );
   }
 }
diff --git a/src/extract/index.mjs b/src/extract/index.mjs
index 947d8fd6..6d671b9f 100644
--- a/src/extract/index.mjs
+++ b/src/extract/index.mjs
@@ -1,8 +1,8 @@
 import has from "lodash/has.js";
-import { bus } from "../utl/bus.mjs";
 import getDependencies from "./get-dependencies.mjs";
 import gatherInitialSources from "./gather-initial-sources.mjs";
 import clearCaches from "./clear-caches.mjs";
+import { bus } from "#utl/bus.mjs";
 
 /* eslint max-params:0 */
 function extractRecursive(
@@ -11,7 +11,7 @@ function extractRecursive(
   pVisited,
   pDepth,
   pResolveOptions,
-  pTranspileOptions
+  pTranspileOptions,
 ) {
   pVisited.add(pFileName);
   const lDependencies =
@@ -20,13 +20,13 @@ function extractRecursive(
           pFileName,
           pCruiseOptions,
           pResolveOptions,
-          pTranspileOptions
+          pTranspileOptions,
         )
       : [];
 
   return lDependencies
     .filter(
-      ({ followable, matchesDoNotFollow }) => followable && !matchesDoNotFollow
+      ({ followable, matchesDoNotFollow }) => followable && !matchesDoNotFollow,
     )
     .reduce(
       (pAll, { resolved }) => {
@@ -38,8 +38,8 @@ function extractRecursive(
               pVisited,
               pDepth + 1,
               pResolveOptions,
-              pTranspileOptions
-            )
+              pTranspileOptions,
+            ),
           );
         }
         return pAll;
@@ -49,7 +49,7 @@ function extractRecursive(
           source: pFileName,
           dependencies: lDependencies,
         },
-      ]
+      ],
     );
 }
 
@@ -57,14 +57,14 @@ function extractFileDirectoryArray(
   pFileDirectoryArray,
   pCruiseOptions,
   pResolveOptions,
-  pTranspileOptions
+  pTranspileOptions,
 ) {
   let lVisited = new Set();
 
   bus.info("reading files: gathering initial sources");
   const lInitialSources = gatherInitialSources(
     pFileDirectoryArray,
-    pCruiseOptions
+    pCruiseOptions,
   );
 
   bus.info("reading files: visiting dependencies");
@@ -78,8 +78,8 @@ function extractFileDirectoryArray(
           lVisited,
           0,
           pResolveOptions,
-          pTranspileOptions
-        )
+          pTranspileOptions,
+        ),
       );
     }
     return pDependencies;
@@ -113,7 +113,7 @@ function complete(pAll, pFromListItem) {
       pFromListItem.dependencies
         .filter(isNotFollowable)
         .filter(notInFromListAlready(pAll))
-        .map(toDependencyToSource)
+        .map(toDependencyToSource),
     );
 }
 
@@ -122,7 +122,8 @@ function filterExcludedDynamicDependencies(pModule, pExclude) {
   return {
     ...pModule,
     dependencies: pModule.dependencies.filter(
-      ({ dynamic }) => !has(pExclude, "dynamic") || pExclude.dynamic !== dynamic
+      ({ dynamic }) =>
+        !has(pExclude, "dynamic") || pExclude.dynamic !== dynamic,
     ),
   };
 }
@@ -141,7 +142,7 @@ export default function extract(
   pFileDirectoryArray,
   pCruiseOptions,
   pResolveOptions,
-  pTranspileOptions
+  pTranspileOptions,
 ) {
   clearCaches();
 
@@ -149,11 +150,11 @@ export default function extract(
     pFileDirectoryArray,
     pCruiseOptions,
     pResolveOptions,
-    pTranspileOptions
+    pTranspileOptions,
   )
     .reduce(complete, [])
     .map((pModule) =>
-      filterExcludedDynamicDependencies(pModule, pCruiseOptions.exclude)
+      filterExcludedDynamicDependencies(pModule, pCruiseOptions.exclude),
     );
   pResolveOptions.fileSystem.purge();
   clearCaches();
diff --git a/src/extract/parse/to-javascript-ast.mjs b/src/extract/parse/to-javascript-ast.mjs
index 11e30162..1f76613a 100644
--- a/src/extract/parse/to-javascript-ast.mjs
+++ b/src/extract/parse/to-javascript-ast.mjs
@@ -4,7 +4,7 @@ import { parse as acornLooseParse } from "acorn-loose";
 import acornJsx from "acorn-jsx";
 import memoize from "lodash/memoize.js";
 import transpile from "../transpile/index.mjs";
-import getExtension from "../../utl/get-extension.mjs";
+import getExtension from "#utl/get-extension.mjs";
 
 /** @type acorn.Options */
 const ACORN_OPTIONS = {
@@ -69,7 +69,7 @@ function getAST(pFileName, pTranspileOptions) {
       extension: getExtension(pFileName),
       filename: pFileName,
     },
-    pTranspileOptions
+    pTranspileOptions,
   );
 }
 
@@ -84,7 +84,7 @@ function getAST(pFileName, pTranspileOptions) {
  */
 export const getASTCached = memoize(
   getAST,
-  (pFileName, pTranspileOptions) => `${pFileName}|${pTranspileOptions}`
+  (pFileName, pTranspileOptions) => `${pFileName}|${pTranspileOptions}`,
 );
 
 export function clearCache() {
diff --git a/src/extract/parse/to-swc-ast.mjs b/src/extract/parse/to-swc-ast.mjs
index 24cf9dfd..581c59d8 100644
--- a/src/extract/parse/to-swc-ast.mjs
+++ b/src/extract/parse/to-swc-ast.mjs
@@ -1,6 +1,6 @@
 import tryImport from "semver-try-require";
 import memoize from "lodash/memoize.js";
-import meta from "../../meta.js";
+import meta from "#meta";
 
 /** @type {import('@swc/core')} */
 const swc = await tryImport("@swc/core", meta.supportedTranspilers.swc);
diff --git a/src/extract/parse/to-typescript-ast.mjs b/src/extract/parse/to-typescript-ast.mjs
index e5325ce2..9c83351c 100644
--- a/src/extract/parse/to-typescript-ast.mjs
+++ b/src/extract/parse/to-typescript-ast.mjs
@@ -1,14 +1,14 @@
 import { readFileSync } from "node:fs";
 import tryImport from "semver-try-require";
 import memoize from "lodash/memoize.js";
-import meta from "../../meta.js";
 import transpile from "../transpile/index.mjs";
-import getExtension from "../../utl/get-extension.mjs";
+import meta from "#meta";
+import getExtension from "#utl/get-extension.mjs";
 
 /** @type {import('typescript')} */
 const typescript = await tryImport(
   "typescript",
-  meta.supportedTranspilers.typescript
+  meta.supportedTranspilers.typescript,
 );
 
 /**
@@ -29,7 +29,7 @@ export function getASTFromSource(pFileRecord, pTranspileOptions) {
     pFileRecord.filename || "$internal-file-name",
     lSource,
     typescript.ScriptTarget.Latest,
-    false
+    false,
   );
 }
 
@@ -49,7 +49,7 @@ function getAST(pFileName, pTranspileOptions) {
       extension: getExtension(pFileName),
       filename: pFileName,
     },
-    pTranspileOptions
+    pTranspileOptions,
   );
 }
 
diff --git a/src/extract/resolve/index.mjs b/src/extract/resolve/index.mjs
index 609b7abe..d71801ab 100644
--- a/src/extract/resolve/index.mjs
+++ b/src/extract/resolve/index.mjs
@@ -1,13 +1,13 @@
 import { realpathSync } from "node:fs";
 import { extname, resolve as path_resolve, relative } from "node:path";
 import monkeyPatchedModule from "node:module";
-import pathToPosix from "../../utl/path-to-posix.mjs";
 import { isRelativeModuleName } from "./module-classifiers.mjs";
 import { resolveAMD } from "./resolve-amd.mjs";
 import resolveCommonJS from "./resolve-cjs.mjs";
 import { stripToModuleName, addLicenseAttribute } from "./resolve-helpers.mjs";
 import determineDependencyTypes from "./determine-dependency-types.mjs";
 import { getManifest } from "./get-manifest.mjs";
+import pathToPosix from "#utl/path-to-posix.mjs";
 
 /**
  *
diff --git a/src/extract/resolve/module-classifiers.mjs b/src/extract/resolve/module-classifiers.mjs
index f24e6ed5..fdbea720 100644
--- a/src/extract/resolve/module-classifiers.mjs
+++ b/src/extract/resolve/module-classifiers.mjs
@@ -1,5 +1,5 @@
 import { isAbsolute, resolve as path_resolve } from "node:path";
-import getExtension from "../../utl/get-extension.mjs";
+import getExtension from "#utl/get-extension.mjs";
 
 let gFollowableExtensionsCache = new Set();
 let gFollowableExtensionsCacheInitialized = false;
@@ -21,7 +21,7 @@ export function isRelativeModuleName(pModuleName) {
 export function isExternalModule(
   pResolvedModuleName,
   pModuleFolderNames = ["node_modules"],
-  pBaseDirectory = "."
+  pBaseDirectory = ".",
 ) {
   return (
     Boolean(pResolvedModuleName) &&
@@ -37,11 +37,11 @@ export function isExternalModule(
       (pModuleFolderName) => {
         if (isAbsolute(pModuleFolderName)) {
           return path_resolve(pBaseDirectory, pResolvedModuleName).startsWith(
-            pModuleFolderName
+            pModuleFolderName,
           );
         }
         return pResolvedModuleName.includes(pModuleFolderName);
-      }
+      },
     )
   );
 }
@@ -85,13 +85,13 @@ function getFollowableExtensions(pResolveOptions) {
 
 export function isFollowable(pResolvedFilename, pResolveOptions) {
   return getFollowableExtensions(pResolveOptions).has(
-    getExtension(pResolvedFilename)
+    getExtension(pResolvedFilename),
   );
 }
 
 function isWebPackAliased(pModuleName, pAliasObject) {
   return Object.keys(pAliasObject || {}).some((pAliasLHS) =>
-    pModuleName.startsWith(pAliasLHS)
+    pModuleName.startsWith(pAliasLHS),
   );
 }
 
@@ -99,7 +99,7 @@ function isLikelyTSAliased(
   pModuleName,
   pResolvedModuleName,
   pResolveOptions,
-  pBaseDirectory
+  pBaseDirectory,
 ) {
   return (
     pResolveOptions.tsConfig &&
diff --git a/src/extract/resolve/resolve-amd.mjs b/src/extract/resolve/resolve-amd.mjs
index 06723972..05d71493 100644
--- a/src/extract/resolve/resolve-amd.mjs
+++ b/src/extract/resolve/resolve-amd.mjs
@@ -1,8 +1,8 @@
 import { accessSync, R_OK } from "node:fs";
 import { relative, join } from "node:path";
 import memoize from "lodash/memoize.js";
-import pathToPosix from "../../utl/path-to-posix.mjs";
 import { isBuiltin } from "./is-built-in.mjs";
+import pathToPosix from "#utl/path-to-posix.mjs";
 
 const fileExists = memoize((pFile) => {
   try {
diff --git a/src/extract/resolve/resolve-cjs.mjs b/src/extract/resolve/resolve-cjs.mjs
index cab1080a..c97d5962 100644
--- a/src/extract/resolve/resolve-cjs.mjs
+++ b/src/extract/resolve/resolve-cjs.mjs
@@ -1,8 +1,8 @@
 import { relative } from "node:path";
-import pathToPosix from "../../utl/path-to-posix.mjs";
 import { isFollowable } from "./module-classifiers.mjs";
 import { resolve } from "./resolve.mjs";
 import { isBuiltin } from "./is-built-in.mjs";
+import pathToPosix from "#utl/path-to-posix.mjs";
 
 function addResolutionAttributes(
   pBaseDirectory,
diff --git a/src/extract/resolve/resolve.mjs b/src/extract/resolve/resolve.mjs
index 13839e98..41889d0a 100644
--- a/src/extract/resolve/resolve.mjs
+++ b/src/extract/resolve/resolve.mjs
@@ -1,6 +1,6 @@
 import enhancedResolve from "enhanced-resolve";
-import pathToPosix from "../../utl/path-to-posix.mjs";
 import { stripQueryParameters } from "../helpers.mjs";
+import pathToPosix from "#utl/path-to-posix.mjs";
 
 let gResolvers = {};
 let gInitialized = {};
@@ -38,7 +38,7 @@ export function resolve(
   pModuleName,
   pFileDirectory,
   pResolveOptions,
-  pCachingContext = "cruise"
+  pCachingContext = "cruise",
 ) {
   init(pResolveOptions, pCachingContext);
 
@@ -48,8 +48,8 @@ export function resolve(
       // lookupStartPath
       pathToPosix(pFileDirectory),
       // request
-      pModuleName
-    )
+      pModuleName,
+    ),
   );
 }
 
diff --git a/src/extract/transpile/babel-wrap.mjs b/src/extract/transpile/babel-wrap.mjs
index 4b3bf4c7..c468435d 100644
--- a/src/extract/transpile/babel-wrap.mjs
+++ b/src/extract/transpile/babel-wrap.mjs
@@ -1,5 +1,5 @@
 import tryImport from "semver-try-require";
-import meta from "../../meta.js";
+import meta from "#meta";
 
 const babel = await tryImport("@babel/core", meta.supportedTranspilers.babel);
 
diff --git a/src/extract/transpile/coffeescript-wrap.mjs b/src/extract/transpile/coffeescript-wrap.mjs
index 24daa64a..e82210e6 100644
--- a/src/extract/transpile/coffeescript-wrap.mjs
+++ b/src/extract/transpile/coffeescript-wrap.mjs
@@ -1,5 +1,5 @@
 import tryImport from "semver-try-require";
-import meta from "../../meta.js";
+import meta from "#meta";
 
 /*
  * coffeescript's npm repo was renamed from coffee-script to coffeescript
@@ -9,14 +9,14 @@ import meta from "../../meta.js";
 async function getCoffeeScriptModule() {
   let lReturnValue = await tryImport(
     "coffeescript",
-    meta.supportedTranspilers.coffeescript
+    meta.supportedTranspilers.coffeescript,
   );
 
   /* c8 ignore start */
   if (lReturnValue === false) {
     lReturnValue = await tryImport(
       "coffee-script",
-      meta.supportedTranspilers["coffee-script"]
+      meta.supportedTranspilers["coffee-script"],
     );
   }
   /* c8 ignore stop */
diff --git a/src/extract/transpile/livescript-wrap.mjs b/src/extract/transpile/livescript-wrap.mjs
index 90a7c522..e9f4cabb 100644
--- a/src/extract/transpile/livescript-wrap.mjs
+++ b/src/extract/transpile/livescript-wrap.mjs
@@ -1,9 +1,9 @@
 import tryImport from "semver-try-require";
-import meta from "../../meta.js";
+import meta from "#meta";
 
 const livescript = await tryImport(
   "livescript",
-  meta.supportedTranspilers.livescript
+  meta.supportedTranspilers.livescript,
 );
 
 /* c8 ignore start */
diff --git a/src/extract/transpile/meta.mjs b/src/extract/transpile/meta.mjs
index 4aa781e4..a96395d1 100644
--- a/src/extract/transpile/meta.mjs
+++ b/src/extract/transpile/meta.mjs
@@ -1,6 +1,6 @@
 /* eslint security/detect-object-injection : 0*/
-import meta from "../../meta.js";
 import tryAvailable from "./try-import-available.mjs";
+import meta from "#meta";
 
 function gotCoffee() {
   return (
@@ -20,11 +20,11 @@ const TRANSPILER2AVAILABLE = {
   typescript: tryAvailable("typescript", meta.supportedTranspilers.typescript),
   "vue-template-compiler": tryAvailable(
     "vue-template-compiler",
-    meta.supportedTranspilers["vue-template-compiler"]
+    meta.supportedTranspilers["vue-template-compiler"],
   ),
   "@vue/compiler-sfc": tryAvailable(
     "@vue/compiler-sfc",
-    meta.supportedTranspilers["@vue/compiler-sfc"]
+    meta.supportedTranspilers["@vue/compiler-sfc"],
   ),
 };
 
@@ -78,7 +78,7 @@ export const allExtensions = Array.from(EXTENSION2AVAILABLE.keys()).map(
   (pExtension) => ({
     extension: pExtension,
     available: extensionIsAvailable(pExtension),
-  })
+  }),
 );
 
 /**
@@ -88,7 +88,7 @@ export const allExtensions = Array.from(EXTENSION2AVAILABLE.keys()).map(
  * @type {string[]}
  */
 export const scannableExtensions = Array.from(
-  EXTENSION2AVAILABLE.keys()
+  EXTENSION2AVAILABLE.keys(),
 ).filter(extensionIsAvailable);
 
 /**
diff --git a/src/extract/transpile/svelte-wrap.mjs b/src/extract/transpile/svelte-wrap.mjs
index ea6a5def..80399488 100644
--- a/src/extract/transpile/svelte-wrap.mjs
+++ b/src/extract/transpile/svelte-wrap.mjs
@@ -1,10 +1,10 @@
 import tryImport from "semver-try-require";
-import meta from "../../meta.js";
 import preProcess from "./svelte-preprocess.mjs";
+import meta from "#meta";
 
 const { compile } = await tryImport(
   "svelte/compiler",
-  meta.supportedTranspilers.svelte
+  meta.supportedTranspilers.svelte,
 );
 
 function getTranspiler(pTranspilerWrapper) {
@@ -12,7 +12,7 @@ function getTranspiler(pTranspilerWrapper) {
     const lPreProcessedSource = preProcess(
       pSource,
       pTranspilerWrapper,
-      pTranspilerOptions
+      pTranspilerOptions,
     );
     return compile(lPreProcessedSource).js.code;
   };
diff --git a/src/extract/transpile/typescript-wrap.mjs b/src/extract/transpile/typescript-wrap.mjs
index e67270fe..b8b80499 100644
--- a/src/extract/transpile/typescript-wrap.mjs
+++ b/src/extract/transpile/typescript-wrap.mjs
@@ -1,9 +1,9 @@
 import tryImport from "semver-try-require";
-import meta from "../../meta.js";
+import meta from "#meta";
 
 const typescript = await tryImport(
   "typescript",
-  meta.supportedTranspilers.typescript
+  meta.supportedTranspilers.typescript,
 );
 
 function getCompilerOptions(pFlavor, pTSConfig) {
@@ -41,7 +41,7 @@ export default function typescriptWrap(pFlavor) {
         ...(pTranspileOptions.tsConfig || {}),
         compilerOptions: getCompilerOptions(
           pFlavor,
-          pTranspileOptions.tsConfig || {}
+          pTranspileOptions.tsConfig || {},
         ),
       }).outputText,
   };
diff --git a/src/extract/transpile/vue-template-wrap.cjs b/src/extract/transpile/vue-template-wrap.cjs
index f6de39e1..f00fc077 100644
--- a/src/extract/transpile/vue-template-wrap.cjs
+++ b/src/extract/transpile/vue-template-wrap.cjs
@@ -1,7 +1,7 @@
 const { EOL } = require("node:os");
 const isEmpty = require("lodash/isEmpty");
 const tryRequire = require("semver-try-require");
-const meta = require("../../meta.js");
+const meta = require("#meta");
 
 /*
  * vue-template-compiler was replaced by @vue/compiler-sfc for Vue3.
@@ -15,13 +15,13 @@ function getVueTemplateCompiler() {
 
   let lCompiler = tryRequire(
     "vue-template-compiler",
-    meta.supportedTranspilers["vue-template-compiler"]
+    meta.supportedTranspilers["vue-template-compiler"],
   );
 
   if (lCompiler === false) {
     lCompiler = tryRequire(
       "@vue/compiler-sfc",
-      meta.supportedTranspilers["@vue/compiler-sfc"]
+      meta.supportedTranspilers["@vue/compiler-sfc"],
     );
     lIsVue3 = true;
   }
diff --git a/src/main/cruise.mjs b/src/main/cruise.mjs
index 0b9adde5..920b8fd4 100644
--- a/src/main/cruise.mjs
+++ b/src/main/cruise.mjs
@@ -1,9 +1,8 @@
-/* eslint-disable no-return-await */
-/* eslint-disable no-magic-numbers */
-import { bus } from "../utl/bus.mjs";
+/* eslint-disable no-return-await, no-magic-numbers */
 import { assertCruiseOptionsValid } from "./options/assert-validity.mjs";
 import { normalizeCruiseOptions } from "./options/normalize.mjs";
 import reportWrap from "./report-wrap.mjs";
+import { bus } from "#utl/bus.mjs";
 
 const TOTAL_STEPS = 10;
 
@@ -33,7 +32,7 @@ export default async function cruise(
       c(2),
     );
 
-    const { default: Cache } = await import("../cache/cache.mjs");
+    const { default: Cache } = await import("#cache/cache.mjs");
     lCache = new Cache(lCruiseOptions.cache.strategy);
     const lCachedResults = await lCache.read(lCruiseOptions.cache.folder);
 
@@ -58,8 +57,8 @@ export default async function cruise(
     import("./rule-set/assert-validity.mjs"),
     import("./files-and-dirs/normalize.mjs"),
     import("./resolve-options/normalize.mjs"),
-    import("../extract/index.mjs"),
-    import("../enrich/index.mjs"),
+    import("#extract/index.mjs"),
+    import("#enrich/index.mjs"),
   ]);
 
   if (Boolean(lCruiseOptions.ruleSet)) {
diff --git a/src/main/format.mjs b/src/main/format.mjs
index 732d93f6..6c357b9d 100644
--- a/src/main/format.mjs
+++ b/src/main/format.mjs
@@ -1,9 +1,9 @@
 import Ajv from "ajv";
 
-import cruiseResultSchema from "../schema/cruise-result.schema.mjs";
 import { assertFormatOptionsValid } from "./options/assert-validity.mjs";
 import { normalizeFormatOptions } from "./options/normalize.mjs";
 import reportWrap from "./report-wrap.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
 
 function validateResultAgainstSchema(pResult) {
   const ajv = new Ajv();
diff --git a/src/main/index.d.ts b/src/main/index.d.ts
index c64ecf42..a9f34fa6 100644
--- a/src/main/index.d.ts
+++ b/src/main/index.d.ts
@@ -1,4 +1,4 @@
 // workaround to nodenext shenanigans with the TypeScript compiler
 // see https://github.com/sverweij/dependency-cruiser/issues/754
-// eslint-disable-next-line import/no-unresolved, node/no-missing-import, node/no-unpublished-import
+// eslint-disable-next-line node/no-unpublished-import
 export * from "../../types/dependency-cruiser";
diff --git a/src/main/index.mjs b/src/main/index.mjs
index e307325e..1fc3df9a 100644
--- a/src/main/index.mjs
+++ b/src/main/index.mjs
@@ -1,14 +1,14 @@
+import format from "./format.mjs";
+import cruise from "./cruise.mjs";
 import {
   allExtensions,
   getAvailableTranspilers,
-} from "../extract/transpile/meta.mjs";
-import format from "./format.mjs";
-import cruise from "./cruise.mjs";
+} from "#extract/transpile/meta.mjs";
 
 export {
   allExtensions,
   getAvailableTranspilers,
-} from "../extract/transpile/meta.mjs";
+} from "#extract/transpile/meta.mjs";
 export { default as cruise } from "./cruise.mjs";
 export { default as format } from "./format.mjs";
 
diff --git a/src/main/options/assert-validity.mjs b/src/main/options/assert-validity.mjs
index 9ded3a0d..6ea33b43 100644
--- a/src/main/options/assert-validity.mjs
+++ b/src/main/options/assert-validity.mjs
@@ -1,7 +1,7 @@
 import has from "lodash/has.js";
 import merge from "lodash/merge.js";
 import safeRegex from "safe-regex";
-import report from "../../report/index.mjs";
+import report from "#report/index.mjs";
 
 const MODULE_SYSTEM_LIST_RE = /^((cjs|amd|es6|tsd)(,|$))+$/gi;
 const VALID_DEPTH_RE = /^\d{1,2}$/g;
diff --git a/src/main/report-wrap.mjs b/src/main/report-wrap.mjs
index 499fd24e..45a9cca8 100644
--- a/src/main/report-wrap.mjs
+++ b/src/main/report-wrap.mjs
@@ -1,10 +1,10 @@
 import has from "lodash/has.js";
-import { applyFilters } from "../graph-utl/filter-bank.mjs";
-import summarize from "../enrich/summarize/index.mjs";
-import consolidateToPattern from "../graph-utl/consolidate-to-pattern.mjs";
-import compare from "../graph-utl/compare.mjs";
-import stripSelfTransitions from "../graph-utl/strip-self-transitions.mjs";
-import report from "../report/index.mjs";
+import report from "#report/index.mjs";
+import summarize from "#enrich/summarize/index.mjs";
+import { applyFilters } from "#graph-utl/filter-bank.mjs";
+import consolidateToPattern from "#graph-utl/consolidate-to-pattern.mjs";
+import compare from "#graph-utl/compare.mjs";
+import stripSelfTransitions from "#graph-utl/strip-self-transitions.mjs";
 
 /**
  *
@@ -32,7 +32,7 @@ function reSummarizeResults(pResult, pFormatOptions) {
         },
         (pResult.summary.optionsUsed.args || "").split(" "),
         // TODO: apply filters to the folders too
-        pResult.folders
+        pResult.folders,
       ),
     },
     modules: lModules,
@@ -57,6 +57,6 @@ export default async function reportWrap(pResult, pFormatOptions) {
     // from the result take the one passed in the format options instead
     has(pFormatOptions, "collapse")
       ? { ...lReportOptions, collapsePattern: pFormatOptions.collapse }
-      : lReportOptions
+      : lReportOptions,
   );
 }
diff --git a/src/main/resolve-options/normalize.mjs b/src/main/resolve-options/normalize.mjs
index a8e8554a..2f3d9c60 100644
--- a/src/main/resolve-options/normalize.mjs
+++ b/src/main/resolve-options/normalize.mjs
@@ -1,11 +1,11 @@
 import fs from "node:fs";
 import enhancedResolve from "enhanced-resolve";
 import omit from "lodash/omit.js";
-import { scannableExtensions } from "../../extract/transpile/meta.mjs";
+import { scannableExtensions } from "#extract/transpile/meta.mjs";
 import {
   ruleSetHasDeprecationRule,
   ruleSetHasLicenseRule,
-} from "../../graph-utl/rule-set.mjs";
+} from "#graph-utl/rule-set.mjs";
 
 const DEFAULT_CACHE_DURATION = 4000;
 /** @type {Partial<import("../../../types/dependency-cruiser").IResolveOptions>} */
diff --git a/src/main/rule-set/assert-validity.mjs b/src/main/rule-set/assert-validity.mjs
index 2160d61b..20197480 100644
--- a/src/main/rule-set/assert-validity.mjs
+++ b/src/main/rule-set/assert-validity.mjs
@@ -2,8 +2,8 @@ import Ajv from "ajv";
 import safeRegex from "safe-regex";
 import has from "lodash/has.js";
 import { assertCruiseOptionsValid } from "../options/assert-validity.mjs";
-import configurationSchema from "../../schema/configuration.schema.mjs";
 import { normalizeToREAsString } from "../helpers.mjs";
+import configurationSchema from "#configuration-schema";
 
 const ajv = new Ajv();
 // the default for this is 25 - as noted in the safe-regex source code already,
diff --git a/src/report/dot/index.mjs b/src/report/dot/index.mjs
index 6edc9cb7..6b4c74a1 100644
--- a/src/report/dot/index.mjs
+++ b/src/report/dot/index.mjs
@@ -1,11 +1,11 @@
 /* eslint-disable prefer-template */
 import get from "lodash/get.js";
-import { applyFilters } from "../../graph-utl/filter-bank.mjs";
 import theming from "./theming.mjs";
 import moduleUtl from "./module-utl.mjs";
 import prepareFolderLevel from "./prepare-folder-level.mjs";
 import prepareCustomLevel from "./prepare-custom-level.mjs";
 import prepareFlatLevel from "./prepare-flat-level.mjs";
+import { applyFilters } from "#graph-utl/filter-bank.mjs";
 
 // not importing EOL from "node:os" so output is the same on windows and unices
 const EOL = "\n";
diff --git a/src/report/dot/prepare-custom-level.mjs b/src/report/dot/prepare-custom-level.mjs
index be4c83d4..43ae4d55 100644
--- a/src/report/dot/prepare-custom-level.mjs
+++ b/src/report/dot/prepare-custom-level.mjs
@@ -1,13 +1,13 @@
-import consolidateToPattern from "../../graph-utl/consolidate-to-pattern.mjs";
-import compare from "../../graph-utl/compare.mjs";
-import stripSelfTransitions from "../../graph-utl/strip-self-transitions.mjs";
 import moduleUtl from "./module-utl.mjs";
+import consolidateToPattern from "#graph-utl/consolidate-to-pattern.mjs";
+import compare from "#graph-utl/compare.mjs";
+import stripSelfTransitions from "#graph-utl/strip-self-transitions.mjs";
 
 export default function prepareCustomLevel(
   pResults,
   pTheme,
   pCollapsePattern,
-  pShowMetrics
+  pShowMetrics,
 ) {
   return (
     pCollapsePattern
diff --git a/src/report/dot/prepare-flat-level.mjs b/src/report/dot/prepare-flat-level.mjs
index d5718ae7..c477e86c 100644
--- a/src/report/dot/prepare-flat-level.mjs
+++ b/src/report/dot/prepare-flat-level.mjs
@@ -1,5 +1,5 @@
-import compare from "../../graph-utl/compare.mjs";
 import moduleUtl from "./module-utl.mjs";
+import compare from "#graph-utl/compare.mjs";
 
 export default function prepareFlatLevel(pResults, pTheme, _, pShowMetrics) {
   return pResults.modules
diff --git a/src/report/dot/prepare-folder-level.mjs b/src/report/dot/prepare-folder-level.mjs
index 49bcc924..20d9fcb0 100644
--- a/src/report/dot/prepare-folder-level.mjs
+++ b/src/report/dot/prepare-folder-level.mjs
@@ -1,7 +1,7 @@
-import consolidateToFolder from "../../graph-utl/consolidate-to-folder.mjs";
-import compare from "../../graph-utl/compare.mjs";
-import stripSelfTransitions from "../../graph-utl/strip-self-transitions.mjs";
 import moduleUtl from "./module-utl.mjs";
+import consolidateToFolder from "#graph-utl/consolidate-to-folder.mjs";
+import compare from "#graph-utl/compare.mjs";
+import stripSelfTransitions from "#graph-utl/strip-self-transitions.mjs";
 
 export default function prepareFolderLevel(pResults, pTheme, _, pShowMetrics) {
   return consolidateToFolder(pResults.modules)
diff --git a/src/report/error-html/index.mjs b/src/report/error-html/index.mjs
index 07d86f1a..e4fa7a8b 100644
--- a/src/report/error-html/index.mjs
+++ b/src/report/error-html/index.mjs
@@ -1,10 +1,10 @@
-import meta from "../../meta.js";
 import {
   determineFromExtras,
   aggregateViolations,
   determineTo,
 } from "./utl.mjs";
 import template from "./error-html-template.mjs";
+import meta from "#meta";
 
 function getViolatedRuleRowClass(pViolatedRule) {
   return pViolatedRule.unviolated ? ' class="unviolated"' : "";
diff --git a/src/report/error-html/utl.mjs b/src/report/error-html/utl.mjs
index 8a00b13e..ed295ae3 100644
--- a/src/report/error-html/utl.mjs
+++ b/src/report/error-html/utl.mjs
@@ -1,6 +1,6 @@
 import has from "lodash/has.js";
-import meta from "../../meta.js";
 import { formatViolation, formatPercentage } from "../utl/index.mjs";
+import meta from "#meta";
 
 function getFormattedAllowedRule(pRuleSetUsed) {
   const lAllowed = pRuleSetUsed?.allowed ?? [];
diff --git a/src/report/error.mjs b/src/report/error.mjs
index 44da0fcd..da87bf63 100644
--- a/src/report/error.mjs
+++ b/src/report/error.mjs
@@ -1,12 +1,12 @@
 import { EOL } from "node:os";
 import chalk from "chalk";
 import figures from "figures";
-import { findRuleByName } from "../graph-utl/rule-set.mjs";
-import wrapAndIndent from "../utl/wrap-and-indent.mjs";
 import {
   formatPercentage,
   formatViolation as _formatViolation,
 } from "./utl/index.mjs";
+import { findRuleByName } from "#graph-utl/rule-set.mjs";
+import wrapAndIndent from "#utl/wrap-and-indent.mjs";
 
 const SEVERITY2CHALK = new Map([
   ["error", chalk.red],
@@ -21,8 +21,8 @@ function formatExtraPathInformation(pExtra) {
   return EOL.concat(
     wrapAndIndent(
       pExtra.join(` ${figures.arrowRight} ${EOL}`),
-      EXTRA_PATH_INFORMATION_INDENT
-    )
+      EXTRA_PATH_INFORMATION_INDENT,
+    ),
   );
 }
 
@@ -32,7 +32,7 @@ function formatModuleViolation(pViolation) {
 
 function formatDependencyViolation(pViolation) {
   return `${chalk.bold(pViolation.from)} ${figures.arrowRight} ${chalk.bold(
-    pViolation.to
+    pViolation.to,
   )}`;
 }
 
@@ -44,7 +44,7 @@ function formatCycleViolation(pViolation) {
 
 function formatReachabilityViolation(pViolation) {
   return `${chalk.bold(pViolation.from)} ${figures.arrowRight} ${chalk.bold(
-    pViolation.to
+    pViolation.to,
   )}${formatExtraPathInformation(pViolation.via)}`;
 }
 
@@ -53,9 +53,9 @@ function formatInstabilityViolation(pViolation) {
     chalk.dim(
       `instability: ${formatPercentage(pViolation.metrics.from.instability)} ${
         figures.arrowRight
-      } ${formatPercentage(pViolation.metrics.to.instability)}`
+      } ${formatPercentage(pViolation.metrics.to.instability)}`,
     ),
-    EXTRA_PATH_INFORMATION_INDENT
+    EXTRA_PATH_INFORMATION_INDENT,
   )}`;
 }
 
@@ -70,12 +70,12 @@ function formatViolation(pViolation) {
   const lFormattedViolators = _formatViolation(
     pViolation,
     lViolationType2Formatter,
-    formatDependencyViolation
+    formatDependencyViolation,
   );
 
   return (
     `${SEVERITY2CHALK.get(pViolation.rule.severity)(
-      pViolation.rule.severity
+      pViolation.rule.severity,
     )} ${pViolation.rule.name}: ${lFormattedViolators}` +
     `${
       pViolation.comment
@@ -95,7 +95,7 @@ function sumMeta(pMeta) {
 
 function formatSummary(pSummary) {
   let lMessage = `${EOL}${figures.cross} ${sumMeta(
-    pSummary
+    pSummary,
   )} dependency violations (${formatMeta(pSummary)}). ${
     pSummary.totalCruised
   } modules, ${pSummary.totalDependenciesCruised} dependencies cruised.${EOL}`;
@@ -115,7 +115,7 @@ function addExplanation(pRuleSet, pLong) {
 function formatIgnoreWarning(pNumberOfIgnoredViolations) {
   if (pNumberOfIgnoredViolations > 0) {
     return chalk.yellow(
-      `${figures.warning} ${pNumberOfIgnoredViolations} known violations ignored. Run with --no-ignore-known to see them.${EOL}`
+      `${figures.warning} ${pNumberOfIgnoredViolations} known violations ignored. Run with --no-ignore-known to see them.${EOL}`,
     );
   }
   return "";
@@ -123,18 +123,18 @@ function formatIgnoreWarning(pNumberOfIgnoredViolations) {
 
 function report(pResults, pLong) {
   const lNonIgnorableViolations = pResults.summary.violations.filter(
-    (pViolation) => pViolation.rule.severity !== "ignore"
+    (pViolation) => pViolation.rule.severity !== "ignore",
   );
 
   if (lNonIgnorableViolations.length === 0) {
     return `${EOL}${chalk.green(
-      figures.tick
+      figures.tick,
     )} no dependency violations found (${
       pResults.summary.totalCruised
     } modules, ${
       pResults.summary.totalDependenciesCruised
     } dependencies cruised)${EOL}${formatIgnoreWarning(
-      pResults.summary.ignore
+      pResults.summary.ignore,
     )}${EOL}`;
   }
 
diff --git a/src/report/markdown.mjs b/src/report/markdown.mjs
index b7a313ca..ef1dd6c4 100644
--- a/src/report/markdown.mjs
+++ b/src/report/markdown.mjs
@@ -1,5 +1,5 @@
-import meta from "../meta.js";
 import errorHtmlUtl from "./error-html/utl.mjs";
+import meta from "#meta";
 
 const { aggregateViolations, determineTo, determineFromExtras } = errorHtmlUtl;
 
@@ -64,18 +64,18 @@ function formatRulesSummary(pCruiseResult, pIncludeIgnoredInSummary) {
 
   return aggregateViolations(
     pCruiseResult.summary.violations,
-    pCruiseResult.summary.ruleSetUsed
+    pCruiseResult.summary.ruleSetUsed,
   )
     .filter(
       (pRule) =>
-        pRule.count > 0 || (pIncludeIgnoredInSummary && pRule.ignoredCount > 0)
+        pRule.count > 0 || (pIncludeIgnoredInSummary && pRule.ignoredCount > 0),
     )
     .reduce(
       (pAll, pRule) =>
         `${pAll}|${severity2Icon(pRule.severity)}&nbsp;_${pRule.name}_|**${
           pRule.count
         }**|**${pRule.ignoredCount}**|${pRule.comment}|\n`,
-      lTableHead
+      lTableHead,
     );
 }
 
@@ -91,7 +91,7 @@ function formatViolations(pViolations, pIncludeIgnoredInDetails) {
   return pViolations
     .filter(
       (pViolation) =>
-        pViolation.rule.severity !== "ignore" || pIncludeIgnoredInDetails
+        pViolation.rule.severity !== "ignore" || pIncludeIgnoredInDetails,
     )
     .reduce((pAll, pViolation) => {
       const lFromExtras = determineFromExtras(pViolation);
@@ -127,7 +127,7 @@ function report(pResults, pOptions) {
     if (pResults.summary.violations.length > 0 && lOptions.showRulesSummary) {
       lReturnValue += `${formatRulesSummary(
         pResults,
-        lOptions.includeIgnoredInSummary
+        lOptions.includeIgnoredInSummary,
       )}\n\n`;
     }
   }
@@ -142,7 +142,7 @@ function report(pResults, pOptions) {
       }
       lReturnValue += `${formatViolations(
         pResults.summary.violations,
-        lOptions.includeIgnoredInDetails
+        lOptions.includeIgnoredInDetails,
       )}\n\n`;
       if (lOptions.collapseDetails) {
         lReturnValue += "</details>\n\n";
diff --git a/src/validate/index.d.ts b/src/validate/index.d.ts
index a14ef3ba..2ff97336 100644
--- a/src/validate/index.d.ts
+++ b/src/validate/index.d.ts
@@ -1,6 +1,4 @@
 /* eslint-disable node/no-unpublished-import */
-/* eslint-disable node/no-missing-import */
-/* eslint-disable import/no-unresolved */
 import {
   IDependency,
   IFolder,
diff --git a/src/validate/match-dependency-rule.mjs b/src/validate/match-dependency-rule.mjs
index 72a7909d..f314b2ba 100644
--- a/src/validate/match-dependency-rule.mjs
+++ b/src/validate/match-dependency-rule.mjs
@@ -1,6 +1,6 @@
-import { extractGroups } from "../utl/regex-util.mjs";
 import { isModuleOnlyRule, isFolderScope } from "./rule-classifiers.mjs";
 import matchers from "./matchers.mjs";
+import { extractGroups } from "#utl/regex-util.mjs";
 
 /**
  *
@@ -37,7 +37,7 @@ function match(pFrom, pTo) {
         pRule,
         pTo,
         "exoticRequireNot",
-        "exoticRequire"
+        "exoticRequire",
       ) &&
       matchers.toVia(pRule, pTo, lGroups) &&
       matchers.toViaOnly(pRule, pTo, lGroups) &&
diff --git a/src/validate/match-folder-dependency-rule.mjs b/src/validate/match-folder-dependency-rule.mjs
index 4f0fe9a2..37cf8122 100644
--- a/src/validate/match-folder-dependency-rule.mjs
+++ b/src/validate/match-folder-dependency-rule.mjs
@@ -1,6 +1,6 @@
-import { extractGroups, replaceGroupPlaceholders } from "../utl/regex-util.mjs";
 import { isModuleOnlyRule, isFolderScope } from "./rule-classifiers.mjs";
 import matchers from "./matchers.mjs";
+import { extractGroups, replaceGroupPlaceholders } from "#utl/regex-util.mjs";
 
 function fromFolderPath(pRule, pFromFolder) {
   return Boolean(!pRule.from.path || pFromFolder.name.match(pRule.from.path));
@@ -8,21 +8,23 @@ function fromFolderPath(pRule, pFromFolder) {
 
 function fromFolderPathNot(pRule, pFromFolder) {
   return Boolean(
-    !pRule.from.pathNot || !pFromFolder.name.match(pRule.from.pathNot)
+    !pRule.from.pathNot || !pFromFolder.name.match(pRule.from.pathNot),
   );
 }
 
 function toFolderPath(pRule, pToFolder, pGroups) {
   return Boolean(
     !pRule.to.path ||
-      pToFolder.name.match(replaceGroupPlaceholders(pRule.to.path, pGroups))
+      pToFolder.name.match(replaceGroupPlaceholders(pRule.to.path, pGroups)),
   );
 }
 
 function toFolderPathNot(pRule, pToFolder, pGroups) {
   return Boolean(
     !pRule.to.pathNot ||
-      !pToFolder.name.match(replaceGroupPlaceholders(pRule.to.pathNot, pGroups))
+      !pToFolder.name.match(
+        replaceGroupPlaceholders(pRule.to.pathNot, pGroups),
+      ),
   );
 }
 
diff --git a/src/validate/match-module-rule.mjs b/src/validate/match-module-rule.mjs
index 9ee6c6a0..47a5af5e 100644
--- a/src/validate/match-module-rule.mjs
+++ b/src/validate/match-module-rule.mjs
@@ -1,7 +1,7 @@
 import has from "lodash/has.js";
-import { extractGroups } from "../utl/regex-util.mjs";
 import { isModuleOnlyRule, isFolderScope } from "./rule-classifiers.mjs";
 import matchers from "./matchers.mjs";
+import { extractGroups } from "#utl/regex-util.mjs";
 
 /**
  * Returns true if pRule is an orphan rule and pModule is an orphan.
@@ -37,7 +37,7 @@ function matchesReachableRule(pRule, pModule) {
       (pReachable) =>
         pReachable.asDefinedInRule === pRule.name &&
         // @ts-expect-error the 'has' above ensures the 'to.reachable' exists
-        pReachable.value === pRule.to.reachable
+        pReachable.value === pRule.to.reachable,
     );
     if (lReachableRecord) {
       const lGroups = extractGroups(pRule.from, lReachableRecord.matchedFrom);
@@ -71,8 +71,8 @@ function matchesReachesRule(pRule, pModule) {
         pReaches.modules.some(
           (pReachesModule) =>
             matchers.toModulePath(pRule, pReachesModule) &&
-            matchers.toModulePathNot(pRule, pReachesModule)
-        )
+            matchers.toModulePathNot(pRule, pReachesModule),
+        ),
     )
   );
 }
@@ -86,7 +86,7 @@ function dependentsCountsMatch(pRule, pDependents) {
   const lMatchingDependentsCount = pDependents.filter(
     (pDependent) =>
       Boolean(!pRule.from.path || pDependent.match(pRule.from.path)) &&
-      Boolean(!pRule.from.pathNot || !pDependent.match(pRule.from.pathNot))
+      Boolean(!pRule.from.pathNot || !pDependent.match(pRule.from.pathNot)),
   ).length;
   return (
     (!pRule.module.numberOfDependentsLessThan ||
diff --git a/src/validate/matchers.mjs b/src/validate/matchers.mjs
index ce83798d..4195fc68 100644
--- a/src/validate/matchers.mjs
+++ b/src/validate/matchers.mjs
@@ -1,7 +1,7 @@
 /* eslint-disable security/detect-object-injection */
 import has from "lodash/has.js";
-import { replaceGroupPlaceholders } from "../utl/regex-util.mjs";
-import { intersects } from "../utl/array-util.mjs";
+import { replaceGroupPlaceholders } from "#utl/regex-util.mjs";
+import { intersects } from "#utl/array-util.mjs";
 
 function propertyEquals(pRule, pDependency, pProperty) {
   // The properties can be booleans, so we can't use !pRule.to[pProperty]
@@ -15,7 +15,7 @@ function propertyMatches(pRule, pDependency, pRuleProperty, pProperty) {
   return Boolean(
     !pRule.to[pRuleProperty] ||
       (pDependency[pProperty] &&
-        pDependency[pProperty].match(pRule.to[pRuleProperty]))
+        pDependency[pProperty].match(pRule.to[pRuleProperty])),
   );
 }
 
@@ -23,7 +23,7 @@ function propertyMatchesNot(pRule, pDependency, pRuleProperty, pProperty) {
   return Boolean(
     !pRule.to[pRuleProperty] ||
       (pDependency[pProperty] &&
-        !pDependency[pProperty].match(pRule.to[pRuleProperty]))
+        !pDependency[pProperty].match(pRule.to[pRuleProperty])),
   );
 }
 
@@ -33,7 +33,7 @@ function fromPath(pRule, pModule) {
 
 function fromPathNot(pRule, pModule) {
   return Boolean(
-    !pRule.from.pathNot || !pModule.source.match(pRule.from.pathNot)
+    !pRule.from.pathNot || !pModule.source.match(pRule.from.pathNot),
   );
 }
 
@@ -43,14 +43,14 @@ function modulePath(pRule, pModule) {
 
 function modulePathNot(pRule, pModule) {
   return Boolean(
-    !pRule.module.pathNot || !pModule.source.match(pRule.module.pathNot)
+    !pRule.module.pathNot || !pModule.source.match(pRule.module.pathNot),
   );
 }
 
 function _toPath(pRule, pString, pGroups = []) {
   return Boolean(
     !pRule.to.path ||
-      pString.match(replaceGroupPlaceholders(pRule.to.path, pGroups))
+      pString.match(replaceGroupPlaceholders(pRule.to.path, pGroups)),
   );
 }
 
@@ -80,14 +80,14 @@ function toModulePathNot(pRule, pModule, pGroups) {
 function toDependencyTypes(pRule, pDependency) {
   return Boolean(
     !pRule.to.dependencyTypes ||
-      intersects(pDependency.dependencyTypes, pRule.to.dependencyTypes)
+      intersects(pDependency.dependencyTypes, pRule.to.dependencyTypes),
   );
 }
 
 function toDependencyTypesNot(pRule, pDependency) {
   return Boolean(
     !pRule.to.dependencyTypesNot ||
-      !intersects(pDependency.dependencyTypes, pRule.to.dependencyTypesNot)
+      !intersects(pDependency.dependencyTypes, pRule.to.dependencyTypesNot),
   );
 }
 
@@ -96,8 +96,8 @@ function toVia(pRule, pDependency, pGroups) {
     !pRule.to.via ||
       (pDependency.cycle &&
         pDependency.cycle.some((pVia) =>
-          pVia.match(replaceGroupPlaceholders(pRule.to.via, pGroups))
-        ))
+          pVia.match(replaceGroupPlaceholders(pRule.to.via, pGroups)),
+        )),
   );
 }
 
@@ -106,8 +106,8 @@ function toViaOnly(pRule, pDependency, pGroups) {
     !pRule.to.viaOnly ||
       (pDependency.cycle &&
         pDependency.cycle.every((pVia) =>
-          pVia.match(replaceGroupPlaceholders(pRule.to.viaOnly, pGroups))
-        ))
+          pVia.match(replaceGroupPlaceholders(pRule.to.viaOnly, pGroups)),
+        )),
   );
 }
 
@@ -116,8 +116,8 @@ function toViaNot(pRule, pDependency, pGroups) {
     !pRule.to.viaNot ||
       (pDependency.cycle &&
         !pDependency.cycle.some((pVia) =>
-          pVia.match(replaceGroupPlaceholders(pRule.to.viaNot, pGroups))
-        ))
+          pVia.match(replaceGroupPlaceholders(pRule.to.viaNot, pGroups)),
+        )),
   );
 }
 
@@ -126,8 +126,8 @@ function toviaSomeNot(pRule, pDependency, pGroups) {
     !pRule.to.viaSomeNot ||
       (pDependency.cycle &&
         !pDependency.cycle.every((pVia) =>
-          pVia.match(replaceGroupPlaceholders(pRule.to.viaSomeNot, pGroups))
-        ))
+          pVia.match(replaceGroupPlaceholders(pRule.to.viaSomeNot, pGroups)),
+        )),
   );
 }
 
diff --git a/src/validate/violates-required-rule.mjs b/src/validate/violates-required-rule.mjs
index 9f831c58..8eca5b35 100644
--- a/src/validate/violates-required-rule.mjs
+++ b/src/validate/violates-required-rule.mjs
@@ -1,5 +1,5 @@
-import { extractGroups } from "../utl/regex-util.mjs";
 import matchers from "./matchers.mjs";
+import { extractGroups } from "#utl/regex-util.mjs";
 
 /**
  * Returns true if the module violates the rule.
@@ -19,7 +19,7 @@ export default function violatesRequiredRule(pRule, pModule) {
     const lGroups = extractGroups(pRule.module, pModule.source);
 
     lReturnValue = !pModule.dependencies.some((pDependency) =>
-      matchers.toPath(pRule, pDependency, lGroups)
+      matchers.toPath(pRule, pDependency, lGroups),
     );
   }
   return lReturnValue;


Test patch:
diff --git a/test/api.spec.mjs b/test/api.spec.mjs
index f2a8625f..e43a5c74 100644
--- a/test/api.spec.mjs
+++ b/test/api.spec.mjs
@@ -1,6 +1,3 @@
-// eslint disable because import/no-unresolved,node/no-missing-import don't
-// know about (local) module imports yet
-/* eslint-disable import/no-unresolved,node/no-missing-import */
 import { equal } from "node:assert/strict";
 import satisfies from "semver/functions/satisfies.js";
 import dependencyCruiser from "dependency-cruiser";
diff --git a/test/cache/cache.spec.mjs b/test/cache/cache.spec.mjs
index 55c3e40c..dd8c7da1 100644
--- a/test/cache/cache.spec.mjs
+++ b/test/cache/cache.spec.mjs
@@ -3,7 +3,7 @@ import { rmSync } from "node:fs";
 import { join } from "node:path";
 import { isDeepStrictEqual } from "node:util";
 import { describe } from "mocha";
-import Cache from "../../src/cache/cache.mjs";
+import Cache from "#cache/cache.mjs";
 
 const OUTPUTS_FOLDER = "test/cache/__outputs__/";
 
diff --git a/test/cache/content-strategy.spec.mjs b/test/cache/content-strategy.spec.mjs
index 5afaaa68..b2ef5ac9 100644
--- a/test/cache/content-strategy.spec.mjs
+++ b/test/cache/content-strategy.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual, equal } from "node:assert/strict";
-import ContentStrategy from "../../src/cache/content-strategy.mjs";
+import ContentStrategy from "#cache/content-strategy.mjs";
 
 const INTERESTING_EXTENSIONS = new Set([".aap", ".noot", ".mies"]);
 const INTERESTING_CHANGE_TYPES = new Set([
diff --git a/test/cache/find-content-changes.spec.mjs b/test/cache/find-content-changes.spec.mjs
index 5a81a750..e0db95d1 100644
--- a/test/cache/find-content-changes.spec.mjs
+++ b/test/cache/find-content-changes.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import findContentChanges from "../../src/cache/find-content-changes.mjs";
+import findContentChanges from "#cache/find-content-changes.mjs";
 
 describe("[U] cache/find-content-changes - cached vs new", () => {
   it("returns files not in directory but in cache as 'ignored' when they're not interesting for diffing", () => {
diff --git a/test/cache/metadata-strategy.spec.mjs b/test/cache/metadata-strategy.spec.mjs
index 6d4e9508..70d3707e 100644
--- a/test/cache/metadata-strategy.spec.mjs
+++ b/test/cache/metadata-strategy.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual, equal, match } from "node:assert/strict";
-import MetaDataStrategy from "../../src/cache/metadata-strategy.mjs";
+import MetaDataStrategy from "#cache/metadata-strategy.mjs";
 
 const INTERESTING_EXTENSIONS = new Set([".aap", ".noot", ".mies"]);
 const INTERESTING_CHANGE_TYPES = new Set([
diff --git a/test/cache/options-compatible.spec.mjs b/test/cache/options-compatible.spec.mjs
index 15ecbc02..1016d3b2 100644
--- a/test/cache/options-compatible.spec.mjs
+++ b/test/cache/options-compatible.spec.mjs
@@ -8,7 +8,7 @@ import {
   metricsIsCompatible,
   cacheOptionIsCompatible,
   optionsAreCompatible,
-} from "../../src/cache/options-compatible.mjs";
+} from "#cache/options-compatible.mjs";
 
 describe("[U] cache/options-compatible - optionIsCompatible", () => {
   it("if neither filter exists they're compatible", () => {
diff --git a/test/cli/format-meta-info.spec.mjs b/test/cli/format-meta-info.spec.mjs
index d12073db..04691225 100644
--- a/test/cli/format-meta-info.spec.mjs
+++ b/test/cli/format-meta-info.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import meta from "../../src/cli/format-meta-info.mjs";
+import meta from "#cli/format-meta-info.mjs";
 
 describe("[U] cli/formatMetaInfo - transpiler formatted meta information", () => {
   it("tells which extensions can be scanned", () => {
diff --git a/test/cli/format.spec.mjs b/test/cli/format.spec.mjs
index cefc3766..67ddaa4e 100644
--- a/test/cli/format.spec.mjs
+++ b/test/cli/format.spec.mjs
@@ -2,8 +2,8 @@
 import { readFileSync } from "node:fs";
 import { equal } from "node:assert/strict";
 import { fileURLToPath } from "node:url";
-import format from "../../src/cli/format.mjs";
 import deleteDammit from "./delete-dammit.utl.cjs";
+import format from "#cli/format.mjs";
 
 function relative(pFileName) {
   return fileURLToPath(new URL(pFileName, import.meta.url));
diff --git a/test/cli/index.spec.mjs b/test/cli/index.spec.mjs
index f8162285..3766c060 100644
--- a/test/cli/index.spec.mjs
+++ b/test/cli/index.spec.mjs
@@ -5,9 +5,9 @@ import { doesNotThrow, equal, throws } from "node:assert/strict";
 import { join, posix as path } from "node:path";
 import chalk from "chalk";
 import intercept from "intercept-stdout";
-import cli from "../../src/cli/index.mjs";
 import { assertFileEqual, assertJSONFileEqual } from "./asserthelpers.utl.mjs";
 import deleteDammit from "./delete-dammit.utl.cjs";
+import cli from "#cli/index.mjs";
 
 const OUT_DIR = "./test/cli/__output__";
 const FIX_DIR = "./test/cli/__fixtures__";
diff --git a/test/cli/init-config/build-config.spec.mjs b/test/cli/init-config/build-config.spec.mjs
index 3ad2ee94..f9022f3f 100644
--- a/test/cli/init-config/build-config.spec.mjs
+++ b/test/cli/init-config/build-config.spec.mjs
@@ -3,10 +3,10 @@ import { tmpdir } from "node:os";
 import { join } from "node:path/posix";
 import { deepEqual, ok, equal } from "node:assert/strict";
 import Ajv from "ajv";
-import buildConfig from "../../../src/cli/init-config/build-config.mjs";
-import normalizeInitOptions from "../../../src/cli/init-config/normalize-init-options.mjs";
-import configurationSchema from "../../../src/schema/configuration.schema.mjs";
 import deleteDammit from "../delete-dammit.utl.cjs";
+import configurationSchema from "#configuration-schema";
+import buildConfig from "#cli/init-config/build-config.mjs";
+import normalizeInitOptions from "#cli/init-config/normalize-init-options.mjs";
 
 const ajv = new Ajv();
 
diff --git a/test/cli/init-config/environment-helpers-matching-filenames.spec.mjs b/test/cli/init-config/environment-helpers-matching-filenames.spec.mjs
index 30780c97..704d0029 100644
--- a/test/cli/init-config/environment-helpers-matching-filenames.spec.mjs
+++ b/test/cli/init-config/environment-helpers-matching-filenames.spec.mjs
@@ -9,7 +9,7 @@ import {
   getWebpackConfigCandidates,
   getDefaultConfigFileName,
   isTypeModule,
-} from "../../../src/cli/init-config/environment-helpers.mjs";
+} from "#cli/init-config/environment-helpers.mjs";
 
 describe("[U] cli/init-config/environment-helpers - getBabelConfigCandidates", () => {
   const WORKINGDIR = process.cwd();
diff --git a/test/cli/init-config/environment-helpers.spec.mjs b/test/cli/init-config/environment-helpers.spec.mjs
index 03688ed2..49e7e4a6 100644
--- a/test/cli/init-config/environment-helpers.spec.mjs
+++ b/test/cli/init-config/environment-helpers.spec.mjs
@@ -3,7 +3,7 @@ import {
   isLikelyMonoRepo,
   hasTestsWithinSource,
   getFolderCandidates,
-} from "../../../src/cli/init-config/environment-helpers.mjs";
+} from "#cli/init-config/environment-helpers.mjs";
 
 describe("[U] cli/init-config/environment-helpers - isLikelyMonoRepo", () => {
   it("declares the current folder to be not a mono repo", () => {
diff --git a/test/cli/init-config/find-extensions.spec.mjs b/test/cli/init-config/find-extensions.spec.mjs
index 2126a8c9..c55c2a95 100644
--- a/test/cli/init-config/find-extensions.spec.mjs
+++ b/test/cli/init-config/find-extensions.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual, throws } from "node:assert/strict";
-import findExtensions from "../../../src/cli/init-config/find-extensions.mjs";
+import findExtensions from "#cli/init-config/find-extensions.mjs";
 
 describe("[U] cli/init-config/find-extensions", () => {
   it("returns an empty array of extensions when passed no directories", () => {
diff --git a/test/cli/init-config/index.spec.mjs b/test/cli/init-config/index.spec.mjs
index b44f1171..ec353524 100644
--- a/test/cli/init-config/index.spec.mjs
+++ b/test/cli/init-config/index.spec.mjs
@@ -3,8 +3,8 @@ import { join } from "node:path";
 import { deepEqual, equal } from "node:assert/strict";
 import Ajv from "ajv";
 import deleteDammit from "../delete-dammit.utl.cjs";
-import initConfig from "../../../src/cli/init-config/index.mjs";
-import configurationSchema from "../../../src/schema/configuration.schema.mjs";
+import configurationSchema from "#configuration-schema";
+import initConfig from "#cli/init-config/index.mjs";
 
 const ajv = new Ajv();
 
diff --git a/test/cli/init-config/normalize-init-options.spec.mjs b/test/cli/init-config/normalize-init-options.spec.mjs
index aecf9109..b11fec1c 100644
--- a/test/cli/init-config/normalize-init-options.spec.mjs
+++ b/test/cli/init-config/normalize-init-options.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual, equal } from "node:assert/strict";
-import normalizeInitOptions from "../../../src/cli/init-config/normalize-init-options.mjs";
+import normalizeInitOptions from "#cli/init-config/normalize-init-options.mjs";
 
 describe("[U] cli/init-config/normalize-init-options", () => {
   let lSavedWorkingDirectory = process.cwd();
diff --git a/test/cli/init-config/utl.spec.mjs b/test/cli/init-config/utl.spec.mjs
index 625c1f0c..d1137cf7 100644
--- a/test/cli/init-config/utl.spec.mjs
+++ b/test/cli/init-config/utl.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { folderNameArrayToRE } from "../../../src/cli/init-config/utl.mjs";
+import { folderNameArrayToRE } from "#cli/init-config/utl.mjs";
 
 describe("[U] cli/init-config/utl - folderNameArrayToRE", () => {
   it("transforms an array of folder names into a regex string - empty", () => {
diff --git a/test/cli/init-config/validators.spec.mjs b/test/cli/init-config/validators.spec.mjs
index c3f22726..f8188b73 100644
--- a/test/cli/init-config/validators.spec.mjs
+++ b/test/cli/init-config/validators.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { validateLocation } from "../../../src/cli/init-config/validators.mjs";
+import { validateLocation } from "#cli/init-config/validators.mjs";
 
 describe("[U] cli/init-config/inquirer-validators - validateLocation", () => {
   const WORKING_DIR = process.cwd();
diff --git a/test/cli/init-config/write-config.spec.mjs b/test/cli/init-config/write-config.spec.mjs
index 09666ff3..657b6cbb 100644
--- a/test/cli/init-config/write-config.spec.mjs
+++ b/test/cli/init-config/write-config.spec.mjs
@@ -2,7 +2,7 @@ import { ok, equal } from "node:assert/strict";
 import { writeFileSync, readFileSync } from "node:fs";
 import { join } from "node:path";
 import deleteDammit from "../delete-dammit.utl.cjs";
-import writeConfig from "../../../src/cli/init-config/write-config.mjs";
+import writeConfig from "#cli/init-config/write-config.mjs";
 
 const RULES_FILE_JS = ".dependency-cruiser.js";
 
diff --git a/test/cli/init-config/write-run-scripts-to-manifest.spec.mjs b/test/cli/init-config/write-run-scripts-to-manifest.spec.mjs
index 61a6078b..cb225511 100644
--- a/test/cli/init-config/write-run-scripts-to-manifest.spec.mjs
+++ b/test/cli/init-config/write-run-scripts-to-manifest.spec.mjs
@@ -2,7 +2,7 @@ import { deepEqual } from "node:assert/strict";
 import {
   addRunScriptsToManifest,
   compileRunScripts,
-} from "../../../src/cli/init-config/write-run-scripts-to-manifest.mjs";
+} from "#cli/init-config/write-run-scripts-to-manifest.mjs";
 
 describe("[U] cli/init-config/write-run-scripts-to-manifest - logic", () => {
   it("no manifest and no scripts retain the empty manifest with a scripts section", () => {
diff --git a/test/cli/listeners/performance-log-listener/format-helpers.spec.mjs b/test/cli/listeners/performance-log-listener/format-helpers.spec.mjs
index 303dd683..6b3619db 100644
--- a/test/cli/listeners/performance-log-listener/format-helpers.spec.mjs
+++ b/test/cli/listeners/performance-log-listener/format-helpers.spec.mjs
@@ -5,7 +5,7 @@ import {
   formatTime,
   formatMemory,
   formatPerfLine,
-} from "../../../../src/cli/listeners/performance-log/format-helpers.mjs";
+} from "#cli/listeners/performance-log/format-helpers.mjs";
 
 /*
  * as the formatHelpers use the Intl API, it's necessary to set the locale
diff --git a/test/cli/listeners/performance-log-listener/handlers.spec.mjs b/test/cli/listeners/performance-log-listener/handlers.spec.mjs
index bcfb90a4..2b1858eb 100644
--- a/test/cli/listeners/performance-log-listener/handlers.spec.mjs
+++ b/test/cli/listeners/performance-log-listener/handlers.spec.mjs
@@ -4,7 +4,7 @@ import {
   getHeader,
   getEndText,
   getProgressLine,
-} from "../../../../src/cli/listeners/performance-log/handlers.mjs";
+} from "#cli/listeners/performance-log/handlers.mjs";
 
 const MAX_LEVEL = 20;
 
diff --git a/test/cli/normalize-cli-options.spec.mjs b/test/cli/normalize-cli-options.spec.mjs
index 6976ca40..d258e204 100644
--- a/test/cli/normalize-cli-options.spec.mjs
+++ b/test/cli/normalize-cli-options.spec.mjs
@@ -2,7 +2,7 @@ import { fileURLToPath } from "node:url";
 import { deepEqual, equal } from "node:assert/strict";
 import normalizeCliOptions, {
   determineRulesFileName,
-} from "../../src/cli/normalize-cli-options.mjs";
+} from "#cli/normalize-cli-options.mjs";
 
 // eslint-disable-next-line max-statements
 describe("[I] cli/normalizeCliOptions - regular normalizations", () => {
diff --git a/test/cli/tools/wrap-stream-in-html.spec.mjs b/test/cli/tools/wrap-stream-in-html.spec.mjs
index 4b93a9e0..f4e1bc11 100644
--- a/test/cli/tools/wrap-stream-in-html.spec.mjs
+++ b/test/cli/tools/wrap-stream-in-html.spec.mjs
@@ -1,7 +1,7 @@
 import { createReadStream } from "node:fs";
 import { Writable } from "node:stream";
 import { equal } from "node:assert/strict";
-import wrapStreamInHTML from "../../../src/cli/tools/wrap-stream-in-html.mjs";
+import wrapStreamInHTML from "#cli/tools/wrap-stream-in-html.mjs";
 
 class WriteableExpectStream extends Writable {
   _write(pThing) {
diff --git a/test/cli/utl/assert-file-existence.spec.mjs b/test/cli/utl/assert-file-existence.spec.mjs
index 239cdd00..67109f11 100644
--- a/test/cli/utl/assert-file-existence.spec.mjs
+++ b/test/cli/utl/assert-file-existence.spec.mjs
@@ -1,5 +1,5 @@
 import { doesNotThrow, throws } from "node:assert/strict";
-import validateFileExistence from "../../../src/cli/utl/assert-file-existence.mjs";
+import validateFileExistence from "#cli/utl/assert-file-existence.mjs";
 
 describe("[U] cli/utl/validateFileExistence", () => {
   it("throws when the file or dir passed does not exists", () => {
diff --git a/test/cli/utl/io.spec.mjs b/test/cli/utl/io.spec.mjs
index 147b4c76..d08900e1 100644
--- a/test/cli/utl/io.spec.mjs
+++ b/test/cli/utl/io.spec.mjs
@@ -2,7 +2,7 @@ import { ReadStream } from "node:fs";
 import { Readable } from "node:stream";
 import { fileURLToPath } from "node:url";
 import { deepEqual, notDeepStrictEqual, equal } from "node:assert/strict";
-import { getInStream } from "../../../src/cli/utl/io.mjs";
+import { getInStream } from "#cli/utl/io.mjs";
 
 describe("[U] cli/utl/io", () => {
   const OUTFILE = fileURLToPath(
diff --git a/test/cli/validate-node-environment.spec.mjs b/test/cli/validate-node-environment.spec.mjs
index 05ce618c..892b57e0 100644
--- a/test/cli/validate-node-environment.spec.mjs
+++ b/test/cli/validate-node-environment.spec.mjs
@@ -1,5 +1,5 @@
 import { doesNotThrow, throws } from "node:assert/strict";
-import assertNodeEnvironmentSuitable from "../../src/cli/assert-node-environment-suitable.mjs";
+import assertNodeEnvironmentSuitable from "#cli/assert-node-environment-suitable.mjs";
 
 describe("[U] cli/validateNodeEnv", () => {
   it("throws when an older and unsupported node version is passed", () => {
diff --git a/test/config-utl/extract-babel-config.spec.mjs b/test/config-utl/extract-babel-config.spec.mjs
index 2daac294..352d32f4 100644
--- a/test/config-utl/extract-babel-config.spec.mjs
+++ b/test/config-utl/extract-babel-config.spec.mjs
@@ -1,8 +1,8 @@
 import { deepEqual, ok, equal } from "node:assert/strict";
 import { fileURLToPath } from "node:url";
 import omit from "lodash/omit.js";
-import extractBabelConfig from "../../src/config-utl/extract-babel-config.mjs";
-import pathToPosix from "../../src/utl/path-to-posix.mjs";
+import extractBabelConfig from "#config-utl/extract-babel-config.mjs";
+import pathToPosix from "#utl/path-to-posix.mjs";
 
 function getFullPath(pRelativePath) {
   return fileURLToPath(new URL(pRelativePath, import.meta.url));
diff --git a/test/config-utl/extract-depcruise-config/index.spec.mjs b/test/config-utl/extract-depcruise-config/index.spec.mjs
index 678af83c..5cff6755 100644
--- a/test/config-utl/extract-depcruise-config/index.spec.mjs
+++ b/test/config-utl/extract-depcruise-config/index.spec.mjs
@@ -1,7 +1,7 @@
 import { fileURLToPath } from "node:url";
 import { join } from "node:path";
 import { ok, deepEqual } from "node:assert/strict";
-import loadConfig from "../../../src/config-utl/extract-depcruise-config/index.mjs";
+import loadConfig from "#config-utl/extract-depcruise-config/index.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 const mockDirectory = join(__dirname, "__mocks__");
diff --git a/test/config-utl/extract-depcruise-config/merge-rule-sets.spec.mjs b/test/config-utl/extract-depcruise-config/merge-rule-sets.spec.mjs
index 34b25631..125bb6c3 100644
--- a/test/config-utl/extract-depcruise-config/merge-rule-sets.spec.mjs
+++ b/test/config-utl/extract-depcruise-config/merge-rule-sets.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import merge from "../../../src/config-utl/extract-depcruise-config/merge-configs.mjs";
+import merge from "#config-utl/extract-depcruise-config/merge-configs.mjs";
 
 describe("[U] config-utl/mergeRuleSets - general", () => {
   it("two empty rule sets yield an empty rule set with named attributes", () => {
diff --git a/test/config-utl/extract-depcruise-config/read-config.spec.mjs b/test/config-utl/extract-depcruise-config/read-config.spec.mjs
index 0d910a27..4fed645d 100644
--- a/test/config-utl/extract-depcruise-config/read-config.spec.mjs
+++ b/test/config-utl/extract-depcruise-config/read-config.spec.mjs
@@ -1,6 +1,6 @@
 import { fileURLToPath } from "node:url";
 import { deepEqual } from "node:assert/strict";
-import readConfig from "../../../src/config-utl/extract-depcruise-config/read-config.mjs";
+import readConfig from "#config-utl/extract-depcruise-config/read-config.mjs";
 
 function getFullPath(pRelativePath) {
   return fileURLToPath(new URL(pRelativePath, import.meta.url));
diff --git a/test/config-utl/extract-known-violations.spec.mjs b/test/config-utl/extract-known-violations.spec.mjs
index 2faee079..748e5e39 100644
--- a/test/config-utl/extract-known-violations.spec.mjs
+++ b/test/config-utl/extract-known-violations.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual, ok } from "node:assert/strict";
-import extractKnownViolations from "../../src/config-utl/extract-known-violations.mjs";
+import extractKnownViolations from "#config-utl/extract-known-violations.mjs";
 
 describe("[I] config-utl/extractKnownViolations", () => {
   const WORKINGDIR = process.cwd();
diff --git a/test/config-utl/extract-ts-config.spec.mjs b/test/config-utl/extract-ts-config.spec.mjs
index 42c81a11..df6f1038 100644
--- a/test/config-utl/extract-ts-config.spec.mjs
+++ b/test/config-utl/extract-ts-config.spec.mjs
@@ -1,7 +1,7 @@
 import { fileURLToPath } from "node:url";
 import { deepEqual, throws } from "node:assert/strict";
-import loadTSConfig from "../../src/config-utl/extract-ts-config.mjs";
-import pathToPosix from "../../src/utl/path-to-posix.mjs";
+import loadTSConfig from "#config-utl/extract-ts-config.mjs";
+import pathToPosix from "#utl/path-to-posix.mjs";
 
 function getFullPath(pRelativePath) {
   return fileURLToPath(new URL(pRelativePath, import.meta.url));
diff --git a/test/config-utl/extract-webpack-resolve-config-native.spec.mjs b/test/config-utl/extract-webpack-resolve-config-native.spec.mjs
index 1fdee72e..63eda82e 100644
--- a/test/config-utl/extract-webpack-resolve-config-native.spec.mjs
+++ b/test/config-utl/extract-webpack-resolve-config-native.spec.mjs
@@ -1,7 +1,7 @@
 import { fileURLToPath } from "node:url";
 import { deepEqual, equal } from "node:assert/strict";
 
-import loadResolveConfig from "../../src/config-utl/extract-webpack-resolve-config.mjs";
+import loadResolveConfig from "#config-utl/extract-webpack-resolve-config.mjs";
 
 function getFullPath(pRelativePath) {
   return fileURLToPath(new URL(pRelativePath, import.meta.url));
diff --git a/test/config-utl/extract-webpack-resolve-config-non-native.spec.mjs b/test/config-utl/extract-webpack-resolve-config-non-native.spec.mjs
index e980744e..7f26ac8c 100644
--- a/test/config-utl/extract-webpack-resolve-config-non-native.spec.mjs
+++ b/test/config-utl/extract-webpack-resolve-config-non-native.spec.mjs
@@ -1,7 +1,7 @@
 import { deepEqual, match, equal } from "node:assert/strict";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
-import loadResolveConfig from "../../src/config-utl/extract-webpack-resolve-config.mjs";
+import loadResolveConfig from "#config-utl/extract-webpack-resolve-config.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 
diff --git a/test/config-utl/make-absolute.spec.mjs b/test/config-utl/make-absolute.spec.mjs
index 51ac8f7c..cdabbf00 100644
--- a/test/config-utl/make-absolute.spec.mjs
+++ b/test/config-utl/make-absolute.spec.mjs
@@ -1,6 +1,6 @@
 import { join } from "node:path";
 import { equal } from "node:assert/strict";
-import makeAbsolute from "../../src/config-utl/make-absolute.mjs";
+import makeAbsolute from "#config-utl/make-absolute.mjs";
 
 describe("[U] cli/utl/makeAbsolute", () => {
   it("leaves absolute path names alone", () => {
diff --git a/test/configs/no-orphans.spec.mjs b/test/configs/no-orphans.spec.mjs
index a06a3d88..adf6a050 100644
--- a/test/configs/no-orphans.spec.mjs
+++ b/test/configs/no-orphans.spec.mjs
@@ -1,6 +1,6 @@
 import { equal } from "node:assert/strict";
 import noOrphansRule from "../../configs/rules/no-orphans.js";
-import matchModuleRule from "../../src/validate/match-module-rule.mjs";
+import matchModuleRule from "#validate/match-module-rule.mjs";
 
 describe("[I] configs/rules/no-orphans", () => {
   it("flags non-excepted orphans as orphan rule transgression", () => {
diff --git a/test/enrich/de-duplicate-violations.spec.mjs b/test/enrich/de-duplicate-violations.spec.mjs
index c242cf7c..a8f867f8 100644
--- a/test/enrich/de-duplicate-violations.spec.mjs
+++ b/test/enrich/de-duplicate-violations.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
 import uniqWith from "lodash/uniqWith.js";
-import isSameViolation from "../../src/enrich/summarize/is-same-violation.mjs";
+import isSameViolation from "#enrich/summarize/is-same-violation.mjs";
 
 const deDuplicateViolations = (pViolations) =>
   uniqWith(pViolations, isSameViolation);
diff --git a/test/enrich/derive/dependents/get-dependents.spec.mjs b/test/enrich/derive/dependents/get-dependents.spec.mjs
index 918ce525..7f039807 100644
--- a/test/enrich/derive/dependents/get-dependents.spec.mjs
+++ b/test/enrich/derive/dependents/get-dependents.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
 
-import getDependents from "../../../../src/enrich/derive/dependents/get-dependents.mjs";
+import getDependents from "#enrich/derive/dependents/get-dependents.mjs";
 
 describe("[U] enrich/derive/dependents/get-dependents", () => {
   it("empty module without a source name & no modules yield no modules", () => {
diff --git a/test/enrich/derive/folders/aggregate-to-folders.spec.mjs b/test/enrich/derive/folders/aggregate-to-folders.spec.mjs
index 5d3eb643..303c8c5c 100644
--- a/test/enrich/derive/folders/aggregate-to-folders.spec.mjs
+++ b/test/enrich/derive/folders/aggregate-to-folders.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
 
-import aggregateToFolders from "../../../../src/enrich/derive/folders/aggregate-to-folders.mjs";
+import aggregateToFolders from "#enrich/derive/folders/aggregate-to-folders.mjs";
 
 function compareFolders(pLeftFolder, pRightFolder) {
   return pLeftFolder.name.localeCompare(pRightFolder.name);
diff --git a/test/enrich/derive/folders/index.spec.mjs b/test/enrich/derive/folders/index.spec.mjs
index 806045cf..d51face9 100644
--- a/test/enrich/derive/folders/index.spec.mjs
+++ b/test/enrich/derive/folders/index.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
 
-import deriveFolders from "../../../../src/enrich/derive/folders/index.mjs";
+import deriveFolders from "#enrich/derive/folders/index.mjs";
 
 describe("[U] enrich/derive/folders - folder stability metrics derivation", () => {
   it("doesn't do anything when we're not asking for metrics (metrics nor outputType)", () => {
diff --git a/test/enrich/derive/folders/utl.spec.mjs b/test/enrich/derive/folders/utl.spec.mjs
index e28a5ef9..c196adab 100644
--- a/test/enrich/derive/folders/utl.spec.mjs
+++ b/test/enrich/derive/folders/utl.spec.mjs
@@ -5,7 +5,7 @@ import {
   getEfferentCouplings,
   getParentFolders,
   object2Array,
-} from "../../../../src/enrich/derive/folders/utl.mjs";
+} from "#enrich/derive/folders/utl.mjs";
 
 describe("[U] enrich/derive/folders/utl - getAfferentCouplings", () => {
   it("no dependents => 0", () => {
diff --git a/test/enrich/derive/metrics/module.spec.mjs b/test/enrich/derive/metrics/module.spec.mjs
index 3ccc51aa..65f2b877 100644
--- a/test/enrich/derive/metrics/module.spec.mjs
+++ b/test/enrich/derive/metrics/module.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual, equal } from "node:assert/strict";
 
-import deriveModuleMetrics from "../../../../src/enrich/derive/metrics/index.mjs";
+import deriveModuleMetrics from "#enrich/derive/metrics/index.mjs";
 
 describe("[U] enrich/derive/metrics/module - module stability metrics derivation", () => {
   it("doesn't do anything when we're not asking for metrics (metrics nor outputType)", () => {
diff --git a/test/enrich/derive/orphan/index.spec.mjs b/test/enrich/derive/orphan/index.spec.mjs
index c9f0748a..0b261f28 100644
--- a/test/enrich/derive/orphan/index.spec.mjs
+++ b/test/enrich/derive/orphan/index.spec.mjs
@@ -1,10 +1,10 @@
 import { deepEqual } from "node:assert/strict";
 
-import orphan from "../../../../src/enrich/derive/orphan/index.mjs";
 import ONE_MODULE_FIXTURE from "./__mocks__/one-module.mjs";
 import ONE_MODULE_AFTER_PROCESSING from "./__mocks__/one-module.afterprocessing.mjs";
 import TWO_MODULES_FIXTURE from "./__mocks__/two-module.mjs";
 import TWO_MODULES_AFTER_PROCESSING from "./__mocks__/two-module.afterprocessing.mjs";
+import orphan from "#enrich/derive/orphan/index.mjs";
 
 describe("[U] enrich/derive/orphan/index - orphan detection", () => {
   it('attaches the "orphan" boolean to orphan modules by default', () => {
diff --git a/test/enrich/derive/orphan/is-orphan.spec.mjs b/test/enrich/derive/orphan/is-orphan.spec.mjs
index f40a8a55..a87908af 100644
--- a/test/enrich/derive/orphan/is-orphan.spec.mjs
+++ b/test/enrich/derive/orphan/is-orphan.spec.mjs
@@ -1,8 +1,8 @@
 import { equal } from "node:assert/strict";
 
-import isOrphan from "../../../../src/enrich/derive/orphan/is-orphan.mjs";
 import ONE_MODULE_FIXTURE from "./__mocks__/one-module.mjs";
 import TWO_MODULES_FIXTURE from "./__mocks__/two-module.mjs";
+import isOrphan from "#enrich/derive/orphan/is-orphan.mjs";
 
 describe("[U] enrich/derive/orphan/isOrphan", () => {
   it("flags a single module dependency graph as orphan", () => {
diff --git a/test/enrich/derive/reachable.spec.mjs b/test/enrich/derive/reachable.spec.mjs
index 6eea20ff..7d25755e 100644
--- a/test/enrich/derive/reachable.spec.mjs
+++ b/test/enrich/derive/reachable.spec.mjs
@@ -1,7 +1,7 @@
 import { deepEqual } from "node:assert/strict";
-import normalize from "../../../src/main/rule-set/normalize.mjs";
-import addReachability from "../../../src/enrich/derive/reachable.mjs";
-import clearExtractCaches from "../../../src/extract/clear-caches.mjs";
+import normalize from "#main/rule-set/normalize.mjs";
+import addReachability from "#enrich/derive/reachable.mjs";
+import clearExtractCaches from "#extract/clear-caches.mjs";
 
 const GRAPH = [
   {
diff --git a/test/enrich/soften-known-violations.spec.mjs b/test/enrich/soften-known-violations.spec.mjs
index cc968f79..22f2f1fd 100644
--- a/test/enrich/soften-known-violations.spec.mjs
+++ b/test/enrich/soften-known-violations.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import softenKnownViolations from "../../src/enrich/soften-known-violations.mjs";
+import softenKnownViolations from "#enrich/soften-known-violations.mjs";
 
 describe("[U] enrich/soften-known-violations - modules violations", () => {
   /** @type import("../../types/baseline-violations").IBaselineViolations */
diff --git a/test/enrich/summarize-folders.spec.mjs b/test/enrich/summarize-folders.spec.mjs
index 71ee5926..cf3719ce 100644
--- a/test/enrich/summarize-folders.spec.mjs
+++ b/test/enrich/summarize-folders.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import summarizeFolders from "../../src/enrich/summarize/summarize-folders.mjs";
+import summarizeFolders from "#enrich/summarize/summarize-folders.mjs";
 
 const FIXTURE_WITHOUT_VIOLATIONS = [
   {
diff --git a/test/enrich/summarize.spec.mjs b/test/enrich/summarize.spec.mjs
index aac24927..9ebebc6e 100644
--- a/test/enrich/summarize.spec.mjs
+++ b/test/enrich/summarize.spec.mjs
@@ -1,10 +1,10 @@
 import { deepEqual } from "node:assert/strict";
 import Ajv from "ajv";
-import summarize from "../../src/enrich/summarize/index.mjs";
-import cruiseResultSchema from "../../src/schema/cruise-result.schema.mjs";
 import cycleStartsOnOne from "./__mocks__/cycle-starts-on-one.mjs";
 import cycleStartsOnTwo from "./__mocks__/cycle-starts-on-two.mjs";
 import cycleFest from "./__mocks__/cycle-fest.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
+import summarize from "#enrich/summarize/index.mjs";
 
 const ajv = new Ajv();
 
diff --git a/test/extract/ast-extractors/extract-amd-deps.spec.mjs b/test/extract/ast-extractors/extract-amd-deps.spec.mjs
index 507b5d50..9990e151 100644
--- a/test/extract/ast-extractors/extract-amd-deps.spec.mjs
+++ b/test/extract/ast-extractors/extract-amd-deps.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import extractAMDDeps from "../../../src/extract/ast-extractors/extract-amd-deps.mjs";
-import { getASTFromSource } from "../../../src/extract/parse/to-javascript-ast.mjs";
+import extractAMDDeps from "#extract/ast-extractors/extract-amd-deps.mjs";
+import { getASTFromSource } from "#extract/parse/to-javascript-ast.mjs";
 
 const extractAMD = (
   pJavaScriptSource,
diff --git a/test/extract/ast-extractors/extract-cjs-deps.spec.mjs b/test/extract/ast-extractors/extract-cjs-deps.spec.mjs
index 4fbe99c9..7f9a48dd 100644
--- a/test/extract/ast-extractors/extract-cjs-deps.spec.mjs
+++ b/test/extract/ast-extractors/extract-cjs-deps.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import extractcommonJSDeps from "../../../src/extract/ast-extractors/extract-cjs-deps.mjs";
-import { getASTFromSource } from "../../../src/extract/parse/to-javascript-ast.mjs";
+import extractcommonJSDeps from "#extract/ast-extractors/extract-cjs-deps.mjs";
+import { getASTFromSource } from "#extract/parse/to-javascript-ast.mjs";
 
 const extractcommonJS = (
   pJavaScriptSource,
diff --git a/test/extract/ast-extractors/extract-es6-deps.spec.mjs b/test/extract/ast-extractors/extract-es6-deps.spec.mjs
index 320f0464..01d1148b 100644
--- a/test/extract/ast-extractors/extract-es6-deps.spec.mjs
+++ b/test/extract/ast-extractors/extract-es6-deps.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import extractES6Deps from "../../../src/extract/ast-extractors/extract-es6-deps.mjs";
-import { getASTFromSource } from "../../../src/extract/parse/to-javascript-ast.mjs";
+import extractES6Deps from "#extract/ast-extractors/extract-es6-deps.mjs";
+import { getASTFromSource } from "#extract/parse/to-javascript-ast.mjs";
 
 const extractES6 = (pJavaScriptSource, pDependencies, pExtension = ".js") =>
   extractES6Deps(
diff --git a/test/extract/ast-extractors/extract-typescript-others.spec.mjs b/test/extract/ast-extractors/extract-typescript-others.spec.mjs
index d425c4e1..1b569ccf 100644
--- a/test/extract/ast-extractors/extract-typescript-others.spec.mjs
+++ b/test/extract/ast-extractors/extract-typescript-others.spec.mjs
@@ -1,7 +1,7 @@
 import { deepEqual } from "node:assert/strict";
 import { readFileSync } from "node:fs";
 import { fileURLToPath } from "node:url";
-import extractTypescriptFromAST from "../../../src/extract/ast-extractors/extract-typescript-deps.mjs";
+import extractTypescriptFromAST from "#extract/ast-extractors/extract-typescript-deps.mjs";
 
 describe("[U] ast-extractors/extract-typescript - others", () => {
   // see issue #167 - union types on tsc 2.8 and before don't deliver/
diff --git a/test/extract/ast-extractors/extract-typescript.utl.mjs b/test/extract/ast-extractors/extract-typescript.utl.mjs
index 4accf9b0..570b2d85 100644
--- a/test/extract/ast-extractors/extract-typescript.utl.mjs
+++ b/test/extract/ast-extractors/extract-typescript.utl.mjs
@@ -1,5 +1,5 @@
-import extractTypescript from "../../../src/extract/ast-extractors/extract-typescript-deps.mjs";
-import { getASTFromSource } from "../../../src/extract/parse/to-typescript-ast.mjs";
+import extractTypescript from "#extract/ast-extractors/extract-typescript-deps.mjs";
+import { getASTFromSource } from "#extract/parse/to-typescript-ast.mjs";
 
 export default (pTypesScriptSource, pExoticRequireStrings = []) =>
   extractTypescript(
diff --git a/test/extract/ast-extractors/extract-with-swc.utl.mjs b/test/extract/ast-extractors/extract-with-swc.utl.mjs
index 5ef25eb3..ae5610d5 100644
--- a/test/extract/ast-extractors/extract-with-swc.utl.mjs
+++ b/test/extract/ast-extractors/extract-with-swc.utl.mjs
@@ -1,5 +1,5 @@
-import extractSwcDependencies from "../../../src/extract/ast-extractors/extract-swc-deps.mjs";
-import { getASTFromSource } from "../../../src/extract/parse/to-swc-ast.mjs";
+import extractSwcDependencies from "#extract/ast-extractors/extract-swc-deps.mjs";
+import { getASTFromSource } from "#extract/parse/to-swc-ast.mjs";
 
 export default (pTypesScriptSource, pExoticRequireStrings = []) =>
   extractSwcDependencies(
diff --git a/test/extract/gather-initial-sources.spec.mjs b/test/extract/gather-initial-sources.spec.mjs
index 542f9c4c..7e024893 100644
--- a/test/extract/gather-initial-sources.spec.mjs
+++ b/test/extract/gather-initial-sources.spec.mjs
@@ -1,8 +1,8 @@
 import { deepEqual, equal } from "node:assert/strict";
 import { lstatSync } from "node:fs";
-import gatherInitialSources from "../../src/extract/gather-initial-sources.mjs";
-import p2p from "../../src/utl/path-to-posix.mjs";
-import { normalizeCruiseOptions } from "../../src/main/options/normalize.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import p2p from "#utl/path-to-posix.mjs";
+import gatherInitialSources from "#extract/gather-initial-sources.mjs";
 
 // make the import pathToPosix the correct function profile
 // (1 parameter exactly) for use in map
diff --git a/test/extract/get-dependencies.amd.spec.mjs b/test/extract/get-dependencies.amd.spec.mjs
index a674daee..8b85340d 100644
--- a/test/extract/get-dependencies.amd.spec.mjs
+++ b/test/extract/get-dependencies.amd.spec.mjs
@@ -3,11 +3,11 @@ import { join } from "node:path";
 import { unlinkSync } from "node:fs";
 import { fileURLToPath } from "node:url";
 import symlinkDir from "symlink-dir";
-import normalizeResolveOptions from "../../src/main/resolve-options/normalize.mjs";
-import { normalizeCruiseOptions } from "../../src/main/options/normalize.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
-import getDependencies from "../../src/extract/get-dependencies.mjs";
 import { runFixture } from "./run-get-dependencies-fixture.utl.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import getDependencies from "#extract/get-dependencies.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 const requireJSON = createRequireJSON(import.meta.url);
diff --git a/test/extract/get-dependencies.cjs.spec.mjs b/test/extract/get-dependencies.cjs.spec.mjs
index 2b674664..d190418f 100644
--- a/test/extract/get-dependencies.cjs.spec.mjs
+++ b/test/extract/get-dependencies.cjs.spec.mjs
@@ -3,10 +3,10 @@ import { join } from "node:path";
 import { unlinkSync } from "node:fs";
 import { fileURLToPath } from "node:url";
 import symlinkDir from "symlink-dir";
-import normalizeResolveOptions from "../../src/main/resolve-options/normalize.mjs";
-import { normalizeCruiseOptions } from "../../src/main/options/normalize.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
-import getDependencies from "../../src/extract/get-dependencies.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import getDependencies from "#extract/get-dependencies.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 const requireJSON = createRequireJSON(import.meta.url);
diff --git a/test/extract/get-dependencies.odds-and-ends.spec.mjs b/test/extract/get-dependencies.odds-and-ends.spec.mjs
index cec3d362..33445c69 100644
--- a/test/extract/get-dependencies.odds-and-ends.spec.mjs
+++ b/test/extract/get-dependencies.odds-and-ends.spec.mjs
@@ -1,9 +1,9 @@
 import { deepEqual, doesNotThrow, equal, throws } from "node:assert/strict";
-import normalizeResolveOptions from "../../src/main/resolve-options/normalize.mjs";
-import { normalizeCruiseOptions } from "../../src/main/options/normalize.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
-import getDependencies from "../../src/extract/get-dependencies.mjs";
 import { runFixture } from "./run-get-dependencies-fixture.utl.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import getDependencies from "#extract/get-dependencies.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 
diff --git a/test/extract/helpers-dependencies-equal.spec.mjs b/test/extract/helpers-dependencies-equal.spec.mjs
index 2a8aaca8..de58ef2e 100644
--- a/test/extract/helpers-dependencies-equal.spec.mjs
+++ b/test/extract/helpers-dependencies-equal.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { dependenciesEqual } from "../../src/extract/helpers.mjs";
+import { dependenciesEqual } from "#extract/helpers.mjs";
 
 describe("[U] extract/helpers - dependencyEqual", () => {
   it("two empty dependencies are equal", () => {
diff --git a/test/extract/helpers-detect-pre-compilation-ness.spec.mjs b/test/extract/helpers-detect-pre-compilation-ness.spec.mjs
index 00f7d294..f4998117 100644
--- a/test/extract/helpers-detect-pre-compilation-ness.spec.mjs
+++ b/test/extract/helpers-detect-pre-compilation-ness.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import { detectPreCompilationNess } from "../../src/extract/helpers.mjs";
+import { detectPreCompilationNess } from "#extract/helpers.mjs";
 
 describe("[U] extract/helpers - detectPreCompilationNess", () => {
   it("empty dependency lists yield an empty one", () => {
diff --git a/test/extract/helpers-extract-module-attributes.spec.mjs b/test/extract/helpers-extract-module-attributes.spec.mjs
index 486136af..dfbc2ad2 100644
--- a/test/extract/helpers-extract-module-attributes.spec.mjs
+++ b/test/extract/helpers-extract-module-attributes.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import { extractModuleAttributes } from "../../src/extract/helpers.mjs";
+import { extractModuleAttributes } from "#extract/helpers.mjs";
 
 describe("[U] extract/helpers - extractModuleAttributes", () => {
   it("leaves regular module specifications alone", () => {
diff --git a/test/extract/helpers-strip-query-parameters.spec.mjs b/test/extract/helpers-strip-query-parameters.spec.mjs
index a4c40638..d0e6bf60 100644
--- a/test/extract/helpers-strip-query-parameters.spec.mjs
+++ b/test/extract/helpers-strip-query-parameters.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { stripQueryParameters } from "../../src/extract/helpers.mjs";
+import { stripQueryParameters } from "#extract/helpers.mjs";
 
 describe("[U] extract/helpers - stripQueryParams", () => {
   it("leaves the empty string alone", () => {
diff --git a/test/extract/index.cachebusting.spec.mjs b/test/extract/index.cachebusting.spec.mjs
index 561836a8..bdf45667 100644
--- a/test/extract/index.cachebusting.spec.mjs
+++ b/test/extract/index.cachebusting.spec.mjs
@@ -1,9 +1,9 @@
 import { renameSync } from "node:fs";
 import { deepEqual, notDeepStrictEqual } from "node:assert/strict";
-import extract from "../../src/extract/index.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
-import { normalizeCruiseOptions } from "../../src/main/options/normalize.mjs";
-import normalizeResolveOptions from "../../src/main/resolve-options/normalize.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import extract from "#extract/index.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 
diff --git a/test/extract/index.donotfollow.spec.mjs b/test/extract/index.donotfollow.spec.mjs
index da5fc70a..b1700b0d 100644
--- a/test/extract/index.donotfollow.spec.mjs
+++ b/test/extract/index.donotfollow.spec.mjs
@@ -1,8 +1,8 @@
 import { deepEqual } from "node:assert/strict";
-import extract from "../../src/extract/index.mjs";
-import { normalizeCruiseOptions } from "../../src/main/options/normalize.mjs";
-import normalizeResolveOptions from "../../src/main/resolve-options/normalize.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import extract from "#extract/index.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 
diff --git a/test/extract/index.exclude.spec.mjs b/test/extract/index.exclude.spec.mjs
index 7a73b119..dbd0a51c 100644
--- a/test/extract/index.exclude.spec.mjs
+++ b/test/extract/index.exclude.spec.mjs
@@ -1,8 +1,8 @@
 import { deepEqual } from "node:assert/strict";
-import extract from "../../src/extract/index.mjs";
-import { normalizeCruiseOptions } from "../../src/main/options/normalize.mjs";
-import normalizeResolveOptions from "../../src/main/resolve-options/normalize.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import extract from "#extract/index.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 
diff --git a/test/extract/index.maxdepth.spec.mjs b/test/extract/index.maxdepth.spec.mjs
index 017ff607..f40502bc 100644
--- a/test/extract/index.maxdepth.spec.mjs
+++ b/test/extract/index.maxdepth.spec.mjs
@@ -1,8 +1,8 @@
 import { deepEqual } from "node:assert/strict";
-import extract from "../../src/extract/index.mjs";
-import { normalizeCruiseOptions } from "../../src/main/options/normalize.mjs";
-import normalizeResolveOptions from "../../src/main/resolve-options/normalize.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import extract from "#extract/index.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 
diff --git a/test/extract/parse/to-javascript-ast.spec.mjs b/test/extract/parse/to-javascript-ast.spec.mjs
index a9300820..da406f17 100644
--- a/test/extract/parse/to-javascript-ast.spec.mjs
+++ b/test/extract/parse/to-javascript-ast.spec.mjs
@@ -1,6 +1,6 @@
 import { equal } from "node:assert/strict";
 import get from "lodash/get.js";
-import { getASTFromSource } from "../../../src/extract/parse/to-javascript-ast.mjs";
+import { getASTFromSource } from "#extract/parse/to-javascript-ast.mjs";
 
 const TSCONFIG_CONSTANTS = {
   ESNEXT: 99,
diff --git a/test/extract/resolve/classify.is-external-module.spec.mjs b/test/extract/resolve/classify.is-external-module.spec.mjs
index 3a16f01b..d3ed7f45 100644
--- a/test/extract/resolve/classify.is-external-module.spec.mjs
+++ b/test/extract/resolve/classify.is-external-module.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { isExternalModule } from "../../../src/extract/resolve/module-classifiers.mjs";
+import { isExternalModule } from "#extract/resolve/module-classifiers.mjs";
 
 describe("[U] extract/resolve/module-classifiers - isExternalModule", () => {
   it("returns false when passed nothing", () => {
diff --git a/test/extract/resolve/classify.is-relative-module-name.spec.mjs b/test/extract/resolve/classify.is-relative-module-name.spec.mjs
index 8a445f5d..b2cef2a5 100644
--- a/test/extract/resolve/classify.is-relative-module-name.spec.mjs
+++ b/test/extract/resolve/classify.is-relative-module-name.spec.mjs
@@ -1,5 +1,5 @@
 import { throws, equal } from "node:assert/strict";
-import { isRelativeModuleName } from "../../../src/extract/resolve/module-classifiers.mjs";
+import { isRelativeModuleName } from "#extract/resolve/module-classifiers.mjs";
 
 describe("[U] extract/resolve/module-classifiers - isRelativeModuleName", () => {
   it("throws an error when passed nothing", () => {
diff --git a/test/extract/resolve/determine-dependency-types.spec.mjs b/test/extract/resolve/determine-dependency-types.spec.mjs
index a4905185..f4c1f39b 100644
--- a/test/extract/resolve/determine-dependency-types.spec.mjs
+++ b/test/extract/resolve/determine-dependency-types.spec.mjs
@@ -1,7 +1,7 @@
 import { deepEqual } from "node:assert/strict";
 import { resolve } from "node:path";
 import { fileURLToPath } from "node:url";
-import determineDependencyTypes from "../../../src/extract/resolve/determine-dependency-types.mjs";
+import determineDependencyTypes from "#extract/resolve/determine-dependency-types.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 
diff --git a/test/extract/resolve/external-module-helpers.spec.mjs b/test/extract/resolve/external-module-helpers.spec.mjs
index cf02d67a..a4142e04 100644
--- a/test/extract/resolve/external-module-helpers.spec.mjs
+++ b/test/extract/resolve/external-module-helpers.spec.mjs
@@ -1,13 +1,13 @@
 import { ok, equal } from "node:assert/strict";
-import clearCaches from "../../../src/extract/clear-caches.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import clearCaches from "#extract/clear-caches.mjs";
 import {
   getPackageJson,
   getPackageRoot,
   getLicense,
   dependencyIsDeprecated,
-} from "../../../src/extract/resolve/external-module-helpers.mjs";
-import normalizeResolveOptions from "../../../src/main/resolve-options/normalize.mjs";
-import { normalizeCruiseOptions } from "../../../src/main/options/normalize.mjs";
+} from "#extract/resolve/external-module-helpers.mjs";
 
 const BASIC_RESOLVE_OPTIONS = await normalizeResolveOptions(
   {},
diff --git a/test/extract/resolve/get-manifest.spec.mjs b/test/extract/resolve/get-manifest.spec.mjs
index 330911fe..0a54b20c 100644
--- a/test/extract/resolve/get-manifest.spec.mjs
+++ b/test/extract/resolve/get-manifest.spec.mjs
@@ -2,7 +2,7 @@ import { readFileSync } from "node:fs";
 import { parse, join, dirname } from "node:path";
 import { fileURLToPath } from "node:url";
 import { deepEqual, equal, throws } from "node:assert/strict";
-import { getManifest } from "../../../src/extract/resolve/get-manifest.mjs";
+import { getManifest } from "#extract/resolve/get-manifest.mjs";
 
 const rootPackageJson = JSON.parse(
   readFileSync(
diff --git a/test/extract/resolve/index.general.spec.mjs b/test/extract/resolve/index.general.spec.mjs
index dd00097c..a6051ff4 100644
--- a/test/extract/resolve/index.general.spec.mjs
+++ b/test/extract/resolve/index.general.spec.mjs
@@ -2,8 +2,8 @@
 import { deepEqual } from "node:assert/strict";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
-import resolve from "../../../src/extract/resolve/index.mjs";
-import normalizeResolveOptions from "../../../src/main/resolve-options/normalize.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import resolve from "#extract/resolve/index.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 
diff --git a/test/extract/resolve/index.tsconfig.spec.mjs b/test/extract/resolve/index.tsconfig.spec.mjs
index e9abe3ef..24598d56 100644
--- a/test/extract/resolve/index.tsconfig.spec.mjs
+++ b/test/extract/resolve/index.tsconfig.spec.mjs
@@ -1,9 +1,9 @@
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
 import { deepEqual } from "node:assert/strict";
-import extractTSConfig from "../../../src/config-utl/extract-ts-config.mjs";
-import resolve from "../../../src/extract/resolve/index.mjs";
-import normalizeResolveOptions from "../../../src/main/resolve-options/normalize.mjs";
+import extractTSConfig from "#config-utl/extract-ts-config.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import resolve from "#extract/resolve/index.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 
diff --git a/test/extract/resolve/index.typescript.spec.mjs b/test/extract/resolve/index.typescript.spec.mjs
index 96c77b8c..3e5e207b 100644
--- a/test/extract/resolve/index.typescript.spec.mjs
+++ b/test/extract/resolve/index.typescript.spec.mjs
@@ -1,8 +1,8 @@
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
 import { deepEqual } from "node:assert/strict";
-import resolve from "../../../src/extract/resolve/index.mjs";
-import normalizeResolveOptions from "../../../src/main/resolve-options/normalize.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import resolve from "#extract/resolve/index.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 
diff --git a/test/extract/resolve/is-built-in.spec.mjs b/test/extract/resolve/is-built-in.spec.mjs
index 22b25498..2408fe86 100644
--- a/test/extract/resolve/is-built-in.spec.mjs
+++ b/test/extract/resolve/is-built-in.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { isBuiltin } from "../../../src/extract/resolve/is-built-in.mjs";
+import { isBuiltin } from "#extract/resolve/is-built-in.mjs";
 
 describe("[U] extract/resolve/is-built-in - isBuiltIn", () => {
   it("should return true for built-in modules", () => {
diff --git a/test/extract/resolve/merge-manifests.spec.mjs b/test/extract/resolve/merge-manifests.spec.mjs
index f24b591c..46cf3f58 100644
--- a/test/extract/resolve/merge-manifests.spec.mjs
+++ b/test/extract/resolve/merge-manifests.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import mergePackages from "../../../src/extract/resolve/merge-manifests.mjs";
+import mergePackages from "#extract/resolve/merge-manifests.mjs";
 
 const INPUT = {
   description: "testington",
diff --git a/test/extract/resolve/resolve-helpers.spec.mjs b/test/extract/resolve/resolve-helpers.spec.mjs
index 778d9119..f0c6991f 100644
--- a/test/extract/resolve/resolve-helpers.spec.mjs
+++ b/test/extract/resolve/resolve-helpers.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { stripToModuleName } from "../../../src/extract/resolve/resolve-helpers.mjs";
+import { stripToModuleName } from "#extract/resolve/resolve-helpers.mjs";
 
 describe("[U] extract/resolve/resolveHelpers - stripToModuleName", () => {
   it("yields the empty string when stripping the empty string", () => {
diff --git a/test/extract/run-get-dependencies-fixture.utl.mjs b/test/extract/run-get-dependencies-fixture.utl.mjs
index 4b64730a..6aefdab3 100644
--- a/test/extract/run-get-dependencies-fixture.utl.mjs
+++ b/test/extract/run-get-dependencies-fixture.utl.mjs
@@ -1,7 +1,7 @@
 import { deepEqual } from "node:assert/strict";
-import getDependencies from "../../src/extract/get-dependencies.mjs";
-import { normalizeCruiseOptions } from "../../src/main/options/normalize.mjs";
-import normalizeResolveOptions from "../../src/main/resolve-options/normalize.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
+import getDependencies from "#extract/get-dependencies.mjs";
 
 /* eslint-disable mocha/no-exports */
 export function runFixture(pFixture, pParser = "acorn") {
diff --git a/test/extract/transpile/babel-wrap.spec.mjs b/test/extract/transpile/babel-wrap.spec.mjs
index fa7f8e5d..1c3e9add 100644
--- a/test/extract/transpile/babel-wrap.spec.mjs
+++ b/test/extract/transpile/babel-wrap.spec.mjs
@@ -1,7 +1,7 @@
 import { equal } from "node:assert/strict";
 import { readFileSync } from "node:fs";
 import normalizeSource from "../normalize-source.utl.mjs";
-import wrap from "../../../src/extract/transpile/babel-wrap.mjs";
+import wrap from "#extract/transpile/babel-wrap.mjs";
 
 describe("[I] extract/transpile/babel-wrap", () => {
   it("tells the babel transpiler is available", () => {
diff --git a/test/extract/transpile/coffeescript-wrap.spec.mjs b/test/extract/transpile/coffeescript-wrap.spec.mjs
index 697f090e..105cdb34 100644
--- a/test/extract/transpile/coffeescript-wrap.spec.mjs
+++ b/test/extract/transpile/coffeescript-wrap.spec.mjs
@@ -1,7 +1,7 @@
 import { equal } from "node:assert/strict";
 import { readFileSync } from "node:fs";
 import normalizeNewline from "normalize-newline";
-import coffeescriptWrap from "../../../src/extract/transpile/coffeescript-wrap.mjs";
+import coffeescriptWrap from "#extract/transpile/coffeescript-wrap.mjs";
 
 const wrap = coffeescriptWrap();
 const litWrap = coffeescriptWrap(true);
diff --git a/test/extract/transpile/index.spec.mjs b/test/extract/transpile/index.spec.mjs
index 2a2369db..054dc6b1 100644
--- a/test/extract/transpile/index.spec.mjs
+++ b/test/extract/transpile/index.spec.mjs
@@ -2,15 +2,13 @@ import { deepEqual, ok, equal } from "node:assert/strict";
 import { readFileSync } from "node:fs";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
-import transpile, {
-  getWrapper,
-} from "../../../src/extract/transpile/index.mjs";
 import normalizeSource from "../normalize-source.utl.mjs";
+import transpile, { getWrapper } from "#extract/transpile/index.mjs";
 
-import jsWrap from "../../../src/extract/transpile/javascript-wrap.mjs";
-import lsWrap from "../../../src/extract/transpile/livescript-wrap.mjs";
-import babelWrap from "../../../src/extract/transpile/babel-wrap.mjs";
-import vueTemplateWrap from "../../../src/extract/transpile/vue-template-wrap.cjs";
+import jsWrap from "#extract/transpile/javascript-wrap.mjs";
+import lsWrap from "#extract/transpile/livescript-wrap.mjs";
+import babelWrap from "#extract/transpile/babel-wrap.mjs";
+import vueTemplateWrap from "#extract/transpile/vue-template-wrap.cjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 
diff --git a/test/extract/transpile/javascript-wrap.spec.mjs b/test/extract/transpile/javascript-wrap.spec.mjs
index 978d4033..fc0722a1 100644
--- a/test/extract/transpile/javascript-wrap.spec.mjs
+++ b/test/extract/transpile/javascript-wrap.spec.mjs
@@ -1,6 +1,6 @@
 import { equal } from "node:assert/strict";
 import { readFileSync } from "node:fs";
-import wrap from "../../../src/extract/transpile/javascript-wrap.mjs";
+import wrap from "#extract/transpile/javascript-wrap.mjs";
 
 describe("[I] javascript transpiler", () => {
   it("tells the jsx transpiler is available", () => {
diff --git a/test/extract/transpile/livescript-wrap.spec.mjs b/test/extract/transpile/livescript-wrap.spec.mjs
index ca5be3fc..9c686011 100644
--- a/test/extract/transpile/livescript-wrap.spec.mjs
+++ b/test/extract/transpile/livescript-wrap.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import wrap from "../../../src/extract/transpile/livescript-wrap.mjs";
+import wrap from "#extract/transpile/livescript-wrap.mjs";
 
 describe("[I] livescript transpiler", () => {
   it("tells the livescript transpiler is not available", () => {
diff --git a/test/extract/transpile/meta.spec.mjs b/test/extract/transpile/meta.spec.mjs
index dbea57ed..c4a8ab76 100644
--- a/test/extract/transpile/meta.spec.mjs
+++ b/test/extract/transpile/meta.spec.mjs
@@ -2,7 +2,7 @@ import { deepEqual } from "node:assert/strict";
 import {
   getAvailableTranspilers,
   scannableExtensions,
-} from "../../../src/extract/transpile/meta.mjs";
+} from "#extract/transpile/meta.mjs";
 
 describe("[U] extract/transpile/meta", () => {
   it("tells which extensions can be scanned", () => {
diff --git a/test/extract/transpile/svelte-preprocess.spec.mjs b/test/extract/transpile/svelte-preprocess.spec.mjs
index ce7bfc9f..67745ba7 100644
--- a/test/extract/transpile/svelte-preprocess.spec.mjs
+++ b/test/extract/transpile/svelte-preprocess.spec.mjs
@@ -2,8 +2,8 @@ import { equal } from "node:assert/strict";
 // eslint-disable-next-line node/file-extension-in-import
 import * as svelteCompiler from "svelte/compiler";
 import normalizeNewline from "normalize-newline";
-import thing from "../../../src/extract/transpile/typescript-wrap.mjs";
-import sveltePreProcess from "../../../src/extract/transpile/svelte-preprocess.mjs";
+import thing from "#extract/transpile/typescript-wrap.mjs";
+import sveltePreProcess from "#extract/transpile/svelte-preprocess.mjs";
 
 const typeScriptWrap = thing(false);
 
diff --git a/test/extract/transpile/svelte-wrap.spec.mjs b/test/extract/transpile/svelte-wrap.spec.mjs
index 01fc6410..18634007 100644
--- a/test/extract/transpile/svelte-wrap.spec.mjs
+++ b/test/extract/transpile/svelte-wrap.spec.mjs
@@ -1,8 +1,8 @@
 import { equal } from "node:assert/strict";
 import { readFileSync } from "node:fs";
-import svelteWrap from "../../../src/extract/transpile/svelte-wrap.mjs";
 import normalizeSource from "../normalize-source.utl.mjs";
-import typescriptWrap from "../../../src/extract/transpile/typescript-wrap.mjs";
+import svelteWrap from "#extract/transpile/svelte-wrap.mjs";
+import typescriptWrap from "#extract/transpile/typescript-wrap.mjs";
 
 const wrap = svelteWrap(typescriptWrap(true));
 
diff --git a/test/extract/transpile/try-import-available.spec.mjs b/test/extract/transpile/try-import-available.spec.mjs
index b5afb3f6..0bdcbbb8 100644
--- a/test/extract/transpile/try-import-available.spec.mjs
+++ b/test/extract/transpile/try-import-available.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import tryImportAvailable from "../../../src/extract/transpile/try-import-available.mjs";
+import tryImportAvailable from "#extract/transpile/try-import-available.mjs";
 
 describe("[U] extract/transpile/try-import-available", () => {
   it("returns true when the module can be resolved", () => {
diff --git a/test/extract/transpile/typescript-wrap.spec.mjs b/test/extract/transpile/typescript-wrap.spec.mjs
index 2ade0e82..4479c585 100644
--- a/test/extract/transpile/typescript-wrap.spec.mjs
+++ b/test/extract/transpile/typescript-wrap.spec.mjs
@@ -1,7 +1,7 @@
 import { equal } from "node:assert/strict";
 import { readFileSync } from "node:fs";
 import normalizeSource from "../normalize-source.utl.mjs";
-import typescriptWrap from "../../../src/extract/transpile/typescript-wrap.mjs";
+import typescriptWrap from "#extract/transpile/typescript-wrap.mjs";
 
 const typeScriptRegularWrap = typescriptWrap();
 const typeScriptTsxWrap = typescriptWrap("tsx");
diff --git a/test/extract/transpile/vue-template-wrap.spec.mjs b/test/extract/transpile/vue-template-wrap.spec.mjs
index 2e58f36d..83781193 100644
--- a/test/extract/transpile/vue-template-wrap.spec.mjs
+++ b/test/extract/transpile/vue-template-wrap.spec.mjs
@@ -3,7 +3,7 @@ import { readFileSync } from "node:fs";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
 import normalizeNewline from "normalize-newline";
-import wrap from "../../../src/extract/transpile/vue-template-wrap.cjs";
+import wrap from "#extract/transpile/vue-template-wrap.cjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 
diff --git a/test/extract/transpile/vue3-template-wrap.spec.mjs b/test/extract/transpile/vue3-template-wrap.spec.mjs
index 7602cb22..d616c18c 100644
--- a/test/extract/transpile/vue3-template-wrap.spec.mjs
+++ b/test/extract/transpile/vue3-template-wrap.spec.mjs
@@ -13,17 +13,14 @@ const proxyquire = require("proxyquire").noPreserveCache();
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 
 // instead of requiring the module under test, proxyquire it
-const wrap = proxyquire.load(
-  "../../../src/extract/transpile/vue-template-wrap.cjs",
-  {
-    // Force the tryRequire on "vue-template-compiler" to fail
-    // so that we ensure we are using Vue 3 for this test
-    "semver-try-require": (pModuleName) =>
-      pModuleName === "vue-template-compiler"
-        ? false
-        : require("@vue/compiler-sfc"),
-  },
-);
+const wrap = proxyquire.load("#extract/transpile/vue-template-wrap.cjs", {
+  // Force the tryRequire on "vue-template-compiler" to fail
+  // so that we ensure we are using Vue 3 for this test
+  "semver-try-require": (pModuleName) =>
+    pModuleName === "vue-template-compiler"
+      ? false
+      : require("@vue/compiler-sfc"),
+});
 
 describe("[I] vue transpiler", () => {
   it("extracts the script content from a vue SFC", () => {
diff --git a/test/graph-utl/__fixtures__/focus/dependency-cruiser-focus-on-main-depth-2.mjs b/test/graph-utl/__fixtures__/focus/dependency-cruiser-focus-on-main-depth-2.mjs
index 04ded471..bbf2c2f5 100644
--- a/test/graph-utl/__fixtures__/focus/dependency-cruiser-focus-on-main-depth-2.mjs
+++ b/test/graph-utl/__fixtures__/focus/dependency-cruiser-focus-on-main-depth-2.mjs
@@ -310,7 +310,7 @@ export default [
     source: "src/enrich/enrich-modules.js",
     dependencies: [
       {
-        module: "../../src/graph-utl/add-focus",
+        module: "#graph-utl/add-focus",
         moduleSystem: "cjs",
         dynamic: false,
         exoticallyRequired: false,
diff --git a/test/graph-utl/__fixtures__/focus/dependency-cruiser-only-src.mjs b/test/graph-utl/__fixtures__/focus/dependency-cruiser-only-src.mjs
index 94fc9ed6..5b2e841b 100644
--- a/test/graph-utl/__fixtures__/focus/dependency-cruiser-only-src.mjs
+++ b/test/graph-utl/__fixtures__/focus/dependency-cruiser-only-src.mjs
@@ -832,7 +832,7 @@ export default [
     source: "src/enrich/enrich-modules.js",
     dependencies: [
       {
-        module: "../../src/graph-utl/add-focus",
+        module: "#graph-utl/add-focus",
         moduleSystem: "cjs",
         dynamic: false,
         exoticallyRequired: false,
diff --git a/test/graph-utl/add-focus.spec.mjs b/test/graph-utl/add-focus.spec.mjs
index 9d42a231..82f10db2 100644
--- a/test/graph-utl/add-focus.spec.mjs
+++ b/test/graph-utl/add-focus.spec.mjs
@@ -1,9 +1,9 @@
 /* eslint-disable unicorn/no-useless-undefined */
 import { deepEqual } from "node:assert/strict";
-import addFocus from "../../src/graph-utl/add-focus.mjs";
 import $input from "./__fixtures__/focus/dependency-cruiser-only-src.mjs";
 import focusOnMainDepthOne from "./__fixtures__/focus/dependency-cruiser-focus-on-main.mjs";
 import focusOnMainDepthTwo from "./__fixtures__/focus/dependency-cruiser-focus-on-main-depth-2.mjs";
+import addFocus from "#graph-utl/add-focus.mjs";
 
 describe("[U] graph-utl/add-focus", () => {
   it("returns the input modules when there's no pattern", () => {
diff --git a/test/graph-utl/compare.rules.spec.mjs b/test/graph-utl/compare.rules.spec.mjs
index 74bcaa5c..637167a7 100644
--- a/test/graph-utl/compare.rules.spec.mjs
+++ b/test/graph-utl/compare.rules.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { rules } from "../../src/graph-utl/compare.mjs";
+import { rules } from "#graph-utl/compare.mjs";
 
 describe("[U] graph-utl/compare - rules", () => {
   it("samesies yield 0", () => {
diff --git a/test/graph-utl/compare.severities.spec.mjs b/test/graph-utl/compare.severities.spec.mjs
index 24ff6be4..df80e2cf 100644
--- a/test/graph-utl/compare.severities.spec.mjs
+++ b/test/graph-utl/compare.severities.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { severities } from "../../src/graph-utl/compare.mjs";
+import { severities } from "#graph-utl/compare.mjs";
 
 describe("[U] graph-utl/compare - severities", () => {
   it("returns 0 for identical severities", () => {
diff --git a/test/graph-utl/compare.violations.spec.mjs b/test/graph-utl/compare.violations.spec.mjs
index fd327fb3..b735cf75 100644
--- a/test/graph-utl/compare.violations.spec.mjs
+++ b/test/graph-utl/compare.violations.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { violations } from "../../src/graph-utl/compare.mjs";
+import { violations } from "#graph-utl/compare.mjs";
 
 describe("[U] graph-utl/compare - violations", () => {
   const lViolation = {
diff --git a/test/graph-utl/consolidate-to-folder.spec.mjs b/test/graph-utl/consolidate-to-folder.spec.mjs
index c68d65ec..1424b0a7 100644
--- a/test/graph-utl/consolidate-to-folder.spec.mjs
+++ b/test/graph-utl/consolidate-to-folder.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import consolidateToFolder from "../../src/graph-utl/consolidate-to-folder.mjs";
+import consolidateToFolder from "#graph-utl/consolidate-to-folder.mjs";
 
 describe("[U] graph-utl/consolidateToFolder", () => {
   it("source gets squashed to its folder", () => {
diff --git a/test/graph-utl/consolidate-to-pattern.spec.mjs b/test/graph-utl/consolidate-to-pattern.spec.mjs
index 8f5f83c0..75bf04b0 100644
--- a/test/graph-utl/consolidate-to-pattern.spec.mjs
+++ b/test/graph-utl/consolidate-to-pattern.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import consolidateToPattern from "../../src/graph-utl/consolidate-to-pattern.mjs";
+import consolidateToPattern from "#graph-utl/consolidate-to-pattern.mjs";
 
 describe("[U] graph-utl/consolidateToPattern", () => {
   it("no pattern => no squashing", () => {
diff --git a/test/graph-utl/filter-bank.spec.mjs b/test/graph-utl/filter-bank.spec.mjs
index 954a5371..3bd80216 100644
--- a/test/graph-utl/filter-bank.spec.mjs
+++ b/test/graph-utl/filter-bank.spec.mjs
@@ -1,9 +1,9 @@
 import { deepEqual } from "node:assert/strict";
-import { applyFilters } from "../../src/graph-utl/filter-bank.mjs";
 import reportModules from "./__mocks__/report-modules.mjs";
 import reportIndexModule from "./__fixtures__/reaches/report-index-module.mjs";
 import multiModuleRegexResult from "./__fixtures__/reaches/multi-module-regex-result.mjs";
 import highlightResult from "./__fixtures__/highlight/highlight-result.mjs";
+import { applyFilters } from "#graph-utl/filter-bank.mjs";
 
 const MODULES = [
   {
diff --git a/test/graph-utl/indexed-module-graph.spec.mjs b/test/graph-utl/indexed-module-graph.spec.mjs
index ce58ae45..f5d0fcab 100644
--- a/test/graph-utl/indexed-module-graph.spec.mjs
+++ b/test/graph-utl/indexed-module-graph.spec.mjs
@@ -1,9 +1,9 @@
 /* eslint-disable no-magic-numbers, no-undefined */
 import { deepEqual, equal } from "node:assert/strict";
-import IndexedModuleGraph from "../../src/graph-utl/indexed-module-graph.mjs";
 import unIndexedModules from "./__mocks__/un-indexed-modules.mjs";
 import unIndexedModulesWithoutDependents from "./__mocks__/un-indexed-modules-without-dependents.mjs";
 import cycleInputGraphs from "./__mocks__/cycle-input-graphs.mjs";
+import IndexedModuleGraph from "#graph-utl/indexed-module-graph.mjs";
 
 describe("[U] graph-utl/indexed-module-graph - findModuleByName", () => {
   it("searching any module in an empty graph yields undefined", () => {
diff --git a/test/graph-utl/rule-set.spec.mjs b/test/graph-utl/rule-set.spec.mjs
index 655ea8f3..d8a0e65e 100644
--- a/test/graph-utl/rule-set.spec.mjs
+++ b/test/graph-utl/rule-set.spec.mjs
@@ -4,7 +4,7 @@ import {
   findRuleByName,
   ruleSetHasLicenseRule,
   ruleSetHasDeprecationRule,
-} from "../../src/graph-utl/rule-set.mjs";
+} from "#graph-utl/rule-set.mjs";
 
 describe("[U] graph-utl/rule-set - findRuleByName", () => {
   const lRuleSet = {
diff --git a/test/main/files-and-dirs/normalize.spec.mjs b/test/main/files-and-dirs/normalize.spec.mjs
index fa880627..9ad8f6dd 100644
--- a/test/main/files-and-dirs/normalize.spec.mjs
+++ b/test/main/files-and-dirs/normalize.spec.mjs
@@ -1,7 +1,7 @@
 import { deepEqual } from "node:assert/strict";
 import { win32, posix } from "node:path";
 import { fileURLToPath } from "node:url";
-import normalizeFilesAndDirectories from "../../../src/main/files-and-dirs/normalize.mjs";
+import normalizeFilesAndDirectories from "#main/files-and-dirs/normalize.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 
diff --git a/test/main/helpers.spec.mjs b/test/main/helpers.spec.mjs
index d6be4dea..1dbda3f5 100644
--- a/test/main/helpers.spec.mjs
+++ b/test/main/helpers.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import { normalizeREProperties } from "../../src/main/helpers.mjs";
+import { normalizeREProperties } from "#main/helpers.mjs";
 
 const POTENTIAL_ARRAY_PROPERTIES = ["aap", "noot", "mies", "wim"];
 const ARRAYED_OBJECT = {
diff --git a/test/main/main.cruise-reporterless.spec.mjs b/test/main/main.cruise-reporterless.spec.mjs
index 7f765c27..fbfd9375 100644
--- a/test/main/main.cruise-reporterless.spec.mjs
+++ b/test/main/main.cruise-reporterless.spec.mjs
@@ -1,8 +1,8 @@
 import { deepEqual } from "node:assert/strict";
 import Ajv from "ajv";
-import cruise from "../../src/main/cruise.mjs";
-import cruiseResultSchema from "../../src/schema/cruise-result.schema.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
+import cruise from "#main/cruise.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 
diff --git a/test/main/main.cruise.cache.spec.mjs b/test/main/main.cruise.cache.spec.mjs
index a77c7b66..c6a8c7bc 100644
--- a/test/main/main.cruise.cache.spec.mjs
+++ b/test/main/main.cruise.cache.spec.mjs
@@ -1,9 +1,9 @@
 import { deepEqual, notDeepStrictEqual } from "node:assert/strict";
 import { rmSync } from "node:fs";
 import Ajv from "ajv";
-import cruiseResultSchema from "../../src/schema/cruise-result.schema.mjs";
-import cruise from "../../src/main/cruise.mjs";
-import Cache from "../../src/cache/cache.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
+import Cache from "#cache/cache.mjs";
+import cruise from "#main/cruise.mjs";
 
 const ajv = new Ajv();
 
diff --git a/test/main/main.cruise.dynamic-imports.spec.mjs b/test/main/main.cruise.dynamic-imports.spec.mjs
index 9d8ed528..5b968c02 100644
--- a/test/main/main.cruise.dynamic-imports.spec.mjs
+++ b/test/main/main.cruise.dynamic-imports.spec.mjs
@@ -1,9 +1,9 @@
 import { deepEqual } from "node:assert/strict";
 import Ajv from "ajv";
-import cruiseResultSchema from "../../src/schema/cruise-result.schema.mjs";
-import cruise from "../../src/main/cruise.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
 import normBaseDirectory from "./norm-base-directory.utl.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
+import cruise from "#main/cruise.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 
diff --git a/test/main/main.cruise.reachable-integration.spec.mjs b/test/main/main.cruise.reachable-integration.spec.mjs
index 4951a80a..92ac0723 100644
--- a/test/main/main.cruise.reachable-integration.spec.mjs
+++ b/test/main/main.cruise.reachable-integration.spec.mjs
@@ -1,9 +1,9 @@
 import { deepEqual } from "node:assert/strict";
 import { join } from "node:path";
 import Ajv from "ajv";
-import cruise from "../../src/main/cruise.mjs";
-import normalizeOptions from "../../src/cli/normalize-cli-options.mjs";
-import cruiseResultSchema from "../../src/schema/cruise-result.schema.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
+import normalizeOptions from "#cli/normalize-cli-options.mjs";
+import cruise from "#main/cruise.mjs";
 
 const ajv = new Ajv();
 
diff --git a/test/main/main.cruise.spec.mjs b/test/main/main.cruise.spec.mjs
index 6c516dbb..c10098ca 100644
--- a/test/main/main.cruise.spec.mjs
+++ b/test/main/main.cruise.spec.mjs
@@ -3,11 +3,11 @@ import { posix as path } from "node:path";
 import { readFileSync } from "node:fs";
 import { fileURLToPath } from "node:url";
 import Ajv from "ajv";
-import pathToPosix from "../../src/utl/path-to-posix.mjs";
-import cruiseResultSchema from "../../src/schema/cruise-result.schema.mjs";
-import cruise from "../../src/main/cruise.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
 import normBaseDirectory from "./norm-base-directory.utl.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
+import cruise from "#main/cruise.mjs";
+import pathToPosix from "#utl/path-to-posix.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 const requireJSON = createRequireJSON(import.meta.url);
diff --git a/test/main/main.cruise.ts-pre-compilation-deps.spec.mjs b/test/main/main.cruise.ts-pre-compilation-deps.spec.mjs
index 4a9b0956..cacc23ff 100644
--- a/test/main/main.cruise.ts-pre-compilation-deps.spec.mjs
+++ b/test/main/main.cruise.ts-pre-compilation-deps.spec.mjs
@@ -1,9 +1,9 @@
 import { deepEqual } from "node:assert/strict";
 import Ajv from "ajv";
-import cruiseResultSchema from "../../src/schema/cruise-result.schema.mjs";
-import cruise from "../../src/main/cruise.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
 import normBaseDirectory from "./norm-base-directory.utl.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
+import cruise from "#main/cruise.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 
diff --git a/test/main/main.cruise.type-only-imports.spec.mjs b/test/main/main.cruise.type-only-imports.spec.mjs
index 958113bd..56d9e5d8 100644
--- a/test/main/main.cruise.type-only-imports.spec.mjs
+++ b/test/main/main.cruise.type-only-imports.spec.mjs
@@ -1,9 +1,9 @@
 import { deepEqual } from "node:assert/strict";
 import Ajv from "ajv";
-import cruise from "../../src/main/cruise.mjs";
-import cruiseResultSchema from "../../src/schema/cruise-result.schema.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
 import normBaseDirectory from "./norm-base-directory.utl.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
+import cruise from "#main/cruise.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 
diff --git a/test/main/main.cruise.type-only-module-references.spec.mjs b/test/main/main.cruise.type-only-module-references.spec.mjs
index c067adbc..abf9fc36 100644
--- a/test/main/main.cruise.type-only-module-references.spec.mjs
+++ b/test/main/main.cruise.type-only-module-references.spec.mjs
@@ -1,9 +1,9 @@
 import { deepEqual } from "node:assert/strict";
 import Ajv from "ajv";
-import cruise from "../../src/main/cruise.mjs";
-import cruiseResultSchema from "../../src/schema/cruise-result.schema.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
 import normBaseDirectory from "./norm-base-directory.utl.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
+import cruise from "#main/cruise.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 
diff --git a/test/main/main.format.spec.mjs b/test/main/main.format.spec.mjs
index 4ea2ef7e..674cd711 100644
--- a/test/main/main.format.spec.mjs
+++ b/test/main/main.format.spec.mjs
@@ -1,7 +1,7 @@
 /* eslint-disable no-magic-numbers */
 import { deepEqual, ok, equal } from "node:assert/strict";
-import format from "../../src/main/format.mjs";
 import { createRequireJSON } from "../backwards.utl.mjs";
+import format from "#main/format.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 const cruiseResult = requireJSON(
diff --git a/test/main/options/assert-validity.spec.mjs b/test/main/options/assert-validity.spec.mjs
index 404d4ea8..157fabf9 100644
--- a/test/main/options/assert-validity.spec.mjs
+++ b/test/main/options/assert-validity.spec.mjs
@@ -1,5 +1,5 @@
 import { doesNotThrow, equal, throws } from "node:assert/strict";
-import { assertCruiseOptionsValid } from "../../../src/main/options/assert-validity.mjs";
+import { assertCruiseOptionsValid } from "#main/options/assert-validity.mjs";
 
 describe("[U] main/options/validate - module systems", () => {
   it("throws when a invalid module system is passed ", () => {
diff --git a/test/main/options/normalize.cruise-options.spec.mjs b/test/main/options/normalize.cruise-options.spec.mjs
index 443ebf83..0fb34298 100644
--- a/test/main/options/normalize.cruise-options.spec.mjs
+++ b/test/main/options/normalize.cruise-options.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual, ok, equal } from "node:assert/strict";
-import { normalizeCruiseOptions } from "../../../src/main/options/normalize.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
 
 describe("[U] main/options/normalize - cruise options", () => {
   it("ensures maxDepth is an int when passed an int", () => {
diff --git a/test/main/options/normalize.format-options.spec.mjs b/test/main/options/normalize.format-options.spec.mjs
index cba799ed..d59d9117 100644
--- a/test/main/options/normalize.format-options.spec.mjs
+++ b/test/main/options/normalize.format-options.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import { normalizeFormatOptions } from "../../../src/main/options/normalize.mjs";
+import { normalizeFormatOptions } from "#main/options/normalize.mjs";
 
 describe("[U] main/options/normalize - format options", () => {
   it("makes focus strings into an object", () => {
diff --git a/test/main/resolve-options/normalize.spec.mjs b/test/main/resolve-options/normalize.spec.mjs
index 1db0fec5..2621eb3b 100644
--- a/test/main/resolve-options/normalize.spec.mjs
+++ b/test/main/resolve-options/normalize.spec.mjs
@@ -1,8 +1,8 @@
 import { ok, equal, deepEqual } from "node:assert/strict";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
-import { normalizeCruiseOptions } from "../../../src/main/options/normalize.mjs";
-import normalizeResolveOptions from "../../../src/main/resolve-options/normalize.mjs";
+import { normalizeCruiseOptions } from "#main/options/normalize.mjs";
+import normalizeResolveOptions from "#main/resolve-options/normalize.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 
diff --git a/test/main/rule-set/assert-validity.spec.mjs b/test/main/rule-set/assert-validity.spec.mjs
index ac24919c..cf73fd4a 100644
--- a/test/main/rule-set/assert-validity.spec.mjs
+++ b/test/main/rule-set/assert-validity.spec.mjs
@@ -1,6 +1,6 @@
 import { readFileSync } from "node:fs";
 import { deepEqual, throws } from "node:assert/strict";
-import assertRuleSetValid from "../../../src/main/rule-set/assert-validity.mjs";
+import assertRuleSetValid from "#main/rule-set/assert-validity.mjs";
 
 function shouldBarfWithMessage(pRulesFile, pMessage) {
   throws(
diff --git a/test/main/rule-set/normalize.spec.mjs b/test/main/rule-set/normalize.spec.mjs
index 8b15c57a..d70c175e 100644
--- a/test/main/rule-set/normalize.spec.mjs
+++ b/test/main/rule-set/normalize.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import normalize from "../../../src/main/rule-set/normalize.mjs";
+import normalize from "#main/rule-set/normalize.mjs";
 
 describe("[U] main/rule-set/normalize", () => {
   it("leaves the empty ruleset alone", () => {
diff --git a/test/report/anon/anonymize-path-element.spec.mjs b/test/report/anon/anonymize-path-element.spec.mjs
index 1323e4df..5f770c6e 100644
--- a/test/report/anon/anonymize-path-element.spec.mjs
+++ b/test/report/anon/anonymize-path-element.spec.mjs
@@ -1,5 +1,5 @@
 import { match, notDeepStrictEqual, equal } from "node:assert/strict";
-import { anonymizePathElement } from "../../../src/report/anon/anonymize-path-element.mjs";
+import { anonymizePathElement } from "#report/anon/anonymize-path-element.mjs";
 
 describe("[U] report/anon/anonymizePathElement - uncached", () => {
   it("'' => ''", () => {
diff --git a/test/report/anon/anonymize-path.spec.mjs b/test/report/anon/anonymize-path.spec.mjs
index 6b03862c..59e743ff 100644
--- a/test/report/anon/anonymize-path.spec.mjs
+++ b/test/report/anon/anonymize-path.spec.mjs
@@ -1,6 +1,6 @@
 import { equal } from "node:assert/strict";
-import { anonymizePath } from "../../../src/report/anon/anonymize-path.mjs";
-import { clearCache } from "../../../src/report/anon/anonymize-path-element.mjs";
+import { anonymizePath } from "#report/anon/anonymize-path.mjs";
+import { clearCache } from "#report/anon/anonymize-path-element.mjs";
 
 describe("[U] report/anon/anonymizePath", () => {
   beforeEach(() => {
diff --git a/test/report/anon/anonymize.spec.mjs b/test/report/anon/anonymize.spec.mjs
index dd806c7c..23c9de46 100644
--- a/test/report/anon/anonymize.spec.mjs
+++ b/test/report/anon/anonymize.spec.mjs
@@ -1,8 +1,5 @@
 import { equal, deepEqual } from "node:assert/strict";
 import Ajv from "ajv";
-import cruiseResultSchema from "../../../src/schema/cruise-result.schema.mjs";
-import { clearCache } from "../../../src/report/anon/anonymize-path-element.mjs";
-import anonymize from "../../../src/report/anon/index.mjs";
 import sourceReport from "./__mocks__/src-report.mjs";
 import fixtureReport from "./__fixtures__/src-report.mjs";
 import sourceReportWithWordlist from "./__mocks__/src-report-wordlist.mjs";
@@ -17,6 +14,9 @@ import sourceFolders from "./__mocks__/folders.mjs";
 import fixtureFolders from "./__fixtures__/folders.mjs";
 import sourceFolderCycles from "./__mocks__/folder-cycles.mjs";
 import fixtureFolderCycles from "./__fixtures__/folder-cycles.mjs";
+import cruiseResultSchema from "#cruise-result-schema";
+import anonymize from "#report/anon/index.mjs";
+import { clearCache } from "#report/anon/anonymize-path-element.mjs";
 
 const ajv = new Ajv();
 
diff --git a/test/report/anon/random-string.spec.mjs b/test/report/anon/random-string.spec.mjs
index e3427823..11dbdf77 100644
--- a/test/report/anon/random-string.spec.mjs
+++ b/test/report/anon/random-string.spec.mjs
@@ -1,5 +1,5 @@
 import { match, equal } from "node:assert/strict";
-import randomString from "../../../src/report/anon/random-string.mjs";
+import randomString from "#report/anon/random-string.mjs";
 
 describe("[U] report/anon/random-string", () => {
   it("returns the empty string when passed the empty string", () => {
diff --git a/test/report/azure-devops/__mocks__/errors-and-known-violations.mjs b/test/report/azure-devops/__mocks__/errors-and-known-violations.mjs
index 486bc6da..651fe411 100644
--- a/test/report/azure-devops/__mocks__/errors-and-known-violations.mjs
+++ b/test/report/azure-devops/__mocks__/errors-and-known-violations.mjs
@@ -1538,7 +1538,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/add-focus",
+          module: "#graph-utl/add-focus",
           moduleSystem: "cjs",
           exoticallyRequired: false,
           resolved: "src/graph-utl/add-focus.js",
@@ -18183,7 +18183,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/add-focus.js",
+          module: "#graph-utl/add-focus.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/add-focus.js",
@@ -18220,7 +18220,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/compare.js",
+          module: "#graph-utl/compare.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/compare.js",
@@ -18257,7 +18257,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/compare.js",
+          module: "#graph-utl/compare.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/compare.js",
@@ -18294,7 +18294,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/compare.js",
+          module: "#graph-utl/compare.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/compare.js",
@@ -18331,7 +18331,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/consolidate-to-folder.js",
+          module: "#graph-utl/consolidate-to-folder.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/consolidate-to-folder.js",
@@ -18368,7 +18368,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/consolidate-to-pattern.js",
+          module: "#graph-utl/consolidate-to-pattern.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/consolidate-to-pattern.js",
@@ -18405,7 +18405,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/filterbank.js",
+          module: "#graph-utl/filterbank.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/filterbank.js",
@@ -18442,7 +18442,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/rule-set.js",
+          module: "#graph-utl/rule-set.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/rule-set.js",
diff --git a/test/report/azure-devops/__mocks__/known-violations.mjs b/test/report/azure-devops/__mocks__/known-violations.mjs
index a3478f15..a63671bf 100644
--- a/test/report/azure-devops/__mocks__/known-violations.mjs
+++ b/test/report/azure-devops/__mocks__/known-violations.mjs
@@ -1538,7 +1538,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/add-focus",
+          module: "#graph-utl/add-focus",
           moduleSystem: "cjs",
           exoticallyRequired: false,
           resolved: "src/graph-utl/add-focus.js",
@@ -18183,7 +18183,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/add-focus.js",
+          module: "#graph-utl/add-focus.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/add-focus.js",
@@ -18220,7 +18220,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/compare.js",
+          module: "#graph-utl/compare.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/compare.js",
@@ -18257,7 +18257,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/compare.js",
+          module: "#graph-utl/compare.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/compare.js",
@@ -18294,7 +18294,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/compare.js",
+          module: "#graph-utl/compare.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/compare.js",
@@ -18331,7 +18331,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/consolidate-to-folder.js",
+          module: "#graph-utl/consolidate-to-folder.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/consolidate-to-folder.js",
@@ -18368,7 +18368,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/consolidate-to-pattern.js",
+          module: "#graph-utl/consolidate-to-pattern.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/consolidate-to-pattern.js",
@@ -18405,7 +18405,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/filterbank.js",
+          module: "#graph-utl/filterbank.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/filterbank.js",
@@ -18442,7 +18442,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/rule-set.js",
+          module: "#graph-utl/rule-set.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/rule-set.js",
diff --git a/test/report/azure-devops/azure-devops.spec.mjs b/test/report/azure-devops/azure-devops.spec.mjs
index c0fbef89..dcdfb82a 100644
--- a/test/report/azure-devops/azure-devops.spec.mjs
+++ b/test/report/azure-devops/azure-devops.spec.mjs
@@ -2,7 +2,6 @@ import { equal } from "node:assert/strict";
 import { readFileSync } from "node:fs";
 import { fileURLToPath } from "node:url";
 import normalizeNewline from "normalize-newline";
-import render from "../../../src/report/azure-devops.mjs";
 import okdeps from "./__mocks__/everything-fine.mjs";
 import warndeps from "./__mocks__/there-are-warnings.mjs";
 import errdeps from "./__mocks__/there-are-errors.mjs";
@@ -14,6 +13,7 @@ import unsupportedErrorLevels from "./__mocks__/unsupported-severity.mjs";
 import knownViolations from "./__mocks__/known-violations.mjs";
 import errorsAndKnownViolations from "./__mocks__/errors-and-known-violations.mjs";
 import instabilities from "./__mocks__/instabilities.mjs";
+import render from "#report/azure-devops.mjs";
 
 function readFixture(pRelativePath) {
   return readFileSync(
diff --git a/test/report/baseline/baseline.spec.mjs b/test/report/baseline/baseline.spec.mjs
index dbc89ec4..d573b21d 100644
--- a/test/report/baseline/baseline.spec.mjs
+++ b/test/report/baseline/baseline.spec.mjs
@@ -1,8 +1,8 @@
 import { deepEqual, equal } from "node:assert/strict";
 import Ajv from "ajv";
-import baseline from "../../../src/report/baseline.mjs";
 import { createRequireJSON } from "../../backwards.utl.mjs";
 import baselineSchema from "../../../src/schema/baseline-violations.schema.mjs";
+import baseline from "#report/baseline.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 const ajv = new Ajv();
diff --git a/test/report/csv/csv.spec.mjs b/test/report/csv/csv.spec.mjs
index 6e2f3dc8..35a24b54 100644
--- a/test/report/csv/csv.spec.mjs
+++ b/test/report/csv/csv.spec.mjs
@@ -2,8 +2,8 @@ import { readFileSync } from "node:fs";
 import { fileURLToPath } from "node:url";
 import { deepEqual, equal } from "node:assert/strict";
 import normalizeNewline from "normalize-newline";
-import render from "../../../src/report/csv.mjs";
 import deps from "./__mocks__/cjs-no-dependency-valid.mjs";
+import render from "#report/csv.mjs";
 
 const elementFixture = normalizeNewline(
   readFileSync(
diff --git a/test/report/dot/custom-level/index.spec.mjs b/test/report/dot/custom-level/index.spec.mjs
index 815c48af..dae2b785 100644
--- a/test/report/dot/custom-level/index.spec.mjs
+++ b/test/report/dot/custom-level/index.spec.mjs
@@ -3,7 +3,7 @@ import { readFileSync } from "node:fs";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
 import { createRequireJSON } from "../../../backwards.utl.mjs";
-import dot from "../../../../src/report/dot/index.mjs";
+import dot from "#report/dot/index.mjs";
 
 const render = dot("custom");
 const requireJSON = createRequireJSON(import.meta.url);
diff --git a/test/report/dot/flat-level/index.spec.mjs b/test/report/dot/flat-level/index.spec.mjs
index 465c86e0..ff9b0406 100644
--- a/test/report/dot/flat-level/index.spec.mjs
+++ b/test/report/dot/flat-level/index.spec.mjs
@@ -2,8 +2,8 @@ import { deepEqual, equal } from "node:assert/strict";
 import { readFileSync } from "node:fs";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
-import dot from "../../../../src/report/dot/index.mjs";
 import { createRequireJSON } from "../../../backwards.utl.mjs";
+import dot from "#report/dot/index.mjs";
 
 const render = dot("flat");
 const requireJSON = createRequireJSON(import.meta.url);
diff --git a/test/report/dot/folder-level/folder-level.spec.mjs b/test/report/dot/folder-level/folder-level.spec.mjs
index 6ae243fa..96a4bad7 100644
--- a/test/report/dot/folder-level/folder-level.spec.mjs
+++ b/test/report/dot/folder-level/folder-level.spec.mjs
@@ -3,7 +3,7 @@ import { readFileSync } from "node:fs";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
 import { createRequireJSON } from "../../../backwards.utl.mjs";
-import dot from "../../../../src/report/dot/index.mjs";
+import dot from "#report/dot/index.mjs";
 
 const render = dot("folder");
 const requireJSON = createRequireJSON(import.meta.url);
diff --git a/test/report/dot/module-level/index.spec.mjs b/test/report/dot/module-level/index.spec.mjs
index a940e64d..54543172 100644
--- a/test/report/dot/module-level/index.spec.mjs
+++ b/test/report/dot/module-level/index.spec.mjs
@@ -2,9 +2,9 @@ import { equal } from "node:assert/strict";
 import { readFileSync } from "node:fs";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
-import defaultTheme from "../../../../src/report/dot/default-theme.mjs";
-import dot from "../../../../src/report/dot/index.mjs";
 import { createRequireJSON } from "../../../backwards.utl.mjs";
+import defaultTheme from "#report/dot/default-theme.mjs";
+import dot from "#report/dot/index.mjs";
 
 const defaultRender = dot();
 const render = dot("module");
diff --git a/test/report/dot/module-utl.spec.mjs b/test/report/dot/module-utl.spec.mjs
index 7e2bcaae..1c13461e 100644
--- a/test/report/dot/module-utl.spec.mjs
+++ b/test/report/dot/module-utl.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import moduleUtl from "../../../src/report/dot/module-utl.mjs";
+import moduleUtl from "#report/dot/module-utl.mjs";
 
 describe("[U] report/dot/module-utl", () => {
   it("extractFirstTransgression - keeps as is when there's no transgressions", () => {
diff --git a/test/report/dot/theming.spec.mjs b/test/report/dot/theming.spec.mjs
index b4bfcd75..5ade807f 100644
--- a/test/report/dot/theming.spec.mjs
+++ b/test/report/dot/theming.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
 import _cloneDeep from "lodash/cloneDeep.js";
-import theming from "../../../src/report/dot/theming.mjs";
+import theming from "#report/dot/theming.mjs";
 
 describe("[U] report/dot/theming - determineModuleColors - default theme", () => {
   it("empty module => no colors", () => {
diff --git a/test/report/error-html/error-html.spec.mjs b/test/report/error-html/error-html.spec.mjs
index 8d603973..f455d1b2 100644
--- a/test/report/error-html/error-html.spec.mjs
+++ b/test/report/error-html/error-html.spec.mjs
@@ -1,9 +1,9 @@
 import { match, equal, doesNotMatch } from "node:assert/strict";
-import errorHTML from "../../../src/report/error-html/index.mjs";
 import everythingFineResult from "./__mocks__/everything-fine.mjs";
 import validationMoreThanOnce from "./__mocks__/violation-more-than-once.mjs";
 import validationMoreThanOnceWithAnIgnore from "./__mocks__/violation-more-than-once-with-an-ignore.mjs";
 import orphansCyclesMetrics from "./__mocks__/orphans-cycles-metrics.mjs";
+import errorHTML from "#report/error-html/index.mjs";
 
 describe("[I] report/error-html", () => {
   const lOkeliDokelyKey = "gummy bears";
diff --git a/test/report/error-html/utl.spec.mjs b/test/report/error-html/utl.spec.mjs
index b8a3e040..f6ee2b4c 100644
--- a/test/report/error-html/utl.spec.mjs
+++ b/test/report/error-html/utl.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual, equal } from "node:assert/strict";
-import utl from "../../../src/report/error-html/utl.mjs";
+import utl from "#report/error-html/utl.mjs";
 
 function summaryHasMinimalAttributes(pResult) {
   equal(pResult.hasOwnProperty("depcruiseVersion"), true);
diff --git a/test/report/error/error-long.spec.mjs b/test/report/error/error-long.spec.mjs
index ed684b04..76e169dd 100644
--- a/test/report/error/error-long.spec.mjs
+++ b/test/report/error/error-long.spec.mjs
@@ -3,12 +3,12 @@
 import { equal, match } from "node:assert/strict";
 import { EOL } from "node:os";
 import chalk from "chalk";
-import render from "../../../src/report/error-long.mjs";
 import okDeps from "./__mocks__/everything-fine.mjs";
 import deps from "./__mocks__/cjs-no-dependency-valid.mjs";
 import warnDeps from "./__mocks__/err-only-warnings.mjs";
 import errorsAdditionalInfo from "./__mocks__/err-with-additional-information.mjs";
 import orphanErrs from "./__mocks__/orphan-deps.mjs";
+import render from "#report/error-long.mjs";
 
 describe("[I] report/error-long", () => {
   let chalkLevel = chalk.level;
diff --git a/test/report/error/error.spec.mjs b/test/report/error/error.spec.mjs
index 7d168916..10e0b832 100644
--- a/test/report/error/error.spec.mjs
+++ b/test/report/error/error.spec.mjs
@@ -3,7 +3,6 @@
 import { doesNotMatch, match, equal } from "node:assert/strict";
 import { EOL } from "node:os";
 import chalk from "chalk";
-import render from "../../../src/report/error.mjs";
 import okdeps from "./__mocks__/everything-fine.mjs";
 import dependencies from "./__mocks__/cjs-no-dependency-valid.mjs";
 import onlyWarningDependencies from "./__mocks__/err-only-warnings.mjs";
@@ -15,6 +14,7 @@ import ignoredViolations from "./__mocks__/ignored-violations.mjs";
 import ignoredAndRealViolations from "./__mocks__/ignored-and-real-violations.mjs";
 import missingViolationType from "./__mocks__/missing-violation-type.mjs";
 import unknownViolationType from "./__mocks__/unknown-violation-type.mjs";
+import render from "#report/error.mjs";
 
 describe("[I] report/error", () => {
   let chalkLevel = chalk.level;
diff --git a/test/report/html/html.spec.mjs b/test/report/html/html.spec.mjs
index 6c962235..96086efa 100644
--- a/test/report/html/html.spec.mjs
+++ b/test/report/html/html.spec.mjs
@@ -1,8 +1,8 @@
 import { readFileSync } from "node:fs";
 import { fileURLToPath } from "node:url";
 import { deepEqual, equal } from "node:assert/strict";
-import render from "../../../src/report/html/index.mjs";
 import deps from "./__mocks__/cjs-no-dependency-valid.mjs";
+import render from "#report/html/index.mjs";
 
 const elementFixture = readFileSync(
   fileURLToPath(
diff --git a/test/report/markdown/markdown.spec.mjs b/test/report/markdown/markdown.spec.mjs
index b78e9527..8ea012fb 100644
--- a/test/report/markdown/markdown.spec.mjs
+++ b/test/report/markdown/markdown.spec.mjs
@@ -1,10 +1,10 @@
 /* eslint-disable prefer-regex-literals */
 import { match, doesNotMatch, equal } from "node:assert/strict";
-import markdown from "../../../src/report/markdown.mjs";
 import everythingFineResult from "./__mocks__/everything-fine.mjs";
 import validationMoreThanOnce from "./__mocks__/violation-more-than-once.mjs";
 import validationMoreThanOnceWithAnIgnore from "./__mocks__/violation-more-than-once-with-an-ignore.mjs";
 import orphansCyclesMetrics from "./__mocks__/orphans-cycles-metrics.mjs";
+import markdown from "#report/markdown.mjs";
 
 describe("[I] report/markdown", () => {
   const lOkeliDokelyKey = "gummy bears";
diff --git a/test/report/mermaid/mermaid.spec.mjs b/test/report/mermaid/mermaid.spec.mjs
index 756610b4..2d359690 100644
--- a/test/report/mermaid/mermaid.spec.mjs
+++ b/test/report/mermaid/mermaid.spec.mjs
@@ -2,11 +2,9 @@ import { readFileSync } from "node:fs";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
 import { deepEqual } from "node:assert/strict";
-// eslint-plugins import and node don't yet understand these 'self references'
-// eslint-disable-next-line import/no-unresolved, node/no-missing-import
 import mermaidReporterPlugin from "dependency-cruiser/mermaid-reporter-plugin";
-import mermaid from "../../../src/report/mermaid.mjs";
 import { createRequireJSON } from "../../backwards.utl.mjs";
+import mermaid from "#report/mermaid.mjs";
 
 const requireJSON = createRequireJSON(import.meta.url);
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
diff --git a/test/report/metrics/metrics.spec.mjs b/test/report/metrics/metrics.spec.mjs
index 993bf15f..3f68ed1d 100644
--- a/test/report/metrics/metrics.spec.mjs
+++ b/test/report/metrics/metrics.spec.mjs
@@ -2,8 +2,8 @@
 /* eslint-disable no-regex-spaces */
 import { EOL } from "node:os";
 import { doesNotMatch, match, equal } from "node:assert/strict";
-import metrics from "../../../src/report/metrics.mjs";
 import cruiseResultWithMetricsForModulesAndFolders from "./__mocks/cruise-result-with-metrics-for-modules-and-folders.mjs";
+import metrics from "#report/metrics.mjs";
 
 describe("[I] report/metrics", () => {
   it("errors when the input doesn't contain a 'folders' section", () => {
diff --git a/test/report/null/null.spec.mjs b/test/report/null/null.spec.mjs
index bc24ddea..b3868cff 100644
--- a/test/report/null/null.spec.mjs
+++ b/test/report/null/null.spec.mjs
@@ -1,5 +1,5 @@
 import { deepEqual } from "node:assert/strict";
-import nullReporter from "../../../src/report/null.mjs";
+import nullReporter from "#report/null.mjs";
 
 const gSmallOKResult = {
   modules: [
diff --git a/test/report/plugins/index.get-external-plugin-reporter.spec.mjs b/test/report/plugins/index.get-external-plugin-reporter.spec.mjs
index 8c2ccc24..082c1c08 100644
--- a/test/report/plugins/index.get-external-plugin-reporter.spec.mjs
+++ b/test/report/plugins/index.get-external-plugin-reporter.spec.mjs
@@ -1,7 +1,7 @@
 import { match, equal } from "node:assert/strict";
 import { join } from "node:path";
 import { fileURLToPath } from "node:url";
-import { getExternalPluginReporter } from "../../../src/report/plugins.mjs";
+import { getExternalPluginReporter } from "#report/plugins.mjs";
 
 const __dirname = fileURLToPath(new URL(".", import.meta.url));
 const FIXTURE_DIRECTORY = join(__dirname, "__fixtures__");
diff --git a/test/report/plugins/index.is-valid-plugin.spec.mjs b/test/report/plugins/index.is-valid-plugin.spec.mjs
index dacbcc0d..40dc5609 100644
--- a/test/report/plugins/index.is-valid-plugin.spec.mjs
+++ b/test/report/plugins/index.is-valid-plugin.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { isValidPlugin } from "../../../src/report/plugins.mjs";
+import { isValidPlugin } from "#report/plugins.mjs";
 
 describe("[U] report/plugins - isValidPlugin", () => {
   it("returns false when the plugin's function doesn't return an exit code attribute", async () => {
diff --git a/test/report/teamcity/__mocks__/known-violations.mjs b/test/report/teamcity/__mocks__/known-violations.mjs
index a3478f15..a63671bf 100644
--- a/test/report/teamcity/__mocks__/known-violations.mjs
+++ b/test/report/teamcity/__mocks__/known-violations.mjs
@@ -1538,7 +1538,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/add-focus",
+          module: "#graph-utl/add-focus",
           moduleSystem: "cjs",
           exoticallyRequired: false,
           resolved: "src/graph-utl/add-focus.js",
@@ -18183,7 +18183,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/add-focus.js",
+          module: "#graph-utl/add-focus.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/add-focus.js",
@@ -18220,7 +18220,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/compare.js",
+          module: "#graph-utl/compare.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/compare.js",
@@ -18257,7 +18257,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/compare.js",
+          module: "#graph-utl/compare.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/compare.js",
@@ -18294,7 +18294,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/compare.js",
+          module: "#graph-utl/compare.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/compare.js",
@@ -18331,7 +18331,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/consolidate-to-folder.js",
+          module: "#graph-utl/consolidate-to-folder.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/consolidate-to-folder.js",
@@ -18368,7 +18368,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/consolidate-to-pattern.js",
+          module: "#graph-utl/consolidate-to-pattern.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/consolidate-to-pattern.js",
@@ -18405,7 +18405,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/filterbank.js",
+          module: "#graph-utl/filterbank.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/filterbank.js",
@@ -18442,7 +18442,7 @@ export default {
       dependencies: [
         {
           dynamic: false,
-          module: "../../src/graph-utl/rule-set.js",
+          module: "#graph-utl/rule-set.js",
           moduleSystem: "es6",
           exoticallyRequired: false,
           resolved: "src/graph-utl/rule-set.js",
diff --git a/test/report/teamcity/teamcity.spec.mjs b/test/report/teamcity/teamcity.spec.mjs
index 4e123f59..a5404299 100644
--- a/test/report/teamcity/teamcity.spec.mjs
+++ b/test/report/teamcity/teamcity.spec.mjs
@@ -1,7 +1,6 @@
 import { equal } from "node:assert/strict";
 import { readFileSync } from "node:fs";
 import { fileURLToPath } from "node:url";
-import render from "../../../src/report/teamcity.mjs";
 import okdeps from "./__mocks__/everything-fine.mjs";
 import moduleErrs from "./__mocks__/module-errors.mjs";
 import requiredErrs from "./__mocks__/required-errors.mjs";
@@ -10,6 +9,7 @@ import vias from "./__mocks__/via-deps.mjs";
 import unsupportedErrorLevels from "./__mocks__/unsupported-severity.mjs";
 import knownViolations from "./__mocks__/known-violations.mjs";
 import instabilities from "./__mocks__/instabilities.mjs";
+import render from "#report/teamcity.mjs";
 
 function removePerSessionAttributes(pString) {
   return pString.replace(/ flowId='[^']+' timestamp='[^']+'/g, "");
diff --git a/test/report/text/text.spec.mjs b/test/report/text/text.spec.mjs
index 4665fc13..84a45a28 100644
--- a/test/report/text/text.spec.mjs
+++ b/test/report/text/text.spec.mjs
@@ -3,9 +3,9 @@ import { fileURLToPath } from "node:url";
 import { equal } from "node:assert/strict";
 import chalk from "chalk";
 import normalizeNewline from "normalize-newline";
-import renderText from "../../../src/report/text.mjs";
 import dependencies from "./__mocks__/dependencies.mjs";
 import cruiseResultWithFocus from "./__mocks__/cruise-result-with-focus.mjs";
+import renderText from "#report/text.mjs";
 
 describe("[I] report/text", () => {
   let lOldChalkLevel = 0;
diff --git a/test/report/utl/dependency-to-incidence-transformer.spec.mjs b/test/report/utl/dependency-to-incidence-transformer.spec.mjs
index 9d84aa03..d5bb3c9e 100644
--- a/test/report/utl/dependency-to-incidence-transformer.spec.mjs
+++ b/test/report/utl/dependency-to-incidence-transformer.spec.mjs
@@ -1,10 +1,10 @@
 import { deepEqual } from "node:assert/strict";
-import transform from "../../../src/report/utl/dependency-to-incidence-transformer.mjs";
 
 import oneViolation from "./__mocks__/one-violation.mjs";
 import ONE_VIOLATION_DEPS_FIXTURE from "./__mocks__/one-violation-incidences.mjs";
 import moreViolations from "./__mocks__/more-violations.mjs";
 import MORE_VIOLATIONS_DEPS_FIXTURE from "./__mocks__/more-violations-incidences.mjs";
+import transform from "#report/utl/dependency-to-incidence-transformer.mjs";
 
 const ONE_VIOLATION_DEPS_INPUT = oneViolation.modules;
 const MORE_VIOLATIONS_DEPS_INPUT = moreViolations.modules;
diff --git a/test/utl/get-extension.spec.mjs b/test/utl/get-extension.spec.mjs
index 4fbe1366..81939362 100644
--- a/test/utl/get-extension.spec.mjs
+++ b/test/utl/get-extension.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import getExtension from "../../src/utl/get-extension.mjs";
+import getExtension from "#utl/get-extension.mjs";
 
 describe("[U] utl/getExtension", () => {
   it(".coffee.md classifies as .coffee.md", () => {
diff --git a/test/utl/regex-util.spec.mjs b/test/utl/regex-util.spec.mjs
index bbe610da..60738da4 100644
--- a/test/utl/regex-util.spec.mjs
+++ b/test/utl/regex-util.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import { replaceGroupPlaceholders } from "../../src/utl/regex-util.mjs";
+import { replaceGroupPlaceholders } from "#utl/regex-util.mjs";
 
 describe("[U] utl/regex-util", () => {
   it("replaceGroupPlaceholders - leaves re alone if passed empty match result", () => {
diff --git a/test/validate/index.core.spec.mjs b/test/validate/index.core.spec.mjs
index 0eaa205b..c2af8738 100644
--- a/test/validate/index.core.spec.mjs
+++ b/test/validate/index.core.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index - core", () => {
   const lNotToCoreRuleSet = parseRuleSet({
diff --git a/test/validate/index.could-not-resolve.spec.mjs b/test/validate/index.could-not-resolve.spec.mjs
index 2195cef2..77540c07 100644
--- a/test/validate/index.could-not-resolve.spec.mjs
+++ b/test/validate/index.could-not-resolve.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index - couldNotResolve", () => {
   const lNotToUnresolvableRuleSet = parseRuleSet({
diff --git a/test/validate/index.cycle-via-not.spec.mjs b/test/validate/index.cycle-via-not.spec.mjs
index f1117ef5..f4111cae 100644
--- a/test/validate/index.cycle-via-not.spec.mjs
+++ b/test/validate/index.cycle-via-not.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index dependency - cycle viaNot", () => {
   const lCycleViaNotRuleSet = parseRuleSet({
diff --git a/test/validate/index.cycle-via-some-not.spec.mjs b/test/validate/index.cycle-via-some-not.spec.mjs
index b548b09e..a690e669 100644
--- a/test/validate/index.cycle-via-some-not.spec.mjs
+++ b/test/validate/index.cycle-via-some-not.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index dependency - cycle viaSomeNot - with group matching", () => {
   const lCycleButNotViaGroupMatchRuleSet = {
diff --git a/test/validate/index.cycle-via.spec.mjs b/test/validate/index.cycle-via.spec.mjs
index 07c0d52c..f48ec408 100644
--- a/test/validate/index.cycle-via.spec.mjs
+++ b/test/validate/index.cycle-via.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index dependency - cycle via", () => {
   const lCycleViaRuleSet = parseRuleSet({
diff --git a/test/validate/index.exotic-require.spec.mjs b/test/validate/index.exotic-require.spec.mjs
index 1a725d0c..47eb7653 100644
--- a/test/validate/index.exotic-require.spec.mjs
+++ b/test/validate/index.exotic-require.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index - exoticallyRequired", () => {
   const lExoticallyRequiredRuleSet = parseRuleSet({
diff --git a/test/validate/index.groupmatching.spec.mjs b/test/validate/index.groupmatching.spec.mjs
index c2c62ef7..c730ae47 100644
--- a/test/validate/index.groupmatching.spec.mjs
+++ b/test/validate/index.groupmatching.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index group matching - path group matched in a pathnot", () => {
   const lGroupToPathNotRuleSet = {
diff --git a/test/validate/index.license.spec.mjs b/test/validate/index.license.spec.mjs
index 3808d6e7..1be29c7b 100644
--- a/test/validate/index.license.spec.mjs
+++ b/test/validate/index.license.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index - license", () => {
   const lLicenseRuleSet = parseRuleSet({
diff --git a/test/validate/index.more-than-one-dependency-type.spec.mjs b/test/validate/index.more-than-one-dependency-type.spec.mjs
index 947f705d..bf465b55 100644
--- a/test/validate/index.more-than-one-dependency-type.spec.mjs
+++ b/test/validate/index.more-than-one-dependency-type.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] index/validate - moreThanOneDependencyType", () => {
   it(`no relations with modules of > 1 dep type (e.g. specified 2x in package.json)`, () => {
diff --git a/test/validate/index.more-unstable.spec.mjs b/test/validate/index.more-unstable.spec.mjs
index cdd61c7b..09ffa539 100644
--- a/test/validate/index.more-unstable.spec.mjs
+++ b/test/validate/index.more-unstable.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index - stability checks", () => {
   const lForbiddenRuleSet = parseRuleSet({
diff --git a/test/validate/index.orphans.spec.mjs b/test/validate/index.orphans.spec.mjs
index 875b6931..25fd4ded 100644
--- a/test/validate/index.orphans.spec.mjs
+++ b/test/validate/index.orphans.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index - orphans", () => {
   const lOrphanRuleSet = parseRuleSet({
diff --git a/test/validate/index.pre-compilation-only.spec.mjs b/test/validate/index.pre-compilation-only.spec.mjs
index cd0f3044..f9d8808a 100644
--- a/test/validate/index.pre-compilation-only.spec.mjs
+++ b/test/validate/index.pre-compilation-only.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index - preCompilationOnly", () => {
   const lPreCompilationOnlyRuleSet = parseRuleSet({
diff --git a/test/validate/index.reachable.spec.mjs b/test/validate/index.reachable.spec.mjs
index d346498e..ddb5c56f 100644
--- a/test/validate/index.reachable.spec.mjs
+++ b/test/validate/index.reachable.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index - reachable (in forbidden set)", () => {
   const lReachableFalseRuleSet = parseRuleSet({
diff --git a/test/validate/index.required-rules.spec.mjs b/test/validate/index.required-rules.spec.mjs
index 4554775b..97e70c70 100644
--- a/test/validate/index.required-rules.spec.mjs
+++ b/test/validate/index.required-rules.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index - required rules", () => {
   const lRequiredRuleSet = parseRuleSet({
diff --git a/test/validate/index.spec.mjs b/test/validate/index.spec.mjs
index 4e11cea8..de36f888 100644
--- a/test/validate/index.spec.mjs
+++ b/test/validate/index.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] validate/index dependency - generic tests", () => {
   it("is ok with the empty validation", () => {
diff --git a/test/validate/index.type-only.spec.mjs b/test/validate/index.type-only.spec.mjs
index e4259e9e..c49a5e7d 100644
--- a/test/validate/index.type-only.spec.mjs
+++ b/test/validate/index.type-only.spec.mjs
@@ -1,6 +1,6 @@
 import { deepEqual } from "node:assert/strict";
-import validate from "../../src/validate/index.mjs";
 import parseRuleSet from "./parse-ruleset.utl.mjs";
+import validate from "#validate/index.mjs";
 
 describe("[I] [I] validate/index - type-only", () => {
   const lTypeOnlyRuleSet = parseRuleSet({
diff --git a/test/validate/match-folder-dependency-rule.spec.mjs b/test/validate/match-folder-dependency-rule.spec.mjs
index c01e0986..adf67c96 100644
--- a/test/validate/match-folder-dependency-rule.spec.mjs
+++ b/test/validate/match-folder-dependency-rule.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import matchFolderRule from "../../src/validate/match-folder-dependency-rule.mjs";
+import matchFolderRule from "#validate/match-folder-dependency-rule.mjs";
 
 describe("[I] validate/match-folder-dependency-rule - match generic", () => {
   const lEmptyRule = { scope: "folder", from: {}, to: {} };
diff --git a/test/validate/match-module-rule.dependents.spec.mjs b/test/validate/match-module-rule.dependents.spec.mjs
index e130c76d..0ebfe6d2 100644
--- a/test/validate/match-module-rule.dependents.spec.mjs
+++ b/test/validate/match-module-rule.dependents.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import matchModuleRule from "../../src/validate/match-module-rule.mjs";
+import matchModuleRule from "#validate/match-module-rule.mjs";
 
 const EMPTY_RULE = { from: {}, module: {} };
 const ANY_DEPENDENTS = {
diff --git a/test/validate/match-module-rule.orphan.spec.mjs b/test/validate/match-module-rule.orphan.spec.mjs
index 6fcfdc37..b4dc1b15 100644
--- a/test/validate/match-module-rule.orphan.spec.mjs
+++ b/test/validate/match-module-rule.orphan.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import matchModuleRule from "../../src/validate/match-module-rule.mjs";
+import matchModuleRule from "#validate/match-module-rule.mjs";
 
 const EMPTY_RULE = { from: {}, to: {} };
 const ANY_ORPHAN = { from: { orphan: true }, to: {} };
diff --git a/test/validate/match-module-rule.reachable.spec.mjs b/test/validate/match-module-rule.reachable.spec.mjs
index 65c0698f..8431b2bf 100644
--- a/test/validate/match-module-rule.reachable.spec.mjs
+++ b/test/validate/match-module-rule.reachable.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import matchModuleRule from "../../src/validate/match-module-rule.mjs";
+import matchModuleRule from "#validate/match-module-rule.mjs";
 
 const EMPTY_RULE = { from: {}, to: {} };
 const ANY_UNREACHABLE = {
diff --git a/test/validate/match-module-rule.reaches.spec.mjs b/test/validate/match-module-rule.reaches.spec.mjs
index 54a9f7ed..d03bcf98 100644
--- a/test/validate/match-module-rule.reaches.spec.mjs
+++ b/test/validate/match-module-rule.reaches.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import matchModuleRule from "../../src/validate/match-module-rule.mjs";
+import matchModuleRule from "#validate/match-module-rule.mjs";
 
 const EMPTY_RULE = { from: {}, to: {} };
 const ANY_REACHABLE = {
diff --git a/test/validate/match-module-rule.spec.mjs b/test/validate/match-module-rule.spec.mjs
index 1c705da7..cf1d4a6e 100644
--- a/test/validate/match-module-rule.spec.mjs
+++ b/test/validate/match-module-rule.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import matchModuleRule from "../../src/validate/match-module-rule.mjs";
+import matchModuleRule from "#validate/match-module-rule.mjs";
 
 const EMPTY_RULE = { from: {}, to: {} };
 const ORPHAN_RULE = { from: { orphan: true }, to: {} };
diff --git a/test/validate/parse-ruleset.utl.mjs b/test/validate/parse-ruleset.utl.mjs
index c1b295f7..199fbd48 100644
--- a/test/validate/parse-ruleset.utl.mjs
+++ b/test/validate/parse-ruleset.utl.mjs
@@ -1,4 +1,4 @@
-import normalizeRuleSet from "../../src/main/rule-set/normalize.mjs";
-import assertRuleSetValid from "../../src/main/rule-set/assert-validity.mjs";
+import normalizeRuleSet from "#main/rule-set/normalize.mjs";
+import assertRuleSetValid from "#main/rule-set/assert-validity.mjs";
 
 export default (pRuleSet) => normalizeRuleSet(assertRuleSetValid(pRuleSet));
diff --git a/test/validate/violates-required-rule.spec.mjs b/test/validate/violates-required-rule.spec.mjs
index 24e00ad2..ae326b31 100644
--- a/test/validate/violates-required-rule.spec.mjs
+++ b/test/validate/violates-required-rule.spec.mjs
@@ -1,5 +1,5 @@
 import { equal } from "node:assert/strict";
-import violatesRequiredRule from "../../src/validate/violates-required-rule.mjs";
+import violatesRequiredRule from "#validate/violates-required-rule.mjs";
 
 const SIMPLE_RULE = {
   module: {