diff --git a/apps/docs/docs/management/api/index.mdx b/apps/docs/docs/management/api/index.mdx index f919b7b2e..8a6e407c0 100644 --- a/apps/docs/docs/management/api/index.mdx +++ b/apps/docs/docs/management/api/index.mdx @@ -112,6 +112,8 @@ The OpenAPI and MCP APIs include board management endpoints for common automatio Board layout responses identify each layout with a `mobile`, `base`, or `custom` role. Mobile and Base are protected. Layout-saving clients must preserve existing roles, keep Mobile at breakpoint `0`, keep Base as the highest breakpoint, and use unique custom breakpoints between them. The layout save operation returns the canonical saved layouts, including server-generated IDs for new custom layouts. A non-Base layout can be regenerated from Base with the protected reset operation. +The internal `board.getManageOverview` tRPC query returns compact board previews limited to 12 layout rows by default. Callers may provide `previewRowLimit` from 1 through 48; `fullPreview: true` requests the server's 48-row maximum. + Use the interactive API reference to inspect the exact request body for each endpoint under the `boards` and `settings` tags. ## Docker action payload migration diff --git a/packages/api/src/router/docker/docker-router.ts b/packages/api/src/router/docker/docker-router.ts index e62c39e35..2e84ce42e 100644 --- a/packages/api/src/router/docker/docker-router.ts +++ b/packages/api/src/router/docker/docker-router.ts @@ -4,6 +4,7 @@ import { z } from "zod/v4"; import type { ContainerState, DockerContainerTarget, Port } from "@homarr/docker"; import { DockerSingleton } from "@homarr/docker"; +import { createLogger } from "@homarr/core/infrastructure/logs"; import { createSubPubChannel } from "@homarr/redis"; import { dockerContainersRequestHandler, @@ -23,6 +24,7 @@ const dockerContainerTargetSchema = z.object({ id: z.string().min(1), }); const dockerContainerTargetsSchema = z.array(dockerContainerTargetSchema).min(1).max(100); +const logger = createLogger({ module: "dockerRouter" }); const resetDockerInventory = () => { DockerSingleton.reset(); @@ -43,7 +45,9 @@ const publishDockerInventoryRefreshAsync = async () => { try { await dockerInventoryRefreshChannel.publishAsync({ requestedAt: Date.now() }); } catch (error) { - if (!isRedisDisabled()) throw error; + if (!isRedisDisabled()) { + logger.warn(new Error("Failed to publish Docker inventory refresh", { cause: error })); + } } };