easyeda-mcp-pro 0.7.0 → 0.9.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"local-setup.js","sourceRoot":"","sources":["../../src/cli/local-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-setup.js","sourceRoot":"","sources":["../../src/cli/local-setup.ts"],"names":[],"mappings":"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"}
@@ -3,35 +3,35 @@ export const PROFILE_DEFINITIONS = {
3
3
  name: 'core',
4
4
  label: 'Core',
5
5
  description: 'High-confidence tools: diagnostics, EasyEDA API inventory, schematic, BOM, DRC/ERC, board layers/stackup, Gerber export',
6
- approxToolCount: '38',
6
+ approxToolCount: '39',
7
7
  isDefault: true,
8
8
  },
9
9
  pro: {
10
10
  name: 'pro',
11
11
  label: 'Pro',
12
12
  description: 'Adds pick-and-place, PDF, netlist export for manufacturing workflows',
13
- approxToolCount: '41',
13
+ approxToolCount: '42',
14
14
  isDefault: false,
15
15
  },
16
16
  full: {
17
17
  name: 'full',
18
18
  label: 'Full',
19
19
  description: 'Adds controlled documented EasyEDA API method calls for full runtime control without raw JavaScript execution',
20
- approxToolCount: '48',
20
+ approxToolCount: '49',
21
21
  isDefault: false,
22
22
  },
23
23
  dev: {
24
24
  name: 'dev',
25
25
  label: 'Dev',
26
26
  description: 'Adds diagnostics probes for bridge methods and live component runtime shape inspection',
27
- approxToolCount: '52',
27
+ approxToolCount: '53',
28
28
  isDefault: false,
29
29
  },
30
30
  experimental: {
31
31
  name: 'experimental',
32
32
  label: 'Experimental',
33
33
  description: 'MCP Apps, Tasks, simulation, autorouter, AI action plans',
34
- approxToolCount: '50',
34
+ approxToolCount: '51',
35
35
  isDefault: false,
36
36
  },
37
37
  };
@@ -1 +1 @@
1
- export declare const SERVER_VERSION = "0.7.0";
1
+ export declare const SERVER_VERSION = "0.9.0";
@@ -1,2 +1,2 @@
1
- export const SERVER_VERSION = '0.7.0'; // x-release-please-version
1
+ export const SERVER_VERSION = '0.9.0'; // x-release-please-version
2
2
  //# sourceMappingURL=version.js.map
@@ -28,6 +28,20 @@ export declare const NetValidationCode: {
28
28
  readonly NetNamingConvention: "NET_NAMING_CONVENTION";
29
29
  /** Net associated with AC/high-voltage lacks protective naming. */
30
30
  readonly NetProtectedDomain: "NET_PROTECTED_DOMAIN";
31
+ /** Multiple actively-driven outputs or power sources are tied together. */
32
+ readonly NetOutputContention: "NET_OUTPUT_CONTENTION";
33
+ /** A signal net has inputs but no driver, pull, or passive source. */
34
+ readonly NetFloatingInput: "NET_FLOATING_INPUT";
35
+ /** A power rail has conflicting power sources/regulators. */
36
+ readonly NetPowerConflict: "NET_POWER_CONFLICT";
37
+ /** A signal net only connects passive pins and cannot be driven. */
38
+ readonly NetPassiveOnly: "NET_PASSIVE_ONLY";
39
+ /** A required power/ground pin is missing or connected to the wrong class of net. */
40
+ readonly NetUnpoweredDevice: "NET_UNPOWERED_DEVICE";
41
+ /** A device marked as requiring decoupling has no local capacitor across rail and ground. */
42
+ readonly NetMissingDecoupling: "NET_MISSING_DECOUPLING";
43
+ /** A pin expected voltage is incompatible with the connected net voltage. */
44
+ readonly NetVoltageMismatch: "NET_VOLTAGE_MISMATCH";
31
45
  /** Validation could not be completed due to an internal error. */
32
46
  readonly NetValidationInternal: "NET_VALIDATION_INTERNAL";
33
47
  };
@@ -33,6 +33,21 @@ export const NetValidationCode = {
33
33
  NetNamingConvention: 'NET_NAMING_CONVENTION',
34
34
  /** Net associated with AC/high-voltage lacks protective naming. */
35
35
  NetProtectedDomain: 'NET_PROTECTED_DOMAIN',
36
+ // ── Semantic ERC ─────────────────────────────────────────────────────
37
+ /** Multiple actively-driven outputs or power sources are tied together. */
38
+ NetOutputContention: 'NET_OUTPUT_CONTENTION',
39
+ /** A signal net has inputs but no driver, pull, or passive source. */
40
+ NetFloatingInput: 'NET_FLOATING_INPUT',
41
+ /** A power rail has conflicting power sources/regulators. */
42
+ NetPowerConflict: 'NET_POWER_CONFLICT',
43
+ /** A signal net only connects passive pins and cannot be driven. */
44
+ NetPassiveOnly: 'NET_PASSIVE_ONLY',
45
+ /** A required power/ground pin is missing or connected to the wrong class of net. */
46
+ NetUnpoweredDevice: 'NET_UNPOWERED_DEVICE',
47
+ /** A device marked as requiring decoupling has no local capacitor across rail and ground. */
48
+ NetMissingDecoupling: 'NET_MISSING_DECOUPLING',
49
+ /** A pin expected voltage is incompatible with the connected net voltage. */
50
+ NetVoltageMismatch: 'NET_VOLTAGE_MISMATCH',
36
51
  // ── General ──────────────────────────────────────────────────────────
37
52
  /** Validation could not be completed due to an internal error. */
38
53
  NetValidationInternal: 'NET_VALIDATION_INTERNAL',
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/net-validation/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,6EAA6E;AAE7E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,wEAAwE;IAExE,gDAAgD;IAChD,WAAW,EAAE,cAAc;IAC3B,4CAA4C;IAC5C,gBAAgB,EAAE,oBAAoB;IACtC,yDAAyD;IACzD,kBAAkB,EAAE,sBAAsB;IAE1C,wEAAwE;IAExE,qCAAqC;IACrC,eAAe,EAAE,mBAAmB;IACpC,sCAAsC;IACtC,gBAAgB,EAAE,oBAAoB;IACtC,2DAA2D;IAC3D,0BAA0B,EAAE,+BAA+B;IAC3D,mDAAmD;IACnD,yBAAyB,EAAE,8BAA8B;IAEzD,wEAAwE;IAExE,wDAAwD;IACxD,yBAAyB,EAAE,8BAA8B;IAEzD,wEAAwE;IAExE,gEAAgE;IAChE,mBAAmB,EAAE,uBAAuB;IAC5C,mEAAmE;IACnE,kBAAkB,EAAE,sBAAsB;IAE1C,wEAAwE;IAExE,kEAAkE;IAClE,qBAAqB,EAAE,yBAAyB;CACxC,CAAC;AA+CX,6EAA6E;AAE7E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAuB,EACvB,OAAe,EACf,IAQC;IAED,OAAO;QACL,IAAI;QACJ,OAAO;QACP,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,OAAO;QACnC,IAAI,EAAE,IAAI,EAAE,IAAI;QAChB,OAAO,EAAE,IAAI,EAAE,OAAO;QACtB,YAAY,EAAE,IAAI,EAAE,YAAY;QAChC,GAAG,EAAE,IAAI,EAAE,GAAG;QACd,eAAe,EAAE,IAAI,EAAE,eAAe,IAAI,EAAE;QAC5C,OAAO,EAAE,IAAI,EAAE,OAAO;KACvB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CACtB,IAAuB,EACvB,OAAe,EACf,IAAiE;IAEjE,OAAO,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAAuB,EACvB,OAAe,EACf,IAAiE;IAEjE,OAAO,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/net-validation/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,6EAA6E;AAE7E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,wEAAwE;IAExE,gDAAgD;IAChD,WAAW,EAAE,cAAc;IAC3B,4CAA4C;IAC5C,gBAAgB,EAAE,oBAAoB;IACtC,yDAAyD;IACzD,kBAAkB,EAAE,sBAAsB;IAE1C,wEAAwE;IAExE,qCAAqC;IACrC,eAAe,EAAE,mBAAmB;IACpC,sCAAsC;IACtC,gBAAgB,EAAE,oBAAoB;IACtC,2DAA2D;IAC3D,0BAA0B,EAAE,+BAA+B;IAC3D,mDAAmD;IACnD,yBAAyB,EAAE,8BAA8B;IAEzD,wEAAwE;IAExE,wDAAwD;IACxD,yBAAyB,EAAE,8BAA8B;IAEzD,wEAAwE;IAExE,gEAAgE;IAChE,mBAAmB,EAAE,uBAAuB;IAC5C,mEAAmE;IACnE,kBAAkB,EAAE,sBAAsB;IAE1C,wEAAwE;IAExE,2EAA2E;IAC3E,mBAAmB,EAAE,uBAAuB;IAC5C,sEAAsE;IACtE,gBAAgB,EAAE,oBAAoB;IACtC,6DAA6D;IAC7D,gBAAgB,EAAE,oBAAoB;IACtC,oEAAoE;IACpE,cAAc,EAAE,kBAAkB;IAClC,qFAAqF;IACrF,kBAAkB,EAAE,sBAAsB;IAC1C,6FAA6F;IAC7F,oBAAoB,EAAE,wBAAwB;IAC9C,6EAA6E;IAC7E,kBAAkB,EAAE,sBAAsB;IAE1C,wEAAwE;IAExE,kEAAkE;IAClE,qBAAqB,EAAE,yBAAyB;CACxC,CAAC;AA+CX,6EAA6E;AAE7E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAuB,EACvB,OAAe,EACf,IAQC;IAED,OAAO;QACL,IAAI;QACJ,OAAO;QACP,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,OAAO;QACnC,IAAI,EAAE,IAAI,EAAE,IAAI;QAChB,OAAO,EAAE,IAAI,EAAE,OAAO;QACtB,YAAY,EAAE,IAAI,EAAE,YAAY;QAChC,GAAG,EAAE,IAAI,EAAE,GAAG;QACd,eAAe,EAAE,IAAI,EAAE,eAAe,IAAI,EAAE;QAC5C,OAAO,EAAE,IAAI,EAAE,OAAO;KACvB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CACtB,IAAuB,EACvB,OAAe,EACf,IAAiE;IAEjE,OAAO,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAAuB,EACvB,OAAe,EACf,IAAiE;IAEjE,OAAO,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AAC7E,CAAC"}
@@ -6,5 +6,5 @@
6
6
  export { NetValidationCode, netValidationIssue, netError, netWarning } from './errors.js';
7
7
  export type { NetValidationCode as NetValidationCodeType, NetValidationIssue, NetValidationResult, } from './errors.js';
8
8
  export { NetDomain, NET_DOMAIN_PATTERNS, NET_TYPE_EXPECTED_DOMAIN, RESERVED_NET_NAMES, REQUIRED_POWER_NETS, REQUIRED_GROUND_NETS, } from './schema.js';
9
- export type { NetValidationEntry, DeviceValidationEntry, InterfaceValidationEntry, NetValidationInput, } from './schema.js';
9
+ export type { NetValidationEntry, NetValidationNode, DeviceValidationEntry, InterfaceValidationEntry, NetValidationInput, PinElectricalType, PinValidationMetadata, } from './schema.js';
10
10
  export { validateNets, validateNetsOrThrow } from './validation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/net-validation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO1F,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAQrB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/net-validation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO1F,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAWrB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -66,6 +66,35 @@ export declare const NET_TYPE_EXPECTED_DOMAIN: Record<string, NetDomain[]>;
66
66
  * so that validation can operate on net data from any source
67
67
  * (CircuitIR, EasyEDA bridge, hand-authored test data).
68
68
  */
69
+ export type PinElectricalType = 'input' | 'output' | 'bidirectional' | 'passive' | 'power_input' | 'power_output' | 'power_source' | 'open_drain' | 'tri_state' | 'no_connect';
70
+ /** How a pin should be interpreted by semantic ERC. */
71
+ export interface PinValidationMetadata {
72
+ /** Pin number or name as it appears in net nodes. */
73
+ pin: string;
74
+ /** Human-readable pin name, e.g. VDD, GND, EN, OUT. */
75
+ name?: string;
76
+ /** Electrical type used for compatibility checks. */
77
+ electricalType: PinElectricalType;
78
+ /** Whether this pin must be connected for the device to be valid. */
79
+ required?: boolean;
80
+ /** Expected net classification for required power/ground/signal pins. */
81
+ expectedNetType?: 'power' | 'signal' | 'ground';
82
+ /** Expected nominal voltage for voltage-domain checks. */
83
+ expectedVoltage?: number;
84
+ /** Whether this pin intentionally allows no-connect. */
85
+ noConnectAllowed?: boolean;
86
+ }
87
+ /** A connected device pin, optionally carrying semantic pin metadata. */
88
+ export interface NetValidationNode {
89
+ deviceRef: string;
90
+ pin: string;
91
+ /** Optional per-node electrical type; device pin metadata takes precedence when both exist. */
92
+ electricalType?: PinElectricalType;
93
+ /** Optional human-readable pin name. */
94
+ pinName?: string;
95
+ /** Optional expected nominal voltage for this pin. */
96
+ expectedVoltage?: number;
97
+ }
69
98
  export interface NetValidationEntry {
70
99
  /** Unique net identifier. */
71
100
  id: string;
@@ -73,11 +102,10 @@ export interface NetValidationEntry {
73
102
  name: string;
74
103
  /** Net type classification. */
75
104
  type: 'power' | 'signal' | 'ground';
105
+ /** Optional nominal voltage for voltage-domain checks. */
106
+ voltage?: number;
76
107
  /** Connected device pins, may be empty for floating nets. */
77
- nodes: Array<{
78
- deviceRef: string;
79
- pin: string;
80
- }>;
108
+ nodes: NetValidationNode[];
81
109
  }
82
110
  /**
83
111
  * A minimal device representation for validation.
@@ -89,6 +117,10 @@ export interface DeviceValidationEntry {
89
117
  ref: string;
90
118
  /** Functional category for determining required pins. */
91
119
  category?: string;
120
+ /** Semantic pin metadata used by ERC rules. */
121
+ pins?: PinValidationMetadata[];
122
+ /** Require at least one local capacitor between each power input rail and ground. */
123
+ requiresDecoupling?: boolean;
92
124
  }
93
125
  /**
94
126
  * A hierarchical port / interface for cross-sheet validation.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Net validation — wire-name and topology validation rules.
3
3
  *
4
- * Implements 10 validation rules that operate on {@link NetValidationInput}
4
+ * Implements 17 validation rules that operate on {@link NetValidationInput}
5
5
  * and produce structured {@link NetValidationIssue}s.
6
6
  *
7
7
  * Rules:
@@ -34,6 +34,13 @@ import type { NetValidationInput } from './schema.js';
34
34
  * 8. Cross-sheet consistency — error if same-name interfaces have different pinouts
35
35
  * 9. Naming convention — warning if power/ground nets have non-standard names
36
36
  * 10. Protected domain — error if high-voltage net lacks protective naming
37
+ * 11. Output contention — error if multiple active outputs drive one signal
38
+ * 12. Floating input — warning if input net has no driver or pull
39
+ * 13. Power conflict — error if multiple sources drive one rail
40
+ * 14. Passive-only signal — warning if a signal net has only passive nodes
41
+ * 15. Required power pins — error if required pins are missing/miswired
42
+ * 16. Decoupling expectation — warning if required local decoupling is absent
43
+ * 17. Voltage mismatch — error if expected pin voltage conflicts with net voltage
37
44
  */
38
45
  export declare function validateNets(input: NetValidationInput): NetValidationResult;
39
46
  /**
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Net validation — wire-name and topology validation rules.
3
3
  *
4
- * Implements 10 validation rules that operate on {@link NetValidationInput}
4
+ * Implements 17 validation rules that operate on {@link NetValidationInput}
5
5
  * and produce structured {@link NetValidationIssue}s.
6
6
  *
7
7
  * Rules:
@@ -20,6 +20,132 @@
20
20
  */
21
21
  import { NetValidationCode, netError, netWarning } from './errors.js';
22
22
  import { NET_DOMAIN_PATTERNS, NET_TYPE_EXPECTED_DOMAIN, REQUIRED_GROUND_NETS, REQUIRED_POWER_NETS, RESERVED_NET_NAMES, NetDomain, } from './schema.js';
23
+ function normalizeKey(value) {
24
+ return value.trim().toUpperCase();
25
+ }
26
+ function buildDeviceLookup(input) {
27
+ const devices = new Map();
28
+ for (const device of input.devices ?? []) {
29
+ devices.set(normalizeKey(device.id), device);
30
+ devices.set(normalizeKey(device.ref), device);
31
+ }
32
+ return devices;
33
+ }
34
+ function resolvePinMetadata(device, node) {
35
+ if (!device?.pins)
36
+ return undefined;
37
+ const pinKey = normalizeKey(node.pin);
38
+ return device.pins.find((pin) => normalizeKey(pin.pin) === pinKey || normalizeKey(pin.name ?? '') === pinKey);
39
+ }
40
+ function resolveSemanticNodes(input, net) {
41
+ const devices = buildDeviceLookup(input);
42
+ return net.nodes.map((node) => {
43
+ const device = devices.get(normalizeKey(node.deviceRef));
44
+ const pinMetadata = resolvePinMetadata(device, node);
45
+ return {
46
+ ...node,
47
+ device,
48
+ pinMetadata,
49
+ electricalType: pinMetadata?.electricalType ?? node.electricalType,
50
+ expectedVoltage: pinMetadata?.expectedVoltage ?? node.expectedVoltage,
51
+ pinName: pinMetadata?.name ?? node.pinName,
52
+ displayRef: device?.ref ?? node.deviceRef,
53
+ };
54
+ });
55
+ }
56
+ function hasSemanticMetadata(input) {
57
+ return (input.nets.some((net) => net.voltage !== undefined ||
58
+ net.nodes.some((node) => node.electricalType !== undefined || node.expectedVoltage !== undefined)) ||
59
+ (input.devices ?? []).some((device) => Boolean(device.pins?.length || device.requiresDecoupling)));
60
+ }
61
+ function isActiveDriver(type) {
62
+ return (type === 'output' ||
63
+ type === 'bidirectional' ||
64
+ type === 'power_output' ||
65
+ type === 'power_source');
66
+ }
67
+ function isPowerSource(type) {
68
+ return type === 'power_source' || type === 'power_output';
69
+ }
70
+ function isPassiveLike(type) {
71
+ return type === 'passive';
72
+ }
73
+ function isNoConnect(type) {
74
+ return type === 'no_connect';
75
+ }
76
+ function inferVoltageFromNetName(name) {
77
+ const upper = name.toUpperCase();
78
+ const match = upper.match(/(^|[^0-9])([0-9]+)V([0-9]*)/);
79
+ if (match) {
80
+ const whole = Number(match[2]);
81
+ const fractional = match[3] ? Number(`0.${match[3]}`) : 0;
82
+ return whole + fractional;
83
+ }
84
+ if (/^VCC$|^VDD$/.test(upper))
85
+ return undefined;
86
+ if (/^GND$|GND\b|^VSS$/.test(upper))
87
+ return 0;
88
+ return undefined;
89
+ }
90
+ function netVoltage(net) {
91
+ return net.voltage ?? inferVoltageFromNetName(net.name);
92
+ }
93
+ function deviceHasOtherPinOnNetType(input, deviceRef, excludedPin, expectedType) {
94
+ const wantedRef = normalizeKey(deviceRef);
95
+ const excluded = normalizeKey(excludedPin);
96
+ return input.nets.some((net) => net.type === expectedType &&
97
+ net.nodes.some((node) => normalizeKey(node.deviceRef) === wantedRef && normalizeKey(node.pin) !== excluded));
98
+ }
99
+ function passivePullExists(input, net) {
100
+ const semanticNodes = resolveSemanticNodes(input, net);
101
+ return semanticNodes.some((node) => {
102
+ if (!isPassiveLike(node.electricalType))
103
+ return false;
104
+ return (deviceHasOtherPinOnNetType(input, node.deviceRef, node.pin, 'power') ||
105
+ deviceHasOtherPinOnNetType(input, node.deviceRef, node.pin, 'ground'));
106
+ });
107
+ }
108
+ function connectedNetsByDevicePin(input) {
109
+ const map = new Map();
110
+ for (const net of input.nets) {
111
+ for (const node of net.nodes) {
112
+ const key = `${normalizeKey(node.deviceRef)}:${normalizeKey(node.pin)}`;
113
+ const existing = map.get(key) ?? [];
114
+ existing.push(net);
115
+ map.set(key, existing);
116
+ }
117
+ }
118
+ return map;
119
+ }
120
+ function connectedNetsForPin(pinToNets, device, pin) {
121
+ const matches = [
122
+ ...(pinToNets.get(`${normalizeKey(device.id)}:${normalizeKey(pin)}`) ?? []),
123
+ ...(pinToNets.get(`${normalizeKey(device.ref)}:${normalizeKey(pin)}`) ?? []),
124
+ ];
125
+ return [...new Map(matches.map((net) => [net.id, net])).values()];
126
+ }
127
+ function capacitorRefs(input) {
128
+ const refs = new Set();
129
+ for (const device of input.devices ?? []) {
130
+ const category = (device.category ?? '').toLowerCase();
131
+ if (category === 'capacitor' ||
132
+ category === 'decoupling' ||
133
+ /^C[0-9A-Z_-]*/i.test(device.ref)) {
134
+ refs.add(normalizeKey(device.id));
135
+ refs.add(normalizeKey(device.ref));
136
+ }
137
+ }
138
+ return refs;
139
+ }
140
+ function hasDecouplingCapacitor(input, powerNet, groundNets) {
141
+ const capacitors = capacitorRefs(input);
142
+ if (capacitors.size === 0)
143
+ return false;
144
+ const powerRefs = new Set(powerNet.nodes.map((node) => normalizeKey(node.deviceRef)).filter((ref) => capacitors.has(ref)));
145
+ if (powerRefs.size === 0)
146
+ return false;
147
+ return groundNets.some((groundNet) => groundNet.nodes.some((node) => powerRefs.has(normalizeKey(node.deviceRef))));
148
+ }
23
149
  // ── Rule: floating nets ────────────────────────────────────────────────────
24
150
  function checkFloatingNets(input) {
25
151
  const issues = [];
@@ -303,6 +429,224 @@ function checkProtectedDomain(input) {
303
429
  }
304
430
  return issues;
305
431
  }
432
+ // ── Semantic ERC: output contention ────────────────────────────────────────
433
+ function checkOutputContention(input) {
434
+ if (!hasSemanticMetadata(input))
435
+ return [];
436
+ const issues = [];
437
+ for (const net of input.nets) {
438
+ const semanticNodes = resolveSemanticNodes(input, net).filter((node) => !isNoConnect(node.electricalType));
439
+ const activeDrivers = semanticNodes.filter((node) => isActiveDriver(node.electricalType));
440
+ if (net.type === 'signal' && activeDrivers.length > 1) {
441
+ issues.push(netError(NetValidationCode.NetOutputContention, `Signal net "${net.name}" has ${activeDrivers.length} active drivers: ${activeDrivers.map((node) => `${node.displayRef}:${node.pinName ?? node.pin}`).join(', ')}`, {
442
+ netName: net.name,
443
+ componentRef: activeDrivers[0]?.displayRef,
444
+ pin: activeDrivers[0]?.pin,
445
+ remediationHint: 'Do not tie push-pull outputs together. Add arbitration, tri-state control, open-drain wiring with pull-up, or separate the nets.',
446
+ details: {
447
+ drivers: activeDrivers.map((node) => ({
448
+ componentRef: node.displayRef,
449
+ pin: node.pin,
450
+ pinName: node.pinName,
451
+ electricalType: node.electricalType,
452
+ })),
453
+ },
454
+ }));
455
+ }
456
+ }
457
+ return issues;
458
+ }
459
+ // ── Semantic ERC: floating inputs ──────────────────────────────────────────
460
+ function checkFloatingInputs(input) {
461
+ if (!hasSemanticMetadata(input))
462
+ return [];
463
+ const issues = [];
464
+ for (const net of input.nets) {
465
+ if (net.type !== 'signal' || net.nodes.length === 0)
466
+ continue;
467
+ const semanticNodes = resolveSemanticNodes(input, net).filter((node) => !isNoConnect(node.electricalType));
468
+ const inputNodes = semanticNodes.filter((node) => node.electricalType === 'input');
469
+ if (inputNodes.length === 0)
470
+ continue;
471
+ const hasDriver = semanticNodes.some((node) => isActiveDriver(node.electricalType));
472
+ const hasPull = passivePullExists(input, net);
473
+ const hasOpenDrainBus = semanticNodes.some((node) => node.electricalType === 'open_drain') && hasPull;
474
+ if (!hasDriver && !hasPull && !hasOpenDrainBus) {
475
+ issues.push(netWarning(NetValidationCode.NetFloatingInput, `Signal net "${net.name}" connects input pins but has no active driver or pull resistor`, {
476
+ netName: net.name,
477
+ componentRef: inputNodes[0]?.displayRef,
478
+ pin: inputNodes[0]?.pin,
479
+ remediationHint: 'Connect this input to a valid driver, add a pull-up/pull-down resistor, or explicitly mark it as no-connect if allowed.',
480
+ details: {
481
+ inputs: inputNodes.map((node) => ({
482
+ componentRef: node.displayRef,
483
+ pin: node.pin,
484
+ pinName: node.pinName,
485
+ })),
486
+ },
487
+ }));
488
+ }
489
+ }
490
+ return issues;
491
+ }
492
+ // ── Semantic ERC: power rail conflicts ─────────────────────────────────────
493
+ function checkPowerConflicts(input) {
494
+ if (!hasSemanticMetadata(input))
495
+ return [];
496
+ const issues = [];
497
+ for (const net of input.nets) {
498
+ if (net.type !== 'power')
499
+ continue;
500
+ const powerSources = resolveSemanticNodes(input, net).filter((node) => isPowerSource(node.electricalType));
501
+ if (powerSources.length > 1) {
502
+ issues.push(netError(NetValidationCode.NetPowerConflict, `Power net "${net.name}" has ${powerSources.length} power sources tied together: ${powerSources.map((node) => `${node.displayRef}:${node.pinName ?? node.pin}`).join(', ')}`, {
503
+ netName: net.name,
504
+ componentRef: powerSources[0]?.displayRef,
505
+ pin: powerSources[0]?.pin,
506
+ remediationHint: 'Verify that only one regulator/source drives this rail, or add ideal-diode/load-share circuitry before tying sources together.',
507
+ details: {
508
+ powerSources: powerSources.map((node) => ({
509
+ componentRef: node.displayRef,
510
+ pin: node.pin,
511
+ pinName: node.pinName,
512
+ electricalType: node.electricalType,
513
+ })),
514
+ },
515
+ }));
516
+ }
517
+ }
518
+ return issues;
519
+ }
520
+ // ── Semantic ERC: passive-only signal nets ─────────────────────────────────
521
+ function checkPassiveOnlySignalNets(input) {
522
+ if (!hasSemanticMetadata(input))
523
+ return [];
524
+ const issues = [];
525
+ for (const net of input.nets) {
526
+ if (net.type !== 'signal' || net.nodes.length < 2)
527
+ continue;
528
+ const semanticNodes = resolveSemanticNodes(input, net).filter((node) => node.electricalType !== undefined);
529
+ if (semanticNodes.length === 0)
530
+ continue;
531
+ if (semanticNodes.every((node) => isPassiveLike(node.electricalType))) {
532
+ issues.push(netWarning(NetValidationCode.NetPassiveOnly, `Signal net "${net.name}" only connects passive pins and has no active source or input`, {
533
+ netName: net.name,
534
+ remediationHint: 'Confirm this is an intentional passive network node; otherwise connect it to an input/output pin or power/ground as appropriate.',
535
+ details: {
536
+ passiveNodes: semanticNodes.map((node) => ({
537
+ componentRef: node.displayRef,
538
+ pin: node.pin,
539
+ })),
540
+ },
541
+ }));
542
+ }
543
+ }
544
+ return issues;
545
+ }
546
+ // ── Semantic ERC: required device power/ground pins ────────────────────────
547
+ function checkRequiredPowerPins(input) {
548
+ if (!hasSemanticMetadata(input))
549
+ return [];
550
+ const issues = [];
551
+ const pinToNets = connectedNetsByDevicePin(input);
552
+ for (const device of input.devices ?? []) {
553
+ for (const pin of device.pins ?? []) {
554
+ if (!pin.required || pin.noConnectAllowed)
555
+ continue;
556
+ const connectedNets = connectedNetsForPin(pinToNets, device, pin.pin);
557
+ if (connectedNets.length === 0) {
558
+ issues.push(netError(NetValidationCode.NetUnpoweredDevice, `Required pin ${device.ref}:${pin.name ?? pin.pin} is not connected`, {
559
+ componentRef: device.ref,
560
+ pin: pin.pin,
561
+ remediationHint: pin.expectedNetType === 'power'
562
+ ? 'Connect this required supply pin to the correct power rail.'
563
+ : pin.expectedNetType === 'ground'
564
+ ? 'Connect this required ground/reference pin to the correct ground net.'
565
+ : 'Connect this required pin to the intended net or mark it noConnectAllowed when intentional.',
566
+ details: { expectedNetType: pin.expectedNetType, electricalType: pin.electricalType },
567
+ }));
568
+ continue;
569
+ }
570
+ if (pin.expectedNetType) {
571
+ for (const net of connectedNets) {
572
+ if (net.type !== pin.expectedNetType) {
573
+ issues.push(netError(NetValidationCode.NetUnpoweredDevice, `Pin ${device.ref}:${pin.name ?? pin.pin} expects a ${pin.expectedNetType} net but is connected to ${net.type} net "${net.name}"`, {
574
+ netName: net.name,
575
+ componentRef: device.ref,
576
+ pin: pin.pin,
577
+ remediationHint: `Move ${device.ref}:${pin.name ?? pin.pin} to a ${pin.expectedNetType} net or correct the pin metadata if the symbol is wrong.`,
578
+ details: {
579
+ expectedNetType: pin.expectedNetType,
580
+ actualNetType: net.type,
581
+ electricalType: pin.electricalType,
582
+ },
583
+ }));
584
+ }
585
+ }
586
+ }
587
+ }
588
+ }
589
+ return issues;
590
+ }
591
+ // ── Semantic ERC: decoupling ───────────────────────────────────────────────
592
+ function checkMissingDecoupling(input) {
593
+ if (!hasSemanticMetadata(input))
594
+ return [];
595
+ const issues = [];
596
+ const pinToNets = connectedNetsByDevicePin(input);
597
+ const groundNets = input.nets.filter((net) => net.type === 'ground');
598
+ for (const device of input.devices ?? []) {
599
+ if (!device.requiresDecoupling)
600
+ continue;
601
+ const powerPins = (device.pins ?? []).filter((pin) => pin.expectedNetType === 'power' ||
602
+ (pin.electricalType === 'power_input' && pin.expectedNetType !== 'ground'));
603
+ for (const pin of powerPins) {
604
+ const connectedPowerNets = connectedNetsForPin(pinToNets, device, pin.pin).filter((net) => net.type === 'power');
605
+ for (const powerNet of connectedPowerNets) {
606
+ if (!hasDecouplingCapacitor(input, powerNet, groundNets)) {
607
+ issues.push(netWarning(NetValidationCode.NetMissingDecoupling, `Device ${device.ref} power pin ${pin.name ?? pin.pin} on net "${powerNet.name}" has no detected local decoupling capacitor`, {
608
+ netName: powerNet.name,
609
+ componentRef: device.ref,
610
+ pin: pin.pin,
611
+ remediationHint: 'Add a local decoupling capacitor from this rail to ground near the IC/regulator supply pin, or mark the device as not requiring decoupling if intentional.',
612
+ details: { powerNet: powerNet.name, groundNets: groundNets.map((net) => net.name) },
613
+ }));
614
+ }
615
+ }
616
+ }
617
+ }
618
+ return issues;
619
+ }
620
+ // ── Semantic ERC: voltage mismatch ─────────────────────────────────────────
621
+ function checkVoltageMismatches(input) {
622
+ if (!hasSemanticMetadata(input))
623
+ return [];
624
+ const issues = [];
625
+ for (const net of input.nets) {
626
+ const voltage = netVoltage(net);
627
+ if (voltage === undefined)
628
+ continue;
629
+ for (const node of resolveSemanticNodes(input, net)) {
630
+ const expectedVoltage = node.expectedVoltage;
631
+ if (expectedVoltage === undefined)
632
+ continue;
633
+ if (Math.abs(expectedVoltage - voltage) > 0.15) {
634
+ issues.push(netError(NetValidationCode.NetVoltageMismatch, `Pin ${node.displayRef}:${node.pinName ?? node.pin} expects ${expectedVoltage}V but net "${net.name}" is ${voltage}V`, {
635
+ netName: net.name,
636
+ componentRef: node.displayRef,
637
+ pin: node.pin,
638
+ remediationHint: 'Connect this pin to the correct voltage domain or insert level shifting/regulation if the voltage mismatch is intentional.',
639
+ details: {
640
+ expectedVoltage,
641
+ actualVoltage: voltage,
642
+ electricalType: node.electricalType,
643
+ },
644
+ }));
645
+ }
646
+ }
647
+ }
648
+ return issues;
649
+ }
306
650
  const RULES = [
307
651
  checkFloatingNets,
308
652
  checkDuplicateNetNames,
@@ -314,6 +658,13 @@ const RULES = [
314
658
  checkCrossSheetConsistency,
315
659
  checkNamingConventions,
316
660
  checkProtectedDomain,
661
+ checkOutputContention,
662
+ checkFloatingInputs,
663
+ checkPowerConflicts,
664
+ checkPassiveOnlySignalNets,
665
+ checkRequiredPowerPins,
666
+ checkMissingDecoupling,
667
+ checkVoltageMismatches,
317
668
  ];
318
669
  // ── Main entry point ───────────────────────────────────────────────────────
319
670
  /**
@@ -330,6 +681,13 @@ const RULES = [
330
681
  * 8. Cross-sheet consistency — error if same-name interfaces have different pinouts
331
682
  * 9. Naming convention — warning if power/ground nets have non-standard names
332
683
  * 10. Protected domain — error if high-voltage net lacks protective naming
684
+ * 11. Output contention — error if multiple active outputs drive one signal
685
+ * 12. Floating input — warning if input net has no driver or pull
686
+ * 13. Power conflict — error if multiple sources drive one rail
687
+ * 14. Passive-only signal — warning if a signal net has only passive nodes
688
+ * 15. Required power pins — error if required pins are missing/miswired
689
+ * 16. Decoupling expectation — warning if required local decoupling is absent
690
+ * 17. Voltage mismatch — error if expected pin voltage conflicts with net voltage
333
691
  */
334
692
  export function validateNets(input) {
335
693
  const errors = [];