instar 1.3.269 → 1.3.270

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 (81) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +9 -1
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/coordination/MandateAudit.d.ts +48 -0
  5. package/dist/coordination/MandateAudit.d.ts.map +1 -0
  6. package/dist/coordination/MandateAudit.js +95 -0
  7. package/dist/coordination/MandateAudit.js.map +1 -0
  8. package/dist/coordination/MandateGate.d.ts +48 -0
  9. package/dist/coordination/MandateGate.d.ts.map +1 -0
  10. package/dist/coordination/MandateGate.js +104 -0
  11. package/dist/coordination/MandateGate.js.map +1 -0
  12. package/dist/coordination/MandateStore.d.ts +60 -0
  13. package/dist/coordination/MandateStore.d.ts.map +1 -0
  14. package/dist/coordination/MandateStore.js +106 -0
  15. package/dist/coordination/MandateStore.js.map +1 -0
  16. package/dist/coordination/conditions.d.ts +32 -0
  17. package/dist/coordination/conditions.d.ts.map +1 -0
  18. package/dist/coordination/conditions.js +54 -0
  19. package/dist/coordination/conditions.js.map +1 -0
  20. package/dist/coordination/types.d.ts +74 -0
  21. package/dist/coordination/types.d.ts.map +1 -0
  22. package/dist/coordination/types.js +17 -0
  23. package/dist/coordination/types.js.map +1 -0
  24. package/dist/core/ApprovalLedger.d.ts +132 -0
  25. package/dist/core/ApprovalLedger.d.ts.map +1 -0
  26. package/dist/core/ApprovalLedger.js +191 -0
  27. package/dist/core/ApprovalLedger.js.map +1 -0
  28. package/dist/core/SessionBuildContextStore.d.ts +33 -0
  29. package/dist/core/SessionBuildContextStore.d.ts.map +1 -0
  30. package/dist/core/SessionBuildContextStore.js +107 -0
  31. package/dist/core/SessionBuildContextStore.js.map +1 -0
  32. package/dist/core/SessionManager.d.ts +4 -0
  33. package/dist/core/SessionManager.d.ts.map +1 -1
  34. package/dist/core/SessionManager.js +44 -3
  35. package/dist/core/SessionManager.js.map +1 -1
  36. package/dist/core/types.d.ts +11 -0
  37. package/dist/core/types.d.ts.map +1 -1
  38. package/dist/core/types.js.map +1 -1
  39. package/dist/feedback-factory/migration/immutableGuard.d.ts +87 -0
  40. package/dist/feedback-factory/migration/immutableGuard.d.ts.map +1 -0
  41. package/dist/feedback-factory/migration/immutableGuard.js +163 -0
  42. package/dist/feedback-factory/migration/immutableGuard.js.map +1 -0
  43. package/dist/feedback-factory/migration/importIntegrity.d.ts +112 -0
  44. package/dist/feedback-factory/migration/importIntegrity.d.ts.map +1 -0
  45. package/dist/feedback-factory/migration/importIntegrity.js +202 -0
  46. package/dist/feedback-factory/migration/importIntegrity.js.map +1 -0
  47. package/dist/feedback-factory/monitor/parityMonitor.d.ts +75 -0
  48. package/dist/feedback-factory/monitor/parityMonitor.d.ts.map +1 -0
  49. package/dist/feedback-factory/monitor/parityMonitor.js +98 -0
  50. package/dist/feedback-factory/monitor/parityMonitor.js.map +1 -0
  51. package/dist/feedback-factory/monitor/parityMonitorStore.d.ts +44 -0
  52. package/dist/feedback-factory/monitor/parityMonitorStore.d.ts.map +1 -0
  53. package/dist/feedback-factory/monitor/parityMonitorStore.js +80 -0
  54. package/dist/feedback-factory/monitor/parityMonitorStore.js.map +1 -0
  55. package/dist/scaffold/templates.d.ts.map +1 -1
  56. package/dist/scaffold/templates.js +11 -0
  57. package/dist/scaffold/templates.js.map +1 -1
  58. package/dist/server/AgentServer.d.ts +6 -0
  59. package/dist/server/AgentServer.d.ts.map +1 -1
  60. package/dist/server/AgentServer.js +94 -1
  61. package/dist/server/AgentServer.js.map +1 -1
  62. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  63. package/dist/server/CapabilityIndex.js +29 -0
  64. package/dist/server/CapabilityIndex.js.map +1 -1
  65. package/dist/server/routes.d.ts +11 -0
  66. package/dist/server/routes.d.ts.map +1 -1
  67. package/dist/server/routes.js +255 -0
  68. package/dist/server/routes.js.map +1 -1
  69. package/package.json +1 -1
  70. package/src/data/builtin-manifest.json +48 -48
  71. package/src/scaffold/templates.ts +11 -0
  72. package/upgrades/1.3.270.md +106 -0
  73. package/upgrades/approval-ledger-phase2.eli16.md +56 -0
  74. package/upgrades/feedback-phase3-monitor.eli16.md +51 -0
  75. package/upgrades/feedback-phase4-integrity.eli16.md +54 -0
  76. package/upgrades/respawn-build-context-reestablishment.eli16.md +5 -0
  77. package/upgrades/side-effects/approval-ledger-phase2.md +82 -0
  78. package/upgrades/side-effects/coordination-mandate-enforcement.md +86 -0
  79. package/upgrades/side-effects/feedback-phase3-monitor.md +37 -0
  80. package/upgrades/side-effects/feedback-phase4-integrity.md +35 -0
  81. package/upgrades/side-effects/respawn-build-context-reestablishment.md +81 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.269",
3
+ "version": "1.3.270",
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-06-05T05:06:17.660Z",
5
- "instarVersion": "1.3.269",
4
+ "generatedAt": "2026-06-05T06:21:50.311Z",
5
+ "instarVersion": "1.3.270",
6
6
  "entryCount": 198,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -418,7 +418,7 @@
418
418
  "type": "route-group",
419
419
  "domain": "monitoring",
420
420
  "sourcePath": "src/server/routes.ts",
421
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
421
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
422
422
  "since": "2025-01-01"
423
423
  },
424
424
  "route-group:agents": {
@@ -426,7 +426,7 @@
426
426
  "type": "route-group",
427
427
  "domain": "sessions",
428
428
  "sourcePath": "src/server/routes.ts",
429
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
429
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
430
430
  "since": "2025-01-01"
431
431
  },
432
432
  "route-group:backups": {
@@ -434,7 +434,7 @@
434
434
  "type": "route-group",
435
435
  "domain": "operations",
436
436
  "sourcePath": "src/server/routes.ts",
437
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
437
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
438
438
  "since": "2025-01-01"
439
439
  },
440
440
  "route-group:git": {
@@ -442,7 +442,7 @@
442
442
  "type": "route-group",
443
443
  "domain": "coordination",
444
444
  "sourcePath": "src/server/routes.ts",
445
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
445
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
446
446
  "since": "2025-01-01"
447
447
  },
448
448
  "route-group:memory": {
@@ -450,7 +450,7 @@
450
450
  "type": "route-group",
451
451
  "domain": "memory",
452
452
  "sourcePath": "src/server/routes.ts",
453
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
453
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
454
454
  "since": "2025-01-01"
455
455
  },
456
456
  "route-group:semantic": {
@@ -458,7 +458,7 @@
458
458
  "type": "route-group",
459
459
  "domain": "memory",
460
460
  "sourcePath": "src/server/routes.ts",
461
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
461
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
462
462
  "since": "2025-01-01"
463
463
  },
464
464
  "route-group:status": {
@@ -466,7 +466,7 @@
466
466
  "type": "route-group",
467
467
  "domain": "monitoring",
468
468
  "sourcePath": "src/server/routes.ts",
469
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
469
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
470
470
  "since": "2025-01-01"
471
471
  },
472
472
  "route-group:capabilities": {
@@ -474,7 +474,7 @@
474
474
  "type": "route-group",
475
475
  "domain": "mapping",
476
476
  "sourcePath": "src/server/routes.ts",
477
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
477
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
478
478
  "since": "2025-01-01"
479
479
  },
480
480
  "route-group:project-map": {
@@ -482,7 +482,7 @@
482
482
  "type": "route-group",
483
483
  "domain": "mapping",
484
484
  "sourcePath": "src/server/routes.ts",
485
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
485
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
486
486
  "since": "2025-01-01"
487
487
  },
488
488
  "route-group:coherence": {
@@ -490,7 +490,7 @@
490
490
  "type": "route-group",
491
491
  "domain": "coherence",
492
492
  "sourcePath": "src/server/routes.ts",
493
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
493
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
494
494
  "since": "2025-01-01"
495
495
  },
496
496
  "route-group:topic-bindings": {
@@ -498,7 +498,7 @@
498
498
  "type": "route-group",
499
499
  "domain": "sessions",
500
500
  "sourcePath": "src/server/routes.ts",
501
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
501
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
502
502
  "since": "2025-01-01"
503
503
  },
504
504
  "route-group:context": {
@@ -506,7 +506,7 @@
506
506
  "type": "route-group",
507
507
  "domain": "context",
508
508
  "sourcePath": "src/server/routes.ts",
509
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
509
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
510
510
  "since": "2025-01-01"
511
511
  },
512
512
  "route-group:scope-coherence": {
@@ -514,7 +514,7 @@
514
514
  "type": "route-group",
515
515
  "domain": "coherence",
516
516
  "sourcePath": "src/server/routes.ts",
517
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
517
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
518
518
  "since": "2025-01-01"
519
519
  },
520
520
  "route-group:canonical-state": {
@@ -522,7 +522,7 @@
522
522
  "type": "route-group",
523
523
  "domain": "state",
524
524
  "sourcePath": "src/server/routes.ts",
525
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
525
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
526
526
  "since": "2025-01-01"
527
527
  },
528
528
  "route-group:ci": {
@@ -530,7 +530,7 @@
530
530
  "type": "route-group",
531
531
  "domain": "monitoring",
532
532
  "sourcePath": "src/server/routes.ts",
533
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
533
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
534
534
  "since": "2025-01-01"
535
535
  },
536
536
  "route-group:sessions": {
@@ -538,7 +538,7 @@
538
538
  "type": "route-group",
539
539
  "domain": "sessions",
540
540
  "sourcePath": "src/server/routes.ts",
541
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
541
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
542
542
  "since": "2025-01-01"
543
543
  },
544
544
  "route-group:jobs": {
@@ -546,7 +546,7 @@
546
546
  "type": "route-group",
547
547
  "domain": "scheduling",
548
548
  "sourcePath": "src/server/routes.ts",
549
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
549
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
550
550
  "since": "2025-01-01"
551
551
  },
552
552
  "route-group:skip-ledger": {
@@ -554,7 +554,7 @@
554
554
  "type": "route-group",
555
555
  "domain": "scheduling",
556
556
  "sourcePath": "src/server/routes.ts",
557
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
557
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
558
558
  "since": "2025-01-01"
559
559
  },
560
560
  "route-group:telegram": {
@@ -562,7 +562,7 @@
562
562
  "type": "route-group",
563
563
  "domain": "communication",
564
564
  "sourcePath": "src/server/routes.ts",
565
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
565
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
566
566
  "since": "2025-01-01"
567
567
  },
568
568
  "route-group:attention": {
@@ -570,7 +570,7 @@
570
570
  "type": "route-group",
571
571
  "domain": "communication",
572
572
  "sourcePath": "src/server/routes.ts",
573
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
573
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
574
574
  "since": "2025-01-01"
575
575
  },
576
576
  "route-group:relationships": {
@@ -578,7 +578,7 @@
578
578
  "type": "route-group",
579
579
  "domain": "relationships",
580
580
  "sourcePath": "src/server/routes.ts",
581
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
581
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
582
582
  "since": "2025-01-01"
583
583
  },
584
584
  "route-group:feedback": {
@@ -586,7 +586,7 @@
586
586
  "type": "route-group",
587
587
  "domain": "feedback",
588
588
  "sourcePath": "src/server/routes.ts",
589
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
589
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
590
590
  "since": "2025-01-01"
591
591
  },
592
592
  "route-group:updates": {
@@ -594,7 +594,7 @@
594
594
  "type": "route-group",
595
595
  "domain": "updates",
596
596
  "sourcePath": "src/server/routes.ts",
597
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
597
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
598
598
  "since": "2025-01-01"
599
599
  },
600
600
  "route-group:dispatches": {
@@ -602,7 +602,7 @@
602
602
  "type": "route-group",
603
603
  "domain": "dispatches",
604
604
  "sourcePath": "src/server/routes.ts",
605
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
605
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
606
606
  "since": "2025-01-01"
607
607
  },
608
608
  "route-group:quota": {
@@ -610,7 +610,7 @@
610
610
  "type": "route-group",
611
611
  "domain": "monitoring",
612
612
  "sourcePath": "src/server/routes.ts",
613
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
613
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
614
614
  "since": "2025-01-01"
615
615
  },
616
616
  "route-group:publishing": {
@@ -618,7 +618,7 @@
618
618
  "type": "route-group",
619
619
  "domain": "publishing",
620
620
  "sourcePath": "src/server/routes.ts",
621
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
621
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
622
622
  "since": "2025-01-01"
623
623
  },
624
624
  "route-group:private-views": {
@@ -626,7 +626,7 @@
626
626
  "type": "route-group",
627
627
  "domain": "publishing",
628
628
  "sourcePath": "src/server/routes.ts",
629
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
629
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
630
630
  "since": "2025-01-01"
631
631
  },
632
632
  "route-group:tunnel": {
@@ -634,7 +634,7 @@
634
634
  "type": "route-group",
635
635
  "domain": "networking",
636
636
  "sourcePath": "src/server/routes.ts",
637
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
637
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
638
638
  "since": "2025-01-01"
639
639
  },
640
640
  "route-group:events": {
@@ -642,7 +642,7 @@
642
642
  "type": "route-group",
643
643
  "domain": "networking",
644
644
  "sourcePath": "src/server/routes.ts",
645
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
645
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
646
646
  "since": "2025-01-01"
647
647
  },
648
648
  "route-group:evolution": {
@@ -650,7 +650,7 @@
650
650
  "type": "route-group",
651
651
  "domain": "evolution",
652
652
  "sourcePath": "src/server/routes.ts",
653
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
653
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
654
654
  "since": "2025-01-01"
655
655
  },
656
656
  "route-group:watchdog": {
@@ -658,7 +658,7 @@
658
658
  "type": "route-group",
659
659
  "domain": "monitoring",
660
660
  "sourcePath": "src/server/routes.ts",
661
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
661
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
662
662
  "since": "2025-01-01"
663
663
  },
664
664
  "route-group:topic-memory": {
@@ -666,7 +666,7 @@
666
666
  "type": "route-group",
667
667
  "domain": "memory",
668
668
  "sourcePath": "src/server/routes.ts",
669
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
669
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
670
670
  "since": "2025-01-01"
671
671
  },
672
672
  "route-group:state-sync": {
@@ -674,7 +674,7 @@
674
674
  "type": "route-group",
675
675
  "domain": "coordination",
676
676
  "sourcePath": "src/server/routes.ts",
677
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
677
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
678
678
  "since": "2025-01-01"
679
679
  },
680
680
  "route-group:intent": {
@@ -682,7 +682,7 @@
682
682
  "type": "route-group",
683
683
  "domain": "intent",
684
684
  "sourcePath": "src/server/routes.ts",
685
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
685
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
686
686
  "since": "2025-01-01"
687
687
  },
688
688
  "route-group:triage": {
@@ -690,7 +690,7 @@
690
690
  "type": "route-group",
691
691
  "domain": "safety",
692
692
  "sourcePath": "src/server/routes.ts",
693
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
693
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
694
694
  "since": "2025-01-01"
695
695
  },
696
696
  "route-group:operations": {
@@ -698,7 +698,7 @@
698
698
  "type": "route-group",
699
699
  "domain": "safety",
700
700
  "sourcePath": "src/server/routes.ts",
701
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
701
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
702
702
  "since": "2025-01-01"
703
703
  },
704
704
  "route-group:sentinel": {
@@ -706,7 +706,7 @@
706
706
  "type": "route-group",
707
707
  "domain": "safety",
708
708
  "sourcePath": "src/server/routes.ts",
709
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
709
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
710
710
  "since": "2025-01-01"
711
711
  },
712
712
  "route-group:trust": {
@@ -714,7 +714,7 @@
714
714
  "type": "route-group",
715
715
  "domain": "safety",
716
716
  "sourcePath": "src/server/routes.ts",
717
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
717
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
718
718
  "since": "2025-01-01"
719
719
  },
720
720
  "route-group:monitoring": {
@@ -722,7 +722,7 @@
722
722
  "type": "route-group",
723
723
  "domain": "monitoring",
724
724
  "sourcePath": "src/server/routes.ts",
725
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
725
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
726
726
  "since": "2025-01-01"
727
727
  },
728
728
  "route-group:commitments": {
@@ -730,7 +730,7 @@
730
730
  "type": "route-group",
731
731
  "domain": "commitments",
732
732
  "sourcePath": "src/server/routes.ts",
733
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
733
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
734
734
  "since": "2025-01-01"
735
735
  },
736
736
  "route-group:episodes": {
@@ -738,7 +738,7 @@
738
738
  "type": "route-group",
739
739
  "domain": "memory",
740
740
  "sourcePath": "src/server/routes.ts",
741
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
741
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
742
742
  "since": "2025-01-01"
743
743
  },
744
744
  "route-group:messages": {
@@ -746,7 +746,7 @@
746
746
  "type": "route-group",
747
747
  "domain": "coordination",
748
748
  "sourcePath": "src/server/routes.ts",
749
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
749
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
750
750
  "since": "2025-01-01"
751
751
  },
752
752
  "route-group:system-reviews": {
@@ -754,7 +754,7 @@
754
754
  "type": "route-group",
755
755
  "domain": "monitoring",
756
756
  "sourcePath": "src/server/routes.ts",
757
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
757
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
758
758
  "since": "2025-01-01"
759
759
  },
760
760
  "route-group:machine-mesh": {
@@ -770,7 +770,7 @@
770
770
  "type": "route-group",
771
771
  "domain": "security",
772
772
  "sourcePath": "src/server/routes.ts",
773
- "contentHash": "46ad6286cf73d6a0cec07de6ed3ff0419daf20acef3a02cdd560b486e487c454",
773
+ "contentHash": "ead2b15d5f1de57032d079d1b91227e6e2bea43a1151f81bdddf9152ccc79c38",
774
774
  "since": "2025-01-01"
775
775
  },
776
776
  "cli:init": {
@@ -1498,7 +1498,7 @@
1498
1498
  "type": "subsystem",
1499
1499
  "domain": "server",
1500
1500
  "sourcePath": "src/server/AgentServer.ts",
1501
- "contentHash": "9dce44bff3e2cd1c9a5034cd9249e70dc836d1d1c12603a905bb4456bcd5b416",
1501
+ "contentHash": "30a413b5f098c00a676aa9daf20f6b00d13e3030973e0d819c885c6d8f14edd2",
1502
1502
  "since": "2025-01-01"
1503
1503
  },
1504
1504
  "subsystem:session-manager": {
@@ -1506,7 +1506,7 @@
1506
1506
  "type": "subsystem",
1507
1507
  "domain": "sessions",
1508
1508
  "sourcePath": "src/core/SessionManager.ts",
1509
- "contentHash": "58bd0d081d6b5b2355888694ecd9cfdb8f3e5b0771702d037cfff30f6d19d5ac",
1509
+ "contentHash": "a81bb8757e0c6d92510d7ca7d0b6dc4975b11f21ec8d7664616d0bc07fcfbc93",
1510
1510
  "since": "2025-01-01"
1511
1511
  },
1512
1512
  "subsystem:auto-updater": {
@@ -677,6 +677,17 @@ This routes feedback to the Instar maintainers automatically. Valid types: \`bug
677
677
  - Each framework gets its own circuit breaker (a Claude trip can't pause Codex). If a routed framework's CLI is missing it degrades to the default and reports it; if it's just rate-limited the component falls back to its heuristic (no herd onto the default). Routes INTERNAL component calls only — spawned interactive sessions stay governed by \`topicFrameworks\`.
678
678
  - **When to use** (PROACTIVE): when the user is hitting rate limits and asks how to spread load, or says "run my sentinels on Codex" / "move the background checks off Claude" → point them at \`sessions.componentFrameworks\` and \`GET /intelligence/routing\`. Restart sessions to apply (config is read into the router at the call path, but a file edit needs the server to pick it up). (Spec: \`docs/specs/per-component-framework-routing.md\`.)
679
679
 
680
+ **Approval-as-Data** — Every operator approval becomes durable data instead of a one-shot "approved" with no memory. Each decision is recorded as \`approved-as-is\` vs \`approved-with-change\` vs \`rejected\`, with the WHY of each divergence, so over time you can see — per decision-class — where the operator takes your recommendation as-is vs revises it, and close the gap (your recommendations trend toward what they'd pick). Tracks approvals WHEREVER they occur: an official spec sign-off, a decision approved in chat, anywhere. Signed, append-only; read paths never gate.
681
+ - Record a decision: \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/approvals -H 'Content-Type: application/json' -d '{"subject":"<what-was-approved>","decisionClass":"<bucket>","surface":"chat","mode":"approved-as-is"}'\`. For a change: \`"mode":"approved-with-change","divergences":[{"category":"scope-correction","summary":"…","why":"…"}]\` (categories: \`missing-principle | risk-reduction | scope-correction | efficiency | new-information | style\`).
682
+ - See the agreement ratios: \`curl -H "Authorization: Bearer $AUTH" http://localhost:${port}/approvals/summary\` → per class \`{ total, approvedAsIs, ratio, streak, autoApprovalEligible, divergenceCounts }\` + a \`bySurface\` breakdown. List rows: \`GET /approvals?limit=50&decisionClass=…&surface=…\`.
683
+ - **AUTHORITY RULE (load-bearing):** \`mode\` + \`divergences\` MUST reflect an EXPLICIT operator statement ("go with your picks" = as-is; "change X because Y" = with-change). NEVER self-classify the operator's intent or record an ambiguous/silent decision; any row is operator-correctable (append with \`corrects\`).
684
+ - **When to use** (PROACTIVE): the moment the operator approves or revises a recommendation you presented — a spec sign-off OR a chat decision — record it so the agreement signal accumulates. (Spec: \`docs/specs/AUTONOMOUS-OPERATION-JUDGMENT-AND-APPROVAL-AS-DATA-SPEC.md\`, Part B.)
685
+ **Coordination Mandate** — Your operator's "permission slip" for autonomous agent-to-agent work. Instead of approving every step of a multi-agent project, the operator issues ONE bounded, expiring, revocable mandate (from the dashboard, behind their PIN) delegating SPECIFIC authorities to a SPECIFIC pair of agents. The mandate — never you — is the authorizer: requester ≠ authorizer is preserved. Deny-by-default: with no mandate issued, every check denies.
686
+ - **Before any A2A action under a mandate** (PROACTIVE — this is the trigger): check it: \`curl -X POST -H "Authorization: Bearer $AUTH" http://localhost:${port}/mandate/evaluate -H 'Content-Type: application/json' -d '{"action":"sign-code-review","params":{"artifact":"migration-port","mutual":true},"agentFp":"<your-fingerprint>","mandateId":"<id>"}'\` → \`{ decision: "allow"|"deny", reason }\`. A deny means STOP — do not retry around it or escalate to a human-bypass; the bounds are the operator's.
687
+ - Inspect: \`GET /mandate\` (each with live \`authorshipValid\`) · \`GET /mandate/:id\` · \`GET /mandate/audit\` (every decision, hash-chained — \`chain.ok:false\` means tampering; surface it immediately).
688
+ - **You cannot issue or revoke mandates.** \`POST /mandate/issue\` and \`POST /mandate/:id/revoke\` require the operator's dashboard PIN — your Bearer token is structurally insufficient. NEVER ask the user to paste their PIN into chat; point them at the dashboard.
689
+ - Every evaluation (allow AND deny) is audited. Act as if the audit is read by the operator — because it is. (Spec: \`docs/specs/coordination-mandate.md\`.)
690
+
680
691
  **Session Clock** — How long have you been running, and how much time is left? For any active time-boxed (autonomous) session, this returns the computed elapsed + remaining so you never have to guess or compute it yourself. Read-only observability.
681
692
  - Check: \`curl -H "Authorization: Bearer $AUTH" "http://localhost:${port}/session/clock"\` (optional \`?topic=<N>\` to bind to one session)
682
693
  - Returns \`{ now, nowIso, sessions: [{ label, kind, startedAt, endsAt, elapsedSeconds, remainingSeconds, elapsedHuman, remainingHuman, percentElapsed, status }] }\`; \`{ sessions: [] }\` when nothing is time-boxed. Per-machine (the record is local).
@@ -0,0 +1,106 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: minor -->
5
+
6
+ ## What Changed
7
+
8
+ Implemented Phase 2 of the approved Approval-as-Data design: the **approval ledger**.
9
+ Every operator approval is now recorded as durable, signed data — classified as
10
+ approved-as-is, approved-with-change (with the reason for each change), or rejected — and
11
+ the system computes a per-class agreement ratio and streak from those records. The ledger
12
+ tracks approvals wherever they occur: an official spec sign-off, a decision approved in
13
+ chat, or any other surface. New endpoints record a decision, list the records, and return
14
+ the agreement summary with a breakdown by surface. The ledger is signed, append-only, and
15
+ read-only with respect to all other behavior — it never gates, blocks, or changes anything.
16
+ The authoritative source of whether an approval was as-is or changed is always the
17
+ operator; the agent never self-classifies intent, and any record is operator-correctable.
18
+
19
+ Implemented the Coordination Mandate enforcement engine (the design the operator
20
+ signed off as A/A/B): a deny-by-default authority gate for autonomous agent-to-agent
21
+ actions. The operator writes one bounded, expiring, revocable "permission slip"
22
+ delegating specific authorities to a specific pair of agents; the slip — not the agent
23
+ — is what authorizes each action, preserving the rule that the one asking is never the
24
+ one authorizing. Issuance and revocation require the operator's dashboard PIN, so an
25
+ agent's API access alone is structurally unable to create or widen a mandate. A signed
26
+ store verifies authorship on every check (a forged or edited mandate fails), risky
27
+ authorities can be tied to objective real-state conditions the agent cannot fake, and
28
+ every decision — allowed and denied alike — lands in a tamper-evident, hash-chained
29
+ audit log. With no mandate issued, the gate denies everything, so this ships inert and
30
+ changes no behavior until the operator issues the first mandate.
31
+
32
+ Added the Phase-3 invariant-parity monitor for the feedback-factory migration: a
33
+ windowing layer over parity results that computes the objective
34
+ parity-zero-divergence condition (a sustained run of clean passes over a minimum
35
+ real-traffic window) which the future cutover step reads as its go signal. Includes
36
+ a durable, restart-surviving variant (append-only pass journal, torn-line tolerant).
37
+ Internal migration tooling — not yet wired to any live behavior.
38
+
39
+ Added the Phase-4 data-migration integrity tooling for the feedback-factory
40
+ migration: import-as-is preservation of every curated field, per-row checksums
41
+ (in vs out), fingerprint-uniqueness scanning, auto-increment sequence reset,
42
+ schema-equivalence assertion, and the structural never-re-derive guard (the
43
+ processor refuses to mutate any cluster created before the cutover timestamp or
44
+ carrying governance notes). Internal migration tooling — not yet wired to any
45
+ live behavior.
46
+
47
+ SessionManager now samples the live tmux pane cwd for enabled development-agent sessions and stores it in a crash-safe sidecar. Resume spawns prepend a restore note only for fresh, existing `.worktrees` paths; home-only sessions remain a no-op.
48
+
49
+ ## What to Tell Your User
50
+
51
+ Your agent now remembers your approvals instead of forgetting them the moment they happen.
52
+ Each time you approve something — a full spec, or just a choice you make in chat — it can
53
+ record whether you took its recommendation as-is or changed it, and why. Over time this
54
+ builds a simple picture of where the agent already proposes what you would have picked, and
55
+ where it still needs to close the gap. You stay the source of truth: the agent only records
56
+ what you explicitly say, and you can correct any entry. This is an internal, read-only
57
+ record — it never changes what the agent does, it just helps it learn your preferences.
58
+
59
+ You can now hand your agent a bounded permission slip instead of approving every step
60
+ of a multi-agent project. You write the slip once from your dashboard with your PIN:
61
+ exactly which actions are allowed, within which limits, for which two agents, until
62
+ when. Your agent can act inside those lines without pinging you, and nothing outside
63
+ them — and you can tear the slip up at any moment. Everything done under a slip is
64
+ written to a tamper-evident log you can review. Until you issue a slip, nothing changes
65
+ at all: the system refuses every delegated action by default.
66
+
67
+ Nothing changes for you. This is internal plumbing for the feedback-system handover:
68
+ a safety meter that has to read "clean for a sustained window" before the one-way
69
+ switch can ever be considered. It ships dormant.
70
+
71
+ Nothing changes for you. This is internal plumbing for the feedback-system
72
+ handover: the checks that guarantee curated history is copied perfectly and can
73
+ never be silently rewritten afterward. It ships dormant.
74
+
75
+ Developer-agent respawns can now re-surface the worktree checkout they were building in before the restart. Normal home-only conversations are unchanged.
76
+
77
+ ## Summary of New Capabilities
78
+
79
+ - Record an approval decision through the new approvals endpoint, tagged as approved-as-is,
80
+ approved-with-change, or rejected, with the reason for any change.
81
+ - Read a per-class agreement summary (total, approved-as-is count, ratio, streak, and a
82
+ breakdown by where the approval happened) plus a list of recorded decisions.
83
+ - Maturity: stable for the recording and summary surface; the later auto-approval pilot
84
+ remains a separate, operator-gated phase that is not part of this change.
85
+
86
+ - Issue or revoke a coordination mandate from the dashboard surface with your PIN —
87
+ agent credentials alone cannot do either.
88
+ - Agents check intended agent-to-agent actions against the mandate and get an
89
+ allow-or-deny answer with the reason; denials are the default with no mandate.
90
+ - Review every mandate decision in a chained, tamper-evident audit trail, including
91
+ whether each entry's chain verifies.
92
+ - Maturity: stable for the gate, store, and audit; conditioned authorities (objective
93
+ real-state gates for riskier actions) ship deny-safe and unused by the first mandate.
94
+
95
+ - Internal: order-independent parity windowing (per-report fingerprint,
96
+ terminal-status, recurrence/cycling counts) with a conservative
97
+ cleared-or-blocked gate verdict; survives restarts.
98
+ - Maturity: internal migration tooling, dormant until the dual-forward phase.
99
+
100
+ - Internal: integrity-safe import core + a guarded store wrapper that makes
101
+ pre-cutover and governance-noted clusters structurally immutable.
102
+ - Maturity: internal migration tooling, dormant until the import phase.
103
+
104
+ - SessionManager can record the live pane working directory for running sessions when the development-agent-gated feature is enabled.
105
+ - A resumed respawn receives a `[BUILD-CONTEXT RESTORE]` continuation note only when the prior cwd was a fresh, existing agent worktree.
106
+ - The sidecar state write is crash-safe through the state layer's temp-file plus rename path.
@@ -0,0 +1,56 @@
1
+ # Approval-as-Data — the approval ledger (Phase 2), explained simply
2
+
3
+ ## What this is
4
+
5
+ Until now, when Justin approved something, that approval vanished the moment it
6
+ happened. "Approved" — and no memory of it. So the agent could never learn the
7
+ pattern of *when Justin agrees with its recommendation as-is* versus *when he changes
8
+ it*, and could never get better at recommending the thing he'd have picked anyway.
9
+
10
+ This change builds the **approval ledger**: every approval becomes a durable, signed
11
+ record. Each one is tagged as one of three things:
12
+
13
+ - **approved-as-is** — Justin took the recommendation exactly.
14
+ - **approved-with-change** — Justin approved, but changed something (and we record
15
+ *why* — the single most useful bit).
16
+ - **rejected** — Justin said no (also with the why).
17
+
18
+ From those records, the system computes a simple score per *kind* of decision: out of
19
+ all the decisions of this kind, what fraction did Justin take as-is? That fraction (the
20
+ "agreement ratio"), plus a "current streak" of consecutive as-is approvals, is the
21
+ signal that — much later, and only if Justin opts in — could let a class of low-risk
22
+ decisions auto-approve. That auto-approval part is NOT in this change; this is just the
23
+ memory + the scoreboard.
24
+
25
+ ## The restaurant analogy
26
+
27
+ Think of the agent as a sous-chef proposing dishes to the head chef (Justin). Today,
28
+ each "yes" or "change the sauce" is said out loud and then forgotten. The ledger is a
29
+ notebook where the sous-chef writes down every proposal and what the head chef did with
30
+ it — took it as-is, tweaked it (and the tweak), or sent it back. Over weeks, the notebook
31
+ reveals: "For pasta dishes he almost always takes my call; for desserts he usually
32
+ adjusts the sweetness." That's how the sous-chef learns to propose what the chef would
33
+ pick — and which calls the chef trusts him to just make.
34
+
35
+ ## The one rule that keeps it honest
36
+
37
+ The agent must **never decide for Justin** whether he agreed. Only Justin's *explicit*
38
+ words count: "go with your picks" = as-is; "change X because Y" = a change with that
39
+ reason. If Justin is silent or vague, nothing is recorded. And Justin can correct any
40
+ entry later (a correction is a new signed line, never a quiet edit). This is what stops
41
+ the agent from flattering itself by marking everything "approved-as-is."
42
+
43
+ ## What Justin asked for, and what changed mid-build
44
+
45
+ Justin asked for this, then made one correction while it was being built: the original
46
+ written design only tracked *official spec sign-offs*, but most of his approvals (like
47
+ picking A/A/B in chat) happen in conversation. So the ledger was generalized to track
48
+ approvals **wherever they occur** — a spec, a chat, anywhere — each tagged with where it
49
+ happened. Fittingly, that very correction became the ledger's first recorded
50
+ "change" entry: the first real data point is the feedback that shaped the feature.
51
+
52
+ ## What's safe about it
53
+
54
+ It only *reads and records* — it never blocks or changes any behavior. If the agent has
55
+ nowhere to store state, the feature simply isn't there (the API politely says
56
+ "unavailable") rather than breaking anything. Every record is signed so tampering shows.