← Commit history

standard 0.23.1: simulate noise and monteCarlo (#23)

Colby Knox ·0f1ded8f8c ·12d ago ·parent 2ac7965
4 files changed +10−6
README.md+1
@@ -158,6 +158,7 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue  ## Status +Version 0.23.1: `simulate` (proposed, #23) takes an optional noise analysis and `monteCarlo` runs (altium-lane, kicad-lane). Version 0.23.0: the engine (0.20.0) compares turned 3D bodies by their rectangles (separating axes), not their axis boxes, in `height_check` and `placement_check`; a body row may give `{cx, cy, w, h, rotation}` or `corners` (kicad-lane #26: 70 false collisions round a 45-degree QFN). Regenerated with fusion-bridge 1.13.19.
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "eda-bridge-standard",-  "version": "0.23.0",+  "version": "0.23.1",   "type": "skill",   "title": "EDA Bridge Standard: one way for an AI to drive every PCB tool",   "description": "The standard every Adom EDA bridge follows so one AI can drive Altium, KiCad, Fusion 360 and any future PCB tool the same way: shared verb names in tiers, the board model JSON, reply and refusal conventions, and a coverage table of each bridge against the Altium reference.",
verbs/coverage.json+1−1
@@ -1,5 +1,5 @@ {- "standard": "0.23.0",+ "standard": "0.23.1",  "reference": {   "bridge": "altium",   "version": "0.2.82"
verbs/standard.json+7−4
@@ -1,5 +1,5 @@ {- "standard": "0.23.0",+ "standard": "0.23.1",  "reference": {   "bridge": "altium",   "version": "0.2.82"@@ -8686,14 +8686,16 @@    "summary": "Run a circuit simulation of the design's schematic and return the signals as data: an operating point, a DC sweep, an AC sweep or a transient, with the nets and source currents asked for.",    "input": {     "schematic": "the design or sheet to simulate (the bridge's own path or id) (required)",-    "analysis": "{type: op} | {type: dc, source, start, stop, step} | {type: ac, sweep: dec|oct|lin, points, start, stop} (Hz) | {type: tran, step, stop, start?} (s) | {type: raw, text: \".ac dec 20 10 1meg\"} (a bridge that cannot run raw SPICE refuses it with not_supported); default the analysis the design carries",+    "analysis": "{type: op} | {type: dc, source, start, stop, step} | {type: ac, sweep: dec|oct|lin, points, start, stop} (Hz) | {type: tran, step, stop, start?} (s) | {type: noise, source, output, reference?, sweep: dec|oct|lin, points, start, stop} (Hz: the output and input-referred noise of output against reference, driven from source) | {type: raw, text: \".ac dec 20 10 1meg\"} (a bridge that cannot run raw SPICE refuses it with not_supported); default the analysis the design carries",     "probes": "[{net: \"OUT\"} | {current: \"V1\"}]; default every net (a bridge may cap the count)",     "sweep": "{parameter, start, stop, step, scale?: \"lin\" | \"dec\" | \"oct\"}: optional; steps a part's value (\"R4\") or a model parameter (\"Q1.BF\"), one run per value; for lin, step is the increment, for dec and oct the points per decade or octave; a bridge may cap the number of runs",     "temperatures": "{start, stop, step} (\u00b0C): optional; one run per temperature",+    "monteCarlo": "{runs, distribution?: \"uniform\" | \"gaussian\", seed?, tolerances: {resistor?, capacitor?, inductor?, transistor?, dcSource?, digital?} (%)}: optional; the analysis runs again with every part drawn within its kind's tolerance, each run its own signal; the same seed draws the same values",     "points": "int, default 200: a ceiling on the points returned per signal; decimation keeps the first and last points and every extremum (the run itself is not coarsened)"    },    "output": {-    "signals": "[{signal: \"V(OUT)\", x: [..], y: [..], xUnit: s|Hz|V, yUnit: V|A|dB, phase?: [..] (AC, degrees, unwrapped)}]; an op gives one point per signal; with sweep or temperatures each run is its own signal, with step saying which run it is (\"R4 = 300\", \"T = 85\"), so a reader groups runs by signal + step",+    "signals": "[{signal: \"V(OUT)\", x: [..], y: [..], xUnit: s|Hz|V, yUnit: V|A|dB, phase?: [..] (AC, degrees, unwrapped)}]; an op gives one point per signal; with sweep or temperatures each run is its own signal, with step saying which run it is (\"R4 = 300\", \"T = 85\"), so a reader groups runs by signal + step; a Monte Carlo run's step lists the values drawn (\"R3 = 9038.1, C6 = 1.0004e-10\"), so any run can be reproduced; a noise analysis answers onoise and inoise (yUnit V/rtHz) over frequency",+    "totals": "noise analysis: {onoise, inoise}, the integrated output and input-referred noise in V",     "missing": "[probe]: probes the run did not have",     "notSimulated": "[ref]: parts the run left out for want of a simulation model, when the sheet is only partly modelled, so a reader knows the result covers only part of the circuit (empty when every part was simulated)",     "available": "[signal name]",@@ -8704,7 +8706,8 @@     "simulation_failed carries the simulator's own message: a part without a model, a node with no DC path to ground, or a bad analysis.",     "points thins the reply, not the run: a long transient with a tiny step still takes its time.",     "A partly modelled sheet still runs and names the parts it left out in notSimulated; a sheet with no modelled parts refuses with no_model.",-    "A bridge that cannot sweep refuses sweep or temperatures with not_supported; it never runs once and returns a single trace as if it were the sweep (ngspice has no .step: loop with alter per value)."+    "A bridge that cannot sweep refuses sweep or temperatures with not_supported; it never runs once and returns a single trace as if it were the sweep (ngspice has no .step: loop with alter per value).",+    "A bridge that cannot run a noise analysis or a Monte Carlo (or draw one of its tolerance kinds) refuses with not_supported; it never answers something else in its place."    ],    "related": [     "export_spice",