Skip to content

Releases: AlexAgo83/electrical-plan-editor

v1.15.0 - Security hardening, pure reducers, debounced persistence

07 Jun 18:24

Choose a tag to compare

Changelog (1.14.8 -> 1.15.0)

Major Highlights

  • Reducers in src/store/reducer/networkReducer.ts and src/store/reducer/harnessAssemblyReducer.ts are 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 full JSON.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, with http:// allowed only on localhost/127.0.0.1); the Settings panel surfaces an explicit security notice about local key storage.
  • Refreshed Vitest tooling on the ^4.1.8 line via the lockfile and removed the now-stale GHSA-5xrq-8626-4rwp allowlist entries.

Patch Notes

  • appActions.createNetwork, duplicateNetwork, deleteNetwork, importNetworks now embed nowIso in their payloads; the corresponding reducer branches consume it instead of calling new Date().
  • cleanupHarnessAssembliesForDeletedNetwork accepts an explicit nowIso parameter and is called from network/delete with the action's timestamp.
  • attachPersistenceSync exposes a new optional debounceMs (default 200 ms). Setting debounceMs: 0 preserves the synchronous-save behaviour for tests that assert save call counts.
  • src/tests/store.create-store.spec.ts opts into debounceMs: 0 for the persistence feedback assertion.
  • Added isAiEndpointSecure(endpoint) in src/app/lib/aiSettings.ts; resolveAiProviderReadiness returns the new "insecureEndpoint" status when the configured endpoint is not HTTPS (or localhost HTTP).
  • requestAiAgentProviderProposal throws before sending the key if the endpoint is insecure.
  • Added a .settings-panel-warning banner in the AI provider panel of SettingsWorkspaceContent.tsx describing where the API key lives and how it travels.
  • index.html declares a CSP meta with default-src 'self', scoped connect-src for OpenAI/Gemini plus generic https: (still required for the user-supplied logo fetch), and object-src 'none'.
  • render.yaml adds HSTS, X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin, X-Frame-Options: DENY, and a Permissions-Policy denying geolocation, microphone, camera, and interest-cohort.
  • Dropped the vitest/@vitest/coverage-v8 entries from scripts/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() from src/store/reducer/networkReducer.ts and src/store/reducer/harnessAssemblyReducer.ts.
  • Action payloads for network/create, network/duplicate, network/delete, and network/importMany now require nowIso: string; action creators in src/store/actions.ts default it via a single private helper.
  • Time-travel debugging and deterministic action replay no longer depend on freezing Date globally.

Debounced Persistence (1.4)

  • attachPersistenceSync in src/app/store.ts schedules a single trailing saveState call 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.html declares a Content-Security-Policy meta covering script-src, style-src, img-src, font-src, connect-src, worker-src, manifest-src, object-src, base-uri, and form-action.
  • render.yaml extends 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.ts exports isAiEndpointSecure and extends AiProviderReadinessStatus with "insecureEndpoint".
  • requestAiAgentProviderProposal throws if the configured endpoint is not HTTPS (or http://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.json is already aligned with vitest/@vitest/coverage-v8 ^4.1.8; this release installs the new lockfile and prunes the obsolete allowlist entries that targeted GHSA-5xrq-8626-4rwp.

Verification

  • npm run -s lint
  • npm run -s typecheck
  • npm run -s quality:dependency-audit
  • npm run -s test:ci:segmentation:check
  • npm run -s quality:ui-modularization
  • npm run -s quality:ui-timeout-governance
  • npm run -s quality:hooks-modularization
  • npm run -s quality:store-modularization
  • npm run -s quality:exceljs-boundary
  • npm run -s test:ci:fast
  • npm run -s test:ci:ui
  • npm run -s build:vite
  • npm run -s quality:pwa

v1.14.8

05 Jun 16:06

Choose a tag to compare

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 isMainHarnessConnector masters 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 fusePairNodeId marker so the fuse always has at least one in and one out edge.
  • Panel layout sort places isMainHarnessConnector roots 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 isMainHarnessConnector pins 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 isMainHarnessConnector on FunctionalSchematicNode for layout decisions.
  • Extended src/tests/core.functional-schematic.spec.ts with 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.ts with format and image density assertions.

Wire Color Form

  • Replaced the separate color-mode selector in ModelingWireFormPanel with a single primary selector listing catalog colors and a Free option.
  • Preserved colorMode reducer behaviour and persistence normalization.
  • Updated src/tests/app.ui.creation-flow-wire-ergonomics.spec.tsx and src/tests/app.ui.wire-free-color-mode.spec.tsx to exercise the simplified form.

Verification

  • npm run -s typecheck
  • npm run -s lint
  • npm run -s quality:dependency-audit
  • npm run -s test:ci:segmentation:check
  • npm run -s quality:ui-modularization
  • npm run -s quality:ui-timeout-governance
  • npm run -s quality:hooks-modularization
  • npm run -s quality:store-modularization
  • npm run -s quality:exceljs-boundary
  • npm run -s build:vite
  • npm run -s quality:pwa
  • python3 -m logics_manager lint --require-status
  • python3 -m logics_manager audit --legacy-cutoff-version 1.1.0 --group-by-doc --skip-ac-traceability
  • npm 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

04 Jun 22:40

Choose a tag to compare

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 allIds entries.
  • 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 Any when the selected functional tag does not exist in the newly active network.
  • Network file import normalization now deduplicates allIds and drops ids that no longer have a matching byId entity 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 allIds from 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:blocking
  • npm test -- src/tests/app.ui.list-ergonomics.spec.tsx
  • npm test -- src/tests/portability.network-file.spec.ts
  • npm run -s typecheck
  • npm run -s lint
  • npm test -- src/tests/app.ui.navigation-canvas.spec.tsx

v1.14.6

04 Jun 14:33

Choose a tag to compare

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 Free mode distinct from an empty Not specified color.
  • 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, and Selected color modes instead of treating the empty primary-color option as the only no-color path.
  • Wire tables render Not specified color values as empty cells, while deliberate free-color wires render as Free.
  • 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 size selector with Normal and Big (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 mode selector with Not specified, Free, and Selected color options.
  • Kept catalog primary/secondary selectors available only when Selected color is 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:blocking
  • npx 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=15000
  • npm run -s typecheck
  • npm run -s lint

v1.14.5 - Fitted Export Previews

04 Jun 06:58

Choose a tag to compare

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 export preview 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 typecheck
  • npx 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

03 Jun 20:25

Choose a tag to compare

Changelog (1.14.3 -> 1.14.4)

Major Highlights

  • Added a read-only Statistics workspace tab between Modeling and Validation.
  • 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 for 1.14.4.

Version 1.14.4 - Network Statistics Workspace

Statistics Workspace

  • Introduced a top-level Statistics screen 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

03 Jun 14:39

Choose a tag to compare

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 role and Use 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

03 Jun 11:28

Choose a tag to compare

Changelog (1.14.1 -> 1.14.2)

Major Highlights

  • Added a dedicated, opt-in Pin electric roles catalog panel before connector physical layout settings.
  • Reordered connector analysis so Physical appears before Ways & 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 roles is now a dedicated catalog panel with its own checkbox, placed before Connector 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 Physical section now appears before Ways & roles in 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 Highlights before 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

03 Jun 09:02

Choose a tag to compare

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.ts now treats unselected isMainHarnessConnector boundaries as traversal stops for the assembly graph, preventing unrelated downstream corridors from appearing in the filtered trace.
  • src/tests/core.functional-schematic.spec.ts adds a regression for the unselected-master leakage case.

Verification

  • npm run -s lint
  • npm run -s typecheck
  • npx vitest run src/tests/core.functional-schematic.spec.ts

Release 1.14.0

03 Jun 08:02

Choose a tag to compare

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, or bidirectional, with an optional maximum continuous current in Amps, a label, and free-form notes. Default role is passive; 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 pinElectricalRoles load, 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_diagnostics with companion product brief docs/pin-level-source-consumer-currents-product-brief.md.
  • Added eight backlog items (item_608 through item_615) and eight tasks (task_116 through task_123).
  • Added ADR adr_010_inter_network_current_bridge_semantics covering inter-network propagation rules and loop safety.

Data model (item_608, task_116)

  • New PinElectricalRoleKind (source / consumer / passive / bidirectional) and PinElectricalRole interface (role, optional currentA, label, notes).
  • Connector.pinElectricalRoles?: Record<number, PinElectricalRole> and CatalogItem.connectorDefaults.pinElectricalRoles? are additive, optional, and non-breaking.
  • connector/upsert and catalog/upsert normalize the field through the shared normalizePinElectricalRolesMap helper: out-of-range cavity indexes and invalid payloads are dropped silently; empty maps collapse to undefined.

Resolution and ampacity (item_608, item_609, task_117)

  • src/core/pinElectricalRole.ts exposes PIN_ELECTRICAL_ROLE_KINDS, resolvePinElectricalRoleDescriptor, and resolvePinElectricalRole with the override / catalog / default precedence.
  • src/core/wireAmpacity.ts ships the automotive copper ampacity table per STANDARD_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 via Network.ampacityOverrides.

Aggregation engines (item_610, item_614, task_118, task_122)

  • src/core/pinElectricalLoad.ts aggregates per (connectorId, cavityIndex) the resolved PinElectricalRole, branch loads per wire (Kirchhoff-conserving across splices and fuse-box pairs), per-device source / consumer totals, and fuse-protected loads.
  • src/core/pinElectricalLoadAssembly.ts runs the same aggregation in assembly scope: traverses InterHarnessConnectorLinks and shared master connector references inside the active HarnessAssembly, 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 into buildValidationIssues for the active network only:
    • D1 — wire section vs. carried current: error when ratio > 1.0, warning when > 0.9, info between 0.8 and 0.9.
    • D2 — fuse rating vs. protected load: error over rating, warning at 80–100 %, warning when 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: info when no source on a fed branch, warning when two sources face each other.
  • Validation, inspector and BOM consumers stay in currentNetwork scope; 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 through useEntityFormsState, 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) and app.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_612 AC5–AC7).
  • BOM "Computed downstream load (A)" column on fuse rows (item_612 AC9, off by default).
  • 2D-canvas regression assertion (item_612 AC10).
  • Functional schematic overlay, on by default (item_613, task_121).
  • Multi-network functional analysis view (item_614 view, task_122 view, plus L1 link-mismatch warning).
  • Release validation and permissiveness gate (item_615, task_123).

Verification

  • npm run typecheck
  • npm run lint
  • npx 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)