@cat-factory/orchestration 0.140.1 → 0.142.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 +8 -1
- package/dist/container/dependencies.d.ts.map +1 -1
- package/dist/container/engine-collaborators.d.ts +4 -4
- package/dist/container/engine-dependent-modules.d.ts +8 -1
- package/dist/container/engine-dependent-modules.d.ts.map +1 -1
- package/dist/container/engine-dependent-modules.js +9 -2
- package/dist/container/engine-dependent-modules.js.map +1 -1
- package/dist/container/module-shapes.d.ts +127 -0
- package/dist/container/module-shapes.d.ts.map +1 -0
- package/dist/container/module-shapes.js +2 -0
- package/dist/container/module-shapes.js.map +1 -0
- package/dist/container/modules.d.ts +16 -2
- package/dist/container/modules.d.ts.map +1 -1
- package/dist/container/modules.js +32 -1
- package/dist/container/modules.js.map +1 -1
- package/dist/container.d.ts +5 -118
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +8 -21
- package/dist/container.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/execution/ExecutionService.d.ts +22 -30
- package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionService.js +53 -54
- package/dist/modules/execution/ExecutionService.js.map +1 -1
- package/dist/modules/execution/ExecutionServiceDependencies.d.ts +9 -0
- package/dist/modules/execution/ExecutionServiceDependencies.d.ts.map +1 -1
- package/dist/modules/execution/MergeResolver.d.ts +18 -1
- package/dist/modules/execution/MergeResolver.d.ts.map +1 -1
- package/dist/modules/execution/MergeResolver.js +70 -17
- package/dist/modules/execution/MergeResolver.js.map +1 -1
- package/dist/modules/execution/ReviewGateController.d.ts +43 -1
- package/dist/modules/execution/ReviewGateController.d.ts.map +1 -1
- package/dist/modules/execution/ReviewGateController.js +55 -4
- package/dist/modules/execution/ReviewGateController.js.map +1 -1
- package/dist/modules/execution/RunMergePolicy.d.ts +59 -0
- package/dist/modules/execution/RunMergePolicy.d.ts.map +1 -0
- package/dist/modules/execution/RunMergePolicy.js +85 -0
- package/dist/modules/execution/RunMergePolicy.js.map +1 -0
- package/dist/modules/execution/RunStateMachine.d.ts +9 -0
- package/dist/modules/execution/RunStateMachine.d.ts.map +1 -1
- package/dist/modules/execution/RunStateMachine.js +11 -0
- package/dist/modules/execution/RunStateMachine.js.map +1 -1
- package/dist/modules/execution/gate-window-controllers.d.ts +4 -0
- package/dist/modules/execution/gate-window-controllers.d.ts.map +1 -1
- package/dist/modules/execution/gate-window-controllers.js +3 -1
- package/dist/modules/execution/gate-window-controllers.js.map +1 -1
- package/dist/modules/execution/policy-types.d.ts +37 -0
- package/dist/modules/execution/policy-types.d.ts.map +1 -0
- package/dist/modules/execution/policy-types.js +2 -0
- package/dist/modules/execution/policy-types.js.map +1 -0
- package/dist/modules/execution/prReport.logic.d.ts.map +1 -1
- package/dist/modules/execution/prReport.logic.js +22 -21
- package/dist/modules/execution/prReport.logic.js.map +1 -1
- package/dist/modules/execution/review-kinds.d.ts.map +1 -1
- package/dist/modules/execution/review-kinds.js +4 -0
- package/dist/modules/execution/review-kinds.js.map +1 -1
- package/dist/modules/execution/reviewQuestionWriteback.logic.d.ts +30 -0
- package/dist/modules/execution/reviewQuestionWriteback.logic.d.ts.map +1 -0
- package/dist/modules/execution/reviewQuestionWriteback.logic.js +50 -0
- package/dist/modules/execution/reviewQuestionWriteback.logic.js.map +1 -0
- package/dist/modules/execution/run-context-admission.d.ts +25 -0
- package/dist/modules/execution/run-context-admission.d.ts.map +1 -0
- package/dist/modules/execution/run-context-admission.js +54 -0
- package/dist/modules/execution/run-context-admission.js.map +1 -0
- package/dist/modules/merge/MergeTrackRecordService.d.ts +133 -0
- package/dist/modules/merge/MergeTrackRecordService.d.ts.map +1 -0
- package/dist/modules/merge/MergeTrackRecordService.js +191 -0
- package/dist/modules/merge/MergeTrackRecordService.js.map +1 -0
- package/dist/modules/merge/RiskPolicyService.d.ts.map +1 -1
- package/dist/modules/merge/RiskPolicyService.js +5 -0
- package/dist/modules/merge/RiskPolicyService.js.map +1 -1
- package/dist/modules/merge/externalMergeObserver.d.ts +27 -0
- package/dist/modules/merge/externalMergeObserver.d.ts.map +1 -0
- package/dist/modules/merge/externalMergeObserver.js +40 -0
- package/dist/modules/merge/externalMergeObserver.js.map +1 -0
- package/dist/modules/recurring/TrackerSettingsService.d.ts.map +1 -1
- package/dist/modules/recurring/TrackerSettingsService.js +4 -0
- package/dist/modules/recurring/TrackerSettingsService.js.map +1 -1
- package/package.json +11 -11
- package/dist/modules/execution/prReportText.logic.d.ts +0 -46
- package/dist/modules/execution/prReportText.logic.d.ts.map +0 -1
- package/dist/modules/execution/prReportText.logic.js +0 -188
- package/dist/modules/execution/prReportText.logic.js.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { parseMergeAssessment } from '@cat-factory/contracts';
|
|
2
|
+
import { resolveMergeClassRule } from '@cat-factory/kernel';
|
|
2
3
|
/** Format a 0..1 score as a rounded percentage for notification copy. */
|
|
3
4
|
function pct(score) {
|
|
4
5
|
return `${Math.round(score * 100)}%`;
|
|
@@ -51,24 +52,55 @@ export class MergeResolver {
|
|
|
51
52
|
assessment = null;
|
|
52
53
|
}
|
|
53
54
|
const preset = await this.deps.resolveRiskPolicy(workspaceId, block);
|
|
55
|
+
// Classify the PR BEFORE deciding: the preset's per-class rule can short-circuit the score
|
|
56
|
+
// comparison entirely. One VCS call, swallowed on any failure into `unknown` — which no rule
|
|
57
|
+
// matches — so a classification fault can neither widen nor tighten the policy, and can
|
|
58
|
+
// never fail the merge. The result is threaded into the record write so we never pay twice.
|
|
59
|
+
const classification = (await this.deps.mergeTrackRecord?.classify(workspaceId, block)) ?? {
|
|
60
|
+
changeClass: 'unknown',
|
|
61
|
+
fileCount: 0,
|
|
62
|
+
};
|
|
63
|
+
const classRule = resolveMergeClassRule(preset.classRules, classification.changeClass);
|
|
54
64
|
const thresholds = {
|
|
55
65
|
presetName: preset.name,
|
|
56
66
|
maxComplexity: preset.maxComplexity,
|
|
57
67
|
maxRisk: preset.maxRisk,
|
|
58
68
|
maxImpact: preset.maxImpact,
|
|
59
69
|
autoMergeEnabled: preset.autoMergeEnabled,
|
|
70
|
+
...(classRule !== 'thresholds' ? { classRule } : {}),
|
|
71
|
+
};
|
|
72
|
+
const base = {
|
|
73
|
+
assessment: assessment ?? undefined,
|
|
74
|
+
thresholds,
|
|
75
|
+
...(classification.changeClass !== 'unknown'
|
|
76
|
+
? { changeClass: classification.changeClass }
|
|
77
|
+
: {}),
|
|
60
78
|
};
|
|
61
|
-
const base = { assessment: assessment ?? undefined, thresholds };
|
|
62
79
|
// A credible assessment explains itself: a merger that actually examined the diff always
|
|
63
80
|
// returns a rationale, while a merger that failed to inspect the change (the bug that
|
|
64
81
|
// auto-merged on a bogus 0/0/0) returns bare, unexplained scores. The non-empty rationale
|
|
65
82
|
// check is the engine-side backstop so those can never silently merge.
|
|
66
83
|
const credible = assessment !== null && assessment.rationale.trim() !== '';
|
|
67
84
|
const exceededAxes = assessment ? exceededAxesOf(assessment, preset) : [];
|
|
68
|
-
// Auto-merge
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
|
|
85
|
+
// Auto-merge precedence, most-significant first:
|
|
86
|
+
// 1. `autoMergeEnabled: false` — the master switch. "Manual review only" stays manual and
|
|
87
|
+
// a class rule can NEVER override it.
|
|
88
|
+
// 2. The class rule: `always` merges regardless of the scores (and regardless of the
|
|
89
|
+
// rationale backstop — an explicit operator policy keyed on a DETERMINISTIC backend
|
|
90
|
+
// classification outranks the agent's self-report); `never` always routes to a human.
|
|
91
|
+
// 3. The existing credibility + threshold comparison.
|
|
92
|
+
const within = preset.autoMergeEnabled &&
|
|
93
|
+
(classRule === 'always' || (classRule !== 'never' && credible && exceededAxes.length === 0));
|
|
94
|
+
const mergeReason = classRule === 'always' ? 'class_auto_merge' : 'within_thresholds';
|
|
95
|
+
const record = (decision) => this.deps.mergeTrackRecord?.recordDecision(workspaceId, {
|
|
96
|
+
block,
|
|
97
|
+
executionId: instance.id,
|
|
98
|
+
decision,
|
|
99
|
+
assessment,
|
|
100
|
+
riskPolicyId: preset.id ?? null,
|
|
101
|
+
riskPolicyName: preset.name,
|
|
102
|
+
classification,
|
|
103
|
+
});
|
|
72
104
|
if (within) {
|
|
73
105
|
try {
|
|
74
106
|
const res = await this.deps.finalizeMerge(workspaceId, block.id);
|
|
@@ -76,41 +108,59 @@ export class MergeResolver {
|
|
|
76
108
|
// A multi-repo task merged some PRs but hit a failure part-way; `finalizeMerge`
|
|
77
109
|
// already left the block `blocked` and raised the enumerated partial-merge card, so
|
|
78
110
|
// the resolver only records the decision (no second review notification).
|
|
111
|
+
await record('pending_review');
|
|
79
112
|
return { ...base, outcome: 'awaiting_review', reason: 'merge_partial', exceededAxes: [] };
|
|
80
113
|
}
|
|
81
|
-
|
|
114
|
+
await record('auto_merged');
|
|
115
|
+
return { ...base, outcome: 'auto_merged', reason: mergeReason, exceededAxes: [] };
|
|
82
116
|
}
|
|
83
117
|
catch {
|
|
84
118
|
// Auto-merge failed outright (e.g. branch protection / conflict, or the first PR of a
|
|
85
119
|
// multi-repo task): fall through to a review notification so a human can sort it out.
|
|
86
|
-
|
|
120
|
+
const pending = await record('pending_review');
|
|
121
|
+
await this.raiseReviewAndBlock(workspaceId, instance, block, assessment, {
|
|
122
|
+
changeClass: classification.changeClass,
|
|
123
|
+
recordId: pending?.id,
|
|
124
|
+
});
|
|
87
125
|
return { ...base, outcome: 'awaiting_review', reason: 'merge_failed', exceededAxes };
|
|
88
126
|
}
|
|
89
127
|
}
|
|
90
|
-
|
|
128
|
+
const pending = await record('pending_review');
|
|
129
|
+
await this.raiseReviewAndBlock(workspaceId, instance, block, assessment, {
|
|
130
|
+
changeClass: classification.changeClass,
|
|
131
|
+
recordId: pending?.id,
|
|
132
|
+
});
|
|
91
133
|
// Classify WHY review is needed, most-specific first, so the banner is precise. A
|
|
92
134
|
// missing/unparseable assessment (`no_assessment`) is distinct from one that returned
|
|
93
135
|
// scores but no rationale (`no_rationale`): the latter DID produce visible scores, so
|
|
94
|
-
// the banner must not claim there was no assessment at all.
|
|
136
|
+
// the banner must not claim there was no assessment at all. The class rule sits just under
|
|
137
|
+
// the master switch, matching the precedence the auto-merge branch above applies.
|
|
95
138
|
const reason = !preset.autoMergeEnabled
|
|
96
139
|
? 'auto_merge_disabled'
|
|
97
|
-
:
|
|
98
|
-
? '
|
|
99
|
-
:
|
|
100
|
-
? '
|
|
101
|
-
:
|
|
140
|
+
: classRule === 'never'
|
|
141
|
+
? 'class_requires_review'
|
|
142
|
+
: assessment === null
|
|
143
|
+
? 'no_assessment'
|
|
144
|
+
: !credible
|
|
145
|
+
? 'no_rationale'
|
|
146
|
+
: 'exceeded_thresholds';
|
|
102
147
|
return { ...base, outcome: 'awaiting_review', reason, exceededAxes };
|
|
103
148
|
}
|
|
149
|
+
/** The track-record context a review card carries so the human can tag in the same tap. */
|
|
150
|
+
trackContext = (ctx) => ({
|
|
151
|
+
...(ctx.changeClass !== 'unknown' ? { changeClass: ctx.changeClass } : {}),
|
|
152
|
+
...(ctx.recordId ? { mergeTrackRecordId: ctx.recordId } : {}),
|
|
153
|
+
});
|
|
104
154
|
/** Flip the block to `pr_ready` and raise the merge-review notification. */
|
|
105
|
-
async raiseReviewAndBlock(workspaceId, instance, block, assessment) {
|
|
155
|
+
async raiseReviewAndBlock(workspaceId, instance, block, assessment, track) {
|
|
106
156
|
await this.deps.blockRepository.update(workspaceId, block.id, {
|
|
107
157
|
status: 'pr_ready',
|
|
108
158
|
progress: 1,
|
|
109
159
|
});
|
|
110
|
-
await this.raiseMergeReview(workspaceId, instance, block, assessment);
|
|
160
|
+
await this.raiseMergeReview(workspaceId, instance, block, assessment, track);
|
|
111
161
|
}
|
|
112
162
|
/** Raise a `merge_review` notification carrying the agent's assessment + the PR. */
|
|
113
|
-
async raiseMergeReview(workspaceId, instance, block, assessment) {
|
|
163
|
+
async raiseMergeReview(workspaceId, instance, block, assessment, track) {
|
|
114
164
|
if (!this.deps.notificationService)
|
|
115
165
|
return;
|
|
116
166
|
const body = assessment
|
|
@@ -128,6 +178,9 @@ export class MergeResolver {
|
|
|
128
178
|
...(assessment ? { assessment } : {}),
|
|
129
179
|
...(block.pullRequest?.url ? { prUrl: block.pullRequest.url } : {}),
|
|
130
180
|
pipelineName: instance.pipelineName,
|
|
181
|
+
// The change class + the record id, so the card can show what kind of change this is
|
|
182
|
+
// (with that class's history) and confirm-plus-tag it in one tap.
|
|
183
|
+
...this.trackContext(track),
|
|
131
184
|
},
|
|
132
185
|
});
|
|
133
186
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MergeResolver.js","sourceRoot":"","sources":["../../../src/modules/execution/MergeResolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MergeResolver.js","sourceRoot":"","sources":["../../../src/modules/execution/MergeResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { Block, BlockRepository, ExecutionInstance, ExecutionRepository, PipelineStep, RequirementConcernLevel, RequestRecommendationItem, ResolveRequirementsExceededChoice, WorkRunner } from '@cat-factory/kernel';
|
|
1
|
+
import type { Block, BlockRepository, ExecutionInstance, ExecutionRepository, IssueWritebackProvider, PipelineStep, RequirementConcernLevel, RequestRecommendationItem, ResolveRequirementsExceededChoice, WorkRunner } from '@cat-factory/kernel';
|
|
2
2
|
import type { ReviewCommon } from '../review/IterativeReviewService.js';
|
|
3
3
|
import type { AdvanceResult } from './advance.js';
|
|
4
|
+
import type { PrReportLogger } from './PrVerificationReportController.js';
|
|
4
5
|
import type { RunStateMachine } from './RunStateMachine.js';
|
|
5
6
|
import type { StepGraph } from './StepGraph.js';
|
|
6
7
|
/**
|
|
@@ -68,6 +69,16 @@ export interface ReviewKind<TReview extends ReviewCommon> {
|
|
|
68
69
|
autoRecommend?(workspaceId: string, blockId: string): Promise<void>;
|
|
69
70
|
/** Push a live review-changed event so an open window/inspector reflects the new status. */
|
|
70
71
|
emit(workspaceId: string, review: TReview): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Whether a HEADLESS park of this subject echoes its open findings onto the block's linked
|
|
74
|
+
* tracker issue(s) — the requirements loop only (see
|
|
75
|
+
* `docs/initiatives/headless-clarification-loop.md`).
|
|
76
|
+
*
|
|
77
|
+
* The clarity gate deliberately does NOT opt in: it already echoes its questions from its
|
|
78
|
+
* own `review()` closure as INTAKE semantics (every run, UI or headless, ungated by the
|
|
79
|
+
* workspace writeback settings), and opting in here would post the same questions twice.
|
|
80
|
+
*/
|
|
81
|
+
readonly questionsOnPark?: boolean;
|
|
71
82
|
}
|
|
72
83
|
/**
|
|
73
84
|
* What the review gates need beyond the shared run state-machine spine. The spine primitives
|
|
@@ -84,6 +95,14 @@ export interface ReviewGateControllerDeps {
|
|
|
84
95
|
stateMachine: RunStateMachine;
|
|
85
96
|
/** The pure step mutators (start/finish a step). */
|
|
86
97
|
stepGraph: StepGraph;
|
|
98
|
+
/**
|
|
99
|
+
* Issue-tracker writeback, used here for ONE thing: echoing a parked HEADLESS review's open
|
|
100
|
+
* findings onto the block's linked issue(s) so a caller with no in-app surface learns what
|
|
101
|
+
* the run is waiting for. Absent (tests, no tracker) → parks behave exactly as before.
|
|
102
|
+
*/
|
|
103
|
+
issueWriteback?: IssueWritebackProvider;
|
|
104
|
+
/** Structured logger for the best-effort writeback above. Absent → failures are silent. */
|
|
105
|
+
logger?: PrReportLogger;
|
|
87
106
|
resolveRiskPolicy: (workspaceId: string, block: Block) => Promise<ReviewPreset>;
|
|
88
107
|
dispatchIterationCap: (workspaceId: string, blockId: string, choice: ResolveRequirementsExceededChoice, handlers: {
|
|
89
108
|
extraRound: () => Promise<unknown>;
|
|
@@ -115,6 +134,29 @@ export declare class ReviewGateController {
|
|
|
115
134
|
* the durable driver instead of in the HTTP request the user is no longer waiting on.
|
|
116
135
|
*/
|
|
117
136
|
evaluate<TReview extends ReviewCommon>(kind: ReviewKind<TReview>, workspaceId: string, instance: ExecutionInstance, step: PipelineStep, block: Block, isFinalStep: boolean): Promise<AdvanceResult>;
|
|
137
|
+
/**
|
|
138
|
+
* Park a review gate on its human decision, then best-effort echo the still-open findings
|
|
139
|
+
* onto the block's linked tracker issue(s) when the run entered HEADLESSLY.
|
|
140
|
+
*
|
|
141
|
+
* Every park in {@link evaluate} funnels through here so the echo cannot be forgotten by a
|
|
142
|
+
* future branch, and so the SPA path is provably untouched: {@link shouldPostReviewQuestions}
|
|
143
|
+
* refuses anything whose `intakeOrigin` is not `public-api`.
|
|
144
|
+
*
|
|
145
|
+
* **The park is committed FIRST, and that ordering is load-bearing.** A run that failed to
|
|
146
|
+
* park is a run that answers nobody, so it must never queue behind an outbound HTTP call to
|
|
147
|
+
* a third party that may be slow, rate-limiting, or down. With the park already durable, the
|
|
148
|
+
* worst a wedged tracker can do is stall this driver step — the run is answerable over the
|
|
149
|
+
* API the moment the park lands, and the questions arrive when the post does. The echo's own
|
|
150
|
+
* failure is logged rather than swallowed; either way the park stays discoverable in-app via
|
|
151
|
+
* the `requirement_review` card the reviewer pass already raised.
|
|
152
|
+
*/
|
|
153
|
+
private park;
|
|
154
|
+
/**
|
|
155
|
+
* The headless question echo. Split from {@link park} so the park's own control flow stays a
|
|
156
|
+
* single line and this stays entirely best-effort: nothing it does can change the parked
|
|
157
|
+
* result it runs behind.
|
|
158
|
+
*/
|
|
159
|
+
private echoQuestionsToTracker;
|
|
118
160
|
/**
|
|
119
161
|
* Fold the human's settled answers into a standardized document and re-review it (one
|
|
120
162
|
* iteration of the loop), emitting the live review-changed event after each phase so an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReviewGateController.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/ReviewGateController.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ReviewGateController.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/ReviewGateController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { assertFound, ConflictError, ValidationError } from '@cat-factory/kernel';
|
|
2
2
|
import { hasNotesToIncorporate } from '../requirements/requirements.logic.js';
|
|
3
|
+
import { buildReviewQuestionPost, shouldPostReviewQuestions, } from './reviewQuestionWriteback.logic.js';
|
|
3
4
|
/**
|
|
4
5
|
* Drives the two iterative review gates — `requirements-review` and `clarity-review` — which
|
|
5
6
|
* share the SAME control flow: an inline reviewer LLM raises findings, the run parks on a
|
|
@@ -41,8 +42,8 @@ export class ReviewGateController {
|
|
|
41
42
|
const pendingRec = step.pendingRecommendation;
|
|
42
43
|
if (pendingRec && kind.fillRecommendations) {
|
|
43
44
|
step.pendingRecommendation = null;
|
|
44
|
-
await kind.fillRecommendations(workspaceId, block.id);
|
|
45
|
-
return this.
|
|
45
|
+
const filled = await kind.fillRecommendations(workspaceId, block.id);
|
|
46
|
+
return this.park(kind, workspaceId, instance, step, block, filled);
|
|
46
47
|
}
|
|
47
48
|
// Re-entry: the human answered the findings and asked to incorporate. Do the (slow)
|
|
48
49
|
// LLM work here in the durable driver — fold the answers into a document, then
|
|
@@ -59,7 +60,7 @@ export class ReviewGateController {
|
|
|
59
60
|
// At the cap, raise a notification so the three-choice decision is discoverable.
|
|
60
61
|
if (review.status === 'exceeded')
|
|
61
62
|
await this.deps.stateMachine.raiseDecisionRequired(workspaceId, instance);
|
|
62
|
-
return this.
|
|
63
|
+
return this.park(kind, workspaceId, instance, step, block, review);
|
|
63
64
|
}
|
|
64
65
|
// Fresh entry: run the initial reviewer pass with the task's preset knobs (shared with
|
|
65
66
|
// the off-path inspector surface). Auto-pass (status `incorporated`) → advance; the
|
|
@@ -78,7 +79,57 @@ export class ReviewGateController {
|
|
|
78
79
|
}
|
|
79
80
|
if (review.status === 'exceeded')
|
|
80
81
|
await this.deps.stateMachine.raiseDecisionRequired(workspaceId, instance);
|
|
81
|
-
return this.
|
|
82
|
+
return this.park(kind, workspaceId, instance, step, block, review);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Park a review gate on its human decision, then best-effort echo the still-open findings
|
|
86
|
+
* onto the block's linked tracker issue(s) when the run entered HEADLESSLY.
|
|
87
|
+
*
|
|
88
|
+
* Every park in {@link evaluate} funnels through here so the echo cannot be forgotten by a
|
|
89
|
+
* future branch, and so the SPA path is provably untouched: {@link shouldPostReviewQuestions}
|
|
90
|
+
* refuses anything whose `intakeOrigin` is not `public-api`.
|
|
91
|
+
*
|
|
92
|
+
* **The park is committed FIRST, and that ordering is load-bearing.** A run that failed to
|
|
93
|
+
* park is a run that answers nobody, so it must never queue behind an outbound HTTP call to
|
|
94
|
+
* a third party that may be slow, rate-limiting, or down. With the park already durable, the
|
|
95
|
+
* worst a wedged tracker can do is stall this driver step — the run is answerable over the
|
|
96
|
+
* API the moment the park lands, and the questions arrive when the post does. The echo's own
|
|
97
|
+
* failure is logged rather than swallowed; either way the park stays discoverable in-app via
|
|
98
|
+
* the `requirement_review` card the reviewer pass already raised.
|
|
99
|
+
*/
|
|
100
|
+
async park(kind, workspaceId, instance, step, block, review) {
|
|
101
|
+
const parked = await this.deps.stateMachine.parkStepOnDecision(workspaceId, instance, step);
|
|
102
|
+
await this.echoQuestionsToTracker(kind, workspaceId, instance, block, review);
|
|
103
|
+
return parked;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The headless question echo. Split from {@link park} so the park's own control flow stays a
|
|
107
|
+
* single line and this stays entirely best-effort: nothing it does can change the parked
|
|
108
|
+
* result it runs behind.
|
|
109
|
+
*/
|
|
110
|
+
async echoQuestionsToTracker(kind, workspaceId, instance, block, review) {
|
|
111
|
+
const writeback = this.deps.issueWriteback;
|
|
112
|
+
// `intakeOrigin` first: it is a free in-memory check and the scope boundary of the whole
|
|
113
|
+
// feature, so a UI-started run pays nothing at all for the re-read below.
|
|
114
|
+
if (!writeback || !kind.questionsOnPark || instance.intakeOrigin !== 'public-api')
|
|
115
|
+
return;
|
|
116
|
+
// Re-read the review: an auto-recommendation pass may have answered findings since `review`
|
|
117
|
+
// was taken, and the echo must ask only what is still genuinely open. Deliberately
|
|
118
|
+
// UNCONDITIONAL rather than flagged from the one call site that mutates today — a future
|
|
119
|
+
// branch that adds another mutation would silently start asking already-answered questions,
|
|
120
|
+
// and the cost is one indexed read on a path that is about to wait on a human for hours.
|
|
121
|
+
const fresh = (await kind.getForBlock(workspaceId, block.id).catch(() => null)) ?? review;
|
|
122
|
+
if (!shouldPostReviewQuestions(instance, fresh))
|
|
123
|
+
return;
|
|
124
|
+
try {
|
|
125
|
+
const outcome = await writeback.postReviewQuestions(workspaceId, block, buildReviewQuestionPost(instance, fresh));
|
|
126
|
+
if (outcome.failed > 0) {
|
|
127
|
+
this.deps.logger?.warn({ workspaceId, runId: instance.id, reviewId: fresh.id, ...outcome }, 'review question writeback failed for some linked issues');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (e) {
|
|
131
|
+
this.deps.logger?.warn({ workspaceId, runId: instance.id, reviewId: fresh.id, err: String(e) }, 'review question writeback threw');
|
|
132
|
+
}
|
|
82
133
|
}
|
|
83
134
|
/**
|
|
84
135
|
* Fold the human's settled answers into a standardized document and re-review it (one
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReviewGateController.js","sourceRoot":"","sources":["../../../src/modules/execution/ReviewGateController.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReviewGateController.js","sourceRoot":"","sources":["../../../src/modules/execution/ReviewGateController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Block, GroupCacheHandle, ReviewEffort, RiskPolicyCacheValue, RiskPolicyRepository } from '@cat-factory/kernel';
|
|
2
|
+
import type { MergeTrackRecordService } from '../merge/MergeTrackRecordService.js';
|
|
3
|
+
import type { ResolvedRunRiskPolicy } from './policy-types.js';
|
|
4
|
+
/** The collaborators the merge-policy layer needs; nothing else on the engine. */
|
|
5
|
+
export interface RunMergePolicyDeps {
|
|
6
|
+
/**
|
|
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 {@link DEFAULT_RISK_POLICY}.
|
|
9
|
+
*/
|
|
10
|
+
riskPolicyRepository?: RiskPolicyRepository;
|
|
11
|
+
/**
|
|
12
|
+
* Optional: the `AppCaches.riskPolicy` slice — read-through for {@link RunMergePolicy.resolve}
|
|
13
|
+
* so the slow-moving merge-preset row isn't re-fetched on every gate evaluation. Absent →
|
|
14
|
+
* every resolve hits the repository. Invalidated by `RiskPolicyService` on every preset write.
|
|
15
|
+
*/
|
|
16
|
+
riskPolicyCache?: GroupCacheHandle<RiskPolicyCacheValue>;
|
|
17
|
+
/**
|
|
18
|
+
* Optional: the merge track record (classification + the persisted evidence). Absent ⇒ the
|
|
19
|
+
* recording methods below are no-ops and the merge path behaves exactly as it did before.
|
|
20
|
+
*/
|
|
21
|
+
mergeTrackRecord?: MergeTrackRecordService;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The task's effective MERGE POLICY plus the EVIDENCE behind it, extracted out of
|
|
25
|
+
* `ExecutionService` as a cohesive collaborator (the `RunDispatcher` controller extractions are
|
|
26
|
+
* the model): resolving which merge-threshold preset governs a run, and settling that run's merge
|
|
27
|
+
* track record when a human merges or declines.
|
|
28
|
+
*
|
|
29
|
+
* The two belong together — the preset is the policy, the track record is what the policy is
|
|
30
|
+
* eventually judged against — and neither needs anything else the engine owns, so keeping them
|
|
31
|
+
* here stops the engine god-file re-growing.
|
|
32
|
+
*
|
|
33
|
+
* Every recording method is a **best-effort side channel of the merge path**: it swallows its own
|
|
34
|
+
* failures, because the merge has already landed and must never be reported as failed on account
|
|
35
|
+
* of bookkeeping.
|
|
36
|
+
*/
|
|
37
|
+
export declare class RunMergePolicy {
|
|
38
|
+
private readonly deps;
|
|
39
|
+
constructor(deps: RunMergePolicyDeps);
|
|
40
|
+
/**
|
|
41
|
+
* Resolve the merge threshold preset that governs a task: its explicitly-picked preset, else
|
|
42
|
+
* the workspace default, else the built-in {@link DEFAULT_RISK_POLICY}. Returns the thresholds
|
|
43
|
+
* the engine compares against, the per-class rules, and the CI attempt budget.
|
|
44
|
+
*/
|
|
45
|
+
resolve(workspaceId: string, block: Block): Promise<ResolvedRunRiskPolicy>;
|
|
46
|
+
/**
|
|
47
|
+
* Settle the block's latest merge track record as `human_merged`, tagging the reviewer effort
|
|
48
|
+
* when one was supplied. Resolved by BLOCK (not by run) because the merge controls that reach
|
|
49
|
+
* here are block-scoped — a single point-read, never inside a loop.
|
|
50
|
+
*/
|
|
51
|
+
recordHumanMerge(workspaceId: string, blockId: string, reviewEffort?: ReviewEffort | null): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Record that a human DECLINED to merge — they dismissed the review card rather than acting on
|
|
54
|
+
* it. The counterpart of {@link recordHumanMerge}: without it a class's rollup would leave
|
|
55
|
+
* rejections as forever-`pending_review` and overstate the auto-merge-share denominator.
|
|
56
|
+
*/
|
|
57
|
+
recordRejection(workspaceId: string, executionId: string): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=RunMergePolicy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunMergePolicy.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/RunMergePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,gBAAgB,EAChB,YAAY,EAEZ,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE9D,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;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;;;;OAIG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAyB/E;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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { DEFAULT_RISK_POLICY } from '@cat-factory/kernel';
|
|
2
|
+
/**
|
|
3
|
+
* The task's effective MERGE POLICY plus the EVIDENCE behind it, extracted out of
|
|
4
|
+
* `ExecutionService` as a cohesive collaborator (the `RunDispatcher` controller extractions are
|
|
5
|
+
* the model): resolving which merge-threshold preset governs a run, and settling that run's merge
|
|
6
|
+
* track record when a human merges or declines.
|
|
7
|
+
*
|
|
8
|
+
* The two belong together — the preset is the policy, the track record is what the policy is
|
|
9
|
+
* eventually judged against — and neither needs anything else the engine owns, so keeping them
|
|
10
|
+
* here stops the engine god-file re-growing.
|
|
11
|
+
*
|
|
12
|
+
* Every recording method is a **best-effort side channel of the merge path**: it swallows its own
|
|
13
|
+
* failures, because the merge has already landed and must never be reported as failed on account
|
|
14
|
+
* of bookkeeping.
|
|
15
|
+
*/
|
|
16
|
+
export class RunMergePolicy {
|
|
17
|
+
deps;
|
|
18
|
+
constructor(deps) {
|
|
19
|
+
this.deps = deps;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Resolve the merge threshold preset that governs a task: its explicitly-picked preset, else
|
|
23
|
+
* the workspace default, else the built-in {@link DEFAULT_RISK_POLICY}. Returns the thresholds
|
|
24
|
+
* the engine compares against, the per-class rules, and the CI attempt budget.
|
|
25
|
+
*/
|
|
26
|
+
async resolve(workspaceId, block) {
|
|
27
|
+
const repo = this.deps.riskPolicyRepository;
|
|
28
|
+
if (repo) {
|
|
29
|
+
// Read each preset through the cache slice when wired: the row is slow-moving admin config
|
|
30
|
+
// re-read on every gate evaluation. Group by workspace (one write drops the whole library),
|
|
31
|
+
// keyed per resolved id so a picked preset and the default cache separately. A null (deleted
|
|
32
|
+
// id / unseeded default) caches as a value and still falls through, exactly as an uncached
|
|
33
|
+
// read would (the `RiskPolicyCacheValue` wrapper).
|
|
34
|
+
const read = async (key, load) => {
|
|
35
|
+
const cache = this.deps.riskPolicyCache;
|
|
36
|
+
if (!cache)
|
|
37
|
+
return load();
|
|
38
|
+
return (await cache.get(key, workspaceId, async () => ({ policy: await load() }))).policy;
|
|
39
|
+
};
|
|
40
|
+
if (block.riskPolicyId) {
|
|
41
|
+
const id = block.riskPolicyId;
|
|
42
|
+
const picked = await read(`picked:${id}`, () => repo.get(workspaceId, id));
|
|
43
|
+
if (picked)
|
|
44
|
+
return picked;
|
|
45
|
+
}
|
|
46
|
+
const fallback = await read('default', () => repo.getDefault(workspaceId));
|
|
47
|
+
if (fallback)
|
|
48
|
+
return fallback;
|
|
49
|
+
}
|
|
50
|
+
return DEFAULT_RISK_POLICY;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Settle the block's latest merge track record as `human_merged`, tagging the reviewer effort
|
|
54
|
+
* when one was supplied. Resolved by BLOCK (not by run) because the merge controls that reach
|
|
55
|
+
* here are block-scoped — a single point-read, never inside a loop.
|
|
56
|
+
*/
|
|
57
|
+
async recordHumanMerge(workspaceId, blockId, reviewEffort) {
|
|
58
|
+
const svc = this.deps.mergeTrackRecord;
|
|
59
|
+
if (!svc)
|
|
60
|
+
return;
|
|
61
|
+
try {
|
|
62
|
+
const record = await svc.getLatestByBlock(workspaceId, blockId);
|
|
63
|
+
if (!record || !record.executionId)
|
|
64
|
+
return;
|
|
65
|
+
await svc.resolveDecision(workspaceId, record.executionId, 'human_merged', reviewEffort);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Best-effort (see the class doc).
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Record that a human DECLINED to merge — they dismissed the review card rather than acting on
|
|
73
|
+
* it. The counterpart of {@link recordHumanMerge}: without it a class's rollup would leave
|
|
74
|
+
* rejections as forever-`pending_review` and overstate the auto-merge-share denominator.
|
|
75
|
+
*/
|
|
76
|
+
async recordRejection(workspaceId, executionId) {
|
|
77
|
+
try {
|
|
78
|
+
await this.deps.mergeTrackRecord?.resolveDecision(workspaceId, executionId, 'rejected');
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Best-effort (see the class doc).
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=RunMergePolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunMergePolicy.js","sourceRoot":"","sources":["../../../src/modules/execution/RunMergePolicy.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAwBzD;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,cAAc;IACI,IAAI;IAAjC,YAA6B,IAAwB;oBAAxB,IAAI;IAAuB,CAAC;IAEzD;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,KAAY;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAA;QAC3C,IAAI,IAAI,EAAE,CAAC;YACT,2FAA2F;YAC3F,4FAA4F;YAC5F,6FAA6F;YAC7F,2FAA2F;YAC3F,mDAAmD;YACnD,MAAM,IAAI,GAAG,KAAK,EAChB,GAAW,EACX,IAAsC,EACV,EAAE;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAA;gBACvC,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,EAAE,CAAA;gBACzB,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YAC3F,CAAC,CAAA;YACD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAA;gBAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAA;gBAC1E,IAAI,MAAM;oBAAE,OAAO,MAAM,CAAA;YAC3B,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAA;YAC1E,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;QAC/B,CAAC;QACD,OAAO,mBAAmB,CAAA;IAC5B,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,5 +1,6 @@
|
|
|
1
1
|
import type { AgentExecutor, AgentFailureKind, BlockRepository, Clock, ExecutionEventPublisher, ExecutionInstance, ExecutionRepository, IdGenerator, PipelineStep, SubscriptionActivationRepository, WorkRunner } from '@cat-factory/kernel';
|
|
2
2
|
import { type InitiativeRunHarvest } from '../initiative/initiative.logic.js';
|
|
3
|
+
import type { MergeTrackRecordService } from '../merge/MergeTrackRecordService.js';
|
|
3
4
|
import type { NotificationService } from '../notifications/NotificationService.js';
|
|
4
5
|
import type { LlmObservabilityService } from '../observability/LlmObservabilityService.js';
|
|
5
6
|
import type { AdvanceResult } from './advance.js';
|
|
@@ -23,6 +24,13 @@ export interface RunStateMachineDeps {
|
|
|
23
24
|
/** The pure step/cursor mutators ({@link StepGraph}) the transitions build on. */
|
|
24
25
|
stepGraph: StepGraph;
|
|
25
26
|
notificationService?: NotificationService;
|
|
27
|
+
/**
|
|
28
|
+
* The merge track record. A no-merger pipeline's `pipeline_complete` card is a MERGE decision
|
|
29
|
+
* point too (confirming it merges the PR), so the class + a `pending_review` record are written
|
|
30
|
+
* here as well — otherwise a whole class of human merges would leave no evidence behind.
|
|
31
|
+
* Best-effort and optional: absent ⇒ the card is raised exactly as before.
|
|
32
|
+
*/
|
|
33
|
+
mergeTrackRecord?: MergeTrackRecordService;
|
|
26
34
|
kaizenScheduler?: KaizenScheduler;
|
|
27
35
|
subscriptionActivations?: SubscriptionActivationRepository;
|
|
28
36
|
llmObservability?: LlmObservabilityService;
|
|
@@ -59,6 +67,7 @@ export declare class RunStateMachine {
|
|
|
59
67
|
private readonly clock;
|
|
60
68
|
private readonly stepGraph;
|
|
61
69
|
private readonly notificationService?;
|
|
70
|
+
private readonly mergeTrackRecord?;
|
|
62
71
|
private readonly kaizenScheduler?;
|
|
63
72
|
private readonly subscriptionActivations?;
|
|
64
73
|
private readonly llmObservability?;
|