instar 0.28.41 → 0.28.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.
- package/dist/commands/review.js +8 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +24 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/commands/setup.d.ts +34 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +30 -1
- package/dist/commands/setup.js.map +1 -1
- package/dist/core/ContextHierarchy.d.ts +9 -0
- package/dist/core/ContextHierarchy.d.ts.map +1 -1
- package/dist/core/ContextHierarchy.js +20 -5
- package/dist/core/ContextHierarchy.js.map +1 -1
- package/dist/core/MachineIdentity.d.ts +8 -0
- package/dist/core/MachineIdentity.d.ts.map +1 -1
- package/dist/core/MachineIdentity.js +15 -0
- package/dist/core/MachineIdentity.js.map +1 -1
- package/dist/core/MessagingToneGate.d.ts +46 -0
- package/dist/core/MessagingToneGate.d.ts.map +1 -1
- package/dist/core/MessagingToneGate.js +104 -24
- package/dist/core/MessagingToneGate.js.map +1 -1
- package/dist/core/MultiMachineCoordinator.d.ts.map +1 -1
- package/dist/core/MultiMachineCoordinator.js +5 -0
- package/dist/core/MultiMachineCoordinator.js.map +1 -1
- package/dist/core/OutboundDedupGate.d.ts +56 -0
- package/dist/core/OutboundDedupGate.d.ts.map +1 -0
- package/dist/core/OutboundDedupGate.js +90 -0
- package/dist/core/OutboundDedupGate.js.map +1 -0
- package/dist/core/SharedStateLedger.d.ts +111 -0
- package/dist/core/SharedStateLedger.d.ts.map +1 -0
- package/dist/core/SharedStateLedger.js +174 -0
- package/dist/core/SharedStateLedger.js.map +1 -0
- package/dist/core/UpdateChecker.d.ts.map +1 -1
- package/dist/core/UpdateChecker.js +6 -2
- package/dist/core/UpdateChecker.js.map +1 -1
- package/dist/core/junk-payload.d.ts +14 -0
- package/dist/core/junk-payload.d.ts.map +1 -0
- package/dist/core/junk-payload.js +32 -0
- package/dist/core/junk-payload.js.map +1 -0
- package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
- package/dist/lifeline/TelegramLifeline.js +13 -0
- package/dist/lifeline/TelegramLifeline.js.map +1 -1
- package/dist/monitoring/SessionRecovery.d.ts +27 -0
- package/dist/monitoring/SessionRecovery.d.ts.map +1 -1
- package/dist/monitoring/SessionRecovery.js +61 -4
- package/dist/monitoring/SessionRecovery.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +4 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/scheduler/JobLoader.d.ts +4 -0
- package/dist/scheduler/JobLoader.d.ts.map +1 -1
- package/dist/scheduler/JobLoader.js +7 -1
- package/dist/scheduler/JobLoader.js.map +1 -1
- package/dist/server/AgentServer.d.ts +1 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +1 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +5 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +207 -14
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/scripts/instar-dev-precommit.js +295 -0
- package/scripts/pre-push-gate.js +65 -0
- package/src/data/builtin-manifest.json +49 -49
- package/upgrades/0.28.26.md +21 -0
- package/upgrades/0.28.27.md +17 -0
- package/upgrades/0.28.28.md +23 -0
- package/upgrades/0.28.29.md +17 -0
- package/upgrades/0.28.42.md +25 -0
- package/upgrades/0.28.43.md +106 -0
- package/upgrades/0.28.44.md +21 -0
- package/upgrades/side-effects/0.28.43.md +57 -0
- package/upgrades/side-effects/fix-auto-ack-echo-loop.md +36 -0
- package/upgrades/side-effects/instar-dev-skill.md +137 -0
- package/upgrades/side-effects/outbound-signal-authority-rework.md +160 -0
- package/upgrades/side-effects/retrospective-drain-and-principle.md +113 -0
- package/upgrades/side-effects/skill-audience-clarification.md +54 -0
- package/upgrades/side-effects/state-file-self-heal-stage-1.md +162 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-04-
|
|
5
|
-
"instarVersion": "0.28.
|
|
4
|
+
"generatedAt": "2026-04-16T02:01:36.401Z",
|
|
5
|
+
"instarVersion": "0.28.44",
|
|
6
6
|
"entryCount": 186,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -376,7 +376,7 @@
|
|
|
376
376
|
"type": "route-group",
|
|
377
377
|
"domain": "monitoring",
|
|
378
378
|
"sourcePath": "src/server/routes.ts",
|
|
379
|
-
"contentHash": "
|
|
379
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
380
380
|
"since": "2025-01-01"
|
|
381
381
|
},
|
|
382
382
|
"route-group:agents": {
|
|
@@ -384,7 +384,7 @@
|
|
|
384
384
|
"type": "route-group",
|
|
385
385
|
"domain": "sessions",
|
|
386
386
|
"sourcePath": "src/server/routes.ts",
|
|
387
|
-
"contentHash": "
|
|
387
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
388
388
|
"since": "2025-01-01"
|
|
389
389
|
},
|
|
390
390
|
"route-group:backups": {
|
|
@@ -392,7 +392,7 @@
|
|
|
392
392
|
"type": "route-group",
|
|
393
393
|
"domain": "operations",
|
|
394
394
|
"sourcePath": "src/server/routes.ts",
|
|
395
|
-
"contentHash": "
|
|
395
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
396
396
|
"since": "2025-01-01"
|
|
397
397
|
},
|
|
398
398
|
"route-group:git": {
|
|
@@ -400,7 +400,7 @@
|
|
|
400
400
|
"type": "route-group",
|
|
401
401
|
"domain": "coordination",
|
|
402
402
|
"sourcePath": "src/server/routes.ts",
|
|
403
|
-
"contentHash": "
|
|
403
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
404
404
|
"since": "2025-01-01"
|
|
405
405
|
},
|
|
406
406
|
"route-group:memory": {
|
|
@@ -408,7 +408,7 @@
|
|
|
408
408
|
"type": "route-group",
|
|
409
409
|
"domain": "memory",
|
|
410
410
|
"sourcePath": "src/server/routes.ts",
|
|
411
|
-
"contentHash": "
|
|
411
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
412
412
|
"since": "2025-01-01"
|
|
413
413
|
},
|
|
414
414
|
"route-group:semantic": {
|
|
@@ -416,7 +416,7 @@
|
|
|
416
416
|
"type": "route-group",
|
|
417
417
|
"domain": "memory",
|
|
418
418
|
"sourcePath": "src/server/routes.ts",
|
|
419
|
-
"contentHash": "
|
|
419
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
420
420
|
"since": "2025-01-01"
|
|
421
421
|
},
|
|
422
422
|
"route-group:status": {
|
|
@@ -424,7 +424,7 @@
|
|
|
424
424
|
"type": "route-group",
|
|
425
425
|
"domain": "monitoring",
|
|
426
426
|
"sourcePath": "src/server/routes.ts",
|
|
427
|
-
"contentHash": "
|
|
427
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
428
428
|
"since": "2025-01-01"
|
|
429
429
|
},
|
|
430
430
|
"route-group:capabilities": {
|
|
@@ -432,7 +432,7 @@
|
|
|
432
432
|
"type": "route-group",
|
|
433
433
|
"domain": "mapping",
|
|
434
434
|
"sourcePath": "src/server/routes.ts",
|
|
435
|
-
"contentHash": "
|
|
435
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
436
436
|
"since": "2025-01-01"
|
|
437
437
|
},
|
|
438
438
|
"route-group:project-map": {
|
|
@@ -440,7 +440,7 @@
|
|
|
440
440
|
"type": "route-group",
|
|
441
441
|
"domain": "mapping",
|
|
442
442
|
"sourcePath": "src/server/routes.ts",
|
|
443
|
-
"contentHash": "
|
|
443
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
444
444
|
"since": "2025-01-01"
|
|
445
445
|
},
|
|
446
446
|
"route-group:coherence": {
|
|
@@ -448,7 +448,7 @@
|
|
|
448
448
|
"type": "route-group",
|
|
449
449
|
"domain": "coherence",
|
|
450
450
|
"sourcePath": "src/server/routes.ts",
|
|
451
|
-
"contentHash": "
|
|
451
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
452
452
|
"since": "2025-01-01"
|
|
453
453
|
},
|
|
454
454
|
"route-group:topic-bindings": {
|
|
@@ -456,7 +456,7 @@
|
|
|
456
456
|
"type": "route-group",
|
|
457
457
|
"domain": "sessions",
|
|
458
458
|
"sourcePath": "src/server/routes.ts",
|
|
459
|
-
"contentHash": "
|
|
459
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
460
460
|
"since": "2025-01-01"
|
|
461
461
|
},
|
|
462
462
|
"route-group:context": {
|
|
@@ -464,7 +464,7 @@
|
|
|
464
464
|
"type": "route-group",
|
|
465
465
|
"domain": "context",
|
|
466
466
|
"sourcePath": "src/server/routes.ts",
|
|
467
|
-
"contentHash": "
|
|
467
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
468
468
|
"since": "2025-01-01"
|
|
469
469
|
},
|
|
470
470
|
"route-group:scope-coherence": {
|
|
@@ -472,7 +472,7 @@
|
|
|
472
472
|
"type": "route-group",
|
|
473
473
|
"domain": "coherence",
|
|
474
474
|
"sourcePath": "src/server/routes.ts",
|
|
475
|
-
"contentHash": "
|
|
475
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
476
476
|
"since": "2025-01-01"
|
|
477
477
|
},
|
|
478
478
|
"route-group:canonical-state": {
|
|
@@ -480,7 +480,7 @@
|
|
|
480
480
|
"type": "route-group",
|
|
481
481
|
"domain": "state",
|
|
482
482
|
"sourcePath": "src/server/routes.ts",
|
|
483
|
-
"contentHash": "
|
|
483
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
484
484
|
"since": "2025-01-01"
|
|
485
485
|
},
|
|
486
486
|
"route-group:ci": {
|
|
@@ -488,7 +488,7 @@
|
|
|
488
488
|
"type": "route-group",
|
|
489
489
|
"domain": "monitoring",
|
|
490
490
|
"sourcePath": "src/server/routes.ts",
|
|
491
|
-
"contentHash": "
|
|
491
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
492
492
|
"since": "2025-01-01"
|
|
493
493
|
},
|
|
494
494
|
"route-group:sessions": {
|
|
@@ -496,7 +496,7 @@
|
|
|
496
496
|
"type": "route-group",
|
|
497
497
|
"domain": "sessions",
|
|
498
498
|
"sourcePath": "src/server/routes.ts",
|
|
499
|
-
"contentHash": "
|
|
499
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
500
500
|
"since": "2025-01-01"
|
|
501
501
|
},
|
|
502
502
|
"route-group:jobs": {
|
|
@@ -504,7 +504,7 @@
|
|
|
504
504
|
"type": "route-group",
|
|
505
505
|
"domain": "scheduling",
|
|
506
506
|
"sourcePath": "src/server/routes.ts",
|
|
507
|
-
"contentHash": "
|
|
507
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
508
508
|
"since": "2025-01-01"
|
|
509
509
|
},
|
|
510
510
|
"route-group:skip-ledger": {
|
|
@@ -512,7 +512,7 @@
|
|
|
512
512
|
"type": "route-group",
|
|
513
513
|
"domain": "scheduling",
|
|
514
514
|
"sourcePath": "src/server/routes.ts",
|
|
515
|
-
"contentHash": "
|
|
515
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
516
516
|
"since": "2025-01-01"
|
|
517
517
|
},
|
|
518
518
|
"route-group:telegram": {
|
|
@@ -520,7 +520,7 @@
|
|
|
520
520
|
"type": "route-group",
|
|
521
521
|
"domain": "communication",
|
|
522
522
|
"sourcePath": "src/server/routes.ts",
|
|
523
|
-
"contentHash": "
|
|
523
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
524
524
|
"since": "2025-01-01"
|
|
525
525
|
},
|
|
526
526
|
"route-group:attention": {
|
|
@@ -528,7 +528,7 @@
|
|
|
528
528
|
"type": "route-group",
|
|
529
529
|
"domain": "communication",
|
|
530
530
|
"sourcePath": "src/server/routes.ts",
|
|
531
|
-
"contentHash": "
|
|
531
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
532
532
|
"since": "2025-01-01"
|
|
533
533
|
},
|
|
534
534
|
"route-group:relationships": {
|
|
@@ -536,7 +536,7 @@
|
|
|
536
536
|
"type": "route-group",
|
|
537
537
|
"domain": "relationships",
|
|
538
538
|
"sourcePath": "src/server/routes.ts",
|
|
539
|
-
"contentHash": "
|
|
539
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
540
540
|
"since": "2025-01-01"
|
|
541
541
|
},
|
|
542
542
|
"route-group:feedback": {
|
|
@@ -544,7 +544,7 @@
|
|
|
544
544
|
"type": "route-group",
|
|
545
545
|
"domain": "feedback",
|
|
546
546
|
"sourcePath": "src/server/routes.ts",
|
|
547
|
-
"contentHash": "
|
|
547
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
548
548
|
"since": "2025-01-01"
|
|
549
549
|
},
|
|
550
550
|
"route-group:updates": {
|
|
@@ -552,7 +552,7 @@
|
|
|
552
552
|
"type": "route-group",
|
|
553
553
|
"domain": "updates",
|
|
554
554
|
"sourcePath": "src/server/routes.ts",
|
|
555
|
-
"contentHash": "
|
|
555
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
556
556
|
"since": "2025-01-01"
|
|
557
557
|
},
|
|
558
558
|
"route-group:dispatches": {
|
|
@@ -560,7 +560,7 @@
|
|
|
560
560
|
"type": "route-group",
|
|
561
561
|
"domain": "dispatches",
|
|
562
562
|
"sourcePath": "src/server/routes.ts",
|
|
563
|
-
"contentHash": "
|
|
563
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
564
564
|
"since": "2025-01-01"
|
|
565
565
|
},
|
|
566
566
|
"route-group:quota": {
|
|
@@ -568,7 +568,7 @@
|
|
|
568
568
|
"type": "route-group",
|
|
569
569
|
"domain": "monitoring",
|
|
570
570
|
"sourcePath": "src/server/routes.ts",
|
|
571
|
-
"contentHash": "
|
|
571
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
572
572
|
"since": "2025-01-01"
|
|
573
573
|
},
|
|
574
574
|
"route-group:publishing": {
|
|
@@ -576,7 +576,7 @@
|
|
|
576
576
|
"type": "route-group",
|
|
577
577
|
"domain": "publishing",
|
|
578
578
|
"sourcePath": "src/server/routes.ts",
|
|
579
|
-
"contentHash": "
|
|
579
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
580
580
|
"since": "2025-01-01"
|
|
581
581
|
},
|
|
582
582
|
"route-group:private-views": {
|
|
@@ -584,7 +584,7 @@
|
|
|
584
584
|
"type": "route-group",
|
|
585
585
|
"domain": "publishing",
|
|
586
586
|
"sourcePath": "src/server/routes.ts",
|
|
587
|
-
"contentHash": "
|
|
587
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
588
588
|
"since": "2025-01-01"
|
|
589
589
|
},
|
|
590
590
|
"route-group:tunnel": {
|
|
@@ -592,7 +592,7 @@
|
|
|
592
592
|
"type": "route-group",
|
|
593
593
|
"domain": "networking",
|
|
594
594
|
"sourcePath": "src/server/routes.ts",
|
|
595
|
-
"contentHash": "
|
|
595
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
596
596
|
"since": "2025-01-01"
|
|
597
597
|
},
|
|
598
598
|
"route-group:events": {
|
|
@@ -600,7 +600,7 @@
|
|
|
600
600
|
"type": "route-group",
|
|
601
601
|
"domain": "networking",
|
|
602
602
|
"sourcePath": "src/server/routes.ts",
|
|
603
|
-
"contentHash": "
|
|
603
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
604
604
|
"since": "2025-01-01"
|
|
605
605
|
},
|
|
606
606
|
"route-group:evolution": {
|
|
@@ -608,7 +608,7 @@
|
|
|
608
608
|
"type": "route-group",
|
|
609
609
|
"domain": "evolution",
|
|
610
610
|
"sourcePath": "src/server/routes.ts",
|
|
611
|
-
"contentHash": "
|
|
611
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
612
612
|
"since": "2025-01-01"
|
|
613
613
|
},
|
|
614
614
|
"route-group:watchdog": {
|
|
@@ -616,7 +616,7 @@
|
|
|
616
616
|
"type": "route-group",
|
|
617
617
|
"domain": "monitoring",
|
|
618
618
|
"sourcePath": "src/server/routes.ts",
|
|
619
|
-
"contentHash": "
|
|
619
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
620
620
|
"since": "2025-01-01"
|
|
621
621
|
},
|
|
622
622
|
"route-group:topic-memory": {
|
|
@@ -624,7 +624,7 @@
|
|
|
624
624
|
"type": "route-group",
|
|
625
625
|
"domain": "memory",
|
|
626
626
|
"sourcePath": "src/server/routes.ts",
|
|
627
|
-
"contentHash": "
|
|
627
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
628
628
|
"since": "2025-01-01"
|
|
629
629
|
},
|
|
630
630
|
"route-group:state-sync": {
|
|
@@ -632,7 +632,7 @@
|
|
|
632
632
|
"type": "route-group",
|
|
633
633
|
"domain": "coordination",
|
|
634
634
|
"sourcePath": "src/server/routes.ts",
|
|
635
|
-
"contentHash": "
|
|
635
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
636
636
|
"since": "2025-01-01"
|
|
637
637
|
},
|
|
638
638
|
"route-group:intent": {
|
|
@@ -640,7 +640,7 @@
|
|
|
640
640
|
"type": "route-group",
|
|
641
641
|
"domain": "intent",
|
|
642
642
|
"sourcePath": "src/server/routes.ts",
|
|
643
|
-
"contentHash": "
|
|
643
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
644
644
|
"since": "2025-01-01"
|
|
645
645
|
},
|
|
646
646
|
"route-group:triage": {
|
|
@@ -648,7 +648,7 @@
|
|
|
648
648
|
"type": "route-group",
|
|
649
649
|
"domain": "safety",
|
|
650
650
|
"sourcePath": "src/server/routes.ts",
|
|
651
|
-
"contentHash": "
|
|
651
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
652
652
|
"since": "2025-01-01"
|
|
653
653
|
},
|
|
654
654
|
"route-group:operations": {
|
|
@@ -656,7 +656,7 @@
|
|
|
656
656
|
"type": "route-group",
|
|
657
657
|
"domain": "safety",
|
|
658
658
|
"sourcePath": "src/server/routes.ts",
|
|
659
|
-
"contentHash": "
|
|
659
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
660
660
|
"since": "2025-01-01"
|
|
661
661
|
},
|
|
662
662
|
"route-group:sentinel": {
|
|
@@ -664,7 +664,7 @@
|
|
|
664
664
|
"type": "route-group",
|
|
665
665
|
"domain": "safety",
|
|
666
666
|
"sourcePath": "src/server/routes.ts",
|
|
667
|
-
"contentHash": "
|
|
667
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
668
668
|
"since": "2025-01-01"
|
|
669
669
|
},
|
|
670
670
|
"route-group:trust": {
|
|
@@ -672,7 +672,7 @@
|
|
|
672
672
|
"type": "route-group",
|
|
673
673
|
"domain": "safety",
|
|
674
674
|
"sourcePath": "src/server/routes.ts",
|
|
675
|
-
"contentHash": "
|
|
675
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
676
676
|
"since": "2025-01-01"
|
|
677
677
|
},
|
|
678
678
|
"route-group:monitoring": {
|
|
@@ -680,7 +680,7 @@
|
|
|
680
680
|
"type": "route-group",
|
|
681
681
|
"domain": "monitoring",
|
|
682
682
|
"sourcePath": "src/server/routes.ts",
|
|
683
|
-
"contentHash": "
|
|
683
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
684
684
|
"since": "2025-01-01"
|
|
685
685
|
},
|
|
686
686
|
"route-group:commitments": {
|
|
@@ -688,7 +688,7 @@
|
|
|
688
688
|
"type": "route-group",
|
|
689
689
|
"domain": "commitments",
|
|
690
690
|
"sourcePath": "src/server/routes.ts",
|
|
691
|
-
"contentHash": "
|
|
691
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
692
692
|
"since": "2025-01-01"
|
|
693
693
|
},
|
|
694
694
|
"route-group:episodes": {
|
|
@@ -696,7 +696,7 @@
|
|
|
696
696
|
"type": "route-group",
|
|
697
697
|
"domain": "memory",
|
|
698
698
|
"sourcePath": "src/server/routes.ts",
|
|
699
|
-
"contentHash": "
|
|
699
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
700
700
|
"since": "2025-01-01"
|
|
701
701
|
},
|
|
702
702
|
"route-group:messages": {
|
|
@@ -704,7 +704,7 @@
|
|
|
704
704
|
"type": "route-group",
|
|
705
705
|
"domain": "coordination",
|
|
706
706
|
"sourcePath": "src/server/routes.ts",
|
|
707
|
-
"contentHash": "
|
|
707
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
708
708
|
"since": "2025-01-01"
|
|
709
709
|
},
|
|
710
710
|
"route-group:system-reviews": {
|
|
@@ -712,7 +712,7 @@
|
|
|
712
712
|
"type": "route-group",
|
|
713
713
|
"domain": "monitoring",
|
|
714
714
|
"sourcePath": "src/server/routes.ts",
|
|
715
|
-
"contentHash": "
|
|
715
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
716
716
|
"since": "2025-01-01"
|
|
717
717
|
},
|
|
718
718
|
"route-group:machine-mesh": {
|
|
@@ -728,7 +728,7 @@
|
|
|
728
728
|
"type": "route-group",
|
|
729
729
|
"domain": "security",
|
|
730
730
|
"sourcePath": "src/server/routes.ts",
|
|
731
|
-
"contentHash": "
|
|
731
|
+
"contentHash": "f98867b181546b6080d0a7878ef2ac1d22914f491bda857b60116fa840e64a12",
|
|
732
732
|
"since": "2025-01-01"
|
|
733
733
|
},
|
|
734
734
|
"cli:init": {
|
|
@@ -1400,7 +1400,7 @@
|
|
|
1400
1400
|
"type": "subsystem",
|
|
1401
1401
|
"domain": "server",
|
|
1402
1402
|
"sourcePath": "src/server/AgentServer.ts",
|
|
1403
|
-
"contentHash": "
|
|
1403
|
+
"contentHash": "a072f7ccaeb41697cf5b2b407df3d85faa2e19e62b9b2a60076467f17c177b80",
|
|
1404
1404
|
"since": "2025-01-01"
|
|
1405
1405
|
},
|
|
1406
1406
|
"subsystem:session-manager": {
|
|
@@ -1464,7 +1464,7 @@
|
|
|
1464
1464
|
"type": "subsystem",
|
|
1465
1465
|
"domain": "communication",
|
|
1466
1466
|
"sourcePath": "src/lifeline/TelegramLifeline.ts",
|
|
1467
|
-
"contentHash": "
|
|
1467
|
+
"contentHash": "5418becaa387a958fecaf2ff13de65e551dcb72e8491245ec27b64b5a8479119",
|
|
1468
1468
|
"since": "2025-01-01"
|
|
1469
1469
|
},
|
|
1470
1470
|
"subsystem:orphan-process-reaper": {
|
|
@@ -1488,7 +1488,7 @@
|
|
|
1488
1488
|
"type": "subsystem",
|
|
1489
1489
|
"domain": "coordination",
|
|
1490
1490
|
"sourcePath": "src/core/MultiMachineCoordinator.ts",
|
|
1491
|
-
"contentHash": "
|
|
1491
|
+
"contentHash": "eec2fd6c9832bd8b065da4722079fa56114629de2824764c81b89481d110d4ca",
|
|
1492
1492
|
"since": "2025-01-01"
|
|
1493
1493
|
},
|
|
1494
1494
|
"subsystem:backup-manager": {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- bump: patch -->
|
|
4
|
+
|
|
5
|
+
## What Changed
|
|
6
|
+
|
|
7
|
+
- Fixed dashboard apiFetch to properly pass method, headers, and body options to fetch. Feature toggles and autonomy profile changes now persist instead of silently failing as GET requests.
|
|
8
|
+
- Fixed degradation-digest job gate and skill to read from the correct file path (.instar/degradations.json instead of .instar/state/degradation-events.json). The job can now actually run.
|
|
9
|
+
- Fixed MemoryExporter to not overwrite existing MEMORY.md when SemanticMemory has 0 entities.
|
|
10
|
+
|
|
11
|
+
## What to Tell Your User
|
|
12
|
+
|
|
13
|
+
- **Dashboard feature toggles work now**: "Feature toggles and autonomy profile changes in the dashboard now actually save. Previously they appeared to toggle but silently reverted."
|
|
14
|
+
- **Degradation monitoring active**: "The degradation digest job can now run properly. It was blocked by a wrong file path since it was created."
|
|
15
|
+
|
|
16
|
+
## Summary of New Capabilities
|
|
17
|
+
|
|
18
|
+
| Capability | How to Use |
|
|
19
|
+
|-----------|-----------|
|
|
20
|
+
| Working dashboard toggles | Toggle features in the dashboard Features tab |
|
|
21
|
+
| Degradation digest job | Automatic — runs every 4 hours when degradation events exist |
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- bump: patch -->
|
|
4
|
+
|
|
5
|
+
## What Changed
|
|
6
|
+
|
|
7
|
+
- Added POST /jobs/:slug/reset-state endpoint. Clears stale pending state when a job session dies without reporting back, allowing the job to be re-triggered.
|
|
8
|
+
|
|
9
|
+
## What to Tell Your User
|
|
10
|
+
|
|
11
|
+
- **Job recovery is now self-service**: "If a job gets stuck in pending state because its session died, you can reset it with a single API call instead of waiting for manual intervention."
|
|
12
|
+
|
|
13
|
+
## Summary of New Capabilities
|
|
14
|
+
|
|
15
|
+
| Capability | How to Use |
|
|
16
|
+
|-----------|-----------|
|
|
17
|
+
| Reset stuck job state | POST /jobs/:slug/reset-state — resets pending to failure so the scheduler can re-trigger |
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Upgrade Guide — v0.28.28
|
|
2
|
+
|
|
3
|
+
<!-- bump: patch -->
|
|
4
|
+
<!-- Valid values: patch, minor, major -->
|
|
5
|
+
<!-- patch = bug fixes, refactors, test additions, doc updates -->
|
|
6
|
+
<!-- minor = new features, new APIs, new capabilities (backwards-compatible) -->
|
|
7
|
+
<!-- major = breaking changes to existing APIs or behavior -->
|
|
8
|
+
|
|
9
|
+
## What Changed
|
|
10
|
+
|
|
11
|
+
- Fixed GET /context sometimes reporting 0 bytes for segments that clearly had content on disk. The previous code ran fs.existsSync followed by a separate fs.statSync — if the second call silently failed, the response claimed the segment existed but had zero size. The listing now uses a single atomic fs.statSync, so the exists flag and sizeBytes always come from the same read and always agree.
|
|
12
|
+
- GET /context responses now include an absolute filePath for every segment and a statError field whenever the filesystem raises a non-ENOENT error. If an agent sees an unexpected zero-byte segment, it can now copy the absolute path straight into ls and see exactly what Instar was checking, instead of guessing whether the server's context directory matches the hooks.
|
|
13
|
+
|
|
14
|
+
## What to Tell Your User
|
|
15
|
+
|
|
16
|
+
- **Your context is visible again**: "If you ever asked me what segments I had loaded and I said they were all empty even though you could see the files on disk, that was a real bug — I couldn't tell the difference between 'the file isn't there' and 'I hit an error trying to read it.' I can now, and I'll tell you exactly which path I'm looking at if something still seems off."
|
|
17
|
+
|
|
18
|
+
## Summary of New Capabilities
|
|
19
|
+
|
|
20
|
+
| Capability | How to Use |
|
|
21
|
+
|-----------|-----------|
|
|
22
|
+
| Self-diagnose context path mismatches | GET /context — each segment now includes an absolute filePath and an optional statError |
|
|
23
|
+
| Trust consistent size reporting | GET /context — exists and sizeBytes come from the same stat call, no race window |
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Upgrade Guide — v0.28.29
|
|
2
|
+
|
|
3
|
+
<!-- bump: patch -->
|
|
4
|
+
|
|
5
|
+
## What Changed
|
|
6
|
+
|
|
7
|
+
`instar review --history` now shows the names of failing probes beneath each failed review entry, not just the pass/fail count. Previously, a report showing "13/16 passed" gave no indication of which probes failed, forcing agents to re-run a full review to diagnose. The CLI now reads the `results` array from each history entry (which was already returned by `/system-reviews/history`) and prints the names of probes where `passed === false` in red beneath the summary line. No server change — this is a pure display fix in `src/commands/review.ts`.
|
|
8
|
+
|
|
9
|
+
## What to Tell Your User
|
|
10
|
+
|
|
11
|
+
- **Faster health diagnosis**: "When I check my review history now, I can see exactly which probes are failing — no more re-running a full review just to find out what went wrong."
|
|
12
|
+
|
|
13
|
+
## Summary of New Capabilities
|
|
14
|
+
|
|
15
|
+
| Capability | How to Use |
|
|
16
|
+
|-----------|-----------|
|
|
17
|
+
| Failed probe names in review history | `instar review --history` |
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Upgrade Guide — v0.28.42
|
|
2
|
+
|
|
3
|
+
<!-- bump: patch -->
|
|
4
|
+
|
|
5
|
+
## What Changed
|
|
6
|
+
|
|
7
|
+
Fixed a silent failure in post-update migration: when Node.js is upgraded in place (e.g., via `brew upgrade node`) while an Instar server is still running, `process.execPath` can point at a binary path that no longer exists on disk. The subsequent spawn fails with ENOENT and post-update migration skips silently, leaving agent configuration stale after auto-updates.
|
|
8
|
+
|
|
9
|
+
`UpdateChecker.postUpdateMigration` now guards `process.execPath` with an `existsSync` check and falls back to `node` on PATH when the resolved exec path has been deleted.
|
|
10
|
+
|
|
11
|
+
## What to Tell Your User
|
|
12
|
+
|
|
13
|
+
- **More reliable self-updates**: "If your system's Node was upgraded while I was running, my next auto-update will still apply its migrations correctly instead of silently skipping them."
|
|
14
|
+
|
|
15
|
+
## Summary of New Capabilities
|
|
16
|
+
|
|
17
|
+
| Capability | How to Use |
|
|
18
|
+
|-----------|-----------|
|
|
19
|
+
| Resilient post-update migration across in-place Node upgrades | automatic |
|
|
20
|
+
|
|
21
|
+
## Evidence
|
|
22
|
+
|
|
23
|
+
Reproduction: Homebrew users who ran `brew upgrade node` between Instar server starts reported repeated `UpdateChecker.postUpdateMigration` degradation events with reason `spawn /opt/homebrew/Cellar/node@22/22.22.2/bin/node ENOENT`. Root cause traced to `src/core/UpdateChecker.ts:282` where `cmd = process.execPath` was spawned unconditionally.
|
|
24
|
+
|
|
25
|
+
Verified fix: Before — `execFile(process.execPath, [shadowCliJs, 'migrate'])` rejects with ENOENT when the Cellar path is gone; degradation reporter fires; migration skipped. After — `fs.existsSync(process.execPath)` returns false, `cmd` falls back to `'node'`, spawn resolves via PATH, migration runs. Unit tests for UpdateChecker (13) continue to pass.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Upgrade Guide — v0.28.43
|
|
2
|
+
|
|
3
|
+
<!-- bump: patch -->
|
|
4
|
+
|
|
5
|
+
## What Changed
|
|
6
|
+
|
|
7
|
+
Two layers of work landed in this release.
|
|
8
|
+
|
|
9
|
+
**Layer 1 — Outbound messaging, reshaped under the signal-vs-authority principle.**
|
|
10
|
+
|
|
11
|
+
The outbound agent-to-user messaging path (`/telegram/reply`, `/slack/reply`, `/whatsapp/send`, `/imessage/validate-send`, `/telegram/post-update`) had grown three independent blockers sitting in front of the `MessagingToneGate` — a junk-payload guard, an outbound dedup gate, and the tone gate itself. Each held its own 422-block authority. Each misfired independently. Combined, they produced the over-block pattern observed on 2026-04-15 where legitimate messages were being rejected and the fixes for each layer kept producing side effects in the next.
|
|
12
|
+
|
|
13
|
+
All three blockers have been reshaped into a single authority. `isJunkPayload()` and `OutboundDedupGate.check()` are now pure signal producers — they return structured observations (junk detection with reason, duplicate detection with similarity and matched prior) but do not emit 422 responses. `MessagingToneGate.review()` is the single outbound authority. It receives the signals alongside recent conversation context, and makes one block/allow decision with reasoning traceable to an enumerated rule list (B1–B9).
|
|
14
|
+
|
|
15
|
+
Rule-id enforcement is now structural. If the LLM returns a block decision citing a rule not in the enumerated set, or with no rule id at all, the gate fails open with `invalidRule: true` on the result. This catches the "LLM invents a rule not in its prompt" drift mode directly. Every decision the gate makes is logged to stderr in structured form so over-block audits can detect drift patterns over time.
|
|
16
|
+
|
|
17
|
+
Signal-driven rules B8 (`LEAKED_DEBUG_PAYLOAD`) and B9 (`RESPAWN_RACE_DUPLICATE`) require non-empty conversational context to fire. On channels without a conversation source (e.g., fresh sends to unfamiliar channels), these rules cannot apply, preventing context-blind judgment calls.
|
|
18
|
+
|
|
19
|
+
Also in layer 1: a pre-respawn drain in `SessionRecovery` that polls topic history for up to 7 seconds after killing a context-exhausted session, captures any in-flight reply that lands after detection, and passes it into the fresh session's bootstrap prompt. This prevents the respawned session from duplicating a reply the dying session already committed.
|
|
20
|
+
|
|
21
|
+
**Layer 2 — Structural process enforcement: the `/instar-dev` skill and its hooks.**
|
|
22
|
+
|
|
23
|
+
A new skill is introduced at `skills/instar-dev/` that is the required entry point for every change to the instar source tree. It composes `/build` as its execution engine and adds instar-specific phases around it: principle check (read `docs/signal-vs-authority.md` and ask whether this change touches a decision point), planning, build, side-effects review (written artifact answering seven structured questions), second-pass review subagent for high-risk changes (block/allow decisions, session lifecycle, dispatch, information flow), and a trace+commit phase that verifies the artifact covers the staged files.
|
|
24
|
+
|
|
25
|
+
Enforcement lives in `.husky/pre-commit` (via `scripts/instar-dev-precommit.js`) and in `scripts/pre-push-gate.js`. The pre-commit hook refuses commits of in-scope source files (`src/`, `scripts/`, `.husky/`, `skills/*/SKILL.md` and support scripts) unless a fresh trace file exists in `.instar/instar-dev-traces/` pointing at a filled-in artifact that covers the staged files and matches the artifact's content sha. The pre-push gate refuses release pushes whose upgrade notes' "What Changed" section contains fix/feature keywords if no matching artifact exists in `upgrades/side-effects/`. Bypass via `git commit --no-verify` is still technically possible but leaves a visible trail in git history.
|
|
26
|
+
|
|
27
|
+
The skill is NOT user-invocable. It is for the instar-developing agent (Echo, or any agent assigned instar-dev responsibilities). End users of instar should never invoke `/instar-dev` and will not see it in their slash-command menu.
|
|
28
|
+
|
|
29
|
+
Documentation landed:
|
|
30
|
+
|
|
31
|
+
- `docs/signal-vs-authority.md` — the architectural principle the skill enforces.
|
|
32
|
+
- `docs/decision-surface-inventory.md` — a living inventory of every decision point in instar with classification (signal / authority / violator / audit).
|
|
33
|
+
- `skills/instar-dev/SKILL.md` — the skill definition.
|
|
34
|
+
- `skills/instar-dev/templates/side-effects-artifact.md` — the required review template.
|
|
35
|
+
|
|
36
|
+
Side-effects review artifacts for this release are in `upgrades/side-effects/`:
|
|
37
|
+
|
|
38
|
+
- `outbound-signal-authority-rework.md` — review of the layer 1 outbound rework, including independent second-pass findings and resolutions.
|
|
39
|
+
- `instar-dev-skill.md` — review of the skill and enforcement infrastructure itself.
|
|
40
|
+
- `retrospective-drain-and-principle.md` — retrospective review of the pre-respawn drain and scaffold-template principle changes that pre-dated the skill.
|
|
41
|
+
- `skill-audience-clarification.md` — review of the follow-on language tightening.
|
|
42
|
+
|
|
43
|
+
## What to Tell Your User
|
|
44
|
+
|
|
45
|
+
- **No more over-blocked replies.** Earlier patches to outbound messaging had layered several independent filters in front of the message-review gate, and each one could reject a legitimate message on its own. All of those filters now hand observations to the review gate, which makes one decision with full conversational context. Technical depth in a reply to a technical question no longer gets rejected for being too detailed.
|
|
46
|
+
- **The review gate now shows its reasoning.** When a message is blocked, the response names exactly which rule caught it. If the gate tries to block with reasoning that isn't one of its written rules, the message passes through and the event is logged for later audit. The gate can no longer invent new rules in the moment.
|
|
47
|
+
- **Post-respawn duplication is mitigated.** If a session gets restarted mid-reply because the conversation got too long, the new session learns what the old one was about to say so it doesn't repeat itself.
|
|
48
|
+
- **No visible user-facing change for the process infrastructure.** The `/instar-dev` skill and its enforcement hooks are for developers working on instar itself — you will never see or need to invoke them.
|
|
49
|
+
|
|
50
|
+
## Summary of New Capabilities
|
|
51
|
+
|
|
52
|
+
| Capability | How to Use |
|
|
53
|
+
|-----------|-----------|
|
|
54
|
+
| Outbound signal-to-authority flow | Automatic on every outbound messaging route |
|
|
55
|
+
| Rule-id enforcement on tone gate decisions | Automatic; blocked responses now include a `rule` field |
|
|
56
|
+
| Structured decision log for over-block audit | Automatic; decisions written to stderr |
|
|
57
|
+
| Signal-driven rules B8/B9 gated on conversation context | Automatic; no effect on channels without a conversation source |
|
|
58
|
+
| Pre-respawn drain in context-exhaustion recovery | Automatic during respawn |
|
|
59
|
+
| `/instar-dev` skill | Required for every change to instar source; not user-invocable |
|
|
60
|
+
| Side-effects review artifact requirement | Enforced via pre-commit and pre-push hooks |
|
|
61
|
+
| Decision-surface inventory | Living document at `docs/decision-surface-inventory.md` |
|
|
62
|
+
|
|
63
|
+
## Evidence
|
|
64
|
+
|
|
65
|
+
### Outbound signal-authority rework
|
|
66
|
+
|
|
67
|
+
Dry-run verification against real topic history (documented in `upgrades/side-effects/outbound-signal-authority-rework.md`):
|
|
68
|
+
|
|
69
|
+
- **Verbatim-resend case**: `OutboundDedupGate.check()` flagged similarity=1.000 and populated `signals.duplicate.detected=true`. Gate received the signal alongside recent conversation context and made the decision — no 422 from the detector layer.
|
|
70
|
+
- **Paraphrase case** (similarity=0.611): detector did not flag, `signals.duplicate.detected=false`. Gate passed the message. Trade-off documented — paraphrases below 0.7 pass through.
|
|
71
|
+
- **Junk-payload case**: 11/11 cases classified correctly by `isJunkPayload()`. Signal routes to the authority; the authority decides based on context.
|
|
72
|
+
|
|
73
|
+
Live verification against the running echo server (post-deploy):
|
|
74
|
+
|
|
75
|
+
- A block-case test with a literal path and a CLI command returned 422 with `rule: "B1_CLI_COMMAND"` — the new enumerated rule id is populated, confirming the rework is active. Latency ~13s (real LLM call).
|
|
76
|
+
- A short `"test"` payload sent to a fresh topic (no conversation context) passed the gate. Old behavior would have auto-blocked at the junk-payload layer; new behavior honors the prompt constraint that B8 requires conversation context.
|
|
77
|
+
|
|
78
|
+
### Reasoning-discipline enforcement
|
|
79
|
+
|
|
80
|
+
Unit test coverage of the invalid-rule drift path (`tests/unit/MessagingToneGate.test.ts`):
|
|
81
|
+
|
|
82
|
+
- LLM response `{"pass": false, "rule": "B_INTERNAL_DETAILS"}` → gate fails open with `invalidRule: true`.
|
|
83
|
+
- LLM response `{"pass": false}` (no rule) → gate fails open with `invalidRule: true`.
|
|
84
|
+
- LLM response `{"pass": false, "rule": "B8_LEAKED_DEBUG_PAYLOAD", ...}` → gate honors the block, `invalidRule` is undefined.
|
|
85
|
+
|
|
86
|
+
All 24 tests pass.
|
|
87
|
+
|
|
88
|
+
### Pre-respawn drain
|
|
89
|
+
|
|
90
|
+
Unit test coverage: 27 tests in `tests/unit/context-exhaustion-recovery.test.ts` covering drain window timing, empty-window fallback, in-flight capture, recovery-prompt assembly, and respawn-fresh vs legacy respawn paths.
|
|
91
|
+
|
|
92
|
+
Full end-to-end verification of the drain requires a naturally-occurring context-exhaustion event with an in-flight reply landing in the 7-second grace window. Not reproducible in dev without disrupting an active session or burning quota on a throwaway. The `CompactionSentinel`'s structured log will capture the first real trace when it fires.
|
|
93
|
+
|
|
94
|
+
### `/instar-dev` gate
|
|
95
|
+
|
|
96
|
+
End-to-end dry run (documented in `upgrades/side-effects/instar-dev-skill.md`):
|
|
97
|
+
|
|
98
|
+
- Block case: staged `src/core/types.ts` with no artifact → pre-commit hook exits 1 with "commit BLOCKED" banner identifying the in-scope file and missing-trace reason.
|
|
99
|
+
- Pass case: staged matching artifact, ran `write-trace.mjs` to produce a trace covering the staged files → hook exits 0 with confirmation line identifying the trace and artifact.
|
|
100
|
+
- Post-bootstrap verification: after the initial self-commit landed, attempted a marker change to `src/core/types.ts` without an artifact. Hook correctly blocked it in the standard commit flow.
|
|
101
|
+
|
|
102
|
+
Pre-push gate Section 5 verified against a working-tree state where `upgrade-notes` qualify for review but no matching artifact exists — reports the missing-artifact error and exits 1.
|
|
103
|
+
|
|
104
|
+
### Remaining known gap
|
|
105
|
+
|
|
106
|
+
Full automated test suite reports 15847 tests passing, 7 failed, 7 skipped. The one identified failure (`tests/unit/security.test.ts` flagging `execSync` calls in `commands/listener.ts`) predates this release and is unrelated to these changes. The other 6 failures were truncated from the test run output; targeted reruns of the test groups this release touches (MessagingToneGate, OutboundDedupGate, junk-payload, server.test.ts, messaging-routes.test.ts) all pass.
|