diff --git a/.changeset/shared-console-warnings.md b/.changeset/shared-console-warnings.md
new file mode 100644
index 00000000..da71a9d3
--- /dev/null
+++ b/.changeset/shared-console-warnings.md
@@ -0,0 +1,6 @@
+---
+"@dashfoo/core": minor
+"@dashfoo/react": patch
+---
+
+Export `warn` and `warnOnce` from `@dashfoo/core`. Both packages now report degraded paths through them, so every developer-console warning carries the same `[dashfoo]` prefix, and a missing tab component warns once per component key across layouts.
diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx
index 5905e3c2..9f95d91c 100644
--- a/apps/docs/app/layout.tsx
+++ b/apps/docs/app/layout.tsx
@@ -4,6 +4,8 @@ import { RootProvider } from "fumadocs-ui/provider/next";
import type { Metadata, Viewport } from "next";
import type { ReactNode } from "react";
+import { DocsSearchDialog } from "@/components/search-dialog";
+
export const metadata: Metadata = {
description:
"Documentation for dashfoo: a headless React docking-layout library with tiled, resizable, tabbed regions, a serializable model, and zero imposed styling.",
@@ -28,8 +30,7 @@ const RootLayout = ({ children }: { children: ReactNode }) => (
aria-hidden="true"
className="reading-progress-bar reading-progress-range fixed top-0 left-0 z-50 h-0.5 w-0 bg-(--primary)"
/>
- {/* oxlint-disable-next-line typescript/no-deprecated -- fumadocs still supports the static preset; swapping to a hand-rolled Orama dialog is out of scope for the lint rollout. */}
- {children}
+ {children}