@cleocode/contracts 2026.9.8 → 2026.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/acceptance-gate.test.js +242 -1
- package/dist/__tests__/acceptance-gate.test.js.map +1 -1
- package/dist/__tests__/evidence-atom-schema.test.js +17 -14
- package/dist/__tests__/evidence-atom-schema.test.js.map +1 -1
- package/dist/__tests__/memory-wire-shapes.test.js.map +1 -1
- package/dist/__tests__/operations-registry.test.js +18 -0
- package/dist/__tests__/operations-registry.test.js.map +1 -1
- package/dist/acceptance-gate-schema.d.ts +60 -2
- package/dist/acceptance-gate-schema.d.ts.map +1 -1
- package/dist/acceptance-gate-schema.js +273 -1
- package/dist/acceptance-gate-schema.js.map +1 -1
- package/dist/acceptance-gate.d.ts +133 -11
- package/dist/acceptance-gate.d.ts.map +1 -1
- package/dist/acceptance-gate.js +3 -3
- package/dist/audit.d.ts +71 -2
- package/dist/audit.d.ts.map +1 -1
- package/dist/backup-manifest.d.ts +80 -0
- package/dist/backup-manifest.d.ts.map +1 -1
- package/dist/caamp-markers.d.ts +20 -0
- package/dist/caamp-markers.d.ts.map +1 -1
- package/dist/capabilities.d.ts +282 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/changesets.d.ts +4 -4
- package/dist/code-symbol.d.ts +33 -0
- package/dist/code-symbol.d.ts.map +1 -1
- package/dist/daemon/health.d.ts +3 -3
- package/dist/data-accessor.d.ts +15 -0
- package/dist/data-accessor.d.ts.map +1 -1
- package/dist/data-accessor.js.map +1 -1
- package/dist/dispatch/__tests__/tasks-gateway-crud-ops.test.js +19 -1
- package/dist/dispatch/__tests__/tasks-gateway-crud-ops.test.js.map +1 -1
- package/dist/dispatch/operations-registry.d.ts.map +1 -1
- package/dist/dispatch/operations-registry.js +713 -3
- package/dist/dispatch/operations-registry.js.map +1 -1
- package/dist/docs-taxonomy.d.ts +25 -0
- package/dist/docs-taxonomy.d.ts.map +1 -1
- package/dist/docs-taxonomy.js.map +1 -1
- package/dist/evidence-atom-schema.d.ts +7 -6
- package/dist/evidence-atom-schema.d.ts.map +1 -1
- package/dist/evidence-atom-schema.js +10 -9
- package/dist/evidence-atom-schema.js.map +1 -1
- package/dist/graph.d.ts +283 -2
- package/dist/graph.d.ts.map +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/invariants/adr-070-orchestration.d.ts.map +1 -1
- package/dist/invariants/adr-070-orchestration.js +1 -1
- package/dist/invariants/adr-070-orchestration.js.map +1 -1
- package/dist/invariants/adr-073-saga.js +2 -2
- package/dist/invariants/adr-073-saga.js.map +1 -1
- package/dist/jobs.d.ts +329 -3
- package/dist/jobs.d.ts.map +1 -1
- package/dist/knowledge-health.d.ts +695 -0
- package/dist/knowledge-health.d.ts.map +1 -0
- package/dist/knowledge-health.js +8 -0
- package/dist/knowledge-health.js.map +1 -0
- package/dist/llm/catalog-schema.d.ts +4 -4
- package/dist/memory/observe.d.ts +4 -2
- package/dist/memory/observe.d.ts.map +1 -1
- package/dist/memory/search.d.ts +4 -0
- package/dist/memory/search.d.ts.map +1 -1
- package/dist/nexus-living-brain-ops.d.ts +28 -3
- package/dist/nexus-living-brain-ops.d.ts.map +1 -1
- package/dist/nexus-tasks-bridge-ops.d.ts +11 -0
- package/dist/nexus-tasks-bridge-ops.d.ts.map +1 -1
- package/dist/operations/admin.d.ts +10 -4
- package/dist/operations/admin.d.ts.map +1 -1
- package/dist/operations/docs.d.ts +138 -0
- package/dist/operations/docs.d.ts.map +1 -1
- package/dist/operations/docs.js +47 -0
- package/dist/operations/docs.js.map +1 -1
- package/dist/operations/focus.d.ts +7 -0
- package/dist/operations/focus.d.ts.map +1 -1
- package/dist/operations/nexus.d.ts +7 -2
- package/dist/operations/nexus.d.ts.map +1 -1
- package/dist/operations/output-contracts-data.d.ts.map +1 -1
- package/dist/operations/output-contracts-data.js +31 -3
- package/dist/operations/output-contracts-data.js.map +1 -1
- package/dist/operations/research.d.ts +33 -0
- package/dist/operations/research.d.ts.map +1 -1
- package/dist/operations/tasks.d.ts +107 -4
- package/dist/operations/tasks.d.ts.map +1 -1
- package/dist/operations/tasks.js +5 -0
- package/dist/operations/tasks.js.map +1 -1
- package/dist/operations/validate.d.ts +23 -0
- package/dist/operations/validate.d.ts.map +1 -1
- package/dist/package-artifact.d.ts +112 -0
- package/dist/package-artifact.d.ts.map +1 -0
- package/dist/package-artifact.js +8 -0
- package/dist/package-artifact.js.map +1 -0
- package/dist/project-context.d.ts +18 -0
- package/dist/project-context.d.ts.map +1 -1
- package/dist/release/evidence-atoms.d.ts +10 -0
- package/dist/release/evidence-atoms.d.ts.map +1 -1
- package/dist/release/evidence-atoms.js +6 -0
- package/dist/release/evidence-atoms.js.map +1 -1
- package/dist/release/plan.d.ts +6 -6
- package/dist/resource-governor.d.ts +114 -0
- package/dist/resource-governor.d.ts.map +1 -1
- package/dist/resource-governor.js.map +1 -1
- package/dist/supervisor-ipc/messages.d.ts +6 -6
- package/dist/task-record.d.ts +25 -4
- package/dist/task-record.d.ts.map +1 -1
- package/dist/task.d.ts +55 -36
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js.map +1 -1
- package/dist/tasks/archive.d.ts +3 -3
- package/dist/templates/manifest.d.ts +1 -1
- package/dist/workgraph.d.ts +5 -3
- package/dist/workgraph.d.ts.map +1 -1
- package/dist/workgraph.js +19 -0
- package/dist/workgraph.js.map +1 -1
- package/package.json +2 -2
- package/schemas/gate-result.schema.json +350 -1
- package/src/__tests__/__snapshots__/operations-registry.test.ts.snap +1 -1
- package/src/__tests__/acceptance-gate.test.ts +282 -1
- package/src/__tests__/evidence-atom-schema.test.ts +17 -14
- package/src/__tests__/memory-wire-shapes.test.ts +2 -0
- package/src/__tests__/operations-registry.test.ts +26 -0
- package/src/acceptance-gate-schema.ts +320 -14
- package/src/acceptance-gate.ts +144 -11
- package/src/audit.ts +72 -2
- package/src/backup-manifest.ts +88 -0
- package/src/caamp-markers.ts +22 -0
- package/src/capabilities.ts +311 -0
- package/src/code-symbol.ts +37 -0
- package/src/data-accessor.ts +16 -0
- package/src/dispatch/__tests__/tasks-gateway-crud-ops.test.ts +31 -1
- package/src/dispatch/operations-registry.ts +719 -3
- package/src/docs-taxonomy.ts +26 -0
- package/src/evidence-atom-schema.ts +10 -9
- package/src/graph.ts +326 -2
- package/src/index.ts +45 -1
- package/src/invariants/adr-070-orchestration.ts +2 -1
- package/src/invariants/adr-073-saga.ts +2 -2
- package/src/jobs.ts +382 -3
- package/src/knowledge-health.ts +748 -0
- package/src/memory/observe.ts +4 -2
- package/src/memory/search.ts +4 -0
- package/src/nexus-living-brain-ops.ts +34 -3
- package/src/nexus-tasks-bridge-ops.ts +12 -0
- package/src/operations/admin.ts +11 -4
- package/src/operations/docs.ts +153 -0
- package/src/operations/focus.ts +11 -0
- package/src/operations/nexus.ts +7 -1
- package/src/operations/output-contracts-data.ts +33 -3
- package/src/operations/research.ts +36 -0
- package/src/operations/tasks.ts +116 -4
- package/src/operations/validate.ts +24 -0
- package/src/package-artifact.ts +127 -0
- package/src/project-context.ts +19 -0
- package/src/release/evidence-atoms.ts +6 -0
- package/src/resource-governor.ts +132 -0
- package/src/task-record.ts +27 -4
- package/src/task.ts +58 -36
- package/src/workgraph.ts +19 -0
package/dist/jobs.d.ts
CHANGED
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
* - `pending` — created but not yet picked up by a worker
|
|
22
22
|
* - `running` — actively executing; emits heartbeats
|
|
23
23
|
* - `complete` — finished successfully (`result` populated, `error` NULL)
|
|
24
|
-
* - `failed` — finished with an error (`
|
|
24
|
+
* - `failed` — finished with an error (`result` may retain authenticated outcome metadata)
|
|
25
25
|
* - `cancelled` — explicitly cancelled by a caller
|
|
26
26
|
* - `orphaned` — was `running` when the process exited; requires human/agent review
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
28
|
+
* Opening a client preserves running work. Ownership expires only by its
|
|
29
|
+
* persisted lease; legacy rows without ownership require explicit recovery.
|
|
30
30
|
*
|
|
31
31
|
* @task T641
|
|
32
32
|
* @remarks
|
|
@@ -36,4 +36,330 @@
|
|
|
36
36
|
* `packages/contracts/src/__tests__/jobs.test.ts` pins both sides.
|
|
37
37
|
*/
|
|
38
38
|
export type BackgroundJobStatus = 'pending' | 'running' | 'complete' | 'failed' | 'cancelled' | 'orphaned';
|
|
39
|
+
/** Caller and query binding for one bounded durable candidate scan. */
|
|
40
|
+
export interface BackgroundJobPageScope {
|
|
41
|
+
/** Cursor/query representation version. */
|
|
42
|
+
version: 1;
|
|
43
|
+
/** Exact persisted project identity. */
|
|
44
|
+
projectId: string;
|
|
45
|
+
/** Captured project root; a cursor cannot cross project copies. */
|
|
46
|
+
projectRoot: string;
|
|
47
|
+
/** Requesting principal, not the mutable claimedBy owner label. */
|
|
48
|
+
actor: string;
|
|
49
|
+
/** Exact operation being enumerated. */
|
|
50
|
+
operation: string;
|
|
51
|
+
/** Optional lifecycle filter, null for every retained status. */
|
|
52
|
+
status: BackgroundJobStatus | null;
|
|
53
|
+
/** Maximum candidate rows inspected, between one and 100. */
|
|
54
|
+
limit: number;
|
|
55
|
+
/** Maximum combined UTF-8 text payload bytes in each candidate. */
|
|
56
|
+
maxPayloadBytes: number;
|
|
57
|
+
}
|
|
58
|
+
/** Stable position after an immutable submission timestamp and unique ID. */
|
|
59
|
+
export interface BackgroundJobPageCursor extends BackgroundJobPageScope {
|
|
60
|
+
/** Original submission time; claiming or retrying never changes it. */
|
|
61
|
+
startedAt: number;
|
|
62
|
+
/** Unique tie-breaker at the last scanned candidate, not the last actor match. */
|
|
63
|
+
id: string;
|
|
64
|
+
}
|
|
65
|
+
/** Bounded candidate query; the domain validates immutable proposal principals. */
|
|
66
|
+
export interface BackgroundJobPageQuery {
|
|
67
|
+
/** Exact persisted operation to inspect. */
|
|
68
|
+
operation: string;
|
|
69
|
+
/** Optional stored status; omission includes every status and prior job. */
|
|
70
|
+
status?: BackgroundJobStatus;
|
|
71
|
+
/** Maximum scanned candidates, default 25 and capped at 100. */
|
|
72
|
+
limit?: number;
|
|
73
|
+
/** Per-candidate text-byte cap, default 256 KiB and capped at one MiB. */
|
|
74
|
+
maxPayloadBytes?: number;
|
|
75
|
+
/** Cursor bound to this exact caller, project and query. */
|
|
76
|
+
after?: BackgroundJobPageCursor;
|
|
77
|
+
}
|
|
78
|
+
/** One bounded storage observation, not an actor-filtered or multi-page snapshot. */
|
|
79
|
+
export interface BackgroundJobCandidatePage<TJob> {
|
|
80
|
+
/** Fully bounded candidate values; the domain must validate actor and source hashes. */
|
|
81
|
+
candidates: TJob[];
|
|
82
|
+
/** Exact query/caller binding. */
|
|
83
|
+
scope: BackgroundJobPageScope;
|
|
84
|
+
/** Number of candidates scanned in this page. */
|
|
85
|
+
scannedCount: number;
|
|
86
|
+
/** Additional storage candidates were observed beyond the page. */
|
|
87
|
+
hasMoreCandidates: boolean;
|
|
88
|
+
/** Continue after the last scanned row, including pages with no actor matches. */
|
|
89
|
+
nextCursor: BackgroundJobPageCursor | null;
|
|
90
|
+
/** Matching principal population is deliberately not counted by this generic store. */
|
|
91
|
+
matchingTotal: null;
|
|
92
|
+
/** Each page has its own SQLite read snapshot; concurrent changes may affect later pages. */
|
|
93
|
+
observation: 'per-page-snapshot';
|
|
94
|
+
/** Actor authorization is deferred to the domain's immutable proposal schema. */
|
|
95
|
+
principalValidation: 'domain-required';
|
|
96
|
+
}
|
|
97
|
+
/** Immutable request used to coalesce a job within one project and operation. */
|
|
98
|
+
export interface BackgroundJobSubmission {
|
|
99
|
+
/** Stable identity of the project owning the operation. */
|
|
100
|
+
projectId: string;
|
|
101
|
+
/** Caller-selected retry key, scoped to project and operation. */
|
|
102
|
+
idempotencyKey: string;
|
|
103
|
+
/** Exact serialized proposal bytes; changing them rejects retry-key reuse. */
|
|
104
|
+
proposalJson: string;
|
|
105
|
+
}
|
|
106
|
+
/** Persisted execution ownership; the epoch fences earlier attempts. */
|
|
107
|
+
export interface BackgroundJobLease {
|
|
108
|
+
/** Job to which this grant belongs. */
|
|
109
|
+
readonly jobId: string;
|
|
110
|
+
/** Unique store-client identity, independent of actor display labels. */
|
|
111
|
+
readonly ownerId: string;
|
|
112
|
+
/** Monotonically increasing claim epoch. */
|
|
113
|
+
readonly epoch: number;
|
|
114
|
+
/** Expiration observed when this grant was issued, in epoch milliseconds. */
|
|
115
|
+
readonly expiresAt: number;
|
|
116
|
+
}
|
|
117
|
+
/** Immutable authority reference, revalidated against the job row inside each domain write transaction. */
|
|
118
|
+
export interface BackgroundJobWriteFence {
|
|
119
|
+
/** Actual database file containing both the job row and guarded domain resources. */
|
|
120
|
+
readonly dbPath: string;
|
|
121
|
+
/** Authentic proposal digest; the executor must separately verify domain preconditions. */
|
|
122
|
+
readonly proposalHash: string;
|
|
123
|
+
/** Attempt ownership; copying this grant never substitutes for checking persisted state. */
|
|
124
|
+
readonly lease: BackgroundJobLease;
|
|
125
|
+
}
|
|
126
|
+
/** Configuration for a client of the existing durable job store. */
|
|
127
|
+
export interface BackgroundJobStoreOptions {
|
|
128
|
+
/** Explicit project scope; absent on legacy unscoped clients. */
|
|
129
|
+
projectId?: string;
|
|
130
|
+
/** Human/agent identity recorded separately from the unique owner token. */
|
|
131
|
+
actor?: string;
|
|
132
|
+
/** Positive lease duration in milliseconds; defaults to 30 seconds. */
|
|
133
|
+
leaseMs?: number;
|
|
134
|
+
}
|
|
135
|
+
/** Capabilities delivered to the existing executor, not a new execution engine. */
|
|
136
|
+
export interface BackgroundJobExecutionContext {
|
|
137
|
+
/** Optional shared foreground scope; persisted lease remains independently required. */
|
|
138
|
+
readonly execution?: OperationExecutionContext;
|
|
139
|
+
/** Cooperative cancellation signal, including remote persisted requests. */
|
|
140
|
+
signal: AbortSignal;
|
|
141
|
+
/** Current attempt fence; does not authorize arbitrary domain mutations. */
|
|
142
|
+
lease: BackgroundJobLease;
|
|
143
|
+
/** Persist JSON checkpoint bytes only while this attempt still owns the lease. */
|
|
144
|
+
checkpoint: (valueJson: string) => void;
|
|
145
|
+
}
|
|
146
|
+
/** Stable failures for scoped retry, lease ownership, and malformed job inputs. */
|
|
147
|
+
export type BackgroundJobFailureCode = 'E_JOB_INPUT_INVALID' | 'E_JOB_SCOPE_MISMATCH' | 'E_JOB_IDEMPOTENCY_CONFLICT' | 'E_JOB_LEASE_LOST' | 'E_JOB_NOT_RECLAIMABLE' | 'E_JOB_TRANSACTION_OWNED' | 'E_JOB_DEADLINE_EXCEEDED' | 'E_JOB_LOCK_POLICY_CONFLICT';
|
|
148
|
+
/** Immutable routing and provenance captured before asynchronous operation work. */
|
|
149
|
+
export interface OperationExecutionIdentity {
|
|
150
|
+
/** Stable project identifier; never inferred again during execution. */
|
|
151
|
+
readonly projectId: string;
|
|
152
|
+
/** Absolute repository/project root associated with this accepted operation. */
|
|
153
|
+
readonly projectRoot: string;
|
|
154
|
+
/** Foreground caller responsible for the operation. */
|
|
155
|
+
readonly actor: string;
|
|
156
|
+
/** Exact supported operation name. */
|
|
157
|
+
readonly operation: string;
|
|
158
|
+
/** Retry identity scoped to this project and operation. */
|
|
159
|
+
readonly idempotencyKey: string;
|
|
160
|
+
}
|
|
161
|
+
/** Cooperative accounting limits; these are not process memory or CPU isolation. */
|
|
162
|
+
export interface OperationResourceLimits {
|
|
163
|
+
/** Maximum aggregate bytes admitted through guarded stages. */
|
|
164
|
+
readonly maxBytes?: number;
|
|
165
|
+
/** Maximum aggregate items admitted through guarded stages. */
|
|
166
|
+
readonly maxItems?: number;
|
|
167
|
+
}
|
|
168
|
+
/** Increment charged before a guarded stage starts work. */
|
|
169
|
+
export interface OperationResourceUsage {
|
|
170
|
+
/** Bytes the stage intends to process. */
|
|
171
|
+
readonly bytes?: number;
|
|
172
|
+
/** Items the stage intends to process. */
|
|
173
|
+
readonly items?: number;
|
|
174
|
+
}
|
|
175
|
+
/** Inputs for one operation lifetime; nested stages receive the same context. */
|
|
176
|
+
export interface OperationExecutionOptions {
|
|
177
|
+
/** Optional immutable job authority to revalidate at domain transaction boundaries. */
|
|
178
|
+
readonly writeFence?: BackgroundJobWriteFence;
|
|
179
|
+
/** Shared foreground budget; defaults to two seconds and may be zero. */
|
|
180
|
+
readonly budgetMs?: number;
|
|
181
|
+
/** Earlier absolute deadline inherited from an enclosing invocation. */
|
|
182
|
+
readonly deadlineAt?: number;
|
|
183
|
+
/** Optional caller cancellation, forwarded into the operation signal. */
|
|
184
|
+
readonly signal?: AbortSignal;
|
|
185
|
+
/** Optional admission limits; omitted dimensions are not bounded here. */
|
|
186
|
+
readonly resources?: OperationResourceLimits;
|
|
187
|
+
}
|
|
188
|
+
/** Structured-cloneable execution scope for an already admitted worker stage. */
|
|
189
|
+
export interface OperationExecutionTransfer {
|
|
190
|
+
/** Origin-issued job fence; receivers must validate it against their actual database. */
|
|
191
|
+
readonly writeFence?: BackgroundJobWriteFence;
|
|
192
|
+
/** Captured routing and provenance; receiving realms must not resolve it again. */
|
|
193
|
+
readonly identity: OperationExecutionIdentity;
|
|
194
|
+
/** Original absolute deadline, never a new worker budget. */
|
|
195
|
+
readonly deadlineAt: number;
|
|
196
|
+
/** One Int32 cancellation flag: zero is active; nonzero forbids new guarded work. */
|
|
197
|
+
readonly cancellation: SharedArrayBuffer;
|
|
198
|
+
}
|
|
199
|
+
/** Origin-owned cancellation link for one admitted cross-realm stage. */
|
|
200
|
+
export interface OperationExecutionTransferHandle {
|
|
201
|
+
/** Serializable scope sent through the existing worker protocol. */
|
|
202
|
+
readonly transfer: OperationExecutionTransfer;
|
|
203
|
+
/** Invalidate future receiver writes and detach the originating abort listener. */
|
|
204
|
+
readonly release: () => void;
|
|
205
|
+
}
|
|
206
|
+
/** Reasons why an operation must not admit a new guarded stage. */
|
|
207
|
+
export type OperationExecutionStopCode = 'E_OPERATION_CANCELLED' | 'E_OPERATION_DEADLINE' | 'E_OPERATION_CLOSED' | 'E_OPERATION_RESOURCE_LIMIT';
|
|
208
|
+
/**
|
|
209
|
+
* Capabilities shared by foreground assessment, waiting, mutation and verification.
|
|
210
|
+
* @remarks This context fences cooperating boundaries only. It does not authorize a
|
|
211
|
+
* repair or preempt arbitrary callbacks, synchronous SQLite, CPU work or processes.
|
|
212
|
+
*/
|
|
213
|
+
export interface OperationExecutionContext {
|
|
214
|
+
/** Optional job fence for domain writes; this value alone does not confer authority. */
|
|
215
|
+
readonly writeFence?: BackgroundJobWriteFence;
|
|
216
|
+
/** Frozen routing/provenance captured at operation acceptance. */
|
|
217
|
+
readonly identity: OperationExecutionIdentity;
|
|
218
|
+
/** One absolute deadline; stages must not create replacement budgets. */
|
|
219
|
+
readonly deadlineAt: number;
|
|
220
|
+
/** Cancellation from the caller, teardown, deadline, resource limit or close. */
|
|
221
|
+
readonly signal: AbortSignal;
|
|
222
|
+
/** Frozen declared admission limits. */
|
|
223
|
+
readonly resources: OperationResourceLimits;
|
|
224
|
+
/** Milliseconds still available; checks wall time even if timers cannot run. */
|
|
225
|
+
readonly remainingMs: () => number;
|
|
226
|
+
/** Reject new handles/writes at a cooperating boundary after cancellation. */
|
|
227
|
+
readonly assertActive: () => void;
|
|
228
|
+
/** Charge a stage's bytes/items atomically before admitting its work. */
|
|
229
|
+
readonly consume: (usage: OperationResourceUsage) => void;
|
|
230
|
+
/** Invalidate future guarded work and release listeners/timers; never undo commits. */
|
|
231
|
+
readonly close: () => void;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Trusted synchronous domain mutation admitted inside the job store's write transaction.
|
|
235
|
+
* @param execution - Captured identity, deadline, cancellation and current ownership fence.
|
|
236
|
+
* @returns JSON receipt bytes to persist as the job outcome in the same transaction.
|
|
237
|
+
* @remarks Implementations must use the already-open database named by the fence,
|
|
238
|
+
* must not control transactions, and must not schedule work or perform external
|
|
239
|
+
* side effects. This contract does not sandbox arbitrary callbacks or preempt
|
|
240
|
+
* synchronous work; domain preconditions and receipt validation remain required.
|
|
241
|
+
*/
|
|
242
|
+
export type AtomicJobMutation = (execution: OperationExecutionContext) => string;
|
|
243
|
+
/** Declared terminal outcome of an observed attempt; never inferred from lease expiry. */
|
|
244
|
+
export interface JobAttemptOutcome {
|
|
245
|
+
/** Actual observed failure or acknowledged cancellation. */
|
|
246
|
+
readonly status: 'failed' | 'cancelled';
|
|
247
|
+
/** Sourced failure/cancellation explanation retained with the attempt. */
|
|
248
|
+
readonly message: string;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Trusted synchronous attempt receipt/event bookkeeping, without domain repair authority.
|
|
252
|
+
* @returns Serialized JSON receipt bytes retained with the terminal job row.
|
|
253
|
+
* @remarks Only existing services may supply this callback. It must append metadata
|
|
254
|
+
* in the already-open database, never mutate repaired resources, schedule work,
|
|
255
|
+
* control transactions or change connection pragmas. This is not an arbitrary-code sandbox.
|
|
256
|
+
*/
|
|
257
|
+
export type AtomicJobBookkeeping = () => string;
|
|
258
|
+
/**
|
|
259
|
+
* Trusted synchronous explicit-retry bookkeeping inside the existing job transaction.
|
|
260
|
+
* @param previousAttemptJson - Complete previous stored row image, including original result,
|
|
261
|
+
* error, checkpoint, cancellation, counters and lease fields; retain these exact JSON bytes.
|
|
262
|
+
* @returns JSON receipt bytes verified by the domain after append-only persistence.
|
|
263
|
+
* @remarks Recheck immutable domain preconditions and preserve the previous attempt before
|
|
264
|
+
* returning. Expired running work is retained as uncertain, never relabeled as failed.
|
|
265
|
+
* No asynchronous work, external effects or transaction control is permitted.
|
|
266
|
+
* This trusted composition port does not sandbox arbitrary callbacks.
|
|
267
|
+
*/
|
|
268
|
+
export type AtomicJobRetryBookkeeping = (previousAttemptJson: string) => string;
|
|
269
|
+
/** Truthful terminal bookkeeping result, separate from the attempted domain operation. */
|
|
270
|
+
export type JobFinalizationResult = {
|
|
271
|
+
/** Metadata and terminal row committed together. */
|
|
272
|
+
readonly state: 'finalized';
|
|
273
|
+
/** Exact committed receipt bytes. */
|
|
274
|
+
readonly resultJson: string;
|
|
275
|
+
/** Connection cleanup failure observed after commit; the receipt remains committed. */
|
|
276
|
+
readonly cleanupError?: string;
|
|
277
|
+
/** Actual elapsed synchronous wall time, including cleanup. */
|
|
278
|
+
readonly elapsedMs: number;
|
|
279
|
+
/** Whether synchronous commit/cleanup finished after the original deadline. */
|
|
280
|
+
readonly deadlineExceeded: boolean;
|
|
281
|
+
} | {
|
|
282
|
+
/** No terminal outcome was committed; preserve the existing lease/checkpoint. */
|
|
283
|
+
readonly state: 'pending-finalization';
|
|
284
|
+
/** Actual refusal or bookkeeping failure, not an invented attempt outcome. */
|
|
285
|
+
readonly reason: string;
|
|
286
|
+
/** Actual elapsed synchronous wall time, including cleanup. */
|
|
287
|
+
readonly elapsedMs: number;
|
|
288
|
+
/** Whether the original execution deadline has elapsed. */
|
|
289
|
+
readonly deadlineExceeded: boolean;
|
|
290
|
+
};
|
|
291
|
+
/**
|
|
292
|
+
* Observation of a bounded wait, separate from the underlying operation's receipt.
|
|
293
|
+
* @typeParam T - Value produced if the supplied promise settles during observation.
|
|
294
|
+
*/
|
|
295
|
+
export type OperationWaitResult<T> = {
|
|
296
|
+
/** The supplied promise settled before observation ended. */
|
|
297
|
+
readonly settled: true;
|
|
298
|
+
/** Successful outcome. */
|
|
299
|
+
readonly success: true;
|
|
300
|
+
/** Actual result, retained even when synchronous work exceeded its budget. */
|
|
301
|
+
readonly value: T;
|
|
302
|
+
/** Wall time exceeded the shared deadline; no preemption is claimed. */
|
|
303
|
+
readonly deadlineExceeded: boolean;
|
|
304
|
+
} | {
|
|
305
|
+
/** The supplied promise rejected before observation ended. */
|
|
306
|
+
readonly settled: true;
|
|
307
|
+
/** Failed outcome. */
|
|
308
|
+
readonly success: false;
|
|
309
|
+
/** Actual diagnostic from the supplied work. */
|
|
310
|
+
readonly error: Error;
|
|
311
|
+
/** Wall time exceeded the shared deadline. */
|
|
312
|
+
readonly deadlineExceeded: boolean;
|
|
313
|
+
} | {
|
|
314
|
+
/** Observation ended; this does not mean the supplied work stopped. */
|
|
315
|
+
readonly settled: false;
|
|
316
|
+
/** Reason the observer returned while work remained unresolved. */
|
|
317
|
+
readonly reason: OperationExecutionStopCode;
|
|
318
|
+
/** Wall time reached the shared deadline. */
|
|
319
|
+
readonly deadlineExceeded: boolean;
|
|
320
|
+
};
|
|
321
|
+
/**
|
|
322
|
+
* Observed state of a single shutdown stage, not the outcome of all producer work.
|
|
323
|
+
* @remarks Optional on legacy receipts; missing state must not imply a timeout.
|
|
324
|
+
*/
|
|
325
|
+
export type ShutdownStepStatus = 'completed' | 'failed' | 'cancelled' | 'timed-out' | 'not-started';
|
|
326
|
+
/** Evidence identifying why a shutdown step failed, stopped, or could not start. */
|
|
327
|
+
export type ShutdownStepReason = 'step-rejected' | 'operation-cancelled' | 'operation-closed' | 'execution-deadline' | 'step-deadline' | 'shutdown-deadline' | 'background-pending' | 'prior-step-incomplete' | 'drain-incomplete';
|
|
328
|
+
/**
|
|
329
|
+
* Compatible receipt for one deadline-bounded shutdown step.
|
|
330
|
+
* @remarks The original fields remain required and keep their meanings. New
|
|
331
|
+
* assessments populate status and any observed reason; legacy callers may omit
|
|
332
|
+
* those fields. A completed background barrier establishes settlement only and
|
|
333
|
+
* cannot certify producer results already discarded or swallowed by owners.
|
|
334
|
+
*/
|
|
335
|
+
export interface ShutdownStepOutcome {
|
|
336
|
+
/** Resource or producer-barrier name. */
|
|
337
|
+
readonly label: string;
|
|
338
|
+
/** The step settled within its wait, including an immediate rejection. */
|
|
339
|
+
readonly settled: boolean;
|
|
340
|
+
/** The observed step threw or rejected; false does not certify all producer results. */
|
|
341
|
+
readonly threw: boolean;
|
|
342
|
+
/** Elapsed wall time; zero for a step that was not started. */
|
|
343
|
+
readonly durationMs: number;
|
|
344
|
+
/** Assessed lifecycle state; absent on historical untyped receipts.
|
|
345
|
+
* @defaultValue undefined — legacy receipts do not establish a typed state.
|
|
346
|
+
*/
|
|
347
|
+
readonly status?: ShutdownStepStatus;
|
|
348
|
+
/** Observed stop/refusal cause; never inferred from elapsed time alone.
|
|
349
|
+
* @defaultValue undefined — no structured cause was observed.
|
|
350
|
+
*/
|
|
351
|
+
readonly reason?: ShutdownStepReason;
|
|
352
|
+
/** Original error message when the stage actually rejected.
|
|
353
|
+
* @defaultValue undefined — no rejection message was observed.
|
|
354
|
+
*/
|
|
355
|
+
readonly error?: string;
|
|
356
|
+
/** Registry settlement alone leaves individual producer success unassessed.
|
|
357
|
+
* @defaultValue undefined — this receipt does not assess producer outcomes.
|
|
358
|
+
*/
|
|
359
|
+
readonly producerOutcome?: 'unassessed';
|
|
360
|
+
/** Number of registered unsettled promises observed at this boundary.
|
|
361
|
+
* @defaultValue undefined — the registry was not counted for this receipt.
|
|
362
|
+
*/
|
|
363
|
+
readonly pendingOperations?: number;
|
|
364
|
+
}
|
|
39
365
|
//# sourceMappingURL=jobs.d.ts.map
|
package/dist/jobs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,SAAS,GACT,UAAU,GACV,QAAQ,GACR,WAAW,GACX,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
|