@cat-factory/orchestration 0.226.0 → 0.228.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/container/dependencies.d.ts +15 -1
- package/dist/container/dependencies.d.ts.map +1 -1
- package/dist/container/foundation.d.ts.map +1 -1
- package/dist/container/foundation.js +17 -6
- package/dist/container/foundation.js.map +1 -1
- package/dist/container/modules.js +2 -2
- package/dist/container/modules.js.map +1 -1
- package/dist/container.d.ts +21 -8
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +4 -1
- package/dist/container.js.map +1 -1
- package/dist/modules/board/BoardService.d.ts +22 -9
- package/dist/modules/board/BoardService.d.ts.map +1 -1
- package/dist/modules/board/BoardService.js +42 -106
- package/dist/modules/board/BoardService.js.map +1 -1
- package/dist/modules/board/publicBoardReads.d.ts +3 -3
- package/dist/modules/board/publicBoardReads.d.ts.map +1 -1
- package/dist/modules/board/publicBoardReads.js.map +1 -1
- package/dist/modules/board/reparentWrite.d.ts +43 -0
- package/dist/modules/board/reparentWrite.d.ts.map +1 -0
- package/dist/modules/board/reparentWrite.js +126 -0
- package/dist/modules/board/reparentWrite.js.map +1 -0
- package/dist/modules/board/riskPolicySelectionGuard.d.ts +45 -4
- package/dist/modules/board/riskPolicySelectionGuard.d.ts.map +1 -1
- package/dist/modules/board/riskPolicySelectionGuard.js +84 -20
- package/dist/modules/board/riskPolicySelectionGuard.js.map +1 -1
- package/dist/modules/boardScan/BoardScanService.js +6 -6
- package/dist/modules/boardScan/BoardScanService.js.map +1 -1
- package/dist/modules/execution/ExecutionServiceDependencies.d.ts +2 -1
- package/dist/modules/execution/ExecutionServiceDependencies.d.ts.map +1 -1
- package/dist/modules/execution/MergeResolver.d.ts +3 -3
- package/dist/modules/execution/MergeResolver.d.ts.map +1 -1
- package/dist/modules/execution/MergeResolver.js +76 -34
- package/dist/modules/execution/MergeResolver.js.map +1 -1
- package/dist/modules/execution/PostMergeBoardController.d.ts.map +1 -1
- package/dist/modules/execution/PostMergeBoardController.js +6 -1
- package/dist/modules/execution/PostMergeBoardController.js.map +1 -1
- package/dist/modules/execution/RunMergePolicy.d.ts +3 -2
- package/dist/modules/execution/RunMergePolicy.d.ts.map +1 -1
- package/dist/modules/execution/RunMergePolicy.js +1 -1
- package/dist/modules/execution/RunMergePolicy.js.map +1 -1
- package/dist/modules/execution/StepGraph.d.ts.map +1 -1
- package/dist/modules/execution/StepGraph.js +20 -0
- package/dist/modules/execution/StepGraph.js.map +1 -1
- package/dist/modules/execution/policy-types.d.ts +5 -4
- package/dist/modules/execution/policy-types.d.ts.map +1 -1
- package/dist/modules/merge/RiskPolicyService.d.ts +22 -11
- package/dist/modules/merge/RiskPolicyService.d.ts.map +1 -1
- package/dist/modules/merge/RiskPolicyService.js +27 -48
- package/dist/modules/merge/RiskPolicyService.js.map +1 -1
- package/dist/modules/merge/riskPolicyResolution.d.ts +36 -4
- package/dist/modules/merge/riskPolicyResolution.d.ts.map +1 -1
- package/dist/modules/merge/riskPolicyResolution.js +36 -8
- package/dist/modules/merge/riskPolicyResolution.js.map +1 -1
- package/package.json +11 -11
|
@@ -3,6 +3,59 @@ import { isDryRun, parseMergeAssessment, resolveRoleScopedMergeClassRule, submis
|
|
|
3
3
|
function pct(score) {
|
|
4
4
|
return `${Math.round(score * 100)}%`;
|
|
5
5
|
}
|
|
6
|
+
/** How a card names the kind of change, when the diff was readable enough to classify it. */
|
|
7
|
+
function changeClassPhrase(changeClass) {
|
|
8
|
+
return changeClass === 'unknown' ? 'this' : `a \`${changeClass}\``;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The sentence each refusal leads with. Exhaustive over {@link ReviewCardReason} by type, so the
|
|
12
|
+
* next rung cannot ship wearing a neighbour's wording.
|
|
13
|
+
*
|
|
14
|
+
* Only `exceeded_thresholds` may blame the ceilings, because it is the only reason a ceiling
|
|
15
|
+
* decided. Every other arm says what actually refused and leaves the scores to the tail
|
|
16
|
+
* {@link reviewCardBody} appends, where they read as the information they are rather than as the
|
|
17
|
+
* thing to go and change.
|
|
18
|
+
*/
|
|
19
|
+
const REVIEW_CARD_LEAD = {
|
|
20
|
+
dry_run: () => `This was a dry run, so its PR was left open for a human regardless of the assessment.`,
|
|
21
|
+
submission_not_allowed: (ctx) => `This task's merge policy does not let the role that started this run land ` +
|
|
22
|
+
`${changeClassPhrase(ctx.changeClass)} change, so its PR was left open regardless of the ` +
|
|
23
|
+
`assessment.`,
|
|
24
|
+
auto_merge_disabled: () => `This task's merge policy routes every pull request to a human, so this one was left open ` +
|
|
25
|
+
`regardless of the assessment.`,
|
|
26
|
+
// The one refusal whose remedy is not a setting to edit: nothing was configured to edit. It
|
|
27
|
+
// says so plainly and names no ceiling, because the fallback's ceilings are pinned to 0 and
|
|
28
|
+
// took no part in this (they would read as the strictest policy in the product).
|
|
29
|
+
no_policy_configured: () => `No merge policy governed this run, so nothing merged on its own and this PR was left open ` +
|
|
30
|
+
`for a human. This deployment has no merge preset library wired, so none of the task's ` +
|
|
31
|
+
`auto-merge ceilings took part in the decision.`,
|
|
32
|
+
role_requires_review: (ctx) => `This task's merge policy asks a human to review ${changeClassPhrase(ctx.changeClass)} ` +
|
|
33
|
+
`change from the role that started this run, so its PR was left open regardless of the ` +
|
|
34
|
+
`assessment.`,
|
|
35
|
+
class_requires_review: (ctx) => `This task's merge policy asks a human to review ${changeClassPhrase(ctx.changeClass)} ` +
|
|
36
|
+
`change, so its PR was left open regardless of the assessment.`,
|
|
37
|
+
no_rationale: () => `The merger returned scores but did not explain them, so its verdict was not trusted to ` +
|
|
38
|
+
`merge this PR on its own.`,
|
|
39
|
+
no_assessment: () => `The merger could not produce a valid assessment for this PR. Review and merge manually.`,
|
|
40
|
+
exceeded_thresholds: () => `The merger scored this PR outside the task's auto-merge thresholds.`,
|
|
41
|
+
merge_failed: () => `The automatic merge for this PR did not go through, so it was left open for a human.`,
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* The review card's body: why review was needed, then the assessment as supporting information.
|
|
45
|
+
*
|
|
46
|
+
* The scores ride the SAME tail on every reason so they never have to double as the explanation.
|
|
47
|
+
* A rationale is appended only when the merger wrote one, which is exactly what `no_rationale`
|
|
48
|
+
* reports the absence of.
|
|
49
|
+
*/
|
|
50
|
+
function reviewCardBody(ctx, assessment) {
|
|
51
|
+
const lead = REVIEW_CARD_LEAD[ctx.reason](ctx);
|
|
52
|
+
if (!assessment)
|
|
53
|
+
return lead;
|
|
54
|
+
const scores = `complexity ${pct(assessment.complexity)}, risk ${pct(assessment.risk)}, ` +
|
|
55
|
+
`impact ${pct(assessment.impact)}`;
|
|
56
|
+
const rationale = assessment.rationale.trim();
|
|
57
|
+
return `${lead} Its scores were ${scores}.${rationale ? ` ${rationale}` : ''}`;
|
|
58
|
+
}
|
|
6
59
|
/**
|
|
7
60
|
* The auto-merge precedence ladder, most-significant first:
|
|
8
61
|
*
|
|
@@ -14,7 +67,8 @@ function pct(score) {
|
|
|
14
67
|
* WHO started the run. What separates it from a `never` class rule is that it also refuses
|
|
15
68
|
* the MANUAL merge, so it is a bar on landing rather than a demand for review.
|
|
16
69
|
* 3. `autoMergeEnabled: false`, the master switch. "Manual review only" stays manual and a
|
|
17
|
-
* class rule can NEVER override it.
|
|
70
|
+
* class rule can NEVER override it. The unconfigured fallback refuses on this same rung, and
|
|
71
|
+
* is reported as `no_policy_configured` rather than borrowing the preset's name.
|
|
18
72
|
* 4. The class rule AS NARROWED BY THE INITIATOR'S ROLE: `always` merges regardless of the
|
|
19
73
|
* scores, and regardless of the rationale backstop, because an explicit operator policy
|
|
20
74
|
* keyed on a DETERMINISTIC backend classification outranks the agent's self-report; `never`
|
|
@@ -48,8 +102,12 @@ function reviewReasonFor(input) {
|
|
|
48
102
|
return 'dry_run';
|
|
49
103
|
if (!input.submissionAllowed)
|
|
50
104
|
return 'submission_not_allowed';
|
|
51
|
-
|
|
52
|
-
|
|
105
|
+
// Same rung, two names. A deployment that stated no merge policy and a preset that states
|
|
106
|
+
// "always ask a human" both refuse here, and sending the first reader to edit a preset they do
|
|
107
|
+
// not have is the misattribution this whole ladder exists to avoid.
|
|
108
|
+
if (!input.autoMergeEnabled) {
|
|
109
|
+
return input.policyConfigured ? 'auto_merge_disabled' : 'no_policy_configured';
|
|
110
|
+
}
|
|
53
111
|
if (input.effectiveRule === 'never') {
|
|
54
112
|
return input.narrowedByRole ? 'role_requires_review' : 'class_requires_review';
|
|
55
113
|
}
|
|
@@ -168,6 +226,9 @@ export class MergeResolver {
|
|
|
168
226
|
dryRun,
|
|
169
227
|
submissionAllowed,
|
|
170
228
|
autoMergeEnabled: preset.autoMergeEnabled,
|
|
229
|
+
// No id ⇒ the built-in fallback governed (see `MergeThresholds.id`), which is the one
|
|
230
|
+
// policy no workspace has a row for.
|
|
231
|
+
policyConfigured: preset.id !== undefined,
|
|
171
232
|
effectiveRule,
|
|
172
233
|
narrowedByRole,
|
|
173
234
|
hasAssessment: assessment !== null,
|
|
@@ -178,11 +239,10 @@ export class MergeResolver {
|
|
|
178
239
|
// raise sites below differ only in WHY they were reached, and a card that named a different
|
|
179
240
|
// cause on the merge-failure path than on the refusal path would be reporting the resolver's
|
|
180
241
|
// control flow rather than the run's policy.
|
|
181
|
-
const cardContext = (recordId) => ({
|
|
242
|
+
const cardContext = (reason, recordId) => ({
|
|
182
243
|
changeClass: classification.changeClass,
|
|
183
244
|
...(recordId ? { recordId } : {}),
|
|
184
|
-
|
|
185
|
-
submissionBlocked: !submissionAllowed,
|
|
245
|
+
reason,
|
|
186
246
|
});
|
|
187
247
|
const record = (decision) => this.deps.mergeTrackRecord?.recordDecision(workspaceId, {
|
|
188
248
|
block,
|
|
@@ -210,20 +270,20 @@ export class MergeResolver {
|
|
|
210
270
|
// Auto-merge failed outright (e.g. branch protection / conflict, or the first PR of a
|
|
211
271
|
// multi-repo task): fall through to a review notification so a human can sort it out.
|
|
212
272
|
const pending = await record('pending_review');
|
|
213
|
-
await this.raiseReviewAndBlock(workspaceId, instance, block, assessment, cardContext(pending?.id));
|
|
273
|
+
await this.raiseReviewAndBlock(workspaceId, instance, block, assessment, cardContext('merge_failed', pending?.id));
|
|
214
274
|
return { ...base, outcome: 'awaiting_review', reason: 'merge_failed', exceededAxes };
|
|
215
275
|
}
|
|
216
276
|
}
|
|
217
277
|
const pending = await record('pending_review');
|
|
218
|
-
await this.raiseReviewAndBlock(workspaceId, instance, block, assessment, cardContext(pending?.id));
|
|
278
|
+
await this.raiseReviewAndBlock(workspaceId, instance, block, assessment, cardContext(reviewReason, pending?.id));
|
|
219
279
|
return { ...base, outcome: 'awaiting_review', reason: reviewReason, exceededAxes };
|
|
220
280
|
}
|
|
221
281
|
/**
|
|
222
282
|
* The track-record context a review card carries so the human can tag in the same tap.
|
|
223
283
|
*
|
|
224
|
-
* Takes only what it PROJECTS. `
|
|
225
|
-
* thread, but it
|
|
226
|
-
* here would advertise an input this function has no use for.
|
|
284
|
+
* Takes only what it PROJECTS. The `reason` rides the same {@link ReviewCardContext} the
|
|
285
|
+
* callers thread, but it decides the card's WORDING rather than its track-record link, so
|
|
286
|
+
* naming it here would advertise an input this function has no use for.
|
|
227
287
|
*/
|
|
228
288
|
trackContext = (ctx) => ({
|
|
229
289
|
...(ctx.changeClass !== 'unknown' ? { changeClass: ctx.changeClass } : {}),
|
|
@@ -253,29 +313,11 @@ export class MergeResolver {
|
|
|
253
313
|
async raiseMergeReview(workspaceId, instance, block, assessment, track) {
|
|
254
314
|
if (!this.deps.notificationService)
|
|
255
315
|
return;
|
|
256
|
-
//
|
|
257
|
-
//
|
|
258
|
-
//
|
|
259
|
-
//
|
|
260
|
-
const
|
|
261
|
-
? `complexity ${pct(assessment.complexity)}, risk ${pct(assessment.risk)}, ` +
|
|
262
|
-
`impact ${pct(assessment.impact)}`
|
|
263
|
-
: null;
|
|
264
|
-
const body = track.dryRun
|
|
265
|
-
? `This was a dry run, so its PR was left open for a human regardless of the assessment.` +
|
|
266
|
-
(scores && assessment ? ` The merger scored it ${scores}. ${assessment.rationale}` : '')
|
|
267
|
-
: // Same rule as the sandbox: name the policy that actually held the PR back rather than
|
|
268
|
-
// the scores nobody consulted. It deliberately does NOT claim the change cannot land: the
|
|
269
|
-
// PR is real, and a teammate whose role may land this class can merge it from here.
|
|
270
|
-
track.submissionBlocked
|
|
271
|
-
? `This task's merge policy does not let the role that started this run land ` +
|
|
272
|
-
`${track.changeClass === 'unknown' ? 'this' : `a \`${track.changeClass}\``} change, so ` +
|
|
273
|
-
`its PR was left open regardless of the assessment.` +
|
|
274
|
-
(scores && assessment ? ` The merger scored it ${scores}. ${assessment.rationale}` : '')
|
|
275
|
-
: assessment
|
|
276
|
-
? `The merger scored this PR outside the task's auto-merge thresholds ` +
|
|
277
|
-
`(${scores}). ${assessment.rationale}`
|
|
278
|
-
: `The merger could not produce a valid assessment for this PR. Review and merge manually.`;
|
|
316
|
+
// Worded from the DECISION's own reason: a card must name the thing that actually held the
|
|
317
|
+
// PR back, or it sends the reader to edit a setting that took no part in the outcome. The
|
|
318
|
+
// wording deliberately never claims the change cannot land: the PR is real, and a human who
|
|
319
|
+
// may land it can merge it from here.
|
|
320
|
+
const body = reviewCardBody(track, assessment);
|
|
279
321
|
await this.deps.notificationService.raise(workspaceId, {
|
|
280
322
|
type: 'merge_review',
|
|
281
323
|
blockId: block.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MergeResolver.js","sourceRoot":"","sources":["../../../src/modules/execution/MergeResolver.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,+BAA+B,EAC/B,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAA;AAI/B,yEAAyE;AACzE,SAAS,GAAG,CAAC,KAAa;IACxB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAA;AACtC,CAAC;
|
|
1
|
+
{"version":3,"file":"MergeResolver.js","sourceRoot":"","sources":["../../../src/modules/execution/MergeResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostMergeBoardController.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/PostMergeBoardController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PostMergeBoardController.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/PostMergeBoardController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACvB,MAAM,EAEN,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAA;IAC/C;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAA;IAC3C,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,8FAA8F;AAC9F,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,wBAAwB,EAAE,CACxB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,UAAU,EAAE,MAAM,EAAE,KACjB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAA;IAClC,kGAAkG;IAClG,KAAK,EAAE,CACL,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KACjC,OAAO,CAAC,OAAO,CAAC,CAAA;CACtB;AAED;;;;;;;;;GASG;AACH,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,4BAA4B,EACjD;IAEJ;;;;;;;OAOG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkEnF;IAED;;;OAGG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC9E;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { UNATTRIBUTED_BLOCK_EDIT_AUTHORITY } from '@cat-factory/contracts';
|
|
1
2
|
import { dependenciesMet, serviceOf } from '../board/board.logic.js';
|
|
2
3
|
/**
|
|
3
4
|
* The board-shaped follow-up a MERGED task triggers: materialise the module it was assigned to,
|
|
@@ -106,7 +107,11 @@ export class PostMergeBoardController {
|
|
|
106
107
|
await this.host.board.reparent(workspaceId, taskId, {
|
|
107
108
|
parentId: module.id,
|
|
108
109
|
position: { x: 16 + (n % 2) * 190, y: 40 + Math.floor(n / 2) * 130 },
|
|
109
|
-
}
|
|
110
|
+
},
|
|
111
|
+
// A merged run materialising the module its task named: the engine acting on what the
|
|
112
|
+
// work produced, with no request and no session behind it, so there is no tier to read.
|
|
113
|
+
// The move is within the service in any case, which re-decides no merge policy.
|
|
114
|
+
UNATTRIBUTED_BLOCK_EDIT_AUTHORITY);
|
|
110
115
|
}
|
|
111
116
|
// A module node appeared and/or a task changed parent: a hierarchy change spanning two
|
|
112
117
|
// blocks, which no single payload can state, so this stays a coarse refresh. Name the moved
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostMergeBoardController.js","sourceRoot":"","sources":["../../../src/modules/execution/PostMergeBoardController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PostMergeBoardController.js","sourceRoot":"","sources":["../../../src/modules/execution/PostMergeBoardController.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,8 @@ import type { ResolvedRunRiskPolicy } from './policy-types.js';
|
|
|
5
5
|
export interface RunMergePolicyDeps {
|
|
6
6
|
/**
|
|
7
7
|
* Optional: resolves a task's merge threshold preset (auto-merge ceilings, the per-class
|
|
8
|
-
* rules, and the CI-fixer attempt budget). Absent → the built-in `
|
|
8
|
+
* rules, and the CI-fixer attempt budget). Absent → the built-in `FALLBACK_RISK_POLICY`, which
|
|
9
|
+
* auto-merges nothing.
|
|
9
10
|
*/
|
|
10
11
|
riskPolicyRepository?: RiskPolicyRepository;
|
|
11
12
|
/**
|
|
@@ -39,7 +40,7 @@ export declare class RunMergePolicy {
|
|
|
39
40
|
constructor(deps: RunMergePolicyDeps);
|
|
40
41
|
/**
|
|
41
42
|
* Resolve the merge threshold preset that governs a task: its explicitly-picked preset, else
|
|
42
|
-
* the workspace default, else the built-in `
|
|
43
|
+
* the workspace default, else the built-in `FALLBACK_RISK_POLICY`. Returns the thresholds
|
|
43
44
|
* the engine compares against, the per-class rules, and the CI attempt budget.
|
|
44
45
|
*
|
|
45
46
|
* Reads through the `riskPolicy` cache slice when wired: the row is slow-moving admin config
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunMergePolicy.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/RunMergePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAElF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE9D,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC
|
|
1
|
+
{"version":3,"file":"RunMergePolicy.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/RunMergePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAElF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE9D,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C;;;;OAIG;IACH,eAAe,CAAC,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAA;IACxD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,uBAAuB,CAAA;CAC3C;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,kBAAkB,EAAI;IAEzD;;;;;;;;;OASG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAO/E;IAED;;;;;;;;;;;;;OAaG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAKjF;IAED;;;;OAIG;IACG,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,GACjC,OAAO,CAAC,IAAI,CAAC,CAUf;IAED;;;;OAIG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7E;CACF"}
|
|
@@ -20,7 +20,7 @@ export class RunMergePolicy {
|
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* Resolve the merge threshold preset that governs a task: its explicitly-picked preset, else
|
|
23
|
-
* the workspace default, else the built-in `
|
|
23
|
+
* the workspace default, else the built-in `FALLBACK_RISK_POLICY`. Returns the thresholds
|
|
24
24
|
* the engine compares against, the per-class rules, and the CI attempt budget.
|
|
25
25
|
*
|
|
26
26
|
* Reads through the `riskPolicy` cache slice when wired: the row is slow-moving admin config
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunMergePolicy.js","sourceRoot":"","sources":["../../../src/modules/execution/RunMergePolicy.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"RunMergePolicy.js","sourceRoot":"","sources":["../../../src/modules/execution/RunMergePolicy.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AAwB1F;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,cAAc;IACI,IAAI;IAAjC,YAA6B,IAAwB;oBAAxB,IAAI;IAAuB,CAAC;IAEzD;;;;;;;;;OASG;IACH,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,KAAY;QAC7C,OAAO,iBAAiB,CAAC;YACvB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB;YAC1C,WAAW;YACX,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC;SACnE,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,mBAAmB,CAAC,WAAmB,EAAE,KAAY;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAA;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAA;QAC1B,4FAA4F;QAC5F,OAAO,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAA;IAC7D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CACpB,WAAmB,EACnB,OAAe,EACf,YAAkC;QAElC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAA;QACtC,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAC/D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW;gBAAE,OAAM;YAC1C,MAAM,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,YAAY,CAAC,CAAA;QAC1F,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,WAAmB;QAC5D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QACzF,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepGraph.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/StepGraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAI5D;;;;;;;;;;;;;GAaG;AACH,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IARrC,YACmB,KAAK,EAAE,KAAK;IAC7B;;;;;OAKG;IACc,iBAAiB,CAAC,EAAE,iBAAiB,YAAA,EACpD;IAEJ,4FAA4F;IAC5F,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAelC;IAED;;;;;;;;OAQG;IACH,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAInC;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAG1C;IAED;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"StepGraph.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/StepGraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAI5D;;;;;;;;;;;;;GAaG;AACH,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IARrC,YACmB,KAAK,EAAE,KAAK;IAC7B;;;;;OAKG;IACc,iBAAiB,CAAC,EAAE,iBAAiB,YAAA,EACpD;IAEJ,4FAA4F;IAC5F,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAelC;IAED;;;;;;;;OAQG;IACH,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAInC;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAG1C;IAED;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CA8D1C;IAED;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAIrF;IAED;;;;;OAKG;IACH,sBAAsB,CACpB,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,GACzC,MAAM,CAGR;IAED;;;;;;;OAOG;IACH,oBAAoB,CAClB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,GAC1C,IAAI,CAQN;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CASlF;IAED;;;;;;OAMG;IACH,qBAAqB,CACnB,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,GAC1C,IAAI,CAqBN;CACF"}
|
|
@@ -102,6 +102,26 @@ export class StepGraph {
|
|
|
102
102
|
// — this one can legitimately go present → absent (a looped-back `repro-test` step has its
|
|
103
103
|
// `custom` cleared above, so the re-dispatch resolves no spec and nothing overwrites it).
|
|
104
104
|
step.reproduction = undefined;
|
|
105
|
+
// Drop the previous dispatch's tool-server (MCP) resolution. It is the ONE field
|
|
106
|
+
// `recordDispatchAttribution` pins that no settle-time path consumes: `model`,
|
|
107
|
+
// `subscriptionTokenId` and `initiatedByUserId` are read back when the job's usage lands (which
|
|
108
|
+
// is why they are guarded on presence there, and why clearing them HERE would put every
|
|
109
|
+
// re-run's `token_usage` row back to provider "unknown"), while this one is only ever read out
|
|
110
|
+
// again — by the debug projection and the step surface's chips. So a reset can say "no dispatch
|
|
111
|
+
// has answered this yet" at no attribution cost, and saying it is the honest move: the record
|
|
112
|
+
// describes ONE resolution against one harness, one secret resolver and one set of OAuth
|
|
113
|
+
// grants, and a deployment that has since retired a registration would otherwise leave a
|
|
114
|
+
// re-armed step rendering chips for a server nothing will ask for. A container re-dispatch
|
|
115
|
+
// rewrites it whole in any case; what this closes is the gap where nothing does — a step
|
|
116
|
+
// sitting `pending` between the reset and its next dispatch, one re-dispatched INLINE (whose
|
|
117
|
+
// handle carries no resolution, so the guard in `recordDispatchAttribution` would preserve the
|
|
118
|
+
// container round's), and one whose run is abandoned before it ever redispatches.
|
|
119
|
+
//
|
|
120
|
+
// `skillVersions` and `promptRevision`, the other two dispatch-pinned capability fields, need
|
|
121
|
+
// no line here: both are assigned UNCONDITIONALLY at dispatch (to `undefined` when there is
|
|
122
|
+
// nothing to pin), so they self-clear. This field is the one that cannot, and the asymmetry is
|
|
123
|
+
// deliberate rather than an oversight waiting to be tidied — see the guard above.
|
|
124
|
+
step.toolServers = undefined;
|
|
105
125
|
step.rework = undefined;
|
|
106
126
|
// Clear the live container handle + the deployer fan-out state, so a re-run of a `deployer`
|
|
107
127
|
// step re-provisions from scratch (a stale `deployEnvs` would otherwise let it skip straight to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepGraph.js","sourceRoot":"","sources":["../../../src/modules/execution/StepGraph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StepGraph.js","sourceRoot":"","sources":["../../../src/modules/execution/StepGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { ClassRulesByRole, MergeClassRules, RequirementConcernLevel, StepGa
|
|
|
2
2
|
/**
|
|
3
3
|
* The effective risk/merge policy for one run, as {@link RunMergePolicy.resolve} resolves it
|
|
4
4
|
* (the block's selected preset, else the workspace default, else the built-in
|
|
5
|
-
* `
|
|
5
|
+
* `FALLBACK_RISK_POLICY`). Every gate window receives that resolver as a bound call-back and
|
|
6
6
|
* reads only the subset it gates on.
|
|
7
7
|
*
|
|
8
8
|
* It lives in its own module — rather than beside the engine — so `RunMergePolicy` and the gate
|
|
@@ -10,9 +10,10 @@ import type { ClassRulesByRole, MergeClassRules, RequirementConcernLevel, StepGa
|
|
|
10
10
|
*/
|
|
11
11
|
export interface ResolvedRunRiskPolicy {
|
|
12
12
|
/**
|
|
13
|
-
* The resolved preset's id, absent when the built-in `
|
|
14
|
-
*
|
|
15
|
-
* on the merge track record so a decision can be
|
|
13
|
+
* The resolved preset's id, absent when the built-in `FALLBACK_RISK_POLICY` was used (no
|
|
14
|
+
* repository wired): that fallback is a constant, not a row, and it is the one policy that
|
|
15
|
+
* auto-merges nothing. Recorded on the merge track record so a decision can be
|
|
16
|
+
* read back in its policy context.
|
|
16
17
|
*/
|
|
17
18
|
id?: string;
|
|
18
19
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-types.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/policy-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,uBAAuB,EACvB,aAAa,EACd,MAAM,qBAAqB,CAAA;AAE5B;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC
|
|
1
|
+
{"version":3,"file":"policy-types.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/policy-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,uBAAuB,EACvB,aAAa,EACd,MAAM,qBAAqB,CAAA;AAE5B;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,wBAAwB,EAAE,MAAM,CAAA;IAChC,4BAA4B,EAAE,uBAAuB,CAAA;IACrD,0BAA0B,EAAE,MAAM,CAAA;IAClC,yBAAyB,EAAE,MAAM,CAAA;IACjC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,uBAAuB,EAAE,MAAM,CAAA;IAC/B,uFAAuF;IACvF,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,aAAa,EAAE,CAAA;IACtC;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;CAClD"}
|
|
@@ -12,13 +12,13 @@ export interface RiskPolicyServiceDependencies {
|
|
|
12
12
|
riskPolicyCache?: GroupCacheHandle<RiskPolicyCacheValue>;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
* CRUD for a workspace's merge threshold presets (the library a task picks its
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
15
|
+
* CRUD for a workspace's merge threshold presets (the library a task picks its auto-merge policy
|
|
16
|
+
* from). Maintains the invariant that a workspace always has at least one preset, exactly one of
|
|
17
|
+
* which is the default: the built-in catalog ({@link seedRiskPolicies}) is written when the board
|
|
18
|
+
* is CREATED, `ensureSeeded` repairs a board that predates that, and the default cannot be
|
|
19
|
+
* deleted. The single-default promotion is enforced in the repository. {@link reseed} restores a
|
|
20
|
+
* built-in to the current catalog (adopting an update, repairing drift, or materialising a NEW
|
|
21
|
+
* built-in that appeared after the workspace was created).
|
|
22
22
|
*/
|
|
23
23
|
export declare class RiskPolicyService {
|
|
24
24
|
private readonly presets;
|
|
@@ -33,7 +33,7 @@ export declare class RiskPolicyService {
|
|
|
33
33
|
* radius is the whole library — over-invalidation is always safe (CLAUDE.md caching rule).
|
|
34
34
|
*/
|
|
35
35
|
private invalidate;
|
|
36
|
-
/** List a workspace's presets,
|
|
36
|
+
/** List a workspace's presets, repairing an empty library first (see `ensureSeeded`). */
|
|
37
37
|
list(workspaceId: string): Promise<RiskPolicy[]>;
|
|
38
38
|
/** Create a new preset. The first one (or one flagged default) becomes the default. */
|
|
39
39
|
create(workspaceId: string, input: CreateRiskPolicyInput): Promise<RiskPolicy>;
|
|
@@ -54,9 +54,20 @@ export declare class RiskPolicyService {
|
|
|
54
54
|
* Rejects an id not in the catalog (a custom preset — delete it instead).
|
|
55
55
|
*/
|
|
56
56
|
reseed(workspaceId: string, id: string): Promise<RiskPolicy>;
|
|
57
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* REPAIR a workspace whose preset library is empty, by writing the built-in catalog.
|
|
59
|
+
*
|
|
60
|
+
* Creating a board is what normally seeds the library ({@link WorkspaceService.create}), and
|
|
61
|
+
* that is where the invariant belongs: the engine resolves a task's governing preset without
|
|
62
|
+
* listing anything, so a library that only existed once somebody had READ it made the merge
|
|
63
|
+
* posture of an identical run depend on whether a board had been opened.
|
|
64
|
+
*
|
|
65
|
+
* This stays as the repair for the two states creation cannot reach backwards into: a board
|
|
66
|
+
* made before creation seeded presets, and one whose facade wired the preset repository only
|
|
67
|
+
* later. Both currently resolve `FALLBACK_RISK_POLICY`, which auto-merges nothing, so the
|
|
68
|
+
* repair can only move a workspace from refusing everything to its configured default.
|
|
69
|
+
* Idempotent, and a no-op on every board created since.
|
|
70
|
+
*/
|
|
58
71
|
private ensureSeeded;
|
|
59
|
-
/** A catalog seed as a persisted preset (its stable id + version, without `createdAt`). */
|
|
60
|
-
private fromSeed;
|
|
61
72
|
}
|
|
62
73
|
//# sourceMappingURL=RiskPolicyService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RiskPolicyService.d.ts","sourceRoot":"","sources":["../../../src/modules/merge/RiskPolicyService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"RiskPolicyService.d.ts","sourceRoot":"","sources":["../../../src/modules/merge/RiskPolicyService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAW5B,MAAM,WAAW,6BAA6B;IAC5C,oBAAoB,EAAE,oBAAoB,CAAA;IAC1C,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;IACZ;;;;OAIG;IACH,eAAe,CAAC,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAA;CACzD;AAED;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAwC;IAE/D,YAAY,IAAI,EAAE,6BAA6B,EAM9C;IAED;;;;OAIG;YACW,UAAU;IAIxB,yFAAyF;IACnF,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAIrD;IAED,uFAAuF;IACjF,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA+BnF;IAED,+EAA+E;IACzE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAmD/F;IAED,6DAA6D;IACvD,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3D;IAED;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsBjE;IAED;;;;;;;;;;;;;OAaG;YACW,YAAY;CAU3B"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { assertFound, ConflictError, requireWorkspace, seedRiskPolicies, ValidationError, } from '@cat-factory/kernel';
|
|
1
|
+
import { assertFound, ConflictError, requireWorkspace, riskPolicyFromSeed, riskPolicySeedRows, seedRiskPolicies, ValidationError, } from '@cat-factory/kernel';
|
|
2
2
|
/**
|
|
3
|
-
* CRUD for a workspace's merge threshold presets (the library a task picks its
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
3
|
+
* CRUD for a workspace's merge threshold presets (the library a task picks its auto-merge policy
|
|
4
|
+
* from). Maintains the invariant that a workspace always has at least one preset, exactly one of
|
|
5
|
+
* which is the default: the built-in catalog ({@link seedRiskPolicies}) is written when the board
|
|
6
|
+
* is CREATED, `ensureSeeded` repairs a board that predates that, and the default cannot be
|
|
7
|
+
* deleted. The single-default promotion is enforced in the repository. {@link reseed} restores a
|
|
8
|
+
* built-in to the current catalog (adopting an update, repairing drift, or materialising a NEW
|
|
9
|
+
* built-in that appeared after the workspace was created).
|
|
10
10
|
*/
|
|
11
11
|
export class RiskPolicyService {
|
|
12
12
|
presets;
|
|
@@ -29,7 +29,7 @@ export class RiskPolicyService {
|
|
|
29
29
|
async invalidate(workspaceId) {
|
|
30
30
|
await this.cache?.invalidateGroup(workspaceId);
|
|
31
31
|
}
|
|
32
|
-
/** List a workspace's presets,
|
|
32
|
+
/** List a workspace's presets, repairing an empty library first (see `ensureSeeded`). */
|
|
33
33
|
async list(workspaceId) {
|
|
34
34
|
await requireWorkspace(this.workspaceRepository, workspaceId);
|
|
35
35
|
await this.ensureSeeded(workspaceId);
|
|
@@ -157,58 +157,37 @@ export class RiskPolicyService {
|
|
|
157
157
|
? existing.isDefault
|
|
158
158
|
: seed.isDefault && (await this.presets.getDefault(workspaceId)) === null;
|
|
159
159
|
const preset = {
|
|
160
|
-
...this.
|
|
160
|
+
...riskPolicyFromSeed(seed, existing?.createdAt ?? this.clock.now()),
|
|
161
161
|
isDefault,
|
|
162
|
-
createdAt: existing?.createdAt ?? this.clock.now(),
|
|
163
162
|
};
|
|
164
163
|
await this.presets.upsert(workspaceId, preset);
|
|
165
164
|
await this.invalidate(workspaceId);
|
|
166
165
|
return preset;
|
|
167
166
|
}
|
|
168
|
-
/**
|
|
167
|
+
/**
|
|
168
|
+
* REPAIR a workspace whose preset library is empty, by writing the built-in catalog.
|
|
169
|
+
*
|
|
170
|
+
* Creating a board is what normally seeds the library ({@link WorkspaceService.create}), and
|
|
171
|
+
* that is where the invariant belongs: the engine resolves a task's governing preset without
|
|
172
|
+
* listing anything, so a library that only existed once somebody had READ it made the merge
|
|
173
|
+
* posture of an identical run depend on whether a board had been opened.
|
|
174
|
+
*
|
|
175
|
+
* This stays as the repair for the two states creation cannot reach backwards into: a board
|
|
176
|
+
* made before creation seeded presets, and one whose facade wired the preset repository only
|
|
177
|
+
* later. Both currently resolve `FALLBACK_RISK_POLICY`, which auto-merges nothing, so the
|
|
178
|
+
* repair can only move a workspace from refusing everything to its configured default.
|
|
179
|
+
* Idempotent, and a no-op on every board created since.
|
|
180
|
+
*/
|
|
169
181
|
async ensureSeeded(workspaceId) {
|
|
170
182
|
const current = await this.presets.list(workspaceId);
|
|
171
183
|
if (current.length > 0)
|
|
172
184
|
return;
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
let offset = 0;
|
|
176
|
-
for (const seed of seedRiskPolicies()) {
|
|
177
|
-
await this.presets.upsert(workspaceId, {
|
|
178
|
-
...this.fromSeed(seed),
|
|
179
|
-
createdAt: now + offset++,
|
|
180
|
-
});
|
|
185
|
+
for (const preset of riskPolicySeedRows(this.clock.now())) {
|
|
186
|
+
await this.presets.upsert(workspaceId, preset);
|
|
181
187
|
}
|
|
182
|
-
// A gate that resolved before
|
|
188
|
+
// A gate that resolved before the repair cached the null default; drop it so the
|
|
183
189
|
// freshly-seeded default (not the built-in fallback) is read on the very next evaluation.
|
|
184
190
|
await this.invalidate(workspaceId);
|
|
185
191
|
}
|
|
186
|
-
/** A catalog seed as a persisted preset (its stable id + version, without `createdAt`). */
|
|
187
|
-
fromSeed(seed) {
|
|
188
|
-
return {
|
|
189
|
-
id: seed.id,
|
|
190
|
-
name: seed.name,
|
|
191
|
-
maxComplexity: seed.maxComplexity,
|
|
192
|
-
maxRisk: seed.maxRisk,
|
|
193
|
-
maxImpact: seed.maxImpact,
|
|
194
|
-
ciMaxAttempts: seed.ciMaxAttempts,
|
|
195
|
-
maxRequirementIterations: seed.maxRequirementIterations,
|
|
196
|
-
maxRequirementConcernAllowed: seed.maxRequirementConcernAllowed,
|
|
197
|
-
maxTesterQualityIterations: seed.maxTesterQualityIterations,
|
|
198
|
-
releaseWatchWindowMinutes: seed.releaseWatchWindowMinutes,
|
|
199
|
-
releaseMaxAttempts: seed.releaseMaxAttempts,
|
|
200
|
-
humanReviewGraceMinutes: seed.humanReviewGraceMinutes,
|
|
201
|
-
judgeMinScore: seed.judgeMinScore,
|
|
202
|
-
judgeMaxBounces: seed.judgeMaxBounces,
|
|
203
|
-
autoMergeEnabled: seed.autoMergeEnabled,
|
|
204
|
-
forkDecision: seed.forkDecision,
|
|
205
|
-
classRulesByRole: seed.classRulesByRole,
|
|
206
|
-
dryRunRoles: seed.dryRunRoles,
|
|
207
|
-
submissionClassesByRole: seed.submissionClassesByRole,
|
|
208
|
-
classRules: seed.classRules,
|
|
209
|
-
isDefault: seed.isDefault,
|
|
210
|
-
version: seed.version,
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
192
|
}
|
|
214
193
|
//# sourceMappingURL=RiskPolicyService.js.map
|