Skip to content

findUnboundedOpamps

findUnboundedOpamps(netlist): readonly UnboundedOpampWarning[]

Defined in: packages/compiler/src/unbounded-operating-point.ts:51

An op-amp with no DC-conducting path from its output back to its inverting input has no feedback at DC. Its inverting node is then set by the input network alone, and unless that network happens to hold it at exactly the non-inverting potential there is a standing differential which the op-amp integrates through its capacitive feedback without bound. A real one winds up too and then sits at a rail; the runtime’s linearisation does not, which is the defect that entry records.

Three exclusions carry the whole result, and each removes a class this would otherwise be wrong about:

  1. Rails are not routes. Ground and every node a voltage source touches are excluded, the same exclusion switchesClosedForPortPath makes: a path reaching the input through a fixed potential does not let the output influence it, so it is not feedback.
  2. No op-amp is a conductor. Its inputs draw no current — the whole reason gmin exists — so linking its terminals invents a path through the device. Leaving this out made the first version find a route from ibanez-pql’s U3A output back to its own inverting input through two other op-amps, and miss the one packet it was built for.
  3. Off the signal path does not count. An LFO integrator is supposed to run away and be reset by its comparator, and a comparator is open-loop by design. Both have no DC feedback and neither is a defect. Asking whether audio actually passes through the op-amp separates them by connectivity rather than by intent, and it does the heavy lifting: 38 of 51 corpus op-amps with no DC feedback are off the signal path, including electro-harmonix-q-tron’s overload comparator and eight in moogerfooger-mf-102.

What survives is 13 op-amps across 7 packets. The claim is deliberately weaker than “this will diverge”: only two of those seven compile today, and while ibanez-pql is the corpus’s only diverging packet, boss-mt-2 is flagged and solves perfectly well. So the warning reports the structural fact — nothing pins this operating point — and does not predict the outcome.

Netlist

readonly UnboundedOpampWarning[]