Refactor pipeline task handling and UI flows

This commit is contained in:
2026-06-13 21:09:49 +02:00
parent 21c7e4c9a4
commit ff4c572157
24 changed files with 1346 additions and 236 deletions

View File

@@ -139,16 +139,22 @@ test("structured output schemas avoid optional top-level fields for OpenAI stric
() =>
qualityReviewSchema.parse({
isValid: true,
severity: "ok",
issues: [],
suggestions: [],
rewriteRequired: false,
revisedCopy: null,
}),
/notes|invalid|required/i,
);
assert.equal(
qualityReviewSchema.parse({
isValid: true,
severity: "ok",
issues: [],
suggestions: [],
rewriteRequired: false,
revisedCopy: null,
notes: null,
}).notes,
null,
@@ -338,8 +344,11 @@ test("outreach schemas parse German customer-facing payloads", () => {
});
const qualityParsed = qualityReviewSchema.parse({
isValid: true,
severity: "ok",
issues: [],
suggestions: ["Mehr Kundennutzen konkret beschreiben."],
rewriteRequired: false,
revisedCopy: null,
notes: null,
});
@@ -350,6 +359,46 @@ test("outreach schemas parse German customer-facing payloads", () => {
assert.equal(Array.isArray(qualityParsed.suggestions), true);
});
test("quality review schema accepts one-shot revised copy payloads", () => {
const parsed: QualityReview = qualityReviewSchema.parse({
isValid: false,
severity: "warning",
issues: ["Betreff klingt noch etwas generisch."],
suggestions: ["Betreff konkreter machen."],
rewriteRequired: true,
revisedCopy: {
publicSummary: "Mir ist aufgefallen, dass die mobile Seite etwas traege wirkt.",
publicBody:
"Mein Vorschlag waere, zuerst die sichtbaren Ladebremsen der Startseite zu pruefen.",
emailSubject: "Kurzer Hinweis zur mobilen Seite",
emailBody:
"Guten Tag, mir ist beim Blick auf Ihre Website aufgefallen, dass die mobile Seite etwas traege wirkt.",
phoneScript: {
openingLine: "Guten Tag, hier ist Matthias Meister.",
callScript: [
"Mir ist bei Ihrer mobilen Website ein konkreter Ladezeitpunkt aufgefallen.",
"Mein Vorschlag waere, diesen Punkt kurz zu priorisieren.",
],
closeLine: "Soll ich Ihnen den Hinweis kurz per E-Mail senden?",
},
followUpDraft: {
message:
"Ich wollte kurz nachfassen, ob der Hinweis zur mobilen Seite fuer Sie relevant ist.",
followInDays: 7,
goals: ["kurze Rueckmeldung", "Interesse klaeren"],
},
},
notes: ["Ein Rewrite ist sinnvoll."],
});
assert.equal(parsed.rewriteRequired, true);
assert.equal(parsed.revisedCopy?.emailSubject, "Kurzer Hinweis zur mobilen Seite");
assert.deepEqual(parsed.revisedCopy?.followUpDraft.goals, [
"kurze Rueckmeldung",
"Interesse klaeren",
]);
});
test("schema-inferred types are exported for Convex action wiring", () => {
const typedFindings: InternalFindings = {
findings: [
@@ -393,8 +442,11 @@ test("schema-inferred types are exported for Convex action wiring", () => {
const typedQuality: QualityReview = {
isValid: true,
severity: "ok",
issues: [],
suggestions: [],
rewriteRequired: false,
revisedCopy: null,
notes: null,
};