instar 1.3.974 → 1.3.976
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.
- package/dist/core/StageTransitionValidator.d.ts.map +1 -1
- package/dist/core/StageTransitionValidator.js +16 -1
- package/dist/core/StageTransitionValidator.js.map +1 -1
- package/dist/monitoring/guardPostureView.d.ts +4 -0
- package/dist/monitoring/guardPostureView.d.ts.map +1 -1
- package/dist/monitoring/guardPostureView.js +11 -1
- package/dist/monitoring/guardPostureView.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +25 -7
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +46 -46
- package/upgrades/1.3.975.md +21 -0
- package/upgrades/1.3.976.md +60 -0
- package/upgrades/eli16/guard-uninspectable-summary.md +35 -0
- package/upgrades/side-effects/guard-uninspectable-summary.md +137 -0
- package/upgrades/side-effects/honest-merge-base-verification.md +132 -0
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-07-26T02:
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-07-26T02:45:59.451Z",
|
|
5
|
+
"instarVersion": "1.3.976",
|
|
6
6
|
"entryCount": 202,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -418,7 +418,7 @@
|
|
|
418
418
|
"type": "route-group",
|
|
419
419
|
"domain": "monitoring",
|
|
420
420
|
"sourcePath": "src/server/routes.ts",
|
|
421
|
-
"contentHash": "
|
|
421
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
422
422
|
"since": "2025-01-01"
|
|
423
423
|
},
|
|
424
424
|
"route-group:agents": {
|
|
@@ -426,7 +426,7 @@
|
|
|
426
426
|
"type": "route-group",
|
|
427
427
|
"domain": "sessions",
|
|
428
428
|
"sourcePath": "src/server/routes.ts",
|
|
429
|
-
"contentHash": "
|
|
429
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
430
430
|
"since": "2025-01-01"
|
|
431
431
|
},
|
|
432
432
|
"route-group:backups": {
|
|
@@ -434,7 +434,7 @@
|
|
|
434
434
|
"type": "route-group",
|
|
435
435
|
"domain": "operations",
|
|
436
436
|
"sourcePath": "src/server/routes.ts",
|
|
437
|
-
"contentHash": "
|
|
437
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
438
438
|
"since": "2025-01-01"
|
|
439
439
|
},
|
|
440
440
|
"route-group:git": {
|
|
@@ -442,7 +442,7 @@
|
|
|
442
442
|
"type": "route-group",
|
|
443
443
|
"domain": "coordination",
|
|
444
444
|
"sourcePath": "src/server/routes.ts",
|
|
445
|
-
"contentHash": "
|
|
445
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
446
446
|
"since": "2025-01-01"
|
|
447
447
|
},
|
|
448
448
|
"route-group:memory": {
|
|
@@ -450,7 +450,7 @@
|
|
|
450
450
|
"type": "route-group",
|
|
451
451
|
"domain": "memory",
|
|
452
452
|
"sourcePath": "src/server/routes.ts",
|
|
453
|
-
"contentHash": "
|
|
453
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
454
454
|
"since": "2025-01-01"
|
|
455
455
|
},
|
|
456
456
|
"route-group:semantic": {
|
|
@@ -458,7 +458,7 @@
|
|
|
458
458
|
"type": "route-group",
|
|
459
459
|
"domain": "memory",
|
|
460
460
|
"sourcePath": "src/server/routes.ts",
|
|
461
|
-
"contentHash": "
|
|
461
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
462
462
|
"since": "2025-01-01"
|
|
463
463
|
},
|
|
464
464
|
"route-group:status": {
|
|
@@ -466,7 +466,7 @@
|
|
|
466
466
|
"type": "route-group",
|
|
467
467
|
"domain": "monitoring",
|
|
468
468
|
"sourcePath": "src/server/routes.ts",
|
|
469
|
-
"contentHash": "
|
|
469
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
470
470
|
"since": "2025-01-01"
|
|
471
471
|
},
|
|
472
472
|
"route-group:capabilities": {
|
|
@@ -474,7 +474,7 @@
|
|
|
474
474
|
"type": "route-group",
|
|
475
475
|
"domain": "mapping",
|
|
476
476
|
"sourcePath": "src/server/routes.ts",
|
|
477
|
-
"contentHash": "
|
|
477
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
478
478
|
"since": "2025-01-01"
|
|
479
479
|
},
|
|
480
480
|
"route-group:project-map": {
|
|
@@ -482,7 +482,7 @@
|
|
|
482
482
|
"type": "route-group",
|
|
483
483
|
"domain": "mapping",
|
|
484
484
|
"sourcePath": "src/server/routes.ts",
|
|
485
|
-
"contentHash": "
|
|
485
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
486
486
|
"since": "2025-01-01"
|
|
487
487
|
},
|
|
488
488
|
"route-group:coherence": {
|
|
@@ -490,7 +490,7 @@
|
|
|
490
490
|
"type": "route-group",
|
|
491
491
|
"domain": "coherence",
|
|
492
492
|
"sourcePath": "src/server/routes.ts",
|
|
493
|
-
"contentHash": "
|
|
493
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
494
494
|
"since": "2025-01-01"
|
|
495
495
|
},
|
|
496
496
|
"route-group:topic-bindings": {
|
|
@@ -498,7 +498,7 @@
|
|
|
498
498
|
"type": "route-group",
|
|
499
499
|
"domain": "sessions",
|
|
500
500
|
"sourcePath": "src/server/routes.ts",
|
|
501
|
-
"contentHash": "
|
|
501
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
502
502
|
"since": "2025-01-01"
|
|
503
503
|
},
|
|
504
504
|
"route-group:context": {
|
|
@@ -506,7 +506,7 @@
|
|
|
506
506
|
"type": "route-group",
|
|
507
507
|
"domain": "context",
|
|
508
508
|
"sourcePath": "src/server/routes.ts",
|
|
509
|
-
"contentHash": "
|
|
509
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
510
510
|
"since": "2025-01-01"
|
|
511
511
|
},
|
|
512
512
|
"route-group:scope-coherence": {
|
|
@@ -514,7 +514,7 @@
|
|
|
514
514
|
"type": "route-group",
|
|
515
515
|
"domain": "coherence",
|
|
516
516
|
"sourcePath": "src/server/routes.ts",
|
|
517
|
-
"contentHash": "
|
|
517
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
518
518
|
"since": "2025-01-01"
|
|
519
519
|
},
|
|
520
520
|
"route-group:canonical-state": {
|
|
@@ -522,7 +522,7 @@
|
|
|
522
522
|
"type": "route-group",
|
|
523
523
|
"domain": "state",
|
|
524
524
|
"sourcePath": "src/server/routes.ts",
|
|
525
|
-
"contentHash": "
|
|
525
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
526
526
|
"since": "2025-01-01"
|
|
527
527
|
},
|
|
528
528
|
"route-group:ci": {
|
|
@@ -530,7 +530,7 @@
|
|
|
530
530
|
"type": "route-group",
|
|
531
531
|
"domain": "monitoring",
|
|
532
532
|
"sourcePath": "src/server/routes.ts",
|
|
533
|
-
"contentHash": "
|
|
533
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
534
534
|
"since": "2025-01-01"
|
|
535
535
|
},
|
|
536
536
|
"route-group:sessions": {
|
|
@@ -538,7 +538,7 @@
|
|
|
538
538
|
"type": "route-group",
|
|
539
539
|
"domain": "sessions",
|
|
540
540
|
"sourcePath": "src/server/routes.ts",
|
|
541
|
-
"contentHash": "
|
|
541
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
542
542
|
"since": "2025-01-01"
|
|
543
543
|
},
|
|
544
544
|
"route-group:jobs": {
|
|
@@ -546,7 +546,7 @@
|
|
|
546
546
|
"type": "route-group",
|
|
547
547
|
"domain": "scheduling",
|
|
548
548
|
"sourcePath": "src/server/routes.ts",
|
|
549
|
-
"contentHash": "
|
|
549
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
550
550
|
"since": "2025-01-01"
|
|
551
551
|
},
|
|
552
552
|
"route-group:skip-ledger": {
|
|
@@ -554,7 +554,7 @@
|
|
|
554
554
|
"type": "route-group",
|
|
555
555
|
"domain": "scheduling",
|
|
556
556
|
"sourcePath": "src/server/routes.ts",
|
|
557
|
-
"contentHash": "
|
|
557
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
558
558
|
"since": "2025-01-01"
|
|
559
559
|
},
|
|
560
560
|
"route-group:telegram": {
|
|
@@ -562,7 +562,7 @@
|
|
|
562
562
|
"type": "route-group",
|
|
563
563
|
"domain": "communication",
|
|
564
564
|
"sourcePath": "src/server/routes.ts",
|
|
565
|
-
"contentHash": "
|
|
565
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
566
566
|
"since": "2025-01-01"
|
|
567
567
|
},
|
|
568
568
|
"route-group:attention": {
|
|
@@ -570,7 +570,7 @@
|
|
|
570
570
|
"type": "route-group",
|
|
571
571
|
"domain": "communication",
|
|
572
572
|
"sourcePath": "src/server/routes.ts",
|
|
573
|
-
"contentHash": "
|
|
573
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
574
574
|
"since": "2025-01-01"
|
|
575
575
|
},
|
|
576
576
|
"route-group:relationships": {
|
|
@@ -578,7 +578,7 @@
|
|
|
578
578
|
"type": "route-group",
|
|
579
579
|
"domain": "relationships",
|
|
580
580
|
"sourcePath": "src/server/routes.ts",
|
|
581
|
-
"contentHash": "
|
|
581
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
582
582
|
"since": "2025-01-01"
|
|
583
583
|
},
|
|
584
584
|
"route-group:feedback": {
|
|
@@ -586,7 +586,7 @@
|
|
|
586
586
|
"type": "route-group",
|
|
587
587
|
"domain": "feedback",
|
|
588
588
|
"sourcePath": "src/server/routes.ts",
|
|
589
|
-
"contentHash": "
|
|
589
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
590
590
|
"since": "2025-01-01"
|
|
591
591
|
},
|
|
592
592
|
"route-group:updates": {
|
|
@@ -594,7 +594,7 @@
|
|
|
594
594
|
"type": "route-group",
|
|
595
595
|
"domain": "updates",
|
|
596
596
|
"sourcePath": "src/server/routes.ts",
|
|
597
|
-
"contentHash": "
|
|
597
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
598
598
|
"since": "2025-01-01"
|
|
599
599
|
},
|
|
600
600
|
"route-group:dispatches": {
|
|
@@ -602,7 +602,7 @@
|
|
|
602
602
|
"type": "route-group",
|
|
603
603
|
"domain": "dispatches",
|
|
604
604
|
"sourcePath": "src/server/routes.ts",
|
|
605
|
-
"contentHash": "
|
|
605
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
606
606
|
"since": "2025-01-01"
|
|
607
607
|
},
|
|
608
608
|
"route-group:quota": {
|
|
@@ -610,7 +610,7 @@
|
|
|
610
610
|
"type": "route-group",
|
|
611
611
|
"domain": "monitoring",
|
|
612
612
|
"sourcePath": "src/server/routes.ts",
|
|
613
|
-
"contentHash": "
|
|
613
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
614
614
|
"since": "2025-01-01"
|
|
615
615
|
},
|
|
616
616
|
"route-group:publishing": {
|
|
@@ -618,7 +618,7 @@
|
|
|
618
618
|
"type": "route-group",
|
|
619
619
|
"domain": "publishing",
|
|
620
620
|
"sourcePath": "src/server/routes.ts",
|
|
621
|
-
"contentHash": "
|
|
621
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
622
622
|
"since": "2025-01-01"
|
|
623
623
|
},
|
|
624
624
|
"route-group:private-views": {
|
|
@@ -626,7 +626,7 @@
|
|
|
626
626
|
"type": "route-group",
|
|
627
627
|
"domain": "publishing",
|
|
628
628
|
"sourcePath": "src/server/routes.ts",
|
|
629
|
-
"contentHash": "
|
|
629
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
630
630
|
"since": "2025-01-01"
|
|
631
631
|
},
|
|
632
632
|
"route-group:tunnel": {
|
|
@@ -634,7 +634,7 @@
|
|
|
634
634
|
"type": "route-group",
|
|
635
635
|
"domain": "networking",
|
|
636
636
|
"sourcePath": "src/server/routes.ts",
|
|
637
|
-
"contentHash": "
|
|
637
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
638
638
|
"since": "2025-01-01"
|
|
639
639
|
},
|
|
640
640
|
"route-group:events": {
|
|
@@ -642,7 +642,7 @@
|
|
|
642
642
|
"type": "route-group",
|
|
643
643
|
"domain": "networking",
|
|
644
644
|
"sourcePath": "src/server/routes.ts",
|
|
645
|
-
"contentHash": "
|
|
645
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
646
646
|
"since": "2025-01-01"
|
|
647
647
|
},
|
|
648
648
|
"route-group:evolution": {
|
|
@@ -650,7 +650,7 @@
|
|
|
650
650
|
"type": "route-group",
|
|
651
651
|
"domain": "evolution",
|
|
652
652
|
"sourcePath": "src/server/routes.ts",
|
|
653
|
-
"contentHash": "
|
|
653
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
654
654
|
"since": "2025-01-01"
|
|
655
655
|
},
|
|
656
656
|
"route-group:watchdog": {
|
|
@@ -658,7 +658,7 @@
|
|
|
658
658
|
"type": "route-group",
|
|
659
659
|
"domain": "monitoring",
|
|
660
660
|
"sourcePath": "src/server/routes.ts",
|
|
661
|
-
"contentHash": "
|
|
661
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
662
662
|
"since": "2025-01-01"
|
|
663
663
|
},
|
|
664
664
|
"route-group:topic-memory": {
|
|
@@ -666,7 +666,7 @@
|
|
|
666
666
|
"type": "route-group",
|
|
667
667
|
"domain": "memory",
|
|
668
668
|
"sourcePath": "src/server/routes.ts",
|
|
669
|
-
"contentHash": "
|
|
669
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
670
670
|
"since": "2025-01-01"
|
|
671
671
|
},
|
|
672
672
|
"route-group:state-sync": {
|
|
@@ -674,7 +674,7 @@
|
|
|
674
674
|
"type": "route-group",
|
|
675
675
|
"domain": "coordination",
|
|
676
676
|
"sourcePath": "src/server/routes.ts",
|
|
677
|
-
"contentHash": "
|
|
677
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
678
678
|
"since": "2025-01-01"
|
|
679
679
|
},
|
|
680
680
|
"route-group:intent": {
|
|
@@ -682,7 +682,7 @@
|
|
|
682
682
|
"type": "route-group",
|
|
683
683
|
"domain": "intent",
|
|
684
684
|
"sourcePath": "src/server/routes.ts",
|
|
685
|
-
"contentHash": "
|
|
685
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
686
686
|
"since": "2025-01-01"
|
|
687
687
|
},
|
|
688
688
|
"route-group:triage": {
|
|
@@ -690,7 +690,7 @@
|
|
|
690
690
|
"type": "route-group",
|
|
691
691
|
"domain": "safety",
|
|
692
692
|
"sourcePath": "src/server/routes.ts",
|
|
693
|
-
"contentHash": "
|
|
693
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
694
694
|
"since": "2025-01-01"
|
|
695
695
|
},
|
|
696
696
|
"route-group:operations": {
|
|
@@ -698,7 +698,7 @@
|
|
|
698
698
|
"type": "route-group",
|
|
699
699
|
"domain": "safety",
|
|
700
700
|
"sourcePath": "src/server/routes.ts",
|
|
701
|
-
"contentHash": "
|
|
701
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
702
702
|
"since": "2025-01-01"
|
|
703
703
|
},
|
|
704
704
|
"route-group:sentinel": {
|
|
@@ -706,7 +706,7 @@
|
|
|
706
706
|
"type": "route-group",
|
|
707
707
|
"domain": "safety",
|
|
708
708
|
"sourcePath": "src/server/routes.ts",
|
|
709
|
-
"contentHash": "
|
|
709
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
710
710
|
"since": "2025-01-01"
|
|
711
711
|
},
|
|
712
712
|
"route-group:trust": {
|
|
@@ -714,7 +714,7 @@
|
|
|
714
714
|
"type": "route-group",
|
|
715
715
|
"domain": "safety",
|
|
716
716
|
"sourcePath": "src/server/routes.ts",
|
|
717
|
-
"contentHash": "
|
|
717
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
718
718
|
"since": "2025-01-01"
|
|
719
719
|
},
|
|
720
720
|
"route-group:monitoring": {
|
|
@@ -722,7 +722,7 @@
|
|
|
722
722
|
"type": "route-group",
|
|
723
723
|
"domain": "monitoring",
|
|
724
724
|
"sourcePath": "src/server/routes.ts",
|
|
725
|
-
"contentHash": "
|
|
725
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
726
726
|
"since": "2025-01-01"
|
|
727
727
|
},
|
|
728
728
|
"route-group:commitments": {
|
|
@@ -730,7 +730,7 @@
|
|
|
730
730
|
"type": "route-group",
|
|
731
731
|
"domain": "commitments",
|
|
732
732
|
"sourcePath": "src/server/routes.ts",
|
|
733
|
-
"contentHash": "
|
|
733
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
734
734
|
"since": "2025-01-01"
|
|
735
735
|
},
|
|
736
736
|
"route-group:episodes": {
|
|
@@ -738,7 +738,7 @@
|
|
|
738
738
|
"type": "route-group",
|
|
739
739
|
"domain": "memory",
|
|
740
740
|
"sourcePath": "src/server/routes.ts",
|
|
741
|
-
"contentHash": "
|
|
741
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
742
742
|
"since": "2025-01-01"
|
|
743
743
|
},
|
|
744
744
|
"route-group:messages": {
|
|
@@ -746,7 +746,7 @@
|
|
|
746
746
|
"type": "route-group",
|
|
747
747
|
"domain": "coordination",
|
|
748
748
|
"sourcePath": "src/server/routes.ts",
|
|
749
|
-
"contentHash": "
|
|
749
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
750
750
|
"since": "2025-01-01"
|
|
751
751
|
},
|
|
752
752
|
"route-group:system-reviews": {
|
|
@@ -754,7 +754,7 @@
|
|
|
754
754
|
"type": "route-group",
|
|
755
755
|
"domain": "monitoring",
|
|
756
756
|
"sourcePath": "src/server/routes.ts",
|
|
757
|
-
"contentHash": "
|
|
757
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
758
758
|
"since": "2025-01-01"
|
|
759
759
|
},
|
|
760
760
|
"route-group:machine-mesh": {
|
|
@@ -770,7 +770,7 @@
|
|
|
770
770
|
"type": "route-group",
|
|
771
771
|
"domain": "security",
|
|
772
772
|
"sourcePath": "src/server/routes.ts",
|
|
773
|
-
"contentHash": "
|
|
773
|
+
"contentHash": "c55d95e9a2af479f5ae1cbb258308581b4f272b7b7722c5e876f636089d5acce",
|
|
774
774
|
"since": "2025-01-01"
|
|
775
775
|
},
|
|
776
776
|
"cli:init": {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
Fixed the guard-posture summary's false all-clear shape. `GET /guards` now returns `summary.loadBearingUninspectableKeys`, listing load-bearing guards whose existing posture is `missing`, `errored`, `on-stale`, or `off-runtime-divergent`. These guards remain excluded from `loadBearingGapKeys`, and `GuardPostureProbe` keeps emitting only their existing anomaly class, so the read surface becomes complete without changing classification or double-alarming.
|
|
9
|
+
|
|
10
|
+
## What to Tell Your User
|
|
11
|
+
|
|
12
|
+
The guard-health readout now distinguishes critical protections that are silently off from critical protections whose condition cannot currently be inspected. A clean critical-gap list no longer looks like proof that every critical protection was checked.
|
|
13
|
+
|
|
14
|
+
## Summary of New Capabilities
|
|
15
|
+
|
|
16
|
+
- Guard health now names load-bearing protections whose condition is missing, errored, stale, or contradicted by runtime state.
|
|
17
|
+
|
|
18
|
+
## Evidence
|
|
19
|
+
|
|
20
|
+
- Refusal-first unit coverage constructs an errored load-bearing guard and requires exclusion from the gap list, inclusion in the uninspectable list, and exactly one existing errored probe anomaly.
|
|
21
|
+
- Unit coverage pins all four uninspectable posture classes. Integration and end-to-end lifecycle coverage require the new summary field to survive the real authenticated `GET /guards` route.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
**The projects `/advance` merge-base check no longer reports "not on main" when it was simply not
|
|
9
|
+
allowed to look.** Found 2026-07-25 recording PR #1641 as merged — the step had never once
|
|
10
|
+
succeeded on a dogfooding agent.
|
|
11
|
+
|
|
12
|
+
- **The read now declares itself a read.** `gitMergeBaseIsAncestor` called
|
|
13
|
+
`SafeGitExecutor.readSync` without `sourceTreeReadOk: true`. A project's `targetRepoPath` IS an
|
|
14
|
+
instar source tree on a dogfooding agent, so `SourceTreeGuard` refused the query every time.
|
|
15
|
+
`merge-base` is already in `SOURCE_TREE_READ_TIER_VERBS` — the permission existed and was never
|
|
16
|
+
requested.
|
|
17
|
+
- **A refusal is no longer translated into a fact (the load-bearing half).** The old
|
|
18
|
+
`catch { return false }` turned a guard refusal, a missing binary, a bad revision (exit 128) and
|
|
19
|
+
a timeout into the same `false`, which the validator surfaced as `MERGE_COMMIT_UNREACHABLE` —
|
|
20
|
+
"this merge is not on main" — about a merge that demonstrably was. Now ONLY git's documented exit
|
|
21
|
+
status 1 means "not an ancestor"; every other failure is rethrown and
|
|
22
|
+
`StageTransitionValidator` returns a new distinct code **`MERGE_BASE_UNVERIFIABLE`** carrying the
|
|
23
|
+
underlying cause.
|
|
24
|
+
|
|
25
|
+
Nothing is loosened: a genuine non-ancestor still fails with `MERGE_COMMIT_UNREACHABLE` (asserted
|
|
26
|
+
in its own test so the boundary is not blurred in the other direction).
|
|
27
|
+
|
|
28
|
+
Reproduced under the server's exact environment before fixing: real merge SHA without the flag →
|
|
29
|
+
`SourceTreeGuardError`; with the flag → ancestor TRUE; a real commit not on main → status 1; a
|
|
30
|
+
nonexistent SHA → status 128 (unanswerable, which the old code also called a negative).
|
|
31
|
+
|
|
32
|
+
## What to Tell Your User
|
|
33
|
+
|
|
34
|
+
If you use projects to track work, marking an item as merged should now succeed where it previously
|
|
35
|
+
failed with a confusing "merge commit is not reachable from main" — especially on an agent whose
|
|
36
|
+
target repository is the instar source tree. If the check genuinely cannot run, you now get "could
|
|
37
|
+
not verify" with the reason instead of a wrong factual claim.
|
|
38
|
+
|
|
39
|
+
## Summary of New Capabilities
|
|
40
|
+
|
|
41
|
+
- `MERGE_BASE_UNVERIFIABLE` — a new stage-transition refusal code distinguishing "could not check"
|
|
42
|
+
from "checked and it is not there". The reason string carries the underlying cause.
|
|
43
|
+
|
|
44
|
+
## Evidence
|
|
45
|
+
|
|
46
|
+
- `tests/unit/StageTransitionValidator.test.ts` — a throwing helper yields
|
|
47
|
+
`MERGE_BASE_UNVERIFIABLE`; a helper returning false still yields `MERGE_COMMIT_UNREACHABLE`.
|
|
48
|
+
- `tests/unit/projects-advance-mergebase-wiring.test.ts` — static wiring: the callsite carries
|
|
49
|
+
`sourceTreeReadOk: true`, the helper tests `status === 1` and rethrows otherwise, the bare
|
|
50
|
+
`catch { return false }` shape cannot reappear, and the new code comes from a `catch`. Static
|
|
51
|
+
rather than mocked because mocking `SafeGitExecutor` is how the existing tests masked this gap.
|
|
52
|
+
|
|
53
|
+
## Known Gap (measured, tracked)
|
|
54
|
+
|
|
55
|
+
This is the SECOND instance of this bug class (the first, in May, hit failure-learning's git reads;
|
|
56
|
+
its ratchet was scoped to that subsystem only). Measured exposure: **34 of 46**
|
|
57
|
+
`SafeGitExecutor.readSync` callsites in `src/` do not pass `sourceTreeReadOk: true`. Most are
|
|
58
|
+
legitimate (targets that are not the instar source tree). They are deliberately NOT swept here —
|
|
59
|
+
flagging 34 callsites blind would relax a safety guard on evidence nobody has. The follow-up is a
|
|
60
|
+
per-callsite audit then a repo-wide default-plus-declared-exception ratchet. <!-- tracked: CMT-1035 -->
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Guard inspectability summary — Plain-English Overview
|
|
2
|
+
|
|
3
|
+
> The one-line version: the guard-health readout now says when a critical protection cannot be inspected, instead of letting an empty gap list look like proof that every critical path is protected.
|
|
4
|
+
|
|
5
|
+
## The problem in one breath
|
|
6
|
+
|
|
7
|
+
The guard inventory has a list of load-bearing guards that are silently unguarded. That list is intentionally narrow: a missing, errored, stale, or runtime-contradicting guard is already alarming under its own posture class, so adding it to the gap class would produce two alarms for one problem. But the read surface did not explain that distinction. A reader could see an empty gap list and honestly conclude that no critical path was unguarded even though a load-bearing guard could not be inspected at all.
|
|
8
|
+
|
|
9
|
+
## What already exists
|
|
10
|
+
|
|
11
|
+
- **Guard posture rows** — classify each guard as confirmed, stale, missing, errored, off, dry-run, or runtime-divergent.
|
|
12
|
+
- **Load-bearing gap list** — names critical guards that are silently off by default or stuck in dry-run past their soak window.
|
|
13
|
+
- **Guard posture probe** — alarms missing, errored, stale, and runtime-divergent guards under their existing classes, without duplicating a load-bearing-gap alarm.
|
|
14
|
+
|
|
15
|
+
## What this adds
|
|
16
|
+
|
|
17
|
+
The summary returned by the guards read endpoint gains a separate list of load-bearing guards whose posture is uninspectable. The list contains only the four existing loud classes: missing, errored, stale while on, and enabled in configuration while reporting off at runtime.
|
|
18
|
+
|
|
19
|
+
This is additive observability. It does not change a guard row's classification, enable or disable any guard, alter the load-bearing gap definition, or create another probe anomaly.
|
|
20
|
+
|
|
21
|
+
## The safeguards
|
|
22
|
+
|
|
23
|
+
**Prevents a false all-clear.** A clean gap list can now be read beside the uninspectable list, so absence from one class is not mistaken for proof of complete inspection.
|
|
24
|
+
|
|
25
|
+
**Prevents double-alarming.** The probe remains unchanged. A load-bearing guard with an errored getter still produces one existing errored anomaly and no load-bearing-gap episode.
|
|
26
|
+
|
|
27
|
+
**Refuses regression at every live seam.** Unit coverage proves all four allowed postures and the no-double-alarm rule. Integration and end-to-end coverage call the real authenticated guards route and require the new list to survive the response.
|
|
28
|
+
|
|
29
|
+
## What ships when
|
|
30
|
+
|
|
31
|
+
One additive summary field ships with the existing guards endpoint. Older consumers can ignore it; consumers that need an honest critical-path reading can use it immediately.
|
|
32
|
+
|
|
33
|
+
## What you actually need to decide
|
|
34
|
+
|
|
35
|
+
Does the PR preserve the existing classification and alarm behavior while making incomplete load-bearing inspection explicit?
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Side-Effects Review — Guard load-bearing inspectability summary
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `guard-uninspectable-summary`
|
|
4
|
+
**Date:** `2026-07-25`
|
|
5
|
+
**Author:** `Instar Agent (instar-codey)`
|
|
6
|
+
**Second-pass reviewer:** `guard_uninspectable_review`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
`src/monitoring/guardPostureView.ts` adds one field to `GuardsSummary`: `loadBearingUninspectableKeys`. `buildGuardInventory` fills it when a load-bearing row retains one of four existing effective postures: `missing`, `errored`, `on-stale`, or `off-runtime-divergent`. The existing row classification, `loadBearingGap` flag, `loadBearingGapKeys`, heartbeat projection, and `GuardPostureProbe` anomaly logic are unchanged. Because `GET /guards` returns `inventory.summary` directly, the additive field reaches the authenticated local and pool read surfaces without a route-specific copy step.
|
|
11
|
+
|
|
12
|
+
## Decision-point inventory
|
|
13
|
+
|
|
14
|
+
No block/allow or actuation decision point is added or modified. The change adds a read-only projection over already-derived guard rows. Existing guard classification and probe alert decisions are passed through unchanged.
|
|
15
|
+
|
|
16
|
+
- `buildGuardInventory` summary assembly — **modify** — adds an orthogonal completeness list from the closed effective-state vocabulary.
|
|
17
|
+
- `GuardPostureProbe` — **pass-through** — consumes guard rows exactly as before; it does not consume the new summary field.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1. Over-block
|
|
22
|
+
|
|
23
|
+
**What legitimate inputs does this change reject that it shouldn't?**
|
|
24
|
+
|
|
25
|
+
No block/allow surface — over-block not applicable. Every existing request and guard posture remains accepted and classified as before.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 2. Under-block
|
|
30
|
+
|
|
31
|
+
**What failure modes does this still miss?**
|
|
32
|
+
|
|
33
|
+
The requested `GET /guards` surface is complete for the named load-bearing inspectability classes. The compact heartbeat posture is a second rendering of the earlier shape: it carries `loadBearingGapKeys` and aggregate loud-class counts, but not keyed load-bearing inspectability. It remains unchanged by instruction; this finding was reported directly to Echo and was neither fixed nor filed.
|
|
34
|
+
|
|
35
|
+
The new list also deliberately excludes `diverged-pending-restart`, `on-unverified`, and non-load-bearing rows because the requested closed set is exactly `missing`, `errored`, `on-stale`, and `off-runtime-divergent`.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 3. Level-of-abstraction fit
|
|
40
|
+
|
|
41
|
+
**Is this at the right layer?**
|
|
42
|
+
|
|
43
|
+
Yes. `buildGuardInventory` already owns the canonical `GuardsSummary` derived from the complete row inventory. Computing the list there avoids re-deriving state in `routes.ts`, keeps local and pool responses aligned, and leaves the probe's separate anomaly authority untouched. The membership check is a projection over a closed enum, not a new detector or competing classifier.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 4. Signal vs authority compliance
|
|
48
|
+
|
|
49
|
+
**Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
|
|
50
|
+
|
|
51
|
+
**Does this change hold blocking authority with brittle logic?**
|
|
52
|
+
|
|
53
|
+
- [ ] No — this change produces a signal consumed by an existing smart gate.
|
|
54
|
+
- [x] No — this change has no block/allow surface.
|
|
55
|
+
- [ ] Yes — but the logic is a smart gate with full conversational context (LLM-backed with recent history or equivalent).
|
|
56
|
+
- [ ] ⚠️ Yes, with brittle logic — STOP. Reshape the design.
|
|
57
|
+
|
|
58
|
+
The new field is an additive observation on a read surface. It cannot enable, disable, classify, alert, suppress, or authorize anything. `GuardPostureProbe` remains the anomaly consumer and sees the same rows it saw before.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 4b. Judgment-point check (Judgment Within Floors standard)
|
|
63
|
+
|
|
64
|
+
No new static heuristic is added at a competing-signals decision point. The four-member set is the request's closed structural definition of "load-bearing but uninspectable"; it does not resolve conflicting evidence or make a behavioral decision. The normative effective-state precedence table remains unchanged.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 5. Interactions
|
|
69
|
+
|
|
70
|
+
**Does this interact with existing checks, recovery paths, or infrastructure?**
|
|
71
|
+
|
|
72
|
+
- **Shadowing:** none. The field is assembled after each row has already been classified.
|
|
73
|
+
- **Double-fire:** structurally prevented by leaving `GuardPostureProbe` unchanged. The required errored-row test produces one acute `errored` item and no `guard-posture-loadbearing` item.
|
|
74
|
+
- **Races:** none. `buildGuardInventory` is pure over the caller's one-read snapshot and synchronous registry reads.
|
|
75
|
+
- **Feedback loops:** none. `GET /guards` does not feed the field back into classification or actuation.
|
|
76
|
+
- **Compatibility:** additive JSON field. Consumers that do not know it ignore it; consumers that need completeness can read it.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 6. External surfaces
|
|
81
|
+
|
|
82
|
+
**Does this change anything visible outside the immediate code path?**
|
|
83
|
+
|
|
84
|
+
Yes: authenticated callers of `GET /guards` and `GET /guards?scope=pool` see `summary.loadBearingUninspectableKeys`. No row fields, response status codes, authentication rules, persistent files, notices, or external-service calls change. The route's timing remains one linear pass over the existing guard rows.
|
|
85
|
+
|
|
86
|
+
No operator-facing action is added. This is a read-only diagnostic field; there is no new grant, approval, destructive operation, or phone-only workflow.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 6b. Operator-surface quality (Operator-Surface Quality standard)
|
|
91
|
+
|
|
92
|
+
No dashboard renderer, approval page, or operator action surface is changed — not applicable. The API field is machine-readable supporting data, not primary dashboard content.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 7. Multi-machine posture (Cross-Machine Coherence)
|
|
97
|
+
|
|
98
|
+
**Posture: proxied-on-read.** Each machine derives its own guard truth from machine-local configuration and runtime getters. `GET /guards?scope=pool` already fetches each known peer's plain `GET /guards` response, so the new summary list travels with that peer's full response and remains attributed to the machine that observed it.
|
|
99
|
+
|
|
100
|
+
The change emits no user-facing notices, holds no durable state, and generates no URLs. Topic transfer cannot strand it because it is recomputed on every read.
|
|
101
|
+
|
|
102
|
+
The compact heartbeat posture does not gain this keyed list; that separate rendering was reported to Echo without alteration.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 8. Rollback cost
|
|
107
|
+
|
|
108
|
+
Pure additive code change. Revert the summary interface member, state set, initializer, and push line, then ship a patch. There is no data migration, persistent state cleanup, agent reset, or user-facing repair. During rollback, callers return to the earlier incomplete summary shape.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Conclusion
|
|
113
|
+
|
|
114
|
+
The change is narrow and correctly layered: it makes the read model honest without perturbing the classifications and alarms that already own these failure states. Refusal-first coverage pins the absent-field defect, all four exact uninspectable classes, no double-alarm behavior, the real authenticated route, and the live HTTP lifecycle. The heartbeat rendering remains an explicitly reported, unchanged finding under Echo's filing authority.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Second-pass review (if required)
|
|
119
|
+
|
|
120
|
+
**Reviewer:** `guard_uninspectable_review`
|
|
121
|
+
**Independent read of the artifact:** Concur with the review — the only runtime change is an additive summary projection over load-bearing rows in exactly `{missing, errored, on-stale, off-runtime-divergent}`; the precedence/classification and `GuardPostureProbe` code are untouched, the errored case yields one existing acute item and no load-bearing-gap item, and all 54 focused unit/integration/E2E tests pass with no threshold or authority changes.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Evidence pointers
|
|
126
|
+
|
|
127
|
+
- Refusal evidence: before implementation, `tests/unit/monitoring/guard-posture-probe-loadbearing.test.ts` failed because `loadBearingUninspectableKeys` was absent.
|
|
128
|
+
- Unit: 32/32 across `guard-posture-loadbearing` and `guard-posture-probe-loadbearing`; the broader focused unit run was 62/62.
|
|
129
|
+
- Integration: 18/18 in `tests/integration/guards-route.test.ts`.
|
|
130
|
+
- E2E: 24/24 across `guards-loadbearing-lifecycle` and `guards-endpoint-lifecycle`.
|
|
131
|
+
- Static/build: `npm run lint` and `npm run build` passed.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Class-Closure Declaration (display-only mirror)
|
|
136
|
+
|
|
137
|
+
No agent-authored-artifact defect and no self-triggered controller change — not applicable.
|