# Neon RiddleNode Review-Warning Report

## Plain-English Summary

The RiddleNode Neon lab run passed its deterministic gates, but the broader candidate sweep found that `Yakety Yak (Dark) / Hook` had only `0.28 dB` of headroom. That was not clipping and not a failed proof, but it was close enough to the `0.50 dB` review margin to deserve a human-review warning.

The useful catch is the boundary: the proof should not say "this mix is bad" or "this candidate sounds better." It should say "this running app target is clean enough to continue, and this sampled section is close to a deterministic headroom margin, so review it deliberately."

## What Changed

- LilArcade PR #534 added a RiddleNode lab loop for `https://riddlenode.com/neon-lab/`.
- The loop can rerun the broader candidate preset with `npm run proof:sequencer:riddlenode-candidate` against the already-published lab bundle.
- The loop can also run `npm run proof:sequencer:riddlenode-intent-matrix` to reuse shared RiddleNode gates across several narrow mix-intent candidate loops.
- The batch summary now reports low-headroom margins as non-failing review warnings.
- Integrations PR #751 moves the warning helpers into `@riddledc/riddle-proof-packs` as `collectAudioExplorationReviewWarnings()` and `formatAudioExplorationReviewWarningsMarkdown()` so the evidence language can become reusable instead of LilArcade-only glue.

## Verification

Live RiddleNode candidate sweep:

- status: `candidate_ready_for_review`
- sampled songs: `2`
- sampled parts: `4`
- sampled windows: `4`
- deterministic findings: `0`
- recommendation: `chord -0.035`
- supported candidates: `2`
- rejected candidates: `2`
- review warning: `Yakety Yak (Dark) / Hook` had `0.28 dB` headroom, `clipping=false`, peak around `0.9682`

Live claim-translation check:

- request: `turn the bass part down a little`
- status: `preliminary_candidate_ready`
- recommendation: `bass -0.05`
- supported candidates: `3`
- rejected candidates: `0`

Live intent matrix:

- status: `intent_matrix_ready_for_review`
- shared gates: `local_gate_ready`
- bass request: `bass -0.05`, supported `3`, rejected `0`
- guitar request: `guitar -0.02`, supported `3`, rejected `0`
- chord request: `chord -0.035`, supported `2`, rejected `1`
- deterministic findings: `0`
- review warnings: `0`

Local/package checks:

- `node --test scripts/__tests__/neonRatchetBatch.test.mjs src/proof/__tests__/neonProofContract.test.mjs`
- `node --test scripts/__tests__/neonRatchetIntentMatrix.test.mjs scripts/__tests__/neonRatchetBatch.test.mjs`
- `npm run proof:sequencer:riddlenode-candidate`
- `npm run proof:sequencer:riddlenode-intent-matrix`
- `npm run test:neon`
- `pnpm --filter @riddledc/riddle-proof-packs test`

GitHub checks:

- LilArcade PR #534 CI passed.
- Integrations PR #751 CI passed.

## Proof Boundary

This proves that the Neon lab can run a fast public candidate loop, produce compact human-review packets, surface deterministic review warnings, and keep reusable warning language moving into proof packs. It does not prove subjective mix quality or that the recommended candidate is artistically better.
