@cat-factory/contracts 0.169.0 → 0.170.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.
- package/dist/agent-presentation.d.ts +2 -2
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/execution.d.ts +103 -568
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +14 -199
- package/dist/execution.js.map +1 -1
- package/dist/gate.d.ts +283 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +209 -0
- package/dist/gate.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/judge.d.ts +181 -0
- package/dist/judge.d.ts.map +1 -0
- package/dist/judge.js +147 -0
- package/dist/judge.js.map +1 -0
- package/dist/merge.d.ts +17 -0
- package/dist/merge.d.ts.map +1 -1
- package/dist/merge.js +19 -0
- package/dist/merge.js.map +1 -1
- package/dist/notification-webhooks.d.ts +3 -3
- package/dist/notifications.d.ts +3 -3
- package/dist/notifications.d.ts.map +1 -1
- package/dist/notifications.js +2 -0
- package/dist/notifications.js.map +1 -1
- package/dist/pr-report.d.ts +101 -0
- package/dist/pr-report.d.ts.map +1 -1
- package/dist/pr-report.js +40 -0
- package/dist/pr-report.js.map +1 -1
- package/dist/public-api.d.ts +1 -1
- package/dist/public-decisions.d.ts +94 -1
- package/dist/public-decisions.d.ts.map +1 -1
- package/dist/public-decisions.js +34 -1
- package/dist/public-decisions.js.map +1 -1
- package/dist/result-views.d.ts +1 -1
- package/dist/result-views.d.ts.map +1 -1
- package/dist/result-views.js +1 -0
- package/dist/result-views.js.map +1 -1
- package/dist/routes/agent-runs.d.ts +86 -0
- package/dist/routes/agent-runs.d.ts.map +1 -1
- package/dist/routes/execution.d.ts +344 -0
- package/dist/routes/execution.d.ts.map +1 -1
- package/dist/routes/human-review.d.ts +43 -0
- package/dist/routes/human-review.d.ts.map +1 -1
- package/dist/routes/human-test.d.ts +215 -0
- package/dist/routes/human-test.d.ts.map +1 -1
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/judge.d.ts +158 -0
- package/dist/routes/judge.d.ts.map +1 -0
- package/dist/routes/judge.js +28 -0
- package/dist/routes/judge.js.map +1 -0
- package/dist/routes/merge.d.ts +12 -0
- package/dist/routes/merge.d.ts.map +1 -1
- package/dist/routes/notification-webhooks.d.ts +3 -3
- package/dist/routes/notifications.d.ts +3 -3
- package/dist/routes/public-api.d.ts +3 -3
- package/dist/routes/public-decisions.d.ts +246 -0
- package/dist/routes/public-decisions.d.ts.map +1 -1
- package/dist/routes/public-decisions.js +10 -1
- package/dist/routes/public-decisions.js.map +1 -1
- package/dist/routes/slack.d.ts +3 -3
- package/dist/routes/visual-confirm.d.ts +129 -0
- package/dist/routes/visual-confirm.d.ts.map +1 -1
- package/dist/routes/workspaces.d.ts +94 -4
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/slack.d.ts +2 -2
- package/dist/snapshot.d.ts +47 -2
- package/dist/snapshot.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/judge.d.ts
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
/** Default minimum verdict score (0..1) a judge requires to advance the run. */
|
|
3
|
+
export declare const DEFAULT_JUDGE_MIN_SCORE = 0.7;
|
|
4
|
+
/** Default number of bounce rounds a judge may spend before it must ask a human. */
|
|
5
|
+
export declare const DEFAULT_JUDGE_MAX_BOUNCES = 1;
|
|
6
|
+
/** How serious one judge finding is. Ordered low < medium < high < critical. */
|
|
7
|
+
export declare const judgeFindingSeveritySchema: v.PicklistSchema<["low", "medium", "high", "critical"], undefined>;
|
|
8
|
+
export type JudgeFindingSeverity = v.InferOutput<typeof judgeFindingSeveritySchema>;
|
|
9
|
+
/**
|
|
10
|
+
* One concrete thing the rubric flagged. `title` is the headline a human (or the bounced
|
|
11
|
+
* producer) acts on; `detail` is the evidence. Both are MODEL-AUTHORED text — every render
|
|
12
|
+
* of them onto a host-parsed surface (the PR body) goes through kernel's `hostMarkdown`
|
|
13
|
+
* helpers plus `redactSecrets`, exactly like the rest of the verification report.
|
|
14
|
+
*/
|
|
15
|
+
export declare const judgeFindingSchema: v.ObjectSchema<{
|
|
16
|
+
readonly title: v.SchemaWithFallback<v.StringSchema<undefined>, "Untitled finding">;
|
|
17
|
+
readonly detail: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
18
|
+
readonly severity: v.SchemaWithFallback<v.PicklistSchema<["low", "medium", "high", "critical"], undefined>, "medium">;
|
|
19
|
+
/** Where the finding applies, when the judge could localise it (`path` or `path:line`). */
|
|
20
|
+
readonly where: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
21
|
+
}, undefined>;
|
|
22
|
+
export type JudgeFinding = v.InferOutput<typeof judgeFindingSchema>;
|
|
23
|
+
/**
|
|
24
|
+
* The canonical structured verdict a judge's assessment returns. A registration MAY supply
|
|
25
|
+
* its own valibot schema (the driver parses against whatever it registered), but the value
|
|
26
|
+
* must still expose a `score` — that is the number the per-task threshold compares — so the
|
|
27
|
+
* shared window and the PR report can render any judge without knowing its rubric.
|
|
28
|
+
*
|
|
29
|
+
* Every field is `v.fallback`-wrapped so ONE noisy field degrades to its default instead of
|
|
30
|
+
* discarding an otherwise-usable verdict (the `securityAssessment` precedent in the example
|
|
31
|
+
* custom-agent package): a model that reports `score` on a 0..100 scale must not cost us the
|
|
32
|
+
* findings beside it.
|
|
33
|
+
*/
|
|
34
|
+
export declare const judgeVerdictSchema: v.ObjectSchema<{
|
|
35
|
+
/** How well the work meets the rubric, 0..1 (higher is better). Missing ⇒ 0 (fails). */
|
|
36
|
+
readonly score: v.SchemaWithFallback<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0>;
|
|
37
|
+
/** The judge's prose justification — what it looked at and why it scored that way. */
|
|
38
|
+
readonly summary: v.SchemaWithFallback<v.StringSchema<undefined>, "">;
|
|
39
|
+
/** What the rubric flagged. Empty on a clean verdict. */
|
|
40
|
+
readonly findings: v.OptionalSchema<v.SchemaWithFallback<v.ArraySchema<v.ObjectSchema<{
|
|
41
|
+
readonly title: v.SchemaWithFallback<v.StringSchema<undefined>, "Untitled finding">;
|
|
42
|
+
readonly detail: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
43
|
+
readonly severity: v.SchemaWithFallback<v.PicklistSchema<["low", "medium", "high", "critical"], undefined>, "medium">;
|
|
44
|
+
/** Where the finding applies, when the judge could localise it (`path` or `path:line`). */
|
|
45
|
+
readonly where: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
46
|
+
}, undefined>, undefined>, readonly []>, readonly []>;
|
|
47
|
+
}, undefined>;
|
|
48
|
+
export type JudgeVerdict = v.InferOutput<typeof judgeVerdictSchema>;
|
|
49
|
+
/**
|
|
50
|
+
* What the engine DID with a verdict:
|
|
51
|
+
* - `pass` — at or above the threshold; the run advances.
|
|
52
|
+
* - `park` — a human must decide (the registration's `onFail`, or a spent bounce budget).
|
|
53
|
+
* - `bounce` — the preceding producing step was re-armed with the findings as rework.
|
|
54
|
+
* - `fail` — the run was failed with the verdict summary.
|
|
55
|
+
*/
|
|
56
|
+
export declare const judgeDispositionSchema: v.PicklistSchema<["pass", "park", "bounce", "fail"], undefined>;
|
|
57
|
+
export type JudgeDisposition = v.InferOutput<typeof judgeDispositionSchema>;
|
|
58
|
+
/**
|
|
59
|
+
* The judge step's lifecycle:
|
|
60
|
+
* - `evaluating` — the assessment is running (transient; the driver holds the step).
|
|
61
|
+
* - `awaiting_decision` — parked; a human picks proceed / bounce / stop.
|
|
62
|
+
* - `bouncing` — the producer was re-armed; the judge re-runs when it returns.
|
|
63
|
+
* - `passed` / `failed` — settled.
|
|
64
|
+
* - `skipped` — no assessor wired (pass-through), or nothing to judge.
|
|
65
|
+
*/
|
|
66
|
+
export declare const judgeStatusSchema: v.PicklistSchema<["evaluating", "awaiting_decision", "bouncing", "passed", "failed", "skipped"], undefined>;
|
|
67
|
+
export type JudgeStatus = v.InferOutput<typeof judgeStatusSchema>;
|
|
68
|
+
/** One completed round of the judge loop (assessment + what the engine did with it). */
|
|
69
|
+
export declare const judgeRoundSchema: v.ObjectSchema<{
|
|
70
|
+
/** 1-based round number; the first assessment is round 1. */
|
|
71
|
+
readonly round: v.NumberSchema<undefined>;
|
|
72
|
+
readonly at: v.NumberSchema<undefined>;
|
|
73
|
+
readonly verdict: v.ObjectSchema<{
|
|
74
|
+
/** How well the work meets the rubric, 0..1 (higher is better). Missing ⇒ 0 (fails). */
|
|
75
|
+
readonly score: v.SchemaWithFallback<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0>;
|
|
76
|
+
/** The judge's prose justification — what it looked at and why it scored that way. */
|
|
77
|
+
readonly summary: v.SchemaWithFallback<v.StringSchema<undefined>, "">;
|
|
78
|
+
/** What the rubric flagged. Empty on a clean verdict. */
|
|
79
|
+
readonly findings: v.OptionalSchema<v.SchemaWithFallback<v.ArraySchema<v.ObjectSchema<{
|
|
80
|
+
readonly title: v.SchemaWithFallback<v.StringSchema<undefined>, "Untitled finding">;
|
|
81
|
+
readonly detail: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
82
|
+
readonly severity: v.SchemaWithFallback<v.PicklistSchema<["low", "medium", "high", "critical"], undefined>, "medium">;
|
|
83
|
+
/** Where the finding applies, when the judge could localise it (`path` or `path:line`). */
|
|
84
|
+
readonly where: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
85
|
+
}, undefined>, undefined>, readonly []>, readonly []>;
|
|
86
|
+
}, undefined>;
|
|
87
|
+
readonly disposition: v.PicklistSchema<["pass", "park", "bounce", "fail"], undefined>;
|
|
88
|
+
/** The model that produced this round's verdict. */
|
|
89
|
+
readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
90
|
+
}, undefined>;
|
|
91
|
+
export type JudgeRound = v.InferOutput<typeof judgeRoundSchema>;
|
|
92
|
+
/**
|
|
93
|
+
* Live judge state carried on the run's judge step — the analogue of `GateStepState`.
|
|
94
|
+
* Created lazily by the engine on first entry; the rubric itself is NOT persisted here
|
|
95
|
+
* (only its identity), since a rubric body can be many KB and the step row is re-serialized
|
|
96
|
+
* on every progress write.
|
|
97
|
+
*/
|
|
98
|
+
export declare const judgeStepStateSchema: v.ObjectSchema<{
|
|
99
|
+
readonly status: v.PicklistSchema<["evaluating", "awaiting_decision", "bouncing", "passed", "failed", "skipped"], undefined>;
|
|
100
|
+
/** The rubric's stable id (the registration's, or the overriding fragment's). */
|
|
101
|
+
readonly rubricId: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
102
|
+
/** The rubric's human name, for the window + the PR report. */
|
|
103
|
+
readonly rubricName: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
104
|
+
/** Whether the rubric body came from a workspace fragment override rather than the default. */
|
|
105
|
+
readonly rubricOverridden: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
|
|
106
|
+
/** The most recent verdict; null until the first assessment settles. */
|
|
107
|
+
readonly verdict: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
|
|
108
|
+
/** How well the work meets the rubric, 0..1 (higher is better). Missing ⇒ 0 (fails). */
|
|
109
|
+
readonly score: v.SchemaWithFallback<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0>;
|
|
110
|
+
/** The judge's prose justification — what it looked at and why it scored that way. */
|
|
111
|
+
readonly summary: v.SchemaWithFallback<v.StringSchema<undefined>, "">;
|
|
112
|
+
/** What the rubric flagged. Empty on a clean verdict. */
|
|
113
|
+
readonly findings: v.OptionalSchema<v.SchemaWithFallback<v.ArraySchema<v.ObjectSchema<{
|
|
114
|
+
readonly title: v.SchemaWithFallback<v.StringSchema<undefined>, "Untitled finding">;
|
|
115
|
+
readonly detail: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
116
|
+
readonly severity: v.SchemaWithFallback<v.PicklistSchema<["low", "medium", "high", "critical"], undefined>, "medium">;
|
|
117
|
+
/** Where the finding applies, when the judge could localise it (`path` or `path:line`). */
|
|
118
|
+
readonly where: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
119
|
+
}, undefined>, undefined>, readonly []>, readonly []>;
|
|
120
|
+
}, undefined>, undefined>, undefined>;
|
|
121
|
+
/** The score the verdict had to reach, resolved from the task's merge preset. */
|
|
122
|
+
readonly threshold: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
123
|
+
/** What the engine did with the most recent verdict. */
|
|
124
|
+
readonly disposition: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "park", "bounce", "fail"], undefined>, undefined>, undefined>;
|
|
125
|
+
/** How many bounce rounds have been spent, and the ceiling from the merge preset. */
|
|
126
|
+
readonly bounces: v.OptionalSchema<v.NumberSchema<undefined>, 0>;
|
|
127
|
+
readonly maxBounces: v.OptionalSchema<v.NumberSchema<undefined>, 1>;
|
|
128
|
+
/** The model that produced the most recent verdict. */
|
|
129
|
+
readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
130
|
+
/** Every settled round, oldest first — so the window shows the loop, not just its end. */
|
|
131
|
+
readonly rounds: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
|
|
132
|
+
/** 1-based round number; the first assessment is round 1. */
|
|
133
|
+
readonly round: v.NumberSchema<undefined>;
|
|
134
|
+
readonly at: v.NumberSchema<undefined>;
|
|
135
|
+
readonly verdict: v.ObjectSchema<{
|
|
136
|
+
/** How well the work meets the rubric, 0..1 (higher is better). Missing ⇒ 0 (fails). */
|
|
137
|
+
readonly score: v.SchemaWithFallback<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0>;
|
|
138
|
+
/** The judge's prose justification — what it looked at and why it scored that way. */
|
|
139
|
+
readonly summary: v.SchemaWithFallback<v.StringSchema<undefined>, "">;
|
|
140
|
+
/** What the rubric flagged. Empty on a clean verdict. */
|
|
141
|
+
readonly findings: v.OptionalSchema<v.SchemaWithFallback<v.ArraySchema<v.ObjectSchema<{
|
|
142
|
+
readonly title: v.SchemaWithFallback<v.StringSchema<undefined>, "Untitled finding">;
|
|
143
|
+
readonly detail: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
144
|
+
readonly severity: v.SchemaWithFallback<v.PicklistSchema<["low", "medium", "high", "critical"], undefined>, "medium">;
|
|
145
|
+
/** Where the finding applies, when the judge could localise it (`path` or `path:line`). */
|
|
146
|
+
readonly where: v.SchemaWithFallback<v.OptionalSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
147
|
+
}, undefined>, undefined>, readonly []>, readonly []>;
|
|
148
|
+
}, undefined>;
|
|
149
|
+
readonly disposition: v.PicklistSchema<["pass", "park", "bounce", "fail"], undefined>;
|
|
150
|
+
/** The model that produced this round's verdict. */
|
|
151
|
+
readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
152
|
+
}, undefined>, undefined>, readonly []>;
|
|
153
|
+
/**
|
|
154
|
+
* Why the judge is `skipped`, or why a disposition degraded (e.g. a `bounce` with no
|
|
155
|
+
* preceding producing step to bounce to). Surfaced verbatim in the window + PR report,
|
|
156
|
+
* because a judge that quietly did nothing is indistinguishable from one that passed.
|
|
157
|
+
*/
|
|
158
|
+
readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
159
|
+
/** The human's resolution of a park, once made. */
|
|
160
|
+
readonly resolution: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
|
|
161
|
+
readonly choice: v.PicklistSchema<["proceed", "bounce", "stop"], undefined>;
|
|
162
|
+
readonly feedback: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
163
|
+
readonly at: v.NumberSchema<undefined>;
|
|
164
|
+
}, undefined>, undefined>, undefined>;
|
|
165
|
+
}, undefined>;
|
|
166
|
+
export type JudgeStepState = v.InferOutput<typeof judgeStepStateSchema>;
|
|
167
|
+
/**
|
|
168
|
+
* Resolve a parked judge:
|
|
169
|
+
* - `proceed` — advance despite the verdict (the human overrules the rubric);
|
|
170
|
+
* - `bounce` — spend a rework round on the producing step, even past the budget;
|
|
171
|
+
* - `stop` — fail the run.
|
|
172
|
+
* `feedback` is folded into a `bounce`'s rework brief (and recorded either way).
|
|
173
|
+
*/
|
|
174
|
+
export declare const resolveJudgeSchema: v.ObjectSchema<{
|
|
175
|
+
readonly choice: v.PicklistSchema<["proceed", "bounce", "stop"], undefined>;
|
|
176
|
+
readonly feedback: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 4000, undefined>]>, undefined>, undefined>;
|
|
177
|
+
}, undefined>;
|
|
178
|
+
export type ResolveJudgeInput = v.InferOutput<typeof resolveJudgeSchema>;
|
|
179
|
+
/** Parse-or-throw a verdict payload an assessment returned (the engine validates it). */
|
|
180
|
+
export declare function parseJudgeVerdict(value: unknown): JudgeVerdict;
|
|
181
|
+
//# sourceMappingURL=judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../src/judge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAoB5B,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAE1C,oFAAoF;AACpF,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAE1C,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,oEAAoD,CAAA;AAC3F,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;IAI7B,2FAA2F;;aAE3F,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB;IAC7B,wFAAwF;;IAExF,sFAAsF;;IAEtF,yDAAyD;;;;;QArBzD,2FAA2F;;;aAuB3F,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,iEAAiD,CAAA;AACpF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAE3E;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,6GAO5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEjE,wFAAwF;AACxF,eAAO,MAAM,gBAAgB;IAC3B,6DAA6D;;;;QAvC7D,wFAAwF;;QAExF,sFAAsF;;QAEtF,yDAAyD;;;;;YArBzD,2FAA2F;;;;;IA6D3F,oDAAoD;;aAEpD,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;IAE/B,iFAAiF;;IAEjF,+DAA+D;;IAE/D,+FAA+F;;IAE/F,wEAAwE;;QA/DxE,wFAAwF;;QAExF,sFAAsF;;QAEtF,yDAAyD;;;;;YArBzD,2FAA2F;;;;IAkF3F,iFAAiF;;IAEjF,wDAAwD;;IAExD,qFAAqF;;;IAGrF,uDAAuD;;IAEvD,0FAA0F;;QAnC1F,6DAA6D;;;;YAvC7D,wFAAwF;;YAExF,sFAAsF;;YAEtF,yDAAyD;;;;;gBArBzD,2FAA2F;;;;;QA6D3F,oDAAoD;;;IAgCpD;;;;OAIG;;IAEH,mDAAmD;;;;;;aAUnD,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAIvE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;aAG7B,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAExE,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAE9D"}
|
package/dist/judge.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Judge wire contracts — the FOURTH step-taxonomy bucket (see `CLAUDE.md`: agents /
|
|
4
|
+
// polling gates / one-shot engine steps / judges).
|
|
5
|
+
//
|
|
6
|
+
// A judge step runs an LLM assessment of the run's work against a RUBRIC, producing a
|
|
7
|
+
// structured verdict; the engine compares the verdict's score to a PER-TASK threshold
|
|
8
|
+
// (a merge-preset knob) and disposes: advance, park for a human, bounce the preceding
|
|
9
|
+
// producing step with the findings as rework feedback, or fail the run.
|
|
10
|
+
//
|
|
11
|
+
// This generalises a shape three engine paths already had (requirements auto-pass, the
|
|
12
|
+
// merger's scored assessment, the on-call culprit confidence) into a registry a
|
|
13
|
+
// DEPLOYMENT can extend — `JudgeRegistry` in kernel, mirroring `GateRegistry`. All live
|
|
14
|
+
// state rides the run's step (`PipelineStep.judge`), so it is runtime-symmetric by
|
|
15
|
+
// construction with no side table — the `forkDecision` / `gate` precedent.
|
|
16
|
+
//
|
|
17
|
+
// See `docs/initiatives/judge-registry.md`.
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/** Default minimum verdict score (0..1) a judge requires to advance the run. */
|
|
20
|
+
export const DEFAULT_JUDGE_MIN_SCORE = 0.7;
|
|
21
|
+
/** Default number of bounce rounds a judge may spend before it must ask a human. */
|
|
22
|
+
export const DEFAULT_JUDGE_MAX_BOUNCES = 1;
|
|
23
|
+
/** How serious one judge finding is. Ordered low < medium < high < critical. */
|
|
24
|
+
export const judgeFindingSeveritySchema = v.picklist(['low', 'medium', 'high', 'critical']);
|
|
25
|
+
/**
|
|
26
|
+
* One concrete thing the rubric flagged. `title` is the headline a human (or the bounced
|
|
27
|
+
* producer) acts on; `detail` is the evidence. Both are MODEL-AUTHORED text — every render
|
|
28
|
+
* of them onto a host-parsed surface (the PR body) goes through kernel's `hostMarkdown`
|
|
29
|
+
* helpers plus `redactSecrets`, exactly like the rest of the verification report.
|
|
30
|
+
*/
|
|
31
|
+
export const judgeFindingSchema = v.object({
|
|
32
|
+
title: v.fallback(v.string(), 'Untitled finding'),
|
|
33
|
+
detail: v.fallback(v.optional(v.string()), undefined),
|
|
34
|
+
severity: v.fallback(judgeFindingSeveritySchema, 'medium'),
|
|
35
|
+
/** Where the finding applies, when the judge could localise it (`path` or `path:line`). */
|
|
36
|
+
where: v.fallback(v.optional(v.string()), undefined),
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* The canonical structured verdict a judge's assessment returns. A registration MAY supply
|
|
40
|
+
* its own valibot schema (the driver parses against whatever it registered), but the value
|
|
41
|
+
* must still expose a `score` — that is the number the per-task threshold compares — so the
|
|
42
|
+
* shared window and the PR report can render any judge without knowing its rubric.
|
|
43
|
+
*
|
|
44
|
+
* Every field is `v.fallback`-wrapped so ONE noisy field degrades to its default instead of
|
|
45
|
+
* discarding an otherwise-usable verdict (the `securityAssessment` precedent in the example
|
|
46
|
+
* custom-agent package): a model that reports `score` on a 0..100 scale must not cost us the
|
|
47
|
+
* findings beside it.
|
|
48
|
+
*/
|
|
49
|
+
export const judgeVerdictSchema = v.object({
|
|
50
|
+
/** How well the work meets the rubric, 0..1 (higher is better). Missing ⇒ 0 (fails). */
|
|
51
|
+
score: v.fallback(v.pipe(v.number(), v.minValue(0), v.maxValue(1)), 0),
|
|
52
|
+
/** The judge's prose justification — what it looked at and why it scored that way. */
|
|
53
|
+
summary: v.fallback(v.string(), ''),
|
|
54
|
+
/** What the rubric flagged. Empty on a clean verdict. */
|
|
55
|
+
findings: v.optional(v.fallback(v.array(judgeFindingSchema), []), []),
|
|
56
|
+
});
|
|
57
|
+
/**
|
|
58
|
+
* What the engine DID with a verdict:
|
|
59
|
+
* - `pass` — at or above the threshold; the run advances.
|
|
60
|
+
* - `park` — a human must decide (the registration's `onFail`, or a spent bounce budget).
|
|
61
|
+
* - `bounce` — the preceding producing step was re-armed with the findings as rework.
|
|
62
|
+
* - `fail` — the run was failed with the verdict summary.
|
|
63
|
+
*/
|
|
64
|
+
export const judgeDispositionSchema = v.picklist(['pass', 'park', 'bounce', 'fail']);
|
|
65
|
+
/**
|
|
66
|
+
* The judge step's lifecycle:
|
|
67
|
+
* - `evaluating` — the assessment is running (transient; the driver holds the step).
|
|
68
|
+
* - `awaiting_decision` — parked; a human picks proceed / bounce / stop.
|
|
69
|
+
* - `bouncing` — the producer was re-armed; the judge re-runs when it returns.
|
|
70
|
+
* - `passed` / `failed` — settled.
|
|
71
|
+
* - `skipped` — no assessor wired (pass-through), or nothing to judge.
|
|
72
|
+
*/
|
|
73
|
+
export const judgeStatusSchema = v.picklist([
|
|
74
|
+
'evaluating',
|
|
75
|
+
'awaiting_decision',
|
|
76
|
+
'bouncing',
|
|
77
|
+
'passed',
|
|
78
|
+
'failed',
|
|
79
|
+
'skipped',
|
|
80
|
+
]);
|
|
81
|
+
/** One completed round of the judge loop (assessment + what the engine did with it). */
|
|
82
|
+
export const judgeRoundSchema = v.object({
|
|
83
|
+
/** 1-based round number; the first assessment is round 1. */
|
|
84
|
+
round: v.number(),
|
|
85
|
+
at: v.number(),
|
|
86
|
+
verdict: judgeVerdictSchema,
|
|
87
|
+
disposition: judgeDispositionSchema,
|
|
88
|
+
/** The model that produced this round's verdict. */
|
|
89
|
+
model: v.optional(v.nullable(v.string())),
|
|
90
|
+
});
|
|
91
|
+
/**
|
|
92
|
+
* Live judge state carried on the run's judge step — the analogue of `GateStepState`.
|
|
93
|
+
* Created lazily by the engine on first entry; the rubric itself is NOT persisted here
|
|
94
|
+
* (only its identity), since a rubric body can be many KB and the step row is re-serialized
|
|
95
|
+
* on every progress write.
|
|
96
|
+
*/
|
|
97
|
+
export const judgeStepStateSchema = v.object({
|
|
98
|
+
status: judgeStatusSchema,
|
|
99
|
+
/** The rubric's stable id (the registration's, or the overriding fragment's). */
|
|
100
|
+
rubricId: v.optional(v.nullable(v.string())),
|
|
101
|
+
/** The rubric's human name, for the window + the PR report. */
|
|
102
|
+
rubricName: v.optional(v.nullable(v.string())),
|
|
103
|
+
/** Whether the rubric body came from a workspace fragment override rather than the default. */
|
|
104
|
+
rubricOverridden: v.optional(v.boolean(), false),
|
|
105
|
+
/** The most recent verdict; null until the first assessment settles. */
|
|
106
|
+
verdict: v.optional(v.nullable(judgeVerdictSchema)),
|
|
107
|
+
/** The score the verdict had to reach, resolved from the task's merge preset. */
|
|
108
|
+
threshold: v.optional(v.nullable(v.number())),
|
|
109
|
+
/** What the engine did with the most recent verdict. */
|
|
110
|
+
disposition: v.optional(v.nullable(judgeDispositionSchema)),
|
|
111
|
+
/** How many bounce rounds have been spent, and the ceiling from the merge preset. */
|
|
112
|
+
bounces: v.optional(v.number(), 0),
|
|
113
|
+
maxBounces: v.optional(v.number(), DEFAULT_JUDGE_MAX_BOUNCES),
|
|
114
|
+
/** The model that produced the most recent verdict. */
|
|
115
|
+
model: v.optional(v.nullable(v.string())),
|
|
116
|
+
/** Every settled round, oldest first — so the window shows the loop, not just its end. */
|
|
117
|
+
rounds: v.optional(v.array(judgeRoundSchema), []),
|
|
118
|
+
/**
|
|
119
|
+
* Why the judge is `skipped`, or why a disposition degraded (e.g. a `bounce` with no
|
|
120
|
+
* preceding producing step to bounce to). Surfaced verbatim in the window + PR report,
|
|
121
|
+
* because a judge that quietly did nothing is indistinguishable from one that passed.
|
|
122
|
+
*/
|
|
123
|
+
note: v.optional(v.nullable(v.string())),
|
|
124
|
+
/** The human's resolution of a park, once made. */
|
|
125
|
+
resolution: v.optional(v.nullable(v.object({
|
|
126
|
+
choice: v.picklist(['proceed', 'bounce', 'stop']),
|
|
127
|
+
feedback: v.optional(v.nullable(v.string())),
|
|
128
|
+
at: v.number(),
|
|
129
|
+
}))),
|
|
130
|
+
});
|
|
131
|
+
// ---- Request bodies -------------------------------------------------------
|
|
132
|
+
/**
|
|
133
|
+
* Resolve a parked judge:
|
|
134
|
+
* - `proceed` — advance despite the verdict (the human overrules the rubric);
|
|
135
|
+
* - `bounce` — spend a rework round on the producing step, even past the budget;
|
|
136
|
+
* - `stop` — fail the run.
|
|
137
|
+
* `feedback` is folded into a `bounce`'s rework brief (and recorded either way).
|
|
138
|
+
*/
|
|
139
|
+
export const resolveJudgeSchema = v.object({
|
|
140
|
+
choice: v.picklist(['proceed', 'bounce', 'stop']),
|
|
141
|
+
feedback: v.optional(v.nullable(v.pipe(v.string(), v.trim(), v.maxLength(4000)))),
|
|
142
|
+
});
|
|
143
|
+
/** Parse-or-throw a verdict payload an assessment returned (the engine validates it). */
|
|
144
|
+
export function parseJudgeVerdict(value) {
|
|
145
|
+
return v.parse(judgeVerdictSchema, value);
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../src/judge.ts"],"names":[],"mappings":"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"}
|
package/dist/merge.d.ts
CHANGED
|
@@ -160,6 +160,19 @@ export declare const riskPolicySchema: v.ObjectSchema<{
|
|
|
160
160
|
* PR's outstanding comments are addressed immediately.
|
|
161
161
|
*/
|
|
162
162
|
readonly humanReviewGraceMinutes: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
163
|
+
/**
|
|
164
|
+
* The minimum score (0..1) a JUDGE step's verdict must reach for the run to advance
|
|
165
|
+
* without a human. Below it, the judge applies its registration's `onFail` disposition
|
|
166
|
+
* (park / bounce / fail). The per-task counterpart of `maxRequirementConcernAllowed`:
|
|
167
|
+
* how much rubric deviation THIS task tolerates. See `docs/initiatives/judge-registry.md`.
|
|
168
|
+
*/
|
|
169
|
+
readonly judgeMinScore: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
|
|
170
|
+
/**
|
|
171
|
+
* How many BOUNCE rounds a judge may spend — re-arming the preceding producing step with
|
|
172
|
+
* the verdict's findings as rework feedback — before it must stop and ask a human. `0`
|
|
173
|
+
* means never bounce (a failing verdict goes straight to the registration's park/fail).
|
|
174
|
+
*/
|
|
175
|
+
readonly judgeMaxBounces: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>;
|
|
163
176
|
/**
|
|
164
177
|
* When false the `merger` step never auto-merges: every PR is routed to a human
|
|
165
178
|
* `merge_review` notification regardless of the assessment scores. The built-in
|
|
@@ -273,6 +286,8 @@ export declare const createRiskPolicySchema: v.ObjectSchema<{
|
|
|
273
286
|
readonly releaseWatchWindowMinutes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 720, undefined>]>, 30>;
|
|
274
287
|
readonly releaseMaxAttempts: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 10, undefined>]>, 1>;
|
|
275
288
|
readonly humanReviewGraceMinutes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1440, undefined>]>, 10>;
|
|
289
|
+
readonly judgeMinScore: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0.7>;
|
|
290
|
+
readonly judgeMaxBounces: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 10, undefined>]>, 1>;
|
|
276
291
|
/** Allow auto-merge of a within-threshold, explained assessment (default true). */
|
|
277
292
|
readonly autoMergeEnabled: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
|
|
278
293
|
/** Estimate gating for the implementation-fork decision phase; absent ⇒ off in `auto` mode. */
|
|
@@ -360,6 +375,8 @@ export declare const updateRiskPolicySchema: v.ObjectSchema<{
|
|
|
360
375
|
readonly releaseWatchWindowMinutes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 720, undefined>]>, undefined>;
|
|
361
376
|
readonly releaseMaxAttempts: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 10, undefined>]>, undefined>;
|
|
362
377
|
readonly humanReviewGraceMinutes: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1440, undefined>]>, undefined>;
|
|
378
|
+
readonly judgeMinScore: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>, undefined>;
|
|
379
|
+
readonly judgeMaxBounces: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 10, undefined>]>, undefined>;
|
|
363
380
|
readonly autoMergeEnabled: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
364
381
|
readonly forkDecision: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
|
|
365
382
|
readonly enabled: v.BooleanSchema<undefined>;
|
package/dist/merge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAoB5B;;;;GAIG;AACH;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,gEAAgD,CAAA;AAC1F,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEzF,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAK5E,CAAA;AAUD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,gEAAgD,CAAA;AACjF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQjC,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,eAAO,MAAM,qBAAqB;IAChC,8DAA8D;;IAE9D,yEAAyE;;IAEzE,+DAA+D;;IAE/D,qFAAqF;;aAErF,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;IAG3B,4EAA4E;;IAE5E,sEAAsE;;IAEtE,wEAAwE;;IAExE,qFAAqF;;IAErF;;;;OAIG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;OAMG;;IAEH;;;OAGG;;IAEH;;;;OAIG;;IAEH;;;;;OAKG;;IAEH;;;;;OAKG;;IAEH;;;;OAIG;;IAEH;;;;;OAKG;;IAEH;;;;;;;;;OASG;;;;;;;;IAEH;;;;OAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEH,0FAA0F;;IAE1F;;;;;OAKG;;;aAGH,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAa/D,0DAA0D;AAC1D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;IAcjC,mFAAmF;;IAEnF,+FAA+F;;;;;;;;IAE/F,uFAAuF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEvF,sEAAsE;;aAEtE,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAEhF,sEAAsE;AACtE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;IAgBjC,yFAAyF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAGzF,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAEhF,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAEpE;AAUD,yDAAyD;AACzD,eAAO,MAAM,eAAe,+DAA+C,CAAA;AAC3E,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,yFAAyF;AACzF,eAAO,MAAM,6BAA6B;IACxC,4DAA4D;;;;;;IAM5D;;;;;OAKG;;aAEH,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEzF,eAAO,MAAM,mBAAmB;IAC9B,gFAAgF;;IAEhF;;;;;;;;;;;;;;;;;;OAkBG;;IAYH,+EAA+E;;QAvP/E,8DAA8D;;QAE9D,yEAAyE;;QAEzE,+DAA+D;;QAE/D,qFAAqF;;;;QAgMrF,4DAA4D;;;;;;QAM5D;;;;;WAKG;;;IAyCH,6FAA6F;;IAE7F;;;;;OAKG;;aAEH,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
|
package/dist/merge.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
2
|
import { stepGatingSchema } from './consensus.js';
|
|
3
3
|
import { changeClassSchema, RULEABLE_CHANGE_CLASSES } from './mergeTrackRecord.js';
|
|
4
|
+
import { DEFAULT_JUDGE_MAX_BOUNCES, DEFAULT_JUDGE_MIN_SCORE } from './judge.js';
|
|
4
5
|
// ---------------------------------------------------------------------------
|
|
5
6
|
// Merge-policy wire contracts. After a pipeline's implementation work is done
|
|
6
7
|
// and CI is green, a `merger` agent assesses the pull request along three axes —
|
|
@@ -129,6 +130,19 @@ export const riskPolicySchema = v.object({
|
|
|
129
130
|
* PR's outstanding comments are addressed immediately.
|
|
130
131
|
*/
|
|
131
132
|
humanReviewGraceMinutes: v.pipe(v.number(), v.integer(), v.minValue(0)),
|
|
133
|
+
/**
|
|
134
|
+
* The minimum score (0..1) a JUDGE step's verdict must reach for the run to advance
|
|
135
|
+
* without a human. Below it, the judge applies its registration's `onFail` disposition
|
|
136
|
+
* (park / bounce / fail). The per-task counterpart of `maxRequirementConcernAllowed`:
|
|
137
|
+
* how much rubric deviation THIS task tolerates. See `docs/initiatives/judge-registry.md`.
|
|
138
|
+
*/
|
|
139
|
+
judgeMinScore: v.pipe(v.number(), v.minValue(0), v.maxValue(1)),
|
|
140
|
+
/**
|
|
141
|
+
* How many BOUNCE rounds a judge may spend — re-arming the preceding producing step with
|
|
142
|
+
* the verdict's findings as rework feedback — before it must stop and ask a human. `0`
|
|
143
|
+
* means never bounce (a failing verdict goes straight to the registration's park/fail).
|
|
144
|
+
*/
|
|
145
|
+
judgeMaxBounces: v.pipe(v.number(), v.integer(), v.minValue(0)),
|
|
132
146
|
/**
|
|
133
147
|
* When false the `merger` step never auto-merges: every PR is routed to a human
|
|
134
148
|
* `merge_review` notification regardless of the assessment scores. The built-in
|
|
@@ -172,6 +186,7 @@ const iterationsSchema = v.pipe(v.number(), v.integer(), v.minValue(1), v.maxVal
|
|
|
172
186
|
const releaseWindowSchema = v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(720));
|
|
173
187
|
const releaseAttemptsSchema = v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(10));
|
|
174
188
|
const graceMinutesSchema = v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(1440));
|
|
189
|
+
const bouncesSchema = v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(10));
|
|
175
190
|
/** Create a new merge threshold preset in a workspace. */
|
|
176
191
|
export const createRiskPolicySchema = v.object({
|
|
177
192
|
name: presetNameSchema,
|
|
@@ -185,6 +200,8 @@ export const createRiskPolicySchema = v.object({
|
|
|
185
200
|
releaseWatchWindowMinutes: v.optional(releaseWindowSchema, 30),
|
|
186
201
|
releaseMaxAttempts: v.optional(releaseAttemptsSchema, 1),
|
|
187
202
|
humanReviewGraceMinutes: v.optional(graceMinutesSchema, 10),
|
|
203
|
+
judgeMinScore: v.optional(scoreSchema, DEFAULT_JUDGE_MIN_SCORE),
|
|
204
|
+
judgeMaxBounces: v.optional(bouncesSchema, DEFAULT_JUDGE_MAX_BOUNCES),
|
|
188
205
|
/** Allow auto-merge of a within-threshold, explained assessment (default true). */
|
|
189
206
|
autoMergeEnabled: v.optional(v.boolean(), true),
|
|
190
207
|
/** Estimate gating for the implementation-fork decision phase; absent ⇒ off in `auto` mode. */
|
|
@@ -207,6 +224,8 @@ export const updateRiskPolicySchema = v.object({
|
|
|
207
224
|
releaseWatchWindowMinutes: v.optional(releaseWindowSchema),
|
|
208
225
|
releaseMaxAttempts: v.optional(releaseAttemptsSchema),
|
|
209
226
|
humanReviewGraceMinutes: v.optional(graceMinutesSchema),
|
|
227
|
+
judgeMinScore: v.optional(scoreSchema),
|
|
228
|
+
judgeMaxBounces: v.optional(bouncesSchema),
|
|
210
229
|
autoMergeEnabled: v.optional(v.boolean()),
|
|
211
230
|
forkDecision: v.optional(v.nullable(stepGatingSchema)),
|
|
212
231
|
/** Replaces the whole rule map (not merged), so clearing a class is a plain omission. */
|
package/dist/merge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ export declare const notificationWebhookSchema: v.ObjectSchema<{
|
|
|
8
8
|
* headless overseer cares about — rather than "everything", so registering an endpoint can't
|
|
9
9
|
* accidentally fire-hose every card at an integration that only wanted to hear about parks.
|
|
10
10
|
*/
|
|
11
|
-
readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "pr_review_ready", "initiative", "platform_health", "budget_paused", "key_drift", "merge_tag_request"], undefined>, undefined>;
|
|
11
|
+
readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "budget_paused", "key_drift", "merge_tag_request"], undefined>, undefined>;
|
|
12
12
|
/** Whether deliveries are currently attempted. Registering an endpoint enables it. */
|
|
13
13
|
readonly enabled: v.BooleanSchema<undefined>;
|
|
14
14
|
/** Whether a signing secret is set (the secret itself is never returned). */
|
|
@@ -24,7 +24,7 @@ export type NotificationWebhook = v.InferOutput<typeof notificationWebhookSchema
|
|
|
24
24
|
export declare const putNotificationWebhookSchema: v.ObjectSchema<{
|
|
25
25
|
readonly url: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.UrlAction<string, undefined>, v.StartsWithAction<string, "https://", "The webhook endpoint must be an https:// URL">, v.MaxLengthAction<string, 2000, undefined>]>;
|
|
26
26
|
/** Omit ⇒ deliver the default parking types. */
|
|
27
|
-
readonly types: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "pr_review_ready", "initiative", "platform_health", "budget_paused", "key_drift", "merge_tag_request"], undefined>, undefined>, undefined>;
|
|
27
|
+
readonly types: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "budget_paused", "key_drift", "merge_tag_request"], undefined>, undefined>, undefined>;
|
|
28
28
|
readonly enabled: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
29
29
|
/** New signing secret; omit to keep the current one. */
|
|
30
30
|
readonly secret: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 16, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
|
|
@@ -52,7 +52,7 @@ export declare const notificationWebhookDeliverySchema: v.ObjectSchema<{
|
|
|
52
52
|
readonly taskId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
53
53
|
readonly notification: v.ObjectSchema<{
|
|
54
54
|
readonly id: v.StringSchema<undefined>;
|
|
55
|
-
readonly type: v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "pr_review_ready", "initiative", "platform_health", "budget_paused", "key_drift", "merge_tag_request"], undefined>;
|
|
55
|
+
readonly type: v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "budget_paused", "key_drift", "merge_tag_request"], undefined>;
|
|
56
56
|
readonly status: v.PicklistSchema<["open", "acted", "dismissed"], undefined>;
|
|
57
57
|
readonly severity: v.OptionalSchema<v.PicklistSchema<["normal", "urgent"], undefined>, undefined>;
|
|
58
58
|
readonly blockId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
package/dist/notifications.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as v from 'valibot';
|
|
|
4
4
|
* the frontend can switch on it to render the right action; extending it is a
|
|
5
5
|
* one-line change here plus a handler in the worker's `act` route.
|
|
6
6
|
*/
|
|
7
|
-
export declare const notificationTypeSchema: v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "pr_review_ready", "initiative", "platform_health", "budget_paused", "key_drift", "merge_tag_request"], undefined>;
|
|
7
|
+
export declare const notificationTypeSchema: v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "budget_paused", "key_drift", "merge_tag_request"], undefined>;
|
|
8
8
|
export type NotificationType = v.InferOutput<typeof notificationTypeSchema>;
|
|
9
9
|
/**
|
|
10
10
|
* The closed set of notification types that count as "a task is waiting on a human review"
|
|
@@ -22,7 +22,7 @@ export type NotificationType = v.InferOutput<typeof notificationTypeSchema>;
|
|
|
22
22
|
* ALREADY merged, so it is a post-hoc nudge for one tap — counting it as review debt would
|
|
23
23
|
* friction task authoring over work that is finished.
|
|
24
24
|
*/
|
|
25
|
-
export declare const REVIEW_WAIT_NOTIFICATION_TYPES: readonly ["merge_review", "pipeline_complete", "requirement_review", "clarity_review", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "pr_review_ready"];
|
|
25
|
+
export declare const REVIEW_WAIT_NOTIFICATION_TYPES: readonly ["merge_review", "pipeline_complete", "requirement_review", "clarity_review", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready"];
|
|
26
26
|
export type ReviewWaitNotificationType = (typeof REVIEW_WAIT_NOTIFICATION_TYPES)[number];
|
|
27
27
|
/** Whether a notification type counts as a task waiting on human review (see above). */
|
|
28
28
|
export declare function isReviewWaitNotificationType(type: NotificationType): boolean;
|
|
@@ -173,7 +173,7 @@ export type NotificationPayload = v.InferOutput<typeof notificationPayloadSchema
|
|
|
173
173
|
/** A human-actionable item surfaced on the board. */
|
|
174
174
|
export declare const notificationSchema: v.ObjectSchema<{
|
|
175
175
|
readonly id: v.StringSchema<undefined>;
|
|
176
|
-
readonly type: v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "pr_review_ready", "initiative", "platform_health", "budget_paused", "key_drift", "merge_tag_request"], undefined>;
|
|
176
|
+
readonly type: v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "budget_paused", "key_drift", "merge_tag_request"], undefined>;
|
|
177
177
|
readonly status: v.PicklistSchema<["open", "acted", "dismissed"], undefined>;
|
|
178
178
|
/**
|
|
179
179
|
* Render urgency (see {@link notificationSeveritySchema}). Absent ⇒ `normal`. Flipped
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../src/notifications.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AA8E5B;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../src/notifications.ts"],"names":[],"mappings":"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"}
|
package/dist/notifications.js
CHANGED
|
@@ -93,6 +93,7 @@ export const notificationTypeSchema = v.picklist([
|
|
|
93
93
|
'human_review',
|
|
94
94
|
'followup_pending',
|
|
95
95
|
'fork_decision_pending',
|
|
96
|
+
'judge_review',
|
|
96
97
|
'pr_review_ready',
|
|
97
98
|
'initiative',
|
|
98
99
|
'platform_health',
|
|
@@ -127,6 +128,7 @@ export const REVIEW_WAIT_NOTIFICATION_TYPES = [
|
|
|
127
128
|
'human_review',
|
|
128
129
|
'followup_pending',
|
|
129
130
|
'fork_decision_pending',
|
|
131
|
+
'judge_review',
|
|
130
132
|
'pr_review_ready',
|
|
131
133
|
];
|
|
132
134
|
const REVIEW_WAIT_NOTIFICATION_TYPE_SET = new Set(REVIEW_WAIT_NOTIFICATION_TYPES);
|