@pegma/support-desk-application 0.1.1 → 0.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 (86) hide show
  1. package/README.md +228 -7
  2. package/dist/assistant-turn-capacity.d.ts +13 -0
  3. package/dist/assistant-turn-capacity.d.ts.map +1 -0
  4. package/dist/assistant-turn-capacity.js +111 -0
  5. package/dist/assistant-turn-capacity.js.map +1 -0
  6. package/dist/assistant-turn-records.d.ts +68 -0
  7. package/dist/assistant-turn-records.d.ts.map +1 -0
  8. package/dist/assistant-turn-records.js +418 -0
  9. package/dist/assistant-turn-records.js.map +1 -0
  10. package/dist/assistant-turn-types.d.ts +133 -0
  11. package/dist/assistant-turn-types.d.ts.map +1 -0
  12. package/dist/assistant-turn-types.js +2 -0
  13. package/dist/assistant-turn-types.js.map +1 -0
  14. package/dist/assistant-turns.d.ts +42 -0
  15. package/dist/assistant-turns.d.ts.map +1 -0
  16. package/dist/assistant-turns.js +640 -0
  17. package/dist/assistant-turns.js.map +1 -0
  18. package/dist/engineering-evidence.d.ts +20 -0
  19. package/dist/engineering-evidence.d.ts.map +1 -0
  20. package/dist/engineering-evidence.js +899 -0
  21. package/dist/engineering-evidence.js.map +1 -0
  22. package/dist/engineering-followup-internal.d.ts +45 -0
  23. package/dist/engineering-followup-internal.d.ts.map +1 -0
  24. package/dist/engineering-followup-internal.js +2 -0
  25. package/dist/engineering-followup-internal.js.map +1 -0
  26. package/dist/engineering-followup-records.d.ts +209 -0
  27. package/dist/engineering-followup-records.d.ts.map +1 -0
  28. package/dist/engineering-followup-records.js +1434 -0
  29. package/dist/engineering-followup-records.js.map +1 -0
  30. package/dist/engineering-followup-source.d.ts +168 -0
  31. package/dist/engineering-followup-source.d.ts.map +1 -0
  32. package/dist/engineering-followup-source.js +1144 -0
  33. package/dist/engineering-followup-source.js.map +1 -0
  34. package/dist/engineering-followup-types.d.ts +364 -0
  35. package/dist/engineering-followup-types.d.ts.map +1 -0
  36. package/dist/engineering-followup-types.js +2 -0
  37. package/dist/engineering-followup-types.js.map +1 -0
  38. package/dist/engineering-followup-work.d.ts +70 -0
  39. package/dist/engineering-followup-work.d.ts.map +1 -0
  40. package/dist/engineering-followup-work.js +1153 -0
  41. package/dist/engineering-followup-work.js.map +1 -0
  42. package/dist/engineering-internal.d.ts +38 -0
  43. package/dist/engineering-internal.d.ts.map +1 -0
  44. package/dist/engineering-internal.js +11 -0
  45. package/dist/engineering-internal.js.map +1 -0
  46. package/dist/engineering-policy.d.ts +47 -0
  47. package/dist/engineering-policy.d.ts.map +1 -0
  48. package/dist/engineering-policy.js +579 -0
  49. package/dist/engineering-policy.js.map +1 -0
  50. package/dist/engineering-reconciliation.d.ts +6 -0
  51. package/dist/engineering-reconciliation.d.ts.map +1 -0
  52. package/dist/engineering-reconciliation.js +464 -0
  53. package/dist/engineering-reconciliation.js.map +1 -0
  54. package/dist/engineering-records.d.ts +227 -0
  55. package/dist/engineering-records.d.ts.map +1 -0
  56. package/dist/engineering-records.js +1272 -0
  57. package/dist/engineering-records.js.map +1 -0
  58. package/dist/engineering-types.d.ts +505 -0
  59. package/dist/engineering-types.d.ts.map +1 -0
  60. package/dist/engineering-types.js +2 -0
  61. package/dist/engineering-types.js.map +1 -0
  62. package/dist/engineering-work.d.ts +32 -0
  63. package/dist/engineering-work.d.ts.map +1 -0
  64. package/dist/engineering-work.js +1757 -0
  65. package/dist/engineering-work.js.map +1 -0
  66. package/dist/index.d.ts +609 -14
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +3568 -204
  69. package/dist/index.js.map +1 -1
  70. package/dist/resolution-learning-records.d.ts +154 -0
  71. package/dist/resolution-learning-records.d.ts.map +1 -0
  72. package/dist/resolution-learning-records.js +657 -0
  73. package/dist/resolution-learning-records.js.map +1 -0
  74. package/dist/resolution-learning-types.d.ts +356 -0
  75. package/dist/resolution-learning-types.d.ts.map +1 -0
  76. package/dist/resolution-learning-types.js +2 -0
  77. package/dist/resolution-learning-types.js.map +1 -0
  78. package/dist/resolution-learning-worker.d.ts +21 -0
  79. package/dist/resolution-learning-worker.d.ts.map +1 -0
  80. package/dist/resolution-learning-worker.js +1027 -0
  81. package/dist/resolution-learning-worker.js.map +1 -0
  82. package/dist/resolution-learning.d.ts +38 -0
  83. package/dist/resolution-learning.d.ts.map +1 -0
  84. package/dist/resolution-learning.js +860 -0
  85. package/dist/resolution-learning.js.map +1 -0
  86. package/package.json +6 -6
@@ -0,0 +1,464 @@
1
+ import { hasPermission } from "@pegma/authorization-core";
2
+ import { SupportDeskAuthorizationError, SupportDeskConflictError, SupportDeskNotFoundError, supportPermissions, } from "./index.js";
3
+ import { canonical, fields, fingerprint, integer, text, timestamp, } from "./assistant-turn-records.js";
4
+ import { safeEngineeringSnapshot as snapshot, checkEngineeringRecordCapacity, engineeringCommandKey, engineeringSourceKey, engineeringWorkKey, validateEngineeringAcknowledgement, } from "./engineering-records.js";
5
+ function permission(access, reconciliation, expectedActor) {
6
+ text(access.principalId, "principalId");
7
+ const name = reconciliation
8
+ ? supportPermissions.engineeringReconcile
9
+ : supportPermissions.engineeringProcess;
10
+ if (expectedActor !== undefined && access.principalId !== expectedActor)
11
+ throw new SupportDeskAuthorizationError(name);
12
+ if (!hasPermission(access, name) &&
13
+ (reconciliation ||
14
+ !hasPermission(access, supportPermissions.engineeringReconcile)))
15
+ throw new SupportDeskAuthorizationError(name);
16
+ }
17
+ function outcome(work, opaque = false) {
18
+ return {
19
+ ticketId: work.ticketId,
20
+ sourceGeneration: work.sourceGeneration,
21
+ workGeneration: work.workGeneration,
22
+ status: work.status,
23
+ ...(work.stepId === undefined ? {} : { stepId: work.stepId }),
24
+ ...(work.requestHash === undefined
25
+ ? {}
26
+ : { requestHash: work.requestHash }),
27
+ ...(work.candidateHash === undefined
28
+ ? {}
29
+ : { candidateHash: work.candidateHash }),
30
+ ...(work.proposal === undefined
31
+ ? {}
32
+ : { proposalHash: work.proposal.proposalHash }),
33
+ ...(work.dispatch === undefined
34
+ ? {}
35
+ : { dispatchId: work.dispatch.dispatchId }),
36
+ ...(work.acknowledgement === undefined
37
+ ? {}
38
+ : {
39
+ acknowledgement: opaque
40
+ ? {
41
+ repositoryId: work.acknowledgement.repositoryId,
42
+ issueId: work.acknowledgement.issueId,
43
+ issueNumber: work.acknowledgement.issueNumber,
44
+ }
45
+ : snapshot(work.acknowledgement),
46
+ }),
47
+ };
48
+ }
49
+ function sameAcknowledgement(left, right) {
50
+ return (left !== undefined &&
51
+ right !== undefined &&
52
+ left.repositoryId === right.repositoryId &&
53
+ left.issueId === right.issueId &&
54
+ left.issueNumber === right.issueNumber);
55
+ }
56
+ function validateResult(input, reconciliation) {
57
+ const value = fields(input, "engineering dispatch result", ["outcome"], ["acknowledgement", "proof", "reason"]);
58
+ if (value.outcome === "accepted") {
59
+ fields(value, "accepted engineering result", [
60
+ "outcome",
61
+ "acknowledgement",
62
+ ...(reconciliation ? ["proof"] : []),
63
+ ]);
64
+ validateEngineeringAcknowledgement(value.acknowledgement);
65
+ if (reconciliation)
66
+ text(value.proof, "proof");
67
+ return {
68
+ outcome: "accepted",
69
+ acknowledgement: snapshot(value.acknowledgement),
70
+ };
71
+ }
72
+ if (value.outcome === "confirmed_rejected") {
73
+ fields(value, "rejected engineering result", ["outcome", "proof"]);
74
+ text(value.proof, "proof");
75
+ return { outcome: "confirmed_rejected", proof: value.proof };
76
+ }
77
+ if (value.outcome === "unknown") {
78
+ fields(value, "unknown engineering result", ["outcome"], ["reason"]);
79
+ if (value.reason !== undefined)
80
+ text(value.reason, "reason");
81
+ return {
82
+ outcome: "unknown",
83
+ ...(value.reason === undefined ? {} : { reason: value.reason }),
84
+ };
85
+ }
86
+ throw new TypeError("Invalid engineering result outcome");
87
+ }
88
+ export function createEngineeringReconciliationServices(deps) {
89
+ const { records, clock, options } = deps;
90
+ async function sourceAt(ticketId) {
91
+ const source = await records.getVersioned(engineeringSourceKey(ticketId));
92
+ if (source?.value.kind !== "engineering_source")
93
+ throw new SupportDeskNotFoundError();
94
+ return { value: source.value, version: source.version };
95
+ }
96
+ async function workAt(ticketId, generation) {
97
+ const work = await records.getVersioned(engineeringWorkKey(ticketId, generation));
98
+ if (work === null)
99
+ return null;
100
+ if (work.value.kind !== "engineering_work")
101
+ throw new SupportDeskConflictError("Engineering work key contains another record");
102
+ return { value: work.value, version: work.version };
103
+ }
104
+ async function identity(work, destination) {
105
+ if (work === null ||
106
+ work.dispatch === undefined ||
107
+ work.sourceGeneration !== destination.sourceGeneration ||
108
+ work.stepId !== destination.stepId ||
109
+ work.requestHash !== destination.requestHash ||
110
+ work.dispatch?.dispatchId !== destination.dispatchId ||
111
+ work.dispatch.requestHash !== destination.requestHash ||
112
+ work.dispatch.repositoryId !== destination.repositoryId ||
113
+ work.dispatch.exportMarker !== destination.exportMarker)
114
+ return null;
115
+ const prepared = work.proposal;
116
+ if (prepared !== undefined) {
117
+ const request = prepared.request;
118
+ if (prepared.stepId !== destination.stepId ||
119
+ prepared.requestHash !== destination.requestHash ||
120
+ request.repository.repositoryId !== destination.repositoryId ||
121
+ request.bundle.exportMarker !== destination.exportMarker ||
122
+ (await fingerprint(request)) !== destination.requestHash ||
123
+ (await fingerprint(request.repository)) !==
124
+ prepared.repositoryMetadataHash)
125
+ return null;
126
+ return {
127
+ operation: request.operation,
128
+ sourceBindingHash: work.sourceBindingHash,
129
+ repositoryMetadataHash: prepared.repositoryMetadataHash,
130
+ ...(request.operation === "link_existing_issue"
131
+ ? { issueId: request.issueId, issueNumber: request.issueNumber }
132
+ : {}),
133
+ };
134
+ }
135
+ const request = work.withdrawnRequest;
136
+ if (request === undefined ||
137
+ request.repositoryId !== destination.repositoryId ||
138
+ request.exportMarker !== destination.exportMarker)
139
+ return null;
140
+ return {
141
+ operation: request.operation,
142
+ sourceBindingHash: work.sourceBindingHash,
143
+ repositoryMetadataHash: request.repositoryMetadataHash,
144
+ ...(request.operation === "link_existing_issue"
145
+ ? { issueId: request.issueId, issueNumber: request.issueNumber }
146
+ : {}),
147
+ };
148
+ }
149
+ async function view(ticketId) {
150
+ for (let attempt = 0; attempt < deps.maxConflictAttempts; attempt += 1) {
151
+ const source = await sourceAt(ticketId);
152
+ const destinations = await Promise.all(source.value.destinations.map(async (destination) => {
153
+ const work = await workAt(ticketId, destination.sourceGeneration);
154
+ const requestIdentity = await identity(work?.value ?? null, destination);
155
+ return {
156
+ ...snapshot(destination),
157
+ requestIdentity,
158
+ requestIdentityStatus: requestIdentity === null
159
+ ? "unavailable"
160
+ : "available",
161
+ };
162
+ }));
163
+ const latest = await sourceAt(ticketId);
164
+ if (latest.version !== source.version)
165
+ continue;
166
+ return {
167
+ ticketId,
168
+ sourceGeneration: source.value.sourceGeneration,
169
+ sourceWorkGeneration: source.value.workGeneration,
170
+ state: source.value.state,
171
+ destinations,
172
+ };
173
+ }
174
+ throw new SupportDeskConflictError("Engineering source changed during reconciliation read");
175
+ }
176
+ async function verify(binding, now) {
177
+ if (options.dispatchResults === undefined)
178
+ throw new SupportDeskConflictError("Engineering dispatch proof verifier unavailable");
179
+ const controller = new AbortController();
180
+ let timer;
181
+ try {
182
+ const verified = snapshot(await Promise.race([
183
+ Promise.resolve().then(() => options.dispatchResults.verify(binding, controller.signal)),
184
+ new Promise((_resolve, reject) => {
185
+ timer = setTimeout(() => {
186
+ controller.abort();
187
+ reject(new SupportDeskConflictError("Engineering dispatch proof timed out"));
188
+ }, options.trustTimeoutMilliseconds);
189
+ }),
190
+ ]));
191
+ if (verified === null)
192
+ throw new SupportDeskConflictError("Engineering acceptance or no-acceptance proof unverified");
193
+ fields(verified, "verified engineering dispatch", [
194
+ "binding",
195
+ "verifierReceiptId",
196
+ "verifierVersion",
197
+ "verifiedAt",
198
+ "validUntil",
199
+ ]);
200
+ text(verified.verifierReceiptId, "dispatch.verifierReceiptId");
201
+ text(verified.verifierVersion, "dispatch.verifierVersion");
202
+ if (canonical(verified.binding) !== canonical(binding) ||
203
+ timestamp(verified.verifiedAt, "dispatch.verifiedAt") > now() ||
204
+ timestamp(verified.validUntil, "dispatch.validUntil") <= now())
205
+ throw new SupportDeskConflictError("Engineering dispatch proof binding or validity changed");
206
+ return {
207
+ receipt: verified.verifierReceiptId,
208
+ deadline: timestamp(verified.validUntil, "dispatch.validUntil"),
209
+ };
210
+ }
211
+ finally {
212
+ if (timer !== undefined)
213
+ clearTimeout(timer);
214
+ }
215
+ }
216
+ async function record(access, command, result, reconciliation, guard) {
217
+ const actorId = access.principalId;
218
+ permission(access, reconciliation, actorId);
219
+ const runStart = timestamp(clock.now(), "now");
220
+ const started = performance.now();
221
+ const now = () => Math.max(timestamp(clock.now(), "now"), runStart + Math.max(0, performance.now() - started));
222
+ const hash = await fingerprint({
223
+ operation: reconciliation ? "reconcile" : "dispatch_result",
224
+ command,
225
+ });
226
+ for (let attempt = 0; attempt < deps.maxConflictAttempts; attempt += 1) {
227
+ permission(access, reconciliation, actorId);
228
+ const source = await sourceAt(command.ticketId);
229
+ const stored = await workAt(command.ticketId, command.sourceGeneration);
230
+ const work = stored?.value;
231
+ const destination = source.value.destinations.find((entry) => entry.sourceGeneration === command.sourceGeneration &&
232
+ entry.dispatchId === command.dispatchId &&
233
+ entry.requestHash === command.requestHash &&
234
+ (!reconciliation ||
235
+ entry.repositoryId ===
236
+ command.repositoryId));
237
+ if (stored === null ||
238
+ work === undefined ||
239
+ destination === undefined ||
240
+ work.dispatch === undefined)
241
+ throw new SupportDeskConflictError("Engineering reconciliation destination changed");
242
+ if (work.lastDispatchResult?.fingerprint === hash ||
243
+ destination.lastReconciliation?.fingerprint === hash) {
244
+ if (guard !== undefined)
245
+ await guard();
246
+ permission(access, reconciliation, actorId);
247
+ return outcome(work);
248
+ }
249
+ if (reconciliation &&
250
+ source.value.workGeneration !==
251
+ command
252
+ .expectedSourceWorkGeneration)
253
+ throw new SupportDeskConflictError("Engineering reconciliation source version changed");
254
+ if (["accepted", "confirmed_rejected"].includes(destination.outcome) &&
255
+ destination.reconciliation === "confirmed") {
256
+ if ((result.outcome === "accepted" &&
257
+ destination.outcome === "accepted" &&
258
+ sameAcknowledgement(destination.acknowledgement, result.acknowledgement)) ||
259
+ (result.outcome === "confirmed_rejected" &&
260
+ destination.outcome === "confirmed_rejected")) {
261
+ if (guard !== undefined)
262
+ await guard();
263
+ permission(access, reconciliation, actorId);
264
+ return outcome(work);
265
+ }
266
+ throw new SupportDeskConflictError("Established engineering terminal outcome cannot be replaced");
267
+ }
268
+ const requestIdentity = await identity(work, destination);
269
+ if (requestIdentity === null)
270
+ throw new SupportDeskConflictError("Engineering exact request identity unavailable");
271
+ if (result.outcome === "accepted" &&
272
+ (result.acknowledgement.repositoryId !== destination.repositoryId ||
273
+ (requestIdentity.operation === "link_existing_issue" &&
274
+ (result.acknowledgement.issueId !== requestIdentity.issueId ||
275
+ result.acknowledgement.issueNumber !==
276
+ requestIdentity.issueNumber))))
277
+ throw new SupportDeskConflictError("Engineering acknowledgement does not match exact destination");
278
+ const proof = result.outcome === "unknown"
279
+ ? null
280
+ : await verify({
281
+ ticketId: command.ticketId,
282
+ sourceGeneration: work.sourceGeneration,
283
+ sourceBindingHash: requestIdentity.sourceBindingHash,
284
+ repositoryId: destination.repositoryId,
285
+ repositoryMetadataHash: requestIdentity.repositoryMetadataHash,
286
+ dispatchId: command.dispatchId,
287
+ requestHash: command.requestHash,
288
+ exportMarker: destination.exportMarker,
289
+ operation: requestIdentity.operation,
290
+ result,
291
+ }, now);
292
+ const terminal = result.outcome !== "unknown";
293
+ if (terminal && work.terminalReserveRows !== 2)
294
+ throw new SupportDeskConflictError("Engineering terminal reserve unavailable");
295
+ const acknowledgement = result.outcome !== "accepted"
296
+ ? undefined
297
+ : source.value.state === "withdrawn"
298
+ ? {
299
+ repositoryId: result.acknowledgement.repositoryId,
300
+ issueId: result.acknowledgement.issueId,
301
+ issueNumber: result.acknowledgement.issueNumber,
302
+ }
303
+ : result.acknowledgement;
304
+ const { claim: _claim, leaseUntil: _lease, retryAt: _retry, ...unclaimed } = work;
305
+ const nextWork = {
306
+ ...unclaimed,
307
+ status: result.outcome,
308
+ stage: "reconcile",
309
+ workGeneration: work.workGeneration + 1,
310
+ terminalReserveRows: terminal ? 0 : 2,
311
+ lastDispatchResult: { fingerprint: hash },
312
+ ...(acknowledgement === undefined ? {} : { acknowledgement }),
313
+ ...(proof === null ? {} : { resultProof: proof.receipt }),
314
+ ...(result.outcome !== "unknown" ||
315
+ result.reason === undefined ||
316
+ source.value.state === "withdrawn"
317
+ ? {}
318
+ : { heldReason: result.reason }),
319
+ };
320
+ const destinations = source.value.destinations.map((entry) => entry !== destination
321
+ ? entry
322
+ : {
323
+ // The epoch belongs to the pre-dispatch association. A late ACK
324
+ // records history without inheriting newer source authority.
325
+ ...entry,
326
+ outcome: result.outcome,
327
+ reconciliation: terminal
328
+ ? "confirmed"
329
+ : "blocked",
330
+ ...(acknowledgement === undefined ? {} : { acknowledgement }),
331
+ lastReconciliation: {
332
+ fingerprint: hash,
333
+ outcome: result.outcome,
334
+ observedAt: clock.now(),
335
+ ...(proof === null ? {} : { proof: proof.receipt }),
336
+ },
337
+ });
338
+ const nextSource = {
339
+ ...source.value,
340
+ workGeneration: source.value.workGeneration + 1,
341
+ destinations,
342
+ reconciliationPending: destinations.some((entry) => entry.reconciliation !== "confirmed"),
343
+ };
344
+ checkEngineeringRecordCapacity(nextWork);
345
+ checkEngineeringRecordCapacity(nextSource);
346
+ const ticket = await records.getVersioned({
347
+ partition: command.ticketId,
348
+ id: "ticket",
349
+ });
350
+ if (ticket !== null && ticket.value.kind !== "ticket")
351
+ throw new SupportDeskConflictError("Ticket key contains another record");
352
+ const rows = await records.list(command.ticketId);
353
+ const ticketFact = ticket?.value.kind === "ticket"
354
+ ? ticket.value.ticket
355
+ : { id: work.ticketId, revision: work.acceptedTicketRevision };
356
+ const causal = {
357
+ ticketId: command.ticketId,
358
+ commandId: await fingerprint({
359
+ operation: "engineering_terminal",
360
+ sourceGeneration: work.sourceGeneration,
361
+ dispatchId: command.dispatchId,
362
+ requestHash: command.requestHash,
363
+ }),
364
+ correlationId: command.dispatchId,
365
+ };
366
+ const actions = [];
367
+ if (terminal) {
368
+ deps.completionAdmission(ticketFact, rows, 2, work.id);
369
+ const resultReceipt = {
370
+ kind: "engineering_receipt",
371
+ partition: command.ticketId,
372
+ id: engineeringCommandKey(command.ticketId, causal.commandId).id,
373
+ fingerprint: hash,
374
+ result: outcome(nextWork, true),
375
+ };
376
+ checkEngineeringRecordCapacity(resultReceipt);
377
+ actions.push(deps.audit(causal, ticketFact, actorId, clock.now(), reconciliation
378
+ ? "support.engineering.reconciled"
379
+ : "support.engineering.export_recorded"), { action: "insert", value: resultReceipt });
380
+ }
381
+ if (guard !== undefined)
382
+ await guard();
383
+ permission(access, reconciliation, actorId);
384
+ if (proof !== null && now() >= proof.deadline)
385
+ throw new SupportDeskConflictError("Engineering terminal proof expired before commit");
386
+ if ((await records.transact(command.ticketId, [
387
+ ...(ticket === null
388
+ ? []
389
+ : [
390
+ {
391
+ action: "putIfUnchanged",
392
+ version: ticket.version,
393
+ value: ticket.value,
394
+ },
395
+ ]),
396
+ {
397
+ action: "putIfUnchanged",
398
+ version: source.version,
399
+ value: nextSource,
400
+ },
401
+ {
402
+ action: "putIfUnchanged",
403
+ version: stored.version,
404
+ value: nextWork,
405
+ },
406
+ ...actions,
407
+ ])).committed) {
408
+ permission(access, reconciliation, actorId);
409
+ return outcome(nextWork);
410
+ }
411
+ }
412
+ throw new SupportDeskConflictError();
413
+ }
414
+ return {
415
+ async readEngineeringReconciliation(access, ticketId) {
416
+ permission(access, true);
417
+ const actorId = access.principalId;
418
+ text(ticketId, "ticketId");
419
+ const result = await view(ticketId);
420
+ permission(access, true, actorId);
421
+ return result;
422
+ },
423
+ async recordEngineeringDispatchResult(access, input) {
424
+ permission(access, false);
425
+ const command = snapshot(fields(input, "record engineering dispatch", [
426
+ "ticketId",
427
+ "sourceGeneration",
428
+ "dispatchId",
429
+ "requestHash",
430
+ "result",
431
+ ]));
432
+ text(command.ticketId, "ticketId");
433
+ integer(command.sourceGeneration, "sourceGeneration", 1);
434
+ text(command.dispatchId, "dispatchId");
435
+ text(command.requestHash, "requestHash");
436
+ return record(access, command, validateResult(command.result, false), false);
437
+ },
438
+ async recordEngineeringReconciliation(access, input, guard) {
439
+ permission(access, true);
440
+ const actorId = access.principalId;
441
+ if (typeof guard !== "function")
442
+ throw new TypeError("Engineering reconciliation requires a current read-only remote proof guard");
443
+ const command = snapshot(fields(input, "record engineering reconciliation", [
444
+ "ticketId",
445
+ "sourceGeneration",
446
+ "expectedSourceWorkGeneration",
447
+ "repositoryId",
448
+ "dispatchId",
449
+ "requestHash",
450
+ "result",
451
+ ]));
452
+ text(command.ticketId, "ticketId");
453
+ integer(command.sourceGeneration, "sourceGeneration", 1);
454
+ integer(command.expectedSourceWorkGeneration, "expectedSourceWorkGeneration", 1);
455
+ for (const key of ["repositoryId", "dispatchId", "requestHash"])
456
+ text(command[key], key);
457
+ await record(access, command, validateResult(command.result, true), true, guard);
458
+ const result = await view(command.ticketId);
459
+ permission(access, true, actorId);
460
+ return result;
461
+ },
462
+ };
463
+ }
464
+ //# sourceMappingURL=engineering-reconciliation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engineering-reconciliation.js","sourceRoot":"","sources":["../src/engineering-reconciliation.ts"],"names":[],"mappings":"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"}