@riddledc/riddle-proof-packs 0.4.6 → 0.4.7
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/README.md +51 -0
- package/bin/riddle-proof-durable-candidate-plan +4 -0
- package/dist/chunk-VFPSPQD7.js +219 -0
- package/dist/durableCandidatePlan-Dv2P33Wg.d.cts +77 -0
- package/dist/durableCandidatePlan-Dv2P33Wg.d.ts +77 -0
- package/dist/durableCandidatePlanCli.cjs +445 -0
- package/dist/durableCandidatePlanCli.d.cts +32 -0
- package/dist/durableCandidatePlanCli.d.ts +32 -0
- package/dist/durableCandidatePlanCli.js +177 -0
- package/dist/index.cjs +216 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +8 -0
- package/package.json +3 -2
- package/packs/audio-mix/ratchet-method.md +12 -0
- package/packs/neon-step-sequencer/README.md +4 -0
- package/packs/neon-step-sequencer/case-study/findings.md +11 -0
- package/packs/neon-step-sequencer/case-study/ratchet-card.md +2 -1
- package/packs/neon-step-sequencer/case-study/ratchet-log.md +57 -0
- package/packs/neon-step-sequencer/examples/README.md +3 -1
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/artifact-manifest.json +32 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/console.json +4 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/dom-summary.json +40 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/durable-candidate-patch-plan.json +69 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/durable-candidate-patch-plan.md +29 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/human-review-packet.json +801 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/human-review-packet.md +52 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/profile-result.json +5078 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/proof.json +5078 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/screenshots/lilarcade-neon-fast-mix-health-desktop-neon-fast-mix-health.png +0 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/screenshots/lilarcade-neon-fast-mix-health-desktop.png +0 -0
- package/packs/neon-step-sequencer/examples/run-008-durable-mix-patch-handoff/summary.md +39 -0
package/README.md
CHANGED
|
@@ -32,6 +32,12 @@ Reusable starter profile definitions and proof-pack metadata for Riddle Proof.
|
|
|
32
32
|
- Formats a compact Markdown handoff with recommendation, objective receipts, ranking role, proof boundary, listening prompts, and caveats.
|
|
33
33
|
- `createHumanReviewPacketArtifacts(proofOrPacket, options)`:
|
|
34
34
|
- Returns `{ packet, json, markdown }` for storing a standalone review packet next to a proof run.
|
|
35
|
+
- `createDurableCandidatePatchPlan(proofOrPacket, options)`:
|
|
36
|
+
- Validates an explicitly applied `human_review_packet` and returns a durable patch handoff plan.
|
|
37
|
+
- `formatDurableCandidatePatchPlanMarkdown(plan, options)`:
|
|
38
|
+
- Formats the durable handoff without treating approval, ranking, or source application as proof of subjective taste.
|
|
39
|
+
- `createDurableCandidatePatchPlanArtifacts(proofOrPacket, options)`:
|
|
40
|
+
- Returns `{ plan, json, markdown }` for storing a durable source/config handoff next to a proof run.
|
|
35
41
|
|
|
36
42
|
## Proof claims and evidence roles
|
|
37
43
|
|
|
@@ -144,6 +150,51 @@ await fs.promises.writeFile("human-review-packet.json", artifacts.json);
|
|
|
144
150
|
await fs.promises.writeFile("human-review-packet.md", artifacts.markdown);
|
|
145
151
|
```
|
|
146
152
|
|
|
153
|
+
### Durable candidate patch handoff
|
|
154
|
+
|
|
155
|
+
A human-review packet is still not a source edit. Durable patch handoff is the next gate after explicit approval:
|
|
156
|
+
|
|
157
|
+
1. A bounded proof loop produces a supported candidate.
|
|
158
|
+
2. A human or visible surrogate approval mode sets `applyBest`.
|
|
159
|
+
3. The packet reports `candidate_applied_for_listening_review`.
|
|
160
|
+
4. A durable candidate plan validates that the packet is no longer transient.
|
|
161
|
+
5. The app/repo applies a scoped config/source patch.
|
|
162
|
+
6. A final `current_target` proof verifies the running app sees the durable state.
|
|
163
|
+
|
|
164
|
+
The durable plan refuses packets that still say `candidate_ready_for_listening_review`, packets without approval metadata, packets whose `candidateActionsAreTransient` flag is still `true`, and packets that lost the listening-review caveat.
|
|
165
|
+
|
|
166
|
+
From the CLI:
|
|
167
|
+
|
|
168
|
+
```sh
|
|
169
|
+
riddle-proof-durable-candidate-plan \
|
|
170
|
+
--proof artifacts/riddle-proof/neon-approved-candidate/proof.json \
|
|
171
|
+
--output artifacts/riddle-proof/neon-approved-candidate \
|
|
172
|
+
--source-file src/Games/songs/neon-approved-mix-overrides.json \
|
|
173
|
+
--require-mix-profile
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
This writes `durable-candidate-patch-plan.json` and `durable-candidate-patch-plan.md`. If the packet is not ready for durable application, the plan is still written with `status: "not_ready_for_durable_patch"` and the CLI exits nonzero.
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
import {
|
|
180
|
+
createDurableCandidatePatchPlanArtifacts,
|
|
181
|
+
} from "@riddledc/riddle-proof-packs";
|
|
182
|
+
|
|
183
|
+
const proof = JSON.parse(await fs.promises.readFile("proof.json", "utf8"));
|
|
184
|
+
const artifacts = createDurableCandidatePatchPlanArtifacts(proof, {
|
|
185
|
+
title: "Neon Durable Candidate Patch Plan",
|
|
186
|
+
sourceFile: "src/Games/songs/neon-approved-mix-overrides.json",
|
|
187
|
+
requireMixProfileId: true,
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
if (!artifacts.plan.ok) {
|
|
191
|
+
throw new Error(`not ready for durable patch: ${artifacts.plan.errors.join(", ")}`);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
await fs.promises.writeFile("durable-candidate-patch-plan.json", artifacts.json);
|
|
195
|
+
await fs.promises.writeFile("durable-candidate-patch-plan.md", artifacts.markdown);
|
|
196
|
+
```
|
|
197
|
+
|
|
147
198
|
## Usage
|
|
148
199
|
|
|
149
200
|
```ts
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import {
|
|
2
|
+
requireHumanReviewPacket
|
|
3
|
+
} from "./chunk-SAE6HFAG.js";
|
|
4
|
+
|
|
5
|
+
// src/durableCandidatePlan.ts
|
|
6
|
+
var DEFAULT_APPROVAL_MODES = ["operator_approved", "mixing_canon_surrogate"];
|
|
7
|
+
var DEFAULT_ACTION_TYPES = ["set_mixer_level"];
|
|
8
|
+
var isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
9
|
+
var asRecord = (value) => isRecord(value) ? value : {};
|
|
10
|
+
var getPath = (value, path) => {
|
|
11
|
+
let cursor = value;
|
|
12
|
+
for (const part of path.split(".")) {
|
|
13
|
+
if (!isRecord(cursor)) return void 0;
|
|
14
|
+
cursor = cursor[part];
|
|
15
|
+
}
|
|
16
|
+
return cursor;
|
|
17
|
+
};
|
|
18
|
+
var asFiniteNumber = (value) => {
|
|
19
|
+
if (value === null || value === void 0 || value === "") return null;
|
|
20
|
+
if (typeof value !== "number" && typeof value !== "string") return null;
|
|
21
|
+
const numeric = Number(value);
|
|
22
|
+
return Number.isFinite(numeric) ? Number(numeric.toFixed(4)) : null;
|
|
23
|
+
};
|
|
24
|
+
var formatValue = (value) => {
|
|
25
|
+
if (value === null || value === void 0 || value === "") return "not captured";
|
|
26
|
+
if (typeof value === "number") return Number.isInteger(value) ? String(value) : String(Number(value.toFixed(4)));
|
|
27
|
+
if (typeof value === "boolean") return value ? "true" : "false";
|
|
28
|
+
return String(value);
|
|
29
|
+
};
|
|
30
|
+
var formatCodeValue = (value) => `\`${formatValue(value)}\``;
|
|
31
|
+
var selectedTargetLabel = (packet) => {
|
|
32
|
+
const value = getPath(packet, "target.selectedSong.selectedSong") ?? getPath(packet, "target.routeState.selectedSong") ?? getPath(packet, "target.label");
|
|
33
|
+
return typeof value === "string" && value.trim() ? value : null;
|
|
34
|
+
};
|
|
35
|
+
var selectedRoute = (packet) => {
|
|
36
|
+
const value = getPath(packet, "target.routeState.route") ?? getPath(packet, "target.routeState.path") ?? getPath(packet, "target.route");
|
|
37
|
+
return typeof value === "string" && value.trim() ? value : null;
|
|
38
|
+
};
|
|
39
|
+
var selectedMixProfileId = (packet) => {
|
|
40
|
+
const value = getPath(packet, "recommendation.candidate.summary.mixProfile.id") ?? getPath(packet, "baseline.mixProfile.id") ?? getPath(packet, "target.mixProfile.id");
|
|
41
|
+
return typeof value === "string" && value.trim() ? value : null;
|
|
42
|
+
};
|
|
43
|
+
function createDurableCandidatePatchPlan(proofOrPacket, options = {}) {
|
|
44
|
+
const packet = requireHumanReviewPacket(proofOrPacket);
|
|
45
|
+
const recommendation = asRecord(packet.recommendation);
|
|
46
|
+
const candidate = asRecord(recommendation.candidate);
|
|
47
|
+
const action = asRecord(candidate.action);
|
|
48
|
+
const guardrails = asRecord(packet.guardrails);
|
|
49
|
+
const request = asRecord(packet.request);
|
|
50
|
+
const approval = asRecord(request.approval);
|
|
51
|
+
const ranking = asRecord(packet.ranking);
|
|
52
|
+
const proofBoundary = packet.proofBoundary;
|
|
53
|
+
const target = {
|
|
54
|
+
label: selectedTargetLabel(packet),
|
|
55
|
+
route: selectedRoute(packet),
|
|
56
|
+
mixProfileId: selectedMixProfileId(packet)
|
|
57
|
+
};
|
|
58
|
+
const actionType = action.type;
|
|
59
|
+
const actionTrack = action.track;
|
|
60
|
+
const from = asFiniteNumber(action.from);
|
|
61
|
+
const to = asFiniteNumber(action.to);
|
|
62
|
+
const numericDelta = asFiniteNumber(action.delta);
|
|
63
|
+
const delta = numericDelta ?? (from !== null && to !== null ? asFiniteNumber(to - from) : null);
|
|
64
|
+
const allowedApprovalModes = new Set(options.allowedApprovalModes ?? DEFAULT_APPROVAL_MODES);
|
|
65
|
+
const allowedActionTypes = new Set(options.allowedActionTypes ?? DEFAULT_ACTION_TYPES);
|
|
66
|
+
const errors = [];
|
|
67
|
+
if (packet.status !== "candidate_applied_for_listening_review") {
|
|
68
|
+
errors.push("packet status must be candidate_applied_for_listening_review");
|
|
69
|
+
}
|
|
70
|
+
if (recommendation.action !== "listen_to_applied_candidate") {
|
|
71
|
+
errors.push("recommendation action must be listen_to_applied_candidate");
|
|
72
|
+
}
|
|
73
|
+
if (guardrails.approvedCandidateApplied !== true) {
|
|
74
|
+
errors.push("approvedCandidateApplied guardrail must be true");
|
|
75
|
+
}
|
|
76
|
+
if (request.candidateActionsAreTransient !== false) {
|
|
77
|
+
errors.push("candidateActionsAreTransient must be false before a durable patch handoff");
|
|
78
|
+
}
|
|
79
|
+
if (!approval.mode) {
|
|
80
|
+
errors.push("approval mode is required");
|
|
81
|
+
} else if (!allowedApprovalModes.has(String(approval.mode))) {
|
|
82
|
+
errors.push(`approval mode ${formatValue(approval.mode)} is not allowed for durable patch handoff`);
|
|
83
|
+
}
|
|
84
|
+
if (ranking.role !== "review_order_only") {
|
|
85
|
+
errors.push("ranking role must remain review_order_only");
|
|
86
|
+
}
|
|
87
|
+
if (!String(proofBoundary ?? "").includes("musical taste still requires listening review")) {
|
|
88
|
+
errors.push("proof boundary must preserve the listening-review caveat");
|
|
89
|
+
}
|
|
90
|
+
if (!actionType || !allowedActionTypes.has(String(actionType))) {
|
|
91
|
+
errors.push(`action type ${formatValue(actionType)} is not allowed for durable patch handoff`);
|
|
92
|
+
}
|
|
93
|
+
if (typeof actionTrack !== "string" || !actionTrack.trim()) {
|
|
94
|
+
errors.push("candidate action track is required");
|
|
95
|
+
}
|
|
96
|
+
if (to === null) {
|
|
97
|
+
errors.push("candidate action target value is required");
|
|
98
|
+
}
|
|
99
|
+
if (String(actionType) === "set_mixer_level" && (to === null || to < 0 || to > 1.5)) {
|
|
100
|
+
errors.push("set_mixer_level target must be between 0 and 1.5");
|
|
101
|
+
}
|
|
102
|
+
if (options.requireTargetLabel !== false && !target.label) {
|
|
103
|
+
errors.push("target label is required for a scoped durable patch handoff");
|
|
104
|
+
}
|
|
105
|
+
if (options.requireMixProfileId === true && !target.mixProfileId) {
|
|
106
|
+
errors.push("mixProfileId is required for this durable patch handoff");
|
|
107
|
+
}
|
|
108
|
+
const actionShape = {
|
|
109
|
+
type: actionType ?? null,
|
|
110
|
+
track: actionTrack ?? null,
|
|
111
|
+
from,
|
|
112
|
+
to,
|
|
113
|
+
delta
|
|
114
|
+
};
|
|
115
|
+
const mixerLevels = !errors.length && String(actionType) === "set_mixer_level" && typeof actionTrack === "string" && to !== null ? { [actionTrack]: to } : null;
|
|
116
|
+
return {
|
|
117
|
+
version: "riddle-proof.durable-candidate-patch-plan.v1",
|
|
118
|
+
kind: "durable_candidate_patch_plan",
|
|
119
|
+
status: errors.length ? "not_ready_for_durable_patch" : "ready_for_durable_patch",
|
|
120
|
+
ok: errors.length === 0,
|
|
121
|
+
errors,
|
|
122
|
+
source: {
|
|
123
|
+
packetStatus: packet.status ?? null,
|
|
124
|
+
recommendationAction: recommendation.action ?? null,
|
|
125
|
+
rankingRole: ranking.role ?? null,
|
|
126
|
+
proofBoundary: proofBoundary ?? null
|
|
127
|
+
},
|
|
128
|
+
target,
|
|
129
|
+
candidate: {
|
|
130
|
+
label: candidate.label ?? null,
|
|
131
|
+
action: actionShape
|
|
132
|
+
},
|
|
133
|
+
approval: {
|
|
134
|
+
mode: approval.mode ?? null,
|
|
135
|
+
approvedBy: approval.approvedBy ?? null,
|
|
136
|
+
basis: approval.basis ?? null
|
|
137
|
+
},
|
|
138
|
+
durableEdit: errors.length ? null : {
|
|
139
|
+
sourceFile: options.sourceFile ?? null,
|
|
140
|
+
target,
|
|
141
|
+
action: actionShape,
|
|
142
|
+
mixerLevels,
|
|
143
|
+
provenance: {
|
|
144
|
+
humanReviewPacketStatus: packet.status ?? null,
|
|
145
|
+
recommendationLabel: candidate.label ?? null,
|
|
146
|
+
approvalMode: approval.mode ?? null,
|
|
147
|
+
approvedBy: approval.approvedBy ?? null,
|
|
148
|
+
basis: approval.basis ?? null
|
|
149
|
+
},
|
|
150
|
+
doesNotProve: [
|
|
151
|
+
"subjective mix quality",
|
|
152
|
+
"that the approval surrogate is a real listener preference",
|
|
153
|
+
"all possible candidate edits"
|
|
154
|
+
]
|
|
155
|
+
},
|
|
156
|
+
boundary: "This is a durable patch handoff for an approved listening-review candidate. It does not prove subjective mix quality.",
|
|
157
|
+
caveats: [
|
|
158
|
+
"A durable patch plan is not a taste verdict.",
|
|
159
|
+
"Ranking orders review only; it is not a universal mix-quality score.",
|
|
160
|
+
"Run a final current-target proof after the durable edit lands."
|
|
161
|
+
]
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function formatDurableCandidatePatchPlanMarkdown(plan, options = {}) {
|
|
165
|
+
if (plan.kind !== "durable_candidate_patch_plan") {
|
|
166
|
+
throw new Error("Expected a durable_candidate_patch_plan");
|
|
167
|
+
}
|
|
168
|
+
const lines = [
|
|
169
|
+
`# ${options.title ?? "Durable Candidate Patch Plan"}`,
|
|
170
|
+
"",
|
|
171
|
+
`- status: ${formatCodeValue(plan.status)}`,
|
|
172
|
+
`- ok: ${formatCodeValue(plan.ok)}`,
|
|
173
|
+
`- target_label: ${formatValue(plan.target.label)}`,
|
|
174
|
+
`- mix_profile_id: ${formatCodeValue(plan.target.mixProfileId)}`,
|
|
175
|
+
`- source_file: ${formatCodeValue(plan.durableEdit?.sourceFile)}`,
|
|
176
|
+
"",
|
|
177
|
+
"## Candidate",
|
|
178
|
+
"",
|
|
179
|
+
`- label: ${formatCodeValue(plan.candidate.label)}`,
|
|
180
|
+
`- action: ${formatCodeValue(`${formatValue(plan.candidate.action.type)} ${formatValue(plan.candidate.action.track)}: ${formatValue(plan.candidate.action.from)} -> ${formatValue(plan.candidate.action.to)} (${formatValue(plan.candidate.action.delta)})`)}`,
|
|
181
|
+
"",
|
|
182
|
+
"## Approval Boundary",
|
|
183
|
+
"",
|
|
184
|
+
`- approval_mode: ${formatCodeValue(plan.approval.mode)}`,
|
|
185
|
+
`- approved_by: ${formatCodeValue(plan.approval.approvedBy)}`,
|
|
186
|
+
`- basis: ${formatValue(plan.approval.basis)}`,
|
|
187
|
+
`- boundary: ${formatValue(plan.boundary)}`,
|
|
188
|
+
"",
|
|
189
|
+
"## Durable Edit",
|
|
190
|
+
"",
|
|
191
|
+
`- mixer_levels: ${formatCodeValue(JSON.stringify(plan.durableEdit?.mixerLevels ?? null))}`
|
|
192
|
+
];
|
|
193
|
+
if (plan.errors.length) {
|
|
194
|
+
lines.push("", "## Errors", "");
|
|
195
|
+
for (const error of plan.errors) lines.push(`- ${error}`);
|
|
196
|
+
}
|
|
197
|
+
lines.push("", "## Caveats", "");
|
|
198
|
+
for (const caveat of plan.caveats) lines.push(`- ${caveat}`);
|
|
199
|
+
return `${lines.join("\n")}
|
|
200
|
+
`;
|
|
201
|
+
}
|
|
202
|
+
function createDurableCandidatePatchPlanArtifacts(proofOrPacket, options = {}) {
|
|
203
|
+
const plan = createDurableCandidatePatchPlan(proofOrPacket, options);
|
|
204
|
+
const markdown = formatDurableCandidatePatchPlanMarkdown(plan, {
|
|
205
|
+
title: options.title
|
|
206
|
+
});
|
|
207
|
+
return {
|
|
208
|
+
plan,
|
|
209
|
+
json: `${JSON.stringify(plan, null, 2)}
|
|
210
|
+
`,
|
|
211
|
+
markdown
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export {
|
|
216
|
+
createDurableCandidatePatchPlan,
|
|
217
|
+
formatDurableCandidatePatchPlanMarkdown,
|
|
218
|
+
createDurableCandidatePatchPlanArtifacts
|
|
219
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
interface DurableCandidatePatchPlanOptions {
|
|
2
|
+
title?: string;
|
|
3
|
+
sourceFile?: string;
|
|
4
|
+
requireTargetLabel?: boolean;
|
|
5
|
+
requireMixProfileId?: boolean;
|
|
6
|
+
allowedApprovalModes?: readonly string[];
|
|
7
|
+
allowedActionTypes?: readonly string[];
|
|
8
|
+
}
|
|
9
|
+
interface DurableCandidatePatchPlanArtifacts {
|
|
10
|
+
plan: DurableCandidatePatchPlan;
|
|
11
|
+
json: string;
|
|
12
|
+
markdown: string;
|
|
13
|
+
}
|
|
14
|
+
type DurableCandidatePatchPlan = {
|
|
15
|
+
version: "riddle-proof.durable-candidate-patch-plan.v1";
|
|
16
|
+
kind: "durable_candidate_patch_plan";
|
|
17
|
+
status: "ready_for_durable_patch" | "not_ready_for_durable_patch";
|
|
18
|
+
ok: boolean;
|
|
19
|
+
errors: string[];
|
|
20
|
+
source: {
|
|
21
|
+
packetStatus: unknown;
|
|
22
|
+
recommendationAction: unknown;
|
|
23
|
+
rankingRole: unknown;
|
|
24
|
+
proofBoundary: unknown;
|
|
25
|
+
};
|
|
26
|
+
target: {
|
|
27
|
+
label: string | null;
|
|
28
|
+
route: string | null;
|
|
29
|
+
mixProfileId: string | null;
|
|
30
|
+
};
|
|
31
|
+
candidate: {
|
|
32
|
+
label: unknown;
|
|
33
|
+
action: {
|
|
34
|
+
type: unknown;
|
|
35
|
+
track: unknown;
|
|
36
|
+
from: number | null;
|
|
37
|
+
to: number | null;
|
|
38
|
+
delta: number | null;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
approval: {
|
|
42
|
+
mode: unknown;
|
|
43
|
+
approvedBy: unknown;
|
|
44
|
+
basis: unknown;
|
|
45
|
+
};
|
|
46
|
+
durableEdit: null | {
|
|
47
|
+
sourceFile: string | null;
|
|
48
|
+
target: {
|
|
49
|
+
label: string | null;
|
|
50
|
+
route: string | null;
|
|
51
|
+
mixProfileId: string | null;
|
|
52
|
+
};
|
|
53
|
+
action: {
|
|
54
|
+
type: unknown;
|
|
55
|
+
track: unknown;
|
|
56
|
+
from: number | null;
|
|
57
|
+
to: number | null;
|
|
58
|
+
delta: number | null;
|
|
59
|
+
};
|
|
60
|
+
mixerLevels: Record<string, number> | null;
|
|
61
|
+
provenance: {
|
|
62
|
+
humanReviewPacketStatus: unknown;
|
|
63
|
+
recommendationLabel: unknown;
|
|
64
|
+
approvalMode: unknown;
|
|
65
|
+
approvedBy: unknown;
|
|
66
|
+
basis: unknown;
|
|
67
|
+
};
|
|
68
|
+
doesNotProve: string[];
|
|
69
|
+
};
|
|
70
|
+
boundary: string;
|
|
71
|
+
caveats: string[];
|
|
72
|
+
};
|
|
73
|
+
declare function createDurableCandidatePatchPlan(proofOrPacket: unknown, options?: DurableCandidatePatchPlanOptions): DurableCandidatePatchPlan;
|
|
74
|
+
declare function formatDurableCandidatePatchPlanMarkdown(plan: DurableCandidatePatchPlan, options?: Pick<DurableCandidatePatchPlanOptions, "title">): string;
|
|
75
|
+
declare function createDurableCandidatePatchPlanArtifacts(proofOrPacket: unknown, options?: DurableCandidatePatchPlanOptions): DurableCandidatePatchPlanArtifacts;
|
|
76
|
+
|
|
77
|
+
export { type DurableCandidatePatchPlan as D, type DurableCandidatePatchPlanArtifacts as a, type DurableCandidatePatchPlanOptions as b, createDurableCandidatePatchPlan as c, createDurableCandidatePatchPlanArtifacts as d, formatDurableCandidatePatchPlanMarkdown as f };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
interface DurableCandidatePatchPlanOptions {
|
|
2
|
+
title?: string;
|
|
3
|
+
sourceFile?: string;
|
|
4
|
+
requireTargetLabel?: boolean;
|
|
5
|
+
requireMixProfileId?: boolean;
|
|
6
|
+
allowedApprovalModes?: readonly string[];
|
|
7
|
+
allowedActionTypes?: readonly string[];
|
|
8
|
+
}
|
|
9
|
+
interface DurableCandidatePatchPlanArtifacts {
|
|
10
|
+
plan: DurableCandidatePatchPlan;
|
|
11
|
+
json: string;
|
|
12
|
+
markdown: string;
|
|
13
|
+
}
|
|
14
|
+
type DurableCandidatePatchPlan = {
|
|
15
|
+
version: "riddle-proof.durable-candidate-patch-plan.v1";
|
|
16
|
+
kind: "durable_candidate_patch_plan";
|
|
17
|
+
status: "ready_for_durable_patch" | "not_ready_for_durable_patch";
|
|
18
|
+
ok: boolean;
|
|
19
|
+
errors: string[];
|
|
20
|
+
source: {
|
|
21
|
+
packetStatus: unknown;
|
|
22
|
+
recommendationAction: unknown;
|
|
23
|
+
rankingRole: unknown;
|
|
24
|
+
proofBoundary: unknown;
|
|
25
|
+
};
|
|
26
|
+
target: {
|
|
27
|
+
label: string | null;
|
|
28
|
+
route: string | null;
|
|
29
|
+
mixProfileId: string | null;
|
|
30
|
+
};
|
|
31
|
+
candidate: {
|
|
32
|
+
label: unknown;
|
|
33
|
+
action: {
|
|
34
|
+
type: unknown;
|
|
35
|
+
track: unknown;
|
|
36
|
+
from: number | null;
|
|
37
|
+
to: number | null;
|
|
38
|
+
delta: number | null;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
approval: {
|
|
42
|
+
mode: unknown;
|
|
43
|
+
approvedBy: unknown;
|
|
44
|
+
basis: unknown;
|
|
45
|
+
};
|
|
46
|
+
durableEdit: null | {
|
|
47
|
+
sourceFile: string | null;
|
|
48
|
+
target: {
|
|
49
|
+
label: string | null;
|
|
50
|
+
route: string | null;
|
|
51
|
+
mixProfileId: string | null;
|
|
52
|
+
};
|
|
53
|
+
action: {
|
|
54
|
+
type: unknown;
|
|
55
|
+
track: unknown;
|
|
56
|
+
from: number | null;
|
|
57
|
+
to: number | null;
|
|
58
|
+
delta: number | null;
|
|
59
|
+
};
|
|
60
|
+
mixerLevels: Record<string, number> | null;
|
|
61
|
+
provenance: {
|
|
62
|
+
humanReviewPacketStatus: unknown;
|
|
63
|
+
recommendationLabel: unknown;
|
|
64
|
+
approvalMode: unknown;
|
|
65
|
+
approvedBy: unknown;
|
|
66
|
+
basis: unknown;
|
|
67
|
+
};
|
|
68
|
+
doesNotProve: string[];
|
|
69
|
+
};
|
|
70
|
+
boundary: string;
|
|
71
|
+
caveats: string[];
|
|
72
|
+
};
|
|
73
|
+
declare function createDurableCandidatePatchPlan(proofOrPacket: unknown, options?: DurableCandidatePatchPlanOptions): DurableCandidatePatchPlan;
|
|
74
|
+
declare function formatDurableCandidatePatchPlanMarkdown(plan: DurableCandidatePatchPlan, options?: Pick<DurableCandidatePatchPlanOptions, "title">): string;
|
|
75
|
+
declare function createDurableCandidatePatchPlanArtifacts(proofOrPacket: unknown, options?: DurableCandidatePatchPlanOptions): DurableCandidatePatchPlanArtifacts;
|
|
76
|
+
|
|
77
|
+
export { type DurableCandidatePatchPlan as D, type DurableCandidatePatchPlanArtifacts as a, type DurableCandidatePatchPlanOptions as b, createDurableCandidatePatchPlan as c, createDurableCandidatePatchPlanArtifacts as d, formatDurableCandidatePatchPlanMarkdown as f };
|