@cat-factory/orchestration 0.136.1 → 0.138.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.d.ts +21 -3
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js.map +1 -1
- package/dist/modules/environments/EnvironmentTestService.d.ts.map +1 -1
- package/dist/modules/environments/EnvironmentTestService.js +7 -1
- package/dist/modules/environments/EnvironmentTestService.js.map +1 -1
- package/dist/modules/execution/ExecutionService.d.ts +7 -371
- package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionService.js +32 -35
- package/dist/modules/execution/ExecutionService.js.map +1 -1
- package/dist/modules/execution/ExecutionServiceDependencies.d.ts +381 -0
- package/dist/modules/execution/ExecutionServiceDependencies.d.ts.map +1 -0
- package/dist/modules/execution/ExecutionServiceDependencies.js +2 -0
- package/dist/modules/execution/ExecutionServiceDependencies.js.map +1 -0
- package/dist/modules/execution/PrVerificationReportController.d.ts +106 -0
- package/dist/modules/execution/PrVerificationReportController.d.ts.map +1 -0
- package/dist/modules/execution/PrVerificationReportController.js +134 -0
- package/dist/modules/execution/PrVerificationReportController.js.map +1 -0
- package/dist/modules/execution/RunDispatcher.d.ts +4 -0
- package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
- package/dist/modules/execution/RunDispatcher.js +13 -0
- package/dist/modules/execution/RunDispatcher.js.map +1 -1
- package/dist/modules/execution/prReport.logic.d.ts +25 -0
- package/dist/modules/execution/prReport.logic.d.ts.map +1 -0
- package/dist/modules/execution/prReport.logic.js +436 -0
- package/dist/modules/execution/prReport.logic.js.map +1 -0
- package/dist/modules/execution/prReportText.logic.d.ts +46 -0
- package/dist/modules/execution/prReportText.logic.d.ts.map +1 -0
- package/dist/modules/execution/prReportText.logic.js +188 -0
- package/dist/modules/execution/prReportText.logic.js.map +1 -0
- package/dist/modules/execution/retry.logic.d.ts +28 -1
- package/dist/modules/execution/retry.logic.d.ts.map +1 -1
- package/dist/modules/execution/retry.logic.js +36 -0
- package/dist/modules/execution/retry.logic.js.map +1 -1
- package/dist/modules/execution/runStartOptions.d.ts +12 -0
- package/dist/modules/execution/runStartOptions.d.ts.map +1 -1
- package/dist/modules/settings/WorkspaceSettingsService.d.ts.map +1 -1
- package/dist/modules/settings/WorkspaceSettingsService.js +1 -0
- package/dist/modules/settings/WorkspaceSettingsService.js.map +1 -1
- package/package.json +11 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutionServiceDependencies.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/ExecutionServiceDependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutionServiceDependencies.js","sourceRoot":"","sources":["../../../src/modules/execution/ExecutionServiceDependencies.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { BlockRepository, Clock, ExecutionInstance, PrVerificationReportPublisher, TaskRepository, WorkspaceSettingsRepository } from '@cat-factory/kernel';
|
|
2
|
+
/** Minimal structured logger (pino-compatible); optional, like every other best-effort path. */
|
|
3
|
+
export interface PrReportLogger {
|
|
4
|
+
warn(obj: Record<string, unknown>, msg?: string): void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The engine collaborator that keeps a run's **verification report** on its pull request.
|
|
8
|
+
*
|
|
9
|
+
* Shape decision (see `docs/initiatives/pr-verification-report.md`, D2): this is an engine
|
|
10
|
+
* HOOK on step settlement, not a pipeline step — so it is pipeline-shape agnostic (a
|
|
11
|
+
* deployment-authored pipeline gets a report without editing it) and a run that fails or
|
|
12
|
+
* parks part-way still leaves its evidence on the PR. `RunDispatcher.recordStepResult` calls
|
|
13
|
+
* {@link publishForRun} once per settled step, positioned AFTER the terminal step resolver
|
|
14
|
+
* (so the `merger` step's publish carries the resolved `MergeDecision`) and BEFORE
|
|
15
|
+
* `finalizeBlock` (so the `pipeline_complete` card a merger-less pipeline raises points at a
|
|
16
|
+
* PR that already carries the finished report). A passing polling gate settles through the
|
|
17
|
+
* same `recordStepResult`, so the CI verdict needs no hook of its own.
|
|
18
|
+
*
|
|
19
|
+
* Everything it reports is already in memory on the {@link ExecutionInstance}; the only reads
|
|
20
|
+
* are one block point-read and one batched `listByBlock` for the linked tracker issues — no
|
|
21
|
+
* N+1, and no re-probe of the CI/mergeability providers (which would cost a round trip and
|
|
22
|
+
* could disagree with the verdict the gate actually acted on).
|
|
23
|
+
*
|
|
24
|
+
* Every failure mode is a silent no-op: no publisher wired (tests, a no-VCS deployment), no
|
|
25
|
+
* PR yet, an unchanged report, or a transport error. Publishing a report must never fail a
|
|
26
|
+
* run that otherwise succeeded.
|
|
27
|
+
*/
|
|
28
|
+
export interface PrVerificationReportControllerDeps {
|
|
29
|
+
blockRepository: BlockRepository;
|
|
30
|
+
clock: Clock;
|
|
31
|
+
/**
|
|
32
|
+
* Optional: writes the rendered section onto the block's PR. Absent (no VCS client wired)
|
|
33
|
+
* ⇒ every publish is a no-op, so the engine behaves exactly as it did before this feature.
|
|
34
|
+
*/
|
|
35
|
+
publisher?: PrVerificationReportPublisher;
|
|
36
|
+
/** Optional: resolves the task's linked tracker issues in ONE batched read. */
|
|
37
|
+
taskRepository?: TaskRepository;
|
|
38
|
+
/**
|
|
39
|
+
* Optional: the per-workspace `publishPrVerificationReport` opt-out. Absent (or no saved
|
|
40
|
+
* settings row) ⇒ the default, which is ON — a deployment that wired a publisher wants the
|
|
41
|
+
* report.
|
|
42
|
+
*/
|
|
43
|
+
workspaceSettingsRepository?: WorkspaceSettingsRepository;
|
|
44
|
+
/**
|
|
45
|
+
* Optional: the deployment's public SPA base URL, used to build the observability deep
|
|
46
|
+
* link. Absent ⇒ the report's `observability.runUrl` is null and no link is rendered
|
|
47
|
+
* (better than emitting a link to nowhere).
|
|
48
|
+
*/
|
|
49
|
+
appBaseUrl?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Optional structured logger for the best-effort failure path. Wire it: publishing is the
|
|
52
|
+
* one part of the run that is DESIGNED to fail silently, so without a log a revoked token or
|
|
53
|
+
* a rejected body leaves no trace anywhere — the report simply stops appearing.
|
|
54
|
+
*/
|
|
55
|
+
logger?: PrReportLogger;
|
|
56
|
+
}
|
|
57
|
+
export declare class PrVerificationReportController {
|
|
58
|
+
private readonly deps;
|
|
59
|
+
/**
|
|
60
|
+
* The last section published per execution id, so settlements that change nothing a reader
|
|
61
|
+
* would see cost no PR edit at all.
|
|
62
|
+
*
|
|
63
|
+
* It does NOT collapse a run to one edit: the report carries a per-step state table, so most
|
|
64
|
+
* settlements genuinely do change it and the report tracks the run as it progresses — which
|
|
65
|
+
* is the intent ("rewritten in place as the run progresses"). What the cache removes is the
|
|
66
|
+
* repeat write from a replayed durable step, a re-poll, or a settlement whose evidence is
|
|
67
|
+
* identical to the last one.
|
|
68
|
+
*
|
|
69
|
+
* In-process only and deliberately so: it is a WRITE-AVOIDANCE cache, never a correctness
|
|
70
|
+
* mechanism — the marker splice is idempotent, so a cold process (or a peer replica) simply
|
|
71
|
+
* re-publishes the same section and the adapter's own unchanged-check suppresses the remote
|
|
72
|
+
* write.
|
|
73
|
+
*/
|
|
74
|
+
private readonly lastPublished;
|
|
75
|
+
/**
|
|
76
|
+
* Hard cap on {@link lastPublished}. A long-lived Node replica serves an unbounded number of
|
|
77
|
+
* runs, and each entry holds a rendered section, so the map is bounded here rather than
|
|
78
|
+
* relying on a call site to evict finished runs (a coupling that would silently leak the
|
|
79
|
+
* moment a new terminal path forgot to call it). Oldest-first eviction: `Map` preserves
|
|
80
|
+
* insertion order, and evicting an entry only costs one redundant (idempotent) republish.
|
|
81
|
+
*/
|
|
82
|
+
private static readonly MAX_TRACKED_RUNS;
|
|
83
|
+
constructor(deps: PrVerificationReportControllerDeps);
|
|
84
|
+
/**
|
|
85
|
+
* Compose the report for `instance` and upsert it onto the run's PR. Best-effort: returns
|
|
86
|
+
* silently on every skip/failure path.
|
|
87
|
+
*/
|
|
88
|
+
publishForRun(workspaceId: string, instance: ExecutionInstance): Promise<void>;
|
|
89
|
+
/** Record the published fingerprint, evicting the oldest entry once the cap is reached. */
|
|
90
|
+
private remember;
|
|
91
|
+
/**
|
|
92
|
+
* The workspace's opt-out. Checked BEFORE anything is read or composed, so a workspace that
|
|
93
|
+
* turned the report off pays nothing for the hook. A workspace with no saved settings row
|
|
94
|
+
* reads as the default (on).
|
|
95
|
+
*/
|
|
96
|
+
private publishingEnabled;
|
|
97
|
+
private linkedIssues;
|
|
98
|
+
/**
|
|
99
|
+
* The deep link into the run's observability panel (Model activity / Provided context).
|
|
100
|
+
* The SPA is a single canvas, so the target is the board with the run's view params — see
|
|
101
|
+
* `useRunDeepLink` in `@cat-factory/app`, and slice 4 of the global-search initiative,
|
|
102
|
+
* which will generalise the parser.
|
|
103
|
+
*/
|
|
104
|
+
private runUrl;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=PrVerificationReportController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrVerificationReportController.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/PrVerificationReportController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,KAAK,EACL,iBAAiB,EAEjB,6BAA6B,EAC7B,cAAc,EACd,2BAA2B,EAC5B,MAAM,qBAAqB,CAAA;AAI5B,gGAAgG;AAChG,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,kCAAkC;IACjD,eAAe,EAAE,eAAe,CAAA;IAChC,KAAK,EAAE,KAAK,CAAA;IACZ;;;OAGG;IACH,SAAS,CAAC,EAAE,6BAA6B,CAAA;IACzC,+EAA+E;IAC/E,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,2BAA2B,CAAA;IACzD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,CAAA;CACxB;AAED,qBAAa,8BAA8B;IA2B7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IA1BjC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAE1D;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IAE9C,YAA6B,IAAI,EAAE,kCAAkC,EAAI;IAEzE;;;OAGG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCnF;IAED,2FAA2F;IAC3F,OAAO,CAAC,QAAQ;IAUhB;;;;OAIG;YACW,iBAAiB;YAOjB,YAAY;IAY1B;;;;;OAKG;IACH,OAAO,CAAC,MAAM;CAef"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { DEFAULT_WORKSPACE_SETTINGS } from '@cat-factory/kernel';
|
|
2
|
+
import { composePrVerificationReport, renderPrVerificationReport } from './prReport.logic.js';
|
|
3
|
+
export class PrVerificationReportController {
|
|
4
|
+
deps;
|
|
5
|
+
/**
|
|
6
|
+
* The last section published per execution id, so settlements that change nothing a reader
|
|
7
|
+
* would see cost no PR edit at all.
|
|
8
|
+
*
|
|
9
|
+
* It does NOT collapse a run to one edit: the report carries a per-step state table, so most
|
|
10
|
+
* settlements genuinely do change it and the report tracks the run as it progresses — which
|
|
11
|
+
* is the intent ("rewritten in place as the run progresses"). What the cache removes is the
|
|
12
|
+
* repeat write from a replayed durable step, a re-poll, or a settlement whose evidence is
|
|
13
|
+
* identical to the last one.
|
|
14
|
+
*
|
|
15
|
+
* In-process only and deliberately so: it is a WRITE-AVOIDANCE cache, never a correctness
|
|
16
|
+
* mechanism — the marker splice is idempotent, so a cold process (or a peer replica) simply
|
|
17
|
+
* re-publishes the same section and the adapter's own unchanged-check suppresses the remote
|
|
18
|
+
* write.
|
|
19
|
+
*/
|
|
20
|
+
lastPublished = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* Hard cap on {@link lastPublished}. A long-lived Node replica serves an unbounded number of
|
|
23
|
+
* runs, and each entry holds a rendered section, so the map is bounded here rather than
|
|
24
|
+
* relying on a call site to evict finished runs (a coupling that would silently leak the
|
|
25
|
+
* moment a new terminal path forgot to call it). Oldest-first eviction: `Map` preserves
|
|
26
|
+
* insertion order, and evicting an entry only costs one redundant (idempotent) republish.
|
|
27
|
+
*/
|
|
28
|
+
static MAX_TRACKED_RUNS = 256;
|
|
29
|
+
constructor(deps) {
|
|
30
|
+
this.deps = deps;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Compose the report for `instance` and upsert it onto the run's PR. Best-effort: returns
|
|
34
|
+
* silently on every skip/failure path.
|
|
35
|
+
*/
|
|
36
|
+
async publishForRun(workspaceId, instance) {
|
|
37
|
+
const publisher = this.deps.publisher;
|
|
38
|
+
if (!publisher)
|
|
39
|
+
return;
|
|
40
|
+
try {
|
|
41
|
+
if (!(await this.publishingEnabled(workspaceId)))
|
|
42
|
+
return;
|
|
43
|
+
// Ask the adapter WHERE this would go before composing anything: it both short-circuits a
|
|
44
|
+
// run that has no PR yet (most runs, for most of their life) and supplies the repo +
|
|
45
|
+
// provider the report states — the same resolution the write itself uses, so the report
|
|
46
|
+
// can never name a different repo from the one it lands on.
|
|
47
|
+
const target = await publisher.resolveTarget(workspaceId, instance.blockId);
|
|
48
|
+
if (!target)
|
|
49
|
+
return;
|
|
50
|
+
const block = await this.deps.blockRepository.get(workspaceId, instance.blockId);
|
|
51
|
+
// Only a task carries an implementation PR; a frame/module run has nothing to report on.
|
|
52
|
+
if (!block)
|
|
53
|
+
return;
|
|
54
|
+
const section = renderPrVerificationReport(composePrVerificationReport(instance, {
|
|
55
|
+
block,
|
|
56
|
+
issues: await this.linkedIssues(workspaceId, instance.blockId),
|
|
57
|
+
repo: target.repo,
|
|
58
|
+
provider: target.provider,
|
|
59
|
+
runUrl: this.runUrl(workspaceId, instance),
|
|
60
|
+
now: this.deps.clock.now(),
|
|
61
|
+
}));
|
|
62
|
+
// `generatedAt` changes on every compose, so compare the section with it masked out —
|
|
63
|
+
// otherwise the cache would never hit and every step would edit the PR.
|
|
64
|
+
const fingerprint = section.replaceAll(/"generatedAt": \d+/g, '"generatedAt": 0');
|
|
65
|
+
if (this.lastPublished.get(instance.id) === fingerprint)
|
|
66
|
+
return;
|
|
67
|
+
await publisher.publish(workspaceId, block.id, section);
|
|
68
|
+
this.remember(instance.id, fingerprint);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
// A PR-report write is bookkeeping. A provider outage, a revoked token, or a PR someone
|
|
72
|
+
// closed underneath the run must never turn a green run red.
|
|
73
|
+
this.deps.logger?.warn({ err: error, executionId: instance.id, blockId: instance.blockId, workspaceId }, 'Failed to publish the PR verification report');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Record the published fingerprint, evicting the oldest entry once the cap is reached. */
|
|
77
|
+
remember(executionId, fingerprint) {
|
|
78
|
+
this.lastPublished.delete(executionId);
|
|
79
|
+
this.lastPublished.set(executionId, fingerprint);
|
|
80
|
+
while (this.lastPublished.size > PrVerificationReportController.MAX_TRACKED_RUNS) {
|
|
81
|
+
const oldest = this.lastPublished.keys().next();
|
|
82
|
+
if (oldest.done)
|
|
83
|
+
break;
|
|
84
|
+
this.lastPublished.delete(oldest.value);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The workspace's opt-out. Checked BEFORE anything is read or composed, so a workspace that
|
|
89
|
+
* turned the report off pays nothing for the hook. A workspace with no saved settings row
|
|
90
|
+
* reads as the default (on).
|
|
91
|
+
*/
|
|
92
|
+
async publishingEnabled(workspaceId) {
|
|
93
|
+
const repo = this.deps.workspaceSettingsRepository;
|
|
94
|
+
if (!repo)
|
|
95
|
+
return true;
|
|
96
|
+
const settings = (await repo.get(workspaceId)) ?? DEFAULT_WORKSPACE_SETTINGS;
|
|
97
|
+
return settings.publishPrVerificationReport;
|
|
98
|
+
}
|
|
99
|
+
async linkedIssues(workspaceId, blockId) {
|
|
100
|
+
const repo = this.deps.taskRepository;
|
|
101
|
+
if (!repo)
|
|
102
|
+
return [];
|
|
103
|
+
const records = await repo.listByBlock(workspaceId, blockId);
|
|
104
|
+
return records.map((record) => ({
|
|
105
|
+
source: record.source,
|
|
106
|
+
externalId: record.externalId,
|
|
107
|
+
title: record.title,
|
|
108
|
+
url: record.url,
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The deep link into the run's observability panel (Model activity / Provided context).
|
|
113
|
+
* The SPA is a single canvas, so the target is the board with the run's view params — see
|
|
114
|
+
* `useRunDeepLink` in `@cat-factory/app`, and slice 4 of the global-search initiative,
|
|
115
|
+
* which will generalise the parser.
|
|
116
|
+
*/
|
|
117
|
+
runUrl(workspaceId, instance) {
|
|
118
|
+
const base = this.deps.appBaseUrl?.trim();
|
|
119
|
+
if (!base)
|
|
120
|
+
return null;
|
|
121
|
+
// Built by hand rather than with `URLSearchParams`: orchestration is runtime-neutral and
|
|
122
|
+
// compiles without the DOM lib, so the global isn't in its type surface.
|
|
123
|
+
const query = Object.entries({
|
|
124
|
+
ws: workspaceId,
|
|
125
|
+
block: instance.blockId,
|
|
126
|
+
run: instance.id,
|
|
127
|
+
view: 'observability',
|
|
128
|
+
})
|
|
129
|
+
.map(([key, value]) => `${key}=${encodeURIComponent(value)}`)
|
|
130
|
+
.join('&');
|
|
131
|
+
return `${base.replace(/\/$/, '')}/?${query}`;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=PrVerificationReportController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrVerificationReportController.js","sourceRoot":"","sources":["../../../src/modules/execution/PrVerificationReportController.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { MergeResolver } from './MergeResolver.js';
|
|
|
8
8
|
import { ReviewGateController, type ReviewKind } from './ReviewGateController.js';
|
|
9
9
|
import { ForkDecisionController } from './ForkDecisionController.js';
|
|
10
10
|
import { PrReviewController } from './PrReviewController.js';
|
|
11
|
+
import type { PrVerificationReportController } from './PrVerificationReportController.js';
|
|
11
12
|
import type { InterviewGateController } from './InterviewGateController.js';
|
|
12
13
|
import { RunStateMachine } from './RunStateMachine.js';
|
|
13
14
|
import { StepGraph } from './StepGraph.js';
|
|
@@ -78,6 +79,8 @@ export interface RunDispatcherDeps {
|
|
|
78
79
|
* its controller here, with no new dispatch branch. Absent/unwired kinds pass through.
|
|
79
80
|
*/
|
|
80
81
|
interviewControllers?: InterviewGateController<unknown>[];
|
|
82
|
+
/** Keeps the run's verification report current on its PR; a no-op with no publisher wired. */
|
|
83
|
+
prVerificationReport: PrVerificationReportController;
|
|
81
84
|
runInitiatorScope: RunInitiatorScope;
|
|
82
85
|
environmentProvisioning?: EnvironmentProvisioningService;
|
|
83
86
|
ticketTrackerProvider?: TicketTrackerProvider;
|
|
@@ -141,6 +144,7 @@ export declare class RunDispatcher {
|
|
|
141
144
|
private readonly architectureBrainstormKind;
|
|
142
145
|
/** Interview-gate controllers keyed by their `agentKind` — the trait-driven dispatch table. */
|
|
143
146
|
private readonly interviewControllers;
|
|
147
|
+
private readonly prVerificationReport;
|
|
144
148
|
private readonly runInitiatorScope;
|
|
145
149
|
private readonly environmentProvisioning?;
|
|
146
150
|
private readonly ticketTrackerProvider?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunDispatcher.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/RunDispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAGb,eAAe,EACf,cAAc,EACd,KAAK,EACL,eAAe,EAEf,iBAAiB,EACjB,aAAa,EACb,KAAK,EACL,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,6BAA6B,EAE7B,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAEhB,WAAW,EACX,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,EACvB,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EAEjB,qBAAqB,EACrB,UAAU,EACX,MAAM,qBAAqB,CAAA;AAmB5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,KAAK,EAEV,gBAAgB,EAChB,8BAA8B,EAC/B,MAAM,2BAA2B,CAAA;AAWlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAI9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"RunDispatcher.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/RunDispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,6 +73,7 @@ export class RunDispatcher {
|
|
|
73
73
|
architectureBrainstormKind;
|
|
74
74
|
/** Interview-gate controllers keyed by their `agentKind` — the trait-driven dispatch table. */
|
|
75
75
|
interviewControllers;
|
|
76
|
+
prVerificationReport;
|
|
76
77
|
runInitiatorScope;
|
|
77
78
|
environmentProvisioning;
|
|
78
79
|
ticketTrackerProvider;
|
|
@@ -150,6 +151,7 @@ export class RunDispatcher {
|
|
|
150
151
|
this.requirementsBrainstormKind = deps.requirementsBrainstormKind;
|
|
151
152
|
this.architectureBrainstormKind = deps.architectureBrainstormKind;
|
|
152
153
|
this.interviewControllers = new Map((deps.interviewControllers ?? []).map((c) => [c.agentKind, c]));
|
|
154
|
+
this.prVerificationReport = deps.prVerificationReport;
|
|
153
155
|
this.runInitiatorScope = deps.runInitiatorScope;
|
|
154
156
|
this.environmentProvisioning = deps.environmentProvisioning;
|
|
155
157
|
this.ticketTrackerProvider = deps.ticketTrackerProvider;
|
|
@@ -1197,6 +1199,17 @@ export class RunDispatcher {
|
|
|
1197
1199
|
// the harness). Position-independent like the resolver above; a no-op for built-ins
|
|
1198
1200
|
// and when GitHub isn't wired. A throwing op propagates to fail the step/run.
|
|
1199
1201
|
await this.repoOps.runRegisteredPostOps(workspaceId, instance, step, isFinalStep, result);
|
|
1202
|
+
// Refresh the engine-maintained VERIFICATION REPORT on the run's PR from the evidence the
|
|
1203
|
+
// instance now carries (CI verdict, tester report, environment lifecycle, merge assessment).
|
|
1204
|
+
// Its POSITION is load-bearing: AFTER the terminal resolver, so a `merger` step publishes
|
|
1205
|
+
// with its resolved `MergeDecision` recorded; BEFORE `finalizeBlock`, so the
|
|
1206
|
+
// `pipeline_complete` card a merger-less pipeline raises points at a PR that already carries
|
|
1207
|
+
// the finished report. A passing polling gate settles through here too, so the CI verdict
|
|
1208
|
+
// needs no hook of its own. Best-effort inside the controller: no publisher wired, no PR
|
|
1209
|
+
// yet, or a settlement whose evidence is unchanged ⇒ nothing happens. A settlement that DOES
|
|
1210
|
+
// change the evidence writes, so the report tracks the run rather than landing once at the
|
|
1211
|
+
// end — which is the point, since a run that fails or parks part-way never reaches an end.
|
|
1212
|
+
await this.prVerificationReport.publishForRun(workspaceId, instance);
|
|
1200
1213
|
if (isFinalStep) {
|
|
1201
1214
|
instance.status = 'done';
|
|
1202
1215
|
// Merge resolution (and confidence persistence) already happened above,
|