fix(release): repair the screenshot capture after the catalog reorder

Two problems the poster catalog introduced in the release capture driver.

The mock server no longer starts. `capture-app-driver.ts` spawns
`tsx apps/xtream-mock-server/src/main.ts` directly, and the generator now
imports `@iptvnator/shared/marketing-fixtures`; without `--tsconfig
tsconfig.base.json` tsx does not resolve that path alias and the process exits
with `Cannot find module '@iptvnator/shared/marketing-fixtures'`. Verified both
ways: bare invocation fails, with the flag the server reports Listening. Both
mock projects' own serve targets already pass the flag — this raw spawn was the
site that got missed.

The seeded dashboard backdrops pointed at the wrong movies (Codex P2, verified).
VOD stream ids are `MARKETING_VOD_STREAM_ID_BASE + index` and the generator now
lists POSTER_SHOWCASE_MOVIES first, so 62000-62002 became Black Harbor, The
Paper Astronaut and Summer Static, while the driver still mapped those ids to
Crimson Skylark, The Voltage Guard and Midnight Mantle — release screenshots
would have shown each title under another film's backdrop. Titles updated, with
a comment recording the coupling.

Deriving the titles from the fixture list would be drift-proof, but
`tools/release` is `type:tool` with no depConstraint entry, so
`@nx/enforce-module-boundaries` forbids it depending on any library. Left as a
comment rather than loosening the boundary policy from inside this PR.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
4grayandClaude Opus 5 committed 2026-07-27 01:18:50 +02:00
1 parent 548a2b57ab
commit c783d145ca
1 file changed
+16 -4
+16 -4
View File
@@ -72,7 +72,14 @@ export async function ensureXtreamMockServer(
const child = spawn(
path.join(workspaceRoot, 'node_modules/.bin/tsx'),
['apps/xtream-mock-server/src/main.ts'],
// The mock server imports `@iptvnator/shared/marketing-fixtures`, and
// tsx only resolves that path alias when pointed at the base config —
// matching how the project's own serve target invokes it.
[
'--tsconfig',
'tsconfig.base.json',
'apps/xtream-mock-server/src/main.ts',
],
{
cwd: workspaceRoot,
env: { ...process.env, NODE_ENV: 'development', PORT: '3211' },
@@ -217,10 +224,15 @@ async function seedDashboardActivity(page: Page): Promise<void> {
`${XTREAM_MOCK_ORIGIN}/assets/marketing/backdrop/${title
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')}.svg?size=${encodeURIComponent('1280x720')}`;
// Xtream VOD stream ids are assigned by array position
// (`MARKETING_VOD_STREAM_ID_BASE + index` in marketing.generator.ts), and
// the generator lists POSTER_SHOWCASE_MOVIES first. Keep these three titles
// in step with the first three entries of that fixture list, otherwise the
// seeded backdrops belong to different movies than the ids resolve to.
const items = [
{ xtreamId: 62000, type: 'movie', backdropUrl: backdrop('Crimson Skylark'), recent: true },
{ xtreamId: 62001, type: 'movie', backdropUrl: backdrop('The Voltage Guard'), recent: true },
{ xtreamId: 62002, type: 'movie', backdropUrl: backdrop('Midnight Mantle'), recent: false },
{ xtreamId: 62000, type: 'movie', backdropUrl: backdrop('Black Harbor'), recent: true },
{ xtreamId: 62001, type: 'movie', backdropUrl: backdrop('The Paper Astronaut'), recent: true },
{ xtreamId: 62002, type: 'movie', backdropUrl: backdrop('Summer Static'), recent: false },
{ xtreamId: 72000, type: 'series', backdropUrl: backdrop('Skyline Sentinels'), recent: true },
{ xtreamId: 72001, type: 'series', backdropUrl: backdrop('The Aegis Club'), recent: false },
] as const;