@taskless-app/shared 0.1.28 → 0.1.30

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.
@@ -33,4 +33,10 @@ export interface UserNotification {
33
33
  * end-to-end OS path without alt-tabbing first. Don't set this on
34
34
  * real notifications — it produces duplicate OS+toast pings. */
35
35
  forceShow?: boolean;
36
+ /** TAS-528: «человек говорит с ДРУГОГО устройства — здесь не звени».
37
+ * Ставит сервер, персонально каждому SSE-стриму (см. publishToUsers), и
38
+ * только разговорным видам. Строка в шторке и бейдж приходят как обычно —
39
+ * тихим становится сам сигнал: ни ринг-модалки, ни звука, ни OS-плашки.
40
+ * В persisted-строку не попадает: история одна на все устройства. */
41
+ quiet?: boolean;
36
42
  }
@@ -5,11 +5,15 @@ import { z } from "zod";
5
5
  * другого можно ТОЛЬКО по источнику — по самому значению не отличишь никак.
6
6
  *
7
7
  * "scout" — предложил разведчик (агент, просканировавший репозиторий);
8
- * "human" — вписал человек.
8
+ * "human" — вписал человек;
9
+ * "drone" — принёс дрон с прогона, применил ревьюер (TASWM-431). Отдельно от
10
+ * "scout" не для красоты: разведчик читает код, а дрон приносит то, что в коде
11
+ * не написано и выясняется, только когда споткнёшься, — и цена ошибки у них
12
+ * разная. Защита ручных правок по-прежнему стоит ТОЛЬКО на "human".
9
13
  */
10
- export declare const REPO_PROFILE_SOURCES: readonly ["scout", "human"];
14
+ export declare const REPO_PROFILE_SOURCES: readonly ["scout", "human", "drone"];
11
15
  export type RepoProfileSource = (typeof REPO_PROFILE_SOURCES)[number];
12
- export declare const RepoProfileSource: z.ZodEnum<["scout", "human"]>;
16
+ export declare const RepoProfileSource: z.ZodEnum<["scout", "human", "drone"]>;
13
17
  /**
14
18
  * Поля разметки, у которых есть источник. Источник — ПОФАЙЛОВЫЙ по полю верхнего
15
19
  * уровня, а не по каждому листу: правка человеком любого куска зон означает
@@ -31,6 +35,8 @@ export declare const REPO_ENV_VARS_MAX = 40;
31
35
  export declare const REPO_ENV_VAR_MAX = 100;
32
36
  export declare const REPO_BASE_BRANCH_MAX = 200;
33
37
  export declare const REPO_COMMIT_LANGUAGE_MAX = 40;
38
+ /** Причина правила, принесённого дроном (TASWM-431): обо что споткнулся и чего это стоило. */
39
+ export declare const REPO_RULE_WHY_MAX = 600;
34
40
  /**
35
41
  * Зона кода: лейбл `area:*`, которым размечают задачи, плюс человеческое
36
42
  * описание и пути, которые к зоне относятся. Пути нужны, чтобы связать зону с
@@ -126,26 +132,26 @@ export type RepoConventions = z.infer<typeof RepoConventions>;
126
132
  * того, как источники начали писать); поле есть — видно, кто его вписал.
127
133
  */
128
134
  export declare const RepoProfileSources: z.ZodObject<{
129
- brief: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
130
- zones: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
131
- env: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
132
- verify: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
133
- conventions: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
134
- spine: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
135
+ brief: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
136
+ zones: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
137
+ env: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
138
+ verify: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
139
+ conventions: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
140
+ spine: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
135
141
  }, "strip", z.ZodTypeAny, {
136
- brief?: "human" | "scout" | undefined;
137
- zones?: "human" | "scout" | undefined;
138
- env?: "human" | "scout" | undefined;
139
- verify?: "human" | "scout" | undefined;
140
- conventions?: "human" | "scout" | undefined;
141
- spine?: "human" | "scout" | undefined;
142
+ brief?: "drone" | "human" | "scout" | undefined;
143
+ zones?: "drone" | "human" | "scout" | undefined;
144
+ env?: "drone" | "human" | "scout" | undefined;
145
+ verify?: "drone" | "human" | "scout" | undefined;
146
+ conventions?: "drone" | "human" | "scout" | undefined;
147
+ spine?: "drone" | "human" | "scout" | undefined;
142
148
  }, {
143
- brief?: "human" | "scout" | undefined;
144
- zones?: "human" | "scout" | undefined;
145
- env?: "human" | "scout" | undefined;
146
- verify?: "human" | "scout" | undefined;
147
- conventions?: "human" | "scout" | undefined;
148
- spine?: "human" | "scout" | undefined;
149
+ brief?: "drone" | "human" | "scout" | undefined;
150
+ zones?: "drone" | "human" | "scout" | undefined;
151
+ env?: "drone" | "human" | "scout" | undefined;
152
+ verify?: "drone" | "human" | "scout" | undefined;
153
+ conventions?: "drone" | "human" | "scout" | undefined;
154
+ spine?: "drone" | "human" | "scout" | undefined;
149
155
  }>;
150
156
  export type RepoProfileSources = z.infer<typeof RepoProfileSources>;
151
157
  /**
@@ -238,26 +244,26 @@ export declare const RepoProfile: z.ZodObject<{
238
244
  */
239
245
  spine: z.ZodCatch<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
240
246
  sources: z.ZodCatch<z.ZodDefault<z.ZodObject<{
241
- brief: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
242
- zones: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
243
- env: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
244
- verify: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
245
- conventions: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
246
- spine: z.ZodOptional<z.ZodEnum<["scout", "human"]>>;
247
+ brief: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
248
+ zones: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
249
+ env: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
250
+ verify: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
251
+ conventions: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
252
+ spine: z.ZodOptional<z.ZodEnum<["scout", "human", "drone"]>>;
247
253
  }, "strip", z.ZodTypeAny, {
248
- brief?: "human" | "scout" | undefined;
249
- zones?: "human" | "scout" | undefined;
250
- env?: "human" | "scout" | undefined;
251
- verify?: "human" | "scout" | undefined;
252
- conventions?: "human" | "scout" | undefined;
253
- spine?: "human" | "scout" | undefined;
254
+ brief?: "drone" | "human" | "scout" | undefined;
255
+ zones?: "drone" | "human" | "scout" | undefined;
256
+ env?: "drone" | "human" | "scout" | undefined;
257
+ verify?: "drone" | "human" | "scout" | undefined;
258
+ conventions?: "drone" | "human" | "scout" | undefined;
259
+ spine?: "drone" | "human" | "scout" | undefined;
254
260
  }, {
255
- brief?: "human" | "scout" | undefined;
256
- zones?: "human" | "scout" | undefined;
257
- env?: "human" | "scout" | undefined;
258
- verify?: "human" | "scout" | undefined;
259
- conventions?: "human" | "scout" | undefined;
260
- spine?: "human" | "scout" | undefined;
261
+ brief?: "drone" | "human" | "scout" | undefined;
262
+ zones?: "drone" | "human" | "scout" | undefined;
263
+ env?: "drone" | "human" | "scout" | undefined;
264
+ verify?: "drone" | "human" | "scout" | undefined;
265
+ conventions?: "drone" | "human" | "scout" | undefined;
266
+ spine?: "drone" | "human" | "scout" | undefined;
261
267
  }>>>;
262
268
  }, "strip", z.ZodTypeAny, {
263
269
  brief?: string | undefined;
@@ -282,12 +288,12 @@ export declare const RepoProfile: z.ZodObject<{
282
288
  } | undefined;
283
289
  spine?: string[] | undefined;
284
290
  sources: {
285
- brief?: "human" | "scout" | undefined;
286
- zones?: "human" | "scout" | undefined;
287
- env?: "human" | "scout" | undefined;
288
- verify?: "human" | "scout" | undefined;
289
- conventions?: "human" | "scout" | undefined;
290
- spine?: "human" | "scout" | undefined;
291
+ brief?: "drone" | "human" | "scout" | undefined;
292
+ zones?: "drone" | "human" | "scout" | undefined;
293
+ env?: "drone" | "human" | "scout" | undefined;
294
+ verify?: "drone" | "human" | "scout" | undefined;
295
+ conventions?: "drone" | "human" | "scout" | undefined;
296
+ spine?: "drone" | "human" | "scout" | undefined;
291
297
  };
292
298
  }, {
293
299
  brief?: unknown;
@@ -431,6 +437,202 @@ export declare const RepoProfilePatch: z.ZodObject<{
431
437
  spine?: string[] | null | undefined;
432
438
  }>;
433
439
  export type RepoProfilePatch = z.infer<typeof RepoProfilePatch>;
440
+ /**
441
+ * Пометка на ОДНОМ поле предложения: кто его предложил, на какой задаче и обо
442
+ * что споткнулся (TASWM-431). Общей пометки предложения (`by`/`at` ниже) для
443
+ * этого мало: в одной колонке лежат и отчёт разведчика (целиком его), и правила
444
+ * разных дронов с разных прогонов — «предложил NN» на всём предложении не
445
+ * сказало бы, чьё какое поле.
446
+ */
447
+ export declare const RepoProfileFieldNote: z.ZodObject<{
448
+ /** Имя дрона, принёсшего правило. */
449
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
450
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
451
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
452
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
453
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
454
+ /** ISO-время предложения (серверное). */
455
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
456
+ }, "strip", z.ZodTypeAny, {
457
+ by?: string | undefined;
458
+ task?: string | undefined;
459
+ why?: string | undefined;
460
+ at?: string | undefined;
461
+ }, {
462
+ by?: unknown;
463
+ task?: unknown;
464
+ why?: unknown;
465
+ at?: unknown;
466
+ }>;
467
+ export type RepoProfileFieldNote = z.infer<typeof RepoProfileFieldNote>;
468
+ /** Пометки по полям — той же формой, что `sources`: карта из шести значений. */
469
+ export declare const RepoProfileFieldNotes: z.ZodObject<{
470
+ brief: z.ZodCatch<z.ZodOptional<z.ZodObject<{
471
+ /** Имя дрона, принёсшего правило. */
472
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
473
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
474
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
475
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
476
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
477
+ /** ISO-время предложения (серверное). */
478
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
479
+ }, "strip", z.ZodTypeAny, {
480
+ by?: string | undefined;
481
+ task?: string | undefined;
482
+ why?: string | undefined;
483
+ at?: string | undefined;
484
+ }, {
485
+ by?: unknown;
486
+ task?: unknown;
487
+ why?: unknown;
488
+ at?: unknown;
489
+ }>>>;
490
+ zones: z.ZodCatch<z.ZodOptional<z.ZodObject<{
491
+ /** Имя дрона, принёсшего правило. */
492
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
493
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
494
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
495
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
496
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
497
+ /** ISO-время предложения (серверное). */
498
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
499
+ }, "strip", z.ZodTypeAny, {
500
+ by?: string | undefined;
501
+ task?: string | undefined;
502
+ why?: string | undefined;
503
+ at?: string | undefined;
504
+ }, {
505
+ by?: unknown;
506
+ task?: unknown;
507
+ why?: unknown;
508
+ at?: unknown;
509
+ }>>>;
510
+ env: z.ZodCatch<z.ZodOptional<z.ZodObject<{
511
+ /** Имя дрона, принёсшего правило. */
512
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
513
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
514
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
515
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
516
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
517
+ /** ISO-время предложения (серверное). */
518
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
519
+ }, "strip", z.ZodTypeAny, {
520
+ by?: string | undefined;
521
+ task?: string | undefined;
522
+ why?: string | undefined;
523
+ at?: string | undefined;
524
+ }, {
525
+ by?: unknown;
526
+ task?: unknown;
527
+ why?: unknown;
528
+ at?: unknown;
529
+ }>>>;
530
+ verify: z.ZodCatch<z.ZodOptional<z.ZodObject<{
531
+ /** Имя дрона, принёсшего правило. */
532
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
533
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
534
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
535
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
536
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
537
+ /** ISO-время предложения (серверное). */
538
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
539
+ }, "strip", z.ZodTypeAny, {
540
+ by?: string | undefined;
541
+ task?: string | undefined;
542
+ why?: string | undefined;
543
+ at?: string | undefined;
544
+ }, {
545
+ by?: unknown;
546
+ task?: unknown;
547
+ why?: unknown;
548
+ at?: unknown;
549
+ }>>>;
550
+ conventions: z.ZodCatch<z.ZodOptional<z.ZodObject<{
551
+ /** Имя дрона, принёсшего правило. */
552
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
553
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
554
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
555
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
556
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
557
+ /** ISO-время предложения (серверное). */
558
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
559
+ }, "strip", z.ZodTypeAny, {
560
+ by?: string | undefined;
561
+ task?: string | undefined;
562
+ why?: string | undefined;
563
+ at?: string | undefined;
564
+ }, {
565
+ by?: unknown;
566
+ task?: unknown;
567
+ why?: unknown;
568
+ at?: unknown;
569
+ }>>>;
570
+ spine: z.ZodCatch<z.ZodOptional<z.ZodObject<{
571
+ /** Имя дрона, принёсшего правило. */
572
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
573
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
574
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
575
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
576
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
577
+ /** ISO-время предложения (серверное). */
578
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
579
+ }, "strip", z.ZodTypeAny, {
580
+ by?: string | undefined;
581
+ task?: string | undefined;
582
+ why?: string | undefined;
583
+ at?: string | undefined;
584
+ }, {
585
+ by?: unknown;
586
+ task?: unknown;
587
+ why?: unknown;
588
+ at?: unknown;
589
+ }>>>;
590
+ }, "strip", z.ZodTypeAny, {
591
+ brief?: {
592
+ by?: string | undefined;
593
+ task?: string | undefined;
594
+ why?: string | undefined;
595
+ at?: string | undefined;
596
+ } | undefined;
597
+ zones?: {
598
+ by?: string | undefined;
599
+ task?: string | undefined;
600
+ why?: string | undefined;
601
+ at?: string | undefined;
602
+ } | undefined;
603
+ env?: {
604
+ by?: string | undefined;
605
+ task?: string | undefined;
606
+ why?: string | undefined;
607
+ at?: string | undefined;
608
+ } | undefined;
609
+ verify?: {
610
+ by?: string | undefined;
611
+ task?: string | undefined;
612
+ why?: string | undefined;
613
+ at?: string | undefined;
614
+ } | undefined;
615
+ conventions?: {
616
+ by?: string | undefined;
617
+ task?: string | undefined;
618
+ why?: string | undefined;
619
+ at?: string | undefined;
620
+ } | undefined;
621
+ spine?: {
622
+ by?: string | undefined;
623
+ task?: string | undefined;
624
+ why?: string | undefined;
625
+ at?: string | undefined;
626
+ } | undefined;
627
+ }, {
628
+ brief?: unknown;
629
+ zones?: unknown;
630
+ env?: unknown;
631
+ verify?: unknown;
632
+ conventions?: unknown;
633
+ spine?: unknown;
634
+ }>;
635
+ export type RepoProfileFieldNotes = z.infer<typeof RepoProfileFieldNotes>;
434
636
  /** Кто и когда предложил. `by` — имя дрона-разведчика, для строки «предложил NN». */
435
637
  export declare const RepoProfileProposal: z.ZodObject<{
436
638
  brief: z.ZodCatch<z.ZodOptional<z.ZodString>>;
@@ -512,6 +714,182 @@ export declare const RepoProfileProposal: z.ZodObject<{
512
714
  at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
513
715
  /** Имя дрона-разведчика. */
514
716
  by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
717
+ /**
718
+ * ПОФАЙЛОВЫЕ пометки (TASWM-431): у полей, принесённых дронами с прогонов,
719
+ * здесь видно, кто и на какой задаче об это споткнулся. У полей разведчика
720
+ * пометки нет — его авторство на всём предложении (`by`/`at` выше).
721
+ *
722
+ * ОПЦИОНАЛЬНЫ, а не `.default({})`, как `sources` у разметки: предложение
723
+ * собирают руками и в проде, и в вебе (превью, тесты приёмки), и обязательное
724
+ * поле заставило бы каждый такой литерал писать пустую карту — ради пометки,
725
+ * которой у разведчика не бывает вовсе.
726
+ */
727
+ notes: z.ZodCatch<z.ZodOptional<z.ZodObject<{
728
+ brief: z.ZodCatch<z.ZodOptional<z.ZodObject<{
729
+ /** Имя дрона, принёсшего правило. */
730
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
731
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
732
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
733
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
734
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
735
+ /** ISO-время предложения (серверное). */
736
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
737
+ }, "strip", z.ZodTypeAny, {
738
+ by?: string | undefined;
739
+ task?: string | undefined;
740
+ why?: string | undefined;
741
+ at?: string | undefined;
742
+ }, {
743
+ by?: unknown;
744
+ task?: unknown;
745
+ why?: unknown;
746
+ at?: unknown;
747
+ }>>>;
748
+ zones: z.ZodCatch<z.ZodOptional<z.ZodObject<{
749
+ /** Имя дрона, принёсшего правило. */
750
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
751
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
752
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
753
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
754
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
755
+ /** ISO-время предложения (серверное). */
756
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
757
+ }, "strip", z.ZodTypeAny, {
758
+ by?: string | undefined;
759
+ task?: string | undefined;
760
+ why?: string | undefined;
761
+ at?: string | undefined;
762
+ }, {
763
+ by?: unknown;
764
+ task?: unknown;
765
+ why?: unknown;
766
+ at?: unknown;
767
+ }>>>;
768
+ env: z.ZodCatch<z.ZodOptional<z.ZodObject<{
769
+ /** Имя дрона, принёсшего правило. */
770
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
771
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
772
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
773
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
774
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
775
+ /** ISO-время предложения (серверное). */
776
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
777
+ }, "strip", z.ZodTypeAny, {
778
+ by?: string | undefined;
779
+ task?: string | undefined;
780
+ why?: string | undefined;
781
+ at?: string | undefined;
782
+ }, {
783
+ by?: unknown;
784
+ task?: unknown;
785
+ why?: unknown;
786
+ at?: unknown;
787
+ }>>>;
788
+ verify: z.ZodCatch<z.ZodOptional<z.ZodObject<{
789
+ /** Имя дрона, принёсшего правило. */
790
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
791
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
792
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
793
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
794
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
795
+ /** ISO-время предложения (серверное). */
796
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
797
+ }, "strip", z.ZodTypeAny, {
798
+ by?: string | undefined;
799
+ task?: string | undefined;
800
+ why?: string | undefined;
801
+ at?: string | undefined;
802
+ }, {
803
+ by?: unknown;
804
+ task?: unknown;
805
+ why?: unknown;
806
+ at?: unknown;
807
+ }>>>;
808
+ conventions: z.ZodCatch<z.ZodOptional<z.ZodObject<{
809
+ /** Имя дрона, принёсшего правило. */
810
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
811
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
812
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
813
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
814
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
815
+ /** ISO-время предложения (серверное). */
816
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
817
+ }, "strip", z.ZodTypeAny, {
818
+ by?: string | undefined;
819
+ task?: string | undefined;
820
+ why?: string | undefined;
821
+ at?: string | undefined;
822
+ }, {
823
+ by?: unknown;
824
+ task?: unknown;
825
+ why?: unknown;
826
+ at?: unknown;
827
+ }>>>;
828
+ spine: z.ZodCatch<z.ZodOptional<z.ZodObject<{
829
+ /** Имя дрона, принёсшего правило. */
830
+ by: z.ZodCatch<z.ZodOptional<z.ZodString>>;
831
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
832
+ task: z.ZodCatch<z.ZodOptional<z.ZodString>>;
833
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
834
+ why: z.ZodCatch<z.ZodOptional<z.ZodString>>;
835
+ /** ISO-время предложения (серверное). */
836
+ at: z.ZodCatch<z.ZodOptional<z.ZodString>>;
837
+ }, "strip", z.ZodTypeAny, {
838
+ by?: string | undefined;
839
+ task?: string | undefined;
840
+ why?: string | undefined;
841
+ at?: string | undefined;
842
+ }, {
843
+ by?: unknown;
844
+ task?: unknown;
845
+ why?: unknown;
846
+ at?: unknown;
847
+ }>>>;
848
+ }, "strip", z.ZodTypeAny, {
849
+ brief?: {
850
+ by?: string | undefined;
851
+ task?: string | undefined;
852
+ why?: string | undefined;
853
+ at?: string | undefined;
854
+ } | undefined;
855
+ zones?: {
856
+ by?: string | undefined;
857
+ task?: string | undefined;
858
+ why?: string | undefined;
859
+ at?: string | undefined;
860
+ } | undefined;
861
+ env?: {
862
+ by?: string | undefined;
863
+ task?: string | undefined;
864
+ why?: string | undefined;
865
+ at?: string | undefined;
866
+ } | undefined;
867
+ verify?: {
868
+ by?: string | undefined;
869
+ task?: string | undefined;
870
+ why?: string | undefined;
871
+ at?: string | undefined;
872
+ } | undefined;
873
+ conventions?: {
874
+ by?: string | undefined;
875
+ task?: string | undefined;
876
+ why?: string | undefined;
877
+ at?: string | undefined;
878
+ } | undefined;
879
+ spine?: {
880
+ by?: string | undefined;
881
+ task?: string | undefined;
882
+ why?: string | undefined;
883
+ at?: string | undefined;
884
+ } | undefined;
885
+ }, {
886
+ brief?: unknown;
887
+ zones?: unknown;
888
+ env?: unknown;
889
+ verify?: unknown;
890
+ conventions?: unknown;
891
+ spine?: unknown;
892
+ }>>>;
515
893
  }, "strip", z.ZodTypeAny, {
516
894
  brief?: string | undefined;
517
895
  zones?: {
@@ -536,6 +914,44 @@ export declare const RepoProfileProposal: z.ZodObject<{
536
914
  spine?: string[] | undefined;
537
915
  at?: string | undefined;
538
916
  by?: string | undefined;
917
+ notes?: {
918
+ brief?: {
919
+ by?: string | undefined;
920
+ task?: string | undefined;
921
+ why?: string | undefined;
922
+ at?: string | undefined;
923
+ } | undefined;
924
+ zones?: {
925
+ by?: string | undefined;
926
+ task?: string | undefined;
927
+ why?: string | undefined;
928
+ at?: string | undefined;
929
+ } | undefined;
930
+ env?: {
931
+ by?: string | undefined;
932
+ task?: string | undefined;
933
+ why?: string | undefined;
934
+ at?: string | undefined;
935
+ } | undefined;
936
+ verify?: {
937
+ by?: string | undefined;
938
+ task?: string | undefined;
939
+ why?: string | undefined;
940
+ at?: string | undefined;
941
+ } | undefined;
942
+ conventions?: {
943
+ by?: string | undefined;
944
+ task?: string | undefined;
945
+ why?: string | undefined;
946
+ at?: string | undefined;
947
+ } | undefined;
948
+ spine?: {
949
+ by?: string | undefined;
950
+ task?: string | undefined;
951
+ why?: string | undefined;
952
+ at?: string | undefined;
953
+ } | undefined;
954
+ } | undefined;
539
955
  }, {
540
956
  brief?: unknown;
541
957
  zones?: unknown;
@@ -545,6 +961,7 @@ export declare const RepoProfileProposal: z.ZodObject<{
545
961
  spine?: unknown;
546
962
  at?: unknown;
547
963
  by?: unknown;
964
+ notes?: unknown;
548
965
  }>;
549
966
  export type RepoProfileProposal = z.infer<typeof RepoProfileProposal>;
550
967
  /**
@@ -718,6 +1135,239 @@ export declare function hasRepoProfileChanges(diff: RepoProfileFieldDiff[]): boo
718
1135
  * что стёрло бы уже записанное).
719
1136
  */
720
1137
  export declare function repoProfilePatchFromProposal(proposal: RepoProfileProposal, fields: readonly RepoProfileField[]): RepoProfilePatch;
1138
+ /** Сколько правил дрон вправе принести за один прогон. Больше двух — это уже отписка. */
1139
+ export declare const DRONE_RULES_PER_RUN_MAX = 2;
1140
+ /**
1141
+ * ЧТО ревьюер применяет САМ, не спрашивая человека. Ошибка в этих полях стоит
1142
+ * одного неудачного прогона, и следующий дрон её же и поправит.
1143
+ */
1144
+ export declare const REPO_PROFILE_CHEAP_FIELDS: readonly ["brief", "verify", "conventions"];
1145
+ /**
1146
+ * Можно ли применить поле вердиктом ревьюера. Остальные (`env`, `zones`, `spine`)
1147
+ * ждут человека ВСЕГДА, даже если ревьюер сказал «применить»: кривая команда
1148
+ * миграции портит базу, кривая зона (и кривой хребет — он раздаёт работу тем же
1149
+ * зерном) ломает раздачу работы сразу всем. Гарантия обязана стоять в коде, а не
1150
+ * на послушности модели — то же решение, что у приёмки разведки (TASWM-382).
1151
+ */
1152
+ export declare function isCheapRepoProfileField(field: RepoProfileField): boolean;
1153
+ /**
1154
+ * Правило, принесённое дроном: КАКОЕ поле, ЧЕМ его заполнить и ПОЧЕМУ. Значение
1155
+ * типизовано по полю (дискриминация по `field`), а не «что-нибудь»: дрон видит
1156
+ * настоящую форму в схеме MCP-тула и не присылает строку туда, где ждут зоны.
1157
+ */
1158
+ export declare const DroneRepoRule: z.ZodDiscriminatedUnion<"field", [z.ZodObject<{
1159
+ field: z.ZodLiteral<"brief">;
1160
+ value: z.ZodString;
1161
+ why: z.ZodString;
1162
+ }, "strip", z.ZodTypeAny, {
1163
+ field: "brief";
1164
+ value: string;
1165
+ why: string;
1166
+ }, {
1167
+ field: "brief";
1168
+ value: string;
1169
+ why: string;
1170
+ }>, z.ZodObject<{
1171
+ field: z.ZodLiteral<"zones">;
1172
+ value: z.ZodArray<z.ZodObject<{
1173
+ /** Лейбл задачи, например `area:swarm-model`. */
1174
+ label: z.ZodString;
1175
+ /** Что это за зона словами — одной строкой, для дрона и для человека. */
1176
+ about: z.ZodOptional<z.ZodString>;
1177
+ /** Пути (glob или префикс), которые к зоне относятся. */
1178
+ paths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1179
+ }, "strip", z.ZodTypeAny, {
1180
+ label: string;
1181
+ about?: string | undefined;
1182
+ paths: string[];
1183
+ }, {
1184
+ label: string;
1185
+ about?: string | undefined;
1186
+ paths?: string[] | undefined;
1187
+ }>, "many">;
1188
+ why: z.ZodString;
1189
+ }, "strip", z.ZodTypeAny, {
1190
+ field: "zones";
1191
+ value: {
1192
+ label: string;
1193
+ about?: string | undefined;
1194
+ paths: string[];
1195
+ }[];
1196
+ why: string;
1197
+ }, {
1198
+ field: "zones";
1199
+ value: {
1200
+ label: string;
1201
+ about?: string | undefined;
1202
+ paths?: string[] | undefined;
1203
+ }[];
1204
+ why: string;
1205
+ }>, z.ZodObject<{
1206
+ field: z.ZodLiteral<"env">;
1207
+ value: z.ZodObject<{
1208
+ /** Чем поднять базу данных (`docker compose up -d db`). */
1209
+ database: z.ZodOptional<z.ZodString>;
1210
+ /** Чем накатить миграции (`pnpm --filter api prisma migrate dev`). */
1211
+ migrations: z.ZodOptional<z.ZodString>;
1212
+ /**
1213
+ * ИМЕНА переменных окружения, без которых репозиторий не заводится. Только
1214
+ * имена: значения — секреты, и здесь их быть не должно (разметка едет в
1215
+ * промпт дрона и в UI как обычный текст).
1216
+ */
1217
+ vars: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1218
+ }, "strip", z.ZodTypeAny, {
1219
+ database?: string | undefined;
1220
+ migrations?: string | undefined;
1221
+ vars: string[];
1222
+ }, {
1223
+ database?: string | undefined;
1224
+ migrations?: string | undefined;
1225
+ vars?: string[] | undefined;
1226
+ }>;
1227
+ why: z.ZodString;
1228
+ }, "strip", z.ZodTypeAny, {
1229
+ field: "env";
1230
+ value: {
1231
+ database?: string | undefined;
1232
+ migrations?: string | undefined;
1233
+ vars: string[];
1234
+ };
1235
+ why: string;
1236
+ }, {
1237
+ field: "env";
1238
+ value: {
1239
+ database?: string | undefined;
1240
+ migrations?: string | undefined;
1241
+ vars?: string[] | undefined;
1242
+ };
1243
+ why: string;
1244
+ }>, z.ZodObject<{
1245
+ field: z.ZodLiteral<"verify">;
1246
+ value: z.ZodObject<{
1247
+ /** Команды проверки: typecheck, тесты, линт. */
1248
+ commands: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1249
+ /**
1250
+ * Что здесь считается зелёным — словами. Отдельно от команд сознательно:
1251
+ * «зелёное» редко равно «команда вернула 0» (кешированный прогон, известные
1252
+ * падающие тесты, гейт в CI, а не локально).
1253
+ */
1254
+ green: z.ZodOptional<z.ZodString>;
1255
+ }, "strip", z.ZodTypeAny, {
1256
+ commands: string[];
1257
+ green?: string | undefined;
1258
+ }, {
1259
+ commands?: string[] | undefined;
1260
+ green?: string | undefined;
1261
+ }>;
1262
+ why: z.ZodString;
1263
+ }, "strip", z.ZodTypeAny, {
1264
+ field: "verify";
1265
+ value: {
1266
+ commands: string[];
1267
+ green?: string | undefined;
1268
+ };
1269
+ why: string;
1270
+ }, {
1271
+ field: "verify";
1272
+ value: {
1273
+ commands?: string[] | undefined;
1274
+ green?: string | undefined;
1275
+ };
1276
+ why: string;
1277
+ }>, z.ZodObject<{
1278
+ field: z.ZodLiteral<"conventions">;
1279
+ value: z.ZodObject<{
1280
+ /** Язык сообщений коммитов — `ru`, `en` или как принято писать в проекте. */
1281
+ commitLanguage: z.ZodOptional<z.ZodString>;
1282
+ /** Слаг задачи обязателен в сообщении коммита. */
1283
+ slugInCommit: z.ZodOptional<z.ZodBoolean>;
1284
+ /**
1285
+ * Базовая ветка репозитория — та, от которой ветвятся и в которую идут PR.
1286
+ * НАБЛЮДЕНИЕ о репозитории, а не ручка роя: если у проекта задан
1287
+ * `swarmConfig.baseBranch` (TASWM-285, интеграционная ветка под пачку задач),
1288
+ * побеждает он — это решение человека, а здесь то, что увидела разведка.
1289
+ */
1290
+ baseBranch: z.ZodOptional<z.ZodString>;
1291
+ }, "strip", z.ZodTypeAny, {
1292
+ commitLanguage?: string | undefined;
1293
+ slugInCommit?: boolean | undefined;
1294
+ baseBranch?: string | undefined;
1295
+ }, {
1296
+ commitLanguage?: string | undefined;
1297
+ slugInCommit?: boolean | undefined;
1298
+ baseBranch?: string | undefined;
1299
+ }>;
1300
+ why: z.ZodString;
1301
+ }, "strip", z.ZodTypeAny, {
1302
+ field: "conventions";
1303
+ value: {
1304
+ commitLanguage?: string | undefined;
1305
+ slugInCommit?: boolean | undefined;
1306
+ baseBranch?: string | undefined;
1307
+ };
1308
+ why: string;
1309
+ }, {
1310
+ field: "conventions";
1311
+ value: {
1312
+ commitLanguage?: string | undefined;
1313
+ slugInCommit?: boolean | undefined;
1314
+ baseBranch?: string | undefined;
1315
+ };
1316
+ why: string;
1317
+ }>, z.ZodObject<{
1318
+ field: z.ZodLiteral<"spine">;
1319
+ value: z.ZodArray<z.ZodString, "many">;
1320
+ why: z.ZodString;
1321
+ }, "strip", z.ZodTypeAny, {
1322
+ field: "spine";
1323
+ value: string[];
1324
+ why: string;
1325
+ }, {
1326
+ field: "spine";
1327
+ value: string[];
1328
+ why: string;
1329
+ }>]>;
1330
+ export type DroneRepoRule = z.infer<typeof DroneRepoRule>;
1331
+ /** Почему правило не поехало дальше. */
1332
+ export type DroneRepoRuleSkip = "already_recorded" | "duplicate_field" | "over_limit";
1333
+ /** Правило, отсеянное до записи, — с причиной: дрону её видно в ответе, оператору в логе прогона. */
1334
+ export interface DroneRepoRuleSkipped {
1335
+ field: RepoProfileField;
1336
+ reason: DroneRepoRuleSkip;
1337
+ }
1338
+ /**
1339
+ * Отсеять то, что предлагать не надо: УЖЕ ЗАПИСАННОЕ (сверка — тем же
1340
+ * `diffRepoProfile`, что показывает разницу человеку на приёмке разведки),
1341
+ * повтор одного поля в пределах прогона и всё сверх потолка.
1342
+ *
1343
+ * Порядок отсева важен: сперва потолок (дрон, принёсший пять правил, не должен
1344
+ * протащить третье тем, что первые два совпали с записанным), потом повтор поля,
1345
+ * потом сверка с разметкой. Иначе «не больше двух за прогон» считалось бы по
1346
+ * доехавшим, а не по принесённым.
1347
+ */
1348
+ export declare function filterDroneRepoRules(profile: RepoProfile | null, rules: readonly DroneRepoRule[], limit?: number): {
1349
+ fresh: DroneRepoRule[];
1350
+ skipped: DroneRepoRuleSkipped[];
1351
+ };
1352
+ /**
1353
+ * Положить правила дрона в предложение, проставив каждому полю пометку «кто и на
1354
+ * какой задаче». Предложение разведчика при этом НЕ сносится: он и дрон видят
1355
+ * репозиторий с разных сторон, и предложенная разведкой зона не обязана умирать
1356
+ * оттого, что дрон принёс правило про тесты. Совпало поле — побеждает дрон: он
1357
+ * об это споткнулся только что.
1358
+ */
1359
+ export declare function mergeDroneRepoRules(proposal: RepoProfileProposal | null, rules: readonly DroneRepoRule[], note: {
1360
+ by?: string | undefined;
1361
+ task?: string | undefined;
1362
+ at: string;
1363
+ }): RepoProfileProposal;
1364
+ /**
1365
+ * Убрать из предложения решённые поля (применённые ревьюером и отклонённые им же)
1366
+ * вместе с их пометками. `null` — в предложении не осталось ни одного поля:
1367
+ * вызывающий обязан положить в колонку NULL, иначе экран приёмки вечно показывал
1368
+ * бы «есть что посмотреть» на пустом предложении.
1369
+ */
1370
+ export declare function dropRepoProfileProposalFields(proposal: RepoProfileProposal, fields: readonly RepoProfileField[]): RepoProfileProposal | null;
721
1371
  /** Есть ли в разметке хоть что-то, кроме карты источников. */
722
1372
  export declare function isEmptyRepoProfile(profile: RepoProfile): boolean;
723
1373
  /**
@@ -25,9 +25,13 @@ import { z } from "zod";
25
25
  * другого можно ТОЛЬКО по источнику — по самому значению не отличишь никак.
26
26
  *
27
27
  * "scout" — предложил разведчик (агент, просканировавший репозиторий);
28
- * "human" — вписал человек.
28
+ * "human" — вписал человек;
29
+ * "drone" — принёс дрон с прогона, применил ревьюер (TASWM-431). Отдельно от
30
+ * "scout" не для красоты: разведчик читает код, а дрон приносит то, что в коде
31
+ * не написано и выясняется, только когда споткнёшься, — и цена ошибки у них
32
+ * разная. Защита ручных правок по-прежнему стоит ТОЛЬКО на "human".
29
33
  */
30
- export const REPO_PROFILE_SOURCES = ["scout", "human"];
34
+ export const REPO_PROFILE_SOURCES = ["scout", "human", "drone"];
31
35
  export const RepoProfileSource = z.enum(REPO_PROFILE_SOURCES);
32
36
  /**
33
37
  * Поля разметки, у которых есть источник. Источник — ПОФАЙЛОВЫЙ по полю верхнего
@@ -51,6 +55,8 @@ export const REPO_ENV_VARS_MAX = 40;
51
55
  export const REPO_ENV_VAR_MAX = 100;
52
56
  export const REPO_BASE_BRANCH_MAX = 200;
53
57
  export const REPO_COMMIT_LANGUAGE_MAX = 40;
58
+ /** Причина правила, принесённого дроном (TASWM-431): обо что споткнулся и чего это стоило. */
59
+ export const REPO_RULE_WHY_MAX = 600;
54
60
  /**
55
61
  * Зона кода: лейбл `area:*`, которым размечают задачи, плюс человеческое
56
62
  * описание и пути, которые к зоне относятся. Пути нужны, чтобы связать зону с
@@ -172,6 +178,32 @@ export const RepoProfilePatch = z.object({
172
178
  // предложение — черновик, копить их незачем), но живую разметку по-прежнему не
173
179
  // трогает — отсюда и требование «повторный запуск показывает разницу, а не
174
180
  // затирает ручные правки»: разницу считает `diffRepoProfile`.
181
+ /**
182
+ * Пометка на ОДНОМ поле предложения: кто его предложил, на какой задаче и обо
183
+ * что споткнулся (TASWM-431). Общей пометки предложения (`by`/`at` ниже) для
184
+ * этого мало: в одной колонке лежат и отчёт разведчика (целиком его), и правила
185
+ * разных дронов с разных прогонов — «предложил NN» на всём предложении не
186
+ * сказало бы, чьё какое поле.
187
+ */
188
+ export const RepoProfileFieldNote = z.object({
189
+ /** Имя дрона, принёсшего правило. */
190
+ by: z.string().max(80).optional().catch(undefined),
191
+ /** Слаг задачи, на которой он об это споткнулся, — по нему поднимается прогон целиком. */
192
+ task: z.string().max(40).optional().catch(undefined),
193
+ /** ПОЧЕМУ это правило: обо что споткнулся и чего это стоило. Читает ревьюер, решая. */
194
+ why: z.string().max(REPO_RULE_WHY_MAX).optional().catch(undefined),
195
+ /** ISO-время предложения (серверное). */
196
+ at: z.string().max(40).optional().catch(undefined),
197
+ });
198
+ /** Пометки по полям — той же формой, что `sources`: карта из шести значений. */
199
+ export const RepoProfileFieldNotes = z.object({
200
+ brief: RepoProfileFieldNote.optional().catch(undefined),
201
+ zones: RepoProfileFieldNote.optional().catch(undefined),
202
+ env: RepoProfileFieldNote.optional().catch(undefined),
203
+ verify: RepoProfileFieldNote.optional().catch(undefined),
204
+ conventions: RepoProfileFieldNote.optional().catch(undefined),
205
+ spine: RepoProfileFieldNote.optional().catch(undefined),
206
+ });
175
207
  /** Кто и когда предложил. `by` — имя дрона-разведчика, для строки «предложил NN». */
176
208
  export const RepoProfileProposal = z.object({
177
209
  brief: z.string().max(REPO_BRIEF_MAX).optional().catch(undefined),
@@ -184,6 +216,17 @@ export const RepoProfileProposal = z.object({
184
216
  at: z.string().max(40).optional().catch(undefined),
185
217
  /** Имя дрона-разведчика. */
186
218
  by: z.string().max(80).optional().catch(undefined),
219
+ /**
220
+ * ПОФАЙЛОВЫЕ пометки (TASWM-431): у полей, принесённых дронами с прогонов,
221
+ * здесь видно, кто и на какой задаче об это споткнулся. У полей разведчика
222
+ * пометки нет — его авторство на всём предложении (`by`/`at` выше).
223
+ *
224
+ * ОПЦИОНАЛЬНЫ, а не `.default({})`, как `sources` у разметки: предложение
225
+ * собирают руками и в проде, и в вебе (превью, тесты приёмки), и обязательное
226
+ * поле заставило бы каждый такой литерал писать пустую карту — ради пометки,
227
+ * которой у разведчика не бывает вовсе.
228
+ */
229
+ notes: RepoProfileFieldNotes.optional().catch(undefined),
187
230
  });
188
231
  /**
189
232
  * ЧТО предлагает разведчик — строгая схема ЗАПИСИ (как `RepoProfilePatch`, но без
@@ -257,6 +300,116 @@ export function repoProfilePatchFromProposal(proposal, fields) {
257
300
  }
258
301
  return patch;
259
302
  }
303
+ // ── ПРАВИЛО ОТ ДРОНА (TASWM-431) ────────────────────────────────────────────
304
+ //
305
+ // Разведчик читает КОД, а половина правил в коде не написана: что интеграционные
306
+ // тесты хотят постгрес на 5433, выясняется, только когда попробуешь. Выясняет это
307
+ // дрон — и до этой задачи знание умирало вместе с прогоном.
308
+ //
309
+ // Правило — это НЕ новая сущность, а значение одного поля разметки плюс причина
310
+ // («обо что споткнулся»). Едет оно туда же, куда кладёт разведчик, —
311
+ // в `repoProfileProposal`, а не в живую разметку: между «дрон предложил» и «это
312
+ // теперь правило репозитория» стоит РЕВЬЮЕР (он прочитал дифф прогона, видит
313
+ // число итераций и что дрон чинил — единственный, кто отличит правило от отписки).
314
+ /** Сколько правил дрон вправе принести за один прогон. Больше двух — это уже отписка. */
315
+ export const DRONE_RULES_PER_RUN_MAX = 2;
316
+ /**
317
+ * ЧТО ревьюер применяет САМ, не спрашивая человека. Ошибка в этих полях стоит
318
+ * одного неудачного прогона, и следующий дрон её же и поправит.
319
+ */
320
+ export const REPO_PROFILE_CHEAP_FIELDS = ["brief", "verify", "conventions"];
321
+ /**
322
+ * Можно ли применить поле вердиктом ревьюера. Остальные (`env`, `zones`, `spine`)
323
+ * ждут человека ВСЕГДА, даже если ревьюер сказал «применить»: кривая команда
324
+ * миграции портит базу, кривая зона (и кривой хребет — он раздаёт работу тем же
325
+ * зерном) ломает раздачу работы сразу всем. Гарантия обязана стоять в коде, а не
326
+ * на послушности модели — то же решение, что у приёмки разведки (TASWM-382).
327
+ */
328
+ export function isCheapRepoProfileField(field) {
329
+ return REPO_PROFILE_CHEAP_FIELDS.includes(field);
330
+ }
331
+ /**
332
+ * Правило, принесённое дроном: КАКОЕ поле, ЧЕМ его заполнить и ПОЧЕМУ. Значение
333
+ * типизовано по полю (дискриминация по `field`), а не «что-нибудь»: дрон видит
334
+ * настоящую форму в схеме MCP-тула и не присылает строку туда, где ждут зоны.
335
+ */
336
+ export const DroneRepoRule = z.discriminatedUnion("field", [
337
+ z.object({ field: z.literal("brief"), value: z.string().min(1).max(REPO_BRIEF_MAX), why: z.string().min(1).max(REPO_RULE_WHY_MAX) }),
338
+ z.object({ field: z.literal("zones"), value: z.array(RepoZone).min(1).max(REPO_ZONES_MAX), why: z.string().min(1).max(REPO_RULE_WHY_MAX) }),
339
+ z.object({ field: z.literal("env"), value: RepoEnvSetup, why: z.string().min(1).max(REPO_RULE_WHY_MAX) }),
340
+ z.object({ field: z.literal("verify"), value: RepoVerify, why: z.string().min(1).max(REPO_RULE_WHY_MAX) }),
341
+ z.object({ field: z.literal("conventions"), value: RepoConventions, why: z.string().min(1).max(REPO_RULE_WHY_MAX) }),
342
+ z.object({ field: z.literal("spine"), value: z.array(z.string().min(1).max(REPO_PATH_MAX)).min(1).max(REPO_PATHS_MAX), why: z.string().min(1).max(REPO_RULE_WHY_MAX) }),
343
+ ]);
344
+ /**
345
+ * Отсеять то, что предлагать не надо: УЖЕ ЗАПИСАННОЕ (сверка — тем же
346
+ * `diffRepoProfile`, что показывает разницу человеку на приёмке разведки),
347
+ * повтор одного поля в пределах прогона и всё сверх потолка.
348
+ *
349
+ * Порядок отсева важен: сперва потолок (дрон, принёсший пять правил, не должен
350
+ * протащить третье тем, что первые два совпали с записанным), потом повтор поля,
351
+ * потом сверка с разметкой. Иначе «не больше двух за прогон» считалось бы по
352
+ * доехавшим, а не по принесённым.
353
+ */
354
+ export function filterDroneRepoRules(profile, rules, limit = DRONE_RULES_PER_RUN_MAX) {
355
+ const fresh = [];
356
+ const skipped = [];
357
+ const seen = new Set();
358
+ for (const [i, rule] of rules.entries()) {
359
+ if (i >= limit) {
360
+ skipped.push({ field: rule.field, reason: "over_limit" });
361
+ continue;
362
+ }
363
+ if (seen.has(rule.field)) {
364
+ skipped.push({ field: rule.field, reason: "duplicate_field" });
365
+ continue;
366
+ }
367
+ seen.add(rule.field);
368
+ // Сверка «уже записанное не предлагать» — через тот же diff, которым живёт
369
+ // приёмка разведки: правило превращается в предложение из одного поля, и
370
+ // "same" означает, что дрон принёс ровно то, что в карточке уже лежит.
371
+ const asProposal = { [rule.field]: rule.value, notes: {} };
372
+ const change = diffRepoProfile(profile, asProposal).find((d) => d.field === rule.field)?.change;
373
+ if (change === "same")
374
+ skipped.push({ field: rule.field, reason: "already_recorded" });
375
+ else
376
+ fresh.push(rule);
377
+ }
378
+ return { fresh, skipped };
379
+ }
380
+ /**
381
+ * Положить правила дрона в предложение, проставив каждому полю пометку «кто и на
382
+ * какой задаче». Предложение разведчика при этом НЕ сносится: он и дрон видят
383
+ * репозиторий с разных сторон, и предложенная разведкой зона не обязана умирать
384
+ * оттого, что дрон принёс правило про тесты. Совпало поле — побеждает дрон: он
385
+ * об это споткнулся только что.
386
+ */
387
+ export function mergeDroneRepoRules(proposal, rules, note) {
388
+ const notes = { ...(proposal?.notes ?? {}) };
389
+ const next = { ...(proposal ?? {}), notes };
390
+ for (const rule of rules) {
391
+ // Значения полей разнородны, а ключ общий для двух карт — то же приведение и
392
+ // по той же причине, что в mergeRepoProfile.
393
+ next[rule.field] = rule.value;
394
+ notes[rule.field] = { ...(note.by ? { by: note.by } : {}), ...(note.task ? { task: note.task } : {}), why: rule.why, at: note.at };
395
+ }
396
+ return next;
397
+ }
398
+ /**
399
+ * Убрать из предложения решённые поля (применённые ревьюером и отклонённые им же)
400
+ * вместе с их пометками. `null` — в предложении не осталось ни одного поля:
401
+ * вызывающий обязан положить в колонку NULL, иначе экран приёмки вечно показывал
402
+ * бы «есть что посмотреть» на пустом предложении.
403
+ */
404
+ export function dropRepoProfileProposalFields(proposal, fields) {
405
+ const notes = { ...(proposal.notes ?? {}) };
406
+ const next = { ...proposal, notes };
407
+ for (const field of fields) {
408
+ delete next[field];
409
+ delete notes[field];
410
+ }
411
+ return REPO_PROFILE_FIELDS.every((f) => next[f] === undefined) ? null : next;
412
+ }
260
413
  /** Сравнение значений полей по нормализованному JSON (порядок ключей не значим). */
261
414
  function sameValue(a, b) {
262
415
  return stableJson(a) === stableJson(b);
@@ -1 +1 @@
1
- {"version":3,"file":"repoProfile.js","sourceRoot":"","sources":["../src/repoProfile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repoProfile.js","sourceRoot":"","sources":["../src/repoProfile.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taskless-app/shared",
3
- "version": "0.1.28",
3
+ "version": "0.1.30",
4
4
  "type": "module",
5
5
  "description": "Shared types, Zod schemas and design tokens for the Taskless API contract — consumed by @taskless/api, @taskless/web and the Taskless mobile app.",
6
6
  "license": "MIT",