instar 1.3.1238 → 1.3.1239

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.1238",
3
+ "version": "1.3.1239",
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-09-15T02:16:57.955Z",
5
- "instarVersion": "1.3.1238",
4
+ "generatedAt": "2026-09-15T05:41:06.845Z",
5
+ "instarVersion": "1.3.1239",
6
6
  "entryCount": 203,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -427,7 +427,7 @@
427
427
  "type": "route-group",
428
428
  "domain": "monitoring",
429
429
  "sourcePath": "src/server/routes.ts",
430
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
430
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
431
431
  "since": "2025-01-01"
432
432
  },
433
433
  "route-group:agents": {
@@ -435,7 +435,7 @@
435
435
  "type": "route-group",
436
436
  "domain": "sessions",
437
437
  "sourcePath": "src/server/routes.ts",
438
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
438
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
439
439
  "since": "2025-01-01"
440
440
  },
441
441
  "route-group:backups": {
@@ -443,7 +443,7 @@
443
443
  "type": "route-group",
444
444
  "domain": "operations",
445
445
  "sourcePath": "src/server/routes.ts",
446
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
446
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
447
447
  "since": "2025-01-01"
448
448
  },
449
449
  "route-group:git": {
@@ -451,7 +451,7 @@
451
451
  "type": "route-group",
452
452
  "domain": "coordination",
453
453
  "sourcePath": "src/server/routes.ts",
454
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
454
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
455
455
  "since": "2025-01-01"
456
456
  },
457
457
  "route-group:memory": {
@@ -459,7 +459,7 @@
459
459
  "type": "route-group",
460
460
  "domain": "memory",
461
461
  "sourcePath": "src/server/routes.ts",
462
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
462
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
463
463
  "since": "2025-01-01"
464
464
  },
465
465
  "route-group:semantic": {
@@ -467,7 +467,7 @@
467
467
  "type": "route-group",
468
468
  "domain": "memory",
469
469
  "sourcePath": "src/server/routes.ts",
470
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
470
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
471
471
  "since": "2025-01-01"
472
472
  },
473
473
  "route-group:status": {
@@ -475,7 +475,7 @@
475
475
  "type": "route-group",
476
476
  "domain": "monitoring",
477
477
  "sourcePath": "src/server/routes.ts",
478
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
478
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
479
479
  "since": "2025-01-01"
480
480
  },
481
481
  "route-group:capabilities": {
@@ -483,7 +483,7 @@
483
483
  "type": "route-group",
484
484
  "domain": "mapping",
485
485
  "sourcePath": "src/server/routes.ts",
486
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
486
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
487
487
  "since": "2025-01-01"
488
488
  },
489
489
  "route-group:project-map": {
@@ -491,7 +491,7 @@
491
491
  "type": "route-group",
492
492
  "domain": "mapping",
493
493
  "sourcePath": "src/server/routes.ts",
494
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
494
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
495
495
  "since": "2025-01-01"
496
496
  },
497
497
  "route-group:coherence": {
@@ -499,7 +499,7 @@
499
499
  "type": "route-group",
500
500
  "domain": "coherence",
501
501
  "sourcePath": "src/server/routes.ts",
502
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
502
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
503
503
  "since": "2025-01-01"
504
504
  },
505
505
  "route-group:topic-bindings": {
@@ -507,7 +507,7 @@
507
507
  "type": "route-group",
508
508
  "domain": "sessions",
509
509
  "sourcePath": "src/server/routes.ts",
510
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
510
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
511
511
  "since": "2025-01-01"
512
512
  },
513
513
  "route-group:context": {
@@ -515,7 +515,7 @@
515
515
  "type": "route-group",
516
516
  "domain": "context",
517
517
  "sourcePath": "src/server/routes.ts",
518
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
518
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
519
519
  "since": "2025-01-01"
520
520
  },
521
521
  "route-group:scope-coherence": {
@@ -523,7 +523,7 @@
523
523
  "type": "route-group",
524
524
  "domain": "coherence",
525
525
  "sourcePath": "src/server/routes.ts",
526
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
526
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
527
527
  "since": "2025-01-01"
528
528
  },
529
529
  "route-group:canonical-state": {
@@ -531,7 +531,7 @@
531
531
  "type": "route-group",
532
532
  "domain": "state",
533
533
  "sourcePath": "src/server/routes.ts",
534
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
534
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
535
535
  "since": "2025-01-01"
536
536
  },
537
537
  "route-group:ci": {
@@ -539,7 +539,7 @@
539
539
  "type": "route-group",
540
540
  "domain": "monitoring",
541
541
  "sourcePath": "src/server/routes.ts",
542
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
542
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
543
543
  "since": "2025-01-01"
544
544
  },
545
545
  "route-group:sessions": {
@@ -547,7 +547,7 @@
547
547
  "type": "route-group",
548
548
  "domain": "sessions",
549
549
  "sourcePath": "src/server/routes.ts",
550
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
550
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
551
551
  "since": "2025-01-01"
552
552
  },
553
553
  "route-group:jobs": {
@@ -555,7 +555,7 @@
555
555
  "type": "route-group",
556
556
  "domain": "scheduling",
557
557
  "sourcePath": "src/server/routes.ts",
558
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
558
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
559
559
  "since": "2025-01-01"
560
560
  },
561
561
  "route-group:skip-ledger": {
@@ -563,7 +563,7 @@
563
563
  "type": "route-group",
564
564
  "domain": "scheduling",
565
565
  "sourcePath": "src/server/routes.ts",
566
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
566
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
567
567
  "since": "2025-01-01"
568
568
  },
569
569
  "route-group:telegram": {
@@ -571,7 +571,7 @@
571
571
  "type": "route-group",
572
572
  "domain": "communication",
573
573
  "sourcePath": "src/server/routes.ts",
574
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
574
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
575
575
  "since": "2025-01-01"
576
576
  },
577
577
  "route-group:attention": {
@@ -579,7 +579,7 @@
579
579
  "type": "route-group",
580
580
  "domain": "communication",
581
581
  "sourcePath": "src/server/routes.ts",
582
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
582
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
583
583
  "since": "2025-01-01"
584
584
  },
585
585
  "route-group:relationships": {
@@ -587,7 +587,7 @@
587
587
  "type": "route-group",
588
588
  "domain": "relationships",
589
589
  "sourcePath": "src/server/routes.ts",
590
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
590
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
591
591
  "since": "2025-01-01"
592
592
  },
593
593
  "route-group:feedback": {
@@ -595,7 +595,7 @@
595
595
  "type": "route-group",
596
596
  "domain": "feedback",
597
597
  "sourcePath": "src/server/routes.ts",
598
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
598
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
599
599
  "since": "2025-01-01"
600
600
  },
601
601
  "route-group:updates": {
@@ -603,7 +603,7 @@
603
603
  "type": "route-group",
604
604
  "domain": "updates",
605
605
  "sourcePath": "src/server/routes.ts",
606
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
606
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
607
607
  "since": "2025-01-01"
608
608
  },
609
609
  "route-group:dispatches": {
@@ -611,7 +611,7 @@
611
611
  "type": "route-group",
612
612
  "domain": "dispatches",
613
613
  "sourcePath": "src/server/routes.ts",
614
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
614
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
615
615
  "since": "2025-01-01"
616
616
  },
617
617
  "route-group:quota": {
@@ -619,7 +619,7 @@
619
619
  "type": "route-group",
620
620
  "domain": "monitoring",
621
621
  "sourcePath": "src/server/routes.ts",
622
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
622
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
623
623
  "since": "2025-01-01"
624
624
  },
625
625
  "route-group:publishing": {
@@ -627,7 +627,7 @@
627
627
  "type": "route-group",
628
628
  "domain": "publishing",
629
629
  "sourcePath": "src/server/routes.ts",
630
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
630
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
631
631
  "since": "2025-01-01"
632
632
  },
633
633
  "route-group:private-views": {
@@ -635,7 +635,7 @@
635
635
  "type": "route-group",
636
636
  "domain": "publishing",
637
637
  "sourcePath": "src/server/routes.ts",
638
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
638
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
639
639
  "since": "2025-01-01"
640
640
  },
641
641
  "route-group:tunnel": {
@@ -643,7 +643,7 @@
643
643
  "type": "route-group",
644
644
  "domain": "networking",
645
645
  "sourcePath": "src/server/routes.ts",
646
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
646
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
647
647
  "since": "2025-01-01"
648
648
  },
649
649
  "route-group:events": {
@@ -651,7 +651,7 @@
651
651
  "type": "route-group",
652
652
  "domain": "networking",
653
653
  "sourcePath": "src/server/routes.ts",
654
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
654
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
655
655
  "since": "2025-01-01"
656
656
  },
657
657
  "route-group:evolution": {
@@ -659,7 +659,7 @@
659
659
  "type": "route-group",
660
660
  "domain": "evolution",
661
661
  "sourcePath": "src/server/routes.ts",
662
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
662
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
663
663
  "since": "2025-01-01"
664
664
  },
665
665
  "route-group:watchdog": {
@@ -667,7 +667,7 @@
667
667
  "type": "route-group",
668
668
  "domain": "monitoring",
669
669
  "sourcePath": "src/server/routes.ts",
670
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
670
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
671
671
  "since": "2025-01-01"
672
672
  },
673
673
  "route-group:topic-memory": {
@@ -675,7 +675,7 @@
675
675
  "type": "route-group",
676
676
  "domain": "memory",
677
677
  "sourcePath": "src/server/routes.ts",
678
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
678
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
679
679
  "since": "2025-01-01"
680
680
  },
681
681
  "route-group:state-sync": {
@@ -683,7 +683,7 @@
683
683
  "type": "route-group",
684
684
  "domain": "coordination",
685
685
  "sourcePath": "src/server/routes.ts",
686
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
686
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
687
687
  "since": "2025-01-01"
688
688
  },
689
689
  "route-group:intent": {
@@ -691,7 +691,7 @@
691
691
  "type": "route-group",
692
692
  "domain": "intent",
693
693
  "sourcePath": "src/server/routes.ts",
694
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
694
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
695
695
  "since": "2025-01-01"
696
696
  },
697
697
  "route-group:triage": {
@@ -699,7 +699,7 @@
699
699
  "type": "route-group",
700
700
  "domain": "safety",
701
701
  "sourcePath": "src/server/routes.ts",
702
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
702
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
703
703
  "since": "2025-01-01"
704
704
  },
705
705
  "route-group:operations": {
@@ -707,7 +707,7 @@
707
707
  "type": "route-group",
708
708
  "domain": "safety",
709
709
  "sourcePath": "src/server/routes.ts",
710
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
710
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
711
711
  "since": "2025-01-01"
712
712
  },
713
713
  "route-group:sentinel": {
@@ -715,7 +715,7 @@
715
715
  "type": "route-group",
716
716
  "domain": "safety",
717
717
  "sourcePath": "src/server/routes.ts",
718
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
718
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
719
719
  "since": "2025-01-01"
720
720
  },
721
721
  "route-group:trust": {
@@ -723,7 +723,7 @@
723
723
  "type": "route-group",
724
724
  "domain": "safety",
725
725
  "sourcePath": "src/server/routes.ts",
726
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
726
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
727
727
  "since": "2025-01-01"
728
728
  },
729
729
  "route-group:monitoring": {
@@ -731,7 +731,7 @@
731
731
  "type": "route-group",
732
732
  "domain": "monitoring",
733
733
  "sourcePath": "src/server/routes.ts",
734
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
734
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
735
735
  "since": "2025-01-01"
736
736
  },
737
737
  "route-group:commitments": {
@@ -739,7 +739,7 @@
739
739
  "type": "route-group",
740
740
  "domain": "commitments",
741
741
  "sourcePath": "src/server/routes.ts",
742
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
742
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
743
743
  "since": "2025-01-01"
744
744
  },
745
745
  "route-group:episodes": {
@@ -747,7 +747,7 @@
747
747
  "type": "route-group",
748
748
  "domain": "memory",
749
749
  "sourcePath": "src/server/routes.ts",
750
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
750
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
751
751
  "since": "2025-01-01"
752
752
  },
753
753
  "route-group:messages": {
@@ -755,7 +755,7 @@
755
755
  "type": "route-group",
756
756
  "domain": "coordination",
757
757
  "sourcePath": "src/server/routes.ts",
758
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
758
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
759
759
  "since": "2025-01-01"
760
760
  },
761
761
  "route-group:system-reviews": {
@@ -763,7 +763,7 @@
763
763
  "type": "route-group",
764
764
  "domain": "monitoring",
765
765
  "sourcePath": "src/server/routes.ts",
766
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
766
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
767
767
  "since": "2025-01-01"
768
768
  },
769
769
  "route-group:machine-mesh": {
@@ -779,7 +779,7 @@
779
779
  "type": "route-group",
780
780
  "domain": "security",
781
781
  "sourcePath": "src/server/routes.ts",
782
- "contentHash": "a277413db63c4a2d9d3d79becc72ba4266c91f33d31fe19c060d47b3d0b94756",
782
+ "contentHash": "4d3d721f52d66c37cdf666f7149c4cd204ac10ec756da08d99753f33b874e448",
783
783
  "since": "2025-01-01"
784
784
  },
785
785
  "cli:init": {
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": 1,
3
3
  "generatedFrom": "source-tree",
4
4
  "registrySha256": "890eec3dcf80e4388c396f43001a0bd3fabc80c88f79aa9525885d6402a6dfdf",
5
- "packageVersion": "1.3.1238",
5
+ "packageVersion": "1.3.1239",
6
6
  "guards": [
7
7
  {
8
8
  "ref": "docs/audits/phase-b/f10-triage.md",
@@ -1,5 +1,5 @@
1
1
  {
2
- "sha256": "af9c9662b90d97f6fc09aa4a3228738e21756d3c8aa9fe686863ced09da5bb30",
2
+ "sha256": "ba4938bd77943c4fdd078bda04c5f6421eeddf240ea6ccc23b6e4030e1a08339",
3
3
  "registrySha256": "890eec3dcf80e4388c396f43001a0bd3fabc80c88f79aa9525885d6402a6dfdf",
4
- "packageVersion": "1.3.1238"
4
+ "packageVersion": "1.3.1239"
5
5
  }
@@ -2,5 +2,5 @@
2
2
  "sha256": "890eec3dcf80e4388c396f43001a0bd3fabc80c88f79aa9525885d6402a6dfdf",
3
3
  "articleCount": 91,
4
4
  "generatedFrom": "docs/STANDARDS-REGISTRY.md",
5
- "packageVersion": "1.3.1238"
5
+ "packageVersion": "1.3.1239"
6
6
  }
@@ -0,0 +1,19 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ The Subscriptions dashboard now lets current account health outrank durable repair history. If a previously failed or suggested repair remains in the audit ledger after the account is already Active, the grid and account card no longer show that old episode as actionable or offer a retry the server must refuse.
9
+
10
+ The click path also self-heals if account health changes between rendering and tapping: the dashboard refreshes current state instead of exposing the internal revalidation error. Point-of-use revalidation refusals are returned as conflicts rather than server errors.
11
+
12
+ ## What to Tell Your User
13
+
14
+ If an account is already Active, an old failed repair will disappear automatically after the next dashboard refresh instead of asking for another retry.
15
+
16
+ ## Summary of New Capabilities
17
+
18
+ - Current Active subscription health supersedes stale suggested and failed repair actions.
19
+ - An already-active click race refreshes the dashboard without exposing internal error codes.
@@ -0,0 +1,100 @@
1
+ # Side-Effects Review — Subscription dashboard stale-retry correction
2
+
3
+ **Version / slug:** `subscription-relogin-stale-retry`
4
+ **Date:** `2026-09-14`
5
+ **Author:** `Echo`
6
+ **Second-pass reviewer:** `Archimedes`
7
+
8
+ ## Summary of the change
9
+
10
+ The Subscriptions dashboard now reconciles durable assisted-relogin history against the current subscription-pool truth before rendering an action. A suggested or failed repair remains actionable only while the exact account×machine cell is currently `needs-reauth`; an in-flight repair remains visible until the controller closes it. If health changes between render and click, the dashboard converts the typed server conflict into a plain-language refresh instead of exposing an internal error. The two approval routes also consistently classify revalidation refusal as HTTP 409. The implementation touches `dashboard/subscriptions.js`, the assisted-relogin routes in `src/server/routes.ts`, and focused unit, integration, and E2E tests.
11
+
12
+ ## Decision-point inventory
13
+
14
+ - `repairAppliesToCurrentState()` in `dashboard/subscriptions.js` — add — deterministically decides whether a durable repair episode still applies to current pool truth.
15
+ - Account-card and matrix action rendering — modify — suppresses stale suggested/failed actions for cells that no longer need authentication.
16
+ - Account-card and matrix click-race handling — modify — refreshes current truth after the server reports the account is already active.
17
+ - Assisted-relogin approval HTTP classification — modify — maps typed revalidation refusals to 409 conflicts rather than 500 errors.
18
+
19
+ ---
20
+
21
+ ## 1. Over-block
22
+
23
+ The main over-block risk is hiding a repair whose pool state is stale `active` even though authentication has actually failed. The existing candidate authority already requires the subscription-pool authority to say `needs-reauth`, and the server independently revalidates that fact at action time, so exposing a retry while current authority says Active would only offer an action guaranteed to be refused. In-flight states are deliberately retained even if the pool flips Active, preventing a legitimate running repair from disappearing before final verification.
24
+
25
+ Unknown or malformed peer repair states are hidden. This is intentional fail-closed behavior: an unknown state has no defined action contract and cannot safely authorize a repair.
26
+
27
+ ## 2. Under-block
28
+
29
+ The change does not erase stale terminal episodes from the durable audit ledger, so an API client that ignores current pool state could still display them incorrectly. The first-party dashboard is corrected and the server remains the final admission authority. A separate future repair state could also require explicit addition to the known-state allowlist before it appears; this is a conservative compatibility cost rather than unsafe action exposure.
30
+
31
+ ## 3. Level-of-abstraction fit
32
+
33
+ This is at the presentation/reconciliation layer that combined the two authoritative reads incorrectly. The repair ledger remains authoritative for repair lifecycle and audit history; the subscription pool remains authoritative for whether a new suggested/failed repair is presently applicable. The server-side orchestrator remains the action authority and revalidates at point of use. No parallel repair authority is introduced.
34
+
35
+ ## 4. Signal vs authority compliance
36
+
37
+ **Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
38
+
39
+ - [ ] No — this change produces a signal consumed by an existing smart gate.
40
+ - [ ] No — this change has no block/allow surface.
41
+ - [ ] Yes — but the logic is a smart gate with full conversational context (LLM-backed with recent history or equivalent).
42
+ - [x] This is a closed hard-invariant reconciliation, not a judgment heuristic.
43
+
44
+ The UI rule is enumerable: `suggested` and `failed` are actionable only when current pool truth is exactly `needs-reauth`; known in-flight states remain visible; unknown states fail closed. This does not infer user intent or interpret ambiguous prose. The actual repair action is still authorized and revalidated by the existing deterministic orchestrator. The change therefore does not give a brittle detector independent judgment authority.
45
+
46
+ ## 4b. Judgment-point check (Judgment Within Floors standard)
47
+
48
+ No new static heuristic is added at a competing-signals judgment point. The inputs are typed state-machine values owned by two existing authorities, and the precedence is a spec-defined invariant: current pool health governs new actionability while the repair ledger governs an already-running lifecycle.
49
+
50
+ ## 5. Interactions
51
+
52
+ - **Shadowing:** the dashboard reconciliation runs after both pool and repair reads. It hides only terminal/suggested actions that the point-of-use server revalidation would reject.
53
+ - **Double-fire:** no new actuator or request is added. A user click still sends one existing repair request.
54
+ - **Races:** if the cell changes from `needs-reauth` to Active after render, the existing server revalidation wins. The client consumes the typed 409, refreshes both authorities, and removes the invalid action.
55
+ - **Feedback loops:** terminal repair rows remain durable and continue to appear in the repair API. Rendering no longer feeds them back into another invalid retry when the pool is Active.
56
+
57
+ ## 6. External surfaces
58
+
59
+ The visible dashboard changes from a raw `retry-revalidation-refused:account-not-needs-reauth` failure and retry invitation to the current Active state. API callers now receive 409 consistently for both direct and mandate-scoped approval revalidation conflicts. No persistent schema, credentials, provider data, or external service contract changes. The existing dashboard/PIN and phone-complete action surface is retained.
60
+
61
+ ## 6b. Operator-surface quality (Operator-Surface Quality standard)
62
+
63
+ 1. **Leads with the primary action:** yes. A legitimately eligible `needs-reauth` cell still presents its repair control directly; a healthy Active cell leads with its health and no invalid action.
64
+ 2. **Zero raw internals as primary content:** yes. The already-active race is translated to “This account is already active. Refreshing its status…” and then replaced by refreshed state; the internal refusal slug is not shown.
65
+ 3. **Destructive actions de-emphasized:** yes. This change adds no destructive control and does not promote cancel/delete behavior.
66
+ 4. **Plain language + phone width:** yes. Existing touch targets/layout are unchanged, and the new status copy is short, plain language that fits the existing responsive cell/card surfaces without adding horizontal content.
67
+
68
+ ## 7. Multi-machine posture (Cross-Machine Coherence)
69
+
70
+ **Proxied-on-read.** Subscription cells come from `GET /subscription-pool?scope=pool`, and repair episodes come from `GET /subscription-relogin?scope=pool`; the dashboard joins the exact account and machine identifiers from those merged reads. Point-of-use actions continue through the existing machine-targeted mandate route and are revalidated on the target machine. Peer read failure remains explicit and does not cause local data to authorize a remote repair.
71
+
72
+ The change emits no user-facing notices, adds no durable state, and generates no URLs. Existing machine-local repair ledgers remain visible pool-wide through the proxied read and therefore do not strand the dashboard view when the topic is handled on another machine.
73
+
74
+ ## 8. Rollback cost
75
+
76
+ Pure code rollback: revert the dashboard reconciliation and HTTP status mapping and ship a patch. No data migration or agent-state repair is required because durable repair episodes are neither mutated nor deleted. During rollback propagation, users could temporarily see the stale retry/raw conflict again, but no invalid server-side repair would be admitted because point-of-use revalidation remains intact.
77
+
78
+ ## Conclusion
79
+
80
+ The review preserves the split between current-health authority and durable lifecycle history, keeps in-flight work visible, fails closed on unknown states, and makes the click race self-healing. The main compatibility tradeoff—new unknown repair states remain hidden until explicitly supported—is conservative and covered by boundary tests. The change is clear to ship through the normal release and live-browser verification gates.
81
+
82
+ ## Second-pass review (if required)
83
+
84
+ **Reviewer:** Archimedes
85
+ **Independent read of the artifact: concur**
86
+
87
+ The reviewer found no remaining blocker after both account-card and matrix paths shared typed already-active handling, both approval routes returned 409 consistently, unknown states failed closed, and the focused race tests plus `git diff --check` passed.
88
+
89
+ ## Evidence pointers
90
+
91
+ - `tests/unit/subscriptions-render.test.ts`
92
+ - `tests/integration/subscriptions-tab.test.ts`
93
+ - `tests/integration/subscription-relogin-routes.test.ts`
94
+ - `tests/e2e/subscriptions-tab-lifecycle.test.ts`
95
+ - Focused result: 127 tests passed across the four files.
96
+ - Independent reviewer: concurred with no remaining blockers.
97
+
98
+ ## Class-Closure Declaration (display-only mirror)
99
+
100
+ No agent-authored-artifact defect and no self-triggered controller change — not applicable.