@grifhinz/logics-manager 2.3.3 → 2.5.0

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.
@@ -16,6 +16,27 @@
16
16
  line-height: 1.25;
17
17
  }
18
18
 
19
+ .viewer-topbar__identity {
20
+ display: flex;
21
+ align-items: center;
22
+ gap: 8px;
23
+ min-width: 0;
24
+ }
25
+
26
+ .viewer-topbar__repo {
27
+ max-width: 220px;
28
+ overflow: hidden;
29
+ text-overflow: ellipsis;
30
+ white-space: nowrap;
31
+ border: 1px solid var(--vscode-panel-border, #333333);
32
+ border-radius: 999px;
33
+ padding: 2px 8px;
34
+ background: var(--vscode-badge-background, #4d4d4d);
35
+ color: var(--vscode-badge-foreground, #ffffff);
36
+ font-size: 11px;
37
+ line-height: 1.3;
38
+ }
39
+
19
40
  .viewer-topbar__meta {
20
41
  margin-top: 2px;
21
42
  font-size: 12px;
@@ -30,6 +51,108 @@
30
51
  flex: 0 0 auto;
31
52
  }
32
53
 
54
+ .viewer-topbar__actions button {
55
+ display: inline-flex;
56
+ align-items: center;
57
+ gap: 6px;
58
+ }
59
+
60
+ .viewer-git-badges {
61
+ display: inline-flex;
62
+ align-items: center;
63
+ gap: 3px;
64
+ flex: 0 0 auto;
65
+ }
66
+
67
+ .viewer-git-badge {
68
+ display: inline-grid;
69
+ min-width: 16px;
70
+ height: 16px;
71
+ place-items: center;
72
+ border: 1px solid color-mix(in srgb, currentColor 22%, transparent);
73
+ border-radius: 999px;
74
+ padding: 0 4px;
75
+ font-size: 10px;
76
+ font-weight: 700;
77
+ line-height: 1;
78
+ }
79
+
80
+ .viewer-git-badge--commits {
81
+ background: color-mix(in srgb, var(--vscode-textLink-foreground, #4ea1ff) 24%, transparent);
82
+ color: var(--vscode-textLink-foreground, #4ea1ff);
83
+ }
84
+
85
+ .viewer-git-badge--files {
86
+ background: rgba(245, 158, 11, 0.18);
87
+ color: #f59e0b;
88
+ }
89
+
90
+ .viewer-refresh-menu {
91
+ position: relative;
92
+ display: inline-flex;
93
+ align-items: center;
94
+ }
95
+
96
+ .viewer-refresh-menu__panel {
97
+ position: absolute;
98
+ top: calc(100% + 6px);
99
+ right: 0;
100
+ z-index: 60;
101
+ display: grid;
102
+ gap: 10px;
103
+ min-width: 180px;
104
+ padding: 10px;
105
+ border: 1px solid var(--vscode-panel-border, #333333);
106
+ border-radius: 6px;
107
+ background: var(--vscode-editorWidget-background, #202020);
108
+ color: var(--vscode-foreground, #d4d4d4);
109
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.35);
110
+ }
111
+
112
+ .viewer-refresh-menu__panel[hidden] {
113
+ display: none !important;
114
+ }
115
+
116
+ .viewer-auto-refresh {
117
+ display: inline-flex;
118
+ align-items: center;
119
+ gap: 6px;
120
+ min-height: 28px;
121
+ border: 1px solid var(--vscode-button-border, var(--vscode-panel-border, #333333));
122
+ border-radius: 4px;
123
+ padding: 0 8px;
124
+ background: var(--vscode-button-secondaryBackground, transparent);
125
+ color: var(--vscode-button-secondaryForeground, var(--vscode-foreground, #d4d4d4));
126
+ font-size: 12px;
127
+ user-select: none;
128
+ }
129
+
130
+ .viewer-auto-refresh input {
131
+ margin: 0;
132
+ }
133
+
134
+ .viewer-refresh-menu__interval {
135
+ display: grid;
136
+ gap: 5px;
137
+ color: var(--vscode-descriptionForeground, #9da5b4);
138
+ font-size: 11px;
139
+ font-weight: 700;
140
+ text-transform: uppercase;
141
+ }
142
+
143
+ .viewer-refresh-menu__interval select {
144
+ width: 100%;
145
+ height: 30px;
146
+ border: 1px solid var(--vscode-panel-border, #333333);
147
+ border-radius: 4px;
148
+ background: var(--vscode-dropdown-background, var(--vscode-input-background, #1f1f1f));
149
+ color: var(--vscode-dropdown-foreground, var(--vscode-input-foreground, #e5e5e5));
150
+ padding: 0 8px;
151
+ font-size: 12px;
152
+ font-weight: 400;
153
+ text-transform: none;
154
+ }
155
+
33
156
  .viewer-update {
34
157
  flex: 0 0 auto;
35
158
  display: flex;
@@ -220,6 +343,559 @@
220
343
  background: var(--vscode-textCodeBlock-background, #111111);
221
344
  }
222
345
 
346
+ .viewer-insights__rows,
347
+ .viewer-git__files {
348
+ display: grid;
349
+ gap: 6px;
350
+ margin: 10px 0 0;
351
+ padding: 0;
352
+ list-style: none;
353
+ }
354
+
355
+ .viewer-insights__row {
356
+ display: flex;
357
+ align-items: center;
358
+ justify-content: space-between;
359
+ gap: 10px;
360
+ min-width: 0;
361
+ padding: 7px 9px;
362
+ border: 1px solid var(--vscode-panel-border, #333333);
363
+ border-radius: 6px;
364
+ background: color-mix(in srgb, var(--vscode-editorWidget-background, #202020) 84%, transparent);
365
+ font-size: 12px;
366
+ }
367
+
368
+ .viewer-insights__row[hidden] {
369
+ display: none !important;
370
+ }
371
+
372
+ .viewer-insights__doc,
373
+ .viewer-insights__action,
374
+ .viewer-insights__reveal,
375
+ .viewer-health__path {
376
+ min-width: 0;
377
+ border: 0;
378
+ padding: 0;
379
+ background: transparent;
380
+ color: var(--vscode-textLink-foreground, #4ea1ff);
381
+ font: inherit;
382
+ text-align: left;
383
+ overflow-wrap: anywhere;
384
+ cursor: pointer;
385
+ }
386
+
387
+ .viewer-insights__doc:hover,
388
+ .viewer-insights__action:hover,
389
+ .viewer-insights__reveal:hover,
390
+ .viewer-health__path:hover {
391
+ text-decoration: underline;
392
+ }
393
+
394
+ .viewer-git,
395
+ .viewer-cdx,
396
+ .viewer-insights,
397
+ .viewer-health {
398
+ display: grid;
399
+ gap: 14px;
400
+ }
401
+
402
+ .viewer-git__summary,
403
+ .viewer-cdx__summary,
404
+ .viewer-insights__summary,
405
+ .viewer-health__summary {
406
+ display: grid;
407
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
408
+ gap: 8px;
409
+ }
410
+
411
+ .viewer-cdx__workspace {
412
+ display: grid;
413
+ grid-template-columns: minmax(280px, 1.35fr) minmax(240px, 0.85fr);
414
+ gap: 12px;
415
+ align-items: start;
416
+ }
417
+
418
+ .viewer-cdx__stack {
419
+ display: grid;
420
+ gap: 12px;
421
+ min-width: 0;
422
+ }
423
+
424
+ .viewer-cdx__card,
425
+ .viewer-cdx__section {
426
+ min-width: 0;
427
+ border: 1px solid var(--vscode-panel-border, #333333);
428
+ border-radius: 6px;
429
+ background: var(--vscode-editorWidget-background, #202020);
430
+ }
431
+
432
+ .viewer-cdx__card {
433
+ padding: 10px;
434
+ }
435
+
436
+ .viewer-cdx__label,
437
+ .viewer-cdx__meta {
438
+ color: var(--vscode-descriptionForeground, #aaaaaa);
439
+ font-size: 12px;
440
+ }
441
+
442
+ .viewer-cdx__value {
443
+ margin-top: 4px;
444
+ font-size: 16px;
445
+ font-weight: 700;
446
+ overflow-wrap: anywhere;
447
+ }
448
+
449
+ .viewer-cdx__section {
450
+ padding: 12px;
451
+ }
452
+
453
+ .viewer-cdx__heading {
454
+ margin: 0 0 10px;
455
+ font-size: 13px;
456
+ }
457
+
458
+ .viewer-cdx__list,
459
+ .viewer-cdx__commands {
460
+ display: grid;
461
+ gap: 6px;
462
+ margin: 0;
463
+ padding: 0;
464
+ list-style: none;
465
+ }
466
+
467
+ .viewer-cdx__row,
468
+ .viewer-cdx__entity {
469
+ min-width: 0;
470
+ padding: 9px;
471
+ border: 1px solid color-mix(in srgb, var(--vscode-panel-border, #333333) 72%, transparent);
472
+ border-radius: 6px;
473
+ background: color-mix(in srgb, var(--vscode-editorWidget-background, #202020) 76%, transparent);
474
+ overflow-wrap: anywhere;
475
+ }
476
+
477
+ .viewer-cdx__row,
478
+ .viewer-cdx__entity-main {
479
+ display: flex;
480
+ align-items: flex-start;
481
+ justify-content: space-between;
482
+ gap: 8px;
483
+ }
484
+
485
+ .viewer-cdx__row strong,
486
+ .viewer-cdx__entity-main > span {
487
+ min-width: 0;
488
+ text-align: right;
489
+ }
490
+
491
+ .viewer-cdx__entity-status {
492
+ display: flex;
493
+ flex-wrap: wrap;
494
+ justify-content: flex-end;
495
+ gap: 6px;
496
+ min-width: 110px;
497
+ }
498
+
499
+ .viewer-cdx__badge {
500
+ display: inline-flex;
501
+ align-items: center;
502
+ justify-content: center;
503
+ min-height: 20px;
504
+ max-width: 100%;
505
+ border: 1px solid color-mix(in srgb, currentColor 28%, transparent);
506
+ border-radius: 999px;
507
+ padding: 2px 8px;
508
+ font-size: 11px;
509
+ font-weight: 700;
510
+ line-height: 1.2;
511
+ }
512
+
513
+ .viewer-cdx__remaining {
514
+ display: inline-flex;
515
+ align-items: baseline;
516
+ gap: 5px;
517
+ min-height: 24px;
518
+ border: 1px solid color-mix(in srgb, currentColor 32%, transparent);
519
+ border-radius: 999px;
520
+ padding: 3px 9px;
521
+ font-size: 11px;
522
+ font-weight: 700;
523
+ line-height: 1.2;
524
+ }
525
+
526
+ .viewer-cdx__remaining span {
527
+ color: currentColor;
528
+ opacity: 0.8;
529
+ }
530
+
531
+ .viewer-cdx__remaining strong {
532
+ font-size: 13px;
533
+ }
534
+
535
+ .viewer-cdx__remaining--ok {
536
+ background: rgba(34, 197, 94, 0.14);
537
+ color: #22c55e;
538
+ }
539
+
540
+ .viewer-cdx__remaining--warn {
541
+ background: rgba(245, 158, 11, 0.16);
542
+ color: #f59e0b;
543
+ }
544
+
545
+ .viewer-cdx__remaining--bad {
546
+ background: rgba(239, 68, 68, 0.16);
547
+ color: #ef4444;
548
+ }
549
+
550
+ .viewer-cdx__remaining--neutral {
551
+ background: color-mix(in srgb, var(--vscode-descriptionForeground, #aaaaaa) 14%, transparent);
552
+ color: var(--vscode-descriptionForeground, #aaaaaa);
553
+ }
554
+
555
+ .viewer-cdx__badge--ok {
556
+ background: rgba(34, 197, 94, 0.14);
557
+ color: #22c55e;
558
+ }
559
+
560
+ .viewer-cdx__badge--warn {
561
+ background: rgba(245, 158, 11, 0.16);
562
+ color: #f59e0b;
563
+ }
564
+
565
+ .viewer-cdx__badge--bad {
566
+ background: rgba(239, 68, 68, 0.16);
567
+ color: #ef4444;
568
+ }
569
+
570
+ .viewer-cdx__badge--neutral {
571
+ background: color-mix(in srgb, var(--vscode-descriptionForeground, #aaaaaa) 14%, transparent);
572
+ color: var(--vscode-descriptionForeground, #aaaaaa);
573
+ }
574
+
575
+ .viewer-cdx__pills {
576
+ display: flex;
577
+ flex-wrap: wrap;
578
+ gap: 6px;
579
+ margin-top: 8px;
580
+ }
581
+
582
+ .viewer-cdx__table-wrap {
583
+ min-width: 0;
584
+ overflow-x: auto;
585
+ }
586
+
587
+ .viewer-cdx__table {
588
+ width: 100%;
589
+ min-width: 920px;
590
+ border-collapse: collapse;
591
+ font-size: 12px;
592
+ }
593
+
594
+ .viewer-cdx__table th,
595
+ .viewer-cdx__table td {
596
+ padding: 7px 8px;
597
+ border-bottom: 1px solid color-mix(in srgb, var(--vscode-panel-border, #333333) 72%, transparent);
598
+ text-align: left;
599
+ vertical-align: middle;
600
+ white-space: nowrap;
601
+ }
602
+
603
+ .viewer-cdx__table th {
604
+ color: var(--vscode-descriptionForeground, #aaaaaa);
605
+ font-size: 10px;
606
+ font-weight: 700;
607
+ }
608
+
609
+ .viewer-cdx__table td {
610
+ color: var(--vscode-foreground, #d4d4d4);
611
+ }
612
+
613
+ .viewer-cdx__table tbody tr:last-child td {
614
+ border-bottom: 0;
615
+ }
616
+
617
+ .viewer-cdx__session-name {
618
+ font-weight: 700;
619
+ }
620
+
621
+ .viewer-cdx__pill {
622
+ display: inline-flex;
623
+ align-items: baseline;
624
+ gap: 5px;
625
+ min-width: 0;
626
+ max-width: 100%;
627
+ border-radius: 4px;
628
+ padding: 3px 6px;
629
+ background: var(--vscode-input-background, #1f1f1f);
630
+ color: var(--vscode-descriptionForeground, #aaaaaa);
631
+ font-size: 11px;
632
+ }
633
+
634
+ .viewer-cdx__pill strong {
635
+ min-width: 0;
636
+ color: var(--vscode-foreground, #d4d4d4);
637
+ overflow-wrap: anywhere;
638
+ }
639
+
640
+ .viewer-cdx__commands li {
641
+ display: grid;
642
+ grid-template-columns: 22px minmax(0, 1fr);
643
+ align-items: start;
644
+ gap: 7px;
645
+ }
646
+
647
+ .viewer-cdx__commands li > span {
648
+ display: grid;
649
+ width: 22px;
650
+ height: 22px;
651
+ place-items: center;
652
+ border-radius: 999px;
653
+ background: var(--vscode-input-background, #1f1f1f);
654
+ color: var(--vscode-descriptionForeground, #aaaaaa);
655
+ font-size: 11px;
656
+ font-weight: 700;
657
+ }
658
+
659
+ .viewer-cdx__commands code {
660
+ display: block;
661
+ min-width: 0;
662
+ padding: 7px 9px;
663
+ border-radius: 6px;
664
+ background: var(--vscode-textCodeBlock-background, #111111);
665
+ color: var(--vscode-textPreformat-foreground, #d7ba7d);
666
+ overflow-wrap: anywhere;
667
+ }
668
+
669
+ .viewer-cdx__state,
670
+ .viewer-cdx__empty {
671
+ margin: 0;
672
+ color: var(--vscode-descriptionForeground, #aaaaaa);
673
+ overflow-wrap: anywhere;
674
+ }
675
+
676
+ @media (max-width: 860px) {
677
+ .viewer-cdx__workspace {
678
+ grid-template-columns: 1fr;
679
+ }
680
+ }
681
+
682
+ .viewer-git__section h2 {
683
+ margin-bottom: 8px;
684
+ }
685
+
686
+ .viewer-git__workspace {
687
+ display: grid;
688
+ grid-template-columns: minmax(120px, 0.45fr) minmax(220px, 0.9fr) minmax(280px, 1.3fr);
689
+ gap: 12px;
690
+ align-items: start;
691
+ }
692
+
693
+ .viewer-git__domains {
694
+ display: grid;
695
+ gap: 6px;
696
+ }
697
+
698
+ .viewer-git__domain,
699
+ .viewer-git__file {
700
+ width: 100%;
701
+ min-width: 0;
702
+ border: 1px solid var(--vscode-panel-border, #333333);
703
+ border-radius: 6px;
704
+ background: var(--vscode-editorWidget-background, #202020);
705
+ color: var(--vscode-foreground, #dddddd);
706
+ font: inherit;
707
+ text-align: left;
708
+ cursor: pointer;
709
+ }
710
+
711
+ .viewer-git__domain {
712
+ display: flex;
713
+ align-items: center;
714
+ justify-content: space-between;
715
+ gap: 8px;
716
+ padding: 8px 9px;
717
+ }
718
+
719
+ .viewer-git__domain-label {
720
+ display: inline-flex;
721
+ align-items: center;
722
+ gap: 5px;
723
+ min-width: 0;
724
+ }
725
+
726
+ .viewer-git__domain.is-active,
727
+ .viewer-git__file.is-active {
728
+ border-color: var(--vscode-focusBorder, #4ea1ff);
729
+ background: color-mix(in srgb, var(--vscode-editorWidget-background, #202020) 72%, var(--vscode-textLink-foreground, #4ea1ff));
730
+ }
731
+
732
+ .viewer-git__content,
733
+ .viewer-git__detail {
734
+ min-width: 0;
735
+ }
736
+
737
+ .viewer-git__panel {
738
+ min-width: 0;
739
+ padding: 10px;
740
+ border: 1px solid var(--vscode-panel-border, #333333);
741
+ border-radius: 6px;
742
+ background: color-mix(in srgb, var(--vscode-editorWidget-background, #202020) 72%, transparent);
743
+ }
744
+
745
+ .viewer-git__panel[hidden] {
746
+ display: none !important;
747
+ }
748
+
749
+ .viewer-git__panel-header {
750
+ display: flex;
751
+ align-items: center;
752
+ justify-content: space-between;
753
+ gap: 10px;
754
+ margin-bottom: 10px;
755
+ color: var(--vscode-descriptionForeground, #aaaaaa);
756
+ font-size: 12px;
757
+ font-weight: 700;
758
+ text-transform: uppercase;
759
+ }
760
+
761
+ .viewer-git__panel-header strong {
762
+ min-width: 0;
763
+ overflow-wrap: anywhere;
764
+ text-align: right;
765
+ }
766
+
767
+ .viewer-git__files li {
768
+ min-width: 0;
769
+ overflow-wrap: anywhere;
770
+ }
771
+
772
+ .viewer-git__commits {
773
+ display: grid;
774
+ gap: 6px;
775
+ margin: 10px 0 0;
776
+ padding: 0;
777
+ list-style: none;
778
+ }
779
+
780
+ .viewer-git__commit-row {
781
+ min-width: 0;
782
+ padding: 8px 9px;
783
+ border: 1px solid var(--vscode-panel-border, #333333);
784
+ border-radius: 6px;
785
+ background: var(--vscode-editorWidget-background, #202020);
786
+ }
787
+
788
+ .viewer-git__commit-main,
789
+ .viewer-git__commit-meta {
790
+ display: flex;
791
+ gap: 8px;
792
+ min-width: 0;
793
+ }
794
+
795
+ .viewer-git__commit-main {
796
+ align-items: baseline;
797
+ }
798
+
799
+ .viewer-git__commit-main strong {
800
+ min-width: 0;
801
+ overflow-wrap: anywhere;
802
+ }
803
+
804
+ .viewer-git__commit-meta {
805
+ align-items: center;
806
+ flex-wrap: wrap;
807
+ margin-top: 4px;
808
+ color: var(--vscode-descriptionForeground, #aaaaaa);
809
+ font-size: 12px;
810
+ }
811
+
812
+ .viewer-git__commit-refs {
813
+ padding: 2px 6px;
814
+ border-radius: 999px;
815
+ background: color-mix(in srgb, var(--vscode-editorWidget-background, #202020) 70%, var(--vscode-textLink-foreground, #4ea1ff));
816
+ color: var(--vscode-textLink-foreground, #4ea1ff);
817
+ }
818
+
819
+ .viewer-git__file {
820
+ display: flex;
821
+ align-items: center;
822
+ justify-content: space-between;
823
+ gap: 8px;
824
+ padding: 7px 9px;
825
+ }
826
+
827
+ .viewer-git__file-path {
828
+ min-width: 0;
829
+ overflow-wrap: anywhere;
830
+ }
831
+
832
+ .viewer-git__file-kind {
833
+ flex: 0 0 auto;
834
+ padding: 2px 6px;
835
+ border-radius: 999px;
836
+ background: color-mix(in srgb, var(--vscode-textLink-foreground, #4ea1ff) 18%, transparent);
837
+ color: var(--vscode-textLink-foreground, #4ea1ff);
838
+ font-size: 11px;
839
+ }
840
+
841
+ .viewer-git__detail {
842
+ padding: 10px;
843
+ border: 1px solid var(--vscode-panel-border, #333333);
844
+ border-radius: 6px;
845
+ background: var(--vscode-editorWidget-background, #202020);
846
+ }
847
+
848
+ .viewer-git__detail-title {
849
+ margin-bottom: 8px;
850
+ color: var(--vscode-descriptionForeground, #aaaaaa);
851
+ font-size: 12px;
852
+ font-weight: 700;
853
+ text-transform: uppercase;
854
+ }
855
+
856
+ .viewer-git__diff {
857
+ min-height: 160px;
858
+ overflow-wrap: anywhere;
859
+ }
860
+
861
+ .viewer-git__diff-meta {
862
+ margin-bottom: 8px;
863
+ color: var(--vscode-descriptionForeground, #aaaaaa);
864
+ font-size: 12px;
865
+ }
866
+
867
+ .viewer-git__diff pre {
868
+ max-height: 58vh;
869
+ overflow: auto;
870
+ margin: 0;
871
+ white-space: pre;
872
+ }
873
+
874
+ .viewer-git__commit,
875
+ .viewer-git__state {
876
+ margin: 0;
877
+ overflow-wrap: anywhere;
878
+ }
879
+
880
+ @media (max-width: 700px) {
881
+ .viewer-topbar {
882
+ align-items: stretch;
883
+ flex-direction: column;
884
+ }
885
+
886
+ .viewer-topbar__actions {
887
+ flex-wrap: wrap;
888
+ }
889
+
890
+ .viewer-document {
891
+ inset: 8px;
892
+ }
893
+
894
+ .viewer-git__workspace {
895
+ grid-template-columns: 1fr;
896
+ }
897
+ }
898
+
223
899
  .viewer-document__content a {
224
900
  color: var(--vscode-textLink-foreground, #4ea1ff);
225
901
  }
@@ -412,12 +1088,22 @@
412
1088
 
413
1089
  .viewer-topbar__actions {
414
1090
  width: 100%;
1091
+ flex-wrap: wrap;
415
1092
  }
416
1093
 
417
1094
  .viewer-topbar__actions .btn {
418
1095
  flex: 1 1 0;
419
1096
  }
420
1097
 
1098
+ .viewer-refresh-menu {
1099
+ flex: 1 1 0;
1100
+ }
1101
+
1102
+ .viewer-refresh-menu > .btn {
1103
+ width: 100%;
1104
+ justify-content: center;
1105
+ }
1106
+
421
1107
  .viewer-document {
422
1108
  inset: 10px;
423
1109
  }
@@ -172,9 +172,9 @@ def _has_mermaid_block(text: str) -> bool:
172
172
  def _companion_doc_is_mature(doc: "DocMeta") -> bool:
173
173
  status = _status_normalized(doc.status)
174
174
  if doc.kind.kind == "product":
175
- return status in {"active", "validated", "archived"}
175
+ return status in {"active", "accepted", "validated", "settled", "archived"}
176
176
  if doc.kind.kind == "architecture":
177
- return status in {"accepted", "superseded", "archived"}
177
+ return status in {"accepted", "validated", "superseded", "settled", "archived"}
178
178
  return False
179
179
 
180
180
 
@@ -10,7 +10,7 @@ from pathlib import Path
10
10
  WORKFLOW_KINDS = ("request", "backlog", "task")
11
11
  COMPANION_KINDS = ("product", "architecture")
12
12
  OPEN_STATUSES = {"Draft", "Ready", "In progress", "Blocked"}
13
- CLOSED_STATUSES = {"Done", "Archived"}
13
+ CLOSED_STATUSES = {"Done", "Settled", "Archived"}
14
14
 
15
15
 
16
16
  @dataclass(frozen=True)