@riddledc/riddle-proof-packs 0.4.0 → 0.4.2
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/dist/index.cjs +46 -16
- package/dist/index.js +46 -16
- package/package.json +1 -1
- package/packs/neon-step-sequencer/README.md +4 -3
- package/packs/neon-step-sequencer/case-study/findings.md +17 -6
- package/packs/neon-step-sequencer/case-study/ratchet-card.md +3 -2
- package/packs/neon-step-sequencer/case-study/ratchet-log.md +68 -12
- package/packs/neon-step-sequencer/case-study/reusable-lessons.md +1 -1
- package/packs/neon-step-sequencer/examples/README.md +4 -2
- package/packs/neon-step-sequencer/examples/run-004-ratchet-loop-mix-level-search/profile-result.json +3260 -131
- package/packs/neon-step-sequencer/examples/run-004-ratchet-loop-mix-level-search/summary.md +18 -8
- package/packs/neon-step-sequencer/examples/run-005-explore-songs-and-mixes-final/artifact-manifest.json +32 -0
- package/packs/neon-step-sequencer/examples/run-005-explore-songs-and-mixes-final/console.json +4 -0
- package/packs/neon-step-sequencer/examples/run-005-explore-songs-and-mixes-final/dom-summary.json +40 -0
- package/packs/neon-step-sequencer/examples/run-005-explore-songs-and-mixes-final/profile-result.json +2917 -0
- package/packs/neon-step-sequencer/examples/run-005-explore-songs-and-mixes-final/proof.json +2917 -0
- package/packs/neon-step-sequencer/examples/run-005-explore-songs-and-mixes-final/screenshots/neon-step-sequencer-explore-songs-and-mixes-desktop-neon-explore-songs-and-mixes.png +0 -0
- package/packs/neon-step-sequencer/examples/run-005-explore-songs-and-mixes-final/screenshots/neon-step-sequencer-explore-songs-and-mixes-desktop.png +0 -0
- package/packs/neon-step-sequencer/examples/run-005-explore-songs-and-mixes-final/summary.md +52 -0
- package/packs/neon-step-sequencer/profiles/explore-songs-and-mixes.json +33 -7
- package/packs/neon-step-sequencer/profiles/ratchet-loop-mix-level-search.json +13 -9
package/dist/index.cjs
CHANGED
|
@@ -751,11 +751,14 @@ var explore_songs_and_mixes_default = {
|
|
|
751
751
|
label: "install-neon-exploration-proof",
|
|
752
752
|
timeout_ms: 1e4,
|
|
753
753
|
store_return_to: "__neonProof.install",
|
|
754
|
-
script: "window.__neonProofApi=()=>window.__NEON_MIX_PROOF__||window.__RIDDLE_SEQUENCER_PROOF__;
|
|
754
|
+
script: "window.__neonProofApi=()=>window.__NEON_MIX_PROOF__||window.__RIDDLE_SEQUENCER_PROOF__; const api=window.__neonProofApi(); const state=api?.getState?.()||api?.getSummary?.()||{}; return {available:Boolean(api),hasExplorationSweep:typeof api?.runExplorationSweep==='function',selectedSong:state.selectedSong||null};",
|
|
755
755
|
return_summary_fields: [
|
|
756
756
|
{
|
|
757
757
|
path: "available"
|
|
758
758
|
},
|
|
759
|
+
{
|
|
760
|
+
path: "hasExplorationSweep"
|
|
761
|
+
},
|
|
759
762
|
{
|
|
760
763
|
path: "selectedSong"
|
|
761
764
|
}
|
|
@@ -769,8 +772,17 @@ var explore_songs_and_mixes_default = {
|
|
|
769
772
|
},
|
|
770
773
|
{
|
|
771
774
|
type: "window_call",
|
|
772
|
-
label: "
|
|
773
|
-
path: "
|
|
775
|
+
label: "run-exploration-sweep",
|
|
776
|
+
path: "__NEON_MIX_PROOF__.runExplorationSweep",
|
|
777
|
+
args: [
|
|
778
|
+
{
|
|
779
|
+
maxSongs: 4,
|
|
780
|
+
maxPartsPerSong: 2,
|
|
781
|
+
maxWindowsPerPart: 2,
|
|
782
|
+
monitorProfile: "smallSpeaker",
|
|
783
|
+
loadAllSources: true
|
|
784
|
+
}
|
|
785
|
+
],
|
|
774
786
|
store_return_to: "__neonProof.exploration",
|
|
775
787
|
capture_return: true,
|
|
776
788
|
timeout_ms: 18e4,
|
|
@@ -778,14 +790,26 @@ var explore_songs_and_mixes_default = {
|
|
|
778
790
|
{
|
|
779
791
|
path: "ok"
|
|
780
792
|
},
|
|
793
|
+
{
|
|
794
|
+
path: "status"
|
|
795
|
+
},
|
|
781
796
|
{
|
|
782
797
|
path: "proofKind"
|
|
783
798
|
},
|
|
784
799
|
{
|
|
785
|
-
path: "
|
|
800
|
+
path: "entryCount"
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
path: "findingCount"
|
|
786
804
|
}
|
|
787
805
|
]
|
|
788
806
|
},
|
|
807
|
+
{
|
|
808
|
+
type: "assert_window_value",
|
|
809
|
+
path: "__neonProof.exploration.proofKind",
|
|
810
|
+
expected_value: "neon-exploration-sweep",
|
|
811
|
+
timeout_ms: 1e4
|
|
812
|
+
},
|
|
789
813
|
{
|
|
790
814
|
type: "assert_window_value",
|
|
791
815
|
path: "__neonProof.exploration.ok",
|
|
@@ -829,10 +853,12 @@ var explore_songs_and_mixes_default = {
|
|
|
829
853
|
pack_id: "neon_step_sequencer",
|
|
830
854
|
pack_public_name: "Neon Step Sequencer Pack",
|
|
831
855
|
evidence_role_pattern: "current_target",
|
|
832
|
-
purpose: "
|
|
856
|
+
purpose: "Bounded exploration sweep over Neon songs, parts, mix profiles, and proof windows for prioritizing the next weakest review target.",
|
|
833
857
|
required_receipts: [
|
|
834
|
-
"
|
|
835
|
-
"
|
|
858
|
+
"exploration sweep contract is available",
|
|
859
|
+
"song/part entries are captured",
|
|
860
|
+
"all sampled entries pass objective guardrails",
|
|
861
|
+
"prioritized findings are captured",
|
|
836
862
|
"browser health is clean",
|
|
837
863
|
"screenshot is captured"
|
|
838
864
|
],
|
|
@@ -1665,7 +1691,7 @@ var ratchet_loop_mix_level_search_default = {
|
|
|
1665
1691
|
},
|
|
1666
1692
|
{
|
|
1667
1693
|
type: "window_call",
|
|
1668
|
-
label: "
|
|
1694
|
+
label: "test-claim-candidates-mix-level-search",
|
|
1669
1695
|
path: "__NEON_MIX_PROOF__.runRatchetLoop",
|
|
1670
1696
|
args: [
|
|
1671
1697
|
{
|
|
@@ -1679,8 +1705,7 @@ var ratchet_loop_mix_level_search_default = {
|
|
|
1679
1705
|
maxIterations: 6,
|
|
1680
1706
|
monitorProfile: "smallSpeaker",
|
|
1681
1707
|
restore: true,
|
|
1682
|
-
applyBest: false
|
|
1683
|
-
minImprovement: 0.1
|
|
1708
|
+
applyBest: false
|
|
1684
1709
|
}
|
|
1685
1710
|
],
|
|
1686
1711
|
store_return_to: "__neonMixProof.ratchetLoop",
|
|
@@ -1697,10 +1722,13 @@ var ratchet_loop_mix_level_search_default = {
|
|
|
1697
1722
|
path: "strategy"
|
|
1698
1723
|
},
|
|
1699
1724
|
{
|
|
1700
|
-
path: "
|
|
1725
|
+
path: "best.claimVerdict.status"
|
|
1726
|
+
},
|
|
1727
|
+
{
|
|
1728
|
+
path: "best.claimCandidate.action.track"
|
|
1701
1729
|
},
|
|
1702
1730
|
{
|
|
1703
|
-
path: "
|
|
1731
|
+
path: "supportedClaimCandidateCount"
|
|
1704
1732
|
}
|
|
1705
1733
|
]
|
|
1706
1734
|
},
|
|
@@ -1750,16 +1778,18 @@ var ratchet_loop_mix_level_search_default = {
|
|
|
1750
1778
|
pack_id: "neon_step_sequencer",
|
|
1751
1779
|
pack_public_name: "Neon Step Sequencer Pack",
|
|
1752
1780
|
evidence_role_pattern: "interaction_snapshots",
|
|
1753
|
-
purpose: "Run a bounded
|
|
1781
|
+
purpose: "Run a bounded loop that tests Neon mix-level change-claim candidates using the mix-level-search strategy.",
|
|
1754
1782
|
required_receipts: [
|
|
1755
1783
|
"ratchet loop returns ok",
|
|
1756
1784
|
"baseline proof-window summary is captured",
|
|
1757
|
-
"
|
|
1758
|
-
"
|
|
1785
|
+
"claim candidates are captured",
|
|
1786
|
+
"each candidate records claim receipts",
|
|
1787
|
+
"best supported claim candidate or human-review status is captured",
|
|
1788
|
+
"state restoration receipt is captured"
|
|
1759
1789
|
],
|
|
1760
1790
|
does_not_prove: [
|
|
1761
1791
|
"subjective mix quality",
|
|
1762
|
-
"that
|
|
1792
|
+
"that a supported claim candidate should be kept",
|
|
1763
1793
|
"all possible mix edits"
|
|
1764
1794
|
]
|
|
1765
1795
|
}
|
package/dist/index.js
CHANGED
|
@@ -716,11 +716,14 @@ var explore_songs_and_mixes_default = {
|
|
|
716
716
|
label: "install-neon-exploration-proof",
|
|
717
717
|
timeout_ms: 1e4,
|
|
718
718
|
store_return_to: "__neonProof.install",
|
|
719
|
-
script: "window.__neonProofApi=()=>window.__NEON_MIX_PROOF__||window.__RIDDLE_SEQUENCER_PROOF__;
|
|
719
|
+
script: "window.__neonProofApi=()=>window.__NEON_MIX_PROOF__||window.__RIDDLE_SEQUENCER_PROOF__; const api=window.__neonProofApi(); const state=api?.getState?.()||api?.getSummary?.()||{}; return {available:Boolean(api),hasExplorationSweep:typeof api?.runExplorationSweep==='function',selectedSong:state.selectedSong||null};",
|
|
720
720
|
return_summary_fields: [
|
|
721
721
|
{
|
|
722
722
|
path: "available"
|
|
723
723
|
},
|
|
724
|
+
{
|
|
725
|
+
path: "hasExplorationSweep"
|
|
726
|
+
},
|
|
724
727
|
{
|
|
725
728
|
path: "selectedSong"
|
|
726
729
|
}
|
|
@@ -734,8 +737,17 @@ var explore_songs_and_mixes_default = {
|
|
|
734
737
|
},
|
|
735
738
|
{
|
|
736
739
|
type: "window_call",
|
|
737
|
-
label: "
|
|
738
|
-
path: "
|
|
740
|
+
label: "run-exploration-sweep",
|
|
741
|
+
path: "__NEON_MIX_PROOF__.runExplorationSweep",
|
|
742
|
+
args: [
|
|
743
|
+
{
|
|
744
|
+
maxSongs: 4,
|
|
745
|
+
maxPartsPerSong: 2,
|
|
746
|
+
maxWindowsPerPart: 2,
|
|
747
|
+
monitorProfile: "smallSpeaker",
|
|
748
|
+
loadAllSources: true
|
|
749
|
+
}
|
|
750
|
+
],
|
|
739
751
|
store_return_to: "__neonProof.exploration",
|
|
740
752
|
capture_return: true,
|
|
741
753
|
timeout_ms: 18e4,
|
|
@@ -743,14 +755,26 @@ var explore_songs_and_mixes_default = {
|
|
|
743
755
|
{
|
|
744
756
|
path: "ok"
|
|
745
757
|
},
|
|
758
|
+
{
|
|
759
|
+
path: "status"
|
|
760
|
+
},
|
|
746
761
|
{
|
|
747
762
|
path: "proofKind"
|
|
748
763
|
},
|
|
749
764
|
{
|
|
750
|
-
path: "
|
|
765
|
+
path: "entryCount"
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
path: "findingCount"
|
|
751
769
|
}
|
|
752
770
|
]
|
|
753
771
|
},
|
|
772
|
+
{
|
|
773
|
+
type: "assert_window_value",
|
|
774
|
+
path: "__neonProof.exploration.proofKind",
|
|
775
|
+
expected_value: "neon-exploration-sweep",
|
|
776
|
+
timeout_ms: 1e4
|
|
777
|
+
},
|
|
754
778
|
{
|
|
755
779
|
type: "assert_window_value",
|
|
756
780
|
path: "__neonProof.exploration.ok",
|
|
@@ -794,10 +818,12 @@ var explore_songs_and_mixes_default = {
|
|
|
794
818
|
pack_id: "neon_step_sequencer",
|
|
795
819
|
pack_public_name: "Neon Step Sequencer Pack",
|
|
796
820
|
evidence_role_pattern: "current_target",
|
|
797
|
-
purpose: "
|
|
821
|
+
purpose: "Bounded exploration sweep over Neon songs, parts, mix profiles, and proof windows for prioritizing the next weakest review target.",
|
|
798
822
|
required_receipts: [
|
|
799
|
-
"
|
|
800
|
-
"
|
|
823
|
+
"exploration sweep contract is available",
|
|
824
|
+
"song/part entries are captured",
|
|
825
|
+
"all sampled entries pass objective guardrails",
|
|
826
|
+
"prioritized findings are captured",
|
|
801
827
|
"browser health is clean",
|
|
802
828
|
"screenshot is captured"
|
|
803
829
|
],
|
|
@@ -1630,7 +1656,7 @@ var ratchet_loop_mix_level_search_default = {
|
|
|
1630
1656
|
},
|
|
1631
1657
|
{
|
|
1632
1658
|
type: "window_call",
|
|
1633
|
-
label: "
|
|
1659
|
+
label: "test-claim-candidates-mix-level-search",
|
|
1634
1660
|
path: "__NEON_MIX_PROOF__.runRatchetLoop",
|
|
1635
1661
|
args: [
|
|
1636
1662
|
{
|
|
@@ -1644,8 +1670,7 @@ var ratchet_loop_mix_level_search_default = {
|
|
|
1644
1670
|
maxIterations: 6,
|
|
1645
1671
|
monitorProfile: "smallSpeaker",
|
|
1646
1672
|
restore: true,
|
|
1647
|
-
applyBest: false
|
|
1648
|
-
minImprovement: 0.1
|
|
1673
|
+
applyBest: false
|
|
1649
1674
|
}
|
|
1650
1675
|
],
|
|
1651
1676
|
store_return_to: "__neonMixProof.ratchetLoop",
|
|
@@ -1662,10 +1687,13 @@ var ratchet_loop_mix_level_search_default = {
|
|
|
1662
1687
|
path: "strategy"
|
|
1663
1688
|
},
|
|
1664
1689
|
{
|
|
1665
|
-
path: "
|
|
1690
|
+
path: "best.claimVerdict.status"
|
|
1691
|
+
},
|
|
1692
|
+
{
|
|
1693
|
+
path: "best.claimCandidate.action.track"
|
|
1666
1694
|
},
|
|
1667
1695
|
{
|
|
1668
|
-
path: "
|
|
1696
|
+
path: "supportedClaimCandidateCount"
|
|
1669
1697
|
}
|
|
1670
1698
|
]
|
|
1671
1699
|
},
|
|
@@ -1715,16 +1743,18 @@ var ratchet_loop_mix_level_search_default = {
|
|
|
1715
1743
|
pack_id: "neon_step_sequencer",
|
|
1716
1744
|
pack_public_name: "Neon Step Sequencer Pack",
|
|
1717
1745
|
evidence_role_pattern: "interaction_snapshots",
|
|
1718
|
-
purpose: "Run a bounded
|
|
1746
|
+
purpose: "Run a bounded loop that tests Neon mix-level change-claim candidates using the mix-level-search strategy.",
|
|
1719
1747
|
required_receipts: [
|
|
1720
1748
|
"ratchet loop returns ok",
|
|
1721
1749
|
"baseline proof-window summary is captured",
|
|
1722
|
-
"
|
|
1723
|
-
"
|
|
1750
|
+
"claim candidates are captured",
|
|
1751
|
+
"each candidate records claim receipts",
|
|
1752
|
+
"best supported claim candidate or human-review status is captured",
|
|
1753
|
+
"state restoration receipt is captured"
|
|
1724
1754
|
],
|
|
1725
1755
|
does_not_prove: [
|
|
1726
1756
|
"subjective mix quality",
|
|
1727
|
-
"that
|
|
1757
|
+
"that a supported claim candidate should be kept",
|
|
1728
1758
|
"all possible mix edits"
|
|
1729
1759
|
]
|
|
1730
1760
|
}
|
package/package.json
CHANGED
|
@@ -33,16 +33,17 @@ This pack is the first app-specific lab for the open Riddle Proof architecture.
|
|
|
33
33
|
|
|
34
34
|
The loop is not mix-specific as a proof concept. The proof concept is a bounded ratchet loop: propose a candidate, apply it, collect evidence, classify the result, restore or keep state, and repeat until the budget is exhausted.
|
|
35
35
|
|
|
36
|
-
This pack's first concrete strategy is `mix-level-search`, which
|
|
36
|
+
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 listening and review packet.
|
|
37
37
|
|
|
38
38
|
## Example evidence
|
|
39
39
|
|
|
40
|
-
The `examples/` directory contains
|
|
40
|
+
The `examples/` directory contains local Playwright proof results captured against LilArcade Neon Step Sequencer on May 24, 2026:
|
|
41
41
|
|
|
42
42
|
- `run-001-fast-mix-health`: passing `current_target` audit with proof contract, source readiness, mix RMS `0.1234`, peak `0.8321`, and no clipping.
|
|
43
43
|
- `run-002-mix-change`: passing `interaction_snapshots` proof where a bass-level edit moved bass RMS from `0.0507` to `0.1071` and mix RMS from `0.073` to `0.1264` without clipping.
|
|
44
44
|
- `run-003-full-matrix`: passing `current_target` viewport matrix across desktop, phone, iPad Mini, and iPad with `0 px` horizontal overflow.
|
|
45
|
-
- `run-004-ratchet-loop-mix-level-search`: passing `interaction_snapshots` proof where a bounded loop tested six mix-level candidates
|
|
45
|
+
- `run-004-ratchet-loop-mix-level-search`: passing `interaction_snapshots` proof where a bounded loop tested six mix-level change-claim candidates, found a supported `chord -0.10` candidate, recorded receipt-level verdicts, and restored app state without keeping the edit.
|
|
46
|
+
- `run-005-explore-songs-and-mixes-final`: passing `current_target` exploration sweep across four songs and eight song/part entries, with `8` passing entries, `0` prioritized findings, and no clipping after the local app-contract and mix-headroom ratchet.
|
|
46
47
|
|
|
47
48
|
## Naming note
|
|
48
49
|
|
|
@@ -41,7 +41,7 @@ Profile render window, song fixture, or authoring guide.
|
|
|
41
41
|
|
|
42
42
|
### Subjective boundary
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Receipts can support that a requested mix-level change happened and stayed inside guardrails, but deciding whether the mix is musically better requires listening.
|
|
45
45
|
|
|
46
46
|
Likely change:
|
|
47
47
|
|
|
@@ -93,14 +93,25 @@ Pack summary guidance first; Riddle Proof core only if a general display primiti
|
|
|
93
93
|
### Run 004 proved the bounded loop shape without making it mix-specific
|
|
94
94
|
|
|
95
95
|
- run: `run-004-ratchet-loop-mix-level-search`
|
|
96
|
-
- claim: a bounded ratchet loop can try
|
|
97
|
-
- observed evidence: `mix-level-search` tested `6` candidates; baseline
|
|
98
|
-
- classification: none; passing `interaction_snapshots` proof with subjective listening caveat.
|
|
96
|
+
- claim: a bounded ratchet loop can try change-claim candidates, collect proof-window evidence, record receipt verdicts, select a supported candidate for review, and restore state.
|
|
97
|
+
- observed evidence: `mix-level-search` tested `6` candidates; baseline candidate-ranking metric was `28.8336`; best candidate-ranking metric was `27.07095`; best supported claim candidate was `chord -0.10` to level `0.28`; loop status was `claim_candidate_supported`; receipt checks covered edit acceptance, contract level agreement, rendered target metric movement, required instrument activity, no clipping, and no low-level proof window; console fatal count was `0`.
|
|
98
|
+
- classification: none; passing `interaction_snapshots` proof with subjective listening caveat. The ranking metric is a review-order hint, not a proof verdict.
|
|
99
99
|
- smallest layer changed: generic app proof-contract loop plus one Neon strategy.
|
|
100
100
|
- change made: added `runRatchetLoop` with a `mix-level-search` strategy and a proof-pack profile that calls it.
|
|
101
101
|
- rerun: passed on May 24, 2026.
|
|
102
102
|
- next sharper question: can the loop run multiple strategy classes without changing the proof primitive?
|
|
103
103
|
|
|
104
|
+
### Run 005 restored the exploration flywheel
|
|
105
|
+
|
|
106
|
+
- run: `run-005-explore-songs-and-mixes-final`
|
|
107
|
+
- claim: a bounded current-target sweep can explore multiple Neon songs/parts, classify findings, and end with a useful confidence map.
|
|
108
|
+
- observed evidence: final run sampled `4` songs and `8` song/part entries; all `8` entries passed; prioritized findings dropped to `0`; source preparation loaded drums `samples`, bass/chord/guitar `hybrid`, and vocal `voice_oohs`; final sampled peaks stayed below the clipping threshold; console fatal count was `0`.
|
|
109
|
+
- classification: resolved chain of `proof_insufficient`, `app_contract_gap`, and `product_regression` findings during the local ratchet.
|
|
110
|
+
- smallest layer changed: app proof contract, app snapshot normalization, app fixture/mix data, and profile JSON.
|
|
111
|
+
- change made: made the exploration profile call `runExplorationSweep`; added the app-contract sweep method; normalized arbitrary song/part tempo and bar count; preserved bass/chord/guitar lane enable flags in song snapshots; lowered only hot built-in Yakety and Monkberry Sheet mix data enough to clear clipping receipts.
|
|
112
|
+
- rerun: passed on May 24, 2026 with `8` entries, `8` passed, and `0` findings.
|
|
113
|
+
- next sharper question: can this exploration workflow become the normal local pack/profile loop before any changeset or npm release?
|
|
114
|
+
|
|
104
115
|
### Local runner shutdown needs a small ergonomics follow-up
|
|
105
116
|
|
|
106
117
|
- run: `run-002-mix-change`, `run-003-full-matrix`, `run-004-ratchet-loop-mix-level-search`
|
|
@@ -108,6 +119,6 @@ Pack summary guidance first; Riddle Proof core only if a general display primiti
|
|
|
108
119
|
- observed evidence: complete passing artifacts were written, but the wrapper process lingered after artifact write and had to be stopped.
|
|
109
120
|
- classification: `proof_insufficient` for operator ergonomics, not a Neon product regression.
|
|
110
121
|
- smallest layer changed: none in this pack.
|
|
111
|
-
- change made:
|
|
112
|
-
- rerun:
|
|
122
|
+
- change made: fixed the local Playwright runner timeout cleanup in `@riddledc/riddle-proof-runner-playwright`.
|
|
123
|
+
- rerun: later runner smoke tests and the published `0.4.3` package exited cleanly.
|
|
113
124
|
- next sharper question: should the local runner force-close browser handles or expose a clearer artifact-written exit phase?
|
|
@@ -33,8 +33,9 @@ The project shows that a complex audio app can improve proof confidence mostly b
|
|
|
33
33
|
- Run 001: a `current_target` audit connected the Neon route, proof contract, source readiness, and offline mix-health metrics.
|
|
34
34
|
- Run 002: an `interaction_snapshots` proof showed a bass-level edit moving bass RMS from `0.0507` to `0.1071` and mix RMS from `0.073` to `0.1264` without clipping.
|
|
35
35
|
- Run 003: a `current_target` matrix passed across desktop, phone, iPad Mini, and iPad with `0 px` horizontal overflow.
|
|
36
|
-
- Run 004: a bounded loop tested six `mix-level-search` candidates, returned `chord -0.10` as
|
|
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
|
+
- 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.
|
|
37
38
|
|
|
38
39
|
## Honest boundary
|
|
39
40
|
|
|
40
|
-
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. The ratchet loop is a generic proof-loop shape; `mix-level-search` is only the first Neon strategy plugged into it.
|
|
41
|
+
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. The ratchet loop is a generic proof-loop shape; `mix-level-search` is only the first Neon strategy plugged into it.
|
|
@@ -177,7 +177,7 @@ Can the pack explore song/mix combinations and produce a prioritized confidence
|
|
|
177
177
|
|
|
178
178
|
Claim:
|
|
179
179
|
|
|
180
|
-
Neon can run a bounded ratchet loop that proposes mix-level candidates, applies each candidate, captures proof-window evidence,
|
|
180
|
+
Neon can run a bounded ratchet loop that proposes mix-level change-claim candidates, applies each candidate action, captures proof-window evidence, records receipt-level verdicts, selects a supported candidate for review, and restores app state.
|
|
181
181
|
|
|
182
182
|
Profile:
|
|
183
183
|
|
|
@@ -185,16 +185,16 @@ Profile:
|
|
|
185
185
|
|
|
186
186
|
Evidence to capture:
|
|
187
187
|
|
|
188
|
-
- baseline
|
|
189
|
-
- per-candidate
|
|
190
|
-
-
|
|
188
|
+
- baseline candidate-ranking metric
|
|
189
|
+
- per-candidate receipt verdicts
|
|
190
|
+
- supported claim candidate and ranking metric delta
|
|
191
191
|
- state restoration receipt
|
|
192
192
|
- compact caveats for human handoff
|
|
193
193
|
|
|
194
194
|
Possible outcomes:
|
|
195
195
|
|
|
196
|
-
- `
|
|
197
|
-
- `needs_human_review`: evidence is valid but no
|
|
196
|
+
- `claim_candidate_supported`: at least one candidate has the receipts needed to support its change claim.
|
|
197
|
+
- `needs_human_review`: evidence is valid but no candidate has enough receipts to support the proposed claim automatically.
|
|
198
198
|
- `proof_insufficient`: the app contract or proof window does not provide enough evidence.
|
|
199
199
|
- `profile_calibration`: the chosen tracks, windows, or thresholds do not fit the target.
|
|
200
200
|
|
|
@@ -206,17 +206,18 @@ Observed evidence:
|
|
|
206
206
|
|
|
207
207
|
- strategy `mix-level-search`
|
|
208
208
|
- tested `6` candidates across `bass`, `chord`, `guitar`, and `rhythmSynth`
|
|
209
|
-
- baseline
|
|
210
|
-
- best
|
|
211
|
-
-
|
|
212
|
-
- best candidate `chord -0.10` to level `0.28`
|
|
213
|
-
-
|
|
209
|
+
- baseline candidate-ranking metric `28.8336`
|
|
210
|
+
- best candidate-ranking metric `27.07095`
|
|
211
|
+
- ranking metric delta `1.7627`
|
|
212
|
+
- best supported claim candidate `chord -0.10` to level `0.28`
|
|
213
|
+
- claim receipts recorded for edit acceptance, contract level agreement, rendered target metric movement, required instrument activity, no clipping, and no low-level proof window
|
|
214
|
+
- loop status `claim_candidate_supported`
|
|
214
215
|
- app state restored after the run
|
|
215
216
|
- console fatal count `0`
|
|
216
217
|
|
|
217
218
|
Failure classification:
|
|
218
219
|
|
|
219
|
-
None. This was a passing `interaction_snapshots` loop proof, with an explicit listening-review caveat.
|
|
220
|
+
None. This was a passing `interaction_snapshots` loop proof, with an explicit listening-review caveat and a ranking metric that is only a review-order hint.
|
|
220
221
|
|
|
221
222
|
Smallest layer changed:
|
|
222
223
|
|
|
@@ -226,6 +227,61 @@ Next sharper question:
|
|
|
226
227
|
|
|
227
228
|
Can the pack explore song/mix combinations and produce a prioritized confidence map?
|
|
228
229
|
|
|
230
|
+
## Run 005 - Bounded song/mix exploration sweep
|
|
231
|
+
|
|
232
|
+
Claim:
|
|
233
|
+
|
|
234
|
+
Neon can run a bounded current-target exploration sweep across multiple songs and parts, produce a confidence map, classify weak layers, and close the loop after small user-controlled changes.
|
|
235
|
+
|
|
236
|
+
Profile:
|
|
237
|
+
|
|
238
|
+
`profiles/explore-songs-and-mixes.json`
|
|
239
|
+
|
|
240
|
+
Evidence to capture:
|
|
241
|
+
|
|
242
|
+
- route and proof-contract availability
|
|
243
|
+
- sample/source preparation receipt
|
|
244
|
+
- bounded song/part entries
|
|
245
|
+
- per-window active-instrument, peak, headroom, and clipping receipts
|
|
246
|
+
- prioritized findings
|
|
247
|
+
- screenshot, console health, and layout health
|
|
248
|
+
|
|
249
|
+
Possible outcomes:
|
|
250
|
+
|
|
251
|
+
- `app_contract_gap`: the app cannot render arbitrary song/part proof states yet.
|
|
252
|
+
- `proof_insufficient`: the exploration profile runs but cannot support the claim.
|
|
253
|
+
- `profile_calibration`: proof windows or required-active receipts target the wrong musical window.
|
|
254
|
+
- `product_regression`: a sampled song/part clips or violates objective guardrails.
|
|
255
|
+
|
|
256
|
+
Observed status:
|
|
257
|
+
|
|
258
|
+
Passed on May 24, 2026 with `local-playwright` after three local ratchet iterations.
|
|
259
|
+
|
|
260
|
+
Observed evidence:
|
|
261
|
+
|
|
262
|
+
- final run sampled `4` songs and `8` song/part entries
|
|
263
|
+
- final run passed `8` entries with `0` prioritized findings
|
|
264
|
+
- source preparation loaded drums `samples`, bass/chord/guitar `hybrid`, and vocal `voice_oohs`
|
|
265
|
+
- final sampled peaks stayed below the clipping threshold: Yakety `0.9589` and `0.9756`, Monkberry Sheet `0.9734` and `0.9550`, Monkberry Full OMR `0.8345` and `0.8327`, Monkberry Tab proof windows `0.8328` to `0.8423`
|
|
266
|
+
- console fatal count `0`
|
|
267
|
+
- horizontal overflow `0 px`
|
|
268
|
+
|
|
269
|
+
Failure classification:
|
|
270
|
+
|
|
271
|
+
Resolved during the ratchet:
|
|
272
|
+
|
|
273
|
+
- `proof_insufficient`: the first corrected sweep hit an `OfflineAudioContext` zero-frame error because historical song/part proof states did not normalize tempo/bar count.
|
|
274
|
+
- `app_contract_gap`: the next sweep showed saved/song snapshots preserved `rhythmSynthEnabled` but not bass/chord/guitar enable flags.
|
|
275
|
+
- `product_regression`: after lane flags were fixed, the sweep found clipping in Yakety Dark and Monkberry Sheet presets.
|
|
276
|
+
|
|
277
|
+
Smallest layer changed:
|
|
278
|
+
|
|
279
|
+
App proof contract, app snapshot normalization, app fixture/mix data, and the local exploration profile. Riddle Proof core did not need a change.
|
|
280
|
+
|
|
281
|
+
Next sharper question:
|
|
282
|
+
|
|
283
|
+
Can the same exploration shape become a reusable pack/profile workflow where a user can choose a bounded target set, run locally during iteration, and publish only after the evidence is worth sharing?
|
|
284
|
+
|
|
229
285
|
## Project note
|
|
230
286
|
|
|
231
287
|
The ratchet is not a pass. The ratchet is the next sharper question.
|
|
@@ -28,4 +28,4 @@ Most ratchet steps should change profile JSON, pack docs, app proof contracts, o
|
|
|
28
28
|
|
|
29
29
|
## Loops are generic
|
|
30
30
|
|
|
31
|
-
A ratchet loop should be domain-neutral: propose a candidate, apply
|
|
31
|
+
A ratchet loop should be domain-neutral: propose a claim candidate, apply its action, collect evidence, classify receipt-level support, restore or keep state, and repeat within a budget. Neon `mix-level-search` is a strategy plugged into that loop, not the loop's identity.
|
|
@@ -11,12 +11,14 @@ The raw `profile-result.json` files are real runner outputs. They intentionally
|
|
|
11
11
|
| `run-001-fast-mix-health` | `current_target` | passed | The current Neon target exposes a proof contract, source receipts, and a bounded offline mix-health render. |
|
|
12
12
|
| `run-002-mix-change` | `interaction_snapshots` | passed | A bass-level edit changes rendered bass and mix metrics without clipping. |
|
|
13
13
|
| `run-003-full-matrix` | `current_target` | passed | The mix-health proof holds across desktop, phone, iPad Mini, and iPad viewports. |
|
|
14
|
-
| `run-004-ratchet-loop-mix-level-search` | `interaction_snapshots` | passed | A bounded ratchet loop tests mix-level candidates,
|
|
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
|
+
| `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. |
|
|
15
16
|
|
|
16
17
|
## What these examples do not prove
|
|
17
18
|
|
|
18
19
|
- They do not prove subjective mix taste.
|
|
19
|
-
- They do not prove every song, section, or mix preset.
|
|
20
|
+
- They do not prove every song, section, or mix preset. Run 005 is bounded to the configured song, part, and proof-window limits.
|
|
20
21
|
- They do not prove production CDN asset availability; these were local dev-server runs.
|
|
21
22
|
- They do not prove a reference/candidate release delta. The mix-change run uses pre-action/post-action snapshots inside one proof run, not a separate baseline deployment.
|
|
22
23
|
- 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.
|
|
24
|
+
- 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.
|