@riddledc/riddle-proof-packs 0.4.4 → 0.4.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/README.md +12 -1
- package/bin/riddle-proof-review-packet +4 -0
- package/dist/chunk-SAE6HFAG.js +139 -0
- package/dist/humanReviewPacket-APSxuvat.d.cts +17 -0
- package/dist/humanReviewPacket-APSxuvat.d.ts +17 -0
- package/dist/index.cjs +187 -2
- package/dist/index.d.cts +2 -17
- package/dist/index.d.ts +2 -17
- package/dist/index.js +190 -131
- package/dist/reviewPacketCli.cjs +323 -0
- package/dist/reviewPacketCli.d.cts +28 -0
- package/dist/reviewPacketCli.d.ts +28 -0
- package/dist/reviewPacketCli.js +155 -0
- package/package.json +6 -2
- package/packs/neon-step-sequencer/README.md +3 -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 +55 -0
- package/packs/neon-step-sequencer/examples/README.md +3 -1
- package/packs/neon-step-sequencer/examples/run-006-ratchet-loop-human-review-packet/human-review-packet.md +3 -0
- package/packs/neon-step-sequencer/examples/run-007-approved-candidate-applied/artifact-manifest.json +32 -0
- package/packs/neon-step-sequencer/examples/run-007-approved-candidate-applied/console.json +4 -0
- package/packs/neon-step-sequencer/examples/run-007-approved-candidate-applied/dom-summary.json +40 -0
- package/packs/neon-step-sequencer/examples/run-007-approved-candidate-applied/human-review-packet.json +801 -0
- package/packs/neon-step-sequencer/examples/run-007-approved-candidate-applied/human-review-packet.md +52 -0
- package/packs/neon-step-sequencer/examples/run-007-approved-candidate-applied/profile-result.json +11994 -0
- package/packs/neon-step-sequencer/examples/run-007-approved-candidate-applied/proof.json +11994 -0
- package/packs/neon-step-sequencer/examples/run-007-approved-candidate-applied/screenshots/lilarcade-neon-ratchet-loop-approved-candidate-desktop-neon-ratchet-loop-approved-candidate.png +0 -0
- package/packs/neon-step-sequencer/examples/run-007-approved-candidate-applied/screenshots/lilarcade-neon-ratchet-loop-approved-candidate-desktop.png +0 -0
- package/packs/neon-step-sequencer/examples/run-007-approved-candidate-applied/summary.md +32 -0
- package/packs/neon-step-sequencer/profiles/ratchet-loop-approved-candidate.json +177 -0
package/README.md
CHANGED
|
@@ -99,17 +99,28 @@ Profiles are stored under `packs/<slug>/profile.json` and mirrored into the runt
|
|
|
99
99
|
- `neon-step-sequencer-full-mix-health-matrix`
|
|
100
100
|
- `neon-step-sequencer-explore-songs-and-mixes`
|
|
101
101
|
- `neon-step-sequencer-ratchet-loop-mix-level-search`
|
|
102
|
+
- `neon-step-sequencer-ratchet-loop-approved-candidate`
|
|
102
103
|
|
|
103
104
|
## Audio and Neon ratchet packs
|
|
104
105
|
|
|
105
106
|
The `audio-mix` directory contains reusable audio-proof authoring guidance, a profile template, a metrics schema, a ratchet method, and a human-review rubric.
|
|
106
107
|
|
|
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
|
|
108
|
+
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 profiles now expect a compact `humanReviewPacket` for listening handoff: supported/rejected candidates, objective guardrails, state restoration, review-order ranking, taste caveats, and, when explicitly requested, an applied-candidate receipt. The case-study files record the claim, evidence, failure classification, smallest layer changed, and next sharper question for each run.
|
|
108
109
|
|
|
109
110
|
### Human-review packet handoff
|
|
110
111
|
|
|
111
112
|
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
|
|
|
114
|
+
From the CLI:
|
|
115
|
+
|
|
116
|
+
```sh
|
|
117
|
+
riddle-proof-review-packet \
|
|
118
|
+
--proof artifacts/riddle-proof/proof.json \
|
|
119
|
+
--output artifacts/riddle-proof
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
This writes `human-review-packet.json` and `human-review-packet.md` next to the proof run. Use `--stdout` when an agent should read the Markdown handoff immediately.
|
|
123
|
+
|
|
113
124
|
```ts
|
|
114
125
|
import {
|
|
115
126
|
createHumanReviewPacketArtifacts,
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// src/humanReviewPacket.ts
|
|
2
|
+
var isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
3
|
+
var asRecord = (value) => isRecord(value) ? value : null;
|
|
4
|
+
var asArray = (value) => Array.isArray(value) ? value : [];
|
|
5
|
+
var getPath = (value, path) => {
|
|
6
|
+
let cursor = value;
|
|
7
|
+
for (const part of path.split(".")) {
|
|
8
|
+
if (!isRecord(cursor)) return void 0;
|
|
9
|
+
cursor = cursor[part];
|
|
10
|
+
}
|
|
11
|
+
return cursor;
|
|
12
|
+
};
|
|
13
|
+
var formatValue = (value) => {
|
|
14
|
+
if (value === null || value === void 0 || value === "") return "not captured";
|
|
15
|
+
if (typeof value === "number") return Number.isInteger(value) ? String(value) : String(Number(value.toFixed(4)));
|
|
16
|
+
if (typeof value === "boolean") return value ? "true" : "false";
|
|
17
|
+
return String(value);
|
|
18
|
+
};
|
|
19
|
+
var formatCodeValue = (value) => `\`${formatValue(value)}\``;
|
|
20
|
+
var formatAction = (action) => {
|
|
21
|
+
const record = asRecord(action);
|
|
22
|
+
if (!record) return "not captured";
|
|
23
|
+
const type = record.type ?? "set_mixer_level";
|
|
24
|
+
const track = record.track ?? "track";
|
|
25
|
+
const from = formatValue(record.from);
|
|
26
|
+
const to = formatValue(record.to);
|
|
27
|
+
const delta = record.delta === null || record.delta === void 0 ? "" : ` (${formatValue(record.delta)})`;
|
|
28
|
+
return `${type} ${track}: ${from} -> ${to}${delta}`;
|
|
29
|
+
};
|
|
30
|
+
var addOptionalList = (lines, heading, values) => {
|
|
31
|
+
const entries = asArray(values).filter((entry) => entry !== null && entry !== void 0 && entry !== "");
|
|
32
|
+
if (!entries.length) return;
|
|
33
|
+
lines.push("", `## ${heading}`, "");
|
|
34
|
+
for (const entry of entries) lines.push(`- ${formatValue(entry)}`);
|
|
35
|
+
};
|
|
36
|
+
function findHumanReviewPacket(value) {
|
|
37
|
+
if (!value || typeof value !== "object") return null;
|
|
38
|
+
if (isRecord(value) && value.kind === "human_review_packet") return value;
|
|
39
|
+
if (Array.isArray(value)) {
|
|
40
|
+
for (const entry of value) {
|
|
41
|
+
const packet = findHumanReviewPacket(entry);
|
|
42
|
+
if (packet) return packet;
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
for (const entry of Object.values(value)) {
|
|
47
|
+
const packet = findHumanReviewPacket(entry);
|
|
48
|
+
if (packet) return packet;
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
function requireHumanReviewPacket(value) {
|
|
53
|
+
const packet = findHumanReviewPacket(value);
|
|
54
|
+
if (!packet) throw new Error("No human_review_packet found");
|
|
55
|
+
return packet;
|
|
56
|
+
}
|
|
57
|
+
function formatHumanReviewPacketMarkdown(packet, options = {}) {
|
|
58
|
+
if (packet.kind !== "human_review_packet") {
|
|
59
|
+
throw new Error("Expected a human_review_packet");
|
|
60
|
+
}
|
|
61
|
+
const recommendation = asRecord(packet.recommendation) ?? {};
|
|
62
|
+
const candidate = asRecord(recommendation.candidate) ?? {};
|
|
63
|
+
const guardrails = asRecord(packet.guardrails) ?? {};
|
|
64
|
+
const ranking = asRecord(packet.ranking) ?? {};
|
|
65
|
+
const request = asRecord(packet.request) ?? {};
|
|
66
|
+
const approval = asRecord(request.approval) ?? {};
|
|
67
|
+
const supportedCandidates = asArray(packet.supportedCandidates);
|
|
68
|
+
const rejectedCandidates = asArray(packet.rejectedCandidates);
|
|
69
|
+
const selectedSong = getPath(packet, "target.selectedSong.selectedSong") ?? getPath(packet, "target.routeState.selectedSong");
|
|
70
|
+
const lines = [
|
|
71
|
+
`# ${options.title ?? "Human Review Packet"}`,
|
|
72
|
+
"",
|
|
73
|
+
`- status: ${formatCodeValue(packet.status)}`,
|
|
74
|
+
`- domain: ${formatCodeValue(packet.domain)}`,
|
|
75
|
+
`- evidence_role_pattern: ${formatCodeValue(packet.evidenceRolePattern)}`,
|
|
76
|
+
`- requested_intent: ${formatValue(packet.requestedIntent)}`,
|
|
77
|
+
`- selected_song: ${formatValue(selectedSong)}`,
|
|
78
|
+
"",
|
|
79
|
+
"## Recommendation",
|
|
80
|
+
"",
|
|
81
|
+
`- action: ${formatCodeValue(recommendation.action)}`,
|
|
82
|
+
`- candidate: ${formatCodeValue(candidate.label)}`,
|
|
83
|
+
`- candidate_action: ${formatCodeValue(formatAction(candidate.action))}`,
|
|
84
|
+
`- reason: ${formatValue(recommendation.reason)}`,
|
|
85
|
+
"",
|
|
86
|
+
"## Objective Receipts",
|
|
87
|
+
"",
|
|
88
|
+
`- supported_candidates: ${formatCodeValue(guardrails.supportedClaimCandidateCount ?? supportedCandidates.length)}`,
|
|
89
|
+
`- rejected_candidates: ${formatCodeValue(guardrails.rejectedCandidateCount ?? rejectedCandidates.length)}`,
|
|
90
|
+
`- state_restored_after_loop: ${formatCodeValue(guardrails.stateRestoredAfterLoop)}`,
|
|
91
|
+
`- candidate_actions_are_transient: ${formatCodeValue(request.candidateActionsAreTransient)}`,
|
|
92
|
+
`- no_permanent_edit_unless_apply_best: ${formatCodeValue(guardrails.noPermanentEditUnlessApplyBest)}`,
|
|
93
|
+
`- approved_candidate_applied: ${formatCodeValue(guardrails.approvedCandidateApplied)}`,
|
|
94
|
+
`- approval_mode: ${formatCodeValue(approval.mode)}`,
|
|
95
|
+
`- approval_basis: ${formatValue(approval.basis)}`,
|
|
96
|
+
"",
|
|
97
|
+
"## Ranking",
|
|
98
|
+
"",
|
|
99
|
+
`- metric: ${formatCodeValue(ranking.metric)}`,
|
|
100
|
+
`- role: ${formatCodeValue(ranking.role)}`,
|
|
101
|
+
`- lower_is_better: ${formatCodeValue(ranking.lowerIsBetter)}`,
|
|
102
|
+
`- baseline: ${formatCodeValue(ranking.baselineCandidateRankingMetric)}`,
|
|
103
|
+
`- best: ${formatCodeValue(ranking.bestCandidateRankingMetric)}`,
|
|
104
|
+
`- delta: ${formatCodeValue(ranking.rankingMetricDelta)}`,
|
|
105
|
+
"",
|
|
106
|
+
"## Boundary",
|
|
107
|
+
"",
|
|
108
|
+
formatValue(packet.proofBoundary)
|
|
109
|
+
];
|
|
110
|
+
addOptionalList(lines, "Listening Prompts", packet.listenerPrompts);
|
|
111
|
+
addOptionalList(lines, "Caveats", packet.caveats);
|
|
112
|
+
if (rejectedCandidates.length) {
|
|
113
|
+
lines.push("", "## Rejected Candidates", "");
|
|
114
|
+
for (const entry of rejectedCandidates) {
|
|
115
|
+
const rejected = asRecord(entry) ?? {};
|
|
116
|
+
const failedReceipts = asArray(rejected.failedReceipts).map(formatValue).join(", ") || "not captured";
|
|
117
|
+
lines.push(`- ${formatCodeValue(rejected.label)}: ${failedReceipts}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return `${lines.join("\n")}
|
|
121
|
+
`;
|
|
122
|
+
}
|
|
123
|
+
function createHumanReviewPacketArtifacts(proofOrPacket, options = {}) {
|
|
124
|
+
const packet = requireHumanReviewPacket(proofOrPacket);
|
|
125
|
+
const markdown = formatHumanReviewPacketMarkdown(packet, options);
|
|
126
|
+
return {
|
|
127
|
+
packet,
|
|
128
|
+
json: `${JSON.stringify(packet, null, 2)}
|
|
129
|
+
`,
|
|
130
|
+
markdown
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export {
|
|
135
|
+
findHumanReviewPacket,
|
|
136
|
+
requireHumanReviewPacket,
|
|
137
|
+
formatHumanReviewPacketMarkdown,
|
|
138
|
+
createHumanReviewPacketArtifacts
|
|
139
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type HumanReviewPacket = Record<string, unknown> & {
|
|
2
|
+
kind: "human_review_packet";
|
|
3
|
+
};
|
|
4
|
+
interface HumanReviewPacketMarkdownOptions {
|
|
5
|
+
title?: string;
|
|
6
|
+
}
|
|
7
|
+
interface HumanReviewPacketArtifacts {
|
|
8
|
+
packet: HumanReviewPacket;
|
|
9
|
+
json: string;
|
|
10
|
+
markdown: string;
|
|
11
|
+
}
|
|
12
|
+
declare function findHumanReviewPacket(value: unknown): HumanReviewPacket | null;
|
|
13
|
+
declare function requireHumanReviewPacket(value: unknown): HumanReviewPacket;
|
|
14
|
+
declare function formatHumanReviewPacketMarkdown(packet: HumanReviewPacket, options?: HumanReviewPacketMarkdownOptions): string;
|
|
15
|
+
declare function createHumanReviewPacketArtifacts(proofOrPacket: unknown, options?: HumanReviewPacketMarkdownOptions): HumanReviewPacketArtifacts;
|
|
16
|
+
|
|
17
|
+
export { type HumanReviewPacket as H, type HumanReviewPacketArtifacts as a, type HumanReviewPacketMarkdownOptions as b, createHumanReviewPacketArtifacts as c, formatHumanReviewPacketMarkdown as d, findHumanReviewPacket as f, requireHumanReviewPacket as r };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type HumanReviewPacket = Record<string, unknown> & {
|
|
2
|
+
kind: "human_review_packet";
|
|
3
|
+
};
|
|
4
|
+
interface HumanReviewPacketMarkdownOptions {
|
|
5
|
+
title?: string;
|
|
6
|
+
}
|
|
7
|
+
interface HumanReviewPacketArtifacts {
|
|
8
|
+
packet: HumanReviewPacket;
|
|
9
|
+
json: string;
|
|
10
|
+
markdown: string;
|
|
11
|
+
}
|
|
12
|
+
declare function findHumanReviewPacket(value: unknown): HumanReviewPacket | null;
|
|
13
|
+
declare function requireHumanReviewPacket(value: unknown): HumanReviewPacket;
|
|
14
|
+
declare function formatHumanReviewPacketMarkdown(packet: HumanReviewPacket, options?: HumanReviewPacketMarkdownOptions): string;
|
|
15
|
+
declare function createHumanReviewPacketArtifacts(proofOrPacket: unknown, options?: HumanReviewPacketMarkdownOptions): HumanReviewPacketArtifacts;
|
|
16
|
+
|
|
17
|
+
export { type HumanReviewPacket as H, type HumanReviewPacketArtifacts as a, type HumanReviewPacketMarkdownOptions as b, createHumanReviewPacketArtifacts as c, formatHumanReviewPacketMarkdown as d, findHumanReviewPacket as f, requireHumanReviewPacket as r };
|
package/dist/index.cjs
CHANGED
|
@@ -1656,6 +1656,185 @@ var playback_sync_default = {
|
|
|
1656
1656
|
}
|
|
1657
1657
|
};
|
|
1658
1658
|
|
|
1659
|
+
// packs/neon-step-sequencer/profiles/ratchet-loop-approved-candidate.json
|
|
1660
|
+
var ratchet_loop_approved_candidate_default = {
|
|
1661
|
+
version: "riddle-proof.profile.v1",
|
|
1662
|
+
name: "neon-step-sequencer-ratchet-loop-approved-candidate",
|
|
1663
|
+
target: {
|
|
1664
|
+
route: "/games/drum-sequencer?song=monkberry-moon-delight-tab&mix=profile&view=trainer&instrument=bass",
|
|
1665
|
+
viewports: [
|
|
1666
|
+
{
|
|
1667
|
+
name: "desktop",
|
|
1668
|
+
width: 1440,
|
|
1669
|
+
height: 1e3
|
|
1670
|
+
}
|
|
1671
|
+
],
|
|
1672
|
+
timeout_sec: 360,
|
|
1673
|
+
wait_for_selector: ".drum-sequencer h1",
|
|
1674
|
+
setup_actions: [
|
|
1675
|
+
{
|
|
1676
|
+
type: "window_eval",
|
|
1677
|
+
label: "capture-neon-contract",
|
|
1678
|
+
timeout_ms: 1e4,
|
|
1679
|
+
store_return_to: "__neonMixProof.contract",
|
|
1680
|
+
script: "const contract=window.__NEON_MIX_PROOF__; const diagnostic=contract?.captureDiagnostic?.(); window.__neonMixProof={...(window.__neonMixProof||{}),contract:{available:Boolean(contract),diagnostic}}; return window.__neonMixProof.contract;",
|
|
1681
|
+
return_summary_fields: [
|
|
1682
|
+
{
|
|
1683
|
+
path: "available"
|
|
1684
|
+
},
|
|
1685
|
+
{
|
|
1686
|
+
path: "diagnostic.selectedSong.selectedSong"
|
|
1687
|
+
}
|
|
1688
|
+
]
|
|
1689
|
+
},
|
|
1690
|
+
{
|
|
1691
|
+
type: "assert_window_value",
|
|
1692
|
+
path: "__neonMixProof.contract.available",
|
|
1693
|
+
expected_value: true,
|
|
1694
|
+
timeout_ms: 1e4
|
|
1695
|
+
},
|
|
1696
|
+
{
|
|
1697
|
+
type: "window_call",
|
|
1698
|
+
label: "apply-approved-claim-candidate",
|
|
1699
|
+
path: "__NEON_MIX_PROOF__.runRatchetLoop",
|
|
1700
|
+
args: [
|
|
1701
|
+
{
|
|
1702
|
+
intent: "turn the chord part down a little",
|
|
1703
|
+
strategy: "mix-level-search",
|
|
1704
|
+
focusTracks: [
|
|
1705
|
+
"bass",
|
|
1706
|
+
"chord",
|
|
1707
|
+
"guitar",
|
|
1708
|
+
"rhythmSynth"
|
|
1709
|
+
],
|
|
1710
|
+
maxIterations: 6,
|
|
1711
|
+
monitorProfile: "smallSpeaker",
|
|
1712
|
+
restore: true,
|
|
1713
|
+
applyBest: true,
|
|
1714
|
+
approval: {
|
|
1715
|
+
mode: "mixing_canon_surrogate",
|
|
1716
|
+
approvedBy: "codex",
|
|
1717
|
+
basis: "subtle level reduction after objective receipts pass; this keeps development moving while preserving a listening-review caveat"
|
|
1718
|
+
}
|
|
1719
|
+
}
|
|
1720
|
+
],
|
|
1721
|
+
store_return_to: "__neonMixProof.approvedCandidateLoop",
|
|
1722
|
+
capture_return: true,
|
|
1723
|
+
timeout_ms: 24e4,
|
|
1724
|
+
return_summary_fields: [
|
|
1725
|
+
{
|
|
1726
|
+
path: "ok"
|
|
1727
|
+
},
|
|
1728
|
+
{
|
|
1729
|
+
path: "status"
|
|
1730
|
+
},
|
|
1731
|
+
{
|
|
1732
|
+
path: "best.claimVerdict.status"
|
|
1733
|
+
},
|
|
1734
|
+
{
|
|
1735
|
+
path: "best.claimCandidate.action.track"
|
|
1736
|
+
},
|
|
1737
|
+
{
|
|
1738
|
+
path: "appliedCandidateReceipt.ok"
|
|
1739
|
+
},
|
|
1740
|
+
{
|
|
1741
|
+
path: "humanReviewPacket.status"
|
|
1742
|
+
},
|
|
1743
|
+
{
|
|
1744
|
+
path: "humanReviewPacket.request.approval.mode"
|
|
1745
|
+
},
|
|
1746
|
+
{
|
|
1747
|
+
path: "humanReviewPacket.ranking.role"
|
|
1748
|
+
}
|
|
1749
|
+
]
|
|
1750
|
+
},
|
|
1751
|
+
{
|
|
1752
|
+
type: "assert_window_value",
|
|
1753
|
+
path: "__neonMixProof.approvedCandidateLoop.ok",
|
|
1754
|
+
expected_value: true,
|
|
1755
|
+
timeout_ms: 1e4
|
|
1756
|
+
},
|
|
1757
|
+
{
|
|
1758
|
+
type: "assert_window_value",
|
|
1759
|
+
path: "__neonMixProof.approvedCandidateLoop.appliedCandidateReceipt.ok",
|
|
1760
|
+
expected_value: true,
|
|
1761
|
+
timeout_ms: 1e4
|
|
1762
|
+
},
|
|
1763
|
+
{
|
|
1764
|
+
type: "assert_window_value",
|
|
1765
|
+
path: "__neonMixProof.approvedCandidateLoop.humanReviewPacket.status",
|
|
1766
|
+
expected_value: "candidate_applied_for_listening_review",
|
|
1767
|
+
timeout_ms: 1e4
|
|
1768
|
+
},
|
|
1769
|
+
{
|
|
1770
|
+
type: "assert_window_value",
|
|
1771
|
+
path: "__neonMixProof.approvedCandidateLoop.humanReviewPacket.request.candidateActionsAreTransient",
|
|
1772
|
+
expected_value: false,
|
|
1773
|
+
timeout_ms: 1e4
|
|
1774
|
+
},
|
|
1775
|
+
{
|
|
1776
|
+
type: "assert_window_value",
|
|
1777
|
+
path: "__neonMixProof.approvedCandidateLoop.humanReviewPacket.guardrails.approvedCandidateApplied",
|
|
1778
|
+
expected_value: true,
|
|
1779
|
+
timeout_ms: 1e4
|
|
1780
|
+
},
|
|
1781
|
+
{
|
|
1782
|
+
type: "screenshot",
|
|
1783
|
+
label: "neon-step-sequencer-ratchet-loop-approved-candidate",
|
|
1784
|
+
mode: "viewport"
|
|
1785
|
+
}
|
|
1786
|
+
]
|
|
1787
|
+
},
|
|
1788
|
+
checks: [
|
|
1789
|
+
{
|
|
1790
|
+
type: "route_loaded",
|
|
1791
|
+
expected_path: "/games/drum-sequencer"
|
|
1792
|
+
},
|
|
1793
|
+
{
|
|
1794
|
+
type: "selector_visible",
|
|
1795
|
+
selector: ".drum-sequencer h1"
|
|
1796
|
+
},
|
|
1797
|
+
{
|
|
1798
|
+
type: "no_horizontal_overflow"
|
|
1799
|
+
},
|
|
1800
|
+
{
|
|
1801
|
+
type: "no_fatal_console_errors"
|
|
1802
|
+
}
|
|
1803
|
+
],
|
|
1804
|
+
artifacts: [
|
|
1805
|
+
"screenshot",
|
|
1806
|
+
"console",
|
|
1807
|
+
"dom_summary",
|
|
1808
|
+
"proof_json"
|
|
1809
|
+
],
|
|
1810
|
+
baseline_policy: "invariant_only",
|
|
1811
|
+
failure_policy: {
|
|
1812
|
+
environment_blocked: "neutral",
|
|
1813
|
+
proof_insufficient: "review",
|
|
1814
|
+
needs_human_review: "review",
|
|
1815
|
+
product_regression: "fail"
|
|
1816
|
+
},
|
|
1817
|
+
metadata: {
|
|
1818
|
+
pack_id: "neon_step_sequencer",
|
|
1819
|
+
pack_public_name: "Neon Step Sequencer Pack",
|
|
1820
|
+
evidence_role_pattern: "interaction_snapshots",
|
|
1821
|
+
purpose: "Run a bounded loop, use an explicit operator-approval surrogate, apply the supported claim candidate, and preserve a listening-review packet.",
|
|
1822
|
+
required_receipts: [
|
|
1823
|
+
"ratchet loop returns ok",
|
|
1824
|
+
"a supported claim candidate is selected",
|
|
1825
|
+
"approved candidate application receipt is captured",
|
|
1826
|
+
"compact human-review packet is captured",
|
|
1827
|
+
"ranking remains review-order only",
|
|
1828
|
+
"listening-review caveat remains explicit"
|
|
1829
|
+
],
|
|
1830
|
+
does_not_prove: [
|
|
1831
|
+
"subjective mix quality",
|
|
1832
|
+
"that the approval surrogate is a real listener preference",
|
|
1833
|
+
"all possible mix edits"
|
|
1834
|
+
]
|
|
1835
|
+
}
|
|
1836
|
+
};
|
|
1837
|
+
|
|
1659
1838
|
// packs/neon-step-sequencer/profiles/ratchet-loop-mix-level-search.json
|
|
1660
1839
|
var ratchet_loop_mix_level_search_default = {
|
|
1661
1840
|
version: "riddle-proof.profile.v1",
|
|
@@ -2258,7 +2437,8 @@ var rawProfiles = {
|
|
|
2258
2437
|
"neon-step-sequencer-mobile-trainer-layout": mobile_trainer_layout_default,
|
|
2259
2438
|
"neon-step-sequencer-full-mix-health-matrix": full_mix_health_matrix_default,
|
|
2260
2439
|
"neon-step-sequencer-explore-songs-and-mixes": explore_songs_and_mixes_default,
|
|
2261
|
-
"neon-step-sequencer-ratchet-loop-mix-level-search": ratchet_loop_mix_level_search_default
|
|
2440
|
+
"neon-step-sequencer-ratchet-loop-mix-level-search": ratchet_loop_mix_level_search_default,
|
|
2441
|
+
"neon-step-sequencer-ratchet-loop-approved-candidate": ratchet_loop_approved_candidate_default
|
|
2262
2442
|
};
|
|
2263
2443
|
var sourcePathOverrides = Object.freeze({
|
|
2264
2444
|
"neon-step-sequencer-fast-mix-health": "packs/neon-step-sequencer/profiles/fast-mix-health.json",
|
|
@@ -2268,7 +2448,8 @@ var sourcePathOverrides = Object.freeze({
|
|
|
2268
2448
|
"neon-step-sequencer-mobile-trainer-layout": "packs/neon-step-sequencer/profiles/mobile-trainer-layout.json",
|
|
2269
2449
|
"neon-step-sequencer-full-mix-health-matrix": "packs/neon-step-sequencer/profiles/full-mix-health-matrix.json",
|
|
2270
2450
|
"neon-step-sequencer-explore-songs-and-mixes": "packs/neon-step-sequencer/profiles/explore-songs-and-mixes.json",
|
|
2271
|
-
"neon-step-sequencer-ratchet-loop-mix-level-search": "packs/neon-step-sequencer/profiles/ratchet-loop-mix-level-search.json"
|
|
2451
|
+
"neon-step-sequencer-ratchet-loop-mix-level-search": "packs/neon-step-sequencer/profiles/ratchet-loop-mix-level-search.json",
|
|
2452
|
+
"neon-step-sequencer-ratchet-loop-approved-candidate": "packs/neon-step-sequencer/profiles/ratchet-loop-approved-candidate.json"
|
|
2272
2453
|
});
|
|
2273
2454
|
var RIDDLE_PROOF_PACK_PROFILES = Object.freeze(
|
|
2274
2455
|
Object.fromEntries(
|
|
@@ -2415,6 +2596,7 @@ function formatHumanReviewPacketMarkdown(packet, options = {}) {
|
|
|
2415
2596
|
const guardrails = asRecord(packet.guardrails) ?? {};
|
|
2416
2597
|
const ranking = asRecord(packet.ranking) ?? {};
|
|
2417
2598
|
const request = asRecord(packet.request) ?? {};
|
|
2599
|
+
const approval = asRecord(request.approval) ?? {};
|
|
2418
2600
|
const supportedCandidates = asArray(packet.supportedCandidates);
|
|
2419
2601
|
const rejectedCandidates = asArray(packet.rejectedCandidates);
|
|
2420
2602
|
const selectedSong = getPath(packet, "target.selectedSong.selectedSong") ?? getPath(packet, "target.routeState.selectedSong");
|
|
@@ -2441,6 +2623,9 @@ function formatHumanReviewPacketMarkdown(packet, options = {}) {
|
|
|
2441
2623
|
`- state_restored_after_loop: ${formatCodeValue(guardrails.stateRestoredAfterLoop)}`,
|
|
2442
2624
|
`- candidate_actions_are_transient: ${formatCodeValue(request.candidateActionsAreTransient)}`,
|
|
2443
2625
|
`- no_permanent_edit_unless_apply_best: ${formatCodeValue(guardrails.noPermanentEditUnlessApplyBest)}`,
|
|
2626
|
+
`- approved_candidate_applied: ${formatCodeValue(guardrails.approvedCandidateApplied)}`,
|
|
2627
|
+
`- approval_mode: ${formatCodeValue(approval.mode)}`,
|
|
2628
|
+
`- approval_basis: ${formatValue(approval.basis)}`,
|
|
2444
2629
|
"",
|
|
2445
2630
|
"## Ranking",
|
|
2446
2631
|
"",
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as _riddledc_riddle_proof from '@riddledc/riddle-proof';
|
|
2
2
|
import { RiddleProofProfile } from '@riddledc/riddle-proof';
|
|
3
|
+
export { H as HumanReviewPacket, a as HumanReviewPacketArtifacts, b as HumanReviewPacketMarkdownOptions, c as createHumanReviewPacketArtifacts, f as findHumanReviewPacket, d as formatHumanReviewPacketMarkdown, r as requireHumanReviewPacket } from './humanReviewPacket-APSxuvat.cjs';
|
|
3
4
|
|
|
4
5
|
interface RiddleProofPackProfileManifest {
|
|
5
6
|
/** Profile slug and canonical manifest key. */
|
|
@@ -59,20 +60,4 @@ interface RiddleProofPackProfileOverrides {
|
|
|
59
60
|
*/
|
|
60
61
|
declare function instantiateRiddleProofProfile(profileName: string, options?: RiddleProofPackProfileOverrides): RiddleProofProfile;
|
|
61
62
|
|
|
62
|
-
type
|
|
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 };
|
|
63
|
+
export { RIDDLE_PROOF_PACK_MANIFEST, RIDDLE_PROOF_PACK_PROFILES, type RiddleProofPackProfileManifest, getPackEnabledRiddleProofPackProfiles, getRiddleProofPackProfile, getRiddleProofPackProfileByPackId, getRiddleProofPackProfileManifest, getRiddleProofProfilesByPackId, instantiateRiddleProofProfile, listRiddleProofPackProfiles, listRiddleProofPacks };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as _riddledc_riddle_proof from '@riddledc/riddle-proof';
|
|
2
2
|
import { RiddleProofProfile } from '@riddledc/riddle-proof';
|
|
3
|
+
export { H as HumanReviewPacket, a as HumanReviewPacketArtifacts, b as HumanReviewPacketMarkdownOptions, c as createHumanReviewPacketArtifacts, f as findHumanReviewPacket, d as formatHumanReviewPacketMarkdown, r as requireHumanReviewPacket } from './humanReviewPacket-APSxuvat.js';
|
|
3
4
|
|
|
4
5
|
interface RiddleProofPackProfileManifest {
|
|
5
6
|
/** Profile slug and canonical manifest key. */
|
|
@@ -59,20 +60,4 @@ interface RiddleProofPackProfileOverrides {
|
|
|
59
60
|
*/
|
|
60
61
|
declare function instantiateRiddleProofProfile(profileName: string, options?: RiddleProofPackProfileOverrides): RiddleProofProfile;
|
|
61
62
|
|
|
62
|
-
type
|
|
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 };
|
|
63
|
+
export { RIDDLE_PROOF_PACK_MANIFEST, RIDDLE_PROOF_PACK_PROFILES, type RiddleProofPackProfileManifest, getPackEnabledRiddleProofPackProfiles, getRiddleProofPackProfile, getRiddleProofPackProfileByPackId, getRiddleProofPackProfileManifest, getRiddleProofProfilesByPackId, instantiateRiddleProofProfile, listRiddleProofPackProfiles, listRiddleProofPacks };
|