@ccdd/project 6.0.2 → 6.1.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/README.md +17 -3
- package/dist/src/broker/admission.d.ts +1 -1
- package/dist/src/broker/changes.d.ts +3 -0
- package/dist/src/broker/changes.js +6 -2
- package/dist/src/broker/changes.js.map +1 -1
- package/dist/src/broker/coalescing.js +2 -2
- package/dist/src/broker/coalescing.js.map +1 -1
- package/dist/src/broker/config.js +17 -4
- package/dist/src/broker/config.js.map +1 -1
- package/dist/src/broker/index.d.ts +17 -1
- package/dist/src/broker/index.js +96 -17
- package/dist/src/broker/index.js.map +1 -1
- package/dist/src/broker/ownership.d.ts +1 -0
- package/dist/src/broker/ownership.js +9 -1
- package/dist/src/broker/ownership.js.map +1 -1
- package/dist/src/broker/readiness.js +2 -1
- package/dist/src/broker/readiness.js.map +1 -1
- package/dist/src/broker/storage.d.ts +6 -0
- package/dist/src/broker/storage.js +1 -0
- package/dist/src/broker/storage.js.map +1 -1
- package/dist/src/contracts.d.ts +3 -0
- package/dist/src/definitions.d.ts +7 -0
- package/dist/src/diagnostic-scope.d.ts +5 -0
- package/dist/src/diagnostic-scope.js +4 -0
- package/dist/src/diagnostic-scope.js.map +1 -0
- package/dist/src/execution-scope.d.ts +7 -0
- package/dist/src/execution-scope.js +3 -0
- package/dist/src/execution-scope.js.map +1 -0
- package/dist/src/executors/launch-host.d.ts +1 -0
- package/dist/src/executors/launch-host.js +33 -0
- package/dist/src/executors/launch-host.js.map +1 -0
- package/dist/src/executors/pi.js +3 -3
- package/dist/src/executors/pi.js.map +1 -1
- package/dist/src/executors/process.js +22 -3
- package/dist/src/executors/process.js.map +1 -1
- package/dist/src/monitor/store.js +1 -1
- package/dist/src/monitor/store.js.map +1 -1
- package/dist/src/offline-guard.d.ts +1 -0
- package/dist/src/offline-guard.js +27 -0
- package/dist/src/offline-guard.js.map +1 -0
- package/dist/src/project/cli.js +36 -15
- package/dist/src/project/cli.js.map +1 -1
- package/dist/src/project/identity.d.ts +7 -1
- package/dist/src/project/identity.js +27 -13
- package/dist/src/project/identity.js.map +1 -1
- package/dist/src/project/index.d.ts +4 -0
- package/dist/src/project/index.js +7 -4
- package/dist/src/project/index.js.map +1 -1
- package/dist/src/project/load-check-worker.d.ts +1 -0
- package/dist/src/project/load-check-worker.js +12 -0
- package/dist/src/project/load-check-worker.js.map +1 -0
- package/dist/src/project/load-check.d.ts +83 -0
- package/dist/src/project/load-check.js +225 -0
- package/dist/src/project/load-check.js.map +1 -0
- package/dist/src/project/query.js +8 -2
- package/dist/src/project/query.js.map +1 -1
- package/dist/src/project/store.js +4 -1
- package/dist/src/project/store.js.map +1 -1
- package/dist/src/project/types.d.ts +7 -0
- package/dist/src/provenance.d.ts +24 -0
- package/dist/src/provenance.js +83 -0
- package/dist/src/provenance.js.map +1 -0
- package/dist/src/resources.d.ts +49 -0
- package/dist/src/resources.js +306 -0
- package/dist/src/resources.js.map +1 -0
- package/dist/src/response-schema.js +1 -1
- package/dist/src/response-schema.js.map +1 -1
- package/dist/src/result-view.d.ts +5 -0
- package/dist/src/result-view.js +5 -5
- package/dist/src/result-view.js.map +1 -1
- package/dist/src/tools/contracts.d.ts +2 -0
- package/dist/src/tools/environment.js +30 -8
- package/dist/src/tools/environment.js.map +1 -1
- package/dist/src/tools/runner.js +10 -3
- package/dist/src/tools/runner.js.map +1 -1
- package/dist/src/worker-client.d.ts +1 -0
- package/dist/src/worker-client.js +6 -3
- package/dist/src/worker-client.js.map +1 -1
- package/dist/src/worker.js +4 -1
- package/dist/src/worker.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @ccdd/project
|
|
2
2
|
|
|
3
|
-
Project validation, review history, CLI, Broker, Executors and optional local monitor. Use Node 22 LTS, at least 22.19.0. Install with `npm install --ignore-scripts @ccdd/core@6.0
|
|
3
|
+
Project validation, review history, CLI, Broker, Executors and optional local monitor. Use Node 22 LTS, at least 22.19.0. Install with `npm install --ignore-scripts @ccdd/core@6.1.0 @ccdd/project@6.1.0`; default tools are optional and are not installed by Project. Regular dependencies install automatically; core is a non-optional peer, declared explicitly here to keep the installed versions aligned. See [installation choices](https://github.com/lhj6102/ccdd/blob/main/docs/getting-started.md#installation-choices).
|
|
4
4
|
|
|
5
5
|
Each folder with `ccdd.json` is an Artifact that owns its Critics and script views. Child folders, mounts and instruction references derive dependencies. Cycles are supported. By default, Critics wait for current GREEN evidence from dependencies outside their strongly connected component (SCC). SCC peers can execute together after external gates pass; final validation needs matching actual evidence throughout the required scope.
|
|
6
6
|
|
|
@@ -13,14 +13,28 @@ ccdd-project verify --critic implementation/tests --wait
|
|
|
13
13
|
ccdd-project run show RUN_ID
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Individual verification preserves selected results and reports missing other required evidence as INCOMPLETE. `--recursive` includes that evidence's Critics. `--force` reevaluates selected Critics. Matching actual PASS is reused; no stale state is persisted. Queries
|
|
16
|
+
Individual verification preserves selected results and reports missing other required evidence as INCOMPLETE. `--recursive` includes that evidence's Critics. `--force` reevaluates selected Critics. Matching actual PASS is reused; no stale state is persisted. Queries create no review tickets; current-input queries execute opted-in identity scripts. Static config discovery and monitor GETs do not run them.
|
|
17
17
|
|
|
18
|
-
State defaults to `~/.local/state/ccdd/<workspace-path-hash>`, configurable with `--state-dir
|
|
18
|
+
State defaults to `~/.local/state/ccdd/<workspace-path-hash>`, configurable per repository with `--state-dir`. Keep `CCDD_STATE_HOME` shared across processes/repositories because it also selects the machine resource authority. State and all output must remain outside reviewed input. Reviews use the unchanged supplied workspace directly through execution and Human waiting. Users may provide a separate worktree with `--repo`.
|
|
19
19
|
|
|
20
20
|
With `--wait`: 0=fulfilled, 1=RED, 2=ERROR, 3=timeout, 4=incomplete. Without waiting, inspect the returned Run status; acceptance is not completion. `request claim`, `request tool` and `request submit` perform explicit local Human actions. `doctor`, `tools check` and `monitor` are supported.
|
|
21
21
|
|
|
22
22
|
`ccdd` exposes the same commands. There is no legacy run/config/group/generated compatibility path. Historical input versions are result-only, never reused or resumed. See the [repository guides](https://github.com/lhj6102/ccdd#readme).
|
|
23
23
|
|
|
24
|
+
## Review management
|
|
25
|
+
|
|
26
|
+
Use core `>=6.1.0 <7`; its declarations include identity weights, root review
|
|
27
|
+
policy and pinned script execution paths. All installed CCDD packages should
|
|
28
|
+
use the matching 6.1 release. Stop all 6.0 workers before upgrading; completed
|
|
29
|
+
format-6 evidence remains usable and older missing provenance stays `null`.
|
|
30
|
+
|
|
31
|
+
Machine provider/model pools and weighted identities share one local authority.
|
|
32
|
+
`--max-executions` bounds durable submission starts; reuse consumes none.
|
|
33
|
+
`--concurrency` is only an additional tighter cap. `--identity-concurrency` is
|
|
34
|
+
removed: configure local identity capacity and per-Artifact `stale.weight`.
|
|
35
|
+
Original execution provenance and guarded `load-check` scenarios are documented
|
|
36
|
+
in [review management](https://github.com/lhj6102/ccdd/blob/main/docs/review-management.md).
|
|
37
|
+
|
|
24
38
|
## License
|
|
25
39
|
|
|
26
40
|
[MIT](LICENSE).
|
|
@@ -8,7 +8,7 @@ export interface AdmissionRequest {
|
|
|
8
8
|
export interface AdmissionLease {
|
|
9
9
|
release(): void | Promise<void>;
|
|
10
10
|
}
|
|
11
|
-
/**
|
|
11
|
+
/** Optional admission adds a stricter precondition; the Broker always enforces machine admission as well. */
|
|
12
12
|
export interface Admission {
|
|
13
13
|
acquire(request: AdmissionRequest, options: {
|
|
14
14
|
signal: AbortSignal;
|
|
@@ -10,12 +10,15 @@ export declare function readChanges(db: DatabaseSync, runId: string, stateDir: s
|
|
|
10
10
|
cursor: number;
|
|
11
11
|
hasMore: boolean;
|
|
12
12
|
changes: {
|
|
13
|
+
attemptId: string | number | bigint | NodeJS.NonSharedUint8Array | null;
|
|
14
|
+
executionProvenance: import("../provenance.js").ExecutionProvenance | null;
|
|
13
15
|
cursor: number;
|
|
14
16
|
requestId: string;
|
|
15
17
|
criticId: string;
|
|
16
18
|
status: string;
|
|
17
19
|
blockedReason: string | number | bigint | NodeJS.NonSharedUint8Array | null;
|
|
18
20
|
result: {
|
|
21
|
+
executionProvenance: import("../provenance.js").ExecutionProvenance | null;
|
|
19
22
|
verdict: string;
|
|
20
23
|
reference: import("../result-view.js").ReviewReference;
|
|
21
24
|
} | null;
|
|
@@ -10,15 +10,19 @@ export function readChanges(db, runId, stateDir, { after = 0, limit = 100 } = {}
|
|
|
10
10
|
return null;
|
|
11
11
|
const store = records(db);
|
|
12
12
|
const rows = db.prepare('SELECT * FROM request_changes WHERE run_id=? AND cursor>? ORDER BY cursor LIMIT ?').all(runId, after, limit + 1);
|
|
13
|
+
const attemptFor = (cursor) => {
|
|
14
|
+
const row = db.prepare('SELECT attempt_id,provenance_ref FROM change_attempts WHERE cursor=?').get(Number(cursor));
|
|
15
|
+
return { attemptId: row?.attempt_id ?? null, executionProvenance: row?.provenance_ref ? store.get(String(row.provenance_ref)) : null };
|
|
16
|
+
};
|
|
13
17
|
const resultFor = (row) => {
|
|
14
18
|
if (!row.result_ref)
|
|
15
19
|
return null;
|
|
16
20
|
const result = store.get(String(row.result_ref));
|
|
17
21
|
if (!result || result.verdict !== row.status || !['GREEN', 'RED'].includes(String(row.status)))
|
|
18
22
|
throw new Error('Stored result/status mismatch.');
|
|
19
|
-
return { ...semanticResult(result), verdict: String(row.status), reference: reviewReference(stateDir, String(db.prepare('SELECT run_id FROM requests WHERE id=?').get(row.request_id).run_id), String(row.request_id)) };
|
|
23
|
+
return { ...semanticResult(result), executionProvenance: attemptFor(row.cursor).executionProvenance, verdict: String(row.status), reference: reviewReference(stateDir, String(db.prepare('SELECT run_id FROM requests WHERE id=?').get(row.request_id).run_id), String(row.request_id)) };
|
|
20
24
|
};
|
|
21
|
-
const changes = rows.slice(0, limit).map(row => ({ cursor: Number(row.cursor), requestId: String(row.request_id), criticId: String(row.critic_id), status: String(row.status),
|
|
25
|
+
const changes = rows.slice(0, limit).map(row => ({ ...attemptFor(row.cursor), cursor: Number(row.cursor), requestId: String(row.request_id), criticId: String(row.critic_id), status: String(row.status),
|
|
22
26
|
blockedReason: row.status === 'BLOCKED' || row.status === 'WAIT_DEPENDENCY' || row.status === 'QUEUED' ? (db.prepare("SELECT json_extract(data,'$.blockedReason') AS reason FROM requests WHERE id=?").get(row.request_id)?.reason ?? null) : null,
|
|
23
27
|
result: resultFor(row),
|
|
24
28
|
error: row.error, errorCode: row.error_code }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../../../src/broker/changes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,mFAAmF;AACnF,MAAM,UAAU,WAAW,CAAC,EAAgB,EAAE,KAAa,EAAE,QAAgB,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,GAAkB,EAAE;IAC3H,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC/J,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,mFAAmF,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1I,MAAM,SAAS,GAAG,CAAC,GAAwB,EAAE,EAAE;QAC7C,IAAI,CAAC,GAAG,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAA0B,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACjJ,OAAO,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../../../src/broker/changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,11 +8,11 @@ export function coalescingEligibility(database, request, options = {}) {
|
|
|
8
8
|
if (options.ignoreGates && ['WAIT_DEPENDENCY', 'BLOCKED'].includes(request.status))
|
|
9
9
|
return null;
|
|
10
10
|
options.reconcile?.(request.runId);
|
|
11
|
-
const row = database.prepare("SELECT json_object('id',json_extract(data,'$.id'),'status',json_extract(data,'$.status'),'createdAt',json_extract(data,'$.createdAt'),'coalescingGraceMs',json_extract(data,'$.coalescingGraceMs')) AS data FROM runs WHERE id = ?").get(request.runId);
|
|
11
|
+
const row = database.prepare("SELECT json_object('workerProtocol',json_extract(data,'$.workerProtocol'),'id',json_extract(data,'$.id'),'status',json_extract(data,'$.status'),'createdAt',json_extract(data,'$.createdAt'),'coalescingGraceMs',json_extract(data,'$.coalescingGraceMs')) AS data FROM runs WHERE id = ?").get(request.runId);
|
|
12
12
|
if (!row)
|
|
13
13
|
return null;
|
|
14
14
|
const source = JSON.parse(String(row.data));
|
|
15
|
-
if (terminal.has(source.status))
|
|
15
|
+
if (source.workerProtocol !== 'resources-1' || terminal.has(source.status))
|
|
16
16
|
return null;
|
|
17
17
|
const owner = database.prepare('SELECT * FROM run_owners WHERE run_id = ?').get(source.id);
|
|
18
18
|
// Never fall back to the submission lease for a dead owner. The write path
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coalescing.js","sourceRoot":"","sources":["../../../src/broker/coalescing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AAE9D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AASlE,wFAAwF;AACxF,MAAM,UAAU,qBAAqB,CAAC,QAAsB,EAAE,OAAsB,EAAE,OAAO,GAAsB,EAAE;IACnH,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAChH,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,iBAAiB,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/F,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"coalescing.js","sourceRoot":"","sources":["../../../src/broker/coalescing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { validateIdentityWeight } from '../resources.js';
|
|
1
2
|
import { validateResponseSchema } from '../response-schema.js';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { createHash } from 'node:crypto';
|
|
@@ -82,7 +83,7 @@ function critic(value) {
|
|
|
82
83
|
function manifest(value) {
|
|
83
84
|
if (!object(value))
|
|
84
85
|
throw new Error('ccdd.json must contain an Artifact object.');
|
|
85
|
-
fields(value, ['name', 'critics', 'views', 'mounts', 'basis', 'stale', 'envRequirements'], 'Artifact');
|
|
86
|
+
fields(value, ['name', 'critics', 'views', 'mounts', 'basis', 'stale', 'envRequirements', 'reviewPolicy'], 'Artifact');
|
|
86
87
|
if (typeof value.name !== 'string' || !identifier.test(value.name))
|
|
87
88
|
throw new Error('Artifact name must be a safe identifier.');
|
|
88
89
|
if (value.basis !== undefined && typeof value.basis !== 'boolean')
|
|
@@ -105,8 +106,9 @@ function manifest(value) {
|
|
|
105
106
|
if (value.stale !== undefined) {
|
|
106
107
|
if (!object(value.stale) || !['always', 'file-hash', 'identity'].includes(value.stale.kind))
|
|
107
108
|
throw new Error('Invalid stale strategy.');
|
|
108
|
-
fields(value.stale, value.stale.kind === 'always' ? ['kind'] : value.stale.kind === 'identity' ? ['kind', 'script', 'inputs', 'timeoutMs'] : ['kind', 'paths'], 'stale');
|
|
109
|
+
fields(value.stale, value.stale.kind === 'always' ? ['kind'] : value.stale.kind === 'identity' ? ['kind', 'script', 'inputs', 'timeoutMs', 'weight'] : ['kind', 'paths'], 'stale');
|
|
109
110
|
if (value.stale.kind === 'identity') {
|
|
111
|
+
validateIdentityWeight(value.stale.weight);
|
|
110
112
|
validateScript(value.stale.script);
|
|
111
113
|
// A concrete owner-relative entry is mandatory; inline programs cannot be fingerprinted.
|
|
112
114
|
const entry = value.stale.script.command === 'node' ? value.stale.script.args[0] : value.stale.script.command;
|
|
@@ -127,7 +129,16 @@ function manifest(value) {
|
|
|
127
129
|
value.stale.paths.forEach(projectInputPath);
|
|
128
130
|
}
|
|
129
131
|
}
|
|
130
|
-
|
|
132
|
+
if (value.reviewPolicy !== undefined) {
|
|
133
|
+
if (!object(value.reviewPolicy))
|
|
134
|
+
throw new Error('reviewPolicy must be an object.');
|
|
135
|
+
fields(value.reviewPolicy, ['dependencyGates', 'maxConcurrentExecutors'], 'reviewPolicy');
|
|
136
|
+
if (value.reviewPolicy.dependencyGates !== undefined && !['green', 'ignore'].includes(value.reviewPolicy.dependencyGates))
|
|
137
|
+
throw new Error('reviewPolicy.dependencyGates must be green or ignore.');
|
|
138
|
+
if (value.reviewPolicy.maxConcurrentExecutors !== undefined && (!Number.isSafeInteger(value.reviewPolicy.maxConcurrentExecutors) || value.reviewPolicy.maxConcurrentExecutors < 1))
|
|
139
|
+
throw new Error('reviewPolicy.maxConcurrentExecutors must be a positive integer.');
|
|
140
|
+
}
|
|
141
|
+
return { ...(value.reviewPolicy === undefined ? {} : { reviewPolicy: structuredClone(value.reviewPolicy) }), name: value.name, critics, views: views(value.views), mounts,
|
|
131
142
|
...(value.basis === undefined ? {} : { basis: value.basis }), ...(value.stale === undefined ? {} : { stale: structuredClone(value.stale) }),
|
|
132
143
|
...(value.envRequirements === undefined ? {} : { envRequirements: environmentRequirements(value.envRequirements) }) };
|
|
133
144
|
}
|
|
@@ -161,6 +172,8 @@ async function readConfig(repoPath, signal, scope) {
|
|
|
161
172
|
}
|
|
162
173
|
if (Object.hasOwn(artifacts, declared.name))
|
|
163
174
|
throw new Error(`Duplicate Artifact name: ${declared.name}`);
|
|
175
|
+
if (relative && declared.reviewPolicy !== undefined)
|
|
176
|
+
throw new Error('reviewPolicy belongs only to the repository root ccdd.json.');
|
|
164
177
|
const { critics = [], ...definition } = declared;
|
|
165
178
|
artifacts[declared.name] = { ...definition, path: relative, views: definition.views ?? {}, mounts: definition.mounts ?? {}, children: ownMap() };
|
|
166
179
|
localCritics[declared.name] = critics;
|
|
@@ -234,7 +247,7 @@ async function readConfig(repoPath, signal, scope) {
|
|
|
234
247
|
const environmentInputs = environmentPaths.size ? await hashExecutionInputs(root, [...environmentPaths], signal) : undefined;
|
|
235
248
|
const configManifest = { version: 2, configHash: hash(JSON.stringify({ artifacts, critics, relations, declarations, executionInputs, environmentInputs })), artifacts: structuredClone(artifacts), declarations,
|
|
236
249
|
...(executionInputs ? { executionInputs } : {}), ...(environmentInputs ? { environmentInputs, envRequirements } : {}) };
|
|
237
|
-
const config = { artifacts, critics, relations, configManifest };
|
|
250
|
+
const config = { artifacts, critics, relations, configManifest, ...Object.values(artifacts).find(artifact => artifact.path === '')?.reviewPolicy ? { reviewPolicy: Object.values(artifacts).find(artifact => artifact.path === '').reviewPolicy } : {} };
|
|
238
251
|
return { config: JSON.parse(JSON.stringify(config)) };
|
|
239
252
|
}
|
|
240
253
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/broker/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/broker/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,9 @@ export interface RunRecord {
|
|
|
32
32
|
};
|
|
33
33
|
project?: ProjectRunDefinition;
|
|
34
34
|
graph?: GraphDefinition;
|
|
35
|
+
workerProtocol?: 'resources-1';
|
|
36
|
+
maxExecutions?: number;
|
|
37
|
+
repoExecutorCap?: number;
|
|
35
38
|
status: RunStatus;
|
|
36
39
|
coalescingGraceMs?: number;
|
|
37
40
|
createdAt: string;
|
|
@@ -89,6 +92,15 @@ export declare function readStateContext(stateDir: string): {
|
|
|
89
92
|
};
|
|
90
93
|
/** Durable broker operations. Merely opening the store never starts a worker. */
|
|
91
94
|
export declare function createBroker<D extends ResultDetail = 'compact'>({ detail, repoPath, stateDir, repoId, coalescingGraceMs, maxConcurrentExecutors, admission, identityConcurrency, executors, workspaceIntegrity, workspaceAdapter }: BrokerOptions & ResultOptions<D>): {
|
|
95
|
+
executionBudget(id: string): {
|
|
96
|
+
maxExecutions: import("node:sqlite").SQLOutputValue;
|
|
97
|
+
attempts: {
|
|
98
|
+
state: string;
|
|
99
|
+
token: string;
|
|
100
|
+
requestId: string;
|
|
101
|
+
executionProvenance: import("../provenance.js").ExecutionProvenance | null;
|
|
102
|
+
}[];
|
|
103
|
+
} | null;
|
|
92
104
|
reconcile: (runId?: string) => void;
|
|
93
105
|
tryClaimHuman(requestId: string, reviewerId: string, options?: {
|
|
94
106
|
leaseMs?: number;
|
|
@@ -108,12 +120,15 @@ export declare function createBroker<D extends ResultDetail = 'compact'>({ detai
|
|
|
108
120
|
cursor: number;
|
|
109
121
|
hasMore: boolean;
|
|
110
122
|
changes: {
|
|
123
|
+
attemptId: string | number | bigint | NodeJS.NonSharedUint8Array | null;
|
|
124
|
+
executionProvenance: import("../provenance.js").ExecutionProvenance | null;
|
|
111
125
|
cursor: number;
|
|
112
126
|
requestId: string;
|
|
113
127
|
criticId: string;
|
|
114
128
|
status: string;
|
|
115
129
|
blockedReason: string | number | bigint | NodeJS.NonSharedUint8Array | null;
|
|
116
130
|
result: {
|
|
131
|
+
executionProvenance: import("../provenance.js").ExecutionProvenance | null;
|
|
117
132
|
verdict: string;
|
|
118
133
|
reference: import("../result-view.js").ReviewReference;
|
|
119
134
|
} | null;
|
|
@@ -123,12 +138,13 @@ export declare function createBroker<D extends ResultDetail = 'compact'>({ detai
|
|
|
123
138
|
} | null;
|
|
124
139
|
onChange(callback: () => void): () => boolean;
|
|
125
140
|
close(): Promise<void>;
|
|
126
|
-
submitProject: (...args: Parameters<({ requesterId, selection, recursive, force, ignoreGates, signal, identityConcurrency: submissionIdentityConcurrency, ...removed }: {
|
|
141
|
+
submitProject: (...args: Parameters<({ requesterId, selection, recursive, force, ignoreGates, maxExecutions, signal, identityConcurrency: submissionIdentityConcurrency, ...removed }: {
|
|
127
142
|
requesterId?: string;
|
|
128
143
|
selection: ProjectSelection;
|
|
129
144
|
recursive?: boolean;
|
|
130
145
|
force?: boolean;
|
|
131
146
|
ignoreGates?: boolean;
|
|
147
|
+
maxExecutions?: number;
|
|
132
148
|
signal?: AbortSignal;
|
|
133
149
|
identityConcurrency?: number;
|
|
134
150
|
}) => Promise<RunView>>) => Promise<NonNullable<import("../result-view.js").ResultView<D, RunView, import("../result-view.js").RequesterRun | null>>>;
|
package/dist/src/broker/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { diagnosticScope } from '../diagnostic-scope.js';
|
|
2
|
+
import { captureExecution } from '../provenance.js';
|
|
3
|
+
import { executionScope } from '../execution-scope.js';
|
|
4
|
+
import { openResources, canonicalRepositoryId, rejectIdentityConcurrency, validateMaxExecutions } from '../resources.js';
|
|
1
5
|
import { assertStateFormat, initializeStateFormat } from '../state-format.js';
|
|
2
6
|
import { semanticResult, validateFinalResult } from '../response-schema.js';
|
|
3
7
|
import { requesterRun, requesterRequest, resultView } from '../result-view.js';
|
|
@@ -10,7 +14,7 @@ import { setTimeout as delay, setImmediate as yieldTurn } from 'node:timers/prom
|
|
|
10
14
|
import { prepareReviewRequests } from '../requester/index.js';
|
|
11
15
|
import { readWorkspaceConfig } from './config.js';
|
|
12
16
|
import { createGraphDefinition } from './graph.js';
|
|
13
|
-
import {
|
|
17
|
+
import {} from './admission.js';
|
|
14
18
|
import { readChanges } from './changes.js';
|
|
15
19
|
import { initializeRecords, records } from './storage.js';
|
|
16
20
|
import { createReadiness } from './readiness.js';
|
|
@@ -24,7 +28,7 @@ import { createReviewTools } from '../tools/runner.js';
|
|
|
24
28
|
import { createHumanClaims, HUMAN_PREPARATION_LEASE_MS } from './human-claims.js';
|
|
25
29
|
import { prepareHumanReview } from '../executors/human-preparation.js';
|
|
26
30
|
import { prepareWorkspace, reopenWorkspace } from '../workspaces/index.js';
|
|
27
|
-
import { createProjectSnapshot,
|
|
31
|
+
import { createProjectSnapshot, positiveConcurrency } from '../project/identity.js';
|
|
28
32
|
import { includedCritics, planProject } from '../project/query.js';
|
|
29
33
|
import { readEvidence, storedRequesterRun } from '../project/store.js';
|
|
30
34
|
/** Internal instrumentation for deterministic scheduler regression tests. */
|
|
@@ -90,9 +94,10 @@ function prepareStateDirectory(repoPath, stateDir) {
|
|
|
90
94
|
return fs.realpathSync(canonical);
|
|
91
95
|
}
|
|
92
96
|
/** Durable broker operations. Merely opening the store never starts a worker. */
|
|
93
|
-
export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coalescingGraceMs = 15_000, maxConcurrentExecutors
|
|
94
|
-
|
|
95
|
-
|
|
97
|
+
export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coalescingGraceMs = 15_000, maxConcurrentExecutors, admission, identityConcurrency, executors, workspaceIntegrity = 'content', workspaceAdapter = { prepareWorkspace, reopenWorkspace } }) {
|
|
98
|
+
if (maxConcurrentExecutors !== undefined)
|
|
99
|
+
positiveConcurrency(maxConcurrentExecutors, 'maxConcurrentExecutors');
|
|
100
|
+
rejectIdentityConcurrency(identityConcurrency);
|
|
96
101
|
if (!Number.isSafeInteger(coalescingGraceMs) || coalescingGraceMs < 0 || coalescingGraceMs > 300_000)
|
|
97
102
|
throw new Error('coalescingGraceMs must be an integer from 0 to 300000.');
|
|
98
103
|
if (detail !== undefined && detail !== 'compact' && detail !== 'full')
|
|
@@ -131,6 +136,15 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
131
136
|
CREATE TABLE IF NOT EXISTS metadata (key TEXT PRIMARY KEY, value TEXT NOT NULL);
|
|
132
137
|
CREATE TABLE IF NOT EXISTS run_owners (run_id TEXT PRIMARY KEY REFERENCES runs(id), pid INTEGER NOT NULL, process_identity TEXT, token TEXT NOT NULL, claimed_at TEXT NOT NULL);`);
|
|
133
138
|
initializeRecords(db);
|
|
139
|
+
for (const row of db.prepare("SELECT o.*,r.data FROM run_owners o JOIN runs r ON r.id=o.run_id WHERE json_extract(r.data,'$.workerProtocol') IS NOT 'resources-1'").all()) {
|
|
140
|
+
if (ownerAlive(row))
|
|
141
|
+
throw new Error('An old worker is still active in this state. Stop all 6.0 workers before using machine resource admission.');
|
|
142
|
+
}
|
|
143
|
+
const diagnostic = db.prepare("SELECT value FROM metadata WHERE key='diagnostic-only'").get();
|
|
144
|
+
if (diagnostic && !diagnosticScope.getStore())
|
|
145
|
+
throw new Error('Offline diagnostic state cannot be opened as review evidence.');
|
|
146
|
+
if (diagnosticScope.getStore())
|
|
147
|
+
db.prepare("INSERT OR IGNORE INTO metadata(key,value) VALUES('diagnostic-only','true')").run();
|
|
134
148
|
const previousRepo = db.prepare('SELECT value FROM metadata WHERE key = ?').get('registered-repo');
|
|
135
149
|
const identity = JSON.stringify({ repoPath, repoId });
|
|
136
150
|
if (previousRepo && previousRepo.value !== identity)
|
|
@@ -144,6 +158,9 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
144
158
|
db?.close();
|
|
145
159
|
throw error;
|
|
146
160
|
}
|
|
161
|
+
const resources = openResources();
|
|
162
|
+
const repositoryKey = canonicalRepositoryId(repoPath);
|
|
163
|
+
const localCap = maxConcurrentExecutors ?? Number.MAX_SAFE_INTEGER;
|
|
147
164
|
const polling = createStatusPolling(db);
|
|
148
165
|
let closed = false;
|
|
149
166
|
let closing = false;
|
|
@@ -199,7 +216,7 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
199
216
|
};
|
|
200
217
|
const saveRequest = (request) => {
|
|
201
218
|
const packed = required(requestHeader(request.id), 'Request');
|
|
202
|
-
for (const key of ['status', 'startedAt', 'completedAt', 'claimedBy', 'claimedAt', 'tryClaim', 'preparationAttempt', 'claimAttemptId', 'notifiedAt', 'error', 'errorCode', 'blockedReason']) {
|
|
219
|
+
for (const key of ['status', 'startedAt', 'completedAt', 'claimedBy', 'claimedAt', 'tryClaim', 'preparationAttempt', 'claimAttemptId', 'notifiedAt', 'error', 'errorCode', 'blockedReason', 'executionProvenance']) {
|
|
203
220
|
if (request[key] === undefined)
|
|
204
221
|
delete packed[key];
|
|
205
222
|
else
|
|
@@ -238,6 +255,8 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
238
255
|
const request = requestHeader(requestId);
|
|
239
256
|
if (!request || !expectedStates.includes(request.status) || terminal.has(required(polling.runStatus(request.runId), 'Run')))
|
|
240
257
|
return false;
|
|
258
|
+
if (outcome.executionProvenance !== undefined)
|
|
259
|
+
request.executionProvenance = outcome.executionProvenance;
|
|
241
260
|
request.status = hasError ? 'ERROR' : required(result, 'review result').verdict;
|
|
242
261
|
request.resultRef = result ? store.put(result) : null;
|
|
243
262
|
request.semanticRef = result ? store.put(semanticResult(result)) : null;
|
|
@@ -314,13 +333,20 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
314
333
|
const initial = required(requestHeader(requestId), 'Request');
|
|
315
334
|
const runId = initial.runId;
|
|
316
335
|
let lease;
|
|
336
|
+
let customLease;
|
|
317
337
|
try {
|
|
318
|
-
if (initial.profile.kind !== 'human')
|
|
319
|
-
|
|
338
|
+
if (initial.profile.kind !== 'human') {
|
|
339
|
+
const admissionRequest = { requestId, runId, kind: initial.profile.kind, provider: initial.profile.provider, model: initial.profile.model };
|
|
340
|
+
// Optional admission is a stricter precondition, never the machine authority.
|
|
341
|
+
customLease = await admission?.acquire(admissionRequest, { signal, waiting(reason) { transaction(() => { const current = required(requestHeader(requestId), 'Request'); if (current.status !== 'QUEUED')
|
|
342
|
+
return; current.blockedReason = reason.slice(0, 2000); saveHeader(current); }); changed(); } });
|
|
343
|
+
const caps = [maxConcurrentExecutors, readiness.header(runId)?.repoExecutorCap].filter((value) => value !== undefined);
|
|
344
|
+
lease = await resources.acquire({ ...admissionRequest, repo: repositoryKey, ...(caps.length ? { repoCap: Math.min(...caps) } : {}) }, { signal, waiting(reason) {
|
|
320
345
|
transaction(() => { const current = required(requestHeader(requestId), 'Request'); if (current.status !== 'QUEUED')
|
|
321
346
|
return; current.blockedReason = reason.slice(0, 2000); saveHeader(current); });
|
|
322
347
|
changed();
|
|
323
348
|
} });
|
|
349
|
+
}
|
|
324
350
|
signal.throwIfAborted();
|
|
325
351
|
transaction(() => {
|
|
326
352
|
const request = required(requestHeader(requestId), 'Request');
|
|
@@ -371,7 +397,23 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
371
397
|
changed();
|
|
372
398
|
return;
|
|
373
399
|
}
|
|
374
|
-
const
|
|
400
|
+
const capture = await captureExecution(request, lease.token, signal);
|
|
401
|
+
// Fence cancellation and ownership after every preparation await. Holding the
|
|
402
|
+
// repository write lock orders remote cancel against the committed start marker.
|
|
403
|
+
// There is no await or user callback between this guard and invocation.
|
|
404
|
+
transaction(() => {
|
|
405
|
+
signal.throwIfAborted();
|
|
406
|
+
const header = required(requestHeader(requestId), 'Request');
|
|
407
|
+
if (ownerData(runId)?.token !== token)
|
|
408
|
+
throw codedError('Review ownership changed before executor start.', 'RUN_OWNERSHIP_LOST');
|
|
409
|
+
if (header.status !== 'RUNNING' || terminal.has(required(polling.runStatus(runId), 'Run')))
|
|
410
|
+
throw codedError('Review was canceled before executor start.', 'REVIEW_CANCELED');
|
|
411
|
+
lease.started(capture?.provenance ?? null);
|
|
412
|
+
header.attemptId = lease.token;
|
|
413
|
+
header.executionProvenance = capture?.provenance ?? null;
|
|
414
|
+
db.prepare('UPDATE requests SET data=? WHERE id=?').run(JSON.stringify(header), requestId);
|
|
415
|
+
});
|
|
416
|
+
const result = validateResult(await executionScope.run({ runtimeRoot: capture?.root ?? workspace.descriptor.path, declaredPaths: capture?.paths ?? [], trackChild: pid => lease.trackChild(pid) }, () => requireExecutors().execute(copy(request), {
|
|
375
417
|
worktreePath: workspace.descriptor.path, workspacePath: workspace.descriptor.path, runDir, signal,
|
|
376
418
|
onEvent(event) {
|
|
377
419
|
if (closed || closing || signal.aborted || !event || polling.requestStatus(requestId) !== 'RUNNING' || !['executor.started', 'artifact.tools.ready', 'artifact.tool.called', 'artifact.tool.completed', 'executor.usage', 'executor.final.invalid', 'executor.final.repair', 'executor.telemetry.failed', 'executor.completed'].includes(event.type))
|
|
@@ -418,12 +460,13 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
418
460
|
appendEvent(runId, requestId, event.type, event.type === 'executor.telemetry.failed' ? 'Some optional execution diagnostics could not be recorded.' : String(event.message ?? event.type).slice(0, 2000), safe);
|
|
419
461
|
changed();
|
|
420
462
|
},
|
|
421
|
-
}));
|
|
463
|
+
})));
|
|
464
|
+
await capture?.verify();
|
|
422
465
|
validateFinalResult(semanticResult(result), request);
|
|
423
466
|
await workspace.assertUnchanged();
|
|
424
467
|
signal.throwIfAborted();
|
|
425
468
|
transaction(() => { if (ownerData(runId)?.token === token)
|
|
426
|
-
finishWithin(requestId, { result }); });
|
|
469
|
+
finishWithin(requestId, { result, executionProvenance: capture?.provenance ?? null }); });
|
|
427
470
|
changed();
|
|
428
471
|
}
|
|
429
472
|
catch (error) {
|
|
@@ -443,7 +486,29 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
443
486
|
changed();
|
|
444
487
|
}
|
|
445
488
|
finally {
|
|
446
|
-
|
|
489
|
+
const cleanupErrors = [];
|
|
490
|
+
try {
|
|
491
|
+
lease?.terminal();
|
|
492
|
+
}
|
|
493
|
+
catch (error) {
|
|
494
|
+
cleanupErrors.push(errorText(error));
|
|
495
|
+
}
|
|
496
|
+
try {
|
|
497
|
+
await lease?.release();
|
|
498
|
+
}
|
|
499
|
+
catch (error) {
|
|
500
|
+
cleanupErrors.push(errorText(error));
|
|
501
|
+
}
|
|
502
|
+
try {
|
|
503
|
+
await customLease?.release();
|
|
504
|
+
}
|
|
505
|
+
catch (error) {
|
|
506
|
+
cleanupErrors.push(errorText(error));
|
|
507
|
+
}
|
|
508
|
+
if (cleanupErrors.length) {
|
|
509
|
+
appendEvent(runId, requestId, 'resource.cleanup.error', 'Execution resource cleanup failed; retained leases stay authoritative.', { errors: cleanupErrors });
|
|
510
|
+
changed();
|
|
511
|
+
}
|
|
447
512
|
}
|
|
448
513
|
}
|
|
449
514
|
async function run(runId, { signal, onStarted } = {}) {
|
|
@@ -457,6 +522,8 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
457
522
|
stored = header ? { ...header, workspace: store.get(header.workspaceRef) } : null;
|
|
458
523
|
if (!stored)
|
|
459
524
|
throw new Error('Unknown Run.');
|
|
525
|
+
if (stored.workerProtocol !== 'resources-1')
|
|
526
|
+
throw new Error('This Run uses an old worker protocol. Stop all 6.0 workers, preserve their history, and submit a new Run.');
|
|
460
527
|
if (stored.project?.version !== 3)
|
|
461
528
|
throw new Error('Invalid stored Run format; submit a new validation request.');
|
|
462
529
|
if (terminal.has(stored.status))
|
|
@@ -512,11 +579,11 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
512
579
|
leaseDeadline = Math.min(Infinity, ...pendingSources.filter(id => !ownerData(id)).map(id => submissionDeadlines.get(id) ?? performance.now()));
|
|
513
580
|
plannedRevision = polling.revision();
|
|
514
581
|
});
|
|
515
|
-
const requests = db.prepare("SELECT id,status,json_extract(data,'$.profile.kind') AS kind FROM requests WHERE run_id=? AND status='QUEUED' ORDER BY ordinal LIMIT ?").all(runId,
|
|
582
|
+
const requests = db.prepare("SELECT id,status,json_extract(data,'$.profile.kind') AS kind FROM requests WHERE run_id=? AND status='QUEUED' ORDER BY ordinal LIMIT ?").all(runId, Math.min(localCap + inFlight.size + 1, 2147483647));
|
|
516
583
|
let executing = [...inFlight.values()].filter(item => item.kind !== 'human').length;
|
|
517
584
|
for (const row of requests.filter(request => request.status === 'QUEUED' && !inFlight.has(request.id))) {
|
|
518
585
|
const kind = row.kind;
|
|
519
|
-
if (kind !== 'human' && executing >=
|
|
586
|
+
if (kind !== 'human' && executing >= localCap)
|
|
520
587
|
continue;
|
|
521
588
|
if (kind !== 'human')
|
|
522
589
|
executing++;
|
|
@@ -585,14 +652,15 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
585
652
|
return entry.promise;
|
|
586
653
|
}
|
|
587
654
|
const broker = {
|
|
588
|
-
async submitProject({ requesterId = 'cli', selection, recursive = false, force = false, ignoreGates
|
|
655
|
+
async submitProject({ requesterId = 'cli', selection, recursive = false, force = false, ignoreGates, maxExecutions, signal, identityConcurrency: submissionIdentityConcurrency = identityConcurrency, ...removed }) {
|
|
589
656
|
// Options are destructured before entry; selection is the sole mutable data
|
|
590
657
|
// input. Keep signal live for cancellation rather than cloning its state.
|
|
591
658
|
selection = structuredClone(selection);
|
|
592
659
|
ensureOpen();
|
|
593
660
|
requireExecutors();
|
|
594
661
|
sweepSubmissionDeadlines();
|
|
595
|
-
|
|
662
|
+
rejectIdentityConcurrency(submissionIdentityConcurrency);
|
|
663
|
+
validateMaxExecutions(maxExecutions);
|
|
596
664
|
if ('mode' in removed)
|
|
597
665
|
throw new Error('Workspace modes are no longer supported; supply an unchanged workspace.');
|
|
598
666
|
if (!requesterId.trim() || requesterId.length > 200)
|
|
@@ -604,6 +672,7 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
604
672
|
// before any later await, and never store its externally owned object.
|
|
605
673
|
const descriptor = structuredClone(workspace.descriptor);
|
|
606
674
|
const { config } = await readWorkspaceConfig(descriptor.path, workspace.signal);
|
|
675
|
+
ignoreGates ??= config.reviewPolicy?.dependencyGates === 'ignore';
|
|
607
676
|
const snapshot = await createProjectSnapshot(config, descriptor.path, descriptor.hash, workspace.signal, descriptor.integrity, selection, { identityConcurrency: submissionIdentityConcurrency });
|
|
608
677
|
const ids = includedCritics(snapshot, selection, recursive);
|
|
609
678
|
const templates = [];
|
|
@@ -616,19 +685,25 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
616
685
|
}
|
|
617
686
|
}
|
|
618
687
|
const id = randomUUID(), createdAt = now();
|
|
619
|
-
const record = { id, repoId, coalescingGraceMs, snapshotHash: descriptor.hash, workspace: descriptor, requesterId,
|
|
688
|
+
const record = { id, repoId, workerProtocol: 'resources-1', maxExecutions, repoExecutorCap: config.reviewPolicy?.maxConcurrentExecutors, coalescingGraceMs, snapshotHash: descriptor.hash, workspace: descriptor, requesterId,
|
|
620
689
|
scope: { kind: 'project' }, graph: createGraphDefinition(config, false), project: { version: 3, snapshot, selection, recursive, force, ignoreGates, templates }, status: 'QUEUED', createdAt };
|
|
621
690
|
const prepared = await store.prepareRun(record, workspace.signal);
|
|
622
691
|
await workspace.assertUnchanged();
|
|
623
692
|
workspace.signal.throwIfAborted();
|
|
624
693
|
ensureOpen();
|
|
625
694
|
const commitStarted = performance.now();
|
|
695
|
+
resources.registerSubmission(id, maxExecutions);
|
|
626
696
|
transaction(() => {
|
|
627
697
|
prepared.verify();
|
|
628
698
|
db.prepare('INSERT INTO runs(id,created_at,status,data) VALUES (?,?,?,?)').run(id, createdAt, record.status, JSON.stringify(prepared.header));
|
|
629
699
|
appendEvent(id, null, 'run.submitted', 'Project validation requested against fixed input.', { selection, recursive, force });
|
|
630
700
|
brokerTestHooks.onPlan?.();
|
|
631
701
|
readiness.initialize(record, prepared);
|
|
702
|
+
if (maxExecutions !== undefined) {
|
|
703
|
+
const starts = Number(db.prepare("SELECT count(*) AS n FROM requests WHERE run_id=? AND status='QUEUED' AND json_extract(data,'$.profile.kind')!='human'").get(id).n);
|
|
704
|
+
if (starts > maxExecutions)
|
|
705
|
+
throw codedError(`Plan requires ${starts} new executions, exceeding maxExecutions ${maxExecutions}.`, 'EXECUTION_BUDGET_EXCEEDED');
|
|
706
|
+
}
|
|
632
707
|
});
|
|
633
708
|
brokerTestHooks.onSubmissionCommit?.(performance.now() - commitStarted);
|
|
634
709
|
changed();
|
|
@@ -639,6 +714,7 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
639
714
|
}
|
|
640
715
|
},
|
|
641
716
|
run,
|
|
717
|
+
executionBudget(id) { ensureOpen(); return resources.budget(id); },
|
|
642
718
|
reconcile,
|
|
643
719
|
listRuns() {
|
|
644
720
|
ensureOpen();
|
|
@@ -885,6 +961,8 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
885
961
|
request.semanticRef = null;
|
|
886
962
|
request.startedAt = null;
|
|
887
963
|
request.completedAt = null;
|
|
964
|
+
delete request.executionProvenance;
|
|
965
|
+
delete request.attemptId;
|
|
888
966
|
saveHeader(request);
|
|
889
967
|
appendEvent(run.id, request.id, 'request.retried', 'Retry requested against the same immutable input.');
|
|
890
968
|
});
|
|
@@ -921,6 +999,7 @@ export function createBroker({ detail, repoPath, stateDir, repoId = 'demo', coal
|
|
|
921
999
|
submissionDeadlines.clear();
|
|
922
1000
|
listeners.clear();
|
|
923
1001
|
db.close();
|
|
1002
|
+
resources.close();
|
|
924
1003
|
closed = true;
|
|
925
1004
|
},
|
|
926
1005
|
};
|