@riddledc/riddle-proof-packs 0.4.3 → 0.4.4
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 +35 -0
- package/dist/index.cjs +139 -2
- package/dist/index.d.cts +17 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +134 -1
- package/package.json +1 -1
- package/packs/neon-step-sequencer/examples/README.md +1 -1
- package/packs/neon-step-sequencer/examples/run-006-ratchet-loop-human-review-packet/human-review-packet.json +795 -0
- package/packs/neon-step-sequencer/examples/run-006-ratchet-loop-human-review-packet/human-review-packet.md +49 -0
package/README.md
CHANGED
|
@@ -24,6 +24,14 @@ Reusable starter profile definitions and proof-pack metadata for Riddle Proof.
|
|
|
24
24
|
- Returns first manifest entry for a matching `pack_id`.
|
|
25
25
|
- `instantiateRiddleProofProfile(name, options)`:
|
|
26
26
|
- Returns a copy of a profile with optional `url`, `route`, and `target` overrides.
|
|
27
|
+
- `findHumanReviewPacket(proofOrPacket)`:
|
|
28
|
+
- Recursively finds the first `human_review_packet` in a proof artifact or returns `null`.
|
|
29
|
+
- `requireHumanReviewPacket(proofOrPacket)`:
|
|
30
|
+
- Same extraction behavior, but throws if no packet is present.
|
|
31
|
+
- `formatHumanReviewPacketMarkdown(packet, options)`:
|
|
32
|
+
- Formats a compact Markdown handoff with recommendation, objective receipts, ranking role, proof boundary, listening prompts, and caveats.
|
|
33
|
+
- `createHumanReviewPacketArtifacts(proofOrPacket, options)`:
|
|
34
|
+
- Returns `{ packet, json, markdown }` for storing a standalone review packet next to a proof run.
|
|
27
35
|
|
|
28
36
|
## Proof claims and evidence roles
|
|
29
37
|
|
|
@@ -98,6 +106,33 @@ The `audio-mix` directory contains reusable audio-proof authoring guidance, a pr
|
|
|
98
106
|
|
|
99
107
|
The `neon-step-sequencer` directory contains the first app-specific ratchet lab under the new architecture. Its profiles declare `current_target` or `interaction_snapshots` evidence-role patterns and explicitly state what they do not prove. The ratchet-loop profile now expects a compact `humanReviewPacket` for listening handoff: supported/rejected candidates, objective guardrails, state restoration, review-order ranking, and taste caveats. The case-study files record the claim, evidence, failure classification, smallest layer changed, and next sharper question for each run.
|
|
100
108
|
|
|
109
|
+
### Human-review packet handoff
|
|
110
|
+
|
|
111
|
+
Human-review packets are proof artifacts for subjective follow-up. They are deliberately not taste scores. A packet should say what objective receipts passed, what was preserved, which candidate is ready for listening review, and which caveats remain.
|
|
112
|
+
|
|
113
|
+
```ts
|
|
114
|
+
import {
|
|
115
|
+
createHumanReviewPacketArtifacts,
|
|
116
|
+
findHumanReviewPacket,
|
|
117
|
+
formatHumanReviewPacketMarkdown,
|
|
118
|
+
} from "@riddledc/riddle-proof-packs";
|
|
119
|
+
|
|
120
|
+
const proof = JSON.parse(await fs.promises.readFile("proof.json", "utf8"));
|
|
121
|
+
const packet = findHumanReviewPacket(proof);
|
|
122
|
+
if (!packet) throw new Error("proof did not emit a human review packet");
|
|
123
|
+
|
|
124
|
+
const markdown = formatHumanReviewPacketMarkdown(packet, {
|
|
125
|
+
title: "Neon Human Review Packet",
|
|
126
|
+
});
|
|
127
|
+
const artifacts = createHumanReviewPacketArtifacts(proof, {
|
|
128
|
+
title: "Neon Human Review Packet",
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
console.log(markdown);
|
|
132
|
+
await fs.promises.writeFile("human-review-packet.json", artifacts.json);
|
|
133
|
+
await fs.promises.writeFile("human-review-packet.md", artifacts.markdown);
|
|
134
|
+
```
|
|
135
|
+
|
|
101
136
|
## Usage
|
|
102
137
|
|
|
103
138
|
```ts
|
package/dist/index.cjs
CHANGED
|
@@ -22,6 +22,9 @@ var index_exports = {};
|
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
RIDDLE_PROOF_PACK_MANIFEST: () => RIDDLE_PROOF_PACK_MANIFEST,
|
|
24
24
|
RIDDLE_PROOF_PACK_PROFILES: () => RIDDLE_PROOF_PACK_PROFILES,
|
|
25
|
+
createHumanReviewPacketArtifacts: () => createHumanReviewPacketArtifacts,
|
|
26
|
+
findHumanReviewPacket: () => findHumanReviewPacket,
|
|
27
|
+
formatHumanReviewPacketMarkdown: () => formatHumanReviewPacketMarkdown,
|
|
25
28
|
getPackEnabledRiddleProofPackProfiles: () => getPackEnabledRiddleProofPackProfiles,
|
|
26
29
|
getRiddleProofPackProfile: () => getRiddleProofPackProfile,
|
|
27
30
|
getRiddleProofPackProfileByPackId: () => getRiddleProofPackProfileByPackId,
|
|
@@ -29,7 +32,8 @@ __export(index_exports, {
|
|
|
29
32
|
getRiddleProofProfilesByPackId: () => getRiddleProofProfilesByPackId,
|
|
30
33
|
instantiateRiddleProofProfile: () => instantiateRiddleProofProfile,
|
|
31
34
|
listRiddleProofPackProfiles: () => listRiddleProofPackProfiles,
|
|
32
|
-
listRiddleProofPacks: () => listRiddleProofPacks
|
|
35
|
+
listRiddleProofPacks: () => listRiddleProofPacks,
|
|
36
|
+
requireHumanReviewPacket: () => requireHumanReviewPacket
|
|
33
37
|
});
|
|
34
38
|
module.exports = __toCommonJS(index_exports);
|
|
35
39
|
|
|
@@ -2345,10 +2349,142 @@ function instantiateRiddleProofProfile(profileName, options = {}) {
|
|
|
2345
2349
|
}
|
|
2346
2350
|
);
|
|
2347
2351
|
}
|
|
2352
|
+
|
|
2353
|
+
// src/humanReviewPacket.ts
|
|
2354
|
+
var isRecord2 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
2355
|
+
var asRecord = (value) => isRecord2(value) ? value : null;
|
|
2356
|
+
var asArray = (value) => Array.isArray(value) ? value : [];
|
|
2357
|
+
var getPath = (value, path) => {
|
|
2358
|
+
let cursor = value;
|
|
2359
|
+
for (const part of path.split(".")) {
|
|
2360
|
+
if (!isRecord2(cursor)) return void 0;
|
|
2361
|
+
cursor = cursor[part];
|
|
2362
|
+
}
|
|
2363
|
+
return cursor;
|
|
2364
|
+
};
|
|
2365
|
+
var formatValue = (value) => {
|
|
2366
|
+
if (value === null || value === void 0 || value === "") return "not captured";
|
|
2367
|
+
if (typeof value === "number") return Number.isInteger(value) ? String(value) : String(Number(value.toFixed(4)));
|
|
2368
|
+
if (typeof value === "boolean") return value ? "true" : "false";
|
|
2369
|
+
return String(value);
|
|
2370
|
+
};
|
|
2371
|
+
var formatCodeValue = (value) => `\`${formatValue(value)}\``;
|
|
2372
|
+
var formatAction = (action) => {
|
|
2373
|
+
const record = asRecord(action);
|
|
2374
|
+
if (!record) return "not captured";
|
|
2375
|
+
const type = record.type ?? "set_mixer_level";
|
|
2376
|
+
const track = record.track ?? "track";
|
|
2377
|
+
const from = formatValue(record.from);
|
|
2378
|
+
const to = formatValue(record.to);
|
|
2379
|
+
const delta = record.delta === null || record.delta === void 0 ? "" : ` (${formatValue(record.delta)})`;
|
|
2380
|
+
return `${type} ${track}: ${from} -> ${to}${delta}`;
|
|
2381
|
+
};
|
|
2382
|
+
var addOptionalList = (lines, heading, values) => {
|
|
2383
|
+
const entries = asArray(values).filter((entry) => entry !== null && entry !== void 0 && entry !== "");
|
|
2384
|
+
if (!entries.length) return;
|
|
2385
|
+
lines.push("", `## ${heading}`, "");
|
|
2386
|
+
for (const entry of entries) lines.push(`- ${formatValue(entry)}`);
|
|
2387
|
+
};
|
|
2388
|
+
function findHumanReviewPacket(value) {
|
|
2389
|
+
if (!value || typeof value !== "object") return null;
|
|
2390
|
+
if (isRecord2(value) && value.kind === "human_review_packet") return value;
|
|
2391
|
+
if (Array.isArray(value)) {
|
|
2392
|
+
for (const entry of value) {
|
|
2393
|
+
const packet = findHumanReviewPacket(entry);
|
|
2394
|
+
if (packet) return packet;
|
|
2395
|
+
}
|
|
2396
|
+
return null;
|
|
2397
|
+
}
|
|
2398
|
+
for (const entry of Object.values(value)) {
|
|
2399
|
+
const packet = findHumanReviewPacket(entry);
|
|
2400
|
+
if (packet) return packet;
|
|
2401
|
+
}
|
|
2402
|
+
return null;
|
|
2403
|
+
}
|
|
2404
|
+
function requireHumanReviewPacket(value) {
|
|
2405
|
+
const packet = findHumanReviewPacket(value);
|
|
2406
|
+
if (!packet) throw new Error("No human_review_packet found");
|
|
2407
|
+
return packet;
|
|
2408
|
+
}
|
|
2409
|
+
function formatHumanReviewPacketMarkdown(packet, options = {}) {
|
|
2410
|
+
if (packet.kind !== "human_review_packet") {
|
|
2411
|
+
throw new Error("Expected a human_review_packet");
|
|
2412
|
+
}
|
|
2413
|
+
const recommendation = asRecord(packet.recommendation) ?? {};
|
|
2414
|
+
const candidate = asRecord(recommendation.candidate) ?? {};
|
|
2415
|
+
const guardrails = asRecord(packet.guardrails) ?? {};
|
|
2416
|
+
const ranking = asRecord(packet.ranking) ?? {};
|
|
2417
|
+
const request = asRecord(packet.request) ?? {};
|
|
2418
|
+
const supportedCandidates = asArray(packet.supportedCandidates);
|
|
2419
|
+
const rejectedCandidates = asArray(packet.rejectedCandidates);
|
|
2420
|
+
const selectedSong = getPath(packet, "target.selectedSong.selectedSong") ?? getPath(packet, "target.routeState.selectedSong");
|
|
2421
|
+
const lines = [
|
|
2422
|
+
`# ${options.title ?? "Human Review Packet"}`,
|
|
2423
|
+
"",
|
|
2424
|
+
`- status: ${formatCodeValue(packet.status)}`,
|
|
2425
|
+
`- domain: ${formatCodeValue(packet.domain)}`,
|
|
2426
|
+
`- evidence_role_pattern: ${formatCodeValue(packet.evidenceRolePattern)}`,
|
|
2427
|
+
`- requested_intent: ${formatValue(packet.requestedIntent)}`,
|
|
2428
|
+
`- selected_song: ${formatValue(selectedSong)}`,
|
|
2429
|
+
"",
|
|
2430
|
+
"## Recommendation",
|
|
2431
|
+
"",
|
|
2432
|
+
`- action: ${formatCodeValue(recommendation.action)}`,
|
|
2433
|
+
`- candidate: ${formatCodeValue(candidate.label)}`,
|
|
2434
|
+
`- candidate_action: ${formatCodeValue(formatAction(candidate.action))}`,
|
|
2435
|
+
`- reason: ${formatValue(recommendation.reason)}`,
|
|
2436
|
+
"",
|
|
2437
|
+
"## Objective Receipts",
|
|
2438
|
+
"",
|
|
2439
|
+
`- supported_candidates: ${formatCodeValue(guardrails.supportedClaimCandidateCount ?? supportedCandidates.length)}`,
|
|
2440
|
+
`- rejected_candidates: ${formatCodeValue(guardrails.rejectedCandidateCount ?? rejectedCandidates.length)}`,
|
|
2441
|
+
`- state_restored_after_loop: ${formatCodeValue(guardrails.stateRestoredAfterLoop)}`,
|
|
2442
|
+
`- candidate_actions_are_transient: ${formatCodeValue(request.candidateActionsAreTransient)}`,
|
|
2443
|
+
`- no_permanent_edit_unless_apply_best: ${formatCodeValue(guardrails.noPermanentEditUnlessApplyBest)}`,
|
|
2444
|
+
"",
|
|
2445
|
+
"## Ranking",
|
|
2446
|
+
"",
|
|
2447
|
+
`- metric: ${formatCodeValue(ranking.metric)}`,
|
|
2448
|
+
`- role: ${formatCodeValue(ranking.role)}`,
|
|
2449
|
+
`- lower_is_better: ${formatCodeValue(ranking.lowerIsBetter)}`,
|
|
2450
|
+
`- baseline: ${formatCodeValue(ranking.baselineCandidateRankingMetric)}`,
|
|
2451
|
+
`- best: ${formatCodeValue(ranking.bestCandidateRankingMetric)}`,
|
|
2452
|
+
`- delta: ${formatCodeValue(ranking.rankingMetricDelta)}`,
|
|
2453
|
+
"",
|
|
2454
|
+
"## Boundary",
|
|
2455
|
+
"",
|
|
2456
|
+
formatValue(packet.proofBoundary)
|
|
2457
|
+
];
|
|
2458
|
+
addOptionalList(lines, "Listening Prompts", packet.listenerPrompts);
|
|
2459
|
+
addOptionalList(lines, "Caveats", packet.caveats);
|
|
2460
|
+
if (rejectedCandidates.length) {
|
|
2461
|
+
lines.push("", "## Rejected Candidates", "");
|
|
2462
|
+
for (const entry of rejectedCandidates) {
|
|
2463
|
+
const rejected = asRecord(entry) ?? {};
|
|
2464
|
+
const failedReceipts = asArray(rejected.failedReceipts).map(formatValue).join(", ") || "not captured";
|
|
2465
|
+
lines.push(`- ${formatCodeValue(rejected.label)}: ${failedReceipts}`);
|
|
2466
|
+
}
|
|
2467
|
+
}
|
|
2468
|
+
return `${lines.join("\n")}
|
|
2469
|
+
`;
|
|
2470
|
+
}
|
|
2471
|
+
function createHumanReviewPacketArtifacts(proofOrPacket, options = {}) {
|
|
2472
|
+
const packet = requireHumanReviewPacket(proofOrPacket);
|
|
2473
|
+
const markdown = formatHumanReviewPacketMarkdown(packet, options);
|
|
2474
|
+
return {
|
|
2475
|
+
packet,
|
|
2476
|
+
json: `${JSON.stringify(packet, null, 2)}
|
|
2477
|
+
`,
|
|
2478
|
+
markdown
|
|
2479
|
+
};
|
|
2480
|
+
}
|
|
2348
2481
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2349
2482
|
0 && (module.exports = {
|
|
2350
2483
|
RIDDLE_PROOF_PACK_MANIFEST,
|
|
2351
2484
|
RIDDLE_PROOF_PACK_PROFILES,
|
|
2485
|
+
createHumanReviewPacketArtifacts,
|
|
2486
|
+
findHumanReviewPacket,
|
|
2487
|
+
formatHumanReviewPacketMarkdown,
|
|
2352
2488
|
getPackEnabledRiddleProofPackProfiles,
|
|
2353
2489
|
getRiddleProofPackProfile,
|
|
2354
2490
|
getRiddleProofPackProfileByPackId,
|
|
@@ -2356,5 +2492,6 @@ function instantiateRiddleProofProfile(profileName, options = {}) {
|
|
|
2356
2492
|
getRiddleProofProfilesByPackId,
|
|
2357
2493
|
instantiateRiddleProofProfile,
|
|
2358
2494
|
listRiddleProofPackProfiles,
|
|
2359
|
-
listRiddleProofPacks
|
|
2495
|
+
listRiddleProofPacks,
|
|
2496
|
+
requireHumanReviewPacket
|
|
2360
2497
|
});
|
package/dist/index.d.cts
CHANGED
|
@@ -59,4 +59,20 @@ interface RiddleProofPackProfileOverrides {
|
|
|
59
59
|
*/
|
|
60
60
|
declare function instantiateRiddleProofProfile(profileName: string, options?: RiddleProofPackProfileOverrides): RiddleProofProfile;
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
type HumanReviewPacket = Record<string, unknown> & {
|
|
63
|
+
kind: "human_review_packet";
|
|
64
|
+
};
|
|
65
|
+
interface HumanReviewPacketMarkdownOptions {
|
|
66
|
+
title?: string;
|
|
67
|
+
}
|
|
68
|
+
interface HumanReviewPacketArtifacts {
|
|
69
|
+
packet: HumanReviewPacket;
|
|
70
|
+
json: string;
|
|
71
|
+
markdown: string;
|
|
72
|
+
}
|
|
73
|
+
declare function findHumanReviewPacket(value: unknown): HumanReviewPacket | null;
|
|
74
|
+
declare function requireHumanReviewPacket(value: unknown): HumanReviewPacket;
|
|
75
|
+
declare function formatHumanReviewPacketMarkdown(packet: HumanReviewPacket, options?: HumanReviewPacketMarkdownOptions): string;
|
|
76
|
+
declare function createHumanReviewPacketArtifacts(proofOrPacket: unknown, options?: HumanReviewPacketMarkdownOptions): HumanReviewPacketArtifacts;
|
|
77
|
+
|
|
78
|
+
export { type HumanReviewPacket, type HumanReviewPacketArtifacts, type HumanReviewPacketMarkdownOptions, RIDDLE_PROOF_PACK_MANIFEST, RIDDLE_PROOF_PACK_PROFILES, type RiddleProofPackProfileManifest, createHumanReviewPacketArtifacts, findHumanReviewPacket, formatHumanReviewPacketMarkdown, getPackEnabledRiddleProofPackProfiles, getRiddleProofPackProfile, getRiddleProofPackProfileByPackId, getRiddleProofPackProfileManifest, getRiddleProofProfilesByPackId, instantiateRiddleProofProfile, listRiddleProofPackProfiles, listRiddleProofPacks, requireHumanReviewPacket };
|
package/dist/index.d.ts
CHANGED
|
@@ -59,4 +59,20 @@ interface RiddleProofPackProfileOverrides {
|
|
|
59
59
|
*/
|
|
60
60
|
declare function instantiateRiddleProofProfile(profileName: string, options?: RiddleProofPackProfileOverrides): RiddleProofProfile;
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
type HumanReviewPacket = Record<string, unknown> & {
|
|
63
|
+
kind: "human_review_packet";
|
|
64
|
+
};
|
|
65
|
+
interface HumanReviewPacketMarkdownOptions {
|
|
66
|
+
title?: string;
|
|
67
|
+
}
|
|
68
|
+
interface HumanReviewPacketArtifacts {
|
|
69
|
+
packet: HumanReviewPacket;
|
|
70
|
+
json: string;
|
|
71
|
+
markdown: string;
|
|
72
|
+
}
|
|
73
|
+
declare function findHumanReviewPacket(value: unknown): HumanReviewPacket | null;
|
|
74
|
+
declare function requireHumanReviewPacket(value: unknown): HumanReviewPacket;
|
|
75
|
+
declare function formatHumanReviewPacketMarkdown(packet: HumanReviewPacket, options?: HumanReviewPacketMarkdownOptions): string;
|
|
76
|
+
declare function createHumanReviewPacketArtifacts(proofOrPacket: unknown, options?: HumanReviewPacketMarkdownOptions): HumanReviewPacketArtifacts;
|
|
77
|
+
|
|
78
|
+
export { type HumanReviewPacket, type HumanReviewPacketArtifacts, type HumanReviewPacketMarkdownOptions, RIDDLE_PROOF_PACK_MANIFEST, RIDDLE_PROOF_PACK_PROFILES, type RiddleProofPackProfileManifest, createHumanReviewPacketArtifacts, findHumanReviewPacket, formatHumanReviewPacketMarkdown, getPackEnabledRiddleProofPackProfiles, getRiddleProofPackProfile, getRiddleProofPackProfileByPackId, getRiddleProofPackProfileManifest, getRiddleProofProfilesByPackId, instantiateRiddleProofProfile, listRiddleProofPackProfiles, listRiddleProofPacks, requireHumanReviewPacket };
|
package/dist/index.js
CHANGED
|
@@ -2310,9 +2310,141 @@ function instantiateRiddleProofProfile(profileName, options = {}) {
|
|
|
2310
2310
|
}
|
|
2311
2311
|
);
|
|
2312
2312
|
}
|
|
2313
|
+
|
|
2314
|
+
// src/humanReviewPacket.ts
|
|
2315
|
+
var isRecord2 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
2316
|
+
var asRecord = (value) => isRecord2(value) ? value : null;
|
|
2317
|
+
var asArray = (value) => Array.isArray(value) ? value : [];
|
|
2318
|
+
var getPath = (value, path) => {
|
|
2319
|
+
let cursor = value;
|
|
2320
|
+
for (const part of path.split(".")) {
|
|
2321
|
+
if (!isRecord2(cursor)) return void 0;
|
|
2322
|
+
cursor = cursor[part];
|
|
2323
|
+
}
|
|
2324
|
+
return cursor;
|
|
2325
|
+
};
|
|
2326
|
+
var formatValue = (value) => {
|
|
2327
|
+
if (value === null || value === void 0 || value === "") return "not captured";
|
|
2328
|
+
if (typeof value === "number") return Number.isInteger(value) ? String(value) : String(Number(value.toFixed(4)));
|
|
2329
|
+
if (typeof value === "boolean") return value ? "true" : "false";
|
|
2330
|
+
return String(value);
|
|
2331
|
+
};
|
|
2332
|
+
var formatCodeValue = (value) => `\`${formatValue(value)}\``;
|
|
2333
|
+
var formatAction = (action) => {
|
|
2334
|
+
const record = asRecord(action);
|
|
2335
|
+
if (!record) return "not captured";
|
|
2336
|
+
const type = record.type ?? "set_mixer_level";
|
|
2337
|
+
const track = record.track ?? "track";
|
|
2338
|
+
const from = formatValue(record.from);
|
|
2339
|
+
const to = formatValue(record.to);
|
|
2340
|
+
const delta = record.delta === null || record.delta === void 0 ? "" : ` (${formatValue(record.delta)})`;
|
|
2341
|
+
return `${type} ${track}: ${from} -> ${to}${delta}`;
|
|
2342
|
+
};
|
|
2343
|
+
var addOptionalList = (lines, heading, values) => {
|
|
2344
|
+
const entries = asArray(values).filter((entry) => entry !== null && entry !== void 0 && entry !== "");
|
|
2345
|
+
if (!entries.length) return;
|
|
2346
|
+
lines.push("", `## ${heading}`, "");
|
|
2347
|
+
for (const entry of entries) lines.push(`- ${formatValue(entry)}`);
|
|
2348
|
+
};
|
|
2349
|
+
function findHumanReviewPacket(value) {
|
|
2350
|
+
if (!value || typeof value !== "object") return null;
|
|
2351
|
+
if (isRecord2(value) && value.kind === "human_review_packet") return value;
|
|
2352
|
+
if (Array.isArray(value)) {
|
|
2353
|
+
for (const entry of value) {
|
|
2354
|
+
const packet = findHumanReviewPacket(entry);
|
|
2355
|
+
if (packet) return packet;
|
|
2356
|
+
}
|
|
2357
|
+
return null;
|
|
2358
|
+
}
|
|
2359
|
+
for (const entry of Object.values(value)) {
|
|
2360
|
+
const packet = findHumanReviewPacket(entry);
|
|
2361
|
+
if (packet) return packet;
|
|
2362
|
+
}
|
|
2363
|
+
return null;
|
|
2364
|
+
}
|
|
2365
|
+
function requireHumanReviewPacket(value) {
|
|
2366
|
+
const packet = findHumanReviewPacket(value);
|
|
2367
|
+
if (!packet) throw new Error("No human_review_packet found");
|
|
2368
|
+
return packet;
|
|
2369
|
+
}
|
|
2370
|
+
function formatHumanReviewPacketMarkdown(packet, options = {}) {
|
|
2371
|
+
if (packet.kind !== "human_review_packet") {
|
|
2372
|
+
throw new Error("Expected a human_review_packet");
|
|
2373
|
+
}
|
|
2374
|
+
const recommendation = asRecord(packet.recommendation) ?? {};
|
|
2375
|
+
const candidate = asRecord(recommendation.candidate) ?? {};
|
|
2376
|
+
const guardrails = asRecord(packet.guardrails) ?? {};
|
|
2377
|
+
const ranking = asRecord(packet.ranking) ?? {};
|
|
2378
|
+
const request = asRecord(packet.request) ?? {};
|
|
2379
|
+
const supportedCandidates = asArray(packet.supportedCandidates);
|
|
2380
|
+
const rejectedCandidates = asArray(packet.rejectedCandidates);
|
|
2381
|
+
const selectedSong = getPath(packet, "target.selectedSong.selectedSong") ?? getPath(packet, "target.routeState.selectedSong");
|
|
2382
|
+
const lines = [
|
|
2383
|
+
`# ${options.title ?? "Human Review Packet"}`,
|
|
2384
|
+
"",
|
|
2385
|
+
`- status: ${formatCodeValue(packet.status)}`,
|
|
2386
|
+
`- domain: ${formatCodeValue(packet.domain)}`,
|
|
2387
|
+
`- evidence_role_pattern: ${formatCodeValue(packet.evidenceRolePattern)}`,
|
|
2388
|
+
`- requested_intent: ${formatValue(packet.requestedIntent)}`,
|
|
2389
|
+
`- selected_song: ${formatValue(selectedSong)}`,
|
|
2390
|
+
"",
|
|
2391
|
+
"## Recommendation",
|
|
2392
|
+
"",
|
|
2393
|
+
`- action: ${formatCodeValue(recommendation.action)}`,
|
|
2394
|
+
`- candidate: ${formatCodeValue(candidate.label)}`,
|
|
2395
|
+
`- candidate_action: ${formatCodeValue(formatAction(candidate.action))}`,
|
|
2396
|
+
`- reason: ${formatValue(recommendation.reason)}`,
|
|
2397
|
+
"",
|
|
2398
|
+
"## Objective Receipts",
|
|
2399
|
+
"",
|
|
2400
|
+
`- supported_candidates: ${formatCodeValue(guardrails.supportedClaimCandidateCount ?? supportedCandidates.length)}`,
|
|
2401
|
+
`- rejected_candidates: ${formatCodeValue(guardrails.rejectedCandidateCount ?? rejectedCandidates.length)}`,
|
|
2402
|
+
`- state_restored_after_loop: ${formatCodeValue(guardrails.stateRestoredAfterLoop)}`,
|
|
2403
|
+
`- candidate_actions_are_transient: ${formatCodeValue(request.candidateActionsAreTransient)}`,
|
|
2404
|
+
`- no_permanent_edit_unless_apply_best: ${formatCodeValue(guardrails.noPermanentEditUnlessApplyBest)}`,
|
|
2405
|
+
"",
|
|
2406
|
+
"## Ranking",
|
|
2407
|
+
"",
|
|
2408
|
+
`- metric: ${formatCodeValue(ranking.metric)}`,
|
|
2409
|
+
`- role: ${formatCodeValue(ranking.role)}`,
|
|
2410
|
+
`- lower_is_better: ${formatCodeValue(ranking.lowerIsBetter)}`,
|
|
2411
|
+
`- baseline: ${formatCodeValue(ranking.baselineCandidateRankingMetric)}`,
|
|
2412
|
+
`- best: ${formatCodeValue(ranking.bestCandidateRankingMetric)}`,
|
|
2413
|
+
`- delta: ${formatCodeValue(ranking.rankingMetricDelta)}`,
|
|
2414
|
+
"",
|
|
2415
|
+
"## Boundary",
|
|
2416
|
+
"",
|
|
2417
|
+
formatValue(packet.proofBoundary)
|
|
2418
|
+
];
|
|
2419
|
+
addOptionalList(lines, "Listening Prompts", packet.listenerPrompts);
|
|
2420
|
+
addOptionalList(lines, "Caveats", packet.caveats);
|
|
2421
|
+
if (rejectedCandidates.length) {
|
|
2422
|
+
lines.push("", "## Rejected Candidates", "");
|
|
2423
|
+
for (const entry of rejectedCandidates) {
|
|
2424
|
+
const rejected = asRecord(entry) ?? {};
|
|
2425
|
+
const failedReceipts = asArray(rejected.failedReceipts).map(formatValue).join(", ") || "not captured";
|
|
2426
|
+
lines.push(`- ${formatCodeValue(rejected.label)}: ${failedReceipts}`);
|
|
2427
|
+
}
|
|
2428
|
+
}
|
|
2429
|
+
return `${lines.join("\n")}
|
|
2430
|
+
`;
|
|
2431
|
+
}
|
|
2432
|
+
function createHumanReviewPacketArtifacts(proofOrPacket, options = {}) {
|
|
2433
|
+
const packet = requireHumanReviewPacket(proofOrPacket);
|
|
2434
|
+
const markdown = formatHumanReviewPacketMarkdown(packet, options);
|
|
2435
|
+
return {
|
|
2436
|
+
packet,
|
|
2437
|
+
json: `${JSON.stringify(packet, null, 2)}
|
|
2438
|
+
`,
|
|
2439
|
+
markdown
|
|
2440
|
+
};
|
|
2441
|
+
}
|
|
2313
2442
|
export {
|
|
2314
2443
|
RIDDLE_PROOF_PACK_MANIFEST,
|
|
2315
2444
|
RIDDLE_PROOF_PACK_PROFILES,
|
|
2445
|
+
createHumanReviewPacketArtifacts,
|
|
2446
|
+
findHumanReviewPacket,
|
|
2447
|
+
formatHumanReviewPacketMarkdown,
|
|
2316
2448
|
getPackEnabledRiddleProofPackProfiles,
|
|
2317
2449
|
getRiddleProofPackProfile,
|
|
2318
2450
|
getRiddleProofPackProfileByPackId,
|
|
@@ -2320,5 +2452,6 @@ export {
|
|
|
2320
2452
|
getRiddleProofProfilesByPackId,
|
|
2321
2453
|
instantiateRiddleProofProfile,
|
|
2322
2454
|
listRiddleProofPackProfiles,
|
|
2323
|
-
listRiddleProofPacks
|
|
2455
|
+
listRiddleProofPacks,
|
|
2456
|
+
requireHumanReviewPacket
|
|
2324
2457
|
};
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
These examples are local Playwright runner outputs captured against LilArcade Neon Step Sequencer on May 24, 2026. They are included to show how this pack records atomic proof claims with explicit evidence-role patterns.
|
|
4
4
|
|
|
5
|
-
The raw `profile-result.json` files are real runner outputs. They intentionally keep enough evidence to audit the verdict, but the summaries are the preferred place to start.
|
|
5
|
+
The raw `profile-result.json` files are real runner outputs. They intentionally keep enough evidence to audit the verdict, but the summaries are the preferred place to start. Run 006 also includes standalone `human-review-packet.json` and `human-review-packet.md` files generated from the proof artifact.
|
|
6
6
|
|
|
7
7
|
## Runs
|
|
8
8
|
|
|
@@ -0,0 +1,795 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "neon-step-sequencer.human-review-packet.v1",
|
|
3
|
+
"kind": "human_review_packet",
|
|
4
|
+
"domain": "audio_mix",
|
|
5
|
+
"status": "candidate_ready_for_listening_review",
|
|
6
|
+
"evidenceRolePattern": "interaction_snapshots",
|
|
7
|
+
"proofBoundary": "Objective receipts support or reject candidate change claims; musical taste still requires listening review.",
|
|
8
|
+
"requestedIntent": "turn the chord part down a little",
|
|
9
|
+
"target": {
|
|
10
|
+
"routeState": {
|
|
11
|
+
"proofKind": "neon-route-state",
|
|
12
|
+
"route": "/games/drum-sequencer",
|
|
13
|
+
"mode": "song",
|
|
14
|
+
"selectedSong": "Monkberry Moon Delight (Tab)",
|
|
15
|
+
"selectedPartIndex": 0
|
|
16
|
+
},
|
|
17
|
+
"selectedSong": {
|
|
18
|
+
"proofKind": "neon-selected-song",
|
|
19
|
+
"selectedSong": "Monkberry Moon Delight (Tab)",
|
|
20
|
+
"partCount": 9,
|
|
21
|
+
"mixProfile": {
|
|
22
|
+
"id": "monkberry-moon-delight-eq-lane-mix-v7",
|
|
23
|
+
"label": "Monkberry humanized EQ mix",
|
|
24
|
+
"description": "Humanized imported-tab mix with softer vocal formants, fuller bass harmonics, darker pads, and a deeper shared room/plate space.",
|
|
25
|
+
"proofWindows": [
|
|
26
|
+
{
|
|
27
|
+
"name": "introBed",
|
|
28
|
+
"label": "Intro Bed",
|
|
29
|
+
"bars": 1,
|
|
30
|
+
"seed": "riddle-sequencer-bed",
|
|
31
|
+
"requiredActive": [
|
|
32
|
+
"bass",
|
|
33
|
+
"chord",
|
|
34
|
+
"guitar"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "vocalEntry",
|
|
39
|
+
"label": "Vocal Entry",
|
|
40
|
+
"bars": 3,
|
|
41
|
+
"seed": "riddle-sequencer-vocal-melody",
|
|
42
|
+
"requiredActive": [
|
|
43
|
+
"rhythmSynth"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"eqSettings": {
|
|
48
|
+
"kick": [
|
|
49
|
+
2.2,
|
|
50
|
+
-0.8,
|
|
51
|
+
-3.2,
|
|
52
|
+
-4.5,
|
|
53
|
+
-5.5,
|
|
54
|
+
-5,
|
|
55
|
+
0.8,
|
|
56
|
+
0
|
|
57
|
+
],
|
|
58
|
+
"snare": [
|
|
59
|
+
-6,
|
|
60
|
+
-2.5,
|
|
61
|
+
1.4,
|
|
62
|
+
-3,
|
|
63
|
+
-0.6,
|
|
64
|
+
1.4,
|
|
65
|
+
0.4,
|
|
66
|
+
-1.8
|
|
67
|
+
],
|
|
68
|
+
"hat": [
|
|
69
|
+
-12,
|
|
70
|
+
-12,
|
|
71
|
+
-12,
|
|
72
|
+
-10,
|
|
73
|
+
-7,
|
|
74
|
+
-2.5,
|
|
75
|
+
-2.2,
|
|
76
|
+
-1.1
|
|
77
|
+
],
|
|
78
|
+
"clap": [
|
|
79
|
+
-12,
|
|
80
|
+
-8,
|
|
81
|
+
-4,
|
|
82
|
+
-1.5,
|
|
83
|
+
0.8,
|
|
84
|
+
0,
|
|
85
|
+
-1,
|
|
86
|
+
-2
|
|
87
|
+
],
|
|
88
|
+
"rim": [
|
|
89
|
+
-12,
|
|
90
|
+
-8,
|
|
91
|
+
-3.5,
|
|
92
|
+
-1.2,
|
|
93
|
+
0,
|
|
94
|
+
-0.5,
|
|
95
|
+
-1.2,
|
|
96
|
+
-2
|
|
97
|
+
],
|
|
98
|
+
"bass": [
|
|
99
|
+
-1.2,
|
|
100
|
+
2.8,
|
|
101
|
+
-1.4,
|
|
102
|
+
-4.8,
|
|
103
|
+
-6,
|
|
104
|
+
-8,
|
|
105
|
+
-10,
|
|
106
|
+
-10
|
|
107
|
+
],
|
|
108
|
+
"chord": [
|
|
109
|
+
-8,
|
|
110
|
+
-2.8,
|
|
111
|
+
-4.8,
|
|
112
|
+
-0.8,
|
|
113
|
+
-1,
|
|
114
|
+
-2.8,
|
|
115
|
+
-4.8,
|
|
116
|
+
-6.5
|
|
117
|
+
],
|
|
118
|
+
"guitar": [
|
|
119
|
+
-8,
|
|
120
|
+
-4.8,
|
|
121
|
+
-3.4,
|
|
122
|
+
-2.2,
|
|
123
|
+
1.2,
|
|
124
|
+
1.4,
|
|
125
|
+
0.2,
|
|
126
|
+
-1.8
|
|
127
|
+
],
|
|
128
|
+
"rhythmSynth": [
|
|
129
|
+
-10,
|
|
130
|
+
-6,
|
|
131
|
+
-3.8,
|
|
132
|
+
-1.6,
|
|
133
|
+
0.8,
|
|
134
|
+
1.8,
|
|
135
|
+
0,
|
|
136
|
+
-2.8
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
"mixLanes": {
|
|
140
|
+
"kick": "Sub thump around 60 Hz with most low-mid box removed.",
|
|
141
|
+
"bass": "Bass foundation around 80-160 Hz with more 120 Hz body for small speakers.",
|
|
142
|
+
"snare": "Backbeat body near 250 Hz with controlled upper presence.",
|
|
143
|
+
"hat": "Soft high pulse, trimmed in brittle 4-8 kHz bands.",
|
|
144
|
+
"chord": "Darker pad bed with more room depth and less plasticky top.",
|
|
145
|
+
"guitar": "Mid/presence lane around 1-2 kHz, wider than the pad and glued into the shared music bus.",
|
|
146
|
+
"rhythmSynth": "Vocal melody lane in the upper mids, forward enough to survive the small-speaker monitor without crowding 1 kHz."
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"request": {
|
|
152
|
+
"strategy": "mix-level-search",
|
|
153
|
+
"focusTracks": [
|
|
154
|
+
"bass",
|
|
155
|
+
"chord",
|
|
156
|
+
"guitar",
|
|
157
|
+
"rhythmSynth"
|
|
158
|
+
],
|
|
159
|
+
"maxIterations": 6,
|
|
160
|
+
"monitorProfile": "smallSpeaker",
|
|
161
|
+
"restore": true,
|
|
162
|
+
"applyBest": false,
|
|
163
|
+
"candidateActionsAreTransient": true
|
|
164
|
+
},
|
|
165
|
+
"recommendation": {
|
|
166
|
+
"action": "review_before_applying_candidate",
|
|
167
|
+
"candidate": {
|
|
168
|
+
"index": 6,
|
|
169
|
+
"label": "chord -0.10",
|
|
170
|
+
"status": "supported",
|
|
171
|
+
"classification": null,
|
|
172
|
+
"claim": "Setting chord level from 0.38 to 0.28 changes rendered chord metrics while preserving Neon proof invariants.",
|
|
173
|
+
"action": {
|
|
174
|
+
"type": "set_mixer_level",
|
|
175
|
+
"track": "chord",
|
|
176
|
+
"from": 0.38,
|
|
177
|
+
"to": 0.28,
|
|
178
|
+
"delta": -0.1
|
|
179
|
+
},
|
|
180
|
+
"rankingMetric": 27.0709,
|
|
181
|
+
"receipts": [
|
|
182
|
+
{
|
|
183
|
+
"name": "mixer_edit_accepted",
|
|
184
|
+
"ok": true
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"name": "contract_mixer_level_reflects_action",
|
|
188
|
+
"ok": true
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"name": "rendered_target_metric_changed",
|
|
192
|
+
"ok": true
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"name": "required_instruments_preserved",
|
|
196
|
+
"ok": true
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"name": "no_clipping",
|
|
200
|
+
"ok": true
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"name": "no_low_level_proof_window",
|
|
204
|
+
"ok": true
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"failedReceipts": [],
|
|
208
|
+
"guardrails": {
|
|
209
|
+
"mixerEditAccepted": true,
|
|
210
|
+
"contractLevelReflected": true,
|
|
211
|
+
"renderedTargetMoved": true,
|
|
212
|
+
"requiredInstrumentsPreserved": true,
|
|
213
|
+
"noClipping": true,
|
|
214
|
+
"noLowLevelProofWindow": true
|
|
215
|
+
},
|
|
216
|
+
"targetMovement": {
|
|
217
|
+
"track": "chord",
|
|
218
|
+
"moved": true,
|
|
219
|
+
"deltas": {
|
|
220
|
+
"rms": -0.0012,
|
|
221
|
+
"peak": -0.0088,
|
|
222
|
+
"totalEnergy": -0.000003
|
|
223
|
+
},
|
|
224
|
+
"before": {
|
|
225
|
+
"track": "chord",
|
|
226
|
+
"sampleCount": 2,
|
|
227
|
+
"activeCount": 0,
|
|
228
|
+
"rms": 0.0062,
|
|
229
|
+
"peak": 0.0334,
|
|
230
|
+
"totalEnergy": 0.000007
|
|
231
|
+
},
|
|
232
|
+
"after": {
|
|
233
|
+
"track": "chord",
|
|
234
|
+
"sampleCount": 2,
|
|
235
|
+
"activeCount": 0,
|
|
236
|
+
"rms": 0.005,
|
|
237
|
+
"peak": 0.0246,
|
|
238
|
+
"totalEnergy": 0.000004
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
"summary": {
|
|
242
|
+
"status": "passed",
|
|
243
|
+
"windowCount": 2,
|
|
244
|
+
"findingCount": 0,
|
|
245
|
+
"mixProfile": {
|
|
246
|
+
"id": "monkberry-moon-delight-eq-lane-mix-v7",
|
|
247
|
+
"label": "Monkberry humanized EQ mix"
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
"reason": "All objective claim receipts passed for this candidate; ranking only orders listening review."
|
|
252
|
+
},
|
|
253
|
+
"supportedCandidates": [
|
|
254
|
+
{
|
|
255
|
+
"index": 6,
|
|
256
|
+
"label": "chord -0.10",
|
|
257
|
+
"status": "supported",
|
|
258
|
+
"classification": null,
|
|
259
|
+
"claim": "Setting chord level from 0.38 to 0.28 changes rendered chord metrics while preserving Neon proof invariants.",
|
|
260
|
+
"action": {
|
|
261
|
+
"type": "set_mixer_level",
|
|
262
|
+
"track": "chord",
|
|
263
|
+
"from": 0.38,
|
|
264
|
+
"to": 0.28,
|
|
265
|
+
"delta": -0.1
|
|
266
|
+
},
|
|
267
|
+
"rankingMetric": 27.0709,
|
|
268
|
+
"receipts": [
|
|
269
|
+
{
|
|
270
|
+
"name": "mixer_edit_accepted",
|
|
271
|
+
"ok": true
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"name": "contract_mixer_level_reflects_action",
|
|
275
|
+
"ok": true
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"name": "rendered_target_metric_changed",
|
|
279
|
+
"ok": true
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"name": "required_instruments_preserved",
|
|
283
|
+
"ok": true
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"name": "no_clipping",
|
|
287
|
+
"ok": true
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"name": "no_low_level_proof_window",
|
|
291
|
+
"ok": true
|
|
292
|
+
}
|
|
293
|
+
],
|
|
294
|
+
"failedReceipts": [],
|
|
295
|
+
"guardrails": {
|
|
296
|
+
"mixerEditAccepted": true,
|
|
297
|
+
"contractLevelReflected": true,
|
|
298
|
+
"renderedTargetMoved": true,
|
|
299
|
+
"requiredInstrumentsPreserved": true,
|
|
300
|
+
"noClipping": true,
|
|
301
|
+
"noLowLevelProofWindow": true
|
|
302
|
+
},
|
|
303
|
+
"targetMovement": {
|
|
304
|
+
"track": "chord",
|
|
305
|
+
"moved": true,
|
|
306
|
+
"deltas": {
|
|
307
|
+
"rms": -0.0012,
|
|
308
|
+
"peak": -0.0088,
|
|
309
|
+
"totalEnergy": -0.000003
|
|
310
|
+
},
|
|
311
|
+
"before": {
|
|
312
|
+
"track": "chord",
|
|
313
|
+
"sampleCount": 2,
|
|
314
|
+
"activeCount": 0,
|
|
315
|
+
"rms": 0.0062,
|
|
316
|
+
"peak": 0.0334,
|
|
317
|
+
"totalEnergy": 0.000007
|
|
318
|
+
},
|
|
319
|
+
"after": {
|
|
320
|
+
"track": "chord",
|
|
321
|
+
"sampleCount": 2,
|
|
322
|
+
"activeCount": 0,
|
|
323
|
+
"rms": 0.005,
|
|
324
|
+
"peak": 0.0246,
|
|
325
|
+
"totalEnergy": 0.000004
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
"summary": {
|
|
329
|
+
"status": "passed",
|
|
330
|
+
"windowCount": 2,
|
|
331
|
+
"findingCount": 0,
|
|
332
|
+
"mixProfile": {
|
|
333
|
+
"id": "monkberry-moon-delight-eq-lane-mix-v7",
|
|
334
|
+
"label": "Monkberry humanized EQ mix"
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"index": 4,
|
|
340
|
+
"label": "bass -0.18",
|
|
341
|
+
"status": "supported",
|
|
342
|
+
"classification": null,
|
|
343
|
+
"claim": "Setting bass level from 0.62 to 0.44 changes rendered bass metrics while preserving Neon proof invariants.",
|
|
344
|
+
"action": {
|
|
345
|
+
"type": "set_mixer_level",
|
|
346
|
+
"track": "bass",
|
|
347
|
+
"from": 0.62,
|
|
348
|
+
"to": 0.44,
|
|
349
|
+
"delta": -0.18
|
|
350
|
+
},
|
|
351
|
+
"rankingMetric": 27.4894,
|
|
352
|
+
"receipts": [
|
|
353
|
+
{
|
|
354
|
+
"name": "mixer_edit_accepted",
|
|
355
|
+
"ok": true
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"name": "contract_mixer_level_reflects_action",
|
|
359
|
+
"ok": true
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"name": "rendered_target_metric_changed",
|
|
363
|
+
"ok": true
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"name": "required_instruments_preserved",
|
|
367
|
+
"ok": true
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"name": "no_clipping",
|
|
371
|
+
"ok": true
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"name": "no_low_level_proof_window",
|
|
375
|
+
"ok": true
|
|
376
|
+
}
|
|
377
|
+
],
|
|
378
|
+
"failedReceipts": [],
|
|
379
|
+
"guardrails": {
|
|
380
|
+
"mixerEditAccepted": true,
|
|
381
|
+
"contractLevelReflected": true,
|
|
382
|
+
"renderedTargetMoved": true,
|
|
383
|
+
"requiredInstrumentsPreserved": true,
|
|
384
|
+
"noClipping": true,
|
|
385
|
+
"noLowLevelProofWindow": true
|
|
386
|
+
},
|
|
387
|
+
"targetMovement": {
|
|
388
|
+
"track": "bass",
|
|
389
|
+
"moved": true,
|
|
390
|
+
"deltas": {
|
|
391
|
+
"rms": -0.01625,
|
|
392
|
+
"peak": -0.0535,
|
|
393
|
+
"totalEnergy": -0.000304
|
|
394
|
+
},
|
|
395
|
+
"before": {
|
|
396
|
+
"track": "bass",
|
|
397
|
+
"sampleCount": 2,
|
|
398
|
+
"activeCount": 0,
|
|
399
|
+
"rms": 0.058,
|
|
400
|
+
"peak": 0.18415,
|
|
401
|
+
"totalEnergy": 0.000621
|
|
402
|
+
},
|
|
403
|
+
"after": {
|
|
404
|
+
"track": "bass",
|
|
405
|
+
"sampleCount": 2,
|
|
406
|
+
"activeCount": 0,
|
|
407
|
+
"rms": 0.04175,
|
|
408
|
+
"peak": 0.13065,
|
|
409
|
+
"totalEnergy": 0.000317
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
"summary": {
|
|
413
|
+
"status": "passed",
|
|
414
|
+
"windowCount": 2,
|
|
415
|
+
"findingCount": 0,
|
|
416
|
+
"mixProfile": {
|
|
417
|
+
"id": "monkberry-moon-delight-eq-lane-mix-v7",
|
|
418
|
+
"label": "Monkberry humanized EQ mix"
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
"index": 5,
|
|
424
|
+
"label": "chord +0.12",
|
|
425
|
+
"status": "supported",
|
|
426
|
+
"classification": null,
|
|
427
|
+
"claim": "Setting chord level from 0.38 to 0.50 changes rendered chord metrics while preserving Neon proof invariants.",
|
|
428
|
+
"action": {
|
|
429
|
+
"type": "set_mixer_level",
|
|
430
|
+
"track": "chord",
|
|
431
|
+
"from": 0.38,
|
|
432
|
+
"to": 0.5,
|
|
433
|
+
"delta": 0.12
|
|
434
|
+
},
|
|
435
|
+
"rankingMetric": 28.5162,
|
|
436
|
+
"receipts": [
|
|
437
|
+
{
|
|
438
|
+
"name": "mixer_edit_accepted",
|
|
439
|
+
"ok": true
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"name": "contract_mixer_level_reflects_action",
|
|
443
|
+
"ok": true
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"name": "rendered_target_metric_changed",
|
|
447
|
+
"ok": true
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
"name": "required_instruments_preserved",
|
|
451
|
+
"ok": true
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"name": "no_clipping",
|
|
455
|
+
"ok": true
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"name": "no_low_level_proof_window",
|
|
459
|
+
"ok": true
|
|
460
|
+
}
|
|
461
|
+
],
|
|
462
|
+
"failedReceipts": [],
|
|
463
|
+
"guardrails": {
|
|
464
|
+
"mixerEditAccepted": true,
|
|
465
|
+
"contractLevelReflected": true,
|
|
466
|
+
"renderedTargetMoved": true,
|
|
467
|
+
"requiredInstrumentsPreserved": true,
|
|
468
|
+
"noClipping": true,
|
|
469
|
+
"noLowLevelProofWindow": true
|
|
470
|
+
},
|
|
471
|
+
"targetMovement": {
|
|
472
|
+
"track": "chord",
|
|
473
|
+
"moved": true,
|
|
474
|
+
"deltas": {
|
|
475
|
+
"rms": 0.002,
|
|
476
|
+
"peak": 0.0105,
|
|
477
|
+
"totalEnergy": 0.000005
|
|
478
|
+
},
|
|
479
|
+
"before": {
|
|
480
|
+
"track": "chord",
|
|
481
|
+
"sampleCount": 2,
|
|
482
|
+
"activeCount": 0,
|
|
483
|
+
"rms": 0.0062,
|
|
484
|
+
"peak": 0.0334,
|
|
485
|
+
"totalEnergy": 0.000007
|
|
486
|
+
},
|
|
487
|
+
"after": {
|
|
488
|
+
"track": "chord",
|
|
489
|
+
"sampleCount": 2,
|
|
490
|
+
"activeCount": 0,
|
|
491
|
+
"rms": 0.0082,
|
|
492
|
+
"peak": 0.0439,
|
|
493
|
+
"totalEnergy": 0.000012
|
|
494
|
+
}
|
|
495
|
+
},
|
|
496
|
+
"summary": {
|
|
497
|
+
"status": "passed",
|
|
498
|
+
"windowCount": 2,
|
|
499
|
+
"findingCount": 0,
|
|
500
|
+
"mixProfile": {
|
|
501
|
+
"id": "monkberry-moon-delight-eq-lane-mix-v7",
|
|
502
|
+
"label": "Monkberry humanized EQ mix"
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"index": 2,
|
|
508
|
+
"label": "bass -0.10",
|
|
509
|
+
"status": "supported",
|
|
510
|
+
"classification": null,
|
|
511
|
+
"claim": "Setting bass level from 0.62 to 0.52 changes rendered bass metrics while preserving Neon proof invariants.",
|
|
512
|
+
"action": {
|
|
513
|
+
"type": "set_mixer_level",
|
|
514
|
+
"track": "bass",
|
|
515
|
+
"from": 0.62,
|
|
516
|
+
"to": 0.52,
|
|
517
|
+
"delta": -0.1
|
|
518
|
+
},
|
|
519
|
+
"rankingMetric": 29.17,
|
|
520
|
+
"receipts": [
|
|
521
|
+
{
|
|
522
|
+
"name": "mixer_edit_accepted",
|
|
523
|
+
"ok": true
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
"name": "contract_mixer_level_reflects_action",
|
|
527
|
+
"ok": true
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
"name": "rendered_target_metric_changed",
|
|
531
|
+
"ok": true
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
"name": "required_instruments_preserved",
|
|
535
|
+
"ok": true
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"name": "no_clipping",
|
|
539
|
+
"ok": true
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
"name": "no_low_level_proof_window",
|
|
543
|
+
"ok": true
|
|
544
|
+
}
|
|
545
|
+
],
|
|
546
|
+
"failedReceipts": [],
|
|
547
|
+
"guardrails": {
|
|
548
|
+
"mixerEditAccepted": true,
|
|
549
|
+
"contractLevelReflected": true,
|
|
550
|
+
"renderedTargetMoved": true,
|
|
551
|
+
"requiredInstrumentsPreserved": true,
|
|
552
|
+
"noClipping": true,
|
|
553
|
+
"noLowLevelProofWindow": true
|
|
554
|
+
},
|
|
555
|
+
"targetMovement": {
|
|
556
|
+
"track": "bass",
|
|
557
|
+
"moved": true,
|
|
558
|
+
"deltas": {
|
|
559
|
+
"rms": -0.00935,
|
|
560
|
+
"peak": -0.02975,
|
|
561
|
+
"totalEnergy": -0.000184
|
|
562
|
+
},
|
|
563
|
+
"before": {
|
|
564
|
+
"track": "bass",
|
|
565
|
+
"sampleCount": 2,
|
|
566
|
+
"activeCount": 0,
|
|
567
|
+
"rms": 0.058,
|
|
568
|
+
"peak": 0.18415,
|
|
569
|
+
"totalEnergy": 0.000621
|
|
570
|
+
},
|
|
571
|
+
"after": {
|
|
572
|
+
"track": "bass",
|
|
573
|
+
"sampleCount": 2,
|
|
574
|
+
"activeCount": 0,
|
|
575
|
+
"rms": 0.04865,
|
|
576
|
+
"peak": 0.1544,
|
|
577
|
+
"totalEnergy": 0.000437
|
|
578
|
+
}
|
|
579
|
+
},
|
|
580
|
+
"summary": {
|
|
581
|
+
"status": "passed",
|
|
582
|
+
"windowCount": 2,
|
|
583
|
+
"findingCount": 0,
|
|
584
|
+
"mixProfile": {
|
|
585
|
+
"id": "monkberry-moon-delight-eq-lane-mix-v7",
|
|
586
|
+
"label": "Monkberry humanized EQ mix"
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
"index": 1,
|
|
592
|
+
"label": "bass +0.12",
|
|
593
|
+
"status": "supported",
|
|
594
|
+
"classification": null,
|
|
595
|
+
"claim": "Setting bass level from 0.62 to 0.74 changes rendered bass metrics while preserving Neon proof invariants.",
|
|
596
|
+
"action": {
|
|
597
|
+
"type": "set_mixer_level",
|
|
598
|
+
"track": "bass",
|
|
599
|
+
"from": 0.62,
|
|
600
|
+
"to": 0.74,
|
|
601
|
+
"delta": 0.12
|
|
602
|
+
},
|
|
603
|
+
"rankingMetric": 31.7993,
|
|
604
|
+
"receipts": [
|
|
605
|
+
{
|
|
606
|
+
"name": "mixer_edit_accepted",
|
|
607
|
+
"ok": true
|
|
608
|
+
},
|
|
609
|
+
{
|
|
610
|
+
"name": "contract_mixer_level_reflects_action",
|
|
611
|
+
"ok": true
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
"name": "rendered_target_metric_changed",
|
|
615
|
+
"ok": true
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
"name": "required_instruments_preserved",
|
|
619
|
+
"ok": true
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
"name": "no_clipping",
|
|
623
|
+
"ok": true
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
"name": "no_low_level_proof_window",
|
|
627
|
+
"ok": true
|
|
628
|
+
}
|
|
629
|
+
],
|
|
630
|
+
"failedReceipts": [],
|
|
631
|
+
"guardrails": {
|
|
632
|
+
"mixerEditAccepted": true,
|
|
633
|
+
"contractLevelReflected": true,
|
|
634
|
+
"renderedTargetMoved": true,
|
|
635
|
+
"requiredInstrumentsPreserved": true,
|
|
636
|
+
"noClipping": true,
|
|
637
|
+
"noLowLevelProofWindow": true
|
|
638
|
+
},
|
|
639
|
+
"targetMovement": {
|
|
640
|
+
"track": "bass",
|
|
641
|
+
"moved": true,
|
|
642
|
+
"deltas": {
|
|
643
|
+
"rms": 0.01125,
|
|
644
|
+
"peak": 0.0356,
|
|
645
|
+
"totalEnergy": 0.000264
|
|
646
|
+
},
|
|
647
|
+
"before": {
|
|
648
|
+
"track": "bass",
|
|
649
|
+
"sampleCount": 2,
|
|
650
|
+
"activeCount": 0,
|
|
651
|
+
"rms": 0.058,
|
|
652
|
+
"peak": 0.18415,
|
|
653
|
+
"totalEnergy": 0.000621
|
|
654
|
+
},
|
|
655
|
+
"after": {
|
|
656
|
+
"track": "bass",
|
|
657
|
+
"sampleCount": 2,
|
|
658
|
+
"activeCount": 0,
|
|
659
|
+
"rms": 0.06925,
|
|
660
|
+
"peak": 0.21975,
|
|
661
|
+
"totalEnergy": 0.000885
|
|
662
|
+
}
|
|
663
|
+
},
|
|
664
|
+
"summary": {
|
|
665
|
+
"status": "passed",
|
|
666
|
+
"windowCount": 2,
|
|
667
|
+
"findingCount": 0,
|
|
668
|
+
"mixProfile": {
|
|
669
|
+
"id": "monkberry-moon-delight-eq-lane-mix-v7",
|
|
670
|
+
"label": "Monkberry humanized EQ mix"
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
"index": 3,
|
|
676
|
+
"label": "bass +0.20",
|
|
677
|
+
"status": "supported",
|
|
678
|
+
"classification": null,
|
|
679
|
+
"claim": "Setting bass level from 0.62 to 0.82 changes rendered bass metrics while preserving Neon proof invariants.",
|
|
680
|
+
"action": {
|
|
681
|
+
"type": "set_mixer_level",
|
|
682
|
+
"track": "bass",
|
|
683
|
+
"from": 0.62,
|
|
684
|
+
"to": 0.82,
|
|
685
|
+
"delta": 0.2
|
|
686
|
+
},
|
|
687
|
+
"rankingMetric": 35.2559,
|
|
688
|
+
"receipts": [
|
|
689
|
+
{
|
|
690
|
+
"name": "mixer_edit_accepted",
|
|
691
|
+
"ok": true
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
"name": "contract_mixer_level_reflects_action",
|
|
695
|
+
"ok": true
|
|
696
|
+
},
|
|
697
|
+
{
|
|
698
|
+
"name": "rendered_target_metric_changed",
|
|
699
|
+
"ok": true
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
"name": "required_instruments_preserved",
|
|
703
|
+
"ok": true
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
"name": "no_clipping",
|
|
707
|
+
"ok": true
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
"name": "no_low_level_proof_window",
|
|
711
|
+
"ok": true
|
|
712
|
+
}
|
|
713
|
+
],
|
|
714
|
+
"failedReceipts": [],
|
|
715
|
+
"guardrails": {
|
|
716
|
+
"mixerEditAccepted": true,
|
|
717
|
+
"contractLevelReflected": true,
|
|
718
|
+
"renderedTargetMoved": true,
|
|
719
|
+
"requiredInstrumentsPreserved": true,
|
|
720
|
+
"noClipping": true,
|
|
721
|
+
"noLowLevelProofWindow": true
|
|
722
|
+
},
|
|
723
|
+
"targetMovement": {
|
|
724
|
+
"track": "bass",
|
|
725
|
+
"moved": true,
|
|
726
|
+
"deltas": {
|
|
727
|
+
"rms": 0.0187,
|
|
728
|
+
"peak": 0.0594,
|
|
729
|
+
"totalEnergy": 0.000466
|
|
730
|
+
},
|
|
731
|
+
"before": {
|
|
732
|
+
"track": "bass",
|
|
733
|
+
"sampleCount": 2,
|
|
734
|
+
"activeCount": 0,
|
|
735
|
+
"rms": 0.058,
|
|
736
|
+
"peak": 0.18415,
|
|
737
|
+
"totalEnergy": 0.000621
|
|
738
|
+
},
|
|
739
|
+
"after": {
|
|
740
|
+
"track": "bass",
|
|
741
|
+
"sampleCount": 2,
|
|
742
|
+
"activeCount": 0,
|
|
743
|
+
"rms": 0.0767,
|
|
744
|
+
"peak": 0.24355,
|
|
745
|
+
"totalEnergy": 0.001087
|
|
746
|
+
}
|
|
747
|
+
},
|
|
748
|
+
"summary": {
|
|
749
|
+
"status": "passed",
|
|
750
|
+
"windowCount": 2,
|
|
751
|
+
"findingCount": 0,
|
|
752
|
+
"mixProfile": {
|
|
753
|
+
"id": "monkberry-moon-delight-eq-lane-mix-v7",
|
|
754
|
+
"label": "Monkberry humanized EQ mix"
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
],
|
|
759
|
+
"rejectedCandidates": [],
|
|
760
|
+
"ranking": {
|
|
761
|
+
"metric": "objective_mix_health_penalty",
|
|
762
|
+
"role": "review_order_only",
|
|
763
|
+
"lowerIsBetter": true,
|
|
764
|
+
"baselineCandidateRankingMetric": 28.8336,
|
|
765
|
+
"bestCandidateRankingMetric": 27.0709,
|
|
766
|
+
"rankingMetricDelta": 1.7626
|
|
767
|
+
},
|
|
768
|
+
"baseline": {
|
|
769
|
+
"status": "passed",
|
|
770
|
+
"windowCount": 2,
|
|
771
|
+
"findingCount": 0,
|
|
772
|
+
"mixProfile": {
|
|
773
|
+
"id": "monkberry-moon-delight-eq-lane-mix-v7",
|
|
774
|
+
"label": "Monkberry humanized EQ mix"
|
|
775
|
+
}
|
|
776
|
+
},
|
|
777
|
+
"guardrails": {
|
|
778
|
+
"supportedClaimCandidateCount": 6,
|
|
779
|
+
"rejectedCandidateCount": 0,
|
|
780
|
+
"stateRestoredAfterLoop": true,
|
|
781
|
+
"noPermanentEditUnlessApplyBest": true
|
|
782
|
+
},
|
|
783
|
+
"listenerPrompts": [
|
|
784
|
+
"Does the supported candidate match the requested musical intent?",
|
|
785
|
+
"Is the changed part better balanced in the proof window?",
|
|
786
|
+
"Did the proof window contain the musical material being judged?",
|
|
787
|
+
"Would another section or speaker profile change the listening decision?"
|
|
788
|
+
],
|
|
789
|
+
"caveats": [
|
|
790
|
+
"This packet does not prove subjective mix quality.",
|
|
791
|
+
"A supported candidate proves objective receipts and guardrails only.",
|
|
792
|
+
"Ranking orders review; it is not a taste score.",
|
|
793
|
+
"Keep or apply the candidate only after listening review."
|
|
794
|
+
]
|
|
795
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Neon Human Review Packet
|
|
2
|
+
|
|
3
|
+
- status: `candidate_ready_for_listening_review`
|
|
4
|
+
- domain: `audio_mix`
|
|
5
|
+
- evidence_role_pattern: `interaction_snapshots`
|
|
6
|
+
- requested_intent: turn the chord part down a little
|
|
7
|
+
- selected_song: Monkberry Moon Delight (Tab)
|
|
8
|
+
|
|
9
|
+
## Recommendation
|
|
10
|
+
|
|
11
|
+
- action: `review_before_applying_candidate`
|
|
12
|
+
- candidate: `chord -0.10`
|
|
13
|
+
- candidate_action: `set_mixer_level chord: 0.38 -> 0.28 (-0.1)`
|
|
14
|
+
- reason: All objective claim receipts passed for this candidate; ranking only orders listening review.
|
|
15
|
+
|
|
16
|
+
## Objective Receipts
|
|
17
|
+
|
|
18
|
+
- supported_candidates: `6`
|
|
19
|
+
- rejected_candidates: `0`
|
|
20
|
+
- state_restored_after_loop: `true`
|
|
21
|
+
- candidate_actions_are_transient: `true`
|
|
22
|
+
- no_permanent_edit_unless_apply_best: `true`
|
|
23
|
+
|
|
24
|
+
## Ranking
|
|
25
|
+
|
|
26
|
+
- metric: `objective_mix_health_penalty`
|
|
27
|
+
- role: `review_order_only`
|
|
28
|
+
- lower_is_better: `true`
|
|
29
|
+
- baseline: `28.8336`
|
|
30
|
+
- best: `27.0709`
|
|
31
|
+
- delta: `1.7626`
|
|
32
|
+
|
|
33
|
+
## Boundary
|
|
34
|
+
|
|
35
|
+
Objective receipts support or reject candidate change claims; musical taste still requires listening review.
|
|
36
|
+
|
|
37
|
+
## Listening Prompts
|
|
38
|
+
|
|
39
|
+
- Does the supported candidate match the requested musical intent?
|
|
40
|
+
- Is the changed part better balanced in the proof window?
|
|
41
|
+
- Did the proof window contain the musical material being judged?
|
|
42
|
+
- Would another section or speaker profile change the listening decision?
|
|
43
|
+
|
|
44
|
+
## Caveats
|
|
45
|
+
|
|
46
|
+
- This packet does not prove subjective mix quality.
|
|
47
|
+
- A supported candidate proves objective receipts and guardrails only.
|
|
48
|
+
- Ranking orders review; it is not a taste score.
|
|
49
|
+
- Keep or apply the candidate only after listening review.
|