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',