instar 1.3.43 → 1.3.45

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 (103) hide show
  1. package/dashboard/index.html +68 -14
  2. package/dashboard/process-health.js +204 -53
  3. package/dist/commands/server.d.ts.map +1 -1
  4. package/dist/commands/server.js +292 -3
  5. package/dist/commands/server.js.map +1 -1
  6. package/dist/core/HandoffReceiver.d.ts +56 -0
  7. package/dist/core/HandoffReceiver.d.ts.map +1 -0
  8. package/dist/core/HandoffReceiver.js +103 -0
  9. package/dist/core/HandoffReceiver.js.map +1 -0
  10. package/dist/core/HandoffWireTransport.d.ts +61 -0
  11. package/dist/core/HandoffWireTransport.d.ts.map +1 -0
  12. package/dist/core/HandoffWireTransport.js +114 -0
  13. package/dist/core/HandoffWireTransport.js.map +1 -0
  14. package/dist/core/HttpLeaseTransport.d.ts +68 -0
  15. package/dist/core/HttpLeaseTransport.d.ts.map +1 -0
  16. package/dist/core/HttpLeaseTransport.js +97 -0
  17. package/dist/core/HttpLeaseTransport.js.map +1 -0
  18. package/dist/core/HttpLiveTailTransport.d.ts +88 -0
  19. package/dist/core/HttpLiveTailTransport.d.ts.map +1 -0
  20. package/dist/core/HttpLiveTailTransport.js +95 -0
  21. package/dist/core/HttpLiveTailTransport.js.map +1 -0
  22. package/dist/core/LeaseCoordinator.d.ts +14 -0
  23. package/dist/core/LeaseCoordinator.d.ts.map +1 -1
  24. package/dist/core/LeaseCoordinator.js +38 -0
  25. package/dist/core/LeaseCoordinator.js.map +1 -1
  26. package/dist/core/LiveTailSource.d.ts +65 -0
  27. package/dist/core/LiveTailSource.d.ts.map +1 -0
  28. package/dist/core/LiveTailSource.js +87 -0
  29. package/dist/core/LiveTailSource.js.map +1 -0
  30. package/dist/core/MultiMachineCoordinator.d.ts +14 -0
  31. package/dist/core/MultiMachineCoordinator.d.ts.map +1 -1
  32. package/dist/core/MultiMachineCoordinator.js +22 -0
  33. package/dist/core/MultiMachineCoordinator.js.map +1 -1
  34. package/dist/core/ReplyMarkerTransport.d.ts +58 -0
  35. package/dist/core/ReplyMarkerTransport.d.ts.map +1 -0
  36. package/dist/core/ReplyMarkerTransport.js +66 -0
  37. package/dist/core/ReplyMarkerTransport.js.map +1 -0
  38. package/dist/core/handoffReceiverWiring.d.ts +57 -0
  39. package/dist/core/handoffReceiverWiring.d.ts.map +1 -0
  40. package/dist/core/handoffReceiverWiring.js +65 -0
  41. package/dist/core/handoffReceiverWiring.js.map +1 -0
  42. package/dist/core/handoffSentinelBootWiring.d.ts +53 -0
  43. package/dist/core/handoffSentinelBootWiring.d.ts.map +1 -0
  44. package/dist/core/handoffSentinelBootWiring.js +52 -0
  45. package/dist/core/handoffSentinelBootWiring.js.map +1 -0
  46. package/dist/core/handoffSentinelWiring.d.ts +60 -0
  47. package/dist/core/handoffSentinelWiring.d.ts.map +1 -0
  48. package/dist/core/handoffSentinelWiring.js +59 -0
  49. package/dist/core/handoffSentinelWiring.js.map +1 -0
  50. package/dist/core/seamlessnessConfig.d.ts +8 -0
  51. package/dist/core/seamlessnessConfig.d.ts.map +1 -1
  52. package/dist/core/seamlessnessConfig.js +1 -0
  53. package/dist/core/seamlessnessConfig.js.map +1 -1
  54. package/dist/core/types.d.ts +6 -0
  55. package/dist/core/types.d.ts.map +1 -1
  56. package/dist/core/types.js.map +1 -1
  57. package/dist/messaging/TelegramAdapter.d.ts +6 -0
  58. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  59. package/dist/messaging/TelegramAdapter.js +8 -0
  60. package/dist/messaging/TelegramAdapter.js.map +1 -1
  61. package/dist/messaging/ingressDedup.d.ts +55 -0
  62. package/dist/messaging/ingressDedup.d.ts.map +1 -0
  63. package/dist/messaging/ingressDedup.js +69 -0
  64. package/dist/messaging/ingressDedup.js.map +1 -0
  65. package/dist/messaging/stuckMessageRecovery.d.ts +46 -0
  66. package/dist/messaging/stuckMessageRecovery.d.ts.map +1 -0
  67. package/dist/messaging/stuckMessageRecovery.js +52 -0
  68. package/dist/messaging/stuckMessageRecovery.js.map +1 -0
  69. package/dist/server/AgentServer.d.ts +64 -0
  70. package/dist/server/AgentServer.d.ts.map +1 -1
  71. package/dist/server/AgentServer.js +24 -0
  72. package/dist/server/AgentServer.js.map +1 -1
  73. package/dist/server/handoffInitiateRoutes.d.ts +40 -0
  74. package/dist/server/handoffInitiateRoutes.d.ts.map +1 -0
  75. package/dist/server/handoffInitiateRoutes.js +57 -0
  76. package/dist/server/handoffInitiateRoutes.js.map +1 -0
  77. package/dist/server/machineRoutes.d.ts +47 -0
  78. package/dist/server/machineRoutes.d.ts.map +1 -1
  79. package/dist/server/machineRoutes.js +138 -0
  80. package/dist/server/machineRoutes.js.map +1 -1
  81. package/dist/server/routes.d.ts +20 -0
  82. package/dist/server/routes.d.ts.map +1 -1
  83. package/dist/server/routes.js +65 -0
  84. package/dist/server/routes.js.map +1 -1
  85. package/package.json +1 -1
  86. package/src/data/builtin-manifest.json +49 -49
  87. package/upgrades/1.3.44.md +72 -0
  88. package/upgrades/1.3.45.md +28 -0
  89. package/upgrades/side-effects/cross-machine-seamlessness-consent-acquire.md +52 -0
  90. package/upgrades/side-effects/cross-machine-seamlessness-exactly-once-ingress.md +73 -0
  91. package/upgrades/side-effects/cross-machine-seamlessness-handoff-ack-yield.md +82 -0
  92. package/upgrades/side-effects/cross-machine-seamlessness-handoff-begin.md +48 -0
  93. package/upgrades/side-effects/cross-machine-seamlessness-handoff-boot-wiring.md +68 -0
  94. package/upgrades/side-effects/cross-machine-seamlessness-handoff-receiver-wiring.md +52 -0
  95. package/upgrades/side-effects/cross-machine-seamlessness-handoff-receiver.md +46 -0
  96. package/upgrades/side-effects/cross-machine-seamlessness-handoff-sentinel-wiring.md +47 -0
  97. package/upgrades/side-effects/cross-machine-seamlessness-lease-wire.md +46 -0
  98. package/upgrades/side-effects/cross-machine-seamlessness-livetail-source.md +50 -0
  99. package/upgrades/side-effects/cross-machine-seamlessness-livetail-streaming.md +50 -0
  100. package/upgrades/side-effects/cross-machine-seamlessness-livetail-wire.md +65 -0
  101. package/upgrades/side-effects/cross-machine-seamlessness-noloss-recovery.md +61 -0
  102. package/upgrades/side-effects/cross-machine-seamlessness-reply-marker.md +65 -0
  103. package/upgrades/side-effects/process-health-tab-eli16-pass.md +49 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.43",
3
+ "version": "1.3.45",
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:24:38.781Z",
5
- "instarVersion": "1.3.43",
4
+ "generatedAt": "2026-05-28T02:17:30.185Z",
5
+ "instarVersion": "1.3.45",
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": {
@@ -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,28 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- bump: patch -->
4
+
5
+ ## What Changed
6
+
7
+ UX refinement of the Process Health dashboard tab shipped in v1.3.27. Eight rounds of user-driven copy + structure iteration landed on the design that became the **Dashboard Standard** — the bar all future dashboard features now start from. Pure dashboard-only change (`dashboard/process-health.js` + `dashboard/index.html` + tests); no `src/` / `scripts/` / `.husky/` / `skills/` changes.
8
+
9
+ What the page looks like now: a one-sentence intro grounds the subject so "it" later in the page has a referent; each section title carries a one-line subtitle that distinguishes it from the others (with explicit cross-references — "When the same kind keeps repeating, it shows up as a pattern above"); each captured problem and pattern card is a `<details>` element with a status color dot on the left (amber/blue/green/gray — never alarm reds) and a chevron on the right; the expanded body is a labeled fact-sheet using a fixed vocabulary (Status / Where / Times seen / First noticed / Cause) used identically across both lists. All action-implying language ("Suggested next step", "verify before acting", "Fix worked") is gone — the page informs, it doesn't direct. Internal codenames (`capture-only`, `failure-learning-loop`, `config-parse`) never reach the DOM; they pass through renderer-owned plain-English maps.
10
+
11
+ The reference implementation now backs a durable agent memory (`feedback_dashboard_copy_eli16.md`) that codifies the seven rules + eight default substitutions + four status-color tokens so future dashboard work starts from this bar.
12
+
13
+ ## What to Tell Your User
14
+
15
+ - The Process Health tab on your dashboard reads a lot more clearly now: a calm intro tells you what the page is showing in one sentence, every problem and pattern collapses to one plain line with a small color dot (amber = still being looked into, blue = cause known, green = worked out, gray = closed), and tapping any row opens up the same set of labeled details — Status, Where, Times seen, First noticed, Cause — every time. The bar this set for "what a calm, informative dashboard reads like" is now the standard for everything I build next.
16
+
17
+ ## Summary of New Capabilities
18
+
19
+ | Capability | How to Use |
20
+ |-----------|-----------|
21
+ | Process Health tab — ELI16 + structure pass | Open the Process Health tab in your dashboard (no action needed; it’s just clearer now) |
22
+ | Dashboard Standard (durable, applies to future dashboard work) | Reference: `feedback_dashboard_copy_eli16.md` (in agent memory) — 7 rules + 8 substitutions + 4 status-color tokens |
23
+
24
+ ## Evidence
25
+
26
+ - 46 tests green: 30 unit + 12 integration + 4 e2e — includes structural assertions for the unified label order, status-dot CSS classes, and that the dropped framing line is genuinely absent.
27
+ - Safety contract unchanged: XSS negative fixture still fires zero live elements + no canary; `detail.full` redaction is verified end-to-end.
28
+ - Show-don't-tell iteration: eight rounds, each rendered to a real browser and screenshotted for user thumbs-up before committing — no merge-and-iterate churn. The harness pattern is captured in the standard.
@@ -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.