Summary
Discovered while capturing screenshots for the v1.7.119 manual update on 2026-05-11. Opening Settings → Profiles via the navigation throws ReferenceError: loadDmxProfiles is not defined. The function is referenced in two places but defined nowhere.
Evidence (HEAD = 82bd92c)
desktop/shared/spa/js/settings.js:16 calls loadDmxProfiles() unguarded:
if(s==='profiles')loadDmxProfiles();
desktop/shared/spa/js/profiles.js calls it seven times but always guarded by typeof loadDmxProfiles === 'function':
profiles.js:495, 507, 668, 679, 695, 778
- No definition exists in any
.js file:
$ git grep -n 'function loadDmxProfiles\|loadDmxProfiles\s*=' desktop/shared/spa/js/
(no hits)
The guards in profiles.js suggest the function was intended to be defined elsewhere (perhaps as part of a deferred-load module) but the definition was lost or never landed. The single unguarded call in settings.js:16 then crashes the section-initialization path.
Reproduction
- Open the SPA at
http://localhost:<port>.
- Navigate to Settings → Profiles.
- Console shows:
Uncaught ReferenceError: loadDmxProfiles is not defined at _setSection in settings.js.
Observed symptom for the operator: the Profiles sub-section either doesn't initialize, or relies on other code paths (e.g. the initial page-load chain) to populate. The Playwright capture script for the manual screenshots had to swallow the thrown error and toggle #ss-profiles visibility directly to get a snapshot.
Proposed fix sketch
The expected definition probably belongs in profiles.js itself — a top-level async function that fetches /api/dmx-profiles and renders the local / community / OFL panes. The guarded callsites in profiles.js look like they expected this. Sketch:
async function loadDmxProfiles() {
try {
const r = await fetch('/api/dmx-profiles');
const data = await r.json();
renderProfilesList(data); // existing renderer
} catch (e) {
console.warn('loadDmxProfiles failed:', e);
}
}
Or — alternative — strip the unguarded callsite at settings.js:16 (consistent with profiles.js's typeof-guard pattern) and replace with if(s==='profiles' && typeof loadDmxProfiles === 'function') loadDmxProfiles();. But that papers over the missing definition; better to actually define it.
Acceptance
Related
- Surfaced during the v1.7.119 user-manual update screenshot capture (2026-05-11).
- The Playwright capture script lives at
tests/capture_manual_screenshots_v1_7_119.py — it has the working workaround if you want to see the symptom in code.
Summary
Discovered while capturing screenshots for the v1.7.119 manual update on 2026-05-11. Opening Settings → Profiles via the navigation throws
ReferenceError: loadDmxProfiles is not defined. The function is referenced in two places but defined nowhere.Evidence (HEAD = 82bd92c)
desktop/shared/spa/js/settings.js:16callsloadDmxProfiles()unguarded:desktop/shared/spa/js/profiles.jscalls it seven times but always guarded bytypeof loadDmxProfiles === 'function':.jsfile:The guards in
profiles.jssuggest the function was intended to be defined elsewhere (perhaps as part of a deferred-load module) but the definition was lost or never landed. The single unguarded call insettings.js:16then crashes the section-initialization path.Reproduction
http://localhost:<port>.Uncaught ReferenceError: loadDmxProfiles is not definedat_setSectioninsettings.js.Observed symptom for the operator: the Profiles sub-section either doesn't initialize, or relies on other code paths (e.g. the initial page-load chain) to populate. The Playwright capture script for the manual screenshots had to swallow the thrown error and toggle
#ss-profilesvisibility directly to get a snapshot.Proposed fix sketch
The expected definition probably belongs in
profiles.jsitself — a top-level async function that fetches/api/dmx-profilesand renders the local / community / OFL panes. The guarded callsites inprofiles.jslook like they expected this. Sketch:Or — alternative — strip the unguarded callsite at
settings.js:16(consistent withprofiles.js's typeof-guard pattern) and replace withif(s==='profiles' && typeof loadDmxProfiles === 'function') loadDmxProfiles();. But that papers over the missing definition; better to actually define it.Acceptance
loadDmxProfilesis defined exactly once indesktop/shared/spa/js/.typeof-guarded callsites inprofiles.jsfind the function and fire (verify via console.log during a community-share or OFL-import flow).tests/capture_manual_screenshots_v1_7_119.pyno longer needs the try/except workaround for the Profiles section.Related
tests/capture_manual_screenshots_v1_7_119.py— it has the working workaround if you want to see the symptom in code.