From 96b47d16a3e1e2fd1a6227133b4e2bceeba73665 Mon Sep 17 00:00:00 2001 From: robbond Date: Wed, 9 Sep 2026 20:00:52 +0100 Subject: [PATCH] fix(confidence-engine): decouple app health from provider --- app/api/health/route.js | 32 +------------------------------- tests/auth-boundary.test.js | 15 +++++---------- 2 files changed, 6 insertions(+), 41 deletions(-) diff --git a/app/api/health/route.js b/app/api/health/route.js index 84b0190..4273373 100644 --- a/app/api/health/route.js +++ b/app/api/health/route.js @@ -1,33 +1,3 @@ -import { getConfig } from "@/lib/config"; - export async function GET() { - try { - const result = getConfig(); - - if (!result.ok) { - return Response.json({ healthy: false }, { status: 500 }); - } - - const { OLLAMA_BASE_URL, OLLAMA_MODEL } = result.config; - - // Test reachability with a short timeout - let reachable = false; - - try { - const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), 3000); - - const res = await fetch(`${OLLAMA_BASE_URL}/api/tags`, { - signal: controller.signal - }); - clearTimeout(timeout); - reachable = res.ok; - } catch { - reachable = false; - } - - return Response.json({ healthy: reachable }, { status: reachable ? 200 : 503 }); - } catch { - return Response.json({ healthy: false }, { status: 500 }); - } + return Response.json({ healthy: true }, { status: 200 }); } diff --git a/tests/auth-boundary.test.js b/tests/auth-boundary.test.js index 27fa9ee..20f189d 100644 --- a/tests/auth-boundary.test.js +++ b/tests/auth-boundary.test.js @@ -103,23 +103,18 @@ describe("authenticated product boundary", () => { const response = await GET(); expect(mockGetAuthenticatedUser).not.toHaveBeenCalled(); - const body = await response.json(); - expect(body).toHaveProperty("healthy"); - // Must not expose private config details in the public response - expect(JSON.stringify(body)).not.toContain("baseUrl"); - expect(JSON.stringify(body)).not.toContain("model"); - expect(JSON.stringify(body)).not.toContain("ollama"); + expect(response.status).toBe(200); + await expect(response.json()).resolves.toEqual({ healthy: true }); }); - it("reports unhealthy generic state when config is missing", async () => { + it("remains healthy when reasoning configuration is missing", async () => { mockGetConfig.mockReturnValue({ ok: false }); const { GET } = await import("@/app/api/health/route.js"); const response = await GET(); - expect(response.status).toBe(500); - const body = await response.json(); - expect(body).toEqual({ healthy: false }); + expect(response.status).toBe(200); + await expect(response.json()).resolves.toEqual({ healthy: true }); }); it("does not convert /api/health to 401 via middleware when unauthenticated", async () => {