# Neon Active-Lane Receipt Report

- target: `https://riddlenode.com/neon-lab/`
- source PR: `davisdiehl/lilarcade#534`
- source commit: `706cdc8`
- status: `active_lane_receipts_visible`
- evidence role: `interaction_snapshots`

## Plain-English Catch Card

### Title

Neon stopped hiding missing parts behind a generic guardrail.

### Summary

The human-review packets now show whether required active lanes stayed measurable in each proof window, so a candidate cannot quietly pass review with a required musical part missing.

### What Went Wrong

The earlier review packet could say `required_instruments_preserved`, but a reader had to inspect nested JSON to understand whether the required lanes were actually active in every proof window. That made missing lanes too easy to miss during fast candidate review.

### What Riddle Caught

The new active-lane receipt exposes `active_lanes_preserved` or `missing_required_active_lanes` directly in the compact packet. A deterministic fixture now rejects a candidate when a required chord lane is inactive, and the live RiddleNode run shows bass, guitar, and chord packets preserving all required lanes.

### Why It Matters

This is the difference between "the candidate looks supported" and "the candidate is supported with the required musical lanes still measurable." It makes review packets safer without claiming that the mix sounds better.

### What Changed

LilArcade now adds `activeLaneReceipt` to each compact claim-candidate packet, makes `required_instruments_preserved` depend on that receipt, and renders an `Active Lane Receipts` table in Markdown review packets.

### What This Does Not Prove

It does not prove subjective mix quality, does not prove the candidate is musically preferred, and does not replace listening review. It proves a deterministic guardrail: declared active lanes stayed measurable in the proof windows.

### Technical Receipt

`activeLaneReceipt.status=active_lanes_preserved`; `requiredWindowCount=2`; `windowCount=2`; `requiredTracks=bass,chord,guitar,rhythmSynth`; `missingRequiredActiveCount=0` for bass, guitar, and chord live RiddleNode packets. The deterministic missing-lane unit test fails the guardrail with `missing_required_active_lanes`.

## Live RiddleNode Receipt

The RiddleNode fast loop published the Neon-only bundle, ran shared gates, then ran the single-browser intent matrix over three small downward mix intents.

| Intent | Recommendation | Supported | Rejected | Active Lane Status | Required Windows | Required Tracks | Missing Required Active |
| --- | --- | --- | --- | --- | --- | --- | --- |
| bass down little | `bass -0.05` | 3 | 0 | `active_lanes_preserved` | `2 / 2` | `bass, chord, guitar, rhythmSynth` | none |
| guitar down little | `guitar -0.02` | 3 | 0 | `active_lanes_preserved` | `2 / 2` | `bass, chord, guitar, rhythmSynth` | none |
| chord down little | `chord -0.035` | 3 | 0 | `active_lanes_preserved` | `2 / 2` | `bass, chord, guitar, rhythmSynth` | none |

## Validation

- `node --test src/proof/__tests__/neonProofContract.test.mjs scripts/__tests__/neonReviewPacket.test.mjs` passed: 20/20.
- `npm run proof:sequencer:check-profiles` passed with 12 profiles and no drift.
- `npm run proof:sequencer:riddlenode-fast-loop` passed against `https://riddlenode.com/neon-lab/`.
- `npm run test:neon` passed: 106/106.
- `npm run build` passed locally.
- GitHub CI passed for LilArcade PR #534 at `706cdc8`.

## Artifacts

- `intent-matrix-summary.md`
- `intent-matrix-summary.json`
- `guitar-active-lane-human-review-packet.md`
- `guitar-active-lane-human-review-packet.json`
- `bass-active-lane-human-review-packet.md`
- `chord-active-lane-human-review-packet.md`
- `intent-matrix-surrogate-review.md`
- `active-lane-intent-matrix.png`

## Boundary

This is proof-backed candidate review. The receipt says declared active lanes stayed measurable while candidates were ranked for review. It does not prove that any candidate sounds better.
