@md2do/cli 0.3.0 → 0.4.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 (34) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/coverage/coverage-final.json +2 -2
  3. package/coverage/index.html +7 -7
  4. package/coverage/lcov-report/index.html +7 -7
  5. package/coverage/lcov-report/src/cli.ts.html +1 -1
  6. package/coverage/lcov-report/src/commands/index.html +5 -5
  7. package/coverage/lcov-report/src/commands/index.ts.html +1 -1
  8. package/coverage/lcov-report/src/commands/list.ts.html +103 -22
  9. package/coverage/lcov-report/src/commands/stats.ts.html +1 -1
  10. package/coverage/lcov-report/src/commands/todoist.ts.html +1 -1
  11. package/coverage/lcov-report/src/formatters/index.html +1 -1
  12. package/coverage/lcov-report/src/formatters/json.ts.html +1 -1
  13. package/coverage/lcov-report/src/formatters/pretty.ts.html +1 -1
  14. package/coverage/lcov-report/src/index.html +5 -5
  15. package/coverage/lcov-report/src/index.ts.html +1 -1
  16. package/coverage/lcov-report/src/scanner.ts.html +87 -6
  17. package/coverage/lcov.info +56 -2
  18. package/coverage/src/cli.ts.html +1 -1
  19. package/coverage/src/commands/index.html +5 -5
  20. package/coverage/src/commands/index.ts.html +1 -1
  21. package/coverage/src/commands/list.ts.html +103 -22
  22. package/coverage/src/commands/stats.ts.html +1 -1
  23. package/coverage/src/commands/todoist.ts.html +1 -1
  24. package/coverage/src/formatters/index.html +1 -1
  25. package/coverage/src/formatters/json.ts.html +1 -1
  26. package/coverage/src/formatters/pretty.ts.html +1 -1
  27. package/coverage/src/index.html +5 -5
  28. package/coverage/src/index.ts.html +1 -1
  29. package/coverage/src/scanner.ts.html +87 -6
  30. package/dist/cli.js +22 -6
  31. package/dist/index.js +22 -6
  32. package/package.json +5 -5
  33. package/src/commands/list.ts +16 -5
  34. package/src/scanner.ts +23 -1
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/105</span>
28
+ <span class='fraction'>0/132</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/105</span>
49
+ <span class='fraction'>0/132</span>
50
50
  </div>
51
51
 
52
52
 
@@ -168,7 +168,61 @@
168
168
  <a name='L103'></a><a href='#L103'>103</a>
169
169
  <a name='L104'></a><a href='#L104'>104</a>
170
170
  <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
199
+ <span class="cline-any cline-no">&nbsp;</span>
200
+ <span class="cline-any cline-no">&nbsp;</span>
201
+ <span class="cline-any cline-no">&nbsp;</span>
202
+ <span class="cline-any cline-no">&nbsp;</span>
203
+ <span class="cline-any cline-no">&nbsp;</span>
204
+ <span class="cline-any cline-no">&nbsp;</span>
205
+ <span class="cline-any cline-no">&nbsp;</span>
206
+ <span class="cline-any cline-no">&nbsp;</span>
207
+ <span class="cline-any cline-no">&nbsp;</span>
208
+ <span class="cline-any cline-no">&nbsp;</span>
209
+ <span class="cline-any cline-no">&nbsp;</span>
210
+ <span class="cline-any cline-no">&nbsp;</span>
211
+ <span class="cline-any cline-no">&nbsp;</span>
212
+ <span class="cline-any cline-no">&nbsp;</span>
213
+ <span class="cline-any cline-no">&nbsp;</span>
214
+ <span class="cline-any cline-no">&nbsp;</span>
215
+ <span class="cline-any cline-no">&nbsp;</span>
216
+ <span class="cline-any cline-no">&nbsp;</span>
217
+ <span class="cline-any cline-no">&nbsp;</span>
218
+ <span class="cline-any cline-no">&nbsp;</span>
219
+ <span class="cline-any cline-no">&nbsp;</span>
220
+ <span class="cline-any cline-no">&nbsp;</span>
221
+ <span class="cline-any cline-no">&nbsp;</span>
222
+ <span class="cline-any cline-no">&nbsp;</span>
223
+ <span class="cline-any cline-no">&nbsp;</span>
224
+ <span class="cline-any cline-no">&nbsp;</span>
225
+ <span class="cline-any cline-no">&nbsp;</span>
172
226
  <span class="cline-any cline-no">&nbsp;</span>
173
227
  <span class="cline-any cline-no">&nbsp;</span>
174
228
  <span class="cline-any cline-no">&nbsp;</span>
@@ -297,6 +351,21 @@
297
351
  <span class="cstat-no" title="statement not covered" > * Whether to follow symbolic links (defaults to false)</span>
298
352
  <span class="cstat-no" title="statement not covered" > */</span>
299
353
  <span class="cstat-no" title="statement not covered" > followSymlinks?: boolean;</span>
354
+ <span class="cstat-no" title="statement not covered" ></span>
355
+ <span class="cstat-no" title="statement not covered" > /**</span>
356
+ <span class="cstat-no" title="statement not covered" > * Workday start time for default due times (e.g., "08:00")</span>
357
+ <span class="cstat-no" title="statement not covered" > */</span>
358
+ <span class="cstat-no" title="statement not covered" > workdayStartTime?: string;</span>
359
+ <span class="cstat-no" title="statement not covered" ></span>
360
+ <span class="cstat-no" title="statement not covered" > /**</span>
361
+ <span class="cstat-no" title="statement not covered" > * Workday end time for default due times (e.g., "17:00")</span>
362
+ <span class="cstat-no" title="statement not covered" > */</span>
363
+ <span class="cstat-no" title="statement not covered" > workdayEndTime?: string;</span>
364
+ <span class="cstat-no" title="statement not covered" ></span>
365
+ <span class="cstat-no" title="statement not covered" > /**</span>
366
+ <span class="cstat-no" title="statement not covered" > * Default due time to use when no time is specified ("start" or "end")</span>
367
+ <span class="cstat-no" title="statement not covered" > */</span>
368
+ <span class="cstat-no" title="statement not covered" > defaultDueTime?: 'start' | 'end';</span>
300
369
  <span class="cstat-no" title="statement not covered" >}</span>
301
370
  <span class="cstat-no" title="statement not covered" ></span>
302
371
  <span class="cstat-no" title="statement not covered" >export interface ScanResult {</span>
@@ -331,6 +400,9 @@
331
400
  <span class="cstat-no" title="statement not covered" > '**/.next/**',</span>
332
401
  <span class="cstat-no" title="statement not covered" > ],</span>
333
402
  <span class="cstat-no" title="statement not covered" > followSymlinks = false,</span>
403
+ <span class="cstat-no" title="statement not covered" > workdayStartTime,</span>
404
+ <span class="cstat-no" title="statement not covered" > workdayEndTime,</span>
405
+ <span class="cstat-no" title="statement not covered" > defaultDueTime,</span>
334
406
  <span class="cstat-no" title="statement not covered" > } = options;</span>
335
407
  <span class="cstat-no" title="statement not covered" ></span>
336
408
  <span class="cstat-no" title="statement not covered" > // Find all markdown files</span>
@@ -352,16 +424,25 @@
352
424
  <span class="cstat-no" title="statement not covered" > const fullPath = `${root}/${file}`;</span>
353
425
  <span class="cstat-no" title="statement not covered" > const content = await readFile(fullPath, 'utf-8');</span>
354
426
  <span class="cstat-no" title="statement not covered" ></span>
355
- <span class="cstat-no" title="statement not covered" > const result = scanner.scanFile(file, content);</span>
427
+ <span class="cstat-no" title="statement not covered" > const result = scanner.scanFile(file, content, {</span>
428
+ <span class="cstat-no" title="statement not covered" > ...(workdayStartTime &amp;&amp; { workdayStartTime }),</span>
429
+ <span class="cstat-no" title="statement not covered" > ...(workdayEndTime &amp;&amp; { workdayEndTime }),</span>
430
+ <span class="cstat-no" title="statement not covered" > ...(defaultDueTime &amp;&amp; { defaultDueTime }),</span>
431
+ <span class="cstat-no" title="statement not covered" > });</span>
356
432
  <span class="cstat-no" title="statement not covered" > allTasks.push(...result.tasks);</span>
357
433
  <span class="cstat-no" title="statement not covered" > allWarnings.push(...result.warnings);</span>
358
434
  <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
359
435
  <span class="cstat-no" title="statement not covered" > // Add warning for files that couldn't be read</span>
436
+ <span class="cstat-no" title="statement not covered" > const message = `Failed to read file: ${error instanceof Error ? error.message : 'Unknown error'}`;</span>
360
437
  <span class="cstat-no" title="statement not covered" > allWarnings.push({</span>
438
+ <span class="cstat-no" title="statement not covered" > severity: 'error',</span>
439
+ <span class="cstat-no" title="statement not covered" > source: 'md2do',</span>
440
+ <span class="cstat-no" title="statement not covered" > ruleId: 'file-read-error',</span>
361
441
  <span class="cstat-no" title="statement not covered" > file,</span>
362
442
  <span class="cstat-no" title="statement not covered" > line: 0,</span>
363
443
  <span class="cstat-no" title="statement not covered" > text: '',</span>
364
- <span class="cstat-no" title="statement not covered" > reason: `Failed to read file: ${error instanceof Error ? error.message : 'Unknown error'}`,</span>
444
+ <span class="cstat-no" title="statement not covered" > message,</span>
445
+ <span class="cstat-no" title="statement not covered" > reason: message,</span>
365
446
  <span class="cstat-no" title="statement not covered" > });</span>
366
447
  <span class="cstat-no" title="statement not covered" > }</span>
367
448
  <span class="cstat-no" title="statement not covered" > }</span>
@@ -385,7 +466,7 @@
385
466
  <div class='footer quiet pad2 space-top1 center small'>
386
467
  Code coverage generated by
387
468
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
388
- at 2026-01-26T03:50:54.705Z
469
+ at 2026-02-05T05:58:17.772Z
389
470
  </div>
390
471
  <script src="../prettify.js"></script>
391
472
  <script>
@@ -177,7 +177,34 @@ DA:102,0
177
177
  DA:103,0
178
178
  DA:104,0
179
179
  DA:105,0
180
- LF:105
180
+ DA:106,0
181
+ DA:107,0
182
+ DA:108,0
183
+ DA:109,0
184
+ DA:110,0
185
+ DA:111,0
186
+ DA:112,0
187
+ DA:113,0
188
+ DA:114,0
189
+ DA:115,0
190
+ DA:116,0
191
+ DA:117,0
192
+ DA:118,0
193
+ DA:119,0
194
+ DA:120,0
195
+ DA:121,0
196
+ DA:122,0
197
+ DA:123,0
198
+ DA:124,0
199
+ DA:125,0
200
+ DA:126,0
201
+ DA:127,0
202
+ DA:128,0
203
+ DA:129,0
204
+ DA:130,0
205
+ DA:131,0
206
+ DA:132,0
207
+ LF:132
181
208
  LH:0
182
209
  BRDA:1,0,0,0
183
210
  BRF:1
@@ -449,7 +476,34 @@ DA:241,0
449
476
  DA:242,0
450
477
  DA:243,0
451
478
  DA:244,0
452
- LF:244
479
+ DA:245,0
480
+ DA:246,0
481
+ DA:247,0
482
+ DA:248,0
483
+ DA:249,0
484
+ DA:250,0
485
+ DA:251,0
486
+ DA:252,0
487
+ DA:253,0
488
+ DA:254,0
489
+ DA:255,0
490
+ DA:256,0
491
+ DA:257,0
492
+ DA:258,0
493
+ DA:259,0
494
+ DA:260,0
495
+ DA:261,0
496
+ DA:262,0
497
+ DA:263,0
498
+ DA:264,0
499
+ DA:265,0
500
+ DA:266,0
501
+ DA:267,0
502
+ DA:268,0
503
+ DA:269,0
504
+ DA:270,0
505
+ DA:271,0
506
+ LF:271
453
507
  LH:0
454
508
  BRDA:1,0,0,0
455
509
  BRF:1
@@ -196,7 +196,7 @@
196
196
  <div class='footer quiet pad2 space-top1 center small'>
197
197
  Code coverage generated by
198
198
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
199
- at 2026-01-26T03:50:54.693Z
199
+ at 2026-02-05T05:58:17.761Z
200
200
  </div>
201
201
  <script src="../prettify.js"></script>
202
202
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/1375</span>
28
+ <span class='fraction'>0/1402</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/1375</span>
49
+ <span class='fraction'>0/1402</span>
50
50
  </div>
51
51
 
52
52
 
@@ -99,13 +99,13 @@
99
99
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
100
100
  </td>
101
101
  <td data-value="0" class="pct low">0%</td>
102
- <td data-value="244" class="abs low">0/244</td>
102
+ <td data-value="271" class="abs low">0/271</td>
103
103
  <td data-value="0" class="pct low">0%</td>
104
104
  <td data-value="1" class="abs low">0/1</td>
105
105
  <td data-value="0" class="pct low">0%</td>
106
106
  <td data-value="1" class="abs low">0/1</td>
107
107
  <td data-value="0" class="pct low">0%</td>
108
- <td data-value="244" class="abs low">0/244</td>
108
+ <td data-value="271" class="abs low">0/271</td>
109
109
  </tr>
110
110
 
111
111
  <tr>
@@ -146,7 +146,7 @@
146
146
  <div class='footer quiet pad2 space-top1 center small'>
147
147
  Code coverage generated by
148
148
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2026-01-26T03:50:54.693Z
149
+ at 2026-02-05T05:58:17.761Z
150
150
  </div>
151
151
  <script src="../../prettify.js"></script>
152
152
  <script>
@@ -82,7 +82,7 @@
82
82
  <div class='footer quiet pad2 space-top1 center small'>
83
83
  Code coverage generated by
84
84
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
85
- at 2026-01-26T03:50:54.693Z
85
+ at 2026-02-05T05:58:17.761Z
86
86
  </div>
87
87
  <script src="../../prettify.js"></script>
88
88
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/244</span>
28
+ <span class='fraction'>0/271</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/244</span>
49
+ <span class='fraction'>0/271</span>
50
50
  </div>
51
51
 
52
52
 
@@ -307,7 +307,61 @@
307
307
  <a name='L242'></a><a href='#L242'>242</a>
308
308
  <a name='L243'></a><a href='#L243'>243</a>
309
309
  <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
338
+ <span class="cline-any cline-no">&nbsp;</span>
339
+ <span class="cline-any cline-no">&nbsp;</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
341
+ <span class="cline-any cline-no">&nbsp;</span>
342
+ <span class="cline-any cline-no">&nbsp;</span>
343
+ <span class="cline-any cline-no">&nbsp;</span>
344
+ <span class="cline-any cline-no">&nbsp;</span>
345
+ <span class="cline-any cline-no">&nbsp;</span>
346
+ <span class="cline-any cline-no">&nbsp;</span>
347
+ <span class="cline-any cline-no">&nbsp;</span>
348
+ <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-no">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-no">&nbsp;</span>
354
+ <span class="cline-any cline-no">&nbsp;</span>
355
+ <span class="cline-any cline-no">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-no">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-no">&nbsp;</span>
363
+ <span class="cline-any cline-no">&nbsp;</span>
364
+ <span class="cline-any cline-no">&nbsp;</span>
311
365
  <span class="cline-any cline-no">&nbsp;</span>
312
366
  <span class="cline-any cline-no">&nbsp;</span>
313
367
  <span class="cline-any cline-no">&nbsp;</span>
@@ -552,7 +606,8 @@
552
606
  <span class="cline-any cline-no">&nbsp;</span>
553
607
  <span class="cline-any cline-no">&nbsp;</span>
554
608
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import { Command } from 'commander';<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
555
- <span class="cstat-no" title="statement not covered" >import { filters, sorting } from '@md2do/core';</span>
609
+ <span class="cstat-no" title="statement not covered" >import { filters, sorting, filterWarnings } from '@md2do/core';</span>
610
+ <span class="cstat-no" title="statement not covered" >import { loadConfig, DEFAULT_CONFIG } from '@md2do/config';</span>
556
611
  <span class="cstat-no" title="statement not covered" >import { scanMarkdownFiles } from '../scanner.js';</span>
557
612
  <span class="cstat-no" title="statement not covered" >import { formatAsPretty, formatAsTable } from '../formatters/pretty.js';</span>
558
613
  <span class="cstat-no" title="statement not covered" >import { formatAsJson } from '../formatters/json.js';</span>
@@ -638,11 +693,25 @@
638
693
  <span class="cstat-no" title="statement not covered" ></span>
639
694
  <span class="cstat-no" title="statement not covered" > .action(async (options: ListCommandOptions) =&gt; {</span>
640
695
  <span class="cstat-no" title="statement not covered" > try {</span>
641
- <span class="cstat-no" title="statement not covered" > // Scan markdown files</span>
696
+ <span class="cstat-no" title="statement not covered" > // Load config first to get workday settings</span>
697
+ <span class="cstat-no" title="statement not covered" > const config = await loadConfig({</span>
698
+ <span class="cstat-no" title="statement not covered" > cwd: options.path || process.cwd(),</span>
699
+ <span class="cstat-no" title="statement not covered" > });</span>
700
+ <span class="cstat-no" title="statement not covered" ></span>
701
+ <span class="cstat-no" title="statement not covered" > // Scan markdown files with workday config</span>
642
702
  <span class="cstat-no" title="statement not covered" > const scanResult = await scanMarkdownFiles({</span>
643
703
  <span class="cstat-no" title="statement not covered" > root: options.path || process.cwd(),</span>
644
704
  <span class="cstat-no" title="statement not covered" > ...(options.pattern !== undefined &amp;&amp; { pattern: options.pattern }),</span>
645
705
  <span class="cstat-no" title="statement not covered" > ...(options.exclude !== undefined &amp;&amp; { exclude: options.exclude }),</span>
706
+ <span class="cstat-no" title="statement not covered" > ...(config.workday?.startTime &amp;&amp; {</span>
707
+ <span class="cstat-no" title="statement not covered" > workdayStartTime: config.workday.startTime,</span>
708
+ <span class="cstat-no" title="statement not covered" > }),</span>
709
+ <span class="cstat-no" title="statement not covered" > ...(config.workday?.endTime &amp;&amp; {</span>
710
+ <span class="cstat-no" title="statement not covered" > workdayEndTime: config.workday.endTime,</span>
711
+ <span class="cstat-no" title="statement not covered" > }),</span>
712
+ <span class="cstat-no" title="statement not covered" > ...(config.workday?.defaultDueTime &amp;&amp; {</span>
713
+ <span class="cstat-no" title="statement not covered" > defaultDueTime: config.workday.defaultDueTime,</span>
714
+ <span class="cstat-no" title="statement not covered" > }),</span>
646
715
  <span class="cstat-no" title="statement not covered" > });</span>
647
716
  <span class="cstat-no" title="statement not covered" ></span>
648
717
  <span class="cstat-no" title="statement not covered" > let tasks = scanResult.tasks;</span>
@@ -764,27 +833,39 @@
764
833
  <span class="cstat-no" title="statement not covered" ></span>
765
834
  <span class="cstat-no" title="statement not covered" > console.log(output);</span>
766
835
  <span class="cstat-no" title="statement not covered" ></span>
767
- <span class="cstat-no" title="statement not covered" > // Show warnings if any (unless --no-warnings)</span>
768
- <span class="cstat-no" title="statement not covered" > if (options.warnings !== false &amp;&amp; scanResult.warnings.length &gt; 0) {</span>
769
- <span class="cstat-no" title="statement not covered" > console.error(</span>
770
- <span class="cstat-no" title="statement not covered" > `\n⚠️ ${scanResult.warnings.length} warning${scanResult.warnings.length &gt; 1 ? 's' : ''} encountered during scanning`,</span>
771
- <span class="cstat-no" title="statement not covered" > );</span>
836
+ <span class="cstat-no" title="statement not covered" > // Apply warning filters (unless --no-warnings overrides)</span>
837
+ <span class="cstat-no" title="statement not covered" > if (options.warnings !== false) {</span>
838
+ <span class="cstat-no" title="statement not covered" > const warningConfig = config.warnings ?? DEFAULT_CONFIG.warnings;</span>
772
839
  <span class="cstat-no" title="statement not covered" ></span>
773
- <span class="cstat-no" title="statement not covered" > // Show all warnings if --all-warnings, otherwise show first 5</span>
774
- <span class="cstat-no" title="statement not covered" > const warningsToShow = options.allWarnings</span>
775
- <span class="cstat-no" title="statement not covered" > ? scanResult.warnings</span>
776
- <span class="cstat-no" title="statement not covered" > : scanResult.warnings.slice(0, 5);</span>
840
+ <span class="cstat-no" title="statement not covered" > // Apply config-based filtering</span>
841
+ <span class="cstat-no" title="statement not covered" > const filteredWarnings = filterWarnings(</span>
842
+ <span class="cstat-no" title="statement not covered" > scanResult.warnings,</span>
843
+ <span class="cstat-no" title="statement not covered" > warningConfig ?? {},</span>
844
+ <span class="cstat-no" title="statement not covered" > );</span>
777
845
  <span class="cstat-no" title="statement not covered" ></span>
778
- <span class="cstat-no" title="statement not covered" > for (const warning of warningsToShow) {</span>
846
+ <span class="cstat-no" title="statement not covered" > // Show warnings if any remain after filtering</span>
847
+ <span class="cstat-no" title="statement not covered" > if (filteredWarnings.length &gt; 0) {</span>
779
848
  <span class="cstat-no" title="statement not covered" > console.error(</span>
780
- <span class="cstat-no" title="statement not covered" > ` ${warning.file}:${warning.line} - ${warning.reason}`,</span>
849
+ <span class="cstat-no" title="statement not covered" > `\n⚠️ ${filteredWarnings.length} warning${filteredWarnings.length &gt; 1 ? 's' : ''} encountered during scanning`,</span>
781
850
  <span class="cstat-no" title="statement not covered" > );</span>
782
- <span class="cstat-no" title="statement not covered" > }</span>
783
851
  <span class="cstat-no" title="statement not covered" ></span>
784
- <span class="cstat-no" title="statement not covered" > if (!options.allWarnings &amp;&amp; scanResult.warnings.length &gt; 5) {</span>
785
- <span class="cstat-no" title="statement not covered" > console.error(</span>
786
- <span class="cstat-no" title="statement not covered" > ` ... and ${scanResult.warnings.length - 5} more warning${scanResult.warnings.length - 5 &gt; 1 ? 's' : ''} (use --all-warnings to see all)`,</span>
787
- <span class="cstat-no" title="statement not covered" > );</span>
852
+ <span class="cstat-no" title="statement not covered" > // Show all warnings if --all-warnings, otherwise show first 5</span>
853
+ <span class="cstat-no" title="statement not covered" > const warningsToShow = options.allWarnings</span>
854
+ <span class="cstat-no" title="statement not covered" > ? filteredWarnings</span>
855
+ <span class="cstat-no" title="statement not covered" > : filteredWarnings.slice(0, 5);</span>
856
+ <span class="cstat-no" title="statement not covered" ></span>
857
+ <span class="cstat-no" title="statement not covered" > for (const warning of warningsToShow) {</span>
858
+ <span class="cstat-no" title="statement not covered" > // Use message field (new) or fallback to reason (legacy)</span>
859
+ <span class="cstat-no" title="statement not covered" > const message =</span>
860
+ <span class="cstat-no" title="statement not covered" > warning.message || warning.reason || 'Unknown warning';</span>
861
+ <span class="cstat-no" title="statement not covered" > console.error(` ${warning.file}:${warning.line} - ${message}`);</span>
862
+ <span class="cstat-no" title="statement not covered" > }</span>
863
+ <span class="cstat-no" title="statement not covered" ></span>
864
+ <span class="cstat-no" title="statement not covered" > if (!options.allWarnings &amp;&amp; filteredWarnings.length &gt; 5) {</span>
865
+ <span class="cstat-no" title="statement not covered" > console.error(</span>
866
+ <span class="cstat-no" title="statement not covered" > ` ... and ${filteredWarnings.length - 5} more warning${filteredWarnings.length - 5 &gt; 1 ? 's' : ''} (use --all-warnings to see all)`,</span>
867
+ <span class="cstat-no" title="statement not covered" > );</span>
868
+ <span class="cstat-no" title="statement not covered" > }</span>
788
869
  <span class="cstat-no" title="statement not covered" > }</span>
789
870
  <span class="cstat-no" title="statement not covered" > }</span>
790
871
  <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
@@ -802,7 +883,7 @@
802
883
  <div class='footer quiet pad2 space-top1 center small'>
803
884
  Code coverage generated by
804
885
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
805
- at 2026-01-26T03:50:54.693Z
886
+ at 2026-02-05T05:58:17.761Z
806
887
  </div>
807
888
  <script src="../../prettify.js"></script>
808
889
  <script>
@@ -1153,7 +1153,7 @@
1153
1153
  <div class='footer quiet pad2 space-top1 center small'>
1154
1154
  Code coverage generated by
1155
1155
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1156
- at 2026-01-26T03:50:54.693Z
1156
+ at 2026-02-05T05:58:17.761Z
1157
1157
  </div>
1158
1158
  <script src="../../prettify.js"></script>
1159
1159
  <script>
@@ -2368,7 +2368,7 @@
2368
2368
  <div class='footer quiet pad2 space-top1 center small'>
2369
2369
  Code coverage generated by
2370
2370
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2371
- at 2026-01-26T03:50:54.693Z
2371
+ at 2026-02-05T05:58:17.761Z
2372
2372
  </div>
2373
2373
  <script src="../../prettify.js"></script>
2374
2374
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2026-01-26T03:50:54.693Z
119
+ at 2026-02-05T05:58:17.761Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -265,7 +265,7 @@
265
265
  <div class='footer quiet pad2 space-top1 center small'>
266
266
  Code coverage generated by
267
267
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
268
- at 2026-01-26T03:50:54.693Z
268
+ at 2026-02-05T05:58:17.761Z
269
269
  </div>
270
270
  <script src="../../prettify.js"></script>
271
271
  <script>
@@ -940,7 +940,7 @@
940
940
  <div class='footer quiet pad2 space-top1 center small'>
941
941
  Code coverage generated by
942
942
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
943
- at 2026-01-26T03:50:54.693Z
943
+ at 2026-02-05T05:58:17.761Z
944
944
  </div>
945
945
  <script src="../../prettify.js"></script>
946
946
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/149</span>
28
+ <span class='fraction'>0/176</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/149</span>
49
+ <span class='fraction'>0/176</span>
50
50
  </div>
51
51
 
52
52
 
@@ -114,13 +114,13 @@
114
114
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
115
115
  </td>
116
116
  <td data-value="0" class="pct low">0%</td>
117
- <td data-value="105" class="abs low">0/105</td>
117
+ <td data-value="132" class="abs low">0/132</td>
118
118
  <td data-value="0" class="pct low">0%</td>
119
119
  <td data-value="1" class="abs low">0/1</td>
120
120
  <td data-value="0" class="pct low">0%</td>
121
121
  <td data-value="1" class="abs low">0/1</td>
122
122
  <td data-value="0" class="pct low">0%</td>
123
- <td data-value="105" class="abs low">0/105</td>
123
+ <td data-value="132" class="abs low">0/132</td>
124
124
  </tr>
125
125
 
126
126
  </tbody>
@@ -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-26T03:50:54.693Z
134
+ at 2026-02-05T05:58:17.761Z
135
135
  </div>
136
136
  <script src="../prettify.js"></script>
137
137
  <script>
@@ -76,7 +76,7 @@
76
76
  <div class='footer quiet pad2 space-top1 center small'>
77
77
  Code coverage generated by
78
78
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
79
- at 2026-01-26T03:50:54.693Z
79
+ at 2026-02-05T05:58:17.761Z
80
80
  </div>
81
81
  <script src="../prettify.js"></script>
82
82
  <script>