@@ -281,20 +281,91 @@ <h4>All three agree</h4>
281281 </ div >
282282 </ div >
283283
284- < h2 > Running Drift Tests </ h2 >
284+ < h2 > What Drift Looks Like </ h2 >
285285
286- < div class ="code-block ">
287- < div class ="code-block-header "> Run drift tests < span class ="lang-tag "> shell</ span > </ div >
288- < pre > < code > < span class ="cm "> # Set API keys for providers you want to test</ span >
289- < span class ="kw "> export</ span > OPENAI_API_KEY=sk-...
290- < span class ="kw "> export</ span > ANTHROPIC_API_KEY=sk-ant-...
291- < span class ="kw "> export</ span > GOOGLE_API_KEY=AI...
292-
293- < span class ="cm "> # Run all drift tests</ span >
294- pnpm test:drift
286+ < style >
287+ .drift-report {
288+ background : var (--bg-deep );
289+ border : 1px solid var (--border );
290+ border-radius : 8px ;
291+ padding : 1.25rem 1.5rem ;
292+ margin-top : 2rem ;
293+ font-family : var (--font-mono );
294+ font-size : 0.75rem ;
295+ line-height : 1.8 ;
296+ color : var (--text-secondary );
297+ overflow-x : auto;
298+ }
299+ .drift-report .report-header {
300+ color : var (--text-primary );
301+ font-weight : 600 ;
302+ margin-bottom : 0.75rem ;
303+ font-size : 0.8rem ;
304+ }
305+ .drift-report .severity-critical {
306+ color : var (--error );
307+ }
308+ .drift-report .severity-warning {
309+ color : var (--warning );
310+ }
311+ .drift-report .severity-ok {
312+ color : var (--accent );
313+ }
314+ .drift-report .field-path {
315+ color : var (--blue );
316+ }
317+ .drift-report .drift-label {
318+ color : var (--text-primary );
319+ }
320+ .drift-report .report-summary {
321+ color : var (--text-dim );
322+ }
323+ .drift-report .field-label {
324+ color : var (--text-dim );
325+ }
326+ .drift-report .divider {
327+ border-top : 1px solid var (--border );
328+ margin : 0.6rem 0 ;
329+ }
330+ </ style >
295331
296- < span class ="cm "> # Run for a specific provider</ span >
297- pnpm test:drift -- --grep "OpenAI Chat"</ code > </ pre >
332+ < div class ="drift-report ">
333+ < div class ="report-header "> $ pnpm test:drift</ div >
334+ < span class ="severity-critical "> [critical]</ span >
335+ < span class ="drift-label "> AIMOCK DRIFT</ span > — field in SDK + real API but missing
336+ from mock< br />
337+ < span class ="field-label "> Path:</ span > < span class ="field-path "
338+ > choices[].message.refusal</ span
339+ > < br />
340+ < span class ="field-label "> SDK:</ span > null
341+ < span class ="field-label "> Real:</ span > null
342+ < span class ="field-label "> Mock:</ span > <absent>< br />
343+ < div class ="divider "> </ div >
344+ < span class ="severity-critical "> [critical]</ span >
345+ < span class ="drift-label "> TYPE MISMATCH</ span > — real API and mock disagree on
346+ type< br />
347+ < span class ="field-label "> Path:</ span > < span class ="field-path "
348+ > content[].input</ span
349+ > < br />
350+ < span class ="field-label "> SDK:</ span > object
351+ < span class ="field-label "> Real:</ span > object
352+ < span class ="field-label "> Mock:</ span > string< br />
353+ < div class ="divider "> </ div >
354+ < span class ="severity-warning "> [warning]</ span >
355+ < span class ="drift-label "> PROVIDER ADDED FIELD</ span > — in real API but not in SDK
356+ or mock< br />
357+ < span class ="field-label "> Path:</ span > < span class ="field-path "
358+ > choices[].message.annotations</ span
359+ > < br />
360+ < span class ="field-label "> SDK:</ span > <absent>
361+ < span class ="field-label "> Real:</ span > array
362+ < span class ="field-label "> Mock:</ span > <absent>< br />
363+ < div class ="divider "> </ div >
364+ < span class ="severity-ok " style ="font-size: 0.85rem "> ✓</ span >
365+ < span class ="report-summary "
366+ > 2 critical (test fails) · 1 warning (logged) · detected before any user
367+ reported it</ span
368+ >
298369 </ div >
299370
300371 < h2 > Test Files</ h2 >
0 commit comments