instar 1.3.1663 → 1.3.1664
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/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +9 -0
- package/dist/commands/server.js.map +1 -1
- package/dist/core/SafeGitExecutor.d.ts +33 -11
- package/dist/core/SafeGitExecutor.d.ts.map +1 -1
- package/dist/core/SafeGitExecutor.js +144 -116
- package/dist/core/SafeGitExecutor.js.map +1 -1
- package/dist/data/standards-guard-index.json +1 -1
- package/dist/data/standards-guard-index.meta.json +2 -2
- package/dist/data/standards-registry.meta.json +1 -1
- package/dist/native/InstarWedgeCanary.app/Contents/MacOS/InstarWedgeCanary +0 -0
- package/dist/native/instar-desktop-host +0 -0
- package/dist/recommended/catalog.js +1 -1
- package/dist/recommended/catalog.js.map +1 -1
- package/dist/recommended/recipes.d.ts.map +1 -1
- package/dist/recommended/recipes.js +3 -2
- package/dist/recommended/recipes.js.map +1 -1
- package/dist/recommended/setupState.d.ts +9 -0
- package/dist/recommended/setupState.d.ts.map +1 -1
- package/dist/recommended/setupState.js +17 -0
- package/dist/recommended/setupState.js.map +1 -1
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +5 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/recommendedServiceRoutes.d.ts +2 -0
- package/dist/server/recommendedServiceRoutes.d.ts.map +1 -1
- package/dist/server/recommendedServiceRoutes.js +41 -7
- package/dist/server/recommendedServiceRoutes.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +7 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +47 -47
- package/src/data/standards-guard-index.json +1 -1
- package/src/data/standards-guard-index.meta.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/upgrades/1.3.1664.md +32 -0
- package/upgrades/side-effects/recommended-services-stop-holds.md +64 -0
- package/upgrades/side-effects/safe-git-one-verb-classifier.md +117 -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-11-
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-11-05T04:27:16.833Z",
|
|
5
|
+
"instarVersion": "1.3.1664",
|
|
6
6
|
"entryCount": 206,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -435,7 +435,7 @@
|
|
|
435
435
|
"type": "route-group",
|
|
436
436
|
"domain": "monitoring",
|
|
437
437
|
"sourcePath": "src/server/routes.ts",
|
|
438
|
-
"contentHash": "
|
|
438
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
439
439
|
"since": "2025-01-01"
|
|
440
440
|
},
|
|
441
441
|
"route-group:agents": {
|
|
@@ -443,7 +443,7 @@
|
|
|
443
443
|
"type": "route-group",
|
|
444
444
|
"domain": "sessions",
|
|
445
445
|
"sourcePath": "src/server/routes.ts",
|
|
446
|
-
"contentHash": "
|
|
446
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
447
447
|
"since": "2025-01-01"
|
|
448
448
|
},
|
|
449
449
|
"route-group:backups": {
|
|
@@ -451,7 +451,7 @@
|
|
|
451
451
|
"type": "route-group",
|
|
452
452
|
"domain": "operations",
|
|
453
453
|
"sourcePath": "src/server/routes.ts",
|
|
454
|
-
"contentHash": "
|
|
454
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
455
455
|
"since": "2025-01-01"
|
|
456
456
|
},
|
|
457
457
|
"route-group:git": {
|
|
@@ -459,7 +459,7 @@
|
|
|
459
459
|
"type": "route-group",
|
|
460
460
|
"domain": "coordination",
|
|
461
461
|
"sourcePath": "src/server/routes.ts",
|
|
462
|
-
"contentHash": "
|
|
462
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
463
463
|
"since": "2025-01-01"
|
|
464
464
|
},
|
|
465
465
|
"route-group:memory": {
|
|
@@ -467,7 +467,7 @@
|
|
|
467
467
|
"type": "route-group",
|
|
468
468
|
"domain": "memory",
|
|
469
469
|
"sourcePath": "src/server/routes.ts",
|
|
470
|
-
"contentHash": "
|
|
470
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
471
471
|
"since": "2025-01-01"
|
|
472
472
|
},
|
|
473
473
|
"route-group:semantic": {
|
|
@@ -475,7 +475,7 @@
|
|
|
475
475
|
"type": "route-group",
|
|
476
476
|
"domain": "memory",
|
|
477
477
|
"sourcePath": "src/server/routes.ts",
|
|
478
|
-
"contentHash": "
|
|
478
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
479
479
|
"since": "2025-01-01"
|
|
480
480
|
},
|
|
481
481
|
"route-group:status": {
|
|
@@ -483,7 +483,7 @@
|
|
|
483
483
|
"type": "route-group",
|
|
484
484
|
"domain": "monitoring",
|
|
485
485
|
"sourcePath": "src/server/routes.ts",
|
|
486
|
-
"contentHash": "
|
|
486
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
487
487
|
"since": "2025-01-01"
|
|
488
488
|
},
|
|
489
489
|
"route-group:capabilities": {
|
|
@@ -491,7 +491,7 @@
|
|
|
491
491
|
"type": "route-group",
|
|
492
492
|
"domain": "mapping",
|
|
493
493
|
"sourcePath": "src/server/routes.ts",
|
|
494
|
-
"contentHash": "
|
|
494
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
495
495
|
"since": "2025-01-01"
|
|
496
496
|
},
|
|
497
497
|
"route-group:project-map": {
|
|
@@ -499,7 +499,7 @@
|
|
|
499
499
|
"type": "route-group",
|
|
500
500
|
"domain": "mapping",
|
|
501
501
|
"sourcePath": "src/server/routes.ts",
|
|
502
|
-
"contentHash": "
|
|
502
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
503
503
|
"since": "2025-01-01"
|
|
504
504
|
},
|
|
505
505
|
"route-group:coherence": {
|
|
@@ -507,7 +507,7 @@
|
|
|
507
507
|
"type": "route-group",
|
|
508
508
|
"domain": "coherence",
|
|
509
509
|
"sourcePath": "src/server/routes.ts",
|
|
510
|
-
"contentHash": "
|
|
510
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
511
511
|
"since": "2025-01-01"
|
|
512
512
|
},
|
|
513
513
|
"route-group:topic-bindings": {
|
|
@@ -515,7 +515,7 @@
|
|
|
515
515
|
"type": "route-group",
|
|
516
516
|
"domain": "sessions",
|
|
517
517
|
"sourcePath": "src/server/routes.ts",
|
|
518
|
-
"contentHash": "
|
|
518
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
519
519
|
"since": "2025-01-01"
|
|
520
520
|
},
|
|
521
521
|
"route-group:context": {
|
|
@@ -523,7 +523,7 @@
|
|
|
523
523
|
"type": "route-group",
|
|
524
524
|
"domain": "context",
|
|
525
525
|
"sourcePath": "src/server/routes.ts",
|
|
526
|
-
"contentHash": "
|
|
526
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
527
527
|
"since": "2025-01-01"
|
|
528
528
|
},
|
|
529
529
|
"route-group:scope-coherence": {
|
|
@@ -531,7 +531,7 @@
|
|
|
531
531
|
"type": "route-group",
|
|
532
532
|
"domain": "coherence",
|
|
533
533
|
"sourcePath": "src/server/routes.ts",
|
|
534
|
-
"contentHash": "
|
|
534
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
535
535
|
"since": "2025-01-01"
|
|
536
536
|
},
|
|
537
537
|
"route-group:canonical-state": {
|
|
@@ -539,7 +539,7 @@
|
|
|
539
539
|
"type": "route-group",
|
|
540
540
|
"domain": "state",
|
|
541
541
|
"sourcePath": "src/server/routes.ts",
|
|
542
|
-
"contentHash": "
|
|
542
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
543
543
|
"since": "2025-01-01"
|
|
544
544
|
},
|
|
545
545
|
"route-group:ci": {
|
|
@@ -547,7 +547,7 @@
|
|
|
547
547
|
"type": "route-group",
|
|
548
548
|
"domain": "monitoring",
|
|
549
549
|
"sourcePath": "src/server/routes.ts",
|
|
550
|
-
"contentHash": "
|
|
550
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
551
551
|
"since": "2025-01-01"
|
|
552
552
|
},
|
|
553
553
|
"route-group:sessions": {
|
|
@@ -555,7 +555,7 @@
|
|
|
555
555
|
"type": "route-group",
|
|
556
556
|
"domain": "sessions",
|
|
557
557
|
"sourcePath": "src/server/routes.ts",
|
|
558
|
-
"contentHash": "
|
|
558
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
559
559
|
"since": "2025-01-01"
|
|
560
560
|
},
|
|
561
561
|
"route-group:jobs": {
|
|
@@ -563,7 +563,7 @@
|
|
|
563
563
|
"type": "route-group",
|
|
564
564
|
"domain": "scheduling",
|
|
565
565
|
"sourcePath": "src/server/routes.ts",
|
|
566
|
-
"contentHash": "
|
|
566
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
567
567
|
"since": "2025-01-01"
|
|
568
568
|
},
|
|
569
569
|
"route-group:skip-ledger": {
|
|
@@ -571,7 +571,7 @@
|
|
|
571
571
|
"type": "route-group",
|
|
572
572
|
"domain": "scheduling",
|
|
573
573
|
"sourcePath": "src/server/routes.ts",
|
|
574
|
-
"contentHash": "
|
|
574
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
575
575
|
"since": "2025-01-01"
|
|
576
576
|
},
|
|
577
577
|
"route-group:telegram": {
|
|
@@ -579,7 +579,7 @@
|
|
|
579
579
|
"type": "route-group",
|
|
580
580
|
"domain": "communication",
|
|
581
581
|
"sourcePath": "src/server/routes.ts",
|
|
582
|
-
"contentHash": "
|
|
582
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
583
583
|
"since": "2025-01-01"
|
|
584
584
|
},
|
|
585
585
|
"route-group:attention": {
|
|
@@ -587,7 +587,7 @@
|
|
|
587
587
|
"type": "route-group",
|
|
588
588
|
"domain": "communication",
|
|
589
589
|
"sourcePath": "src/server/routes.ts",
|
|
590
|
-
"contentHash": "
|
|
590
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
591
591
|
"since": "2025-01-01"
|
|
592
592
|
},
|
|
593
593
|
"route-group:relationships": {
|
|
@@ -595,7 +595,7 @@
|
|
|
595
595
|
"type": "route-group",
|
|
596
596
|
"domain": "relationships",
|
|
597
597
|
"sourcePath": "src/server/routes.ts",
|
|
598
|
-
"contentHash": "
|
|
598
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
599
599
|
"since": "2025-01-01"
|
|
600
600
|
},
|
|
601
601
|
"route-group:feedback": {
|
|
@@ -603,7 +603,7 @@
|
|
|
603
603
|
"type": "route-group",
|
|
604
604
|
"domain": "feedback",
|
|
605
605
|
"sourcePath": "src/server/routes.ts",
|
|
606
|
-
"contentHash": "
|
|
606
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
607
607
|
"since": "2025-01-01"
|
|
608
608
|
},
|
|
609
609
|
"route-group:updates": {
|
|
@@ -611,7 +611,7 @@
|
|
|
611
611
|
"type": "route-group",
|
|
612
612
|
"domain": "updates",
|
|
613
613
|
"sourcePath": "src/server/routes.ts",
|
|
614
|
-
"contentHash": "
|
|
614
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
615
615
|
"since": "2025-01-01"
|
|
616
616
|
},
|
|
617
617
|
"route-group:dispatches": {
|
|
@@ -619,7 +619,7 @@
|
|
|
619
619
|
"type": "route-group",
|
|
620
620
|
"domain": "dispatches",
|
|
621
621
|
"sourcePath": "src/server/routes.ts",
|
|
622
|
-
"contentHash": "
|
|
622
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
623
623
|
"since": "2025-01-01"
|
|
624
624
|
},
|
|
625
625
|
"route-group:quota": {
|
|
@@ -627,7 +627,7 @@
|
|
|
627
627
|
"type": "route-group",
|
|
628
628
|
"domain": "monitoring",
|
|
629
629
|
"sourcePath": "src/server/routes.ts",
|
|
630
|
-
"contentHash": "
|
|
630
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
631
631
|
"since": "2025-01-01"
|
|
632
632
|
},
|
|
633
633
|
"route-group:publishing": {
|
|
@@ -635,7 +635,7 @@
|
|
|
635
635
|
"type": "route-group",
|
|
636
636
|
"domain": "publishing",
|
|
637
637
|
"sourcePath": "src/server/routes.ts",
|
|
638
|
-
"contentHash": "
|
|
638
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
639
639
|
"since": "2025-01-01"
|
|
640
640
|
},
|
|
641
641
|
"route-group:private-views": {
|
|
@@ -643,7 +643,7 @@
|
|
|
643
643
|
"type": "route-group",
|
|
644
644
|
"domain": "publishing",
|
|
645
645
|
"sourcePath": "src/server/routes.ts",
|
|
646
|
-
"contentHash": "
|
|
646
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
647
647
|
"since": "2025-01-01"
|
|
648
648
|
},
|
|
649
649
|
"route-group:tunnel": {
|
|
@@ -651,7 +651,7 @@
|
|
|
651
651
|
"type": "route-group",
|
|
652
652
|
"domain": "networking",
|
|
653
653
|
"sourcePath": "src/server/routes.ts",
|
|
654
|
-
"contentHash": "
|
|
654
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
655
655
|
"since": "2025-01-01"
|
|
656
656
|
},
|
|
657
657
|
"route-group:events": {
|
|
@@ -659,7 +659,7 @@
|
|
|
659
659
|
"type": "route-group",
|
|
660
660
|
"domain": "networking",
|
|
661
661
|
"sourcePath": "src/server/routes.ts",
|
|
662
|
-
"contentHash": "
|
|
662
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
663
663
|
"since": "2025-01-01"
|
|
664
664
|
},
|
|
665
665
|
"route-group:evolution": {
|
|
@@ -667,7 +667,7 @@
|
|
|
667
667
|
"type": "route-group",
|
|
668
668
|
"domain": "evolution",
|
|
669
669
|
"sourcePath": "src/server/routes.ts",
|
|
670
|
-
"contentHash": "
|
|
670
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
671
671
|
"since": "2025-01-01"
|
|
672
672
|
},
|
|
673
673
|
"route-group:watchdog": {
|
|
@@ -675,7 +675,7 @@
|
|
|
675
675
|
"type": "route-group",
|
|
676
676
|
"domain": "monitoring",
|
|
677
677
|
"sourcePath": "src/server/routes.ts",
|
|
678
|
-
"contentHash": "
|
|
678
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
679
679
|
"since": "2025-01-01"
|
|
680
680
|
},
|
|
681
681
|
"route-group:topic-memory": {
|
|
@@ -683,7 +683,7 @@
|
|
|
683
683
|
"type": "route-group",
|
|
684
684
|
"domain": "memory",
|
|
685
685
|
"sourcePath": "src/server/routes.ts",
|
|
686
|
-
"contentHash": "
|
|
686
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
687
687
|
"since": "2025-01-01"
|
|
688
688
|
},
|
|
689
689
|
"route-group:state-sync": {
|
|
@@ -691,7 +691,7 @@
|
|
|
691
691
|
"type": "route-group",
|
|
692
692
|
"domain": "coordination",
|
|
693
693
|
"sourcePath": "src/server/routes.ts",
|
|
694
|
-
"contentHash": "
|
|
694
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
695
695
|
"since": "2025-01-01"
|
|
696
696
|
},
|
|
697
697
|
"route-group:intent": {
|
|
@@ -699,7 +699,7 @@
|
|
|
699
699
|
"type": "route-group",
|
|
700
700
|
"domain": "intent",
|
|
701
701
|
"sourcePath": "src/server/routes.ts",
|
|
702
|
-
"contentHash": "
|
|
702
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
703
703
|
"since": "2025-01-01"
|
|
704
704
|
},
|
|
705
705
|
"route-group:triage": {
|
|
@@ -707,7 +707,7 @@
|
|
|
707
707
|
"type": "route-group",
|
|
708
708
|
"domain": "safety",
|
|
709
709
|
"sourcePath": "src/server/routes.ts",
|
|
710
|
-
"contentHash": "
|
|
710
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
711
711
|
"since": "2025-01-01"
|
|
712
712
|
},
|
|
713
713
|
"route-group:operations": {
|
|
@@ -715,7 +715,7 @@
|
|
|
715
715
|
"type": "route-group",
|
|
716
716
|
"domain": "safety",
|
|
717
717
|
"sourcePath": "src/server/routes.ts",
|
|
718
|
-
"contentHash": "
|
|
718
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
719
719
|
"since": "2025-01-01"
|
|
720
720
|
},
|
|
721
721
|
"route-group:sentinel": {
|
|
@@ -723,7 +723,7 @@
|
|
|
723
723
|
"type": "route-group",
|
|
724
724
|
"domain": "safety",
|
|
725
725
|
"sourcePath": "src/server/routes.ts",
|
|
726
|
-
"contentHash": "
|
|
726
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
727
727
|
"since": "2025-01-01"
|
|
728
728
|
},
|
|
729
729
|
"route-group:trust": {
|
|
@@ -731,7 +731,7 @@
|
|
|
731
731
|
"type": "route-group",
|
|
732
732
|
"domain": "safety",
|
|
733
733
|
"sourcePath": "src/server/routes.ts",
|
|
734
|
-
"contentHash": "
|
|
734
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
735
735
|
"since": "2025-01-01"
|
|
736
736
|
},
|
|
737
737
|
"route-group:monitoring": {
|
|
@@ -739,7 +739,7 @@
|
|
|
739
739
|
"type": "route-group",
|
|
740
740
|
"domain": "monitoring",
|
|
741
741
|
"sourcePath": "src/server/routes.ts",
|
|
742
|
-
"contentHash": "
|
|
742
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
743
743
|
"since": "2025-01-01"
|
|
744
744
|
},
|
|
745
745
|
"route-group:commitments": {
|
|
@@ -747,7 +747,7 @@
|
|
|
747
747
|
"type": "route-group",
|
|
748
748
|
"domain": "commitments",
|
|
749
749
|
"sourcePath": "src/server/routes.ts",
|
|
750
|
-
"contentHash": "
|
|
750
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
751
751
|
"since": "2025-01-01"
|
|
752
752
|
},
|
|
753
753
|
"route-group:episodes": {
|
|
@@ -755,7 +755,7 @@
|
|
|
755
755
|
"type": "route-group",
|
|
756
756
|
"domain": "memory",
|
|
757
757
|
"sourcePath": "src/server/routes.ts",
|
|
758
|
-
"contentHash": "
|
|
758
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
759
759
|
"since": "2025-01-01"
|
|
760
760
|
},
|
|
761
761
|
"route-group:messages": {
|
|
@@ -763,7 +763,7 @@
|
|
|
763
763
|
"type": "route-group",
|
|
764
764
|
"domain": "coordination",
|
|
765
765
|
"sourcePath": "src/server/routes.ts",
|
|
766
|
-
"contentHash": "
|
|
766
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
767
767
|
"since": "2025-01-01"
|
|
768
768
|
},
|
|
769
769
|
"route-group:system-reviews": {
|
|
@@ -771,7 +771,7 @@
|
|
|
771
771
|
"type": "route-group",
|
|
772
772
|
"domain": "monitoring",
|
|
773
773
|
"sourcePath": "src/server/routes.ts",
|
|
774
|
-
"contentHash": "
|
|
774
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
775
775
|
"since": "2025-01-01"
|
|
776
776
|
},
|
|
777
777
|
"route-group:machine-mesh": {
|
|
@@ -787,7 +787,7 @@
|
|
|
787
787
|
"type": "route-group",
|
|
788
788
|
"domain": "security",
|
|
789
789
|
"sourcePath": "src/server/routes.ts",
|
|
790
|
-
"contentHash": "
|
|
790
|
+
"contentHash": "73ca891f77c301201adeb3027702b293f637fa64fdd3b2332ea4b5d87facfa46",
|
|
791
791
|
"since": "2025-01-01"
|
|
792
792
|
},
|
|
793
793
|
"cli:init": {
|
|
@@ -1563,7 +1563,7 @@
|
|
|
1563
1563
|
"type": "subsystem",
|
|
1564
1564
|
"domain": "server",
|
|
1565
1565
|
"sourcePath": "src/server/AgentServer.ts",
|
|
1566
|
-
"contentHash": "
|
|
1566
|
+
"contentHash": "9e5109f45f6d38cd6cceb5da3dab73c626a4a717e0c4420fc3eb8b8d6ba7d653",
|
|
1567
1567
|
"since": "2025-01-01"
|
|
1568
1568
|
},
|
|
1569
1569
|
"subsystem:session-manager": {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"generatedFrom": "source-tree",
|
|
4
4
|
"registrySha256": "f91273af3f6f22eb6bb3161c35b109469d8457f1f93b2ec90eec9e58f62ead53",
|
|
5
|
-
"packageVersion": "1.3.
|
|
5
|
+
"packageVersion": "1.3.1664",
|
|
6
6
|
"guards": [
|
|
7
7
|
{
|
|
8
8
|
"ref": "docs/audits/phase-b/f10-triage.md",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"sha256": "
|
|
2
|
+
"sha256": "df1d312983f7c682f28c6807e351fe1e230b357ebc5e59e57fb1224ab094b274",
|
|
3
3
|
"registrySha256": "f91273af3f6f22eb6bb3161c35b109469d8457f1f93b2ec90eec9e58f62ead53",
|
|
4
|
-
"packageVersion": "1.3.
|
|
4
|
+
"packageVersion": "1.3.1664"
|
|
5
5
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
Recommended-service setup now stays stopped when a person stops it. An emergency stop in Telegram or Slack, or ending the session from the dashboard, puts setup on hold. A setup session can hold itself through POST /recommended-services/:id/hold when the person says not now. The Jev offer now says credits are needed before a key. The setup rule on private folders covers sign-in codes too. All of this stays off on real agents, because setup only runs on throwaway or development agents proving a recipe.
|
|
9
|
+
|
|
10
|
+
Instar's git safety funnel kept two lists of allowed commands, one for commands that change things and one for commands that only read. A command on neither list was refused twice, and each refusal told the caller to use the other route. `git check-ignore` was one of them. There is now one table and one classifier for every entry point. `check-ignore` is allowed as a read, including on Instar's own source tree when a caller opts in. A command outside the table gets a single clear refusal that says it is not classified. Non-read `reflog` forms now route correctly through the funnel's dispatcher.
|
|
11
|
+
|
|
12
|
+
## What to Tell Your User
|
|
13
|
+
|
|
14
|
+
Nothing yet. Recommended-service setup isn't on for real agents.
|
|
15
|
+
|
|
16
|
+
Nothing changes for you. This is an internal safety cleanup in how Instar runs git.
|
|
17
|
+
|
|
18
|
+
## Summary of New Capabilities
|
|
19
|
+
|
|
20
|
+
- A stop during service setup holds, until a repeat yes, a no, or a passing check.
|
|
21
|
+
- The list of recommended services shows `held` for a service on hold.
|
|
22
|
+
- The hold route refuses with no-recipe on an agent not proving a recipe.
|
|
23
|
+
|
|
24
|
+
| Capability | How to Use |
|
|
25
|
+
|---|---|
|
|
26
|
+
| Internal code can ask whether a file is git-ignored through the safety funnel | automatic, for code that calls the funnel |
|
|
27
|
+
|
|
28
|
+
## Evidence
|
|
29
|
+
|
|
30
|
+
Second live Jev run on a throwaway, 2026-11-05: an emergency stop was followed by a restart within seconds, in the server log. Tests in tests/integration/recommended-services-setup.test.ts fail without the check in reconcile.
|
|
31
|
+
|
|
32
|
+
New test file `tests/unit/SafeGitExecutor-verb-classifier.test.ts` drives real git through every entry point in sandbox repositories and a source-tree fixture. Before the fix, 14 of its 16 tests failed, with `check-ignore` refused as a "destructive verb" and an unclassified verb producing four different messages.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Side-Effects Review — a person's stop holds recommended-service setup
|
|
2
|
+
|
|
3
|
+
**Tier 2 by risk (session restart behaviour), with second-pass review.** Spec: `docs/specs/recommended-services.md`. Dark: setup only runs on a throwaway or development agent listing a recipe.
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
- New `held` in per-machine setup state. `reconcile` skips a held service, so no restart and no stuck notice.
|
|
8
|
+
- `holdSetupForSession` is called from the Telegram sentinel kill and `DELETE /sessions/:id`, before the kill and matching by session name or topic. `holdAllSetups` is called from the Slack sentinel kill-all and the app's Slack kill-all, and also holds a setup whose session is already dead.
|
|
9
|
+
- Setup state now follows the conversation's current session, found through the topic. A reply brings a session back under a different name. Before this, a repeat yes could start a second session, and a no couldn't stop the renamed one.
|
|
10
|
+
- New `POST /recommended-services/:id/hold`, for a session whose person said not now. Needs the bearer token and `X-Instar-Request`. No PIN, and it refuses without a recipe.
|
|
11
|
+
- A repeat yes lifts a hold, resets its restart count and starts setup. A fresh yes also lifts it. A no and a pass clear it.
|
|
12
|
+
- The Jev offer text says credits are needed before a key. This changes its offer hash, which is harmless because no real agent has a grant.
|
|
13
|
+
- The brief rule covers sign-in codes and pictures. The Jev brief records the credit requirement and a credit code as the route that avoids a card.
|
|
14
|
+
|
|
15
|
+
## 1. Over-block
|
|
16
|
+
|
|
17
|
+
A false emergency stop now stays stopped until the person writes again. The second live run was exactly this: "No, don't add credits" was classified as a stop. It recovered before only because of the restart this removes. The person is told "Session terminated. Send a new message", so it isn't silent, and the classifier bug is filed on its own (fb-01131fac-fb1).
|
|
18
|
+
|
|
19
|
+
An agent's own `DELETE /sessions/:id` with a bearer token also holds, since the route can't always tell operator from agent. A session ended that way stays ended until a yes, a no, a pass, or a reply. An agent ending its own setup session on purpose wants that.
|
|
20
|
+
|
|
21
|
+
## 2. Under-block
|
|
22
|
+
|
|
23
|
+
- Kill paths that aren't named still restart: the reaper, the watchdog, crash recovery. They're not a person's stop, so that's intended. A new person-facing stop path added later would miss this. A test pins the four named paths by reading the source, so it shows the calls exist and not that each runs.
|
|
24
|
+
- `/stop-all` style autonomous stops and the route at `routes.ts:28380` are covered only where they go through `onSentinelKillSession`. The route's fallback without Telegram doesn't hold, and setup needs Telegram to talk to the person.
|
|
25
|
+
- A session the person brought back by replying, which then dies, isn't restarted while held. Their next message resumes it. Recorded in the spec's Left behind.
|
|
26
|
+
- The hold rule is prompt text, so a session can fail to call it. It then gets the bounded restarts, as today.
|
|
27
|
+
- The hold is written before the kill. If the kill fails, the session keeps running while held. It can still finish and pass, which clears the hold.
|
|
28
|
+
- Narrow race left in place: a stop during `startSetup`, before any session name is saved, can find nothing to hold or leave the new session running. The window is seconds, one recipe, and only on proving agents.
|
|
29
|
+
|
|
30
|
+
## 3. Level-of-abstraction fit
|
|
31
|
+
|
|
32
|
+
The stop decision stays where it is, in the sentinel and the routes. Setup state only records the outcome, and `reconcile` reads it. The two kill-all paths hold every setup that hasn't passed, including one whose session is already dead.
|
|
33
|
+
|
|
34
|
+
## 4. Signal vs authority compliance
|
|
35
|
+
|
|
36
|
+
No new judgment. `held` is a recorded fact, and `reconcile` applies a deterministic skip. The hold route only reduces what the system does, and grants nothing. Reference: `docs/signal-vs-authority.md`.
|
|
37
|
+
|
|
38
|
+
## 5. Interactions
|
|
39
|
+
|
|
40
|
+
`dormant` and `exhausted` are unaffected, because the hold check sits beside them. `endSetup` clears `held`, and `reconcile`'s no-grant branch runs before the skip, so a no from another machine still ends a held setup. A repeat yes used to return without touching setup. It now restarts a held one, which needs the PIN and a live page token.
|
|
41
|
+
|
|
42
|
+
## 6. External surfaces
|
|
43
|
+
|
|
44
|
+
`GET /recommended-services` gains `held`. One new route. The offer text changes only on the confirm page, which real agents can't reach. No change to what a person sees on any real agent.
|
|
45
|
+
|
|
46
|
+
## 6b. Operator-surface quality
|
|
47
|
+
|
|
48
|
+
The confirm page shows the new cost line through the existing field. It is one sentence longer, and the page is otherwise unchanged. No new control.
|
|
49
|
+
|
|
50
|
+
## 7. Multi-machine posture
|
|
51
|
+
|
|
52
|
+
Machine-local, like the rest of setup state. `machine-local-justification: physical-credential-locality`: setup state tracks a key and session on one disk. A stop on one machine holds the session on that machine. Setup runs only on the granted machine.
|
|
53
|
+
|
|
54
|
+
## 8. Rollback cost
|
|
55
|
+
|
|
56
|
+
A revert removes the route and the skip. A leftover `held` field in the state file is ignored. No data migration.
|
|
57
|
+
|
|
58
|
+
## Second-pass review
|
|
59
|
+
|
|
60
|
+
First read: concern raised. A stop, a reply and then a yes could start a second live session, because state kept a stale session name. The reviewer also named an unheld stop under a renamed session, a fresh yes leaving a hold, the app's Slack kill-all, a dead session coming back after a kill-all, the gap after the dashboard's kill, a hold overwritten during preflight, a repeat yes keeping its spent restarts, a pass not clearing the hold with no open promise, and an overclaiming test title. All were fixed.
|
|
61
|
+
|
|
62
|
+
Second read: concurred, nothing blocking, from reading the code without running tests. It raised three smaller items. Re-adopting a session after a no, and a stop during preflight, are fixed after that read and weren't re-read. Left in place: a stop during `startSetup` still ends with a session running while held, and a yes on an open session clears `lastAttemptAt`, so a later idle-out gets one more restart.
|
|
63
|
+
|
|
64
|
+
Verifier: the first full run failed one integration test, `recommended-services-confirm-wiring`, because that test's Telegram stand-in had no topic lookup, which the no path now calls. The real adapter has it. The stand-in now keeps real topic records, so the no path runs the real lookup. I hadn't run that file locally before pushing. Test-only, so no second read.
|