File size: 2,015 Bytes
0e13326
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { z } from 'zod'

export const BandSchema = z.enum(['elite', 'high', 'medium', 'low'])

export const MetricsInputSchema = z.object({
  deploymentFrequency: z.enum(['multiple_per_day', 'daily', 'weekly', 'monthly', 'less_than_monthly']),
  leadTimeDays: z.number().nonnegative(),
  changeFailureRate: z.number().min(0).max(100),
  mttrHours: z.number().nonnegative(),
  pipelineDurationMinutes: z.number().nonnegative(),
  prReviewTimeHours: z.number().nonnegative(),
  engineerCount: z.number().int().positive(),
  serviceCount: z.number().int().positive(),
})

export const TeamContextSchema = z.object({
  architecture: z.enum(['monolith', 'microservices', 'hybrid']),
  releaseStrategy: z.enum(['continuous', 'scheduled', 'mixed']),
  hasComplianceConstraints: z.boolean(),
})

export const InterpretationReportSchema = z.object({
  deliveryProfile: z.string().min(1),
  benchmarkAlignment: z.array(z.object({
    metric: z.string().min(1),
    yourValue: z.string().min(1),
    typicalRange: z.string().min(1),
    band: BandSchema,
  })),
  likelyBottlenecks: z.array(z.string().min(1)),
  improvements: z.array(z.object({
    priority: z.number().int().positive(),
    action: z.string().min(1),
    rationale: z.string().min(1),
  })),
  leadershipSummary: z.object({
    deliverySpeed: z.enum(['strong', 'moderate', 'weak']),
    reliability: z.enum(['strong', 'moderate', 'weak']),
    focusArea: z.string().min(1),
  }),
})

export const BenchmarkTierSchema = z.object({
  elite: z.string(),
  high: z.string(),
  medium: z.string(),
  low: z.string(),
})

export const BenchmarkPatternSchema = z.object({
  id: z.string(),
  signature: z.string(),
  interpretation: z.string(),
  improvements: z.array(z.string()),
})

export const BenchmarkDataSchema = z.object({
  deploymentFrequency: BenchmarkTierSchema,
  leadTime: BenchmarkTierSchema,
  changeFailureRate: BenchmarkTierSchema,
  mttr: BenchmarkTierSchema,
  patterns: z.array(BenchmarkPatternSchema),
  keyInsights: z.array(z.string()),
})