devcontour-harness 0.1.0-alpha.13 → 0.1.0-alpha.18
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/README.md +48 -2
- package/docs/architecture.md +77 -3
- package/docs/contracts.md +100 -0
- package/docs/quickstart.md +1 -1
- package/docs/release-notes/0.1.0-alpha.14.md +69 -0
- package/docs/release-notes/0.1.0-alpha.15.md +62 -0
- package/docs/release-notes/0.1.0-alpha.16.md +36 -0
- package/docs/release-notes/0.1.0-alpha.17.md +86 -0
- package/docs/release-notes/0.1.0-alpha.18.md +48 -0
- package/docs/review-probes.md +9 -3
- package/docs/review-protocol.md +9 -0
- package/docs/upgrade.md +16 -14
- package/lib/agents/cli-adapter.js +14 -10
- package/lib/agents/review-probe.d.ts +9 -0
- package/lib/agents/review-probe.js +23 -1
- package/lib/agents/schemas.d.ts +206 -0
- package/lib/agents/schemas.js +37 -1
- package/lib/agents/usage.d.ts +22 -0
- package/lib/agents/usage.js +112 -6
- package/lib/contracts/checks.d.ts +119 -0
- package/lib/contracts/checks.js +64 -1
- package/lib/contracts/cli.d.ts +30 -0
- package/lib/contracts/diagnosis.d.ts +3 -1
- package/lib/contracts/diagnosis.js +2 -0
- package/lib/contracts/events.d.ts +12 -0
- package/lib/contracts/execution.d.ts +109 -5
- package/lib/contracts/execution.js +58 -0
- package/lib/contracts/failure.d.ts +17 -3
- package/lib/contracts/failure.js +4 -2
- package/lib/contracts/published.d.ts +67 -1
- package/lib/contracts/repair-policy.d.ts +7 -0
- package/lib/contracts/repair-policy.js +17 -0
- package/lib/contracts/review.d.ts +12 -0
- package/lib/contracts/review.js +19 -0
- package/lib/control/harness.d.ts +2 -2
- package/lib/control/harness.js +2 -1
- package/lib/control/recovery.d.ts +26 -1
- package/lib/engine/engine.d.ts +41 -14
- package/lib/engine/engine.js +92 -8
- package/lib/engine/failure.d.ts +1 -1
- package/lib/engine/failure.js +1 -1
- package/lib/engine/property-recovery.d.ts +1 -0
- package/lib/engine/property-recovery.js +4 -1
- package/lib/engine/repair.d.ts +26 -0
- package/lib/engine/repair.js +83 -1
- package/lib/engine/runner.d.ts +7 -0
- package/lib/engine/runner.js +207 -34
- package/lib/explain/state.js +4 -2
- package/lib/index.d.ts +6 -4
- package/lib/index.js +6 -4
- package/lib/projections/stop.d.ts +1 -1
- package/lib/projections/stop.js +16 -0
- package/lib/storage/document.d.ts +48 -8
- package/lib/verification/acceptance.js +2 -1
- package/lib/verification/already-satisfied.d.ts +44 -0
- package/lib/verification/already-satisfied.js +49 -0
- package/lib/verification/checks.d.ts +28 -0
- package/lib/verification/checks.js +270 -22
- package/lib/verification/corpus.d.ts +50 -0
- package/lib/verification/gate-scope.d.ts +36 -0
- package/lib/verification/gate-scope.js +97 -0
- package/lib/verification/gates-at.d.ts +67 -0
- package/lib/verification/gates-at.js +173 -0
- package/lib/verification/gates.d.ts +5 -0
- package/lib/verification/gates.js +20 -5
- package/lib/verification/property.d.ts +9 -0
- package/lib/verification/property.js +11 -2
- package/lib/verification/self-check.js +12 -12
- package/package.json +1 -1
- package/schemas/contract-document.schema.json +161 -0
- package/schemas/execution-document.schema.json +134 -0
- package/schemas/run-event.schema.json +4 -0
- package/schemas/stop-diagnosis.schema.json +2 -0
package/lib/agents/usage.js
CHANGED
|
@@ -69,15 +69,121 @@ export function runtimeVersion(executable, env) {
|
|
|
69
69
|
.catch(() => null));
|
|
70
70
|
return versions.get(key);
|
|
71
71
|
}
|
|
72
|
+
/** Модель события runtime: событие system у claude, ключи modelUsage у codex. */
|
|
73
|
+
function eventModel(event) {
|
|
74
|
+
if (typeof event.model === 'string' && event.model && event.model !== '<synthetic>')
|
|
75
|
+
return event.model;
|
|
76
|
+
const usage = event.modelUsage;
|
|
77
|
+
const [name] = Object.keys(usage ?? {});
|
|
78
|
+
return name ?? null;
|
|
79
|
+
}
|
|
72
80
|
/** Модель, которую runtime выбрал на самом деле: событие system у claude, ключи modelUsage у codex. */
|
|
73
81
|
export function reportedModel(stdout) {
|
|
74
82
|
for (const event of runtimeEvents(stdout).events) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const [name] = Object.keys(usage ?? {});
|
|
79
|
-
if (name)
|
|
80
|
-
return name;
|
|
83
|
+
const model = eventModel(event);
|
|
84
|
+
if (model)
|
|
85
|
+
return model;
|
|
81
86
|
}
|
|
82
87
|
return null;
|
|
83
88
|
}
|
|
89
|
+
/** Строка потока длиннее — не разбирается и делает телеметрию неполной. */
|
|
90
|
+
export const LINE_LIMIT = 8_000_000;
|
|
91
|
+
/**
|
|
92
|
+
* Только числовые поля верхнего уровня `usage`: вложенная структура любой
|
|
93
|
+
* глубины не хранится и не сериализуется (глубокая вложенность роняла бы
|
|
94
|
+
* `JSON.stringify` в обработчике вывода процесса).
|
|
95
|
+
*/
|
|
96
|
+
const flatUsage = (usage) => usage && typeof usage === 'object' && !Array.isArray(usage)
|
|
97
|
+
? Object.fromEntries(Object.entries(usage).filter(([, v]) => typeof v === 'number' || v === null))
|
|
98
|
+
: usage === undefined
|
|
99
|
+
? undefined
|
|
100
|
+
: {};
|
|
101
|
+
/**
|
|
102
|
+
* Телеметрия, собранная по ходу потока runtime, а не из хвоста вывода. Хвост
|
|
103
|
+
* stdout и журнал вызова ограничены, и у долгого вызова итоговое событие
|
|
104
|
+
* `result` (стоимость и счётчики claude) или ранние `turn.completed` codex
|
|
105
|
+
* оказывались за пределом: стоимость, сообщённая провайдером, терялась или
|
|
106
|
+
* учитывалась неполной. Здесь каждая строка разбирается сразу; хранятся
|
|
107
|
+
* только поля телеметрии — последнее событие `result`, события
|
|
108
|
+
* `turn.completed` и первая сообщённая модель, — а не текст вывода.
|
|
109
|
+
*/
|
|
110
|
+
export function usageStream(runtime) {
|
|
111
|
+
let partial = '', overflow = false, malformed = false, model = null, result;
|
|
112
|
+
const turns = [];
|
|
113
|
+
const line = (text) => {
|
|
114
|
+
if (!text.trim())
|
|
115
|
+
return;
|
|
116
|
+
let event;
|
|
117
|
+
try {
|
|
118
|
+
event = JSON.parse(text);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
malformed = true;
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (!event || typeof event !== 'object' || Array.isArray(event)) {
|
|
125
|
+
malformed = true;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const e = event;
|
|
129
|
+
model ??= eventModel(e);
|
|
130
|
+
if (runtime === 'claude' && e.type === 'result')
|
|
131
|
+
result = JSON.stringify({
|
|
132
|
+
type: e.type,
|
|
133
|
+
usage: flatUsage(e.usage),
|
|
134
|
+
total_cost_usd: typeof e.total_cost_usd === 'number' ? e.total_cost_usd : null,
|
|
135
|
+
});
|
|
136
|
+
if (runtime === 'codex' && e.type === 'turn.completed')
|
|
137
|
+
turns.push(JSON.stringify({ type: e.type, usage: flatUsage(e.usage) }));
|
|
138
|
+
};
|
|
139
|
+
const flush = () => {
|
|
140
|
+
if (overflow)
|
|
141
|
+
malformed = true;
|
|
142
|
+
else
|
|
143
|
+
line(partial);
|
|
144
|
+
partial = '';
|
|
145
|
+
overflow = false;
|
|
146
|
+
};
|
|
147
|
+
const append = (piece) => {
|
|
148
|
+
if (overflow)
|
|
149
|
+
return;
|
|
150
|
+
if (partial.length + piece.length > LINE_LIMIT) {
|
|
151
|
+
partial = '';
|
|
152
|
+
overflow = true;
|
|
153
|
+
}
|
|
154
|
+
else
|
|
155
|
+
partial += piece;
|
|
156
|
+
};
|
|
157
|
+
const consume = (text) => {
|
|
158
|
+
let start = 0;
|
|
159
|
+
for (let end = text.indexOf('\n'); end >= 0; end = text.indexOf('\n', start)) {
|
|
160
|
+
append(text.slice(start, end));
|
|
161
|
+
flush();
|
|
162
|
+
start = end + 1;
|
|
163
|
+
}
|
|
164
|
+
append(text.slice(start));
|
|
165
|
+
};
|
|
166
|
+
return {
|
|
167
|
+
/**
|
|
168
|
+
* Очередной фрагмент stdout runtime (без маски: берутся только числа).
|
|
169
|
+
* Вызывается из обработчика вывода процесса и не бросает: сбой разбора —
|
|
170
|
+
* неполная телеметрия, а не падение controller.
|
|
171
|
+
*/
|
|
172
|
+
push(text) {
|
|
173
|
+
try {
|
|
174
|
+
consume(text);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
malformed = true;
|
|
178
|
+
partial = '';
|
|
179
|
+
overflow = true;
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
/** Телеметрия всего потока; `completed` — вызов завершился штатно. */
|
|
183
|
+
usage(completed) {
|
|
184
|
+
flush();
|
|
185
|
+
return parseUsage(runtime, [...turns, ...(result ? [result] : [])].join('\n'), completed && !malformed);
|
|
186
|
+
},
|
|
187
|
+
model: () => model,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
@@ -2,6 +2,41 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const promiseKinds: readonly ["functional", "accuracy", "optimality", "completeness", "performance", "invariant", "other"];
|
|
3
3
|
/** Вычислительные обещания: без независимого способа проверки их не утверждают. */
|
|
4
4
|
export declare const strongPromises: ReadonlySet<string>;
|
|
5
|
+
/**
|
|
6
|
+
* Проверка по закреплённым эталонным наборам (`verification: 'reference'`).
|
|
7
|
+
*
|
|
8
|
+
* Ответы независимого эталона (решатель, полный перебор, таблица DP)
|
|
9
|
+
* получены заранее, сверены с другим способом на семействах входов и
|
|
10
|
+
* закреплены артефактами контракта. Gate сверяет реализацию с наборами и
|
|
11
|
+
* отчитывается тем же отчётом свойств: число проверенных входов по свойству
|
|
12
|
+
* и по семействам. Каждый набор принадлежит одному gate: его минимум и
|
|
13
|
+
* минимумы семейств — доля этого gate в покрытии обязательства. Обобщения за
|
|
14
|
+
* пределы наборов такой способ не доказывает — это называет `gaps`.
|
|
15
|
+
*/
|
|
16
|
+
export declare const referenceSchema: z.ZodObject<{
|
|
17
|
+
oracle: z.ZodObject<{
|
|
18
|
+
description: z.ZodString;
|
|
19
|
+
limits: z.ZodString;
|
|
20
|
+
}, z.core.$strict>;
|
|
21
|
+
crossChecks: z.ZodArray<z.ZodObject<{
|
|
22
|
+
family: z.ZodString;
|
|
23
|
+
against: z.ZodString;
|
|
24
|
+
matches: z.ZodNumber;
|
|
25
|
+
total: z.ZodNumber;
|
|
26
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
27
|
+
}, z.core.$strict>>;
|
|
28
|
+
sets: z.ZodArray<z.ZodObject<{
|
|
29
|
+
gate: z.ZodString;
|
|
30
|
+
artifacts: z.ZodArray<z.ZodString>;
|
|
31
|
+
minCases: z.ZodNumber;
|
|
32
|
+
families: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
33
|
+
id: z.ZodString;
|
|
34
|
+
minCases: z.ZodNumber;
|
|
35
|
+
}, z.core.$strict>>>;
|
|
36
|
+
}, z.core.$strict>>;
|
|
37
|
+
gaps: z.ZodString;
|
|
38
|
+
}, z.core.$strict>;
|
|
39
|
+
export type ReferenceVerification = z.infer<typeof referenceSchema>;
|
|
5
40
|
export declare const obligationSchema: z.ZodObject<{
|
|
6
41
|
property: z.ZodString;
|
|
7
42
|
requirements: z.ZodArray<z.ZodString>;
|
|
@@ -63,6 +98,34 @@ export declare const obligationSchema: z.ZodObject<{
|
|
|
63
98
|
environment: z.ZodString;
|
|
64
99
|
}, z.core.$strict>>;
|
|
65
100
|
}, z.core.$strict>;
|
|
101
|
+
gates: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
102
|
+
verification: z.ZodOptional<z.ZodEnum<{
|
|
103
|
+
property: "property";
|
|
104
|
+
reference: "reference";
|
|
105
|
+
}>>;
|
|
106
|
+
reference: z.ZodOptional<z.ZodObject<{
|
|
107
|
+
oracle: z.ZodObject<{
|
|
108
|
+
description: z.ZodString;
|
|
109
|
+
limits: z.ZodString;
|
|
110
|
+
}, z.core.$strict>;
|
|
111
|
+
crossChecks: z.ZodArray<z.ZodObject<{
|
|
112
|
+
family: z.ZodString;
|
|
113
|
+
against: z.ZodString;
|
|
114
|
+
matches: z.ZodNumber;
|
|
115
|
+
total: z.ZodNumber;
|
|
116
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
117
|
+
}, z.core.$strict>>;
|
|
118
|
+
sets: z.ZodArray<z.ZodObject<{
|
|
119
|
+
gate: z.ZodString;
|
|
120
|
+
artifacts: z.ZodArray<z.ZodString>;
|
|
121
|
+
minCases: z.ZodNumber;
|
|
122
|
+
families: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
123
|
+
id: z.ZodString;
|
|
124
|
+
minCases: z.ZodNumber;
|
|
125
|
+
}, z.core.$strict>>>;
|
|
126
|
+
}, z.core.$strict>>;
|
|
127
|
+
gaps: z.ZodString;
|
|
128
|
+
}, z.core.$strict>>;
|
|
66
129
|
hard: z.ZodDefault<z.ZodBoolean>;
|
|
67
130
|
feasibility: z.ZodOptional<z.ZodObject<{
|
|
68
131
|
spike: z.ZodString;
|
|
@@ -134,6 +197,34 @@ export declare const checkDeclarationSchema: z.ZodObject<{
|
|
|
134
197
|
environment: z.ZodString;
|
|
135
198
|
}, z.core.$strict>>;
|
|
136
199
|
}, z.core.$strict>;
|
|
200
|
+
gates: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
201
|
+
verification: z.ZodOptional<z.ZodEnum<{
|
|
202
|
+
property: "property";
|
|
203
|
+
reference: "reference";
|
|
204
|
+
}>>;
|
|
205
|
+
reference: z.ZodOptional<z.ZodObject<{
|
|
206
|
+
oracle: z.ZodObject<{
|
|
207
|
+
description: z.ZodString;
|
|
208
|
+
limits: z.ZodString;
|
|
209
|
+
}, z.core.$strict>;
|
|
210
|
+
crossChecks: z.ZodArray<z.ZodObject<{
|
|
211
|
+
family: z.ZodString;
|
|
212
|
+
against: z.ZodString;
|
|
213
|
+
matches: z.ZodNumber;
|
|
214
|
+
total: z.ZodNumber;
|
|
215
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
216
|
+
}, z.core.$strict>>;
|
|
217
|
+
sets: z.ZodArray<z.ZodObject<{
|
|
218
|
+
gate: z.ZodString;
|
|
219
|
+
artifacts: z.ZodArray<z.ZodString>;
|
|
220
|
+
minCases: z.ZodNumber;
|
|
221
|
+
families: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
222
|
+
id: z.ZodString;
|
|
223
|
+
minCases: z.ZodNumber;
|
|
224
|
+
}, z.core.$strict>>>;
|
|
225
|
+
}, z.core.$strict>>;
|
|
226
|
+
gaps: z.ZodString;
|
|
227
|
+
}, z.core.$strict>>;
|
|
137
228
|
hard: z.ZodDefault<z.ZodBoolean>;
|
|
138
229
|
feasibility: z.ZodOptional<z.ZodObject<{
|
|
139
230
|
spike: z.ZodString;
|
|
@@ -233,6 +324,34 @@ export declare const contractDocumentSchema: z.ZodObject<{
|
|
|
233
324
|
environment: z.ZodString;
|
|
234
325
|
}, z.core.$strict>>;
|
|
235
326
|
}, z.core.$strict>;
|
|
327
|
+
gates: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
328
|
+
verification: z.ZodOptional<z.ZodEnum<{
|
|
329
|
+
property: "property";
|
|
330
|
+
reference: "reference";
|
|
331
|
+
}>>;
|
|
332
|
+
reference: z.ZodOptional<z.ZodObject<{
|
|
333
|
+
oracle: z.ZodObject<{
|
|
334
|
+
description: z.ZodString;
|
|
335
|
+
limits: z.ZodString;
|
|
336
|
+
}, z.core.$strict>;
|
|
337
|
+
crossChecks: z.ZodArray<z.ZodObject<{
|
|
338
|
+
family: z.ZodString;
|
|
339
|
+
against: z.ZodString;
|
|
340
|
+
matches: z.ZodNumber;
|
|
341
|
+
total: z.ZodNumber;
|
|
342
|
+
artifacts: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
343
|
+
}, z.core.$strict>>;
|
|
344
|
+
sets: z.ZodArray<z.ZodObject<{
|
|
345
|
+
gate: z.ZodString;
|
|
346
|
+
artifacts: z.ZodArray<z.ZodString>;
|
|
347
|
+
minCases: z.ZodNumber;
|
|
348
|
+
families: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
349
|
+
id: z.ZodString;
|
|
350
|
+
minCases: z.ZodNumber;
|
|
351
|
+
}, z.core.$strict>>>;
|
|
352
|
+
}, z.core.$strict>>;
|
|
353
|
+
gaps: z.ZodString;
|
|
354
|
+
}, z.core.$strict>>;
|
|
236
355
|
hard: z.ZodDefault<z.ZodBoolean>;
|
|
237
356
|
feasibility: z.ZodOptional<z.ZodObject<{
|
|
238
357
|
spike: z.ZodString;
|
package/lib/contracts/checks.js
CHANGED
|
@@ -31,6 +31,57 @@ export const strongPromises = new Set([
|
|
|
31
31
|
'completeness',
|
|
32
32
|
'performance',
|
|
33
33
|
]);
|
|
34
|
+
/**
|
|
35
|
+
* Проверка по закреплённым эталонным наборам (`verification: 'reference'`).
|
|
36
|
+
*
|
|
37
|
+
* Ответы независимого эталона (решатель, полный перебор, таблица DP)
|
|
38
|
+
* получены заранее, сверены с другим способом на семействах входов и
|
|
39
|
+
* закреплены артефактами контракта. Gate сверяет реализацию с наборами и
|
|
40
|
+
* отчитывается тем же отчётом свойств: число проверенных входов по свойству
|
|
41
|
+
* и по семействам. Каждый набор принадлежит одному gate: его минимум и
|
|
42
|
+
* минимумы семейств — доля этого gate в покрытии обязательства. Обобщения за
|
|
43
|
+
* пределы наборов такой способ не доказывает — это называет `gaps`.
|
|
44
|
+
*/
|
|
45
|
+
export const referenceSchema = z.strictObject({
|
|
46
|
+
/** Эталон и его пределы: версия, предел времени, что исключено из наборов. */
|
|
47
|
+
oracle: z.strictObject({ description: text(), limits: text() }),
|
|
48
|
+
/** Сверка эталона с другим способом: семейство, способ, совпало из всего. */
|
|
49
|
+
crossChecks: z
|
|
50
|
+
.array(z.strictObject({
|
|
51
|
+
family: text(200),
|
|
52
|
+
against: text(500),
|
|
53
|
+
matches: z.number().int().min(0).max(100_000_000),
|
|
54
|
+
total: z.number().int().min(1).max(100_000_000),
|
|
55
|
+
/**
|
|
56
|
+
* Закреплённые файлы, воспроизводящие сверку (скрипт, журнал) — среди
|
|
57
|
+
* артефактов контракта. Без них числа — утверждение автора.
|
|
58
|
+
*/
|
|
59
|
+
artifacts: z.array(relativePathSchema).min(1).max(10).optional(),
|
|
60
|
+
}))
|
|
61
|
+
.min(1)
|
|
62
|
+
.max(10),
|
|
63
|
+
sets: z
|
|
64
|
+
.array(z.strictObject({
|
|
65
|
+
/** Gate, который сверяет реализацию с этим набором. */
|
|
66
|
+
gate: idSchema,
|
|
67
|
+
/** Файлы набора — среди артефактов контракта. */
|
|
68
|
+
artifacts: z.array(relativePathSchema).min(1).max(10),
|
|
69
|
+
/** Сколько входов набора gate обязан проверить за прогон. */
|
|
70
|
+
minCases: z.number().int().min(1).max(1_000_000),
|
|
71
|
+
/** Доля семейств покрытия обязательства в этом наборе. */
|
|
72
|
+
families: z
|
|
73
|
+
.array(z.strictObject({
|
|
74
|
+
id: familyIdSchema,
|
|
75
|
+
minCases: z.number().int().min(1).max(1_000_000),
|
|
76
|
+
}))
|
|
77
|
+
.max(20)
|
|
78
|
+
.default([]),
|
|
79
|
+
}))
|
|
80
|
+
.min(1)
|
|
81
|
+
.max(20),
|
|
82
|
+
/** Чего наборы не доказывают: обобщение за пределы входов, классы вне наборов. */
|
|
83
|
+
gaps: text(),
|
|
84
|
+
});
|
|
34
85
|
export const obligationSchema = z.strictObject({
|
|
35
86
|
property: propertyIdSchema,
|
|
36
87
|
/** Существующие требования или критерии приёмки, которые обязательство уточняет. */
|
|
@@ -79,6 +130,15 @@ export const obligationSchema = z.strictObject({
|
|
|
79
130
|
oracle: text(),
|
|
80
131
|
benchmark: z.strictObject({ method: text(), environment: text() }).optional(),
|
|
81
132
|
}),
|
|
133
|
+
/**
|
|
134
|
+
* Gates, исполняющие обязательство; без поля — gate договора. У
|
|
135
|
+
* генеративного обязательства каждый из них проверяет полное покрытие, у
|
|
136
|
+
* эталонного — свои наборы.
|
|
137
|
+
*/
|
|
138
|
+
gates: z.array(idSchema).min(1).max(10).optional(),
|
|
139
|
+
/** Способ исполнения: `property` (без поля) — генератор; `reference` — эталонные наборы. */
|
|
140
|
+
verification: z.enum(['property', 'reference']).optional(),
|
|
141
|
+
reference: referenceSchema.optional(),
|
|
82
142
|
/** Тяжёлый точный алгоритм или жёсткое время: до реализации нужен ограниченный эксперимент. */
|
|
83
143
|
hard: z.boolean().default(false),
|
|
84
144
|
feasibility: z
|
|
@@ -90,7 +150,10 @@ export const obligationSchema = z.strictObject({
|
|
|
90
150
|
});
|
|
91
151
|
export const checkDeclarationSchema = z.strictObject({
|
|
92
152
|
version: z.literal(1),
|
|
93
|
-
/**
|
|
153
|
+
/**
|
|
154
|
+
* Gate проверки по умолчанию: исполняет обязательства без своих `gates`
|
|
155
|
+
* (генеративный, с закреплённым checker).
|
|
156
|
+
*/
|
|
94
157
|
gate: idSchema,
|
|
95
158
|
obligations: z.array(obligationSchema).min(1).max(30),
|
|
96
159
|
/**
|
package/lib/contracts/cli.d.ts
CHANGED
|
@@ -492,10 +492,12 @@ export declare const statusDataSchema: z.ZodObject<{
|
|
|
492
492
|
"provider-auth": "provider-auth";
|
|
493
493
|
"stale-base": "stale-base";
|
|
494
494
|
"empty-result": "empty-result";
|
|
495
|
+
unfinished: "unfinished";
|
|
495
496
|
"scope-violation": "scope-violation";
|
|
496
497
|
"review-protocol": "review-protocol";
|
|
497
498
|
merge: "merge";
|
|
498
499
|
budget: "budget";
|
|
500
|
+
"needs-lead": "needs-lead";
|
|
499
501
|
}>>>;
|
|
500
502
|
waits: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
501
503
|
kind: z.ZodEnum<{
|
|
@@ -734,10 +736,12 @@ export declare const eventsDataSchema: z.ZodObject<{
|
|
|
734
736
|
"provider-auth": "provider-auth";
|
|
735
737
|
"stale-base": "stale-base";
|
|
736
738
|
"empty-result": "empty-result";
|
|
739
|
+
unfinished: "unfinished";
|
|
737
740
|
"scope-violation": "scope-violation";
|
|
738
741
|
"review-protocol": "review-protocol";
|
|
739
742
|
merge: "merge";
|
|
740
743
|
budget: "budget";
|
|
744
|
+
"needs-lead": "needs-lead";
|
|
741
745
|
}>;
|
|
742
746
|
message: z.ZodString;
|
|
743
747
|
blocked: z.ZodBoolean;
|
|
@@ -773,10 +777,12 @@ export declare const eventsDataSchema: z.ZodObject<{
|
|
|
773
777
|
"provider-auth": "provider-auth";
|
|
774
778
|
"stale-base": "stale-base";
|
|
775
779
|
"empty-result": "empty-result";
|
|
780
|
+
unfinished: "unfinished";
|
|
776
781
|
"scope-violation": "scope-violation";
|
|
777
782
|
"review-protocol": "review-protocol";
|
|
778
783
|
merge: "merge";
|
|
779
784
|
budget: "budget";
|
|
785
|
+
"needs-lead": "needs-lead";
|
|
780
786
|
}>>>;
|
|
781
787
|
}, z.core.$strict> | z.ZodObject<{
|
|
782
788
|
reason: z.ZodEnum<{
|
|
@@ -985,10 +991,12 @@ export declare const eventsDataSchema: z.ZodObject<{
|
|
|
985
991
|
"provider-auth": "provider-auth";
|
|
986
992
|
"stale-base": "stale-base";
|
|
987
993
|
"empty-result": "empty-result";
|
|
994
|
+
unfinished: "unfinished";
|
|
988
995
|
"scope-violation": "scope-violation";
|
|
989
996
|
"review-protocol": "review-protocol";
|
|
990
997
|
merge: "merge";
|
|
991
998
|
budget: "budget";
|
|
999
|
+
"needs-lead": "needs-lead";
|
|
992
1000
|
}>;
|
|
993
1001
|
message: z.ZodString;
|
|
994
1002
|
blocked: z.ZodBoolean;
|
|
@@ -1024,10 +1032,12 @@ export declare const eventsDataSchema: z.ZodObject<{
|
|
|
1024
1032
|
"provider-auth": "provider-auth";
|
|
1025
1033
|
"stale-base": "stale-base";
|
|
1026
1034
|
"empty-result": "empty-result";
|
|
1035
|
+
unfinished: "unfinished";
|
|
1027
1036
|
"scope-violation": "scope-violation";
|
|
1028
1037
|
"review-protocol": "review-protocol";
|
|
1029
1038
|
merge: "merge";
|
|
1030
1039
|
budget: "budget";
|
|
1040
|
+
"needs-lead": "needs-lead";
|
|
1031
1041
|
}>>>;
|
|
1032
1042
|
}, z.core.$strict> | z.ZodObject<{
|
|
1033
1043
|
reason: z.ZodEnum<{
|
|
@@ -1242,10 +1252,12 @@ export declare const controlDataSchema: z.ZodObject<{
|
|
|
1242
1252
|
"provider-auth": "provider-auth";
|
|
1243
1253
|
"stale-base": "stale-base";
|
|
1244
1254
|
"empty-result": "empty-result";
|
|
1255
|
+
unfinished: "unfinished";
|
|
1245
1256
|
"scope-violation": "scope-violation";
|
|
1246
1257
|
"review-protocol": "review-protocol";
|
|
1247
1258
|
merge: "merge";
|
|
1248
1259
|
budget: "budget";
|
|
1260
|
+
"needs-lead": "needs-lead";
|
|
1249
1261
|
}>>>;
|
|
1250
1262
|
waits: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
1251
1263
|
kind: z.ZodEnum<{
|
|
@@ -1881,10 +1893,12 @@ export declare const explainDataSchema: z.ZodObject<{
|
|
|
1881
1893
|
"provider-auth": "provider-auth";
|
|
1882
1894
|
"stale-base": "stale-base";
|
|
1883
1895
|
"empty-result": "empty-result";
|
|
1896
|
+
unfinished: "unfinished";
|
|
1884
1897
|
"scope-violation": "scope-violation";
|
|
1885
1898
|
"review-protocol": "review-protocol";
|
|
1886
1899
|
merge: "merge";
|
|
1887
1900
|
budget: "budget";
|
|
1901
|
+
"needs-lead": "needs-lead";
|
|
1888
1902
|
"runtime-missing": "runtime-missing";
|
|
1889
1903
|
"controller-busy": "controller-busy";
|
|
1890
1904
|
"operator-pause": "operator-pause";
|
|
@@ -2153,10 +2167,12 @@ export declare const cliDataSchemas: {
|
|
|
2153
2167
|
"provider-auth": "provider-auth";
|
|
2154
2168
|
"stale-base": "stale-base";
|
|
2155
2169
|
"empty-result": "empty-result";
|
|
2170
|
+
unfinished: "unfinished";
|
|
2156
2171
|
"scope-violation": "scope-violation";
|
|
2157
2172
|
"review-protocol": "review-protocol";
|
|
2158
2173
|
merge: "merge";
|
|
2159
2174
|
budget: "budget";
|
|
2175
|
+
"needs-lead": "needs-lead";
|
|
2160
2176
|
}>>>;
|
|
2161
2177
|
waits: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
2162
2178
|
kind: z.ZodEnum<{
|
|
@@ -2395,10 +2411,12 @@ export declare const cliDataSchemas: {
|
|
|
2395
2411
|
"provider-auth": "provider-auth";
|
|
2396
2412
|
"stale-base": "stale-base";
|
|
2397
2413
|
"empty-result": "empty-result";
|
|
2414
|
+
unfinished: "unfinished";
|
|
2398
2415
|
"scope-violation": "scope-violation";
|
|
2399
2416
|
"review-protocol": "review-protocol";
|
|
2400
2417
|
merge: "merge";
|
|
2401
2418
|
budget: "budget";
|
|
2419
|
+
"needs-lead": "needs-lead";
|
|
2402
2420
|
}>;
|
|
2403
2421
|
message: z.ZodString;
|
|
2404
2422
|
blocked: z.ZodBoolean;
|
|
@@ -2434,10 +2452,12 @@ export declare const cliDataSchemas: {
|
|
|
2434
2452
|
"provider-auth": "provider-auth";
|
|
2435
2453
|
"stale-base": "stale-base";
|
|
2436
2454
|
"empty-result": "empty-result";
|
|
2455
|
+
unfinished: "unfinished";
|
|
2437
2456
|
"scope-violation": "scope-violation";
|
|
2438
2457
|
"review-protocol": "review-protocol";
|
|
2439
2458
|
merge: "merge";
|
|
2440
2459
|
budget: "budget";
|
|
2460
|
+
"needs-lead": "needs-lead";
|
|
2441
2461
|
}>>>;
|
|
2442
2462
|
}, z.core.$strict> | z.ZodObject<{
|
|
2443
2463
|
reason: z.ZodEnum<{
|
|
@@ -2646,10 +2666,12 @@ export declare const cliDataSchemas: {
|
|
|
2646
2666
|
"provider-auth": "provider-auth";
|
|
2647
2667
|
"stale-base": "stale-base";
|
|
2648
2668
|
"empty-result": "empty-result";
|
|
2669
|
+
unfinished: "unfinished";
|
|
2649
2670
|
"scope-violation": "scope-violation";
|
|
2650
2671
|
"review-protocol": "review-protocol";
|
|
2651
2672
|
merge: "merge";
|
|
2652
2673
|
budget: "budget";
|
|
2674
|
+
"needs-lead": "needs-lead";
|
|
2653
2675
|
}>;
|
|
2654
2676
|
message: z.ZodString;
|
|
2655
2677
|
blocked: z.ZodBoolean;
|
|
@@ -2685,10 +2707,12 @@ export declare const cliDataSchemas: {
|
|
|
2685
2707
|
"provider-auth": "provider-auth";
|
|
2686
2708
|
"stale-base": "stale-base";
|
|
2687
2709
|
"empty-result": "empty-result";
|
|
2710
|
+
unfinished: "unfinished";
|
|
2688
2711
|
"scope-violation": "scope-violation";
|
|
2689
2712
|
"review-protocol": "review-protocol";
|
|
2690
2713
|
merge: "merge";
|
|
2691
2714
|
budget: "budget";
|
|
2715
|
+
"needs-lead": "needs-lead";
|
|
2692
2716
|
}>>>;
|
|
2693
2717
|
}, z.core.$strict> | z.ZodObject<{
|
|
2694
2718
|
reason: z.ZodEnum<{
|
|
@@ -2820,10 +2844,12 @@ export declare const cliDataSchemas: {
|
|
|
2820
2844
|
"provider-auth": "provider-auth";
|
|
2821
2845
|
"stale-base": "stale-base";
|
|
2822
2846
|
"empty-result": "empty-result";
|
|
2847
|
+
unfinished: "unfinished";
|
|
2823
2848
|
"scope-violation": "scope-violation";
|
|
2824
2849
|
"review-protocol": "review-protocol";
|
|
2825
2850
|
merge: "merge";
|
|
2826
2851
|
budget: "budget";
|
|
2852
|
+
"needs-lead": "needs-lead";
|
|
2827
2853
|
}>>>;
|
|
2828
2854
|
waits: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
2829
2855
|
kind: z.ZodEnum<{
|
|
@@ -2873,10 +2899,12 @@ export declare const cliDataSchemas: {
|
|
|
2873
2899
|
"provider-auth": "provider-auth";
|
|
2874
2900
|
"stale-base": "stale-base";
|
|
2875
2901
|
"empty-result": "empty-result";
|
|
2902
|
+
unfinished: "unfinished";
|
|
2876
2903
|
"scope-violation": "scope-violation";
|
|
2877
2904
|
"review-protocol": "review-protocol";
|
|
2878
2905
|
merge: "merge";
|
|
2879
2906
|
budget: "budget";
|
|
2907
|
+
"needs-lead": "needs-lead";
|
|
2880
2908
|
}>>>;
|
|
2881
2909
|
waits: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
2882
2910
|
kind: z.ZodEnum<{
|
|
@@ -4181,10 +4209,12 @@ export declare const cliDataSchemas: {
|
|
|
4181
4209
|
"provider-auth": "provider-auth";
|
|
4182
4210
|
"stale-base": "stale-base";
|
|
4183
4211
|
"empty-result": "empty-result";
|
|
4212
|
+
unfinished: "unfinished";
|
|
4184
4213
|
"scope-violation": "scope-violation";
|
|
4185
4214
|
"review-protocol": "review-protocol";
|
|
4186
4215
|
merge: "merge";
|
|
4187
4216
|
budget: "budget";
|
|
4217
|
+
"needs-lead": "needs-lead";
|
|
4188
4218
|
"runtime-missing": "runtime-missing";
|
|
4189
4219
|
"controller-busy": "controller-busy";
|
|
4190
4220
|
"operator-pause": "operator-pause";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const diagnosisActors: readonly ["controller", "lead", "user"];
|
|
3
3
|
export declare const diagnosisActions: readonly ["none", "wait", "review-plan", "retry", "diagnose-failure", "reset-attempts", "raise-budget", "replan-dependents", "recovery-decision", "user-decision", "resume-queue", "fix-environment", "fix-access"];
|
|
4
|
-
export declare const diagnosisCauses: readonly ["provider-auth", "environment", "timeout", "stale-base", "empty-result", "scope-violation", "gate", "review", "review-protocol", "merge", "cancelled", "budget", "unknown", "runtime-missing", "controller-busy", "operator-pause", "approval-required", "not-ready"];
|
|
4
|
+
export declare const diagnosisCauses: readonly ["provider-auth", "environment", "timeout", "stale-base", "empty-result", "unfinished", "scope-violation", "gate", "review", "review-protocol", "merge", "cancelled", "budget", "needs-lead", "unknown", "runtime-missing", "controller-busy", "operator-pause", "approval-required", "not-ready"];
|
|
5
5
|
export declare const diagnosisPhases: readonly ["preflight", "claim", "implementation", "gates", "review", "integration", "delivery"];
|
|
6
6
|
/** Объяснение остановки: код, причина, фаза, кто действует и что допустимо. */
|
|
7
7
|
export declare const stopDiagnosisSchema: z.ZodObject<{
|
|
@@ -52,10 +52,12 @@ export declare const stopDiagnosisSchema: z.ZodObject<{
|
|
|
52
52
|
"provider-auth": "provider-auth";
|
|
53
53
|
"stale-base": "stale-base";
|
|
54
54
|
"empty-result": "empty-result";
|
|
55
|
+
unfinished: "unfinished";
|
|
55
56
|
"scope-violation": "scope-violation";
|
|
56
57
|
"review-protocol": "review-protocol";
|
|
57
58
|
merge: "merge";
|
|
58
59
|
budget: "budget";
|
|
60
|
+
"needs-lead": "needs-lead";
|
|
59
61
|
"runtime-missing": "runtime-missing";
|
|
60
62
|
"controller-busy": "controller-busy";
|
|
61
63
|
"operator-pause": "operator-pause";
|
|
@@ -24,6 +24,7 @@ export const diagnosisCauses = [
|
|
|
24
24
|
'timeout',
|
|
25
25
|
'stale-base',
|
|
26
26
|
'empty-result',
|
|
27
|
+
'unfinished',
|
|
27
28
|
'scope-violation',
|
|
28
29
|
'gate',
|
|
29
30
|
'review',
|
|
@@ -31,6 +32,7 @@ export const diagnosisCauses = [
|
|
|
31
32
|
'merge',
|
|
32
33
|
'cancelled',
|
|
33
34
|
'budget',
|
|
35
|
+
'needs-lead',
|
|
34
36
|
'unknown',
|
|
35
37
|
'runtime-missing',
|
|
36
38
|
'controller-busy',
|
|
@@ -107,10 +107,12 @@ export declare const eventPayloads: {
|
|
|
107
107
|
"provider-auth": "provider-auth";
|
|
108
108
|
"stale-base": "stale-base";
|
|
109
109
|
"empty-result": "empty-result";
|
|
110
|
+
unfinished: "unfinished";
|
|
110
111
|
"scope-violation": "scope-violation";
|
|
111
112
|
"review-protocol": "review-protocol";
|
|
112
113
|
merge: "merge";
|
|
113
114
|
budget: "budget";
|
|
115
|
+
"needs-lead": "needs-lead";
|
|
114
116
|
}>;
|
|
115
117
|
message: z.ZodString;
|
|
116
118
|
blocked: z.ZodBoolean;
|
|
@@ -152,10 +154,12 @@ export declare const eventPayloads: {
|
|
|
152
154
|
"provider-auth": "provider-auth";
|
|
153
155
|
"stale-base": "stale-base";
|
|
154
156
|
"empty-result": "empty-result";
|
|
157
|
+
unfinished: "unfinished";
|
|
155
158
|
"scope-violation": "scope-violation";
|
|
156
159
|
"review-protocol": "review-protocol";
|
|
157
160
|
merge: "merge";
|
|
158
161
|
budget: "budget";
|
|
162
|
+
"needs-lead": "needs-lead";
|
|
159
163
|
}>>>;
|
|
160
164
|
}, z.core.$strict>;
|
|
161
165
|
readonly 'control.resumed': z.ZodObject<{
|
|
@@ -403,10 +407,12 @@ export declare const runEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
403
407
|
"provider-auth": "provider-auth";
|
|
404
408
|
"stale-base": "stale-base";
|
|
405
409
|
"empty-result": "empty-result";
|
|
410
|
+
unfinished: "unfinished";
|
|
406
411
|
"scope-violation": "scope-violation";
|
|
407
412
|
"review-protocol": "review-protocol";
|
|
408
413
|
merge: "merge";
|
|
409
414
|
budget: "budget";
|
|
415
|
+
"needs-lead": "needs-lead";
|
|
410
416
|
}>;
|
|
411
417
|
message: z.ZodString;
|
|
412
418
|
blocked: z.ZodBoolean;
|
|
@@ -442,10 +448,12 @@ export declare const runEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
442
448
|
"provider-auth": "provider-auth";
|
|
443
449
|
"stale-base": "stale-base";
|
|
444
450
|
"empty-result": "empty-result";
|
|
451
|
+
unfinished: "unfinished";
|
|
445
452
|
"scope-violation": "scope-violation";
|
|
446
453
|
"review-protocol": "review-protocol";
|
|
447
454
|
merge: "merge";
|
|
448
455
|
budget: "budget";
|
|
456
|
+
"needs-lead": "needs-lead";
|
|
449
457
|
}>>>;
|
|
450
458
|
}, z.core.$strict> | z.ZodObject<{
|
|
451
459
|
reason: z.ZodEnum<{
|
|
@@ -654,10 +662,12 @@ export declare const runEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
654
662
|
"provider-auth": "provider-auth";
|
|
655
663
|
"stale-base": "stale-base";
|
|
656
664
|
"empty-result": "empty-result";
|
|
665
|
+
unfinished: "unfinished";
|
|
657
666
|
"scope-violation": "scope-violation";
|
|
658
667
|
"review-protocol": "review-protocol";
|
|
659
668
|
merge: "merge";
|
|
660
669
|
budget: "budget";
|
|
670
|
+
"needs-lead": "needs-lead";
|
|
661
671
|
}>;
|
|
662
672
|
message: z.ZodString;
|
|
663
673
|
blocked: z.ZodBoolean;
|
|
@@ -693,10 +703,12 @@ export declare const runEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
693
703
|
"provider-auth": "provider-auth";
|
|
694
704
|
"stale-base": "stale-base";
|
|
695
705
|
"empty-result": "empty-result";
|
|
706
|
+
unfinished: "unfinished";
|
|
696
707
|
"scope-violation": "scope-violation";
|
|
697
708
|
"review-protocol": "review-protocol";
|
|
698
709
|
merge: "merge";
|
|
699
710
|
budget: "budget";
|
|
711
|
+
"needs-lead": "needs-lead";
|
|
700
712
|
}>>>;
|
|
701
713
|
}, z.core.$strict> | z.ZodObject<{
|
|
702
714
|
reason: z.ZodEnum<{
|