edakit documentation

maker-coverage candidates

The candidates of docs/concepts/done/maker-coverage.md and what became of them (maker-coverage-status.toml). Open where a datasheet or standard could not be read, or where the change was not a contained one.

23of 24Features (FT)0 partial · 0 open · 1 out
28of 31Checks (CK)0 partial · 0 open · 3 out
19of 19Hints (HT)0 partial · 0 open
18of 18Blocks (BL)0 partial · 0 open
4of 5Reviewer questions0 partial · 0 open · 1 out
3of 121 signedParts library106 drafts for 49 part facts · the owner signs

Features (FT)

IDStatusWhereMissing
FT-1builttransients: steps (sim/run.py, sim/netlist.py amps); LIM.range finds the brown-out
FT-2builtcables: length_m, awg | mm2 or r_ohm_per_wire (with or without length_m), l_nh_per_m (circuit.wire_ohm, wire_ohm_per_m, wire_h), c_pf_per_m (the I2C bus capacitance, buses.py); the rating per wire from the wire's own datasheet, i_max_a on the cable, by decision 22 (rules-at-scale.md): LIM.i/cable holds the simulated current of every wire to it (engines/sim.py cable_ratings, ngspice's own wire currents), a warning while new; a cable that carries current without it is a row of information over the scenarios (sim/run.py unrated_cables) and a gap of edakit check --coverage and of the gate protocol with its highest current and the loss per metre of wire, I² × R (engines/coverage.py cable_gaps, from the simulation saved for this state); a hand-wired board: [boards.<name>] wired = true (config.py, Board.unmade) – no PCB, no assembler, as bought; STRUCT.board/wired a note on a bought board without a module; tests/test_cable_rating.py, tests/test_hand_wired.pyno table by gauge – by decision 22 a wire's rating comes from its own datasheet and edakit derives none from the gauge; edakit convert leaves bought as it is – which boards are hand-wired is the project's judgement, the note names the key
FT-3builtbehaviour opamp (sim/netlist.py); LIM.range/opamp
FT-4builtbehaviour charger (prog_v/R_PROG, precondition, float voltage, UVLO, dissipation) – TP4056, MCP73831; LIM.i/charge on any scenario with a cell; the termination by decision 17 and 19 (rules-at-scale.md): no state model – HINT.charge_termination names it where a charger is used, HINT.power_path finds a load on the charging cell, edakit check --coverage lists the charger as not simulated over time (SIM.state)
FT-5builtvalues vref_v, i_load_min_a, roles adj and fb (circuit.feedback_vout); the simulation regulates to the divider; REQ.missing/feedback, REQ.value/feedback, LIM.range/min_load; AMS1117 datasheet as the example; a boost without a vout pin (MT3608, C84817 now behaviour boost): the output behind the diode on sw (circuit.switch_output), EN low switches it off and the graph's inductor and diode pass VIN − VD (sim/netlist.py switch_boost) – a row of information (SIM.state), the load's expect and LEDs judged at that level; tests/test_boost_enable.pya boost with its own vout pin (a module, a synchronous part's body diode) keeps vout_v with EN low – no entry with the datasheet's figure for what passes through it
FT-6builtkinds motor, solenoid, speaker, heater, optocoupler (catalog/kinds.toml, sim/netlist.py)
FT-7outrules-at-scale.md, decision 7 (2026-10-31): hazardous voltage recognised by LIM.hazardous, not checked
FT-8builtsim.json fault_scenarios: reversed, shorted, off (sim/run.py fault_scenarios); the parts' limits as warnings
FT-9builtvalues dc_bias [[V, ratio], …] (circuit.capacitance): a pin need's c_min_f and an ADC's c_hold_min_f on the capacitance left at the declared DC – REQ.value/bias; the transient and AC netlists take it (sim/netlist.py); curves read from the graphs of KEMET's and YAGEO's part sheets: C5126849 (4.7 µF 6.3 V 0603 X5R: 43 % at 5 V, not the 0.33 µF of the example), C2167271 (10 µF 16 V 0805), C49678 (100 nF 50 V X7R); a capacitor without a curve counts nominal, edakit check --coverage names itcurves of the library's Samsung capacitors C15850, C45783, C23630, C28323 – samsungsem.com is not among the hosts this build could read, the LCSC copy is a catalogue without curves; Murata's part sheets (search.murata.co.jp) and TDK's character sheets refused the request
FT-10builtedakit firmware: analog (channel, divider, pull) per ADC input; drift by --check
FT-11builtloads: expect (engines/sim.py function) – LIM.i, LIM.v
FT-12builtsim.json ac (sim/ac.py): .ac around a DC scenario, gain and -3 dB corners against expect; SIM.response (gain, corner), domains audio and guitar; SIM.config/off where neither is on (decision 9)
FT-13builtkind led_strip (catalog/kinds.toml): pixels_per_m, i_pixel_a, i_idle_a, r_vdd_ohm_per_m, r_gnd_ohm_per_m, vdd_op_min_v/max_v; component strip.length_m | pixels; cable at_m (injection point); sim/strip.py: a ladder of both rails, lumped to 50 sections, a node per wired pin; load strips (share of full white); LIM.range/strip, LIM.i/strip (a feeding cable's i_max_a), STRUCT.entry/strip, PARTS.fact for the four model values; chained strips in catalog/paths.toml; library edakit/parts/Pololu_2549.json – WS2812B 3.5–5.3 V from Worldsemi's data sheet via Pololu, 50 mA per pixel and 0.2 Ω/m per rail from Pololu's product page and its measured drop (derived, an even load assumed)
FT-14builtbehaviour cc_led_driver (sim/netlist.py ic_cc_led_driver, engines/sim.py cc_led_drivers): I = vsense_v / R_S at the top of its tolerance, dim, the switch's headroom; LIM.i/cc (set current against i_out_max_a, the string's inductor against i_sat_a at the ripple's peak), REQ.value/cc (r_sense_min_ohm), LIM.range/cc (VIN above the string: the datasheets' on-time equation), SIM.state/cc (the string's LEDs); library drafts PT4115B89E C84512 and AL8860WT-7 C125330; tests/test_led_buck.pythe inductance range per current of the PT4115's table (no field), the driver's losses and temperature (no switching losses in the data sheets), a block (no inductor, sense resistor or power LED in the library)
FT-15builtfn i2s.*, can.*, onewire, usb.* (circuit.FN_LINES); REQ.function
FT-16builtedakit firmware: devices.i2c with the addresses the pins decide and each device's highest SCL, devices.spi with each device's modes and highest SCK, bus_speed per bus – the net's clock_hz, the slowest device, the modes every SPI device shares, the speed an I2C bus's pull-ups allow (NXP UM10204 Rev. 7.0: tr = 0.8473 · Rp · Cb, Cb from the pins' c_in_f and the cables' c_pf_per_m); net clock_hz held to them as LIM.range/clock (buses.py, limits.bus_clocks); entry fields spi_modes, f_sck_max_hz, f_scl_max_hz, pin c_in_f – filled for PCF8574/A, INA219, INA226, AT24C32D, DS3231, MPU-6050, BME280, MAX6675, MAX31855, MAX7219, SK9822 and the SSD1306 paneltracks are not in the bus capacitance; the MCUs' own pin capacitance and the SK9822's SPI mode were not read; I2C high-speed mode (a master code) is not entered
FT-17builtsim.json spread (sim/spread.py): hFE, a BJT's leakage icbo_a at ambient_c, VGS(th), IDSS with VGS(off) as corners min/max of every DC scenario, per part in an extra scenario; every check and a load's expect judged in each corner, an AC run once per corner; kinds njfet, pjfet; library 2N3904 (C124482), MMBFJ201 (C891687), BS170 (C111691), 2N7000 (C232838)germanium parts (AC128 …) and the phaser's 2N5952 – no maker's datasheet reachable (onsemi has no 2N5952 and no TO-92 J201 any more); a project enters its own measured spread
FT-18builtsim.json ac source (sim/ac.py): a pickup – R and L in series, C across –, a piezo disc behind its capacitance (c_series_f), an electret capsule as a current of 1 V / RL into its load resistor (rl_ohm), each named by a row of catalog/tables/audio_sources.toml or given as numbers; a row's value is not given again, what it lacks is the project's (decision 20), a pickup row without inductance stops the run with the reason; a cable's c_pf_per_m × length_m between each wire and its wire on ground in AC runs; rows: 15 pickups of Seymour Duncan (DC resistance and resonant peak, the archived Pickup Comparison Chart), DiMarzio and Mojotone (DC resistance, product pages), Murata 7BB-12-9, 7BB-20-6L0, 7BB-27-4L0 (capacitance at 1 kHz), CUI CMA-4544PF-W, INGHAi GMI9767P-42DB and GMI4015P-2C-42db (output impedance, RL, sensitivity); tests/test_audio_sources.pya pickup's inductance and capacitance – no maker reachable states either (Seymour Duncan's resonant peak comes without the load it was measured with, so no inductance is derived), Fender and EVH answer 403: the project gives l_h; the capsule has no kind of its own, its supply current is not in the operating point; a cable without a wire on ground adds no capacitance
FT-19builtengines/coverage.py; edakit check --coverage; the protocol's section 2; chargers, cell protections and USB PD sinks as not simulated over time (SIM.state, decision 17)
FT-20builtedakit/domains/, [project] domains, edakit domains
FT-21builttests/reference.py: a reference circuit per domain, with seeded faults; tests/open_designs/: Espressif's ESP32-DevKitC V4, SparkFun's Logic Level Converter, foostan's Corne keyboard v4 (left half, KiCad schematic of foostan/crkbd at 63366fb, CC BY 4.0) and the key matrix: the Corne Cherry v3 (left half, Pro Micro, 21 keys in 4 × 6 with a diode per key, KiCad schematic of foostan/crkbd at b473521, MIT); the guitar circuit by decision 21: GuitarML's Tubescreamer/Rat combo (TL072, LM301A, 2SC1815 and 2N5458 followers, a 3PDT order switch) and Classic Boost v2 (one 2N5088 stage), KiCad schematics of GuitarML/GuitarPedalPCBs at e2fa7e1, MIT, the jacks, DC jack, footswitches and LEDs wired by hand to pads as a board of their own – transcribed from their published schematics, every finding judged (findings.toml, tests/test_open_designs.py: the v3's matrix rules on seeded faults and a simulated scan with a ghost case; the combo's reversed C19, the order switch, the spread of the JFET follower and the boost); their false alarms and blind spots fixed (tests/test_open_design_fixes.py) – among them a switch of several poles, a base biased by resistors, a coupling capacitor in stage G, several wires of one net between boards; library drafts TL072CP, LM301AN, 1N914, 2SC1815, 2N5458the firmware's scan direction (QMK DIODE_DIRECTION) is not in a schematic – REQ.forbidden/matrix holds the diodes to one direction, a simulated scan load to the firmware's; the pedals' footswitch wiring is not in their repository (PedalPCB's build documentation, not reachable) – the pads' names stand in; no source states the pedals' intended frequency response – their AC runs are information
FT-22builtedakit rules: code, severity, title
FT-23builtedakit graph show NAME (edakit/graph_show.py)
FT-24builtevals/ for claude plugin eval; baseline in evals/README.md

Checks (CK)

IDStatusWhereMissing
CK-1builtLVL.undefined/nc (ICs; a module brings its own resistors)
CK-2builtpin drive open_drain | tristate; LVL.undefined/open_drain; LVL.contention
CK-3builtentry address; REQ.forbidden/address; the speed an I2C bus's pull-ups allow with the known capacitance – tr = 0.8473 · Rp · Cb, Cb the pins' c_in_f and a cable's c_pf_per_m (buses.py, LIM.range/clock)tracks are not counted in Cb
CK-4builtLIM.range/gate from vgs_th_v and the rds_on_max_ohm table
CK-5builtlimits vin_rel_max_v, pin i_inject_max_a; LIM.v/inject – also with one supply off (fault_scenarios off); the clamp current through a resistor in the simulation, with the library's PCF8574 (tests/test_pin_limits.py); i_inject_max_a from the datasheets of PCF8574/A, INA219, INA226, SN74AHCT1G125, OPA991, TMC2209 and NE5534no injection current in the datasheets of WS2812B, CH340, MAX6675, MAX31855, PAM8403, MAX485, MPU-6050, INMP441, AT24C32D, RP2040, RP2350, the ESP32 chips and the ATmega328P – noted in each entry's verified.open; there LIM.v/inject holds the voltage alone
CK-6builtpin adc; LIM.range/adc, REQ.value/adc
CK-7builtpolarized capacitors: LIM.v/polarized (G and E), PATH.reverse/polarized
CK-8builtroles out_p, out_n; REQ.forbidden/btl (domains audio, guitar)
CK-9outrules-at-scale.md, decision 7 (2026-10-31): hazardous voltage recognised by LIM.hazardous, not checked
CK-10outrules-at-scale.md, decision 7 (2026-10-31): hazardous voltage recognised by LIM.hazardous, not checked
CK-11builtentry antenna.keepout_mm and antenna.edge_mm; GEO.keepout on the Gerber copper (fab.check_keepout) and GEO.keepout/edge – the antenna area at most edge_mm inside the outer outline, a cut-out no edge (fab.check_antenna_edge); Espressif's modules 1 mm (ESP32, ESP32-S3) and 0 (ESP32-C3) from their hardware design guidelines; the coverage report names radios without eitherthe 15 mm clearance beside an antenna in a cut-out and inside the housing (Espressif) – a question of the pcb reviewer (domain radio), no field
CK-12builtroles dp_a, dp_b, dn_a, dn_b; REQ.missing/usb_data (domain usb)
CK-13builtpin needs; REQ.missing/pin, REQ.value/pin, REQ.forbidden/pin
CK-14builta regulator's capacitors as pin needs, the minimum after DC bias (REQ.value/bias, FT-9); a need's esr_min_ohm/esr_max_ohm against the capacitors' esr_ohm (REQ.value/esr); RT9080 (C841192) ESR ≥ 1 mΩ; TI LM1117's 0.3–22 Ω window in the teststhe AMS1117's window – its data sheet names 22 µF solid tantalum and no ESR range, so C6186 has none; no library LDO needs more than 1 mΩ and no library tantalum (the KEMET T491 waits for its pin numbering from a library symbol); esr_ohm only on the KEMET and YAGEO entries – the library's electrolytics give tan δ at 120 Hz, no ESR at 100 kHz
CK-15builtREQ.missing flyback for motors and solenoids; pin clamp = "none" and REQ.missing/clamp for a bridge output without its own diodes (ST L298 datasheet, section 3)
CK-16builtREQ.missing/leave on nets through a cable and on connectors marked off_board (domain cables)
CK-17builttransceiver roles rs485_a/rs485_b, canh/canl; REQ.missing/termination, REQ.forbidden/termination, REQ.value/termination, REQ.value/failsafe; tables/buses.toml read from TI SLLA272D and SLOA101B
CK-18builtcells i_max_a; LIM.i/cell
CK-19builtnet matrix row | col; REQ.missing/matrix, REQ.forbidden/matrix
CK-20builtpin windows (with pull and pull_ohm in the netlist); REQ.value/window in stage E; example the MAX98357A SD_MODE (datasheet 19-6779 Rev 11)
CK-21builtlimits i_supply_pin_max_a; LIM.i/supply_pin (constant-current drivers)
CK-22builtLIM.hazardous (core, always on) – a net beyond the ES1 limit (60 V DC, TI SLUP421), an error to accept on the net; the domain mains with the reviewers' questionsthe AC limit (rms and peak) – no reachable source; an AC net is judged by its peak against the DC limit
CK-23builtvalues f_clock_hz, limits f_max_hz; LIM.range/clock
CK-24outrules-at-scale.md, decision 7 (2026-10-31): hazardous voltage recognised by LIM.hazardous, not checked
CK-25builtLVL.undefined/analog
CK-26builtREQ.function/uart
CK-27builtnet instrument, load_min_ohm, pin z_in_ohm; REQ.value/instrument
CK-28builtvalues gain_min_ratio; REQ.value/gain, its fix naming a config with a lower minimum; the external compensation as a pin need to another pin in that config – NE5534P (TI SLOS070D): stable from 3, config compensated from 1 with CC ≥ 22 pF between COMP and COMP/BAL (REQ.missing/pin)the candidate's LM308: no datasheet on ti.com (lit/ds/symlink/lm308.pdf and the product page 404, 2026-10-31); the NE5534P entry has no LCSC number (the LCSC search answered 403)
CK-29builtREQ.missing/balance
CK-30builtnet signal; REQ.value/switch (≤ 10 mV across a contact in a signal path), REQ.value/min_load (min_load_a – a contact in a signal path rated for signal currents, ≤ 10 µA); every relay contact set (roles common_2 …)the 10 µA comes from maker-coverage CK-30 (forums), not a datasheet
CK-31builtlayout.apart; GEO.spacing/apart on the Gerber copper (fab.check_apart, gerber.Copper.distance)

Hints (HT)

IDStatusWhereMissing
HT-1builtHINT.cable_line (domain cables)
HT-2builtHINT.usb_budget (domain usb); tables/usb.toml [budget], [typec_current] read from the USB 2.0 and Type-C specifications
HT-3builtHINT.usb_inrush (domain usb); tables/usb.toml [attach] read from USB 2.0, 7.2.4.1
HT-4builtHINT.boost_enable (domain power)
HT-5builtHINT.power_path (domain power; engines/hint.py cell_loads): a charger's battery net reaching an IC supply pin, an LED … without a power path – a MOSFET whose gate the input holds, or a diode onto a rail the input feeds; Microchip AN1149 (DS01149C) read
HT-6builtHINT.input_polarity (domain power)
HT-7builtHINT.jack_supply (core; connector roles tip, ring, sleeve, tip_switch, ring_switch, sleeve_switch)
HT-8builtHINT.audio_ground (domain audio)
HT-9builtHINT.flicker (core)
HT-10builtHINT.heater (domain motors)
HT-11builtHINT.thermal_copper (domain power)
HT-12builtHINT.motor_supply (domain motors)
HT-13builtHINT.class_d (domain audio)
HT-14builtHINT.relay_load (core)
HT-15builtHINT.jack_battery (domain guitar)
HT-16builtHINT.audio_switching (domains audio, guitar)
HT-17builtHINT.signal_ceramic (domains audio, guitar)
HT-18builtHINT.pedal_supply (domain guitar)
HT-19builtHINT.string_ground (domain guitar)

Blocks (BL)

IDStatusWhereMissing
BL-1builtedakit/blocks/addressable-led-input.jsonthe owner's signatures of the parts entries; tested without the simulation – the example's +5V below the 74AHCT's minimum
BL-2builtedakit/blocks/nmos-switch.jsonthe owner's signatures of the parts entries
BL-3builtedakit/blocks/pmos-high-side.jsonthe owner's signatures of the parts entries
BL-4builtedakit/blocks/lipo-charger.jsonthe owner's signatures of the parts entries; tested without the simulation – the example has no USB input that suits a charger
BL-5builtedakit/blocks/ldo-3v3.jsonthe owner's signatures of the parts entries
BL-6builtedakit/blocks/battery-sense.jsonthe owner's signatures of the parts entries
BL-7builtedakit/blocks/esp32-wroom-32e.jsonthe owner's signatures of the parts entries; tested without the simulation – the example's 3V3 rail is 0.3 A
BL-8builtedakit/blocks/usb-c-data.jsonthe owner's signatures of the parts entries
BL-9builtedakit/blocks/i2c-level-shift.jsonthe owner's signatures of the parts entries
BL-10builtedakit/blocks/rs485.jsonthe owner's signatures of the parts entries
BL-11builtedakit/blocks/midi.jsonthe owner's signatures of the parts entries; tested without the simulation – the example's +5V below the 6N138's minimum; the MIDI specification (CA-033) not read – midi.org refused
BL-12builtedakit/blocks/cable-input.jsonthe owner's signatures of the parts entries
BL-13builtedakit/blocks/servo-connector.jsonthe owner's signatures of the parts entries
BL-14builtedakit/blocks/dc-motor-drv8833.jsonthe owner's signatures of the parts entries
BL-15builtedakit/blocks/eurorack-power.jsonthe owner's signatures of the parts entries; tested without the simulation – a sim source has one plus and one minus – no ±12 V; the Doepfer A-100 bus specification not read – doepfer.de unreachable
BL-16builtedakit/blocks/instrument-buffer.jsonthe owner's signatures of the parts entries
BL-17builtedakit/blocks/pedal-power.jsonthe owner's signatures of the parts entries
BL-18builtedakit/blocks/relay-bypass.jsonthe owner's signatures of the parts entries; the second contact set of the DPDT relay is not simulated, the photo-MOS has no model

Reviewer questions

IDStatusWhereMissing
electrical-audiobuiltedakit/domains/audio.toml [review]
electrical-cablesbuiltedakit/domains/cables.toml [review]
pcb-rfbuiltedakit/domains/radio.toml [review] pcb (antenna areas, GEO.keepout)
pcb-hazardousoutrules-at-scale.md, decision 7 (2026-10-31): hazardous voltage recognised by LIM.hazardous, no spacing checked
pcb-thermal-padsbuiltedakit/domains/core.toml [review] pcb (copper and vias under exposed pads)

Part facts – the parts library

GroupStatusEntriesMissing
modulespartialC701341 (ESP32-WROOM-32E), C2913202 (ESP32-S3-WROOM-1), C41349510 (ESP32-C3-MINI-1-H4X), LOLIN_D1_MINI, A000005 (Arduino Nano), C7203002 (Pico), C41407547 (Pico 2)the owner's signatures; NodeMCU-32S – its datasheet hosts refused
leds displayspartialC2874885 (WS2812B-V5/W), C5378720 (SK6812), C2829089 (SK9822 for the APA102, which LCSC does not stock), C2890596 (SSD1306 panel), C7605 (PCF8574T), C86832 (PCF8574AT), C52476 (MAX7219)the owner's signatures; the OLED and LCD backpack boards themselves – no LCSC part, a seller's schematic needed
powerpartialC6186 (AMS1117-3.3), C5446 (XC6206), C16581 (TP4056), C424093 (MCP73831), C351410 (DW01A), C2830320 (FS8205A), C84817 (MT3608), C970725 (CH224K)the owner's signatures; CH224K out of stock (CH224A recommended by WCH, no entry)
switchingpartialC20917, C38774, C2598, C50506, C141517, C19922, C38437, C81582, C2150710the owner's signatures
sensors busespartialC9866 (DS3231), C60583 (AT24C32D), C24112, C92489, C87469, C49851, C9753, C6705483 (HX711), C44471 and C10681 (ACS712 5 A, 20 A), C52028, C16030, C84681 (CH340C), C14267 (CH340G), C6568 (CP2102), C19738, C18148the owner's signatures; HC-SR04 – no manufacturer document, an entry is not defensible
audiopartialC910544, C17337, C5438445the owner's signatures