Bundle the arena venue pack (career stage 3) - #961
Conversation
Feedback Arena (150 stars) now ships in every build like the bar: 4 reactive crowd loops, 2 stingers, and a flyover intro rendered from the UE5 arena scene (200 spectators + 396-body intro fill, state-reactive rig lighting). Served by the existing bundled-pack fallback; venues.json unchanged. Audio files are dive-bar placeholders until arena-scale recordings land. Largest file is 89MB — future re-renders must stay under GitHub's 100MB hard limit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
📝 WalkthroughWalkthroughAdds an arena venue-pack manifest mapping its media assets and a JavaScript test confirming the manifest and referenced files are complete in the plugin checkout. ChangesArena venue pack
Estimated code review effort: 1 (Trivial) | ~5 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
ESLint install failed. For unrecoverable errors, disable the tool in CodeRabbit configuration. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@tests/js/career_plugin.test.js`:
- Around line 58-68: Strengthen the manifest assertions in the career plugin
test by comparing the complete manifest.loops, manifest.stingers, and
manifest.sfx objects against their expected key-to-file mappings, rather than
only checking loop keys and file existence. Preserve the existing intro
assertions and media existence checks.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 691c9c4d-93b1-4546-9fb4-54d4ec11853e
⛔ Files ignored due to path filters (10)
plugins/career/venue-packs/arena/arena-ambience.mp3is excluded by!**/*.mp3plugins/career/venue-packs/arena/bored.mp4is excluded by!**/*.mp4plugins/career/venue-packs/arena/cheer.mp4is excluded by!**/*.mp4plugins/career/venue-packs/arena/clap.mp4is excluded by!**/*.mp4plugins/career/venue-packs/arena/ecstatic.mp4is excluded by!**/*.mp4plugins/career/venue-packs/arena/engaged.mp4is excluded by!**/*.mp4plugins/career/venue-packs/arena/intro.mp4is excluded by!**/*.mp4plugins/career/venue-packs/arena/neutral.mp4is excluded by!**/*.mp4plugins/career/venue-packs/arena/sfx-down.mp3is excluded by!**/*.mp3plugins/career/venue-packs/arena/sfx-up.mp3is excluded by!**/*.mp3
📒 Files selected for processing (2)
plugins/career/venue-packs/arena/manifest.jsontests/js/career_plugin.test.js
| assert.deepEqual(Object.keys(manifest.loops).sort(), | ||
| ['bored', 'ecstatic', 'engaged', 'neutral']); | ||
| assert.equal(manifest.intro.video, 'intro.mp4'); | ||
| assert.equal(manifest.intro.audio, 'arena-ambience.mp3'); | ||
| for (const f of [ | ||
| ...Object.values(manifest.loops), | ||
| ...Object.values(manifest.stingers), | ||
| manifest.intro.video, | ||
| manifest.intro.audio, | ||
| manifest.sfx.up, | ||
| manifest.sfx.down, |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Assert the exact media mappings, not only file presence.
The test currently checks loop keys and that referenced files exist, so swapped loop filenames or incorrect stinger/SFX keys would still pass. Assert the complete expected loops, stingers, and sfx objects to catch incorrect runtime wiring.
Proposed test strengthening
- assert.deepEqual(Object.keys(manifest.loops).sort(),
- ['bored', 'ecstatic', 'engaged', 'neutral']);
+ assert.deepEqual(manifest.loops, {
+ bored: 'bored.mp4',
+ neutral: 'neutral.mp4',
+ engaged: 'engaged.mp4',
+ ecstatic: 'ecstatic.mp4',
+ });
+ assert.deepEqual(manifest.stingers, {
+ clap: 'clap.mp4',
+ cheer: 'cheer.mp4',
+ });
+ assert.deepEqual(manifest.sfx, {
+ up: 'sfx-up.mp3',
+ down: 'sfx-down.mp3',
+ });📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| assert.deepEqual(Object.keys(manifest.loops).sort(), | |
| ['bored', 'ecstatic', 'engaged', 'neutral']); | |
| assert.equal(manifest.intro.video, 'intro.mp4'); | |
| assert.equal(manifest.intro.audio, 'arena-ambience.mp3'); | |
| for (const f of [ | |
| ...Object.values(manifest.loops), | |
| ...Object.values(manifest.stingers), | |
| manifest.intro.video, | |
| manifest.intro.audio, | |
| manifest.sfx.up, | |
| manifest.sfx.down, | |
| assert.deepEqual(manifest.loops, { | |
| bored: 'bored.mp4', | |
| neutral: 'neutral.mp4', | |
| engaged: 'engaged.mp4', | |
| ecstatic: 'ecstatic.mp4', | |
| }); | |
| assert.deepEqual(manifest.stingers, { | |
| clap: 'clap.mp4', | |
| cheer: 'cheer.mp4', | |
| }); | |
| assert.deepEqual(manifest.sfx, { | |
| up: 'sfx-up.mp3', | |
| down: 'sfx-down.mp3', | |
| }); | |
| assert.equal(manifest.intro.video, 'intro.mp4'); | |
| assert.equal(manifest.intro.audio, 'arena-ambience.mp3'); | |
| for (const f of [ | |
| ...Object.values(manifest.loops), | |
| ...Object.values(manifest.stingers), | |
| manifest.intro.video, | |
| manifest.intro.audio, | |
| manifest.sfx.up, | |
| manifest.sfx.down, |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@tests/js/career_plugin.test.js` around lines 58 - 68, Strengthen the manifest
assertions in the career plugin test by comparing the complete manifest.loops,
manifest.stingers, and manifest.sfx objects against their expected key-to-file
mappings, rather than only checking loop keys and file existence. Preserve the
existing intro assertions and media existence checks.
CodeRabbit follow-up on #961: presence checks alone would pass with swapped loop filenames; assert the full loops/stingers/sfx objects. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
The Feedback Arena (150★, career stage 3) now ships in every build, same as the dive bar: media lives at `plugins/career/venue-packs/arena/` and is served by the existing bundled-pack fallback from #927. No code changes — `venues.json` untouched (`pack: null` = bundled, bar precedent).
Contents: 4 reactive crowd loops (bored/neutral/engaged/ecstatic — state-scaled rig lighting, 200-spectator crowd), 2 stingers, 7s flyover intro (596 bodies via intro-only fill), manifest with sfx wiring. Rendered from the UE5 arena scene at 2580×1080.
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Tests