Releases: AlexAgo83/electrical-plan-editor
Releases · AlexAgo83/electrical-plan-editor
v1.15.0 - Security hardening, pure reducers, debounced persistence
Changelog (1.14.8 -> 1.15.0)
Major Highlights
- Reducers in
src/store/reducer/networkReducer.tsandsrc/store/reducer/harnessAssemblyReducer.tsare now pure: timestamps are injected through action payloads (nowIso) instead of being generated inside the reducer. - Persistence sync (
attachPersistenceSync) now debounces localStorage writes by default (200 ms) so a rapid burst of dispatches no longer triggers one fullJSON.stringify+ write per action. - Added a strict Content-Security-Policy and a set of defense-in-depth response headers (HSTS,
X-Content-Type-Options,Referrer-Policy,X-Frame-Options,Permissions-Policy) served from Render. - AI provider client now refuses to send the API key to a non-secure endpoint (
https://required, withhttp://allowed only onlocalhost/127.0.0.1); the Settings panel surfaces an explicit security notice about local key storage. - Refreshed Vitest tooling on the
^4.1.8line via the lockfile and removed the now-staleGHSA-5xrq-8626-4rwpallowlist entries.
Patch Notes
appActions.createNetwork,duplicateNetwork,deleteNetwork,importNetworksnow embednowIsoin their payloads; the corresponding reducer branches consume it instead of callingnew Date().cleanupHarnessAssembliesForDeletedNetworkaccepts an explicitnowIsoparameter and is called fromnetwork/deletewith the action's timestamp.attachPersistenceSyncexposes a new optionaldebounceMs(default 200 ms). SettingdebounceMs: 0preserves the synchronous-save behaviour for tests that assert save call counts.src/tests/store.create-store.spec.tsopts intodebounceMs: 0for the persistence feedback assertion.- Added
isAiEndpointSecure(endpoint)insrc/app/lib/aiSettings.ts;resolveAiProviderReadinessreturns the new"insecureEndpoint"status when the configured endpoint is not HTTPS (or localhost HTTP). requestAiAgentProviderProposalthrows before sending the key if the endpoint is insecure.- Added a
.settings-panel-warningbanner in the AI provider panel ofSettingsWorkspaceContent.tsxdescribing where the API key lives and how it travels. index.htmldeclares a CSP meta withdefault-src 'self', scopedconnect-srcfor OpenAI/Gemini plus generichttps:(still required for the user-supplied logo fetch), andobject-src 'none'.render.yamladds HSTS,X-Content-Type-Options: nosniff,Referrer-Policy: strict-origin-when-cross-origin,X-Frame-Options: DENY, and aPermissions-Policydenying geolocation, microphone, camera, andinterest-cohort.- Dropped the
vitest/@vitest/coverage-v8entries fromscripts/quality/check-npm-audit-allowlist.mjs; the audit gate continues to pass with zero reported vulnerabilities.
Version 1.15.0 - Security Hardening, Pure Reducers, Debounced Persistence
Pure Reducers (1.1)
- Removed every
new Date().toISOString()fromsrc/store/reducer/networkReducer.tsandsrc/store/reducer/harnessAssemblyReducer.ts. - Action payloads for
network/create,network/duplicate,network/delete, andnetwork/importManynow requirenowIso: string; action creators insrc/store/actions.tsdefault it via a single private helper. - Time-travel debugging and deterministic action replay no longer depend on freezing
Dateglobally.
Debounced Persistence (1.4)
attachPersistenceSyncinsrc/app/store.tsschedules a single trailingsaveStatecall per debounce window (200 ms default) regardless of how many actions arrive in that window.- The detach handle clears any pending timer so React unmounts and explicit unsubscribes do not leak timers.
- Existing recovery, quota, and write-failure feedback paths are preserved.
CSP & Security Headers (1.3)
index.htmldeclares aContent-Security-Policymeta coveringscript-src,style-src,img-src,font-src,connect-src,worker-src,manifest-src,object-src,base-uri, andform-action.render.yamlextends the existing cache-control headers with HSTS, MIME-sniffing protection, referrer policy, frame ancestors, and a permissions policy.
AI Provider Hardening (1.2)
src/app/lib/aiSettings.tsexportsisAiEndpointSecureand extendsAiProviderReadinessStatuswith"insecureEndpoint".requestAiAgentProviderProposalthrows if the configured endpoint is not HTTPS (orhttp://localhost).- The AI provider Settings panel renders an explicit security notice describing the local storage and direct-to-provider transmission of the API key.
Vitest 4 Sync (1.5)
package-lock.jsonis already aligned withvitest/@vitest/coverage-v8^4.1.8; this release installs the new lockfile and prunes the obsolete allowlist entries that targetedGHSA-5xrq-8626-4rwp.
Verification
npm run -s lintnpm run -s typechecknpm run -s quality:dependency-auditnpm run -s test:ci:segmentation:checknpm run -s quality:ui-modularizationnpm run -s quality:ui-timeout-governancenpm run -s quality:hooks-modularizationnpm run -s quality:store-modularizationnpm run -s quality:exceljs-boundarynpm run -s test:ci:fastnpm run -s test:ci:uinpm run -s build:vitenpm run -s quality:pwa
v1.14.8
Changelog (1.14.7 -> 1.14.8)
Major Highlights
- Rewrote the harness assembly functional schematic so the BCM (or any main harness master) sits at the head of the layout, fuse boxes are represented by the fuse node directly, and interconnector pins render as the interconnector block instead of an extra connector pin node.
- Fixed several cross-master leak paths in the assembly functional graph: reverse fuse-pair traversal and shared-pin expansion at main harness boundaries no longer drag wires from unrelated power buses into the trace.
- Added a PDF export option for single 2D plan views and a grouped multi-page PDF for selected networks.
- Simplified the wire color form: the primary selector now lists catalog colors directly and includes Free as an option.
Patch Notes
- Fuse-box pins no longer appear as standalone connector pin nodes in assembly graphs. The wire endpoint is now drawn directly against the fuse node.
- Interconnector pins (saved master or not) render as the interconnector node. The root-pin to interconnector synthetic edge is gone.
- BFS only seeds wires from
isMainHarnessConnectormasters when at least one is configured; other saved masters remain crossable but no longer pull in their own downstream wires. - Fuse-pair BFS traversal only flows pinA -> pinB, blocking reverse flow back into power feed splices and onward leaks to other main harness territory.
- Main harness connector pins act as endpoint-expansion boundaries in BFS; fuse-pair and interconnector traversal still pass through.
- Fuse-adjacent wire direction is set at render time (pinA-in, pinB-out) and preserved by orient via a
fusePairNodeIdmarker so the fuse always has at least one in and one out edge. - Panel layout sort places
isMainHarnessConnectorroots before interconnector roots so the BCM is anchored at the head of the schematic. - 2D plan export adds a PDF option with a higher-density raster so text stays legible; grouped network summary export now produces a single multi-page PDF.
- Wire color form: replaced the separate color-mode selector with a primary selector listing catalog colors and Free; reducer and persistence normalization unchanged.
Version 1.14.8 - Trustworthy Functional Schematic, PDF Export, Wire Color Form
Harness Assembly Functional Schematic
- Replaced fuse-box pin connector nodes with the fuse node directly in assembly graphs.
- Replaced interconnector pin connector nodes with the interconnector node, even when the pin is a saved master.
- Restricted fuse-pair BFS traversal to the pinA -> pinB direction.
- Made
isMainHarnessConnectorpins endpoint-expansion boundaries during BFS while keeping fuse-pair and interconnector traversal active. - Restricted BFS seeding to main harness masters when at least one is configured.
- Sorted root nodes so main harness connectors lead in the layout.
- Surfaced
isMainHarnessConnectoronFunctionalSchematicNodefor layout decisions. - Extended
src/tests/core.functional-schematic.spec.tswith regression coverage for the new representation.
PDF Export
- Added a PDF export option for 2D plan views in the network summary export menu.
- Added a grouped PDF export that packages multiple selected networks into one multi-page PDF.
- Rasterises the existing SVG/canvas output at higher density so embedded text remains legible.
- Added
src/tests/pdf-export.spec.tswith format and image density assertions.
Wire Color Form
- Replaced the separate color-mode selector in
ModelingWireFormPanelwith a single primary selector listing catalog colors and a Free option. - Preserved
colorModereducer behaviour and persistence normalization. - Updated
src/tests/app.ui.creation-flow-wire-ergonomics.spec.tsxandsrc/tests/app.ui.wire-free-color-mode.spec.tsxto exercise the simplified form.
Verification
npm run -s typechecknpm run -s lintnpm run -s quality:dependency-auditnpm run -s test:ci:segmentation:checknpm run -s quality:ui-modularizationnpm run -s quality:ui-timeout-governancenpm run -s quality:hooks-modularizationnpm run -s quality:store-modularizationnpm run -s quality:exceljs-boundarynpm run -s build:vitenpm run -s quality:pwapython3 -m logics_manager lint --require-statuspython3 -m logics_manager audit --legacy-cutoff-version 1.1.0 --group-by-doc --skip-ac-traceabilitynpm test -- --run src/tests/core.functional-schematic.spec.ts src/tests/pdf-export.spec.ts src/tests/app.ui.network-summary-workflow-polish.spec.tsx
v1.14.7
Changelog (1.14.6 -> 1.14.7)
Major Highlights
- Fixed stale Wires tag filtering when switching active networks.
- Hardened imported network entity state against duplicate or missing
allIdsentries. - Protected collection selectors from rendering duplicate entities when older saved data already contains a broken entity index.
Patch Notes
- The Wires tag filter now resets to
Anywhen the selected functional tag does not exist in the newly active network. - Network file import normalization now deduplicates
allIdsand drops ids that no longer have a matchingbyIdentity for connectors, splices, nodes, segments, and wires. - Collection selectors now skip duplicate and missing ids before exposing entity arrays to UI and graph renderers.
- Added regression coverage for stale wire-tag filters across network switching and duplicated imported node ids.
Version 1.14.7 - Network Switch and Import Integrity Fixes
Wire Filters
- Kept valid tag filters active across network switches when the target network still exposes the selected tag.
- Cleared invalid tag filters automatically so switching networks cannot leave the Wires table empty with no visible recovery option.
Import Integrity
- Normalized imported entity indexes before exposing imported network state to the app.
- Prevented duplicate node ids in imported
allIdsfrom producing duplicate canvas render models. - Preserved existing entity sorting while enforcing the one-id, one-entity invariant for imported network files.
Verification
npm run -s ci:blockingnpm test -- src/tests/app.ui.list-ergonomics.spec.tsxnpm test -- src/tests/portability.network-file.spec.tsnpm run -s typechecknpm run -s lintnpm test -- src/tests/app.ui.navigation-canvas.spec.tsx
v1.14.6
Changelog (1.14.5 -> 1.14.6)
Major Highlights
- Added oversized connector layout ways that render as 2x2 physical cavities.
- Improved connector physical layout rendering consistency across editor previews, physical views, and network summary callouts.
- Restored explicit wire color intent with a selectable
Freemode distinct from an emptyNot specifiedcolor. - Kept connector layout controls readable and within UI modularization budgets.
Patch Notes
- Connector layout normalization now preserves big ways only when the grid can fit their 2x2 footprint.
- Movement, duplicate detection, resize blocking, and selected-way updates now account for every occupied cell instead of only the anchor cell.
- Physical connector drawings now center oversized ways correctly and apply the same scale in catalog previews and network summary callouts.
- Connector way line style rendering and control contrast refinements are included in the release metadata.
- Wire creation/editing now exposes
Not specified,Free, andSelected colormodes instead of treating the empty primary-color option as the only no-color path. - Wire tables render
Not specifiedcolor values as empty cells, while deliberate free-color wires render asFree. - Keying-control CSS moved into a dedicated module to keep the connector layout stylesheet below the UI quality gate line budget.
Version 1.14.6 - Connector Layout Way Sizing
Connector Layouts
- Added a
Way sizeselector withNormalandBig (2 x 2)options for catalog connector layouts. - Disabled invalid big-way updates when the target 2x2 footprint would leave the grid or overlap another cavity.
- Updated way position limits so oversized ways stay anchored inside the available grid.
Rendering
- Aligned oversized-way centers for the layout editor, physical connector view, and network summary connector callouts.
- Scaled round, square, and slot way shapes consistently for big ways.
- Preserved dashed/solid way line styling while applying the new size model.
Wire Colors
- Added an explicit wire
Color modeselector withNot specified,Free, andSelected coloroptions. - Kept catalog primary/secondary selectors available only when
Selected coloris chosen. - Preserved free-color mode when editing existing wires instead of loading it as an unspecified color.
- Kept unspecified wire color labels blank in wire tables so missing color data does not look like an intentional instruction.
Verification
npm run ci:blockingnpx vitest run src/tests/app.ui.wire-free-color-mode.spec.tsx src/tests/app.ui.list-ergonomics-wire-colors.spec.tsx src/tests/app.ui.creation-flow-wire-ergonomics.spec.tsx --pool=forks --maxWorkers=2 --testTimeout=15000npm run -s typechecknpm run -s lint
v1.14.5 - Fitted Export Previews
Changelog (1.14.4 -> 1.14.5)
Major Highlights
- Fixed SVG/PNG network export previews so they open already fitted to export content.
- Removed the manual
Fit exportpreview action because fitting is now part of preview preparation. - Kept off-viewport cable callouts rendered for export fitting so dragged callouts remain inside the exported frame.
Patch Notes
- Export FIT now computes SVG content bounds, applies deterministic export padding, and sizes the output viewBox to the fitted frame.
- Root export layers are translated for the fitted frame without moving nested segment-label, node-label, connector-drawing, or callout internals a second time.
- SVG and PNG option changes preserve the fitted export mode across frame, identity, grid, and theme refreshes.
- Release metadata is updated for
1.14.5.
Version 1.14.5 - Fitted Export Previews
Network Export
- SVG and PNG preview loading now performs the same fitted export preparation users previously had to trigger manually.
- Export previews no longer mutate the live network canvas viewport when preparing a fitted frame.
- Hidden hitboxes and grid-only elements stay excluded from fitted content bounds, while visible callouts and labels are included.
Verification
npm run -s typechecknpx vitest run src/tests/app.ui.network-summary-svg-preview.spec.tsx src/tests/app.ui.settings-canvas-export.spec.tsx src/tests/app.ui.network-summary-workflow-polish.spec.tsx src/tests/app.ui.statistics.spec.tsx src/tests/network-statistics.spec.ts
v1.14.4 - Network Statistics Workspace
Changelog (1.14.3 -> 1.14.4)
Major Highlights
- Added a read-only
Statisticsworkspace tab betweenModelingandValidation. - Added active-network and manual multi-network statistics covering KPIs, length metrics, wire distributions, and utilization tables.
- Prepared release metadata and documentation for
1.14.4.
Patch Notes
- The new statistics calculator aggregates counts, physical wire lengths, route-lock coverage, connector/splice utilization, wire section/color distributions, and per-network comparison rows without mutating workspace data.
- Manual network selection shows readable network names only and avoids exposing internal network identifiers in the checkbox list.
- The first statistics release intentionally excludes charts, CSV export, pricing rollups, persistence fields, and AI Agent integration.
- README badge/current-version metadata, root
VERSION, package metadata, and package lock metadata are updated for1.14.4.
Version 1.14.4 - Network Statistics Workspace
Statistics Workspace
- Introduced a top-level
Statisticsscreen with active-network defaults and manual multi-network scope selection. - Rendered compact KPI tiles, longest-wire and length-metric tables, wire section/color distributions, connector utilization, and splice utilization.
- Kept unavailable wire lengths explicit so unrouted wires are not reported as zero-length physical wires.
Release Scope
- Kept the feature read-only with no schema migration, export surface, pricing rollup, chart dependency, or AI Agent context change.
- Added calculator and UI regression coverage, including tab placement, empty state, manual multi-network selection, and hidden out-of-scope panels.
Verification
npm run ci:blocking
v1.14.3
Changelog (1.14.2 -> 1.14.3)
Major Highlights
- Prevented mouse-wheel interactions from accidentally editing focused numeric fields across the app.
- Refined connector analysis pin-role editing with shorter bulk action wording and cleaner role workflow coverage.
- Prepared release metadata and documentation for
1.14.3.
Patch Notes
- Numeric inputs such as wire endpoint
Way index, splice ports, connector cavity counts, currents, and settings values now ignore wheel-driven value changes by removing focus before the browser applies native number stepping. - Connector pin role bulk actions now use shorter labels:
Apply roleandUse catalog default. - Workspace shell regression coverage now verifies that focused numeric inputs are protected from wheel edits.
- README badge/current-version metadata and package lock metadata are updated for
1.14.3.
Version 1.14.3 - Numeric Input Wheel Guard and Pin Role Polish
Form Interaction Safety
- Added an app-wide wheel guard for
input[type="number"]controls so users do not accidentally alter numeric values while scrolling panels. - The guard applies globally instead of requiring each form to opt in individually.
Connector Pin Roles
- Shortened connector pin-role bulk action labels while preserving existing save/reset behavior.
- Kept catalog pin role and connector inspector tests aligned with the updated wording.
Verification
npm run ci:blocking
v1.14.2
Changelog (1.14.1 -> 1.14.2)
Major Highlights
- Added a dedicated, opt-in
Pin electric rolescatalog panel before connector physical layout settings. - Reordered connector analysis so
Physicalappears beforeWays & roles. - Preserved connector cavity role management while restoring CI coverage and release readiness.
Patch Notes
- Catalog connector editing now keeps pin electric role controls in their own enabled panel instead of visually nesting them inside material defaults.
- Empty accessory messaging is vertically aligned with its status icon for cleaner catalog form scanning.
- Connector analysis prioritizes physical connector data before ways and roles, while retaining cavity card rendering and occupant labels.
- Release documentation, version metadata, and CI-facing changelog format are updated for
1.14.2.
Version 1.14.2 - Catalog Pin Roles Panel and Release Readiness
Catalog Editing
Pin electric rolesis now a dedicated catalog panel with its own checkbox, placed beforeConnector physical layout.- Additional accessory empty-state rows now center the icon and
No additional accessory.label on the same baseline. - Catalog accessory styles are split into a focused stylesheet to keep form CSS within modularization limits.
Connector Analysis
- The
Physicalsection now appears beforeWays & rolesin connector analyses. - Ways and roles cavity cards remain available, including restored occupant references such as
W-1 / A.
CI and Release Readiness
- Changelog structure stays compatible with the home feed by listing
Major Highlightsbefore version sections. - UI modularization, changelog feed coverage, and connector analysis regression paths were brought back into the blocking CI lane.
Verification
npm run ci:blocking
Release 1.14.1
Changelog (1.14.0 -> 1.14.1)
Patch Notes
- Fixed the harness assembly functional schematic so selected master connectors no longer leak unrelated connected branches through unselected main connectors.
- Added regression coverage for the assembly graph boundary case so the filtered trace stays aligned with the operator-selected roots.
Version 1.14.1 - Harness Assembly Functional Trace Scope Boundaries
Fixes
src/core/functionalSchematic.tsnow treats unselectedisMainHarnessConnectorboundaries as traversal stops for the assembly graph, preventing unrelated downstream corridors from appearing in the filtered trace.src/tests/core.functional-schematic.spec.tsadds a regression for the unselected-master leakage case.
Verification
npm run -s lintnpm run -s typechecknpx vitest run src/tests/core.functional-schematic.spec.ts
Release 1.14.0
Changelog (1.13.1 -> 1.14.0)
Major Highlights
- Introduced a first-class pin electrical role model at the connector cavity level: a pin can now be declared
source,consumer,passive, orbidirectional, with an optional maximum continuous current in Amps, a label, and free-form notes. Default role ispassive; every field is optional. - Shipped two pure aggregation engines on top of that model — an in-network engine and an assembly-scoped engine traversing
InterHarnessConnectorLinks and shared master connector references — feeding the validation center, BOM, schematic overlay, and the upcoming multi-network functional analysis view. - Added a new Electrical dimensioning validation category covering D1 wire section vs. carried current, D2 fuse rating vs. protected load, D3 device supply vs. output sum, and D4 branch source/consumer coherence — all bounded to the current network and emitted with explicit severity ladders.
- Surfaced the new data model in the connector inspector and the catalog item editor with a collapsible "Pin electrical roles" section: per-pin role / currentA / label edits, an override / catalog / default badge, bulk "Apply role to selected pins", and "Reset to catalog default".
- Persistence is fully additive: networks without
pinElectricalRolesload, render, validate, and export identically to 1.13.x.
Version 1.14.0 - Pin Electrical Roles, Aggregation Engines, and Electrical Dimensioning Diagnostics
Logics planning (req_133)
- Promoted request
req_133_pin_level_source_consumer_currents_and_harness_dimensioning_diagnosticswith companion product briefdocs/pin-level-source-consumer-currents-product-brief.md. - Added eight backlog items (
item_608throughitem_615) and eight tasks (task_116throughtask_123). - Added ADR
adr_010_inter_network_current_bridge_semanticscovering inter-network propagation rules and loop safety.
Data model (item_608, task_116)
- New
PinElectricalRoleKind(source/consumer/passive/bidirectional) andPinElectricalRoleinterface (role, optionalcurrentA,label,notes). Connector.pinElectricalRoles?: Record<number, PinElectricalRole>andCatalogItem.connectorDefaults.pinElectricalRoles?are additive, optional, and non-breaking.connector/upsertandcatalog/upsertnormalize the field through the sharednormalizePinElectricalRolesMaphelper: out-of-range cavity indexes and invalid payloads are dropped silently; empty maps collapse toundefined.
Resolution and ampacity (item_608, item_609, task_117)
src/core/pinElectricalRole.tsexposesPIN_ELECTRICAL_ROLE_KINDS,resolvePinElectricalRoleDescriptor, andresolvePinElectricalRolewith the override / catalog / default precedence.src/core/wireAmpacity.tsships the automotive copper ampacity table perSTANDARD_WIRE_SECTION_MM2_VALUES(0.5 mm² → 11 A, 0.75 → 15, 1 → 19, 1.5 → 24, 2.5 → 32, 4 → 42, 6 → 54, 10 → 73, 16 → 98, 25 → 129, 35 → 158, 50 → 198, 70 → 245, 95 → 292, 120 → 344), scaled by the existing material-resistivity ratio for aluminum, and exposes a project-level override API viaNetwork.ampacityOverrides.
Aggregation engines (item_610, item_614, task_118, task_122)
src/core/pinElectricalLoad.tsaggregates per(connectorId, cavityIndex)the resolvedPinElectricalRole, branch loads per wire (Kirchhoff-conserving across splices and fuse-box pairs), per-device source / consumer totals, and fuse-protected loads.src/core/pinElectricalLoadAssembly.tsruns the same aggregation inassemblyscope: traversesInterHarnessConnectorLinks and shared master connector references inside the activeHarnessAssembly, with cycle-safe traversal and a single warning on non-convergent loops.- Bidirectional pins contribute to both totals but are excluded from "no source on branch" detection.
Validation (item_611, task_119)
- New Electrical dimensioning category emitted by
src/app/hook-impl/validation/appendElectricalDimensioningIssues.ts, wired intobuildValidationIssuesfor the active network only:- D1 — wire section vs. carried current:
errorwhen ratio > 1.0,warningwhen > 0.9,infobetween 0.8 and 0.9. - D2 — fuse rating vs. protected load:
errorover rating,warningat 80–100 %,warningwhen rating missing while protected load is non-zero. - D3 — device supply vs. output sum:
warning, non-blocking; quotes the required vs. declared values. - D4 — branch source / consumer coherence:
infowhen no source on a fed branch,warningwhen two sources face each other.
- D1 — wire section vs. carried current:
- Validation, inspector and BOM consumers stay in
currentNetworkscope; linked pins from sibling networks never contribute to D1–D4.
Editing surfaces (item_612, task_120 — partial)
- Connector inspector form: new collapsible Pin electrical roles section under
PinElectricalRolesEditor.tsx, with per-pin role dropdown, optional max current input, label input, an override / catalog / default badge, and bulk "Apply role to selected pins" plus "Reset to catalog default". State is hoisted throughuseEntityFormsState,useConnectorHandlers, the modeling orchestrator and the screen-domain controllers; one save per bulk operation lands as a single history entry. - Catalog item editor: same table for
CatalogItem.connectorDefaults.pinElectricalRoles. Saving propagates the new defaults to every consuming connector through the existing merge logic. - Drafts, serialization, and validation helpers live in
src/app/hooks/connectorPinElectricalRoles.ts.
Tests
- Core:
core.pin-electrical-role,core.wire-ampacity,core.pin-electrical-load,core.pin-electrical-load-assembly(49 tests including the linear chain, splice fan-out, fuse-box pair, ECU asymmetric device, two-network link, three-network harness assembly, and loop fixtures). - Validation:
app.validation.electrical-dimensioning(9 tests covering D1–D4 emission and severity ladders, including the AC6–AC10 fixtures). - UI:
app.ui.inspector-pin-roles(single edit, override / catalog / default badge, bulk apply, reset to catalog default) andapp.ui.catalog-pin-roles(catalog defaults editing).
Deferred to next release
The remainder of req_133 is scoped to follow-up work and explicitly out of 1.14.0:
- Cross-connector mass-edit view with filters and CSV paste (
item_612AC5–AC7). - BOM "Computed downstream load (A)" column on fuse rows (
item_612AC9, off by default). - 2D-canvas regression assertion (
item_612AC10). - Functional schematic overlay, on by default (
item_613,task_121). - Multi-network functional analysis view (
item_614view,task_122view, plus L1 link-mismatch warning). - Release validation and permissiveness gate (
item_615,task_123).
Verification
npm run typechecknpm run lintnpx vitest run src/tests/core.pin-electrical-role.spec.ts src/tests/core.wire-ampacity.spec.ts src/tests/core.pin-electrical-load.spec.ts src/tests/core.pin-electrical-load-assembly.spec.ts src/tests/app.validation.electrical-dimensioning.spec.ts src/tests/app.ui.inspector-pin-roles.spec.tsx src/tests/app.ui.catalog-pin-roles.spec.tsx(7 files, 54 tests passed)