From 7953a44203d660fb3bb7fed3ea8a9d4a5567f3ce Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Wed, 13 May 2026 00:10:03 +0200 Subject: [PATCH] feat(navigation): conformance manifest + self-asserting bind-production --- packages/navigation/src/di/bind-production.ts | 10 ++++++++++ packages/navigation/src/feature.manifest.ts | 16 ++++++++++++++++ packages/navigation/src/index.ts | 1 + 3 files changed, 27 insertions(+) create mode 100644 packages/navigation/src/feature.manifest.ts diff --git a/packages/navigation/src/di/bind-production.ts b/packages/navigation/src/di/bind-production.ts index f535180..3eb7bd1 100644 --- a/packages/navigation/src/di/bind-production.ts +++ b/packages/navigation/src/di/bind-production.ts @@ -6,8 +6,10 @@ import { type ILogger, } from "@repo/core-shared/instrumentation"; import type { BindProductionContext } from "@repo/core-shared/di"; +import { assertFeatureConformance } from "@repo/core-shared/conformance"; import { navigationContainer } from "./container"; import { NAVIGATION_SYMBOLS } from "./symbols"; +import { navigationManifest } from "../feature.manifest"; import { HeaderRepository } from "../infrastructure/repositories/header.repository"; import { getHeaderUseCase } from "../application/use-cases/get-header.use-case"; import { getHeaderController } from "../interface-adapters/controllers/get-header.controller"; @@ -78,4 +80,12 @@ export function bindProductionNavigation(ctx: BindProductionContext): void { // // // + + // Boot-time conformance check. + assertFeatureConformance( + navigationContainer, + navigationManifest, + { getHeader: NAVIGATION_SYMBOLS.IGetHeaderUseCase }, + ctx, + ); } diff --git a/packages/navigation/src/feature.manifest.ts b/packages/navigation/src/feature.manifest.ts new file mode 100644 index 0000000..98b9300 --- /dev/null +++ b/packages/navigation/src/feature.manifest.ts @@ -0,0 +1,16 @@ +import { defineFeature } from "@repo/core-shared/conformance"; + +/** + * The navigation feature's conformance manifest. + */ +export const navigationManifest = defineFeature({ + name: "navigation", + requiredCores: [], + useCases: { + getHeader: { mutates: false, audits: [], publishes: [], consumes: [] }, + }, + realtimeChannels: [], + jobs: [], +} as const); + +export type NavigationManifest = typeof navigationManifest; diff --git a/packages/navigation/src/index.ts b/packages/navigation/src/index.ts index 089c6c1..439183b 100644 --- a/packages/navigation/src/index.ts +++ b/packages/navigation/src/index.ts @@ -17,3 +17,4 @@ export type { IGetHeaderController } from "./interface-adapters/controllers/get- // // +export { navigationManifest, type NavigationManifest } from "./feature.manifest";