返回 CodeWhale
scenarios.json
1 {
2 "schemaVersion": 1,
3 "context": {
4 "freshness": "Live",
5 "turnId": "fixture-turn",
6 "status": "completed",
7 "nowMs": 1000,
8 "failedAtMs": 0
9 },
10 "scenarios": [
11 {
12 "id": "first-output",
13 "label": "First output pending",
14 "steps": [
15 {
16 "presence": "Thinking",
17 "expected": "think"
18 }
19 ]
20 },
21 {
22 "id": "reasoning",
23 "label": "Reasoning stream",
24 "steps": [
25 {
26 "presence": "Working",
27 "activity": {
28 "kind": "thinking",
29 "observed": true
30 },
31 "expected": "think"
32 }
33 ]
34 },
35 {
36 "id": "tool-gap",
37 "label": "Between tool steps",
38 "steps": [
39 {
40 "presence": "Working",
41 "activity": {
42 "kind": "reading",
43 "observed": true
44 },
45 "expected": "read"
46 },
47 {
48 "after": 24,
49 "presence": "Working",
50 "activity": {
51 "kind": "unknown",
52 "observed": false
53 },
54 "expected": "busy"
55 }
56 ]
57 },
58 {
59 "id": "desktop-browser",
60 "label": "Desktop → browser",
61 "steps": [
62 {
63 "presence": "Working",
64 "activity": {
65 "kind": "computer",
66 "observed": true
67 },
68 "expected": "computer"
69 },
70 {
71 "after": 45,
72 "presence": "Working",
73 "activity": {
74 "kind": "browsing",
75 "observed": true
76 },
77 "expected": "browse"
78 }
79 ]
80 },
81 {
82 "id": "service-call",
83 "label": "Connected app request",
84 "steps": [
85 {
86 "presence": "Working",
87 "activity": {
88 "kind": "network",
89 "observed": true
90 },
91 "expected": "connect"
92 }
93 ]
94 },
95 {
96 "id": "opaque-wrapper",
97 "label": "Opaque tool wrapper",
98 "steps": [
99 {
100 "presence": "Working",
101 "activity": {
102 "kind": "tool",
103 "observed": true
104 },
105 "expected": "busy"
106 }
107 ]
108 },
109 {
110 "id": "future-tool",
111 "label": "Unknown future tool",
112 "steps": [
113 {
114 "presence": "Working",
115 "activity": {
116 "kind": "future-kind",
117 "observed": true
118 },
119 "expected": "busy"
120 }
121 ]
122 },
123 {
124 "id": "unobserved",
125 "label": "No observed activity",
126 "steps": [
127 {
128 "presence": "Working",
129 "activity": {
130 "kind": "editing",
131 "observed": false
132 },
133 "expected": "busy"
134 }
135 ]
136 },
137 {
138 "id": "stale-activity",
139 "label": "Stale activity",
140 "steps": [
141 {
142 "presence": "Working",
143 "activity": {
144 "kind": "computer",
145 "observed": true
146 },
147 "context": {
148 "freshness": "Stale"
149 },
150 "expected": "busy"
151 }
152 ]
153 },
154 {
155 "id": "missing-freshness",
156 "label": "Missing freshness",
157 "steps": [
158 {
159 "presence": "Working",
160 "activity": {
161 "kind": "reading",
162 "observed": true
163 },
164 "context": {
165 "freshness": null
166 },
167 "expected": "busy"
168 }
169 ]
170 },
171 {
172 "id": "passive-wait",
173 "label": "Tool waiting, no request for you",
174 "steps": [
175 {
176 "presence": "Working",
177 "activity": {
178 "kind": "waiting",
179 "observed": true
180 },
181 "expected": "busy"
182 }
183 ]
184 },
185 {
186 "id": "error-cue",
187 "label": "Tool error, turn still running",
188 "steps": [
189 {
190 "presence": "Working",
191 "activity": {
192 "kind": "error",
193 "observed": true
194 },
195 "expected": "busy"
196 }
197 ]
198 },
199 {
200 "id": "approval",
201 "label": "Approval needed → resumed work",
202 "steps": [
203 {
204 "presence": "Working",
205 "activity": {
206 "kind": "computer",
207 "observed": true
208 },
209 "expected": "computer"
210 },
211 {
212 "after": 20,
213 "presence": "NeedsYou",
214 "expected": "needs"
215 },
216 {
217 "after": 50,
218 "presence": "Working",
219 "activity": {
220 "kind": "computer",
221 "observed": true
222 },
223 "expected": "computer"
224 }
225 ]
226 },
227 {
228 "id": "user-input",
229 "label": "Question or sign-in needs you",
230 "steps": [
231 {
232 "presence": "NeedsYou",
233 "expected": "needs"
234 }
235 ]
236 },
237 {
238 "id": "permission-denied",
239 "label": "Permission declined, turn canceled",
240 "steps": [
241 {
242 "presence": "NeedsYou",
243 "expected": "needs"
244 },
245 {
246 "after": 30,
247 "presence": "Idle",
248 "context": {
249 "status": "canceled"
250 },
251 "expected": "rest"
252 }
253 ]
254 },
255 {
256 "id": "interrupted",
257 "label": "User interrupts work",
258 "steps": [
259 {
260 "presence": "Working",
261 "activity": {
262 "kind": "executing",
263 "observed": true
264 },
265 "expected": "run"
266 },
267 {
268 "after": 30,
269 "presence": "Idle",
270 "context": {
271 "status": "interrupted"
272 },
273 "expected": "rest"
274 }
275 ]
276 },
277 {
278 "id": "cancel-not-failure",
279 "label": "Cancellation is not Stuck",
280 "steps": [
281 {
282 "presence": "Stuck",
283 "context": {
284 "status": "canceled"
285 },
286 "expected": "rest"
287 }
288 ]
289 },
290 {
291 "id": "failed-turn",
292 "label": "Genuine failed turn · proposed",
293 "steps": [
294 {
295 "presence": "Stuck",
296 "context": {
297 "status": "failed",
298 "nowMs": 500,
299 "failedAtMs": 0
300 },
301 "expected": "hmm"
302 }
303 ]
304 },
305 {
306 "id": "failure-expires",
307 "label": "Failure cue expires",
308 "steps": [
309 {
310 "presence": "Stuck",
311 "context": {
312 "status": "failed",
313 "nowMs": 3000,
314 "failedAtMs": 0
315 },
316 "expected": "rest"
317 }
318 ]
319 },
320 {
321 "id": "retry",
322 "label": "Failed tool → retry",
323 "steps": [
324 {
325 "presence": "Working",
326 "activity": {
327 "kind": "executing",
328 "observed": true
329 },
330 "expected": "run"
331 },
332 {
333 "after": 40,
334 "event": {
335 "type": "failed",
336 "kind": "executing",
337 "status": "failed"
338 },
339 "expected": "run"
340 },
341 {
342 "after": 12,
343 "presence": "Working",
344 "activity": {
345 "kind": "executing",
346 "observed": true,
347 "active": [
348 {
349 "kind": "executing",
350 "sinceMs": 2000
351 }
352 ]
353 },
354 "expected": "run"
355 }
356 ]
357 },
358 {
359 "id": "completion",
360 "label": "Completed turn",
361 "steps": [
362 {
363 "presence": "Working",
364 "activity": {
365 "kind": "responding",
366 "observed": true
367 },
368 "expected": "talk"
369 },
370 {
371 "after": 35,
372 "presence": "Done",
373 "expected": "done"
374 },
375 {
376 "after": 80,
377 "presence": "Idle",
378 "expected": "rest"
379 }
380 ]
381 },
382 {
383 "id": "completion-once",
384 "label": "Listening interrupts Done",
385 "steps": [
386 {
387 "presence": "Done",
388 "expected": "done"
389 },
390 {
391 "after": 30,
392 "presence": "Listening",
393 "expected": "listen"
394 },
395 {
396 "after": 20,
397 "presence": "Done",
398 "expected": "done"
399 }
400 ],
401 "spouts": 1
402 },
403 {
404 "id": "completion-no-id",
405 "label": "No completion ID, no flourish",
406 "steps": [
407 {
408 "presence": "Done",
409 "context": {
410 "turnId": null
411 },
412 "expected": "done"
413 },
414 {
415 "after": 80,
416 "presence": "Done",
417 "context": {
418 "turnId": null
419 },
420 "expected": "done"
421 }
422 ],
423 "spouts": 0
424 },
425 {
426 "id": "disconnect",
427 "label": "Connection lost during work",
428 "steps": [
429 {
430 "presence": "Working",
431 "activity": {
432 "kind": "editing",
433 "observed": true
434 },
435 "expected": "write"
436 },
437 {
438 "after": 24,
439 "presence": "Offline",
440 "expected": "sleep"
441 }
442 ]
443 },
444 {
445 "id": "reconnect",
446 "label": "Reconnect and resume",
447 "steps": [
448 {
449 "presence": "Offline",
450 "expected": "sleep"
451 },
452 {
453 "after": 90,
454 "presence": "Working",
455 "activity": {
456 "kind": "reading",
457 "observed": true
458 },
459 "expected": "read"
460 }
461 ]
462 },
463 {
464 "id": "computer-sleep",
465 "label": "Computer sleeping, Engine still ready",
466 "steps": [
467 {
468 "presence": "Idle",
469 "expected": "rest"
470 }
471 ]
472 },
473 {
474 "id": "no-agents",
475 "label": "Zero reported agents",
476 "steps": [
477 {
478 "presence": "Working",
479 "activity": {
480 "kind": "delegating",
481 "observed": true,
482 "parallel": 0
483 },
484 "expected": "pod",
485 "calves": 0
486 }
487 ]
488 },
489 {
490 "id": "agents-join-leave",
491 "label": "Agents join, then leave",
492 "steps": [
493 {
494 "presence": "Working",
495 "activity": {
496 "kind": "delegating",
497 "observed": true,
498 "parallel": 3
499 },
500 "expected": "pod",
501 "calves": 3
502 },
503 {
504 "after": 60,
505 "presence": "Working",
506 "activity": {
507 "kind": "delegating",
508 "observed": true,
509 "parallel": 1
510 },
511 "expected": "pod",
512 "calves": 1
513 },
514 {
515 "after": 60,
516 "presence": "Working",
517 "activity": {
518 "kind": "delegating",
519 "observed": true,
520 "parallel": 0
521 },
522 "expected": "pod",
523 "calves": 0
524 }
525 ]
526 },
527 {
528 "id": "agents-cap",
529 "label": "More than three agents",
530 "steps": [
531 {
532 "presence": "Working",
533 "activity": {
534 "kind": "delegating",
535 "observed": true,
536 "parallel": 4
537 },
538 "expected": "pod",
539 "calves": 3
540 }
541 ]
542 },
543 {
544 "id": "foreground-priority",
545 "label": "Foreground tool with agents running",
546 "steps": [
547 {
548 "presence": "Working",
549 "activity": {
550 "kind": "reading",
551 "observed": true,
552 "parallel": 3
553 },
554 "expected": "read",
555 "calves": 0
556 }
557 ]
558 },
559 {
560 "id": "thinking-interrupted",
561 "label": "Thinking interrupted by Read",
562 "steps": [
563 {
564 "presence": "Thinking",
565 "expected": "think"
566 },
567 {
568 "after": 9,
569 "presence": "Working",
570 "activity": {
571 "kind": "reading",
572 "observed": true
573 },
574 "expected": "read"
575 }
576 ]
577 },
578 {
579 "id": "attention-interrupted",
580 "label": "Needs you answered immediately",
581 "steps": [
582 {
583 "presence": "NeedsYou",
584 "expected": "needs"
585 },
586 {
587 "after": 6,
588 "presence": "Working",
589 "activity": {
590 "kind": "editing",
591 "observed": true
592 },
593 "expected": "write"
594 }
595 ]
596 }
597 ]
598 }
599
599 lines JSON