{"version":3,"sources":["../src/dev-true.ts","../src/index.ts"],"names":["dev_true_default","useFact","system","keyOrKeys","assertSystem","_useFactMulti","_useFactSingle","factKey","value","ref","unsubscribe","onScopeDispose","factKeys","getValues","result","key","state","shallowRef","useDerived","idOrIds","_useDerivedMulti","_useDerivedSingle","derivationId","derivationIds","id","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","trackedFactKeys","trackedDeriveKeys","selected","unsubs","resubscribe","unsub","onUpdate","depsChanged","useDispatch","event","useEvents","useWatch","callback","useInspect","options","computeInspectState","update","throttled","cleanup","createThrottle","unsubFacts","unsubSettled","useRequirementStatus","statusPlugin","typeOrTypes","type","status","useSuspenseRequirement","_useSuspenseRequirementMulti","_useSuspenseRequirementSingle","initialStatus","resolve","reject","current","_findFirstStatusError","types","_waitForAllSettled","onTick","t","err","initialError","useExplain","requirementId","explanation","useConstraintStatus","constraintId","inspectState","computed","fullInspection","c","useOptimisticUpdate","requirementType","isPending","error","snapshot","rollback","mutate","updateFn","useHistory","buildHistoryState","_buildDirectivePlugins","config","plugins","sp","createRequirementStatusPlugin","_createDirectiveSystem","moduleDef","systemConfig","createSystem","_subscribeFacts","subscribeAll","pickFacts","_subscribeDerived","derivedKeys","allDerivationKeys","getDerived","useDirective","factsState","derivedState","unsubDerived","events","createTypedHooks","useNamespacedSelector","keys","_createQuerySystem","getCreateQuerySystem","useQuerySystem","HYDRATION_KEY","DirectiveHydrator","defineComponent","props","slots","provide","useHydratedSystem","inject","mergedFacts","mergeHydrationFacts","useAuditLedger","ledger","filter","opts","requestedPollMs","pollMs","entryCount","entries","intervalId"],"mappings":"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","file":"index.cjs","sourcesContent":["export default typeof process !== \"undefined\" &&\n  process.env?.NODE_ENV !== \"production\";\n","/**\n * Vue Adapter - Vue 3 composables for Directive\n *\n * Exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useSuspenseRequirement,\n * useEvents, useExplain, useConstraintStatus, useOptimisticUpdate,\n * useDirective, useHistory, createTypedHooks, shallowEqual\n */\n\nimport type {\n  ErrorBoundaryConfig,\n  InferDerivations,\n  InferEvents,\n  InferFacts,\n  InferSelectorState,\n  ModuleDef,\n  ModuleSchema,\n  ModulesMap,\n  NamespacedSystem,\n  Plugin,\n  SingleModuleSystem,\n  SystemSnapshot,\n  TraceOption,\n} from \"@directive-run/core\";\nimport {\n  createRequirementStatusPlugin,\n  createSystem,\n} from \"@directive-run/core\";\nimport type { RequirementTypeStatus } from \"@directive-run/core\";\nimport {\n  type ConstraintInfo,\n  type InspectState,\n  assertSystem,\n  buildHistoryState,\n  computeInspectState,\n  createThrottle,\n  defaultEquality,\n  depsChanged,\n  mergeHydrationFacts,\n  pickFacts,\n  runTrackedSelector,\n  shallowEqual,\n} from \"@directive-run/core/adapter-utils\";\nimport {\n  type ComputedRef,\n  type InjectionKey,\n  type Ref,\n  type ShallowRef,\n  computed,\n  defineComponent,\n  inject,\n  onScopeDispose,\n  provide,\n  ref,\n  shallowRef,\n} from \"vue\";\nimport isDevelopment from \"#is-development\";\n\n// Re-export for convenience\nexport type { RequirementTypeStatus, InspectState, ConstraintInfo };\nexport { shallowEqual };\n\n/** Type for the requirement status plugin return value */\nexport type StatusPlugin = ReturnType<typeof createRequirementStatusPlugin>;\n\n// ============================================================================\n// useFact — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useFact<\n  S extends ModuleSchema,\n  K extends keyof InferFacts<S> & string,\n>(system: SingleModuleSystem<S>, factKey: K): Ref<InferFacts<S>[K] | undefined>;\n/** Multi-key overload */\nexport function useFact<\n  S extends ModuleSchema,\n  K extends keyof InferFacts<S> & string,\n>(\n  system: SingleModuleSystem<S>,\n  factKeys: K[],\n): ShallowRef<Pick<InferFacts<S>, K>>;\n/** Implementation */\nexport function useFact(\n  system: SingleModuleSystem<any>,\n  keyOrKeys: string | string[],\n): Ref<unknown> | ShallowRef<unknown> {\n  assertSystem(\"useFact\", system);\n  if (isDevelopment && typeof keyOrKeys === \"function\") {\n    console.error(\n      \"[Directive] useFact() received a function. Did you mean useSelector()? \" +\n        \"useFact() takes a string key or array of keys, not a selector function.\",\n    );\n  }\n\n  // Multi-key path: useFact(system, [keys])\n  if (Array.isArray(keyOrKeys)) {\n    return _useFactMulti(system, keyOrKeys);\n  }\n\n  // Single key path: useFact(system, key)\n  return _useFactSingle(system, keyOrKeys);\n}\n\nfunction _useFactSingle(\n  system: SingleModuleSystem<any>,\n  factKey: string,\n): Ref<unknown> {\n  if (isDevelopment) {\n    if (!system.facts.$store.has(factKey)) {\n      console.warn(\n        `[Directive] useFact(\"${factKey}\") — fact not found in store. ` +\n          `Check that \"${factKey}\" is defined in your module's schema.`,\n      );\n    }\n  }\n\n  const value = ref(system.facts.$store.get(factKey));\n  const unsubscribe = system.facts.$store.subscribe([factKey], () => {\n    value.value = system.facts.$store.get(factKey);\n  });\n  onScopeDispose(unsubscribe);\n  return value;\n}\n\nfunction _useFactMulti(\n  system: SingleModuleSystem<any>,\n  factKeys: string[],\n): ShallowRef<Record<string, unknown>> {\n  const getValues = (): Record<string, unknown> => {\n    const result: Record<string, unknown> = {};\n    for (const key of factKeys) {\n      result[key] = system.facts.$store.get(key);\n    }\n    return result;\n  };\n  const state = shallowRef(getValues());\n  const unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n    state.value = getValues();\n  });\n  onScopeDispose(unsubscribe);\n  return state;\n}\n\n// ============================================================================\n// useDerived — single key or multi key\n// ============================================================================\n\n/** Single key overload */\nexport function useDerived<\n  S extends ModuleSchema,\n  K extends keyof InferDerivations<S> & string,\n>(system: SingleModuleSystem<S>, derivationId: K): Ref<InferDerivations<S>[K]>;\n/** Multi-key overload */\nexport function useDerived<\n  S extends ModuleSchema,\n  K extends keyof InferDerivations<S> & string,\n>(\n  system: SingleModuleSystem<S>,\n  derivationIds: K[],\n): ShallowRef<Pick<InferDerivations<S>, K>>;\n/** Implementation */\nexport function useDerived(\n  system: SingleModuleSystem<any>,\n  idOrIds: string | string[],\n): Ref<unknown> | ShallowRef<unknown> {\n  assertSystem(\"useDerived\", system);\n  if (isDevelopment && typeof idOrIds === \"function\") {\n    console.error(\n      \"[Directive] useDerived() received a function. Did you mean useSelector()? \" +\n        \"useDerived() takes a string key or array of keys, not a selector function.\",\n    );\n  }\n\n  // Multi-key path\n  if (Array.isArray(idOrIds)) {\n    return _useDerivedMulti(system, idOrIds);\n  }\n\n  // Single key path\n  return _useDerivedSingle(system, idOrIds);\n}\n\nfunction _useDerivedSingle(\n  system: SingleModuleSystem<any>,\n  derivationId: string,\n): Ref<unknown> {\n  if (isDevelopment) {\n    const initialValue = system.read(derivationId);\n    if (initialValue === undefined) {\n      console.warn(\n        `[Directive] useDerived(\"${derivationId}\") returned undefined. ` +\n          `Check that \"${derivationId}\" is defined in your module's derive property.`,\n      );\n    }\n  }\n  const value = ref(system.read(derivationId));\n  const unsubscribe = system.subscribe([derivationId], () => {\n    value.value = system.read(derivationId);\n  });\n  onScopeDispose(unsubscribe);\n  return value;\n}\n\nfunction _useDerivedMulti(\n  system: SingleModuleSystem<any>,\n  derivationIds: string[],\n): ShallowRef<Record<string, unknown>> {\n  const getValues = (): Record<string, unknown> => {\n    const result: Record<string, unknown> = {};\n    for (const id of derivationIds) {\n      result[id] = system.read(id);\n    }\n    return result;\n  };\n  const state = shallowRef(getValues());\n  const unsubscribe = system.subscribe(derivationIds, () => {\n    state.value = getValues();\n  });\n  onScopeDispose(unsubscribe);\n  return state;\n}\n\n// ============================================================================\n// useSelector — auto-tracking selector over facts and derivations\n// ============================================================================\n\n/**\n * Auto-tracking selector over facts and derivations.\n * Uses `withTracking()` to detect which facts the selector accesses,\n * then subscribes only to those keys.\n */\nexport function useSelector<S extends ModuleSchema, R>(\n  system: SingleModuleSystem<S>,\n  selector: (state: InferSelectorState<S>) => R,\n  equalityFn?: (a: R, b: R) => boolean,\n): Ref<R>;\nexport function useSelector(\n  system: SingleModuleSystem<any>,\n  selector: (state: Record<string, unknown>) => unknown,\n  equalityFn: (a: unknown, b: unknown) => boolean = defaultEquality,\n): Ref<unknown> {\n  assertSystem(\"useSelector\", system);\n  const deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n  const runWithTracking = () =>\n    runTrackedSelector(system, deriveKeySet, selector);\n\n  const initial = runWithTracking();\n  let trackedFactKeys = initial.factKeys;\n  let trackedDeriveKeys = initial.deriveKeys;\n  const selected = ref(initial.value);\n\n  const unsubs: Array<() => void> = [];\n\n  const resubscribe = () => {\n    for (const unsub of unsubs) unsub();\n    unsubs.length = 0;\n\n    const onUpdate = () => {\n      const result = runWithTracking();\n      if (!equalityFn(selected.value, result.value)) {\n        selected.value = result.value;\n      }\n      // Re-track: check if deps changed\n      if (\n        depsChanged(\n          trackedFactKeys,\n          result.factKeys,\n          trackedDeriveKeys,\n          result.deriveKeys,\n        )\n      ) {\n        trackedFactKeys = result.factKeys;\n        trackedDeriveKeys = result.deriveKeys;\n        resubscribe();\n      }\n    };\n\n    if (trackedFactKeys.length > 0) {\n      unsubs.push(system.facts.$store.subscribe(trackedFactKeys, onUpdate));\n    } else if (trackedDeriveKeys.length === 0) {\n      unsubs.push(system.facts.$store.subscribeAll(onUpdate));\n    }\n    if (trackedDeriveKeys.length > 0) {\n      unsubs.push(system.subscribe(trackedDeriveKeys, onUpdate));\n    }\n  };\n\n  resubscribe();\n\n  onScopeDispose(() => {\n    for (const unsub of unsubs) unsub();\n  });\n\n  return selected;\n}\n\n// ============================================================================\n// useDispatch\n// ============================================================================\n\nexport function useDispatch<S extends ModuleSchema>(\n  system: SingleModuleSystem<S>,\n): (event: InferEvents<S>) => void {\n  assertSystem(\"useDispatch\", system);\n  return (event: InferEvents<S>) => {\n    system.dispatch(event);\n  };\n}\n\n// ============================================================================\n// useEvents — memoized events reference\n// ============================================================================\n\n/**\n * Returns the system's events dispatcher.\n */\nexport function useEvents<S extends ModuleSchema>(\n  system: SingleModuleSystem<S>,\n): SingleModuleSystem<S>[\"events\"] {\n  assertSystem(\"useEvents\", system);\n  return system.events;\n}\n\n// ============================================================================\n// useWatch — derivation or fact side-effect\n// ============================================================================\n\n/** Watch a derivation or fact by key (auto-detected). When a key exists in both facts and derivations, the derivation overload takes priority. */\nexport function useWatch<\n  S extends ModuleSchema,\n  K extends keyof InferDerivations<S> & string,\n>(\n  system: SingleModuleSystem<S>,\n  key: K,\n  callback: (\n    newValue: InferDerivations<S>[K],\n    previousValue: InferDerivations<S>[K] | undefined,\n  ) => void,\n): void;\n/** Watch a fact key with auto-detection. */\nexport function useWatch<\n  S extends ModuleSchema,\n  K extends keyof InferFacts<S> & string,\n>(\n  system: SingleModuleSystem<S>,\n  key: K,\n  callback: (\n    newValue: InferFacts<S>[K] | undefined,\n    previousValue: InferFacts<S>[K] | undefined,\n  ) => void,\n): void;\n/** Implementation */\nexport function useWatch(\n  system: SingleModuleSystem<any>,\n  key: string,\n  callback: (newValue: unknown, prevValue: unknown) => void,\n): void {\n  assertSystem(\"useWatch\", system);\n\n  const unsubscribe = system.watch(key, callback);\n  onScopeDispose(unsubscribe);\n}\n\n// ============================================================================\n// useInspect — consolidated inspection hook\n// ============================================================================\n\n/** Options for useInspect */\nexport interface UseInspectOptions {\n  throttleMs?: number;\n}\n\n/**\n * Consolidated system inspection hook.\n * Returns InspectState with optional throttling.\n */\nexport function useInspect(\n  system: SingleModuleSystem<any>,\n  options?: UseInspectOptions,\n): ShallowRef<InspectState> {\n  assertSystem(\"useInspect\", system);\n  const state = shallowRef<InspectState>(computeInspectState(system));\n\n  const update = () => {\n    state.value = computeInspectState(system);\n  };\n\n  if (options?.throttleMs && options.throttleMs > 0) {\n    const { throttled, cleanup } = createThrottle(update, options.throttleMs);\n    const unsubFacts = system.facts.$store.subscribeAll(throttled);\n    const unsubSettled = system.onSettledChange(throttled);\n    onScopeDispose(() => {\n      cleanup();\n      unsubFacts();\n      unsubSettled();\n    });\n  } else {\n    const unsubFacts = system.facts.$store.subscribeAll(update);\n    const unsubSettled = system.onSettledChange(update);\n    onScopeDispose(() => {\n      unsubFacts();\n      unsubSettled();\n    });\n  }\n\n  return state;\n}\n\n// ============================================================================\n// useRequirementStatus — single or multi\n// ============================================================================\n\n/** Single type overload */\nexport function useRequirementStatus(\n  statusPlugin: StatusPlugin,\n  type: string,\n): ShallowRef<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(\n  statusPlugin: StatusPlugin,\n  types: string[],\n): ShallowRef<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n  statusPlugin: StatusPlugin,\n  typeOrTypes: string | string[],\n):\n  | ShallowRef<RequirementTypeStatus>\n  | ShallowRef<Record<string, RequirementTypeStatus>> {\n  if (Array.isArray(typeOrTypes)) {\n    const getValues = (): Record<string, RequirementTypeStatus> => {\n      const result: Record<string, RequirementTypeStatus> = {};\n      for (const type of typeOrTypes) {\n        result[type] = statusPlugin.getStatus(type);\n      }\n      return result;\n    };\n    const state = shallowRef(getValues());\n    const unsubscribe = statusPlugin.subscribe(() => {\n      state.value = getValues();\n    });\n    onScopeDispose(unsubscribe);\n    return state;\n  }\n\n  const status = shallowRef<RequirementTypeStatus>(\n    statusPlugin.getStatus(typeOrTypes),\n  );\n  const unsubscribe = statusPlugin.subscribe(() => {\n    status.value = statusPlugin.getStatus(typeOrTypes);\n  });\n  onScopeDispose(unsubscribe);\n  return status;\n}\n\n// ============================================================================\n// useSuspenseRequirement — async setup() Suspense integration\n// ============================================================================\n\n/**\n * Returns a promise that resolves when a requirement type settles.\n * Designed for Vue's async `setup()` with `<Suspense>`.\n *\n * - If the requirement is loading, the returned promise suspends the component.\n * - If the requirement has an error, the promise rejects with that error.\n * - If the requirement is already settled, resolves immediately.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useSuspenseRequirement } from '@directive-run/vue';\n *\n * // In async setup(), this suspends until FETCH_USER settles\n * const status = await useSuspenseRequirement(statusPlugin, \"FETCH_USER\");\n * </script>\n *\n * <template>\n *   <div>Resolved: {{ status.resolvedCount }}</div>\n * </template>\n * ```\n */\n\n/** Single type overload */\nexport function useSuspenseRequirement(\n  statusPlugin: StatusPlugin,\n  type: string,\n): Promise<ShallowRef<RequirementTypeStatus>>;\n\n/** Multi-type overload */\nexport function useSuspenseRequirement(\n  statusPlugin: StatusPlugin,\n  types: string[],\n): Promise<ShallowRef<Record<string, RequirementTypeStatus>>>;\n\n/** Implementation */\nexport function useSuspenseRequirement(\n  statusPlugin: StatusPlugin,\n  typeOrTypes: string | string[],\n): Promise<\n  | ShallowRef<RequirementTypeStatus>\n  | ShallowRef<Record<string, RequirementTypeStatus>>\n> {\n  if (Array.isArray(typeOrTypes)) {\n    return _useSuspenseRequirementMulti(statusPlugin, typeOrTypes);\n  }\n\n  return _useSuspenseRequirementSingle(statusPlugin, typeOrTypes);\n}\n\nasync function _useSuspenseRequirementSingle(\n  statusPlugin: StatusPlugin,\n  type: string,\n): Promise<ShallowRef<RequirementTypeStatus>> {\n  const initialStatus = statusPlugin.getStatus(type);\n\n  if (initialStatus.hasError && initialStatus.lastError) {\n    throw initialStatus.lastError;\n  }\n\n  // If loading, wait for it to settle\n  if (initialStatus.isLoading) {\n    await new Promise<void>((resolve, reject) => {\n      const unsubscribe = statusPlugin.subscribe(() => {\n        const current = statusPlugin.getStatus(type);\n        if (!current.isLoading) {\n          unsubscribe();\n          if (current.hasError && current.lastError) {\n            reject(current.lastError);\n          } else {\n            resolve();\n          }\n        }\n      });\n      onScopeDispose(unsubscribe);\n    });\n  }\n\n  // Now settled — return a reactive ref that continues tracking\n  const status = shallowRef<RequirementTypeStatus>(\n    statusPlugin.getStatus(type),\n  );\n  const unsubscribe = statusPlugin.subscribe(() => {\n    status.value = statusPlugin.getStatus(type);\n  });\n  onScopeDispose(unsubscribe);\n\n  return status;\n}\n\nfunction _findFirstStatusError(\n  statusPlugin: StatusPlugin,\n  types: string[],\n): Error | null {\n  for (const type of types) {\n    const s = statusPlugin.getStatus(type);\n    if (s.hasError && s.lastError) {\n      return s.lastError;\n    }\n  }\n\n  return null;\n}\n\nfunction _waitForAllSettled(\n  statusPlugin: StatusPlugin,\n  types: string[],\n): Promise<void> {\n  return new Promise<void>((resolve, reject) => {\n    const onTick = () => {\n      const allDone = types.every((t) => !statusPlugin.getStatus(t).isLoading);\n      if (!allDone) return;\n      unsubscribe();\n      const err = _findFirstStatusError(statusPlugin, types);\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve();\n    };\n    const unsubscribe = statusPlugin.subscribe(onTick);\n    onScopeDispose(unsubscribe);\n  });\n}\n\nasync function _useSuspenseRequirementMulti(\n  statusPlugin: StatusPlugin,\n  types: string[],\n): Promise<ShallowRef<Record<string, RequirementTypeStatus>>> {\n  // Check for immediate errors\n  const initialError = _findFirstStatusError(statusPlugin, types);\n  if (initialError) {\n    throw initialError;\n  }\n\n  // If any are loading, wait for all to settle\n  const anyLoading = types.some((t) => statusPlugin.getStatus(t).isLoading);\n  if (anyLoading) {\n    await _waitForAllSettled(statusPlugin, types);\n  }\n\n  // Now settled — return a reactive ref that continues tracking\n  const getValues = (): Record<string, RequirementTypeStatus> => {\n    const result: Record<string, RequirementTypeStatus> = {};\n    for (const type of types) {\n      result[type] = statusPlugin.getStatus(type);\n    }\n\n    return result;\n  };\n  const status = shallowRef(getValues());\n  const unsubscribe = statusPlugin.subscribe(() => {\n    status.value = getValues();\n  });\n  onScopeDispose(unsubscribe);\n\n  return status;\n}\n\n// ============================================================================\n// useExplain — reactive requirement explanation\n// ============================================================================\n\n/**\n * Reactively returns the explanation string for a requirement.\n */\nexport function useExplain(\n  system: SingleModuleSystem<any>,\n  requirementId: string,\n): Ref<string | null> {\n  assertSystem(\"useExplain\", system);\n  const explanation = ref<string | null>(system.explain(requirementId)) as Ref<\n    string | null\n  >;\n\n  const update = () => {\n    explanation.value = system.explain(requirementId);\n  };\n\n  const unsubFacts = system.facts.$store.subscribeAll(update);\n  const unsubSettled = system.onSettledChange(update);\n  onScopeDispose(() => {\n    unsubFacts();\n    unsubSettled();\n  });\n\n  return explanation;\n}\n\n// ============================================================================\n// useConstraintStatus — reactive constraint inspection\n// ============================================================================\n\n/** Get all constraints */\nexport function useConstraintStatus(\n  system: SingleModuleSystem<any>,\n): ComputedRef<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n  system: SingleModuleSystem<any>,\n  constraintId: string,\n): ComputedRef<ConstraintInfo | null>;\n/** Implementation */\nexport function useConstraintStatus(\n  system: SingleModuleSystem<any>,\n  constraintId?: string,\n): ComputedRef<ConstraintInfo[] | ConstraintInfo | null> {\n  assertSystem(\"useConstraintStatus\", system);\n  const inspectState = useInspect(system);\n\n  return computed(() => {\n    // Track reactivity via inspectState, but use full inspect() for constraint list\n    void inspectState.value;\n    const fullInspection = system.inspect();\n    if (!constraintId) return fullInspection.constraints;\n    return (\n      fullInspection.constraints.find((c) => c.id === constraintId) ?? null\n    );\n  });\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n  mutate: (updateFn: () => void) => void;\n  isPending: Ref<boolean>;\n  error: Ref<Error | null>;\n  rollback: () => void;\n}\n\n/**\n * Optimistic update hook. Saves a snapshot before mutating, monitors\n * a requirement type via statusPlugin, and rolls back on failure.\n */\nexport function useOptimisticUpdate(\n  system: SingleModuleSystem<any>,\n  statusPlugin?: StatusPlugin,\n  requirementType?: string,\n): OptimisticUpdateResult {\n  assertSystem(\"useOptimisticUpdate\", system);\n  const isPending = ref(false);\n  const error = ref<Error | null>(null) as Ref<Error | null>;\n  let snapshot: SystemSnapshot | null = null;\n  let unsubscribe: (() => void) | null = null;\n\n  const rollback = () => {\n    if (snapshot) {\n      system.restore(snapshot);\n      snapshot = null;\n    }\n    isPending.value = false;\n    error.value = null;\n    unsubscribe?.();\n    unsubscribe = null;\n  };\n\n  const mutate = (updateFn: () => void) => {\n    snapshot = system.getSnapshot();\n    isPending.value = true;\n    error.value = null;\n    system.batch(updateFn);\n\n    // Watch for resolver completion/failure\n    if (statusPlugin && requirementType) {\n      unsubscribe?.();\n      unsubscribe = statusPlugin.subscribe(() => {\n        const status = statusPlugin.getStatus(requirementType);\n        if (!status.isLoading && !status.hasError) {\n          snapshot = null;\n          isPending.value = false;\n          unsubscribe?.();\n          unsubscribe = null;\n        } else if (status.hasError) {\n          error.value = status.lastError;\n          rollback();\n        }\n      });\n    }\n  };\n\n  onScopeDispose(() => {\n    unsubscribe?.();\n  });\n\n  return { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useHistory — reactive history state\n// ============================================================================\n\n/**\n * Reactive history composable. Returns a ShallowRef that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```vue\n * const history = useHistory(system);\n * <button :disabled=\"!history.value?.canGoBack\" @click=\"history.value?.goBack()\">Undo</button>\n * ```\n */\nexport function useHistory(\n  system: SingleModuleSystem<any>,\n): ShallowRef<ReturnType<typeof buildHistoryState>> {\n  assertSystem(\"useHistory\", system);\n  const state = shallowRef<ReturnType<typeof buildHistoryState>>(\n    buildHistoryState(system),\n  );\n  const unsub = system.onHistoryChange(() => {\n    state.value = buildHistoryState(system);\n  });\n  onScopeDispose(unsub);\n  return state;\n}\n\n// ============================================================================\n// Scoped System Composable\n// ============================================================================\n\n/** Configuration for useDirective */\ninterface UseDirectiveConfig {\n  plugins?: Plugin<any>[];\n  trace?: TraceOption;\n  errorBoundary?: ErrorBoundaryConfig;\n  tickMs?: number;\n  zeroConfig?: boolean;\n  initialFacts?: Record<string, any>;\n  status?: boolean;\n  /** Fact keys to subscribe to (omit for all) */\n  facts?: string[];\n  /** Derivation keys to subscribe to (omit for all) */\n  derived?: string[];\n}\n\n/**\n * Create a scoped Directive system with automatic lifecycle management.\n * When no `facts` or `derived` keys are specified, subscribes to ALL\n * facts and derivations and returns reactive state.\n *\n * @example\n * ```vue\n * // Subscribe to everything\n * const { facts, derived, events, dispatch } = useDirective(counterModule);\n *\n * // Selective keys\n * const { facts, derived } = useDirective(counterModule, { facts: [\"count\"], derived: [\"doubled\"] });\n * ```\n */\nfunction _buildDirectivePlugins(config: UseDirectiveConfig | undefined): {\n  plugins: Plugin<ModuleSchema>[];\n  statusPlugin: StatusPlugin | undefined;\n} {\n  const plugins = [...(config?.plugins ?? [])] as Plugin<ModuleSchema>[];\n  let statusPlugin: StatusPlugin | undefined;\n\n  if (config?.status) {\n    const sp = createRequirementStatusPlugin();\n    statusPlugin = sp;\n    plugins.push(sp.plugin as Plugin<any>);\n  }\n\n  return { plugins, statusPlugin };\n}\n\nfunction _createDirectiveSystem<M extends ModuleSchema>(\n  moduleDef: ModuleDef<M>,\n  config: UseDirectiveConfig | undefined,\n  plugins: Plugin<ModuleSchema>[],\n): SingleModuleSystem<M> {\n  const systemConfig = {\n    module: moduleDef,\n    plugins: plugins.length > 0 ? plugins : undefined,\n    trace: config?.trace,\n    errorBoundary: config?.errorBoundary,\n    tickMs: config?.tickMs,\n    zeroConfig: config?.zeroConfig,\n    initialFacts: config?.initialFacts,\n  } as any;\n\n  return createSystem(systemConfig) as unknown as SingleModuleSystem<M>;\n}\n\nfunction _subscribeFacts<M extends ModuleSchema>(\n  system: SingleModuleSystem<M>,\n  factKeys: string[] | undefined,\n  subscribeAll: boolean,\n): { state: ShallowRef<InferFacts<M>>; unsubscribe: (() => void) | null } {\n  const state = shallowRef(\n    subscribeAll\n      ? (system.facts.$store.toObject() as InferFacts<M>)\n      : pickFacts(system, factKeys ?? []),\n  ) as ShallowRef<InferFacts<M>>;\n\n  if (subscribeAll) {\n    const unsubscribe = system.facts.$store.subscribeAll(() => {\n      state.value = system.facts.$store.toObject() as InferFacts<M>;\n    });\n    return { state, unsubscribe };\n  }\n\n  if (factKeys && factKeys.length > 0) {\n    const unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n      state.value = pickFacts(system, factKeys) as InferFacts<M>;\n    });\n    return { state, unsubscribe };\n  }\n\n  return { state, unsubscribe: null };\n}\n\nfunction _subscribeDerived<M extends ModuleSchema>(\n  system: SingleModuleSystem<M>,\n  derivedKeys: string[] | undefined,\n  subscribeAll: boolean,\n): {\n  state: ShallowRef<InferDerivations<M>>;\n  unsubscribe: (() => void) | null;\n} {\n  const allDerivationKeys = subscribeAll\n    ? Object.keys(system.derive ?? {})\n    : (derivedKeys ?? []);\n  const getDerived = (): InferDerivations<M> => {\n    const result: Record<string, unknown> = {};\n    for (const key of allDerivationKeys) {\n      result[key] = system.read(key);\n    }\n    return result as InferDerivations<M>;\n  };\n  const state = shallowRef(getDerived()) as ShallowRef<InferDerivations<M>>;\n  const unsubscribe =\n    allDerivationKeys.length > 0\n      ? system.subscribe(allDerivationKeys, () => {\n          state.value = getDerived();\n        })\n      : null;\n\n  return { state, unsubscribe };\n}\n\nexport function useDirective<M extends ModuleSchema>(\n  moduleDef: ModuleDef<M>,\n  config?: UseDirectiveConfig,\n) {\n  const { plugins, statusPlugin } = _buildDirectivePlugins(config);\n  const system = _createDirectiveSystem(moduleDef, config, plugins);\n\n  // SSR guard: initialize facts for SSR rendering, start reconciliation only in the browser\n  if (typeof window !== \"undefined\") {\n    system.start();\n  } else {\n    system.initialize();\n  }\n\n  onScopeDispose(() => {\n    // RFC 0009 follow-up (R18 Tier 2-B): use destroyAsync so source\n    // unsubscribes actually complete (e.g. Supabase `channel.unsubscribe()`\n    // returns a Promise the sync `destroy()` would have dropped on\n    // the floor). The framework's onScopeDispose is sync, so we\n    // fire-and-forget with a swallow-catch — broker drops finish in\n    // the background; any unsubscribe rejection is already routed\n    // through the manager's runtime-phase observability sink.\n    system.destroyAsync().catch((err: unknown) => {\n      if (isDevelopment)\n        console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n    });\n  });\n\n  const factKeys = config?.facts;\n  const derivedKeys = config?.derived;\n  const subscribeAll = !factKeys && !derivedKeys;\n\n  const { state: factsState, unsubscribe: unsubFacts } = _subscribeFacts(\n    system,\n    factKeys,\n    subscribeAll,\n  );\n  const { state: derivedState, unsubscribe: unsubDerived } = _subscribeDerived(\n    system,\n    derivedKeys,\n    subscribeAll,\n  );\n\n  onScopeDispose(() => {\n    unsubFacts?.();\n    unsubDerived?.();\n  });\n\n  const events = system.events;\n  const dispatch = (event: InferEvents<M>) => system.dispatch(event);\n\n  return {\n    system,\n    facts: factsState as ShallowRef<InferFacts<M>>,\n    derived: derivedState as ShallowRef<InferDerivations<M>>,\n    events,\n    dispatch,\n    statusPlugin,\n  };\n}\n\n// ============================================================================\n// Typed Hooks Factory\n// ============================================================================\n\nexport function createTypedHooks<M extends ModuleSchema>(): {\n  useFact: <K extends keyof InferFacts<M> & string>(\n    system: SingleModuleSystem<M>,\n    factKey: K,\n  ) => Ref<InferFacts<M>[K] | undefined>;\n  useDerived: <K extends keyof InferDerivations<M> & string>(\n    system: SingleModuleSystem<M>,\n    derivationId: K,\n  ) => Ref<InferDerivations<M>[K]>;\n  useDispatch: (\n    system: SingleModuleSystem<M>,\n  ) => (event: InferEvents<M>) => void;\n  useEvents: (system: SingleModuleSystem<M>) => SingleModuleSystem<M>[\"events\"];\n  useWatch: <K extends string>(\n    system: SingleModuleSystem<M>,\n    key: K,\n    callback: (newValue: unknown, previousValue: unknown) => void,\n  ) => void;\n} {\n  return {\n    useFact: <K extends keyof InferFacts<M> & string>(\n      system: SingleModuleSystem<M>,\n      factKey: K,\n    ) =>\n      useFact(system as SingleModuleSystem<any>, factKey) as Ref<\n        InferFacts<M>[K] | undefined\n      >,\n    useDerived: <K extends keyof InferDerivations<M> & string>(\n      system: SingleModuleSystem<M>,\n      derivationId: K,\n    ) =>\n      useDerived(system as SingleModuleSystem<any>, derivationId) as Ref<\n        InferDerivations<M>[K]\n      >,\n    useDispatch: (system: SingleModuleSystem<M>) => {\n      return (event: InferEvents<M>) => {\n        system.dispatch(event);\n      };\n    },\n    useEvents: (system: SingleModuleSystem<M>) => useEvents<M>(system),\n    useWatch: <K extends string>(\n      system: SingleModuleSystem<M>,\n      key: K,\n      callback: (newValue: unknown, previousValue: unknown) => void,\n    ) => useWatch(system as SingleModuleSystem<any>, key, callback),\n  };\n}\n\n// ============================================================================\n// useNamespacedSelector — select from a NamespacedSystem\n// ============================================================================\n\n/**\n * Reactive composable to select from a NamespacedSystem.\n * Subscribes to specified keys and returns a Vue ref.\n *\n * @param system - The namespaced system\n * @param keys - Namespaced keys to subscribe to (e.g., [\"auth.token\", \"data.count\"])\n * @param selector - Function that reads from system.facts / system.derive\n *\n * @example\n * ```vue\n * const system = useDirectiveRef({ modules: { auth, data } });\n * const token = useNamespacedSelector(system, [\"auth.token\"], (s) => s.facts.auth.token);\n * ```\n */\nexport function useNamespacedSelector<Modules extends ModulesMap, R>(\n  system: NamespacedSystem<Modules>,\n  keys: string[],\n  selector: (system: NamespacedSystem<Modules>) => R,\n): Ref<R> {\n  const value = ref(selector(system)) as Ref<R>;\n  const unsubscribe = system.subscribe(keys, () => {\n    value.value = selector(system) as R;\n  });\n  onScopeDispose(unsubscribe);\n\n  return value;\n}\n\n// ============================================================================\n// useQuerySystem — Stable query system with lifecycle management\n// ============================================================================\n\nlet _createQuerySystem: ((config: Record<string, unknown>) => any) | null =\n  null;\n\nfunction getCreateQuerySystem() {\n  if (!_createQuerySystem) {\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-require-imports\n      const mod = require(\"@directive-run/query\");\n      _createQuerySystem = mod.createQuerySystem;\n    } catch {\n      throw new Error(\n        \"[Directive] @directive-run/query is not installed. \" +\n          \"Install it with: pnpm add @directive-run/query\",\n      );\n    }\n  }\n\n  return _createQuerySystem!;\n}\n\n/**\n * Vue composable to create and manage a query system with proper lifecycle.\n *\n * Accepts a config object or a factory function that creates the system.\n * Handles cleanup on scope disposal.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useQuerySystem, useDerived } from \"@directive-run/vue\";\n *\n * const app = useQuerySystem({\n *   facts: { userId: \"\" },\n *   queries: { user: { key: ..., fetcher: ... } },\n * });\n *\n * const user = useDerived(app, \"user\");\n * </script>\n * ```\n */\nexport function useQuerySystem<\n  T extends {\n    start: () => void;\n    destroy: () => void;\n    isRunning?: boolean;\n    [key: string]: any;\n  },\n>(config: Record<string, unknown>): T {\n  const createQuerySystem = getCreateQuerySystem();\n  const system = createQuerySystem(config) as T;\n\n  // Start if not already running\n  if (typeof window !== \"undefined\" && !system.isRunning) {\n    system.start();\n  }\n\n  onScopeDispose(() => {\n    // RFC 0009 follow-up (R18 Tier 2-B): use destroyAsync so source\n    // unsubscribes actually complete (e.g. Supabase `channel.unsubscribe()`\n    // returns a Promise the sync `destroy()` would have dropped on\n    // the floor). The framework's onScopeDispose is sync, so we\n    // fire-and-forget with a swallow-catch — broker drops finish in\n    // the background; any unsubscribe rejection is already routed\n    // through the manager's runtime-phase observability sink.\n    system.destroyAsync().catch((err: unknown) => {\n      if (isDevelopment)\n        console.warn(\"[Directive] destroyAsync rejected during unmount:\", err);\n    });\n  });\n\n  return system;\n}\n\n// ============================================================================\n// SSR Hydration\n// ============================================================================\n\n/** @internal Injection key for SSR hydration snapshot */\nconst HYDRATION_KEY: InjectionKey<Record<string, unknown>> = Symbol(\n  \"directive-hydration\",\n);\n\n/**\n * Vue component that provides a DistributableSnapshot to child components.\n * Use with `useHydratedSystem` for SSR hydration in Nuxt or Vue SSR apps.\n *\n * @example\n * ```vue\n * <template>\n *   <DirectiveHydrator :snapshot=\"snapshot\">\n *     <App />\n *   </DirectiveHydrator>\n * </template>\n * ```\n */\nexport const DirectiveHydrator = defineComponent({\n  name: \"DirectiveHydrator\",\n  props: {\n    snapshot: { type: Object, required: true },\n  },\n  setup(props, { slots }) {\n    provide(HYDRATION_KEY, props.snapshot as Record<string, unknown>);\n\n    return () => slots.default?.();\n  },\n});\n\n/**\n * Vue composable that creates a system hydrated from a server snapshot.\n * Must be used inside a `<DirectiveHydrator>` ancestor.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useHydratedSystem, useDerived } from \"@directive-run/vue\";\n * const system = useHydratedSystem(myModule);\n * const count = useDerived(system, \"count\");\n * </script>\n * ```\n */\nexport function useHydratedSystem<S extends ModuleSchema>(\n  moduleDef: ModuleDef<S>,\n  config?: UseDirectiveConfig,\n): SingleModuleSystem<S> {\n  const snapshot = inject(HYDRATION_KEY, undefined);\n  const mergedFacts = mergeHydrationFacts(\n    snapshot,\n    config?.initialFacts as Record<string, unknown>,\n  );\n  const { system } = useDirective(moduleDef, {\n    ...config,\n    initialFacts: mergedFacts,\n  });\n\n  return system;\n}\n\n// ============================================================================\n// useAuditLedger — live ledger entries with filter (R4.I parity)\n// ============================================================================\n\nimport type { AuditEntry, AuditLedger, QueryFilter } from \"@directive-run/core\";\n\n/**\n * Subscribe to an audit ledger and return the latest entries matching\n * `filter` as a reactive `Ref`. Re-evaluates on each poll tick (default\n * 250 ms — override with `pollMs`).\n *\n * **Polling floor:** `pollMs` is clamped to a minimum of 50 ms to prevent\n * accidental DoS from typos like `pollMs: 5`. Values below the floor are\n * silently clamped in production; dev mode logs a warning.\n *\n * **First-paint freshness:** the interval starts immediately at setup\n * time (not gated on `onMounted`), so the first ledger query lands\n * before the component paints. Cleanup uses `onScopeDispose`, which\n * is correct for both component scopes and ad-hoc effect scopes.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useAuditLedger } from \"@directive-run/vue\";\n * const entries = useAuditLedger(ledger, { kind: \"constraint.evaluate\", limit: 20 });\n * </script>\n * <template>\n *   <ul>\n *     <li v-for=\"e in entries\" :key=\"e.seq\">{{ e.kind }} @ {{ e.ts }}</li>\n *   </ul>\n * </template>\n * ```\n */\nexport function useAuditLedger(\n  ledger: AuditLedger,\n  filter: QueryFilter = {},\n  opts: { pollMs?: number } = {},\n): ShallowRef<readonly AuditEntry[]> {\n  const requestedPollMs = opts.pollMs ?? 250;\n  const pollMs = Math.max(50, requestedPollMs);\n\n  if (isDevelopment) {\n    if (opts.pollMs !== undefined && opts.pollMs < 50) {\n      console.warn(\n        `[Directive] useAuditLedger() pollMs=${opts.pollMs} is below the 50 ms floor; clamped to 50 ms.`,\n      );\n    }\n    if (pollMs < 100) {\n      const entryCount = ledger.toJSON().entries.length;\n      if (entryCount > 1000) {\n        console.warn(\n          `[Directive] useAuditLedger() polling every ${pollMs} ms against a ${entryCount}-entry ledger — that's a lot of CPU per tick. Consider raising pollMs or tightening the filter.`,\n        );\n      }\n    }\n  }\n\n  const entries = shallowRef<readonly AuditEntry[]>(ledger.query(filter));\n  const intervalId = setInterval(() => {\n    entries.value = ledger.query(filter);\n  }, pollMs);\n\n  onScopeDispose(() => {\n    clearInterval(intervalId);\n  });\n\n  return entries;\n}\n"]}