@helix3/helix-cli 0.1.23-helix3.428 → 0.1.23-helix3.430
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/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/vehicle/audioImport.js +6 -2
- package/dist/vehicle/audioImport.js.map +1 -1
- package/dist/vehicle/audioProvenance.js +1 -1
- package/dist/vehicle/audioProvenance.js.map +1 -1
- package/dist/vehicle/preview.js +1 -1
- package/dist/vehicle/preview.js.map +1 -1
- package/dist/visualQa/vehicle.js +51 -0
- package/dist/visualQa/vehicle.js.map +1 -1
- package/docs/vehicle-audio-import.md +4 -1
- package/docs/visual-qa.md +3 -1
- package/package.json +2 -2
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_stock_events.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fmod_studio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fsb5.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_ac.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_beamng.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_fixtures.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_sim_audio.cpython-312.pyc +0 -0
package/dist/visualQa/vehicle.js
CHANGED
|
@@ -165,6 +165,57 @@ async function vehiclePass(ctx, pass) {
|
|
|
165
165
|
const engineBundle = (process.env.HELIX_VQA_ENGINE_BUNDLE ?? '').trim();
|
|
166
166
|
if (engineBundle)
|
|
167
167
|
errors.push(`HELIX_VQA_ENGINE_BUNDLE=${engineBundle} was set: rendered on a local engine build, not for submission`);
|
|
168
|
+
// ── THE OCCUPANT IS THE PLATFORM'S REFERENCE AVATAR, NOT THE SUBMITTER'S ───────────────────────────────────────────
|
|
169
|
+
// Every seat is occupied by "this account's own avatar", and an account's avatar is whatever it wears. MEASURED on the
|
|
170
|
+
// 993 (engine 0.3.214, same build, same car): the QA accounts' default avatar seats with torso 20.5°, hands on the rim,
|
|
171
|
+
// crown +25 mm; the owner's account, wearing a hairstyle whose cards stand ~0.11 m over the skull, seats reclined to the
|
|
172
|
+
// rig's stop (35.2°), hands 131/91 mm off the rim, hair +6 mm under the lining — seven occupant FAILs for whoever
|
|
173
|
+
// happened to submit. A car's gate has to judge the car, and the cabin fit is sized for the platform default body, so
|
|
174
|
+
// the page is answered with the platform default avatar (`GET /universal-items/avatar/default`, public) for every seat.
|
|
175
|
+
// `HELIX_VQA_OWN_AVATAR=1` keeps the account's own avatar (how YOUR avatar fits this car; recorded, not for submission);
|
|
176
|
+
// `HELIX_VQA_EQUIPPED_AVATAR=<json>` states any composition (debug, to bisect an avatar defect).
|
|
177
|
+
const equippedOverride = (process.env.HELIX_VQA_EQUIPPED_AVATAR ?? '').trim();
|
|
178
|
+
const ownAvatar = /^(1|true|yes)$/i.test((process.env.HELIX_VQA_OWN_AVATAR ?? '').trim());
|
|
179
|
+
let occupantAvatar = { source: 'account', itemId: null };
|
|
180
|
+
if (equippedOverride)
|
|
181
|
+
errors.push(`HELIX_VQA_EQUIPPED_AVATAR=${equippedOverride} was set: the occupants wear a stated avatar, not the reference one (debug, not for submission)`);
|
|
182
|
+
else if (ownAvatar)
|
|
183
|
+
errors.push('HELIX_VQA_OWN_AVATAR=1 was set: the occupants wear this account\'s own avatar, not the platform reference (not for submission)');
|
|
184
|
+
facts.occupantAvatar = occupantAvatar;
|
|
185
|
+
if (!ownAvatar) {
|
|
186
|
+
let body = null;
|
|
187
|
+
if (equippedOverride)
|
|
188
|
+
body = node_fs_1.default.readFileSync(equippedOverride, 'utf8');
|
|
189
|
+
else {
|
|
190
|
+
try {
|
|
191
|
+
const res = await fetch(`${ctx.apiBase.replace(/\/$/, '')}/api/v1/universal-items/avatar/default`, { headers: { accept: 'application/json' } });
|
|
192
|
+
if (res.ok)
|
|
193
|
+
body = await res.text();
|
|
194
|
+
else
|
|
195
|
+
errors.push(`occupants: the platform default avatar could not be read (HTTP ${res.status}); seats were filled with this account's avatar`);
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
errors.push(`occupants: the platform default avatar could not be read (${String(e?.message ?? e).slice(0, 120)}); seats were filled with this account's avatar`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (body !== null) {
|
|
202
|
+
try {
|
|
203
|
+
const j = JSON.parse(body);
|
|
204
|
+
occupantAvatar = { source: equippedOverride ? 'stated' : 'platform-default', itemId: j.itemId ?? null };
|
|
205
|
+
facts.occupantAvatar = occupantAvatar;
|
|
206
|
+
}
|
|
207
|
+
catch { /* the page will say */ }
|
|
208
|
+
const answer = body;
|
|
209
|
+
await b.ctx.route(/\/universal-items\/avatar\/equipped\/me(\?|$)/, async (route) => {
|
|
210
|
+
if (route.request().method() !== 'GET') {
|
|
211
|
+
await route.continue();
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const origin = route.request().headers().origin;
|
|
215
|
+
await route.fulfill({ status: 200, body: answer, contentType: 'application/json', headers: { 'cache-control': 'no-store', ...(origin ? { 'access-control-allow-origin': origin, 'access-control-allow-credentials': 'true', vary: 'Origin' } : { 'access-control-allow-origin': '*' }) } });
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
168
219
|
if (preview && previewSink) {
|
|
169
220
|
await (0, vehiclePreview_1.installVehiclePreviewRoutes)(b.ctx, preview.candidate, itemId, previewSink);
|
|
170
221
|
(0, vehiclePreview_1.watchProxyModelFetches)(b.ctx, previewSink);
|