ark-runtime-kernel 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +97 -7
- package/bin/ark-check.mjs +244 -42
- package/bin/ark-mcp.mjs +105 -2
- package/bin/ark-shared.mjs +51 -0
- package/dist/eslint/index.cjs +49 -1
- package/dist/eslint/index.cjs.map +1 -1
- package/dist/eslint/index.d.cts +4 -1
- package/dist/eslint/index.d.ts +4 -1
- package/dist/eslint/index.js +49 -2
- package/dist/eslint/index.js.map +1 -1
- package/dist/index.cjs +48 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +48 -1
- package/dist/index.js.map +1 -1
- package/dist/nestjs/index.cjs +1 -1
- package/dist/nestjs/index.cjs.map +1 -1
- package/dist/nestjs/index.js +1 -1
- package/dist/nestjs/index.js.map +1 -1
- package/docs/agent-guide.md +9 -4
- package/docs/ai-gates.md +68 -0
- package/package.json +8 -2
- package/server.json +7 -7
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts","../src/kernel/intent/IntentRegistry.ts","../src/kernel/intent/defineIntent.ts","../src/kernel/intent/validateIntentName.ts","../src/kernel/policy/PolicyViolationError.ts","../src/kernel/policy/PolicyEngine.ts","../src/kernel/policy/definePolicy.ts","../src/kernel/policy/builtins.ts","../src/kernel/event-bus/policyContext.ts","../src/kernel/event-bus/errors.ts","../src/kernel/event-bus/EventBus.ts","../src/kernel/event-contracts/EventContractRegistry.ts","../src/kernel/outbox/InMemoryOutboxStore.ts","../src/kernel/observability/ObservabilityReporter.ts","../src/kernel/testing/ArkTestHarness.ts","../src/kernel/audit/AuditTrail.ts","../src/kernel/graph/DependencyGraph.ts","../src/kernel/graph/sync.ts","../src/kernel/layers/ArchitectureProfile.ts","../src/kernel/metadata/MetadataRegistry.ts","../src/kernel/adapters/ports.ts","../src/kernel/ai-gate/AICodeGate.ts","../src/kernel/projections/ProjectionRegistry.ts","../src/kernel/manifest/constants.ts","../src/kernel/manifest/createArkManifest.ts","../src/kernel/workflow/Saga.ts","../src/kernel/runtime/createArkKernel.ts"],"names":["version","flowKey"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Ark library version — single source of truth. */\nexport const version = '1.3.0';\n","/**\n * IntentRegistry\n *\n * Central registry for semantic intents.\n * Supports registration, duplicate prevention, and declared dependency relationships.\n *\n * This is a core building block for governance, dependency graphs, and policy enforcement.\n */\n\nimport type { IntentName } from '../../domain/types';\nimport type { IntentCreator, IntentRelationship } from './types';\nimport type { DomainEvent } from '../../domain/types';\n\n/**\n * Options for declaring relationships when defining an intent.\n */\nexport interface DefineIntentOptions {\n /** Other intents this one depends on (semantic names) */\n dependsOn?: IntentName[];\n /** Intents that this one produces / triggers */\n produces?: IntentName[];\n}\n\n/**\n * IntentRegistry manages all registered intents and their declared relationships.\n */\nexport class IntentRegistry {\n private readonly intents = new Map<string, IntentCreator<IntentName, unknown>>();\n private readonly dependencies = new Map<string, Set<string>>();\n private readonly productions = new Map<string, Set<string>>();\n\n /**\n * Define/register a new intent.\n *\n * @param name - Semantic intent name following the convention (Domain.*, Application.*, etc.)\n * @param options - Optional relationship declarations\n * @throws Error if an intent with the same name is already registered\n */\n define<N extends IntentName, P = unknown>(\n name: N,\n options?: DefineIntentOptions\n ): IntentCreator<N, P> {\n if (this.intents.has(name)) {\n throw new Error(\n `Intent \"${name}\" is already registered. Intent names must be unique within a registry.`\n );\n }\n\n // Create the callable creator using a proper function so we can safely attach .name\n const fn = (payload: P): DomainEvent<N, P> => ({\n intent: name,\n payload,\n metadata: {\n occurredAt: new Date().toISOString(),\n source: 'unknown',\n },\n });\n\n // Attach the semantic name in a cross-environment safe way\n Object.defineProperty(fn, 'name', {\n value: name,\n enumerable: true,\n configurable: false,\n writable: false,\n });\n\n const creator = fn as IntentCreator<N, P>;\n\n this.intents.set(name, creator as IntentCreator<IntentName, unknown>);\n\n // Apply initial declared relationships if provided\n if (options?.dependsOn) {\n for (const dep of options.dependsOn) {\n this.declareDependency(name, dep);\n }\n }\n if (options?.produces) {\n for (const prod of options.produces) {\n this.declareProduction(name, prod);\n }\n }\n\n return creator;\n }\n\n /**\n * Declare that one intent depends on / relates to another.\n * This information is used by the DependencyGraph (future iterations) and for policy checks.\n *\n * @param from - The source intent (e.g. an Application operation)\n * @param to - The target intent it depends on (e.g. a Domain event or concept)\n */\n declareDependency(from: string, to: string): void {\n if (!this.dependencies.has(from)) {\n this.dependencies.set(from, new Set());\n }\n this.dependencies.get(from)!.add(to);\n }\n\n /**\n * Declare that one intent produces / emits another (e.g. use case → domain event).\n */\n declareProduction(from: string, to: string): void {\n if (!this.productions.has(from)) {\n this.productions.set(from, new Set());\n }\n this.productions.get(from)!.add(to);\n }\n\n /**\n * Retrieve a previously defined intent creator by name.\n */\n get<N extends IntentName = IntentName, P = unknown>(\n name: string\n ): IntentCreator<N, P> | undefined {\n return this.intents.get(name) as IntentCreator<N, P> | undefined;\n }\n\n /**\n * List all registered intent creators.\n */\n list(): IntentCreator<IntentName, unknown>[] {\n return Array.from(this.intents.values());\n }\n\n /**\n * Get all declared dependencies for a given intent.\n */\n getDependencies(intentName: string): string[] {\n const deps = this.dependencies.get(intentName);\n return deps ? Array.from(deps) : [];\n }\n\n /**\n * Get all intents produced / emitted by a given intent.\n */\n getProductions(intentName: string): string[] {\n const prods = this.productions.get(intentName);\n return prods ? Array.from(prods) : [];\n }\n\n /**\n * Get all declared relationships (useful for graph generation).\n */\n getAllRelationships(): IntentRelationship[] {\n const result: IntentRelationship[] = [];\n for (const [from, tos] of this.dependencies.entries()) {\n for (const to of tos) {\n result.push({ from, to, kind: 'dependsOn' });\n }\n }\n for (const [from, tos] of this.productions.entries()) {\n for (const to of tos) {\n result.push({ from, to, kind: 'produces' });\n }\n }\n return result;\n }\n\n /**\n * Check if an intent name has been registered.\n */\n has(name: string): boolean {\n return this.intents.has(name);\n }\n\n /**\n * Clear the registry. Primarily useful for tests.\n */\n clear(): void {\n this.intents.clear();\n this.dependencies.clear();\n this.productions.clear();\n }\n}\n","/**\n * defineIntent\n *\n * The primary ergonomic function for declaring semantic intents.\n *\n * Uses a default shared registry for convenience, while still allowing\n * isolated registries via `createIntentRegistry()`.\n *\n * Intents are the core of Ark's governance model. They give every\n * architectural concept (domain events, use cases, adapter operations, workflows)\n * an explicit, namespaced, machine-readable identity.\n */\n\nimport type { IntentName } from '../../domain/types';\nimport type { IntentCreator } from './types';\nimport { IntentRegistry, type DefineIntentOptions } from './IntentRegistry';\n\n// Default registry used by the top-level defineIntent for simplicity\nconst defaultRegistry = new IntentRegistry();\n\n/**\n * Define a new semantic intent.\n *\n * This is the main entry point most users (and AI generators) will use.\n *\n * @example\n * ```ts\n * // Domain event\n * const OrderPlaced = defineIntent<'Domain.Order.OrderPlaced', {\n * orderId: string;\n * amount: number;\n * }>('Domain.Order.OrderPlaced');\n *\n * const event = OrderPlaced({ orderId: 'o-42', amount: 99.5 });\n *\n * // Application operation that declares a dependency at definition time\n * const ConfirmOrder = defineIntent<'Application.ConfirmOrder', { orderId: string }>(\n * 'Application.ConfirmOrder',\n * { dependsOn: ['Domain.Order.OrderPlaced'] }\n * );\n * ```\n *\n * @param name - Unique semantic name. Recommended convention:\n * - `Domain.*` for domain concepts and events\n * - `Application.*` for use cases / orchestration\n * - `Adapter.*` for external integrations\n * - `Workflow.*` for sagas and long-running processes\n * @param options - Optional initial relationship declarations (`dependsOn`, `produces`)\n */\nexport function defineIntent<N extends IntentName, P = unknown>(\n name: N,\n options?: DefineIntentOptions\n): IntentCreator<N, P> {\n return defaultRegistry.define(name, options);\n}\n\n/**\n * Create an isolated IntentRegistry.\n * Useful for testing, multiple bounded contexts, or advanced governance setups.\n */\nexport function createIntentRegistry(): IntentRegistry {\n return new IntentRegistry();\n}\n\n/**\n * The default registry backing the top-level `defineIntent` calls.\n * You can inspect it or use it directly if needed.\n */\nexport const defaultIntentRegistry = defaultRegistry;\n","/**\n * Runtime validation for semantic intent naming conventions.\n */\n\nconst ALLOWED_PREFIXES = [\n 'Domain.',\n 'Application.',\n 'Adapter.',\n 'Workflow.',\n 'Job.',\n 'Presentation.',\n 'Reporting.',\n 'Metadata.',\n 'Security.',\n 'Audit.',\n 'Observability.',\n 'Kernel.',\n] as const;\n\nexport interface IntentNameValidation {\n valid: boolean;\n reason?: string;\n}\n\n/**\n * Validate that an intent name follows Ark naming conventions.\n */\nexport function validateIntentName(name: string): IntentNameValidation {\n if (!name || typeof name !== 'string') {\n return { valid: false, reason: 'Intent name must be a non-empty string' };\n }\n\n if (!ALLOWED_PREFIXES.some((p) => name.startsWith(p))) {\n return {\n valid: false,\n reason: `Intent \"${name}\" must start with one of: ${ALLOWED_PREFIXES.join(', ')}`,\n };\n }\n\n const rest = name.slice(name.indexOf('.') + 1);\n if (!rest || !/^[A-Za-z][A-Za-z0-9_.]*$/.test(rest)) {\n return {\n valid: false,\n reason: `Intent \"${name}\" has an invalid segment after the layer prefix`,\n };\n }\n\n return { valid: true };\n}\n","/**\n * Typed error thrown when hard policies are violated.\n */\n\nimport type { PolicyViolation } from './types';\n\nexport class PolicyViolationError extends Error {\n readonly violations: PolicyViolation[];\n\n constructor(violations: PolicyViolation[]) {\n const messages = violations\n .map((v) => `- ${v.policyName}: ${v.message}`)\n .join('\\n');\n super(`Hard policy violation(s) detected:\\n${messages}`);\n this.name = 'PolicyViolationError';\n this.violations = violations;\n }\n}","/**\n * PolicyEngine\n *\n * Evaluates collections of policies against a context.\n * Supports hard and soft policies.\n * - Hard policies: violations cause enforcement to throw.\n * - Soft policies: violations are reported as warnings but do not throw.\n */\n\nimport type { Policy, PolicyViolation } from './types';\nimport { PolicyViolationError } from './PolicyViolationError';\n\nexport interface PolicyEvaluationResult {\n passed: boolean;\n violations: PolicyViolation[];\n hardViolations: PolicyViolation[];\n softViolations: PolicyViolation[];\n}\n\n\n/**\n * The PolicyEngine is responsible for registering policies and evaluating\n * them against a given context.\n */\nexport class PolicyEngine<Context = unknown> {\n private readonly policies: Policy<Context>[] = [];\n\n constructor(initialPolicies: Policy<Context>[] = []) {\n for (const policy of initialPolicies) {\n this.add(policy);\n }\n }\n\n /**\n * Adds a policy to the engine.\n */\n add(policy: Policy<Context>): void {\n // Prevent duplicate policy names\n if (this.policies.some((p) => p.name === policy.name)) {\n throw new Error(`Policy \"${policy.name}\" is already registered in this engine.`);\n }\n this.policies.push(policy);\n }\n\n /**\n * Returns all registered policies.\n */\n getPolicies(): Policy<Context>[] {\n return [...this.policies];\n }\n\n /**\n * Evaluates all policies against the provided context.\n */\n evaluate(context: Context): PolicyEvaluationResult {\n const violations: PolicyViolation[] = [];\n\n for (const policy of this.policies) {\n const result = policy.check(context);\n\n if (result === true) {\n continue;\n }\n\n if (result === false) {\n violations.push({\n policyName: policy.name,\n severity: policy.severity,\n message: `Policy \"${policy.name}\" was violated.`,\n });\n continue;\n }\n\n if (Array.isArray(result)) {\n for (const v of result) {\n violations.push({\n policyName: policy.name,\n severity: policy.severity,\n message: v.message,\n details: v.details,\n });\n }\n } else {\n violations.push({\n policyName: policy.name,\n severity: policy.severity,\n message: result.message,\n details: result.details,\n });\n }\n }\n\n const hardViolations = violations.filter((v) => v.severity === 'hard');\n const softViolations = violations.filter((v) => v.severity === 'soft');\n\n return {\n passed: violations.length === 0,\n violations,\n hardViolations,\n softViolations,\n };\n }\n\n /**\n * Enforces all policies.\n *\n * - Soft violations are collected and can be observed (returned or logged).\n * - Hard violations cause an error to be thrown (by default).\n *\n * @returns Evaluation result (including any soft violations)\n * @throws Error if any hard policy is violated\n */\n enforce(context: Context): PolicyEvaluationResult {\n const result = this.evaluate(context);\n\n if (result.hardViolations.length > 0) {\n throw new PolicyViolationError(result.hardViolations);\n }\n\n return result;\n }\n\n /**\n * Clears all registered policies.\n */\n clear(): void {\n this.policies.length = 0;\n }\n}\n","/**\n * definePolicy\n *\n * Factory function to create architectural policies in a declarative way.\n */\n\nimport type {\n Policy,\n PolicyEnforcementMode,\n PolicySeverity,\n PolicyViolation,\n} from './types';\n\nexport interface DefinePolicyOptions<Context = unknown> {\n name: string;\n severity?: PolicySeverity;\n tags?: readonly string[];\n owner?: string;\n version?: string;\n rationale?: string;\n enforcementMode?: PolicyEnforcementMode;\n deprecated?: boolean | string;\n replacedBy?: string;\n check: (context: Context) => boolean | PolicyViolation | PolicyViolation[];\n}\n\n/**\n * Creates a Policy from a declarative configuration.\n *\n * The provided `check` function is called as-is. The PolicyEngine is responsible\n * for normalizing results (booleans, single violations, arrays) into a consistent\n * set of PolicyViolation objects.\n *\n * @example\n * ```ts\n * const noDomainToInfra = definePolicy({\n * name: 'Domain must not depend on infrastructure',\n * severity: 'hard',\n * check: (ctx) => {\n * const violations: PolicyViolation[] = [];\n * // ... logic using ctx.registry.getAllRelationships()\n * return violations.length > 0 ? violations : true;\n * }\n * });\n * ```\n */\nexport function definePolicy<Context = unknown>(\n options: DefinePolicyOptions<Context>\n): Policy<Context> {\n const severity: PolicySeverity = options.severity ?? 'soft';\n\n const policy: Policy<Context> = {\n name: options.name,\n severity,\n tags: options.tags,\n owner: options.owner,\n version: options.version,\n rationale: options.rationale,\n enforcementMode: options.enforcementMode,\n deprecated: options.deprecated,\n replacedBy: options.replacedBy,\n check: options.check,\n };\n\n return policy;\n}\n","/**\n * Built-in architectural policy helpers.\n */\n\nimport type { Policy, PolicyViolation } from './types';\nimport type { IntentRelationship } from '../intent';\nimport type { GraphEdge } from '../graph';\nimport type { ArchitectureProfile } from '../layers';\nimport { definePolicy } from './definePolicy';\n\nexport interface LayerFlowRule {\n from: string;\n to: string;\n allowed: boolean;\n message?: string;\n}\n\nexport interface LayerPolicyOptions {\n name?: string;\n severity?: 'hard' | 'soft';\n /** Prefix rules — e.g. { from: 'Domain', to: 'Adapter', allowed: false } */\n rules: LayerFlowRule[];\n resolveLayer?: (name: string) => string | undefined;\n}\n\nfunction defaultLayerOf(name: string): string {\n const dot = name.indexOf('.');\n return dot >= 0 ? name.slice(0, dot) : name;\n}\n\nfunction resolveLayer(name: string, options: LayerPolicyOptions): string {\n return options.resolveLayer?.(name) ?? defaultLayerOf(name);\n}\n\nfunction matchesRule(\n fromLayer: string,\n toLayer: string,\n rule: LayerFlowRule\n): boolean {\n return fromLayer === rule.from && toLayer === rule.to;\n}\n\n/**\n * Create a policy that enforces layer-crossing rules on graph edges or intent relationships.\n */\nexport function defineLayerPolicy<Context extends { edges?: GraphEdge[]; relationships?: IntentRelationship[] }>(\n options: LayerPolicyOptions\n): Policy<Context> {\n const name = options.name ?? 'Layer isolation';\n const severity = options.severity ?? 'hard';\n\n return definePolicy<Context>({\n name,\n severity,\n tags: ['layer'],\n check: (ctx) => {\n // Only architectural dependencies — not observed event flows (Domain→Application consumers).\n const edges: Array<{ from: string; to: string }> = [\n ...(ctx.edges ?? [])\n .filter((e) => e.kind === 'declared' || e.kind === 'produces')\n .map((e) => ({ from: e.from, to: e.to })),\n ...(ctx.relationships ?? [])\n .filter((r) => r.kind === 'dependsOn')\n .map((r) => ({ from: r.from, to: r.to })),\n ];\n\n const violations: PolicyViolation[] = [];\n\n for (const edge of edges) {\n const fromLayer = resolveLayer(edge.from, options);\n const toLayer = resolveLayer(edge.to, options);\n\n for (const rule of options.rules) {\n if (!rule.allowed && matchesRule(fromLayer, toLayer, rule)) {\n violations.push({\n policyName: name,\n severity,\n message:\n rule.message ??\n `Layer violation: ${edge.from} (${fromLayer}) must not relate to ${edge.to} (${toLayer})`,\n });\n }\n }\n }\n\n return violations.length > 0 ? violations : true;\n },\n });\n}\n\n/** True when a policy requires graph/registry context to enforce layer rules. */\nexport function isLayerPolicy(policy: Policy): boolean {\n return policy.tags?.includes('layer') ?? false;\n}\n\n/** Preset architectural policy factories. */\nexport const architecturalPolicies = {\n /**\n * @deprecated Use cleanArchitectureMatrix() for full layer rules.\n * Blocks Domain → Adapter declared dependencies only.\n */\n layerIsolation(): Policy<{ edges?: GraphEdge[]; relationships?: IntentRelationship[] }> {\n return architecturalPolicies.cleanArchitectureMatrix();\n },\n\n /**\n * Clean-architecture dependency matrix (declared dependsOn / declared edges only).\n * Does not block observed event flows (Domain events consumed by Application).\n */\n cleanArchitectureMatrix(): Policy<{\n edges?: GraphEdge[];\n relationships?: IntentRelationship[];\n }> {\n return defineLayerPolicy({\n name: 'Clean architecture matrix',\n severity: 'hard',\n rules: [\n { from: 'Domain', to: 'Adapter', allowed: false },\n { from: 'Domain', to: 'Application', allowed: false },\n { from: 'Adapter', to: 'Application', allowed: false },\n { from: 'Adapter', to: 'Domain', allowed: false },\n ],\n });\n },\n};\n\nexport function defineArchitectureProfilePolicy<\n Context extends { edges?: GraphEdge[]; relationships?: IntentRelationship[] },\n>(profile: ArchitectureProfile, options: Omit<LayerPolicyOptions, 'rules' | 'resolveLayer'> = {}): Policy<Context> {\n return defineLayerPolicy<Context>({\n name: options.name ?? `${profile.name} layer policy`,\n severity: options.severity ?? 'hard',\n rules: profile.rules,\n resolveLayer: profile.resolveLayer,\n });\n}\n","/**\n * Helpers for building policy evaluation context on event publish.\n */\n\nimport type { DomainEvent } from '../../domain/types';\nimport type { IntentRegistry } from '../intent/IntentRegistry';\nimport type { IntentRelationship } from '../intent';\nimport type { DependencyGraph, GraphEdge } from '../graph';\nimport type { DefinePolicyOptions, Policy } from '../policy';\nimport { definePolicy } from '../policy';\n\n/**\n * Standard context for policies evaluated during event publish.\n * Includes the event plus optional registry relationships and graph edges\n * so layer policies (e.g. architecturalPolicies.layerIsolation) can run.\n */\nexport interface PublishPolicyContext {\n event: DomainEvent;\n relationships?: IntentRelationship[];\n edges?: GraphEdge[];\n}\n\nexport interface GraphPolicyContext {\n relationships?: IntentRelationship[];\n edges?: GraphEdge[];\n}\n\nexport interface BuildPublishPolicyContextOptions {\n intentRegistry?: IntentRegistry;\n dependencyGraph?: DependencyGraph;\n}\n\n/**\n * Build a getPolicyContext function that feeds registry + graph data to policies.\n *\n * @example\n * ```ts\n * const bus = createEventBus({\n * intentRegistry: registry,\n * dependencyGraph: graph,\n * policies: [architecturalPolicies.layerIsolation()],\n * });\n * ```\n */\nexport function buildPublishPolicyContext(\n options: BuildPublishPolicyContextOptions\n): (event: DomainEvent) => PublishPolicyContext {\n return (event: DomainEvent) => ({\n event,\n relationships: options.intentRegistry?.getAllRelationships(),\n edges: options.dependencyGraph?.getEdges(),\n });\n}\n\nexport function definePublishPolicy(\n options: DefinePolicyOptions<PublishPolicyContext>\n): Policy<PublishPolicyContext> {\n return definePolicy(options);\n}\n","/**\n * Event bus governance errors.\n */\n\nexport class UnregisteredIntentError extends Error {\n readonly intentName: string;\n\n constructor(intentName: string) {\n super(\n `Intent \"${intentName}\" is not registered. Register it with IntentRegistry.define() before publish/subscribe, including metadata.source producer intents in strict mode.`\n );\n this.name = 'UnregisteredIntentError';\n this.intentName = intentName;\n }\n}\n\nexport class InvalidIntentNameError extends Error {\n readonly intentName: string;\n readonly reason: string;\n\n constructor(intentName: string, reason: string) {\n super(`Invalid intent name \"${intentName}\": ${reason}`);\n this.name = 'InvalidIntentNameError';\n this.intentName = intentName;\n this.reason = reason;\n }\n}\n\nexport class LayerPolicyContextError extends Error {\n constructor() {\n super(\n 'Layer/architecture policies require intentRegistry, dependencyGraph, or a custom getPolicyContext. ' +\n 'Without graph/registry context, layer policies cannot inspect relationships.'\n );\n this.name = 'LayerPolicyContextError';\n }\n}\n\nexport class EventContractViolationError extends Error {\n readonly intentName: string;\n readonly issues: unknown[];\n\n constructor(intentName: string, issues: unknown[]) {\n super(\n `Event contract violation for \"${intentName}\". Register a matching event contract/version or fix the payload before publishing.`\n );\n this.name = 'EventContractViolationError';\n this.intentName = intentName;\n this.issues = issues;\n }\n}\n\nexport class UnknownEventSourceError extends Error {\n readonly intentName: string;\n readonly source?: string;\n\n constructor(intentName: string, source?: string) {\n super(\n source\n ? `Event \"${intentName}\" metadata.source \"${source}\" is not registered. Register the producer intent or publish from a known source.`\n : `Event \"${intentName}\" must include metadata.source. Strict Ark uses source to enforce observed layer flow.`\n );\n this.name = 'UnknownEventSourceError';\n this.intentName = intentName;\n this.source = source;\n }\n}\n\nexport class SourceMetadataOverrideError extends Error {\n readonly boundSource: string;\n readonly attemptedSource: string;\n\n constructor(boundSource: string, attemptedSource: string) {\n super(\n `Source-bound publisher for \"${boundSource}\" cannot publish with metadata.source \"${attemptedSource}\". Create a publisher for the intended source instead.`\n );\n this.name = 'SourceMetadataOverrideError';\n this.boundSource = boundSource;\n this.attemptedSource = attemptedSource;\n }\n}\n\n/**\n * Thrown when the OBSERVED producer→event flow crosses a forbidden layer boundary\n * under `enforceObservedLayerFlow: 'hard'`. Unlike declared-model policy errors, this\n * reflects what the running system actually did at publish time.\n */\nexport class ObservedLayerFlowViolationError extends Error {\n readonly source: string;\n readonly intentName: string;\n readonly fromLayer: string;\n readonly toLayer: string;\n\n constructor(\n source: string,\n intentName: string,\n fromLayer: string,\n toLayer: string,\n message?: string\n ) {\n super(\n message ??\n `Observed layer violation: \"${source}\" (${fromLayer}) must not produce \"${intentName}\" (${toLayer}). Route this through an allowed layer or adjust the architecture profile rule.`\n );\n this.name = 'ObservedLayerFlowViolationError';\n this.source = source;\n this.intentName = intentName;\n this.fromLayer = fromLayer;\n this.toLayer = toLayer;\n }\n}\n","/**\n * EventBus implementation.\n *\n * Core publish/subscribe mechanics with:\n * - Intent-aware typing via creators\n * - Automatic metadata enrichment\n * - Full publish history for observability\n * - Strict registry validation (opt-in by default when registry provided)\n */\n\nimport type {\n DomainEvent,\n EventMetadata,\n IntentName,\n} from '../../domain/types';\nimport type {\n EventBus,\n EventBusOptions,\n EventHandler,\n EventInterceptor,\n EventInterceptionInfo,\n EventPayloadPatch,\n EventPublisher,\n IntentCreator,\n ObservedLayerFlowMode,\n PublishedEventRecord,\n TraceRecord,\n TraceSink,\n Unsubscribe,\n} from './types';\nimport type { IntentRegistry } from '../intent/IntentRegistry';\nimport type { DependencyGraph } from '../graph';\nimport type { ArchitectureProfile } from '../layers';\nimport type { AuditRecordType, AuditTrail } from '../audit';\nimport type { EventContractRegistry } from '../event-contracts';\nimport type { OutboxStore } from '../outbox';\nimport { validateIntentName } from '../intent/validateIntentName';\nimport {\n PolicyEngine,\n PolicyViolationError,\n isLayerPolicy,\n type PolicyEvaluationResult,\n} from '../policy';\nimport { buildPublishPolicyContext } from './policyContext';\nimport {\n UnregisteredIntentError,\n InvalidIntentNameError,\n LayerPolicyContextError,\n EventContractViolationError,\n UnknownEventSourceError,\n ObservedLayerFlowViolationError,\n SourceMetadataOverrideError,\n} from './errors';\n\ninterface InternalSubscription {\n intentName: string;\n handler: EventHandler<IntentName, unknown>;\n}\n\ninterface InternalInterceptor {\n registrationId: string;\n interceptorId: string;\n intentName: string;\n interceptor: EventInterceptor<IntentName, unknown>;\n createdAt: string;\n lastInterceptedAt?: string;\n}\n\nlet interceptorSequence = 0;\n\nfunction nextInterceptorRegistrationId(): string {\n interceptorSequence += 1;\n return `interceptor-${Date.now()}-${interceptorSequence}`;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction clonePatchValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(clonePatchValue);\n if (isPlainRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [key, clonePatchValue(child)])\n );\n }\n return value;\n}\n\nfunction mergeRecordPatch(\n target: Record<string, unknown>,\n patch: Record<string, unknown>,\n path = 'payload'\n): Record<string, unknown> {\n const next = { ...target };\n\n for (const [key, value] of Object.entries(patch)) {\n const childPath = `${path}.${key}`;\n if (!(key in next) || next[key] === undefined) {\n next[key] = clonePatchValue(value);\n continue;\n }\n\n if (isPlainRecord(next[key]) && isPlainRecord(value)) {\n next[key] = mergeRecordPatch(next[key] as Record<string, unknown>, value, childPath);\n continue;\n }\n\n if (Array.isArray(next[key]) && Array.isArray(value)) {\n next[key] = mergeArrayPatch(next[key] as unknown[], value, childPath);\n continue;\n }\n\n throw new Error(`Interceptor patch cannot overwrite existing ${childPath}.`);\n }\n\n return next;\n}\n\nfunction mergeArrayPatch(\n target: unknown[],\n patch: unknown[],\n path = 'payload'\n): unknown[] {\n const next = [...target];\n\n patch.forEach((value, index) => {\n const childPath = `${path}[${index}]`;\n if (index >= next.length || next[index] === undefined) {\n next[index] = clonePatchValue(value);\n return;\n }\n\n if (isPlainRecord(next[index]) && isPlainRecord(value)) {\n next[index] = mergeRecordPatch(next[index] as Record<string, unknown>, value, childPath);\n return;\n }\n\n if (Array.isArray(next[index]) && Array.isArray(value)) {\n next[index] = mergeArrayPatch(next[index] as unknown[], value, childPath);\n return;\n }\n\n throw new Error(`Interceptor patch cannot overwrite existing ${childPath}.`);\n });\n\n return next;\n}\n\nfunction applyPayloadPatch(payload: unknown, patch: EventPayloadPatch): unknown {\n if (Array.isArray(patch)) {\n if (payload === undefined) return clonePatchValue(patch);\n if (!Array.isArray(payload)) {\n throw new Error('Array interceptor patch requires an array payload.');\n }\n return mergeArrayPatch(payload, patch);\n }\n\n if (payload === undefined) return clonePatchValue(patch);\n if (!isPlainRecord(payload)) {\n throw new Error('Object interceptor patch requires an object payload.');\n }\n return mergeRecordPatch(payload, patch);\n}\n\nexport class EventBusImpl<Context = unknown> implements EventBus {\n private readonly subscriptions: InternalSubscription[] = [];\n private readonly subscriptionsByIntent = new Map<string, InternalSubscription[]>();\n private readonly interceptors: InternalInterceptor[] = [];\n private readonly interceptorsByIntent = new Map<string, InternalInterceptor[]>();\n private readonly history: PublishedEventRecord[] = [];\n private readonly trace: TraceRecord[] = [];\n private readonly onPublish?: (event: DomainEvent) => void | Promise<void>;\n private readonly onSoftViolation?: EventBusOptions<Context>['onSoftViolation'];\n private readonly onHandlerError?: EventBusOptions<Context>['onHandlerError'];\n private readonly auditTrail?: AuditTrail;\n private readonly eventContracts?: EventContractRegistry;\n private readonly strictEventContracts: boolean;\n private readonly requireKnownSource: boolean;\n private readonly architectureProfile?: ArchitectureProfile;\n private readonly enforceObservedLayerFlowMode: ObservedLayerFlowMode;\n private readonly outbox?: OutboxStore;\n private readonly instanceId?: string;\n private readonly traceSinks: TraceSink[];\n private readonly rethrowHandlerErrors: boolean;\n private readonly policyEngine?: PolicyEngine<Context>;\n private readonly getPolicyContext: (event: DomainEvent) => Context;\n private readonly maxHistorySize?: number;\n private readonly intentRegistry?: IntentRegistry;\n private readonly dependencyGraph?: DependencyGraph;\n private readonly strictRegistry: boolean;\n private readonly validateIntentNaming: boolean;\n\n constructor(options: EventBusOptions<Context> = {}) {\n this.onPublish = options.onPublish;\n this.onSoftViolation = options.onSoftViolation;\n this.onHandlerError = options.onHandlerError;\n this.auditTrail = options.auditTrail;\n this.eventContracts = options.eventContracts;\n this.strictEventContracts = options.strictEventContracts ?? false;\n this.requireKnownSource = options.requireKnownSource ?? false;\n this.architectureProfile = options.architectureProfile;\n this.enforceObservedLayerFlowMode = options.enforceObservedLayerFlow ?? 'off';\n this.outbox = options.outbox;\n this.instanceId = options.instanceId;\n this.traceSinks = [...(options.traceSinks ?? [])];\n this.rethrowHandlerErrors = options.rethrowHandlerErrors ?? false;\n this.maxHistorySize = options.maxHistorySize;\n this.intentRegistry = options.intentRegistry;\n this.dependencyGraph = options.dependencyGraph;\n this.strictRegistry =\n options.strictRegistry ?? options.intentRegistry !== undefined;\n this.validateIntentNaming =\n options.validateIntentNaming ?? this.strictRegistry;\n\n if (options.policyEngine) {\n this.policyEngine = options.policyEngine;\n } else if (options.policies && options.policies.length > 0) {\n this.policyEngine = new PolicyEngine(options.policies);\n }\n\n const allPolicies =\n this.policyEngine?.getPolicies() ?? options.policies ?? [];\n if (\n allPolicies.some(isLayerPolicy) &&\n !options.intentRegistry &&\n !options.dependencyGraph &&\n !options.getPolicyContext\n ) {\n throw new LayerPolicyContextError();\n }\n\n if (options.getPolicyContext) {\n this.getPolicyContext = options.getPolicyContext;\n } else if (options.intentRegistry || options.dependencyGraph) {\n this.getPolicyContext = buildPublishPolicyContext({\n intentRegistry: options.intentRegistry,\n dependencyGraph: options.dependencyGraph,\n }) as (event: DomainEvent) => Context;\n } else {\n this.getPolicyContext = (event) => ({ event } as Context);\n }\n }\n\n async publish<N extends IntentName, P>(\n eventOrCreator: DomainEvent<N, P> | IntentCreator<N, P>,\n payloadOrMeta?: P | Partial<EventMetadata>,\n metadata?: Partial<EventMetadata>\n ): Promise<void> {\n let event: DomainEvent<N, P>;\n const rawPublish = typeof eventOrCreator !== 'function';\n\n if (!rawPublish) {\n const creator = eventOrCreator as IntentCreator<N, P>;\n const payload = payloadOrMeta as P;\n const extraMeta = metadata ?? {};\n const created = creator(payload);\n event = {\n ...created,\n metadata: this.enrichMetadata(created.metadata, extraMeta),\n } as DomainEvent<N, P>;\n } else {\n const rawEvent = eventOrCreator as DomainEvent<N, P>;\n const extraMeta =\n (metadata as Partial<EventMetadata>) ??\n (payloadOrMeta as Partial<EventMetadata>) ??\n {};\n event = {\n ...rawEvent,\n metadata: this.enrichMetadata(rawEvent.metadata, extraMeta),\n };\n }\n\n if (rawPublish && this.strictRegistry) {\n await this.recordRawPublishDiagnostic(event as DomainEvent);\n }\n\n this.assertIntentAllowed(event.intent);\n this.assertSourceAllowed(event as DomainEvent);\n this.assertContractAllowed(event as DomainEvent);\n event = await this.applyInterceptors(event as DomainEvent<N, P>);\n this.assertContractAllowed(event as DomainEvent);\n // Enforce BEFORE recording the observed edge: in hard mode a rejected flow must not\n // leave a phantom edge in the graph that pollutes drift/manifest/observability reports.\n await this.assertObservedLayerFlowAllowed(event as DomainEvent);\n this.dependencyGraph?.registerEventFlow(event.metadata.source, event.intent);\n\n const matching = [...(this.subscriptionsByIntent.get(event.intent) ?? [])];\n\n if (this.policyEngine) {\n const ctx = this.getPolicyContext(event as DomainEvent);\n let policyResult: PolicyEvaluationResult;\n try {\n policyResult = this.policyEngine.enforce(ctx);\n } catch (err) {\n if (err instanceof PolicyViolationError) {\n this.appendTrace({\n type: 'policy.hardViolation',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: { violations: err.violations },\n });\n await this.recordAudit('policy.hardViolation', event as DomainEvent, {\n violations: err.violations,\n });\n }\n throw err;\n }\n\n if (policyResult.softViolations.length > 0) {\n this.appendTrace({\n type: 'policy.softViolation',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: { violations: policyResult.softViolations },\n });\n await this.recordAudit('policy.softViolation', event as DomainEvent, {\n violations: policyResult.softViolations,\n });\n\n if (this.onSoftViolation) {\n await this.safeHook(\n () => this.onSoftViolation!(policyResult, event as DomainEvent),\n 'onSoftViolation',\n event as DomainEvent\n );\n }\n }\n }\n\n const record: PublishedEventRecord = {\n event: event as DomainEvent,\n publishedAt: new Date().toISOString(),\n subscribersNotified: matching.length,\n };\n this.appendHistory(record);\n await this.outbox?.enqueue(event as DomainEvent);\n\n this.appendTrace({\n type: 'event.published',\n timestamp: record.publishedAt,\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: { subscribersNotified: matching.length },\n });\n await this.recordAudit('event.published', event as DomainEvent, {\n subscribersNotified: matching.length,\n });\n\n const notifications = matching.map((sub) =>\n this.invokeHandler(sub, event as DomainEvent)\n );\n\n await Promise.all(notifications);\n\n if (this.onPublish) {\n await this.safeHook(\n () => this.onPublish!(event as DomainEvent),\n 'onPublish',\n event as DomainEvent\n );\n }\n }\n\n createPublisher<N extends IntentName, P>(\n source: N | IntentCreator<N, P>\n ): EventPublisher {\n const sourceName =\n typeof source === 'string' ? source : (source as IntentCreator<N, P>).name;\n\n this.assertIntentAllowed(sourceName);\n\n return {\n source: sourceName,\n publish: async <EventName extends IntentName, Payload>(\n intent: IntentCreator<EventName, Payload>,\n payload: Payload,\n metadata: Partial<EventMetadata> = {}\n ) => {\n if (metadata.source && metadata.source !== sourceName) {\n throw new SourceMetadataOverrideError(sourceName, metadata.source);\n }\n await this.publish(intent, payload, {\n ...metadata,\n source: sourceName,\n });\n },\n };\n }\n\n subscribe<N extends IntentName, P>(\n intent: N | IntentCreator<N, P>,\n handler: EventHandler<N, P>\n ): Unsubscribe {\n const intentName =\n typeof intent === 'string' ? intent : (intent as IntentCreator<N, P>).name;\n\n this.assertIntentAllowed(intentName);\n\n const sub: InternalSubscription = {\n intentName,\n handler: handler as EventHandler<IntentName, unknown>,\n };\n\n this.subscriptions.push(sub);\n const subscriptionsForIntent = this.subscriptionsByIntent.get(intentName) ?? [];\n subscriptionsForIntent.push(sub);\n this.subscriptionsByIntent.set(intentName, subscriptionsForIntent);\n\n return () => {\n const idx = this.subscriptions.indexOf(sub);\n if (idx >= 0) this.subscriptions.splice(idx, 1);\n\n const byIntent = this.subscriptionsByIntent.get(intentName);\n if (!byIntent) return;\n\n const intentIdx = byIntent.indexOf(sub);\n if (intentIdx >= 0) byIntent.splice(intentIdx, 1);\n if (byIntent.length === 0) this.subscriptionsByIntent.delete(intentName);\n };\n }\n\n registerInterceptor<N extends IntentName, P>(\n intent: N | IntentCreator<N, P>,\n interceptor: EventInterceptor<N, P>,\n interceptorId?: string\n ): string {\n const intentName =\n typeof intent === 'string' ? intent : (intent as IntentCreator<N, P>).name;\n\n this.assertIntentAllowed(intentName);\n\n const registration: InternalInterceptor = {\n registrationId: nextInterceptorRegistrationId(),\n interceptorId: interceptorId ?? intentName,\n intentName,\n interceptor: interceptor as EventInterceptor<IntentName, unknown>,\n createdAt: new Date().toISOString(),\n };\n\n this.interceptors.push(registration);\n const interceptorsForIntent = this.interceptorsByIntent.get(intentName) ?? [];\n interceptorsForIntent.push(registration);\n this.interceptorsByIntent.set(intentName, interceptorsForIntent);\n\n return registration.registrationId;\n }\n\n unregisterInterceptor(registrationId: string): boolean {\n const interceptor = this.interceptors.find(\n (candidate) => candidate.registrationId === registrationId\n );\n if (!interceptor) return false;\n\n const idx = this.interceptors.indexOf(interceptor);\n if (idx >= 0) this.interceptors.splice(idx, 1);\n\n const byIntent = this.interceptorsByIntent.get(interceptor.intentName);\n if (byIntent) {\n const intentIdx = byIntent.indexOf(interceptor);\n if (intentIdx >= 0) byIntent.splice(intentIdx, 1);\n if (byIntent.length === 0) this.interceptorsByIntent.delete(interceptor.intentName);\n }\n\n return true;\n }\n\n listInterceptors(intent?: string): EventInterceptionInfo[] {\n return this.interceptors\n .filter((interceptor) => !intent || interceptor.intentName === intent)\n .map((interceptor) => ({\n registrationId: interceptor.registrationId,\n interceptorId: interceptor.interceptorId,\n intent: interceptor.intentName,\n createdAt: interceptor.createdAt,\n lastInterceptedAt: interceptor.lastInterceptedAt,\n }));\n }\n\n getHistory(): PublishedEventRecord[] {\n return [...this.history];\n }\n\n clearHistory(): void {\n this.history.length = 0;\n }\n\n getTrace(): TraceRecord[] {\n return [...this.trace];\n }\n\n clearTrace(): void {\n this.trace.length = 0;\n }\n\n private assertIntentAllowed(intentName: string): void {\n if (!this.strictRegistry && !this.validateIntentNaming) {\n return;\n }\n\n if (this.validateIntentNaming) {\n const validation = validateIntentName(intentName);\n if (!validation.valid) {\n throw new InvalidIntentNameError(intentName, validation.reason!);\n }\n }\n\n if (this.strictRegistry && this.intentRegistry && !this.intentRegistry.has(intentName)) {\n throw new UnregisteredIntentError(intentName);\n }\n }\n\n private assertSourceAllowed(event: DomainEvent): void {\n if (!this.requireKnownSource) return;\n if (!event.metadata.source || event.metadata.source === 'unknown') {\n throw new UnknownEventSourceError(event.intent);\n }\n if (this.intentRegistry && !this.intentRegistry.has(event.metadata.source)) {\n throw new UnknownEventSourceError(event.intent, event.metadata.source);\n }\n }\n\n private assertContractAllowed(event: DomainEvent): void {\n if (!this.eventContracts) return;\n const result = this.eventContracts.validate(event);\n\n if (!result.ok && (this.strictEventContracts || result.contract)) {\n throw new EventContractViolationError(event.intent, result.issues);\n }\n }\n\n /**\n * Enforce the OBSERVED producer→event flow (metadata.source → intent) against the\n * architecture profile's layer rules. This is the runtime counterpart to the\n * declared-model layer policy: it checks what the system actually did, resolving both\n * layers directly from the profile. It runs BEFORE the flow is recorded via\n * registerEventFlow, so in hard mode a rejected flow leaves no edge in the graph.\n */\n private async assertObservedLayerFlowAllowed(event: DomainEvent): Promise<void> {\n if (this.enforceObservedLayerFlowMode === 'off' || !this.architectureProfile) {\n return;\n }\n\n const source = event.metadata.source;\n if (!source || source === 'unknown') return;\n\n const profile = this.architectureProfile;\n const fromLayer = profile.resolveLayer(source);\n const toLayer = profile.resolveLayer(event.intent);\n if (!fromLayer || !toLayer) return;\n\n const blocked = profile.rules.find(\n (rule) => !rule.allowed && rule.from === fromLayer && rule.to === toLayer\n );\n if (!blocked) return;\n\n const severity = this.enforceObservedLayerFlowMode;\n const message =\n blocked.message ??\n `Observed layer violation: \"${source}\" (${fromLayer}) must not produce \"${event.intent}\" (${toLayer}).`;\n const details = {\n source,\n intent: event.intent,\n fromLayer,\n toLayer,\n severity,\n message,\n rule: blocked,\n };\n\n this.appendTrace({\n type: 'layer.observedViolation',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details,\n });\n await this.recordAudit('layer.observedViolation', event, details);\n\n if (severity === 'hard') {\n throw new ObservedLayerFlowViolationError(source, event.intent, fromLayer, toLayer, message);\n }\n }\n\n private async recordRawPublishDiagnostic(event: DomainEvent): Promise<void> {\n const details = {\n intent: event.intent,\n source: event.metadata.source,\n suggestion:\n 'Publish through a registered intent creator so strict registry, contracts, and agent tooling share one source of truth.',\n };\n this.appendTrace({\n type: 'event.rawPublish',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details,\n });\n await this.recordAudit('event.rawPublish', event, details);\n }\n\n private async applyInterceptors<N extends IntentName, P>(\n event: DomainEvent<N, P>\n ): Promise<DomainEvent<N, P>> {\n if (event.metadata.allowInterception === false) {\n return event;\n }\n\n const matching = [...(this.interceptorsByIntent.get(event.intent) ?? [])];\n let current = event as DomainEvent<N, P>;\n\n for (const registration of matching) {\n const patches: EventPayloadPatch[] = [];\n try {\n await Promise.resolve(\n registration.interceptor({\n event: current as Readonly<DomainEvent<IntentName, unknown>>,\n intercept: (patch) => {\n patches.push(patch);\n },\n })\n );\n\n if (patches.length === 0) {\n continue;\n }\n\n const timestamp = new Date().toISOString();\n let candidate = {\n ...current,\n metadata: {\n ...current.metadata,\n interceptions: [\n ...(current.metadata.interceptions ?? []),\n { interceptorId: registration.interceptorId, timestamp },\n ],\n },\n } as DomainEvent<N, P>;\n\n for (const patch of patches) {\n candidate = {\n ...candidate,\n payload: applyPayloadPatch(candidate.payload, patch) as P,\n metadata: { ...candidate.metadata },\n };\n }\n\n this.assertContractAllowed(candidate as DomainEvent);\n current = candidate;\n registration.lastInterceptedAt = timestamp;\n\n this.appendTrace({\n type: 'event.intercepted',\n timestamp,\n intent: current.intent,\n correlationId: current.metadata.correlationId,\n traceId: current.metadata.traceId,\n spanId: current.metadata.spanId,\n details: {\n registrationId: registration.registrationId,\n interceptorId: registration.interceptorId,\n patchesApplied: patches.length,\n },\n });\n await this.recordAudit('event.intercepted', current as DomainEvent, {\n registrationId: registration.registrationId,\n interceptorId: registration.interceptorId,\n patchesApplied: patches.length,\n });\n } catch (err) {\n await this.recordInterceptorError(registration, current as DomainEvent, err);\n }\n }\n\n return current;\n }\n\n private async invokeHandler(\n sub: InternalSubscription,\n event: DomainEvent\n ): Promise<void> {\n try {\n await Promise.resolve(sub.handler(event));\n } catch (err) {\n this.appendTrace({\n type: 'handler.error',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: { error: err instanceof Error ? err.message : String(err) },\n });\n await this.recordAudit('handler.error', event, {\n handlerIntent: sub.intentName,\n error: err instanceof Error ? err.message : String(err),\n });\n\n if (this.onHandlerError) {\n await this.safeHook(\n () => this.onHandlerError!(err, event, sub.intentName),\n 'onHandlerError',\n event\n );\n }\n\n if (this.rethrowHandlerErrors) {\n throw err;\n }\n }\n }\n\n private async safeHook(\n fn: () => void | Promise<void>,\n hookName: string,\n event: DomainEvent\n ): Promise<void> {\n try {\n await Promise.resolve(fn());\n } catch (err) {\n this.appendTrace({\n type: 'hook.error',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: {\n hook: hookName,\n error: err instanceof Error ? err.message : String(err),\n },\n });\n await this.recordAudit('hook.error', event, {\n hook: hookName,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n private async recordInterceptorError(\n interceptor: InternalInterceptor,\n event: DomainEvent,\n error: unknown\n ): Promise<void> {\n const message = error instanceof Error ? error.message : String(error);\n this.appendTrace({\n type: 'interceptor.error',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: {\n registrationId: interceptor.registrationId,\n interceptorId: interceptor.interceptorId,\n error: message,\n },\n });\n await this.recordAudit('interceptor.error', event, {\n registrationId: interceptor.registrationId,\n interceptorId: interceptor.interceptorId,\n error: message,\n });\n }\n\n private appendHistory(record: PublishedEventRecord): void {\n this.history.push(record);\n if (\n this.maxHistorySize !== undefined &&\n this.history.length > this.maxHistorySize\n ) {\n this.history.splice(0, this.history.length - this.maxHistorySize);\n }\n }\n\n private appendTrace(record: TraceRecord): void {\n this.trace.push(record);\n if (\n this.maxHistorySize !== undefined &&\n this.trace.length > this.maxHistorySize\n ) {\n this.trace.splice(0, this.trace.length - this.maxHistorySize);\n }\n for (const sink of this.traceSinks) {\n try {\n sink(record);\n } catch {\n /* Trace sinks must not affect publish semantics. */\n }\n }\n }\n\n private async recordAudit(\n type: AuditRecordType,\n event: DomainEvent,\n details?: unknown\n ): Promise<void> {\n if (!this.auditTrail) return;\n try {\n await this.auditTrail.record({\n type,\n source: event.metadata.source,\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n causationId: event.metadata.causationId,\n subject: event.intent,\n details,\n });\n } catch (err) {\n this.appendTrace({\n type: 'hook.error',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: {\n hook: 'auditTrail',\n error: err instanceof Error ? err.message : String(err),\n },\n });\n }\n }\n\n private enrichMetadata(\n base: EventMetadata,\n extra: Partial<EventMetadata>\n ): EventMetadata {\n return {\n ...base,\n ...extra,\n occurredAt:\n extra.occurredAt || base.occurredAt || new Date().toISOString(),\n source: extra.source || base.source || 'unknown',\n kernelInstanceId:\n extra.kernelInstanceId ?? base.kernelInstanceId ?? this.instanceId,\n eventVersion: extra.eventVersion ?? base.eventVersion,\n schemaVersion: extra.schemaVersion ?? base.schemaVersion,\n allowInterception:\n extra.allowInterception ?? base.allowInterception,\n interceptions:\n extra.interceptions ?? base.interceptions,\n correlationId: extra.correlationId ?? base.correlationId,\n causationId: extra.causationId ?? base.causationId,\n traceId: extra.traceId ?? base.traceId,\n spanId: extra.spanId ?? base.spanId,\n parentSpanId: extra.parentSpanId ?? base.parentSpanId,\n };\n }\n}\n\nexport function createEventBus<Context = unknown>(\n options?: EventBusOptions<Context>\n): EventBus {\n return new EventBusImpl(options);\n}\n","import type { DomainEvent } from '../../domain/types';\nimport type {\n EventContract,\n EventContractIssue,\n EventPayloadSchema,\n EventContractRegistry,\n EventContractValidationResult,\n EventSchemaField,\n EventSchemaFieldType,\n StandardSchemaIssue,\n} from './types';\n\nfunction formatStandardSchemaPath(\n path: StandardSchemaIssue['path']\n): string | undefined {\n if (!path || path.length === 0) return undefined;\n return path\n .map((segment) =>\n typeof segment === 'object' && segment !== null && 'key' in segment\n ? String(segment.key)\n : String(segment)\n )\n .join('.');\n}\n\nfunction actualType(value: unknown): EventSchemaFieldType {\n if (Array.isArray(value)) return 'array';\n if (value === null) return 'object';\n const type = typeof value;\n if (type === 'string' || type === 'number' || type === 'boolean' || type === 'object') {\n return type;\n }\n return 'unknown';\n}\n\nfunction formatPath(parent: string | undefined, field: string): string {\n return parent ? `${parent}.${field}` : field;\n}\n\nfunction validateSchemaField(\n value: unknown,\n fieldSchema: EventSchemaField,\n path: string,\n contract: EventContract,\n issues: EventContractIssue[]\n): void {\n const valueType = actualType(value);\n\n if (fieldSchema.type !== 'unknown' && valueType !== fieldSchema.type) {\n issues.push({\n intent: contract.intent,\n version: contract.version,\n field: path,\n message: `Expected ${fieldSchema.type}, received ${valueType}.`,\n });\n return;\n }\n\n if (\n fieldSchema.enum &&\n !fieldSchema.enum.some((allowed) => Object.is(allowed, value))\n ) {\n issues.push({\n intent: contract.intent,\n version: contract.version,\n field: path,\n message: 'Value is not allowed by event contract enum.',\n });\n }\n\n if (fieldSchema.type === 'object' && fieldSchema.fields) {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n issues.push({\n intent: contract.intent,\n version: contract.version,\n field: path,\n message: 'Nested object field must be a non-array object.',\n });\n return;\n }\n validateObjectSchema(\n value as Record<string, unknown>,\n fieldSchema.fields,\n contract,\n issues,\n path\n );\n }\n\n if (fieldSchema.type === 'array' && fieldSchema.items && Array.isArray(value)) {\n value.forEach((item, index) => {\n validateSchemaField(\n item,\n fieldSchema.items!,\n `${path}[${index}]`,\n contract,\n issues\n );\n });\n }\n}\n\nfunction validateObjectSchema(\n payload: Record<string, unknown>,\n schema: EventPayloadSchema,\n contract: EventContract,\n issues: EventContractIssue[],\n parentPath?: string\n): void {\n for (const [field, fieldSchema] of Object.entries(schema)) {\n const path = formatPath(parentPath, field);\n const value = payload[field];\n if (value === undefined) {\n if (fieldSchema.required) {\n issues.push({\n intent: contract.intent,\n version: contract.version,\n field: path,\n message: 'Required field is missing.',\n });\n }\n continue;\n }\n\n validateSchemaField(value, fieldSchema, path, contract, issues);\n }\n}\n\nexport class EventContractRegistryImpl implements EventContractRegistry {\n private readonly contracts = new Map<string, EventContract>();\n\n register(contract: EventContract): void {\n const key = this.key(contract.intent, contract.version);\n if (this.contracts.has(key)) {\n throw new Error(`Event contract \"${key}\" is already registered.`);\n }\n this.contracts.set(key, { allowAdditionalFields: true, ...contract });\n }\n\n get(intent: string, version?: string): EventContract | undefined {\n if (version) return this.contracts.get(this.key(intent, version));\n return this.list(intent).at(-1);\n }\n\n list(intent?: string): EventContract[] {\n return Array.from(this.contracts.values()).filter(\n (contract) => !intent || contract.intent === intent\n );\n }\n\n validate(event: DomainEvent): EventContractValidationResult {\n const version = event.metadata.eventVersion;\n const contract = this.get(event.intent, version);\n const issues: EventContractIssue[] = [];\n\n if (!contract) {\n return {\n ok: false,\n issues: [\n {\n intent: event.intent,\n version,\n message: version\n ? `No event contract registered for version \"${version}\".`\n : 'No event contract registered for intent.',\n },\n ],\n };\n }\n\n if (contract.deprecated) {\n issues.push({\n intent: event.intent,\n version: contract.version,\n message:\n typeof contract.deprecated === 'string'\n ? contract.deprecated\n : 'Event contract is deprecated.',\n });\n }\n\n const payload =\n event.payload != null && typeof event.payload === 'object'\n ? (event.payload as Record<string, unknown>)\n : undefined;\n\n if (contract.schema) {\n if (!payload) {\n issues.push({\n intent: event.intent,\n version: contract.version,\n message: 'Payload must be an object for schema validation.',\n });\n } else {\n validateObjectSchema(payload, contract.schema, contract, issues);\n\n if (contract.allowAdditionalFields === false) {\n for (const field of Object.keys(payload)) {\n if (!contract.schema[field]) {\n issues.push({\n intent: event.intent,\n version: contract.version,\n field,\n message: 'Additional field is not allowed by event contract.',\n });\n }\n }\n }\n }\n }\n\n if (contract.standardSchema) {\n const result = contract.standardSchema['~standard'].validate(event.payload);\n if (result instanceof Promise) {\n issues.push({\n intent: event.intent,\n version: contract.version,\n message:\n 'Standard Schema validator returned a Promise; event contract validation is synchronous.',\n });\n } else if (result.issues) {\n for (const issue of result.issues) {\n issues.push({\n intent: event.intent,\n version: contract.version,\n field: formatStandardSchemaPath(issue.path),\n message: issue.message,\n });\n }\n }\n }\n\n return { ok: issues.length === 0, contract, issues };\n }\n\n clear(): void {\n this.contracts.clear();\n }\n\n private key(intent: string, version: string): string {\n return `${intent}@${version}`;\n }\n}\n\nexport function createEventContractRegistry(): EventContractRegistry {\n return new EventContractRegistryImpl();\n}\n","import type { DomainEvent } from '../../domain/types';\nimport type { OutboxRecord, OutboxStatus, OutboxStore } from './types';\n\nlet outboxSequence = 0;\n\nfunction nextOutboxId(): string {\n outboxSequence += 1;\n return `outbox-${Date.now()}-${outboxSequence}`;\n}\n\nfunction cloneRecord(record: OutboxRecord): OutboxRecord {\n return {\n ...record,\n event: {\n ...record.event,\n metadata: { ...record.event.metadata },\n },\n };\n}\n\nexport class InMemoryOutboxStore implements OutboxStore {\n private readonly records = new Map<string, OutboxRecord>();\n\n async enqueue(event: DomainEvent): Promise<OutboxRecord> {\n const now = new Date().toISOString();\n const record: OutboxRecord = {\n id: nextOutboxId(),\n event,\n status: 'pending',\n attempts: 0,\n createdAt: now,\n updatedAt: now,\n };\n this.records.set(record.id, record);\n return cloneRecord(record);\n }\n\n async markDispatched(id: string): Promise<void> {\n const record = this.records.get(id);\n if (!record) return;\n record.status = 'dispatched';\n record.updatedAt = new Date().toISOString();\n }\n\n async markFailed(id: string, error: unknown): Promise<void> {\n const record = this.records.get(id);\n if (!record) return;\n record.status = 'failed';\n record.attempts += 1;\n record.error = error instanceof Error ? error.message : String(error);\n record.updatedAt = new Date().toISOString();\n }\n\n async list(status?: OutboxStatus): Promise<OutboxRecord[]> {\n return Array.from(this.records.values())\n .filter((record) => !status || record.status === status)\n .map(cloneRecord);\n }\n\n async clear(): Promise<void> {\n this.records.clear();\n }\n}\n","import type {\n CreateObservabilityReporterOptions,\n ObservabilityDriftReport,\n ObservabilityFlow,\n ObservabilityReporter,\n} from './types';\n\nfunction flowKey(flow: ObservabilityFlow): string {\n return `${flow.from}->${flow.to}`;\n}\n\nfunction uniqueFlows(flows: ObservabilityFlow[]): ObservabilityFlow[] {\n const seen = new Set<string>();\n const result: ObservabilityFlow[] = [];\n for (const flow of flows) {\n const key = flowKey(flow);\n if (seen.has(key)) continue;\n seen.add(key);\n result.push(flow);\n }\n return result;\n}\n\nfunction difference(left: ObservabilityFlow[], right: ObservabilityFlow[]): ObservabilityFlow[] {\n const rightKeys = new Set(right.map(flowKey));\n return left.filter((flow) => !rightKeys.has(flowKey(flow)));\n}\n\nexport function createObservabilityReporter(\n options: CreateObservabilityReporterOptions\n): ObservabilityReporter {\n const registry = options.registry;\n const eventBus = options.eventBus;\n const graph = options.graph;\n\n return {\n report(): ObservabilityDriftReport {\n const declaredFromRegistry = registry\n ? registry\n .getAllRelationships()\n .filter((relationship) => relationship.kind === 'produces')\n .map((relationship) => ({\n from: relationship.from,\n to: relationship.to,\n }))\n : [];\n\n const declaredFromGraph =\n declaredFromRegistry.length > 0 || !graph\n ? []\n : graph\n .getEdges()\n .filter((edge) => edge.kind === 'produces')\n .map((edge) => ({ from: edge.from, to: edge.to }));\n\n const observedFromHistory =\n eventBus?.getHistory().map((record) => ({\n from: record.event.metadata.source,\n to: record.event.intent,\n })) ?? [];\n\n const observedFromGraph =\n observedFromHistory.length > 0 || !graph\n ? []\n : graph\n .getEdges()\n .filter((edge) => edge.kind === 'observed')\n .map((edge) => ({ from: edge.from, to: edge.to }));\n\n const declaredProductions = uniqueFlows([\n ...declaredFromRegistry,\n ...declaredFromGraph,\n ]);\n const observedProductions = uniqueFlows([\n ...observedFromHistory,\n ...observedFromGraph,\n ]);\n const unknownSources = observedProductions.filter(\n (flow) => !flow.from || flow.from === 'unknown'\n );\n\n const unregisteredObservedSources = registry\n ? Array.from(\n new Set(\n observedProductions\n .map((flow) => flow.from)\n .filter(\n (source) =>\n source &&\n source !== 'unknown' &&\n !registry.has(source)\n )\n )\n )\n : [];\n\n const unregisteredObservedIntents = registry\n ? Array.from(\n new Set(\n observedProductions\n .map((flow) => flow.to)\n .filter((intent) => !registry.has(intent))\n )\n )\n : [];\n\n const observedIntentNames = new Set(\n observedProductions.flatMap((flow) => [flow.from, flow.to])\n );\n const registeredButNeverObserved = registry\n ? registry\n .list()\n .map((intent) => intent.name)\n .filter((intent) => !observedIntentNames.has(intent))\n : [];\n\n return {\n generatedAt: new Date().toISOString(),\n declaredProductions,\n observedProductions,\n declaredButUnobserved: difference(declaredProductions, observedProductions),\n observedButUndeclared: difference(\n observedProductions.filter((flow) => flow.from !== 'unknown'),\n declaredProductions\n ),\n unknownSources,\n unregisteredObservedSources,\n unregisteredObservedIntents,\n registeredButNeverObserved,\n };\n },\n };\n}\n","import type { ArkKernel } from '../runtime';\nimport type { ArkTestHarness, ArkTestSnapshot } from './types';\nimport type { AuditQuery, AuditRecord } from '../audit';\nimport type { DomainEvent } from '../../domain/types';\nimport type { OutboxRecord, OutboxStatus } from '../outbox';\nimport type { TraceRecord, TraceRecordType } from '../event-bus';\n\nexport function createArkTestHarness(kernel: ArkKernel): ArkTestHarness {\n return {\n events(intent?: string): DomainEvent[] {\n return kernel.eventBus\n .getHistory()\n .map((record) => record.event)\n .filter((event) => !intent || event.intent === intent);\n },\n\n traces(type?: TraceRecordType): TraceRecord[] {\n return kernel.eventBus\n .getTrace()\n .filter((record) => !type || record.type === type);\n },\n\n audit(query?: AuditQuery): Promise<AuditRecord[]> {\n return kernel.auditTrail.query(query);\n },\n\n outbox(status?: OutboxStatus): Promise<OutboxRecord[]> {\n return kernel.outbox.list(status);\n },\n\n observability() {\n kernel.syncGraph();\n return kernel.observability.report();\n },\n\n async snapshot(): Promise<ArkTestSnapshot> {\n return {\n events: this.events(),\n traces: this.traces(),\n audit: await this.audit(),\n outbox: await this.outbox(),\n observability: this.observability(),\n };\n },\n\n async clear(): Promise<void> {\n kernel.eventBus.clearHistory();\n kernel.eventBus.clearTrace();\n await kernel.auditTrail.clear();\n await kernel.outbox.clear();\n },\n };\n}\n","import type {\n AuditQuery,\n AuditRecord,\n AuditRecordInput,\n AuditStore,\n AuditTrail,\n CreateAuditTrailOptions,\n} from './types';\n\nlet auditSequence = 0;\n\nfunction createAuditId(): string {\n auditSequence += 1;\n return `audit-${Date.now()}-${auditSequence}`;\n}\n\nfunction matchesQuery(record: AuditRecord, query: AuditQuery): boolean {\n if (query.type && record.type !== query.type) return false;\n if (query.intent && record.intent !== query.intent) return false;\n if (query.correlationId && record.correlationId !== query.correlationId) return false;\n if (query.subject && record.subject !== query.subject) return false;\n if (query.since && record.timestamp < query.since) return false;\n if (query.until && record.timestamp > query.until) return false;\n return true;\n}\n\nexport class InMemoryAuditStore implements AuditStore {\n private readonly records: AuditRecord[] = [];\n\n constructor(private readonly maxRecords?: number) {}\n\n append(record: AuditRecord): void {\n this.records.push(record);\n if (this.maxRecords !== undefined && this.records.length > this.maxRecords) {\n this.records.splice(0, this.records.length - this.maxRecords);\n }\n }\n\n query(query: AuditQuery = {}): AuditRecord[] {\n const records = this.records.filter((record) => matchesQuery(record, query));\n return query.limit === undefined ? [...records] : records.slice(-query.limit);\n }\n\n clear(): void {\n this.records.length = 0;\n }\n}\n\nexport class AuditTrailImpl implements AuditTrail {\n constructor(private readonly store: AuditStore) {}\n\n async record(input: AuditRecordInput): Promise<AuditRecord> {\n const record: AuditRecord = {\n id: createAuditId(),\n timestamp: input.timestamp ?? new Date().toISOString(),\n type: input.type,\n source: input.source,\n actor: input.actor,\n intent: input.intent,\n correlationId: input.correlationId,\n causationId: input.causationId,\n subject: input.subject,\n details: input.details,\n };\n await this.store.append(record);\n return record;\n }\n\n async query(query?: AuditQuery): Promise<AuditRecord[]> {\n return this.store.query(query);\n }\n\n async clear(): Promise<void> {\n await this.store.clear();\n }\n}\n\nexport function createAuditTrail(options: CreateAuditTrailOptions = {}): AuditTrail {\n return new AuditTrailImpl(\n options.store ?? new InMemoryAuditStore(options.maxRecords)\n );\n}\n","/**\n * DependencyGraph implementation.\n *\n * Collects declared and observed relationships.\n * Generates Mermaid diagrams and JSON.\n * Supports simple violation detection via rule functions.\n */\n\nimport type {\n DependencyGraph,\n GraphEdge,\n GraphNode,\n} from './types';\nimport type { ArchitectureProfile } from '../layers';\n\nexport class DependencyGraphImpl implements DependencyGraph {\n private nodes = new Map<string, GraphNode>();\n private edges: GraphEdge[] = [];\n\n registerDependency(\n from: string,\n to: string,\n kind: GraphEdge['kind'] = 'declared'\n ): void {\n this.ensureNode(from);\n this.ensureNode(to);\n this.addEdge({ from, to, kind });\n }\n\n registerEventFlow(producer: string, consumer: string): void {\n this.ensureNode(producer);\n this.ensureNode(consumer);\n this.addEdge({ from: producer, to: consumer, kind: 'observed' });\n }\n\n getNodes(): GraphNode[] {\n return Array.from(this.nodes.values());\n }\n\n getEdges(): GraphEdge[] {\n return [...this.edges];\n }\n\n toJSON() {\n return {\n nodes: this.getNodes(),\n edges: this.getEdges(),\n };\n }\n\n toMermaid(): string {\n let out = 'flowchart TD\\n';\n for (const edge of this.edges) {\n // Valid Mermaid labeled edge syntax: A -->|label| B (no spaces around |label|)\n const label = edge.kind ? `|${edge.kind}|` : '';\n out += ` ${this.safeId(edge.from)} -->${label} ${this.safeId(edge.to)}\\n`;\n }\n // Also list isolated nodes if any\n const connected = new Set(\n this.edges.flatMap((e) => [e.from, e.to])\n );\n for (const node of this.nodes.keys()) {\n if (!connected.has(node)) {\n out += ` ${this.safeId(node)}\\n`;\n }\n }\n return out.trim();\n }\n\n toLayerMermaid(profile: ArchitectureProfile): string {\n const nodesByLayer = new Map<string, string[]>();\n\n for (const node of this.nodes.keys()) {\n const layer = profile.resolveLayer(node) ?? 'Unclassified';\n const current = nodesByLayer.get(layer) ?? [];\n current.push(node);\n nodesByLayer.set(layer, current);\n }\n\n let out = 'flowchart TD\\n';\n for (const layer of profile.layers) {\n const nodes = nodesByLayer.get(layer.name) ?? [];\n if (nodes.length === 0) continue;\n out += ` subgraph ${this.safeId(layer.name)}[${layer.name}]\\n`;\n for (const node of nodes) {\n out += ` ${this.safeId(node)}[${node}]\\n`;\n }\n out += ' end\\n';\n }\n\n const unclassified = nodesByLayer.get('Unclassified') ?? [];\n if (unclassified.length > 0) {\n out += ' subgraph Unclassified[Unclassified]\\n';\n for (const node of unclassified) {\n out += ` ${this.safeId(node)}[${node}]\\n`;\n }\n out += ' end\\n';\n }\n\n for (const edge of this.edges) {\n const label = edge.kind ? `|${edge.kind}|` : '';\n out += ` ${this.safeId(edge.from)} -->${label} ${this.safeId(edge.to)}\\n`;\n }\n\n return out.trim();\n }\n\n detectViolations(\n rules: Array<(edges: GraphEdge[]) => string[]> = []\n ): string[] {\n const violations: string[] = [];\n\n // default simple rule: no cycles (basic)\n const cycles = this.findSimpleCycles();\n if (cycles.length > 0) {\n violations.push(`Cycle detected: ${cycles.map((c) => c.join('->')).join(', ')}`);\n }\n\n // user provided rules\n for (const rule of rules) {\n try {\n const res = rule(this.edges);\n if (res && res.length) violations.push(...res);\n } catch (e) {\n violations.push(`Rule error: ${(e as Error).message}`);\n }\n }\n\n return violations;\n }\n\n private ensureNode(id: string) {\n if (!this.nodes.has(id)) {\n this.nodes.set(id, { id });\n }\n }\n\n private addEdge(edge: GraphEdge) {\n // Avoid exact duplicates\n const exists = this.edges.some(\n (e) => e.from === edge.from && e.to === edge.to && e.kind === edge.kind\n );\n if (!exists) {\n this.edges.push(edge);\n }\n }\n\n // Very naive cycle detection for small graphs\n private findSimpleCycles(): string[][] {\n const graph = new Map<string, string[]>();\n for (const e of this.edges) {\n if (!graph.has(e.from)) graph.set(e.from, []);\n graph.get(e.from)!.push(e.to);\n }\n\n const cycles: string[][] = [];\n const visited = new Set<string>();\n const stack: string[] = [];\n\n const dfs = (node: string) => {\n visited.add(node);\n stack.push(node);\n\n for (const nei of graph.get(node) || []) {\n if (!visited.has(nei)) {\n dfs(nei);\n } else if (stack.includes(nei)) {\n const cycleStart = stack.indexOf(nei);\n const cycle = stack.slice(cycleStart).concat(nei);\n cycles.push(cycle);\n }\n }\n\n stack.pop();\n };\n\n for (const node of graph.keys()) {\n if (!visited.has(node)) dfs(node);\n }\n\n // Dedup cycles (naive)\n const unique = new Set(cycles.map((c) => c.join('->')));\n return Array.from(unique).map((s) => s.split('->'));\n }\n\n private safeId(id: string): string {\n return id.replace(/[^a-zA-Z0-9_]/g, '_');\n }\n}\n\nexport function createDependencyGraph(): DependencyGraph {\n return new DependencyGraphImpl();\n}\n","/**\n * Bridge IntentRegistry relationships into a DependencyGraph.\n */\n\nimport type { IntentRegistry } from '../intent/IntentRegistry';\nimport type { DependencyGraph } from './types';\n\nexport interface SyncRegistryOptions {\n /** Skip edges whose target intent is not registered (default: false). */\n requireRegisteredTargets?: boolean;\n}\n\n/**\n * Sync declared intent relationships from a registry into a dependency graph.\n *\n * - `dependsOn` → `declared` edges\n * - `produces` → `produces` edges\n */\nexport function syncRegistryToGraph(\n registry: IntentRegistry,\n graph: DependencyGraph,\n options: SyncRegistryOptions = {}\n): void {\n const requireRegistered = options.requireRegisteredTargets ?? false;\n\n for (const rel of registry.getAllRelationships()) {\n if (requireRegistered && !registry.has(rel.to)) {\n continue;\n }\n\n if (rel.kind === 'dependsOn') {\n graph.registerDependency(rel.from, rel.to, 'declared');\n } else {\n graph.registerDependency(rel.from, rel.to, 'produces');\n }\n }\n}","import type {\n ArchitectureLayer,\n ArchitectureProfile,\n ArchitectureRule,\n ArkCheckConfig,\n CreateElevenLayerArkConfigOptions,\n CreateArchitectureProfileOptions,\n} from './types';\n\nfunction normalizePrefix(prefix: string): string {\n return prefix.endsWith('.') ? prefix : `${prefix}.`;\n}\n\nfunction byLongestPrefix(a: ArchitectureLayer, b: ArchitectureLayer): number {\n const maxA = Math.max(...a.prefixes.map((p) => p.length));\n const maxB = Math.max(...b.prefixes.map((p) => p.length));\n return maxB - maxA;\n}\n\nfunction flowKey(from: string, to: string): string {\n return `${from}->${to}`;\n}\n\nfunction createStrictDenyRules(\n layers: ArchitectureLayer[],\n allowedFlows: Array<Pick<ArchitectureRule, 'from' | 'to'>>\n): ArchitectureRule[] {\n const allowed = new Set(allowedFlows.map((flow) => flowKey(flow.from, flow.to)));\n const rules: ArchitectureRule[] = [];\n\n for (const from of layers) {\n for (const to of layers) {\n if (from.name === to.name) continue;\n if (allowed.has(flowKey(from.name, to.name))) continue;\n rules.push({ from: from.name, to: to.name, allowed: false });\n }\n }\n\n return rules;\n}\n\nexport function createArchitectureProfile(\n options: CreateArchitectureProfileOptions\n): ArchitectureProfile {\n const layers = options.layers.map((layer) => ({\n ...layer,\n prefixes: layer.prefixes.map(normalizePrefix),\n }));\n const sortedLayers = [...layers].sort(byLongestPrefix);\n const rules: ArchitectureRule[] = [...(options.rules ?? [])];\n\n return {\n name: options.name,\n layers,\n rules,\n resolveLayer(name: string): string | undefined {\n return sortedLayers.find((layer) =>\n layer.prefixes.some((prefix) => name.startsWith(prefix))\n )?.name;\n },\n };\n}\n\nconst elevenLayerProfileLayers: ArchitectureLayer[] = [\n {\n name: 'DomainModel',\n prefixes: ['Domain'],\n description: 'Rich domain model, business rules, and domain events.',\n order: 1,\n },\n {\n name: 'ApplicationOrchestration',\n prefixes: ['Application'],\n description: 'Use cases and command orchestration.',\n order: 2,\n },\n {\n name: 'PersistenceAdapters',\n prefixes: ['Adapter.Persistence', 'Adapter.Repository'],\n description: 'Database, repository, and storage adapters.',\n order: 3,\n },\n {\n name: 'IntegrationAdapters',\n prefixes: ['Adapter.Integration', 'Adapter.External'],\n description: 'External systems, APIs, and integration adapters.',\n order: 4,\n },\n {\n name: 'WorkflowSagaEngine',\n prefixes: ['Workflow'],\n description: 'Sagas, workflows, and long-running processes.',\n order: 5,\n },\n {\n name: 'BackgroundJobsScheduling',\n prefixes: ['Job'],\n description: 'Background jobs, scheduled work, and async processors.',\n order: 6,\n },\n {\n name: 'PresentationAdapters',\n prefixes: ['Presentation', 'Adapter.Presentation', 'Adapter.Api'],\n description: 'API, UI, controller, and presentation adapters.',\n order: 7,\n },\n {\n name: 'ReportingReadModels',\n prefixes: ['Reporting'],\n description: 'Read models, projections, and reporting surfaces.',\n order: 8,\n },\n {\n name: 'ExtensibilityMetadata',\n prefixes: ['Metadata'],\n description: 'Metadata, extensions, and schema contracts.',\n order: 9,\n },\n {\n name: 'SecurityAuditObservability',\n prefixes: ['Security', 'Audit', 'Observability'],\n description: 'Security, audit, and observability concerns.',\n order: 10,\n },\n {\n name: 'Kernel',\n prefixes: ['Kernel'],\n description: 'Ark-owned governance and kernel signals.',\n order: 11,\n },\n];\n\nconst elevenLayerAllowedFlows: Array<Pick<ArchitectureRule, 'from' | 'to'>> = [\n { from: 'PresentationAdapters', to: 'ApplicationOrchestration' },\n { from: 'ApplicationOrchestration', to: 'DomainModel' },\n { from: 'WorkflowSagaEngine', to: 'ApplicationOrchestration' },\n { from: 'WorkflowSagaEngine', to: 'DomainModel' },\n { from: 'BackgroundJobsScheduling', to: 'ApplicationOrchestration' },\n];\n\nexport const elevenLayerProfile = createArchitectureProfile({\n name: 'Ark 11-layer Hexagonal Event-Driven Profile',\n layers: elevenLayerProfileLayers,\n rules: createStrictDenyRules(\n elevenLayerProfileLayers,\n elevenLayerAllowedFlows\n ),\n});\n\nconst defaultElevenLayerDirectories: Record<string, string[]> = {\n DomainModel: ['domain'],\n ApplicationOrchestration: ['application', 'app'],\n PersistenceAdapters: [\n 'adapters/persistence',\n 'adapters/repository',\n 'repositories',\n 'infra/persistence',\n ],\n IntegrationAdapters: ['adapters/integration', 'adapters/external', 'integrations'],\n WorkflowSagaEngine: ['workflows', 'sagas'],\n BackgroundJobsScheduling: ['jobs', 'schedules'],\n PresentationAdapters: ['presentation', 'adapters/presentation', 'adapters/api'],\n ReportingReadModels: ['reporting', 'read-models', 'projections'],\n ExtensibilityMetadata: ['metadata', 'extensions'],\n SecurityAuditObservability: ['security', 'audit', 'observability'],\n Kernel: ['kernel'],\n};\n\nexport function createElevenLayerArkConfig(\n options: CreateElevenLayerArkConfigOptions = {}\n): ArkCheckConfig {\n const rootDir = options.rootDir ?? 'src';\n const optional = options.optionalLayers ?? true;\n const prefix = rootDir === '.' ? '' : `${rootDir}/`;\n\n return {\n include: options.include ?? [rootDir],\n layers: elevenLayerProfile.layers.map((layer) => ({\n name: layer.name,\n patterns: (defaultElevenLayerDirectories[layer.name] ?? [layer.name]).map(\n (directory) => `${prefix}${directory}/**`\n ),\n intentPrefixes: layer.prefixes,\n optional,\n })),\n rules: [...elevenLayerProfile.rules],\n };\n}\n","/**\n * Basic MetadataRegistry implementation.\n */\n\nimport type {\n EntityMeta,\n MetadataIssue,\n MetadataRegistry,\n MetadataRegistrationOptions,\n MetadataValidationResult,\n} from './types';\n\nexport class MetadataRegistryImpl implements MetadataRegistry {\n private entities = new Map<string, EntityMeta>();\n\n entity(\n name: string,\n meta: Omit<EntityMeta, 'name'>,\n options: MetadataRegistrationOptions = {}\n ): EntityMeta {\n if (this.entities.has(name) && !options.allowOverwrite) {\n throw new Error(`Entity metadata \"${name}\" is already registered.`);\n }\n const full: EntityMeta = { name, fields: {}, ...meta };\n this.entities.set(name, full);\n return full;\n }\n\n getEntity(name: string): EntityMeta | undefined {\n return this.entities.get(name);\n }\n\n listEntities(): EntityMeta[] {\n return Array.from(this.entities.values());\n }\n\n findEntitiesByIntent(intentName: string): EntityMeta[] {\n return this.listEntities().filter(\n (entity) =>\n entity.emits?.includes(intentName) || entity.consumes?.includes(intentName)\n );\n }\n\n validate(): MetadataValidationResult {\n const issues: MetadataIssue[] = [];\n\n for (const entity of this.entities.values()) {\n if (!entity.name.trim()) {\n issues.push({ entity: entity.name, message: 'Entity name is required.' });\n }\n\n for (const [fieldName, field] of Object.entries(entity.fields)) {\n if (!fieldName.trim()) {\n issues.push({ entity: entity.name, field: fieldName, message: 'Field name is required.' });\n }\n if (!field.type || typeof field.type !== 'string') {\n issues.push({\n entity: entity.name,\n field: fieldName,\n message: 'Field type must be a non-empty string.',\n });\n }\n if (field.relation && !this.entities.has(field.relation.entity)) {\n issues.push({\n entity: entity.name,\n field: fieldName,\n message: `Related entity \"${field.relation.entity}\" is not registered.`,\n });\n }\n }\n }\n\n return { ok: issues.length === 0, issues };\n }\n\n toJSON(): EntityMeta[] {\n return this.listEntities();\n }\n}\n\nexport function createMetadataRegistry(): MetadataRegistry {\n return new MetadataRegistryImpl();\n}\n","/**\n * Ports and Adapters utilities.\n *\n * definePort + createAdapter with basic runtime contract validation.\n */\n\nimport type {\n Adapter,\n AdapterGovernanceResult,\n ContractCheckResult,\n CreateAdapterOptions,\n DefinePortOptions,\n Port,\n} from './types';\n\nexport function definePort<T = unknown>(\n name: string,\n options: DefinePortOptions = {}\n): Port<T> {\n return {\n name,\n ownerLayer: options.ownerLayer,\n intent: options.intent,\n allowedAdapters: options.allowedAdapters\n ? [...options.allowedAdapters]\n : undefined,\n } as Port<T>;\n}\n\nexport function createAdapter<T>(\n port: Port<T>,\n impl: T,\n requiredKeysOrOptions?: string[] | CreateAdapterOptions,\n adapterOptions: CreateAdapterOptions = {}\n): Adapter<T> {\n const options = Array.isArray(requiredKeysOrOptions)\n ? { ...adapterOptions, requiredKeys: requiredKeysOrOptions }\n : { ...(requiredKeysOrOptions ?? {}) };\n const requiredKeys = options.requiredKeys;\n\n if (requiredKeys && requiredKeys.length > 0) {\n const missing = requiredKeys.filter((k) => !hasMember(impl, k));\n if (missing.length > 0) {\n throw new Error(\n `Adapter for port \"${port.name}\" is missing required members: ${missing.join(', ')}`\n );\n }\n }\n\n const adapter: Adapter<T> = {\n name: options.name,\n layer: options.layer,\n intent: options.intent,\n port,\n impl,\n };\n const governance = checkAdapterGovernance(adapter);\n if (!governance.ok) {\n throw new Error(governance.issues.map((issue) => issue.message).join('\\n'));\n }\n return adapter;\n}\n\nexport function checkContract(\n impl: unknown,\n requiredKeys: string[] = []\n): ContractCheckResult {\n const missing = requiredKeys.filter((k) => !hasMember(impl, k));\n return missing.length === 0 ? { ok: true } : { ok: false, missing };\n}\n\nexport function checkAdapterGovernance(adapter: Adapter): AdapterGovernanceResult {\n const allowed = adapter.port.allowedAdapters ?? [];\n if (allowed.length === 0) {\n return { ok: true, issues: [] };\n }\n\n const adapterNames = [adapter.name, adapter.intent].filter(\n (value): value is string => typeof value === 'string' && value.length > 0\n );\n const matched = adapterNames.some((name) => allowed.includes(name));\n if (matched) {\n return { ok: true, issues: [] };\n }\n\n return {\n ok: false,\n issues: [\n {\n ruleId: 'ADAPTER_NOT_ALLOWED_FOR_PORT',\n port: adapter.port.name,\n adapter: adapter.name ?? adapter.intent,\n message:\n `Adapter \"${adapter.name ?? adapter.intent ?? 'unknown'}\" is not allowed for port \"${adapter.port.name}\".`,\n },\n ],\n };\n}\n\nfunction hasMember(value: unknown, key: string): boolean {\n return (\n value != null &&\n (typeof value === 'object' || typeof value === 'function') &&\n key in value\n );\n}\n","/**\n * Basic AI Code Gate implementation.\n *\n * Uses simple string heuristics + registered intent names to detect obvious\n * architectural violations in generated code (e.g. direct infra imports from domain).\n * Not a full static analyzer — documented limitation.\n */\n\nimport type {\n AICodeGate,\n AICodeGateContext,\n AICodeGateResult,\n AICodeGateViolation,\n AIGateExtension,\n} from './types';\nimport type { Policy } from '../policy';\nimport type { IntentCreator } from '../intent';\nimport type { IntentName } from '../../domain/types';\nimport type { ArchitectureProfile } from '../layers';\n\nexport interface AICodeGatePolicyContext<Context = AICodeGateContext> {\n source: string;\n context?: Context;\n}\n\nexport interface AICodeGateOptions<Context = AICodeGateContext> {\n policies?: Policy<AICodeGatePolicyContext<Context>>[];\n intents?: Array<string | Pick<IntentCreator<IntentName, unknown>, 'name'>>;\n /**\n * Additional forbidden patterns (regex or strings).\n */\n forbiddenPatterns?: Array<string | RegExp>;\n /**\n * External analyzer extensions (type-only contract; plug in AST tools later).\n */\n extensions?: AIGateExtension<Context>[];\n /**\n * Optional architecture profile for layer-aware generated-code checks.\n * When context.layer is provided, intent references are checked against it.\n */\n architectureProfile?: ArchitectureProfile;\n /**\n * When true, flag string literals that look like intent names but are not registered.\n */\n enforceIntentAllowlist?: boolean;\n /**\n * Optional TypeScript module object. When provided, AICodeGate adds AST-backed checks\n * for publish misuse without taking a runtime dependency on TypeScript.\n */\n typescript?: unknown;\n}\n\nfunction violation(\n ruleId: string,\n message: string,\n extra?: Partial<AICodeGateViolation>\n): AICodeGateViolation {\n return { ruleId, code: ruleId, message, ...extra };\n}\n\ninterface StringMatch {\n value: string;\n index: number;\n}\n\ninterface ModuleSpecifierMatch {\n value: string;\n index: number;\n kind: 'import' | 'export' | 'dynamic-import' | 'require';\n}\n\nfunction lineOf(source: string, index: number): number {\n return source.slice(0, index).split('\\n').length;\n}\n\n/** Extract quoted string literals from source (naive scan). */\nfunction extractQuotedStrings(source: string): StringMatch[] {\n const matches: StringMatch[] = [];\n const re = /['\"`]([A-Za-z][A-Za-z0-9_.]*)['\"`]/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(source)) !== null) {\n matches.push({ value: m[1], index: m.index });\n }\n return matches;\n}\n\nfunction extractModuleSpecifiers(source: string): ModuleSpecifierMatch[] {\n const matches: ModuleSpecifierMatch[] = [];\n const patterns: Array<{ kind: ModuleSpecifierMatch['kind']; re: RegExp }> = [\n {\n kind: 'import',\n re: /\\bimport\\s+(?:type\\s+)?(?:[^'\"]*?\\s+from\\s*)?['\"]([^'\"]+)['\"]/g,\n },\n {\n kind: 'export',\n re: /\\bexport\\s+(?:type\\s+)?[^'\"]*?\\s+from\\s*['\"]([^'\"]+)['\"]/g,\n },\n {\n kind: 'dynamic-import',\n re: /\\bimport\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n },\n {\n kind: 'require',\n re: /\\brequire\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n },\n ];\n\n for (const pattern of patterns) {\n let match: RegExpExecArray | null;\n while ((match = pattern.re.exec(source)) !== null) {\n const index = match.index + match[0].indexOf(match[1]);\n matches.push({ value: match[1], index, kind: pattern.kind });\n }\n }\n\n return matches.sort((a, b) => a.index - b.index);\n}\n\nfunction looksLikeIntentName(s: string): boolean {\n return /^(Domain|Application|Adapter|Workflow|Job|Presentation|Reporting|Metadata|Security|Audit|Observability|Kernel)\\.[A-Za-z0-9_.]+$/.test(s);\n}\n\nfunction hasInfrastructureToken(specifier: string): boolean {\n const tokens = specifier\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter(Boolean);\n return [\n 'adapter',\n 'adapters',\n 'infra',\n 'infrastructure',\n 'persistence',\n 'repository',\n 'repositories',\n 'integration',\n 'database',\n 'db',\n ].some((token) => tokens.includes(token));\n}\n\nfunction isKnownInfrastructurePackage(specifier: string): boolean {\n const normalized = specifier.toLowerCase();\n return ['sequelize', 'prisma', 'typeorm', 'mongoose', 'knex'].some(\n (name) => normalized === name || normalized.startsWith(`${name}/`)\n );\n}\n\nfunction tsStringLiteralText(ts: any, node: unknown): string | undefined {\n return node && ts.isStringLiteralLike(node) ? (node as { text: string }).text : undefined;\n}\n\nfunction tsPropertyName(ts: any, node: any): string | undefined {\n if (!node) return undefined;\n if (ts.isIdentifier(node) || ts.isStringLiteralLike(node)) return node.text;\n return undefined;\n}\n\nfunction tsObjectProperty(ts: any, node: any, name: string): any | undefined {\n if (!node || !ts.isObjectLiteralExpression(node)) return undefined;\n return node.properties.find((property: any) => {\n if (!ts.isPropertyAssignment(property) && !ts.isShorthandPropertyAssignment(property)) {\n return false;\n }\n return tsPropertyName(ts, property.name) === name;\n });\n}\n\nfunction tsObjectHasProperty(ts: any, node: any, name: string): boolean {\n return tsObjectProperty(ts, node, name) !== undefined;\n}\n\nfunction tsObjectPropertyValue(ts: any, node: any, name: string): any | undefined {\n const property = tsObjectProperty(ts, node, name);\n return property && ts.isPropertyAssignment(property)\n ? property.initializer\n : undefined;\n}\n\nfunction tsObjectHasMetadataSource(ts: any, node: any): boolean {\n const metadata = tsObjectPropertyValue(ts, node, 'metadata');\n return tsObjectHasProperty(ts, metadata, 'source');\n}\n\nfunction tsLooksLikeIntentCreatorExpression(ts: any, node: any): boolean {\n if (!node) return false;\n if (ts.isIdentifier(node)) return /^[A-Z]/.test(node.text);\n if (ts.isPropertyAccessExpression(node)) {\n return tsLooksLikeIntentCreatorExpression(ts, node.name);\n }\n return false;\n}\n\nfunction tsIsPublishCall(ts: any, node: any): boolean {\n if (!ts.isCallExpression(node)) return false;\n const expression = node.expression;\n if (ts.isPropertyAccessExpression(expression)) {\n return expression.name.text === 'publish';\n }\n return ts.isIdentifier(expression) && expression.text === 'publish';\n}\n\nfunction tsIsArkPublishCandidate(ts: any, node: any): boolean {\n if (!ts.isCallExpression(node)) return false;\n const firstArg = node.arguments[0];\n const rawIntent = tsStringLiteralText(ts, firstArg);\n return (\n (rawIntent !== undefined && looksLikeIntentName(rawIntent)) ||\n tsObjectHasProperty(ts, firstArg, 'intent') ||\n tsLooksLikeIntentCreatorExpression(ts, firstArg)\n );\n}\n\nfunction tsPublishHasSource(ts: any, node: any): boolean {\n if (!ts.isCallExpression(node)) return false;\n const [firstArg, secondArg, thirdArg] = node.arguments;\n return (\n tsObjectHasMetadataSource(ts, firstArg) ||\n tsObjectHasProperty(ts, secondArg, 'source') ||\n tsObjectHasProperty(ts, thirdArg, 'source')\n );\n}\n\nfunction tsPublishSourceLiteral(ts: any, node: any): string | undefined {\n if (!ts.isCallExpression(node)) return undefined;\n const [firstArg, secondArg, thirdArg] = node.arguments;\n const rawMetadata = tsObjectPropertyValue(ts, firstArg, 'metadata');\n return (\n tsStringLiteralText(ts, tsObjectPropertyValue(ts, rawMetadata, 'source')) ??\n tsStringLiteralText(ts, tsObjectPropertyValue(ts, secondArg, 'source')) ??\n tsStringLiteralText(ts, tsObjectPropertyValue(ts, thirdArg, 'source'))\n );\n}\n\nfunction analyzePublishAst<Context>(\n ts: any,\n source: string,\n context: Context | undefined,\n profile: ArchitectureProfile | undefined\n): AICodeGateViolation[] {\n const sourceFile = ts.createSourceFile(\n 'generated.ts',\n source,\n ts.ScriptTarget.Latest,\n true\n );\n const gateContext = context as AICodeGateContext | undefined;\n const filePath = gateContext?.filePath;\n const contextLayer = gateContext?.layer;\n const violations: AICodeGateViolation[] = [];\n const lineForNode = (node: any) =>\n sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1;\n\n const visit = (node: any) => {\n if (tsIsPublishCall(ts, node)) {\n const firstArg = node.arguments[0];\n const rawIntent = tsStringLiteralText(ts, firstArg);\n if (\n (rawIntent && looksLikeIntentName(rawIntent)) ||\n tsObjectHasProperty(ts, firstArg, 'intent')\n ) {\n violations.push(\n violation('RAW_EVENT_PUBLISH', 'Publish through a registered intent creator; raw event objects or intent strings bypass Ark contracts and tooling.', {\n line: lineForNode(node),\n filePath,\n })\n );\n }\n\n if (tsIsArkPublishCandidate(ts, node) && !tsPublishHasSource(ts, node)) {\n violations.push(\n violation('PUBLISH_MISSING_SOURCE', 'Strict Ark publish calls must include metadata.source.', {\n line: lineForNode(node),\n filePath,\n })\n );\n }\n\n const sourceIntent = tsPublishSourceLiteral(ts, node);\n if (profile && contextLayer && sourceIntent && looksLikeIntentName(sourceIntent)) {\n const sourceLayer = profile.resolveLayer(sourceIntent);\n if (sourceLayer && sourceLayer !== contextLayer) {\n violations.push(\n violation(\n 'PUBLISH_SOURCE_LAYER_MISMATCH',\n `Publish source \"${sourceIntent}\" resolves to ${sourceLayer}, but the target file is classified as ${contextLayer}.`,\n {\n line: lineForNode(node),\n filePath,\n target: sourceIntent,\n fromLayer: contextLayer,\n toLayer: sourceLayer,\n }\n )\n );\n }\n }\n }\n\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return violations;\n}\n\nexport function createAICodeGate<Context = AICodeGateContext>(\n options: AICodeGateOptions<Context> = {}\n): AICodeGate<Context> {\n const intentNames = new Set(\n (options.intents || []).map((i) => (typeof i === 'string' ? i : i.name))\n );\n\n const forbidden = [\n ...(options.forbiddenPatterns || []),\n /from ['\"].*\\/(infra|adapters|persistence|db)/i,\n /import .* from ['\"].*(sequelize|prisma|typeorm|mongoose|knex)/i,\n ];\n\n const enforceAllowlist = options.enforceIntentAllowlist ?? intentNames.size > 0;\n\n return {\n validate(source: string, context?: Context): AICodeGateResult {\n const violations: AICodeGateViolation[] = [];\n const gateContext = context as AICodeGateContext | undefined;\n const filePath = gateContext?.filePath;\n const contextLayer = gateContext?.layer;\n\n for (const pat of forbidden) {\n if (pat instanceof RegExp) {\n const match = source.match(pat);\n if (match) {\n violations.push(\n violation('FORBIDDEN_PATTERN', `Forbidden pattern matched: ${pat}`, {\n line: match.index === undefined ? undefined : lineOf(source, match.index),\n filePath,\n suggestion: 'Remove infrastructure imports from domain/application layers.',\n })\n );\n }\n } else if (source.includes(pat)) {\n violations.push(\n violation('FORBIDDEN_SUBSTRING', `Forbidden substring: ${pat}`, {\n line: lineOf(source, source.indexOf(pat)),\n filePath,\n })\n );\n }\n }\n\n for (const specifier of extractModuleSpecifiers(source)) {\n if (!hasInfrastructureToken(specifier.value) && !isKnownInfrastructurePackage(specifier.value)) {\n continue;\n }\n\n violations.push(\n violation(\n 'FORBIDDEN_IMPORT',\n `Forbidden ${specifier.kind} target: \"${specifier.value}\".`,\n {\n line: lineOf(source, specifier.index),\n source: specifier.value,\n target: specifier.value,\n filePath,\n suggestion: 'Route infrastructure access through an allowed adapter or port boundary.',\n details: { importKind: specifier.kind },\n }\n )\n );\n }\n\n if (options.policies) {\n for (const policy of options.policies) {\n const res = policy.check({ source, context });\n if (res !== true) {\n if (Array.isArray(res)) {\n for (const v of res) {\n violations.push(\n violation('POLICY_VIOLATION', v.message, {\n filePath,\n suggestion: `Fix violation of policy \"${policy.name}\".`,\n })\n );\n }\n } else if (res === false) {\n violations.push(\n violation('POLICY_VIOLATION', `Policy ${policy.name} failed on generated code`)\n );\n } else {\n violations.push(\n violation('POLICY_VIOLATION', res.message)\n );\n }\n }\n }\n }\n\n if (enforceAllowlist && intentNames.size > 0) {\n for (const literal of extractQuotedStrings(source)) {\n if (looksLikeIntentName(literal.value) && !intentNames.has(literal.value)) {\n violations.push(\n violation(\n 'UNKNOWN_INTENT',\n `Unknown intent reference: \"${literal.value}\"`,\n {\n line: lineOf(source, literal.index),\n filePath,\n target: literal.value,\n suggestion: `Register intent \"${literal.value}\" via defineIntent() or remove the reference.`,\n }\n )\n );\n }\n }\n }\n\n if (options.architectureProfile && contextLayer) {\n for (const literal of extractQuotedStrings(source)) {\n if (!looksLikeIntentName(literal.value)) continue;\n\n const targetLayer = options.architectureProfile.resolveLayer(literal.value);\n if (!targetLayer) continue;\n\n const blocked = options.architectureProfile.rules.find(\n (rule) =>\n !rule.allowed &&\n rule.from === contextLayer &&\n rule.to === targetLayer\n );\n\n if (blocked) {\n violations.push(\n violation(\n 'LAYER_REFERENCE_VIOLATION',\n blocked.message ??\n `Layer \"${contextLayer}\" must not reference \"${targetLayer}\" through \"${literal.value}\".`,\n {\n line: lineOf(source, literal.index),\n filePath,\n target: literal.value,\n fromLayer: contextLayer,\n toLayer: targetLayer,\n suggestion: 'Route the dependency through an allowed intent, port, or event.',\n details: { rule: blocked },\n }\n )\n );\n }\n }\n }\n\n if (options.extensions) {\n for (const ext of options.extensions) {\n try {\n const extViolations = ext.analyze(source, context);\n violations.push(...extViolations);\n } catch (err) {\n violations.push(\n violation(\n 'EXTENSION_ERROR',\n `Extension \"${ext.name}\" failed: ${err instanceof Error ? err.message : String(err)}`\n )\n );\n }\n }\n }\n\n if (options.typescript) {\n try {\n violations.push(\n ...analyzePublishAst(\n options.typescript,\n source,\n context,\n options.architectureProfile\n )\n );\n } catch (err) {\n violations.push(\n violation(\n 'AST_ANALYZER_ERROR',\n `TypeScript AST analyzer failed: ${err instanceof Error ? err.message : String(err)}`\n )\n );\n }\n }\n\n return {\n valid: violations.length === 0,\n violations,\n };\n },\n };\n}\n","import type { DomainEvent, IntentName } from '../../domain/types';\nimport type {\n CreateProjectionRegistryOptions,\n ProjectionCheckpoint,\n ProjectionDefinition,\n ProjectionRegistry,\n ReadModelStore,\n} from './types';\n\nexport class InMemoryReadModelStore implements ReadModelStore {\n private readonly states = new Map<string, unknown>();\n\n load<State = unknown>(name: string): State | undefined {\n return this.states.get(name) as State | undefined;\n }\n\n save<State = unknown>(name: string, state: State): void {\n this.states.set(name, state);\n }\n\n clear(name?: string): void {\n if (name) {\n this.states.delete(name);\n } else {\n this.states.clear();\n }\n }\n}\n\nfunction initialState<State>(definition: ProjectionDefinition<State>): State {\n return typeof definition.initialState === 'function'\n ? (definition.initialState as () => State)()\n : definition.initialState;\n}\n\nexport class ProjectionRegistryImpl implements ProjectionRegistry {\n private readonly definitions = new Map<string, ProjectionDefinition>();\n private readonly checkpoints = new Map<string, ProjectionCheckpoint>();\n private readonly store: ReadModelStore;\n private readonly auditTrail?: CreateProjectionRegistryOptions['auditTrail'];\n\n constructor(options: CreateProjectionRegistryOptions = {}) {\n this.store = options.store ?? new InMemoryReadModelStore();\n this.auditTrail = options.auditTrail;\n }\n\n register<State>(definition: ProjectionDefinition<State>): void {\n if (this.definitions.has(definition.name)) {\n throw new Error(`Projection \"${definition.name}\" is already registered.`);\n }\n this.definitions.set(definition.name, definition as ProjectionDefinition);\n this.checkpoints.set(definition.name, {\n projection: definition.name,\n appliedCount: 0,\n });\n }\n\n list(): ProjectionDefinition[] {\n return Array.from(this.definitions.values());\n }\n\n async apply(event: DomainEvent<IntentName, unknown>): Promise<string[]> {\n const applied: string[] = [];\n\n for (const definition of this.definitions.values()) {\n if (!definition.sourceIntents.includes(event.intent)) continue;\n\n const current =\n (await this.store.load(definition.name)) ?? initialState(definition);\n const next = await definition.project(event, current);\n await this.store.save(definition.name, next);\n\n const previous = this.checkpoints.get(definition.name);\n this.checkpoints.set(definition.name, {\n projection: definition.name,\n appliedCount: (previous?.appliedCount ?? 0) + 1,\n lastIntent: event.intent,\n lastCorrelationId: event.metadata.correlationId,\n updatedAt: new Date().toISOString(),\n });\n await this.auditTrail?.record({\n type: 'projection.applied',\n source: 'Kernel.ProjectionRegistry',\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n causationId: event.metadata.causationId,\n subject: definition.name,\n details: { projection: definition.name },\n });\n applied.push(definition.name);\n }\n\n return applied;\n }\n\n async getState<State = unknown>(name: string): Promise<State | undefined> {\n return this.store.load<State>(name);\n }\n\n getCheckpoint(name: string): ProjectionCheckpoint | undefined {\n return this.checkpoints.get(name);\n }\n\n getCheckpoints(): ProjectionCheckpoint[] {\n return Array.from(this.checkpoints.values());\n }\n\n async clear(): Promise<void> {\n await this.store.clear();\n for (const definition of this.definitions.values()) {\n this.checkpoints.set(definition.name, {\n projection: definition.name,\n appliedCount: 0,\n });\n }\n }\n}\n\nexport function createProjectionRegistry(\n options?: CreateProjectionRegistryOptions\n): ProjectionRegistry {\n return new ProjectionRegistryImpl(options);\n}\n","/** Current Ark manifest JSON schema version. */\nexport const MANIFEST_SCHEMA_VERSION = '1.0';","/**\n * Aggregates kernel registries into a single machine-readable manifest.\n */\n\nimport type { IntentRegistry } from '../intent/IntentRegistry';\nimport type { PolicyEngine } from '../policy/PolicyEngine';\nimport type { MetadataRegistry } from '../metadata/types';\nimport type { DependencyGraph } from '../graph/types';\nimport type { EventContractRegistry } from '../event-contracts';\nimport type { ArchitectureProfile } from '../layers';\nimport type { ObservabilityReporter } from '../observability';\nimport type { ProjectionRegistry } from '../projections';\nimport type { ArkManifest, ArkManifestData } from './types';\nimport { version } from '../../version';\nimport { MANIFEST_SCHEMA_VERSION } from './constants';\n\nfunction policyId(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\nexport interface CreateArkManifestOptions {\n registry?: IntentRegistry;\n policyEngine?: PolicyEngine;\n metadata?: MetadataRegistry;\n graph?: DependencyGraph;\n profile?: ArchitectureProfile;\n projections?: ProjectionRegistry;\n eventContracts?: EventContractRegistry;\n observability?: ObservabilityReporter;\n}\n\nclass ArkManifestImpl implements ArkManifest {\n constructor(private readonly data: ArkManifestData) {}\n\n toJSON(): ArkManifestData {\n return { ...this.data };\n }\n}\n\n/**\n * Create a machine-readable snapshot of the current architectural contract.\n * Intended for AI agents, codegen tools, and documentation generators.\n */\nexport function createArkManifest(\n options: CreateArkManifestOptions = {}\n): ArkManifest {\n const registry = options.registry;\n const policyEngine = options.policyEngine;\n const metadata = options.metadata;\n const graph = options.graph;\n const profile = options.profile;\n const projections = options.projections;\n const eventContracts = options.eventContracts;\n const observability = options.observability;\n\n const intents = registry\n ? registry.list().map((creator) => ({\n name: creator.name,\n dependencies: registry.getDependencies(creator.name),\n productions: registry.getProductions(creator.name),\n }))\n : [];\n\n const relationships = registry ? registry.getAllRelationships() : [];\n\n const policies = policyEngine\n ? policyEngine.getPolicies().map((p) => ({\n id: policyId(p.name),\n name: p.name,\n severity: p.severity,\n tags: p.tags ? [...p.tags] : undefined,\n owner: p.owner,\n version: p.version,\n rationale: p.rationale,\n enforcementMode: p.enforcementMode,\n deprecated: p.deprecated,\n replacedBy: p.replacedBy,\n description: p.tags?.includes('layer')\n ? 'Enforces clean-architecture layer dependency rules on declared relationships.'\n : undefined,\n }))\n : [];\n\n const entities = metadata ? metadata.toJSON() : [];\n\n const graphData = graph\n ? graph.toJSON()\n : { nodes: [] as ArkManifestData['graph']['nodes'], edges: [] as ArkManifestData['graph']['edges'] };\n\n const entityIntents = entities\n .filter((e) => (e.emits?.length ?? 0) > 0 || (e.consumes?.length ?? 0) > 0)\n .map((e) => ({\n entity: e.name,\n emits: e.emits,\n consumes: e.consumes,\n }));\n\n const projectionData = projections\n ? projections.list().map((projection) => ({\n name: projection.name,\n sourceIntents: projection.sourceIntents,\n checkpoint: projections.getCheckpoint(projection.name),\n }))\n : [];\n\n const data: ArkManifestData = {\n schemaVersion: MANIFEST_SCHEMA_VERSION,\n version,\n exportedAt: new Date().toISOString(),\n intents,\n relationships,\n policies,\n entities,\n graph: graphData,\n architecture: profile\n ? {\n profile: profile.name,\n layers: profile.layers,\n rules: profile.rules,\n }\n : undefined,\n projections: projectionData,\n eventContracts: eventContracts?.list() ?? [],\n observability: observability?.report(),\n links: { entityIntents },\n };\n\n return new ArkManifestImpl(data);\n}\n","/**\n * In-process workflow engine with durable-store seams.\n */\n\nimport type { EventBus } from '../event-bus';\nimport type {\n CreateWorkflowEngineOptions,\n SagaContext,\n SagaDefinition,\n SagaInstance,\n WorkflowDefinition,\n WorkflowEngine,\n WorkflowSnapshot,\n WorkflowStep,\n WorkflowStore,\n} from './types';\n\nlet workflowSequence = 0;\n\nfunction createWorkflowId(prefix: string): string {\n workflowSequence += 1;\n return `${prefix}-${Date.now()}-${workflowSequence}`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nasync function withTimeout<T>(\n operation: Promise<T>,\n timeoutMs: number | undefined,\n stepName: string\n): Promise<T> {\n if (timeoutMs === undefined) return operation;\n\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<T>((_, reject) => {\n timeout = setTimeout(() => {\n reject(new Error(`Workflow step \"${stepName}\" timed out after ${timeoutMs}ms.`));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([operation, timeoutPromise]);\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\nexport class InMemoryWorkflowStore implements WorkflowStore {\n private readonly snapshots = new Map<string, WorkflowSnapshot>();\n\n save<P extends SagaContext>(snapshot: WorkflowSnapshot<P>): void {\n this.snapshots.set(snapshot.id, { ...snapshot, context: { ...snapshot.context } });\n }\n\n get<P extends SagaContext = SagaContext>(id: string): WorkflowSnapshot<P> | undefined {\n const snapshot = this.snapshots.get(id) as WorkflowSnapshot<P> | undefined;\n return snapshot ? { ...snapshot, context: { ...snapshot.context } } : undefined;\n }\n\n list(workflowName?: string): WorkflowSnapshot[] {\n return Array.from(this.snapshots.values())\n .filter((snapshot) => !workflowName || snapshot.workflowName === workflowName)\n .map((snapshot) => ({ ...snapshot, context: { ...snapshot.context } }));\n }\n\n clear(): void {\n this.snapshots.clear();\n }\n}\n\nclass WorkflowEngineImpl implements WorkflowEngine {\n private readonly definitions = new Map<string, WorkflowDefinition>();\n private readonly store: WorkflowStore;\n\n constructor(\n private readonly bus: EventBus,\n private readonly options: CreateWorkflowEngineOptions = {}\n ) {\n this.store = options.store ?? new InMemoryWorkflowStore();\n }\n\n register<P extends SagaContext>(definition: WorkflowDefinition<P>): void {\n if (this.definitions.has(definition.name)) {\n throw new Error(`Workflow \"${definition.name}\" is already registered.`);\n }\n\n this.definitions.set(definition.name, definition as WorkflowDefinition);\n\n if (definition.startOn) {\n const trigger = definition.startOn;\n this.bus.subscribe(trigger.intent, async (event) => {\n await this.start(definition.name, trigger.mapEventToPayload(event));\n });\n }\n }\n\n async start<P extends SagaContext>(\n workflowName: string,\n initialPayload: P,\n options: { id?: string } = {}\n ): Promise<WorkflowSnapshot<P>> {\n const definition = this.definitions.get(workflowName) as\n | WorkflowDefinition<P>\n | undefined;\n\n if (!definition) {\n throw new Error(`Workflow \"${workflowName}\" is not registered.`);\n }\n\n const now = new Date().toISOString();\n const snapshot: WorkflowSnapshot<P> = {\n id: options.id ?? createWorkflowId(workflowName),\n workflowName,\n status: 'running',\n context: { ...initialPayload },\n completedSteps: [],\n attempts: {},\n startedAt: now,\n updatedAt: now,\n };\n\n await this.store.save(snapshot);\n await this.audit('workflow.started', snapshot, { workflowName });\n\n try {\n for (const step of definition.steps) {\n await this.runStep(snapshot, step);\n }\n\n snapshot.status = 'completed';\n snapshot.currentStep = undefined;\n snapshot.completedAt = new Date().toISOString();\n snapshot.updatedAt = snapshot.completedAt;\n await this.store.save(snapshot);\n await this.audit('workflow.completed', snapshot, { workflowName });\n return { ...snapshot, context: { ...snapshot.context } };\n } catch (err) {\n await this.compensate(snapshot, definition.steps, err);\n snapshot.status = 'failed';\n snapshot.error = errorMessage(err);\n snapshot.updatedAt = new Date().toISOString();\n await this.store.save(snapshot);\n await this.audit('workflow.failed', snapshot, {\n workflowName,\n error: snapshot.error,\n failedStep: snapshot.failedStep,\n });\n throw err;\n }\n }\n\n async get<P extends SagaContext = SagaContext>(\n id: string\n ): Promise<WorkflowSnapshot<P> | undefined> {\n return this.store.get<P>(id);\n }\n\n async list(workflowName?: string): Promise<WorkflowSnapshot[]> {\n return this.store.list(workflowName);\n }\n\n private async runStep<P extends SagaContext>(\n snapshot: WorkflowSnapshot<P>,\n step: WorkflowStep<P>\n ): Promise<void> {\n const retry = step.retry ?? this.options.defaultRetry ?? { attempts: 1 };\n const maxAttempts = Math.max(1, retry.attempts);\n\n snapshot.currentStep = step.name;\n snapshot.updatedAt = new Date().toISOString();\n await this.store.save(snapshot);\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n snapshot.attempts[step.name] = attempt;\n await this.store.save(snapshot);\n\n try {\n const result = await withTimeout(\n Promise.resolve(step.execute(snapshot.context, this.bus)),\n step.timeoutMs,\n step.name\n );\n if (result) Object.assign(snapshot.context, result);\n snapshot.completedSteps.push(step.name);\n snapshot.currentStep = undefined;\n snapshot.updatedAt = new Date().toISOString();\n await this.store.save(snapshot);\n await this.audit('workflow.step.completed', snapshot, {\n step: step.name,\n attempt,\n });\n return;\n } catch (err) {\n if (attempt < maxAttempts) {\n if (retry.delayMs) await sleep(retry.delayMs);\n continue;\n }\n\n snapshot.failedStep = step.name;\n snapshot.updatedAt = new Date().toISOString();\n await this.store.save(snapshot);\n await this.audit('workflow.step.failed', snapshot, {\n step: step.name,\n attempt,\n error: errorMessage(err),\n });\n throw err;\n }\n }\n\n throw new Error(`Workflow step \"${step.name}\" did not complete.`);\n }\n\n private async compensate<P extends SagaContext>(\n snapshot: WorkflowSnapshot<P>,\n steps: WorkflowStep<P>[],\n error: unknown\n ): Promise<void> {\n snapshot.status = 'compensating';\n snapshot.updatedAt = new Date().toISOString();\n await this.store.save(snapshot);\n\n const completed = steps.filter((step) =>\n snapshot.completedSteps.includes(step.name)\n );\n\n for (let index = completed.length - 1; index >= 0; index -= 1) {\n const step = completed[index];\n if (!step.compensate) continue;\n\n try {\n await Promise.resolve(step.compensate(snapshot.context, this.bus, error));\n await this.audit('workflow.compensation.completed', snapshot, {\n step: step.name,\n });\n } catch (compensationError) {\n await this.audit('workflow.step.failed', snapshot, {\n step: step.name,\n compensation: true,\n error: errorMessage(compensationError),\n });\n }\n }\n }\n\n private async audit<P extends SagaContext>(\n type:\n | 'workflow.started'\n | 'workflow.step.completed'\n | 'workflow.step.failed'\n | 'workflow.compensation.completed'\n | 'workflow.completed'\n | 'workflow.failed',\n snapshot: WorkflowSnapshot<P>,\n details?: unknown\n ): Promise<void> {\n await this.options.auditTrail?.record({\n type,\n source: 'Kernel.WorkflowEngine',\n subject: snapshot.id,\n details,\n });\n }\n}\n\nexport function createWorkflowEngine(\n bus: EventBus,\n options?: CreateWorkflowEngineOptions\n): WorkflowEngine {\n return new WorkflowEngineImpl(bus, options);\n}\n\nexport function createSaga<P extends SagaContext = SagaContext>(\n def: SagaDefinition<P>,\n bus: EventBus,\n options: CreateWorkflowEngineOptions & { id?: string } = {}\n): SagaInstance<P> {\n const engine = createWorkflowEngine(bus, options);\n const definition: WorkflowDefinition<P> = { name: def.name, steps: def.steps };\n engine.register(definition);\n\n const sagaId = options.id ?? createWorkflowId(def.name);\n let status: SagaInstance<P>['status'] = 'idle';\n let completedStepNames: string[] = [];\n\n return {\n id: sagaId,\n definition: def,\n get status() {\n return status;\n },\n get completedSteps() {\n return [...completedStepNames];\n },\n async run(initialPayload: P) {\n status = 'running';\n completedStepNames = [];\n try {\n const snapshot = await engine.start(def.name, initialPayload, { id: sagaId });\n status = snapshot.status === 'waiting' ? 'idle' : snapshot.status;\n completedStepNames = [...snapshot.completedSteps];\n } catch (err) {\n const snapshot = await engine.get<P>(sagaId);\n status =\n snapshot?.status === 'waiting' ? 'idle' : (snapshot?.status ?? 'failed');\n completedStepNames = snapshot?.completedSteps ?? [];\n throw err;\n }\n },\n };\n}\n","import { createAuditTrail } from '../audit';\nimport { createEventBus } from '../event-bus';\nimport { createEventContractRegistry } from '../event-contracts';\nimport { createDependencyGraph, syncRegistryToGraph } from '../graph';\nimport { createIntentRegistry } from '../intent';\nimport { elevenLayerProfile } from '../layers';\nimport { createArkManifest } from '../manifest';\nimport { createMetadataRegistry } from '../metadata';\nimport { createObservabilityReporter } from '../observability';\nimport { InMemoryOutboxStore } from '../outbox';\nimport {\n PolicyEngine,\n defineArchitectureProfilePolicy,\n} from '../policy';\nimport { createProjectionRegistry } from '../projections';\nimport { createWorkflowEngine } from '../workflow';\nimport type { ArkKernel, CreateArkKernelOptions } from './types';\n\nlet kernelSequence = 0;\n\nfunction nextKernelInstanceId(): string {\n kernelSequence += 1;\n return `ark-kernel-${Date.now()}-${kernelSequence}`;\n}\n\nexport function createArkKernel(options: CreateArkKernelOptions = {}): ArkKernel {\n const strict = options.strict ?? true;\n const instanceId = options.instanceId ?? nextKernelInstanceId();\n const profile = options.profile ?? elevenLayerProfile;\n const registry = createIntentRegistry();\n const graph = createDependencyGraph();\n const metadata = options.metadata ?? createMetadataRegistry();\n const auditTrail = options.auditTrail ?? createAuditTrail({ maxRecords: options.maxHistorySize });\n const eventContracts = options.eventContracts ?? createEventContractRegistry();\n const outbox = options.outbox ?? new InMemoryOutboxStore();\n const projections =\n options.projections ?? createProjectionRegistry({ auditTrail });\n const policyEngine = new PolicyEngine([\n defineArchitectureProfilePolicy(profile),\n ...(options.policies ?? []),\n ]);\n\n const syncGraph = () => {\n syncRegistryToGraph(registry, graph, { requireRegisteredTargets: true });\n };\n\n const eventBus = createEventBus({\n intentRegistry: registry,\n dependencyGraph: graph,\n policyEngine,\n strictRegistry: true,\n validateIntentNaming: true,\n auditTrail,\n eventContracts,\n strictEventContracts: options.strictEventContracts ?? strict,\n requireKnownSource: options.requireKnownSource ?? true,\n architectureProfile: profile,\n enforceObservedLayerFlow:\n options.enforceObservedLayerFlow ?? (strict ? 'hard' : 'off'),\n outbox,\n instanceId,\n maxHistorySize: options.maxHistorySize,\n onPublish: options.autoApplyProjections === false\n ? undefined\n : async (event) => {\n await projections.apply(event);\n },\n });\n\n const workflowEngine = createWorkflowEngine(eventBus, { auditTrail });\n const observability = createObservabilityReporter({\n registry,\n eventBus,\n graph,\n });\n\n return {\n instanceId,\n profile,\n registry,\n graph,\n metadata,\n auditTrail,\n eventContracts,\n outbox,\n projections,\n policyEngine,\n eventBus,\n workflowEngine,\n observability,\n publisher(source) {\n return eventBus.createPublisher(source);\n },\n syncGraph,\n manifest() {\n syncGraph();\n return createArkManifest({\n registry,\n policyEngine,\n metadata,\n graph,\n profile,\n projections,\n eventContracts,\n observability,\n });\n },\n };\n}\n\nexport function createStrictArkKernel(\n options: CreateArkKernelOptions = {}\n): ArkKernel {\n return createArkKernel({\n ...options,\n strict: true,\n strictEventContracts: options.strictEventContracts ?? true,\n requireKnownSource: options.requireKnownSource ?? true,\n enforceObservedLayerFlow: options.enforceObservedLayerFlow ?? 'hard',\n });\n}\n\nexport function createLenientArkKernel(\n options: CreateArkKernelOptions = {}\n): ArkKernel {\n return createArkKernel({\n ...options,\n strict: false,\n strictEventContracts: options.strictEventContracts ?? false,\n enforceObservedLayerFlow: options.enforceObservedLayerFlow ?? 'off',\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/kernel/intent/IntentRegistry.ts","../src/kernel/intent/defineIntent.ts","../src/kernel/intent/validateIntentName.ts","../src/kernel/policy/PolicyViolationError.ts","../src/kernel/policy/PolicyEngine.ts","../src/kernel/policy/definePolicy.ts","../src/kernel/policy/builtins.ts","../src/kernel/event-bus/policyContext.ts","../src/kernel/event-bus/errors.ts","../src/kernel/event-bus/EventBus.ts","../src/kernel/event-contracts/EventContractRegistry.ts","../src/kernel/outbox/InMemoryOutboxStore.ts","../src/kernel/observability/ObservabilityReporter.ts","../src/kernel/testing/ArkTestHarness.ts","../src/kernel/audit/AuditTrail.ts","../src/kernel/graph/DependencyGraph.ts","../src/kernel/graph/sync.ts","../src/kernel/layers/ArchitectureProfile.ts","../src/kernel/metadata/MetadataRegistry.ts","../src/kernel/adapters/ports.ts","../src/kernel/ai-gate/AICodeGate.ts","../src/kernel/projections/ProjectionRegistry.ts","../src/kernel/manifest/constants.ts","../src/kernel/manifest/createArkManifest.ts","../src/kernel/workflow/Saga.ts","../src/kernel/runtime/createArkKernel.ts"],"names":["version","flowKey"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Ark library version — single source of truth. */\nexport const version = '1.5.0';\n","/**\n * IntentRegistry\n *\n * Central registry for semantic intents.\n * Supports registration, duplicate prevention, and declared dependency relationships.\n *\n * This is a core building block for governance, dependency graphs, and policy enforcement.\n */\n\nimport type { IntentName } from '../../domain/types';\nimport type { IntentCreator, IntentRelationship } from './types';\nimport type { DomainEvent } from '../../domain/types';\n\n/**\n * Options for declaring relationships when defining an intent.\n */\nexport interface DefineIntentOptions {\n /** Other intents this one depends on (semantic names) */\n dependsOn?: IntentName[];\n /** Intents that this one produces / triggers */\n produces?: IntentName[];\n}\n\n/**\n * IntentRegistry manages all registered intents and their declared relationships.\n */\nexport class IntentRegistry {\n private readonly intents = new Map<string, IntentCreator<IntentName, unknown>>();\n private readonly dependencies = new Map<string, Set<string>>();\n private readonly productions = new Map<string, Set<string>>();\n\n /**\n * Define/register a new intent.\n *\n * @param name - Semantic intent name following the convention (Domain.*, Application.*, etc.)\n * @param options - Optional relationship declarations\n * @throws Error if an intent with the same name is already registered\n */\n define<N extends IntentName, P = unknown>(\n name: N,\n options?: DefineIntentOptions\n ): IntentCreator<N, P> {\n if (this.intents.has(name)) {\n throw new Error(\n `Intent \"${name}\" is already registered. Intent names must be unique within a registry.`\n );\n }\n\n // Create the callable creator using a proper function so we can safely attach .name\n const fn = (payload: P): DomainEvent<N, P> => ({\n intent: name,\n payload,\n metadata: {\n occurredAt: new Date().toISOString(),\n source: 'unknown',\n },\n });\n\n // Attach the semantic name in a cross-environment safe way\n Object.defineProperty(fn, 'name', {\n value: name,\n enumerable: true,\n configurable: false,\n writable: false,\n });\n\n const creator = fn as IntentCreator<N, P>;\n\n this.intents.set(name, creator as IntentCreator<IntentName, unknown>);\n\n // Apply initial declared relationships if provided\n if (options?.dependsOn) {\n for (const dep of options.dependsOn) {\n this.declareDependency(name, dep);\n }\n }\n if (options?.produces) {\n for (const prod of options.produces) {\n this.declareProduction(name, prod);\n }\n }\n\n return creator;\n }\n\n /**\n * Declare that one intent depends on / relates to another.\n * This information is used by the DependencyGraph (future iterations) and for policy checks.\n *\n * @param from - The source intent (e.g. an Application operation)\n * @param to - The target intent it depends on (e.g. a Domain event or concept)\n */\n declareDependency(from: string, to: string): void {\n if (!this.dependencies.has(from)) {\n this.dependencies.set(from, new Set());\n }\n this.dependencies.get(from)!.add(to);\n }\n\n /**\n * Declare that one intent produces / emits another (e.g. use case → domain event).\n */\n declareProduction(from: string, to: string): void {\n if (!this.productions.has(from)) {\n this.productions.set(from, new Set());\n }\n this.productions.get(from)!.add(to);\n }\n\n /**\n * Retrieve a previously defined intent creator by name.\n */\n get<N extends IntentName = IntentName, P = unknown>(\n name: string\n ): IntentCreator<N, P> | undefined {\n return this.intents.get(name) as IntentCreator<N, P> | undefined;\n }\n\n /**\n * List all registered intent creators.\n */\n list(): IntentCreator<IntentName, unknown>[] {\n return Array.from(this.intents.values());\n }\n\n /**\n * Get all declared dependencies for a given intent.\n */\n getDependencies(intentName: string): string[] {\n const deps = this.dependencies.get(intentName);\n return deps ? Array.from(deps) : [];\n }\n\n /**\n * Get all intents produced / emitted by a given intent.\n */\n getProductions(intentName: string): string[] {\n const prods = this.productions.get(intentName);\n return prods ? Array.from(prods) : [];\n }\n\n /**\n * Get all declared relationships (useful for graph generation).\n */\n getAllRelationships(): IntentRelationship[] {\n const result: IntentRelationship[] = [];\n for (const [from, tos] of this.dependencies.entries()) {\n for (const to of tos) {\n result.push({ from, to, kind: 'dependsOn' });\n }\n }\n for (const [from, tos] of this.productions.entries()) {\n for (const to of tos) {\n result.push({ from, to, kind: 'produces' });\n }\n }\n return result;\n }\n\n /**\n * Check if an intent name has been registered.\n */\n has(name: string): boolean {\n return this.intents.has(name);\n }\n\n /**\n * Clear the registry. Primarily useful for tests.\n */\n clear(): void {\n this.intents.clear();\n this.dependencies.clear();\n this.productions.clear();\n }\n}\n","/**\n * defineIntent\n *\n * The primary ergonomic function for declaring semantic intents.\n *\n * Uses a default shared registry for convenience, while still allowing\n * isolated registries via `createIntentRegistry()`.\n *\n * Intents are the core of Ark's governance model. They give every\n * architectural concept (domain events, use cases, adapter operations, workflows)\n * an explicit, namespaced, machine-readable identity.\n */\n\nimport type { IntentName } from '../../domain/types';\nimport type { IntentCreator } from './types';\nimport { IntentRegistry, type DefineIntentOptions } from './IntentRegistry';\n\n// Default registry used by the top-level defineIntent for simplicity\nconst defaultRegistry = new IntentRegistry();\n\n/**\n * Define a new semantic intent.\n *\n * This is the main entry point most users (and AI generators) will use.\n *\n * @example\n * ```ts\n * // Domain event\n * const OrderPlaced = defineIntent<'Domain.Order.OrderPlaced', {\n * orderId: string;\n * amount: number;\n * }>('Domain.Order.OrderPlaced');\n *\n * const event = OrderPlaced({ orderId: 'o-42', amount: 99.5 });\n *\n * // Application operation that declares a dependency at definition time\n * const ConfirmOrder = defineIntent<'Application.ConfirmOrder', { orderId: string }>(\n * 'Application.ConfirmOrder',\n * { dependsOn: ['Domain.Order.OrderPlaced'] }\n * );\n * ```\n *\n * @param name - Unique semantic name. Recommended convention:\n * - `Domain.*` for domain concepts and events\n * - `Application.*` for use cases / orchestration\n * - `Adapter.*` for external integrations\n * - `Workflow.*` for sagas and long-running processes\n * @param options - Optional initial relationship declarations (`dependsOn`, `produces`)\n */\nexport function defineIntent<N extends IntentName, P = unknown>(\n name: N,\n options?: DefineIntentOptions\n): IntentCreator<N, P> {\n return defaultRegistry.define(name, options);\n}\n\n/**\n * Create an isolated IntentRegistry.\n * Useful for testing, multiple bounded contexts, or advanced governance setups.\n */\nexport function createIntentRegistry(): IntentRegistry {\n return new IntentRegistry();\n}\n\n/**\n * The default registry backing the top-level `defineIntent` calls.\n * You can inspect it or use it directly if needed.\n */\nexport const defaultIntentRegistry = defaultRegistry;\n","/**\n * Runtime validation for semantic intent naming conventions.\n */\n\nconst ALLOWED_PREFIXES = [\n 'Domain.',\n 'Application.',\n 'Adapter.',\n 'Workflow.',\n 'Job.',\n 'Presentation.',\n 'Reporting.',\n 'Metadata.',\n 'Security.',\n 'Audit.',\n 'Observability.',\n 'Kernel.',\n] as const;\n\nexport interface IntentNameValidation {\n valid: boolean;\n reason?: string;\n}\n\n/**\n * Validate that an intent name follows Ark naming conventions.\n */\nexport function validateIntentName(name: string): IntentNameValidation {\n if (!name || typeof name !== 'string') {\n return { valid: false, reason: 'Intent name must be a non-empty string' };\n }\n\n if (!ALLOWED_PREFIXES.some((p) => name.startsWith(p))) {\n return {\n valid: false,\n reason: `Intent \"${name}\" must start with one of: ${ALLOWED_PREFIXES.join(', ')}`,\n };\n }\n\n const rest = name.slice(name.indexOf('.') + 1);\n if (!rest || !/^[A-Za-z][A-Za-z0-9_.]*$/.test(rest)) {\n return {\n valid: false,\n reason: `Intent \"${name}\" has an invalid segment after the layer prefix`,\n };\n }\n\n return { valid: true };\n}\n","/**\n * Typed error thrown when hard policies are violated.\n */\n\nimport type { PolicyViolation } from './types';\n\nexport class PolicyViolationError extends Error {\n readonly violations: PolicyViolation[];\n\n constructor(violations: PolicyViolation[]) {\n const messages = violations\n .map((v) => `- ${v.policyName}: ${v.message}`)\n .join('\\n');\n super(`Hard policy violation(s) detected:\\n${messages}`);\n this.name = 'PolicyViolationError';\n this.violations = violations;\n }\n}","/**\n * PolicyEngine\n *\n * Evaluates collections of policies against a context.\n * Supports hard and soft policies.\n * - Hard policies: violations cause enforcement to throw.\n * - Soft policies: violations are reported as warnings but do not throw.\n */\n\nimport type { Policy, PolicyViolation } from './types';\nimport { PolicyViolationError } from './PolicyViolationError';\n\nexport interface PolicyEvaluationResult {\n passed: boolean;\n violations: PolicyViolation[];\n hardViolations: PolicyViolation[];\n softViolations: PolicyViolation[];\n}\n\n\n/**\n * The PolicyEngine is responsible for registering policies and evaluating\n * them against a given context.\n */\nexport class PolicyEngine<Context = unknown> {\n private readonly policies: Policy<Context>[] = [];\n\n constructor(initialPolicies: Policy<Context>[] = []) {\n for (const policy of initialPolicies) {\n this.add(policy);\n }\n }\n\n /**\n * Adds a policy to the engine.\n */\n add(policy: Policy<Context>): void {\n // Prevent duplicate policy names\n if (this.policies.some((p) => p.name === policy.name)) {\n throw new Error(`Policy \"${policy.name}\" is already registered in this engine.`);\n }\n this.policies.push(policy);\n }\n\n /**\n * Returns all registered policies.\n */\n getPolicies(): Policy<Context>[] {\n return [...this.policies];\n }\n\n /**\n * Evaluates all policies against the provided context.\n */\n evaluate(context: Context): PolicyEvaluationResult {\n const violations: PolicyViolation[] = [];\n\n for (const policy of this.policies) {\n const result = policy.check(context);\n\n if (result === true) {\n continue;\n }\n\n if (result === false) {\n violations.push({\n policyName: policy.name,\n severity: policy.severity,\n message: `Policy \"${policy.name}\" was violated.`,\n });\n continue;\n }\n\n if (Array.isArray(result)) {\n for (const v of result) {\n violations.push({\n policyName: policy.name,\n severity: policy.severity,\n message: v.message,\n details: v.details,\n });\n }\n } else {\n violations.push({\n policyName: policy.name,\n severity: policy.severity,\n message: result.message,\n details: result.details,\n });\n }\n }\n\n const hardViolations = violations.filter((v) => v.severity === 'hard');\n const softViolations = violations.filter((v) => v.severity === 'soft');\n\n return {\n passed: violations.length === 0,\n violations,\n hardViolations,\n softViolations,\n };\n }\n\n /**\n * Enforces all policies.\n *\n * - Soft violations are collected and can be observed (returned or logged).\n * - Hard violations cause an error to be thrown (by default).\n *\n * @returns Evaluation result (including any soft violations)\n * @throws Error if any hard policy is violated\n */\n enforce(context: Context): PolicyEvaluationResult {\n const result = this.evaluate(context);\n\n if (result.hardViolations.length > 0) {\n throw new PolicyViolationError(result.hardViolations);\n }\n\n return result;\n }\n\n /**\n * Clears all registered policies.\n */\n clear(): void {\n this.policies.length = 0;\n }\n}\n","/**\n * definePolicy\n *\n * Factory function to create architectural policies in a declarative way.\n */\n\nimport type {\n Policy,\n PolicyEnforcementMode,\n PolicySeverity,\n PolicyViolation,\n} from './types';\n\nexport interface DefinePolicyOptions<Context = unknown> {\n name: string;\n severity?: PolicySeverity;\n tags?: readonly string[];\n owner?: string;\n version?: string;\n rationale?: string;\n enforcementMode?: PolicyEnforcementMode;\n deprecated?: boolean | string;\n replacedBy?: string;\n check: (context: Context) => boolean | PolicyViolation | PolicyViolation[];\n}\n\n/**\n * Creates a Policy from a declarative configuration.\n *\n * The provided `check` function is called as-is. The PolicyEngine is responsible\n * for normalizing results (booleans, single violations, arrays) into a consistent\n * set of PolicyViolation objects.\n *\n * @example\n * ```ts\n * const noDomainToInfra = definePolicy({\n * name: 'Domain must not depend on infrastructure',\n * severity: 'hard',\n * check: (ctx) => {\n * const violations: PolicyViolation[] = [];\n * // ... logic using ctx.registry.getAllRelationships()\n * return violations.length > 0 ? violations : true;\n * }\n * });\n * ```\n */\nexport function definePolicy<Context = unknown>(\n options: DefinePolicyOptions<Context>\n): Policy<Context> {\n const severity: PolicySeverity = options.severity ?? 'soft';\n\n const policy: Policy<Context> = {\n name: options.name,\n severity,\n tags: options.tags,\n owner: options.owner,\n version: options.version,\n rationale: options.rationale,\n enforcementMode: options.enforcementMode,\n deprecated: options.deprecated,\n replacedBy: options.replacedBy,\n check: options.check,\n };\n\n return policy;\n}\n","/**\n * Built-in architectural policy helpers.\n */\n\nimport type { Policy, PolicyViolation } from './types';\nimport type { IntentRelationship } from '../intent';\nimport type { GraphEdge } from '../graph';\nimport type { ArchitectureProfile } from '../layers';\nimport { definePolicy } from './definePolicy';\n\nexport interface LayerFlowRule {\n from: string;\n to: string;\n allowed: boolean;\n message?: string;\n}\n\nexport interface LayerPolicyOptions {\n name?: string;\n severity?: 'hard' | 'soft';\n /** Prefix rules — e.g. { from: 'Domain', to: 'Adapter', allowed: false } */\n rules: LayerFlowRule[];\n resolveLayer?: (name: string) => string | undefined;\n}\n\nfunction defaultLayerOf(name: string): string {\n const dot = name.indexOf('.');\n return dot >= 0 ? name.slice(0, dot) : name;\n}\n\nfunction resolveLayer(name: string, options: LayerPolicyOptions): string {\n return options.resolveLayer?.(name) ?? defaultLayerOf(name);\n}\n\nfunction matchesRule(\n fromLayer: string,\n toLayer: string,\n rule: LayerFlowRule\n): boolean {\n return fromLayer === rule.from && toLayer === rule.to;\n}\n\n/**\n * Create a policy that enforces layer-crossing rules on graph edges or intent relationships.\n */\nexport function defineLayerPolicy<Context extends { edges?: GraphEdge[]; relationships?: IntentRelationship[] }>(\n options: LayerPolicyOptions\n): Policy<Context> {\n const name = options.name ?? 'Layer isolation';\n const severity = options.severity ?? 'hard';\n\n return definePolicy<Context>({\n name,\n severity,\n tags: ['layer'],\n check: (ctx) => {\n // Only architectural dependencies — not observed event flows (Domain→Application consumers).\n const edges: Array<{ from: string; to: string }> = [\n ...(ctx.edges ?? [])\n .filter((e) => e.kind === 'declared' || e.kind === 'produces')\n .map((e) => ({ from: e.from, to: e.to })),\n ...(ctx.relationships ?? [])\n .filter((r) => r.kind === 'dependsOn')\n .map((r) => ({ from: r.from, to: r.to })),\n ];\n\n const violations: PolicyViolation[] = [];\n\n for (const edge of edges) {\n const fromLayer = resolveLayer(edge.from, options);\n const toLayer = resolveLayer(edge.to, options);\n\n for (const rule of options.rules) {\n if (!rule.allowed && matchesRule(fromLayer, toLayer, rule)) {\n violations.push({\n policyName: name,\n severity,\n message:\n rule.message ??\n `Layer violation: ${edge.from} (${fromLayer}) must not relate to ${edge.to} (${toLayer})`,\n });\n }\n }\n }\n\n return violations.length > 0 ? violations : true;\n },\n });\n}\n\n/** True when a policy requires graph/registry context to enforce layer rules. */\nexport function isLayerPolicy(policy: Policy): boolean {\n return policy.tags?.includes('layer') ?? false;\n}\n\n/** Preset architectural policy factories. */\nexport const architecturalPolicies = {\n /**\n * @deprecated Use cleanArchitectureMatrix() for full layer rules.\n * Blocks Domain → Adapter declared dependencies only.\n */\n layerIsolation(): Policy<{ edges?: GraphEdge[]; relationships?: IntentRelationship[] }> {\n return architecturalPolicies.cleanArchitectureMatrix();\n },\n\n /**\n * Clean-architecture dependency matrix (declared dependsOn / declared edges only).\n * Does not block observed event flows (Domain events consumed by Application).\n */\n cleanArchitectureMatrix(): Policy<{\n edges?: GraphEdge[];\n relationships?: IntentRelationship[];\n }> {\n return defineLayerPolicy({\n name: 'Clean architecture matrix',\n severity: 'hard',\n rules: [\n { from: 'Domain', to: 'Adapter', allowed: false },\n { from: 'Domain', to: 'Application', allowed: false },\n { from: 'Adapter', to: 'Application', allowed: false },\n { from: 'Adapter', to: 'Domain', allowed: false },\n ],\n });\n },\n};\n\nexport function defineArchitectureProfilePolicy<\n Context extends { edges?: GraphEdge[]; relationships?: IntentRelationship[] },\n>(profile: ArchitectureProfile, options: Omit<LayerPolicyOptions, 'rules' | 'resolveLayer'> = {}): Policy<Context> {\n return defineLayerPolicy<Context>({\n name: options.name ?? `${profile.name} layer policy`,\n severity: options.severity ?? 'hard',\n rules: profile.rules,\n resolveLayer: profile.resolveLayer,\n });\n}\n","/**\n * Helpers for building policy evaluation context on event publish.\n */\n\nimport type { DomainEvent } from '../../domain/types';\nimport type { IntentRegistry } from '../intent/IntentRegistry';\nimport type { IntentRelationship } from '../intent';\nimport type { DependencyGraph, GraphEdge } from '../graph';\nimport type { DefinePolicyOptions, Policy } from '../policy';\nimport { definePolicy } from '../policy';\n\n/**\n * Standard context for policies evaluated during event publish.\n * Includes the event plus optional registry relationships and graph edges\n * so layer policies (e.g. architecturalPolicies.layerIsolation) can run.\n */\nexport interface PublishPolicyContext {\n event: DomainEvent;\n relationships?: IntentRelationship[];\n edges?: GraphEdge[];\n}\n\nexport interface GraphPolicyContext {\n relationships?: IntentRelationship[];\n edges?: GraphEdge[];\n}\n\nexport interface BuildPublishPolicyContextOptions {\n intentRegistry?: IntentRegistry;\n dependencyGraph?: DependencyGraph;\n}\n\n/**\n * Build a getPolicyContext function that feeds registry + graph data to policies.\n *\n * @example\n * ```ts\n * const bus = createEventBus({\n * intentRegistry: registry,\n * dependencyGraph: graph,\n * policies: [architecturalPolicies.layerIsolation()],\n * });\n * ```\n */\nexport function buildPublishPolicyContext(\n options: BuildPublishPolicyContextOptions\n): (event: DomainEvent) => PublishPolicyContext {\n return (event: DomainEvent) => ({\n event,\n relationships: options.intentRegistry?.getAllRelationships(),\n edges: options.dependencyGraph?.getEdges(),\n });\n}\n\nexport function definePublishPolicy(\n options: DefinePolicyOptions<PublishPolicyContext>\n): Policy<PublishPolicyContext> {\n return definePolicy(options);\n}\n","/**\n * Event bus governance errors.\n */\n\nexport class UnregisteredIntentError extends Error {\n readonly intentName: string;\n\n constructor(intentName: string) {\n super(\n `Intent \"${intentName}\" is not registered. Register it with IntentRegistry.define() before publish/subscribe, including metadata.source producer intents in strict mode.`\n );\n this.name = 'UnregisteredIntentError';\n this.intentName = intentName;\n }\n}\n\nexport class InvalidIntentNameError extends Error {\n readonly intentName: string;\n readonly reason: string;\n\n constructor(intentName: string, reason: string) {\n super(`Invalid intent name \"${intentName}\": ${reason}`);\n this.name = 'InvalidIntentNameError';\n this.intentName = intentName;\n this.reason = reason;\n }\n}\n\nexport class LayerPolicyContextError extends Error {\n constructor() {\n super(\n 'Layer/architecture policies require intentRegistry, dependencyGraph, or a custom getPolicyContext. ' +\n 'Without graph/registry context, layer policies cannot inspect relationships.'\n );\n this.name = 'LayerPolicyContextError';\n }\n}\n\nexport class EventContractViolationError extends Error {\n readonly intentName: string;\n readonly issues: unknown[];\n\n constructor(intentName: string, issues: unknown[]) {\n super(\n `Event contract violation for \"${intentName}\". Register a matching event contract/version or fix the payload before publishing.`\n );\n this.name = 'EventContractViolationError';\n this.intentName = intentName;\n this.issues = issues;\n }\n}\n\nexport class UnknownEventSourceError extends Error {\n readonly intentName: string;\n readonly source?: string;\n\n constructor(intentName: string, source?: string) {\n super(\n source\n ? `Event \"${intentName}\" metadata.source \"${source}\" is not registered. Register the producer intent or publish from a known source.`\n : `Event \"${intentName}\" must include metadata.source. Strict Ark uses source to enforce observed layer flow.`\n );\n this.name = 'UnknownEventSourceError';\n this.intentName = intentName;\n this.source = source;\n }\n}\n\nexport class SourceMetadataOverrideError extends Error {\n readonly boundSource: string;\n readonly attemptedSource: string;\n\n constructor(boundSource: string, attemptedSource: string) {\n super(\n `Source-bound publisher for \"${boundSource}\" cannot publish with metadata.source \"${attemptedSource}\". Create a publisher for the intended source instead.`\n );\n this.name = 'SourceMetadataOverrideError';\n this.boundSource = boundSource;\n this.attemptedSource = attemptedSource;\n }\n}\n\n/**\n * Thrown when the OBSERVED producer→event flow crosses a forbidden layer boundary\n * under `enforceObservedLayerFlow: 'hard'`. Unlike declared-model policy errors, this\n * reflects what the running system actually did at publish time.\n */\nexport class ObservedLayerFlowViolationError extends Error {\n readonly source: string;\n readonly intentName: string;\n readonly fromLayer: string;\n readonly toLayer: string;\n\n constructor(\n source: string,\n intentName: string,\n fromLayer: string,\n toLayer: string,\n message?: string\n ) {\n super(\n message ??\n `Observed layer violation: \"${source}\" (${fromLayer}) must not produce \"${intentName}\" (${toLayer}). Route this through an allowed layer or adjust the architecture profile rule.`\n );\n this.name = 'ObservedLayerFlowViolationError';\n this.source = source;\n this.intentName = intentName;\n this.fromLayer = fromLayer;\n this.toLayer = toLayer;\n }\n}\n","/**\n * EventBus implementation.\n *\n * Core publish/subscribe mechanics with:\n * - Intent-aware typing via creators\n * - Automatic metadata enrichment\n * - Full publish history for observability\n * - Strict registry validation (opt-in by default when registry provided)\n */\n\nimport type {\n DomainEvent,\n EventMetadata,\n IntentName,\n} from '../../domain/types';\nimport type {\n EventBus,\n EventBusOptions,\n EventHandler,\n EventInterceptor,\n EventInterceptionInfo,\n EventPayloadPatch,\n EventPublisher,\n IntentCreator,\n ObservedLayerFlowMode,\n PublishedEventRecord,\n TraceRecord,\n TraceSink,\n Unsubscribe,\n} from './types';\nimport type { IntentRegistry } from '../intent/IntentRegistry';\nimport type { DependencyGraph } from '../graph';\nimport type { ArchitectureProfile } from '../layers';\nimport type { AuditRecordType, AuditTrail } from '../audit';\nimport type { EventContractRegistry } from '../event-contracts';\nimport type { OutboxStore } from '../outbox';\nimport { validateIntentName } from '../intent/validateIntentName';\nimport {\n PolicyEngine,\n PolicyViolationError,\n isLayerPolicy,\n type PolicyEvaluationResult,\n} from '../policy';\nimport { buildPublishPolicyContext } from './policyContext';\nimport {\n UnregisteredIntentError,\n InvalidIntentNameError,\n LayerPolicyContextError,\n EventContractViolationError,\n UnknownEventSourceError,\n ObservedLayerFlowViolationError,\n SourceMetadataOverrideError,\n} from './errors';\n\ninterface InternalSubscription {\n intentName: string;\n handler: EventHandler<IntentName, unknown>;\n}\n\ninterface InternalInterceptor {\n registrationId: string;\n interceptorId: string;\n intentName: string;\n interceptor: EventInterceptor<IntentName, unknown>;\n createdAt: string;\n lastInterceptedAt?: string;\n}\n\nlet interceptorSequence = 0;\n\nfunction nextInterceptorRegistrationId(): string {\n interceptorSequence += 1;\n return `interceptor-${Date.now()}-${interceptorSequence}`;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction clonePatchValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(clonePatchValue);\n if (isPlainRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [key, clonePatchValue(child)])\n );\n }\n return value;\n}\n\nfunction mergeRecordPatch(\n target: Record<string, unknown>,\n patch: Record<string, unknown>,\n path = 'payload'\n): Record<string, unknown> {\n const next = { ...target };\n\n for (const [key, value] of Object.entries(patch)) {\n const childPath = `${path}.${key}`;\n if (!(key in next) || next[key] === undefined) {\n next[key] = clonePatchValue(value);\n continue;\n }\n\n if (isPlainRecord(next[key]) && isPlainRecord(value)) {\n next[key] = mergeRecordPatch(next[key] as Record<string, unknown>, value, childPath);\n continue;\n }\n\n if (Array.isArray(next[key]) && Array.isArray(value)) {\n next[key] = mergeArrayPatch(next[key] as unknown[], value, childPath);\n continue;\n }\n\n throw new Error(`Interceptor patch cannot overwrite existing ${childPath}.`);\n }\n\n return next;\n}\n\nfunction mergeArrayPatch(\n target: unknown[],\n patch: unknown[],\n path = 'payload'\n): unknown[] {\n const next = [...target];\n\n patch.forEach((value, index) => {\n const childPath = `${path}[${index}]`;\n if (index >= next.length || next[index] === undefined) {\n next[index] = clonePatchValue(value);\n return;\n }\n\n if (isPlainRecord(next[index]) && isPlainRecord(value)) {\n next[index] = mergeRecordPatch(next[index] as Record<string, unknown>, value, childPath);\n return;\n }\n\n if (Array.isArray(next[index]) && Array.isArray(value)) {\n next[index] = mergeArrayPatch(next[index] as unknown[], value, childPath);\n return;\n }\n\n throw new Error(`Interceptor patch cannot overwrite existing ${childPath}.`);\n });\n\n return next;\n}\n\nfunction applyPayloadPatch(payload: unknown, patch: EventPayloadPatch): unknown {\n if (Array.isArray(patch)) {\n if (payload === undefined) return clonePatchValue(patch);\n if (!Array.isArray(payload)) {\n throw new Error('Array interceptor patch requires an array payload.');\n }\n return mergeArrayPatch(payload, patch);\n }\n\n if (payload === undefined) return clonePatchValue(patch);\n if (!isPlainRecord(payload)) {\n throw new Error('Object interceptor patch requires an object payload.');\n }\n return mergeRecordPatch(payload, patch);\n}\n\nexport class EventBusImpl<Context = unknown> implements EventBus {\n private readonly subscriptions: InternalSubscription[] = [];\n private readonly subscriptionsByIntent = new Map<string, InternalSubscription[]>();\n private readonly interceptors: InternalInterceptor[] = [];\n private readonly interceptorsByIntent = new Map<string, InternalInterceptor[]>();\n private readonly history: PublishedEventRecord[] = [];\n private readonly trace: TraceRecord[] = [];\n private readonly onPublish?: (event: DomainEvent) => void | Promise<void>;\n private readonly onSoftViolation?: EventBusOptions<Context>['onSoftViolation'];\n private readonly onHandlerError?: EventBusOptions<Context>['onHandlerError'];\n private readonly auditTrail?: AuditTrail;\n private readonly eventContracts?: EventContractRegistry;\n private readonly strictEventContracts: boolean;\n private readonly requireKnownSource: boolean;\n private readonly architectureProfile?: ArchitectureProfile;\n private readonly enforceObservedLayerFlowMode: ObservedLayerFlowMode;\n private readonly outbox?: OutboxStore;\n private readonly instanceId?: string;\n private readonly traceSinks: TraceSink[];\n private readonly rethrowHandlerErrors: boolean;\n private readonly policyEngine?: PolicyEngine<Context>;\n private readonly getPolicyContext: (event: DomainEvent) => Context;\n private readonly maxHistorySize?: number;\n private readonly intentRegistry?: IntentRegistry;\n private readonly dependencyGraph?: DependencyGraph;\n private readonly strictRegistry: boolean;\n private readonly validateIntentNaming: boolean;\n\n constructor(options: EventBusOptions<Context> = {}) {\n this.onPublish = options.onPublish;\n this.onSoftViolation = options.onSoftViolation;\n this.onHandlerError = options.onHandlerError;\n this.auditTrail = options.auditTrail;\n this.eventContracts = options.eventContracts;\n this.strictEventContracts = options.strictEventContracts ?? false;\n this.requireKnownSource = options.requireKnownSource ?? false;\n this.architectureProfile = options.architectureProfile;\n this.enforceObservedLayerFlowMode = options.enforceObservedLayerFlow ?? 'off';\n this.outbox = options.outbox;\n this.instanceId = options.instanceId;\n this.traceSinks = [...(options.traceSinks ?? [])];\n this.rethrowHandlerErrors = options.rethrowHandlerErrors ?? false;\n this.maxHistorySize = options.maxHistorySize;\n this.intentRegistry = options.intentRegistry;\n this.dependencyGraph = options.dependencyGraph;\n this.strictRegistry =\n options.strictRegistry ?? options.intentRegistry !== undefined;\n this.validateIntentNaming =\n options.validateIntentNaming ?? this.strictRegistry;\n\n if (options.policyEngine) {\n this.policyEngine = options.policyEngine;\n } else if (options.policies && options.policies.length > 0) {\n this.policyEngine = new PolicyEngine(options.policies);\n }\n\n const allPolicies =\n this.policyEngine?.getPolicies() ?? options.policies ?? [];\n if (\n allPolicies.some(isLayerPolicy) &&\n !options.intentRegistry &&\n !options.dependencyGraph &&\n !options.getPolicyContext\n ) {\n throw new LayerPolicyContextError();\n }\n\n if (options.getPolicyContext) {\n this.getPolicyContext = options.getPolicyContext;\n } else if (options.intentRegistry || options.dependencyGraph) {\n this.getPolicyContext = buildPublishPolicyContext({\n intentRegistry: options.intentRegistry,\n dependencyGraph: options.dependencyGraph,\n }) as (event: DomainEvent) => Context;\n } else {\n this.getPolicyContext = (event) => ({ event } as Context);\n }\n }\n\n async publish<N extends IntentName, P>(\n eventOrCreator: DomainEvent<N, P> | IntentCreator<N, P>,\n payloadOrMeta?: P | Partial<EventMetadata>,\n metadata?: Partial<EventMetadata>\n ): Promise<void> {\n let event: DomainEvent<N, P>;\n const rawPublish = typeof eventOrCreator !== 'function';\n\n if (!rawPublish) {\n const creator = eventOrCreator as IntentCreator<N, P>;\n const payload = payloadOrMeta as P;\n const extraMeta = metadata ?? {};\n const created = creator(payload);\n event = {\n ...created,\n metadata: this.enrichMetadata(created.metadata, extraMeta),\n } as DomainEvent<N, P>;\n } else {\n const rawEvent = eventOrCreator as DomainEvent<N, P>;\n const extraMeta =\n (metadata as Partial<EventMetadata>) ??\n (payloadOrMeta as Partial<EventMetadata>) ??\n {};\n event = {\n ...rawEvent,\n metadata: this.enrichMetadata(rawEvent.metadata, extraMeta),\n };\n }\n\n if (rawPublish && this.strictRegistry) {\n await this.recordRawPublishDiagnostic(event as DomainEvent);\n }\n\n this.assertIntentAllowed(event.intent);\n this.assertSourceAllowed(event as DomainEvent);\n this.assertContractAllowed(event as DomainEvent);\n event = await this.applyInterceptors(event as DomainEvent<N, P>);\n this.assertContractAllowed(event as DomainEvent);\n // Enforce BEFORE recording the observed edge: in hard mode a rejected flow must not\n // leave a phantom edge in the graph that pollutes drift/manifest/observability reports.\n await this.assertObservedLayerFlowAllowed(event as DomainEvent);\n this.dependencyGraph?.registerEventFlow(event.metadata.source, event.intent);\n\n const matching = [...(this.subscriptionsByIntent.get(event.intent) ?? [])];\n\n if (this.policyEngine) {\n const ctx = this.getPolicyContext(event as DomainEvent);\n let policyResult: PolicyEvaluationResult;\n try {\n policyResult = this.policyEngine.enforce(ctx);\n } catch (err) {\n if (err instanceof PolicyViolationError) {\n this.appendTrace({\n type: 'policy.hardViolation',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: { violations: err.violations },\n });\n await this.recordAudit('policy.hardViolation', event as DomainEvent, {\n violations: err.violations,\n });\n }\n throw err;\n }\n\n if (policyResult.softViolations.length > 0) {\n this.appendTrace({\n type: 'policy.softViolation',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: { violations: policyResult.softViolations },\n });\n await this.recordAudit('policy.softViolation', event as DomainEvent, {\n violations: policyResult.softViolations,\n });\n\n if (this.onSoftViolation) {\n await this.safeHook(\n () => this.onSoftViolation!(policyResult, event as DomainEvent),\n 'onSoftViolation',\n event as DomainEvent\n );\n }\n }\n }\n\n const record: PublishedEventRecord = {\n event: event as DomainEvent,\n publishedAt: new Date().toISOString(),\n subscribersNotified: matching.length,\n };\n this.appendHistory(record);\n await this.outbox?.enqueue(event as DomainEvent);\n\n this.appendTrace({\n type: 'event.published',\n timestamp: record.publishedAt,\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: { subscribersNotified: matching.length },\n });\n await this.recordAudit('event.published', event as DomainEvent, {\n subscribersNotified: matching.length,\n });\n\n const notifications = matching.map((sub) =>\n this.invokeHandler(sub, event as DomainEvent)\n );\n\n await Promise.all(notifications);\n\n if (this.onPublish) {\n await this.safeHook(\n () => this.onPublish!(event as DomainEvent),\n 'onPublish',\n event as DomainEvent\n );\n }\n }\n\n createPublisher<N extends IntentName, P>(\n source: N | IntentCreator<N, P>\n ): EventPublisher {\n const sourceName =\n typeof source === 'string' ? source : (source as IntentCreator<N, P>).name;\n\n this.assertIntentAllowed(sourceName);\n\n return {\n source: sourceName,\n publish: async <EventName extends IntentName, Payload>(\n intent: IntentCreator<EventName, Payload>,\n payload: Payload,\n metadata: Partial<EventMetadata> = {}\n ) => {\n if (metadata.source && metadata.source !== sourceName) {\n throw new SourceMetadataOverrideError(sourceName, metadata.source);\n }\n await this.publish(intent, payload, {\n ...metadata,\n source: sourceName,\n });\n },\n };\n }\n\n subscribe<N extends IntentName, P>(\n intent: N | IntentCreator<N, P>,\n handler: EventHandler<N, P>\n ): Unsubscribe {\n const intentName =\n typeof intent === 'string' ? intent : (intent as IntentCreator<N, P>).name;\n\n this.assertIntentAllowed(intentName);\n\n const sub: InternalSubscription = {\n intentName,\n handler: handler as EventHandler<IntentName, unknown>,\n };\n\n this.subscriptions.push(sub);\n const subscriptionsForIntent = this.subscriptionsByIntent.get(intentName) ?? [];\n subscriptionsForIntent.push(sub);\n this.subscriptionsByIntent.set(intentName, subscriptionsForIntent);\n\n return () => {\n const idx = this.subscriptions.indexOf(sub);\n if (idx >= 0) this.subscriptions.splice(idx, 1);\n\n const byIntent = this.subscriptionsByIntent.get(intentName);\n if (!byIntent) return;\n\n const intentIdx = byIntent.indexOf(sub);\n if (intentIdx >= 0) byIntent.splice(intentIdx, 1);\n if (byIntent.length === 0) this.subscriptionsByIntent.delete(intentName);\n };\n }\n\n registerInterceptor<N extends IntentName, P>(\n intent: N | IntentCreator<N, P>,\n interceptor: EventInterceptor<N, P>,\n interceptorId?: string\n ): string {\n const intentName =\n typeof intent === 'string' ? intent : (intent as IntentCreator<N, P>).name;\n\n this.assertIntentAllowed(intentName);\n\n const registration: InternalInterceptor = {\n registrationId: nextInterceptorRegistrationId(),\n interceptorId: interceptorId ?? intentName,\n intentName,\n interceptor: interceptor as EventInterceptor<IntentName, unknown>,\n createdAt: new Date().toISOString(),\n };\n\n this.interceptors.push(registration);\n const interceptorsForIntent = this.interceptorsByIntent.get(intentName) ?? [];\n interceptorsForIntent.push(registration);\n this.interceptorsByIntent.set(intentName, interceptorsForIntent);\n\n return registration.registrationId;\n }\n\n unregisterInterceptor(registrationId: string): boolean {\n const interceptor = this.interceptors.find(\n (candidate) => candidate.registrationId === registrationId\n );\n if (!interceptor) return false;\n\n const idx = this.interceptors.indexOf(interceptor);\n if (idx >= 0) this.interceptors.splice(idx, 1);\n\n const byIntent = this.interceptorsByIntent.get(interceptor.intentName);\n if (byIntent) {\n const intentIdx = byIntent.indexOf(interceptor);\n if (intentIdx >= 0) byIntent.splice(intentIdx, 1);\n if (byIntent.length === 0) this.interceptorsByIntent.delete(interceptor.intentName);\n }\n\n return true;\n }\n\n listInterceptors(intent?: string): EventInterceptionInfo[] {\n return this.interceptors\n .filter((interceptor) => !intent || interceptor.intentName === intent)\n .map((interceptor) => ({\n registrationId: interceptor.registrationId,\n interceptorId: interceptor.interceptorId,\n intent: interceptor.intentName,\n createdAt: interceptor.createdAt,\n lastInterceptedAt: interceptor.lastInterceptedAt,\n }));\n }\n\n getHistory(): PublishedEventRecord[] {\n return [...this.history];\n }\n\n clearHistory(): void {\n this.history.length = 0;\n }\n\n getTrace(): TraceRecord[] {\n return [...this.trace];\n }\n\n clearTrace(): void {\n this.trace.length = 0;\n }\n\n private assertIntentAllowed(intentName: string): void {\n if (!this.strictRegistry && !this.validateIntentNaming) {\n return;\n }\n\n if (this.validateIntentNaming) {\n const validation = validateIntentName(intentName);\n if (!validation.valid) {\n throw new InvalidIntentNameError(intentName, validation.reason!);\n }\n }\n\n if (this.strictRegistry && this.intentRegistry && !this.intentRegistry.has(intentName)) {\n throw new UnregisteredIntentError(intentName);\n }\n }\n\n private assertSourceAllowed(event: DomainEvent): void {\n if (!this.requireKnownSource) return;\n if (!event.metadata.source || event.metadata.source === 'unknown') {\n throw new UnknownEventSourceError(event.intent);\n }\n if (this.intentRegistry && !this.intentRegistry.has(event.metadata.source)) {\n throw new UnknownEventSourceError(event.intent, event.metadata.source);\n }\n }\n\n private assertContractAllowed(event: DomainEvent): void {\n if (!this.eventContracts) return;\n const result = this.eventContracts.validate(event);\n\n if (!result.ok && (this.strictEventContracts || result.contract)) {\n throw new EventContractViolationError(event.intent, result.issues);\n }\n }\n\n /**\n * Enforce the OBSERVED producer→event flow (metadata.source → intent) against the\n * architecture profile's layer rules. This is the runtime counterpart to the\n * declared-model layer policy: it checks what the system actually did, resolving both\n * layers directly from the profile. It runs BEFORE the flow is recorded via\n * registerEventFlow, so in hard mode a rejected flow leaves no edge in the graph.\n */\n private async assertObservedLayerFlowAllowed(event: DomainEvent): Promise<void> {\n if (this.enforceObservedLayerFlowMode === 'off' || !this.architectureProfile) {\n return;\n }\n\n const source = event.metadata.source;\n if (!source || source === 'unknown') return;\n\n const profile = this.architectureProfile;\n const fromLayer = profile.resolveLayer(source);\n const toLayer = profile.resolveLayer(event.intent);\n if (!fromLayer || !toLayer) return;\n\n const blocked = profile.rules.find(\n (rule) => !rule.allowed && rule.from === fromLayer && rule.to === toLayer\n );\n if (!blocked) return;\n\n const severity = this.enforceObservedLayerFlowMode;\n const message =\n blocked.message ??\n `Observed layer violation: \"${source}\" (${fromLayer}) must not produce \"${event.intent}\" (${toLayer}).`;\n const details = {\n source,\n intent: event.intent,\n fromLayer,\n toLayer,\n severity,\n message,\n rule: blocked,\n };\n\n this.appendTrace({\n type: 'layer.observedViolation',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details,\n });\n await this.recordAudit('layer.observedViolation', event, details);\n\n if (severity === 'hard') {\n throw new ObservedLayerFlowViolationError(source, event.intent, fromLayer, toLayer, message);\n }\n }\n\n private async recordRawPublishDiagnostic(event: DomainEvent): Promise<void> {\n const details = {\n intent: event.intent,\n source: event.metadata.source,\n suggestion:\n 'Publish through a registered intent creator so strict registry, contracts, and agent tooling share one source of truth.',\n };\n this.appendTrace({\n type: 'event.rawPublish',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details,\n });\n await this.recordAudit('event.rawPublish', event, details);\n }\n\n private async applyInterceptors<N extends IntentName, P>(\n event: DomainEvent<N, P>\n ): Promise<DomainEvent<N, P>> {\n if (event.metadata.allowInterception === false) {\n return event;\n }\n\n const matching = [...(this.interceptorsByIntent.get(event.intent) ?? [])];\n let current = event as DomainEvent<N, P>;\n\n for (const registration of matching) {\n const patches: EventPayloadPatch[] = [];\n try {\n await Promise.resolve(\n registration.interceptor({\n event: current as Readonly<DomainEvent<IntentName, unknown>>,\n intercept: (patch) => {\n patches.push(patch);\n },\n })\n );\n\n if (patches.length === 0) {\n continue;\n }\n\n const timestamp = new Date().toISOString();\n let candidate = {\n ...current,\n metadata: {\n ...current.metadata,\n interceptions: [\n ...(current.metadata.interceptions ?? []),\n { interceptorId: registration.interceptorId, timestamp },\n ],\n },\n } as DomainEvent<N, P>;\n\n for (const patch of patches) {\n candidate = {\n ...candidate,\n payload: applyPayloadPatch(candidate.payload, patch) as P,\n metadata: { ...candidate.metadata },\n };\n }\n\n this.assertContractAllowed(candidate as DomainEvent);\n current = candidate;\n registration.lastInterceptedAt = timestamp;\n\n this.appendTrace({\n type: 'event.intercepted',\n timestamp,\n intent: current.intent,\n correlationId: current.metadata.correlationId,\n traceId: current.metadata.traceId,\n spanId: current.metadata.spanId,\n details: {\n registrationId: registration.registrationId,\n interceptorId: registration.interceptorId,\n patchesApplied: patches.length,\n },\n });\n await this.recordAudit('event.intercepted', current as DomainEvent, {\n registrationId: registration.registrationId,\n interceptorId: registration.interceptorId,\n patchesApplied: patches.length,\n });\n } catch (err) {\n await this.recordInterceptorError(registration, current as DomainEvent, err);\n }\n }\n\n return current;\n }\n\n private async invokeHandler(\n sub: InternalSubscription,\n event: DomainEvent\n ): Promise<void> {\n try {\n await Promise.resolve(sub.handler(event));\n } catch (err) {\n this.appendTrace({\n type: 'handler.error',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: { error: err instanceof Error ? err.message : String(err) },\n });\n await this.recordAudit('handler.error', event, {\n handlerIntent: sub.intentName,\n error: err instanceof Error ? err.message : String(err),\n });\n\n if (this.onHandlerError) {\n await this.safeHook(\n () => this.onHandlerError!(err, event, sub.intentName),\n 'onHandlerError',\n event\n );\n }\n\n if (this.rethrowHandlerErrors) {\n throw err;\n }\n }\n }\n\n private async safeHook(\n fn: () => void | Promise<void>,\n hookName: string,\n event: DomainEvent\n ): Promise<void> {\n try {\n await Promise.resolve(fn());\n } catch (err) {\n this.appendTrace({\n type: 'hook.error',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: {\n hook: hookName,\n error: err instanceof Error ? err.message : String(err),\n },\n });\n await this.recordAudit('hook.error', event, {\n hook: hookName,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n private async recordInterceptorError(\n interceptor: InternalInterceptor,\n event: DomainEvent,\n error: unknown\n ): Promise<void> {\n const message = error instanceof Error ? error.message : String(error);\n this.appendTrace({\n type: 'interceptor.error',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: {\n registrationId: interceptor.registrationId,\n interceptorId: interceptor.interceptorId,\n error: message,\n },\n });\n await this.recordAudit('interceptor.error', event, {\n registrationId: interceptor.registrationId,\n interceptorId: interceptor.interceptorId,\n error: message,\n });\n }\n\n private appendHistory(record: PublishedEventRecord): void {\n this.history.push(record);\n if (\n this.maxHistorySize !== undefined &&\n this.history.length > this.maxHistorySize\n ) {\n this.history.splice(0, this.history.length - this.maxHistorySize);\n }\n }\n\n private appendTrace(record: TraceRecord): void {\n this.trace.push(record);\n if (\n this.maxHistorySize !== undefined &&\n this.trace.length > this.maxHistorySize\n ) {\n this.trace.splice(0, this.trace.length - this.maxHistorySize);\n }\n for (const sink of this.traceSinks) {\n try {\n sink(record);\n } catch {\n /* Trace sinks must not affect publish semantics. */\n }\n }\n }\n\n private async recordAudit(\n type: AuditRecordType,\n event: DomainEvent,\n details?: unknown\n ): Promise<void> {\n if (!this.auditTrail) return;\n try {\n await this.auditTrail.record({\n type,\n source: event.metadata.source,\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n causationId: event.metadata.causationId,\n subject: event.intent,\n details,\n });\n } catch (err) {\n this.appendTrace({\n type: 'hook.error',\n timestamp: new Date().toISOString(),\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n traceId: event.metadata.traceId,\n spanId: event.metadata.spanId,\n details: {\n hook: 'auditTrail',\n error: err instanceof Error ? err.message : String(err),\n },\n });\n }\n }\n\n private enrichMetadata(\n base: EventMetadata,\n extra: Partial<EventMetadata>\n ): EventMetadata {\n return {\n ...base,\n ...extra,\n occurredAt:\n extra.occurredAt || base.occurredAt || new Date().toISOString(),\n source: extra.source || base.source || 'unknown',\n kernelInstanceId:\n extra.kernelInstanceId ?? base.kernelInstanceId ?? this.instanceId,\n eventVersion: extra.eventVersion ?? base.eventVersion,\n schemaVersion: extra.schemaVersion ?? base.schemaVersion,\n allowInterception:\n extra.allowInterception ?? base.allowInterception,\n interceptions:\n extra.interceptions ?? base.interceptions,\n correlationId: extra.correlationId ?? base.correlationId,\n causationId: extra.causationId ?? base.causationId,\n traceId: extra.traceId ?? base.traceId,\n spanId: extra.spanId ?? base.spanId,\n parentSpanId: extra.parentSpanId ?? base.parentSpanId,\n };\n }\n}\n\nexport function createEventBus<Context = unknown>(\n options?: EventBusOptions<Context>\n): EventBus {\n return new EventBusImpl(options);\n}\n","import type { DomainEvent } from '../../domain/types';\nimport type {\n EventContract,\n EventContractIssue,\n EventPayloadSchema,\n EventContractRegistry,\n EventContractValidationResult,\n EventSchemaField,\n EventSchemaFieldType,\n StandardSchemaIssue,\n} from './types';\n\nfunction formatStandardSchemaPath(\n path: StandardSchemaIssue['path']\n): string | undefined {\n if (!path || path.length === 0) return undefined;\n return path\n .map((segment) =>\n typeof segment === 'object' && segment !== null && 'key' in segment\n ? String(segment.key)\n : String(segment)\n )\n .join('.');\n}\n\nfunction actualType(value: unknown): EventSchemaFieldType {\n if (Array.isArray(value)) return 'array';\n if (value === null) return 'object';\n const type = typeof value;\n if (type === 'string' || type === 'number' || type === 'boolean' || type === 'object') {\n return type;\n }\n return 'unknown';\n}\n\nfunction formatPath(parent: string | undefined, field: string): string {\n return parent ? `${parent}.${field}` : field;\n}\n\nfunction validateSchemaField(\n value: unknown,\n fieldSchema: EventSchemaField,\n path: string,\n contract: EventContract,\n issues: EventContractIssue[]\n): void {\n const valueType = actualType(value);\n\n if (fieldSchema.type !== 'unknown' && valueType !== fieldSchema.type) {\n issues.push({\n intent: contract.intent,\n version: contract.version,\n field: path,\n message: `Expected ${fieldSchema.type}, received ${valueType}.`,\n });\n return;\n }\n\n if (\n fieldSchema.enum &&\n !fieldSchema.enum.some((allowed) => Object.is(allowed, value))\n ) {\n issues.push({\n intent: contract.intent,\n version: contract.version,\n field: path,\n message: 'Value is not allowed by event contract enum.',\n });\n }\n\n if (fieldSchema.type === 'object' && fieldSchema.fields) {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n issues.push({\n intent: contract.intent,\n version: contract.version,\n field: path,\n message: 'Nested object field must be a non-array object.',\n });\n return;\n }\n validateObjectSchema(\n value as Record<string, unknown>,\n fieldSchema.fields,\n contract,\n issues,\n path\n );\n }\n\n if (fieldSchema.type === 'array' && fieldSchema.items && Array.isArray(value)) {\n value.forEach((item, index) => {\n validateSchemaField(\n item,\n fieldSchema.items!,\n `${path}[${index}]`,\n contract,\n issues\n );\n });\n }\n}\n\nfunction validateObjectSchema(\n payload: Record<string, unknown>,\n schema: EventPayloadSchema,\n contract: EventContract,\n issues: EventContractIssue[],\n parentPath?: string\n): void {\n for (const [field, fieldSchema] of Object.entries(schema)) {\n const path = formatPath(parentPath, field);\n const value = payload[field];\n if (value === undefined) {\n if (fieldSchema.required) {\n issues.push({\n intent: contract.intent,\n version: contract.version,\n field: path,\n message: 'Required field is missing.',\n });\n }\n continue;\n }\n\n validateSchemaField(value, fieldSchema, path, contract, issues);\n }\n}\n\nexport class EventContractRegistryImpl implements EventContractRegistry {\n private readonly contracts = new Map<string, EventContract>();\n\n register(contract: EventContract): void {\n const key = this.key(contract.intent, contract.version);\n if (this.contracts.has(key)) {\n throw new Error(`Event contract \"${key}\" is already registered.`);\n }\n this.contracts.set(key, { allowAdditionalFields: true, ...contract });\n }\n\n get(intent: string, version?: string): EventContract | undefined {\n if (version) return this.contracts.get(this.key(intent, version));\n return this.list(intent).at(-1);\n }\n\n list(intent?: string): EventContract[] {\n return Array.from(this.contracts.values()).filter(\n (contract) => !intent || contract.intent === intent\n );\n }\n\n validate(event: DomainEvent): EventContractValidationResult {\n const version = event.metadata.eventVersion;\n const contract = this.get(event.intent, version);\n const issues: EventContractIssue[] = [];\n\n if (!contract) {\n return {\n ok: false,\n issues: [\n {\n intent: event.intent,\n version,\n message: version\n ? `No event contract registered for version \"${version}\".`\n : 'No event contract registered for intent.',\n },\n ],\n };\n }\n\n if (contract.deprecated) {\n issues.push({\n intent: event.intent,\n version: contract.version,\n message:\n typeof contract.deprecated === 'string'\n ? contract.deprecated\n : 'Event contract is deprecated.',\n });\n }\n\n const payload =\n event.payload != null && typeof event.payload === 'object'\n ? (event.payload as Record<string, unknown>)\n : undefined;\n\n if (contract.schema) {\n if (!payload) {\n issues.push({\n intent: event.intent,\n version: contract.version,\n message: 'Payload must be an object for schema validation.',\n });\n } else {\n validateObjectSchema(payload, contract.schema, contract, issues);\n\n if (contract.allowAdditionalFields === false) {\n for (const field of Object.keys(payload)) {\n if (!contract.schema[field]) {\n issues.push({\n intent: event.intent,\n version: contract.version,\n field,\n message: 'Additional field is not allowed by event contract.',\n });\n }\n }\n }\n }\n }\n\n if (contract.standardSchema) {\n const result = contract.standardSchema['~standard'].validate(event.payload);\n if (result instanceof Promise) {\n issues.push({\n intent: event.intent,\n version: contract.version,\n message:\n 'Standard Schema validator returned a Promise; event contract validation is synchronous.',\n });\n } else if (result.issues) {\n for (const issue of result.issues) {\n issues.push({\n intent: event.intent,\n version: contract.version,\n field: formatStandardSchemaPath(issue.path),\n message: issue.message,\n });\n }\n }\n }\n\n return { ok: issues.length === 0, contract, issues };\n }\n\n clear(): void {\n this.contracts.clear();\n }\n\n private key(intent: string, version: string): string {\n return `${intent}@${version}`;\n }\n}\n\nexport function createEventContractRegistry(): EventContractRegistry {\n return new EventContractRegistryImpl();\n}\n","import type { DomainEvent } from '../../domain/types';\nimport type { OutboxRecord, OutboxStatus, OutboxStore } from './types';\n\nlet outboxSequence = 0;\n\nfunction nextOutboxId(): string {\n outboxSequence += 1;\n return `outbox-${Date.now()}-${outboxSequence}`;\n}\n\nfunction cloneRecord(record: OutboxRecord): OutboxRecord {\n return {\n ...record,\n event: {\n ...record.event,\n metadata: { ...record.event.metadata },\n },\n };\n}\n\nexport class InMemoryOutboxStore implements OutboxStore {\n private readonly records = new Map<string, OutboxRecord>();\n\n async enqueue(event: DomainEvent): Promise<OutboxRecord> {\n const now = new Date().toISOString();\n const record: OutboxRecord = {\n id: nextOutboxId(),\n event,\n status: 'pending',\n attempts: 0,\n createdAt: now,\n updatedAt: now,\n };\n this.records.set(record.id, record);\n return cloneRecord(record);\n }\n\n async markDispatched(id: string): Promise<void> {\n const record = this.records.get(id);\n if (!record) return;\n record.status = 'dispatched';\n record.updatedAt = new Date().toISOString();\n }\n\n async markFailed(id: string, error: unknown): Promise<void> {\n const record = this.records.get(id);\n if (!record) return;\n record.status = 'failed';\n record.attempts += 1;\n record.error = error instanceof Error ? error.message : String(error);\n record.updatedAt = new Date().toISOString();\n }\n\n async list(status?: OutboxStatus): Promise<OutboxRecord[]> {\n return Array.from(this.records.values())\n .filter((record) => !status || record.status === status)\n .map(cloneRecord);\n }\n\n async clear(): Promise<void> {\n this.records.clear();\n }\n}\n","import type {\n CreateObservabilityReporterOptions,\n ObservabilityDriftReport,\n ObservabilityFlow,\n ObservabilityReporter,\n} from './types';\n\nfunction flowKey(flow: ObservabilityFlow): string {\n return `${flow.from}->${flow.to}`;\n}\n\nfunction uniqueFlows(flows: ObservabilityFlow[]): ObservabilityFlow[] {\n const seen = new Set<string>();\n const result: ObservabilityFlow[] = [];\n for (const flow of flows) {\n const key = flowKey(flow);\n if (seen.has(key)) continue;\n seen.add(key);\n result.push(flow);\n }\n return result;\n}\n\nfunction difference(left: ObservabilityFlow[], right: ObservabilityFlow[]): ObservabilityFlow[] {\n const rightKeys = new Set(right.map(flowKey));\n return left.filter((flow) => !rightKeys.has(flowKey(flow)));\n}\n\nexport function createObservabilityReporter(\n options: CreateObservabilityReporterOptions\n): ObservabilityReporter {\n const registry = options.registry;\n const eventBus = options.eventBus;\n const graph = options.graph;\n\n return {\n report(): ObservabilityDriftReport {\n const declaredFromRegistry = registry\n ? registry\n .getAllRelationships()\n .filter((relationship) => relationship.kind === 'produces')\n .map((relationship) => ({\n from: relationship.from,\n to: relationship.to,\n }))\n : [];\n\n const declaredFromGraph =\n declaredFromRegistry.length > 0 || !graph\n ? []\n : graph\n .getEdges()\n .filter((edge) => edge.kind === 'produces')\n .map((edge) => ({ from: edge.from, to: edge.to }));\n\n const observedFromHistory =\n eventBus?.getHistory().map((record) => ({\n from: record.event.metadata.source,\n to: record.event.intent,\n })) ?? [];\n\n const observedFromGraph =\n observedFromHistory.length > 0 || !graph\n ? []\n : graph\n .getEdges()\n .filter((edge) => edge.kind === 'observed')\n .map((edge) => ({ from: edge.from, to: edge.to }));\n\n const declaredProductions = uniqueFlows([\n ...declaredFromRegistry,\n ...declaredFromGraph,\n ]);\n const observedProductions = uniqueFlows([\n ...observedFromHistory,\n ...observedFromGraph,\n ]);\n const unknownSources = observedProductions.filter(\n (flow) => !flow.from || flow.from === 'unknown'\n );\n\n const unregisteredObservedSources = registry\n ? Array.from(\n new Set(\n observedProductions\n .map((flow) => flow.from)\n .filter(\n (source) =>\n source &&\n source !== 'unknown' &&\n !registry.has(source)\n )\n )\n )\n : [];\n\n const unregisteredObservedIntents = registry\n ? Array.from(\n new Set(\n observedProductions\n .map((flow) => flow.to)\n .filter((intent) => !registry.has(intent))\n )\n )\n : [];\n\n const observedIntentNames = new Set(\n observedProductions.flatMap((flow) => [flow.from, flow.to])\n );\n const registeredButNeverObserved = registry\n ? registry\n .list()\n .map((intent) => intent.name)\n .filter((intent) => !observedIntentNames.has(intent))\n : [];\n\n return {\n generatedAt: new Date().toISOString(),\n declaredProductions,\n observedProductions,\n declaredButUnobserved: difference(declaredProductions, observedProductions),\n observedButUndeclared: difference(\n observedProductions.filter((flow) => flow.from !== 'unknown'),\n declaredProductions\n ),\n unknownSources,\n unregisteredObservedSources,\n unregisteredObservedIntents,\n registeredButNeverObserved,\n };\n },\n };\n}\n","import type { ArkKernel } from '../runtime';\nimport type { ArkTestHarness, ArkTestSnapshot } from './types';\nimport type { AuditQuery, AuditRecord } from '../audit';\nimport type { DomainEvent } from '../../domain/types';\nimport type { OutboxRecord, OutboxStatus } from '../outbox';\nimport type { TraceRecord, TraceRecordType } from '../event-bus';\n\nexport function createArkTestHarness(kernel: ArkKernel): ArkTestHarness {\n return {\n events(intent?: string): DomainEvent[] {\n return kernel.eventBus\n .getHistory()\n .map((record) => record.event)\n .filter((event) => !intent || event.intent === intent);\n },\n\n traces(type?: TraceRecordType): TraceRecord[] {\n return kernel.eventBus\n .getTrace()\n .filter((record) => !type || record.type === type);\n },\n\n audit(query?: AuditQuery): Promise<AuditRecord[]> {\n return kernel.auditTrail.query(query);\n },\n\n outbox(status?: OutboxStatus): Promise<OutboxRecord[]> {\n return kernel.outbox.list(status);\n },\n\n observability() {\n kernel.syncGraph();\n return kernel.observability.report();\n },\n\n async snapshot(): Promise<ArkTestSnapshot> {\n return {\n events: this.events(),\n traces: this.traces(),\n audit: await this.audit(),\n outbox: await this.outbox(),\n observability: this.observability(),\n };\n },\n\n async clear(): Promise<void> {\n kernel.eventBus.clearHistory();\n kernel.eventBus.clearTrace();\n await kernel.auditTrail.clear();\n await kernel.outbox.clear();\n },\n };\n}\n","import type {\n AuditQuery,\n AuditRecord,\n AuditRecordInput,\n AuditStore,\n AuditTrail,\n CreateAuditTrailOptions,\n} from './types';\n\nlet auditSequence = 0;\n\nfunction createAuditId(): string {\n auditSequence += 1;\n return `audit-${Date.now()}-${auditSequence}`;\n}\n\nfunction matchesQuery(record: AuditRecord, query: AuditQuery): boolean {\n if (query.type && record.type !== query.type) return false;\n if (query.intent && record.intent !== query.intent) return false;\n if (query.correlationId && record.correlationId !== query.correlationId) return false;\n if (query.subject && record.subject !== query.subject) return false;\n if (query.since && record.timestamp < query.since) return false;\n if (query.until && record.timestamp > query.until) return false;\n return true;\n}\n\nexport class InMemoryAuditStore implements AuditStore {\n private readonly records: AuditRecord[] = [];\n\n constructor(private readonly maxRecords?: number) {}\n\n append(record: AuditRecord): void {\n this.records.push(record);\n if (this.maxRecords !== undefined && this.records.length > this.maxRecords) {\n this.records.splice(0, this.records.length - this.maxRecords);\n }\n }\n\n query(query: AuditQuery = {}): AuditRecord[] {\n const records = this.records.filter((record) => matchesQuery(record, query));\n return query.limit === undefined ? [...records] : records.slice(-query.limit);\n }\n\n clear(): void {\n this.records.length = 0;\n }\n}\n\nexport class AuditTrailImpl implements AuditTrail {\n constructor(private readonly store: AuditStore) {}\n\n async record(input: AuditRecordInput): Promise<AuditRecord> {\n const record: AuditRecord = {\n id: createAuditId(),\n timestamp: input.timestamp ?? new Date().toISOString(),\n type: input.type,\n source: input.source,\n actor: input.actor,\n intent: input.intent,\n correlationId: input.correlationId,\n causationId: input.causationId,\n subject: input.subject,\n details: input.details,\n };\n await this.store.append(record);\n return record;\n }\n\n async query(query?: AuditQuery): Promise<AuditRecord[]> {\n return this.store.query(query);\n }\n\n async clear(): Promise<void> {\n await this.store.clear();\n }\n}\n\nexport function createAuditTrail(options: CreateAuditTrailOptions = {}): AuditTrail {\n return new AuditTrailImpl(\n options.store ?? new InMemoryAuditStore(options.maxRecords)\n );\n}\n","/**\n * DependencyGraph implementation.\n *\n * Collects declared and observed relationships.\n * Generates Mermaid diagrams and JSON.\n * Supports simple violation detection via rule functions.\n */\n\nimport type {\n DependencyGraph,\n GraphEdge,\n GraphNode,\n} from './types';\nimport type { ArchitectureProfile } from '../layers';\n\nexport class DependencyGraphImpl implements DependencyGraph {\n private nodes = new Map<string, GraphNode>();\n private edges: GraphEdge[] = [];\n\n registerDependency(\n from: string,\n to: string,\n kind: GraphEdge['kind'] = 'declared'\n ): void {\n this.ensureNode(from);\n this.ensureNode(to);\n this.addEdge({ from, to, kind });\n }\n\n registerEventFlow(producer: string, consumer: string): void {\n this.ensureNode(producer);\n this.ensureNode(consumer);\n this.addEdge({ from: producer, to: consumer, kind: 'observed' });\n }\n\n getNodes(): GraphNode[] {\n return Array.from(this.nodes.values());\n }\n\n getEdges(): GraphEdge[] {\n return [...this.edges];\n }\n\n toJSON() {\n return {\n nodes: this.getNodes(),\n edges: this.getEdges(),\n };\n }\n\n toMermaid(): string {\n let out = 'flowchart TD\\n';\n for (const edge of this.edges) {\n // Valid Mermaid labeled edge syntax: A -->|label| B (no spaces around |label|)\n const label = edge.kind ? `|${edge.kind}|` : '';\n out += ` ${this.safeId(edge.from)} -->${label} ${this.safeId(edge.to)}\\n`;\n }\n // Also list isolated nodes if any\n const connected = new Set(\n this.edges.flatMap((e) => [e.from, e.to])\n );\n for (const node of this.nodes.keys()) {\n if (!connected.has(node)) {\n out += ` ${this.safeId(node)}\\n`;\n }\n }\n return out.trim();\n }\n\n toLayerMermaid(profile: ArchitectureProfile): string {\n const nodesByLayer = new Map<string, string[]>();\n\n for (const node of this.nodes.keys()) {\n const layer = profile.resolveLayer(node) ?? 'Unclassified';\n const current = nodesByLayer.get(layer) ?? [];\n current.push(node);\n nodesByLayer.set(layer, current);\n }\n\n let out = 'flowchart TD\\n';\n for (const layer of profile.layers) {\n const nodes = nodesByLayer.get(layer.name) ?? [];\n if (nodes.length === 0) continue;\n out += ` subgraph ${this.safeId(layer.name)}[${layer.name}]\\n`;\n for (const node of nodes) {\n out += ` ${this.safeId(node)}[${node}]\\n`;\n }\n out += ' end\\n';\n }\n\n const unclassified = nodesByLayer.get('Unclassified') ?? [];\n if (unclassified.length > 0) {\n out += ' subgraph Unclassified[Unclassified]\\n';\n for (const node of unclassified) {\n out += ` ${this.safeId(node)}[${node}]\\n`;\n }\n out += ' end\\n';\n }\n\n for (const edge of this.edges) {\n const label = edge.kind ? `|${edge.kind}|` : '';\n out += ` ${this.safeId(edge.from)} -->${label} ${this.safeId(edge.to)}\\n`;\n }\n\n return out.trim();\n }\n\n detectViolations(\n rules: Array<(edges: GraphEdge[]) => string[]> = []\n ): string[] {\n const violations: string[] = [];\n\n // default simple rule: no cycles (basic)\n const cycles = this.findSimpleCycles();\n if (cycles.length > 0) {\n violations.push(`Cycle detected: ${cycles.map((c) => c.join('->')).join(', ')}`);\n }\n\n // user provided rules\n for (const rule of rules) {\n try {\n const res = rule(this.edges);\n if (res && res.length) violations.push(...res);\n } catch (e) {\n violations.push(`Rule error: ${(e as Error).message}`);\n }\n }\n\n return violations;\n }\n\n private ensureNode(id: string) {\n if (!this.nodes.has(id)) {\n this.nodes.set(id, { id });\n }\n }\n\n private addEdge(edge: GraphEdge) {\n // Avoid exact duplicates\n const exists = this.edges.some(\n (e) => e.from === edge.from && e.to === edge.to && e.kind === edge.kind\n );\n if (!exists) {\n this.edges.push(edge);\n }\n }\n\n // Very naive cycle detection for small graphs\n private findSimpleCycles(): string[][] {\n const graph = new Map<string, string[]>();\n for (const e of this.edges) {\n if (!graph.has(e.from)) graph.set(e.from, []);\n graph.get(e.from)!.push(e.to);\n }\n\n const cycles: string[][] = [];\n const visited = new Set<string>();\n const stack: string[] = [];\n\n const dfs = (node: string) => {\n visited.add(node);\n stack.push(node);\n\n for (const nei of graph.get(node) || []) {\n if (!visited.has(nei)) {\n dfs(nei);\n } else if (stack.includes(nei)) {\n const cycleStart = stack.indexOf(nei);\n const cycle = stack.slice(cycleStart).concat(nei);\n cycles.push(cycle);\n }\n }\n\n stack.pop();\n };\n\n for (const node of graph.keys()) {\n if (!visited.has(node)) dfs(node);\n }\n\n // Dedup cycles (naive)\n const unique = new Set(cycles.map((c) => c.join('->')));\n return Array.from(unique).map((s) => s.split('->'));\n }\n\n private safeId(id: string): string {\n return id.replace(/[^a-zA-Z0-9_]/g, '_');\n }\n}\n\nexport function createDependencyGraph(): DependencyGraph {\n return new DependencyGraphImpl();\n}\n","/**\n * Bridge IntentRegistry relationships into a DependencyGraph.\n */\n\nimport type { IntentRegistry } from '../intent/IntentRegistry';\nimport type { DependencyGraph } from './types';\n\nexport interface SyncRegistryOptions {\n /** Skip edges whose target intent is not registered (default: false). */\n requireRegisteredTargets?: boolean;\n}\n\n/**\n * Sync declared intent relationships from a registry into a dependency graph.\n *\n * - `dependsOn` → `declared` edges\n * - `produces` → `produces` edges\n */\nexport function syncRegistryToGraph(\n registry: IntentRegistry,\n graph: DependencyGraph,\n options: SyncRegistryOptions = {}\n): void {\n const requireRegistered = options.requireRegisteredTargets ?? false;\n\n for (const rel of registry.getAllRelationships()) {\n if (requireRegistered && !registry.has(rel.to)) {\n continue;\n }\n\n if (rel.kind === 'dependsOn') {\n graph.registerDependency(rel.from, rel.to, 'declared');\n } else {\n graph.registerDependency(rel.from, rel.to, 'produces');\n }\n }\n}","import type {\n ArchitectureLayer,\n ArchitectureProfile,\n ArchitectureRule,\n ArkCheckConfig,\n CreateElevenLayerArkConfigOptions,\n CreateArchitectureProfileOptions,\n} from './types';\n\nfunction normalizePrefix(prefix: string): string {\n return prefix.endsWith('.') ? prefix : `${prefix}.`;\n}\n\nfunction byLongestPrefix(a: ArchitectureLayer, b: ArchitectureLayer): number {\n const maxA = Math.max(...a.prefixes.map((p) => p.length));\n const maxB = Math.max(...b.prefixes.map((p) => p.length));\n return maxB - maxA;\n}\n\nfunction flowKey(from: string, to: string): string {\n return `${from}->${to}`;\n}\n\nfunction createStrictDenyRules(\n layers: ArchitectureLayer[],\n allowedFlows: Array<Pick<ArchitectureRule, 'from' | 'to'>>\n): ArchitectureRule[] {\n const allowed = new Set(allowedFlows.map((flow) => flowKey(flow.from, flow.to)));\n const rules: ArchitectureRule[] = [];\n\n for (const from of layers) {\n for (const to of layers) {\n if (from.name === to.name) continue;\n if (allowed.has(flowKey(from.name, to.name))) continue;\n rules.push({ from: from.name, to: to.name, allowed: false });\n }\n }\n\n return rules;\n}\n\nexport function createArchitectureProfile(\n options: CreateArchitectureProfileOptions\n): ArchitectureProfile {\n const layers = options.layers.map((layer) => ({\n ...layer,\n prefixes: layer.prefixes.map(normalizePrefix),\n }));\n const sortedLayers = [...layers].sort(byLongestPrefix);\n const rules: ArchitectureRule[] = [...(options.rules ?? [])];\n\n return {\n name: options.name,\n layers,\n rules,\n resolveLayer(name: string): string | undefined {\n return sortedLayers.find((layer) =>\n layer.prefixes.some((prefix) => name.startsWith(prefix))\n )?.name;\n },\n };\n}\n\nconst elevenLayerProfileLayers: ArchitectureLayer[] = [\n {\n name: 'DomainModel',\n prefixes: ['Domain'],\n description: 'Rich domain model, business rules, and domain events.',\n order: 1,\n },\n {\n name: 'ApplicationOrchestration',\n prefixes: ['Application'],\n description: 'Use cases and command orchestration.',\n order: 2,\n },\n {\n name: 'PersistenceAdapters',\n prefixes: ['Adapter.Persistence', 'Adapter.Repository'],\n description: 'Database, repository, and storage adapters.',\n order: 3,\n },\n {\n name: 'IntegrationAdapters',\n prefixes: ['Adapter.Integration', 'Adapter.External'],\n description: 'External systems, APIs, and integration adapters.',\n order: 4,\n },\n {\n name: 'WorkflowSagaEngine',\n prefixes: ['Workflow'],\n description: 'Sagas, workflows, and long-running processes.',\n order: 5,\n },\n {\n name: 'BackgroundJobsScheduling',\n prefixes: ['Job'],\n description: 'Background jobs, scheduled work, and async processors.',\n order: 6,\n },\n {\n name: 'PresentationAdapters',\n prefixes: ['Presentation', 'Adapter.Presentation', 'Adapter.Api'],\n description: 'API, UI, controller, and presentation adapters.',\n order: 7,\n },\n {\n name: 'ReportingReadModels',\n prefixes: ['Reporting'],\n description: 'Read models, projections, and reporting surfaces.',\n order: 8,\n },\n {\n name: 'ExtensibilityMetadata',\n prefixes: ['Metadata'],\n description: 'Metadata, extensions, and schema contracts.',\n order: 9,\n },\n {\n name: 'SecurityAuditObservability',\n prefixes: ['Security', 'Audit', 'Observability'],\n description: 'Security, audit, and observability concerns.',\n order: 10,\n },\n {\n name: 'Kernel',\n prefixes: ['Kernel'],\n description: 'Ark-owned governance and kernel signals.',\n order: 11,\n },\n];\n\nconst elevenLayerAllowedFlows: Array<Pick<ArchitectureRule, 'from' | 'to'>> = [\n { from: 'PresentationAdapters', to: 'ApplicationOrchestration' },\n { from: 'ApplicationOrchestration', to: 'DomainModel' },\n { from: 'WorkflowSagaEngine', to: 'ApplicationOrchestration' },\n { from: 'WorkflowSagaEngine', to: 'DomainModel' },\n { from: 'BackgroundJobsScheduling', to: 'ApplicationOrchestration' },\n];\n\nexport const elevenLayerProfile = createArchitectureProfile({\n name: 'Ark 11-layer Hexagonal Event-Driven Profile',\n layers: elevenLayerProfileLayers,\n rules: createStrictDenyRules(\n elevenLayerProfileLayers,\n elevenLayerAllowedFlows\n ),\n});\n\nconst defaultElevenLayerDirectories: Record<string, string[]> = {\n DomainModel: ['domain'],\n ApplicationOrchestration: ['application', 'app'],\n PersistenceAdapters: [\n 'adapters/persistence',\n 'adapters/repository',\n 'repositories',\n 'infra/persistence',\n ],\n IntegrationAdapters: ['adapters/integration', 'adapters/external', 'integrations'],\n WorkflowSagaEngine: ['workflows', 'sagas'],\n BackgroundJobsScheduling: ['jobs', 'schedules'],\n PresentationAdapters: ['presentation', 'adapters/presentation', 'adapters/api'],\n ReportingReadModels: ['reporting', 'read-models', 'projections'],\n ExtensibilityMetadata: ['metadata', 'extensions'],\n SecurityAuditObservability: ['security', 'audit', 'observability'],\n Kernel: ['kernel'],\n};\n\nexport function createElevenLayerArkConfig(\n options: CreateElevenLayerArkConfigOptions = {}\n): ArkCheckConfig {\n const rootDir = options.rootDir ?? 'src';\n const optional = options.optionalLayers ?? true;\n const prefix = rootDir === '.' ? '' : `${rootDir}/`;\n\n return {\n include: options.include ?? [rootDir],\n layers: elevenLayerProfile.layers.map((layer) => ({\n name: layer.name,\n patterns: (defaultElevenLayerDirectories[layer.name] ?? [layer.name]).map(\n (directory) => `${prefix}${directory}/**`\n ),\n intentPrefixes: layer.prefixes,\n optional,\n })),\n rules: [...elevenLayerProfile.rules],\n };\n}\n","/**\n * Basic MetadataRegistry implementation.\n */\n\nimport type {\n EntityMeta,\n MetadataIssue,\n MetadataRegistry,\n MetadataRegistrationOptions,\n MetadataValidationResult,\n} from './types';\n\nexport class MetadataRegistryImpl implements MetadataRegistry {\n private entities = new Map<string, EntityMeta>();\n\n entity(\n name: string,\n meta: Omit<EntityMeta, 'name'>,\n options: MetadataRegistrationOptions = {}\n ): EntityMeta {\n if (this.entities.has(name) && !options.allowOverwrite) {\n throw new Error(`Entity metadata \"${name}\" is already registered.`);\n }\n const full: EntityMeta = { name, fields: {}, ...meta };\n this.entities.set(name, full);\n return full;\n }\n\n getEntity(name: string): EntityMeta | undefined {\n return this.entities.get(name);\n }\n\n listEntities(): EntityMeta[] {\n return Array.from(this.entities.values());\n }\n\n findEntitiesByIntent(intentName: string): EntityMeta[] {\n return this.listEntities().filter(\n (entity) =>\n entity.emits?.includes(intentName) || entity.consumes?.includes(intentName)\n );\n }\n\n validate(): MetadataValidationResult {\n const issues: MetadataIssue[] = [];\n\n for (const entity of this.entities.values()) {\n if (!entity.name.trim()) {\n issues.push({ entity: entity.name, message: 'Entity name is required.' });\n }\n\n for (const [fieldName, field] of Object.entries(entity.fields)) {\n if (!fieldName.trim()) {\n issues.push({ entity: entity.name, field: fieldName, message: 'Field name is required.' });\n }\n if (!field.type || typeof field.type !== 'string') {\n issues.push({\n entity: entity.name,\n field: fieldName,\n message: 'Field type must be a non-empty string.',\n });\n }\n if (field.relation && !this.entities.has(field.relation.entity)) {\n issues.push({\n entity: entity.name,\n field: fieldName,\n message: `Related entity \"${field.relation.entity}\" is not registered.`,\n });\n }\n }\n }\n\n return { ok: issues.length === 0, issues };\n }\n\n toJSON(): EntityMeta[] {\n return this.listEntities();\n }\n}\n\nexport function createMetadataRegistry(): MetadataRegistry {\n return new MetadataRegistryImpl();\n}\n","/**\n * Ports and Adapters utilities.\n *\n * definePort + createAdapter with basic runtime contract validation.\n */\n\nimport type {\n Adapter,\n AdapterGovernanceResult,\n ContractCheckResult,\n CreateAdapterOptions,\n DefinePortOptions,\n Port,\n} from './types';\n\nexport function definePort<T = unknown>(\n name: string,\n options: DefinePortOptions = {}\n): Port<T> {\n return {\n name,\n ownerLayer: options.ownerLayer,\n intent: options.intent,\n allowedAdapters: options.allowedAdapters\n ? [...options.allowedAdapters]\n : undefined,\n } as Port<T>;\n}\n\nexport function createAdapter<T>(\n port: Port<T>,\n impl: T,\n requiredKeysOrOptions?: string[] | CreateAdapterOptions,\n adapterOptions: CreateAdapterOptions = {}\n): Adapter<T> {\n const options = Array.isArray(requiredKeysOrOptions)\n ? { ...adapterOptions, requiredKeys: requiredKeysOrOptions }\n : { ...(requiredKeysOrOptions ?? {}) };\n const requiredKeys = options.requiredKeys;\n\n if (requiredKeys && requiredKeys.length > 0) {\n const missing = requiredKeys.filter((k) => !hasMember(impl, k));\n if (missing.length > 0) {\n throw new Error(\n `Adapter for port \"${port.name}\" is missing required members: ${missing.join(', ')}`\n );\n }\n }\n\n const adapter: Adapter<T> = {\n name: options.name,\n layer: options.layer,\n intent: options.intent,\n port,\n impl,\n };\n const governance = checkAdapterGovernance(adapter);\n if (!governance.ok) {\n throw new Error(governance.issues.map((issue) => issue.message).join('\\n'));\n }\n return adapter;\n}\n\nexport function checkContract(\n impl: unknown,\n requiredKeys: string[] = []\n): ContractCheckResult {\n const missing = requiredKeys.filter((k) => !hasMember(impl, k));\n return missing.length === 0 ? { ok: true } : { ok: false, missing };\n}\n\nexport function checkAdapterGovernance(adapter: Adapter): AdapterGovernanceResult {\n const allowed = adapter.port.allowedAdapters ?? [];\n if (allowed.length === 0) {\n return { ok: true, issues: [] };\n }\n\n const adapterNames = [adapter.name, adapter.intent].filter(\n (value): value is string => typeof value === 'string' && value.length > 0\n );\n const matched = adapterNames.some((name) => allowed.includes(name));\n if (matched) {\n return { ok: true, issues: [] };\n }\n\n return {\n ok: false,\n issues: [\n {\n ruleId: 'ADAPTER_NOT_ALLOWED_FOR_PORT',\n port: adapter.port.name,\n adapter: adapter.name ?? adapter.intent,\n message:\n `Adapter \"${adapter.name ?? adapter.intent ?? 'unknown'}\" is not allowed for port \"${adapter.port.name}\".`,\n },\n ],\n };\n}\n\nfunction hasMember(value: unknown, key: string): boolean {\n return (\n value != null &&\n (typeof value === 'object' || typeof value === 'function') &&\n key in value\n );\n}\n","/**\n * Basic AI Code Gate implementation.\n *\n * Uses simple string heuristics + registered intent names to detect obvious\n * architectural violations in generated code (e.g. direct infra imports from domain).\n * Not a full static analyzer — documented limitation.\n */\n\nimport type {\n AICodeGate,\n AICodeGateContext,\n AICodeGateResult,\n AICodeGateViolation,\n AIGateExtension,\n} from './types';\nimport type { Policy } from '../policy';\nimport type { IntentCreator } from '../intent';\nimport type { IntentName } from '../../domain/types';\nimport type { ArchitectureProfile } from '../layers';\n\nexport interface AICodeGatePolicyContext<Context = AICodeGateContext> {\n source: string;\n context?: Context;\n}\n\nexport interface AICodeGateOptions<Context = AICodeGateContext> {\n policies?: Policy<AICodeGatePolicyContext<Context>>[];\n intents?: Array<string | Pick<IntentCreator<IntentName, unknown>, 'name'>>;\n /**\n * Additional forbidden patterns (regex or strings).\n */\n forbiddenPatterns?: Array<string | RegExp>;\n /**\n * External analyzer extensions (type-only contract; plug in AST tools later).\n */\n extensions?: AIGateExtension<Context>[];\n /**\n * Optional architecture profile for layer-aware generated-code checks.\n * When context.layer is provided, intent references are checked against it.\n */\n architectureProfile?: ArchitectureProfile;\n /**\n * When true, flag string literals that look like intent names but are not registered.\n */\n enforceIntentAllowlist?: boolean;\n /**\n * Optional TypeScript module object. When provided, AICodeGate adds AST-backed checks\n * for publish misuse without taking a runtime dependency on TypeScript.\n */\n typescript?: unknown;\n /**\n * Ambient globals forbidden per layer (layer name → entries such as \"fetch\" or\n * \"Date.now\"). Checked only when `typescript` is provided and context.layer resolves\n * to a listed layer — mirrors ark-check's FORBIDDEN_GLOBAL rule.\n */\n forbiddenGlobals?: Record<string, string[]>;\n}\n\nfunction violation(\n ruleId: string,\n message: string,\n extra?: Partial<AICodeGateViolation>\n): AICodeGateViolation {\n return { ruleId, code: ruleId, message, ...extra };\n}\n\ninterface StringMatch {\n value: string;\n index: number;\n}\n\ninterface ModuleSpecifierMatch {\n value: string;\n index: number;\n kind: 'import' | 'export' | 'dynamic-import' | 'require';\n}\n\nfunction lineOf(source: string, index: number): number {\n return source.slice(0, index).split('\\n').length;\n}\n\n/** Extract quoted string literals from source (naive scan). */\nfunction extractQuotedStrings(source: string): StringMatch[] {\n const matches: StringMatch[] = [];\n const re = /['\"`]([A-Za-z][A-Za-z0-9_.]*)['\"`]/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(source)) !== null) {\n matches.push({ value: m[1], index: m.index });\n }\n return matches;\n}\n\nfunction extractModuleSpecifiers(source: string): ModuleSpecifierMatch[] {\n const matches: ModuleSpecifierMatch[] = [];\n const patterns: Array<{ kind: ModuleSpecifierMatch['kind']; re: RegExp }> = [\n {\n kind: 'import',\n re: /\\bimport\\s+(?:type\\s+)?(?:[^'\"]*?\\s+from\\s*)?['\"]([^'\"]+)['\"]/g,\n },\n {\n kind: 'export',\n re: /\\bexport\\s+(?:type\\s+)?[^'\"]*?\\s+from\\s*['\"]([^'\"]+)['\"]/g,\n },\n {\n kind: 'dynamic-import',\n re: /\\bimport\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n },\n {\n kind: 'require',\n re: /\\brequire\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n },\n ];\n\n for (const pattern of patterns) {\n let match: RegExpExecArray | null;\n while ((match = pattern.re.exec(source)) !== null) {\n const index = match.index + match[0].indexOf(match[1]);\n matches.push({ value: match[1], index, kind: pattern.kind });\n }\n }\n\n return matches.sort((a, b) => a.index - b.index);\n}\n\nfunction looksLikeIntentName(s: string): boolean {\n return /^(Domain|Application|Adapter|Workflow|Job|Presentation|Reporting|Metadata|Security|Audit|Observability|Kernel)\\.[A-Za-z0-9_.]+$/.test(s);\n}\n\nfunction hasInfrastructureToken(specifier: string): boolean {\n const tokens = specifier\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter(Boolean);\n return [\n 'adapter',\n 'adapters',\n 'infra',\n 'infrastructure',\n 'persistence',\n 'repository',\n 'repositories',\n 'integration',\n 'database',\n 'db',\n ].some((token) => tokens.includes(token));\n}\n\nfunction isKnownInfrastructurePackage(specifier: string): boolean {\n const normalized = specifier.toLowerCase();\n return ['sequelize', 'prisma', 'typeorm', 'mongoose', 'knex'].some(\n (name) => normalized === name || normalized.startsWith(`${name}/`)\n );\n}\n\nfunction tsStringLiteralText(ts: any, node: unknown): string | undefined {\n return node && ts.isStringLiteralLike(node) ? (node as { text: string }).text : undefined;\n}\n\nfunction tsPropertyName(ts: any, node: any): string | undefined {\n if (!node) return undefined;\n if (ts.isIdentifier(node) || ts.isStringLiteralLike(node)) return node.text;\n return undefined;\n}\n\nfunction tsObjectProperty(ts: any, node: any, name: string): any | undefined {\n if (!node || !ts.isObjectLiteralExpression(node)) return undefined;\n return node.properties.find((property: any) => {\n if (!ts.isPropertyAssignment(property) && !ts.isShorthandPropertyAssignment(property)) {\n return false;\n }\n return tsPropertyName(ts, property.name) === name;\n });\n}\n\nfunction tsObjectHasProperty(ts: any, node: any, name: string): boolean {\n return tsObjectProperty(ts, node, name) !== undefined;\n}\n\nfunction tsObjectPropertyValue(ts: any, node: any, name: string): any | undefined {\n const property = tsObjectProperty(ts, node, name);\n return property && ts.isPropertyAssignment(property)\n ? property.initializer\n : undefined;\n}\n\nfunction tsObjectHasMetadataSource(ts: any, node: any): boolean {\n const metadata = tsObjectPropertyValue(ts, node, 'metadata');\n return tsObjectHasProperty(ts, metadata, 'source');\n}\n\nfunction tsLooksLikeIntentCreatorExpression(ts: any, node: any): boolean {\n if (!node) return false;\n if (ts.isIdentifier(node)) return /^[A-Z]/.test(node.text);\n if (ts.isPropertyAccessExpression(node)) {\n return tsLooksLikeIntentCreatorExpression(ts, node.name);\n }\n return false;\n}\n\nfunction tsIsPublishCall(ts: any, node: any): boolean {\n if (!ts.isCallExpression(node)) return false;\n const expression = node.expression;\n if (ts.isPropertyAccessExpression(expression)) {\n return expression.name.text === 'publish';\n }\n return ts.isIdentifier(expression) && expression.text === 'publish';\n}\n\nfunction tsIsArkPublishCandidate(ts: any, node: any): boolean {\n if (!ts.isCallExpression(node)) return false;\n const firstArg = node.arguments[0];\n const rawIntent = tsStringLiteralText(ts, firstArg);\n return (\n (rawIntent !== undefined && looksLikeIntentName(rawIntent)) ||\n tsObjectHasProperty(ts, firstArg, 'intent') ||\n tsLooksLikeIntentCreatorExpression(ts, firstArg)\n );\n}\n\nfunction tsPublishHasSource(ts: any, node: any): boolean {\n if (!ts.isCallExpression(node)) return false;\n const [firstArg, secondArg, thirdArg] = node.arguments;\n return (\n tsObjectHasMetadataSource(ts, firstArg) ||\n tsObjectHasProperty(ts, secondArg, 'source') ||\n tsObjectHasProperty(ts, thirdArg, 'source')\n );\n}\n\nfunction tsPublishSourceLiteral(ts: any, node: any): string | undefined {\n if (!ts.isCallExpression(node)) return undefined;\n const [firstArg, secondArg, thirdArg] = node.arguments;\n const rawMetadata = tsObjectPropertyValue(ts, firstArg, 'metadata');\n return (\n tsStringLiteralText(ts, tsObjectPropertyValue(ts, rawMetadata, 'source')) ??\n tsStringLiteralText(ts, tsObjectPropertyValue(ts, secondArg, 'source')) ??\n tsStringLiteralText(ts, tsObjectPropertyValue(ts, thirdArg, 'source'))\n );\n}\n\n/**\n * Find uses of forbidden ambient globals. Positional, not scope-aware — kept in sync with\n * `collectForbiddenGlobalUses` in bin/ark-shared.mjs (the CLIs run standalone and must not\n * import from dist): dotted entries (\"Date.now\") flag that property access; bare entries\n * (\"console\", \"fetch\") flag property accesses on them, direct calls, and constructions.\n */\nfunction analyzeForbiddenGlobals(\n ts: any,\n source: string,\n filePath: string | undefined,\n layer: string,\n forbidden: string[]\n): AICodeGateViolation[] {\n const entries = new Set(forbidden);\n if (entries.size === 0) return [];\n const sourceFile = ts.createSourceFile('generated.ts', source, ts.ScriptTarget.Latest, true);\n const violations: AICodeGateViolation[] = [];\n const flag = (name: string, node: any) =>\n violations.push(\n violation('FORBIDDEN_GLOBAL', `${layer} must not use the ambient global \"${name}\".`, {\n line: sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1,\n filePath,\n target: name,\n fromLayer: layer,\n suggestion:\n 'Inject the capability through a port (e.g. a Clock, IdGenerator, or HttpPort) instead of reaching for the ambient global.',\n })\n );\n\n const visit = (node: any) => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.expression)) {\n const dotted = `${node.expression.text}.${node.name.text}`;\n if (entries.has(dotted)) flag(dotted, node);\n else if (entries.has(node.expression.text)) flag(node.expression.text, node);\n } else if (\n (ts.isCallExpression(node) || ts.isNewExpression(node)) &&\n node.expression &&\n ts.isIdentifier(node.expression) &&\n entries.has(node.expression.text)\n ) {\n flag(node.expression.text, node);\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return violations;\n}\n\nfunction analyzePublishAst<Context>(\n ts: any,\n source: string,\n context: Context | undefined,\n profile: ArchitectureProfile | undefined\n): AICodeGateViolation[] {\n const sourceFile = ts.createSourceFile(\n 'generated.ts',\n source,\n ts.ScriptTarget.Latest,\n true\n );\n const gateContext = context as AICodeGateContext | undefined;\n const filePath = gateContext?.filePath;\n const contextLayer = gateContext?.layer;\n const violations: AICodeGateViolation[] = [];\n const lineForNode = (node: any) =>\n sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1;\n\n const visit = (node: any) => {\n if (tsIsPublishCall(ts, node)) {\n const firstArg = node.arguments[0];\n const rawIntent = tsStringLiteralText(ts, firstArg);\n if (\n (rawIntent && looksLikeIntentName(rawIntent)) ||\n tsObjectHasProperty(ts, firstArg, 'intent')\n ) {\n violations.push(\n violation('RAW_EVENT_PUBLISH', 'Publish through a registered intent creator; raw event objects or intent strings bypass Ark contracts and tooling.', {\n line: lineForNode(node),\n filePath,\n })\n );\n }\n\n if (tsIsArkPublishCandidate(ts, node) && !tsPublishHasSource(ts, node)) {\n violations.push(\n violation('PUBLISH_MISSING_SOURCE', 'Strict Ark publish calls must include metadata.source.', {\n line: lineForNode(node),\n filePath,\n })\n );\n }\n\n const sourceIntent = tsPublishSourceLiteral(ts, node);\n if (profile && contextLayer && sourceIntent && looksLikeIntentName(sourceIntent)) {\n const sourceLayer = profile.resolveLayer(sourceIntent);\n if (sourceLayer && sourceLayer !== contextLayer) {\n violations.push(\n violation(\n 'PUBLISH_SOURCE_LAYER_MISMATCH',\n `Publish source \"${sourceIntent}\" resolves to ${sourceLayer}, but the target file is classified as ${contextLayer}.`,\n {\n line: lineForNode(node),\n filePath,\n target: sourceIntent,\n fromLayer: contextLayer,\n toLayer: sourceLayer,\n }\n )\n );\n }\n }\n }\n\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return violations;\n}\n\nexport function createAICodeGate<Context = AICodeGateContext>(\n options: AICodeGateOptions<Context> = {}\n): AICodeGate<Context> {\n const intentNames = new Set(\n (options.intents || []).map((i) => (typeof i === 'string' ? i : i.name))\n );\n\n const forbidden = [\n ...(options.forbiddenPatterns || []),\n /from ['\"].*\\/(infra|adapters|persistence|db)/i,\n /import .* from ['\"].*(sequelize|prisma|typeorm|mongoose|knex)/i,\n ];\n\n const enforceAllowlist = options.enforceIntentAllowlist ?? intentNames.size > 0;\n\n return {\n validate(source: string, context?: Context): AICodeGateResult {\n const violations: AICodeGateViolation[] = [];\n const gateContext = context as AICodeGateContext | undefined;\n const filePath = gateContext?.filePath;\n const contextLayer = gateContext?.layer;\n\n for (const pat of forbidden) {\n if (pat instanceof RegExp) {\n const match = source.match(pat);\n if (match) {\n violations.push(\n violation('FORBIDDEN_PATTERN', `Forbidden pattern matched: ${pat}`, {\n line: match.index === undefined ? undefined : lineOf(source, match.index),\n filePath,\n suggestion: 'Remove infrastructure imports from domain/application layers.',\n })\n );\n }\n } else if (source.includes(pat)) {\n violations.push(\n violation('FORBIDDEN_SUBSTRING', `Forbidden substring: ${pat}`, {\n line: lineOf(source, source.indexOf(pat)),\n filePath,\n })\n );\n }\n }\n\n for (const specifier of extractModuleSpecifiers(source)) {\n if (!hasInfrastructureToken(specifier.value) && !isKnownInfrastructurePackage(specifier.value)) {\n continue;\n }\n\n violations.push(\n violation(\n 'FORBIDDEN_IMPORT',\n `Forbidden ${specifier.kind} target: \"${specifier.value}\".`,\n {\n line: lineOf(source, specifier.index),\n source: specifier.value,\n target: specifier.value,\n filePath,\n suggestion: 'Route infrastructure access through an allowed adapter or port boundary.',\n details: { importKind: specifier.kind },\n }\n )\n );\n }\n\n if (options.policies) {\n for (const policy of options.policies) {\n const res = policy.check({ source, context });\n if (res !== true) {\n if (Array.isArray(res)) {\n for (const v of res) {\n violations.push(\n violation('POLICY_VIOLATION', v.message, {\n filePath,\n suggestion: `Fix violation of policy \"${policy.name}\".`,\n })\n );\n }\n } else if (res === false) {\n violations.push(\n violation('POLICY_VIOLATION', `Policy ${policy.name} failed on generated code`)\n );\n } else {\n violations.push(\n violation('POLICY_VIOLATION', res.message)\n );\n }\n }\n }\n }\n\n if (enforceAllowlist && intentNames.size > 0) {\n for (const literal of extractQuotedStrings(source)) {\n if (looksLikeIntentName(literal.value) && !intentNames.has(literal.value)) {\n violations.push(\n violation(\n 'UNKNOWN_INTENT',\n `Unknown intent reference: \"${literal.value}\"`,\n {\n line: lineOf(source, literal.index),\n filePath,\n target: literal.value,\n suggestion: `Register intent \"${literal.value}\" via defineIntent() or remove the reference.`,\n }\n )\n );\n }\n }\n }\n\n if (options.architectureProfile && contextLayer) {\n for (const literal of extractQuotedStrings(source)) {\n if (!looksLikeIntentName(literal.value)) continue;\n\n const targetLayer = options.architectureProfile.resolveLayer(literal.value);\n if (!targetLayer) continue;\n\n const blocked = options.architectureProfile.rules.find(\n (rule) =>\n !rule.allowed &&\n rule.from === contextLayer &&\n rule.to === targetLayer\n );\n\n if (blocked) {\n violations.push(\n violation(\n 'LAYER_REFERENCE_VIOLATION',\n blocked.message ??\n `Layer \"${contextLayer}\" must not reference \"${targetLayer}\" through \"${literal.value}\".`,\n {\n line: lineOf(source, literal.index),\n filePath,\n target: literal.value,\n fromLayer: contextLayer,\n toLayer: targetLayer,\n suggestion: 'Route the dependency through an allowed intent, port, or event.',\n details: { rule: blocked },\n }\n )\n );\n }\n }\n }\n\n if (options.extensions) {\n for (const ext of options.extensions) {\n try {\n const extViolations = ext.analyze(source, context);\n violations.push(...extViolations);\n } catch (err) {\n violations.push(\n violation(\n 'EXTENSION_ERROR',\n `Extension \"${ext.name}\" failed: ${err instanceof Error ? err.message : String(err)}`\n )\n );\n }\n }\n }\n\n if (options.typescript && contextLayer && options.forbiddenGlobals?.[contextLayer]?.length) {\n try {\n violations.push(\n ...analyzeForbiddenGlobals(\n options.typescript,\n source,\n filePath,\n contextLayer,\n options.forbiddenGlobals[contextLayer]\n )\n );\n } catch (err) {\n violations.push(\n violation(\n 'AST_ANALYZER_ERROR',\n `TypeScript AST analyzer failed: ${err instanceof Error ? err.message : String(err)}`\n )\n );\n }\n }\n\n if (options.typescript) {\n try {\n violations.push(\n ...analyzePublishAst(\n options.typescript,\n source,\n context,\n options.architectureProfile\n )\n );\n } catch (err) {\n violations.push(\n violation(\n 'AST_ANALYZER_ERROR',\n `TypeScript AST analyzer failed: ${err instanceof Error ? err.message : String(err)}`\n )\n );\n }\n }\n\n return {\n valid: violations.length === 0,\n violations,\n };\n },\n };\n}\n","import type { DomainEvent, IntentName } from '../../domain/types';\nimport type {\n CreateProjectionRegistryOptions,\n ProjectionCheckpoint,\n ProjectionDefinition,\n ProjectionRegistry,\n ReadModelStore,\n} from './types';\n\nexport class InMemoryReadModelStore implements ReadModelStore {\n private readonly states = new Map<string, unknown>();\n\n load<State = unknown>(name: string): State | undefined {\n return this.states.get(name) as State | undefined;\n }\n\n save<State = unknown>(name: string, state: State): void {\n this.states.set(name, state);\n }\n\n clear(name?: string): void {\n if (name) {\n this.states.delete(name);\n } else {\n this.states.clear();\n }\n }\n}\n\nfunction initialState<State>(definition: ProjectionDefinition<State>): State {\n return typeof definition.initialState === 'function'\n ? (definition.initialState as () => State)()\n : definition.initialState;\n}\n\nexport class ProjectionRegistryImpl implements ProjectionRegistry {\n private readonly definitions = new Map<string, ProjectionDefinition>();\n private readonly checkpoints = new Map<string, ProjectionCheckpoint>();\n private readonly store: ReadModelStore;\n private readonly auditTrail?: CreateProjectionRegistryOptions['auditTrail'];\n\n constructor(options: CreateProjectionRegistryOptions = {}) {\n this.store = options.store ?? new InMemoryReadModelStore();\n this.auditTrail = options.auditTrail;\n }\n\n register<State>(definition: ProjectionDefinition<State>): void {\n if (this.definitions.has(definition.name)) {\n throw new Error(`Projection \"${definition.name}\" is already registered.`);\n }\n this.definitions.set(definition.name, definition as ProjectionDefinition);\n this.checkpoints.set(definition.name, {\n projection: definition.name,\n appliedCount: 0,\n });\n }\n\n list(): ProjectionDefinition[] {\n return Array.from(this.definitions.values());\n }\n\n async apply(event: DomainEvent<IntentName, unknown>): Promise<string[]> {\n const applied: string[] = [];\n\n for (const definition of this.definitions.values()) {\n if (!definition.sourceIntents.includes(event.intent)) continue;\n\n const current =\n (await this.store.load(definition.name)) ?? initialState(definition);\n const next = await definition.project(event, current);\n await this.store.save(definition.name, next);\n\n const previous = this.checkpoints.get(definition.name);\n this.checkpoints.set(definition.name, {\n projection: definition.name,\n appliedCount: (previous?.appliedCount ?? 0) + 1,\n lastIntent: event.intent,\n lastCorrelationId: event.metadata.correlationId,\n updatedAt: new Date().toISOString(),\n });\n await this.auditTrail?.record({\n type: 'projection.applied',\n source: 'Kernel.ProjectionRegistry',\n intent: event.intent,\n correlationId: event.metadata.correlationId,\n causationId: event.metadata.causationId,\n subject: definition.name,\n details: { projection: definition.name },\n });\n applied.push(definition.name);\n }\n\n return applied;\n }\n\n async getState<State = unknown>(name: string): Promise<State | undefined> {\n return this.store.load<State>(name);\n }\n\n getCheckpoint(name: string): ProjectionCheckpoint | undefined {\n return this.checkpoints.get(name);\n }\n\n getCheckpoints(): ProjectionCheckpoint[] {\n return Array.from(this.checkpoints.values());\n }\n\n async clear(): Promise<void> {\n await this.store.clear();\n for (const definition of this.definitions.values()) {\n this.checkpoints.set(definition.name, {\n projection: definition.name,\n appliedCount: 0,\n });\n }\n }\n}\n\nexport function createProjectionRegistry(\n options?: CreateProjectionRegistryOptions\n): ProjectionRegistry {\n return new ProjectionRegistryImpl(options);\n}\n","/** Current Ark manifest JSON schema version. */\nexport const MANIFEST_SCHEMA_VERSION = '1.0';","/**\n * Aggregates kernel registries into a single machine-readable manifest.\n */\n\nimport type { IntentRegistry } from '../intent/IntentRegistry';\nimport type { PolicyEngine } from '../policy/PolicyEngine';\nimport type { MetadataRegistry } from '../metadata/types';\nimport type { DependencyGraph } from '../graph/types';\nimport type { EventContractRegistry } from '../event-contracts';\nimport type { ArchitectureProfile } from '../layers';\nimport type { ObservabilityReporter } from '../observability';\nimport type { ProjectionRegistry } from '../projections';\nimport type { ArkManifest, ArkManifestData } from './types';\nimport { version } from '../../version';\nimport { MANIFEST_SCHEMA_VERSION } from './constants';\n\nfunction policyId(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\nexport interface CreateArkManifestOptions {\n registry?: IntentRegistry;\n policyEngine?: PolicyEngine;\n metadata?: MetadataRegistry;\n graph?: DependencyGraph;\n profile?: ArchitectureProfile;\n projections?: ProjectionRegistry;\n eventContracts?: EventContractRegistry;\n observability?: ObservabilityReporter;\n}\n\nclass ArkManifestImpl implements ArkManifest {\n constructor(private readonly data: ArkManifestData) {}\n\n toJSON(): ArkManifestData {\n return { ...this.data };\n }\n}\n\n/**\n * Create a machine-readable snapshot of the current architectural contract.\n * Intended for AI agents, codegen tools, and documentation generators.\n */\nexport function createArkManifest(\n options: CreateArkManifestOptions = {}\n): ArkManifest {\n const registry = options.registry;\n const policyEngine = options.policyEngine;\n const metadata = options.metadata;\n const graph = options.graph;\n const profile = options.profile;\n const projections = options.projections;\n const eventContracts = options.eventContracts;\n const observability = options.observability;\n\n const intents = registry\n ? registry.list().map((creator) => ({\n name: creator.name,\n dependencies: registry.getDependencies(creator.name),\n productions: registry.getProductions(creator.name),\n }))\n : [];\n\n const relationships = registry ? registry.getAllRelationships() : [];\n\n const policies = policyEngine\n ? policyEngine.getPolicies().map((p) => ({\n id: policyId(p.name),\n name: p.name,\n severity: p.severity,\n tags: p.tags ? [...p.tags] : undefined,\n owner: p.owner,\n version: p.version,\n rationale: p.rationale,\n enforcementMode: p.enforcementMode,\n deprecated: p.deprecated,\n replacedBy: p.replacedBy,\n description: p.tags?.includes('layer')\n ? 'Enforces clean-architecture layer dependency rules on declared relationships.'\n : undefined,\n }))\n : [];\n\n const entities = metadata ? metadata.toJSON() : [];\n\n const graphData = graph\n ? graph.toJSON()\n : { nodes: [] as ArkManifestData['graph']['nodes'], edges: [] as ArkManifestData['graph']['edges'] };\n\n const entityIntents = entities\n .filter((e) => (e.emits?.length ?? 0) > 0 || (e.consumes?.length ?? 0) > 0)\n .map((e) => ({\n entity: e.name,\n emits: e.emits,\n consumes: e.consumes,\n }));\n\n const projectionData = projections\n ? projections.list().map((projection) => ({\n name: projection.name,\n sourceIntents: projection.sourceIntents,\n checkpoint: projections.getCheckpoint(projection.name),\n }))\n : [];\n\n const data: ArkManifestData = {\n schemaVersion: MANIFEST_SCHEMA_VERSION,\n version,\n exportedAt: new Date().toISOString(),\n intents,\n relationships,\n policies,\n entities,\n graph: graphData,\n architecture: profile\n ? {\n profile: profile.name,\n layers: profile.layers,\n rules: profile.rules,\n }\n : undefined,\n projections: projectionData,\n eventContracts: eventContracts?.list() ?? [],\n observability: observability?.report(),\n links: { entityIntents },\n };\n\n return new ArkManifestImpl(data);\n}\n","/**\n * In-process workflow engine with durable-store seams.\n */\n\nimport type { EventBus } from '../event-bus';\nimport type {\n CreateWorkflowEngineOptions,\n SagaContext,\n SagaDefinition,\n SagaInstance,\n WorkflowDefinition,\n WorkflowEngine,\n WorkflowSnapshot,\n WorkflowStep,\n WorkflowStore,\n} from './types';\n\nlet workflowSequence = 0;\n\nfunction createWorkflowId(prefix: string): string {\n workflowSequence += 1;\n return `${prefix}-${Date.now()}-${workflowSequence}`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nasync function withTimeout<T>(\n operation: Promise<T>,\n timeoutMs: number | undefined,\n stepName: string\n): Promise<T> {\n if (timeoutMs === undefined) return operation;\n\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<T>((_, reject) => {\n timeout = setTimeout(() => {\n reject(new Error(`Workflow step \"${stepName}\" timed out after ${timeoutMs}ms.`));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([operation, timeoutPromise]);\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\nexport class InMemoryWorkflowStore implements WorkflowStore {\n private readonly snapshots = new Map<string, WorkflowSnapshot>();\n\n save<P extends SagaContext>(snapshot: WorkflowSnapshot<P>): void {\n this.snapshots.set(snapshot.id, { ...snapshot, context: { ...snapshot.context } });\n }\n\n get<P extends SagaContext = SagaContext>(id: string): WorkflowSnapshot<P> | undefined {\n const snapshot = this.snapshots.get(id) as WorkflowSnapshot<P> | undefined;\n return snapshot ? { ...snapshot, context: { ...snapshot.context } } : undefined;\n }\n\n list(workflowName?: string): WorkflowSnapshot[] {\n return Array.from(this.snapshots.values())\n .filter((snapshot) => !workflowName || snapshot.workflowName === workflowName)\n .map((snapshot) => ({ ...snapshot, context: { ...snapshot.context } }));\n }\n\n clear(): void {\n this.snapshots.clear();\n }\n}\n\nclass WorkflowEngineImpl implements WorkflowEngine {\n private readonly definitions = new Map<string, WorkflowDefinition>();\n private readonly store: WorkflowStore;\n\n constructor(\n private readonly bus: EventBus,\n private readonly options: CreateWorkflowEngineOptions = {}\n ) {\n this.store = options.store ?? new InMemoryWorkflowStore();\n }\n\n register<P extends SagaContext>(definition: WorkflowDefinition<P>): void {\n if (this.definitions.has(definition.name)) {\n throw new Error(`Workflow \"${definition.name}\" is already registered.`);\n }\n\n this.definitions.set(definition.name, definition as WorkflowDefinition);\n\n if (definition.startOn) {\n const trigger = definition.startOn;\n this.bus.subscribe(trigger.intent, async (event) => {\n await this.start(definition.name, trigger.mapEventToPayload(event));\n });\n }\n }\n\n async start<P extends SagaContext>(\n workflowName: string,\n initialPayload: P,\n options: { id?: string } = {}\n ): Promise<WorkflowSnapshot<P>> {\n const definition = this.definitions.get(workflowName) as\n | WorkflowDefinition<P>\n | undefined;\n\n if (!definition) {\n throw new Error(`Workflow \"${workflowName}\" is not registered.`);\n }\n\n const now = new Date().toISOString();\n const snapshot: WorkflowSnapshot<P> = {\n id: options.id ?? createWorkflowId(workflowName),\n workflowName,\n status: 'running',\n context: { ...initialPayload },\n completedSteps: [],\n attempts: {},\n startedAt: now,\n updatedAt: now,\n };\n\n await this.store.save(snapshot);\n await this.audit('workflow.started', snapshot, { workflowName });\n\n try {\n for (const step of definition.steps) {\n await this.runStep(snapshot, step);\n }\n\n snapshot.status = 'completed';\n snapshot.currentStep = undefined;\n snapshot.completedAt = new Date().toISOString();\n snapshot.updatedAt = snapshot.completedAt;\n await this.store.save(snapshot);\n await this.audit('workflow.completed', snapshot, { workflowName });\n return { ...snapshot, context: { ...snapshot.context } };\n } catch (err) {\n await this.compensate(snapshot, definition.steps, err);\n snapshot.status = 'failed';\n snapshot.error = errorMessage(err);\n snapshot.updatedAt = new Date().toISOString();\n await this.store.save(snapshot);\n await this.audit('workflow.failed', snapshot, {\n workflowName,\n error: snapshot.error,\n failedStep: snapshot.failedStep,\n });\n throw err;\n }\n }\n\n async get<P extends SagaContext = SagaContext>(\n id: string\n ): Promise<WorkflowSnapshot<P> | undefined> {\n return this.store.get<P>(id);\n }\n\n async list(workflowName?: string): Promise<WorkflowSnapshot[]> {\n return this.store.list(workflowName);\n }\n\n private async runStep<P extends SagaContext>(\n snapshot: WorkflowSnapshot<P>,\n step: WorkflowStep<P>\n ): Promise<void> {\n const retry = step.retry ?? this.options.defaultRetry ?? { attempts: 1 };\n const maxAttempts = Math.max(1, retry.attempts);\n\n snapshot.currentStep = step.name;\n snapshot.updatedAt = new Date().toISOString();\n await this.store.save(snapshot);\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n snapshot.attempts[step.name] = attempt;\n await this.store.save(snapshot);\n\n try {\n const result = await withTimeout(\n Promise.resolve(step.execute(snapshot.context, this.bus)),\n step.timeoutMs,\n step.name\n );\n if (result) Object.assign(snapshot.context, result);\n snapshot.completedSteps.push(step.name);\n snapshot.currentStep = undefined;\n snapshot.updatedAt = new Date().toISOString();\n await this.store.save(snapshot);\n await this.audit('workflow.step.completed', snapshot, {\n step: step.name,\n attempt,\n });\n return;\n } catch (err) {\n if (attempt < maxAttempts) {\n if (retry.delayMs) await sleep(retry.delayMs);\n continue;\n }\n\n snapshot.failedStep = step.name;\n snapshot.updatedAt = new Date().toISOString();\n await this.store.save(snapshot);\n await this.audit('workflow.step.failed', snapshot, {\n step: step.name,\n attempt,\n error: errorMessage(err),\n });\n throw err;\n }\n }\n\n throw new Error(`Workflow step \"${step.name}\" did not complete.`);\n }\n\n private async compensate<P extends SagaContext>(\n snapshot: WorkflowSnapshot<P>,\n steps: WorkflowStep<P>[],\n error: unknown\n ): Promise<void> {\n snapshot.status = 'compensating';\n snapshot.updatedAt = new Date().toISOString();\n await this.store.save(snapshot);\n\n const completed = steps.filter((step) =>\n snapshot.completedSteps.includes(step.name)\n );\n\n for (let index = completed.length - 1; index >= 0; index -= 1) {\n const step = completed[index];\n if (!step.compensate) continue;\n\n try {\n await Promise.resolve(step.compensate(snapshot.context, this.bus, error));\n await this.audit('workflow.compensation.completed', snapshot, {\n step: step.name,\n });\n } catch (compensationError) {\n await this.audit('workflow.step.failed', snapshot, {\n step: step.name,\n compensation: true,\n error: errorMessage(compensationError),\n });\n }\n }\n }\n\n private async audit<P extends SagaContext>(\n type:\n | 'workflow.started'\n | 'workflow.step.completed'\n | 'workflow.step.failed'\n | 'workflow.compensation.completed'\n | 'workflow.completed'\n | 'workflow.failed',\n snapshot: WorkflowSnapshot<P>,\n details?: unknown\n ): Promise<void> {\n await this.options.auditTrail?.record({\n type,\n source: 'Kernel.WorkflowEngine',\n subject: snapshot.id,\n details,\n });\n }\n}\n\nexport function createWorkflowEngine(\n bus: EventBus,\n options?: CreateWorkflowEngineOptions\n): WorkflowEngine {\n return new WorkflowEngineImpl(bus, options);\n}\n\nexport function createSaga<P extends SagaContext = SagaContext>(\n def: SagaDefinition<P>,\n bus: EventBus,\n options: CreateWorkflowEngineOptions & { id?: string } = {}\n): SagaInstance<P> {\n const engine = createWorkflowEngine(bus, options);\n const definition: WorkflowDefinition<P> = { name: def.name, steps: def.steps };\n engine.register(definition);\n\n const sagaId = options.id ?? createWorkflowId(def.name);\n let status: SagaInstance<P>['status'] = 'idle';\n let completedStepNames: string[] = [];\n\n return {\n id: sagaId,\n definition: def,\n get status() {\n return status;\n },\n get completedSteps() {\n return [...completedStepNames];\n },\n async run(initialPayload: P) {\n status = 'running';\n completedStepNames = [];\n try {\n const snapshot = await engine.start(def.name, initialPayload, { id: sagaId });\n status = snapshot.status === 'waiting' ? 'idle' : snapshot.status;\n completedStepNames = [...snapshot.completedSteps];\n } catch (err) {\n const snapshot = await engine.get<P>(sagaId);\n status =\n snapshot?.status === 'waiting' ? 'idle' : (snapshot?.status ?? 'failed');\n completedStepNames = snapshot?.completedSteps ?? [];\n throw err;\n }\n },\n };\n}\n","import { createAuditTrail } from '../audit';\nimport { createEventBus } from '../event-bus';\nimport { createEventContractRegistry } from '../event-contracts';\nimport { createDependencyGraph, syncRegistryToGraph } from '../graph';\nimport { createIntentRegistry } from '../intent';\nimport { elevenLayerProfile } from '../layers';\nimport { createArkManifest } from '../manifest';\nimport { createMetadataRegistry } from '../metadata';\nimport { createObservabilityReporter } from '../observability';\nimport { InMemoryOutboxStore } from '../outbox';\nimport {\n PolicyEngine,\n defineArchitectureProfilePolicy,\n} from '../policy';\nimport { createProjectionRegistry } from '../projections';\nimport { createWorkflowEngine } from '../workflow';\nimport type { ArkKernel, CreateArkKernelOptions } from './types';\n\nlet kernelSequence = 0;\n\nfunction nextKernelInstanceId(): string {\n kernelSequence += 1;\n return `ark-kernel-${Date.now()}-${kernelSequence}`;\n}\n\nexport function createArkKernel(options: CreateArkKernelOptions = {}): ArkKernel {\n const strict = options.strict ?? true;\n const instanceId = options.instanceId ?? nextKernelInstanceId();\n const profile = options.profile ?? elevenLayerProfile;\n const registry = createIntentRegistry();\n const graph = createDependencyGraph();\n const metadata = options.metadata ?? createMetadataRegistry();\n const auditTrail = options.auditTrail ?? createAuditTrail({ maxRecords: options.maxHistorySize });\n const eventContracts = options.eventContracts ?? createEventContractRegistry();\n const outbox = options.outbox ?? new InMemoryOutboxStore();\n const projections =\n options.projections ?? createProjectionRegistry({ auditTrail });\n const policyEngine = new PolicyEngine([\n defineArchitectureProfilePolicy(profile),\n ...(options.policies ?? []),\n ]);\n\n const syncGraph = () => {\n syncRegistryToGraph(registry, graph, { requireRegisteredTargets: true });\n };\n\n const eventBus = createEventBus({\n intentRegistry: registry,\n dependencyGraph: graph,\n policyEngine,\n strictRegistry: true,\n validateIntentNaming: true,\n auditTrail,\n eventContracts,\n strictEventContracts: options.strictEventContracts ?? strict,\n requireKnownSource: options.requireKnownSource ?? true,\n architectureProfile: profile,\n enforceObservedLayerFlow:\n options.enforceObservedLayerFlow ?? (strict ? 'hard' : 'off'),\n outbox,\n instanceId,\n maxHistorySize: options.maxHistorySize,\n onPublish: options.autoApplyProjections === false\n ? undefined\n : async (event) => {\n await projections.apply(event);\n },\n });\n\n const workflowEngine = createWorkflowEngine(eventBus, { auditTrail });\n const observability = createObservabilityReporter({\n registry,\n eventBus,\n graph,\n });\n\n return {\n instanceId,\n profile,\n registry,\n graph,\n metadata,\n auditTrail,\n eventContracts,\n outbox,\n projections,\n policyEngine,\n eventBus,\n workflowEngine,\n observability,\n publisher(source) {\n return eventBus.createPublisher(source);\n },\n syncGraph,\n manifest() {\n syncGraph();\n return createArkManifest({\n registry,\n policyEngine,\n metadata,\n graph,\n profile,\n projections,\n eventContracts,\n observability,\n });\n },\n };\n}\n\nexport function createStrictArkKernel(\n options: CreateArkKernelOptions = {}\n): ArkKernel {\n return createArkKernel({\n ...options,\n strict: true,\n strictEventContracts: options.strictEventContracts ?? true,\n requireKnownSource: options.requireKnownSource ?? true,\n enforceObservedLayerFlow: options.enforceObservedLayerFlow ?? 'hard',\n });\n}\n\nexport function createLenientArkKernel(\n options: CreateArkKernelOptions = {}\n): ArkKernel {\n return createArkKernel({\n ...options,\n strict: false,\n strictEventContracts: options.strictEventContracts ?? false,\n enforceObservedLayerFlow: options.enforceObservedLayerFlow ?? 'off',\n });\n}\n"]}
|