L9 Lotse – KI-Assistent: Gate-Fixes (EXEMPT-Auth-Prüfung, Sprachnotiz ohne Transkriptionsanbieter nicht einreihen)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 17:25:50 +02:00
co-authored by Claude Opus 5
parent f42ead3ced
commit 5f6e70fdf3
2 changed files with 6 additions and 1 deletions
+4
View File
@@ -3,6 +3,8 @@
import { revalidatePath } from "next/cache";
import { redirect } from "next/navigation";
import { requireApiContext } from "@/server/api/context";
import { requireSession } from "@/server/auth";
import { requirePermission } from "@/server/rbac";
import { updateLotseSettings } from "@/server/services/lotse/settings";
/**
@@ -12,8 +14,10 @@ import { updateLotseSettings } from "@/server/services/lotse/settings";
* Registered as EXEMPT in scripts/check-module-guards.ts.
*/
export async function saveLotseSettings(fd: FormData): Promise<void> {
const session = await requireSession();
let target = "/settings/lotse?saved=1";
try {
requirePermission(session, "tenant:manage"); // fast JWT check; requireApiContext re-checks against the DB
const ctx = await requireApiContext(null, "tenant:manage");
await updateLotseSettings(ctx, {
enabled: fd.get("enabled") === "on",
+2 -1
View File
@@ -2,6 +2,7 @@ import { ServiceError, type ServiceCtx } from "@/server/services/context";
import { dispatchJob } from "@/server/jobs/dispatch";
import { JOB_QUEUES } from "@/server/jobs/queues";
import { PROCESSORS } from "@/server/jobs/processors";
import { transcriptionConfig } from "@/server/ai/transcription/openai-compatible";
import type { ParsedOpPayload } from "@/lib/sync/ops";
import { audit, isUniqueViolation, opTime, requireFieldOrder } from "./common";
@@ -57,7 +58,7 @@ export async function attachVoiceNote(ctx: ServiceCtx, input: ParsedOpPayload<"v
await audit(ctx, "create", "voice_note", voice.id, null, { workOrderId: wo.id, documentId: doc.id, durationSeconds: voice.durationSeconds });
let status = voice.transcriptionStatus;
if (!PROCESSORS[JOB_QUEUES.transcription]) {
if (!PROCESSORS[JOB_QUEUES.transcription] || !transcriptionConfig().configured) { // L9: no provider → never queue audio
status = "disabled";
} else {
try {