[1.155.0] — 2026-08-12
Refactor — split config.js under the file-size limit (P-15). public/js/views/config.js was 1030 lines, over the project's 800-line hard limit. Two cohesive, behavior-preserving modules were extracted, bringing it to 783.
Changed
config/field-specs.js(new) — the pure, read-only field-spec data: the curated per-provider model lists + theFIELDSdescriptor table (API keys / runtime / regional).window.ConfigFieldSpecs, loaded before the view.config/tab-controller.js(new) — the#/configtab-bar controller (ARIA tablist + keyboard nav + panel swapping) as acreateConfigTabController(c, panelHost)factory returning{ tabBtn, activate }.config.jsnow references both; the render logic (fieldRow, profile/section editors, save flow) is unchanged. Both new files are wired intoindex.htmlbeforeconfig.js.
Notes
- Pure refactor, zero behavior change — no route, no server, no i18n key, no CSS. Six source-reading tests were repointed to the new files (they assert on the moved field/model/tab markup); the assertions are otherwise identical.
scan.js(906) is intentionally left as-is. Its results-rendering was already extracted tolib/scan-results.js(v1.132.0); the remaining core is a tightly-coupled event-wiring closure bound to ~18 filter/DOM refs, where a mechanical factory extraction would need an 18-argument signature and worsen coupling — the opposite of the rule's intent. A proper split needs a filter-state model refactor, deferred rather than force-fit.- Suite: 2396 tests (unchanged — tests repointed, not added).