instar 1.3.42 → 1.3.44

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 (111) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +292 -3
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/HandoffReceiver.d.ts +56 -0
  5. package/dist/core/HandoffReceiver.d.ts.map +1 -0
  6. package/dist/core/HandoffReceiver.js +103 -0
  7. package/dist/core/HandoffReceiver.js.map +1 -0
  8. package/dist/core/HandoffWireTransport.d.ts +61 -0
  9. package/dist/core/HandoffWireTransport.d.ts.map +1 -0
  10. package/dist/core/HandoffWireTransport.js +114 -0
  11. package/dist/core/HandoffWireTransport.js.map +1 -0
  12. package/dist/core/HttpLeaseTransport.d.ts +68 -0
  13. package/dist/core/HttpLeaseTransport.d.ts.map +1 -0
  14. package/dist/core/HttpLeaseTransport.js +97 -0
  15. package/dist/core/HttpLeaseTransport.js.map +1 -0
  16. package/dist/core/HttpLiveTailTransport.d.ts +88 -0
  17. package/dist/core/HttpLiveTailTransport.d.ts.map +1 -0
  18. package/dist/core/HttpLiveTailTransport.js +95 -0
  19. package/dist/core/HttpLiveTailTransport.js.map +1 -0
  20. package/dist/core/LeaseCoordinator.d.ts +14 -0
  21. package/dist/core/LeaseCoordinator.d.ts.map +1 -1
  22. package/dist/core/LeaseCoordinator.js +38 -0
  23. package/dist/core/LeaseCoordinator.js.map +1 -1
  24. package/dist/core/LiveTailSource.d.ts +65 -0
  25. package/dist/core/LiveTailSource.d.ts.map +1 -0
  26. package/dist/core/LiveTailSource.js +87 -0
  27. package/dist/core/LiveTailSource.js.map +1 -0
  28. package/dist/core/MultiMachineCoordinator.d.ts +14 -0
  29. package/dist/core/MultiMachineCoordinator.d.ts.map +1 -1
  30. package/dist/core/MultiMachineCoordinator.js +22 -0
  31. package/dist/core/MultiMachineCoordinator.js.map +1 -1
  32. package/dist/core/ReplyMarkerTransport.d.ts +58 -0
  33. package/dist/core/ReplyMarkerTransport.d.ts.map +1 -0
  34. package/dist/core/ReplyMarkerTransport.js +66 -0
  35. package/dist/core/ReplyMarkerTransport.js.map +1 -0
  36. package/dist/core/SafeGitExecutor.d.ts.map +1 -1
  37. package/dist/core/SafeGitExecutor.js +21 -2
  38. package/dist/core/SafeGitExecutor.js.map +1 -1
  39. package/dist/core/featureRolloutScan.d.ts.map +1 -1
  40. package/dist/core/featureRolloutScan.js +5 -4
  41. package/dist/core/featureRolloutScan.js.map +1 -1
  42. package/dist/core/handoffReceiverWiring.d.ts +57 -0
  43. package/dist/core/handoffReceiverWiring.d.ts.map +1 -0
  44. package/dist/core/handoffReceiverWiring.js +65 -0
  45. package/dist/core/handoffReceiverWiring.js.map +1 -0
  46. package/dist/core/handoffSentinelBootWiring.d.ts +53 -0
  47. package/dist/core/handoffSentinelBootWiring.d.ts.map +1 -0
  48. package/dist/core/handoffSentinelBootWiring.js +52 -0
  49. package/dist/core/handoffSentinelBootWiring.js.map +1 -0
  50. package/dist/core/handoffSentinelWiring.d.ts +60 -0
  51. package/dist/core/handoffSentinelWiring.d.ts.map +1 -0
  52. package/dist/core/handoffSentinelWiring.js +59 -0
  53. package/dist/core/handoffSentinelWiring.js.map +1 -0
  54. package/dist/core/seamlessnessConfig.d.ts +8 -0
  55. package/dist/core/seamlessnessConfig.d.ts.map +1 -1
  56. package/dist/core/seamlessnessConfig.js +1 -0
  57. package/dist/core/seamlessnessConfig.js.map +1 -1
  58. package/dist/core/types.d.ts +6 -0
  59. package/dist/core/types.d.ts.map +1 -1
  60. package/dist/core/types.js.map +1 -1
  61. package/dist/messaging/TelegramAdapter.d.ts +6 -0
  62. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  63. package/dist/messaging/TelegramAdapter.js +8 -0
  64. package/dist/messaging/TelegramAdapter.js.map +1 -1
  65. package/dist/messaging/ingressDedup.d.ts +55 -0
  66. package/dist/messaging/ingressDedup.d.ts.map +1 -0
  67. package/dist/messaging/ingressDedup.js +69 -0
  68. package/dist/messaging/ingressDedup.js.map +1 -0
  69. package/dist/messaging/stuckMessageRecovery.d.ts +46 -0
  70. package/dist/messaging/stuckMessageRecovery.d.ts.map +1 -0
  71. package/dist/messaging/stuckMessageRecovery.js +52 -0
  72. package/dist/messaging/stuckMessageRecovery.js.map +1 -0
  73. package/dist/monitoring/releaseReadinessWiring.d.ts.map +1 -1
  74. package/dist/monitoring/releaseReadinessWiring.js +4 -2
  75. package/dist/monitoring/releaseReadinessWiring.js.map +1 -1
  76. package/dist/server/AgentServer.d.ts +64 -0
  77. package/dist/server/AgentServer.d.ts.map +1 -1
  78. package/dist/server/AgentServer.js +24 -0
  79. package/dist/server/AgentServer.js.map +1 -1
  80. package/dist/server/handoffInitiateRoutes.d.ts +40 -0
  81. package/dist/server/handoffInitiateRoutes.d.ts.map +1 -0
  82. package/dist/server/handoffInitiateRoutes.js +57 -0
  83. package/dist/server/handoffInitiateRoutes.js.map +1 -0
  84. package/dist/server/machineRoutes.d.ts +47 -0
  85. package/dist/server/machineRoutes.d.ts.map +1 -1
  86. package/dist/server/machineRoutes.js +138 -0
  87. package/dist/server/machineRoutes.js.map +1 -1
  88. package/dist/server/routes.d.ts +20 -0
  89. package/dist/server/routes.d.ts.map +1 -1
  90. package/dist/server/routes.js +65 -0
  91. package/dist/server/routes.js.map +1 -1
  92. package/package.json +1 -1
  93. package/src/data/builtin-manifest.json +49 -49
  94. package/upgrades/1.3.41.md +9 -5
  95. package/upgrades/1.3.43.md +21 -0
  96. package/upgrades/1.3.44.md +72 -0
  97. package/upgrades/side-effects/cross-machine-seamlessness-consent-acquire.md +52 -0
  98. package/upgrades/side-effects/cross-machine-seamlessness-exactly-once-ingress.md +73 -0
  99. package/upgrades/side-effects/cross-machine-seamlessness-handoff-ack-yield.md +82 -0
  100. package/upgrades/side-effects/cross-machine-seamlessness-handoff-begin.md +48 -0
  101. package/upgrades/side-effects/cross-machine-seamlessness-handoff-boot-wiring.md +68 -0
  102. package/upgrades/side-effects/cross-machine-seamlessness-handoff-receiver-wiring.md +52 -0
  103. package/upgrades/side-effects/cross-machine-seamlessness-handoff-receiver.md +46 -0
  104. package/upgrades/side-effects/cross-machine-seamlessness-handoff-sentinel-wiring.md +47 -0
  105. package/upgrades/side-effects/cross-machine-seamlessness-lease-wire.md +46 -0
  106. package/upgrades/side-effects/cross-machine-seamlessness-livetail-source.md +50 -0
  107. package/upgrades/side-effects/cross-machine-seamlessness-livetail-streaming.md +50 -0
  108. package/upgrades/side-effects/cross-machine-seamlessness-livetail-wire.md +65 -0
  109. package/upgrades/side-effects/cross-machine-seamlessness-noloss-recovery.md +61 -0
  110. package/upgrades/side-effects/cross-machine-seamlessness-reply-marker.md +65 -0
  111. package/upgrades/side-effects/source-tree-guard-readsync-bypass.md +34 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.42",
3
+ "version": "1.3.44",
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-28T01:08:27.908Z",
5
- "instarVersion": "1.3.42",
4
+ "generatedAt": "2026-05-28T01:59:27.143Z",
5
+ "instarVersion": "1.3.44",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
412
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
420
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
428
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
436
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
444
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
452
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
460
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
468
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
476
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
484
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
492
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
500
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
508
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
516
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
524
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
532
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
540
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
548
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
556
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
564
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
572
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
580
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
588
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
596
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
604
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
612
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
620
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
628
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
636
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
644
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
652
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
660
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
668
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
676
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
684
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
692
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
700
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
708
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
716
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
724
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
732
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
740
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
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": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
748
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
749
749
  "since": "2025-01-01"
750
750
  },
751
751
  "route-group:machine-mesh": {
@@ -753,7 +753,7 @@
753
753
  "type": "route-group",
754
754
  "domain": "coordination",
755
755
  "sourcePath": "src/server/machineRoutes.ts",
756
- "contentHash": "5bd048aabb524e50a9f2808e4e0400ae728f5e36797e5850eff4ff7aae7921f9",
756
+ "contentHash": "b8a789fea855d5e45cffc3ffaea6fcf3c04d4cbb39b3097a1590ee76ccc5378b",
757
757
  "since": "2025-01-01"
758
758
  },
759
759
  "route-group:secret-drop": {
@@ -761,7 +761,7 @@
761
761
  "type": "route-group",
762
762
  "domain": "security",
763
763
  "sourcePath": "src/server/routes.ts",
764
- "contentHash": "d6cc32ccd33508137b7c33451cea0c9f0d29eda5fd13456743133c0c50a955ed",
764
+ "contentHash": "8c1ca53475ef9ebe286fcdc8a4bbf5a46e0503b242dfa1040685e15ea0eea830",
765
765
  "since": "2025-01-01"
766
766
  },
767
767
  "cli:init": {
@@ -1457,7 +1457,7 @@
1457
1457
  "type": "subsystem",
1458
1458
  "domain": "server",
1459
1459
  "sourcePath": "src/server/AgentServer.ts",
1460
- "contentHash": "d97b98638cccf4bd66b46d2d49615a5f5a416eebddf6bcae7ab3473800f02990",
1460
+ "contentHash": "678de8d250b39e3b7bf4470d1e8b7d6290791d0595fea7686f4bd8347b2b92bd",
1461
1461
  "since": "2025-01-01"
1462
1462
  },
1463
1463
  "subsystem:session-manager": {
@@ -1545,7 +1545,7 @@
1545
1545
  "type": "subsystem",
1546
1546
  "domain": "coordination",
1547
1547
  "sourcePath": "src/core/MultiMachineCoordinator.ts",
1548
- "contentHash": "48c59a44dc01c3f3e5f7e4579b623515f95b8751649e51b8f840eea5b45e1869",
1548
+ "contentHash": "f0ad105ab4996bb6d14d2c836430fb6f7c8b7adab512c6a21c03bd5f029d8d3b",
1549
1549
  "since": "2025-01-01"
1550
1550
  },
1551
1551
  "subsystem:backup-manager": {
@@ -21,23 +21,27 @@ prior PR (until the bot is configured, none of this runs):
21
21
  one as a deduped `DegradationReporter` event (silent reply-loss is observable). Marks
22
22
  on successful send; defers if prior-prompt-in-flight.
23
23
 
24
+ ---
25
+
26
+ `SourceTreeGuard` `sourceTreeReadOk` opt extended to `readSync` (defense-in-depth source-tree check on the read path) + `SOURCE_TREE_READ_TIER_VERBS` expanded to cover the canonical-ref read path the watchdog and reconciler use (`rev-parse`, `ls-tree`, `show`, `log`, `cat-file`, `merge-base`, `remote`). Caught dogfooding Echo on v1.3.38: the previous fix only opened `execSync` to `fetch`, but every downstream readonly verb still tripped the guard. With this PR landed, the watchdog completes a real tick against the agent's own instar source.
27
+
24
28
  ## What to Tell Your User
25
29
 
26
30
  - Plumbing for the mentor feature — your concern about agents bouncing messages back and forth in a loop is now structurally impossible at the timing layer. Echo cannot send a new mentor message while it's still waiting on the prior reply, and if a reply never arrives an alert is raised instead of a silent retry. Stays completely dark until the mentor bot is configured.
31
+ - I can finally complete a real release-readiness watchdog tick against my own checkout. The first dogfood attempt caught a real safety-guard interaction; this update closes the loop so the watchdog can read what it needs without bypassing the broader policy.
27
32
 
28
33
  ## Summary of New Capabilities
29
34
 
30
35
  | Capability | How to Use |
31
36
  |-----------|-----------|
32
37
  | Mentor receiver + anti-ping-pong (dark) | Internal — `OutstandingPromptTracker` (per-mentee persistent state) blocks re-sends while a prior is in flight; mentor-reply role-handler clears the tracker on reply; orphan-sweep emits one deduped `DegradationReporter` event per orphaned correlation id |
38
+ | SourceTreeGuard `sourceTreeReadOk` on readSync | Pass `sourceTreeReadOk: true` to `SafeGitExecutor.run` / `readSync` for the read-tier verbs in `SOURCE_TREE_READ_TIER_VERBS` (now `fetch`, `rev-parse`, `ls-tree`, `show`, `log`, `cat-file`, `merge-base`, `remote`) |
33
39
 
34
40
  ## Evidence
35
41
 
36
42
  **Net-new groundwork, not a bug fix.** 10 new unit tests for `OutstandingPromptTracker`,
37
- all green: anti-ping-pong assertion (markSent → canSendTo returns prior-prompt-in-flight);
38
- clearByCorr happy + spurious; cross-mentee non-blocking; persistence across re-open
39
- (server restart preserves in-flight state); reply-timeout sweep; sweepExpired returns
40
- orphans; orphan-notify idempotency (don't re-spam the same orphan-episode); corrupt-file
41
- recovery starts fresh. The receiver wiring + tracker integration in `AgentServer.deliverToMentee`
43
+ all green. The receiver wiring + tracker integration in `AgentServer.deliverToMentee`
42
44
  is the dark layer that the bot-setup live flow will exercise in the next PR.
43
45
  `tsc --noEmit` clean. 50 mentor-stack tests across the staged build, all green.
46
+
47
+ For the SourceTreeGuard read-tier bypass: 7 unit tests covering both `execSync` and `readSync` paths with + without the opt, the closed-set invariant (10 destructive verbs explicitly NOT in the set), and the verbs the canonical-ref read path actually uses. Side-effects: `upgrades/side-effects/source-tree-guard-readsync-bypass.md`.
@@ -0,0 +1,21 @@
1
+ # Instar Upgrade Guide — NEXT
2
+
3
+ <!-- bump: patch -->
4
+
5
+ ## What Changed
6
+
7
+ `SourceTreeGuard` `sourceTreeReadOk` opt extended to `readSync` (defense-in-depth source-tree check on the read path) + `SOURCE_TREE_READ_TIER_VERBS` expanded to cover the canonical-ref read path the watchdog and reconciler use (`rev-parse`, `ls-tree`, `show`, `log`, `cat-file`, `merge-base`, `remote`). Caught dogfooding Echo on v1.3.38: the previous fix only opened `execSync` to `fetch`, but every downstream readonly verb still tripped the guard. With this PR landed, the watchdog completes a real tick against the agent's own instar source.
8
+
9
+ ## What to Tell Your User
10
+
11
+ - I can finally complete a real release-readiness watchdog tick against my own checkout. The first dogfood attempt caught a real safety-guard interaction; this update closes the loop so the watchdog can read what it needs without bypassing the broader policy.
12
+
13
+ ## Summary of New Capabilities
14
+
15
+ | Capability | How to Use |
16
+ |-----------|-----------|
17
+ | SourceTreeGuard `sourceTreeReadOk` on readSync | Pass `sourceTreeReadOk: true` to `SafeGitExecutor.run` / `readSync` for the read-tier verbs in `SOURCE_TREE_READ_TIER_VERBS` (now `fetch`, `rev-parse`, `ls-tree`, `show`, `log`, `cat-file`, `merge-base`, `remote`) |
18
+
19
+ ## Evidence
20
+
21
+ 7 unit tests covering both `execSync` and `readSync` paths with + without the opt, the closed-set invariant (10 destructive verbs explicitly NOT in the set), and the verbs the canonical-ref read path actually uses. Side-effects: `upgrades/side-effects/source-tree-guard-readsync-bypass.md`.
@@ -0,0 +1,72 @@
1
+ # Instar Upgrade Guide — NEXT
2
+
3
+ <!-- bump: patch -->
4
+
5
+ ## What Changed
6
+
7
+ **Cross-machine seamlessness — full wiring landed (mostly dark).** The integration
8
+ follow-on to PR #419. #419 shipped the seamlessness *components* (G1 fenced lease,
9
+ G2 auto-sync, G3 ledger/outbox/live-tail/HandoffSentinel logic) unit-tested but
10
+ not wired into the live path. PR #428 wires them in — the machine-to-machine
11
+ "phone line", the handoff conductor, and the exactly-once message guarantee — and
12
+ proves each end-to-end. Single-machine agents are completely unaffected: every new
13
+ component is gated on a multi-machine mesh + lease holder + (where flagged) an
14
+ explicit opt-in config flag.
15
+
16
+ What's now LIVE on every install (not flag-gated, but no-op on a solo agent):
17
+
18
+ - **Lease wire transport** — `HttpLeaseTransport` + `POST /api/lease` route, into
19
+ `LeaseCoordinator`. Single-machine no-op (no peers).
20
+ - **Live-tail streaming** — holder pushes the encrypted conversation tail to the
21
+ standby on a cadence (`LiveTailSource` → `HttpLiveTailTransport` → receiver
22
+ `LiveTailBuffer`); redaction-before-encryption; only the lease holder streams.
23
+ - **Handoff conductor** — `HandoffSentinel` (outgoing) + `HandoffReceiver`
24
+ (incoming) bolted into server boot; `POST /api/handoff/{begin,ack,yield}`
25
+ (signed) + `POST /handoff/initiate` (operator trigger). The lease is **never
26
+ yielded** unless the incoming machine's echo verifies AND validation passes —
27
+ proven over two real booted servers (caught-up → handed-off; divergent → aborts
28
+ and stays awake = no two-captains).
29
+
30
+ What's DARK (behind `multiMachine.exactlyOnceIngress`, off by default until a live
31
+ two-machine test-as-self confirms no false-drops on the most critical path):
32
+
33
+ - **Exactly-once ingress ledger** — `MessageProcessingLedger` for inbound dedup +
34
+ outbound `FencedOutbox` for reply commit, plus `ReplyMarkerTransport` propagating
35
+ the `reply_committed` marker to standby peers so a post-handoff redelivery can't
36
+ re-send a reply the old holder already committed.
37
+
38
+ Architecture documentation added: `site/src/content/docs/features/multi-machine.md`
39
+ gains a "Seamlessness Architecture (Components)" section grouping the 14 new classes
40
+ by role (coordination, planned handoff, live-tail streaming, exactly-once delivery,
41
+ update coordination).
42
+
43
+ ## What to Tell Your User
44
+
45
+ - The seamlessness wiring you've been hearing about is now landed — your laptop and a
46
+ second machine (when you have one) can take turns being the awake agent without
47
+ losing the conversation. On a solo setup nothing changes; this is groundwork.
48
+ - The trickiest part — making sure a reply never goes out twice during a hand-off —
49
+ is wired but turned off by default until I've live-tested it on two real machines.
50
+ - A new architecture doc page explains the components in plain English if you ever
51
+ want a tour: Multi-Machine → Seamlessness Architecture.
52
+
53
+ ## Summary of New Capabilities
54
+
55
+ | Capability | How to Use |
56
+ |-----------|-----------|
57
+ | `POST /api/lease` | Low-latency lease transport between mesh peers (server-to-server, signed). Solo agents see no traffic. |
58
+ | `POST /api/handoff/{begin,ack,yield}` | Planned-handoff protocol endpoints (signed, machine-to-machine). |
59
+ | `POST /handoff/initiate` | Operator trigger: gracefully hand the awake role to a specific peer. |
60
+ | `multiMachine.exactlyOnceIngress` (config flag, default off) | Enables the inbound-dedup + reply-commit guarantee. Flip on only after a two-machine live test confirms no false-drops. |
61
+ | Multi-Machine doc: Seamlessness Architecture | New section in `site/src/content/docs/features/multi-machine.md` — names each component, groups by role. |
62
+
63
+ ## Evidence
64
+
65
+ **Integration follow-on, mostly wiring + boot glue.** All component logic was
66
+ unit-tested in #419; this PR adds the live-path wiring with paired wiring-integrity
67
+ tests for each bolt-in. Two real booted servers exercised the handoff protocol
68
+ (caught-up → handed-off; divergent → aborts and stays awake). Single-conflict merge
69
+ of main into the branch (only `src/commands/server.ts`, in the AgentServer
70
+ constructor call — both sides added new components; resolution kept all and merged
71
+ the field list). `tsc --noEmit` clean post-merge. Docs-coverage class floor cleared
72
+ (54% → 56%, > 55% floor).
@@ -0,0 +1,52 @@
1
+ # Side-Effects Review — Cross-Machine Seamlessness: consented lease acquire (planned handoff)
2
+
3
+ **Spec:** docs/specs/CROSS-MACHINE-SEAMLESSNESS-SPEC.md §8 G3e (converged, approved)
4
+
5
+ The lease primitive a PLANNED handoff needs: the incoming machine takes the lease
6
+ while the outgoing is still alive, which the liveness-gated `acquireIfEligible()`
7
+ correctly refuses. Added as an ADDITIVE consent path — the split-brain-critical
8
+ `canAcquire()` gate (hardware-verified for G1) is deliberately left untouched.
9
+
10
+ ## What changed
11
+ - `src/core/LeaseCoordinator.ts` — NEW `acquireOnConsent(yieldFromMachineId)`.
12
+ Bypasses the liveness `canAcquire()` gate (because the holder explicitly consented
13
+ via a verified yield), CAS-advances to epoch+1, broadcasts, emits the new epoch.
14
+ **Security guard:** if there is a current holder and it is NOT the yielding machine,
15
+ the acquire is REFUSED — a yield from any non-holder cannot trigger a takeover.
16
+ Already-ours → true (idempotent); empty lease → acquire.
17
+ - `src/core/MultiMachineCoordinator.ts` — NEW `acquireLeaseOnConsent(yieldFromMachineId)`:
18
+ the onYield entry point — delegates to the guarded consent path, then reconciles
19
+ role → awake on success.
20
+
21
+ ## Over-block / under-block
22
+ - The guard is the security boundary: only the CURRENT holder's yield grants the
23
+ takeover. Combined with the route's machineAuth (the yield came from an
24
+ authenticated machine), a forged or misdirected yield is doubly defeated.
25
+ - If the CAS is lost (someone already advanced), the consent acquire adopts the
26
+ observed epoch and stands down — no double-advance, no split-brain.
27
+ - The existing `acquireIfEligible()` / `canAcquire()` / `renew()` paths are byte-for-byte
28
+ UNCHANGED, so the hardware-verified G1 split-brain guarantee is preserved exactly. This
29
+ is purely additive surface reachable only from the handoff yield handler.
30
+
31
+ ## Signal vs authority
32
+ - This IS an authority mutation (it advances the lease epoch) — and it is correctly
33
+ gated: reachable only from the authenticated /api/handoff/yield handler, and only
34
+ when the yielding machine is the observed holder. The decision to yield (verified
35
+ ack + validation) lives upstream in HandoffSentinel.
36
+
37
+ ## Interactions
38
+ - Consumed (next integrating commit) by the /api/handoff/yield route's onYield handler:
39
+ `coordinator.acquireLeaseOnConsent(fromMachineId)`. The outgoing machine's HandoffSentinel
40
+ sends the yield only after a verified ack + passing validation, so by the time consent
41
+ reaches the incoming, the outgoing has committed to standing down.
42
+ - Mirrors the success path of acquireIfEligible (effectiveView → buildAcquisition → casWrite
43
+ → broadcast → emitEpoch), so behavior is consistent with the proven acquisition flow.
44
+
45
+ ## Rollback cost
46
+ - Minimal — two additive methods, no change to existing paths. Reverting removes them.
47
+
48
+ ## Tests
49
+ - `tests/unit/LeaseCoordinator.test.ts` (+4, 12 total): consent takes a LIVE peer-held
50
+ lease (the bypass) while the normal path refuses it; **SECURITY — a yield from a
51
+ non-holder is refused (no takeover)**; idempotent when already held; acquires from empty.
52
+ tsc clean.