@forgeax/engine-rhi-debug 0.1.32 → 0.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forgeax/engine-rhi-debug",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.34",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -26,19 +26,19 @@
|
|
|
26
26
|
"LICENSE"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@forgeax/engine-rhi": "0.1.
|
|
30
|
-
"@forgeax/engine-types": "0.1.
|
|
29
|
+
"@forgeax/engine-rhi": "0.1.34",
|
|
30
|
+
"@forgeax/engine-types": "0.1.34",
|
|
31
31
|
"@noble/hashes": "^2.2.0",
|
|
32
32
|
"pako": "^1.0.11"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@forgeax/engine-rhi-null": "0.1.
|
|
35
|
+
"@forgeax/engine-rhi-null": "0.1.34",
|
|
36
36
|
"@types/node": "^20.14.0",
|
|
37
37
|
"@webgpu/types": "^0.1.71"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@forgeax/engine-rhi-webgpu": "0.1.
|
|
41
|
-
"@forgeax/engine-rhi-wgpu": "0.1.
|
|
40
|
+
"@forgeax/engine-rhi-webgpu": "0.1.34",
|
|
41
|
+
"@forgeax/engine-rhi-wgpu": "0.1.34"
|
|
42
42
|
},
|
|
43
43
|
"forgeax": {
|
|
44
44
|
"metrics": {
|
|
@@ -193,7 +193,7 @@ describe('AC-08 partial: import.meta.hot in rhiDebugFlag guard', () => {
|
|
|
193
193
|
});
|
|
194
194
|
|
|
195
195
|
describe('RHI-debug smoke roster gate', () => {
|
|
196
|
-
it('resolves every declared hello and learn-render smoke at
|
|
196
|
+
it('resolves every declared hello and learn-render smoke at 60 frames', () => {
|
|
197
197
|
const rosterPath = path.resolve(ENGINE_ROOT, 'scripts', 'rhi-debug-smoke-roster.mjs');
|
|
198
198
|
const result = spawnSync(
|
|
199
199
|
process.execPath,
|
|
@@ -204,7 +204,7 @@ describe('RHI-debug smoke roster gate', () => {
|
|
|
204
204
|
'--learn-root',
|
|
205
205
|
'apps/learn-render',
|
|
206
206
|
'--frames',
|
|
207
|
-
'
|
|
207
|
+
'60',
|
|
208
208
|
],
|
|
209
209
|
{ cwd: ENGINE_ROOT, encoding: 'utf8' },
|
|
210
210
|
);
|
|
@@ -223,12 +223,12 @@ describe('RHI-debug smoke roster gate', () => {
|
|
|
223
223
|
};
|
|
224
224
|
expect(roster.status).toBe('unavailable');
|
|
225
225
|
expect(roster.execution).toMatchObject({ status: 'not-executed', mode: 'declaration-only' });
|
|
226
|
-
expect(roster.frameCount).toBe(
|
|
226
|
+
expect(roster.frameCount).toBe(60);
|
|
227
227
|
expect(roster.entries.length).toBeGreaterThan(0);
|
|
228
228
|
expect(
|
|
229
229
|
roster.entries.every(
|
|
230
230
|
(entry) =>
|
|
231
|
-
entry.frames ===
|
|
231
|
+
entry.frames === 60 &&
|
|
232
232
|
entry.command === entry.invocation &&
|
|
233
233
|
entry.tokens.join(' ') === entry.invocation &&
|
|
234
234
|
entry.tokens[0] === 'pnpm' &&
|
|
@@ -285,7 +285,7 @@ describe('RHI-debug smoke roster gate', () => {
|
|
|
285
285
|
'--cwd',
|
|
286
286
|
fixture,
|
|
287
287
|
'--frames',
|
|
288
|
-
'
|
|
288
|
+
'60',
|
|
289
289
|
'--execute',
|
|
290
290
|
],
|
|
291
291
|
{ cwd: ENGINE_ROOT, encoding: 'utf8' },
|
|
@@ -320,7 +320,7 @@ describe('RHI-debug smoke roster gate', () => {
|
|
|
320
320
|
invocation: 'pnpm --filter @fake/smoke smoke:browser',
|
|
321
321
|
tokens: ['pnpm', '--filter', '@fake/smoke', 'smoke:browser'],
|
|
322
322
|
backend: 'browser',
|
|
323
|
-
frames:
|
|
323
|
+
frames: 60,
|
|
324
324
|
});
|
|
325
325
|
expect(passedEntry?.stdout).toContain('fake browser smoke');
|
|
326
326
|
|
|
@@ -330,7 +330,11 @@ describe('RHI-debug smoke roster gate', () => {
|
|
|
330
330
|
name: '@fake/smoke',
|
|
331
331
|
private: true,
|
|
332
332
|
scripts: {
|
|
333
|
-
|
|
333
|
+
// process managers may route a failing script's streams differently
|
|
334
|
+
// on each runner; write the diagnostic synchronously to both pipes
|
|
335
|
+
// so the fail-closed assertion always has portable evidence.
|
|
336
|
+
'smoke:browser':
|
|
337
|
+
"node -e \"const fs = require('node:fs'); fs.writeSync(1, 'fake failure\\n'); fs.writeSync(2, 'fake failure\\n'); process.exit(7)\"",
|
|
334
338
|
},
|
|
335
339
|
forgeax: { smokeInvocation: 'pnpm --filter @fake/smoke smoke:browser' },
|
|
336
340
|
}),
|
|
@@ -353,12 +357,31 @@ describe('RHI-debug smoke roster gate', () => {
|
|
|
353
357
|
const failedRoster = JSON.parse(failed.stdout) as {
|
|
354
358
|
status: string;
|
|
355
359
|
execution: { status: string; failedCount: number };
|
|
356
|
-
entries: readonly {
|
|
360
|
+
entries: readonly {
|
|
361
|
+
status: string;
|
|
362
|
+
returnCode: number | null;
|
|
363
|
+
stdout: string;
|
|
364
|
+
stderr: string;
|
|
365
|
+
}[];
|
|
357
366
|
};
|
|
358
367
|
expect(failedRoster.status).toBe('failed');
|
|
359
368
|
expect(failedRoster.execution).toMatchObject({ status: 'failed', failedCount: 1 });
|
|
360
|
-
|
|
361
|
-
|
|
369
|
+
// The roster records the declared pnpm command's status. pnpm 11 maps
|
|
370
|
+
// the inner script's exit 7 to 1; compare against that real boundary.
|
|
371
|
+
const directFailure = spawnSync('pnpm', ['--filter', '@fake/smoke', 'smoke:browser'], {
|
|
372
|
+
cwd: fixture,
|
|
373
|
+
encoding: 'utf8',
|
|
374
|
+
});
|
|
375
|
+
expect(directFailure.error).toBeUndefined();
|
|
376
|
+
expect(directFailure.status).not.toBeNull();
|
|
377
|
+
expect(directFailure.status).not.toBe(0);
|
|
378
|
+
expect(failedRoster.entries[0]).toMatchObject({
|
|
379
|
+
status: 'failed',
|
|
380
|
+
returnCode: directFailure.status,
|
|
381
|
+
});
|
|
382
|
+
expect(`${failedRoster.entries[0]?.stdout}\n${failedRoster.entries[0]?.stderr}`).toContain(
|
|
383
|
+
'fake failure',
|
|
384
|
+
);
|
|
362
385
|
} finally {
|
|
363
386
|
rmSync(fixture, { recursive: true, force: true });
|
|
364
387
|
}
|