{"version":3,"sources":["../src/dev-true.ts","../src/index.ts"],"names":["dev_true_default","useFact","system","keyOrKeys","assertSystem","_useFactMulti","_useFactSingle","factKey","value","setValue","createSignal","unsubscribe","onCleanup","factKeys","getValues","result","key","state","setState","useDerived","idOrIds","_useDerivedMulti","_useDerivedSingle","derivationId","derivationIds","id","useSelector","selector","equalityFn","defaultEquality","deriveKeySet","runWithTracking","runTrackedSelector","initial","trackedFactKeys","trackedDeriveKeys","selected","setSelected","unsubs","resubscribe","unsub","onUpdate","prev","depsChanged","useDispatch","event","useEvents","useWatch","callback","useInspect","options","computeInspectState","update","throttled","cleanup","createThrottle","unsubFacts","unsubSettled","useRequirementStatus","statusPlugin","typeOrTypes","type","status","setStatus","useExplain","requirementId","explanation","setExplanation","useConstraintStatus","constraintId","getVal","inspection","c","useOptimisticUpdate","requirementType","isPending","setIsPending","error","setError","snapshot","statusUnsub","rollback","mutate","updateFn","useSuspenseRequirement","types","anyLoading","t","resolve","useHistory","buildHistoryState","useDirective","moduleDef","config","allPlugins","sp","createRequirementStatusPlugin","createSystem","err","derivedKeys","subscribeAll","factsState","setFactsState","pickFacts","allDerivationKeys","getDerived","derivedState","setDerivedState","unsubDerived","events","createDerivedSignal","createFactSignal","createTypedHooks","useNamespacedSelector","keys","_createQuerySystem","getCreateQuerySystem","useQuerySystem","HydrationContext","createContext","DirectiveHydrator","useHydratedSystem","useContext","mergedFacts","mergeHydrationFacts","useAuditLedger","ledger","filter","opts","requestedPollMs","pollMs","entryCount","entries","setEntries"],"mappings":"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","file":"index.cjs","sourcesContent":["export default typeof process !== \"undefined\" &&\n  process.env?.NODE_ENV !== \"production\";\n","/**\n * Solid Adapter - Consolidated SolidJS primitives for Directive\n *\n * 16 active exports: useFact, useDerived, useDispatch, useSelector,\n * useWatch, useInspect, useRequirementStatus, useEvents, useExplain,\n * useConstraintStatus, useOptimisticUpdate, useDirective, useHistory,\n * createTypedHooks, useSuspenseRequirement, shallowEqual\n *\n * Signal factories: createDerivedSignal, createFactSignal\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 Accessor,\n  createContext,\n  createSignal,\n  onCleanup,\n  useContext,\n} from \"solid-js\";\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>(\n  system: SingleModuleSystem<S>,\n  factKey: K,\n): Accessor<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): Accessor<Pick<InferFacts<S>, K>>;\n/** Implementation */\nexport function useFact(\n  system: SingleModuleSystem<any>,\n  keyOrKeys: string | string[],\n): Accessor<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\n  if (Array.isArray(keyOrKeys)) {\n    return _useFactMulti(system, keyOrKeys);\n  }\n\n  // Single key path\n  return _useFactSingle(system, keyOrKeys);\n}\n\nfunction _useFactSingle(\n  system: SingleModuleSystem<any>,\n  factKey: string,\n): Accessor<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, setValue] = createSignal(system.facts.$store.get(factKey));\n  const unsubscribe = system.facts.$store.subscribe([factKey], () => {\n    setValue(() => system.facts.$store.get(factKey));\n  });\n  onCleanup(unsubscribe);\n  return value;\n}\n\nfunction _useFactMulti(\n  system: SingleModuleSystem<any>,\n  factKeys: string[],\n): Accessor<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, setState] = createSignal(getValues());\n  const unsubscribe = system.facts.$store.subscribe(factKeys, () => {\n    setState(getValues);\n  });\n  onCleanup(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>(\n  system: SingleModuleSystem<S>,\n  derivationId: K,\n): Accessor<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): Accessor<Pick<InferDerivations<S>, K>>;\n/** Implementation */\nexport function useDerived(\n  system: SingleModuleSystem<any>,\n  idOrIds: string | string[],\n): Accessor<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): Accessor<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, setValue] = createSignal(system.read(derivationId));\n  const unsubscribe = system.subscribe([derivationId], () => {\n    setValue(() => system.read(derivationId));\n  });\n  onCleanup(unsubscribe);\n  return value;\n}\n\nfunction _useDerivedMulti(\n  system: SingleModuleSystem<any>,\n  derivationIds: string[],\n): Accessor<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, setState] = createSignal(getValues());\n  const unsubscribe = system.subscribe(derivationIds, () => {\n    setState(getValues);\n  });\n  onCleanup(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): Accessor<R>;\nexport function useSelector(\n  system: SingleModuleSystem<any>,\n  selector: (state: any) => unknown,\n  equalityFn: (a: unknown, b: unknown) => boolean = defaultEquality,\n): Accessor<unknown> {\n  assertSystem(\"useSelector\", system);\n  const deriveKeySet = new Set(Object.keys(system.derive ?? {}));\n\n  // Build a tracking-aware state proxy that exposes both facts and derivations\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, setSelected] = createSignal(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      setSelected((prev) => {\n        if (!equalityFn(prev, result.value)) return result.value;\n        return prev;\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  onCleanup(() => {\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  onCleanup(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 Accessor<InspectState> with optional throttling.\n */\nexport function useInspect(\n  system: SingleModuleSystem<any>,\n  options?: UseInspectOptions,\n): Accessor<InspectState> {\n  assertSystem(\"useInspect\", system);\n  const [state, setState] = createSignal<InspectState>(\n    computeInspectState(system),\n  );\n\n  const update = () => {\n    setState(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    onCleanup(() => {\n      cleanup();\n      unsubFacts();\n      unsubSettled();\n    });\n  } else {\n    const unsubFacts = system.facts.$store.subscribeAll(update);\n    const unsubSettled = system.onSettledChange(update);\n    onCleanup(() => {\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): Accessor<RequirementTypeStatus>;\n/** Multi-type overload */\nexport function useRequirementStatus(\n  statusPlugin: StatusPlugin,\n  types: string[],\n): Accessor<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useRequirementStatus(\n  statusPlugin: StatusPlugin,\n  typeOrTypes: string | string[],\n):\n  | Accessor<RequirementTypeStatus>\n  | Accessor<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, setState] = createSignal(getValues());\n    const unsubscribe = statusPlugin.subscribe(() => {\n      setState(getValues);\n    });\n    onCleanup(unsubscribe);\n    return state;\n  }\n\n  const [status, setStatus] = createSignal<RequirementTypeStatus>(\n    statusPlugin.getStatus(typeOrTypes),\n  );\n  const unsubscribe = statusPlugin.subscribe(() => {\n    setStatus(statusPlugin.getStatus(typeOrTypes));\n  });\n  onCleanup(unsubscribe);\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): Accessor<string | null> {\n  assertSystem(\"useExplain\", system);\n  const [explanation, setExplanation] = createSignal<string | null>(\n    system.explain(requirementId),\n  );\n\n  const update = () => setExplanation(system.explain(requirementId));\n  const unsubFacts = system.facts.$store.subscribeAll(update);\n  const unsubSettled = system.onSettledChange(update);\n  onCleanup(() => {\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): Accessor<ConstraintInfo[]>;\n/** Get a single constraint by ID */\nexport function useConstraintStatus(\n  system: SingleModuleSystem<any>,\n  constraintId: string,\n): Accessor<ConstraintInfo | null>;\n/** Implementation */\nexport function useConstraintStatus(\n  system: SingleModuleSystem<any>,\n  constraintId?: string,\n): Accessor<ConstraintInfo[] | ConstraintInfo | null> {\n  assertSystem(\"useConstraintStatus\", system);\n  const getVal = () => {\n    const inspection = system.inspect();\n    if (!constraintId) return inspection.constraints;\n    return (\n      inspection.constraints.find(\n        (c: ConstraintInfo) => c.id === constraintId,\n      ) ?? null\n    );\n  };\n\n  const [state, setState] = createSignal<\n    ConstraintInfo[] | ConstraintInfo | null\n  >(getVal());\n\n  const update = () => setState(getVal);\n  const unsubFacts = system.facts.$store.subscribeAll(update);\n  const unsubSettled = system.onSettledChange(update);\n  onCleanup(() => {\n    unsubFacts();\n    unsubSettled();\n  });\n\n  return state;\n}\n\n// ============================================================================\n// useOptimisticUpdate — batch with rollback on failure\n// ============================================================================\n\nexport interface OptimisticUpdateResult {\n  mutate: (updateFn: () => void) => void;\n  isPending: Accessor<boolean>;\n  error: Accessor<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, setIsPending] = createSignal(false);\n  const [error, setError] = createSignal<Error | null>(null);\n  let snapshot: SystemSnapshot | null = null;\n  let statusUnsub: (() => void) | null = null;\n\n  const rollback = () => {\n    if (snapshot) {\n      system.restore(snapshot);\n      snapshot = null;\n    }\n    setIsPending(false);\n    setError(null);\n    statusUnsub?.();\n    statusUnsub = null;\n  };\n\n  const mutate = (updateFn: () => void) => {\n    snapshot = system.getSnapshot();\n    setIsPending(true);\n    setError(null);\n    system.batch(updateFn);\n\n    if (statusPlugin && requirementType) {\n      statusUnsub?.();\n      statusUnsub = statusPlugin.subscribe(() => {\n        const status = statusPlugin.getStatus(requirementType);\n        if (!status.isLoading && !status.hasError) {\n          snapshot = null;\n          setIsPending(false);\n          statusUnsub?.();\n          statusUnsub = null;\n        } else if (status.hasError) {\n          setError(() => status.lastError);\n          rollback();\n        }\n      });\n    }\n  };\n\n  onCleanup(() => {\n    statusUnsub?.();\n  });\n\n  return { mutate, isPending, error, rollback };\n}\n\n// ============================================================================\n// useSuspenseRequirement — Solid-specific Suspense integration\n// ============================================================================\n\n/**\n * Single type: throws a promise while the requirement is pending (Suspense).\n */\nexport function useSuspenseRequirement(\n  statusPlugin: StatusPlugin,\n  type: string,\n): Accessor<RequirementTypeStatus>;\n/**\n * Multi-type: throws a promise while any of the requirements are pending.\n */\nexport function useSuspenseRequirement(\n  statusPlugin: StatusPlugin,\n  types: string[],\n): Accessor<Record<string, RequirementTypeStatus>>;\n/** Implementation */\nexport function useSuspenseRequirement(\n  statusPlugin: StatusPlugin,\n  typeOrTypes: string | string[],\n):\n  | Accessor<RequirementTypeStatus>\n  | Accessor<Record<string, RequirementTypeStatus>> {\n  const types = Array.isArray(typeOrTypes) ? typeOrTypes : [typeOrTypes];\n\n  // Check if any are still loading — if so, throw a promise\n  const anyLoading = () =>\n    types.some((t) => statusPlugin.getStatus(t).isLoading);\n\n  if (anyLoading()) {\n    throw new Promise<void>((resolve) => {\n      const unsub = statusPlugin.subscribe(() => {\n        if (!anyLoading()) {\n          unsub();\n          resolve();\n        }\n      });\n    });\n  }\n\n  // Once resolved, return normal accessor\n  if (Array.isArray(typeOrTypes)) {\n    return useRequirementStatus(statusPlugin, typeOrTypes) as Accessor<\n      Record<string, RequirementTypeStatus>\n    >;\n  }\n  return useRequirementStatus(\n    statusPlugin,\n    typeOrTypes,\n  ) as Accessor<RequirementTypeStatus>;\n}\n\n// ============================================================================\n// useHistory — reactive history signal\n// ============================================================================\n\n/**\n * Reactive history signal. Returns an Accessor that updates\n * when snapshots are taken or navigation occurs.\n *\n * @example\n * ```tsx\n * const history = useHistory(system);\n * <button disabled={!history()?.canGoBack} onClick={() => history()?.goBack()}>Undo</button>\n * ```\n */\nexport function useHistory(\n  system: SingleModuleSystem<any>,\n): Accessor<ReturnType<typeof buildHistoryState>> {\n  assertSystem(\"useHistory\", system);\n  const [state, setState] = createSignal<ReturnType<typeof buildHistoryState>>(\n    buildHistoryState(system),\n  );\n  const unsub = system.onHistoryChange(() =>\n    setState(buildHistoryState(system)),\n  );\n  onCleanup(unsub);\n  return state;\n}\n\n// ============================================================================\n// Scoped System\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 signals.\n *\n * @example\n * ```tsx\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 */\nexport function useDirective<M extends ModuleSchema>(\n  moduleDef: ModuleDef<M>,\n  config?: UseDirectiveConfig,\n) {\n  const allPlugins = [...(config?.plugins ?? [])];\n  let statusPlugin: StatusPlugin | undefined;\n\n  if (config?.status) {\n    const sp = createRequirementStatusPlugin();\n    statusPlugin = sp;\n    allPlugins.push(sp.plugin as Plugin<any>);\n  }\n\n  const system = createSystem({\n    module: moduleDef,\n    plugins: allPlugins.length > 0 ? allPlugins : undefined,\n    trace: config?.trace,\n    errorBoundary: config?.errorBoundary,\n    tickMs: config?.tickMs,\n    zeroConfig: config?.zeroConfig,\n    initialFacts: config?.initialFacts,\n  } as any) as unknown as SingleModuleSystem<M>;\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  onCleanup(() => {\n    // RFC 0009 follow-up: destroyAsync so source\n    // unsubscribes complete; fire-and-forget with swallow-catch\n    // (the framework's onCleanup is sync).\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  // Subscribe to facts\n  const [factsState, setFactsState] = createSignal(\n    subscribeAll\n      ? (system.facts.$store.toObject() as InferFacts<M>)\n      : (pickFacts(system, factKeys ?? []) as InferFacts<M>),\n  );\n  const unsubFacts = subscribeAll\n    ? system.facts.$store.subscribeAll(() => {\n        setFactsState(() => system.facts.$store.toObject() as InferFacts<M>);\n      })\n    : factKeys && factKeys.length > 0\n      ? system.facts.$store.subscribe(factKeys, () => {\n          setFactsState(() => pickFacts(system, factKeys) as InferFacts<M>);\n        })\n      : null;\n\n  // Subscribe to derivations\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 [derivedState, setDerivedState] = createSignal(getDerived());\n  const unsubDerived =\n    allDerivationKeys.length > 0\n      ? system.subscribe(allDerivationKeys, () => {\n          setDerivedState(getDerived);\n        })\n      : null;\n\n  onCleanup(() => {\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 Accessor<InferFacts<M>>,\n    derived: derivedState as Accessor<InferDerivations<M>>,\n    events,\n    dispatch,\n    statusPlugin,\n  };\n}\n\n// ============================================================================\n// Signal Factories (for use outside components)\n// ============================================================================\n\n/**\n * Create a derivation signal outside of a component.\n */\nexport function createDerivedSignal<T>(\n  system: SingleModuleSystem<any>,\n  derivationId: string,\n): [Accessor<T>, () => void] {\n  const [value, setValue] = createSignal<T>(system.read(derivationId) as T);\n  const unsubscribe = system.subscribe([derivationId], () => {\n    setValue(() => system.read(derivationId) as T);\n  });\n  return [value, unsubscribe];\n}\n\n/**\n * Create a fact signal outside of a component.\n */\nexport function createFactSignal<T>(\n  system: SingleModuleSystem<any>,\n  factKey: string,\n): [Accessor<T | undefined>, () => void] {\n  const [value, setValue] = createSignal<T | undefined>(\n    system.facts.$store.get(factKey) as T | undefined,\n  );\n  const unsubscribe = system.facts.$store.subscribe([factKey], () => {\n    setValue(() => system.facts.$store.get(factKey) as T | undefined);\n  });\n  return [value, unsubscribe];\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  ) => Accessor<InferFacts<M>[K] | undefined>;\n  useDerived: <K extends keyof InferDerivations<M> & string>(\n    system: SingleModuleSystem<M>,\n    derivationId: K,\n  ) => Accessor<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 string) as Accessor<\n        InferFacts<M>[K] | undefined\n      >,\n    useDerived: <K extends keyof InferDerivations<M> & string>(\n      system: SingleModuleSystem<M>,\n      derivationId: K,\n    ) =>\n      useDerived(\n        system as SingleModuleSystem<any>,\n        derivationId as string,\n      ) as Accessor<InferDerivations<M>[K]>,\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 * SolidJS accessor that selects from a NamespacedSystem.\n * Subscribes to specified keys and provides reactive updates.\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 * ```tsx\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): Accessor<R> {\n  const [value, setValue] = createSignal<R>(selector(system));\n  const unsubscribe = system.subscribe(keys, () => {\n    setValue(() => selector(system));\n  });\n  onCleanup(unsubscribe);\n\n  return value as Accessor<R>;\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 * Solid 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 via onCleanup.\n *\n * @example\n * ```tsx\n * import { useQuerySystem, useDerived } from \"@directive-run/solid\";\n *\n * function App() {\n *   const app = useQuerySystem({\n *     facts: { userId: \"\" },\n *     queries: { user: { key: ..., fetcher: ... } },\n *   });\n *\n *   const user = useDerived(app, \"user\");\n *   return <div>{user().data?.name}</div>;\n * }\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  if (typeof window !== \"undefined\" && !system.isRunning) {\n    system.start();\n  }\n\n  onCleanup(() => {\n    // RFC 0009 follow-up: destroyAsync so source\n    // unsubscribes complete; fire-and-forget with swallow-catch\n    // (the framework's onCleanup is sync).\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/** Context for SSR hydration snapshot */\nconst HydrationContext = createContext<Record<string, unknown> | undefined>();\n\n/**\n * Solid component that provides a DistributableSnapshot to child components.\n * Uses `HydrationContext.Provider` under the hood — pass `value` as the snapshot.\n *\n * @example\n * ```tsx\n * <DirectiveHydrator value={snapshot}>\n *   <App />\n * </DirectiveHydrator>\n * ```\n */\nexport const DirectiveHydrator = HydrationContext.Provider;\n\n/**\n * Create a system hydrated from a server snapshot.\n * Must be used inside a `<DirectiveHydrator>` ancestor.\n */\nexport function useHydratedSystem<S extends ModuleSchema>(\n  moduleDef: ModuleDef<S>,\n  config?: UseDirectiveConfig,\n): SingleModuleSystem<S> {\n  const snapshot = useContext(HydrationContext);\n  const mergedFacts = mergeHydrationFacts(\n    snapshot,\n    config?.initialFacts as Record<string, unknown>,\n  );\n\n  return useDirective(moduleDef, { ...config, initialFacts: mergedFacts })\n    .system;\n}\n\n// ============================================================================\n// useAuditLedger — live ledger entries with filter\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 Solid `Accessor`. Re-evaluates on each poll tick\n * (default 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 * @example\n * ```tsx\n * import { useAuditLedger } from \"@directive-run/solid\";\n *\n * function AuditLog(props: { ledger: AuditLedger }) {\n *   const entries = useAuditLedger(props.ledger, { kind: \"constraint.evaluate\", limit: 20 });\n *   return (\n *     <ul>\n *       <For each={entries()}>\n *         {(e) => <li>{e.kind} @ {new Date(e.ts).toISOString()}</li>}\n *       </For>\n *     </ul>\n *   );\n * }\n * ```\n */\nexport function useAuditLedger(\n  ledger: AuditLedger,\n  filter: QueryFilter = {},\n  opts: { pollMs?: number } = {},\n): Accessor<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, setEntries] = createSignal<readonly AuditEntry[]>(\n    ledger.query(filter),\n  );\n  const id = setInterval(() => setEntries(() => ledger.query(filter)), pollMs);\n  onCleanup(() => clearInterval(id));\n\n  return entries;\n}\n"]}