@ccdd/project 3.1.1 → 3.1.2

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 (43) hide show
  1. package/dist/monitor-ui/assets/GraphView-CLDdEbWU.js +27 -0
  2. package/dist/monitor-ui/assets/ValidationView-C6Fz_CWD.js +1 -0
  3. package/dist/monitor-ui/assets/{elk-api-DDn2L4-3.js → elk-api-BMMZHNwW.js} +1 -1
  4. package/dist/monitor-ui/assets/{elk.bundled-Bmx50hLH.js → elk.bundled-DuZ6spnY.js} +1 -1
  5. package/dist/monitor-ui/assets/index-BDX0ouEQ.js +8 -0
  6. package/dist/monitor-ui/assets/index-DDwx11D7.css +1 -0
  7. package/dist/monitor-ui/index.html +2 -2
  8. package/dist/src/artifacts/tool-check.d.ts +3 -0
  9. package/dist/src/artifacts/tool-check.js +28 -25
  10. package/dist/src/artifacts/tool-check.js.map +1 -1
  11. package/dist/src/broker/human-claims.d.ts +20 -2
  12. package/dist/src/broker/human-claims.js +50 -5
  13. package/dist/src/broker/human-claims.js.map +1 -1
  14. package/dist/src/broker/index.d.ts +2 -1
  15. package/dist/src/broker/index.js +5 -3
  16. package/dist/src/broker/index.js.map +1 -1
  17. package/dist/src/contracts.d.ts +2 -1
  18. package/dist/src/executors/human-preparation.d.ts +7 -1
  19. package/dist/src/executors/human-preparation.js +9 -2
  20. package/dist/src/executors/human-preparation.js.map +1 -1
  21. package/dist/src/monitor/human-preparation.d.ts +4 -0
  22. package/dist/src/monitor/human-preparation.js +43 -0
  23. package/dist/src/monitor/human-preparation.js.map +1 -0
  24. package/dist/src/monitor/server.js +4 -1
  25. package/dist/src/monitor/server.js.map +1 -1
  26. package/dist/src/monitor/types.d.ts +9 -0
  27. package/dist/src/tools/diagnostics.d.ts +11 -0
  28. package/dist/src/tools/diagnostics.js +75 -0
  29. package/dist/src/tools/diagnostics.js.map +1 -0
  30. package/dist/src/tools/runner.d.ts +2 -0
  31. package/dist/src/tools/runner.js +13 -5
  32. package/dist/src/tools/runner.js.map +1 -1
  33. package/dist/src/tools/runtime-host.js +6 -1
  34. package/dist/src/tools/runtime-host.js.map +1 -1
  35. package/dist/src/workspaces/index.d.ts +10 -2
  36. package/dist/src/workspaces/index.js +22 -7
  37. package/dist/src/workspaces/index.js.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/monitor-ui/assets/GraphView-CzM-UdPe.js +0 -27
  40. package/dist/monitor-ui/assets/ValidationView-C3G5cwXp.js +0 -1
  41. package/dist/monitor-ui/assets/_plugin-vue_export-helper-BDNMzG2s.js +0 -1
  42. package/dist/monitor-ui/assets/index-B4RYcPAo.js +0 -8
  43. package/dist/monitor-ui/assets/index-SA3sxGLr.css +0 -1
@@ -6,42 +6,30 @@ import { prepareWorkspace } from '../workspaces/index.js';
6
6
  import { createReviewTools } from '../tools/runner.js';
7
7
  import { assertArtifactAudience } from './types.js';
8
8
  import { isArtifactGroup, resolveArtifactScope } from './groups.js';
9
- function safeFailure(error, aborted) {
10
- const code = error && typeof error === 'object' && 'code' in error ? error.code : undefined;
11
- if (aborted || code === 'ABORTED')
12
- return { code: 'ABORTED', message: 'Artifact tool diagnosis was cancelled.' };
13
- if (code === 'WORKSPACE_CHANGED' || code === 'WORKSPACE_CACHE_TAMPERED')
14
- return { code, message: 'The workspace changed during Artifact tool diagnosis.' };
15
- if (code === 'ARTIFACT_TOOLS_UNAVAILABLE')
16
- return { code, message: 'A Critic references an Artifact with no tools for its reviewer kind. Register the corresponding agentTools or humanTools.' };
17
- if (code === 'HUMAN_TOOL_TIMEOUT')
18
- return { code, message: 'The registered Human tool exceeded its configured time limit.' };
19
- if (code === 'HUMAN_TOOL_UNAVAILABLE')
20
- return { code, message: 'The registered Human tool executable is unavailable.' };
21
- if (code === 'HUMAN_TOOL_FAILED')
22
- return { code, message: 'The registered Human tool did not finish successfully.' };
23
- return { code: 'ARTIFACT_TOOL_CHECK_FAILED', message: 'Artifact tool diagnosis failed. Check the configuration, selected tool, scoped arguments and workspace access.' };
24
- }
9
+ import { safeToolFailure, toolFailureStage } from '../tools/diagnostics.js';
25
10
  /** Diagnose registered tools without creating a Broker, Run, request, alarm, Agent session or verdict. */
26
11
  export async function diagnoseArtifactTools({ repoPath, mode = 'copy', stateDir, artifactId, audience, toolName, arguments: args, execute = false, signal }) {
27
12
  const report = { ok: false, status: 'NOT_READY', mode, checkedAt: new Date().toISOString(), checks: [], tools: [] };
28
13
  let workspace;
14
+ let stage = 'preflight';
29
15
  try {
30
16
  if ((audience !== undefined && audience !== 'agent' && audience !== 'human') || (execute && (!artifactId || !audience || !toolName)) || (!execute && args !== undefined))
31
17
  throw new Error('Actual tool execution requires explicit Artifact, audience and tool selection.');
32
18
  signal?.throwIfAborted();
19
+ stage = 'snapshot';
33
20
  const context = await localContext({ repoPath, stateDir });
34
21
  workspace = await prepareWorkspace({ repoPath: context.repoPath, stateDir: context.stateDir, mode, signal });
35
22
  const worktreePath = workspace.descriptor.path;
36
23
  report.snapshotHash = workspace.descriptor.hash;
37
24
  // Cached copies are retained: a desktop viewer can continue reading after its launcher exits.
38
25
  report.workspacePath = worktreePath;
26
+ stage = 'preflight';
39
27
  const { config } = await readWorkspaceConfig(worktreePath);
40
28
  const { configManifest } = config;
41
29
  if (artifactId !== undefined && !Object.hasOwn(config.artifacts, artifactId))
42
30
  throw new Error('Unknown selected Artifact.');
43
31
  if (execute && artifactId !== undefined && isArtifactGroup(config.artifacts[artifactId])) {
44
- report.checks.push({ artifactId, ok: false, message: 'Groups collect member tools. Select a leaf Artifact with --artifact to execute its tool.' });
32
+ report.checks.push({ artifactId, stage, ok: false, code: 'ARTIFACT_GROUP_NOT_EXECUTABLE', message: 'Groups collect member tools. Select a leaf Artifact with --artifact to execute its tool.' });
45
33
  return report;
46
34
  }
47
35
  const selectedScope = resolveArtifactScope(config.artifacts, artifactId === undefined ? Object.keys(config.artifacts) : [artifactId]);
@@ -54,18 +42,21 @@ export async function diagnoseArtifactTools({ repoPath, mode = 'copy', stateDir,
54
42
  assertArtifactAudience({ profile: critic.profile, ...resolveArtifactScope(config.artifacts, [critic.target, ...critic.deps]), artifactTypes: config.artifactTypes, configManifest });
55
43
  }
56
44
  catch (error) {
57
- report.checks.push({ ok: false, ...safeFailure(error, false) });
45
+ report.checks.push({ stage, ok: false, ...safeToolFailure(error) });
58
46
  }
59
47
  }
60
48
  }
61
49
  for (const targetAudience of audience ? [audience] : ['agent', 'human']) {
50
+ stage = 'preflight';
62
51
  const registry = await createReviewTools({ worktreePath, ...selectedScope, artifactTypes: config.artifactTypes, configManifest, audience: targetAudience, runDir: join(context.stateDir, 'tool-check', randomUUID()), signal: workspace.signal });
52
+ if (execute && targetAudience === audience && registry.outputDir)
53
+ report.outputDir = registry.outputDir;
63
54
  try {
64
55
  // Explicit Artifact selection makes the short operation name unambiguous; published names win.
65
56
  const resolvedToolName = toolName === undefined || registry.tools.some(tool => tool.name === toolName) || artifactId === undefined ? toolName : `${toolName}_${artifactId}`;
66
57
  const definitions = registry.tools.filter(tool => resolvedToolName === undefined || tool.name === resolvedToolName);
67
58
  if (toolName !== undefined && !definitions.length) {
68
- report.checks.push({ artifactId, audience: targetAudience, toolName, ok: false, message: 'The selected tool is not registered for this Artifact and reviewer kind.' });
59
+ report.checks.push({ artifactId, audience: targetAudience, toolName, stage, ok: false, code: 'ARTIFACT_TOOL_NOT_REGISTERED', message: 'The selected tool is not registered for this Artifact and reviewer kind.' });
69
60
  continue;
70
61
  }
71
62
  report.tools.push(...definitions.map(tool => ({ ...tool, audience: targetAudience })));
@@ -73,21 +64,31 @@ export async function diagnoseArtifactTools({ repoPath, mode = 'copy', stateDir,
73
64
  if (definitions.some(tool => tool.artifactId === artifact.id))
74
65
  continue;
75
66
  const required = audience !== undefined || config.critics.some(critic => critic.profile.kind === targetAudience && resolveArtifactScope(config.artifacts, [critic.target, ...critic.deps]).artifacts.some(leaf => leaf.id === artifact.id));
76
- report.checks.push({ artifactId: artifact.id, audience: targetAudience, ok: !required, message: `No ${targetAudience} tools are available for this Artifact. It cannot be used by a ${targetAudience} Critic.` });
67
+ report.checks.push({ artifactId: artifact.id, audience: targetAudience, stage, ok: !required, ...(required ? { code: 'ARTIFACT_TOOLS_UNAVAILABLE' } : {}), message: `No ${targetAudience} tools are available for this Artifact. It cannot be used by a ${targetAudience} Critic.` });
77
68
  }
78
- report.checks.push(...(await registry.preflight({ toolName: resolvedToolName })).map(check => ({ ...check, audience: targetAudience })));
69
+ report.checks.push(...(await registry.preflight({ toolName: resolvedToolName })).map(check => ({ ...check, ...(!check.ok ? safeToolFailure({ code: check.code ?? 'ARTIFACT_TOOL_PREFLIGHT_FAILED' }) : {}), stage: 'preflight', audience: targetAudience })));
79
70
  if (execute && targetAudience === audience && definitions.length === 1 && report.checks.every(check => check.ok)) {
71
+ registry.validateArguments(definitions[0].name, args ?? {});
72
+ stage = 'input-integrity';
80
73
  await workspace.assertUnchanged();
74
+ stage = 'execute';
81
75
  const result = await registry.call(definitions[0].name, args ?? {});
76
+ stage = 'input-integrity';
82
77
  await workspace.assertUnchanged();
83
78
  report.result = result;
84
- report.checks.push({ artifactId, audience, toolName: definitions[0].name, ok: true, message: 'The selected registered tool completed successfully. No review result was created.' });
79
+ report.checks.push({ artifactId, audience, toolName: definitions[0].name, stage: 'execute', ok: true, message: 'The selected registered tool completed successfully. No review result was created.' });
85
80
  }
86
81
  }
87
82
  finally {
88
- await registry.close();
83
+ try {
84
+ await registry.close();
85
+ }
86
+ catch (error) {
87
+ report.checks.push({ artifactId, audience: targetAudience, toolName, stage, ok: false, ...safeToolFailure(error) });
88
+ }
89
89
  }
90
90
  }
91
+ stage = 'input-integrity';
91
92
  await workspace.assertUnchanged();
92
93
  }
93
94
  catch (error) {
@@ -95,16 +96,18 @@ export async function diagnoseArtifactTools({ repoPath, mode = 'copy', stateDir,
95
96
  // A mutated workspace can abort a running program before its boundary check resumes.
96
97
  // Preserve that integrity failure instead of relabeling it as an ordinary cancellation.
97
98
  const reason = workspace?.signal.aborted && !signal?.aborted ? workspace.signal.reason : error;
98
- report.checks.push({ artifactId, audience, toolName, ok: false, ...safeFailure(reason, signal?.aborted ?? false) });
99
+ report.checks.push({ artifactId, audience, toolName, stage: toolFailureStage(reason, stage), ok: false, ...safeToolFailure(reason, signal?.aborted ?? false) });
99
100
  }
100
101
  finally {
101
102
  try {
102
103
  await workspace?.close();
103
104
  }
104
105
  catch {
105
- report.checks.push({ ok: false, code: 'WORKSPACE_CLEANUP_FAILED', message: 'Could not finish workspace observation cleanup.' });
106
+ report.checks.push({ stage: 'input-integrity', ok: false, code: 'WORKSPACE_CLEANUP_FAILED', message: 'Could not finish workspace observation cleanup.' });
106
107
  }
107
108
  report.ok = report.checks.length > 0 && report.checks.every(check => check.ok);
109
+ if (!report.ok)
110
+ delete report.result;
108
111
  report.status = report.ok ? 'READY' : 'NOT_READY';
109
112
  report.checkedAt = new Date().toISOString();
110
113
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool-check.js","sourceRoot":"","sources":["../../../src/artifacts/tool-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-check.js","sourceRoot":"","sources":["../../../src/artifacts/tool-check.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { ReviewRequest } from '../contracts.js';
2
- import type { HumanPreparation } from '../executors/human-preparation.js';
2
+ import type { HumanPreparation, HumanPreparationPhase, HumanPreparationProgress } from '../executors/human-preparation.js';
3
+ import type { WorkspaceScanProgress } from '../workspaces/index.js';
3
4
  export declare const HUMAN_PREPARATION_LEASE_MS = 120000;
4
5
  export interface HumanTryClaim {
5
6
  id: string;
@@ -7,6 +8,22 @@ export interface HumanTryClaim {
7
8
  startedAt: string;
8
9
  expiresAt: string;
9
10
  }
11
+ export interface HumanPreparationAttempt extends HumanTryClaim {
12
+ status: 'preparing' | 'released' | 'expired' | 'claimed';
13
+ heartbeatAt: string;
14
+ phase: HumanPreparationPhase;
15
+ phaseStartedAt: string;
16
+ completedAt?: string;
17
+ previousAttemptId?: string;
18
+ timings: {
19
+ phase: HumanPreparationPhase;
20
+ startedAt: string;
21
+ completedAt: string;
22
+ durationMs: number;
23
+ }[];
24
+ progress?: WorkspaceScanProgress;
25
+ failureCode?: 'cancelled' | 'checks-failed' | 'input-invalid' | 'preparation-failed';
26
+ }
10
27
  export declare function activeTryClaim(request: Pick<ReviewRequest, 'tryClaim'>, at?: number): HumanTryClaim | undefined;
11
28
  interface ClaimStore {
12
29
  transaction<T>(action: () => T): T;
@@ -20,7 +37,8 @@ interface ClaimStore {
20
37
  export declare function createHumanClaims(store: ClaimStore): {
21
38
  begin(id: string, reviewerId: string, leaseMs?: number): HumanTryClaim;
22
39
  renew(id: string, reviewerId: string, attemptId: string, leaseMs?: number): HumanTryClaim;
23
- release(id: string, reviewerId: string, attemptId: string): boolean;
40
+ progress(id: string, reviewerId: string, attemptId: string, update: HumanPreparationProgress): void;
41
+ release(id: string, reviewerId: string, attemptId: string, failureCode?: HumanPreparationAttempt['failureCode']): boolean;
24
42
  confirm(id: string, reviewerId: string, attemptId: string, preparation: HumanPreparation): ReviewRequest;
25
43
  };
26
44
  export {};
@@ -6,6 +6,10 @@ export function activeTryClaim(request, at = Date.now()) {
6
6
  }
7
7
  /** All assignment transitions compare a persisted attempt inside one transaction. */
8
8
  export function createHumanClaims(store) {
9
+ const finishPhase = (preparation, at) => {
10
+ preparation.timings.push({ phase: preparation.phase, startedAt: preparation.phaseStartedAt, completedAt: at, durationMs: Math.max(0, Date.parse(at) - Date.parse(preparation.phaseStartedAt)) });
11
+ preparation.timings = preparation.timings.slice(-12);
12
+ };
9
13
  const waiting = (id, reviewerId) => {
10
14
  if (typeof reviewerId !== 'string' || !reviewerId.trim() || reviewerId.length > 200)
11
15
  throw new Error('A reviewerId is required.');
@@ -36,11 +40,14 @@ export function createHumanClaims(store) {
36
40
  throw new Error('This review is already claimed by a reviewer.');
37
41
  if (activeTryClaim(request))
38
42
  throw new Error('This review is being prepared by another claim attempt.');
43
+ const previousAttemptId = request.tryClaim?.id ?? request.preparationAttempt?.id;
39
44
  if (request.tryClaim)
40
- store.event(request, 'human.claim.expired', 'The previous preparation reservation expired.');
41
- request.tryClaim = { id: randomUUID(), reviewerId, startedAt: new Date().toISOString(), expiresAt: new Date(Date.now() + duration).toISOString() };
45
+ store.event(request, 'human.claim.expired', `Preparation attempt ${request.tryClaim.id} expired.`);
46
+ const startedAt = new Date().toISOString();
47
+ request.tryClaim = { id: randomUUID(), reviewerId, startedAt, expiresAt: new Date(Date.now() + duration).toISOString() };
48
+ request.preparationAttempt = { ...request.tryClaim, status: 'preparing', heartbeatAt: startedAt, phase: 'validating-input', phaseStartedAt: startedAt, timings: [], ...(previousAttemptId ? { previousAttemptId } : {}) };
42
49
  store.save(request);
43
- store.event(request, 'human.claim.preparing', 'Human claim preparation started.');
50
+ store.event(request, 'human.claim.preparing', `Human preparation attempt ${request.tryClaim.id} started${previousAttemptId ? ` after ${previousAttemptId}` : ''}.`);
44
51
  return structuredClone(request.tryClaim);
45
52
  });
46
53
  store.changed();
@@ -51,20 +58,53 @@ export function createHumanClaims(store) {
51
58
  const result = store.transaction(() => {
52
59
  const request = attempt(id, reviewerId, attemptId);
53
60
  request.tryClaim.expiresAt = new Date(Date.now() + duration).toISOString();
61
+ if (request.preparationAttempt?.id === attemptId) {
62
+ request.preparationAttempt.expiresAt = request.tryClaim.expiresAt;
63
+ request.preparationAttempt.heartbeatAt = new Date().toISOString();
64
+ }
54
65
  store.save(request);
55
66
  return structuredClone(request.tryClaim);
56
67
  });
57
68
  store.changed();
58
69
  return result;
59
70
  },
60
- release(id, reviewerId, attemptId) {
71
+ progress(id, reviewerId, attemptId, update) {
72
+ store.transaction(() => {
73
+ const request = attempt(id, reviewerId, attemptId), preparation = request.preparationAttempt;
74
+ if (!preparation || preparation.id !== attemptId)
75
+ return;
76
+ const at = new Date().toISOString();
77
+ if (preparation.phase !== update.phase) {
78
+ finishPhase(preparation, at);
79
+ preparation.phase = update.phase;
80
+ preparation.phaseStartedAt = at;
81
+ if (update.phase !== 'confirming-assignment')
82
+ delete preparation.progress;
83
+ }
84
+ preparation.heartbeatAt = at;
85
+ if (update.progress)
86
+ preparation.progress = { ...update.progress };
87
+ store.save(request);
88
+ });
89
+ store.changed();
90
+ },
91
+ release(id, reviewerId, attemptId, failureCode) {
61
92
  const released = store.transaction(() => {
62
93
  const request = store.read(id);
63
94
  if (!request || request.status !== 'WAITING_HUMAN' || request.claimedBy || request.tryClaim?.id !== attemptId || request.tryClaim.reviewerId !== reviewerId)
64
95
  return false;
96
+ const expired = !activeTryClaim(request);
97
+ if (request.preparationAttempt?.id === attemptId) {
98
+ const preparation = request.preparationAttempt;
99
+ preparation.status = expired ? 'expired' : 'released';
100
+ preparation.completedAt = expired ? preparation.expiresAt : new Date().toISOString();
101
+ if (failureCode)
102
+ preparation.failureCode = failureCode;
103
+ finishPhase(preparation, preparation.completedAt);
104
+ }
65
105
  delete request.tryClaim;
66
106
  store.save(request);
67
- store.event(request, 'human.claim.released', 'Human preparation did not complete; the request is available again.');
107
+ store.event(request, expired ? 'human.claim.expired' : 'human.claim.released', `Human preparation attempt ${attemptId} ${expired ? 'expired' : 'was released'}; retry Claim when ready.`);
68
108
  return true;
69
109
  });
70
110
  if (released)
@@ -91,6 +131,11 @@ export function createHumanClaims(store) {
91
131
  request.claimedBy = reviewerId;
92
132
  request.claimedAt = new Date().toISOString();
93
133
  request.claimAttemptId = attemptId;
134
+ if (request.preparationAttempt?.id === attemptId) {
135
+ request.preparationAttempt.status = 'claimed';
136
+ request.preparationAttempt.completedAt = request.claimedAt;
137
+ finishPhase(request.preparationAttempt, request.claimedAt);
138
+ }
94
139
  delete request.tryClaim;
95
140
  store.save(request);
96
141
  store.event(request, 'human.claimed', `Review claimed by ${reviewerId}.`);
@@ -1 +1 @@
1
- {"version":3,"file":"human-claims.js","sourceRoot":"","sources":["../../../src/broker/human-claims.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"human-claims.js","sourceRoot":"","sources":["../../../src/broker/human-claims.ts"],"names":[],"mappings":"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"}
@@ -140,6 +140,7 @@ export declare function createBroker({ repoPath, stateDir, repoId, executors, wo
140
140
  claimedBy?: string | null;
141
141
  claimedAt?: string | null;
142
142
  tryClaim?: import("./human-claims.js").HumanTryClaim;
143
+ preparationAttempt?: import("./human-claims.js").HumanPreparationAttempt;
143
144
  claimAttemptId?: string;
144
145
  notifiedAt?: string | null;
145
146
  errorCode?: string | null;
@@ -157,7 +158,7 @@ export declare function createBroker({ repoPath, stateDir, repoId, executors, wo
157
158
  leaseMs?: number;
158
159
  }): import("./human-claims.js").HumanTryClaim;
159
160
  renewHumanTryClaim: (id: string, reviewerId: string, attemptId: string, leaseMs?: number) => import("./human-claims.js").HumanTryClaim;
160
- releaseHumanTryClaim: (id: string, reviewerId: string, attemptId: string) => boolean;
161
+ releaseHumanTryClaim: (id: string, reviewerId: string, attemptId: string, failureCode?: import("./human-claims.js").HumanPreparationAttempt['failureCode']) => boolean;
161
162
  confirmHumanClaim: (id: string, reviewerId: string, attemptId: string, preparation: import("../executors/human-preparation.js").HumanPreparation) => ReviewRequest;
162
163
  claimHuman(requestId: string, reviewerId: unknown, { signal }?: {
163
164
  signal?: AbortSignal;
@@ -795,14 +795,16 @@ export function createBroker({ repoPath, stateDir, repoId = 'demo', executors, w
795
795
  catch (error) {
796
796
  controller.abort(error);
797
797
  }
798
- }, HUMAN_PREPARATION_LEASE_MS / 3);
798
+ }, Math.min(5_000, HUMAN_PREPARATION_LEASE_MS / 3));
799
799
  try {
800
- const prepared = await prepareHumanReview(request, request.workspace, path.join(stateDir, 'runs', request.runId, request.id, 'preparation', attempt.id), executionSignal);
800
+ const prepared = await prepareHumanReview(request, request.workspace, path.join(stateDir, 'runs', request.runId, request.id, 'preparation', attempt.id), executionSignal, progress => humanClaims.progress(requestId, reviewerId, attempt.id, progress));
801
801
  executionSignal.throwIfAborted();
802
+ humanClaims.progress(requestId, reviewerId, attempt.id, { phase: 'confirming-assignment' });
802
803
  return humanClaims.confirm(requestId, reviewerId, attempt.id, prepared);
803
804
  }
804
805
  catch (error) {
805
- humanClaims.release(requestId, reviewerId, attempt.id);
806
+ const code = errorCode(error);
807
+ humanClaims.release(requestId, reviewerId, attempt.id, signal?.aborted ? 'cancelled' : code === 'HUMAN_PREPARATION_FAILED' ? 'checks-failed' : typeof code === 'string' && code.startsWith('WORKSPACE_') ? 'input-invalid' : 'preparation-failed');
806
808
  throw error;
807
809
  }
808
810
  finally {