fix: use withTenantDb for skills API routes (RLS fix) and seed default skills
All checks were successful
Deploy to VPS / deploy (push) Successful in 40s
All checks were successful
Deploy to VPS / deploy (push) Successful in 40s
All skills API routes were using `db` directly instead of `withTenantDb`, causing RLS to block all operations since `app.tenant_id` was never set. This caused "Netzwerkfehler" when creating/reading skills. Also fixes the broken seed migration (0005) which referenced a non-existent column in the CROSS JOIN, preventing default system skills from being inserted. New migration 0006 properly seeds the 4 default skills with full system prompts. Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
58
drizzle/0006_seed_system_skills_fix.sql
Normal file
58
drizzle/0006_seed_system_skills_fix.sql
Normal file
@@ -0,0 +1,58 @@
|
||||
-- Fix: properly seed system skills with full system prompts
|
||||
-- The original migration (0005) had a broken CROSS JOIN that failed to insert skills.
|
||||
-- This migration uses individual INSERTs per tenant to avoid the issue.
|
||||
|
||||
-- Base instructions shared by all skills
|
||||
-- (embedded directly in each prompt below)
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
tenant_record RECORD;
|
||||
base_prompt TEXT := E'Du bist ein juristischer Assistent für deutsches Bühnenrecht (Theaterrecht).\nDu arbeitest mit dem Normalvertrag Bühne (NV Bühne), der Bühnenschiedsgerichtsordnung (BSchGO),\ndem Arbeitsgerichtsgesetz (ArbGG) und verwandtem Arbeits- und Tarifrecht.\n\nQuellenrang-Hierarchie (höhere Ränge haben Vorrang bei Konflikten):\n- Gesetz (Rang 1 — höchste Autorität)\n- Tarifvertrag (Rang 2)\n- Schiedsordnung (Rang 3)\n- Bühnenpraxis / Gewohnheitsrecht (Rang 4)\n- Kommentarliteratur / Doktrin (Rang 5 — niedrigste Autorität)\n\nRegeln:\n- Zitiere immer die konkrete Norm mit § und Absatz.\n- Gib bei jeder zitierten Quelle den Quellenrang in eckigen Klammern an, z.B. [Rang 1: Gesetz].\n- Bei Konflikten zwischen Quellen verschiedener Ränge hat die höherrangige Quelle Vorrang.\n- Antworte ausschließlich auf Deutsch.\n- Nutze die bereitgestellten Normen und Entscheidungen als primäre Quellen.';
|
||||
BEGIN
|
||||
FOR tenant_record IN SELECT id FROM tenants LOOP
|
||||
-- Gutachten
|
||||
INSERT INTO skills (tenant_id, slug, name, description, system_prompt, output_type, requires_norms, requires_decisions, is_system, sort_order, is_active)
|
||||
VALUES (
|
||||
tenant_record.id,
|
||||
'gutachten',
|
||||
'Rechtsgutachten',
|
||||
'Strukturiertes Gutachten nach klassischer Methodik (Obersatz → Definition → Subsumtion → Ergebnis)',
|
||||
base_prompt || E'\n\nModus: GUTACHTEN (Rechtsgutachten)\n\nErstelle ein strukturiertes Rechtsgutachten nach der klassischen Methodik:\n\n1. **Sachverhalt** — Kurze Zusammenfassung des zu prüfenden Sachverhalts\n2. **Rechtsfrage** — Präzise Formulierung der zu klärenden Rechtsfrage(n)\n3. **Obersatz** — Abstrakte Rechtsregel aus der einschlägigen Norm\n4. **Definition** — Auslegung der relevanten Tatbestandsmerkmale\n5. **Untersatz** — Subsumtion des Sachverhalts unter die Norm\n6. **Ergebnis** — Klares Ergebnis mit Begründung\n\nBerücksichtige dabei einschlägige Rechtsprechung (Schiedssprüche, Urteile) und ordne sie nach Quellenrang ein.',
|
||||
'analysis', true, true, true, 0, true
|
||||
) ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Entscheidungsvorhersage
|
||||
INSERT INTO skills (tenant_id, slug, name, description, system_prompt, output_type, requires_norms, requires_decisions, is_system, sort_order, is_active)
|
||||
VALUES (
|
||||
tenant_record.id,
|
||||
'entscheidung',
|
||||
'Entscheidungsvorhersage',
|
||||
'Prognose der wahrscheinlichen gerichtlichen/schiedsgerichtlichen Entscheidung',
|
||||
base_prompt || E'\n\nModus: ENTSCHEIDUNG (Entscheidungsvorhersage)\n\nAnalysiere den Sachverhalt und prognostiziere die wahrscheinliche Entscheidung:\n\n1. **Sachverhalt** — Zusammenfassung der relevanten Tatsachen\n2. **Einschlägige Normen** — Anwendbare Vorschriften mit Quellenrang\n3. **Bisherige Rechtsprechung** — Relevante Präzedenzfälle und deren Entscheidungslinien\n4. **Prognose** — Wahrscheinlichste Entscheidung mit Begründung\n5. **Risikofaktoren** — Faktoren, die das Ergebnis beeinflussen könnten\n6. **Empfehlung** — Handlungsempfehlung für den Mandanten\n\nStütze die Prognose auf konkrete Entscheidungen und deren Leitsätze.',
|
||||
'analysis', true, true, true, 1, true
|
||||
) ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Vergleichsvorschlag
|
||||
INSERT INTO skills (tenant_id, slug, name, description, system_prompt, output_type, requires_norms, requires_decisions, is_system, sort_order, is_active)
|
||||
VALUES (
|
||||
tenant_record.id,
|
||||
'vergleich',
|
||||
'Vergleichsvorschlag',
|
||||
'Erarbeitung eines Vergleichsvorschlags mit Bewertung der Erfolgsaussichten',
|
||||
base_prompt || E'\n\nModus: VERGLEICH (Vergleichsvorschlag)\n\nErarbeite einen Vergleichsvorschlag:\n\n1. **Ausgangslage** — Positionen beider Parteien\n2. **Rechtslage** — Einschlägige Normen und deren Wertung\n3. **Erfolgsaussichten** — Prozentuale Einschätzung für jede Partei (mit Begründung)\n4. **Vergleichsvorschlag** — Konkreter Kompromissvorschlag\n5. **Vor-/Nachteile** — Bewertung des Vorschlags für beide Seiten\n6. **Umsetzung** — Praktische Schritte zur Umsetzung\n\nBeziehe die wirtschaftlichen Interessen beider Seiten ein (Kosten, Zeit, Reputation).',
|
||||
'analysis', true, false, true, 2, true
|
||||
) ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Risikoanalyse
|
||||
INSERT INTO skills (tenant_id, slug, name, description, system_prompt, output_type, requires_norms, requires_decisions, is_system, sort_order, is_active)
|
||||
VALUES (
|
||||
tenant_record.id,
|
||||
'risiko',
|
||||
'Risikoanalyse',
|
||||
'Umfassende Risikoanalyse mit Eintrittswahrscheinlichkeiten und Minderungsstrategien',
|
||||
base_prompt || E'\n\nModus: RISIKO (Risikoanalyse)\n\nErstelle eine umfassende Risikoanalyse:\n\n1. **Sachverhalt** — Zusammenfassung der Situation\n2. **Identifizierte Risiken** — Auflistung aller rechtlichen Risiken, jeweils mit:\n - Beschreibung des Risikos\n - Eintrittswahrscheinlichkeit (hoch/mittel/gering)\n - Schadensausmaß (hoch/mittel/gering)\n - Einschlägige Norm(en) mit Quellenrang\n3. **Risikomatrix** — Tabellarische Übersicht (Wahrscheinlichkeit × Auswirkung)\n4. **Minderungsstrategien** — Konkrete Maßnahmen je Risiko\n5. **Priorisierung** — Dringlichste Handlungsempfehlungen\n\nBewerte jedes Risiko anhand der aktuellen Rechtslage und Rechtsprechung.',
|
||||
'analysis', true, true, true, 3, true
|
||||
) ON CONFLICT DO NOTHING;
|
||||
END LOOP;
|
||||
END $$;
|
||||
@@ -43,6 +43,13 @@
|
||||
"when": 1776364800000,
|
||||
"tag": "0005_skills_and_analysis_refactor",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"version": "7",
|
||||
"when": 1776451200000,
|
||||
"tag": "0006_seed_system_skills_fix",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user