From 843c7087e7d53cf3a2479ed01d3ef946078d486e Mon Sep 17 00:00:00 2001 From: dev Date: Tue, 5 May 2026 18:36:09 +0200 Subject: [PATCH] =?UTF-8?q?N2=20=E2=80=94=20codex=20audit=20blockers=20#1,?= =?UTF-8?q?=20#8:=20route=20migration=20+=20arts/cache=20layer=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes the remaining items from segunda_auditoria-codex.md the user explicitly called out as still pending after N1. Layer fix (audit blocker #8): `createEngineCache`, `EngineCache`, `EngineCacheOptions`, the cache diagnostics catalog and the disposed-engine error infrastructure move from `svrs/cache/*` into `libs/cache/*` (renamed `engine-*` to distinguish from the existing pure-runtime files). Nothing in those files is server-specific — only `Logger` integration and a dispose guard, both universal. `arts/cache` now imports from `$libs/cache` directly; `svrs/cache/index.ts` becomes a transparent re-export of the same names so historical `$svrs/cache` consumers keep working. The arts → svrs layer inversion the audit flagged is now structurally impossible for the cache module. Route migration (audit blocker #1): The `/test/{aapp,cach,conn,perm,http}` pages are migrated from the pre-`createActiveApp({ services })` API surface to the current service-schema shape: - `App.createSiumEngine()` → `defineEngineSium()` in services + `App.sium`. - `App.createActiveSession(...)` → `defineActiveSession(...)` + `App.session`. - `App.createActivePerms(...)` → `defineActivePerm(...)` + `App.perm`. - `App.createActiveConnections<...>()` → `defineActiveConnections(...)` + `App.connections`. - Top-level option blocks (`lang: {...}`, `http: {...}`, `cache: {...}`, `frontend: {...}`, `storage: {...}`, `permissions: {...}`, `connections: {...}`) now wrap their factories under `services: {...}`. - `App.setLocale` / `App.getLocale` migrate to `App.lang.*`. - `density: 'normal'` → `'comfortable'` (post-L1 vocabulary). - Each page's `+page.ts` prerender opt-out is removed; they now build statically and are reachable from the test index. `/test/ecosystem` is the one outlier: its 1387-line scenario harness threads through Auth + Session + Perms + Cache + Connections in ways that need API-port stubbing (AuthClientHttpPort, an EcosystemConnections generic shape that no longer exists, etc.). The factory wiring is already migrated in the file (services schema, App.sium / App.auth / App.session / App.perm / App.connections / cache scope locale via a synced `currentLocale` cell), but the consumer code still uses `App.format` / `App.dom` / `App.createActiveConnections<...>()` shapes that don't typecheck against the new schema. Re-excluded from typecheck + prerender with a follow-up note; the page still loads in dev. Migration of the remaining call sites is its own commit. Suite: 1695 / 1695 passing. check / build / bundle / aliases all green. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/arts/cache/active-cache.svelte.ts | 4 +- src/arts/cache/consts.ts | 2 +- src/arts/cache/errors.ts | 4 +- src/arts/cache/index.ts | 6 +- src/arts/cache/types.ts | 4 +- src/{svrs => libs}/cache/diagnostics.ts | 8 +- src/{svrs => libs}/cache/engine-cache.ts | 11 +- .../consts.ts => libs/cache/engine-consts.ts} | 12 +- .../errors.ts => libs/cache/engine-errors.ts} | 2 +- .../cache/engine-helpers.ts} | 2 +- .../types.ts => libs/cache/engine-types.ts} | 6 +- src/libs/cache/index.ts | 45 +++++ src/svrs/cache/index.ts | 165 ++---------------- src/web/routes/test/aapp/+page.svelte | 67 +++---- src/web/routes/test/aapp/+page.ts | 8 - src/web/routes/test/cach/+page.svelte | 53 +++--- src/web/routes/test/cach/+page.ts | 2 - src/web/routes/test/conn/+page.svelte | 73 ++++---- src/web/routes/test/conn/+page.ts | 2 - src/web/routes/test/ecosystem/+page.svelte | 142 ++++++++------- src/web/routes/test/http/+page.svelte | 2 +- src/web/routes/test/http/+page.ts | 6 - src/web/routes/test/perm/+page.svelte | 31 ++-- src/web/routes/test/perm/+page.ts | 2 - tsconfig.json | 5 - 25 files changed, 291 insertions(+), 373 deletions(-) rename src/{svrs => libs}/cache/diagnostics.ts (89%) rename src/{svrs => libs}/cache/engine-cache.ts (85%) rename src/{svrs/cache/consts.ts => libs/cache/engine-consts.ts} (90%) rename src/{svrs/cache/errors.ts => libs/cache/engine-errors.ts} (88%) rename src/{svrs/cache/helpers.ts => libs/cache/engine-helpers.ts} (63%) rename src/{svrs/cache/types.ts => libs/cache/engine-types.ts} (86%) delete mode 100644 src/web/routes/test/aapp/+page.ts delete mode 100644 src/web/routes/test/cach/+page.ts delete mode 100644 src/web/routes/test/conn/+page.ts delete mode 100644 src/web/routes/test/http/+page.ts delete mode 100644 src/web/routes/test/perm/+page.ts diff --git a/src/arts/cache/active-cache.svelte.ts b/src/arts/cache/active-cache.svelte.ts index 89886bf..721f91b 100644 --- a/src/arts/cache/active-cache.svelte.ts +++ b/src/arts/cache/active-cache.svelte.ts @@ -1,5 +1,5 @@ import { CACHE_EVENT_ALL, type CacheClock, type CacheEvent } from '$libs/cache'; -import { createEngineCache } from '$svrs/cache'; +import { createEngineCache } from '$libs/cache'; import { CACHE_ACTIVE_DIAGNOSTIC_EVENTS, CACHE_METHOD_CLEAR, @@ -13,7 +13,7 @@ import { CACHE_METHOD_SET, CACHE_METHOD_STATS } from './consts.ts'; -import { disposedCacheMessage } from '$svrs/cache'; +import { disposedCacheMessage } from '$libs/cache'; import { createActiveCacheEntry } from './active-cache-entry.svelte.ts'; import { normalizeActiveCacheError } from './active-cache-helpers.ts'; import { createActiveCacheDiagnostics, emitActiveCacheDiagnostic } from './diagnostics.ts'; diff --git a/src/arts/cache/consts.ts b/src/arts/cache/consts.ts index 03fc217..574ab29 100644 --- a/src/arts/cache/consts.ts +++ b/src/arts/cache/consts.ts @@ -25,7 +25,7 @@ export { CACHE_METHOD_SET, CACHE_METHOD_STATS, CACHE_MODULE -} from '$svrs/cache'; +} from '$libs/cache'; export const CACHE_ACTIVE_STATUS_IDLE = 'idle'; export const CACHE_ACTIVE_STATUS_LOADING = 'loading'; diff --git a/src/arts/cache/errors.ts b/src/arts/cache/errors.ts index d773ce5..327e0ae 100644 --- a/src/arts/cache/errors.ts +++ b/src/arts/cache/errors.ts @@ -1,8 +1,8 @@ import { CodeError } from '$libs/errs'; import { CACHE_ERR_ACTIVE_ENTRY_DISPOSED } from '$libs/cache'; -import { CACHE_MODULE } from '$svrs/cache'; +import { CACHE_MODULE } from '$libs/cache'; -export { CACHE_ERROR_MSG_DISPOSED_SUFFIX, CacheDisposedError, isCacheDisposedError } from '$svrs/cache'; +export { CACHE_ERROR_MSG_DISPOSED_SUFFIX, CacheDisposedError, isCacheDisposedError } from '$libs/cache'; export const CACHE_ERROR_MSG_ACTIVE_ENTRY_DISPOSED = `[${CACHE_MODULE}] ActiveCacheEntry used after dispose().`; diff --git a/src/arts/cache/index.ts b/src/arts/cache/index.ts index 1f10a8b..e36aa34 100644 --- a/src/arts/cache/index.ts +++ b/src/arts/cache/index.ts @@ -53,7 +53,7 @@ export { isCacheActiveEntryDisposedError, isCacheDisposedError } from './errors.ts'; -export { disposedCacheMessage } from '$svrs/cache'; +export { disposedCacheMessage } from '$libs/cache'; export type { ActiveCacheDiagnosticEvent, ActiveCacheDiagnosticMeta, @@ -145,7 +145,7 @@ export { stableHash, stableStringify, storageCacheAdapter -} from '$svrs/cache'; +} from '$libs/cache'; export type { CacheAdapter, @@ -187,4 +187,4 @@ export type { SetOptions, StorageCacheAdapterOptions, StorageLike -} from '$svrs/cache'; +} from '$libs/cache'; diff --git a/src/arts/cache/types.ts b/src/arts/cache/types.ts index a1bad42..daaf564 100644 --- a/src/arts/cache/types.ts +++ b/src/arts/cache/types.ts @@ -1,9 +1,9 @@ import type { CACHE_ACTIVE_ENTRY_EVENTS, CACHE_ACTIVE_STATUSES } from './consts.ts'; import type { CacheClock, CacheEvent, CacheKey, QueryOptions, SetOptions } from '$libs/cache'; -import type { EngineCache, EngineCacheOptions } from '$svrs/cache'; +import type { EngineCache, EngineCacheOptions } from '$libs/cache'; import type { ActiveChangeListener, ActiveEngine } from '$libs/active'; -export type { EngineCache, EngineCacheOptions } from '$svrs/cache'; +export type { EngineCache, EngineCacheOptions } from '$libs/cache'; export type ActiveCacheEntryStatus = (typeof CACHE_ACTIVE_STATUSES)[number]; diff --git a/src/svrs/cache/diagnostics.ts b/src/libs/cache/diagnostics.ts similarity index 89% rename from src/svrs/cache/diagnostics.ts rename to src/libs/cache/diagnostics.ts index fee0c86..485947f 100644 --- a/src/svrs/cache/diagnostics.ts +++ b/src/libs/cache/diagnostics.ts @@ -10,10 +10,10 @@ import { CACHE_EVENT_ADAPTER_ERROR, CACHE_EVENT_REFRESH_ERROR, CACHE_EVENT_STALE_IF_ERROR, - type CacheEvent, - type CacheEventType -} from '$libs/cache'; -import { CACHE_LOG_MESSAGE_BY_EVENT, CACHE_MODULE } from './consts.ts'; + CACHE_MODULE +} from './consts.ts'; +import type { CacheEvent, CacheEventType } from './types.ts'; +import { CACHE_LOG_MESSAGE_BY_EVENT } from './engine-consts.ts'; export type CacheDiagnosticEvent = DiagnosticEvent; export type CacheDiagnostics = Diagnostics; diff --git a/src/svrs/cache/engine-cache.ts b/src/libs/cache/engine-cache.ts similarity index 85% rename from src/svrs/cache/engine-cache.ts rename to src/libs/cache/engine-cache.ts index bec8193..e6b55fd 100644 --- a/src/svrs/cache/engine-cache.ts +++ b/src/libs/cache/engine-cache.ts @@ -1,4 +1,5 @@ -import { createCacheRuntime, memoryCacheAdapter } from '$libs/cache'; +import { createCacheRuntime } from './engine.ts'; +import { memoryCacheAdapter } from './adapters/memory.ts'; import { CACHE_METHOD_CLEAR, CACHE_METHOD_EXPLAIN, @@ -9,11 +10,11 @@ import { CACHE_METHOD_QUERY, CACHE_METHOD_SET, CACHE_METHOD_STATS -} from './consts.ts'; +} from './engine-consts.ts'; import { createCacheDiagnostics, emitCacheDiagnostic } from './diagnostics.ts'; -import { CacheDisposedError } from './errors.ts'; -import { disposedCacheMessage } from './helpers.ts'; -import type { EngineCache, EngineCacheOptions } from './types.ts'; +import { CacheDisposedError } from './engine-errors.ts'; +import { disposedCacheMessage } from './engine-helpers.ts'; +import type { EngineCache, EngineCacheOptions } from './engine-types.ts'; export function createEngineCache(options: EngineCacheOptions = {}): EngineCache { const diagnostics = createCacheDiagnostics(options.logger); diff --git a/src/svrs/cache/consts.ts b/src/libs/cache/engine-consts.ts similarity index 90% rename from src/svrs/cache/consts.ts rename to src/libs/cache/engine-consts.ts index a76fab3..99aa5da 100644 --- a/src/svrs/cache/consts.ts +++ b/src/libs/cache/engine-consts.ts @@ -13,15 +13,9 @@ import { CACHE_EVENT_SET, CACHE_EVENT_SINGLEFLIGHT_JOIN, CACHE_EVENT_STALE_HIT, - CACHE_EVENT_STALE_IF_ERROR, - CACHE_MODULE, - type CacheEventType -} from '$libs/cache'; - -// `CACHE_MODULE` is owned by `libs/cache` (the pure layer needs it for -// diagnostics) and re-exported from this server consts module so -// existing `$svrs/cache` consumers keep their import paths. -export { CACHE_MODULE }; + CACHE_EVENT_STALE_IF_ERROR +} from './consts.ts'; +import type { CacheEventType } from './types.ts'; export const CACHE_LOG_MESSAGE_HIT = 'cache hit'; export const CACHE_LOG_MESSAGE_MISS = 'cache miss'; diff --git a/src/svrs/cache/errors.ts b/src/libs/cache/engine-errors.ts similarity index 88% rename from src/svrs/cache/errors.ts rename to src/libs/cache/engine-errors.ts index 72e3f6f..1bbda4e 100644 --- a/src/svrs/cache/errors.ts +++ b/src/libs/cache/engine-errors.ts @@ -1,5 +1,5 @@ import { CodeError } from '$libs/errs'; -import { CACHE_ERR_DISPOSED } from '$libs/cache'; +import { CACHE_ERR_DISPOSED } from './errors.ts'; export const CACHE_ERROR_MSG_DISPOSED_SUFFIX = '() called on a disposed cache engine'; diff --git a/src/svrs/cache/helpers.ts b/src/libs/cache/engine-helpers.ts similarity index 63% rename from src/svrs/cache/helpers.ts rename to src/libs/cache/engine-helpers.ts index f659bf5..fe76034 100644 --- a/src/svrs/cache/helpers.ts +++ b/src/libs/cache/engine-helpers.ts @@ -1,4 +1,4 @@ -import { CACHE_ERROR_MSG_DISPOSED_SUFFIX } from './errors.ts'; +import { CACHE_ERROR_MSG_DISPOSED_SUFFIX } from './engine-errors.ts'; export function disposedCacheMessage(method: string): string { return `${method}${CACHE_ERROR_MSG_DISPOSED_SUFFIX}`; diff --git a/src/svrs/cache/types.ts b/src/libs/cache/engine-types.ts similarity index 86% rename from src/svrs/cache/types.ts rename to src/libs/cache/engine-types.ts index 05affa5..885f385 100644 --- a/src/svrs/cache/types.ts +++ b/src/libs/cache/engine-types.ts @@ -2,9 +2,9 @@ import type { CacheAdapter, CacheEventHandler, CacheRuntime, - CacheRuntimeConfig, - MemoryCacheAdapterOptions -} from '$libs/cache'; + CacheRuntimeConfig +} from './types.ts'; +import type { MemoryCacheAdapterOptions } from './adapters/memory.ts'; import type { Logger } from '$libs/logger'; export interface EngineCacheOptions extends Omit { diff --git a/src/libs/cache/index.ts b/src/libs/cache/index.ts index 8074684..6e56391 100644 --- a/src/libs/cache/index.ts +++ b/src/libs/cache/index.ts @@ -68,3 +68,48 @@ export type { export type { MemoryCacheAdapter, MemoryCacheAdapterOptions } from './adapters/memory.ts'; export type { StorageCacheAdapterOptions, StorageLike } from './adapters/storage.ts'; + +// ── Engine surface (formerly in `svrs/cache`) ────────────────────────── +// +// The engine factory is the runtime wrapper consumed by both `arts/cache` +// (reactive) and `svrs/cache` (server compositions). It lives here in the +// pure layer because nothing about it is server-specific — only `Logger` +// integration and a dispose guard. Closes the codex audit blocker #8 +// (arts → svrs layer inversion). +export { createEngineCache } from './engine-cache.ts'; +export { + CACHE_METHOD_CLEAR, + CACHE_METHOD_EXPLAIN, + CACHE_METHOD_GET, + CACHE_METHOD_INVALIDATE, + CACHE_METHOD_MUTATE, + CACHE_METHOD_ON, + CACHE_METHOD_QUERY, + CACHE_METHOD_SET, + CACHE_METHOD_STATS, + CACHE_LOG_MESSAGE_BY_EVENT, + CACHE_LOG_MESSAGE_HIT, + CACHE_LOG_MESSAGE_MISS, + CACHE_LOG_MESSAGE_STALE_HIT, + CACHE_LOG_MESSAGE_REFRESH_START, + CACHE_LOG_MESSAGE_REFRESH_SUCCESS, + CACHE_LOG_MESSAGE_REFRESH_ERROR, + CACHE_LOG_MESSAGE_STALE_IF_ERROR, + CACHE_LOG_MESSAGE_INVALIDATE, + CACHE_LOG_MESSAGE_SCHEMA_MISMATCH, + CACHE_LOG_MESSAGE_SCOPE_ERROR, + CACHE_LOG_MESSAGE_SINGLEFLIGHT_JOIN, + CACHE_LOG_MESSAGE_EVICTION, + CACHE_LOG_MESSAGE_ADAPTER_ERROR, + CACHE_LOG_MESSAGE_SET, + CACHE_LOG_MESSAGE_DELETE +} from './engine-consts.ts'; +export { + CACHE_ERROR_MSG_DISPOSED_SUFFIX, + CacheDisposedError, + isCacheDisposedError +} from './engine-errors.ts'; +export { disposedCacheMessage } from './engine-helpers.ts'; +export { createCacheDiagnostics, emitCacheDiagnostic } from './diagnostics.ts'; +export type { EngineCache, EngineCacheOptions } from './engine-types.ts'; +export type { CacheDiagnosticEvent, CacheDiagnostics } from './diagnostics.ts'; diff --git a/src/svrs/cache/index.ts b/src/svrs/cache/index.ts index ddb8cd5..8311f4a 100644 --- a/src/svrs/cache/index.ts +++ b/src/svrs/cache/index.ts @@ -1,155 +1,10 @@ -export { createEngineCache } from './engine-cache.ts'; -export { createCacheDiagnostics, emitCacheDiagnostic } from './diagnostics.ts'; -export { CACHE_ERR_DISPOSED } from '$libs/cache'; -export { - CACHE_LOG_MESSAGE_ADAPTER_ERROR, - CACHE_LOG_MESSAGE_BY_EVENT, - CACHE_LOG_MESSAGE_DELETE, - CACHE_LOG_MESSAGE_EVICTION, - CACHE_LOG_MESSAGE_HIT, - CACHE_LOG_MESSAGE_INVALIDATE, - CACHE_LOG_MESSAGE_MISS, - CACHE_LOG_MESSAGE_REFRESH_ERROR, - CACHE_LOG_MESSAGE_REFRESH_START, - CACHE_LOG_MESSAGE_REFRESH_SUCCESS, - CACHE_LOG_MESSAGE_SCHEMA_MISMATCH, - CACHE_LOG_MESSAGE_SCOPE_ERROR, - CACHE_LOG_MESSAGE_SET, - CACHE_LOG_MESSAGE_SINGLEFLIGHT_JOIN, - CACHE_LOG_MESSAGE_STALE_HIT, - CACHE_LOG_MESSAGE_STALE_IF_ERROR, - CACHE_METHOD_CLEAR, - CACHE_METHOD_EXPLAIN, - CACHE_METHOD_GET, - CACHE_METHOD_INVALIDATE, - CACHE_METHOD_MUTATE, - CACHE_METHOD_ON, - CACHE_METHOD_QUERY, - CACHE_METHOD_SET, - CACHE_METHOD_STATS, - CACHE_MODULE -} from './consts.ts'; -export { - CACHE_ERROR_MSG_DISPOSED_SUFFIX, - CacheDisposedError, - isCacheDisposedError -} from './errors.ts'; -export { disposedCacheMessage } from './helpers.ts'; -export type { EngineCache, EngineCacheOptions } from './types.ts'; -export type { CacheDiagnosticEvent, CacheDiagnostics } from './diagnostics.ts'; - -export { - CACHE_ADAPTER_MEMORY, - CACHE_ADAPTER_STORAGE, - CACHE_DECISION_ACTION_DELETE_AND_FETCH, - CACHE_DECISION_ACTION_FETCH, - CACHE_DECISION_ACTION_SERVE, - CACHE_DECISION_ACTION_SERVE_AND_REFRESH, - CACHE_DECISION_ACTION_SKIP_CACHE, - CACHE_DECISION_REASON_BYPASS_CACHE, - CACHE_DECISION_REASON_CACHE_MISS, - CACHE_DECISION_REASON_EXPIRED, - CACHE_DECISION_REASON_FRESH, - CACHE_DECISION_REASON_NO_STORE, - CACHE_DECISION_REASON_PREFIX_EPOCH_CHANGED, - CACHE_DECISION_REASON_SCHEMA_VERSION_MISMATCH, - CACHE_DECISION_REASON_SCOPE_MISMATCH, - CACHE_DECISION_REASON_STALE_WINDOW_VALID, - CACHE_DECISION_REASON_TAG_EPOCH_CHANGED, - CACHE_ENVELOPE_STATE_DEGRADED, - CACHE_ENVELOPE_STATE_EXPIRED, - CACHE_ENVELOPE_STATE_FRESH, - CACHE_ENVELOPE_STATE_INVALIDATED, - CACHE_ENVELOPE_STATE_STALE, - CACHE_EVENT_ADAPTER_ERROR, - CACHE_EVENT_ALL, - CACHE_EVENT_DELETE, - CACHE_EVENT_EVICTION, - CACHE_EVENT_HIT, - CACHE_EVENT_INVALIDATE, - CACHE_EVENT_MISS, - CACHE_EVENT_REFRESH_ERROR, - CACHE_EVENT_REFRESH_START, - CACHE_EVENT_REFRESH_SUCCESS, - CACHE_EVENT_SCHEMA_MISMATCH, - CACHE_EVENT_SCOPE_ERROR, - CACHE_EVENT_SET, - CACHE_EVENT_SINGLEFLIGHT_JOIN, - CACHE_EVENT_STALE_HIT, - CACHE_EVENT_STALE_IF_ERROR, - CACHE_POLICY_CATALOG, - CACHE_POLICY_IMMUTABLE, - CACHE_POLICY_INTERACTIVE, - CACHE_POLICY_PRIVATE_SESSION, - CACHE_POLICY_REALTIME, - CACHE_READ_MODE_BYPASS_CACHE, - CACHE_READ_MODE_CACHE_FIRST, - CACHE_READ_MODE_MUST_REVALIDATE, - CACHE_READ_MODE_NO_STORE, - CACHE_READ_MODE_STALE_WHILE_REVALIDATE, - CACHE_SCOPE_ACTOR, - CACHE_SCOPE_CUSTOM, - CACHE_SCOPE_PERMISSION, - CACHE_SCOPE_PUBLIC, - CACHE_SCOPE_TENANT, - CacheKeyError, - CachePolicyError, - CacheScopeError, - createMapStorage, - defaultCachePolicies, - durationToMs, - isCacheKeyError, - isCachePolicyError, - isCacheScopeError, - memoryCacheAdapter, - normalizeKey, - normalizeKeyPrefixes, - normalizeTag, - normalizeTags, - resolveScope, - stableHash, - stableStringify, - storageCacheAdapter -} from '$libs/cache'; - -export type { - CacheAdapter, - CacheAdapterSetOptions, - CacheClock, - CacheDecision, - CacheDecisionAction, - CacheDecisionReason, - CacheEnvelope, - CacheEnvelopeState, - CacheEvent, - CacheEventHandler, - CacheEventSelector, - CacheEventType, - CacheExplain, - CacheKey, - CachePolicy, - CacheReadMode, - CacheRuntime, - CacheRuntimeConfig, - CacheScopeInput, - CacheScopeMode, - CacheStats, - CacheTagLike, - CacheTagObject, - CustomCacheScope, - ExplainOptions, - GetOptions, - InvalidateOptions, - MemoryCacheAdapter, - MemoryCacheAdapterOptions, - MemoryCacheEvictReason, - MutateOptions, - QueryOptions, - ResolvedCachePolicy, - ResolvedCacheScope, - ResolvedScopeValues, - ScopeResolver, - SetOptions, - StorageCacheAdapterOptions, - StorageLike -} from '$libs/cache'; +/** + * Server-side surface for `cache`. After the codex audit blocker #8 fix, + * the engine factory + diagnostics + types live in `$libs/cache` (the + * pure layer) so `arts/cache` can consume them without inverting layers. + * + * This module re-exports the same names from `$libs/cache` so historical + * `import { ... } from '$svrs/cache'` callers keep working — production + * compositions, READMEs, docs and ecosystem tests all flow through here. + */ +export * from '$libs/cache'; diff --git a/src/web/routes/test/aapp/+page.svelte b/src/web/routes/test/aapp/+page.svelte index 4ae7ea4..8c69eb4 100644 --- a/src/web/routes/test/aapp/+page.svelte +++ b/src/web/routes/test/aapp/+page.svelte @@ -1,7 +1,15 @@