@vessel-dsp/compiler 0.8.1 → 0.14.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.
Files changed (46) hide show
  1. package/dist/compile.d.ts.map +1 -1
  2. package/dist/compile.js +46 -0
  3. package/dist/compile.js.map +1 -1
  4. package/dist/device-laws.d.ts +20 -0
  5. package/dist/device-laws.d.ts.map +1 -1
  6. package/dist/device-laws.js +185 -17
  7. package/dist/device-laws.js.map +1 -1
  8. package/dist/diagnostics.d.ts +1 -1
  9. package/dist/diagnostics.d.ts.map +1 -1
  10. package/dist/diagnostics.js +1 -1
  11. package/dist/diagnostics.js.map +1 -1
  12. package/dist/fixtures/circuits.d.ts +87 -4
  13. package/dist/fixtures/circuits.d.ts.map +1 -1
  14. package/dist/fixtures/circuits.js +397 -4
  15. package/dist/fixtures/circuits.js.map +1 -1
  16. package/dist/fixtures/expected.d.ts +10 -0
  17. package/dist/fixtures/expected.d.ts.map +1 -1
  18. package/dist/fixtures/expected.js +48 -0
  19. package/dist/fixtures/expected.js.map +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/latch-seed.d.ts +76 -14
  25. package/dist/latch-seed.d.ts.map +1 -1
  26. package/dist/latch-seed.js +184 -41
  27. package/dist/latch-seed.js.map +1 -1
  28. package/dist/lower.d.ts.map +1 -1
  29. package/dist/lower.js +90 -14
  30. package/dist/lower.js.map +1 -1
  31. package/dist/netlist.d.ts.map +1 -1
  32. package/dist/netlist.js +96 -3
  33. package/dist/netlist.js.map +1 -1
  34. package/dist/part-catalog.d.ts.map +1 -1
  35. package/dist/part-catalog.js +307 -41
  36. package/dist/part-catalog.js.map +1 -1
  37. package/dist/partition.d.ts.map +1 -1
  38. package/dist/partition.js +7 -4
  39. package/dist/partition.js.map +1 -1
  40. package/dist/stamp-partition.d.ts +6 -0
  41. package/dist/stamp-partition.d.ts.map +1 -1
  42. package/dist/stamp-partition.js +6 -0
  43. package/dist/stamp-partition.js.map +1 -1
  44. package/dist/types.d.ts +256 -5
  45. package/dist/types.d.ts.map +1 -1
  46. package/package.json +1 -1
@@ -27,6 +27,145 @@
27
27
  */
28
28
  const LATCH_SEED_VOLTS = 0.65;
29
29
  export function findBistableLatches(netlist) {
30
+ const rails = detectorRails(netlist);
31
+ const pairs = candidatePairs(netlist, rails);
32
+ const latches = [];
33
+ for (const pair of pairs) {
34
+ const assessed = assessLatchSides(netlist, rails, pair.a, pair.b);
35
+ const bypassControls = (netlist.controls ?? []).filter((c) => c.role === "bypass");
36
+ let controlId = bypassControls.length === 1 ? (bypassControls[0]?.id ?? null) : null;
37
+ if (controlId === null) {
38
+ for (const dev of netlist.devices) {
39
+ if (dev.kind === "switch" && dev.control !== null) {
40
+ controlId = dev.control;
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ latches.push({
46
+ controlId,
47
+ onWhenEngagedBase: assessed.onMember.base,
48
+ offWhenEngagedBase: assessed.offMember.base,
49
+ emitter: pair.a.emitter,
50
+ onWhenEngagedCollector: assessed.onMember.collector,
51
+ offWhenEngagedCollector: assessed.offMember.collector,
52
+ onWhenEngagedTransistorId: assessed.onMember.id,
53
+ offWhenEngagedTransistorId: assessed.offMember.id,
54
+ sideProvenance: assessed.sideProvenance,
55
+ });
56
+ }
57
+ return latches;
58
+ }
59
+ /**
60
+ * Latches where the connectivity derivation and the effect-status LED disagree about
61
+ * the engaged side. The detector keeps the connectivity answer; this names the
62
+ * conflict for the diagnostic, one item per latch.
63
+ */
64
+ export function findLatchLedDisagreements(netlist) {
65
+ const rails = detectorRails(netlist);
66
+ const out = [];
67
+ for (const pair of candidatePairs(netlist, rails)) {
68
+ const assessed = assessLatchSides(netlist, rails, pair.a, pair.b);
69
+ if (assessed.sideProvenance === "connectivity" &&
70
+ assessed.ledVote !== null &&
71
+ assessed.ledVote.member.id !== assessed.onMember.id) {
72
+ out.push({
73
+ onWhenEngagedTransistorId: assessed.onMember.id,
74
+ ledOnTransistorId: assessed.ledVote.member.id,
75
+ ledId: assessed.ledVote.ledId,
76
+ ledPolarity: assessed.ledVote.polarity,
77
+ });
78
+ }
79
+ }
80
+ return out;
81
+ }
82
+ /**
83
+ * Which side is ON when engaged. Precedence is derivation order, not confidence
84
+ * blending: connectivity first, then the effect-status LED, then the floor.
85
+ *
86
+ * - **Connectivity.** The member whose collector gates the effect path is OFF when
87
+ * engaged, so the ON side is the other member.
88
+ * - **Effect-status LED.** A CHECK LED is lit when the pedal is engaged, so the
89
+ * member the LED indicates is the ON side — but only where connectivity refused.
90
+ * Where both speak and they disagree, connectivity stands and
91
+ * `findLatchLedDisagreements` reports it; that path never reaches a silent choice.
92
+ * - **Fallback.** The pre-fix assignment (lower base id) exactly, so fallback
93
+ * programs stay byte-identical; the provenance admits the name is a stable choice
94
+ * rather than a derived fact.
95
+ */
96
+ function assessLatchSides(netlist, rails, a, b) {
97
+ const effectGateBaseNode = effectGatingBase(netlist, rails, a, b);
98
+ const ledVote = ledIndicatedOnMember(netlist, a, b);
99
+ if (effectGateBaseNode !== null) {
100
+ const offMember = effectGateBaseNode === a.base ? a : b;
101
+ const onMember = effectGateBaseNode === a.base ? b : a;
102
+ return { onMember, offMember, sideProvenance: "connectivity", ledVote };
103
+ }
104
+ if (ledVote !== null) {
105
+ const onMember = ledVote.member;
106
+ const offMember = ledVote.member.id === a.id ? b : a;
107
+ return { onMember, offMember, sideProvenance: "effect-status-led", ledVote };
108
+ }
109
+ const fallbackBase = Math.min(a.base, b.base);
110
+ const onMember = fallbackBase === a.base ? a : b;
111
+ const offMember = fallbackBase === a.base ? b : a;
112
+ return { onMember, offMember, sideProvenance: "fallback", ledVote };
113
+ }
114
+ /**
115
+ * The latch member an effect-status LED indicates as ON when engaged, or `null`.
116
+ *
117
+ * One unanimous vote wins: every LED whose terminal sits on a latch collector names
118
+ * the member lit in the effect state (cathode on a collector: lit when LOW, so that
119
+ * member; anode directly on a collector: lit when HIGH, so the other member), and
120
+ * conflicting or absent votes are no evidence rather than a tie-break. Matching is
121
+ * by the panel record's exact component id (already resolved to terminals by stage 1)
122
+ * and the typed `led` kind it carried — never by name or description text.
123
+ */
124
+ function ledIndicatedOnMember(netlist, a, b) {
125
+ const leds = netlist.effectStatusLeds ?? [];
126
+ const votes = [];
127
+ for (const led of leds) {
128
+ for (const member of [a, b]) {
129
+ const cathode = cathodeRelation(netlist, led.cathode, member.collector);
130
+ if (cathode !== null) {
131
+ votes.push({
132
+ member,
133
+ ledId: led.id,
134
+ polarity: cathode === "direct" ? "cathode-direct" : "cathode-1R",
135
+ });
136
+ }
137
+ else if (led.anode === member.collector) {
138
+ const other = member.id === a.id ? b : a;
139
+ votes.push({ member: other, ledId: led.id, polarity: "anode-direct" });
140
+ }
141
+ }
142
+ }
143
+ if (votes.length === 0) {
144
+ return null;
145
+ }
146
+ const first = votes[0];
147
+ if (votes.every((vote) => vote.member.id === first.member.id)) {
148
+ return first;
149
+ }
150
+ return null;
151
+ }
152
+ /**
153
+ * How an LED cathode reaches a latch collector: `direct` on the node, the id of the
154
+ * single resistor joining them, or `null`. Resistors only — a shared supply node is
155
+ * not a branch, and neither is anything else.
156
+ */
157
+ function cathodeRelation(netlist, cathode, collector) {
158
+ if (cathode === collector) {
159
+ return "direct";
160
+ }
161
+ const link = netlist.devices.find((device) => device.kind === "resistor" &&
162
+ device.nodes.length === 2 &&
163
+ ((device.nodes[0] === cathode && device.nodes[1] === collector) ||
164
+ (device.nodes[0] === collector && device.nodes[1] === cathode)));
165
+ return link === undefined ? null : String(link.id);
166
+ }
167
+ /** This detector's rail set: ground plus every asserted supply node. */
168
+ function detectorRails(netlist) {
30
169
  const rails = new Set([0]);
31
170
  for (const device of netlist.devices) {
32
171
  if (device.kind === "voltage-source" || device.kind === "rail") {
@@ -35,6 +174,14 @@ export function findBistableLatches(netlist) {
35
174
  }
36
175
  }
37
176
  }
177
+ return rails;
178
+ }
179
+ /**
180
+ * Candidate cross-coupled pairs: the four structural requirements (a direct resistor
181
+ * each way, a shared emitter, no rails on collectors or bases, exclusivity), without
182
+ * any side assignment.
183
+ */
184
+ function candidatePairs(netlist, rails) {
38
185
  const transistors = netlist.devices.flatMap((device) => {
39
186
  if (device.kind !== "bjt") {
40
187
  return [];
@@ -81,57 +228,53 @@ export function findBistableLatches(netlist) {
81
228
  appearances.set(member.id, (appearances.get(member.id) ?? 0) + 1);
82
229
  }
83
230
  }
84
- const latches = [];
85
- for (const pair of pairs) {
86
- if ([pair.a, pair.b].some((m) => (appearances.get(m.id) ?? 0) > 1)) {
87
- continue;
88
- }
89
- // Prefer the side that engages the effect. Falling back to the lower base id keeps a
90
- // latch this cannot read out of the unphysical midpoint, which is the seed's floor.
91
- const engagedBaseNode = engagedBase(netlist, rails, pair.a, pair.b) ??
92
- Math.min(pair.a.base, pair.b.base);
93
- const engaged = engagedBaseNode === pair.a.base ? pair.a : pair.b;
94
- const bypassed = engagedBaseNode === pair.a.base ? pair.b : pair.a;
95
- const bypassControls = (netlist.controls ?? []).filter((c) => c.role === "bypass");
96
- let controlId = bypassControls.length === 1 ? (bypassControls[0]?.id ?? null) : null;
97
- if (controlId === null) {
98
- for (const dev of netlist.devices) {
99
- if (dev.kind === "switch" && dev.control !== null) {
100
- controlId = dev.control;
101
- break;
102
- }
103
- }
104
- }
105
- latches.push({
106
- controlId,
107
- engagedBase: engaged.base,
108
- bypassedBase: bypassed.base,
109
- emitter: pair.a.emitter,
110
- engagedCollector: engaged.collector,
111
- bypassedCollector: bypassed.collector,
112
- engagedTransistorId: engaged.id,
113
- bypassedTransistorId: bypassed.id,
114
- });
231
+ return pairs.filter((pair) => [pair.a, pair.b].every((m) => (appearances.get(m.id) ?? 0) <= 1));
232
+ }
233
+ /**
234
+ * An LED's anode or cathode node by role token, or `null` when the role is absent or
235
+ * repeated. Reads the folded name token first and the declared role second: both are
236
+ * typed terminal statements, and either may carry the `anode`/`cathode` word the
237
+ * source filed.
238
+ */
239
+ export function ledTerminalNode(device, role) {
240
+ const named = device.identity.terminalRoles.flatMap((candidate, index) => candidate === role ? [index] : []);
241
+ if (named.length === 1) {
242
+ const node = device.nodes[named[0]];
243
+ return node === undefined ? null : node;
115
244
  }
116
- return latches;
245
+ const declared = device.identity.declaredTerminalRoles.flatMap((candidate, index) => (candidate === role ? [index] : []));
246
+ if (declared.length === 1) {
247
+ const node = device.nodes[declared[0]];
248
+ return node === undefined ? null : node;
249
+ }
250
+ return null;
117
251
  }
118
252
  export function findLatchSeeds(netlist) {
119
253
  const latches = findBistableLatches(netlist);
120
254
  const seeds = [];
121
255
  const seeded = new Set();
122
256
  for (const latch of latches) {
123
- if (seeded.has(latch.engagedBase)) {
257
+ if (seeded.has(latch.onWhenEngagedBase)) {
124
258
  continue;
125
259
  }
126
- seeded.add(latch.engagedBase);
127
- seeds.push({ node: latch.engagedBase, volts: LATCH_SEED_VOLTS });
260
+ seeded.add(latch.onWhenEngagedBase);
261
+ seeds.push({ node: latch.onWhenEngagedBase, volts: LATCH_SEED_VOLTS });
128
262
  }
129
263
  return seeds;
130
264
  }
131
265
  /**
132
- * Which member of the pair is high when the pedal is **engaged**, or `null` when that is not
266
+ * Which member's collector gates the effect FET's gate, or `null` when that is not
133
267
  * derivable from connectivity.
134
268
  *
269
+ * This is the rule the old spine's `discrete-bypass-latch.ts` paid for, with the
270
+ * polarity corrected: the member found here is **off** when the pedal is engaged, not
271
+ * on. A collector pulled LOW (transistor ON) pulls the FET gate it steers low through
272
+ * the steering diode and turns that FET OFF — so the transistor whose collector
273
+ * carries the effect path must sit HIGH (off) for the effect to conduct, and the seed
274
+ * and the steering stamps belong to the *other* member. The pre-fix code seeded and
275
+ * steered this member instead, which is why the three derived latches in the corpus
276
+ * (`boss-sd-1`, `boss-ce-2`, `boss-dm-2`) rendered bypass at engaged control.
277
+ *
135
278
  * Ported from the old spine's `discrete-bypass-latch.ts`, whose rule this repository already
136
279
  * paid for: a latch's side is a control fact, and the two questions that decide it are which
137
280
  * switches each collector gates, and which of those switch paths carries the audio the user
@@ -150,7 +293,7 @@ export function findLatchSeeds(netlist) {
150
293
  *
151
294
  * Both floods are blocked by rails, the same exclusion the rest of this file makes.
152
295
  */
153
- function engagedBase(netlist, rails, a, b) {
296
+ function effectGatingBase(netlist, rails, a, b) {
154
297
  const dcEdges = edgesOf(netlist, ["resistor", "diode"]);
155
298
  const switches = netlist.devices.flatMap((switching) => {
156
299
  if (switching.kind !== "jfet" && switching.kind !== "mosfet") {
@@ -198,12 +341,12 @@ function engagedBase(netlist, rails, a, b) {
198
341
  const reached = flood(found.drain, audioEdges, rails);
199
342
  return controlNodes.some((node) => reached.has(node));
200
343
  });
201
- const engagedA = reachesAControl(gatedA);
202
- const engagedB = reachesAControl(gatedB);
203
- if (engagedA === engagedB) {
344
+ const gatingA = reachesAControl(gatedA);
345
+ const gatingB = reachesAControl(gatedB);
346
+ if (gatingA === gatingB) {
204
347
  return null;
205
348
  }
206
- return engagedA ? a.base : b.base;
349
+ return gatingA ? a.base : b.base;
207
350
  }
208
351
  /** Undirected two-terminal edges of the given kinds; a pot contributes one per terminal pair. */
209
352
  function edgesOf(netlist, kinds) {
@@ -1 +1 @@
1
- {"version":3,"file":"latch-seed.js","sourceRoot":"","sources":["../src/latch-seed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"latch-seed.js","sourceRoot":"","sources":["../src/latch-seed.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lower.d.ts","sourceRoot":"","sources":["../src/lower.ts"],"names":[],"mappings":"AAqBA,OAAO,EAGN,KAAK,aAAa,EAClB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACX,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,SAAS,CAAC;AAkBjB,OAAO,EACN,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,YAAY,EACZ,cAAc,GACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,WAAW,CAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM;AAClB;;;GAGG;AACH,UAAU,GAAE,SAAS,kBAAkB,EAAO,EAC9C,OAAO,GAAE,SAAS,aAAa,EAAO;AACtC;;;;;GAKG;AACH,aAAa,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa;AACtD;;;;GAIG;AACH,kBAAkB,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa;AAC3D;;;;GAIG;AACH,mBAAmB,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa;AAC5D;;;;;GAKG;AACH,mBAAmB,GAAE,WAAW,CAAC,MAAM,CAAa,EACpD,gBAAgB,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GACvD,KAAK,CAuuCP;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,EAC/C,IAAI,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAGf;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,EAC/C,KAAK,EAAE,KAAK,GACV,KAAK,CAEP;AAGD,wBAAgB,KAAK,CACpB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,YAAY,GACjB,SAAS,KAAK,EAAE,CAwBlB;AA2TD;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAqYlD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,MAAM,GACZ,UAAU,GAAG,OAAO,GAAG,mBAAmB,CAK5C"}
1
+ {"version":3,"file":"lower.d.ts","sourceRoot":"","sources":["../src/lower.ts"],"names":[],"mappings":"AAqBA,OAAO,EAGN,KAAK,aAAa,EAClB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACX,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,SAAS,CAAC;AAkBjB,OAAO,EACN,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,YAAY,EACZ,cAAc,GACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,WAAW,CAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM;AAClB;;;GAGG;AACH,UAAU,GAAE,SAAS,kBAAkB,EAAO,EAC9C,OAAO,GAAE,SAAS,aAAa,EAAO;AACtC;;;;;GAKG;AACH,aAAa,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa;AACtD;;;;GAIG;AACH,kBAAkB,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa;AAC3D;;;;GAIG;AACH,mBAAmB,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa;AAC5D;;;;;GAKG;AACH,mBAAmB,GAAE,WAAW,CAAC,MAAM,CAAa,EACpD,gBAAgB,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GACvD,KAAK,CA8zCP;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,EAC/C,IAAI,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAGf;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,EAC/C,KAAK,EAAE,KAAK,GACV,KAAK,CAEP;AAGD,wBAAgB,KAAK,CACpB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,YAAY,GACjB,SAAS,KAAK,EAAE,CAwBlB;AA2TD;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAqYlD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,MAAM,GACZ,UAAU,GAAG,OAAO,GAAG,mBAAmB,CAK5C"}
package/dist/lower.js CHANGED
@@ -16,7 +16,7 @@
16
16
  // The result is that one lowered program is valid at every sample rate and every knob
17
17
  // position, which is what makes rate independence testable: compile once, run at two
18
18
  // rates, and the outputs must match.
19
- import { SWITCH_ON_OHMS } from "./device-laws.js";
19
+ import { invalidLdrTableReason, SWITCH_ON_OHMS } from "./device-laws.js";
20
20
  import { findBistableLatches, findLatchSeeds, } from "./latch-seed.js";
21
21
  import { computeSparseSchedule } from "./sparse-schedule.js";
22
22
  import { computeStampPartition, remapStampNodes, shouldEliminate, stampControl, stampNeedsNewton, } from "./stamp-partition.js";
@@ -236,10 +236,10 @@ invertingInputNodes = new Set(), acOutputDistance = new Map()) {
236
236
  // latch sets (boss-dm-3) never reach this branch.
237
237
  const latchNodes = new Set();
238
238
  for (const latch of latches) {
239
- latchNodes.add(latch.engagedCollector);
240
- latchNodes.add(latch.bypassedCollector);
241
- latchNodes.add(latch.engagedBase);
242
- latchNodes.add(latch.bypassedBase);
239
+ latchNodes.add(latch.onWhenEngagedCollector);
240
+ latchNodes.add(latch.offWhenEngagedCollector);
241
+ latchNodes.add(latch.onWhenEngagedBase);
242
+ latchNodes.add(latch.offWhenEngagedBase);
243
243
  }
244
244
  if (device.nodes.length > 2 &&
245
245
  device.nodes.some((node) => latchNodes.has(node))) {
@@ -723,6 +723,63 @@ invertingInputNodes = new Set(), acOutputDistance = new Map()) {
723
723
  });
724
724
  break;
725
725
  }
726
+ case "dbx-vca": {
727
+ // Positional terminals only (sections path): [plus, minus, output,
728
+ // control]. Same shape as `linear-vca`: the control pin is
729
+ // voltage-sense (no conductance stamped on it) and the input pin
730
+ // is a current input at about the minus potential. Terms are the
731
+ // session-fitted SUSTAIN-coupled rest plus the smoothed log-domain
732
+ // envelope plus the shutdown (four state slots -- smoothed control,
733
+ // smoothed envelope, prime, shutdown -- held across the Newton loop
734
+ // like the compandor's); see the `dbx-vca` law docs for the cited
735
+ // numbers.
736
+ const plus = device.nodes[0];
737
+ const minus = device.nodes[1];
738
+ const output = device.nodes[2];
739
+ const control = device.nodes[3];
740
+ if (plus === undefined ||
741
+ minus === undefined ||
742
+ output === undefined ||
743
+ control === undefined) {
744
+ throw new LoweringError(`dbx-vca ${device.id} requires plus, minus, output, and control terminals`, device.id);
745
+ }
746
+ stamps.push({
747
+ kind: "conductance",
748
+ a: plus,
749
+ b: minus,
750
+ siemens: law.inputSiemens,
751
+ });
752
+ const dbxStateIndex = stateCount;
753
+ stateCount += 4;
754
+ stamps.push({
755
+ kind: "dbx-vca",
756
+ plus,
757
+ minus,
758
+ output,
759
+ control,
760
+ inputSiemens: law.inputSiemens,
761
+ sustainGain: law.sustainGain,
762
+ sustainRef: law.sustainRef,
763
+ envelopeSlope: law.envelopeSlope,
764
+ kneeBaseVolts: law.kneeBaseVolts,
765
+ kneeTrack: law.kneeTrack,
766
+ attackSeconds: law.attackSeconds,
767
+ releaseSeconds: law.releaseSeconds,
768
+ releaseSlowdown: law.releaseSlowdown,
769
+ shutdownEdgeVolts: law.shutdownEdgeVolts,
770
+ shutdownGain: law.shutdownGain,
771
+ primeRiseSeconds: law.primeRiseSeconds,
772
+ primeFallSeconds: law.primeFallSeconds,
773
+ shutdownAttackSeconds: law.shutdownAttackSeconds,
774
+ shutdownFastSeconds: law.shutdownFastSeconds,
775
+ shutdownSlowSeconds: law.shutdownSlowSeconds,
776
+ primeRefCurrent: law.primeRefCurrent,
777
+ minGainDb: law.minGainDb,
778
+ maxGainDb: law.maxGainDb,
779
+ stateIndex: dbxStateIndex,
780
+ });
781
+ break;
782
+ }
726
783
  case "inverter": {
727
784
  const { input, output, vdd, gnd } = inverterTerminals(device);
728
785
  if (input === undefined || output === undefined) {
@@ -886,6 +943,10 @@ invertingInputNodes = new Set(), acOutputDistance = new Map()) {
886
943
  ldrB === undefined) {
887
944
  throw new Error(`optocoupler ${device.id} requires 4 terminals: anode, cathode, ldrA, ldrB`);
888
945
  }
946
+ const tableReason = invalidLdrTableReason(law.ldrTableCurrentAmps, law.ldrTableOhms);
947
+ if (tableReason !== null) {
948
+ throw new LoweringError(`optocoupler ${device.id} has an invalid LDR table: ${tableReason}`, device.id);
949
+ }
889
950
  stamps.push({
890
951
  kind: "optocoupler",
891
952
  ledAnode,
@@ -898,6 +959,13 @@ invertingInputNodes = new Set(), acOutputDistance = new Map()) {
898
959
  ldrMaxOhms: law.ldrMaxOhms,
899
960
  ldrPowerLawCoefficientOhms: law.ldrPowerLawCoefficientOhms,
900
961
  ldrPowerLawExponent: law.ldrPowerLawExponent,
962
+ ...(law.ldrTableCurrentAmps !== undefined &&
963
+ law.ldrTableOhms !== undefined
964
+ ? {
965
+ ldrTableCurrentAmps: [...law.ldrTableCurrentAmps],
966
+ ldrTableOhms: [...law.ldrTableOhms],
967
+ }
968
+ : {}),
901
969
  });
902
970
  break;
903
971
  }
@@ -1115,18 +1183,26 @@ invertingInputNodes = new Set(), acOutputDistance = new Map()) {
1115
1183
  // A seed belongs to the region that holds the node, and regions are disjoint.
1116
1184
  const regionNodes = new Set(region.nodes);
1117
1185
  const operatingPointSeeds = latchSeeds.filter((seed) => regionNodes.has(seed.node));
1118
- // Complementary collector-steering switch stamps for bistable flip-flops:
1119
- // When control is engaged (>= 0.5): engagedCollector is pulled to emitter (100 ohm),
1120
- // forcing engagedCollector low (0 V), putting bypassed transistor into cutoff (bypassedCollector high).
1121
- // When control is bypassed (< 0.5): bypassedCollector is pulled to emitter (100 ohm),
1122
- // forcing bypassedCollector low (0 V), putting engaged transistor into cutoff (engagedCollector high).
1186
+ // Complementary collector-steering switch stamps for bistable flip-flops.
1187
+ //
1188
+ // Polarity, measured 2026-10-23: the member whose collector gates the effect FET
1189
+ // (`offWhenEngaged`) sits HIGH (off) when the pedal is engaged, so the effect FET's
1190
+ // gate sits high and the effect conducts; the other member (`onWhenEngaged`) sits
1191
+ // LOW (on). A collector held LOW forces its own transistor ON through the
1192
+ // cross-coupling (the opposite base follows the held collector down, the opposite
1193
+ // collector rises, the held transistor's base rises), so at control >= 0.5
1194
+ // (engaged) the `onWhenEngaged` collector is pulled to the emitter (100 ohm) and
1195
+ // at < 0.5 the `offWhenEngaged` collector is. The pre-fix code pulled the
1196
+ // effect-gating collector low at engaged instead, which turns the effect FET OFF:
1197
+ // `boss-sd-1` at bypass control 1 rendered dry (−0.73 dB, THD 0.02 %, effect FET
1198
+ // off) and at 0 rendered the effect (+5.3 dB, THD 11.8 %).
1123
1199
  for (const latch of latches) {
1124
1200
  if (latch.controlId !== null &&
1125
- regionNodes.has(latch.engagedCollector) &&
1126
- regionNodes.has(latch.bypassedCollector)) {
1201
+ regionNodes.has(latch.onWhenEngagedCollector) &&
1202
+ regionNodes.has(latch.offWhenEngagedCollector)) {
1127
1203
  stamps.push({
1128
1204
  kind: "switch",
1129
- a: latch.engagedCollector,
1205
+ a: latch.onWhenEngagedCollector,
1130
1206
  b: latch.emitter,
1131
1207
  control: latch.controlId,
1132
1208
  onOhms: 100,
@@ -1134,7 +1210,7 @@ invertingInputNodes = new Set(), acOutputDistance = new Map()) {
1134
1210
  });
1135
1211
  stamps.push({
1136
1212
  kind: "switch",
1137
- a: latch.bypassedCollector,
1213
+ a: latch.offWhenEngagedCollector,
1138
1214
  b: latch.emitter,
1139
1215
  control: latch.controlId,
1140
1216
  onOhms: 1e8,