Improve audit pipeline and outreach review
This commit is contained in:
@@ -20,6 +20,67 @@ export const v3FindingItemSchema = z.object({
|
||||
|
||||
export const findingItemSchema = legacyFindingItemSchema;
|
||||
|
||||
export const auditFindingEvidenceRefSchema = z.object({
|
||||
id: nonEmptyTextSchema,
|
||||
type: z.enum([
|
||||
"crawl_page",
|
||||
"technical_check",
|
||||
"screenshot",
|
||||
"pagespeed",
|
||||
"jina_excerpt",
|
||||
"generation_stage",
|
||||
]),
|
||||
label: nonEmptyTextSchema,
|
||||
sourceUrl: z.string().trim(),
|
||||
});
|
||||
|
||||
export const auditSpecialistFindingSchema = z
|
||||
.object({
|
||||
skillId: nonEmptyTextSchema,
|
||||
claim: nonEmptyTextSchema,
|
||||
recommendation: nonEmptyTextSchema,
|
||||
customerBenefit: nonEmptyTextSchema,
|
||||
severity: z.union([z.literal(1), z.literal(2), z.literal(3)]),
|
||||
confidence: z.number().min(0).max(1),
|
||||
evidenceRefs: z.array(auditFindingEvidenceRefSchema).min(1),
|
||||
applies: z.boolean(),
|
||||
unknowns: z.array(z.string()),
|
||||
})
|
||||
.superRefine((finding, ctx) => {
|
||||
const combined = [
|
||||
finding.claim,
|
||||
finding.recommendation,
|
||||
finding.customerBenefit,
|
||||
].join(" ");
|
||||
if (/\bunbekannt\b|\bunknown\b/i.test(combined)) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
message: "unknown-only findings are not valid audit claims",
|
||||
path: ["claim"],
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export const auditSpecialistResultSchema = z.object({
|
||||
status: z.enum(["success", "partial", "skipped", "failed"]),
|
||||
findings: z.array(auditSpecialistFindingSchema),
|
||||
notes: z.array(z.string()),
|
||||
});
|
||||
|
||||
export const auditRejectedFindingSchema = z.object({
|
||||
findingId: nonEmptyTextSchema,
|
||||
skillId: nonEmptyTextSchema,
|
||||
claim: nonEmptyTextSchema,
|
||||
rejectionReason: nonEmptyTextSchema,
|
||||
});
|
||||
|
||||
export const auditEvidenceVerificationSchema = z.object({
|
||||
verifiedFindingIds: z.array(nonEmptyTextSchema),
|
||||
rejectedFindings: z.array(auditRejectedFindingSchema),
|
||||
contradictions: z.array(z.string()),
|
||||
notes: z.array(z.string()),
|
||||
});
|
||||
|
||||
export const internalFindingsSchema = z.object({
|
||||
findings: z.array(findingItemSchema),
|
||||
summary: z.string(),
|
||||
@@ -80,6 +141,10 @@ export const qualityReviewSchema = z.object({
|
||||
|
||||
export type FindingItem = z.infer<typeof findingItemSchema>;
|
||||
export type V3FindingItem = z.infer<typeof v3FindingItemSchema>;
|
||||
export type AuditFindingEvidenceRef = z.infer<typeof auditFindingEvidenceRefSchema>;
|
||||
export type AuditSpecialistFinding = z.infer<typeof auditSpecialistFindingSchema>;
|
||||
export type AuditSpecialistResult = z.infer<typeof auditSpecialistResultSchema>;
|
||||
export type AuditEvidenceVerification = z.infer<typeof auditEvidenceVerificationSchema>;
|
||||
export type InternalFindings = z.infer<typeof internalFindingsSchema>;
|
||||
export type AuditClassification = z.infer<typeof auditClassificationSchema>;
|
||||
export type AuditGenerationResult = z.infer<typeof auditGenerationResultSchema>;
|
||||
|
||||
Reference in New Issue
Block a user