Merge branch 'v143/labs' into release/v1.43.0

This commit is contained in:
Marc-André Bombeck committed 2026-10-15 23:06:51 +02:00
commit 74fa4e10b6
96 files changed
+6992 -626

No files matched your search

@@ -100,7 +100,12 @@ async function confirmDocument(
}
try {
const ref = await commitApprovedFact(user.id, fact);
// v1.43 (D1223) — an OBSERVATION may name the marker the person chose
// on the review screen; the label is then remembered as its alias.
const ref = await commitApprovedFact(user.id, fact, {
biomarkerId: decision.biomarkerId,
rememberAlias: decision.rememberAlias,
});
await prisma.extractedFact.update({
where: { id: fact.id },
data: {
@@ -51,6 +51,7 @@ vi.mock("@/lib/documents/store", () => ({
encryptFactData: vi.fn(() => new Uint8Array([1])),
encryptFactProvenance: vi.fn(() => new Uint8Array([2])),
serialiseDocumentDetail: vi.fn(() => ({ id: "doc-1", facts: [] })),
markerIndexForFacts: vi.fn(async () => null),
}));
vi.mock("@/lib/documents/content-index", () => ({
loadDocumentChatText: vi.fn(),
@@ -55,7 +55,10 @@ import {
} from "@/lib/ai/coach/budget";
import type { ProviderChainType } from "@/lib/ai/provider-chain";
import { prisma } from "@/lib/db";
import { serialiseDocumentDetail } from "@/lib/documents/store";
import {
markerIndexForFacts,
serialiseDocumentDetail,
} from "@/lib/documents/store";
import {
requireDocumentTextProvider,
requireDocumentVisionProvider,
@@ -241,7 +244,19 @@ async function runNow(
origin: { ipAddress: getClientIp(request), worker: false },
});
if (!outcome.ok) return outcomeResponse(outcome);
return apiSuccess(serialiseDocumentDetail(outcome.data, outcome.data.facts));
return apiSuccess(
serialiseDocumentDetail(
outcome.data,
outcome.data.facts,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
await markerIndexForFacts(userId, outcome.data.facts),
),
);
}
/** TEXT mode — structure in-browser-OCR'd text against the stored row. */
@@ -18,7 +18,11 @@ import {
safeJson,
} from "@/lib/api-response";
import { prisma } from "@/lib/db";
import { encryptFactData, serialiseFact } from "@/lib/documents/store";
import {
encryptFactData,
markerIndexForFacts,
serialiseFact,
} from "@/lib/documents/store";
import { annotate } from "@/lib/logging/context";
import { requireModuleEnabled } from "@/lib/modules/gate";
import {
@@ -125,6 +129,8 @@ export const PATCH = apiHandler(
meta: { documentId: id, factId: fact.id, factType: fact.factType },
});
return apiSuccess(serialiseFact(updated));
return apiSuccess(
serialiseFact(updated, await markerIndexForFacts(user.id, [updated])),
);
},
);
+6 -1
View File
@@ -32,7 +32,10 @@ import {
replaceVaccinationLinks,
} from "@/lib/documents/links";
import { actingDomainVisibility } from "@/lib/sharing/acting-domains";
import { serialiseDocumentDetail } from "@/lib/documents/store";
import {
markerIndexForFacts,
serialiseDocumentDetail,
} from "@/lib/documents/store";
import { annotate } from "@/lib/logging/context";
import { requireModuleEnabled } from "@/lib/modules/gate";
import { checkRateLimit, rateLimitHeaders } from "@/lib/rate-limit";
@@ -138,6 +141,8 @@ export const GET = apiHandler(
thumbnail !== null,
visitLinks.get(document.id) ?? [],
doseLinks === null ? null : (doseLinks.get(document.id) ?? []),
// v1.43 — the marker each pending lab value resolves to, or choices.
await markerIndexForFacts(user.id, document.facts),
),
);
},