@astrosheep/keiyaku 4.6.4 → 4.6.6
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/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-akuma/SKILL.md +43 -8
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-bind/SKILL.md +7 -8
- package/build/integrations/marketplace/plugins/keiyaku/skills/keiyaku-workflow/SKILL.md +3 -3
- package/build/src/akuma/akuma-observe.d.ts +18 -15
- package/build/src/akuma/akuma-observe.js +75 -16
- package/build/src/akuma/akuma-wait.d.ts +4 -3
- package/build/src/akuma/akuma-wait.js +75 -53
- package/build/src/akuma/akuma.d.ts +6 -4
- package/build/src/akuma/akuma.js +4 -0
- package/build/src/akuma/call-initial-tell.d.ts +2 -2
- package/build/src/akuma/call-initial-tell.js +1 -1
- package/build/src/akuma/call-request.d.ts +2 -2
- package/build/src/akuma/heart/index.d.ts +7 -2
- package/build/src/akuma/heart/index.js +50 -5
- package/build/src/akuma/heart/tells.d.ts +33 -2
- package/build/src/akuma/heart/tells.js +24 -18
- package/build/src/akuma/heart/timeline.d.ts +23 -1
- package/build/src/akuma/heart/timeline.js +28 -21
- package/build/src/akuma/projection.d.ts +10 -10
- package/build/src/akuma/providers/pi/index.js +72 -39
- package/build/src/akuma/selection-observation.d.ts +20 -20
- package/build/src/akuma-body.js +1 -0
- package/build/src/alias/index.d.ts +0 -1
- package/build/src/alias/index.js +0 -4
- package/build/src/body/amend.d.ts +0 -4
- package/build/src/body/amend.js +0 -3
- package/build/src/body/region.d.ts +0 -1
- package/build/src/body/region.js +0 -3
- package/build/src/body/verification.d.ts +0 -1
- package/build/src/cli/commands/akuma-grammar.js +23 -66
- package/build/src/cli/commands/akuma.js +17 -30
- package/build/src/cli/commands/contract-grammar.d.ts +14 -1
- package/build/src/cli/commands/contract-grammar.js +54 -21
- package/build/src/cli/commands/contract-help.d.ts +9 -8
- package/build/src/cli/commands/contract-help.js +14 -7
- package/build/src/cli/commands/contract.js +57 -117
- package/build/src/cli/commands/install.d.ts +5 -5
- package/build/src/cli/commands/install.js +1 -4
- package/build/src/cli/commands/task-grammar.js +10 -66
- package/build/src/cli/commands/task.d.ts +0 -1
- package/build/src/cli/commands/task.js +34 -53
- package/build/src/cli/coordinates.d.ts +1 -2
- package/build/src/cli/coordinates.js +1 -4
- package/build/src/cli/parse.d.ts +2 -3
- package/build/src/cli/parse.js +24 -66
- package/build/src/cli/render/akuma.d.ts +3 -16
- package/build/src/cli/render/akuma.js +1 -13
- package/build/src/cli/render/audit.js +1 -1
- package/build/src/cli/render/contract.js +34 -32
- package/build/src/cli/render/kanshi-akuma.d.ts +8 -2
- package/build/src/cli/render/kanshi-akuma.js +14 -7
- package/build/src/cli/render/kanshi.d.ts +3 -1
- package/build/src/cli/render/kanshi.js +44 -32
- package/build/src/cli/render/receipt.js +6 -1
- package/build/src/cli/render/task.d.ts +1 -1
- package/build/src/cli/render/task.js +3 -27
- package/build/src/cli/render/terminal.d.ts +6 -2
- package/build/src/cli/render/terminal.js +8 -2
- package/build/src/cli/runtime.js +3 -16
- package/build/src/cli/scan.d.ts +26 -0
- package/build/src/cli/scan.js +82 -0
- package/build/src/cli/streams.d.ts +5 -0
- package/build/src/cli/streams.js +11 -0
- package/build/src/contract-worktree.js +38 -21
- package/build/src/core/facts/codec.d.ts +1 -2
- package/build/src/core/facts/codec.js +5 -11
- package/build/src/core/facts/types.d.ts +16 -2
- package/build/src/core/facts/types.js +15 -0
- package/build/src/core/verbs/abandon.js +3 -9
- package/build/src/core/verbs/amend.js +2 -9
- package/build/src/core/verbs/arc.js +6 -13
- package/build/src/core/verbs/attestation.js +2 -9
- package/build/src/core/verbs/bind.js +2 -9
- package/build/src/core/verbs/deliver.js +2 -9
- package/build/src/core/verbs/placement.d.ts +1 -1
- package/build/src/core/verbs/placement.js +2 -9
- package/build/src/core/verbs/reintegrate.d.ts +1 -1
- package/build/src/core/verbs/reintegrate.js +2 -9
- package/build/src/dispatch/index.d.ts +2 -2
- package/build/src/dispatch/index.js +33 -11
- package/build/src/git/hooks.d.ts +2 -4
- package/build/src/git/hooks.js +0 -12
- package/build/src/git/integration.d.ts +5 -3
- package/build/src/git/integration.js +36 -25
- package/build/src/git/nuke.js +4 -4
- package/build/src/git/observe.d.ts +4 -4
- package/build/src/git/observe.js +5 -5
- package/build/src/git/process.d.ts +1 -4
- package/build/src/git/process.js +1 -11
- package/build/src/git/read-observation.js +1 -1
- package/build/src/git/reconcile.d.ts +1 -1
- package/build/src/git/reconcile.js +15 -13
- package/build/src/git/repository.d.ts +2 -6
- package/build/src/git/repository.js +18 -31
- package/build/src/git/scratch.d.ts +6 -6
- package/build/src/git/scratch.js +110 -46
- package/build/src/git/target-placement.d.ts +5 -5
- package/build/src/git/target-placement.js +18 -33
- package/build/src/git/tender.d.ts +6 -2
- package/build/src/git/tender.js +19 -12
- package/build/src/git/terminal-reconcile.js +24 -13
- package/build/src/git/terminal-seal.d.ts +2 -5
- package/build/src/git/terminal-seal.js +5 -3
- package/build/src/git/workspace.d.ts +17 -13
- package/build/src/git/workspace.js +58 -41
- package/build/src/kanshi/index.d.ts +2 -2
- package/build/src/kanshi/index.js +1 -1
- package/build/src/kanshi/read.d.ts +8 -1
- package/build/src/kanshi/read.js +72 -7
- package/build/src/kanshi/report.d.ts +12 -0
- package/build/src/library/akuma-creation.d.ts +4 -4
- package/build/src/library/bind.d.ts +1 -63
- package/build/src/library/bind.js +3 -9
- package/build/src/library/contract-creation.js +2 -30
- package/build/src/library/contract-execution.d.ts +0 -1
- package/build/src/library/contract-execution.js +9 -34
- package/build/src/library/contract-operations.d.ts +5 -1
- package/build/src/library/contract-operations.js +7 -3
- package/build/src/library/contract-types.d.ts +1 -1
- package/build/src/library/delivery.d.ts +91 -93
- package/build/src/library/delivery.js +2 -1
- package/build/src/library/input.d.ts +0 -2
- package/build/src/library/input.js +0 -4
- package/build/src/library/invocation.d.ts +0 -1
- package/build/src/library/invocation.js +3 -25
- package/build/src/library/outcome.d.ts +651 -602
- package/build/src/library/outcome.js +4 -4
- package/build/src/library/reconcile.d.ts +6 -0
- package/build/src/library/reconcile.js +31 -1
- package/build/src/library/repo.d.ts +0 -1
- package/build/src/library/selection.d.ts +1 -10
- package/build/src/library/selection.js +14 -15
- package/build/src/protocol/abandon.d.ts +1 -1
- package/build/src/protocol/abandon.js +3 -10
- package/build/src/protocol/amend.js +2 -5
- package/build/src/protocol/arc.d.ts +1 -1
- package/build/src/protocol/arc.js +2 -9
- package/build/src/protocol/attempt.d.ts +3 -20
- package/build/src/protocol/attempt.js +6 -5
- package/build/src/protocol/audit.d.ts +1 -0
- package/build/src/protocol/audit.js +10 -11
- package/build/src/protocol/completion.d.ts +129 -55
- package/build/src/protocol/completion.js +62 -73
- package/build/src/protocol/deliver.d.ts +7 -5
- package/build/src/protocol/deliver.js +74 -44
- package/build/src/protocol/execution-observation.d.ts +2 -4
- package/build/src/protocol/execution-observation.js +3 -7
- package/build/src/protocol/intent.d.ts +1 -1
- package/build/src/protocol/intent.js +1 -0
- package/build/src/protocol/operations.d.ts +24 -12
- package/build/src/protocol/operations.js +36 -15
- package/build/src/protocol/placement.d.ts +2 -1
- package/build/src/protocol/placement.js +21 -5
- package/build/src/protocol/progress.d.ts +1 -1
- package/build/src/protocol/read/status.js +58 -41
- package/build/src/protocol/reintegrate.d.ts +1 -1
- package/build/src/protocol/reintegrate.js +10 -19
- package/build/src/protocol/review.d.ts +3 -28
- package/build/src/protocol/review.js +10 -37
- package/build/src/protocol/run.d.ts +19 -7
- package/build/src/protocol/run.js +19 -9
- package/build/src/runtime/proc/windows-launch.exe +0 -0
- package/build/src/settlement/holder.d.ts +2 -4
- package/build/src/settlement/holder.js +3 -6
- package/build/src/task/board.d.ts +6 -0
- package/build/src/task/board.js +30 -1
- package/build/src/task/catalog.js +1 -4
- package/build/src/task/compose.d.ts +0 -1
- package/build/src/task/compose.js +0 -1
- package/build/src/task/context.d.ts +0 -1
- package/build/src/task/context.js +0 -3
- package/build/src/task/created-observation.d.ts +5 -1
- package/build/src/task/created-observation.js +12 -5
- package/build/src/task/index.d.ts +1 -1
- package/build/src/task/index.js +7 -6
- package/build/src/task/input.d.ts +0 -6
- package/build/src/task/input.js +2 -14
- package/build/src/task/mutation.d.ts +3 -4
- package/build/src/task/mutation.js +11 -39
- package/build/src/task/operations.d.ts +2 -7
- package/build/src/task/operations.js +37 -49
- package/build/src/task/query.d.ts +0 -1
- package/build/src/task/query.js +1 -4
- package/build/src/task/store.d.ts +0 -2
- package/build/src/task/store.js +27 -11
- package/build/src/verification/declaration.js +3 -2
- package/build/src/verification/execution.d.ts +3 -2
- package/build/src/verification/execution.js +10 -6
- package/build/src/workspace-place.d.ts +0 -1
- package/build/src/workspace-place.js +0 -11
- package/package.json +7 -3
|
@@ -12,7 +12,7 @@ import { captureLocalContractComposition, derivedGates, derivedHooks, gateNames,
|
|
|
12
12
|
import { actorOption, normalizedList, requireInput, requireMarkdown, taskOption } from "./input.js";
|
|
13
13
|
import { InvocationAccumulator } from "./invocation.js";
|
|
14
14
|
import { project, validated } from "./outcome.js";
|
|
15
|
-
import {
|
|
15
|
+
import { reconcileAffectedContracts } from "./reconcile.js";
|
|
16
16
|
import { observeRegion } from "./region.js";
|
|
17
17
|
import { scopeForRepo } from "./repo.js";
|
|
18
18
|
function bindInput(input, composition) {
|
|
@@ -122,7 +122,7 @@ function bindValue(keiyaku, region, warnings, workspace, appointmentLag) {
|
|
|
122
122
|
// eslint-disable-next-line max-params -- Keep this local operation's custody, admission, and policy witnesses explicit.
|
|
123
123
|
async function bindComplete(accumulator, id, scope, channel, leading, hooks, value) {
|
|
124
124
|
retainAdmission(accumulator, id, leading, false);
|
|
125
|
-
await
|
|
125
|
+
await reconcileAffectedContracts(accumulator, id, scope, channel, hooks);
|
|
126
126
|
try {
|
|
127
127
|
const appointment = await readManagedWorktreeAppointment(scope, id);
|
|
128
128
|
if (appointment.kind === "appointed")
|
|
@@ -139,34 +139,6 @@ async function bindComplete(accumulator, id, scope, channel, leading, hooks, val
|
|
|
139
139
|
accumulator.extendConclusions(id, conclusions(built));
|
|
140
140
|
return built;
|
|
141
141
|
}
|
|
142
|
-
async function reconcileAll(accumulator, id, scope, channel, hooks) {
|
|
143
|
-
for (const contract of [...new Set([id, ...accumulator.snapshot().affected])]) {
|
|
144
|
-
try {
|
|
145
|
-
accumulator.observe({ kind: "stage", contractId: contract, stage: "reconciliation", state: "started" });
|
|
146
|
-
const report = await (async () => {
|
|
147
|
-
try {
|
|
148
|
-
return await completeReconcile({
|
|
149
|
-
scope,
|
|
150
|
-
channel,
|
|
151
|
-
contractId: contract,
|
|
152
|
-
hooks,
|
|
153
|
-
retryHooks: false,
|
|
154
|
-
progress: accumulator,
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
finally {
|
|
158
|
-
accumulator.observe({ kind: "stage", contractId: contract, stage: "reconciliation", state: "finished" });
|
|
159
|
-
}
|
|
160
|
-
})();
|
|
161
|
-
void report;
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
if (!isOperationalStop(error, scope.signal))
|
|
165
|
-
throw error;
|
|
166
|
-
accumulator.recordStop(executionStop(contract, "reconciliation", error, scope.signal));
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
142
|
// eslint-disable-next-line max-params -- Keep this local operation's custody, admission, and policy witnesses explicit.
|
|
171
143
|
async function markdownBind(prepared, document, hooks, scope, channel, accumulator, handle, omittedMarkdownTarget) {
|
|
172
144
|
const { task, target, actor, gates, after } = prepared;
|
|
@@ -25,7 +25,7 @@ import { deliveryForContract } from "./delivery.js";
|
|
|
25
25
|
import { actorOption, contractTerms, documentDerivation, normalizedList, optionalBoolean, optionalNonblank, optionalSignal, requireInput, requireMarkdown, } from "./input.js";
|
|
26
26
|
import { InvocationAccumulator } from "./invocation.js";
|
|
27
27
|
import { KeiyakuError, errorCategory, project, validated, } from "./outcome.js";
|
|
28
|
-
import {
|
|
28
|
+
import { reconcileAffectedContracts } from "./reconcile.js";
|
|
29
29
|
import { observeChangedRegion } from "./region.js";
|
|
30
30
|
export class ContractExecution {
|
|
31
31
|
seat;
|
|
@@ -157,6 +157,7 @@ export class ContractExecution {
|
|
|
157
157
|
if (outcome.kind !== "accepted")
|
|
158
158
|
return expected(this.id, outcome);
|
|
159
159
|
leadingValue = outcome.value;
|
|
160
|
+
accumulator.extendConclusions(this.id, { leading: outcome.value.leading });
|
|
160
161
|
stage = "verification";
|
|
161
162
|
await advanceAndContinue(accumulator, scope, localChannel, this.id, this.composition, outcome, values.signal, "verification");
|
|
162
163
|
}
|
|
@@ -168,12 +169,13 @@ export class ContractExecution {
|
|
|
168
169
|
const retained = accumulator.conclusions(this.id) ?? {};
|
|
169
170
|
const value = { ...base, ...leadingValue, ...retained };
|
|
170
171
|
accumulator.recordConclusions(this.id, value);
|
|
171
|
-
await
|
|
172
|
+
await reconcileAffectedContracts(accumulator, this.id, scope, localChannel, hooks);
|
|
172
173
|
return acceptedOutcome("deliver", this.id, accumulator, deliveryForContract(this.scope, value));
|
|
173
174
|
}, values.signal, observer);
|
|
174
175
|
}
|
|
175
176
|
async review(input, options) {
|
|
176
|
-
const values = validated(() => requireInput(input, "review input", ["verdict", "summary", "signal"]));
|
|
177
|
+
const values = validated(() => requireInput(input, "review input", ["verdict", "summary", "actor", "signal"]));
|
|
178
|
+
const actor = validated(() => actorOption(values.actor));
|
|
177
179
|
const verdict = values.verdict;
|
|
178
180
|
if (verdict !== "satisfied" && verdict !== "unsatisfied")
|
|
179
181
|
throw new KeiyakuError("invalid-input", "verdict must be satisfied or unsatisfied", {
|
|
@@ -195,6 +197,7 @@ export class ContractExecution {
|
|
|
195
197
|
contractId: this.id,
|
|
196
198
|
verdict,
|
|
197
199
|
...(summary === undefined ? {} : { summary }),
|
|
200
|
+
...actor,
|
|
198
201
|
},
|
|
199
202
|
});
|
|
200
203
|
const hooks = derivedHooks(this.composition);
|
|
@@ -209,6 +212,7 @@ export class ContractExecution {
|
|
|
209
212
|
contractId: this.id,
|
|
210
213
|
progress: accumulator,
|
|
211
214
|
...(this.composition.actor === undefined ? {} : { actor: this.composition.actor }),
|
|
215
|
+
...actor,
|
|
212
216
|
...(signal === undefined ? {} : { signal }),
|
|
213
217
|
verdict,
|
|
214
218
|
...(summary === undefined ? {} : { summary }),
|
|
@@ -229,7 +233,7 @@ export class ContractExecution {
|
|
|
229
233
|
}
|
|
230
234
|
const retained = { ...value, ...accumulator.conclusions(this.id) };
|
|
231
235
|
accumulator.extendConclusions(this.id, retained);
|
|
232
|
-
await
|
|
236
|
+
await reconcileAffectedContracts(accumulator, this.id, scope, localChannel, hooks);
|
|
233
237
|
return acceptedOutcome("review", this.id, accumulator, retained);
|
|
234
238
|
}, signal, observer);
|
|
235
239
|
}
|
|
@@ -379,38 +383,9 @@ export class ContractExecution {
|
|
|
379
383
|
retainAdmission(accumulator, this.id, input.leading, input.verificationResidueRecorded);
|
|
380
384
|
const value = input.value(input.leading.value);
|
|
381
385
|
accumulator.extendConclusions(this.id, conclusions(value));
|
|
382
|
-
await
|
|
386
|
+
await reconcileAffectedContracts(accumulator, this.id, input.scope, input.channel, input.hooks);
|
|
383
387
|
return value;
|
|
384
388
|
}
|
|
385
|
-
async reconcileContracts(accumulator, scope, channel, hooks) {
|
|
386
|
-
for (const contract of [...new Set([this.id, ...accumulator.snapshot().affected])]) {
|
|
387
|
-
try {
|
|
388
|
-
scope.signal?.throwIfAborted();
|
|
389
|
-
accumulator.observe({ kind: "stage", contractId: contract, stage: "reconciliation", state: "started" });
|
|
390
|
-
const report = await (async () => {
|
|
391
|
-
try {
|
|
392
|
-
return await completeReconcile({
|
|
393
|
-
scope,
|
|
394
|
-
channel,
|
|
395
|
-
contractId: contract,
|
|
396
|
-
hooks,
|
|
397
|
-
retryHooks: false,
|
|
398
|
-
progress: accumulator,
|
|
399
|
-
});
|
|
400
|
-
}
|
|
401
|
-
finally {
|
|
402
|
-
accumulator.observe({ kind: "stage", contractId: contract, stage: "reconciliation", state: "finished" });
|
|
403
|
-
}
|
|
404
|
-
})();
|
|
405
|
-
void report;
|
|
406
|
-
}
|
|
407
|
-
catch (error) {
|
|
408
|
-
if (!isOperationalStop(error, scope.signal))
|
|
409
|
-
throw error;
|
|
410
|
-
accumulator.recordStop(executionStop(contract, "reconciliation", error, scope.signal));
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
389
|
}
|
|
415
390
|
function changedAmendTerms(before, after) {
|
|
416
391
|
return {
|
|
@@ -55,17 +55,20 @@ declare const reviewRequestSchema: z.ZodPipe<z.ZodObject<{
|
|
|
55
55
|
unsatisfied: "unsatisfied";
|
|
56
56
|
}>;
|
|
57
57
|
summary: z.ZodOptional<z.ZodString>;
|
|
58
|
+
actor: z.ZodOptional<z.ZodString>;
|
|
58
59
|
}, z.core.$strict>, z.ZodTransform<{
|
|
59
60
|
repoRoot: string;
|
|
60
61
|
contractId: import("../core/facts/types.js").ContractId;
|
|
61
62
|
verdict: "satisfied" | "unsatisfied";
|
|
62
63
|
summary?: string | undefined;
|
|
64
|
+
actor?: string | undefined;
|
|
63
65
|
action: "contract.review";
|
|
64
66
|
}, {
|
|
65
67
|
repoRoot: string;
|
|
66
68
|
contractId: import("../core/facts/types.js").ContractId;
|
|
67
69
|
verdict: "satisfied" | "unsatisfied";
|
|
68
70
|
summary?: string | undefined;
|
|
71
|
+
actor?: string | undefined;
|
|
69
72
|
}>>;
|
|
70
73
|
export type ContractRequest = z.infer<typeof auditRequestSchema> | z.infer<typeof deliverRequestSchema> | z.infer<typeof reviewRequestSchema>;
|
|
71
74
|
type DeliverRequest = Extract<ContractRequest, {
|
|
@@ -174,6 +177,7 @@ declare const contractServiceSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
174
177
|
path: z.ZodString;
|
|
175
178
|
}, z.core.$strict>;
|
|
176
179
|
identity: z.ZodObject<{
|
|
180
|
+
note: z.ZodOptional<z.ZodString>;
|
|
177
181
|
tenderSnapshot: z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").SnapshotId, string>>;
|
|
178
182
|
integration: z.ZodObject<{
|
|
179
183
|
predecessor: z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").SnapshotId, string>>;
|
|
@@ -376,7 +380,7 @@ declare const contractServiceSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
376
380
|
contractId: z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").ContractId, string>>;
|
|
377
381
|
reviewFactId: z.ZodString;
|
|
378
382
|
}, z.core.$strict>]>;
|
|
379
|
-
|
|
383
|
+
type ContractService = z.infer<typeof contractServiceSchema>;
|
|
380
384
|
type ContractReference = ContractService | z.infer<typeof materializedHandoffReferenceSchema>;
|
|
381
385
|
export type ContractRequestPort = Readonly<{
|
|
382
386
|
audit(input: AuditRequest & Readonly<{
|
|
@@ -4,7 +4,7 @@ import { AkumaBodyRequestError, requestBodyCommand } from "../akuma/request-rend
|
|
|
4
4
|
import { eraseRequestCommand, } from "../akuma/request-wire.js";
|
|
5
5
|
import { auditReportSchema } from "../protocol/audit.js";
|
|
6
6
|
import { materializedConflictSchema } from "../protocol/deliver.js";
|
|
7
|
-
import {
|
|
7
|
+
import { observationSchema, observeExecution } from "../protocol/execution-observation.js";
|
|
8
8
|
import { contractIdSchema } from "../protocol/operations.js";
|
|
9
9
|
import { deliveryValueSchema } from "./delivery.js";
|
|
10
10
|
import { InvocationAccumulator } from "./invocation.js";
|
|
@@ -27,7 +27,11 @@ const deliverRequestSchema = contractRequestBaseSchema
|
|
|
27
27
|
})
|
|
28
28
|
.transform((request) => ({ action: "contract.deliver", ...request }));
|
|
29
29
|
const reviewRequestSchema = contractRequestBaseSchema
|
|
30
|
-
.extend({
|
|
30
|
+
.extend({
|
|
31
|
+
verdict: z.enum(["satisfied", "unsatisfied"]),
|
|
32
|
+
summary: nonblankStringSchema.optional(),
|
|
33
|
+
actor: z.string().optional(),
|
|
34
|
+
})
|
|
31
35
|
.transform((request) => ({ action: "contract.review", ...request }));
|
|
32
36
|
const auditServiceSchema = z
|
|
33
37
|
.object({
|
|
@@ -250,7 +254,7 @@ export async function requestForwardedContractLive(input) {
|
|
|
250
254
|
value: input.request,
|
|
251
255
|
onProgress: (value) => {
|
|
252
256
|
try {
|
|
253
|
-
observeExecution(input.observe,
|
|
257
|
+
observeExecution(input.observe, observationSchema.parse(value));
|
|
254
258
|
}
|
|
255
259
|
catch {
|
|
256
260
|
observeExecution(input.observe, { kind: "progress-dropped", count: 1 });
|
|
@@ -72,7 +72,7 @@ export type KeiyakuSelectInput = Readonly<{
|
|
|
72
72
|
repo: Repo;
|
|
73
73
|
id: ContractId;
|
|
74
74
|
}>;
|
|
75
|
-
export type ReviewInput = Readonly<{
|
|
75
|
+
export type ReviewInput = ActorOptions & Readonly<{
|
|
76
76
|
verdict: AttestationData["verdict"];
|
|
77
77
|
summary?: string;
|
|
78
78
|
signal?: AbortSignal;
|
|
@@ -11,108 +11,99 @@ export declare const deliveryValueSchema: z.ZodObject<{
|
|
|
11
11
|
filesChanged: z.ZodNumber;
|
|
12
12
|
insertions: z.ZodNumber;
|
|
13
13
|
}, z.core.$strict>>;
|
|
14
|
-
verification: z.ZodOptional<z.ZodObject<{
|
|
15
|
-
mode: z.ZodEnum<{
|
|
16
|
-
reused: "reused";
|
|
17
|
-
ran: "ran";
|
|
18
|
-
}>;
|
|
19
|
-
verdict: z.ZodEnum<{
|
|
20
|
-
satisfied: "satisfied";
|
|
21
|
-
unsatisfied: "unsatisfied";
|
|
22
|
-
}>;
|
|
23
|
-
}, z.core.$strict>>;
|
|
24
14
|
}, z.core.$strict>>;
|
|
25
|
-
verification: z.ZodOptional<z.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}>;
|
|
31
|
-
contractId: z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").ContractId, string>>;
|
|
32
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
33
|
-
kind: z.ZodLiteral<"verification-declaration-invalid">;
|
|
34
|
-
contractId: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").ContractId, string>>>;
|
|
35
|
-
}, z.core.$strict>]>;
|
|
36
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
37
|
-
retry: z.ZodUnion<readonly [z.ZodObject<{
|
|
38
|
-
kind: z.ZodEnum<{
|
|
39
|
-
exhausted: "exhausted";
|
|
40
|
-
collision: "collision";
|
|
41
|
-
}>;
|
|
42
|
-
}, z.core.$strict>, z.ZodObject<{
|
|
43
|
-
kind: z.ZodLiteral<"publication-failed">;
|
|
44
|
-
diagnostic: z.ZodString;
|
|
45
|
-
}, z.core.$strict>]>;
|
|
46
|
-
}, z.core.$strict>, z.ZodUnion<readonly [z.ZodObject<{
|
|
47
|
-
stdout: z.ZodOptional<z.ZodString>;
|
|
48
|
-
stderr: z.ZodOptional<z.ZodString>;
|
|
49
|
-
truncated: z.ZodOptional<z.ZodLiteral<true>>;
|
|
50
|
-
failure: z.ZodEnum<{
|
|
51
|
-
cancelled: "cancelled";
|
|
52
|
-
"unknown-exit": "unknown-exit";
|
|
15
|
+
verification: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
16
|
+
snapshot: z.ZodPipe<z.ZodString, z.ZodTransform<SnapshotId, string>>;
|
|
17
|
+
verdict: z.ZodEnum<{
|
|
18
|
+
satisfied: "satisfied";
|
|
19
|
+
unsatisfied: "unsatisfied";
|
|
53
20
|
}>;
|
|
21
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
22
|
+
kind: z.ZodLiteral<"ran">;
|
|
23
|
+
entry: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").EntryUlid, string>>>;
|
|
54
24
|
}, z.core.$strict>, z.ZodObject<{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
"spawn-error": "spawn-error";
|
|
60
|
-
"candidate-unavailable": "candidate-unavailable";
|
|
25
|
+
snapshot: z.ZodPipe<z.ZodString, z.ZodTransform<SnapshotId, string>>;
|
|
26
|
+
verdict: z.ZodEnum<{
|
|
27
|
+
satisfied: "satisfied";
|
|
28
|
+
unsatisfied: "unsatisfied";
|
|
61
29
|
}>;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
stderr: z.ZodOptional<z.ZodString>;
|
|
66
|
-
truncated: z.ZodOptional<z.ZodLiteral<true>>;
|
|
67
|
-
failure: z.ZodLiteral<"environment-failure">;
|
|
68
|
-
diagnostic: z.ZodString;
|
|
30
|
+
entry: z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").EntryUlid, string>>;
|
|
31
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
32
|
+
kind: z.ZodLiteral<"reused">;
|
|
69
33
|
}, z.core.$strict>, z.ZodObject<{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
34
|
+
kind: z.ZodLiteral<"stopped">;
|
|
35
|
+
stop: z.ZodUnion<readonly [z.ZodObject<{
|
|
36
|
+
refusal: z.ZodUnion<readonly [z.ZodObject<{
|
|
37
|
+
kind: z.ZodEnum<{
|
|
38
|
+
terminal: "terminal";
|
|
39
|
+
"contract-missing": "contract-missing";
|
|
40
|
+
}>;
|
|
41
|
+
contractId: z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").ContractId, string>>;
|
|
42
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
43
|
+
kind: z.ZodLiteral<"verification-declaration-invalid">;
|
|
44
|
+
contractId: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").ContractId, string>>>;
|
|
45
|
+
}, z.core.$strict>]>;
|
|
81
46
|
}, z.core.$strict>, z.ZodObject<{
|
|
47
|
+
retry: z.ZodUnion<readonly [z.ZodObject<{
|
|
48
|
+
kind: z.ZodEnum<{
|
|
49
|
+
exhausted: "exhausted";
|
|
50
|
+
collision: "collision";
|
|
51
|
+
}>;
|
|
52
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
53
|
+
kind: z.ZodLiteral<"publication-failed">;
|
|
54
|
+
diagnostic: z.ZodString;
|
|
55
|
+
}, z.core.$strict>]>;
|
|
56
|
+
}, z.core.$strict>, z.ZodUnion<readonly [z.ZodObject<{
|
|
82
57
|
stdout: z.ZodOptional<z.ZodString>;
|
|
83
58
|
stderr: z.ZodOptional<z.ZodString>;
|
|
84
|
-
truncated: z.ZodOptional<z.
|
|
85
|
-
|
|
59
|
+
truncated: z.ZodOptional<z.ZodLiteral<true>>;
|
|
60
|
+
failure: z.ZodEnum<{
|
|
61
|
+
cancelled: "cancelled";
|
|
62
|
+
"unknown-exit": "unknown-exit";
|
|
63
|
+
}>;
|
|
86
64
|
}, z.core.$strict>, z.ZodObject<{
|
|
87
65
|
stdout: z.ZodOptional<z.ZodString>;
|
|
88
66
|
stderr: z.ZodOptional<z.ZodString>;
|
|
89
|
-
truncated: z.ZodOptional<z.
|
|
90
|
-
|
|
67
|
+
truncated: z.ZodOptional<z.ZodLiteral<true>>;
|
|
68
|
+
failure: z.ZodEnum<{
|
|
69
|
+
"spawn-error": "spawn-error";
|
|
70
|
+
"candidate-unavailable": "candidate-unavailable";
|
|
71
|
+
}>;
|
|
72
|
+
diagnostic: z.ZodString;
|
|
91
73
|
}, z.core.$strict>, z.ZodObject<{
|
|
92
|
-
|
|
74
|
+
stdout: z.ZodOptional<z.ZodString>;
|
|
75
|
+
stderr: z.ZodOptional<z.ZodString>;
|
|
76
|
+
truncated: z.ZodOptional<z.ZodLiteral<true>>;
|
|
77
|
+
failure: z.ZodLiteral<"environment-failure">;
|
|
93
78
|
diagnostic: z.ZodString;
|
|
94
|
-
}, z.core.$strict
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
79
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
80
|
+
stdout: z.ZodOptional<z.ZodString>;
|
|
81
|
+
stderr: z.ZodOptional<z.ZodString>;
|
|
82
|
+
truncated: z.ZodOptional<z.ZodLiteral<true>>;
|
|
83
|
+
failure: z.ZodLiteral<"environment-failure">;
|
|
84
|
+
name: z.ZodString;
|
|
85
|
+
detail: z.ZodUnion<readonly [z.ZodObject<{
|
|
86
|
+
kind: z.ZodLiteral<"exit">;
|
|
87
|
+
code: z.ZodNumber;
|
|
88
|
+
stdout: z.ZodString;
|
|
89
|
+
stderr: z.ZodString;
|
|
90
|
+
truncated: z.ZodBoolean;
|
|
91
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
92
|
+
stdout: z.ZodOptional<z.ZodString>;
|
|
93
|
+
stderr: z.ZodOptional<z.ZodString>;
|
|
94
|
+
truncated: z.ZodOptional<z.ZodBoolean>;
|
|
95
|
+
kind: z.ZodLiteral<"timeout">;
|
|
96
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
97
|
+
stdout: z.ZodOptional<z.ZodString>;
|
|
98
|
+
stderr: z.ZodOptional<z.ZodString>;
|
|
99
|
+
truncated: z.ZodOptional<z.ZodBoolean>;
|
|
100
|
+
kind: z.ZodLiteral<"unknown-exit">;
|
|
101
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
102
|
+
kind: z.ZodLiteral<"spawn-error">;
|
|
103
|
+
diagnostic: z.ZodString;
|
|
104
|
+
}, z.core.$strict>]>;
|
|
105
|
+
}, z.core.$strict>]>]>;
|
|
106
|
+
}, z.core.$strict>], "kind">>;
|
|
116
107
|
placement: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
|
|
117
108
|
refusal: z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodObject<{
|
|
118
109
|
kind: z.ZodEnum<{
|
|
@@ -235,7 +226,14 @@ export declare const deliveryValueSchema: z.ZodObject<{
|
|
|
235
226
|
"already-admitted": "already-admitted";
|
|
236
227
|
}>;
|
|
237
228
|
fact: z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").EntryUlid, string>>;
|
|
229
|
+
reusedIntegration: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<SnapshotId, string>>>;
|
|
238
230
|
}, z.core.$strict>;
|
|
231
|
+
contentChange: z.ZodOptional<z.ZodObject<{
|
|
232
|
+
kind: z.ZodLiteral<"candidate-content-changed">;
|
|
233
|
+
target: z.ZodOptional<z.ZodString>;
|
|
234
|
+
previousChange: z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").ChangeId, string>>;
|
|
235
|
+
currentChange: z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").ChangeId, string>>;
|
|
236
|
+
}, z.core.$strict>>;
|
|
239
237
|
continuation: z.ZodOptional<z.ZodObject<{
|
|
240
238
|
claimed: z.ZodReadonly<z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<import("../core/facts/types.js").ContractId, string>>>>;
|
|
241
239
|
stopped: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
@@ -511,6 +509,7 @@ export declare const deliveryValueSchema: z.ZodObject<{
|
|
|
511
509
|
}, z.core.$strict>]>;
|
|
512
510
|
}, z.core.$strict>>>;
|
|
513
511
|
}, z.core.$strict>>;
|
|
512
|
+
note: z.ZodOptional<z.ZodString>;
|
|
514
513
|
tenderSnapshot: z.ZodPipe<z.ZodString, z.ZodTransform<SnapshotId, string>>;
|
|
515
514
|
integration: z.ZodObject<{
|
|
516
515
|
predecessor: z.ZodPipe<z.ZodString, z.ZodTransform<SnapshotId, string>>;
|
|
@@ -526,18 +525,17 @@ export type DeliveryValue = z.infer<typeof deliveryValueSchema>;
|
|
|
526
525
|
declare class DeliveryHandle {
|
|
527
526
|
private readonly readDiff;
|
|
528
527
|
readonly leading?: DeliveryValue["leading"];
|
|
528
|
+
readonly contentChange?: DeliveryValue["contentChange"];
|
|
529
529
|
readonly completion?: DeliveryValue["completion"];
|
|
530
530
|
readonly verification?: DeliveryValue["verification"];
|
|
531
|
-
readonly verificationReuse?: DeliveryValue["verificationReuse"];
|
|
532
|
-
readonly verificationSubject?: DeliveryValue["verificationSubject"];
|
|
533
|
-
readonly verificationSummary?: DeliveryValue["verificationSummary"];
|
|
534
531
|
readonly placement?: DeliveryValue["placement"];
|
|
535
532
|
readonly continuation?: DeliveryValue["continuation"];
|
|
536
533
|
readonly tenderSnapshot: SnapshotId;
|
|
534
|
+
readonly note?: string;
|
|
537
535
|
readonly integration: DeliveryValue["integration"];
|
|
538
536
|
readonly method: DeliveryValue["method"];
|
|
539
537
|
readonly policy: DeliveryValue["policy"];
|
|
540
|
-
constructor(identity: Pick<DeliveryValue, "tenderSnapshot" | "integration" | "method" | "policy">, readDiff: () => Promise<string | null>, outcomes?: Partial<Pick<DeliveryValue, "leading" | "
|
|
538
|
+
constructor(identity: Pick<DeliveryValue, "tenderSnapshot" | "integration" | "method" | "policy">, readDiff: () => Promise<string | null>, outcomes?: Partial<Pick<DeliveryValue, "leading" | "contentChange" | "completion" | "verification" | "placement" | "continuation">>);
|
|
541
539
|
diff(): Promise<string | null>;
|
|
542
540
|
}
|
|
543
541
|
export type Delivery = DeliveryHandle;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { completionEvidenceSchema } from "../protocol/completion.js";
|
|
2
2
|
import { deliverLeadingSchema } from "../protocol/deliver.js";
|
|
3
|
-
import { deliverDataSchema, deliveryDiffOperation } from "../protocol/operations.js";
|
|
3
|
+
import { candidateContentChangeSchema, deliverDataSchema, deliveryDiffOperation, } from "../protocol/operations.js";
|
|
4
4
|
import { continuationReportSchema } from "./continuation.js";
|
|
5
5
|
export const deliveryValueSchema = completionEvidenceSchema
|
|
6
6
|
.extend({
|
|
7
7
|
...deliverDataSchema.shape,
|
|
8
8
|
leading: deliverLeadingSchema,
|
|
9
|
+
contentChange: candidateContentChangeSchema.optional(),
|
|
9
10
|
continuation: continuationReportSchema.optional(),
|
|
10
11
|
})
|
|
11
12
|
.strict();
|
|
@@ -7,8 +7,6 @@ export declare function actorOption(actor: unknown): Readonly<{
|
|
|
7
7
|
}>;
|
|
8
8
|
export declare function requireMarkdown(value: unknown, label?: string): string;
|
|
9
9
|
export declare function requireInput(value: unknown, label: string, allowed?: readonly string[]): Record<string, unknown>;
|
|
10
|
-
/** Shared public-input failure path for operation owners. */
|
|
11
|
-
export declare function invalidInput(message: string): never;
|
|
12
10
|
export declare function taskOption(value: unknown): TaskId | undefined;
|
|
13
11
|
export declare function optionalNonblank(value: unknown, label: string): string | undefined;
|
|
14
12
|
export declare function optionalBoolean(value: unknown, label: string): boolean | undefined;
|
|
@@ -32,10 +32,6 @@ export function requireInput(value, label, allowed) {
|
|
|
32
32
|
}
|
|
33
33
|
return value;
|
|
34
34
|
}
|
|
35
|
-
/** Shared public-input failure path for operation owners. */
|
|
36
|
-
export function invalidInput(message) {
|
|
37
|
-
throw new TypeError(message);
|
|
38
|
-
}
|
|
39
35
|
export function taskOption(value) {
|
|
40
36
|
if (value === undefined)
|
|
41
37
|
return undefined;
|
|
@@ -3,21 +3,10 @@ import { encodeEntry } from "../core/facts/codec.js";
|
|
|
3
3
|
import { AuthorityCorruptionError } from "../core/facts/errors.js";
|
|
4
4
|
import { observeExecution, } from "../protocol/execution-observation.js";
|
|
5
5
|
import { reconcileLagScope } from "./reconcile.js";
|
|
6
|
-
const CANDIDATE_CONCLUSION_KEYS = [
|
|
7
|
-
"completion",
|
|
8
|
-
"verification",
|
|
9
|
-
"verificationReuse",
|
|
10
|
-
"verificationSubject",
|
|
11
|
-
"verificationSummary",
|
|
12
|
-
"placement",
|
|
13
|
-
];
|
|
6
|
+
const CANDIDATE_CONCLUSION_KEYS = ["completion", "verification", "placement"];
|
|
14
7
|
function entryKey(fact) {
|
|
15
8
|
return `${fact.contract}\u0000${fact.entry}`;
|
|
16
9
|
}
|
|
17
|
-
/** The owner codec's canonical bytes: identity is (contract, entry), the payload is retained whole. */
|
|
18
|
-
function entryBytes(fact) {
|
|
19
|
-
return encodeEntry(fact);
|
|
20
|
-
}
|
|
21
10
|
/**
|
|
22
11
|
* The one invocation accumulator. It exists before any admission-capable await, satisfies the lower
|
|
23
12
|
* Protocol progress sink, and holds every confirmed publication, candidate conclusion and physical
|
|
@@ -54,7 +43,7 @@ export class InvocationAccumulator {
|
|
|
54
43
|
const incoming = new Map();
|
|
55
44
|
for (const fact of facts) {
|
|
56
45
|
const key = entryKey(fact);
|
|
57
|
-
const bytes =
|
|
46
|
+
const bytes = encodeEntry(fact);
|
|
58
47
|
const previous = incoming.get(key)?.bytes ?? this.entries.get(key);
|
|
59
48
|
if (previous !== undefined && previous !== bytes)
|
|
60
49
|
throw new AuthorityCorruptionError("conflicting invocation receipt");
|
|
@@ -88,7 +77,7 @@ export class InvocationAccumulator {
|
|
|
88
77
|
this.recordResidue(step.state.id, step);
|
|
89
78
|
}
|
|
90
79
|
hasFact(fact) {
|
|
91
|
-
return this.entries.get(entryKey(fact)) ===
|
|
80
|
+
return this.entries.get(entryKey(fact)) === encodeEntry(fact);
|
|
92
81
|
}
|
|
93
82
|
head(contract) {
|
|
94
83
|
return this.admittedHeads.get(contract);
|
|
@@ -277,14 +266,3 @@ export class InvocationAccumulator {
|
|
|
277
266
|
this.affectedContracts.add(contract);
|
|
278
267
|
}
|
|
279
268
|
}
|
|
280
|
-
export function physicalOf(snapshot) {
|
|
281
|
-
const effects = [];
|
|
282
|
-
const lag = [];
|
|
283
|
-
for (const record of snapshot.effects) {
|
|
284
|
-
if (record.kind === "reconciliation-effect" && record.effect.kind !== "contract-file")
|
|
285
|
-
effects.push(record.effect);
|
|
286
|
-
else if (record.kind === "reconciliation-lag" && record.lag.kind !== "contract-file-failed")
|
|
287
|
-
lag.push(record.lag);
|
|
288
|
-
}
|
|
289
|
-
return { effects, lag };
|
|
290
|
-
}
|