@riddledc/riddle-proof-packs 0.4.5 → 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 +2 -1
- package/dist/{chunk-XQ2N4EYF.js → chunk-SAE6HFAG.js} +4 -0
- package/dist/index.cjs +187 -2
- package/dist/index.js +184 -3
- package/dist/reviewPacketCli.cjs +4 -0
- package/dist/reviewPacketCli.js +1 -1
- package/package.json +1 -1
- 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,12 +99,13 @@ 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
|
|
|
@@ -63,6 +63,7 @@ function formatHumanReviewPacketMarkdown(packet, options = {}) {
|
|
|
63
63
|
const guardrails = asRecord(packet.guardrails) ?? {};
|
|
64
64
|
const ranking = asRecord(packet.ranking) ?? {};
|
|
65
65
|
const request = asRecord(packet.request) ?? {};
|
|
66
|
+
const approval = asRecord(request.approval) ?? {};
|
|
66
67
|
const supportedCandidates = asArray(packet.supportedCandidates);
|
|
67
68
|
const rejectedCandidates = asArray(packet.rejectedCandidates);
|
|
68
69
|
const selectedSong = getPath(packet, "target.selectedSong.selectedSong") ?? getPath(packet, "target.routeState.selectedSong");
|
|
@@ -89,6 +90,9 @@ function formatHumanReviewPacketMarkdown(packet, options = {}) {
|
|
|
89
90
|
`- state_restored_after_loop: ${formatCodeValue(guardrails.stateRestoredAfterLoop)}`,
|
|
90
91
|
`- candidate_actions_are_transient: ${formatCodeValue(request.candidateActionsAreTransient)}`,
|
|
91
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)}`,
|
|
92
96
|
"",
|
|
93
97
|
"## Ranking",
|
|
94
98
|
"",
|
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.js
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
findHumanReviewPacket,
|
|
4
4
|
formatHumanReviewPacketMarkdown,
|
|
5
5
|
requireHumanReviewPacket
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SAE6HFAG.js";
|
|
7
7
|
|
|
8
8
|
// src/pack-data.ts
|
|
9
9
|
import { normalizeRiddleProofProfile } from "@riddledc/riddle-proof";
|
|
@@ -1624,6 +1624,185 @@ var playback_sync_default = {
|
|
|
1624
1624
|
}
|
|
1625
1625
|
};
|
|
1626
1626
|
|
|
1627
|
+
// packs/neon-step-sequencer/profiles/ratchet-loop-approved-candidate.json
|
|
1628
|
+
var ratchet_loop_approved_candidate_default = {
|
|
1629
|
+
version: "riddle-proof.profile.v1",
|
|
1630
|
+
name: "neon-step-sequencer-ratchet-loop-approved-candidate",
|
|
1631
|
+
target: {
|
|
1632
|
+
route: "/games/drum-sequencer?song=monkberry-moon-delight-tab&mix=profile&view=trainer&instrument=bass",
|
|
1633
|
+
viewports: [
|
|
1634
|
+
{
|
|
1635
|
+
name: "desktop",
|
|
1636
|
+
width: 1440,
|
|
1637
|
+
height: 1e3
|
|
1638
|
+
}
|
|
1639
|
+
],
|
|
1640
|
+
timeout_sec: 360,
|
|
1641
|
+
wait_for_selector: ".drum-sequencer h1",
|
|
1642
|
+
setup_actions: [
|
|
1643
|
+
{
|
|
1644
|
+
type: "window_eval",
|
|
1645
|
+
label: "capture-neon-contract",
|
|
1646
|
+
timeout_ms: 1e4,
|
|
1647
|
+
store_return_to: "__neonMixProof.contract",
|
|
1648
|
+
script: "const contract=window.__NEON_MIX_PROOF__; const diagnostic=contract?.captureDiagnostic?.(); window.__neonMixProof={...(window.__neonMixProof||{}),contract:{available:Boolean(contract),diagnostic}}; return window.__neonMixProof.contract;",
|
|
1649
|
+
return_summary_fields: [
|
|
1650
|
+
{
|
|
1651
|
+
path: "available"
|
|
1652
|
+
},
|
|
1653
|
+
{
|
|
1654
|
+
path: "diagnostic.selectedSong.selectedSong"
|
|
1655
|
+
}
|
|
1656
|
+
]
|
|
1657
|
+
},
|
|
1658
|
+
{
|
|
1659
|
+
type: "assert_window_value",
|
|
1660
|
+
path: "__neonMixProof.contract.available",
|
|
1661
|
+
expected_value: true,
|
|
1662
|
+
timeout_ms: 1e4
|
|
1663
|
+
},
|
|
1664
|
+
{
|
|
1665
|
+
type: "window_call",
|
|
1666
|
+
label: "apply-approved-claim-candidate",
|
|
1667
|
+
path: "__NEON_MIX_PROOF__.runRatchetLoop",
|
|
1668
|
+
args: [
|
|
1669
|
+
{
|
|
1670
|
+
intent: "turn the chord part down a little",
|
|
1671
|
+
strategy: "mix-level-search",
|
|
1672
|
+
focusTracks: [
|
|
1673
|
+
"bass",
|
|
1674
|
+
"chord",
|
|
1675
|
+
"guitar",
|
|
1676
|
+
"rhythmSynth"
|
|
1677
|
+
],
|
|
1678
|
+
maxIterations: 6,
|
|
1679
|
+
monitorProfile: "smallSpeaker",
|
|
1680
|
+
restore: true,
|
|
1681
|
+
applyBest: true,
|
|
1682
|
+
approval: {
|
|
1683
|
+
mode: "mixing_canon_surrogate",
|
|
1684
|
+
approvedBy: "codex",
|
|
1685
|
+
basis: "subtle level reduction after objective receipts pass; this keeps development moving while preserving a listening-review caveat"
|
|
1686
|
+
}
|
|
1687
|
+
}
|
|
1688
|
+
],
|
|
1689
|
+
store_return_to: "__neonMixProof.approvedCandidateLoop",
|
|
1690
|
+
capture_return: true,
|
|
1691
|
+
timeout_ms: 24e4,
|
|
1692
|
+
return_summary_fields: [
|
|
1693
|
+
{
|
|
1694
|
+
path: "ok"
|
|
1695
|
+
},
|
|
1696
|
+
{
|
|
1697
|
+
path: "status"
|
|
1698
|
+
},
|
|
1699
|
+
{
|
|
1700
|
+
path: "best.claimVerdict.status"
|
|
1701
|
+
},
|
|
1702
|
+
{
|
|
1703
|
+
path: "best.claimCandidate.action.track"
|
|
1704
|
+
},
|
|
1705
|
+
{
|
|
1706
|
+
path: "appliedCandidateReceipt.ok"
|
|
1707
|
+
},
|
|
1708
|
+
{
|
|
1709
|
+
path: "humanReviewPacket.status"
|
|
1710
|
+
},
|
|
1711
|
+
{
|
|
1712
|
+
path: "humanReviewPacket.request.approval.mode"
|
|
1713
|
+
},
|
|
1714
|
+
{
|
|
1715
|
+
path: "humanReviewPacket.ranking.role"
|
|
1716
|
+
}
|
|
1717
|
+
]
|
|
1718
|
+
},
|
|
1719
|
+
{
|
|
1720
|
+
type: "assert_window_value",
|
|
1721
|
+
path: "__neonMixProof.approvedCandidateLoop.ok",
|
|
1722
|
+
expected_value: true,
|
|
1723
|
+
timeout_ms: 1e4
|
|
1724
|
+
},
|
|
1725
|
+
{
|
|
1726
|
+
type: "assert_window_value",
|
|
1727
|
+
path: "__neonMixProof.approvedCandidateLoop.appliedCandidateReceipt.ok",
|
|
1728
|
+
expected_value: true,
|
|
1729
|
+
timeout_ms: 1e4
|
|
1730
|
+
},
|
|
1731
|
+
{
|
|
1732
|
+
type: "assert_window_value",
|
|
1733
|
+
path: "__neonMixProof.approvedCandidateLoop.humanReviewPacket.status",
|
|
1734
|
+
expected_value: "candidate_applied_for_listening_review",
|
|
1735
|
+
timeout_ms: 1e4
|
|
1736
|
+
},
|
|
1737
|
+
{
|
|
1738
|
+
type: "assert_window_value",
|
|
1739
|
+
path: "__neonMixProof.approvedCandidateLoop.humanReviewPacket.request.candidateActionsAreTransient",
|
|
1740
|
+
expected_value: false,
|
|
1741
|
+
timeout_ms: 1e4
|
|
1742
|
+
},
|
|
1743
|
+
{
|
|
1744
|
+
type: "assert_window_value",
|
|
1745
|
+
path: "__neonMixProof.approvedCandidateLoop.humanReviewPacket.guardrails.approvedCandidateApplied",
|
|
1746
|
+
expected_value: true,
|
|
1747
|
+
timeout_ms: 1e4
|
|
1748
|
+
},
|
|
1749
|
+
{
|
|
1750
|
+
type: "screenshot",
|
|
1751
|
+
label: "neon-step-sequencer-ratchet-loop-approved-candidate",
|
|
1752
|
+
mode: "viewport"
|
|
1753
|
+
}
|
|
1754
|
+
]
|
|
1755
|
+
},
|
|
1756
|
+
checks: [
|
|
1757
|
+
{
|
|
1758
|
+
type: "route_loaded",
|
|
1759
|
+
expected_path: "/games/drum-sequencer"
|
|
1760
|
+
},
|
|
1761
|
+
{
|
|
1762
|
+
type: "selector_visible",
|
|
1763
|
+
selector: ".drum-sequencer h1"
|
|
1764
|
+
},
|
|
1765
|
+
{
|
|
1766
|
+
type: "no_horizontal_overflow"
|
|
1767
|
+
},
|
|
1768
|
+
{
|
|
1769
|
+
type: "no_fatal_console_errors"
|
|
1770
|
+
}
|
|
1771
|
+
],
|
|
1772
|
+
artifacts: [
|
|
1773
|
+
"screenshot",
|
|
1774
|
+
"console",
|
|
1775
|
+
"dom_summary",
|
|
1776
|
+
"proof_json"
|
|
1777
|
+
],
|
|
1778
|
+
baseline_policy: "invariant_only",
|
|
1779
|
+
failure_policy: {
|
|
1780
|
+
environment_blocked: "neutral",
|
|
1781
|
+
proof_insufficient: "review",
|
|
1782
|
+
needs_human_review: "review",
|
|
1783
|
+
product_regression: "fail"
|
|
1784
|
+
},
|
|
1785
|
+
metadata: {
|
|
1786
|
+
pack_id: "neon_step_sequencer",
|
|
1787
|
+
pack_public_name: "Neon Step Sequencer Pack",
|
|
1788
|
+
evidence_role_pattern: "interaction_snapshots",
|
|
1789
|
+
purpose: "Run a bounded loop, use an explicit operator-approval surrogate, apply the supported claim candidate, and preserve a listening-review packet.",
|
|
1790
|
+
required_receipts: [
|
|
1791
|
+
"ratchet loop returns ok",
|
|
1792
|
+
"a supported claim candidate is selected",
|
|
1793
|
+
"approved candidate application receipt is captured",
|
|
1794
|
+
"compact human-review packet is captured",
|
|
1795
|
+
"ranking remains review-order only",
|
|
1796
|
+
"listening-review caveat remains explicit"
|
|
1797
|
+
],
|
|
1798
|
+
does_not_prove: [
|
|
1799
|
+
"subjective mix quality",
|
|
1800
|
+
"that the approval surrogate is a real listener preference",
|
|
1801
|
+
"all possible mix edits"
|
|
1802
|
+
]
|
|
1803
|
+
}
|
|
1804
|
+
};
|
|
1805
|
+
|
|
1627
1806
|
// packs/neon-step-sequencer/profiles/ratchet-loop-mix-level-search.json
|
|
1628
1807
|
var ratchet_loop_mix_level_search_default = {
|
|
1629
1808
|
version: "riddle-proof.profile.v1",
|
|
@@ -2226,7 +2405,8 @@ var rawProfiles = {
|
|
|
2226
2405
|
"neon-step-sequencer-mobile-trainer-layout": mobile_trainer_layout_default,
|
|
2227
2406
|
"neon-step-sequencer-full-mix-health-matrix": full_mix_health_matrix_default,
|
|
2228
2407
|
"neon-step-sequencer-explore-songs-and-mixes": explore_songs_and_mixes_default,
|
|
2229
|
-
"neon-step-sequencer-ratchet-loop-mix-level-search": ratchet_loop_mix_level_search_default
|
|
2408
|
+
"neon-step-sequencer-ratchet-loop-mix-level-search": ratchet_loop_mix_level_search_default,
|
|
2409
|
+
"neon-step-sequencer-ratchet-loop-approved-candidate": ratchet_loop_approved_candidate_default
|
|
2230
2410
|
};
|
|
2231
2411
|
var sourcePathOverrides = Object.freeze({
|
|
2232
2412
|
"neon-step-sequencer-fast-mix-health": "packs/neon-step-sequencer/profiles/fast-mix-health.json",
|
|
@@ -2236,7 +2416,8 @@ var sourcePathOverrides = Object.freeze({
|
|
|
2236
2416
|
"neon-step-sequencer-mobile-trainer-layout": "packs/neon-step-sequencer/profiles/mobile-trainer-layout.json",
|
|
2237
2417
|
"neon-step-sequencer-full-mix-health-matrix": "packs/neon-step-sequencer/profiles/full-mix-health-matrix.json",
|
|
2238
2418
|
"neon-step-sequencer-explore-songs-and-mixes": "packs/neon-step-sequencer/profiles/explore-songs-and-mixes.json",
|
|
2239
|
-
"neon-step-sequencer-ratchet-loop-mix-level-search": "packs/neon-step-sequencer/profiles/ratchet-loop-mix-level-search.json"
|
|
2419
|
+
"neon-step-sequencer-ratchet-loop-mix-level-search": "packs/neon-step-sequencer/profiles/ratchet-loop-mix-level-search.json",
|
|
2420
|
+
"neon-step-sequencer-ratchet-loop-approved-candidate": "packs/neon-step-sequencer/profiles/ratchet-loop-approved-candidate.json"
|
|
2240
2421
|
});
|
|
2241
2422
|
var RIDDLE_PROOF_PACK_PROFILES = Object.freeze(
|
|
2242
2423
|
Object.fromEntries(
|
package/dist/reviewPacketCli.cjs
CHANGED
|
@@ -103,6 +103,7 @@ function formatHumanReviewPacketMarkdown(packet, options = {}) {
|
|
|
103
103
|
const guardrails = asRecord(packet.guardrails) ?? {};
|
|
104
104
|
const ranking = asRecord(packet.ranking) ?? {};
|
|
105
105
|
const request = asRecord(packet.request) ?? {};
|
|
106
|
+
const approval = asRecord(request.approval) ?? {};
|
|
106
107
|
const supportedCandidates = asArray(packet.supportedCandidates);
|
|
107
108
|
const rejectedCandidates = asArray(packet.rejectedCandidates);
|
|
108
109
|
const selectedSong = getPath(packet, "target.selectedSong.selectedSong") ?? getPath(packet, "target.routeState.selectedSong");
|
|
@@ -129,6 +130,9 @@ function formatHumanReviewPacketMarkdown(packet, options = {}) {
|
|
|
129
130
|
`- state_restored_after_loop: ${formatCodeValue(guardrails.stateRestoredAfterLoop)}`,
|
|
130
131
|
`- candidate_actions_are_transient: ${formatCodeValue(request.candidateActionsAreTransient)}`,
|
|
131
132
|
`- no_permanent_edit_unless_apply_best: ${formatCodeValue(guardrails.noPermanentEditUnlessApplyBest)}`,
|
|
133
|
+
`- approved_candidate_applied: ${formatCodeValue(guardrails.approvedCandidateApplied)}`,
|
|
134
|
+
`- approval_mode: ${formatCodeValue(approval.mode)}`,
|
|
135
|
+
`- approval_basis: ${formatValue(approval.basis)}`,
|
|
132
136
|
"",
|
|
133
137
|
"## Ranking",
|
|
134
138
|
"",
|
package/dist/reviewPacketCli.js
CHANGED
package/package.json
CHANGED
|
@@ -28,6 +28,7 @@ This pack is the first app-specific lab for the open Riddle Proof architecture.
|
|
|
28
28
|
- `profiles/full-mix-health-matrix.json`: current-target matrix across desktop, phone, iPad Mini, and iPad.
|
|
29
29
|
- `profiles/explore-songs-and-mixes.json`: exploration sweep for proof-window health.
|
|
30
30
|
- `profiles/ratchet-loop-mix-level-search.json`: bounded ratchet loop using the Neon `mix-level-search` strategy.
|
|
31
|
+
- `profiles/ratchet-loop-approved-candidate.json`: bounded ratchet loop that uses an explicit operator-approval surrogate, applies the supported candidate, and keeps the listening-review caveat visible.
|
|
31
32
|
|
|
32
33
|
## Ratchet loop strategy
|
|
33
34
|
|
|
@@ -35,6 +36,8 @@ The loop is not mix-specific as a proof concept. The proof concept is a bounded
|
|
|
35
36
|
|
|
36
37
|
This pack's first concrete strategy is `mix-level-search`, which turns small level edits into change-claim candidates. Each candidate says what action will be attempted, what receipts must support the claim, and what evidence should be reviewed afterward. The loop may include a ranking metric to order review, but the verdict comes from receipts and invariants, not from a universal mix-quality number. It still does not decide subjective mix taste; the output is a `humanReviewPacket` for listening handoff.
|
|
37
38
|
|
|
39
|
+
The approved-candidate profile is the next handoff pattern after review-packet generation. It only applies a candidate when the app contract reports that the candidate's objective receipts passed, and the packet records `approvedCandidateApplied` plus the approval mode. The approval mode can keep development moving, but it is still an operator surrogate; it does not prove listener preference.
|
|
40
|
+
|
|
38
41
|
## Example evidence
|
|
39
42
|
|
|
40
43
|
The `examples/` directory contains local Playwright proof results captured against LilArcade Neon Step Sequencer on May 24, 2026:
|
|
@@ -123,6 +123,17 @@ Pack summary guidance first; Riddle Proof core only if a general display primiti
|
|
|
123
123
|
- rerun: passed on May 24, 2026 with local Playwright.
|
|
124
124
|
- next sharper question: can the packet become the standard output shape for one-off and background candidate operators across more than `mix-level-search`?
|
|
125
125
|
|
|
126
|
+
### Run 007 made applying a candidate explicit and auditable
|
|
127
|
+
|
|
128
|
+
- run: `run-007-approved-candidate-applied`
|
|
129
|
+
- claim: a bounded ratchet loop can apply a supported candidate only after an explicit approval mode, then record that final apply step without claiming subjective mix quality.
|
|
130
|
+
- observed evidence: loop status was `claim_candidate_supported`; packet status was `candidate_applied_for_listening_review`; approval mode was `mixing_canon_surrogate`; recommended candidate was `chord -0.10`; applied-candidate receipt passed with observed level `0.28`; supported candidate count was `6`; rejected candidate count was `0`; state was restored before the final apply; ranking role stayed `review_order_only`.
|
|
131
|
+
- classification: none; passing `interaction_snapshots` proof with subjective listening caveat.
|
|
132
|
+
- smallest layer changed: app proof contract and proof-pack profile assertions.
|
|
133
|
+
- change made: made `applyBest` require a supported claim candidate, added an applied-candidate receipt, surfaced approval metadata in the human-review packet, and added an approved-candidate profile.
|
|
134
|
+
- rerun: passed on May 24, 2026 with local Playwright.
|
|
135
|
+
- next sharper question: can follow-on agents use the applied-candidate packet to prepare a code/config patch only when the operator explicitly asks for a durable edit?
|
|
136
|
+
|
|
126
137
|
### Local runner shutdown needs a small ergonomics follow-up
|
|
127
138
|
|
|
128
139
|
- run: `run-002-mix-change`, `run-003-full-matrix`, `run-004-ratchet-loop-mix-level-search`
|
|
@@ -36,7 +36,8 @@ The project shows that a complex audio app can improve proof confidence mostly b
|
|
|
36
36
|
- Run 004: a bounded loop tested six `mix-level-search` change-claim candidates, returned `chord -0.10` as a supported review candidate with receipt-level evidence, and restored app state.
|
|
37
37
|
- Run 005: a `current_target` exploration sweep sampled four songs and eight song/part entries. The first real sweep exposed app-contract normalization gaps and hot built-in song presets; after the local ratchet fixes it passed with `8` entries, `0` findings, and no clipping.
|
|
38
38
|
- Run 006: the bounded loop returned a compact `humanReviewPacket` with the supported `chord -0.10` candidate, objective guardrails, state restoration, review-order ranking, and listening caveats.
|
|
39
|
+
- Run 007: the approved-candidate profile used a `mixing_canon_surrogate` approval mode, restored loop state, applied the supported `chord -0.10` candidate, and recorded an applied-candidate receipt for listening review.
|
|
39
40
|
|
|
40
41
|
## Honest boundary
|
|
41
42
|
|
|
42
|
-
These runs prove objective claims about a running app target. They do not prove that the mix is tasteful, that every song section is healthy, or that a release candidate is better than production. Run 005 is still bounded to configured song/part limits.
|
|
43
|
+
These runs prove objective claims about a running app target. They do not prove that the mix is tasteful, that every song section is healthy, or that a release candidate is better than production. Run 005 is still bounded to configured song/part limits. Runs 006 and 007 make the human handoff explicit: the packet is a compact review object, and the approval mode is a visible operator/surrogate choice, not an automated taste verdict. The ratchet loop is a generic proof-loop shape; `mix-level-search` is only the first Neon strategy plugged into it.
|
|
@@ -337,6 +337,61 @@ Next sharper question:
|
|
|
337
337
|
|
|
338
338
|
Can one-off commands and background runs use this packet as their common output surface while strategy-specific code remains behind the app contract?
|
|
339
339
|
|
|
340
|
+
## Run 007 - Approved candidate applied
|
|
341
|
+
|
|
342
|
+
Claim:
|
|
343
|
+
|
|
344
|
+
Neon can use an explicit approval mode to apply a supported change-claim candidate for listening review while keeping objective proof receipts and subjective taste separate.
|
|
345
|
+
|
|
346
|
+
Profile:
|
|
347
|
+
|
|
348
|
+
`profiles/ratchet-loop-approved-candidate.json`
|
|
349
|
+
|
|
350
|
+
Evidence to capture:
|
|
351
|
+
|
|
352
|
+
- supported claim candidate
|
|
353
|
+
- explicit approval mode
|
|
354
|
+
- state restoration before the final apply
|
|
355
|
+
- applied-candidate receipt
|
|
356
|
+
- compact human-review packet
|
|
357
|
+
- listening-review caveat
|
|
358
|
+
|
|
359
|
+
Possible outcomes:
|
|
360
|
+
|
|
361
|
+
- `candidate_applied_for_listening_review`: a supported candidate was applied after explicit approval and the final app state reflects the candidate.
|
|
362
|
+
- `candidate_ready_for_listening_review`: a supported candidate exists, but the profile did not request final application.
|
|
363
|
+
- `needs_human_review`: no candidate satisfied every objective receipt.
|
|
364
|
+
- `product_regression`: the selected candidate could not be applied or the final mixer state did not reflect it.
|
|
365
|
+
|
|
366
|
+
Observed status:
|
|
367
|
+
|
|
368
|
+
Passed on May 24, 2026 with `local-playwright`.
|
|
369
|
+
|
|
370
|
+
Observed evidence:
|
|
371
|
+
|
|
372
|
+
- loop status `claim_candidate_supported`
|
|
373
|
+
- packet status `candidate_applied_for_listening_review`
|
|
374
|
+
- approval mode `mixing_canon_surrogate`
|
|
375
|
+
- recommended candidate `chord -0.10`
|
|
376
|
+
- final applied level `0.28`
|
|
377
|
+
- applied-candidate receipt `ok`
|
|
378
|
+
- supported candidates `6`
|
|
379
|
+
- rejected candidates `0`
|
|
380
|
+
- state restored before apply `true`
|
|
381
|
+
- ranking role `review_order_only`
|
|
382
|
+
|
|
383
|
+
Failure classification:
|
|
384
|
+
|
|
385
|
+
None. This was a passing `interaction_snapshots` proof. The approval mode is intentionally labeled as a surrogate so the packet does not imply a real listener has judged the mix.
|
|
386
|
+
|
|
387
|
+
Smallest layer changed:
|
|
388
|
+
|
|
389
|
+
App proof contract and proof-pack profile. Riddle Proof core did not need a change.
|
|
390
|
+
|
|
391
|
+
Next sharper question:
|
|
392
|
+
|
|
393
|
+
Can the reusable pack expose this approved-candidate shape without making approval automatic, and can follow-on agents use the packet to prepare a code/config patch only when the operator explicitly asks for one?
|
|
394
|
+
|
|
340
395
|
## Project note
|
|
341
396
|
|
|
342
397
|
The ratchet is not a pass. The ratchet is the next sharper question.
|
|
@@ -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. Runs 006 and 007 also include standalone `human-review-packet.json` and `human-review-packet.md` files generated from the proof artifact.
|
|
6
6
|
|
|
7
7
|
## Runs
|
|
8
8
|
|
|
@@ -14,6 +14,7 @@ The raw `profile-result.json` files are real runner outputs. They intentionally
|
|
|
14
14
|
| `run-004-ratchet-loop-mix-level-search` | `interaction_snapshots` | passed | A bounded ratchet loop tests mix-level change-claim candidates, records receipt verdicts, chooses a supported candidate for review, and restores app state. |
|
|
15
15
|
| `run-005-explore-songs-and-mixes-final` | `current_target` | passed | A bounded exploration sweep samples four songs and eight song/part entries, producing a zero-finding confidence map after app-contract and mix-headroom fixes. |
|
|
16
16
|
| `run-006-ratchet-loop-human-review-packet` | `interaction_snapshots` | passed | A bounded ratchet loop returns a compact `humanReviewPacket` for handoff: supported candidates, objective guardrails, state restoration, review-order ranking, and listening caveats. |
|
|
17
|
+
| `run-007-approved-candidate-applied` | `interaction_snapshots` | passed | A bounded ratchet loop uses an explicit operator-approval surrogate, applies the supported `chord -0.10` candidate, and keeps the listening-review caveat in the packet. |
|
|
17
18
|
|
|
18
19
|
## What these examples do not prove
|
|
19
20
|
|
|
@@ -24,3 +25,4 @@ The raw `profile-result.json` files are real runner outputs. They intentionally
|
|
|
24
25
|
- The ratchet-loop run does not prove that the loop primitive is mix-specific; `mix-level-search` is only this pack's first concrete strategy.
|
|
25
26
|
- The ratchet-loop run does not prove that the supported candidate should be kept. Its ranking metric is a review-order hint, not a taste verdict.
|
|
26
27
|
- The human-review packet does not replace listening judgment. It compresses objective receipts and caveats so a person or follow-on agent can decide what to review next.
|
|
28
|
+
- The approved-candidate run does not prove that the surrogate approval is a real listener preference; it proves that the apply step was explicit, guarded by supported receipts, and recorded for review.
|
|
@@ -20,6 +20,9 @@
|
|
|
20
20
|
- state_restored_after_loop: `true`
|
|
21
21
|
- candidate_actions_are_transient: `true`
|
|
22
22
|
- no_permanent_edit_unless_apply_best: `true`
|
|
23
|
+
- approved_candidate_applied: `not captured`
|
|
24
|
+
- approval_mode: `not captured`
|
|
25
|
+
- approval_basis: not captured
|
|
23
26
|
|
|
24
27
|
## Ranking
|
|
25
28
|
|