@ccdd/project 6.0.2 → 6.2.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.
Files changed (81) hide show
  1. package/README.md +17 -3
  2. package/dist/src/broker/admission.d.ts +1 -1
  3. package/dist/src/broker/changes.d.ts +3 -0
  4. package/dist/src/broker/changes.js +6 -2
  5. package/dist/src/broker/changes.js.map +1 -1
  6. package/dist/src/broker/coalescing.js +2 -2
  7. package/dist/src/broker/coalescing.js.map +1 -1
  8. package/dist/src/broker/config.js +17 -4
  9. package/dist/src/broker/config.js.map +1 -1
  10. package/dist/src/broker/index.d.ts +17 -1
  11. package/dist/src/broker/index.js +96 -17
  12. package/dist/src/broker/index.js.map +1 -1
  13. package/dist/src/broker/ownership.d.ts +1 -0
  14. package/dist/src/broker/ownership.js +9 -1
  15. package/dist/src/broker/ownership.js.map +1 -1
  16. package/dist/src/broker/readiness.js +2 -1
  17. package/dist/src/broker/readiness.js.map +1 -1
  18. package/dist/src/broker/storage.d.ts +6 -0
  19. package/dist/src/broker/storage.js +1 -0
  20. package/dist/src/broker/storage.js.map +1 -1
  21. package/dist/src/contracts.d.ts +3 -0
  22. package/dist/src/definitions.d.ts +7 -0
  23. package/dist/src/diagnostic-scope.d.ts +5 -0
  24. package/dist/src/diagnostic-scope.js +4 -0
  25. package/dist/src/diagnostic-scope.js.map +1 -0
  26. package/dist/src/execution-scope.d.ts +7 -0
  27. package/dist/src/execution-scope.js +3 -0
  28. package/dist/src/execution-scope.js.map +1 -0
  29. package/dist/src/executors/launch-host.d.ts +1 -0
  30. package/dist/src/executors/launch-host.js +33 -0
  31. package/dist/src/executors/launch-host.js.map +1 -0
  32. package/dist/src/executors/pi.js +3 -3
  33. package/dist/src/executors/pi.js.map +1 -1
  34. package/dist/src/executors/process.js +22 -3
  35. package/dist/src/executors/process.js.map +1 -1
  36. package/dist/src/monitor/store.js +1 -1
  37. package/dist/src/monitor/store.js.map +1 -1
  38. package/dist/src/offline-guard.d.ts +1 -0
  39. package/dist/src/offline-guard.js +27 -0
  40. package/dist/src/offline-guard.js.map +1 -0
  41. package/dist/src/project/cli.js +36 -15
  42. package/dist/src/project/cli.js.map +1 -1
  43. package/dist/src/project/identity.d.ts +7 -1
  44. package/dist/src/project/identity.js +27 -13
  45. package/dist/src/project/identity.js.map +1 -1
  46. package/dist/src/project/index.d.ts +4 -0
  47. package/dist/src/project/index.js +7 -4
  48. package/dist/src/project/index.js.map +1 -1
  49. package/dist/src/project/load-check-worker.d.ts +1 -0
  50. package/dist/src/project/load-check-worker.js +12 -0
  51. package/dist/src/project/load-check-worker.js.map +1 -0
  52. package/dist/src/project/load-check.d.ts +83 -0
  53. package/dist/src/project/load-check.js +225 -0
  54. package/dist/src/project/load-check.js.map +1 -0
  55. package/dist/src/project/query.js +8 -2
  56. package/dist/src/project/query.js.map +1 -1
  57. package/dist/src/project/store.js +4 -1
  58. package/dist/src/project/store.js.map +1 -1
  59. package/dist/src/project/types.d.ts +7 -0
  60. package/dist/src/provenance.d.ts +24 -0
  61. package/dist/src/provenance.js +83 -0
  62. package/dist/src/provenance.js.map +1 -0
  63. package/dist/src/resources.d.ts +49 -0
  64. package/dist/src/resources.js +306 -0
  65. package/dist/src/resources.js.map +1 -0
  66. package/dist/src/response-schema.js +1 -1
  67. package/dist/src/response-schema.js.map +1 -1
  68. package/dist/src/result-view.d.ts +5 -0
  69. package/dist/src/result-view.js +5 -5
  70. package/dist/src/result-view.js.map +1 -1
  71. package/dist/src/tools/contracts.d.ts +2 -0
  72. package/dist/src/tools/environment.js +30 -8
  73. package/dist/src/tools/environment.js.map +1 -1
  74. package/dist/src/tools/runner.js +10 -3
  75. package/dist/src/tools/runner.js.map +1 -1
  76. package/dist/src/worker-client.d.ts +1 -0
  77. package/dist/src/worker-client.js +6 -3
  78. package/dist/src/worker-client.js.map +1 -1
  79. package/dist/src/worker.js +4 -1
  80. package/dist/src/worker.js.map +1 -1
  81. package/package.json +8 -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.2 @ccdd/project@6.0.2`; 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).
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.2.0 @ccdd/project@6.2.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 execute no scripts and create no tickets or stores.
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` or `CCDD_STATE_HOME`. 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`.
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 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
- /** A future machine-wide provider pool implements this same cancellable boundary. */
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":"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"}
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":"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"}
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
- return { name: value.name, critics, views: views(value.views), mounts,
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":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAItE,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,CAAC,MAAM,UAAU,GAAG,kCAAkC,CAAC;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,kEAAkE,CAAC;AACnG,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjF,MAAM,MAAM,GAAG,GAAyB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAsB,CAAC;AACpF,MAAM,UAAU,oBAAoB,CAAC,KAAc,IAAY,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;AACvG,SAAS,MAAM,CAAC,KAA8B,EAAE,OAA0B,EAAE,KAAa;IACvF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,GAAG,EAAE,CAAC,CAAC;AACtH,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC3E,MAAM,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACnS,CAAC;AACD,SAAS,KAAK,CAAC,KAAc;IAC3B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAChE,MAAM,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,QAAQ,IAAI,CAAC,YAAY,EAAE,YAAY,CAAU,EAAE,CAAC;QAC7D,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS;YAAE,SAAS;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,sBAAsB,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,MAAM,EAAuD,CAAC;QAC5E,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACrG,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7C,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;YAC1H,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACzE,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnE,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3F,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAClL,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzK,KAAK,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC;QAAE,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACjH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC1H,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,eAAe,CAAC,CAAC;QAC1F,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IACzL,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;QAAE,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC;SAC3E,CAAC;QACJ,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAC7E,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,IAAI,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACzL,OAAO,eAAe,CAAC,KAAK,CAAqB,CAAC;AACpD,CAAC;AACD,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAClF,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,UAAU,CAAC,CAAC;IACvG,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAChI,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC/G,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/G,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAuB,CAAC;IACxE,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACzH,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,CAAC,IAAI,sBAAsB,CAAC,CAAC;IACvG,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACvH,MAAM,MAAM,GAAG,MAAM,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACvK,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IACzB,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACzK,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACpC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnC,yFAAyF;YACzF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;YAC9G,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;YACxH,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;gBACjO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACpN,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC7H,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM;QACnE,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3I,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1H,CAAC;AAED,qGAAqG;AACrG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB,EAAE,MAAoB;IAC9E,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,SAAsC,EAAE,QAAiB,EAAE,MAAoB;IACxI,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,MAAoB,EAAE,KAA8C;IAC9G,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,EAAsB,EAAE,YAAY,GAAmC,EAAE,CAAC;IACnI,MAAM,YAAY,GAAG,MAAM,EAAsB,CAAC;IAClD,MAAM,IAAI,GAAG,KAAK,EAAE,QAAgB,EAAE,MAAe,EAAiB,EAAE;QACtE,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACvG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QACjE,IAAI,KAAK,GAAG,MAAM,CAAC;QACnB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC;YAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YAC1G,IAAI,QAA0B,CAAC;YAC/B,IAAI,CAAC;gBAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;YACvJ,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1G,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC;YACjD,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAU,EAAE,CAAC;YACzJ,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC/E,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;YACxD,CAAC;YACD,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;QACxB,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO;YAAE,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACnK,CAAC,CAAC;IACF,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YAChH,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;;QAAM,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC/G,MAAM,SAAS,GAAuB,EAAE,EAAE,OAAO,GAA+B,EAAE,CAAC;IACnF,MAAM,eAAe,GAAmD,MAAM,EAAE,CAAC;IACjF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,EAAE,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7E,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5H,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,OAAO,EAAE,GAAG,CAAC,CAAC;YACnG,IAAI,KAAK,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,OAAO,EAAE,GAAG,CAAC,CAAC;YACtJ,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,IAAI,KAAK,mCAAmC,CAAC,CAAC;YAC5M,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;YACxC,IAAI,KAAK,IAAI,GAAG,EAAE,IAAI,QAAQ,CAAC,EAAE,EAAE,KAAK,KAAK,CAAC,QAAQ;gBAAE,SAAS;YACjE,MAAM,WAAW,GAAG,GAAG,EAAE,IAAI,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,GAAG,MAAM,EAAU,CAAC;YAC1E,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,QAAQ,WAAW,2CAA2C,CAAC,CAAC;gBAC5J,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;YAC9B,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACnG,KAAK,MAAM,MAAM,IAAI,IAAI;gBAAE,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAChH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YAAE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE;gBAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3M,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;YACjF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACpJ,eAAe,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7F,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAAC,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE;gBAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IACD,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnH,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7H,MAAM,cAAc,GAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,YAAY;QAC7N,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1H,MAAM,MAAM,GAAe,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;IAC7E,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAe,EAAE,CAAC;AACtE,CAAC"}
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>>>;
@@ -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 { localAdmission } from './admission.js';
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, DEFAULT_IDENTITY_CONCURRENCY, positiveConcurrency } from '../project/identity.js';
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 = 4, admission = localAdmission(maxConcurrentExecutors), identityConcurrency = DEFAULT_IDENTITY_CONCURRENCY, executors, workspaceIntegrity = 'content', workspaceAdapter = { prepareWorkspace, reopenWorkspace } }) {
94
- positiveConcurrency(maxConcurrentExecutors, 'maxConcurrentExecutors');
95
- positiveConcurrency(identityConcurrency, 'identityConcurrency');
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
- lease = await admission.acquire({ requestId, runId, kind: initial.profile.kind, provider: initial.profile.provider, model: initial.profile.model }, { signal, waiting(reason) {
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 result = validateResult(await requireExecutors().execute(copy(request), {
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
- await lease?.release();
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, maxConcurrentExecutors + inFlight.size + 1);
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 >= maxConcurrentExecutors)
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 = false, signal, identityConcurrency: submissionIdentityConcurrency = identityConcurrency, ...removed }) {
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
- positiveConcurrency(submissionIdentityConcurrency, 'identityConcurrency');
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
  };