@vessel-dsp/compiler 0.0.0-stage → 0.2.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 (226) hide show
  1. package/README.md +314 -2
  2. package/dist/bake.d.ts +38 -0
  3. package/dist/bake.d.ts.map +1 -0
  4. package/dist/bake.js +101 -0
  5. package/dist/bake.js.map +1 -0
  6. package/dist/bbd-clock.d.ts +171 -0
  7. package/dist/bbd-clock.d.ts.map +1 -0
  8. package/dist/bbd-clock.js +1750 -0
  9. package/dist/bbd-clock.js.map +1 -0
  10. package/dist/block-row.d.ts +51 -0
  11. package/dist/block-row.d.ts.map +1 -0
  12. package/dist/block-row.js +17 -0
  13. package/dist/block-row.js.map +1 -0
  14. package/dist/bypass.d.ts +3 -0
  15. package/dist/bypass.d.ts.map +1 -0
  16. package/dist/bypass.js +228 -0
  17. package/dist/bypass.js.map +1 -0
  18. package/dist/compile.d.ts +24 -0
  19. package/dist/compile.d.ts.map +1 -0
  20. package/dist/compile.js +344 -0
  21. package/dist/compile.js.map +1 -0
  22. package/dist/converter-scale.d.ts +14 -0
  23. package/dist/converter-scale.d.ts.map +1 -0
  24. package/dist/converter-scale.js +133 -0
  25. package/dist/converter-scale.js.map +1 -0
  26. package/dist/couple.d.ts +28 -0
  27. package/dist/couple.d.ts.map +1 -0
  28. package/dist/couple.js +567 -0
  29. package/dist/couple.js.map +1 -0
  30. package/dist/dangling-active-terminal.d.ts +47 -0
  31. package/dist/dangling-active-terminal.d.ts.map +1 -0
  32. package/dist/dangling-active-terminal.js +542 -0
  33. package/dist/dangling-active-terminal.js.map +1 -0
  34. package/dist/declared-program.d.ts +23 -0
  35. package/dist/declared-program.d.ts.map +1 -0
  36. package/dist/declared-program.js +387 -0
  37. package/dist/declared-program.js.map +1 -0
  38. package/dist/denomination.d.ts +48 -0
  39. package/dist/denomination.d.ts.map +1 -0
  40. package/dist/denomination.js +27 -0
  41. package/dist/denomination.js.map +1 -0
  42. package/dist/device-laws.d.ts +237 -0
  43. package/dist/device-laws.d.ts.map +1 -0
  44. package/dist/device-laws.js +3497 -0
  45. package/dist/device-laws.js.map +1 -0
  46. package/dist/diagnostics.d.ts +13 -0
  47. package/dist/diagnostics.d.ts.map +1 -0
  48. package/dist/diagnostics.js +19 -0
  49. package/dist/diagnostics.js.map +1 -0
  50. package/dist/emit.d.ts +8 -0
  51. package/dist/emit.d.ts.map +1 -0
  52. package/dist/emit.js +43 -0
  53. package/dist/emit.js.map +1 -0
  54. package/dist/errors.d.ts +22 -0
  55. package/dist/errors.d.ts.map +1 -0
  56. package/dist/errors.js +39 -0
  57. package/dist/errors.js.map +1 -0
  58. package/dist/firmware-class.d.ts +69 -0
  59. package/dist/firmware-class.d.ts.map +1 -0
  60. package/dist/firmware-class.js +20 -0
  61. package/dist/firmware-class.js.map +1 -0
  62. package/dist/fixtures/circuits.d.ts +1721 -0
  63. package/dist/fixtures/circuits.d.ts.map +1 -0
  64. package/dist/fixtures/circuits.js +13404 -0
  65. package/dist/fixtures/circuits.js.map +1 -0
  66. package/dist/fixtures/expected.d.ts +257 -0
  67. package/dist/fixtures/expected.d.ts.map +1 -0
  68. package/dist/fixtures/expected.js +311 -0
  69. package/dist/fixtures/expected.js.map +1 -0
  70. package/dist/fixtures/index.d.ts +4 -0
  71. package/dist/fixtures/index.d.ts.map +1 -0
  72. package/dist/fixtures/index.js +8 -0
  73. package/dist/fixtures/index.js.map +1 -0
  74. package/dist/fixtures/registry.d.ts +52 -0
  75. package/dist/fixtures/registry.d.ts.map +1 -0
  76. package/dist/fixtures/registry.js +341 -0
  77. package/dist/fixtures/registry.js.map +1 -0
  78. package/dist/generic-tube-fit.d.ts +12 -0
  79. package/dist/generic-tube-fit.d.ts.map +1 -0
  80. package/dist/generic-tube-fit.js +45 -0
  81. package/dist/generic-tube-fit.js.map +1 -0
  82. package/dist/grounded-clock-supply.d.ts +13 -0
  83. package/dist/grounded-clock-supply.d.ts.map +1 -0
  84. package/dist/grounded-clock-supply.js +45 -0
  85. package/dist/grounded-clock-supply.js.map +1 -0
  86. package/dist/identify.d.ts +50 -0
  87. package/dist/identify.d.ts.map +1 -0
  88. package/dist/identify.js +319 -0
  89. package/dist/identify.js.map +1 -0
  90. package/dist/index.d.ts +10 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +19 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/inert-controls.d.ts +15 -0
  95. package/dist/inert-controls.d.ts.map +1 -0
  96. package/dist/inert-controls.js +266 -0
  97. package/dist/inert-controls.js.map +1 -0
  98. package/dist/latch-seed.d.ts +53 -0
  99. package/dist/latch-seed.d.ts.map +1 -0
  100. package/dist/latch-seed.js +257 -0
  101. package/dist/latch-seed.js.map +1 -0
  102. package/dist/link.d.ts +7 -0
  103. package/dist/link.d.ts.map +1 -0
  104. package/dist/link.js +270 -0
  105. package/dist/link.js.map +1 -0
  106. package/dist/lower.d.ts +79 -0
  107. package/dist/lower.d.ts.map +1 -0
  108. package/dist/lower.js +1855 -0
  109. package/dist/lower.js.map +1 -0
  110. package/dist/netlist.d.ts +79 -0
  111. package/dist/netlist.d.ts.map +1 -0
  112. package/dist/netlist.js +4746 -0
  113. package/dist/netlist.js.map +1 -0
  114. package/dist/non-executable-clock-drivers.d.ts +8 -0
  115. package/dist/non-executable-clock-drivers.d.ts.map +1 -0
  116. package/dist/non-executable-clock-drivers.js +33 -0
  117. package/dist/non-executable-clock-drivers.js.map +1 -0
  118. package/dist/open-category.d.ts +98 -0
  119. package/dist/open-category.d.ts.map +1 -0
  120. package/dist/open-category.js +111 -0
  121. package/dist/open-category.js.map +1 -0
  122. package/dist/over-driven-node.d.ts +33 -0
  123. package/dist/over-driven-node.d.ts.map +1 -0
  124. package/dist/over-driven-node.js +188 -0
  125. package/dist/over-driven-node.js.map +1 -0
  126. package/dist/part-catalog.d.ts +7 -0
  127. package/dist/part-catalog.d.ts.map +1 -0
  128. package/dist/part-catalog.js +6639 -0
  129. package/dist/part-catalog.js.map +1 -0
  130. package/dist/part-number.d.ts +32 -0
  131. package/dist/part-number.d.ts.map +1 -0
  132. package/dist/part-number.js +80 -0
  133. package/dist/part-number.js.map +1 -0
  134. package/dist/partition.d.ts +7 -0
  135. package/dist/partition.d.ts.map +1 -0
  136. package/dist/partition.js +242 -0
  137. package/dist/partition.js.map +1 -0
  138. package/dist/port-full-scale.d.ts +70 -0
  139. package/dist/port-full-scale.d.ts.map +1 -0
  140. package/dist/port-full-scale.js +235 -0
  141. package/dist/port-full-scale.js.map +1 -0
  142. package/dist/pot-orientation.d.ts +114 -0
  143. package/dist/pot-orientation.d.ts.map +1 -0
  144. package/dist/pot-orientation.js +551 -0
  145. package/dist/pot-orientation.js.map +1 -0
  146. package/dist/power-domain-control.d.ts +40 -0
  147. package/dist/power-domain-control.d.ts.map +1 -0
  148. package/dist/power-domain-control.js +142 -0
  149. package/dist/power-domain-control.js.map +1 -0
  150. package/dist/proxy-declaration.d.ts +121 -0
  151. package/dist/proxy-declaration.d.ts.map +1 -0
  152. package/dist/proxy-declaration.js +50 -0
  153. package/dist/proxy-declaration.js.map +1 -0
  154. package/dist/registry.d.ts +323 -0
  155. package/dist/registry.d.ts.map +1 -0
  156. package/dist/registry.js +192 -0
  157. package/dist/registry.js.map +1 -0
  158. package/dist/sparse-schedule.d.ts +65 -0
  159. package/dist/sparse-schedule.d.ts.map +1 -0
  160. package/dist/sparse-schedule.js +421 -0
  161. package/dist/sparse-schedule.js.map +1 -0
  162. package/dist/speaker-load.d.ts +38 -0
  163. package/dist/speaker-load.d.ts.map +1 -0
  164. package/dist/speaker-load.js +97 -0
  165. package/dist/speaker-load.js.map +1 -0
  166. package/dist/stage-coverage.d.ts +21 -0
  167. package/dist/stage-coverage.d.ts.map +1 -0
  168. package/dist/stage-coverage.js +124 -0
  169. package/dist/stage-coverage.js.map +1 -0
  170. package/dist/stamp-partition.d.ts +314 -0
  171. package/dist/stamp-partition.d.ts.map +1 -0
  172. package/dist/stamp-partition.js +472 -0
  173. package/dist/stamp-partition.js.map +1 -0
  174. package/dist/supply-reference.d.ts +19 -0
  175. package/dist/supply-reference.d.ts.map +1 -0
  176. package/dist/supply-reference.js +66 -0
  177. package/dist/supply-reference.js.map +1 -0
  178. package/dist/supply-short.d.ts +32 -0
  179. package/dist/supply-short.d.ts.map +1 -0
  180. package/dist/supply-short.js +118 -0
  181. package/dist/supply-short.js.map +1 -0
  182. package/dist/supply-stamps.d.ts +51 -0
  183. package/dist/supply-stamps.d.ts.map +1 -0
  184. package/dist/supply-stamps.js +363 -0
  185. package/dist/supply-stamps.js.map +1 -0
  186. package/dist/terminal-role.d.ts +109 -0
  187. package/dist/terminal-role.d.ts.map +1 -0
  188. package/dist/terminal-role.js +46 -0
  189. package/dist/terminal-role.js.map +1 -0
  190. package/dist/terminal-roles.d.ts +59 -0
  191. package/dist/terminal-roles.d.ts.map +1 -0
  192. package/dist/terminal-roles.js +92 -0
  193. package/dist/terminal-roles.js.map +1 -0
  194. package/dist/transformer.d.ts +181 -0
  195. package/dist/transformer.d.ts.map +1 -0
  196. package/dist/transformer.js +476 -0
  197. package/dist/transformer.js.map +1 -0
  198. package/dist/types.d.ts +3157 -0
  199. package/dist/types.d.ts.map +1 -0
  200. package/dist/types.js +11 -0
  201. package/dist/types.js.map +1 -0
  202. package/dist/unbounded-operating-point.d.ts +35 -0
  203. package/dist/unbounded-operating-point.d.ts.map +1 -0
  204. package/dist/unbounded-operating-point.js +181 -0
  205. package/dist/unbounded-operating-point.js.map +1 -0
  206. package/dist/unexecuted-region.d.ts +3 -0
  207. package/dist/unexecuted-region.d.ts.map +1 -0
  208. package/dist/unexecuted-region.js +122 -0
  209. package/dist/unexecuted-region.js.map +1 -0
  210. package/dist/unimplemented-control-role.d.ts +3 -0
  211. package/dist/unimplemented-control-role.d.ts.map +1 -0
  212. package/dist/unimplemented-control-role.js +61 -0
  213. package/dist/unimplemented-control-role.js.map +1 -0
  214. package/dist/unreachable-output.d.ts +3 -0
  215. package/dist/unreachable-output.d.ts.map +1 -0
  216. package/dist/unreachable-output.js +97 -0
  217. package/dist/unreachable-output.js.map +1 -0
  218. package/dist/unreadable-terminal-role.d.ts +67 -0
  219. package/dist/unreadable-terminal-role.d.ts.map +1 -0
  220. package/dist/unreadable-terminal-role.js +409 -0
  221. package/dist/unreadable-terminal-role.js.map +1 -0
  222. package/dist/unverified-pinout.d.ts +27 -0
  223. package/dist/unverified-pinout.d.ts.map +1 -0
  224. package/dist/unverified-pinout.js +121 -0
  225. package/dist/unverified-pinout.js.map +1 -0
  226. package/package.json +75 -5
@@ -0,0 +1,1721 @@
1
+ /**
2
+ * Derive one fixture from another, refusing a replacement that matched nothing.
3
+ *
4
+ * A bare `.replace` whose target has drifted returns the original string, so the
5
+ * derived fixture silently becomes a copy of its parent and its test passes while
6
+ * asserting nothing about the variation it was written for.
7
+ */
8
+ export declare const derive: (source: string, from: string, to: string) => string;
9
+ /**
10
+ * Two 10k resistors from input to ground, output at the midpoint. Forces nodes,
11
+ * device laws, a linear solve, and the end-to-end slice. Expected gain is exactly 0.5.
12
+ */
13
+ export declare const resistorDivider: string;
14
+ /**
15
+ * The same divider with one inline terminal node contradicting the declared ledger.
16
+ *
17
+ * `R1.b` is authored inline on node 9 while `nodes:` places it on node 2 with `R2.a` and
18
+ * the output jack. Stage 1 should follow the ledger and still warn that the document is
19
+ * inconsistent with itself.
20
+ */
21
+ export declare const ledgerOverridesInlineDivider: string;
22
+ /**
23
+ * A divider with a **0 ohm link** in series ahead of it: the schematic-capture convention for
24
+ * an ideal wire, drawn as a resistor because the board really does have a jumper there.
25
+ *
26
+ * The behaviour existed and was untested, which is the gap this closes. `device-laws.ts` stamps
27
+ * a declared zero as `SWITCH_ON_OHMS` -- the same electrically-indistinguishable-from-ideal
28
+ * short a closed switch gets -- because `1/0` is not a representable conductance. Untested
29
+ * behaviour is how the CD4047 pin binding silently regressed: a fact verified and never turned
30
+ * into an assertion.
31
+ *
32
+ * The assertion is behavioural rather than structural: the link is in series with the signal, so
33
+ * a divider with it must measure the same gain as `resistorDivider` without it. A link stamped
34
+ * as anything but a near-short would show up as a divider ratio, and one stamped as an open
35
+ * would take the gain to zero.
36
+ *
37
+ * `mxr-noise-gate-line-driver`'s `R_U1B_FB` is the corpus instance -- `Resistance: { raw: "0
38
+ * Ohm", value: 0, unit: "Ω" }`, and the only resistor of 3090 in the corpus declaring exactly
39
+ * zero.
40
+ */
41
+ export declare const zeroOhmLinkDivider: string;
42
+ /**
43
+ * A resistor that declares no resistance at all, and is not marked unpopulated.
44
+ *
45
+ * **The control that keeps the 0 ohm link honest.** A stated zero and an absent value look
46
+ * similar in a diff and mean opposite things: one is a jumper the board really has, the other is
47
+ * a value nobody recorded. Reading the second as the first would silently short a circuit --
48
+ * exactly the wrong-answer-that-still-renders this pipeline refuses.
49
+ *
50
+ * So this must refuse, and it must keep refusing. `mxr-carbon-copy`'s `R4` is the corpus
51
+ * instance: `SourceValue: visible-no-value-or-DNP`, `SourceConfidence: medium`,
52
+ * `SourceStatus: defer` -- the source itself declines to say. The refusal is the correct
53
+ * consumer behaviour there, not a gap.
54
+ */
55
+ export declare const resistorWithNoResistance: string;
56
+ /**
57
+ * A `DNP` position that *does* declare its value: R2 keeps its 10k and is marked unpopulated.
58
+ *
59
+ * The corroborated shape, and the counterpart to `notPopulatedResistor`'s load-bearing one. The
60
+ * document says "this is a 10k position, unfitted": the part still leaves the solve, but nothing
61
+ * is concealed by its leaving — a reader can see what would sit there and check it against a
62
+ * board. Distinguishing the two is the whole of `report-source-integrity`'s DNP handling, so both
63
+ * need a fixture or the distinction is asserted only in prose.
64
+ */
65
+ export declare const notPopulatedResistorWithValue: string;
66
+ /**
67
+ * A resistor declaring a **negative** resistance.
68
+ *
69
+ * The other side of the zero boundary, and the control that says where the line is: zero is a
70
+ * jumper the board really has, and below zero is not a resistor at all. `device-laws.ts` refuses
71
+ * it (`!(ohms > 0)` after the zero case is taken), and that refusal is the reason a declared zero
72
+ * can be admitted safely -- the pipeline is not simply accepting whatever number appears.
73
+ *
74
+ * No corpus packet declares one; all 3090 corpus resistors are positive or zero. That is why it
75
+ * is a fixture: a boundary defended only where the corpus happens to push is not defended.
76
+ */
77
+ export declare const resistorWithNegativeResistance: string;
78
+ /**
79
+ * The same value-less resistor, marked `DNP: 'true'`.
80
+ *
81
+ * An unpopulated position is an open circuit -- a stated fact about the board, not a missing
82
+ * value -- so this compiles with the component dropped, where the fixture above refuses. The
83
+ * pair is the whole point: the same absent value is a refusal or a legitimate open depending on
84
+ * one typed flag, and nothing else distinguishes them.
85
+ *
86
+ * `mxr-carbon-copy` carries four of these (`R45`, `R50`, `C32`, `C34`) and is the only corpus
87
+ * packet that does.
88
+ */
89
+ export declare const notPopulatedResistor: string;
90
+ /**
91
+ * A divider plus an `InterfaceOnly` open resistor that declares no resistance. Without the
92
+ * interface/source-only read this fixture refuses -- a resistor with no `Resistance` throws in
93
+ * the parameter stage. The flag is the source's way of saying "panel-LED shell, no driver
94
+ * specified, do not model it", and the correct answer is to drop it (with a warning), not to
95
+ * refuse the whole circuit over a value the source deliberately omits. `SourceOnly` is the
96
+ * twin: the negative control derives it by flipping the flag, and it must behave identically.
97
+ */
98
+ export declare const interfaceOnlyPlaceholder: string;
99
+ export declare const sourceOnlyPlaceholder: string;
100
+ /**
101
+ * 10k into 10n to ground, output across the capacitor. Forces state, the integration
102
+ * method, and a corner frequency that can be checked by hand.
103
+ */
104
+ export declare const rcLowPass: string;
105
+ /** A pot as a divider. Forces control binding, 0..1 positions, and emitted taper. */
106
+ export declare const potDivider: string;
107
+ /**
108
+ * `potDivider` plus the enclosures that are not controls: jacks and a status
109
+ * LED, each declared on the panel and bound to its component exactly the way
110
+ * `boss-od-1` declares `INPUT_JACK`, `OUTPUT_JACK` and `CHECK_LED`. The
111
+ * non-knob kinds must be dropped from `Program.controls` while the knob
112
+ * (`Level`) survives and all three devices stay in the netlist.
113
+ */
114
+ export declare const panelKnobAndHardwareControls: string;
115
+ /**
116
+ * A switch whose both terminals resolve to one node (`boss-od-1`'s
117
+ * `INPUT_BATTERY_CONTACT` shape) next to an ordinary unbound two-terminal
118
+ * switch on distinct nodes. The fixed contact manufactures no control; the
119
+ * real switch keeps its invented one (`switchInSignalPath` pins that second
120
+ * behaviour), so the negative control proves this gate can fail for the
121
+ * claimed reason.
122
+ */
123
+ export declare const fixedContactSwitchCircuit: string;
124
+ /**
125
+ * A **rheostat** wired so the two orientation rules disagree.
126
+ *
127
+ * `end1` sits on ground and the wiper shares node 2 with `end2`, so the live leg is
128
+ * `end1`-to-wiper. Quiet-distance sees the grounded end as the quiet one and swaps the ends,
129
+ * putting the live leg on `lower`; declaration order leaves it on `upper`. The two rules give
130
+ * different answers here, which is what makes this fixture worth having.
131
+ *
132
+ * The control declares a time-constant role, so `potTerminals` steps aside from quiet-distance:
133
+ * its premise -- a rising knob should be louder -- says nothing about a pot setting an RC, and
134
+ * on `boss-nf-1-noise-gate`'s `DECAY` it picked the side that ran the knob backwards.
135
+ */
136
+ export declare const rheostatWithTimeConstantRole: string;
137
+ /**
138
+ * The same shape and the same disagreement, with a level role instead. The exemption must NOT
139
+ * fire here: letting declaration order win for every rheostat was measured across the corpus and
140
+ * inverts four knobs that are right today, `boss-fa-1`'s `VOLUME` among them.
141
+ */
142
+ export declare const rheostatWithLevelRole: string;
143
+ /**
144
+ * The same pot with its wiper hanging off node 3, which nothing else touches, and its
145
+ * track carrying the signal from input to output instead.
146
+ *
147
+ * Electrically a fixed 10k in series: the two halves stay in series through a floating
148
+ * junction, so their sum is the whole track wherever the knob sits and the control
149
+ * cannot move a node voltage. It still compiles and still renders -- which is the
150
+ * defect, since `ibanez-ts808` shipped exactly this and rendered bit-identical output
151
+ * at `Drive=0.1` and `Drive=0.9`.
152
+ */
153
+ export declare const potWithFloatingWiper: string;
154
+ /** Anti-parallel diodes to ground after a series resistor. Forces Newton. */
155
+ export declare const diodeClipper: string;
156
+ /** Anti-parallel LEDs to ground after a series resistor. Moves clipping knee higher. */
157
+ export declare const ledClipper: string;
158
+ /**
159
+ * The clipper's upper diode carrying a catalogued zener part number and nothing else, so
160
+ * the diode law comes from the catalog's `zenerLaw` entry (1N4733A: 5.1 V knee, class
161
+ * forward defaults) rather than from the source.
162
+ */
163
+ export declare const zenerCatalogDiode: string;
164
+ /**
165
+ * The LED clipper's upper LED carrying a catalogued zener part number: the device the source
166
+ * declares as an LED must stay one under a catalog match, not come back a plain diode.
167
+ */
168
+ export declare const zenerLedKeepsLed: string;
169
+ /**
170
+ * The same zener part with the source's own forward parameters and knee typed, so every
171
+ * declared value must survive the catalog match and only absence is filled.
172
+ */
173
+ export declare const zenerDeclaredParameters: string;
174
+ /**
175
+ * Inverting amplifier: 10k in, 100k feedback, non-inverting leg at ground. Forces the
176
+ * auxiliary-constraint row, which is the same mechanism an ideal transformer needs.
177
+ * Gain is -R_f/R_in = -10 exactly, so the magnitude is a hand-checkable 10.
178
+ */
179
+ export declare const invertingAmplifier: string;
180
+ /**
181
+ * The same amplifier with the feedback **resistor replaced by a capacitor**: an integrator
182
+ * with no DC feedback path.
183
+ *
184
+ * Nothing pins the inverting node's operating point -- at DC the capacitor is an open
185
+ * circuit, so the output cannot influence its own input -- and any standing differential
186
+ * integrates. `ibanez-pql` ships this shape on its signal path and diverges to `8.55e+12 V`
187
+ * from a 9 V supply. Kept minimal deliberately: swapping one element is what separates a
188
+ * bounded stage from an unbounded one, and the fixture should show exactly that.
189
+ */
190
+ export declare const opampCapacitiveFeedbackOnly: string;
191
+ /**
192
+ * The same inverting amplifier with a 9 V supply present. Gain is still -10, but the
193
+ * output cannot leave the 0..9 V rails, so a hot input clips instead of producing
194
+ * a voltage the pedal could not make.
195
+ */
196
+ export declare const railedAmplifier: string;
197
+ /**
198
+ * An op-amp Schmitt-trigger astable: the railed amplifier with its non-inverting input moved onto
199
+ * a 10k/10k divider from its own output (positive feedback, hysteresis at half the swing) and its
200
+ * inverting input on a 100k / 100n timing network. It oscillates rail to rail.
201
+ *
202
+ * The case the op-amp step limiter's halving cap was not built for. At every edge the branch the
203
+ * Newton iterate starts on ceases to exist, the Jacobian points back at it, and the cap pins at its
204
+ * floor in a two-cycle; the runtime must reseed the comparator on its other rail rather than burn
205
+ * the iteration cap. Measured before the reseed: 11 of 9600 samples held at a 1024-iteration peak.
206
+ */
207
+ export declare const schmittTriggerAstable: string;
208
+ /**
209
+ * An op-amp powered from a rail of its own, spelled the way this corpus actually spells it.
210
+ *
211
+ * The circuit's supply set is +9 / -9, but this op-amp's `vPlus` sits on a separate +4 V node
212
+ * and its `vMinus` on ground, so the rails it should clip at are 4 and 0 -- neither of them a
213
+ * circuit extreme. While the rail lookup read only the exact spellings `vcc`/`vee`, this
214
+ * op-amp was given 9 and -9: a clipping ceiling more than twice its real one, on a part whose
215
+ * whole audible contribution in a drive pedal is where it clips.
216
+ *
217
+ * `boss-bd-2-blues-driver` is the corpus instance and it is not a corner case -- it declares
218
+ * three supply ports (9 V, 8 V, 4 V) and both its op-amps' `vPlus` is on the 8 V one, while
219
+ * the compiler handed them the 9 V inlet rail.
220
+ */
221
+ export declare const opampOnItsOwnRail: string;
222
+ /**
223
+ * The same op-amp with both supply pins on the one node.
224
+ *
225
+ * A degenerate pair -- `railHigh == railLow` -- which is not a narrow clipping window but a
226
+ * contradiction: the linear region has negative width and the output pins wherever the
227
+ * limiter lands. Reading a document's own supply pins can produce it, so `opampRails`
228
+ * requires an ordered pair and keeps the circuit set when it does not get one.
229
+ *
230
+ * Measured rather than hypothetical: `mxr-m117r-flanger`'s `U4` declares `pin8_vplus` and
231
+ * `pin4_vminus` and **both resolve to the same node** -- ground, carrying a declared +15 V,
232
+ * because that packet puts its `V15` rail component on the ground node. Eight op-amp stamps
233
+ * came out at `high = low = 15` before the invariant existed.
234
+ */
235
+ export declare const opampWithDegenerateRails: string;
236
+ /**
237
+ * An op-amp that names no inputs at all: `vPlus`, `vMinus`, `output`, in that order.
238
+ *
239
+ * The reason the supply vocabulary is split in two rather than being one list.
240
+ * `vplus`/`vminus` is how every corpus op-amp that declares supplies spells them -- but it is
241
+ * also the natural spelling for a bare differential pair, and `opampTerminals` falls back to
242
+ * declaration order when it cannot resolve a named input pair, so here those two terminals
243
+ * are wired as **the inputs**. Reading them as rails as well would clamp this op-amp to its
244
+ * own input voltages. The rails must come from the circuit set, +9 / -9.
245
+ *
246
+ * This is the invariant the guard protects -- a terminal cannot be both a signal input and a
247
+ * rail -- and it is a control no corpus census could have supplied, because the corpus
248
+ * happens to contain no such part. A vocabulary justified only by what the corpus does today
249
+ * is a vocabulary that breaks on the next document.
250
+ */
251
+ export declare const opampWithUnnamedInputs: string;
252
+ /**
253
+ * A divider whose lower leg can be shorted by a switch. Open, the output is the
254
+ * divider's half; closed, the lower leg is shorted and the output collapses. Forces
255
+ * topology that changes with a control, without a second netlist.
256
+ */
257
+ export declare const switchedDivider: string;
258
+ /**
259
+ * The same switch, but stating its contact state the way nine corpus switches do -- a
260
+ * `State` rather than a `Position` or a `Wipe`. Derived from `switchedDivider` by adding
261
+ * exactly one property, so a difference between the two can only be that property.
262
+ */
263
+ export declare const switchedDividerStatingClosed: string;
264
+ /** The amp corpus's spelling of the same fact: `SelectedState` rather than `State`. */
265
+ export declare const switchedDividerStatingSelectedState: string;
266
+ /**
267
+ * `SelectedState` carrying something that is not a contact state at all, which the corpus also
268
+ * does (`16 ohms`, `90w full-power silicon path`). It must be ignored rather than refused: unlike
269
+ * `State`, this field is not only about contacts.
270
+ */
271
+ export declare const switchedDividerStatingUnrelatedSelectedState: string;
272
+ /** A fuse, which conducts unless a source says it has blown. */
273
+ export declare const switchedDividerWithFuseRating: string;
274
+ /** The same again with a contact state no closed vocabulary contains. */
275
+ export declare const switchedDividerStatingUnknownContact: string;
276
+ /**
277
+ * The same unpositioned switch, wired the other way round: in series between the input
278
+ * port and the divider rather than shunting the midpoint to ground, so the only path
279
+ * from input to output runs through it. `switchedDivider`'s switch has a path around
280
+ * it; this one is the path. Both senses appear in the corpus under identical terminal
281
+ * naming, which is why the default cannot be a constant.
282
+ */
283
+ export declare const switchInSignalPath: string;
284
+ /**
285
+ * A JFET whose **drain sits below its source**, so `vds` is negative and only a symmetric channel
286
+ * conducts. The gate is at the input, the source is pulled up through 10k and the drain pulled
287
+ * down through 10k.
288
+ *
289
+ * A channel conducts both ways -- which is why a JFET works as an analogue switch -- and the
290
+ * runtime treated reverse as cutoff until 2026-08-12. With the old law the two resistors were
291
+ * independent and the operating point sat at 9 V and 0 V; symmetric, it solves to 7.42 V and
292
+ * 1.58 V, matching ngspice to 0.08%. `boss-hm-2` has three signal-path FETs spending most samples
293
+ * here.
294
+ */
295
+ export declare const jfetReverseBiased: string;
296
+ /**
297
+ * A supply with a protection diode wired the wrong way round: anode on the 9 V rail, cathode on
298
+ * ground, so the whole supply forward biases it.
299
+ *
300
+ * `ibanez-ts808` and `ibanez-ts9` both ship this, each carrying **1.074 A** through it while
301
+ * rendering a plausible level, because the runtime clamps the junction voltage instead of
302
+ * diverging. Reversing the two terminal roles turns this fixture into the correct arrangement,
303
+ * which is what the paired test checks.
304
+ */
305
+ export declare const diodeShortingSupply: string;
306
+ /** The same supply with the protection diode the right way round: cathode to the rail. */
307
+ export declare const diodeProtectingSupply: string;
308
+ /**
309
+ * A 9.1 V zener shunt regulator feeding a light load, supply below breakdown.
310
+ * 9 V through 470 ohm into 10k//1M: the rail must sag to ~8.59 V. Below
311
+ * breakdown a zener passes leakage only, so any rail at or above the 9 V
312
+ * supply is a current the diode law invented, not the circuit.
313
+ */
314
+ export declare const zenerRegulatedRail: string;
315
+ /**
316
+ * `zenerRegulatedRail` fed from 12 V, so the zener conducts and regulates. About 5.3 mA
317
+ * reaches it, just past the 5 mA at which a declared breakdown voltage is read, so the rail
318
+ * must sit within a few millivolts of 9.1 V. This pins the knee, not only the leakage.
319
+ */
320
+ export declare const zenerRegulatingRail: string;
321
+ /**
322
+ * The 5F1's V1A triode stage, built to match `whole-amp-5f1` exactly so its operating point is
323
+ * a validated oracle rather than a snapshot: 68k grid stopper from the input, 1M grid leak,
324
+ * 1.5k cathode to ground, 100k plate load to a 250 V rail.
325
+ *
326
+ * That experiment solves `Vk 1.251`, `Vp 166.6`, `Ip 0.83 mA`, and those three are consistent
327
+ * by hand (`1.251/1500 = 0.834 mA`; `250 - 0.834e-3 * 100e3 = 166.6`), so the fixture is
328
+ * checkable without trusting the experiment's solver.
329
+ */
330
+ export declare const triodeGainStage: string;
331
+ /**
332
+ * Emitter follower on a 9 V rail: 10k/10k base bias, 4k7 emitter, signal coupled in
333
+ * through 1u. Forces Ebers-Moll, junction limiting, a DC operating point, and a
334
+ * voltage source. Voltage gain is Re/(Re + re) with re = Vt/Ie, so just under unity.
335
+ */
336
+ export declare const emitterFollower: string;
337
+ /**
338
+ * A standard NPN common-emitter amplifier stage with 4-resistor bias.
339
+ *
340
+ * 9 V rail, RB1=100k, RB2=22k base divider, RC=4.7k collector load, RE=1k emitter resistor,
341
+ * 10u input/output coupling caps into a 1M load.
342
+ *
343
+ * Expected small-signal AC gain is -(RC || RLOAD) / (RE + re) ~ -4.53 V/V.
344
+ */
345
+ export declare const commonEmitterAmplifier: string;
346
+ export declare const commonEmitterAmplifierHalvedRe: string;
347
+ /**
348
+ * A DC-driven transformer secondary carrying a declared-voltage port, for the milestone that a
349
+ * transformer winding may borrow generated status from another winding of the same transformer.
350
+ *
351
+ * `VBATT` (10 V, DC) drives the primary; the secondary is fixed by the ideal transformer's own
352
+ * constraint at exactly `10 / 2 = 5 V`, independent of `RLOAD`, which only sets the current. The
353
+ * declared `BPLUS_PORT` states `6 V` -- a plausible chart value, deliberately not the true `5 V`
354
+ * -- so a promoted ideal rail and the real transformer answer are distinguishable by more than
355
+ * rounding, the same shape `tubeDiodeIntoLoadWithDeclaredPort` uses for the rectifier case.
356
+ *
357
+ * DC rather than AC on purpose, matching `tubeDiodeIntoLoad`'s own reasoning: it isolates the
358
+ * transformer-coupling question from the AC source and its own RMS-to-peak conversion, so a
359
+ * failure here is the coupling rule and nothing else.
360
+ */
361
+ export declare const transformerSecondaryWithDeclaredPort: string;
362
+ /** Ideal 1:2 step-up into a 10k load. Forces the four-terminal constraint row. */
363
+ export declare const stepUpTransformer: string;
364
+ /** Ideal 2:1 step-down transformer: turns ratio 2.0, so gain is 0.5. */
365
+ export declare const stepDownTransformer: string;
366
+ /** JFET source follower on a 9 V rail, gate at 0 V through 1M, 2k2 source. */
367
+ export declare const jfetFollower: string;
368
+ /**
369
+ * MOSFET source follower. Enhancement mode is off at zero gate bias, so unlike the
370
+ * JFET the gate is biased from the rail by a divider rather than referenced to
371
+ * ground. The divider is 10k/10k rather than 1M/1M for a reason worth recording: an
372
+ * uncharged coupling capacitor starts as a near-short, so the gate is dragged to 0 V
373
+ * and charges with tau = C * (R1 || R2). At 1M that is 0.5 s, far longer than any
374
+ * test window. The JFET fixture escapes this only because its bias point is 0 V, so
375
+ * it needs no settling at all. Same law as the JFET, opposite threshold sign.
376
+ */
377
+ export declare const mosfetFollower: string;
378
+ /** 1 H into 10k to ground, output across the resistor: an RL low pass at R/(2*pi*L). */
379
+ export declare const rlLowPass: string;
380
+ /** An IC with no registry entry. Forces the unsupported outcome. */
381
+ export declare const unknownChip: string;
382
+ /**
383
+ * An 8-pin chip a registry supplies as **two** sections, the shape a dual op-amp takes.
384
+ *
385
+ * Bare `pin1`..`pin8` names on purpose: a section indexes terminals positionally, so this proves
386
+ * the expansion does not depend on role tokens -- which is the whole reason sections exist, since an
387
+ * 8-pin dual op-amp has two outputs and no role token can name either unambiguously.
388
+ */
389
+ export declare const dualSectionChip: string;
390
+ /** The same IC, with a part number a fixture registry can supply a macro model for. */
391
+ export declare const knownChip: string;
392
+ /**
393
+ * The same IC again, with a part number a registry supplies a *lumped law* for.
394
+ *
395
+ * Three documents, one device, three answers -- and the document is identical apart from
396
+ * the part number: unsupported with no model, a macro region with one, an ordinary
397
+ * two-terminal element with another. That is the injected registry doing its job:
398
+ * opacity is a property of what the registry knows, never of the device.
399
+ */
400
+ export declare const resistiveChip: string;
401
+ /**
402
+ * The pinout rung, positive control: an `ic` whose only identity is two terminal roles,
403
+ * both covered by the fixture registry's groups (`cp1`, `vgg`). No part id, no declared
404
+ * type -- so it reaches the pinout rung and must match exactly.
405
+ */
406
+ export declare const chipPinoutExact: string;
407
+ /**
408
+ * The pinout rung, negative control: the same two roles plus `reset`, which the
409
+ * registry's groups do not cover. Presence alone would satisfy both groups and stamp a
410
+ * macro identity; the exact test must refuse it instead, because a role no group
411
+ * accounts for is evidence this is not that part.
412
+ */
413
+ export declare const chipPinoutSuperset: string;
414
+ /**
415
+ * The divider again: different coordinates, different component order, different
416
+ * names. Must yield the same netlist up to node relabeling.
417
+ */
418
+ export declare const resistorDividerRedrawn: string;
419
+ /**
420
+ * Two clippers that share only ground, so partitioning yields two nonlinear regions.
421
+ *
422
+ * The second pair sits on nodes 7 and 8, reachable from neither port, which is what
423
+ * makes it a second *region* rather than more devices in the first one. Needed because a
424
+ * failure counted per block cannot be told from one counted per sample until a document
425
+ * has two blocks that can fail on the same sample.
426
+ */
427
+ export declare const twoDiodeClippers: string;
428
+ /**
429
+ * The redrawn divider with its non-ground nodes renumbered.
430
+ *
431
+ * `resistorDividerRedrawn` varies coordinates, order, names and value notation but keeps
432
+ * node 1 and node 2, so it cannot show whether a node id is a label or a meaning. Here
433
+ * the same circuit calls them 5 and 7. Ground stays 0 because ground is not a label the
434
+ * document is free to choose -- the ground symbol decides it.
435
+ */
436
+ export declare const resistorDividerRelabelled: string;
437
+ /** Malformed: not valid interchange YAML. */
438
+ export declare const malformed = "schema: circuit-interchange/v3\n : : :\n";
439
+ /** A resistor whose value cannot be parsed. Must refuse rather than default. */
440
+ export declare const unparseableValue: string;
441
+ /** The divider with every node id quoted. A node id is a token, not a number. */
442
+ export declare const quotedNodeDivider: string;
443
+ /**
444
+ * The divider with named node ids and a ground symbol.
445
+ *
446
+ * The ground token is called `n_delay_clock_bus` on purpose. Nothing in that name says
447
+ * ground; the only thing that does is the ground symbol sitting on it. A rule that
448
+ * matched node names for `gnd` would pass this fixture while being wrong, and a rule
449
+ * that reads the symbol passes it for the right reason.
450
+ */
451
+ export declare const namedNodeDivider: string;
452
+ /**
453
+ * A structured quantity whose value is stated in kilohms.
454
+ *
455
+ * Ten kilohms, not ten ohms. The format library reports `value` in whatever unit it
456
+ * read, so a stage that trusts `value` without reading `unit` turns every `10k` in the
457
+ * corpus into 10 -- a wrong answer that still renders.
458
+ */
459
+ export declare const kilohmStructuredValue: string;
460
+ /** A taper code this stage cannot read, resolved by the library in base units. */
461
+ export declare const taperCodeStructuredValue: string;
462
+ /** Unreadable notation *and* a non-base unit: no answer is better than a wrong one. */
463
+ export declare const unreadableNonBaseUnit: string;
464
+ /**
465
+ * The same inverting amplifier with its op-amp inputs declared in the other order.
466
+ *
467
+ * Electrically identical: `inverting` is still node 3 and `noninverting` still node 0.
468
+ * Only the order the document lists them in changes, and the corpus really does write
469
+ * it both ways. A stage reading position instead of role exchanges the two inputs
470
+ * here, which inverts the stage while still rendering plausible audio.
471
+ */
472
+ export declare const invertingAmplifierReordered: string;
473
+ /**
474
+ * A two-terminal rheostat: 100k track, control at mid travel, feeding ground through
475
+ * a 100k series resistor. A linear sweep at 0.5 is 50k, so the divider reads 100k over
476
+ * 150k = 2/3. Hand-computed before it was measured.
477
+ */
478
+ export declare const rheostatDivider: string;
479
+ /**
480
+ * Two rheostats that are the two gangs of one physical knob.
481
+ *
482
+ * The declared control's id is `SAG_CTL`, but each gang names it the way the packets
483
+ * do: one by the control's `audioBinding.controlName`, the other by `PhysicalControl`.
484
+ * Matching only the id leaves both unbound and each invents a control of its own, so
485
+ * one knob silently becomes two that each move half the circuit.
486
+ */
487
+ export declare const gangedRheostats: string;
488
+ /** The same rheostat with a residual minimum, so the bottom of the sweep is not zero. */
489
+ export declare const rheostatWithMinimum: string;
490
+ /**
491
+ * A three-terminal pot wired as a rheostat -- its wiper node **is** its `lug3` -- with both
492
+ * track ends cut off from every DC reference: the far end (node 4) reaches a second op-amp's
493
+ * `vplus` rail node in one hop, and the input-end (node 5) reaches the first op-amp's
494
+ * inverting input in three.
495
+ *
496
+ * This is the narrow path of the pot's orientation evidence. Before 2026-08-25 `vplus` and
497
+ * `vminus` were seeds for that evidence's distance map, so the rail-adjacent end read one hop
498
+ * from an "op-amp input" that was in fact a supply rail: the track oriented to the rail end
499
+ * and the control swept the stage's gain the wrong way, silent at full. Nothing else saw it --
500
+ * the pot still swept, the circuit still converged, and at half travel both orientations agree
501
+ * because a linear taper's midpoint is its own mirror. Only the off-centre values differ, and
502
+ * they are written down in `expected.ts` from the divider arithmetic, not captured from a run.
503
+ *
504
+ * The second op-amp is electrically dead on purpose: its non-inverting input is grounded and
505
+ * its inverting input hangs off a single 100k to ground, so the whole pocket settles at zero
506
+ * and no floating island in the fixture needs gmin to land somewhere.
507
+ */
508
+ export declare const quietSeedRheostat: string;
509
+ /**
510
+ * A strapped-wiper rheostat treble shunt with **declared rotation** -- the
511
+ * `fulltone-ocd-v1.4` `Tone` class: the 47 n series cap feeds the free end
512
+ * (node 6), the wiper is strapped to the grounded end (node 0), and the ends
513
+ * declare `ccw`/`cw` instead of the ambiguous `end`.
514
+ *
515
+ * Without the declaration the quiet-distance inference puts position 0 at the
516
+ * grounded strapped end, landing the live leg on `upper` (`share = 1 -
517
+ * fraction`) so the bleed resistance *falls* as the knob rises -- the knob runs
518
+ * backwards. The declaration must outrank it: `end2` is the `ccw` free end, the
519
+ * live leg runs wiper-to-free-end on `lower` (`share = fraction`), and bleed
520
+ * resistance grows with the control.
521
+ */
522
+ export declare const rheostatWithDeclaredRotation: string;
523
+ /**
524
+ * The feedback-gain rheostat with its wiper strapped to the `output` node and the
525
+ * free end (declared first) reaching the `inverting` input -- the `boss-os-2`
526
+ * `VR3b` case, where declaration order ran the knob backwards. See
527
+ * `feedbackGainRheostat` for the wiring.
528
+ */
529
+ export declare const feedbackGainRheostat: string;
530
+ /**
531
+ * The same stage with the wiper strapped to the inverting-side node (6) instead of
532
+ * the `output` node. The wiper-strapped end is then the one far from a declared
533
+ * output, so the feedback-output rule's guard must refuse and leave the pot in its
534
+ * declaration-order orientation -- a negative control for the flip above. See
535
+ * `feedbackGainRheostat` for the wiring.
536
+ */
537
+ export declare const feedbackGainRheostatWiperOnInverting: string;
538
+ /**
539
+ * The divider plus a resistor, an LED and a footswitch that declare no terminals.
540
+ *
541
+ * The corpus is full of these: panel hardware from a photo, bias markers from a build
542
+ * document. They are named and described exactly like circuit elements, so the only
543
+ * honest reason to ignore them is the empty terminal list. Adding them must change
544
+ * nothing at all.
545
+ */
546
+ export declare const dividerWithUnconnectedParts: string;
547
+ /**
548
+ * The same emitter follower with its transistor terminals in the corpus's usual order.
549
+ *
550
+ * `collector,base,emitter` is how **282 of the corpus's 490 transistors** are written,
551
+ * against 15 for `base,collector,emitter`. Electrically identical to the fixture above
552
+ * -- the base is still node 3 -- but a stage reading position exchanges base and
553
+ * collector, the transistor never turns on, and the pedal renders silence.
554
+ */
555
+ /**
556
+ * The same follower with the supply's two terminals declared the other way round.
557
+ *
558
+ * Electrically identical -- node 5 is still the 9 V rail and node 0 is still the return --
559
+ * but read by position the rail inverts to -9 V, and the packet still compiles `ok`. A
560
+ * supply was the last asymmetric device in the pipeline read by declaration order, and a
561
+ * rail's sign is not a subtle error: every bias point in the circuit hangs off it.
562
+ */
563
+ export declare const emitterFollowerSupplyReversed: string;
564
+ /**
565
+ * The follower's rail stated the way most corpus rails are: one node, against ground.
566
+ *
567
+ * No fixture had this shape, so reading a supply's polarity by role -- which needs two
568
+ * terminals -- refused **34 packets** and took the corpus from 52 compiled to 19, with
569
+ * the whole unit suite still green. The scoreboard caught it; no test could.
570
+ */
571
+ export declare const emitterFollowerRailToGround: string;
572
+ /**
573
+ * The same supply stated twice, the second time reversed.
574
+ *
575
+ * Two rows asserting opposite signs across one pair of nodes is a contradiction, not a
576
+ * duplicate -- and keying the dedup on `positive:negative` made the reversed twin look
577
+ * like a different supply, so both were stamped.
578
+ */
579
+ export declare const contradictorySupplyTwin: string;
580
+ export declare const emitterFollowerReordered: string;
581
+ /**
582
+ * The same follower with the BJT's own IS and BF typed, so the bjt law runs on declared
583
+ * values and `bjt-law-default-parameters` stays silent. IS/BF are the corpus spellings
584
+ * (`sola-sound-tone-bender-professional-mkii`, `electro-harmonix-lpb-1`); the values are
585
+ * the law's own defaults restated, so the program is unchanged and only the disclosure moves.
586
+ */
587
+ export declare const bjtTypedParameters: string;
588
+ /**
589
+ * The pot divider with the wiper declared last instead of in the middle.
590
+ *
591
+ * `anode,cathode,wiper` is 64 of the corpus's 331 three-terminal pots. Reading position
592
+ * 2 as the wiper makes the grounded end the wiper, which shorts both halves of the
593
+ * track to ground and cuts the output off from the input entirely.
594
+ */
595
+ export declare const potDividerWiperLast: string;
596
+ /**
597
+ * The divider with a third jack, and no jack declaring a role.
598
+ *
599
+ * `Circuit.Jack` is the corpus's untyped catch-all: it absorbs DC inlets, remote
600
+ * sockets and second outputs alongside the real pair. The roles here are only in the
601
+ * names, which no stage may read, so there is nothing to resolve a port from. The
602
+ * third jack is declared last on purpose -- a positional fallback would take it as the
603
+ * output, which is how a DC inlet came to be read as a pedal's output.
604
+ */
605
+ export declare const untypedJacks: string;
606
+ /**
607
+ * Jacks whose declared roles reach them only through the panel binding.
608
+ *
609
+ * Both jacks are typed `Circuit.Jack`, so the type name says nothing. The roles are
610
+ * declared against panel-facing ids (`INPUT_JACK`, `OUTPUT_JACK`) and the panel binds
611
+ * those to the components — which is how most of the corpus states it, and it is a
612
+ * chain no type-name table can substitute for.
613
+ *
614
+ * A third jack carries `role: direct-output` and is declared **first**, so anything
615
+ * choosing by position or by "the first jack that looks like an output" takes the dry
616
+ * send instead of the effect output.
617
+ */
618
+ export declare const jacksTypedOnlyByRole: string;
619
+ /**
620
+ * A single-pole, two-throw selector routing the input to one of two resistors.
621
+ *
622
+ * The throws are declared in the opposite order to the options — `throws` are
623
+ * `bright,dark` while `Options` is `Dark,Bright` — because three corpus selectors do
624
+ * exactly that, and taking the option's index would select the other throw. `Position`
625
+ * names the option rather than giving a number, which is how the corpus states it and
626
+ * why `Number(position)` silently becomes half travel.
627
+ */
628
+ export declare const selectorRouting: string;
629
+ /**
630
+ * The same selector with its common terminal declared **last**.
631
+ *
632
+ * `throw0,throw1,common` is a real corpus shape, and `marshall-blues-breaker` wires its
633
+ * input jack to exactly such a switch. Attaching throws to a preceding common builds a
634
+ * pole out of the first throw and drops the real common entirely — which left the input
635
+ * jack's node connected to nothing and the pedal silent, while every stage reported
636
+ * success.
637
+ */
638
+ export declare const selectorCommonLast: string;
639
+ /**
640
+ * Two jacks whose third terminals carry the **same role name** and opposite senses.
641
+ *
642
+ * `IN.switch` is where the battery's negative landed, so it has to make against the
643
+ * sleeve or the supply has no return and the whole circuit floats. `OUT.switch` carries
644
+ * signal, and making *it* against the sleeve shorts the output to ground.
645
+ *
646
+ * One name, two required answers, so no contact-name vocabulary can decide this. The
647
+ * fixture exists because a name table was tried and shorted 13 corpus jacks, five of
648
+ * them supply rails.
649
+ */
650
+ export declare const switchedJackContacts: string;
651
+ /**
652
+ * A power jack that strands the supply behind its switch contact.
653
+ *
654
+ * `BT1.positive` and `PWR.tip` are alone on node 5, and the circuit's rail is node 6 on
655
+ * the jack's contact. This is the battery-saving arrangement: the contact routes the
656
+ * battery to the pedal and inserting an adaptor breaks it. `boss-od-3` and `boss-mt-2`
657
+ * are exactly this shape.
658
+ *
659
+ * The element has to be tip-to-contact. Closing the contact to the *sleeve* instead is
660
+ * what a contact-name table does, and it shorts the 9 V rail to ground; leaving it open
661
+ * strands the supply and the whole pedal solves with every node at 0 V. So the assertion
662
+ * that matters is which terminal it makes against, not that a law exists.
663
+ */
664
+ export declare const powerJackStrandedSupply: string;
665
+ /**
666
+ * Wired jacks and a ground, and every other component declaring no terminals.
667
+ *
668
+ * `boss-ps-2` is exactly this: 223 real, electrically active parts that are correctly
669
+ * dropped for having no terminals, leaving nothing to solve. Every stage succeeds and
670
+ * the result is a program with no blocks, which can only ever render silence.
671
+ */
672
+ export declare const nothingToExecute: string;
673
+ /**
674
+ * The soft-clipping overdrive stage: anti-parallel diodes across an op-amp's feedback
675
+ * resistor, on rails. This is what a Tube Screamer, an OD-1 and a Blues Breaker all
676
+ * are, and the pipeline had no fixture for it.
677
+ *
678
+ * It is also the shape that exposes an undamped op-amp. A diode limits its own Newton
679
+ * step; an op-amp at a gain of 1e5 did not, so the two fought and the iterate cycled
680
+ * rail to rail forever. Every simpler op-amp fixture here converges with or without
681
+ * that damping, including one clipping hard against its rails -- only the two
682
+ * nonlinearities in one loop show it.
683
+ */
684
+ export declare const clippingOverdriveStage: string;
685
+ /**
686
+ * The hybrid the pipeline has never had a case for: analog, then a macro, then analog.
687
+ *
688
+ * An input shell feeds the delay memory's `in`; its `out` feeds an output shell; and a
689
+ * separate RC clock network sits on `cp1`, which is what sets a bucket brigade's delay
690
+ * time. So three analog regions each share exactly one node with the macro, and none
691
+ * shares a node with another — the macro is the only thing between input and output.
692
+ *
693
+ * Three things this is the first case for, all of them written and none exercised:
694
+ *
695
+ * - `partition.ts` computes `dependencies[macro] = analog regions sharing a node`, and
696
+ * every case so far has produced `[]`.
697
+ * - `MacroModel.portTerminals` is declared in the types and read nowhere.
698
+ * - `Block`'s macro variant has no `inputNode`/`outputNode`, so audio cannot pass
699
+ * through it. That is the defect this fixture exists to hold still: it compiles, the
700
+ * macro is placed correctly, and the output region receives nothing.
701
+ *
702
+ * When the operator format lands, the acceptance criterion inverts and this renders.
703
+ */
704
+ export declare const hybridDelayPedal: string;
705
+ /**
706
+ * `hybridDelayPedal` with a control-bearing trim pot added across the clock network's own
707
+ * nodes -- the `parameter` port's negative control. `region.controls` is no longer empty for
708
+ * the clock region, so `couple.ts`'s purity gate must refuse to classify the derivation as
709
+ * `parameter`, per the spec's safe default (missing or negative evidence -> never `parameter`).
710
+ * The macro still compiles and still passes audio; only `parameter` on its block should differ.
711
+ */
712
+ /**
713
+ * S1's delay-model controls: the same pedal with one thing changed each time.
714
+ *
715
+ * The BBD delay model is **capacity-based** -- the document's `DelayMs`, converted to samples at
716
+ * the host's rate, then scaled by the `parameter` port's voltage ratio. That decision is recorded
717
+ * in `thoughts/shared/plans/2026-08-25-v2-bbd-pipeline-readiness.md` §5, and these fixtures are
718
+ * what make it a behavioural fact rather than a note: each one moves exactly one input and the
719
+ * delay has to respond, or not, in the one way the model predicts.
720
+ *
721
+ * Every prediction below is hand-derived before measuring, not read off the output:
722
+ * 3 ms x 48 kHz = 144 samples; 6 ms = 288; a clock rail halved against an unchanged 9 V
723
+ * reference halves the scale to 72; and the resolver's stand-in is 50 ms = 2400.
724
+ */
725
+ export declare const hybridDelayPedalLongerDelay: string;
726
+ /**
727
+ * `hybridDelayPedal` with `R_OUT_LOAD` changed from 1meg to 10k.
728
+ *
729
+ * S2 negative control: the macro output has an internal 1k impedance and 10k series resistor.
730
+ * Dividing into a 10k load yields an output divider of 10k/(10k + 10k + 1k) = 10/21 (~0.4762),
731
+ * shifting total gain from ~0.4470 to ~0.2152, verifying that output loading is modeled.
732
+ */
733
+ export declare const hybridDelayPedalLoadedOutput: string;
734
+ /**
735
+ * The clock rail halved, 9 V to 4.5 V, against a `parameterReferenceVolts` still 9.
736
+ *
737
+ * This is the coupling the delay model *does* have, and naming it is the honest complement to
738
+ * the frequency-independence assertion: the `parameter` port reads the clock node's **voltage**
739
+ * and scales the capacity by `|volts| / referenceVolts`. Nothing reads a frequency anywhere.
740
+ * A real BBD's delay is `stages / (2 * f_clock)`, so this is a capacity model with a voltage
741
+ * trim, not a clock model -- which is exactly what §5 chose and what S6 revisits.
742
+ */
743
+ export declare const hybridDelayPedalHalfClockRail: string;
744
+ /**
745
+ * `DelayMs` removed while the `cp1` parameter terminal remains.
746
+ *
747
+ * The resolver substitutes a 50 ms stand-in rather than refusing, on the grounds that a part
748
+ * with a clock terminal has *somewhere* the delay could have come from. **This fixture exists to
749
+ * pin that number as a deliberate, visible choice rather than a silent one** -- it is the
750
+ * mechanism by which all four of the Deluxe Memory Man's MN3008 macros resolve to
751
+ * `delaySeconds: 0.05` while the document declares no delay at all, and it is BBD plan S1's
752
+ * open question: a stand-in the size of a real echo is indistinguishable from a modelled one.
753
+ */
754
+ export declare const hybridDelayPedalNoDeclaredDelay: string;
755
+ /**
756
+ * `DelayMs` removed *and* the `cp1` parameter terminal removed.
757
+ *
758
+ * With no declared delay and no clock terminal there is nothing left to derive a delay from, so
759
+ * the pipeline refuses by name. The pair with the fixture above is the whole point: the same
760
+ * missing property is a 50 ms stand-in or a refusal depending on one terminal, and a reader
761
+ * should be able to see which lever decides it.
762
+ */
763
+ export declare const hybridDelayPedalNoDelayNoClock: string;
764
+ /**
765
+ * A trim pot across the clock network's own nodes, so that region is no longer control-free.
766
+ *
767
+ * **"Movable" is about the purity gate, not about a derived clock.** This is the negative
768
+ * control for `couple.ts`'s parameter-port rule: with a control in the clock region the
769
+ * derivation may no longer be classified as `parameter`, and the port falls back to null while
770
+ * audio stays wired. It deliberately does *not* produce a `clockControl` -- its part is the
771
+ * synthetic `FIXTURE-DELAY-1`, with no clock driver to derive from, so its delay tap runs in
772
+ * `capacity` mode. Anyone scanning fixture names for clock coverage wants
773
+ * `bbdClockDerivedDelay` or `pt2399ClockDerivedDelay` instead.
774
+ */
775
+ export declare const hybridDelayPedalMovableClock: string;
776
+ /**
777
+ * `hybridDelayPedal` with a resistor joining the input shell's node (3, the macro's audio-in
778
+ * tap) directly to the output shell's node (2, downstream of the macro's audio-out write-back)
779
+ * -- the region SCHEDULE's coincident case. This merges what were two separate analog regions
780
+ * into one, so that ONE region is both the macro's driver and its downstream: an unbuffered
781
+ * dry-blend/regen network, exactly the topology all three real delay/BBD packets that clear
782
+ * device-law identification (`pt2399-delay`, `boss-ce-2`, `boss-ce-5`) actually wire.
783
+ *
784
+ * Refused by `link.ts`'s `topologicalOrder` from 2026-08-14's first landing of clause 3 through
785
+ * the same day's correction: a genuine 2-cycle (the region must run both before the macro, for
786
+ * audio-in, and after it, for the write-back) with both directions added unconditionally. Now
787
+ * resolved with a documented one-sample write-back lag in exactly this case -- see the
788
+ * "coincident case" comment in `couple.ts` for the mechanism -- so this fixture **compiles**,
789
+ * which is what changed; `hybridDelayPedalChainedMacroCycle` below is the fixture that still
790
+ * refuses.
791
+ */
792
+ export declare const hybridDelayPedalCyclicSchedule: string;
793
+ /**
794
+ * `hybridDelayPedal` with a SECOND macro, `U2`, chained the opposite way round: its audio-in
795
+ * sits on node 2 (U1's downstream region) and its audio-out sits on node 3 (U1's own driver
796
+ * region) -- a loop through two DISTINCT regions and two DISTINCT macros, not one macro whose
797
+ * own driver and downstream coincide. `couple.ts`'s coincident-case lag only applies when a
798
+ * single macro's driver and downstream are the SAME region (a direct check on that one macro's
799
+ * own edges); it does not and should not paper over a longer cycle chained through a second
800
+ * macro, so this must still refuse exactly as before -- the negative control the resolved
801
+ * `hybridDelayPedalCyclicSchedule` above can no longer serve now that it compiles.
802
+ */
803
+ export declare const hybridDelayPedalChainedMacroCycle: string;
804
+ export declare const potAntiLogarithmicTaper: string;
805
+ export declare const potReverseLinearTaper: string;
806
+ export declare const potLogarithmicTaper: string;
807
+ export declare const potLinearTaper: string;
808
+ /** A manufacturer's own curve. We do not know its shape, so it must not be guessed. */
809
+ export declare const potUnknownTaperCode: string;
810
+ /**
811
+ * The source recording that it does **not** state a taper, which is a complete statement rather
812
+ * than a marking this stage failed to read. 18 corpus declarations are this shape.
813
+ */
814
+ export declare const potSourceUnmarkedTaper: string;
815
+ /**
816
+ * A taper `@vessel-dsp/core`'s format carries and this runtime has no curve for. `TaperKind` has
817
+ * four laws; `PotentiometerTaper` has seven. Stating one of the other three is a real taper the
818
+ * render cannot produce, which is a different thing from an unreadable marking.
819
+ */
820
+ export declare const potSteppedTaper: string;
821
+ /** A pot wired as a two-terminal rheostat, which lowering cannot stamp. */
822
+ export declare const rheostatPot: string;
823
+ /**
824
+ * One control on two pots in different regions, which the partition invariant refuses.
825
+ * A dual-gang pot is the real circuit this shape comes from.
826
+ */
827
+ export declare const straddlingControl: string;
828
+ /**
829
+ * A mains inlet feeding a resistive divider, and the only fixture whose supply moves.
830
+ *
831
+ * Written in the shape the amp packets use: the voltage and the frequency are both structured
832
+ * `{raw, value, unit}` with prose in `raw`, so this exercises the reading a bare `"10"` would
833
+ * not. `hot`/`neutral` are the mains pair those packets declare.
834
+ *
835
+ * Hand-computable, and the numbers are chosen so the supply's own impedance is *visible* in the
836
+ * answer: `SUPPLY_SOURCE_OHMS` is 1, so the loop is `1 + 999 + 1000 = 2000` ohms and the
837
+ * midpoint sits at exactly half the EMF. A stamp that dropped `sourceOhms` would read
838
+ * `1000/1999` and be wrong in the fourth digit.
839
+ *
840
+ * The input jack is deliberately alone on node 1. This circuit has no signal path -- it is a
841
+ * supply -- and an input source stamped onto a divider node would force the voltage this
842
+ * fixture is measuring.
843
+ */
844
+ export declare const acMainsDivider: string;
845
+ /**
846
+ * The same document with **only the frequency removed**, which is the whole discriminator.
847
+ *
848
+ * The negative control for the AC source: one deleted property has to turn a sine into a
849
+ * battery, and nothing else about the document changes. A `derive` rather than a copy, so the
850
+ * two cannot drift apart silently.
851
+ */
852
+ export declare const dcMainsDivider: string;
853
+ /**
854
+ * A tube rectifier passing DC into a load, which makes its space-charge law hand-checkable.
855
+ *
856
+ * A 300 V rail through 100 ohms into the plate, cathode into 10k. At the solved point two
857
+ * independent equations must both hold — the load's `I = V(cathode)/10k` and the tube's
858
+ * `I = K * (V(plate) - V(cathode))^1.5` — so the fixed point of
859
+ * `I = K * (300 - 10101*I)^1.5` is the answer without trusting any solver: `I = 27.9 mA` at a
860
+ * `18.4 V` drop, leaving the cathode at `278.8 V`. (The 10101 is 10k of load plus 100 ohms of
861
+ * series resistance plus the rail's own 1 ohm.)
862
+ *
863
+ * DC rather than mains on purpose: it isolates the tube's law from the AC source and the
864
+ * reservoir, so a failure here is the law and nothing else.
865
+ */
866
+ export declare const tubeDiodeIntoLoad: string;
867
+ /**
868
+ * The same rectifier, with a declared-voltage port added on the cathode/load node.
869
+ *
870
+ * `BPLUS_PORT` states `280 V` on node 2 — a plausible nominal chart value, deliberately not the
871
+ * `278.8 V` the tube law and the 10k load actually solve to, so a promoted ideal source and a
872
+ * real rectifier answer are distinguishable by more than rounding. Before this milestone,
873
+ * `voltagePortRails` had no way to see that node 2 is already generated (a `tube-diode` did not
874
+ * count as DC-conducting), so it promoted this port to an ideal `280 V` rail, deleting
875
+ * `V1_RECT`/`RLOAD`/`RSERIES` from the answer entirely. The fix is exactly the claim under test:
876
+ * the solved cathode voltage must still be `278.8 V` from the tube law, not the declared `280 V`.
877
+ */
878
+ export declare const tubeDiodeIntoLoadWithDeclaredPort: string;
879
+ export declare const tubeDiodeReversed: string;
880
+ /**
881
+ * The five-terminal dual rectifier the amp corpus actually declares: `plate_a`, `plate_b`, one
882
+ * `cathode_filament`, and two heaters that carry no signal.
883
+ *
884
+ * Both plates are fed from the same 300 V rail through their own 150 ohms, which is a stand-in
885
+ * for the centre-tapped secondary the real supplies use — this fixture is about how one component
886
+ * becomes two elements, not about the winding. The heater nodes are wired to nothing else, which
887
+ * is exactly how they appear in the packets.
888
+ */
889
+ export declare const dualPlateTubeRectifier: string;
890
+ /**
891
+ * A working divider plus a pot in its **own galvanic island**, which the emitted program
892
+ * therefore does not execute.
893
+ *
894
+ * Every earlier way of being a dead knob is deliberately excluded: `VR9`'s wiper is loaded by
895
+ * `R91` so it is not floating, and every one of the island's nodes is shared, so no device is
896
+ * joined to nothing. The pot is real, grounded through `R92`, and its coefficients move with
897
+ * the knob -- and its region owns neither jack, so nothing it computes can reach the output
898
+ * and `link` leaves it out of the execution order.
899
+ *
900
+ * The island touches the signal path only at ground, which is what makes it a separate region:
901
+ * stage 4 groups by shared *non-ground* node. Its prose says the opposite, as every fixture's
902
+ * does -- `MASTER_VOLUME`, `role: output-level`, a description calling it the output control --
903
+ * so a stage reading names would report the most important knob on the pedal.
904
+ */
905
+ export declare const controlInUnexecutedRegion: string;
906
+ /**
907
+ * The negative control for the fixture above: the same island, returned to the **output node**
908
+ * instead of to ground.
909
+ *
910
+ * One node changes, and with it the island stops being an island -- it joins the signal path's
911
+ * region, gets scheduled, and the knob really does load the output. Nothing else differs, so a
912
+ * warning that fires on both is reporting the pot rather than the schedule.
913
+ */
914
+ export declare const controlInScheduledRegion: string;
915
+ /**
916
+ * The same mains inlet drawing amps instead of milliamps, for the supply-current telemetry.
917
+ *
918
+ * `3 ohms` and `1 ohm` in place of the divider's kilohms, so with the supply's own ohm the loop is
919
+ * `5 ohms`. The declared `10 V` is read as RMS by the `ac-source` law's convention and converted
920
+ * to `10 * sqrt(2)` V peak, so the peak current is exactly `10 * sqrt(2) / 5 = 2.8284... A` — a
921
+ * draw three orders of magnitude past anything a pedal makes, and one the **operating point
922
+ * cannot see at all**, because it evaluates an AC source at its `t = 0` zero.
923
+ */
924
+ export declare const acSupplyDrawingAmps: string;
925
+ /**
926
+ * A bridge rectifier as one component, which is what four of the amp corpus's and two of the
927
+ * pedal corpus's diode components are: `[ac_a, ac_b, positive, negative]`.
928
+ *
929
+ * Resistive load and **no reservoir**, deliberately: the rail then follows the rectified sine
930
+ * instantaneously, so every sample is hand-computable with no settling to wait for. At the sine's
931
+ * peak the loop is `20 V = rail + two junction drops`, and with the class-default silicon junction
932
+ * (`IS = 2.52e-9`, `N = 1.752`) carrying `rail/1k`, that fixed point is `18.57 V`:
933
+ * `2 * 1.752 * 0.025852 * ln(0.01857/2.52e-9) = 1.43 V` of drop.
934
+ *
935
+ * The **negative** peak is the point of the fixture. A bridge rectifies both halves, so the rail
936
+ * must read the same there; the single junction this used to lower to gives a rail of nothing at
937
+ * both peaks, with the two DC terminals touching nothing at all.
938
+ */
939
+ export declare const bridgeRectifier: string;
940
+ /**
941
+ * The same bridge with its four terminals named as a three-pin clamp package, which is a shape
942
+ * the role table deliberately does not cover.
943
+ *
944
+ * The refusal control. Before the multi-junction reading, a diode component naming no `anode`
945
+ * fell through to declaration order and lowered to a junction between its **first two**
946
+ * terminals, whatever they were — so this compiled, rendered, and modelled a device the source
947
+ * does not contain. `pin1_`/`pin2_`/`pin3_` are stripped by the role folding exactly as stage 1
948
+ * strips them (`^pin\d+`, which also eats the leading `5` in `pin2_5a_clamp`), so the tokens
949
+ * this refuses on are `groundclamp`, `aclamp` and `signal` — checked against
950
+ * `electro-harmonix-holy-grail`'s real `D1`, the shape this fixture is transcribed from.
951
+ */
952
+ export declare const clampPackageDiode: string;
953
+ /**
954
+ * A dual rectifier sharing one cathode, declared under `kind: diode` with tube electrode names —
955
+ * the shape eight of the amp corpus's rectifiers use (`plate_a`, `plate_b`, `cathode`, plus two
956
+ * heaters that carry no signal).
957
+ *
958
+ * The same winding as the bridge above, wired the way a shared-cathode pack is: `plate_a` driven,
959
+ * `plate_b` at ground, cathode into the load. So it rectifies **one** half — at the positive peak
960
+ * the loop is `20 V = rail + one junction drop`, giving `19.28 V`, and at the negative peak the
961
+ * rail is nothing. That is the pair of numbers that tells this topology from the bridge's, which
962
+ * reads the same at both peaks.
963
+ *
964
+ * Two junctions, and **both keep the silicon law the declared kind asks for**. The lowering fixes
965
+ * the wiring; it does not read a vacuum device out of a terminal name.
966
+ */
967
+ export declare const dualAnodeRectifier: string;
968
+ /**
969
+ * A transformer with one primary and one untapped secondary, specified by winding voltages
970
+ * rather than by a `Ratio` or an impedance pair -- the "2-winding case". `PrimaryVoltage` (not
971
+ * `Primary`) is the spelling declared here, and as of 2026-08-14 nothing reads it: a winding
972
+ * specified this way is driven at its own stated voltage and no primary is modelled. It is
973
+ * left in the fixture deliberately, as the check that it is now inert.
974
+ *
975
+ * `MAINS` carries the frequency the driven winding runs at. A transformer does not change
976
+ * frequency, so a document with no AC supply in it states none and refuses.
977
+ */
978
+ export declare const twoWindingVoltageDerivedTransformer: string;
979
+ /**
980
+ * A transformer with one primary and one **centre-tapped** secondary, specified by a single
981
+ * per-half winding voltage and isolated from any other winding so the centre-tap arithmetic is
982
+ * the only thing under test. `Primary` (not `PrimaryVoltage`) is the spelling declared here,
983
+ * and like `twoWindingVoltageDerivedTransformer`'s it is now inert.
984
+ */
985
+ export declare const centerTappedVoltageDerivedTransformer: string;
986
+ /**
987
+ * A power transformer with three secondaries off one primary -- a centre-tapped HV winding
988
+ * plus two untapped windings -- shaped exactly like `fender-5e3-deluxe-tweed`'s
989
+ * `PT_5E3_POWER_TRANSFORMER` but with round numbers. Three windings at three different
990
+ * voltages off one core is what no single `Ratio` can express, and what the driven-winding
991
+ * lowering handles without needing a primary at all.
992
+ */
993
+ export declare const powerTransformerVoltageDerived: string;
994
+ /**
995
+ * A transformer whose typed winding voltages include one this stage does not recognise --
996
+ * `ScreenSecondary`, typed exactly like the recognised ones but under a spelling nothing
997
+ * reads -- alongside a `FilamentSecondary` that *is* recognised. The v2-transformer-ratio
998
+ * milestone's refusal case: this must refuse by name rather than silently deriving a ratio
999
+ * from the winding it does recognise and dropping the one it does not.
1000
+ */
1001
+ export declare const transformerUnlistedWindingSpelling: string;
1002
+ /**
1003
+ * A transformer with a **centre-tapped primary** (the ordinary push-pull output-transformer
1004
+ * shape) and one untapped secondary, its ratio typed as an impedance pair -- the
1005
+ * v2-transformer-primary-tap milestone's core case. `PrimaryImpedance`/`SecondaryImpedance` give
1006
+ * `declaredRatio = sqrt(4000/10) = 20`; the shared-primary reduction has no single reference
1007
+ * winding to pivot on (the primary itself is tapped), so it swaps to the untapped secondary and
1008
+ * halves+inverts the ratio to `2/20 = 0.1` per half.
1009
+ */
1010
+ export declare const tappedPrimaryOutputTransformer: string;
1011
+ /**
1012
+ * Same tapped primary as `tappedPrimaryOutputTransformer`, plus an alternate impedance tap
1013
+ * (`secondary_8`) that connects to nothing else in the document -- `vox-ac30-top-boost`'s exact
1014
+ * shape, "8 Ω alternate source-visible tap" beside its typed, wired 16 ohm one. The
1015
+ * v2-transformer-primary-tap milestone's dangling-tap case: this must compile with exactly the
1016
+ * same two stamps as `tappedPrimaryOutputTransformer`, silently dropping the extra terminal
1017
+ * rather than refusing or guessing a ratio for it.
1018
+ */
1019
+ export declare const danglingAlternateTapTransformer: string;
1020
+ /**
1021
+ * The negative control for `danglingAlternateTapTransformer`: the same alternate tap, but wired
1022
+ * to a load like any other winding would be. Connectivity now says it is *not* dangling, so this
1023
+ * must refuse by name rather than silently dropping a terminal that is actually in use.
1024
+ */
1025
+ export declare const connectedAlternateTapTransformer: string;
1026
+ /**
1027
+ * A tank-shaped shell whose part number is not a tank's, so it lowers as an ordinary transformer
1028
+ * -- `fender-super-reverb`'s `SRC_REVERB_TANK_4AB3C1B` terminals with `125A9A` on the label.
1029
+ *
1030
+ * Its coils declare `drive`/`pickup`, which is what a tank's coils are: neither transforms the
1031
+ * other's voltage. This is the fixture that proves `drive` is treated as the primary on the
1032
+ * ordinary-transformer path, so a mislabelled tank still lowers instead of refusing for want of a
1033
+ * winding called `primary`. `InputImpedance`/`OutputImpedance` remain property-side synonyms for
1034
+ * `PrimaryImpedance`/`SecondaryImpedance` (`parametersFor` in `netlist.ts`).
1035
+ */
1036
+ export declare const reverbTankInputOutputTransformer: string;
1037
+ /**
1038
+ * `tappedPrimaryOutputTransformer` plus a **third** impedance tap, `secondary_4`, dangling
1039
+ * (connected to nothing else) beside the wired reference winding -- the same shape
1040
+ * `danglingAlternateTapTransformer` tests for `secondary_8`. Must compile to the identical two
1041
+ * stamps as the base fixture -- no third stamp, no stamp touching node 5.
1042
+ */
1043
+ export declare const danglingSecondary4Transformer: string;
1044
+ /**
1045
+ * `connectedAlternateTapTransformer` (its `secondary_8` wired to a load) plus a **third** tap,
1046
+ * `secondary_4`, dangling.
1047
+ *
1048
+ * The refusal must fire exactly as it does with no `secondary_4` present -- not be masked,
1049
+ * changed, or made order-dependent by the extra tap. It used to prove that two alternate taps
1050
+ * held separate winding groups and so could not overwrite one another's node; they are one coil's
1051
+ * taps now, and the property that matters is that the connectivity test finds the loaded tap
1052
+ * regardless of how many others the coil declares.
1053
+ */
1054
+ export declare const distinctAlternateTapsTransformer: string;
1055
+ /**
1056
+ * A tapped primary with no other complete, untapped winding to pivot the shared-primary
1057
+ * reduction on -- only a shield beside it, which declares `role: shield` and belongs to no coil.
1058
+ * The v2-transformer-primary-tap milestone's "no reference available" refusal case.
1059
+ *
1060
+ * States its ratio as a typed `TurnsRatio` rather than as an impedance pair, because a rating
1061
+ * belongs to a coil and the secondary it would rate is exactly what this document does not
1062
+ * declare. That is also what keeps the fixture reaching the refusal it is here for: a document
1063
+ * stating no ratio at all refuses earlier, in `requireWindingSpecification`.
1064
+ */
1065
+ export declare const tappedPrimaryNoReferenceTransformer: string;
1066
+ /**
1067
+ * A divider whose midpoint (the output) is formed by a T-junction in the middle of a
1068
+ * diagonal wire. `wireAxisAligned` is the same circuit with that wire redrawn horizontal,
1069
+ * so the two must yield the same netlist up to node relabeling.
1070
+ *
1071
+ * The midpoint terminals sit on the segment, not at an endpoint, so they are visible only
1072
+ * through the point-on-segment test. Before diagonal segments were recognised that test
1073
+ * returned false for them, the midpoint was dropped as unconnected, and this document
1074
+ * refused where its horizontal sibling compiled.
1075
+ */
1076
+ export declare const wireDiagonal: string;
1077
+ /**
1078
+ * `wireDiagonal` redrawn with the midpoint wire horizontal. The midpoint terminals still
1079
+ * sit in the middle of the segment; only the segment's angle changes. The two must resolve
1080
+ * to the same netlist up to node relabeling, which is the invariant the angle must not
1081
+ * break.
1082
+ */
1083
+ export declare const wireAxisAligned: string;
1084
+ /**
1085
+ * NE570 compandor terminal-mapping contract.
1086
+ *
1087
+ * Sixteen bare-pin terminals in strict sequential `pin1`..`pin16` order, each on a
1088
+ * distinct node (10–25). The part catalog binds section A to [rectIn=pin2,
1089
+ * rectCap=pin1, cellIn=pin5/INV_IN, output=pin7] and section B to the channel-2
1090
+ * pins. This fixture asserts that binding is stable: a catalogue edit that
1091
+ * re-points any of the four section terminals fails here rather than surfacing
1092
+ * as a silent audio defect months later.
1093
+ */
1094
+ export declare const ne570TerminalMap: string;
1095
+ /**
1096
+ * The datasheet's own expander, wired exactly as onsemi NE570/D Rev. 4 Figure 6 draws
1097
+ * it, and the reason this fixture exists rather than a bare transconductance probe: the
1098
+ * datasheet states a closed form for this circuit's gain, so the reference is external
1099
+ * to our code rather than a number read off our own output.
1100
+ *
1101
+ * GAIN = 2 * R3 * VIN(avg) / (R1 * R2 * IB)
1102
+ *
1103
+ * The input drives the rectifier (pin 2) and the gain cell (pin 3) through separate
1104
+ * coupling caps; pin 6 is tied to pin 7, which is what makes the internal 20k R3 the
1105
+ * op-amp's feedback resistor. Both couplings are 1 uF into 10k/20k, corners at 16 Hz and
1106
+ * 8 Hz, so at the 1 kHz test tone they pass unity and the gain is the chip's alone.
1107
+ *
1108
+ * Two independent numbers fall out of this one circuit, which is what makes it a
1109
+ * settlement rather than a smoke test: the AC gain above, and a quiescent output of
1110
+ * `(1 + R3/R4) * VREF` = 3.0 V that the datasheet also states outright. The DC figure
1111
+ * pins down the topology -- it only comes out at 3.0 V with R4 returned to ground -- and
1112
+ * the AC figure pins down the gain cell's scaling. See `ne570ExpanderGainAt`.
1113
+ *
1114
+ * CRECT is 2.2 uF as in the datasheet's own test circuit (Figure 3), giving the detector
1115
+ * `tau = R5 * CRECT` = 22 ms. That is a real external component, not a constant: the
1116
+ * negative control halves it and expects the attack to track.
1117
+ */
1118
+ export declare const ne570Expander: string;
1119
+ /**
1120
+ * The datasheet's compressor: onsemi NE570/D Rev. 4's own sentence, "a compressor is essentially
1121
+ * an expander placed in the feedback loop of the op amp", applied to `ne570Expander` and nothing
1122
+ * else. It is four derivations off that fixture, so the two provably differ only in the wiring
1123
+ * under test, and the same gain cell, the same internal resistors and the same reference serve
1124
+ * both.
1125
+ *
1126
+ * The three moves, and each is that sentence read literally:
1127
+ *
1128
+ * - the rectifier (pin 2) and the gain cell (pin 3) are driven from the **output** rather than
1129
+ * from the input, which is what "in the feedback loop" means for this chip;
1130
+ * - the signal enters at the **R3 pin** (pin 6), which the expander had tied to pin 7, and
1131
+ * reaches the summing node through the internal 20k;
1132
+ * - an external leg closes the op amp's DC loop, per `ne570CompressorInput` above.
1133
+ *
1134
+ * `mxr-carbon-copy`'s own traced schematic is an independent instance of the same topology --
1135
+ * R31 into pin 6, C24 from pin 7 back to pins 2 and 3, R34+R33 from pin 5 to pin 7 -- which is
1136
+ * why this is a reading of the datasheet rather than an invention: two sources drawn by
1137
+ * different people agree on it.
1138
+ *
1139
+ * **What this fixture is for.** The expander pins the gain cell's *magnitude* against a stated
1140
+ * closed form, and pins nothing about its *direction*: the cell carries no current at DC, so the
1141
+ * stated 3.0 V quiescent cannot see the sign, and the gain formula is a magnitude. Direction only
1142
+ * becomes observable when the cell sits inside the loop, because then it either adds to the
1143
+ * feedback conductance or subtracts from it. So this is the two-sided control the compandor
1144
+ * rebuild never had:
1145
+ *
1146
+ * - a compressor's gain must **fall** as its input level rises, and stay bounded;
1147
+ * - `ne570Expander`'s gain must still **rise**, which is what stops a sign flip being a free fix.
1148
+ */
1149
+ export declare const ne570Compressor: string;
1150
+ /**
1151
+ * The same expander with a tenth of the averaging capacitance.
1152
+ *
1153
+ * The negative control that proves CRECT is load-bearing. Before this rewrite the
1154
+ * detector integrated a private state variable against a hard-coded 50 ms and never read
1155
+ * the CRECT node at all, so this fixture and its parent rendered identically -- the
1156
+ * external component the chip devotes a pin to did nothing. `tau = R5 * CRECT` drops from
1157
+ * 22 ms to 2.2 ms here, which must show up as a faster attack.
1158
+ */
1159
+ export declare const ne570ExpanderFastDetector: string;
1160
+ /**
1161
+ * CD4047 bare-pin position-resolution contract.
1162
+ *
1163
+ * Fourteen terminals: `pin1`..`pin13` are bare (no role suffix) and `pin14_vdd`
1164
+ * carries the only role token. The part catalog's pinout is `[null × 13, "vdd"]`,
1165
+ * so position 13 must fold to `vdd` and the remaining thirteen positions accept
1166
+ * any (null) token. This fixture asserts that a bare-pin CD4047 still compiles
1167
+ * and that the clock-driver section resolves its five terminals by position:
1168
+ * cp1=pin10(9), cp2=pin11(10), vgg=pin13(12), vdd=pin14(13), ox1=pin3(2).
1169
+ */
1170
+ export declare const cd4047BarePinMap: string;
1171
+ /**
1172
+ * A spring reverb tank alone: input jack straight into the drive coil, pickup into the output
1173
+ * jack across a load.
1174
+ *
1175
+ * Deliberately nothing else. A tank inside a real amp is buried behind a driver stage, a
1176
+ * recovery stage and a mix control, so a level measured there cannot say whether the *tank*
1177
+ * reverberates. Here the only thing between the jacks is the tank.
1178
+ *
1179
+ * `PartNumber` is the whole of the classification evidence: the shell declares itself a
1180
+ * `Circuit.Transformer`, exactly as the corpus packets do, and only the exact part id
1181
+ * distinguishes a tank from the output transformer sitting next to it.
1182
+ */
1183
+ export declare const springReverbTank: string;
1184
+ /**
1185
+ * A variable attenuator using an optocoupler / Vactrol (VTL5C1).
1186
+ *
1187
+ * Series resistor R1=10k, shunt element is the LDR of the optocoupler to ground.
1188
+ * VLED drives the LED anode with respect to ground.
1189
+ *
1190
+ * - When VLED = 0 V (dark): LDR resistance is ~10 MΩ (ldrMaxOhms), so attenuation is 10M / (10k + 10M) ~ 0.999 V/V.
1191
+ * - When VLED = 2 V (illuminated): LED conducts forward current, LDR drops to ~100 Ω (ldrMinOhms), attenuation is 100 / (10k + 100) ~ 0.0099 V/V (-40 dB).
1192
+ * - When VLED = 0.5 V (sub-threshold): LED remains non-conducting, LDR remains dark at ~10 MΩ.
1193
+ */
1194
+ export declare const optocouplerAttenuator: string;
1195
+ export declare const optocouplerAttenuatorIlluminated: string;
1196
+ export declare const optocouplerAttenuatorSubThreshold: string;
1197
+ /**
1198
+ * The LED biased into the middle of the LDR's range, at 1.14 V.
1199
+ *
1200
+ * **The control the two extremes cannot supply.** Dark and illuminated both agree with a model
1201
+ * that is a two-state switch, and the sub-threshold fixture agrees with one whose LED does
1202
+ * nothing at all -- all three read as one of the two endpoints. Only a bias that lands *between*
1203
+ * them shows the LDR curve is continuous and actually traversed.
1204
+ *
1205
+ * Measured sweep across the knee, 0.1 V drive at 1 kHz: 1.00 V -> 0.9984, 1.05 -> 0.9964,
1206
+ * 1.10 -> 0.9722, 1.12 -> 0.8865, **1.14 -> 0.4936**, 1.16 -> 0.0621, 1.18 -> 0.0112,
1207
+ * 1.20 -> 0.0099 (floored). The assertion deliberately checks the *property* -- strictly between
1208
+ * the endpoints -- rather than pinning 0.4936, because this is the steepest point on a steep
1209
+ * curve and a brittle number here would fail for changes that are not defects.
1210
+ *
1211
+ * **A fidelity note the endpoints hide.** That whole traversal happens in an 80 mV window
1212
+ * (1.10 V to 1.18 V). A real Vactrol's LDR responds gradually over *decades* of LED current --
1213
+ * the slow, smooth knee is the part's musical character, and what an optocoupler tremolo or
1214
+ * compressor is chosen for. So "the optocoupler operator is settled" means its endpoints and its
1215
+ * continuity are pinned, **not** that the Vactrol's response shape is modelled; that lives in
1216
+ * `ledTransconductance` and the LDR exponent's scaling and is not settled by these fixtures.
1217
+ */
1218
+ export declare const optocouplerAttenuatorPartial: string;
1219
+ export declare const mn3007RoleMap: string;
1220
+ /**
1221
+ * MN3007 bare-pin position-resolution contract.
1222
+ *
1223
+ * Eight terminals named `pin1`..`pin8` with NO role suffixes.
1224
+ * Asserts that bare-pin DIP-8 positions resolve identically to the role-mapped
1225
+ * IC: clk1=pin2(node 11), clk2=pin6(node 15), in=pin3(node 12),
1226
+ * out1=pin7(node 16), out2=pin8(node 17).
1227
+ */
1228
+ export declare const mn3007BarePinMap: string;
1229
+ /**
1230
+ * MN3207 role-based terminal-resolution contract.
1231
+ */
1232
+ export declare const mn3207RoleMap: string;
1233
+ /**
1234
+ * MN3207 bare-pin position-resolution contract.
1235
+ *
1236
+ * Physical 8-pin DIP pinout per Panasonic datasheet and Boss VB-2 IC2:
1237
+ * Pin 1 (VGG) = node 13
1238
+ * Pin 2 (CP1) = node 11
1239
+ * Pin 3 (CP2) = node 15
1240
+ * Pin 4 (GND) = node 0
1241
+ * Pin 5 (OUT1) = node 16
1242
+ * Pin 6 (OUT2) = node 17
1243
+ * Pin 7 (VDD) = node 14
1244
+ * Pin 8 (IN) = node 12
1245
+ */
1246
+ export declare const mn3207BarePinMap: string;
1247
+ /**
1248
+ * Four bucket-brigade delay lines chained in series (S4).
1249
+ *
1250
+ * Models a multi-BBD cascade such as the SAD1024A 4-stage delay in the EH-7550 Deluxe Memory Man.
1251
+ * Each BBD declares DelayMs: 3 (144 samples at 48 kHz).
1252
+ * Total cascade delay across 4 stages = 4 * 3 ms = 12 ms (576 samples at 48 kHz).
1253
+ */
1254
+ export declare const hybridCascade4DelayPedal: string;
1255
+ /**
1256
+ * 4-BBD cascade with heterogeneous delays: U1=3ms, U2=6ms, U3=3ms, U4=3ms.
1257
+ * Total cascade delay = 3 + 6 + 3 + 3 = 15 ms (720 samples at 48 kHz).
1258
+ */
1259
+ export declare const hybridCascade4DelayPedalUnequalDelays: string;
1260
+ /**
1261
+ * 3-BBD cascade: 3 stages of 3 ms each.
1262
+ * Total cascade delay = 3 * 3 ms = 9 ms (432 samples at 48 kHz).
1263
+ */
1264
+ export declare const hybridCascade3DelayPedal: string;
1265
+ /**
1266
+ * `hybridDelayPedal` with a schematic feedback resistor `R_FB` (10k) from BBD output (node 4)
1267
+ * back to BBD input (node 3) (S5).
1268
+ *
1269
+ * An impulse at t=0 produces repeating, geometrically decaying echoes spaced at 3 ms
1270
+ * (144 samples at 48 kHz): t = 144, 288, 432, 576, ...
1271
+ */
1272
+ export declare const hybridFeedbackDelayPedal: string;
1273
+ /**
1274
+ * `hybridFeedbackDelayPedal` with higher feedback resistance (30k) -> lower loop gain (S5).
1275
+ * Echoes decay faster than the 10k baseline.
1276
+ */
1277
+ export declare const hybridFeedbackDelayPedalLowFeedback: string;
1278
+ /**
1279
+ * `hybridFeedbackDelayPedal` with lower feedback resistance (4.7k) -> higher loop gain (S5).
1280
+ * Echoes decay slower than the 10k baseline.
1281
+ */
1282
+ export declare const hybridFeedbackDelayPedalHighFeedback: string;
1283
+ /**
1284
+ * Active feedback delay fixture with op-amp gain in the feedback loop making loop gain > 1 (S5).
1285
+ * Demonstrates sustained/diverging echoes when loop gain exceeds unity.
1286
+ */
1287
+ export declare const hybridFeedbackDelayPedalUnstableLoop: string;
1288
+ /**
1289
+ * A tapped secondary loaded at **both** taps, with nothing in it ngspice cannot express.
1290
+ *
1291
+ * `orange-rockerverb`'s output transformer is the corpus shape -- a 16 Ω jack and an 8 Ω jack each
1292
+ * with its own feedback resistor -- and that packet cannot be graded against ngspice, because a
1293
+ * spring reverb tank is a DSP operator with no circuit-level deck (5 of the 24 corpus amps are
1294
+ * excluded for the same reason). This is the claim on its own: two loaded taps are two coupled
1295
+ * windings, each at the turns ratio its own rating gives.
1296
+ *
1297
+ * Checked once against ngspice through the parity report's `--source=` mode: `agrees`,
1298
+ * corr 1.0000, gain 1.000, with that report's `--self-check` confirming a corrupted deck
1299
+ * disagrees and its 2% gain gate refuses a 3% level error. Both decks there are emitted from the
1300
+ * program, so that bounds the *solve*, not the stamps -- which is what the ratio assertions below
1301
+ * are for.
1302
+ */
1303
+ export declare const twoLiveSecondaryTaps: string;
1304
+ /**
1305
+ * A speaker jack one impedance-selector hop from the output transformer, which is where a real
1306
+ * amp puts it.
1307
+ *
1308
+ * `orange-gro100` is the corpus case and was the only one in 142 documents: `J_SPEAKER` on node 79
1309
+ * with `S_SPEAKER_IMPEDANCE` joining it to the winding's 76/77/78 taps. `resolvePorts`'s "after
1310
+ * the transformer" test required the jack to be *on* a winding node, so it missed, and the output
1311
+ * port fell through to a jack whose own `SourceBoundaryRole` reads "tone-stack output-amp handoff
1312
+ * label". The amp rendered its tone stack -- 3 V of preamp node in place of 35 V of speaker swing,
1313
+ * with no transformer bounding it, so the file clipped 10,991 samples of 96,000.
1314
+ */
1315
+ export declare const speakerBehindSelector: string;
1316
+ /**
1317
+ * A three-terminal 5 V regulator whose pins are named `pin1`/`pin2`/`pin3` and whose *roles* say
1318
+ * which is the output and which the reference — the shape `moogerfooger-mf-102`'s `U13` has.
1319
+ *
1320
+ * The registry's 78Lxx entry lists `pin2` among its ground aliases and `pin3` among its output
1321
+ * aliases, so a reader that goes by the names puts the reference on the rail here. This fixture
1322
+ * declares the opposite, which is the only evidence that settles it.
1323
+ */
1324
+ export declare const declaredRegulator: string;
1325
+ /** The same regulator with its electrode roles removed, so only the entry's pin naming is left. */
1326
+ export declare const undeclaredRegulator: string;
1327
+ /**
1328
+ * `invertingAmplifier` with the op-amp **packaged as an eight-pin chip**, expanded by
1329
+ * `sectionsRegistry`.
1330
+ *
1331
+ * Deliberately the same circuit, so the only variable is how the op-amp arrives. A discrete
1332
+ * `kind: opamp` states its own three terminals by role; this one states eight numbered pins and
1333
+ * a part number, and the registry says which three of them are the section and in what order.
1334
+ * That is the path most of the corpus's registry-expanded devices take, and nothing graded it
1335
+ * against a second solver before: if this row disagrees while `inverting-amplifier` agrees, the
1336
+ * defect is in expansion rather than in the op-amp law.
1337
+ *
1338
+ * Pins 4-8 are in no section and connect to nothing, which is the ordinary shape of a real
1339
+ * package -- supply pins and a second half nobody used. They must contribute nothing.
1340
+ */
1341
+ export declare const packagedOpamp: string;
1342
+ /**
1343
+ * An OTA on an eight-pin chip, driving a load resistor.
1344
+ *
1345
+ * `ota` is five corpus packets and had no fixture at all, because every real OTA arrives inside
1346
+ * an `ic` and an `ic` was refused whole. Output current is `gm` times the input difference, so
1347
+ * the stage's gain is `gm * Rload` -- 1 mS into 10k, a gain of ten -- which is a number the deck
1348
+ * and the program must both produce from the same declaration rather than a shape either could
1349
+ * fake.
1350
+ *
1351
+ * Three mapped pins and no fourth means no amplifier-bias terminal, which is the linear OTA.
1352
+ */
1353
+ export declare const packagedOta: string;
1354
+ /**
1355
+ * The four-terminal nonlinear OTA on an eight-pin chip.
1356
+ *
1357
+ * `ota` is five corpus packets -- the phaser and chorus OTAs -- and had no fixture, because
1358
+ * every real one arrives inside an `ic`. The linear `packagedOta` reaches `vccs`, which is
1359
+ * a different stamp: a fourth mapped terminal is an amplifier-bias pin, and its presence is what
1360
+ * selects the compressive `2 * Iabc * tanh(vDiff / 2Vt)` law over the linear fallback.
1361
+ *
1362
+ * The input is divided down to about 20 mV before the OTA sees it, on purpose. The parity
1363
+ * harness drives every fixture at 0.1 V, and `tanh(0.1 / 2Vt)` is 0.96 -- pinned against the
1364
+ * compression knee, where the row would grade almost nothing but the saturation limit. At 20 mV
1365
+ * the stage runs about 5% compressed: nonlinear enough that a linear model fails the row, gentle
1366
+ * enough that the verdict is about the law rather than about clipping.
1367
+ *
1368
+ * `RBIAS` from the 9 V rail sets `Iabc` near 0.47 mA. That number is the output's scale, so a
1369
+ * bias pin mapped to the wrong node changes the gain instead of changing nothing.
1370
+ */
1371
+ export declare const packagedNonlinearOta: string;
1372
+ /**
1373
+ * A CMOS transmission gate whose own signal drives its control pin.
1374
+ *
1375
+ * `analog-switch` is two corpus packets and had no fixture. The law is a smooth sigmoid on the
1376
+ * control voltage, not a hard throw, so it has a curve worth grading -- but only if the control
1377
+ * actually moves. Tying the gate to a DC bias would leave the conductance constant and reduce
1378
+ * the row to a resistor divider that happens to be computed through an exponential.
1379
+ *
1380
+ * So the gate is driven by the signal it passes, with the threshold at 0 V. The conductance then
1381
+ * swings across the sigmoid every cycle -- about 1/171 ohm at the positive peak against 1/465 at
1382
+ * the negative one -- and the stage distorts asymmetrically. That asymmetry is the law; a linear
1383
+ * on-resistance would not produce it.
1384
+ */
1385
+ export declare const packagedAnalogSwitch: string;
1386
+ /**
1387
+ * An open-collector comparator with a pull-up.
1388
+ *
1389
+ * `comparator` is one corpus packet. The law is `gOn / (1 + exp(k * vDiff)) + gOff` between the
1390
+ * output and `vee`, so the output is pulled down or left to float up through `RPULLUP`. Three
1391
+ * mapped terminals leaves `vee` at ground.
1392
+ *
1393
+ * At sensitivity 50 and this harness's 0.1 V drive the output traverses roughly 0.09 V to 5.4 V
1394
+ * as a smooth curve rather than a switching edge -- deliberate, because an edge's *timing* is
1395
+ * resolved differently by a fixed-step runtime and an adaptive-step ngspice, and a row that
1396
+ * disagreed about that would be reporting the integrator rather than the comparator.
1397
+ */
1398
+ export declare const packagedComparator: string;
1399
+ /**
1400
+ * An optocoupler as a modulated optical attenuator, which is what the corpus uses them for.
1401
+ *
1402
+ * `optocoupler` is four corpus packets -- the Fender tremolos -- and it is a **stamp in the
1403
+ * matrix**, not a lifted macro, which is the whole reason it can be referenced against ngspice
1404
+ * where a BBD cannot. The LDR shunts the signal to ground and its resistance falls exponentially
1405
+ * with LED current, so the LED is driven from the signal as well as from a bias, and the shunt
1406
+ * therefore moves with the signal: the row grades the coupling *curve* rather than one point on
1407
+ * it, which is what gives the harmonic check something to measure.
1408
+ *
1409
+ * **`RLED` is 2k7 because of a measurement, and the first value was wrong twice over.** At 8k2
1410
+ * the bias node sat near 0.98 V, which cleared the LED knee only while that knee was at the
1411
+ * uncorrected 1.036 V; once the emitter was corrected to the cited `LED-RED` entry the LDR
1412
+ * pinned fully dark and the row silently stopped grading any curve at all -- `agrees` at
1413
+ * correlation 1.0000 with h2 and h3 at 1e-9. Re-biasing to 2k7 puts the reference's distortion
1414
+ * at 0.86%, well clear of the shape check's floor, and its `h3Delta` at 0.0001. Values that put
1415
+ * the distortion just above the floor instead (8k2/2k2 reads 0.18%) measure mostly their own
1416
+ * noise and report deltas up to 0.05.
1417
+ *
1418
+ * **What this row cannot grade**, and it is worth knowing before reading a green verdict: the
1419
+ * LED's own law is three constants hardcoded in the stamp -- a 50 mV ideality, `Is = 1e-12`, and
1420
+ * a coupling `alpha` of 1000 -- which the source has no way to state, so the deck can only
1421
+ * restate them. What the row does grade independently is the pin mapping, the LDR span, and the
1422
+ * shape of the exponential coupling.
1423
+ */
1424
+ export declare const packagedOptocoupler: string;
1425
+ /**
1426
+ * A VTL5C2 optocoupler, resolved through `pedalPartCatalog` (not the mock `sectionsRegistry`
1427
+ * every other resident in this file uses) so this pins the actual production catalog entry, not a
1428
+ * fixture-only copy of it.
1429
+ *
1430
+ * **What it is for.** `runoffgroove-tremulus-lune`'s VTL5C2 sat in the generic optocoupler bucket
1431
+ * (`ldrMinOhms=100, ldrMaxOhms=10_000_000`, the module-wide `exp(-1000*amps)` coupling) until
1432
+ * 2026-09-15: that law put a genuinely-lit LED (0.567 mA, confirmed against an independent ngspice
1433
+ * diode solve) 56.7% of the way to its dark ceiling, because the generic bucket's bounds are
1434
+ * placeholders and VTL5C2's own datasheet -- cited in the packet's own
1435
+ * `SelectedLaneLedCurrentToResistanceLaw` property (R@1mA=5.5k, R@10mA=800, R@40mA=200,
1436
+ * dark>=1M) -- was never fit to a law at all. `part-catalog.ts`'s dedicated VTL5C2 entry carries
1437
+ * that fit now (`ldrPowerLawCoefficientOhms`/`ldrPowerLawExponent`); this fixture is what keeps it
1438
+ * pinned, since nothing else in this suite exercises it.
1439
+ *
1440
+ * **Bias.** `R_LED` (7k2 from the 9 V rail) puts the LED within a few percent of the datasheet's
1441
+ * 1 mA anchor -- close enough that a regression in the fit or an accidental fallback to the generic
1442
+ * exponential moves the verdict, not so exact that the fixture is fragile to the diode law's own
1443
+ * rounding. `RLOAD` (10k from output to ground) turns the LDR into a divider so its resistance is
1444
+ * what decides the gain, rather than leaving `ldrA`/`ldrB` floating in series with nothing to load
1445
+ * against.
1446
+ *
1447
+ * **What this proves and what it cannot** -- same limit `emitOptocoupler`'s own comment states for
1448
+ * every optocoupler resident: the from-source deck's LDR side is a `B`-source that *restates* the
1449
+ * runtime's own formula (now the power law, when the device carries one) rather than deriving it
1450
+ * independently, so ngspice cannot catch an error shared between the restatement and the runtime.
1451
+ * What it grades independently is the pin mapping, the part-specific `ldrMinOhms`/`ldrMaxOhms`
1452
+ * clamp, and -- because `source-to-spice.ts` reads the law fields off the same compiled program,
1453
+ * not off a second constant -- that the compiled program actually carries the VTL5C2-specific
1454
+ * fields rather than silently falling back to the generic law for this part.
1455
+ */
1456
+ export declare const packagedOptocouplerVtl5c2: string;
1457
+ /**
1458
+ * A Belton BTDR-2H reverb brick in the smallest analog shell that can carry it.
1459
+ *
1460
+ * **Why this fixture exists.** `digital-reverb-module` was the one device law in the corpus with
1461
+ * no behavioural gate anywhere: no parity fixture -- correctly, since it is an `ic` macro the
1462
+ * runtime executes as DSP and ngspice has no circuit to compare -- and no test either. Worse, the
1463
+ * runtime's own `reverbCombGain` comment claimed "`belton-brick-reverb`'s measured T60 is checked
1464
+ * against the datasheet's 2.5 s", and nothing checked it. One packet in the corpus reaches this
1465
+ * law, so a change to the macro scheduler, the tap, or the output source could quietly silence
1466
+ * every reverb in the product and no gate here would have said a word.
1467
+ *
1468
+ * **The shell is deliberately trivial**, because the brick is what is under test. Input divides
1469
+ * 2:1 into the module's `pin3_input` through `10k`/`10k` (its datasheet Z_in is 10k, so this is
1470
+ * the impedance the part expects); `pin6_output_1` drives a `10k` load through the registry's
1471
+ * stated 220R output impedance; `pin5_output_2` is terminated so the second output is not a
1472
+ * dangling active terminal. The `5 V` rail is the module's own supply. No op-amps, because an
1473
+ * op-amp's own operating point would be a second thing to explain when a level moves.
1474
+ *
1475
+ * Node 1 is the input and node 2 the output, which is what the shared `jacks` helper already
1476
+ * declares -- so the module's output pin *is* the output port and nothing sits between them but
1477
+ * the load.
1478
+ */
1479
+ export declare const beltonBrickReverb: string;
1480
+ /**
1481
+ * A CD4013 dual D flip-flop wired as a clock divider, lifted out of `pipeline.test.ts`.
1482
+ *
1483
+ * **Why it moved.** This was the only fixture in the repository reaching a device law that no
1484
+ * exported fixture reached: `logic-divider`. It lived as an inline template literal inside its
1485
+ * own test, and `report:fixture-parity --corpus` -- which indexes `circuits.ts` and nothing else
1486
+ * -- therefore reported "no fixture compiles to it under any known registry" about a law with a
1487
+ * working test. Seventeen fixtures were written inline that way; measured, this was the one whose
1488
+ * absence from here made a coverage report state a falsehood, which is why it is the one that
1489
+ * moved rather than all of them.
1490
+ *
1491
+ * The document is unchanged: its test still compiles it under `pedalPartCatalog` and asserts the
1492
+ * same things, and this file is now the complete set of laws the fixtures can reach.
1493
+ */
1494
+ export declare const cd4013LogicDivider = "schema: circuit-interchange/v3\ndeviceInterface:\n controls:\n - id: INPUT_JACK\n label: \"Input Jack\"\n kind: jack\n role: \"input\"\n - id: OUTPUT_JACK\n label: \"Output Jack\"\n kind: jack\n role: \"output\"\ncomponents:\n - id: INPUT_JACK\n kind: jack\n name: \"INPUT_JACK\"\n sourceTypeName: \"Circuit.Jack\"\n origin:\n x: -480\n y: 0\n rotation: 0\n flipped: false\n terminals:\n - name: tip\n node: 1\n position:\n x: 0\n y: 0\n - name: sleeve\n node: 0\n position:\n x: 0\n y: 0\n - id: OUTPUT_JACK\n kind: jack\n name: \"OUTPUT_JACK\"\n sourceTypeName: \"Circuit.Jack\"\n origin:\n x: 480\n y: 0\n rotation: 0\n flipped: false\n terminals:\n - name: tip\n node: 2\n position:\n x: 0\n y: 0\n - name: sleeve\n node: 0\n position:\n x: 0\n y: 0\n - id: FLIP_FLOP\n kind: ic\n name: \"FLIP_FLOP\"\n sourceTypeName: \"Circuit.IC\"\n origin:\n x: 0\n y: 0\n rotation: 0\n flipped: false\n properties:\n PartNumber: \"CD4013\"\n terminals:\n - name: 1q\n node: 2\n position:\n x: 0\n y: 0\n - name: 1q_bar\n node: 0\n position:\n x: 0\n y: 0\n - name: 1clock\n node: 1\n position:\n x: 0\n y: 0\n - name: 1reset\n node: 0\n position:\n x: 0\n y: 0\n - name: 1data\n node: 0\n position:\n x: 0\n y: 0\n - name: 1set\n node: 0\n position:\n x: 0\n y: 0\n - name: gnd\n node: 0\n position:\n x: 0\n y: 0\n - name: 2set\n node: 0\n position:\n x: 0\n y: 0\n - name: 2reset\n node: 0\n position:\n x: 0\n y: 0\n - name: 2data\n node: 0\n position:\n x: 0\n y: 0\n - name: 2clock\n node: 0\n position:\n x: 0\n y: 0\n - name: 2q_bar\n node: 0\n position:\n x: 0\n y: 0\n - name: 2q\n node: 0\n position:\n x: 0\n y: 0\n - name: vDD\n node: 0\n position:\n x: 0\n y: 0\n";
1495
+ /**
1496
+ * An MN3101 BBD clock generator with its oscillator pin biased, and the first fixture in this
1497
+ * repository to reach the `clock-driver` law at all.
1498
+ *
1499
+ * **Why it did not exist.** `report:fixture-parity --scoreboard` reads one row per corpus device
1500
+ * law and says what pins it. On 2026-09-07 exactly one law read `UNGATED: no fixture at all`:
1501
+ * `clock-driver`, needed by 7 corpus packets. Every mention of it in the test tree was about its
1502
+ * *absence* -- `non-executable-clock-driver`, `no-clock-driver`, and one adversarial-prose test
1503
+ * that requires a divider to render identically despite naming a clock driver in its text. The
1504
+ * law owns three stamped outputs and a sampled oscillator and nothing rendered it.
1505
+ *
1506
+ * **The wiring is the stamp's convention, not a real pedal's, and that is a finding rather than a
1507
+ * shortcut.** `part-catalog.ts` states the polarity plainly: the MN3101 runs on a single negative
1508
+ * supply, so a +9 V pedal ties the part's GND pin to +9 V and its VDD pin to circuit ground. The
1509
+ * runtime stamp instead treats `vdd` as the high rail and skips the coupling entirely when that
1510
+ * node *is* ground, so a correctly-wired pedal renders CP1, CP2 and VGG all pinned at zero -- and
1511
+ * two corpus packets, `boss-ch-1` and `boss-dm-3`, resolve `vdd` to node 0 and do exactly that.
1512
+ * See `docs/troubleshootings/a-correctly-wired-bbd-clock-driver-outputs-nothing.md`.
1513
+ *
1514
+ * This fixture therefore wires VDD to the +9 V rail, which is what the stamp as written needs in
1515
+ * order to oscillate. It pins the law's designed behaviour so the polarity can be corrected
1516
+ * against something; pinning first is the whole argument for the scoreboard that found it.
1517
+ *
1518
+ * OX1 sits on a `6k5`/`2k5` divider off 9 V, which is 2.5000 V exactly and therefore `fScale`
1519
+ * of 1, so the rendered rate is the declared `defaultFrequency` with nothing to subtract.
1520
+ */
1521
+ export declare const mn3101ClockDriver: string;
1522
+ /**
1523
+ * The same clock driver with one divider leg changed, and nothing else.
1524
+ *
1525
+ * `4k`/`5k` off 9 V is 5.0000 V exactly, so `fScale` is 2 and the rendered rate must be twice the
1526
+ * declared frequency. Without a second bias the OX1 coupling is unpinned: at 2.5 V the scale
1527
+ * factor is 1, so a runtime that ignored the oscillator pin and hardcoded `fScale = 1` would
1528
+ * satisfy every assertion the fixture above can make. The BBD's delay time is derived from this
1529
+ * rate, so "the clock is a constant" and "the clock follows its control pin" are exactly the two
1530
+ * possibilities that need separating.
1531
+ */
1532
+ export declare const mn3101ClockDriverFastOscillator: string;
1533
+ /**
1534
+ * **Synthetic dry wire -- positive control for `detectDryWire` (report-input-dependence.ts:1002).**
1535
+ *
1536
+ * The corpus lost its dry-wire packet on 2026-09-15 when tremulus-lune was cured by the
1537
+ * optocoupler LDR fix, so *every* dry-wire row in the report now asserts `false` and the
1538
+ * detector can never prove it FIRES. This synthetic restores the positive control in the
1539
+ * compiler-lane fixtures: one bypass-switch position carries the input near-unity (inside the
1540
+ * detector's 2 % passthrough bar) and the other position is dead (below the detector's
1541
+ * -60 dBFS floor, full scale * 1e-3). A prose reader is told it is a working spring-reverb
1542
+ * tank; the *structure* is what the detector must flag, never the prose.
1543
+ *
1544
+ * **The first build of this fixture was wrong and never fired -- worth recording why, since the
1545
+ * mistake is the instructive part.** `SW1` bridged input to *ground*, not to the output probe, so
1546
+ * bypassing it collapsed the whole source to ~0 V instead of passing it through, and a fixed
1547
+ * R1/R2 divider sat in the signal path in *both* switch positions, so neither position was ever
1548
+ * unity: measured `-20.8 dB` (bypass) and `0.09x` (tank), never near-unity and dead. A divider is
1549
+ * not a wire. The fix moves the switch itself onto the input/output path (`a: node 1`,
1550
+ * `b: node 2`) so closing it *is* the wire, and removes the always-present divider from the live
1551
+ * path entirely.
1552
+ *
1553
+ * `detectDryWire`'s own `measure()` drives through `ReferenceRuntime.prepare(SAMPLE_RATE)` with
1554
+ * no `inputSourceOhms` option, so the input source is ideal (0 ohm) here -- **not** the ~10 kOhm
1555
+ * guitar-ish default `render:v2`'s CLI applies to its own stimulus. That matters for R2 below: an
1556
+ * ideal source means R2 barely attenuates the closed-switch reading (it only divides against the
1557
+ * switch's own ~0.01 ohm on-resistance), so a small, unremarkable termination value is safe to
1558
+ * leave in the live path on both sides of the switch.
1559
+ *
1560
+ * - **`SW1`**: `a` on the input node, `b` on the output-probe node. Bypassed (on-resistance) is a
1561
+ * near-direct wire; tank (off-resistance, ~1e9 ohm) is effectively open.
1562
+ * - **`R2`**: output probe node to ground, 1 kOhm. Always present. With an ideal source this costs
1563
+ * the bypassed reading nothing (1 kOhm >> the switch's ~0.01 ohm on-resistance), and in the tank
1564
+ * position it is the dominant path to ground against the switch's ~1e9 ohm off-resistance, which
1565
+ * is what pins the dead reading far below the floor rather than leaving the output node to a bare
1566
+ * gmin (1e12 ohm) shunt -- gmin alone against a 1e9 ohm off-switch would leak ~99.9 % of the input
1567
+ * through, not read dead at all.
1568
+ * - **`R1`**: input node to output-probe node, in parallel with the switch, always present at a
1569
+ * deliberately huge value (100 Mohm) so it changes neither reading by more than a part in 1e5 --
1570
+ * present only so the mutation control below has one property to change.
1571
+ */
1572
+ export declare const syntheticDryWire: string;
1573
+ /**
1574
+ * **Mutation control for the synthetic dry wire.**
1575
+ *
1576
+ * The same fixture with the dead arm made alive: R1's 100 Mohm leakage bridge (negligible in
1577
+ * both switch positions) is replaced by a 1 kOhm live arm, so it now competes evenly with R2
1578
+ * even when SW1 is open -- both switch positions read roughly half the input, neither dead nor
1579
+ * near-unity. `detectDryWire` must NOT fire here -- if it fired, it would be firing because a
1580
+ * bypass switch exists, not because a wire is dry. This is the negative control that proves the
1581
+ * positive control fires for the right reason.
1582
+ *
1583
+ * `derive()`, not a bare `.replace()`: the first build of this control used `.replace()` against
1584
+ * a `"1M"` target the base fixture had already stopped declaring, so the replacement silently
1585
+ * matched nothing and the control was comparing the base fixture against an unmodified copy of
1586
+ * itself the entire time. `derive()` throws instead of returning a silent no-op.
1587
+ */
1588
+ export declare const syntheticDryWireMutation: string;
1589
+ /**
1590
+ * An `stages`-section RC low-pass ladder: series 10k from each node to the next, 10n shunt to
1591
+ * ground at every interior node, input on node 1, output on node 2.
1592
+ *
1593
+ * **It exists to be BIG, which no other fixture here is.** A block only takes the runtime's
1594
+ * static sparse schedule when the predicted saving clears `SCHEDULE_MINIMUM_SAVING`, and that
1595
+ * saving grows roughly as `n^2/24`, so every hand-written fixture in this file -- two to seven
1596
+ * unknowns -- solves densely and cannot exercise the schedule at all. Ten sections is the first
1597
+ * size that clears the floor with room to spare.
1598
+ *
1599
+ * **And it is an RC ladder specifically**, because the schedule's hardest case is the
1600
+ * difference between a DC pass and a transient one: a capacitor contributes `2C/dt` to the
1601
+ * matrix while audio is running and contributes *nothing at all* during an operating-point
1602
+ * solve. A ladder whose every shunt element is a capacitor is therefore a structurally
1603
+ * different matrix in the two passes, which is exactly the condition that sent six corpus
1604
+ * packets permanently onto the dense path in 2026-09-18's audit.
1605
+ *
1606
+ * Linear, so its own audio is uninteresting: one solve per sample, a first-order roll-off per
1607
+ * section. Nothing here asserts what it sounds like.
1608
+ */
1609
+ export declare const rcLadder: (stages: number) => string;
1610
+ /**
1611
+ * Two JFETs differing only in parameter-key spelling. The corpus spells the SPICE
1612
+ * threshold and transconductance `Vt0`/`Beta` (mxr-phase-90, boss-ph-1r,
1613
+ * mxr-noise-gate-line-driver, jhs-morning-glory); nothing in the corpus uses the
1614
+ * all-caps `VTO`/`BETA`. Both spellings must land on thresholdVolts and
1615
+ * transconductance — the all-caps forms were the only ones read, so the corpus
1616
+ * values silently fell back to the law defaults (-2 V, 1 mS).
1617
+ */
1618
+ export declare const jfetSpiceCasedParameters: string;
1619
+ /** DPDT: pole A lifts the input jack off the core, pole B lifts the output jack; the throws meet on a wire. */
1620
+ export declare const trueBypassDpdt: string;
1621
+ /** SPDT on the output only; the input jack stays tied to the core and keeps loading it in bypass. */
1622
+ export declare const hardwireSpdt: string;
1623
+ /**
1624
+ * Always-on emitter-follower buffer, then the DPDT. No latch, no JFET, one BJT: nothing
1625
+ * electronic, yet the bypass wire carries the buffer's output, so the bypass is buffered.
1626
+ * Before 2026-09-22 this derived as `hardwire` and the chain played it as a wire.
1627
+ */
1628
+ export declare const bufferedMechanicalDpdt: string;
1629
+ /**
1630
+ * Boss-style electronic switching: a cross-coupled BJT bistable toggled by a momentary contact
1631
+ * through a capacitor, its collectors biasing two JFET audio gates. Meets the four structural
1632
+ * requirements `findBistableLatches` states, so this is derived `buffered` by the latch.
1633
+ */
1634
+ export declare const flipFlopBypassLatched: string;
1635
+ /**
1636
+ * The same JFET gates driven by two BJTs that are **not** cross-coupled (an inverter chain), so
1637
+ * the latch detector finds nothing and the `buffered` verdict rests on the JFET-plus-BJTs
1638
+ * heuristic alone. Pinned so that replacing the heuristic shows up as this fixture moving.
1639
+ */
1640
+ export declare const flipFlopBypassJfetGates: string;
1641
+ /** The declared switch only grounds a status-indicator node; the audio path never sees it. */
1642
+ export declare const bypassSwitchIndicatorOnly: string;
1643
+ /**
1644
+ * A cathode-biased pentode gain stage on the generic law: 68k grid stopper, 1M leak, 470 R
1645
+ * cathode, 2.2k plate load and the screen at the 250 V rail through 1k (which drops nothing,
1646
+ * because the generic law draws no screen current). Operating point in `expected.ts`.
1647
+ */
1648
+ export declare const pentodeGainStage: string;
1649
+ /** Series 10k into a 1 H shunt: the RL high-pass twin of `rlLowPass`, same corner. */
1650
+ export declare const rlHighPass: string;
1651
+ /**
1652
+ * A three-way rotary: the common on the input, each throw a series resistor into a 1k load, so
1653
+ * every position has a distinct hand-computed gain (`selectorThreeWayGains`). Throw terminals
1654
+ * are named after the options, in option order, so name and order agree.
1655
+ */
1656
+ export declare const selectorThreeWay: string;
1657
+ /**
1658
+ * An RC core with a chip the registry does not know, declared as a class the compiler opens
1659
+ * without a model (`Circuit.DigitalSignalProcessor`): the pedal still compiles, the chip is
1660
+ * dropped with `ic-not-executed`, and the analog path around it plays. One pin on the audio
1661
+ * node, one on ground, one on a node nothing else touches.
1662
+ */
1663
+ export declare const openIcOnDeclaredClass: string;
1664
+ /**
1665
+ * The same unknown chip declared as a plain class the compiler does **not** open: the refusal
1666
+ * this pipeline gives an unidentified IC by default, so the fixture above is a deliberate
1667
+ * exception and not a hole.
1668
+ */
1669
+ export declare const unknownIcRefused: string;
1670
+ export declare const bbdClockDerivedDelay: string;
1671
+ /**
1672
+ * The same clock, steered by an LFO: `delay-tap-fractional` in `modulation` mode, which
1673
+ * `mxr-micro-flanger`, `boss-ce-5` and `boss-ce-2` ship and no fixture reached.
1674
+ *
1675
+ * A steered clock cannot state its length as one number, so `deriveBbdDelayFromNetlist` refuses
1676
+ * to pretend and the delay falls back to the declared `DelayMs` -- which is why this variant
1677
+ * carries one and the static fixture above does not. What the modulation resolution wants is
1678
+ * strict: exactly one active device steering the timing network, read at its **control**
1679
+ * terminal, because the timing node itself carries the ~40 kHz oscillator waveform and sampling
1680
+ * that would alias garbage into the delay length. Here that is `Q_LFO`'s base.
1681
+ */
1682
+ export declare const bbdClockModulatedDelay: string;
1683
+ /**
1684
+ * A PT2399 delay whose time is read off its VCO network: `delay-tap` (integer, not fractional)
1685
+ * in `clock` mode, which `pt2399-delay` and `ibanez-dl5` ship.
1686
+ *
1687
+ * Added alongside the bucket-brigade clock fixture because this is a **different derivation
1688
+ * function** -- `derivePt2399DelayFromNetlist`, which traces a series resistor chain from pin 6
1689
+ * to ground and reads the delay off the datasheet's VCO curve -- and nothing exercised it from
1690
+ * source. The two clock routes share a mode name and no code.
1691
+ */
1692
+ export declare const pt2399ClockDerivedDelay: string;
1693
+ /**
1694
+ * Linear-control VCA transfer cell (M5207L01 law contract).
1695
+ *
1696
+ * Synthetic stand-in for the TR-2 VCA stage: input jack 1 through Rin 10k
1697
+ * into the VCA input (node 3, referenced to COM), VCA output (node 4)
1698
+ * into Ro 22k to ground, control pin driven by a DC source at
1699
+ * `comVolts + controlVolts` (so Vc = controlVolts against COM). The M5207L01
1700
+ * entry models the input as inputSiemens 0.01 to COM and the gain as
1701
+ * max(0, Vc / 1 V) / 2, so with an ideal input source the hand-computed
1702
+ * voltage gain is (100 / 10100) * 0.01 * 22000 * Vc / 2 = 1.08910891 * Vc.
1703
+ * Renders of this fixture are the law's transfer proof: full, half, COM
1704
+ * offset (control referenced to a nonzero COM, the TR-2 case), and floored
1705
+ * mute. The nonzero-COM case is load-bearing: every earlier test ties COM
1706
+ * to ground, but TR-2's COM is 4.5 V and Vc = Vcontrol - Vcom is what the
1707
+ * whole tremolo depends on.
1708
+ */
1709
+ export declare const linearVcaCell: (controlVolts: number, comVolts?: number) => string;
1710
+ /**
1711
+ * Bypass-engagement contract: the switchedDivider graph (a shunt switch the signal routes
1712
+ * around, so the connectivity default is open/0) steered by control SW1, with audio.bypass
1713
+ * declaring the engaged position. The three renders differ only in the declared position
1714
+ * and, for the third, a firmware latch toggled by SW1 (which makes the control momentary).
1715
+ * See the "bypass switch default follows its declared engaged position" tests: maintained + 1
1716
+ * defaults to 1, declared 0 keeps the connectivity 0, and the latch-toggled + 1 keeps 0 with
1717
+ * a bypass-engaged-disagrees warning instead of resting "held pressed". `unresolvedPosition`
1718
+ * states a Position its Options cannot place on a throw, which reads as half travel.
1719
+ */
1720
+ export declare const bypassEngagedFixture: (engaged: 0 | 1, latchToggle?: boolean, unresolvedPosition?: boolean) => string;
1721
+ //# sourceMappingURL=circuits.d.ts.map