Files
TREK/server/scripts/import-boundaries-baseline.json
T
Maurice 22b398ad8c ci(server): gate import cycles and cross-domain reach-ins with a baseline
Module boundaries were held by review alone. storage.module.ts documents
a cycle that only surfaced at runtime as "imports[1] is undefined", three
modules exist just to break cycles, and nothing stopped the next feature
from reaching into another domain's helpers.

scripts/import-boundaries.mjs parses every import under src/ with the
TypeScript parser and checks five rules against a baseline of today's
violations: load-time file cycles (none today once type-only and lazy
imports and the two-way MikroORM entity relations are left out), new
dependencies between domains that already depend on each other (262
pairs, one tangle around plugins and auth), shared-kernel files importing
a domain (8), imports of another domain's internals (69) and src/db
importing src/nest (5). A domain's public surface is what the code
already treats that way: modules, services, guards, decorators, types,
constants, the audit logger, the plugin RPC kit and the addon gates.

New violations fail, --update only drops entries, and an unreadable
baseline, a missing src/ or an import it cannot resolve stops the run.
2026-10-08 13:02:59 +02:00

356 lines
11 KiB
JSON

{
"fileCycles": [],
"domainCycles": [
"accommodations -> assignments",
"accommodations -> auth",
"accommodations -> mcp-shared",
"accommodations -> places",
"accommodations -> plugins",
"accommodations -> realtime",
"addons -> auth",
"addons -> memories",
"addons -> settings",
"addons -> transit",
"admin -> addons",
"admin -> auth",
"admin -> booking-import",
"admin -> llm-parse",
"admin -> memories",
"admin -> notifications",
"admin -> oauth",
"admin -> packing",
"admin -> plugins",
"admin -> realtime",
"admin -> settings",
"admin -> tokens",
"airports -> auth",
"assignments -> auth",
"assignments -> days",
"assignments -> journey",
"assignments -> mcp-shared",
"assignments -> plugins",
"assignments -> realtime",
"atlas -> addons",
"atlas -> auth",
"atlas -> geo",
"atlas -> plugins",
"atlas -> public-api",
"atlas -> tokens",
"auth -> budget",
"auth -> files",
"auth -> maps",
"auth -> notifications",
"auth -> plugins",
"auth -> settings",
"auth -> storage",
"auth -> tokens",
"booking-import -> addons",
"booking-import -> airports",
"booking-import -> budget",
"booking-import -> llm-parse",
"booking-import -> maps",
"booking-import -> places",
"booking-import -> realtime",
"booking-import -> reservations",
"budget -> addons",
"budget -> auth",
"budget -> mcp-shared",
"budget -> plugins",
"budget -> realtime",
"calendar -> days",
"calendar -> reservations",
"categories -> auth",
"categories -> mcp-shared",
"categories -> plugins",
"collab -> addons",
"collab -> auth",
"collab -> files",
"collab -> mcp-shared",
"collab -> notifications",
"collab -> plugins",
"collab -> realtime",
"collab -> storage",
"collections -> addons",
"collections -> auth",
"collections -> notifications",
"collections -> places",
"collections -> plugins",
"collections -> realtime",
"collections -> storage",
"day-notes -> auth",
"day-notes -> mcp-shared",
"day-notes -> plugins",
"day-notes -> realtime",
"days -> accommodations",
"days -> assignments",
"days -> auth",
"days -> mcp-shared",
"days -> places",
"days -> plugins",
"days -> realtime",
"files -> auth",
"files -> mcp-shared",
"files -> plugins",
"files -> realtime",
"files -> storage",
"geo -> maps",
"google-quota -> auth",
"integrations -> addons",
"integrations -> assignments",
"integrations -> atlas",
"integrations -> auth",
"integrations -> journey",
"integrations -> mcp-shared",
"integrations -> places",
"integrations -> realtime",
"integrations -> reservations",
"journey -> addons",
"journey -> atlas",
"journey -> auth",
"journey -> files",
"journey -> maps",
"journey -> memories",
"journey -> photos",
"journey -> plugins",
"journey -> realtime",
"journey -> settings",
"journey -> storage",
"llm-parse -> addons",
"llm-parse -> auth",
"llm-parse -> settings",
"maps -> auth",
"maps -> geo",
"maps -> google-quota",
"maps -> place-photos",
"maps -> settings",
"maps -> storage",
"mcp-shared -> realtime",
"memories -> addons",
"memories -> auth",
"memories -> notifications",
"memories -> photos",
"memories -> realtime",
"memories -> storage",
"notifications -> admin",
"notifications -> auth",
"notifications -> realtime",
"notifications -> storage",
"oauth -> addons",
"oauth -> auth",
"packing -> addons",
"packing -> admin",
"packing -> auth",
"packing -> mcp-shared",
"packing -> notifications",
"packing -> plugins",
"packing -> realtime",
"photos -> auth",
"photos -> memories",
"place-photos -> storage",
"places -> accommodations",
"places -> assignments",
"places -> atlas",
"places -> auth",
"places -> journey",
"places -> maps",
"places -> mcp-shared",
"places -> place-photos",
"places -> plugins",
"places -> realtime",
"places -> storage",
"places -> unsplash",
"plugins -> accommodations",
"plugins -> addons",
"plugins -> assignments",
"plugins -> atlas",
"plugins -> auth",
"plugins -> budget",
"plugins -> categories",
"plugins -> collab",
"plugins -> collections",
"plugins -> day-notes",
"plugins -> days",
"plugins -> files",
"plugins -> journey",
"plugins -> llm-parse",
"plugins -> maps",
"plugins -> notifications",
"plugins -> packing",
"plugins -> places",
"plugins -> realtime",
"plugins -> reservations",
"plugins -> tags",
"plugins -> todo",
"plugins -> trips",
"plugins -> vacay",
"plugins -> weather",
"public-api -> tokens",
"realtime -> auth",
"realtime -> journey",
"realtime -> plugins",
"reservations -> accommodations",
"reservations -> airports",
"reservations -> assignments",
"reservations -> auth",
"reservations -> budget",
"reservations -> days",
"reservations -> integrations",
"reservations -> mcp-shared",
"reservations -> notifications",
"reservations -> plugins",
"reservations -> realtime",
"settings -> admin",
"settings -> auth",
"storage -> auth",
"tags -> auth",
"tags -> plugins",
"todo -> addons",
"todo -> auth",
"todo -> mcp-shared",
"todo -> plugins",
"todo -> realtime",
"tokens -> auth",
"transit -> auth",
"transit -> days",
"transit -> google-quota",
"transit -> maps",
"transit -> mcp-shared",
"transit -> reservations",
"transit -> settings",
"trip-members -> auth",
"trip-members -> budget",
"trip-members -> notifications",
"trip-members -> realtime",
"trip-members -> trips",
"trip-read-model -> accommodations",
"trip-read-model -> budget",
"trip-read-model -> collab",
"trip-read-model -> days",
"trip-read-model -> files",
"trip-read-model -> packing",
"trip-read-model -> places",
"trip-read-model -> reservations",
"trip-read-model -> todo",
"trip-read-model -> trip-members",
"trip-read-model -> trips",
"trips -> accommodations",
"trips -> addons",
"trips -> auth",
"trips -> budget",
"trips -> calendar",
"trips -> collab",
"trips -> days",
"trips -> files",
"trips -> mcp-shared",
"trips -> packing",
"trips -> places",
"trips -> plugins",
"trips -> realtime",
"trips -> reservations",
"trips -> settings",
"trips -> storage",
"trips -> todo",
"trips -> trip-members",
"trips -> trip-read-model",
"trips -> unsplash",
"trips -> vacay",
"unsplash -> settings",
"unsplash -> storage",
"vacay -> addons",
"vacay -> auth",
"vacay -> notifications",
"vacay -> plugins",
"vacay -> realtime",
"weather -> auth",
"weather -> plugins"
],
"sharedImportsDomain": [
"nest/common/idempotency-cleanup.job.ts -> nest/audit/audit-log.logger.ts",
"nest/common/idempotency-cleanup.job.ts -> nest/scheduling/cron-registrar.service.ts",
"nest/common/rowShape.ts -> nest/query-helpers/query-helpers.service.ts",
"nest/common/validate-route-guards.ts -> nest/auth/cookie-auth.guard.ts",
"nest/common/validate-route-guards.ts -> nest/auth/jwt-auth.guard.ts",
"nest/common/validate-route-guards.ts -> nest/auth/optional-jwt.guard.ts",
"nest/common/validate-route-guards.ts -> nest/auth/public.decorator.ts",
"nest/common/validate-route-guards.ts -> nest/public-api/api-token.guard.ts"
],
"domainInternals": [
"addons -> memories/memories.helpers.ts",
"addons -> settings/instance-api-keys.ts",
"addons -> transit/transit-provider.ts",
"admin -> llm-parse/llm-config.ts",
"admin -> memories/memories.helpers.ts",
"atlas -> geo/nominatim.client.ts",
"atlas -> public-api/public-api-request.ts",
"auth -> maps/maps.helpers.ts",
"auth -> maps/providers/places-provider.ts",
"auth -> plugins/paths.ts",
"auth -> plugins/user-erasure-enqueue.ts",
"auth -> settings/instance-api-keys.ts",
"auth -> storage/storage-upload.factory.ts",
"backup -> permissions/permissions-cache.ts",
"backup -> plugins/paths.ts",
"backup -> plugins/plugin-backup.ts",
"booking-import -> airports/airports.data.ts",
"booking-import -> llm-parse/image-input.ts",
"collab -> storage/storage-upload.factory.ts",
"collections -> places/gpx-export.helpers.ts",
"collections -> places/place-image.ts",
"collections -> places/places.dto.ts",
"collections -> places/places.helpers.ts",
"collections -> storage/storage-upload.factory.ts",
"days -> accommodations/night-seat.ts",
"doc-sync -> storage/content-type.ts",
"files -> auth/jwt-verify.ts",
"files -> storage/content-type.ts",
"files -> storage/storage-upload.factory.ts",
"geo -> maps/maps.helpers.ts",
"integrations -> atlas/atlas-geo.ts",
"journey -> atlas/atlas-geo.ts",
"journey -> memories/photo-provider.registry.ts",
"journey -> storage/storage-upload.factory.ts",
"maps -> geo/nominatim.client.ts",
"maps -> settings/instance-api-keys.ts",
"notifications -> admin/admin.dto.ts",
"oidc -> admin/admin.dto.ts",
"packing -> admin/admin.dto.ts",
"place-enrichment -> maps/maps.helpers.ts",
"place-enrichment -> maps/trek-places.client.ts",
"places -> atlas/atlas-geo.ts",
"places -> storage/storage-upload.factory.ts",
"platform -> auth/jwt-verify.ts",
"plugins -> auth/jwt-verify.ts",
"plugins -> llm-parse/clients/openai-compatible.client.ts",
"plugins -> llm-parse/llm-client.factory.ts",
"plugins -> llm-parse/llm-config.resolver.ts",
"plugins -> llm-parse/llm-config.ts",
"plugins -> maps/maps.helpers.ts",
"plugins -> notifications/channel-registry.ts",
"plugins -> notifications/notification-events.ts",
"realtime -> plugins/install/host-compat.ts",
"receipt-scan -> llm-parse/image-input.ts",
"reservation-import -> integrations/airtrail.dto.ts",
"reservation-import -> llm-parse/image-input.ts",
"reservations -> airports/airports.data.ts",
"roadtrip -> places/maps-dir.helpers.ts",
"roadtrip -> plugins/contributions/plugin-route-normalize.ts",
"roadtrip -> plugins/contributions/plugin-search.helpers.ts",
"roadtrip -> plugins/kill-switch.ts",
"settings -> admin/admin.dto.ts",
"transit -> maps/maps.helpers.ts",
"transit -> settings/instance-api-keys.ts",
"trip-members -> trips/trips.dto.ts",
"trips -> mcp-shared/prompt-args.ts",
"trips -> places/places.helpers.ts",
"trips -> storage/storage-upload.factory.ts",
"unsplash -> settings/instance-api-keys.ts"
],
"dbImportsNest": [
"db/migrations/Migration20200101010100_encrypt_any_plaintext_oidc_client_secret_left.ts -> nest/common/crypto/apiKeyCrypto.ts",
"db/migrations/Migration20200101010200_encrypt_any_plaintext_smtp_pass_left_in.ts -> nest/common/crypto/apiKeyCrypto.ts",
"db/migrations/Migration20200101010300_encrypt_any_plaintext_immich_api_key_values.ts -> nest/common/crypto/apiKeyCrypto.ts",
"db/orm.ts -> nest/database/request-context.ts",
"db/reseat-booked-nights.ts -> nest/accommodations/night-seat.ts"
]
}