instar 1.3.123 → 1.3.125

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.123",
3
+ "version": "1.3.125",
4
4
  "description": "Coherence infrastructure for self-evolving AI agents — on the Claude Code or Codex subscription you already have.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-05-30T20:55:40.867Z",
5
- "instarVersion": "1.3.123",
4
+ "generatedAt": "2026-05-30T22:08:54.842Z",
5
+ "instarVersion": "1.3.125",
6
6
  "entryCount": 193,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -409,7 +409,7 @@
409
409
  "type": "route-group",
410
410
  "domain": "monitoring",
411
411
  "sourcePath": "src/server/routes.ts",
412
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
412
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
413
413
  "since": "2025-01-01"
414
414
  },
415
415
  "route-group:agents": {
@@ -417,7 +417,7 @@
417
417
  "type": "route-group",
418
418
  "domain": "sessions",
419
419
  "sourcePath": "src/server/routes.ts",
420
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
420
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
421
421
  "since": "2025-01-01"
422
422
  },
423
423
  "route-group:backups": {
@@ -425,7 +425,7 @@
425
425
  "type": "route-group",
426
426
  "domain": "operations",
427
427
  "sourcePath": "src/server/routes.ts",
428
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
428
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
429
429
  "since": "2025-01-01"
430
430
  },
431
431
  "route-group:git": {
@@ -433,7 +433,7 @@
433
433
  "type": "route-group",
434
434
  "domain": "coordination",
435
435
  "sourcePath": "src/server/routes.ts",
436
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
436
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
437
437
  "since": "2025-01-01"
438
438
  },
439
439
  "route-group:memory": {
@@ -441,7 +441,7 @@
441
441
  "type": "route-group",
442
442
  "domain": "memory",
443
443
  "sourcePath": "src/server/routes.ts",
444
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
444
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
445
445
  "since": "2025-01-01"
446
446
  },
447
447
  "route-group:semantic": {
@@ -449,7 +449,7 @@
449
449
  "type": "route-group",
450
450
  "domain": "memory",
451
451
  "sourcePath": "src/server/routes.ts",
452
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
452
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
453
453
  "since": "2025-01-01"
454
454
  },
455
455
  "route-group:status": {
@@ -457,7 +457,7 @@
457
457
  "type": "route-group",
458
458
  "domain": "monitoring",
459
459
  "sourcePath": "src/server/routes.ts",
460
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
460
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
461
461
  "since": "2025-01-01"
462
462
  },
463
463
  "route-group:capabilities": {
@@ -465,7 +465,7 @@
465
465
  "type": "route-group",
466
466
  "domain": "mapping",
467
467
  "sourcePath": "src/server/routes.ts",
468
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
468
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
469
469
  "since": "2025-01-01"
470
470
  },
471
471
  "route-group:project-map": {
@@ -473,7 +473,7 @@
473
473
  "type": "route-group",
474
474
  "domain": "mapping",
475
475
  "sourcePath": "src/server/routes.ts",
476
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
476
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
477
477
  "since": "2025-01-01"
478
478
  },
479
479
  "route-group:coherence": {
@@ -481,7 +481,7 @@
481
481
  "type": "route-group",
482
482
  "domain": "coherence",
483
483
  "sourcePath": "src/server/routes.ts",
484
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
484
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
485
485
  "since": "2025-01-01"
486
486
  },
487
487
  "route-group:topic-bindings": {
@@ -489,7 +489,7 @@
489
489
  "type": "route-group",
490
490
  "domain": "sessions",
491
491
  "sourcePath": "src/server/routes.ts",
492
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
492
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
493
493
  "since": "2025-01-01"
494
494
  },
495
495
  "route-group:context": {
@@ -497,7 +497,7 @@
497
497
  "type": "route-group",
498
498
  "domain": "context",
499
499
  "sourcePath": "src/server/routes.ts",
500
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
500
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
501
501
  "since": "2025-01-01"
502
502
  },
503
503
  "route-group:scope-coherence": {
@@ -505,7 +505,7 @@
505
505
  "type": "route-group",
506
506
  "domain": "coherence",
507
507
  "sourcePath": "src/server/routes.ts",
508
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
508
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
509
509
  "since": "2025-01-01"
510
510
  },
511
511
  "route-group:canonical-state": {
@@ -513,7 +513,7 @@
513
513
  "type": "route-group",
514
514
  "domain": "state",
515
515
  "sourcePath": "src/server/routes.ts",
516
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
516
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
517
517
  "since": "2025-01-01"
518
518
  },
519
519
  "route-group:ci": {
@@ -521,7 +521,7 @@
521
521
  "type": "route-group",
522
522
  "domain": "monitoring",
523
523
  "sourcePath": "src/server/routes.ts",
524
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
524
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
525
525
  "since": "2025-01-01"
526
526
  },
527
527
  "route-group:sessions": {
@@ -529,7 +529,7 @@
529
529
  "type": "route-group",
530
530
  "domain": "sessions",
531
531
  "sourcePath": "src/server/routes.ts",
532
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
532
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
533
533
  "since": "2025-01-01"
534
534
  },
535
535
  "route-group:jobs": {
@@ -537,7 +537,7 @@
537
537
  "type": "route-group",
538
538
  "domain": "scheduling",
539
539
  "sourcePath": "src/server/routes.ts",
540
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
540
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
541
541
  "since": "2025-01-01"
542
542
  },
543
543
  "route-group:skip-ledger": {
@@ -545,7 +545,7 @@
545
545
  "type": "route-group",
546
546
  "domain": "scheduling",
547
547
  "sourcePath": "src/server/routes.ts",
548
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
548
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
549
549
  "since": "2025-01-01"
550
550
  },
551
551
  "route-group:telegram": {
@@ -553,7 +553,7 @@
553
553
  "type": "route-group",
554
554
  "domain": "communication",
555
555
  "sourcePath": "src/server/routes.ts",
556
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
556
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
557
557
  "since": "2025-01-01"
558
558
  },
559
559
  "route-group:attention": {
@@ -561,7 +561,7 @@
561
561
  "type": "route-group",
562
562
  "domain": "communication",
563
563
  "sourcePath": "src/server/routes.ts",
564
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
564
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
565
565
  "since": "2025-01-01"
566
566
  },
567
567
  "route-group:relationships": {
@@ -569,7 +569,7 @@
569
569
  "type": "route-group",
570
570
  "domain": "relationships",
571
571
  "sourcePath": "src/server/routes.ts",
572
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
572
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
573
573
  "since": "2025-01-01"
574
574
  },
575
575
  "route-group:feedback": {
@@ -577,7 +577,7 @@
577
577
  "type": "route-group",
578
578
  "domain": "feedback",
579
579
  "sourcePath": "src/server/routes.ts",
580
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
580
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
581
581
  "since": "2025-01-01"
582
582
  },
583
583
  "route-group:updates": {
@@ -585,7 +585,7 @@
585
585
  "type": "route-group",
586
586
  "domain": "updates",
587
587
  "sourcePath": "src/server/routes.ts",
588
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
588
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
589
589
  "since": "2025-01-01"
590
590
  },
591
591
  "route-group:dispatches": {
@@ -593,7 +593,7 @@
593
593
  "type": "route-group",
594
594
  "domain": "dispatches",
595
595
  "sourcePath": "src/server/routes.ts",
596
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
596
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
597
597
  "since": "2025-01-01"
598
598
  },
599
599
  "route-group:quota": {
@@ -601,7 +601,7 @@
601
601
  "type": "route-group",
602
602
  "domain": "monitoring",
603
603
  "sourcePath": "src/server/routes.ts",
604
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
604
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
605
605
  "since": "2025-01-01"
606
606
  },
607
607
  "route-group:publishing": {
@@ -609,7 +609,7 @@
609
609
  "type": "route-group",
610
610
  "domain": "publishing",
611
611
  "sourcePath": "src/server/routes.ts",
612
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
612
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
613
613
  "since": "2025-01-01"
614
614
  },
615
615
  "route-group:private-views": {
@@ -617,7 +617,7 @@
617
617
  "type": "route-group",
618
618
  "domain": "publishing",
619
619
  "sourcePath": "src/server/routes.ts",
620
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
620
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
621
621
  "since": "2025-01-01"
622
622
  },
623
623
  "route-group:tunnel": {
@@ -625,7 +625,7 @@
625
625
  "type": "route-group",
626
626
  "domain": "networking",
627
627
  "sourcePath": "src/server/routes.ts",
628
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
628
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
629
629
  "since": "2025-01-01"
630
630
  },
631
631
  "route-group:events": {
@@ -633,7 +633,7 @@
633
633
  "type": "route-group",
634
634
  "domain": "networking",
635
635
  "sourcePath": "src/server/routes.ts",
636
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
636
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
637
637
  "since": "2025-01-01"
638
638
  },
639
639
  "route-group:evolution": {
@@ -641,7 +641,7 @@
641
641
  "type": "route-group",
642
642
  "domain": "evolution",
643
643
  "sourcePath": "src/server/routes.ts",
644
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
644
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
645
645
  "since": "2025-01-01"
646
646
  },
647
647
  "route-group:watchdog": {
@@ -649,7 +649,7 @@
649
649
  "type": "route-group",
650
650
  "domain": "monitoring",
651
651
  "sourcePath": "src/server/routes.ts",
652
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
652
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
653
653
  "since": "2025-01-01"
654
654
  },
655
655
  "route-group:topic-memory": {
@@ -657,7 +657,7 @@
657
657
  "type": "route-group",
658
658
  "domain": "memory",
659
659
  "sourcePath": "src/server/routes.ts",
660
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
660
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
661
661
  "since": "2025-01-01"
662
662
  },
663
663
  "route-group:state-sync": {
@@ -665,7 +665,7 @@
665
665
  "type": "route-group",
666
666
  "domain": "coordination",
667
667
  "sourcePath": "src/server/routes.ts",
668
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
668
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
669
669
  "since": "2025-01-01"
670
670
  },
671
671
  "route-group:intent": {
@@ -673,7 +673,7 @@
673
673
  "type": "route-group",
674
674
  "domain": "intent",
675
675
  "sourcePath": "src/server/routes.ts",
676
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
676
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
677
677
  "since": "2025-01-01"
678
678
  },
679
679
  "route-group:triage": {
@@ -681,7 +681,7 @@
681
681
  "type": "route-group",
682
682
  "domain": "safety",
683
683
  "sourcePath": "src/server/routes.ts",
684
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
684
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
685
685
  "since": "2025-01-01"
686
686
  },
687
687
  "route-group:operations": {
@@ -689,7 +689,7 @@
689
689
  "type": "route-group",
690
690
  "domain": "safety",
691
691
  "sourcePath": "src/server/routes.ts",
692
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
692
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
693
693
  "since": "2025-01-01"
694
694
  },
695
695
  "route-group:sentinel": {
@@ -697,7 +697,7 @@
697
697
  "type": "route-group",
698
698
  "domain": "safety",
699
699
  "sourcePath": "src/server/routes.ts",
700
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
700
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
701
701
  "since": "2025-01-01"
702
702
  },
703
703
  "route-group:trust": {
@@ -705,7 +705,7 @@
705
705
  "type": "route-group",
706
706
  "domain": "safety",
707
707
  "sourcePath": "src/server/routes.ts",
708
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
708
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
709
709
  "since": "2025-01-01"
710
710
  },
711
711
  "route-group:monitoring": {
@@ -713,7 +713,7 @@
713
713
  "type": "route-group",
714
714
  "domain": "monitoring",
715
715
  "sourcePath": "src/server/routes.ts",
716
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
716
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
717
717
  "since": "2025-01-01"
718
718
  },
719
719
  "route-group:commitments": {
@@ -721,7 +721,7 @@
721
721
  "type": "route-group",
722
722
  "domain": "commitments",
723
723
  "sourcePath": "src/server/routes.ts",
724
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
724
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
725
725
  "since": "2025-01-01"
726
726
  },
727
727
  "route-group:episodes": {
@@ -729,7 +729,7 @@
729
729
  "type": "route-group",
730
730
  "domain": "memory",
731
731
  "sourcePath": "src/server/routes.ts",
732
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
732
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
733
733
  "since": "2025-01-01"
734
734
  },
735
735
  "route-group:messages": {
@@ -737,7 +737,7 @@
737
737
  "type": "route-group",
738
738
  "domain": "coordination",
739
739
  "sourcePath": "src/server/routes.ts",
740
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
740
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
741
741
  "since": "2025-01-01"
742
742
  },
743
743
  "route-group:system-reviews": {
@@ -745,7 +745,7 @@
745
745
  "type": "route-group",
746
746
  "domain": "monitoring",
747
747
  "sourcePath": "src/server/routes.ts",
748
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
748
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
749
749
  "since": "2025-01-01"
750
750
  },
751
751
  "route-group:machine-mesh": {
@@ -761,7 +761,7 @@
761
761
  "type": "route-group",
762
762
  "domain": "security",
763
763
  "sourcePath": "src/server/routes.ts",
764
- "contentHash": "99680ae28ec1fa663a7c94dc3fc9d584844ed9d52427ad63741ab89bb73e4a01",
764
+ "contentHash": "31ee7a80d0fc426ffff7585eaf06662863cac0df38eedc6ea7c035cb082f1b1c",
765
765
  "since": "2025-01-01"
766
766
  },
767
767
  "cli:init": {
@@ -0,0 +1,53 @@
1
+ # Instar Upgrade Guide — vNEXT
2
+
3
+ <!-- bump: patch -->
4
+
5
+ ## What Changed
6
+
7
+ **Fixed: `GET /codex/usage` (and the codex TokenLedger / resume scans) timed out
8
+ on a large codex history.** The shared helper `listAllRollouts` walked the ENTIRE
9
+ `$CODEX_HOME/sessions` tree and `stat`-ed every rollout file before slicing to
10
+ the newest few. On a real account that history is large — one machine measured
11
+ 14,277 files / 1.4 GB — so the full walk plus ~14k sequential `stat`s, under
12
+ live server load, made `GET /codex/usage` (shipped in v1.3.123) return a
13
+ connection timeout. It now walks the date-partition directories
14
+ (`sessions/YYYY/MM/DD/`) newest-first and `stat`s only the newest partitions
15
+ (at least two, until it has `limit` candidates), with a full-walk fallback for
16
+ any non-date-partitioned layout. The returned newest-N is unchanged; only the
17
+ scan is bounded. This one change fixes all four callers of the helper (the
18
+ codex-usage reader, the TokenLedger codex scan, the session-resume index, and
19
+ the layout canary).
20
+
21
+ ## Summary of New Capabilities
22
+
23
+ - No new capability — a performance fix. `listAllRollouts` is now bounded to the
24
+ most-recent date partitions (helpers `listDayPartitionsDescending` +
25
+ `readNamesDesc`), so codex usage/ledger/resume reads stay fast regardless of
26
+ how much rollout history has accumulated.
27
+
28
+ ## What to Tell Your User
29
+
30
+ The codex usage check now answers instantly even on a heavy account. Before this
31
+ fix, on an account with a very large codex history, asking how much codex usage
32
+ was left could hang and time out, because the check was reading through the
33
+ entire history to find the most recent record. It now looks only at the most
34
+ recent day or two of records, so it returns right away. Nothing else changes.
35
+
36
+ ## Evidence
37
+
38
+ **Reproduction.** On a real codex account with 14,277 rollout files (1.4 GB)
39
+ under `~/.codex/sessions`, hitting `GET /codex/usage` on the running server
40
+ returned a connection timeout — curl reported status 000 after a 30-second
41
+ `--max-time`, while `GET /health` on the same server responded normally. Root
42
+ cause confirmed by reading the code: `listAllRollouts` recursively walked the
43
+ whole tree and awaited an `fs.stat` on every one of the 14k files before
44
+ sorting and slicing.
45
+
46
+ **Before / after.** The old full-walk timed out at 30 s+ under load. The fixed
47
+ date-partition walk, run against the same live 14,277-file tree, completed in
48
+ **59 ms** (it scanned the two newest day-partitions, found the newest rollout,
49
+ and stopped) — returning the same newest record. A unit test with 206 fixture
50
+ files across 42 partitions uses an `fs.stat` spy to assert fewer than 20 stats
51
+ occur (only the newest partitions), versus 206 before. All three test tiers for
52
+ the codex-usage feature plus the TokenLedger / resume / canary suites stay
53
+ green.
@@ -0,0 +1,62 @@
1
+ # Instar Upgrade Guide — vNEXT
2
+
3
+ <!-- bump: patch -->
4
+
5
+ ## What Changed
6
+
7
+ **Fixed the ROOT of duplicate agent-to-agent replies: `POST /messages/relay-agent`
8
+ now responds at the accept boundary instead of after the session spawn.** The
9
+ co-located inbound handler used to AWAIT `handleInboundMessage` — a session
10
+ spawn/resume that routinely takes 9-30 s — before responding. But the sender
11
+ (`MessageRouter.relay`) uses a 5-second fetch timeout and reads only whether the
12
+ request succeeded. So whenever the receiver's spawn outran 5 s, the sender gave
13
+ up, retried with a fresh message id, and the receiver spawned a SECOND session →
14
+ a duplicate reply. The content-hash dedup shipped earlier is the symptom
15
+ backstop; this removes the cause. The handler now responds `{ ok:true,
16
+ accepted:true, threadline:{accepted:true, async:true} }` the instant the message
17
+ is accepted + gated, and runs the spawn in the background. Everything that must
18
+ happen first — the dedup, the reply-waiter resolution, and the warrants-reply
19
+ gate (including its suppress short-circuit) — still runs synchronously before the
20
+ response. Scoped to the co-located path; the cross-machine relay-funnel path
21
+ (which has retry-on-error semantics to preserve) is tracked separately.
22
+
23
+ ## Summary of New Capabilities
24
+
25
+ - No new capability — a robustness fix. Agent-to-agent messages on the same
26
+ machine no longer risk a duplicate reply when the receiver's session spawn is
27
+ slower than the sender's 5-second delivery timeout.
28
+
29
+ ## What to Tell Your User
30
+
31
+ Agents talking to each other on the same machine no longer occasionally send the
32
+ same reply twice. The cause was that a receiving agent waited until it had fully
33
+ spun up a session — up to half a minute — before telling the sender the message
34
+ arrived, but the sender only waits five seconds and would resend. Now the
35
+ receiver acknowledges the moment the message is safely accepted and does the
36
+ slow work in the background, so the sender never times out and never resends.
37
+ Nothing changes for you; the real reply still arrives as before, just without the
38
+ occasional duplicate.
39
+
40
+ ## Evidence
41
+
42
+ **Reproduction / root cause.** Confirmed in the code: the co-located sender
43
+ `MessageRouter.relayToAgent` (`src/messaging/MessageRouter.ts:486-510`) wraps its
44
+ POST to `/messages/relay-agent` in `AbortSignal.timeout(5000)` and returns only
45
+ `response.ok`. The receiver's handler awaited `handleInboundMessage` (a 9-30 s
46
+ session spawn) before responding, so any spawn over 5 s aborted the sender's
47
+ fetch → the sender retried with a fresh `message.id`, which slips past the
48
+ id-based relay dedup → a second spawn and a duplicate reply. (The 2026-05-30
49
+ duplicate-reply incidents on the echo↔codey loop are this path.)
50
+
51
+ **Before / after.** Before: the response is sent only after the full spawn. After:
52
+ the response is `{accepted:true, async:true}` sent at the accept boundary, with
53
+ the spawn running in the background. The rewritten integration test holds the
54
+ background handler open and asserts the HTTP response returns while the handler
55
+ is still mid-spawn (`router-start` present, `router-end` not yet) — i.e. the
56
+ sender is no longer made to wait. The handler still runs to completion in the
57
+ background (not dropped); a background rejection still yields HTTP 200; the
58
+ reply-waiter resolution and the warrants-reply gate's suppress short-circuit stay
59
+ green; the content-hash dedup suite and the keystone gate-before-spawn wiring
60
+ test stay green. An independent second-pass reviewer audited the change (it
61
+ touches inbound messaging) and confirmed correctness after one artifact-honesty
62
+ correction.
@@ -0,0 +1,64 @@
1
+ # Side-Effects Review — bound the codex rollout scan to the newest partitions
2
+
3
+ **Version / slug:** `codex-rollout-scan-perf`
4
+ **Date:** 2026-05-30
5
+ **Author:** Echo (instar-dev agent)
6
+ **Second-pass reviewer:** not required (pure read-path perf optimization; no block/allow/lifecycle/decision surface)
7
+
8
+ ## Summary of the change
9
+
10
+ `listAllRollouts` (`src/providers/adapters/openai-codex/observability/sessionPaths.ts`)
11
+ no longer walks + `stat`s the ENTIRE `$CODEX_HOME/sessions` tree to return the
12
+ newest-N rollouts. It now walks date-partition dirs newest-first and stats only
13
+ the newest partitions (>= 2, until `limit` candidates), with a full-walk
14
+ fallback for non-date-partitioned layouts. Fixes the `GET /codex/usage` timeout
15
+ (and the shared TokenLedger / resume-index cost) on a large codex history
16
+ (measured 14,277 files / 1.4 GB → route timed out at 30 s; now 59 ms).
17
+
18
+ ## Decision-point inventory
19
+
20
+ - No decision point. `listAllRollouts` returns data (a list of file paths +
21
+ mtimes). The change is purely the disk-scan strategy used to produce that
22
+ list; the returned newest-N is unchanged for the common case.
23
+
24
+ ---
25
+
26
+ ## 1. Over-block
27
+ No block/allow surface — not applicable. It returns a file list; it rejects
28
+ nothing.
29
+
30
+ ## 2. Under-block
31
+ Not applicable. The closest "miss" is the documented trade-off: a session OLDER
32
+ than the scanned partitions yet still the single most-recently-touched file on
33
+ disk would not be in the candidate set. For the rate-limit reader this changes
34
+ nothing (account-wide windows are identical across any recently-active session);
35
+ for the resume/token-ledger callers it is a vanishingly rare miss (sessions are
36
+ not active for days) and `MIN_PARTITIONS_SCANNED = 2` covers the common
37
+ cross-midnight case.
38
+
39
+ ## 3. Level-of-abstraction fit
40
+ Correct layer — the fix is in the shared helper, so all four callers
41
+ (codex-usage reader, TokenLedger scan, resume index, layout canary) get the
42
+ speedup from one change rather than each re-implementing a bounded scan.
43
+
44
+ ## 4. Signal vs authority compliance
45
+ Compliant — no authority at all. A read helper that returns data; it gates,
46
+ blocks, and decides nothing (`docs/signal-vs-authority.md` n/a beyond "this is
47
+ not a decision point").
48
+
49
+ ## 5. Interactions
50
+ - **Shared helper:** all callers benefit; none depend on the *full* unbounded
51
+ list (every caller passes a `limit` and wants newest-N). Verified the four
52
+ call sites pass a finite limit.
53
+ - **No races / no writes:** read-only; opens + closes its own dir/file handles.
54
+ - **Canary:** `codexSessionLayoutCanary` uses date-partitioned fixtures → hits
55
+ the fast path → stays green (verified).
56
+
57
+ ## 6. External surfaces
58
+ - Makes `GET /codex/usage` actually responsive on a heavy account (it returns
59
+ fast instead of timing out). No change to the response shape or semantics.
60
+ - No new route, no message, no change visible to other agents.
61
+
62
+ ## 7. Rollback cost
63
+ Trivial. Revert the `listAllRollouts` rewrite + the two private helpers + the new
64
+ test. No data, no migration, no behavior to repair — only the scan strategy.