@clipwright/core 0.19.0 → 0.21.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.
Files changed (135) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/__fixtures__/queue-promises.d.ts +5 -84
  3. package/dist/__fixtures__/queue-promises.js +7 -84
  4. package/dist/__fixtures__/queue-promises.js.map +1 -1
  5. package/dist/account-actors.d.ts +25 -25
  6. package/dist/account-actors.js +25 -25
  7. package/dist/account-actors.js.map +1 -1
  8. package/dist/account.d.ts +4 -10
  9. package/dist/account.js +6 -12
  10. package/dist/account.js.map +1 -1
  11. package/dist/actor-bounds.d.ts +4 -4
  12. package/dist/actor-bounds.js +4 -4
  13. package/dist/actor-bounds.js.map +1 -1
  14. package/dist/actor-qualities.d.ts +3 -3
  15. package/dist/actor-qualities.js +3 -3
  16. package/dist/actor-qualities.js.map +1 -1
  17. package/dist/actors.d.ts +8 -8
  18. package/dist/actors.js +9 -9
  19. package/dist/actors.js.map +1 -1
  20. package/dist/api-failure.d.ts +28 -129
  21. package/dist/api-failure.js +52 -225
  22. package/dist/api-failure.js.map +1 -1
  23. package/dist/aspect.d.ts +26 -96
  24. package/dist/aspect.js +32 -108
  25. package/dist/aspect.js.map +1 -1
  26. package/dist/contract-dispositions.d.ts +42 -167
  27. package/dist/contract-dispositions.js +54 -184
  28. package/dist/contract-dispositions.js.map +1 -1
  29. package/dist/endpoints.d.ts +5 -5
  30. package/dist/endpoints.js +5 -3
  31. package/dist/endpoints.js.map +1 -1
  32. package/dist/errors.d.ts +33 -101
  33. package/dist/errors.js +42 -108
  34. package/dist/errors.js.map +1 -1
  35. package/dist/faceless-cut-style.d.ts +115 -0
  36. package/dist/faceless-cut-style.js +109 -0
  37. package/dist/faceless-cut-style.js.map +1 -0
  38. package/dist/faceless-image-qualification.d.ts +97 -0
  39. package/dist/faceless-image-qualification.js +145 -0
  40. package/dist/faceless-image-qualification.js.map +1 -0
  41. package/dist/faceless-price.d.ts +21 -0
  42. package/dist/faceless-price.js +25 -0
  43. package/dist/faceless-price.js.map +1 -0
  44. package/dist/faceless-public-plan.d.ts +71 -0
  45. package/dist/faceless-public-plan.js +166 -0
  46. package/dist/faceless-public-plan.js.map +1 -0
  47. package/dist/faceless-public.d.ts +107 -0
  48. package/dist/faceless-public.js +74 -0
  49. package/dist/faceless-public.js.map +1 -0
  50. package/dist/faceless-short-61.d.ts +83 -0
  51. package/dist/faceless-short-61.js +152 -0
  52. package/dist/faceless-short-61.js.map +1 -0
  53. package/dist/faceless-storyboard-timing.d.ts +40 -0
  54. package/dist/faceless-storyboard-timing.js +97 -0
  55. package/dist/faceless-storyboard-timing.js.map +1 -0
  56. package/dist/faceless-storyboard-v2-plan.d.ts +3 -0
  57. package/dist/faceless-storyboard-v2-plan.js +112 -0
  58. package/dist/faceless-storyboard-v2-plan.js.map +1 -0
  59. package/dist/faceless-storyboard-v2-timing.d.ts +63 -0
  60. package/dist/faceless-storyboard-v2-timing.js +143 -0
  61. package/dist/faceless-storyboard-v2-timing.js.map +1 -0
  62. package/dist/faceless-storyboard-v2.d.ts +44 -0
  63. package/dist/faceless-storyboard-v2.js +43 -0
  64. package/dist/faceless-storyboard-v2.js.map +1 -0
  65. package/dist/faceless-storyboard.d.ts +55 -0
  66. package/dist/faceless-storyboard.js +105 -0
  67. package/dist/faceless-storyboard.js.map +1 -0
  68. package/dist/idempotency.d.ts +10 -44
  69. package/dist/idempotency.js +18 -44
  70. package/dist/idempotency.js.map +1 -1
  71. package/dist/index.d.ts +3 -0
  72. package/dist/index.js +24 -25
  73. package/dist/index.js.map +1 -1
  74. package/dist/long-form-pricing.d.ts +4 -4
  75. package/dist/long-form-pricing.js +4 -4
  76. package/dist/long-form-pricing.js.map +1 -1
  77. package/dist/long-form-profile.d.ts +2 -2
  78. package/dist/long-form-profile.js +2 -2
  79. package/dist/long-form-profile.js.map +1 -1
  80. package/dist/pacing.d.ts +1 -1
  81. package/dist/pacing.js +1 -1
  82. package/dist/pacing.js.map +1 -1
  83. package/dist/public-endpoints.d.ts +9 -11
  84. package/dist/public-endpoints.js +11 -13
  85. package/dist/public-endpoints.js.map +1 -1
  86. package/dist/rate-limit.d.ts +23 -130
  87. package/dist/rate-limit.js +27 -132
  88. package/dist/rate-limit.js.map +1 -1
  89. package/dist/render-backend.d.ts +30 -145
  90. package/dist/render-backend.js +4 -27
  91. package/dist/render-backend.js.map +1 -1
  92. package/dist/run-preflight.d.ts +4 -4
  93. package/dist/run-preflight.js +10 -10
  94. package/dist/run-preflight.js.map +1 -1
  95. package/dist/run-static-warnings.d.ts +8 -8
  96. package/dist/run-static-warnings.js +26 -24
  97. package/dist/run-static-warnings.js.map +1 -1
  98. package/dist/runs.d.ts +34 -55
  99. package/dist/runs.js +28 -94
  100. package/dist/runs.js.map +1 -1
  101. package/dist/script-integrity.d.ts +6 -7
  102. package/dist/script-integrity.js +7 -8
  103. package/dist/script-integrity.js.map +1 -1
  104. package/dist/semantic-inserts.d.ts +4 -4
  105. package/dist/semantic-inserts.js +6 -6
  106. package/dist/semantic-inserts.js.map +1 -1
  107. package/dist/skills.d.ts +37 -108
  108. package/dist/skills.js +77 -161
  109. package/dist/skills.js.map +1 -1
  110. package/dist/tts-backend.d.ts +13 -42
  111. package/dist/tts-backend.js +2 -10
  112. package/dist/tts-backend.js.map +1 -1
  113. package/dist/uploads.d.ts +4 -4
  114. package/dist/uploads.js +4 -4
  115. package/dist/uploads.js.map +1 -1
  116. package/dist/vendor-response.d.ts +17 -80
  117. package/dist/vendor-response.js +19 -67
  118. package/dist/vendor-response.js.map +1 -1
  119. package/dist/voice-admission.d.ts +5 -5
  120. package/dist/voice-admission.js +6 -6
  121. package/dist/voice-admission.js.map +1 -1
  122. package/dist/voice-catalog-data.d.ts +2 -2
  123. package/dist/voice-catalog-data.js +2 -2
  124. package/dist/voice-catalog-data.js.map +1 -1
  125. package/dist/voice-catalog.d.ts +5 -5
  126. package/dist/voice-catalog.generated.json +56 -54
  127. package/dist/voice-catalog.js +6 -6
  128. package/dist/voice-catalog.js.map +1 -1
  129. package/dist/voice-listing.d.ts +4 -4
  130. package/dist/voice-listing.js +6 -6
  131. package/dist/voice-listing.js.map +1 -1
  132. package/dist/voices.d.ts +40 -82
  133. package/dist/voices.js +56 -99
  134. package/dist/voices.js.map +1 -1
  135. package/package.json +1 -1
@@ -1,32 +1,13 @@
1
1
  import { z } from "zod";
2
2
  import { makeUgcInputShape } from "./skills.js";
3
- /** РЕЕСТР ДИСПОЗИЦИЙ ПОЛЕЙ ВХОДА `make_ugc`: у каждого поля обязано быть записанное */
4
- /** решение. Тип — страж ПОЛНОТЫ, истинность доказывает egress-тест. */
5
- /**
6
- * Версия публичного контракта. Отдаётся заголовком `X-Clipwright-Contract` и
7
- * полем `contract_version` в ответе quote. Любое следующее ломающее изменение
8
- * обязано её двигать; до этого пересмотра версии не было вообще, поэтому первое
9
- * её значение совпадает с месяцем самого пересмотра.
10
- */
3
+ /** Disposition registry for `make_ugc` input fields: every field must have a recorded */
4
+ /** decision. The type guards completeness; the egress test proves truth. */
5
+ /** Public contract version, sent as the `X-Clipwright-Contract` header and as `contract_version` */
6
+ /** in the quote response. Every breaking change must bump it. */
11
7
  export declare const CONTRACT_VERSION = "2026-09-14";
12
8
  export declare const CONTRACT_VERSION_HEADER = "X-Clipwright-Contract";
13
- /**
14
- * Решение по одному полю входа.
15
- *
16
- * `implemented` — поле доезжает до вендора или до дерева композиции; `provenBy`
17
- * называет, ЧЕМ это доказано, и мета-тест требует наличия такого теста.
18
- * `rejected` — поле не работает и приниматься не должно: 400 на входе, до
19
- * создания рана и до резервирования кредитов.
20
- * `warned` — поле не работает, но отказ был бы хуже принятия (ломал бы
21
- * happy-path или дефолт), поэтому несоблюдение объявляется в `warnings[]`.
22
- *
23
- * `triggersWhen` существует потому, что часть полей объявлена с `.default()` и
24
- * после `parse` присутствует ВСЕГДА. Предикат «поле присутствует → warning»
25
- * выдавал бы предупреждение на каждом дефолтном happy-path — прямое нарушение
26
- * записанного в нашем же коде теста допустимости (`voices.ts`, условие (iii)).
27
- * Для полей с дефолтом предикат — `differs-from-default`, для чисто
28
- * опциональных — `present`.
29
- */
9
+ /** `implemented`: reaches the vendor or the composition tree; `rejected`: 400 before any run or reserve; */
10
+ /** `warned`: accepted with a `warnings[]` entry. `triggersWhen` keeps defaulted fields quiet on the happy path. */
30
11
  export type Disposition = {
31
12
  kind: "stored";
32
13
  message: string;
@@ -41,14 +22,8 @@ export type Disposition = {
41
22
  warning: string;
42
23
  triggersWhen: "present" | "differs-from-default";
43
24
  };
44
- /**
45
- * Таблица решений. `as const satisfies Record<…>` даёт СРАЗУ ДВА свойства:
46
- * `satisfies` — страж полноты (поле входа без строки здесь не компилируется),
47
- * `as const` — литеральные типы, из которых ниже выводится множество
48
- * отклонённых полей. Обычная аннотация `: Record<…>` дала бы только первое, и
49
- * `offeredUgcInputShape` пришлось бы перечислять руками — то есть завести
50
- * второй источник правды ровно там, где мы чиним последствия первого.
51
- */
25
+ /** `satisfies` guards completeness; `as const` keeps literal types, from which the rejected */
26
+ /** set is derived below instead of being listed by hand. */
52
27
  export declare const FIELD_DISPOSITIONS: {
53
28
  readonly script: {
54
29
  readonly kind: "implemented";
@@ -145,115 +120,46 @@ export declare const FIELD_DISPOSITIONS: {
145
120
  };
146
121
  };
147
122
  export type ContractField = keyof typeof FIELD_DISPOSITIONS;
148
- /**
149
- * Операционные переключатели, меняющие диспозицию поля БЕЗ правки кода.
150
- *
151
- * Смысл ровно один: погасить инцидент. Исходящая сетевая поверхность (проба
152
- * чужого `image`) выключается флагом, и тогда поле обязано ОТКЛОНЯТЬСЯ, а не
153
- * приниматься и тихо игнорироваться — иначе выключение килсвитча само стало бы
154
- * молчаливой подменой, то есть тем дефектом, который реестр и лечит. Запросы
155
- * БЕЗ `image` при этом продолжают рендериться на дефолтном актёре.
156
- */
123
+ /** Operational switches that change a field's disposition without a code change. A disabled */
124
+ /** switch must reject the field, not accept and ignore it. */
157
125
  export interface ContractFlags {
158
126
  remoteFetch: boolean;
159
- /** Стадия композиции (US-527, `CLIPWRIGHT_COMPOSE`). */
127
+ /** Composition stage (`CLIPWRIGHT_COMPOSE`). */
160
128
  compose: boolean;
161
- /** Генерация личных актёров (clipwright#120); отсутствие значит «выключено». */
129
+ /** Personal actor generation; absent means off. */
162
130
  actorGeneration?: boolean;
163
131
  longForm?: boolean;
164
132
  }
165
- /** `create_actor` открыт только вместе с фетч-поверхностью: без неё личного актёра не отрендерить. */
133
+ /** `create_actor` is open only with the fetch surface: a personal actor cannot render without it. */
166
134
  export declare function isActorGenerationEnabled(env?: Record<string, string | undefined>): boolean;
167
- /**
168
- * Значение флагов из окружения. Читается один раз на процесс: килсвитч ставится
169
- * на деплое, а не меняется от запроса к запросу, и `tools/list` не должен
170
- * дрожать между двумя соседними вызовами.
171
- */
135
+ /** Flags from the environment, read once per process: a kill switch is set at deploy, */
136
+ /** and `tools/list` must not flicker between calls. */
172
137
  export declare function contractFlagsFromEnv(env?: Record<string, string | undefined>): ContractFlags;
173
138
  export declare function isLongFormQualificationEnabled(env?: Record<string, string | undefined>): boolean;
174
139
  export declare const LONG_FORM_DISABLED_MESSAGE = "long-form qualification is disabled on this deployment; pass script without segments or inserts";
140
+ /** Dispositions with flags applied: the base table says what the code can do, this */
141
+ /** says what it offers right now. */
175
142
  export declare function resolveDispositions(flags: ContractFlags): Record<ContractField, Disposition>;
176
- /**
177
- * ДЕЙСТВУЮЩАЯ таблица процесса — то, из чего строятся все поверхности.
178
- *
179
- * Отличается от `FIELD_DISPOSITIONS` ровно на применённые флаги: базовая
180
- * таблица говорит, что код УМЕЕТ, эта — что он предлагает прямо сейчас.
181
- */
143
+ /** The process's effective table, from which every surface is built: `FIELD_DISPOSITIONS` */
144
+ /** with the flags applied. */
182
145
  export declare const EFFECTIVE_DISPOSITIONS: Record<"actor_gender" | "actor_id" | "aspect_ratio" | "background" | "broll_policy" | "broll_url" | "caption_style" | "captions" | "character" | "disclosure_overlay" | "image" | "inserts" | "look" | "name" | "person" | "resolution" | "script" | "segments" | "tts_model" | "voice" | "voice_id" | "webhook_url", Disposition>;
183
146
  type RejectedField = {
184
147
  [K in ContractField]: (typeof FIELD_DISPOSITIONS)[K]["kind"] extends "rejected" ? K : never;
185
148
  }[ContractField];
186
- /**
187
- * Множество предлагаемых полей считается по БАЗОВОЙ таблице — и на уровне
188
- * типов, и на уровне значения (см. примечание о топологии ниже). Килсвитч —
189
- * аварийное состояние сервера, а не форма контракта.
190
- */
149
+ /** Offered fields come from the base table, in types and values alike: a kill switch */
150
+ /** is a server emergency state, not the shape of the contract. */
191
151
  type OfferedField = Exclude<ContractField, RejectedField>;
192
- /**
193
- * Текст диспозиции для JSON-Schema `description` (блокер B9).
194
- *
195
- * ЗАЧЕМ: `offeredUgcInputShape` убирает отклонённое поле из схемы, но там, где
196
- * поле почему-либо остаётся видимым, вызыватель обязан прочитать ПРИЧИНУ прямо
197
- * в описании. Тогда самоописательность — свойство схемы по построению, а не
198
- * разовая правка двух файлов, которую следующее поле воспроизведёт заново.
199
- */
200
- /**
201
- * Примечание для JSON-Schema `description` — по БАЗОВОЙ таблице.
202
- *
203
- * Варианта «по действующей таблице» здесь нет НАМЕРЕННО, и это следствие
204
- * топологии: схему видит клиент, а флаги принадлежат серверу. Причину
205
- * аварийного отказа вызыватель узнаёт из текста 400, а не из описания поля,
206
- * которое у него в схеме и так осталось.
207
- */
152
+ /** Disposition note for the JSON Schema `description`, from the base table: the schema */
153
+ /** belongs to the client, the flags to the server, whose 400 text names emergency refusals. */
208
154
  export declare function dispositionNote(field: ContractField): string | null;
209
- /**
210
- * ПРИМЕЧАНИЕ О ТОПОЛОГИИ, БЕЗ КОТОРОГО ВЫБОР НИЖЕ ВЫГЛЯДИТ ПРОИЗВОЛЬНЫМ.
211
- *
212
- * `offeredUgcInputShape` порождает `tools/list` MCP-сервера, а MCP-сервер —
213
- * stdio-процесс НА МАШИНЕ ПОЛЬЗОВАТЕЛЯ, говорящий с нашим API по HTTP. Значит
214
- * его `process.env` — окружение КЛИЕНТА, а не сервера. Строй мы предлагаемую
215
- * поверхность по флагам, аварийный рубильник сервера начал бы управлять
216
- * клиентской схемой: у пользователя без `CLIPWRIGHT_REMOTE_FETCH` поле `image`
217
- * пропадало бы из `tools/list`, даже когда на сервере оно работает, — и
218
- * наоборот, выставив переменную у себя, клиент вернул бы поле в схему, а
219
- * сервер ответил бы 400.
220
- *
221
- * Поэтому граница проведена так:
222
- * - ЧТО ПРЕДЛАГАЕТСЯ (схема, типы SDK, `--help`) — из БАЗОВОЙ таблицы: это
223
- * форма контракта, одинаковая у всех;
224
- * - ЧТО ПРИНИМАЕТСЯ ПРЯМО СЕЙЧАС (`rejectedFields`, `dispositionWarnings`) —
225
- * из ДЕЙСТВУЮЩЕЙ: это решение сервера, и принимает его сервер.
226
- * Килсвитч остаётся аварийным отказом на входе API, а не правкой чужой схемы.
227
- */
228
- /**
229
- * Полный shape входа, где каждое несоблюдённое поле несёт причину в описании.
230
- * Нужен там, где поверхность обязана показать ВСЕ поля (например, таблица
231
- * диспозиций в доках); предлагать поля вызывателю следует не отсюда, а из
232
- * `offeredUgcInputShape`.
233
- */
155
+ /** Full input shape where every unhonored field carries its reason. For surfaces that list */
156
+ /** all fields; offer fields to callers from `offeredUgcInputShape` instead. */
234
157
  export declare const annotatedUgcInputShape: typeof makeUgcInputShape;
235
- /**
236
- * ПРЕДЛАГАЕМАЯ поверхность входа = полный shape МИНУС отклонённые поля
237
- * (блокер B4).
238
- *
239
- * Отбивать отклонённое поле четырёхсотым, продолжая объявлять его в
240
- * `tools/list`, в `--help` и в типах SDK, — это «предлагаем и наказываем»:
241
- * агент читает схему, видит `character`, вызывает и получает 400. Множество
242
- * выводится ИЗ РЕЕСТРА, поэтому смена диспозиции переносит поле между
243
- * поверхностями одной строкой, а не правкой каждого потребителя.
244
- */
158
+ /** Offered input surface = full shape minus rejected fields, so no schema offers a field */
159
+ /** that then gets a 400. Derived from the registry, so one line moves a field. */
245
160
  export declare const offeredUgcInputShape: Pick<typeof makeUgcInputShape, OfferedField>;
246
- /**
247
- * Тип ВХОДА для SDK/CLI/MCP — выводится из ПРЕДЛАГАЕМОГО shape, а не из
248
- * полного (блокер B4 на поверхности типов). Раньше он строился из полной схемы,
249
- * и TypeScript-пользователь получал автокомплит на `character`/`webhook_url`,
250
- * вызывал и получал 400 — тот же дефект «предлагаем и наказываем», только не в
251
- * MCP. По правилу проекта №2 типы SDK — контрактная поверхность наравне с
252
- * остальными.
253
- *
254
- * ЗАЧЕМ отдельно от `MakeUgcInput` (= выход `z.infer`, где дефолты уже
255
- * обязательны): без него SDK ждал бы полностью заполненный объект.
256
- */
161
+ /** Input type for SDK/CLI/MCP, from the offered shape. Separate from `MakeUgcInput` (the */
162
+ /** `z.infer` output, where defaults are required) so callers need not fill every field. */
257
163
  export declare const offeredUgcInput: z.ZodObject<{
258
164
  script: z.ZodOptional<z.ZodString>;
259
165
  segments: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -348,63 +254,32 @@ export declare const offeredUgcInput: z.ZodObject<{
348
254
  }>>;
349
255
  }, z.core.$strip>;
350
256
  export type MakeUgcInputArgs = z.input<typeof offeredUgcInput>;
351
- /** Одно отклонённое поле, найденное во входе: имя и причина отказа. */
257
+ /** One rejected field found in the input: its name and the refusal reason. */
352
258
  export interface RejectedFieldHit {
353
259
  field: ContractField;
354
260
  message: string;
355
261
  }
356
- /**
357
- * Отклонённые поля, ПРИСУТСТВУЮЩИЕ во входе. Один вызов — три поверхности:
358
- * зовётся на входе API (400 до создания рана и до резервирования кредитов), в
359
- * MCP и в SDK.
360
- */
262
+ /** Rejected fields present in the input. Called by the API (400 before a run or a */
263
+ /** reserve), by MCP and by the SDK. */
361
264
  export declare function rejectedFields(input: Readonly<Record<string, unknown>>): RejectedFieldHit[];
362
- /** Ключ тела вне контракта и поле, на которое он похож, если такое есть. */
265
+ /** A body key outside the contract and the field it resembles, if any. */
363
266
  export interface UnknownFieldHit {
364
267
  field: string;
365
268
  suggestion?: string | undefined;
366
269
  }
367
- /** Поля, которые предлагаются клиенту: отклонённые в перечень не входят. */
270
+ /** Fields offered to the client; rejected ones are not listed. */
368
271
  export declare const ACCEPTED_UGC_FIELDS: string[];
369
- /** Ключи вне перечня `fields` (по умолчанию — контракт). Отклонённые поля контракта */
370
- /** сюда не попадают — их называет `rejectedFields` своей причиной (clipwright#166). */
272
+ /** Keys outside `fields` (the contract by default). Rejected contract fields are not */
273
+ /** included: `rejectedFields` names them with their reason. */
371
274
  export declare function unknownFields(raw: unknown, fields?: readonly string[]): UnknownFieldHit[];
372
- /**
373
- * Warnings реестра для входа рана (правило проекта №3).
374
- *
375
- * Вход ожидается УЖЕ РАСПАРСЕННЫМ: дефолты подставлены, поэтому сравнение с
376
- * дефолтом различает «клиент промолчал» и «клиент явно попросил другое».
377
- * Сравнение через `===` достаточно: все дефолтные значения контракта —
378
- * примитивы (строка или булев).
379
- *
380
- * Это статические тексты диспозиций. ДИНАМИЧЕСКИЕ warnings (подмена
381
- * разрешения/формата, голосовые) порождаются именованными генераторами
382
- * (`negotiateCapabilities`, `buildVoiceWarnings`,
383
- * `RAW_VOICE_ID_VALIDATION_WARNING`) — каждый со своим тестом; реестр их не
384
- * поглощает и на них не претендует.
385
- */
275
+ /** Registry warnings for a parsed run input; defaults are filled in, so `===` tells silence */
276
+ /** from an explicit different value. Dynamic warnings come from their own generators. */
386
277
  export declare function dispositionWarnings(input: Readonly<Record<string, unknown>>): string[];
387
- /**
388
- * Поля с диспозицией `implemented` — вход мета-тестов покрытия.
389
- *
390
- * Считается по БАЗОВОЙ таблице, а не по действующей: доказательство относится к
391
- * КОДУ, и выключенный операционный килсвитч его не отменяет.
392
- */
278
+ /** Fields with an `implemented` disposition, input to the coverage meta-tests. From the */
279
+ /** base table: proof belongs to the code, and a disabled kill switch does not revoke it. */
393
280
  export declare const IMPLEMENTED_FIELDS: ContractField[];
394
- /**
395
- * ДВА РОДА ДОКАЗАТЕЛЬСТВА, И ОНИ НЕ ВЗАИМОЗАМЕНЯЕМЫ (US-527).
396
- *
397
- * До этой стори `implemented` означало ровно одно: «поле доезжает до вендора»,
398
- * и мета-тест сверял весь список с egress-покрытием. Композиция ввела второй
399
- * род: `background` до вендора не доезжает НИКОГДА — он применяется у нас, уже
400
- * после того как вендор отдал клип. Сверять его egress-тестом бессмысленно,
401
- * а записать в тот же список — значит либо получить вечно красный мета-тест,
402
- * либо ослабить его до бесполезности.
403
- *
404
- * Поэтому список разделён по `provenBy`, и у каждого рода — свой мета-тест:
405
- * egress-поля сверяются с захватом исходящих запросов, композиционные — с
406
- * тестами стадии композиции.
407
- */
281
+ /** Two kinds of proof, not interchangeable: egress fields are checked against captured */
282
+ /** outgoing requests, composition fields (applied after the vendor) against composition tests. */
408
283
  export declare const EGRESS_PROVEN_FIELDS: ContractField[];
409
284
  export declare const COMPOSITION_PROVEN_FIELDS: ContractField[];
410
285
  export {};