feat: integrate authored nightdrive soundtrack

This commit is contained in:
2026-09-04 14:39:28 +03:00
parent eb7f276b91
commit 745fa8169e
39 changed files with 1013 additions and 714 deletions

View File

@@ -7,11 +7,18 @@ import {
evaluateRuntimeTraceBudgetEvidence,
validateRuntimeBudgetTraceReport,
calculatePeakRequestConcurrency,
normalizeDetectedMediaType,
PERFORMANCE_BUDGETS,
resolveBudgetGateMode,
} from '../../scripts/lib/bundle-budgets.mjs';
describe('release budgets', () => {
it('normalizes codec-qualified Opus detection to its manifest container type', () => {
expect(normalizeDetectedMediaType('audio/ogg; codecs=opus')).toBe('audio/ogg');
expect(normalizeDetectedMediaType('audio/mpeg')).toBe('audio/mpeg');
expect(normalizeDetectedMediaType(null)).toBeNull();
});
it('fails closed unless the caller explicitly selects a runtime trace or transfer-only mode', () => {
expect(() => resolveBudgetGateMode({ transferOnly: false, runtimeTracePath: null }))
.toThrow(/runtime trace is required/u);
@@ -39,6 +46,7 @@ describe('release budgets', () => {
deferredProjectVisuals: 2.5 * 1024 * 1024,
highTierExtras: 750 * 1024,
deferredNonVideo: 3.5 * 1024 * 1024,
deferredAudio: 13 * 1024 * 1024,
imageSceneConcurrency: 2,
videoConcurrency: 1,
mobileTextureDimension: 2048,
@@ -53,6 +61,8 @@ describe('release budgets', () => {
expect(classifyArtifact('assets/index-a.js', 'import("./environment-b.js")')).toBe('initial-application-js');
expect(classifyArtifact('assets/environment-b.js', 'three scene')).toBe('first-live-scene');
expect(classifyArtifact('assets/nightdrive-grand-tourer-a.glb', '')).toBe('first-live-scene');
expect(classifyArtifact('assets/nightdrive-main.opus', '')).toBe('soundtrack-audio');
expect(classifyArtifact('assets/nightdrive-intro.mp3', '')).toBe('soundtrack-audio');
expect(classifyArtifact('assets/high-tier-b.js', 'optional bloom')).toBe('high-tier-extras');
expect(() => classifyArtifact('assets/mystery.bin', '')).toThrow(/unclassified/u);
});
@@ -108,6 +118,24 @@ describe('release budgets', () => {
]));
});
it('validates soundtrack duration without visual dimensions and budgets aggregate transfer', () => {
const asset = {
id: 'soundtrack-main-opus',
mediaType: 'audio/ogg',
width: null,
height: null,
durationMs: 178_605,
};
expect(evaluateMediaAssetBudget(asset, { ...asset }, 4 * 1024 * 1024, 'soundtrack-audio').violations).toEqual([]);
expect(() => evaluateMediaAssetBudget({ ...asset, width: 1 }, { ...asset, width: 1 }, 1_024, 'soundtrack-audio'))
.toThrow(/audio dimensions/i);
expect(() => evaluateMediaAssetBudget({ ...asset, durationMs: null }, { ...asset, durationMs: null }, 1_024, 'soundtrack-audio'))
.toThrow(/verified duration/i);
expect(evaluateBudgetTotals({ deferredAudio: PERFORMANCE_BUDGETS.deferredAudio! + 1 }).violations)
.toContainEqual(expect.objectContaining({ budget: 'deferredAudio' }));
});
it('derives decoded texture and GPU bytes from allocation formulas', () => {
const result = evaluateRuntimeBudgetEvidence({
schema: 'portfolio-runtime-budget-evidence/v1',