From fca3b83ccc4bb4518f49f4fe57a33989e159d9c1 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 13 Aug 2026 12:14:46 +0000 Subject: [PATCH] fix(devx): add missing @objectstack/spec/qa (and /api) alias entries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Six vitest configs alias the bare @objectstack/spec key to a FILE without a subpath entry for /qa (and, in knowledge-memory, /api) — the subpath @objectstack/core's own source reaches through its own src alias in these configs. An alias list matches by PREFIX, so the bare @objectstack/spec entry wins and yields the nonsensical spec/src/index.ts/qa (ENOTDIR at run time). This was latent rather than currently-red: every use inside @objectstack/core's qa adapters is in a TYPE position, so esbuild elides the import and the specifier never reaches the resolver — until the first value use. Adds the seven entries from #8391's table, each placed ABOVE the bare @objectstack/spec key using the same idiom the existing /shared entries in these configs use. Fixes #8391 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Jqe56GnYFddggeAyfkZFVz --- packages/drivers/driver-memory/vitest.config.ts | 1 + packages/metadata/vitest.config.ts | 1 + packages/plugins/knowledge-memory/vitest.config.ts | 2 ++ packages/plugins/plugin-dev/vitest.config.ts | 1 + packages/plugins/plugin-hono-server/vitest.config.ts | 1 + packages/runtime/vitest.config.ts | 1 + 6 files changed, 7 insertions(+) diff --git a/packages/drivers/driver-memory/vitest.config.ts b/packages/drivers/driver-memory/vitest.config.ts index 999820ae59..66544db7d3 100644 --- a/packages/drivers/driver-memory/vitest.config.ts +++ b/packages/drivers/driver-memory/vitest.config.ts @@ -27,6 +27,7 @@ export default defineConfig({ // nonsensical `spec/src/index.ts/shared` — ENOTDIR at import time for every // test file that transitively loads `@objectstack/core`. '@objectstack/spec/shared': path.resolve(__dirname, '../../spec/src/shared/index.ts'), + '@objectstack/spec/qa': path.resolve(__dirname, '../../spec/src/qa/index.ts'), '@objectstack/spec': path.resolve(__dirname, '../../spec/src/index.ts'), }, }, diff --git a/packages/metadata/vitest.config.ts b/packages/metadata/vitest.config.ts index df7bb9b54a..b3b2d04409 100644 --- a/packages/metadata/vitest.config.ts +++ b/packages/metadata/vitest.config.ts @@ -16,6 +16,7 @@ export default defineConfig({ '@objectstack/spec/shared': path.resolve(__dirname, '../spec/src/shared/index.ts'), // [ADR-0105 D1] Reached transitively via `@objectstack/types` (tenancy posture). '@objectstack/spec/security': path.resolve(__dirname, '../spec/src/security/index.ts'), + '@objectstack/spec/qa': path.resolve(__dirname, '../spec/src/qa/index.ts'), '@objectstack/spec': path.resolve(__dirname, '../spec/src/index.ts'), '@objectstack/types': path.resolve(__dirname, '../types/src/index.ts'), }, diff --git a/packages/plugins/knowledge-memory/vitest.config.ts b/packages/plugins/knowledge-memory/vitest.config.ts index 880f8ca91f..568c18d87c 100644 --- a/packages/plugins/knowledge-memory/vitest.config.ts +++ b/packages/plugins/knowledge-memory/vitest.config.ts @@ -13,6 +13,7 @@ export default defineConfig({ '@objectstack/core': path.resolve(__dirname, '../../core/src/index.ts'), '@objectstack/service-knowledge': path.resolve(__dirname, '../../services/service-knowledge/src/index.ts'), '@objectstack/spec/ai': path.resolve(__dirname, '../../spec/src/ai/index.ts'), + '@objectstack/spec/api': path.resolve(__dirname, '../../spec/src/api/index.ts'), '@objectstack/spec/contracts': path.resolve(__dirname, '../../spec/src/contracts/index.ts'), '@objectstack/spec/data': path.resolve(__dirname, '../../spec/src/data/index.ts'), '@objectstack/spec/kernel': path.resolve(__dirname, '../../spec/src/kernel/index.ts'), @@ -26,6 +27,7 @@ export default defineConfig({ // nonsensical `spec/src/index.ts/shared` — ENOTDIR at import time for every // test file that transitively loads `@objectstack/core`. '@objectstack/spec/shared': path.resolve(__dirname, '../../spec/src/shared/index.ts'), + '@objectstack/spec/qa': path.resolve(__dirname, '../../spec/src/qa/index.ts'), '@objectstack/spec': path.resolve(__dirname, '../../spec/src/index.ts'), }, }, diff --git a/packages/plugins/plugin-dev/vitest.config.ts b/packages/plugins/plugin-dev/vitest.config.ts index b389d11c7b..7d959caedc 100644 --- a/packages/plugins/plugin-dev/vitest.config.ts +++ b/packages/plugins/plugin-dev/vitest.config.ts @@ -31,6 +31,7 @@ export default defineConfig({ // nonsensical `spec/src/index.ts/shared` — ENOTDIR at import time for every // test file that transitively loads `@objectstack/core`. '@objectstack/spec/shared': path.resolve(__dirname, '../../spec/src/shared/index.ts'), + '@objectstack/spec/qa': path.resolve(__dirname, '../../spec/src/qa/index.ts'), '@objectstack/spec': path.resolve(__dirname, '../../spec/src/index.ts'), }, }, diff --git a/packages/plugins/plugin-hono-server/vitest.config.ts b/packages/plugins/plugin-hono-server/vitest.config.ts index 426987a2f6..181246b8a7 100644 --- a/packages/plugins/plugin-hono-server/vitest.config.ts +++ b/packages/plugins/plugin-hono-server/vitest.config.ts @@ -29,6 +29,7 @@ export default defineConfig({ // nonsensical `spec/src/index.ts/shared` — ENOTDIR at import time for every // test file that transitively loads `@objectstack/core`. '@objectstack/spec/shared': path.resolve(__dirname, '../../spec/src/shared/index.ts'), + '@objectstack/spec/qa': path.resolve(__dirname, '../../spec/src/qa/index.ts'), '@objectstack/spec': path.resolve(__dirname, '../../spec/src/index.ts'), }, }, diff --git a/packages/runtime/vitest.config.ts b/packages/runtime/vitest.config.ts index a7f0f8d74e..81eeed6a9a 100644 --- a/packages/runtime/vitest.config.ts +++ b/packages/runtime/vitest.config.ts @@ -70,6 +70,7 @@ export default defineConfig({ { find: '@objectstack/spec/ui', replacement: path.resolve(__dirname, '../spec/src/ui/index.ts') }, // [ADR-0105 D1] Reached transitively via `@objectstack/types` (tenancy posture). { find: '@objectstack/spec/security', replacement: path.resolve(__dirname, '../spec/src/security/index.ts') }, + { find: '@objectstack/spec/qa', replacement: path.resolve(__dirname, '../spec/src/qa/index.ts') }, { find: '@objectstack/spec', replacement: path.resolve(__dirname, '../spec/src/index.ts') }, { find: '@objectstack/types', replacement: path.resolve(__dirname, '../types/src/index.ts') }, // Dev-only: app-plugin.jobs.test.ts drives the REAL CronJobAdapter, so