@hublo/sentinel 1.4.0 → 1.4.2

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.
@@ -1,6 +1,6 @@
1
1
  # sentinel CLI — command & scenario traces
2
2
 
3
- Version `1.1.0-alpha.3` · live runs against the committed mock monorepo and fixtures (colour stripped, exit codes shown).
3
+ Live runs against the committed mock monorepo and fixtures (colour stripped, exit codes shown).
4
4
  Generated by `scripts/gen-traces.sh`; do not edit by hand.
5
5
 
6
6
  > A check composes **verb × type × location**. Verbs: `--run --inspect --report --status --init (--migrate: planned)`.
@@ -17,10 +17,10 @@ Four mock modules cover each preset: `react-app`, `bff-admin` (nest), `svelte-ap
17
17
  ```console
18
18
  $ sentinel --report --typescript
19
19
  sentinel: --report is deprecated, use --run --json (it still works)
20
- ✓ svelte-app (svelte) typescript — errors=0 implicitAny=0
21
- ✓ bff-admin (nest) typescript — errors=0 implicitAny=deferred
22
- ✓ react-app (react) typescript — errors=0 implicitAny=deferred
23
- ✓ utils (node) typescript — errors=0 implicitAny=deferred
20
+ ✓ svelte-app (svelte) typescript — errors=0 implicitAny=deferred adopted=false preset=null
21
+ ✓ bff-admin (nest) typescript — errors=0 implicitAny=deferred adopted=false preset=null
22
+ ✓ react-app (react) typescript — errors=0 implicitAny=deferred adopted=false preset=null
23
+ ✓ utils (node) typescript — errors=0 implicitAny=deferred adopted=false preset=null
24
24
  4 module(s) [all] in <n>ms
25
25
  # exit: 0
26
26
  ```
@@ -43,9 +43,12 @@ $ sentinel --report --typescript --json 2>/dev/null
43
43
  "ok": true,
44
44
  "status": "ok",
45
45
  "errors": 0,
46
- "implicitAny": 0,
46
+ "implicitAny": "deferred",
47
47
  "diagnostics": [],
48
- "diagnosticsTruncated": false
48
+ "diagnosticsTruncated": false,
49
+ "adopted": false,
50
+ "preset": null,
51
+ "conformant": false
49
52
  },
50
53
  {
51
54
  "project": "bff-admin",
@@ -56,7 +59,10 @@ $ sentinel --report --typescript --json 2>/dev/null
56
59
  "errors": 0,
57
60
  "implicitAny": "deferred",
58
61
  "diagnostics": [],
59
- "diagnosticsTruncated": false
62
+ "diagnosticsTruncated": false,
63
+ "adopted": false,
64
+ "preset": null,
65
+ "conformant": false
60
66
  },
61
67
  {
62
68
  "project": "react-app",
@@ -67,7 +73,10 @@ $ sentinel --report --typescript --json 2>/dev/null
67
73
  "errors": 0,
68
74
  "implicitAny": "deferred",
69
75
  "diagnostics": [],
70
- "diagnosticsTruncated": false
76
+ "diagnosticsTruncated": false,
77
+ "adopted": false,
78
+ "preset": null,
79
+ "conformant": false
71
80
  },
72
81
  {
73
82
  "project": "utils",
@@ -78,7 +87,10 @@ $ sentinel --report --typescript --json 2>/dev/null
78
87
  "errors": 0,
79
88
  "implicitAny": "deferred",
80
89
  "diagnostics": [],
81
- "diagnosticsTruncated": false
90
+ "diagnosticsTruncated": false,
91
+ "adopted": false,
92
+ "preset": null,
93
+ "conformant": false
82
94
  }
83
95
  ]
84
96
  }
@@ -131,7 +143,8 @@ $ sentinel --status --typescript --json 2>/dev/null
131
143
  "adopted": false,
132
144
  "preset": null,
133
145
  "conformant": false,
134
- "drift": []
146
+ "drift": [],
147
+ "unreadable": null
135
148
  },
136
149
  {
137
150
  "project": "bff-admin",
@@ -142,7 +155,8 @@ $ sentinel --status --typescript --json 2>/dev/null
142
155
  "adopted": false,
143
156
  "preset": null,
144
157
  "conformant": false,
145
- "drift": []
158
+ "drift": [],
159
+ "unreadable": null
146
160
  },
147
161
  {
148
162
  "project": "react-app",
@@ -153,7 +167,8 @@ $ sentinel --status --typescript --json 2>/dev/null
153
167
  "adopted": false,
154
168
  "preset": null,
155
169
  "conformant": false,
156
- "drift": []
170
+ "drift": [],
171
+ "unreadable": null
157
172
  },
158
173
  {
159
174
  "project": "utils",
@@ -164,7 +179,8 @@ $ sentinel --status --typescript --json 2>/dev/null
164
179
  "adopted": false,
165
180
  "preset": null,
166
181
  "conformant": false,
167
- "drift": []
182
+ "drift": [],
183
+ "unreadable": null
168
184
  }
169
185
  ],
170
186
  "coverage": {
@@ -180,8 +196,8 @@ $ sentinel --status --typescript --json 2>/dev/null
180
196
 
181
197
  ```console
182
198
  $ sentinel --run --typescript --module bff-admin
183
- sentinel typescript: phase 1 (non-breaking) — deferred: noImplicitAny, noUnusedLocals, noUnusedParameters. Enabled centrally in a later wave; run `sentinel --inspect --typescript` for the list, or `sentinel --run --typescript -- --noImplicitAny` to measure what one would cost today.
184
- ✓ bff-admin (nest) typescript
199
+ sentinel typescript(tsc): no sentinel preset in this module's tsconfig; run `sentinel --init --typescript` to adopt.
200
+ ✓ bff-admin (nest) typescript — adopted=false preset=null
185
201
  1 module(s) [named-module] in <n>ms
186
202
  # exit: 0
187
203
  ```
@@ -193,7 +209,7 @@ sentinel typescript: phase 1 (non-breaking) — deferred: noImplicitAny, noUnuse
193
209
  ```console
194
210
  $ sentinel --report --typescript --module react-app
195
211
  sentinel: --report is deprecated, use --run --json (it still works)
196
- ✓ react-app (react) typescript — errors=0 implicitAny=deferred
212
+ ✓ react-app (react) typescript — errors=0 implicitAny=deferred adopted=false preset=null
197
213
  1 module(s) [named-module] in <n>ms
198
214
  # exit: 0
199
215
  ```
@@ -203,7 +219,7 @@ sentinel: --report is deprecated, use --run --json (it still works)
203
219
  ```console
204
220
  $ sentinel --report --typescript
205
221
  sentinel: --report is deprecated, use --run --json (it still works)
206
- ✓ bff-admin (nest) typescript — errors=0 implicitAny=deferred
222
+ ✓ bff-admin (nest) typescript — errors=0 implicitAny=deferred adopted=false preset=null
207
223
  1 module(s) [cwd-module] in <n>ms
208
224
  # exit: 0
209
225
  ```
@@ -216,12 +232,12 @@ $ sentinel --report --json 2>/dev/null
216
232
  "schemaVersion": 2,
217
233
  "executed": [
218
234
  "lint",
219
- "typescript"
220
- ],
221
- "skipped": [
222
235
  "format",
236
+ "typescript",
223
237
  "build",
224
- "test",
238
+ "test"
239
+ ],
240
+ "skipped": [
225
241
  "static-analysis",
226
242
  "runtime-analysis",
227
243
  "arch"
@@ -233,7 +249,20 @@ $ sentinel --report --json 2>/dev/null
233
249
  "flavour": "svelte",
234
250
  "ok": true,
235
251
  "status": "ok",
236
- "adopted": false
252
+ "adopted": false,
253
+ "preset": null,
254
+ "conformant": false
255
+ },
256
+ {
257
+ "project": "svelte-app",
258
+ "target": "format",
259
+ "flavour": "svelte",
260
+ "ok": true,
261
+ "status": "ok",
262
+ "unformatted": 0,
263
+ "adopted": false,
264
+ "preset": null,
265
+ "conformant": false
237
266
  },
238
267
  {
239
268
  "project": "svelte-app",
@@ -242,9 +271,43 @@ $ sentinel --report --json 2>/dev/null
242
271
  "ok": true,
243
272
  "status": "ok",
244
273
  "errors": 0,
245
- "implicitAny": 0,
274
+ "implicitAny": "deferred",
246
275
  "diagnostics": [],
247
- "diagnosticsTruncated": false
276
+ "diagnosticsTruncated": false,
277
+ "adopted": false,
278
+ "preset": null,
279
+ "conformant": false
280
+ },
281
+ {
282
+ "project": "svelte-app",
283
+ "target": "build",
284
+ "flavour": "svelte",
285
+ "ok": true,
286
+ "status": "ok",
287
+ "vite": "sentinel",
288
+ "ownBuildDependencies": 0,
289
+ "adopted": false,
290
+ "preset": null,
291
+ "conformant": false
292
+ },
293
+ {
294
+ "project": "svelte-app",
295
+ "target": "test",
296
+ "flavour": "svelte",
297
+ "ok": true,
298
+ "status": "ok",
299
+ "suite": null,
300
+ "files": 0,
301
+ "tests": 0,
302
+ "passed": 0,
303
+ "failed": 0,
304
+ "skipped": 0,
305
+ "unloadable": 0,
306
+ "failures": [],
307
+ "failuresTruncated": false,
308
+ "adopted": false,
309
+ "preset": null,
310
+ "conformant": false
248
311
  },
249
312
  {
250
313
  "project": "bff-admin",
@@ -252,7 +315,20 @@ $ sentinel --report --json 2>/dev/null
252
315
  "flavour": "nest",
253
316
  "ok": true,
254
317
  "status": "ok",
255
- "adopted": false
318
+ "adopted": false,
319
+ "preset": null,
320
+ "conformant": false
321
+ },
322
+ {
323
+ "project": "bff-admin",
324
+ "target": "format",
325
+ "flavour": "nest",
326
+ "ok": true,
327
+ "status": "ok",
328
+ "unformatted": 0,
329
+ "adopted": false,
330
+ "preset": null,
331
+ "conformant": false
256
332
  },
257
333
  {
258
334
  "project": "bff-admin",
@@ -263,7 +339,41 @@ $ sentinel --report --json 2>/dev/null
263
339
  "errors": 0,
264
340
  "implicitAny": "deferred",
265
341
  "diagnostics": [],
266
- "diagnosticsTruncated": false
342
+ "diagnosticsTruncated": false,
343
+ "adopted": false,
344
+ "preset": null,
345
+ "conformant": false
346
+ },
347
+ {
348
+ "project": "bff-admin",
349
+ "target": "build",
350
+ "flavour": "nest",
351
+ "ok": true,
352
+ "status": "ok",
353
+ "vite": "sentinel",
354
+ "ownBuildDependencies": 0,
355
+ "adopted": false,
356
+ "preset": null,
357
+ "conformant": false
358
+ },
359
+ {
360
+ "project": "bff-admin",
361
+ "target": "test",
362
+ "flavour": "nest",
363
+ "ok": true,
364
+ "status": "ok",
365
+ "suite": null,
366
+ "files": 0,
367
+ "tests": 0,
368
+ "passed": 0,
369
+ "failed": 0,
370
+ "skipped": 0,
371
+ "unloadable": 0,
372
+ "failures": [],
373
+ "failuresTruncated": false,
374
+ "adopted": false,
375
+ "preset": null,
376
+ "conformant": false
267
377
  },
268
378
  {
269
379
  "project": "react-app",
@@ -271,7 +381,20 @@ $ sentinel --report --json 2>/dev/null
271
381
  "flavour": "react",
272
382
  "ok": true,
273
383
  "status": "ok",
274
- "adopted": false
384
+ "adopted": false,
385
+ "preset": null,
386
+ "conformant": false
387
+ },
388
+ {
389
+ "project": "react-app",
390
+ "target": "format",
391
+ "flavour": "react",
392
+ "ok": true,
393
+ "status": "ok",
394
+ "unformatted": 0,
395
+ "adopted": false,
396
+ "preset": null,
397
+ "conformant": false
275
398
  },
276
399
  {
277
400
  "project": "react-app",
@@ -282,7 +405,41 @@ $ sentinel --report --json 2>/dev/null
282
405
  "errors": 0,
283
406
  "implicitAny": "deferred",
284
407
  "diagnostics": [],
285
- "diagnosticsTruncated": false
408
+ "diagnosticsTruncated": false,
409
+ "adopted": false,
410
+ "preset": null,
411
+ "conformant": false
412
+ },
413
+ {
414
+ "project": "react-app",
415
+ "target": "build",
416
+ "flavour": "react",
417
+ "ok": true,
418
+ "status": "ok",
419
+ "vite": "sentinel",
420
+ "ownBuildDependencies": 0,
421
+ "adopted": false,
422
+ "preset": null,
423
+ "conformant": false
424
+ },
425
+ {
426
+ "project": "react-app",
427
+ "target": "test",
428
+ "flavour": "react",
429
+ "ok": true,
430
+ "status": "ok",
431
+ "suite": null,
432
+ "files": 0,
433
+ "tests": 0,
434
+ "passed": 0,
435
+ "failed": 0,
436
+ "skipped": 0,
437
+ "unloadable": 0,
438
+ "failures": [],
439
+ "failuresTruncated": false,
440
+ "adopted": false,
441
+ "preset": null,
442
+ "conformant": false
286
443
  },
287
444
  {
288
445
  "project": "utils",
@@ -290,7 +447,20 @@ $ sentinel --report --json 2>/dev/null
290
447
  "flavour": "node",
291
448
  "ok": true,
292
449
  "status": "ok",
293
- "adopted": false
450
+ "adopted": false,
451
+ "preset": null,
452
+ "conformant": false
453
+ },
454
+ {
455
+ "project": "utils",
456
+ "target": "format",
457
+ "flavour": "node",
458
+ "ok": true,
459
+ "status": "ok",
460
+ "unformatted": 0,
461
+ "adopted": false,
462
+ "preset": null,
463
+ "conformant": false
294
464
  },
295
465
  {
296
466
  "project": "utils",
@@ -301,7 +471,29 @@ $ sentinel --report --json 2>/dev/null
301
471
  "errors": 0,
302
472
  "implicitAny": "deferred",
303
473
  "diagnostics": [],
304
- "diagnosticsTruncated": false
474
+ "diagnosticsTruncated": false,
475
+ "adopted": false,
476
+ "preset": null,
477
+ "conformant": false
478
+ },
479
+ {
480
+ "project": "utils",
481
+ "target": "test",
482
+ "flavour": "node",
483
+ "ok": true,
484
+ "status": "ok",
485
+ "suite": null,
486
+ "files": 0,
487
+ "tests": 0,
488
+ "passed": 0,
489
+ "failed": 0,
490
+ "skipped": 0,
491
+ "unloadable": 0,
492
+ "failures": [],
493
+ "failuresTruncated": false,
494
+ "adopted": false,
495
+ "preset": null,
496
+ "conformant": false
305
497
  }
306
498
  ]
307
499
  }
@@ -313,7 +505,7 @@ $ sentinel --report --json 2>/dev/null
313
505
 
314
506
  ```console
315
507
  $ sentinel --inspect --typescript --module utils --preset react
316
- ✓ utils (react) typescript — configFile=tsconfig.json configState=extends-base preset=null adopted=false phase=1 deferred=3
508
+ ✓ utils (react) typescript — runner=tsc configFile=tsconfig.json configState=extends-base phase=1 deferred=3 adopted=false preset=null unreadable=null
317
509
  deferred (phase 1, non-breaking):
318
510
  • noImplicitAny — phase 2: the implicit-any migration (TS70xx)
319
511
  • noUnusedLocals — phase 2: unused-local cleanup (TS6133)
@@ -330,12 +522,12 @@ $ sentinel --report --all --json 2>/dev/null
330
522
  "schemaVersion": 2,
331
523
  "executed": [
332
524
  "lint",
333
- "typescript"
334
- ],
335
- "skipped": [
336
525
  "format",
526
+ "typescript",
337
527
  "build",
338
- "test",
528
+ "test"
529
+ ],
530
+ "skipped": [
339
531
  "static-analysis",
340
532
  "runtime-analysis",
341
533
  "arch"
@@ -347,7 +539,20 @@ $ sentinel --report --all --json 2>/dev/null
347
539
  "flavour": "svelte",
348
540
  "ok": true,
349
541
  "status": "ok",
350
- "adopted": false
542
+ "adopted": false,
543
+ "preset": null,
544
+ "conformant": false
545
+ },
546
+ {
547
+ "project": "svelte-app",
548
+ "target": "format",
549
+ "flavour": "svelte",
550
+ "ok": true,
551
+ "status": "ok",
552
+ "unformatted": 0,
553
+ "adopted": false,
554
+ "preset": null,
555
+ "conformant": false
351
556
  },
352
557
  {
353
558
  "project": "svelte-app",
@@ -356,9 +561,43 @@ $ sentinel --report --all --json 2>/dev/null
356
561
  "ok": true,
357
562
  "status": "ok",
358
563
  "errors": 0,
359
- "implicitAny": 0,
564
+ "implicitAny": "deferred",
360
565
  "diagnostics": [],
361
- "diagnosticsTruncated": false
566
+ "diagnosticsTruncated": false,
567
+ "adopted": false,
568
+ "preset": null,
569
+ "conformant": false
570
+ },
571
+ {
572
+ "project": "svelte-app",
573
+ "target": "build",
574
+ "flavour": "svelte",
575
+ "ok": true,
576
+ "status": "ok",
577
+ "vite": "sentinel",
578
+ "ownBuildDependencies": 0,
579
+ "adopted": false,
580
+ "preset": null,
581
+ "conformant": false
582
+ },
583
+ {
584
+ "project": "svelte-app",
585
+ "target": "test",
586
+ "flavour": "svelte",
587
+ "ok": true,
588
+ "status": "ok",
589
+ "suite": null,
590
+ "files": 0,
591
+ "tests": 0,
592
+ "passed": 0,
593
+ "failed": 0,
594
+ "skipped": 0,
595
+ "unloadable": 0,
596
+ "failures": [],
597
+ "failuresTruncated": false,
598
+ "adopted": false,
599
+ "preset": null,
600
+ "conformant": false
362
601
  },
363
602
  {
364
603
  "project": "bff-admin",
@@ -366,7 +605,20 @@ $ sentinel --report --all --json 2>/dev/null
366
605
  "flavour": "nest",
367
606
  "ok": true,
368
607
  "status": "ok",
369
- "adopted": false
608
+ "adopted": false,
609
+ "preset": null,
610
+ "conformant": false
611
+ },
612
+ {
613
+ "project": "bff-admin",
614
+ "target": "format",
615
+ "flavour": "nest",
616
+ "ok": true,
617
+ "status": "ok",
618
+ "unformatted": 0,
619
+ "adopted": false,
620
+ "preset": null,
621
+ "conformant": false
370
622
  },
371
623
  {
372
624
  "project": "bff-admin",
@@ -377,7 +629,41 @@ $ sentinel --report --all --json 2>/dev/null
377
629
  "errors": 0,
378
630
  "implicitAny": "deferred",
379
631
  "diagnostics": [],
380
- "diagnosticsTruncated": false
632
+ "diagnosticsTruncated": false,
633
+ "adopted": false,
634
+ "preset": null,
635
+ "conformant": false
636
+ },
637
+ {
638
+ "project": "bff-admin",
639
+ "target": "build",
640
+ "flavour": "nest",
641
+ "ok": true,
642
+ "status": "ok",
643
+ "vite": "sentinel",
644
+ "ownBuildDependencies": 0,
645
+ "adopted": false,
646
+ "preset": null,
647
+ "conformant": false
648
+ },
649
+ {
650
+ "project": "bff-admin",
651
+ "target": "test",
652
+ "flavour": "nest",
653
+ "ok": true,
654
+ "status": "ok",
655
+ "suite": null,
656
+ "files": 0,
657
+ "tests": 0,
658
+ "passed": 0,
659
+ "failed": 0,
660
+ "skipped": 0,
661
+ "unloadable": 0,
662
+ "failures": [],
663
+ "failuresTruncated": false,
664
+ "adopted": false,
665
+ "preset": null,
666
+ "conformant": false
381
667
  },
382
668
  {
383
669
  "project": "react-app",
@@ -385,7 +671,20 @@ $ sentinel --report --all --json 2>/dev/null
385
671
  "flavour": "react",
386
672
  "ok": true,
387
673
  "status": "ok",
388
- "adopted": false
674
+ "adopted": false,
675
+ "preset": null,
676
+ "conformant": false
677
+ },
678
+ {
679
+ "project": "react-app",
680
+ "target": "format",
681
+ "flavour": "react",
682
+ "ok": true,
683
+ "status": "ok",
684
+ "unformatted": 0,
685
+ "adopted": false,
686
+ "preset": null,
687
+ "conformant": false
389
688
  },
390
689
  {
391
690
  "project": "react-app",
@@ -396,7 +695,41 @@ $ sentinel --report --all --json 2>/dev/null
396
695
  "errors": 0,
397
696
  "implicitAny": "deferred",
398
697
  "diagnostics": [],
399
- "diagnosticsTruncated": false
698
+ "diagnosticsTruncated": false,
699
+ "adopted": false,
700
+ "preset": null,
701
+ "conformant": false
702
+ },
703
+ {
704
+ "project": "react-app",
705
+ "target": "build",
706
+ "flavour": "react",
707
+ "ok": true,
708
+ "status": "ok",
709
+ "vite": "sentinel",
710
+ "ownBuildDependencies": 0,
711
+ "adopted": false,
712
+ "preset": null,
713
+ "conformant": false
714
+ },
715
+ {
716
+ "project": "react-app",
717
+ "target": "test",
718
+ "flavour": "react",
719
+ "ok": true,
720
+ "status": "ok",
721
+ "suite": null,
722
+ "files": 0,
723
+ "tests": 0,
724
+ "passed": 0,
725
+ "failed": 0,
726
+ "skipped": 0,
727
+ "unloadable": 0,
728
+ "failures": [],
729
+ "failuresTruncated": false,
730
+ "adopted": false,
731
+ "preset": null,
732
+ "conformant": false
400
733
  },
401
734
  {
402
735
  "project": "utils",
@@ -404,7 +737,20 @@ $ sentinel --report --all --json 2>/dev/null
404
737
  "flavour": "node",
405
738
  "ok": true,
406
739
  "status": "ok",
407
- "adopted": false
740
+ "adopted": false,
741
+ "preset": null,
742
+ "conformant": false
743
+ },
744
+ {
745
+ "project": "utils",
746
+ "target": "format",
747
+ "flavour": "node",
748
+ "ok": true,
749
+ "status": "ok",
750
+ "unformatted": 0,
751
+ "adopted": false,
752
+ "preset": null,
753
+ "conformant": false
408
754
  },
409
755
  {
410
756
  "project": "utils",
@@ -415,7 +761,29 @@ $ sentinel --report --all --json 2>/dev/null
415
761
  "errors": 0,
416
762
  "implicitAny": "deferred",
417
763
  "diagnostics": [],
418
- "diagnosticsTruncated": false
764
+ "diagnosticsTruncated": false,
765
+ "adopted": false,
766
+ "preset": null,
767
+ "conformant": false
768
+ },
769
+ {
770
+ "project": "utils",
771
+ "target": "test",
772
+ "flavour": "node",
773
+ "ok": true,
774
+ "status": "ok",
775
+ "suite": null,
776
+ "files": 0,
777
+ "tests": 0,
778
+ "passed": 0,
779
+ "failed": 0,
780
+ "skipped": 0,
781
+ "unloadable": 0,
782
+ "failures": [],
783
+ "failuresTruncated": false,
784
+ "adopted": false,
785
+ "preset": null,
786
+ "conformant": false
419
787
  }
420
788
  ]
421
789
  }
@@ -436,27 +804,15 @@ $ sentinel --report --typescript --module bff-admin --json 2>/dev/null
436
804
  "project": "bff-admin",
437
805
  "target": "typescript",
438
806
  "flavour": "nest",
439
- "ok": false,
440
- "status": "failed",
441
- "errors": 2,
807
+ "ok": true,
808
+ "status": "ok",
809
+ "errors": 0,
442
810
  "implicitAny": "deferred",
443
- "diagnostics": [
444
- {
445
- "file": "src/__probe__.ts",
446
- "line": 1,
447
- "col": 7,
448
- "code": "TS2322",
449
- "message": "Type 'string' is not assignable to type 'number'."
450
- },
451
- {
452
- "file": "src/__probe__.ts",
453
- "line": 2,
454
- "col": 7,
455
- "code": "TS2322",
456
- "message": "Type 'number' is not assignable to type 'string'."
457
- }
458
- ],
459
- "diagnosticsTruncated": false
811
+ "diagnostics": [],
812
+ "diagnosticsTruncated": false,
813
+ "adopted": false,
814
+ "preset": null,
815
+ "conformant": false
460
816
  }
461
817
  ]
462
818
  }
@@ -477,20 +833,15 @@ $ sentinel --report --typescript --module bff-admin --json --max-diagnostics 1 2
477
833
  "project": "bff-admin",
478
834
  "target": "typescript",
479
835
  "flavour": "nest",
480
- "ok": false,
481
- "status": "failed",
482
- "errors": 2,
836
+ "ok": true,
837
+ "status": "ok",
838
+ "errors": 0,
483
839
  "implicitAny": "deferred",
484
- "diagnostics": [
485
- {
486
- "file": "src/__probe__.ts",
487
- "line": 1,
488
- "col": 7,
489
- "code": "TS2322",
490
- "message": "Type 'string' is not assignable to type 'number'."
491
- }
492
- ],
493
- "diagnosticsTruncated": true
840
+ "diagnostics": [],
841
+ "diagnosticsTruncated": false,
842
+ "adopted": false,
843
+ "preset": null,
844
+ "conformant": false
494
845
  }
495
846
  ]
496
847
  }
@@ -513,41 +864,7 @@ _before: tsconfig.app.json_
513
864
 
514
865
  ```console
515
866
  $ sentinel --init --typescript --dry-run
516
- dry run: no files written
517
- stripped preset-owned compilerOptions: strict, jsx
518
- run `pnpm install` to fetch @hublo/sentinel (added to the module devDependencies) so `extends` and the typecheck script resolve
519
-
520
- update tsconfig.app.json
521
- {
522
- - "extends": "../../tsconfig.base.json",
523
- - "compilerOptions": { "strict": true, "jsx": "react-jsx", "paths": { "@/*": ["./src/*"] } }
524
- + "extends": [
525
- + "../../tsconfig.base.json",
526
- + "@hublo/sentinel/tsconfig/react"
527
- + ],
528
- + "compilerOptions": {
529
- + "paths": {
530
- + "@/*": [
531
- + "./src/*"
532
- + ]
533
- + }
534
- + }
535
- }
536
-
537
- update package.json
538
- - { "name": "app", "dependencies": { "react": "^19" } }
539
- + {
540
- + "name": "app",
541
- + "dependencies": {
542
- + "react": "^19"
543
- + },
544
- + "scripts": {
545
- + "typecheck": "sentinel --run --typescript"
546
- + },
547
- + "devDependencies": {
548
- + "@hublo/sentinel": "1.1.0-alpha.3"
549
- + }
550
- + }
867
+ typescript: no TypeScript here (looked for .ts, .mts, .cts, .tsx), so there is nothing for tsc to check.
551
868
  # exit: 0
552
869
  ```
553
870
 
@@ -555,17 +872,8 @@ _after: base kept, preset appended, preset-owned keys stripped, paths kept_
555
872
 
556
873
  ```json
557
874
  {
558
- "extends": [
559
- "../../tsconfig.base.json",
560
- "@hublo/sentinel/tsconfig/react"
561
- ],
562
- "compilerOptions": {
563
- "paths": {
564
- "@/*": [
565
- "./src/*"
566
- ]
567
- }
568
- }
875
+ "extends": "../../tsconfig.base.json",
876
+ "compilerOptions": { "strict": true, "jsx": "react-jsx", "paths": { "@/*": ["./src/*"] } }
569
877
  }
570
878
  ```
571
879
 
@@ -574,12 +882,6 @@ _after: base kept, preset appended, preset-owned keys stripped, paths kept_
574
882
  _after: created tsconfig.json_
575
883
 
576
884
  ```json
577
- {
578
- "extends": "@hublo/sentinel/tsconfig/node",
579
- "include": [
580
- "src"
581
- ]
582
- }
583
885
  ```
584
886
 
585
887
  ### 4c. project.json only, no package.json: scaffolds a package.json
@@ -587,16 +889,6 @@ _after: created tsconfig.json_
587
889
  _after: scaffolded package.json_
588
890
 
589
891
  ```json
590
- {
591
- "name": "projonly",
592
- "private": true,
593
- "scripts": {
594
- "typecheck": "sentinel --run --typescript"
595
- },
596
- "devDependencies": {
597
- "@hublo/sentinel": "1.1.0-alpha.3"
598
- }
599
- }
600
892
  ```
601
893
 
602
894
  ## 5. Edge cases (clear message + non-zero exit, never a crash or silent pass)
@@ -605,7 +897,7 @@ _after: scaffolded package.json_
605
897
 
606
898
  ```console
607
899
  $ sentinel
608
- Missing a verb. Supported: --run, --inspect, --init, --migrate, --report, --status.
900
+ Missing a verb. Supported: --run, --inspect, --init, --migrate, --validate, --report, --status.
609
901
  (run "sentinel --help" for usage)
610
902
  # exit: 1
611
903
  ```
@@ -634,9 +926,9 @@ error: unknown option '--lnt'
634
926
  ```console
635
927
  $ sentinel --run --typescript --lint --module bff-admin
636
928
  sentinel lint(oxlint): no .oxlintrc.json in this module; run `sentinel --init --lint` to adopt.
637
- sentinel typescript: phase 1 (non-breaking) — deferred: noImplicitAny, noUnusedLocals, noUnusedParameters. Enabled centrally in a later wave; run `sentinel --inspect --typescript` for the list, or `sentinel --run --typescript -- --noImplicitAny` to measure what one would cost today.
638
- ✓ bff-admin (nest) lint
639
- ✓ bff-admin (nest) typescript
929
+ sentinel typescript(tsc): no sentinel preset in this module's tsconfig; run `sentinel --init --typescript` to adopt.
930
+ ✓ bff-admin (nest) lint — adopted=false preset=null
931
+ ✓ bff-admin (nest) typescript — adopted=false preset=null
640
932
  1 module(s) [named-module] in <n>ms
641
933
  # exit: 0
642
934
  ```
@@ -663,7 +955,7 @@ $ sentinel --run --typescript --dry-run --module bff-admin
663
955
 
664
956
  ```console
665
957
  $ sentinel --init --typescript --preset reactt
666
- sentinel: unknown --preset "reactt". Supported: react, nest, svelte, node.
958
+ sentinel: unknown --preset "reactt". Supported: react, nest, svelte, node, tools.
667
959
  (run "sentinel --help" for usage)
668
960
  # exit: 1
669
961
  ```
@@ -681,8 +973,8 @@ sentinel: module "nope" not found in the workspace.
681
973
 
682
974
  ```console
683
975
  $ sentinel --init --typescript --preset svelte
684
- sentinel (typescript): sentinel does not ship a TypeScript preset named "svelte" yet (shipped: nest, node, react). Nothing was written; this module cannot adopt the TypeScript preset until that preset ships.
685
- # exit: 1
976
+ typescript: sentinel does not ship a TypeScript preset named "svelte" yet (shipped: nest, node, react). Nothing was written, and the module keeps its own tsconfig; the other roles adopt normally.
977
+ # exit: 0
686
978
  ```
687
979
 
688
980
  **bad --max-diagnostics**
@@ -699,14 +991,23 @@ $ sentinel --report --typescript --max-diagnostics 3.9 --module bff-admin
699
991
  ```console
700
992
  $ sentinel --init --dry-run
701
993
  dry run: no files written
702
- wrote .oxlintrc.json extending ./node_modules/@hublo/sentinel/oxlint/nest.json (@hublo/sentinel@1.1.0-alpha.3)
994
+ wrote .oxlintrc.json extending ./node_modules/@hublo/sentinel/lint/nest.json (@hublo/sentinel@1.4.1)
703
995
  2 rule(s) not enforced by this preset (1 no-barrel-files, 1 core). Run --inspect --lint for each rule and why.
704
996
  run `pnpm install`, then `pnpm run lint`
705
997
 
706
998
  create .oxlintrc.json
707
999
  + {
708
1000
  + "extends": [
709
- + "./node_modules/@hublo/sentinel/oxlint/nest.json"
1001
+ + "./node_modules/@hublo/sentinel/lint/nest.json"
1002
+ + ],
1003
+ + "ignorePatterns": [
1004
+ + "**/dist/**",
1005
+ + "**/node_modules/**",
1006
+ + "**/coverage/**",
1007
+ + "**/jest.*.{ts,js,cjs,mjs}",
1008
+ + "**/eslint.config.{js,cjs,mjs}",
1009
+ + "**/*.timestamp*",
1010
+ + "**/*.d.ts"
710
1011
  + ]
711
1012
  + }
712
1013
 
@@ -721,28 +1022,17 @@ $ sentinel --init --dry-run
721
1022
  + "lint": "sentinel --run --lint"
722
1023
  + },
723
1024
  + "devDependencies": {
724
- + "@hublo/sentinel": "1.1.0-alpha.3"
725
- + }
726
- + }
727
-
728
- update project.json
729
- - { "name": "bff-admin", "root": "apps/bff-admin", "projectType": "application", "sourceRoot": "apps/bff-admin/src" }
730
- + {
731
- + "name": "bff-admin",
732
- + "root": "apps/bff-admin",
733
- + "projectType": "application",
734
- + "sourceRoot": "apps/bff-admin/src",
735
- + "targets": {
736
- + "lint": {
737
- + "executor": "nx:run-commands",
738
- + "cache": true,
739
- + "inputs": [
740
- + "default",
741
- + "{projectRoot}/.oxlintrc.json"
742
- + ],
743
- + "options": {
744
- + "cwd": "{projectRoot}",
745
- + "command": "pnpm run lint"
1025
+ + "@hublo/sentinel": "1.4.1"
1026
+ + },
1027
+ + "nx": {
1028
+ + "targets": {
1029
+ + "lint": {
1030
+ + "cache": true,
1031
+ + "inputs": [
1032
+ + "default",
1033
+ + "^default",
1034
+ + "{projectRoot}/.oxlintrc.json"
1035
+ + ]
746
1036
  + }
747
1037
  + }
748
1038
  + }
@@ -754,7 +1044,7 @@ $ sentinel --init --dry-run
754
1044
  - { "extends": "../../tsconfig.base.json", "include": ["src"] }
755
1045
  + { "extends": [
756
1046
  + "../../tsconfig.base.json",
757
- + "@hublo/sentinel/tsconfig/nest"
1047
+ + "@hublo/sentinel/typescript/nest"
758
1048
  + ], "include": ["src"] }
759
1049
 
760
1050
  update package.json
@@ -768,7 +1058,96 @@ $ sentinel --init --dry-run
768
1058
  + "typecheck": "sentinel --run --typescript"
769
1059
  + },
770
1060
  + "devDependencies": {
771
- + "@hublo/sentinel": "1.1.0-alpha.3"
1061
+ + "@hublo/sentinel": "1.4.1"
1062
+ + },
1063
+ + "nx": {
1064
+ + "targets": {
1065
+ + "typecheck": {
1066
+ + "cache": true,
1067
+ + "inputs": [
1068
+ + "default",
1069
+ + "^default",
1070
+ + "{projectRoot}/tsconfig.json"
1071
+ + ]
1072
+ + }
1073
+ + }
1074
+ + }
1075
+ + }
1076
+ build: no Vite config in this module, so there is nothing to point at sentinel. This role moves an existing config's imports; it does not introduce a bundler. If this module builds another way (38 services here build through `@nx/webpack`), the build role does not apply to it.
1077
+ test: this module has no test and no jest leftovers, so there is nothing to do here.
1078
+ dry run: no files written
1079
+ materialized the nest format preset into .oxfmtrc.json (@hublo/sentinel@1.4.1). oxfmt has no `extends`, so the values live here; `sentinel --status --format` reports modules left behind by a preset change
1080
+
1081
+ create .oxfmtrc.json
1082
+ + {
1083
+ + "$sentinel": {
1084
+ + "preset": "nest",
1085
+ + "version": "1.4.1",
1086
+ + "local": []
1087
+ + },
1088
+ + "printWidth": 80,
1089
+ + "semi": false,
1090
+ + "singleQuote": true,
1091
+ + "trailingComma": "all",
1092
+ + "sortPackageJson": false,
1093
+ + "sortImports": {
1094
+ + "customGroups": [
1095
+ + {
1096
+ + "groupName": "workspace",
1097
+ + "elementNamePattern": [
1098
+ + "@hublo/**",
1099
+ + "@shared/**",
1100
+ + "@front/**",
1101
+ + "@network/**"
1102
+ + ]
1103
+ + }
1104
+ + ],
1105
+ + "groups": [
1106
+ + "builtin",
1107
+ + "external",
1108
+ + "workspace",
1109
+ + [
1110
+ + "parent",
1111
+ + "index"
1112
+ + ],
1113
+ + "sibling"
1114
+ + ],
1115
+ + "newlinesBetween": true,
1116
+ + "order": "asc",
1117
+ + "ignoreCase": false
1118
+ + },
1119
+ + "ignorePatterns": [
1120
+ + "**/*.toml"
1121
+ + ]
1122
+ + }
1123
+
1124
+ update package.json
1125
+ - { "name": "bff-admin", "dependencies": { "@nestjs/core": "^10" } }
1126
+ + {
1127
+ + "name": "bff-admin",
1128
+ + "dependencies": {
1129
+ + "@nestjs/core": "^10"
1130
+ + },
1131
+ + "scripts": {
1132
+ + "format": "sentinel --run --format",
1133
+ + "format:fix": "sentinel --run --format --fix"
1134
+ + },
1135
+ + "devDependencies": {
1136
+ + "@hublo/sentinel": "1.4.1"
1137
+ + },
1138
+ + "nx": {
1139
+ + "targets": {
1140
+ + "format": {
1141
+ + "cache": true,
1142
+ + "inputs": [
1143
+ + "default",
1144
+ + "{projectRoot}/.oxfmtrc.json"
1145
+ + ]
1146
+ + },
1147
+ + "format:fix": {
1148
+ + "cache": false
1149
+ + }
1150
+ + }
772
1151
  + }
773
1152
  + }
774
1153
  # exit: 0
@@ -789,7 +1168,7 @@ sentinel: Run sentinel from a module directory or the workspace root (found neit
789
1168
  $ sentinel --report --typescript
790
1169
  sentinel: --report is deprecated, use --run --json (it still works)
791
1170
  sentinel: mixed: preset is ambiguous, detected "react" (from react), also found sails. Pass --preset to be explicit.
792
- ✓ mixed (react) typescript — errors=0 implicitAny=deferred
1171
+ ✓ mixed (react) typescript — errors=0 implicitAny=deferred adopted=false preset=null
793
1172
  1 module(s) [cwd-module] in <n>ms
794
1173
  # exit: 0
795
1174
  ```