feat: add adaptive soundtrack layer assets

This commit is contained in:
2026-09-04 15:13:38 +03:00
parent 0b52d75f01
commit 3d01b3ec07
16 changed files with 119 additions and 5 deletions

View File

@@ -64,6 +64,10 @@ describe('approved asset publication closure', () => {
['soundtrack-intro-mp3', 'nightdrive-intro.mp3'],
['soundtrack-main-opus', 'nightdrive-main.opus'],
['soundtrack-main-mp3', 'nightdrive-main.mp3'],
['soundtrack-afterglow-opus', 'nightdrive-afterglow.opus'],
['soundtrack-afterglow-mp3', 'nightdrive-afterglow.mp3'],
['soundtrack-drive-lift-opus', 'nightdrive-drive-lift.opus'],
['soundtrack-drive-lift-mp3', 'nightdrive-drive-lift.mp3'],
].map(([id, fileName], index) => {
const bytes = Buffer.from(`approved soundtrack asset ${index}`);
return { id, fileName, bytes, sha256: createHash('sha256').update(bytes).digest('hex') };
@@ -78,6 +82,8 @@ describe('approved asset publication closure', () => {
soundtrack: {
intro: { opusAssetId: 'soundtrack-intro-opus', mp3AssetId: 'soundtrack-intro-mp3' },
main: { opusAssetId: 'soundtrack-main-opus', mp3AssetId: 'soundtrack-main-mp3' },
afterglow: { opusAssetId: 'soundtrack-afterglow-opus', mp3AssetId: 'soundtrack-afterglow-mp3' },
driveLift: { opusAssetId: 'soundtrack-drive-lift-opus', mp3AssetId: 'soundtrack-drive-lift-mp3' },
},
}));
await mkdir(join(root, 'inputs/prepared-assets'), { recursive: true });

View File

@@ -47,6 +47,10 @@ describe('approved public portfolio projection', () => {
content.soundtrack.intro.mp3AssetId,
content.soundtrack.main.opusAssetId,
content.soundtrack.main.mp3AssetId,
content.soundtrack.afterglow.opusAssetId,
content.soundtrack.afterglow.mp3AssetId,
content.soundtrack.driveLift.opusAssetId,
content.soundtrack.driveLift.mp3AssetId,
]),
];
expect([...publishedReferences].sort()).toEqual(manifest.assets.map((asset) => asset.id).sort());

View File

@@ -118,6 +118,28 @@ describe('artifact verification', () => {
await expect(verifyArtifactDirectory(directory, inputs, contract)).resolves.toBeUndefined();
});
it.each([
{
name: 'an omitted adaptive soundtrack file',
mutate: async (directory: string) => rm(join(directory, 'assets/nightdrive-afterglow.opus')),
error: /missing.*artifact|digest|public asset/iu,
},
{
name: 'an altered adaptive soundtrack file',
mutate: async (directory: string) => writeFile(join(directory, 'assets/nightdrive-drive-lift.mp3'), 'altered'),
error: /digest does not match|hash/u,
},
{
name: 'an unreferenced adaptive soundtrack file',
mutate: async (directory: string) => writeFile(join(directory, 'assets/nightdrive-unreferenced.opus'), 'unreferenced'),
error: /unexpected artifact|unreferenced/u,
},
])('rejects $name', async ({ mutate, error }) => {
const { directory, inputs, contract } = await writeValidArtifacts();
await mutate(directory);
await expect(verifyArtifactDirectory(directory, inputs, contract)).rejects.toThrow(error);
});
it.each([
{
name: 'an unexpected preview sitemap',

View File

@@ -31,6 +31,7 @@ describe('release budgets', () => {
});
it('pins every exact section 14 threshold', () => {
expect(PERFORMANCE_BUDGETS.deferredAudio).toBe(16 * 1024 * 1024);
expect(PERFORMANCE_BUDGETS).toMatchObject({
initialHtmlCriticalCss: 100 * 1024,
initialApplicationJs: 120 * 1024,
@@ -46,7 +47,7 @@ describe('release budgets', () => {
deferredProjectVisuals: 2.5 * 1024 * 1024,
highTierExtras: 750 * 1024,
deferredNonVideo: 3.5 * 1024 * 1024,
deferredAudio: 13 * 1024 * 1024,
deferredAudio: 16 * 1024 * 1024,
imageSceneConcurrency: 2,
videoConcurrency: 1,
mobileTextureDimension: 2048,
@@ -63,6 +64,10 @@ describe('release budgets', () => {
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/nightdrive-afterglow.opus', '')).toBe('soundtrack-audio');
expect(classifyArtifact('assets/nightdrive-afterglow.mp3', '')).toBe('soundtrack-audio');
expect(classifyArtifact('assets/nightdrive-drive-lift.opus', '')).toBe('soundtrack-audio');
expect(classifyArtifact('assets/nightdrive-drive-lift.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);
});

View File

@@ -27,6 +27,8 @@ type MutableContentFixture = {
soundtrack?: {
intro: { opusAssetId: string; mp3AssetId: string };
main: { opusAssetId: string; mp3AssetId: string };
afterglow: { opusAssetId: string; mp3AssetId: string };
driveLift: { opusAssetId: string; mp3AssetId: string };
};
};
@@ -48,6 +50,8 @@ describe('content schemas', () => {
content.soundtrack = {
intro: { opusAssetId: 'soundtrack-intro-opus', mp3AssetId: 'soundtrack-intro-mp3' },
main: { opusAssetId: 'soundtrack-main-opus', mp3AssetId: 'soundtrack-main-mp3' },
afterglow: { opusAssetId: 'soundtrack-afterglow-opus', mp3AssetId: 'soundtrack-afterglow-mp3' },
driveLift: { opusAssetId: 'soundtrack-drive-lift-opus', mp3AssetId: 'soundtrack-drive-lift-mp3' },
};
const audioMetadata = {
width: null,
@@ -61,6 +65,10 @@ describe('content schemas', () => {
{ id: 'soundtrack-intro-mp3', fileName: 'nightdrive-intro.mp3', sha256: 'b'.repeat(64), mediaType: 'audio/mpeg', durationMs: 56_064, ...audioMetadata },
{ id: 'soundtrack-main-opus', fileName: 'nightdrive-main.opus', sha256: 'c'.repeat(64), mediaType: 'audio/ogg', durationMs: 178_605, ...audioMetadata },
{ id: 'soundtrack-main-mp3', fileName: 'nightdrive-main.mp3', sha256: 'd'.repeat(64), mediaType: 'audio/mpeg', durationMs: 178_605, ...audioMetadata },
{ id: 'soundtrack-afterglow-opus', fileName: 'nightdrive-afterglow.opus', sha256: 'e'.repeat(64), mediaType: 'audio/ogg', durationMs: 56_064, ...audioMetadata },
{ id: 'soundtrack-afterglow-mp3', fileName: 'nightdrive-afterglow.mp3', sha256: 'f'.repeat(64), mediaType: 'audio/mpeg', durationMs: 56_064, ...audioMetadata },
{ id: 'soundtrack-drive-lift-opus', fileName: 'nightdrive-drive-lift.opus', sha256: '1'.repeat(64), mediaType: 'audio/ogg', durationMs: 178_605, ...audioMetadata },
{ id: 'soundtrack-drive-lift-mp3', fileName: 'nightdrive-drive-lift.mp3', sha256: '2'.repeat(64), mediaType: 'audio/mpeg', durationMs: 178_605, ...audioMetadata },
];
const manifest = {
assets: [...(validManifest as { assets: unknown[] }).assets, ...soundtrackAssets],