ark-runtime-kernel 1.1.0 → 1.2.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 +14 -1
- package/bin/ark-check.mjs +174 -0
- package/bin/ark-postinstall.mjs +12 -0
- package/bin/ark.mjs +129 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -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 +344 -0
- package/docs/ai-gates.md +169 -0
- package/docs/ark-check-example.json +87 -0
- package/docs/assets/ark-write-gate.svg +28 -0
- package/docs/blog/how-i-stopped-claude-from-breaking-my-architecture.md +85 -0
- package/docs/production-hardening.md +59 -0
- package/package.json +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/kernel/audit/AuditTrail.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/graph/DependencyGraph.ts","../../src/kernel/graph/sync.ts","../../src/kernel/intent/IntentRegistry.ts","../../src/kernel/intent/defineIntent.ts","../../src/kernel/layers/ArchitectureProfile.ts","../../src/kernel/manifest/constants.ts","../../src/version.ts","../../src/kernel/manifest/createArkManifest.ts","../../src/kernel/metadata/MetadataRegistry.ts","../../src/kernel/observability/ObservabilityReporter.ts","../../src/kernel/outbox/InMemoryOutboxStore.ts","../../src/kernel/projections/ProjectionRegistry.ts","../../src/kernel/workflow/Saga.ts","../../src/kernel/runtime/createArkKernel.ts","../../src/nestjs/index.ts"],"names":["version","flowKey","Inject","ArkModule","Module"],"mappings":"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","file":"index.cjs","sourcesContent":["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 * 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","/**\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}","/**\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","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\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) => `${rootDir}/${directory}/**`\n ),\n intentPrefixes: layer.prefixes,\n optional,\n })),\n rules: [...elevenLayerProfile.rules],\n };\n}\n","/** Current Ark manifest JSON schema version. */\nexport const MANIFEST_SCHEMA_VERSION = '1.0';","/** Ark library version — single source of truth. */\nexport const version = '1.0.0';\n","/**\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 * 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","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 { 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 { 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","/**\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","/**\n * NestJS adapter for Ark.\n *\n * ```ts\n * import { ArkModule, InjectArk } from 'ark-runtime-kernel/nestjs';\n * import type { ArkKernel } from 'ark-runtime-kernel';\n *\n * @Module({ imports: [ArkModule.forRoot()] })\n * export class AppModule {}\n *\n * @Injectable()\n * export class PlaceOrderService {\n * constructor(@InjectArk() private readonly ark: ArkKernel) {}\n * }\n * ```\n *\n * `@nestjs/common` is an optional peer dependency: this entry point is only\n * loaded when you import `ark-runtime-kernel/nestjs`.\n */\nimport { Inject, Module } from '@nestjs/common';\nimport type {\n DynamicModule,\n InjectionToken,\n OptionalFactoryDependency,\n} from '@nestjs/common';\nimport { createArkKernel } from '../kernel/runtime/createArkKernel';\nimport type { ArkKernel } from '../kernel/runtime/types';\nimport type { CreateArkKernelOptions } from '../kernel/runtime/types';\n\n/** Injection token for the Ark kernel instance. */\nexport const ARK_KERNEL = Symbol('ARK_KERNEL');\n\n/** Constructor-parameter decorator that injects the Ark kernel. */\nexport const InjectArk = (): ParameterDecorator => Inject(ARK_KERNEL);\n\nexport interface ArkModuleAsyncOptions {\n /** Factory that builds (or resolves) the kernel; supports Nest DI via `inject`. */\n useFactory: (...deps: never[]) => ArkKernel | Promise<ArkKernel>;\n inject?: Array<InjectionToken | OptionalFactoryDependency>;\n}\n\n@Module({})\nexport class ArkModule {\n /**\n * Registers a global Ark kernel. Pass an existing kernel to share one across\n * processes/tests, or options to create a fresh strict kernel.\n */\n static forRoot(kernelOrOptions?: ArkKernel | CreateArkKernelOptions): DynamicModule {\n const kernel =\n kernelOrOptions && 'registry' in kernelOrOptions\n ? kernelOrOptions\n : createArkKernel(kernelOrOptions);\n return {\n module: ArkModule,\n global: true,\n providers: [{ provide: ARK_KERNEL, useValue: kernel }],\n exports: [ARK_KERNEL],\n };\n }\n\n static forRootAsync(options: ArkModuleAsyncOptions): DynamicModule {\n return {\n module: ArkModule,\n global: true,\n providers: [\n {\n provide: ARK_KERNEL,\n useFactory: options.useFactory,\n inject: options.inject ?? [],\n },\n ],\n exports: [ARK_KERNEL],\n };\n }\n}\n\nexport type { ArkKernel, CreateArkKernelOptions };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/kernel/audit/AuditTrail.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/graph/DependencyGraph.ts","../../src/kernel/graph/sync.ts","../../src/kernel/intent/IntentRegistry.ts","../../src/kernel/intent/defineIntent.ts","../../src/kernel/layers/ArchitectureProfile.ts","../../src/kernel/manifest/constants.ts","../../src/version.ts","../../src/kernel/manifest/createArkManifest.ts","../../src/kernel/metadata/MetadataRegistry.ts","../../src/kernel/observability/ObservabilityReporter.ts","../../src/kernel/outbox/InMemoryOutboxStore.ts","../../src/kernel/projections/ProjectionRegistry.ts","../../src/kernel/workflow/Saga.ts","../../src/kernel/runtime/createArkKernel.ts","../../src/nestjs/index.ts"],"names":["version","flowKey","Inject","ArkModule","Module"],"mappings":"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","file":"index.cjs","sourcesContent":["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 * 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","/**\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}","/**\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","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\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) => `${rootDir}/${directory}/**`\n ),\n intentPrefixes: layer.prefixes,\n optional,\n })),\n rules: [...elevenLayerProfile.rules],\n };\n}\n","/** Current Ark manifest JSON schema version. */\nexport const MANIFEST_SCHEMA_VERSION = '1.0';","/** Ark library version — single source of truth. */\nexport const version = '1.2.0';\n","/**\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 * 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","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 { 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 { 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","/**\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","/**\n * NestJS adapter for Ark.\n *\n * ```ts\n * import { ArkModule, InjectArk } from 'ark-runtime-kernel/nestjs';\n * import type { ArkKernel } from 'ark-runtime-kernel';\n *\n * @Module({ imports: [ArkModule.forRoot()] })\n * export class AppModule {}\n *\n * @Injectable()\n * export class PlaceOrderService {\n * constructor(@InjectArk() private readonly ark: ArkKernel) {}\n * }\n * ```\n *\n * `@nestjs/common` is an optional peer dependency: this entry point is only\n * loaded when you import `ark-runtime-kernel/nestjs`.\n */\nimport { Inject, Module } from '@nestjs/common';\nimport type {\n DynamicModule,\n InjectionToken,\n OptionalFactoryDependency,\n} from '@nestjs/common';\nimport { createArkKernel } from '../kernel/runtime/createArkKernel';\nimport type { ArkKernel } from '../kernel/runtime/types';\nimport type { CreateArkKernelOptions } from '../kernel/runtime/types';\n\n/** Injection token for the Ark kernel instance. */\nexport const ARK_KERNEL = Symbol('ARK_KERNEL');\n\n/** Constructor-parameter decorator that injects the Ark kernel. */\nexport const InjectArk = (): ParameterDecorator => Inject(ARK_KERNEL);\n\nexport interface ArkModuleAsyncOptions {\n /** Factory that builds (or resolves) the kernel; supports Nest DI via `inject`. */\n useFactory: (...deps: never[]) => ArkKernel | Promise<ArkKernel>;\n inject?: Array<InjectionToken | OptionalFactoryDependency>;\n}\n\n@Module({})\nexport class ArkModule {\n /**\n * Registers a global Ark kernel. Pass an existing kernel to share one across\n * processes/tests, or options to create a fresh strict kernel.\n */\n static forRoot(kernelOrOptions?: ArkKernel | CreateArkKernelOptions): DynamicModule {\n const kernel =\n kernelOrOptions && 'registry' in kernelOrOptions\n ? kernelOrOptions\n : createArkKernel(kernelOrOptions);\n return {\n module: ArkModule,\n global: true,\n providers: [{ provide: ARK_KERNEL, useValue: kernel }],\n exports: [ARK_KERNEL],\n };\n }\n\n static forRootAsync(options: ArkModuleAsyncOptions): DynamicModule {\n return {\n module: ArkModule,\n global: true,\n providers: [\n {\n provide: ARK_KERNEL,\n useFactory: options.useFactory,\n inject: options.inject ?? [],\n },\n ],\n exports: [ARK_KERNEL],\n };\n }\n}\n\nexport type { ArkKernel, CreateArkKernelOptions };\n"]}
|