@calmo/task-runner 3.7.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/.github/workflows/ci.yml +3 -0
  2. package/.jules/nexus.md +5 -0
  3. package/.jules/sentinel.md +6 -0
  4. package/AGENTS.md +1 -0
  5. package/CHANGELOG.md +10 -0
  6. package/README.md +2 -0
  7. package/coverage/coverage-final.json +7 -7
  8. package/coverage/index.html +9 -9
  9. package/coverage/lcov-report/index.html +9 -9
  10. package/coverage/lcov-report/src/EventBus.ts.html +4 -4
  11. package/coverage/lcov-report/src/TaskGraphValidationError.ts.html +1 -1
  12. package/coverage/lcov-report/src/TaskGraphValidator.ts.html +38 -38
  13. package/coverage/lcov-report/src/TaskRunner.ts.html +25 -25
  14. package/coverage/lcov-report/src/TaskRunnerBuilder.ts.html +1 -1
  15. package/coverage/lcov-report/src/TaskRunnerExecutionConfig.ts.html +1 -1
  16. package/coverage/lcov-report/src/TaskStateManager.ts.html +35 -35
  17. package/coverage/lcov-report/src/WorkflowExecutor.ts.html +56 -47
  18. package/coverage/lcov-report/src/contracts/RunnerEvents.ts.html +1 -1
  19. package/coverage/lcov-report/src/contracts/index.html +1 -1
  20. package/coverage/lcov-report/src/index.html +9 -9
  21. package/coverage/lcov-report/src/strategies/DryRunExecutionStrategy.ts.html +1 -1
  22. package/coverage/lcov-report/src/strategies/RetryingExecutionStrategy.ts.html +5 -5
  23. package/coverage/lcov-report/src/strategies/StandardExecutionStrategy.ts.html +3 -3
  24. package/coverage/lcov-report/src/strategies/index.html +1 -1
  25. package/coverage/lcov.info +251 -244
  26. package/coverage/src/EventBus.ts.html +4 -4
  27. package/coverage/src/TaskGraphValidationError.ts.html +1 -1
  28. package/coverage/src/TaskGraphValidator.ts.html +38 -38
  29. package/coverage/src/TaskRunner.ts.html +25 -25
  30. package/coverage/src/TaskRunnerBuilder.ts.html +1 -1
  31. package/coverage/src/TaskRunnerExecutionConfig.ts.html +1 -1
  32. package/coverage/src/TaskStateManager.ts.html +35 -35
  33. package/coverage/src/WorkflowExecutor.ts.html +56 -47
  34. package/coverage/src/contracts/RunnerEvents.ts.html +1 -1
  35. package/coverage/src/contracts/index.html +1 -1
  36. package/coverage/src/index.html +9 -9
  37. package/coverage/src/strategies/DryRunExecutionStrategy.ts.html +1 -1
  38. package/coverage/src/strategies/RetryingExecutionStrategy.ts.html +5 -5
  39. package/coverage/src/strategies/StandardExecutionStrategy.ts.html +3 -3
  40. package/coverage/src/strategies/index.html +1 -1
  41. package/dist/TaskRunner.js +1 -1
  42. package/dist/TaskRunner.js.map +1 -1
  43. package/dist/TaskStep.d.ts +6 -0
  44. package/dist/WorkflowExecutor.js +2 -0
  45. package/dist/WorkflowExecutor.js.map +1 -1
  46. package/openspec/changes/feat-task-metrics/proposal.md +17 -0
  47. package/openspec/changes/feat-task-metrics/tasks.md +6 -0
  48. package/package.json +14 -3
  49. package/src/TaskRunner.ts +1 -1
  50. package/src/TaskStep.ts +7 -0
  51. package/src/WorkflowExecutor.ts +3 -0
  52. package/test-report.xml +139 -123
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>293/293</span>
28
+ <span class='fraction'>295/295</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>118/118</span>
35
+ <span class='fraction'>122/122</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>55/55</span>
42
+ <span class='fraction'>56/56</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>290/290</span>
49
+ <span class='fraction'>291/291</span>
50
50
  </div>
51
51
 
52
52
 
@@ -84,13 +84,13 @@
84
84
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
85
  </td>
86
86
  <td data-value="100" class="pct high">100%</td>
87
- <td data-value="251" class="abs high">251/251</td>
87
+ <td data-value="253" class="abs high">253/253</td>
88
88
  <td data-value="100" class="pct high">100%</td>
89
- <td data-value="93" class="abs high">93/93</td>
89
+ <td data-value="97" class="abs high">97/97</td>
90
90
  <td data-value="100" class="pct high">100%</td>
91
- <td data-value="46" class="abs high">46/46</td>
91
+ <td data-value="47" class="abs high">47/47</td>
92
92
  <td data-value="100" class="pct high">100%</td>
93
- <td data-value="248" class="abs high">248/248</td>
93
+ <td data-value="249" class="abs high">249/249</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2026-01-19T22:41:01.775Z
134
+ at 2026-01-21T00:01:01.006Z
135
135
  </div>
136
136
  <script src="prettify.js"></script>
137
137
  <script>
@@ -160,7 +160,7 @@
160
160
  <span class="cline-any cline-neutral">&nbsp;</span>
161
161
  <span class="cline-any cline-neutral">&nbsp;</span>
162
162
  <span class="cline-any cline-neutral">&nbsp;</span>
163
- <span class="cline-any cline-yes">74x</span>
163
+ <span class="cline-any cline-yes">80x</span>
164
164
  <span class="cline-any cline-neutral">&nbsp;</span>
165
165
  <span class="cline-any cline-neutral">&nbsp;</span>
166
166
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -207,10 +207,10 @@
207
207
  <span class="cline-any cline-neutral">&nbsp;</span>
208
208
  <span class="cline-any cline-neutral">&nbsp;</span>
209
209
  <span class="cline-any cline-neutral">&nbsp;</span>
210
- <span class="cline-any cline-yes">378x</span>
210
+ <span class="cline-any cline-yes">430x</span>
211
211
  <span class="cline-any cline-neutral">&nbsp;</span>
212
212
  <span class="cline-any cline-neutral">&nbsp;</span>
213
- <span class="cline-any cline-yes">378x</span>
213
+ <span class="cline-any cline-yes">430x</span>
214
214
  <span class="cline-any cline-yes">14x</span>
215
215
  <span class="cline-any cline-yes">14x</span>
216
216
  <span class="cline-any cline-yes">14x</span>
@@ -328,7 +328,7 @@ export class EventBus&lt;TContext&gt; {
328
328
  <div class='footer quiet pad2 space-top1 center small'>
329
329
  Code coverage generated by
330
330
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
331
- at 2026-01-19T22:41:01.775Z
331
+ at 2026-01-21T00:01:01.006Z
332
332
  </div>
333
333
  <script src="../prettify.js"></script>
334
334
  <script>
@@ -115,7 +115,7 @@ export class TaskGraphValidationError extends Error {
115
115
  <div class='footer quiet pad2 space-top1 center small'>
116
116
  Code coverage generated by
117
117
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
118
- at 2026-01-19T22:41:01.775Z
118
+ at 2026-01-21T00:01:01.006Z
119
119
  </div>
120
120
  <script src="../prettify.js"></script>
121
121
  <script>
@@ -248,26 +248,26 @@
248
248
  <span class="cline-any cline-neutral">&nbsp;</span>
249
249
  <span class="cline-any cline-neutral">&nbsp;</span>
250
250
  <span class="cline-any cline-neutral">&nbsp;</span>
251
- <span class="cline-any cline-yes">61x</span>
251
+ <span class="cline-any cline-yes">67x</span>
252
252
  <span class="cline-any cline-neutral">&nbsp;</span>
253
253
  <span class="cline-any cline-neutral">&nbsp;</span>
254
- <span class="cline-any cline-yes">61x</span>
255
- <span class="cline-any cline-yes">61x</span>
256
- <span class="cline-any cline-yes">20158x</span>
254
+ <span class="cline-any cline-yes">67x</span>
255
+ <span class="cline-any cline-yes">67x</span>
256
+ <span class="cline-any cline-yes">20178x</span>
257
257
  <span class="cline-any cline-yes">3x</span>
258
258
  <span class="cline-any cline-neutral">&nbsp;</span>
259
259
  <span class="cline-any cline-neutral">&nbsp;</span>
260
260
  <span class="cline-any cline-neutral">&nbsp;</span>
261
261
  <span class="cline-any cline-neutral">&nbsp;</span>
262
262
  <span class="cline-any cline-neutral">&nbsp;</span>
263
- <span class="cline-any cline-yes">20155x</span>
263
+ <span class="cline-any cline-yes">20175x</span>
264
264
  <span class="cline-any cline-neutral">&nbsp;</span>
265
265
  <span class="cline-any cline-neutral">&nbsp;</span>
266
266
  <span class="cline-any cline-neutral">&nbsp;</span>
267
267
  <span class="cline-any cline-neutral">&nbsp;</span>
268
- <span class="cline-any cline-yes">61x</span>
269
- <span class="cline-any cline-yes">20158x</span>
270
- <span class="cline-any cline-yes">20169x</span>
268
+ <span class="cline-any cline-yes">67x</span>
269
+ <span class="cline-any cline-yes">20178x</span>
270
+ <span class="cline-any cline-yes">20172x</span>
271
271
  <span class="cline-any cline-yes">7x</span>
272
272
  <span class="cline-any cline-neutral">&nbsp;</span>
273
273
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -279,11 +279,11 @@
279
279
  <span class="cline-any cline-neutral">&nbsp;</span>
280
280
  <span class="cline-any cline-neutral">&nbsp;</span>
281
281
  <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-yes">61x</span>
282
+ <span class="cline-any cline-yes">67x</span>
283
283
  <span class="cline-any cline-yes">9x</span>
284
284
  <span class="cline-any cline-neutral">&nbsp;</span>
285
285
  <span class="cline-any cline-neutral">&nbsp;</span>
286
- <span class="cline-any cline-yes">61x</span>
286
+ <span class="cline-any cline-yes">67x</span>
287
287
  <span class="cline-any cline-yes">6x</span>
288
288
  <span class="cline-any cline-neutral">&nbsp;</span>
289
289
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -291,21 +291,21 @@
291
291
  <span class="cline-any cline-neutral">&nbsp;</span>
292
292
  <span class="cline-any cline-neutral">&nbsp;</span>
293
293
  <span class="cline-any cline-neutral">&nbsp;</span>
294
- <span class="cline-any cline-yes">55x</span>
295
- <span class="cline-any cline-yes">55x</span>
296
- <span class="cline-any cline-yes">20149x</span>
294
+ <span class="cline-any cline-yes">61x</span>
295
+ <span class="cline-any cline-yes">61x</span>
296
+ <span class="cline-any cline-yes">20169x</span>
297
297
  <span class="cline-any cline-neutral">&nbsp;</span>
298
298
  <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-yes">55x</span>
300
- <span class="cline-any cline-yes">55x</span>
299
+ <span class="cline-any cline-yes">61x</span>
300
+ <span class="cline-any cline-yes">61x</span>
301
301
  <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-yes">55x</span>
303
- <span class="cline-any cline-yes">20142x</span>
302
+ <span class="cline-any cline-yes">61x</span>
303
+ <span class="cline-any cline-yes">20162x</span>
304
304
  <span class="cline-any cline-yes">3x</span>
305
305
  <span class="cline-any cline-neutral">&nbsp;</span>
306
306
  <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-yes">20139x</span>
308
- <span class="cline-any cline-yes">20139x</span>
307
+ <span class="cline-any cline-yes">20159x</span>
308
+ <span class="cline-any cline-yes">20159x</span>
309
309
  <span class="cline-any cline-neutral">&nbsp;</span>
310
310
  <span class="cline-any cline-neutral">&nbsp;</span>
311
311
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -324,7 +324,7 @@
324
324
  <span class="cline-any cline-neutral">&nbsp;</span>
325
325
  <span class="cline-any cline-neutral">&nbsp;</span>
326
326
  <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-yes">55x</span>
327
+ <span class="cline-any cline-yes">61x</span>
328
328
  <span class="cline-any cline-neutral">&nbsp;</span>
329
329
  <span class="cline-any cline-neutral">&nbsp;</span>
330
330
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -349,34 +349,34 @@
349
349
  <span class="cline-any cline-neutral">&nbsp;</span>
350
350
  <span class="cline-any cline-neutral">&nbsp;</span>
351
351
  <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-yes">20139x</span>
353
- <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-yes">20139x</span>
355
- <span class="cline-any cline-yes">20139x</span>
356
- <span class="cline-any cline-yes">20139x</span>
352
+ <span class="cline-any cline-yes">20159x</span>
357
353
  <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-yes">20139x</span>
354
+ <span class="cline-any cline-yes">20159x</span>
355
+ <span class="cline-any cline-yes">20159x</span>
356
+ <span class="cline-any cline-yes">20159x</span>
359
357
  <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-yes">20159x</span>
360
359
  <span class="cline-any cline-neutral">&nbsp;</span>
361
360
  <span class="cline-any cline-neutral">&nbsp;</span>
362
361
  <span class="cline-any cline-neutral">&nbsp;</span>
363
362
  <span class="cline-any cline-neutral">&nbsp;</span>
364
363
  <span class="cline-any cline-neutral">&nbsp;</span>
365
- <span class="cline-any cline-yes">20139x</span>
366
- <span class="cline-any cline-yes">40293x</span>
367
- <span class="cline-any cline-yes">40293x</span>
368
364
  <span class="cline-any cline-neutral">&nbsp;</span>
369
- <span class="cline-any cline-yes">40293x</span>
370
- <span class="cline-any cline-yes">20159x</span>
371
365
  <span class="cline-any cline-yes">20159x</span>
366
+ <span class="cline-any cline-yes">40316x</span>
367
+ <span class="cline-any cline-yes">40316x</span>
372
368
  <span class="cline-any cline-neutral">&nbsp;</span>
373
- <span class="cline-any cline-yes">20159x</span>
369
+ <span class="cline-any cline-yes">40316x</span>
370
+ <span class="cline-any cline-yes">20162x</span>
371
+ <span class="cline-any cline-yes">20162x</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-yes">20162x</span>
374
374
  <span class="cline-any cline-neutral">&nbsp;</span>
375
375
  <span class="cline-any cline-yes">5x</span>
376
376
  <span class="cline-any cline-yes">5x</span>
377
377
  <span class="cline-any cline-neutral">&nbsp;</span>
378
378
  <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-yes">20154x</span>
379
+ <span class="cline-any cline-yes">20157x</span>
380
380
  <span class="cline-any cline-yes">7x</span>
381
381
  <span class="cline-any cline-yes">7x</span>
382
382
  <span class="cline-any cline-yes">7x</span>
@@ -390,13 +390,13 @@
390
390
  <span class="cline-any cline-neutral">&nbsp;</span>
391
391
  <span class="cline-any cline-neutral">&nbsp;</span>
392
392
  <span class="cline-any cline-neutral">&nbsp;</span>
393
- <span class="cline-any cline-yes">20134x</span>
394
- <span class="cline-any cline-yes">20134x</span>
395
- <span class="cline-any cline-yes">20134x</span>
393
+ <span class="cline-any cline-yes">20154x</span>
394
+ <span class="cline-any cline-yes">20154x</span>
395
+ <span class="cline-any cline-yes">20154x</span>
396
396
  <span class="cline-any cline-neutral">&nbsp;</span>
397
397
  <span class="cline-any cline-neutral">&nbsp;</span>
398
398
  <span class="cline-any cline-neutral">&nbsp;</span>
399
- <span class="cline-any cline-yes">20134x</span>
399
+ <span class="cline-any cline-yes">20154x</span>
400
400
  <span class="cline-any cline-neutral">&nbsp;</span>
401
401
  <span class="cline-any cline-neutral">&nbsp;</span>
402
402
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { ITaskGraphValidator } from "./contracts/ITaskGraphValidator.js";
@@ -574,7 +574,7 @@ export class TaskGraphValidator implements ITaskGraphValidator {
574
574
  <div class='footer quiet pad2 space-top1 center small'>
575
575
  Code coverage generated by
576
576
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
577
- at 2026-01-19T22:41:01.775Z
577
+ at 2026-01-21T00:01:01.006Z
578
578
  </div>
579
579
  <script src="../prettify.js"></script>
580
580
  <script>
@@ -292,15 +292,15 @@
292
292
  <span class="cline-any cline-neutral">&nbsp;</span>
293
293
  <span class="cline-any cline-neutral">&nbsp;</span>
294
294
  <span class="cline-any cline-neutral">&nbsp;</span>
295
- <span class="cline-any cline-yes">57x</span>
296
- <span class="cline-any cline-yes">57x</span>
295
+ <span class="cline-any cline-yes">63x</span>
296
+ <span class="cline-any cline-yes">63x</span>
297
297
  <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-yes">57x</span>
298
+ <span class="cline-any cline-yes">63x</span>
299
299
  <span class="cline-any cline-neutral">&nbsp;</span>
300
300
  <span class="cline-any cline-neutral">&nbsp;</span>
301
301
  <span class="cline-any cline-neutral">&nbsp;</span>
302
302
  <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-yes">57x</span>
303
+ <span class="cline-any cline-yes">63x</span>
304
304
  <span class="cline-any cline-neutral">&nbsp;</span>
305
305
  <span class="cline-any cline-neutral">&nbsp;</span>
306
306
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -344,34 +344,34 @@
344
344
  <span class="cline-any cline-neutral">&nbsp;</span>
345
345
  <span class="cline-any cline-neutral">&nbsp;</span>
346
346
  <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-yes">4x</span>
347
+ <span class="cline-any cline-yes">5x</span>
348
348
  <span class="cline-any cline-neutral">&nbsp;</span>
349
349
  <span class="cline-any cline-neutral">&nbsp;</span>
350
350
  <span class="cline-any cline-neutral">&nbsp;</span>
351
351
  <span class="cline-any cline-neutral">&nbsp;</span>
352
352
  <span class="cline-any cline-neutral">&nbsp;</span>
353
353
  <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-yes">12x</span>
355
- <span class="cline-any cline-yes">24x</span>
354
+ <span class="cline-any cline-yes">15x</span>
355
+ <span class="cline-any cline-yes">27x</span>
356
356
  <span class="cline-any cline-neutral">&nbsp;</span>
357
357
  <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-yes">4x</span>
358
+ <span class="cline-any cline-yes">5x</span>
359
359
  <span class="cline-any cline-neutral">&nbsp;</span>
360
360
  <span class="cline-any cline-neutral">&nbsp;</span>
361
361
  <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-yes">12x</span>
362
+ <span class="cline-any cline-yes">15x</span>
363
363
  <span class="cline-any cline-neutral">&nbsp;</span>
364
364
  <span class="cline-any cline-neutral">&nbsp;</span>
365
365
  <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-yes">4x</span>
367
- <span class="cline-any cline-yes">12x</span>
366
+ <span class="cline-any cline-yes">5x</span>
367
+ <span class="cline-any cline-yes">15x</span>
368
368
  <span class="cline-any cline-yes">5x</span>
369
369
  <span class="cline-any cline-yes">6x</span>
370
370
  <span class="cline-any cline-neutral">&nbsp;</span>
371
371
  <span class="cline-any cline-neutral">&nbsp;</span>
372
372
  <span class="cline-any cline-neutral">&nbsp;</span>
373
373
  <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-yes">4x</span>
374
+ <span class="cline-any cline-yes">5x</span>
375
375
  <span class="cline-any cline-neutral">&nbsp;</span>
376
376
  <span class="cline-any cline-neutral">&nbsp;</span>
377
377
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -380,7 +380,7 @@
380
380
  <span class="cline-any cline-neutral">&nbsp;</span>
381
381
  <span class="cline-any cline-neutral">&nbsp;</span>
382
382
  <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-yes">24x</span>
383
+ <span class="cline-any cline-yes">27x</span>
384
384
  <span class="cline-any cline-neutral">&nbsp;</span>
385
385
  <span class="cline-any cline-neutral">&nbsp;</span>
386
386
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -396,29 +396,29 @@
396
396
  <span class="cline-any cline-neutral">&nbsp;</span>
397
397
  <span class="cline-any cline-neutral">&nbsp;</span>
398
398
  <span class="cline-any cline-neutral">&nbsp;</span>
399
- <span class="cline-any cline-yes">52x</span>
400
- <span class="cline-any cline-yes">140x</span>
399
+ <span class="cline-any cline-yes">58x</span>
400
+ <span class="cline-any cline-yes">160x</span>
401
401
  <span class="cline-any cline-neutral">&nbsp;</span>
402
402
  <span class="cline-any cline-neutral">&nbsp;</span>
403
403
  <span class="cline-any cline-neutral">&nbsp;</span>
404
404
  <span class="cline-any cline-neutral">&nbsp;</span>
405
405
  <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-yes">52x</span>
407
- <span class="cline-any cline-yes">52x</span>
406
+ <span class="cline-any cline-yes">58x</span>
407
+ <span class="cline-any cline-yes">58x</span>
408
408
  <span class="cline-any cline-yes">9x</span>
409
409
  <span class="cline-any cline-neutral">&nbsp;</span>
410
410
  <span class="cline-any cline-neutral">&nbsp;</span>
411
411
  <span class="cline-any cline-neutral">&nbsp;</span>
412
412
  <span class="cline-any cline-neutral">&nbsp;</span>
413
413
  <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-yes">43x</span>
414
+ <span class="cline-any cline-yes">49x</span>
415
415
  <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-yes">43x</span>
417
- <span class="cline-any cline-yes">43x</span>
416
+ <span class="cline-any cline-yes">49x</span>
417
+ <span class="cline-any cline-yes">49x</span>
418
418
  <span class="cline-any cline-yes">2x</span>
419
419
  <span class="cline-any cline-neutral">&nbsp;</span>
420
420
  <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-yes">43x</span>
421
+ <span class="cline-any cline-yes">49x</span>
422
422
  <span class="cline-any cline-neutral">&nbsp;</span>
423
423
  <span class="cline-any cline-neutral">&nbsp;</span>
424
424
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -427,7 +427,7 @@
427
427
  <span class="cline-any cline-neutral">&nbsp;</span>
428
428
  <span class="cline-any cline-neutral">&nbsp;</span>
429
429
  <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-yes">52x</span>
430
+ <span class="cline-any cline-yes">58x</span>
431
431
  <span class="cline-any cline-yes">5x</span>
432
432
  <span class="cline-any cline-yes">5x</span>
433
433
  <span class="cline-any cline-yes">3x</span>
@@ -463,7 +463,7 @@
463
463
  <span class="cline-any cline-neutral">&nbsp;</span>
464
464
  <span class="cline-any cline-neutral">&nbsp;</span>
465
465
  <span class="cline-any cline-neutral">&nbsp;</span>
466
- <span class="cline-any cline-yes">38x</span>
466
+ <span class="cline-any cline-yes">44x</span>
467
467
  <span class="cline-any cline-neutral">&nbsp;</span>
468
468
  <span class="cline-any cline-neutral">&nbsp;</span>
469
469
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -582,7 +582,7 @@ export class TaskRunner&lt;TContext&gt; {
582
582
  * @returns The sanitized string.
583
583
  */
584
584
  private static sanitizeMermaidId(id: string): string {
585
- return id.replaceAll(/ /g, "_").replaceAll(/:/g, "_").replaceAll(/"/g, "_");
585
+ return id.replaceAll(/[^a-zA-Z0-9_-]/g, "_");
586
586
  }
587
587
  &nbsp;
588
588
  /**
@@ -676,7 +676,7 @@ export class TaskRunner&lt;TContext&gt; {
676
676
  <div class='footer quiet pad2 space-top1 center small'>
677
677
  Code coverage generated by
678
678
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
679
- at 2026-01-19T22:41:01.775Z
679
+ at 2026-01-21T00:01:01.006Z
680
680
  </div>
681
681
  <script src="../prettify.js"></script>
682
682
  <script>
@@ -322,7 +322,7 @@ export class TaskRunnerBuilder&lt;TContext&gt; {
322
322
  <div class='footer quiet pad2 space-top1 center small'>
323
323
  Code coverage generated by
324
324
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
325
- at 2026-01-19T22:41:01.775Z
325
+ at 2026-01-21T00:01:01.006Z
326
326
  </div>
327
327
  <script src="../prettify.js"></script>
328
328
  <script>
@@ -139,7 +139,7 @@ export interface TaskRunnerExecutionConfig {
139
139
  <div class='footer quiet pad2 space-top1 center small'>
140
140
  Code coverage generated by
141
141
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
142
- at 2026-01-19T22:41:01.775Z
142
+ at 2026-01-21T00:01:01.006Z
143
143
  </div>
144
144
  <script src="../prettify.js"></script>
145
145
  <script>
@@ -224,20 +224,20 @@
224
224
  <span class="cline-any cline-neutral">&nbsp;</span>
225
225
  <span class="cline-any cline-neutral">&nbsp;</span>
226
226
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">59x</span>
228
- <span class="cline-any cline-yes">59x</span>
229
- <span class="cline-any cline-yes">59x</span>
227
+ <span class="cline-any cline-yes">65x</span>
228
+ <span class="cline-any cline-yes">65x</span>
229
+ <span class="cline-any cline-yes">65x</span>
230
230
  <span class="cline-any cline-neutral">&nbsp;</span>
231
- <span class="cline-any cline-yes">59x</span>
231
+ <span class="cline-any cline-yes">65x</span>
232
232
  <span class="cline-any cline-neutral">&nbsp;</span>
233
233
  <span class="cline-any cline-neutral">&nbsp;</span>
234
234
  <span class="cline-any cline-neutral">&nbsp;</span>
235
235
  <span class="cline-any cline-neutral">&nbsp;</span>
236
236
  <span class="cline-any cline-neutral">&nbsp;</span>
237
237
  <span class="cline-any cline-neutral">&nbsp;</span>
238
- <span class="cline-any cline-yes">58x</span>
239
- <span class="cline-any cline-yes">58x</span>
240
- <span class="cline-any cline-yes">58x</span>
238
+ <span class="cline-any cline-yes">64x</span>
239
+ <span class="cline-any cline-yes">64x</span>
240
+ <span class="cline-any cline-yes">64x</span>
241
241
  <span class="cline-any cline-neutral">&nbsp;</span>
242
242
  <span class="cline-any cline-neutral">&nbsp;</span>
243
243
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -246,26 +246,26 @@
246
246
  <span class="cline-any cline-neutral">&nbsp;</span>
247
247
  <span class="cline-any cline-neutral">&nbsp;</span>
248
248
  <span class="cline-any cline-neutral">&nbsp;</span>
249
- <span class="cline-any cline-yes">272x</span>
250
- <span class="cline-any cline-yes">272x</span>
249
+ <span class="cline-any cline-yes">318x</span>
250
+ <span class="cline-any cline-yes">318x</span>
251
251
  <span class="cline-any cline-neutral">&nbsp;</span>
252
- <span class="cline-any cline-yes">272x</span>
253
- <span class="cline-any cline-yes">393x</span>
254
- <span class="cline-any cline-yes">393x</span>
252
+ <span class="cline-any cline-yes">318x</span>
253
+ <span class="cline-any cline-yes">418x</span>
254
+ <span class="cline-any cline-yes">418x</span>
255
255
  <span class="cline-any cline-neutral">&nbsp;</span>
256
256
  <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-yes">393x</span>
258
- <span class="cline-any cline-yes">1162x</span>
259
- <span class="cline-any cline-yes">1162x</span>
257
+ <span class="cline-any cline-yes">418x</span>
258
+ <span class="cline-any cline-yes">1170x</span>
259
+ <span class="cline-any cline-yes">1170x</span>
260
260
  <span class="cline-any cline-neutral">&nbsp;</span>
261
- <span class="cline-any cline-yes">1008x</span>
262
- <span class="cline-any cline-yes">154x</span>
261
+ <span class="cline-any cline-yes">1013x</span>
262
+ <span class="cline-any cline-yes">157x</span>
263
263
  <span class="cline-any cline-yes">9x</span>
264
264
  <span class="cline-any cline-yes">9x</span>
265
265
  <span class="cline-any cline-neutral">&nbsp;</span>
266
266
  <span class="cline-any cline-neutral">&nbsp;</span>
267
267
  <span class="cline-any cline-neutral">&nbsp;</span>
268
- <span class="cline-any cline-yes">393x</span>
268
+ <span class="cline-any cline-yes">418x</span>
269
269
  <span class="cline-any cline-yes">9x</span>
270
270
  <span class="cline-any cline-yes">9x</span>
271
271
  <span class="cline-any cline-yes">9x</span>
@@ -274,18 +274,18 @@
274
274
  <span class="cline-any cline-neutral">&nbsp;</span>
275
275
  <span class="cline-any cline-yes">9x</span>
276
276
  <span class="cline-any cline-yes">9x</span>
277
- <span class="cline-any cline-yes">384x</span>
278
- <span class="cline-any cline-yes">129x</span>
279
- <span class="cline-any cline-yes">129x</span>
277
+ <span class="cline-any cline-yes">409x</span>
278
+ <span class="cline-any cline-yes">149x</span>
279
+ <span class="cline-any cline-yes">149x</span>
280
280
  <span class="cline-any cline-neutral">&nbsp;</span>
281
281
  <span class="cline-any cline-neutral">&nbsp;</span>
282
282
  <span class="cline-any cline-neutral">&nbsp;</span>
283
283
  <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-yes">272x</span>
285
- <span class="cline-any cline-yes">138x</span>
284
+ <span class="cline-any cline-yes">318x</span>
285
+ <span class="cline-any cline-yes">158x</span>
286
286
  <span class="cline-any cline-neutral">&nbsp;</span>
287
287
  <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-yes">272x</span>
288
+ <span class="cline-any cline-yes">318x</span>
289
289
  <span class="cline-any cline-neutral">&nbsp;</span>
290
290
  <span class="cline-any cline-neutral">&nbsp;</span>
291
291
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -293,8 +293,8 @@
293
293
  <span class="cline-any cline-neutral">&nbsp;</span>
294
294
  <span class="cline-any cline-neutral">&nbsp;</span>
295
295
  <span class="cline-any cline-neutral">&nbsp;</span>
296
- <span class="cline-any cline-yes">122x</span>
297
- <span class="cline-any cline-yes">122x</span>
296
+ <span class="cline-any cline-yes">142x</span>
297
+ <span class="cline-any cline-yes">142x</span>
298
298
  <span class="cline-any cline-neutral">&nbsp;</span>
299
299
  <span class="cline-any cline-neutral">&nbsp;</span>
300
300
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -304,9 +304,9 @@
304
304
  <span class="cline-any cline-neutral">&nbsp;</span>
305
305
  <span class="cline-any cline-neutral">&nbsp;</span>
306
306
  <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-yes">127x</span>
308
- <span class="cline-any cline-yes">127x</span>
309
- <span class="cline-any cline-yes">127x</span>
307
+ <span class="cline-any cline-yes">147x</span>
308
+ <span class="cline-any cline-yes">147x</span>
309
+ <span class="cline-any cline-yes">147x</span>
310
310
  <span class="cline-any cline-neutral">&nbsp;</span>
311
311
  <span class="cline-any cline-neutral">&nbsp;</span>
312
312
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -315,7 +315,7 @@
315
315
  <span class="cline-any cline-neutral">&nbsp;</span>
316
316
  <span class="cline-any cline-neutral">&nbsp;</span>
317
317
  <span class="cline-any cline-neutral">&nbsp;</span>
318
- <span class="cline-any cline-yes">81x</span>
318
+ <span class="cline-any cline-yes">87x</span>
319
319
  <span class="cline-any cline-neutral">&nbsp;</span>
320
320
  <span class="cline-any cline-neutral">&nbsp;</span>
321
321
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -332,28 +332,28 @@
332
332
  <span class="cline-any cline-neutral">&nbsp;</span>
333
333
  <span class="cline-any cline-neutral">&nbsp;</span>
334
334
  <span class="cline-any cline-neutral">&nbsp;</span>
335
- <span class="cline-any cline-yes">81x</span>
335
+ <span class="cline-any cline-yes">87x</span>
336
336
  <span class="cline-any cline-neutral">&nbsp;</span>
337
337
  <span class="cline-any cline-neutral">&nbsp;</span>
338
338
  <span class="cline-any cline-neutral">&nbsp;</span>
339
339
  <span class="cline-any cline-neutral">&nbsp;</span>
340
340
  <span class="cline-any cline-neutral">&nbsp;</span>
341
341
  <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-yes">59x</span>
342
+ <span class="cline-any cline-yes">65x</span>
343
343
  <span class="cline-any cline-neutral">&nbsp;</span>
344
344
  <span class="cline-any cline-neutral">&nbsp;</span>
345
345
  <span class="cline-any cline-neutral">&nbsp;</span>
346
346
  <span class="cline-any cline-neutral">&nbsp;</span>
347
347
  <span class="cline-any cline-neutral">&nbsp;</span>
348
348
  <span class="cline-any cline-neutral">&nbsp;</span>
349
- <span class="cline-any cline-yes">121x</span>
349
+ <span class="cline-any cline-yes">144x</span>
350
350
  <span class="cline-any cline-neutral">&nbsp;</span>
351
351
  <span class="cline-any cline-neutral">&nbsp;</span>
352
352
  <span class="cline-any cline-neutral">&nbsp;</span>
353
353
  <span class="cline-any cline-neutral">&nbsp;</span>
354
354
  <span class="cline-any cline-neutral">&nbsp;</span>
355
355
  <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-yes">154x</span>
356
+ <span class="cline-any cline-yes">180x</span>
357
357
  <span class="cline-any cline-neutral">&nbsp;</span>
358
358
  <span class="cline-any cline-neutral">&nbsp;</span>
359
359
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -526,7 +526,7 @@ export class TaskStateManager&lt;TContext&gt; {
526
526
  <div class='footer quiet pad2 space-top1 center small'>
527
527
  Code coverage generated by
528
528
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
529
- at 2026-01-19T22:41:01.775Z
529
+ at 2026-01-21T00:01:01.006Z
530
530
  </div>
531
531
  <script src="../prettify.js"></script>
532
532
  <script>