instar 1.3.120 → 1.3.122

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/core/TopicResumeMap.d.ts.map +1 -1
  2. package/dist/core/TopicResumeMap.js +18 -2
  3. package/dist/core/TopicResumeMap.js.map +1 -1
  4. package/dist/messaging/relayContentDedup.d.ts +51 -0
  5. package/dist/messaging/relayContentDedup.d.ts.map +1 -0
  6. package/dist/messaging/relayContentDedup.js +0 -0
  7. package/dist/messaging/relayContentDedup.js.map +1 -0
  8. package/dist/monitoring/frameworkActivitySignals.d.ts.map +1 -1
  9. package/dist/monitoring/frameworkActivitySignals.js +12 -1
  10. package/dist/monitoring/frameworkActivitySignals.js.map +1 -1
  11. package/dist/providers/adapters/openai-codex/observability/sessionPaths.d.ts +10 -0
  12. package/dist/providers/adapters/openai-codex/observability/sessionPaths.d.ts.map +1 -1
  13. package/dist/providers/adapters/openai-codex/observability/sessionPaths.js +44 -1
  14. package/dist/providers/adapters/openai-codex/observability/sessionPaths.js.map +1 -1
  15. package/dist/server/routes.d.ts.map +1 -1
  16. package/dist/server/routes.js +27 -0
  17. package/dist/server/routes.js.map +1 -1
  18. package/dist/threadline/ThreadResumeMap.d.ts.map +1 -1
  19. package/dist/threadline/ThreadResumeMap.js +19 -7
  20. package/dist/threadline/ThreadResumeMap.js.map +1 -1
  21. package/dist/threadline/ThreadlineRouter.d.ts.map +1 -1
  22. package/dist/threadline/ThreadlineRouter.js +7 -1
  23. package/dist/threadline/ThreadlineRouter.js.map +1 -1
  24. package/package.json +1 -1
  25. package/scripts/instar-dev-precommit.js +10 -1
  26. package/src/data/builtin-manifest.json +46 -46
  27. package/upgrades/1.3.121.md +39 -0
  28. package/upgrades/1.3.122.md +86 -0
  29. package/upgrades/side-effects/1.3.121.md +97 -0
  30. package/upgrades/side-effects/codex-exec-json-silence-signal.md +64 -0
  31. package/upgrades/side-effects/codex-resume-jsonl-exists.md +68 -0
  32. package/upgrades/side-effects/ship-gate-sha-mismatch-error.md +54 -0
  33. package/upgrades/side-effects/threadline-relay-content-dedup.md +93 -0
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-05-30T13:00:21.305Z",
5
- "instarVersion": "1.3.120",
4
+ "generatedAt": "2026-05-30T19:19:17.451Z",
5
+ "instarVersion": "1.3.122",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
412
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
420
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
428
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
436
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
444
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
452
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
460
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
468
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
476
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
484
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
492
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
500
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
508
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
516
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
524
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
532
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
540
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
548
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
556
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
564
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
572
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
580
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
588
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
596
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
604
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
612
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
620
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
628
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
636
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
644
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
652
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
660
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
668
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
676
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
684
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
692
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
700
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
708
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
716
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
724
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
732
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
740
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
748
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
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": "85676f4062c0ea35989c300891883e3d6db36080e4674bca111020a9d64d1081",
764
+ "contentHash": "fcb2697c6ec9a8bef582f84a0f536c7eebd9d5b4c52e1679a47684069746f8a6",
765
765
  "since": "2025-01-01"
766
766
  },
767
767
  "cli:init": {
@@ -0,0 +1,39 @@
1
+ # Instar Upgrade Guide — vNEXT
2
+
3
+ <!-- bump: patch -->
4
+
5
+ ## What Changed
6
+
7
+ **Threadline session-completion demotion now writes the matched conversation
8
+ directly.**
9
+
10
+ The v1.3.120 UUID fallback correctly found real inbound Threadline worker
11
+ sessions by `SessionManager` UUID, but the demotion path re-entered the resume
12
+ guard through `onSessionEnd()`. That guard expects a resumable Claude/Codex
13
+ transcript JSONL, while live Threadline spawns persist the `SessionManager`
14
+ session id. The result was a misleading `demoted 1` log with the conversation
15
+ still left `active`.
16
+
17
+ Fix: `ThreadlineRouter.onSessionComplete()` now demotes from the already matched
18
+ conversation entry instead of re-reading through the resume guard. The existing
19
+ awaiting-reply skip still applies before any write.
20
+
21
+ ## What to Tell Your User
22
+
23
+ Threadline worker threads now really retire when their spawned session is
24
+ stopped or completes. The previous release could log that it demoted a thread
25
+ without actually moving the conversation out of the active list.
26
+
27
+ ## Summary of New Capabilities
28
+
29
+ | Capability | How to Use |
30
+ |-----------|-----------|
31
+ | Direct completion demotion | Automatic when a Threadline worker emits `sessionComplete` |
32
+ | Non-transcript SessionManager UUID support | Automatic for inbound Threadline spawns |
33
+
34
+ ## Evidence
35
+
36
+ - **Regression:** `ThreadlineRouter.onSessionComplete()` demotes a UUID-matched
37
+ active thread even when that UUID has no transcript JSONL.
38
+ - **Live canary basis:** v1.3.120 matched by UUID and logged `demoted 1`, but the
39
+ persisted conversation stayed `active`; this patch fixes that write path.
@@ -0,0 +1,86 @@
1
+ # Instar Upgrade Guide — vNEXT
2
+
3
+ <!-- bump: patch -->
4
+
5
+ ## What Changed
6
+
7
+ Four codex-compatibility and robustness fixes found while dogfooding a codex agent.
8
+
9
+ **1. Codex session resume now works.** `ThreadResumeMap` / `TopicResumeMap`
10
+ `jsonlExists` only checked the Claude transcript layout
11
+ (`~/.claude/projects/<encoded>/<uuid>.jsonl`), so it returned false for every
12
+ codex session — `get()` returned null and resume silently failed fleet-wide for
13
+ codex agents. It now also resolves codex rollout files
14
+ (`$CODEX_HOME/sessions/YYYY/MM/DD/rollout-<ts>-<uuid>.jsonl`) via a new
15
+ `findRolloutFileSync`. The Claude path is byte-for-byte unchanged.
16
+
17
+ **2. The silence watchdog now sees codex jobs.** `ActiveWorkSilenceSentinel`
18
+ only recognized codex's interactive-TUI "working" signature, so a
19
+ `codex exec --json` job (which emits a JSON event stream, not the TUI status
20
+ line) read as idle and was never watched. The codex activity signature now
21
+ matches the exec-json event stream (`thread`/`turn`/`item` events); the idle
22
+ model-name guard is preserved.
23
+
24
+ **3. Duplicate agent-to-agent replies fixed.** A sender that timed out on the
25
+ receiver's session spawn retried with a fresh `message.id`, slipping past the
26
+ id-based relay dedup and causing a duplicate reply. A bounded content-hash dedup
27
+ at the `relay-agent` ingress collapses an identical retry within a short window.
28
+
29
+ **4. Clearer ship-gate error.** The artifact-sha-mismatch block now prints the
30
+ exact sha to write plus the freeze / re-stage / no-amend recipe.
31
+
32
+ ## Summary of New Capabilities
33
+
34
+ - Codex-based agents resume conversations across restarts and compactions, the
35
+ same as Claude agents.
36
+ - The silent-freeze watchdog now monitors codex background/job sessions, so a
37
+ wedged `codex exec --json` job is detected and nudged instead of hanging
38
+ unseen.
39
+ - Agent-to-agent messaging is idempotent against a slow-retry: an identical
40
+ message redelivered within the window is acknowledged once, not replied to
41
+ twice.
42
+ - The developer ship-gate gives an actionable sha-mismatch message instead of a
43
+ dead end.
44
+
45
+ ## Evidence
46
+
47
+ **1. Codex resume.** Reproduction: take a codex agent's saved resume UUID and
48
+ call the resume guard. Before: `jsonlExists(uuid)` returned `false` (it only read
49
+ `~/.claude/projects`), so `get()` returned `null` and the session re-spawned
50
+ fresh instead of resuming. After: with a codex rollout present at
51
+ `$CODEX_HOME/sessions/.../rollout-<ts>-<uuid>.jsonl` and no Claude jsonl,
52
+ `jsonlExists(uuid)` returns `true` and resume proceeds. A fixture test sets
53
+ `$HOME` to a codex-only layout and asserts the predicate flipped false to true.
54
+
55
+ **2. Silence watchdog.** Reproduction observed live 2026-05-30: a
56
+ `codex exec --json` commitment-detection job froze mid-turn (last pane output
57
+ `{"type":"turn.started"}`) and sat idle for ~8.5 hours; the watchdog never
58
+ flagged it because `looksActivelyWorking` returned false for the JSON event
59
+ frame. After: the same frame is recognized as active, so the session is
60
+ silence-eligible and the freeze is detected after the threshold. The idle
61
+ model-name line (`gpt-5.3-codex medium · <dir>`) still reads as inactive (no
62
+ false positive).
63
+
64
+ **3. Duplicate replies.** Reproduction observed live 2026-05-30: a codex agent's
65
+ reply doubled six times in one evening — the sender timed out on the receiver's
66
+ spawn and resent the same content with a fresh id, which the id-based dedup did
67
+ not catch, so the receiver spawned and replied twice. After: an integration test
68
+ drives the real `POST /messages/relay-agent`; a retry with a fresh id but
69
+ identical `(sender, thread, content)` is deduped and the receiver is handed the
70
+ message exactly once, while genuinely different content and a different sender
71
+ both still process.
72
+
73
+ **4. Ship-gate message.** Reproduction observed live 2026-05-30: an agent hit the
74
+ sha-mismatch block, regenerated the artifact to "fix" it (which changed the
75
+ volatile `Date:` line, hence the sha), and chased the hash for ~2 hours. Before:
76
+ the message only said "artifact content has changed (sha mismatch)". After: a
77
+ subprocess test stages a deliberately-wrong recorded sha and confirms the block
78
+ now prints the exact computed sha plus the re-stage / no-amend recipe.
79
+
80
+ ## What to Tell Your User
81
+
82
+ Codex-based agents can now resume conversations and are watched by the
83
+ freeze-detector just like Claude agents; agent-to-agent chats no longer
84
+ double-send on a slow retry; and the developer ship-gate gives an actionable
85
+ message instead of a dead end. No action needed — these land automatically on
86
+ update.
@@ -0,0 +1,97 @@
1
+ # Side-Effects Review — Threadline completion direct demotion
2
+
3
+ **Version / slug:** `1.3.121`
4
+ **Date:** 2026-05-30
5
+ **Author:** `instar-codey`
6
+ **Second-pass reviewer:** `live canary`
7
+
8
+ ## Summary of the change
9
+
10
+ This patch fixes the final write step in Threadline session-completion
11
+ retirement. The v1.3.120 UUID lookup found live inbound worker conversations,
12
+ but `ThreadlineRouter.onSessionComplete()` delegated to `onSessionEnd()`, which
13
+ re-read the thread through the resume guard. For live Threadline spawns the
14
+ stored UUID is a `SessionManager` id, not a resumable transcript UUID, so the
15
+ guard could return null. The completion log then said `demoted 1` while the
16
+ conversation stayed `active`.
17
+
18
+ The router now writes the matched entry to `idle` directly after the
19
+ awaiting-reply guard passes.
20
+
21
+ ## Decision-point inventory
22
+
23
+ - `ThreadlineRouter.onSessionComplete()` — modify — demotes from the matched
24
+ live conversation entry instead of re-entering the transcript resume guard.
25
+ - `ThreadlineRouter.onSessionEnd()` — unchanged — remains the explicit
26
+ thread-id + resumable-UUID path.
27
+
28
+ ---
29
+
30
+ ## 1. Over-block
31
+
32
+ No block/allow surface. The over-demotion risk is unchanged from v1.3.120:
33
+ only active conversations already matched by bound session name or
34
+ SessionManager UUID are moved to `idle`, and `awaiting-reply` conversations are
35
+ skipped before any write.
36
+
37
+ ---
38
+
39
+ ## 2. Under-block
40
+
41
+ The change still cannot demote records that have neither a matching
42
+ `boundSessionName` nor a matching `sessionUuid`. The observed live path does
43
+ persist `sessionUuid`, and v1.3.120 added the lookup.
44
+
45
+ ---
46
+
47
+ ## 3. Level-of-abstraction fit
48
+
49
+ The fix stays in the lifecycle router, where the completion decision already
50
+ lives. `ThreadResumeMap` remains the storage adapter; it is not given new
51
+ authority to decide lifecycle state.
52
+
53
+ ---
54
+
55
+ ## 4. Signal vs authority compliance
56
+
57
+ **Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
58
+
59
+ - [x] No — this change has no block/allow surface.
60
+
61
+ The authoritative completion signal still comes from `SessionManager`. This
62
+ patch only corrects how the router applies that signal to a matched local
63
+ conversation.
64
+
65
+ ---
66
+
67
+ ## 5. Interactions
68
+
69
+ - **Resume guard:** direct demotion intentionally bypasses the transcript
70
+ existence guard because the match already came from a live conversation
71
+ record, not from a user-initiated resume lookup.
72
+ - **Awaiting reply:** preserved; `awaiting-reply` records are counted and left
73
+ untouched before direct demotion runs.
74
+ - **Double match:** still deduped by `threadId` before writes.
75
+ - **Logging:** the existing `demoted N / skipped M` log now reflects actual
76
+ writes instead of possible guard-filtered no-ops.
77
+
78
+ ---
79
+
80
+ ## 6. External surfaces
81
+
82
+ Other agents and dashboards should see completed Threadline worker conversations
83
+ leave the active set promptly. Existing records are not migrated; they demote
84
+ when their bound worker emits a completion event.
85
+
86
+ ---
87
+
88
+ ## 7. Rollback cost
89
+
90
+ Rollback is a small patch reverting `onSessionComplete()` to delegate through
91
+ `onSessionEnd()`. No schema or data migration is involved.
92
+
93
+ ## Conclusion
94
+
95
+ The live canary caught a false-positive demotion log. This patch keeps the
96
+ v1.3.120 name/UUID matching and makes the matched completion path actually
97
+ persist `idle`.