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)
| ID | Status | Where | Missing |
|---|---|---|---|
FT-1 | built | transients: steps (sim/run.py, sim/netlist.py amps); LIM.range finds the brown-out | |
FT-2 | built | cables: 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.py | no 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-3 | built | behaviour opamp (sim/netlist.py); LIM.range/opamp | |
FT-4 | built | behaviour 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-5 | built | values 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.py | a 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-6 | built | kinds motor, solenoid, speaker, heater, optocoupler (catalog/kinds.toml, sim/netlist.py) | |
FT-7 | out | rules-at-scale.md, decision 7 (2026-10-31): hazardous voltage recognised by LIM.hazardous, not checked | |
FT-8 | built | sim.json fault_scenarios: reversed, shorted, off (sim/run.py fault_scenarios); the parts' limits as warnings | |
FT-9 | built | values 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 it | curves 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-10 | built | edakit firmware: analog (channel, divider, pull) per ADC input; drift by --check | |
FT-11 | built | loads: expect (engines/sim.py function) – LIM.i, LIM.v | |
FT-12 | built | sim.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-13 | built | kind 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-14 | built | behaviour 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.py | the 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-15 | built | fn i2s.*, can.*, onewire, usb.* (circuit.FN_LINES); REQ.function | |
FT-16 | built | edakit 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 panel | tracks 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-17 | built | sim.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-18 | built | sim.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.py | a 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-19 | built | engines/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-20 | built | edakit/domains/, [project] domains, edakit domains | |
FT-21 | built | tests/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, 2N5458 | the 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-22 | built | edakit rules: code, severity, title | |
FT-23 | built | edakit graph show NAME (edakit/graph_show.py) | |
FT-24 | built | evals/ for claude plugin eval; baseline in evals/README.md |
Checks (CK)
| ID | Status | Where | Missing |
|---|---|---|---|
CK-1 | built | LVL.undefined/nc (ICs; a module brings its own resistors) | |
CK-2 | built | pin drive open_drain | tristate; LVL.undefined/open_drain; LVL.contention | |
CK-3 | built | entry 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-4 | built | LIM.range/gate from vgs_th_v and the rds_on_max_ohm table | |
CK-5 | built | limits 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 NE5534 | no 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-6 | built | pin adc; LIM.range/adc, REQ.value/adc | |
CK-7 | built | polarized capacitors: LIM.v/polarized (G and E), PATH.reverse/polarized | |
CK-8 | built | roles out_p, out_n; REQ.forbidden/btl (domains audio, guitar) | |
CK-9 | out | rules-at-scale.md, decision 7 (2026-10-31): hazardous voltage recognised by LIM.hazardous, not checked | |
CK-10 | out | rules-at-scale.md, decision 7 (2026-10-31): hazardous voltage recognised by LIM.hazardous, not checked | |
CK-11 | built | entry 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 either | the 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-12 | built | roles dp_a, dp_b, dn_a, dn_b; REQ.missing/usb_data (domain usb) | |
CK-13 | built | pin needs; REQ.missing/pin, REQ.value/pin, REQ.forbidden/pin | |
CK-14 | built | a 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 tests | the 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-15 | built | REQ.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-16 | built | REQ.missing/leave on nets through a cable and on connectors marked off_board (domain cables) | |
CK-17 | built | transceiver 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-18 | built | cells i_max_a; LIM.i/cell | |
CK-19 | built | net matrix row | col; REQ.missing/matrix, REQ.forbidden/matrix | |
CK-20 | built | pin 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-21 | built | limits i_supply_pin_max_a; LIM.i/supply_pin (constant-current drivers) | |
CK-22 | built | LIM.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' questions | the AC limit (rms and peak) – no reachable source; an AC net is judged by its peak against the DC limit |
CK-23 | built | values f_clock_hz, limits f_max_hz; LIM.range/clock | |
CK-24 | out | rules-at-scale.md, decision 7 (2026-10-31): hazardous voltage recognised by LIM.hazardous, not checked | |
CK-25 | built | LVL.undefined/analog | |
CK-26 | built | REQ.function/uart | |
CK-27 | built | net instrument, load_min_ohm, pin z_in_ohm; REQ.value/instrument | |
CK-28 | built | values 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-29 | built | REQ.missing/balance | |
CK-30 | built | net 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-31 | built | layout.apart; GEO.spacing/apart on the Gerber copper (fab.check_apart, gerber.Copper.distance) |
Hints (HT)
| ID | Status | Where | Missing |
|---|---|---|---|
HT-1 | built | HINT.cable_line (domain cables) | |
HT-2 | built | HINT.usb_budget (domain usb); tables/usb.toml [budget], [typec_current] read from the USB 2.0 and Type-C specifications | |
HT-3 | built | HINT.usb_inrush (domain usb); tables/usb.toml [attach] read from USB 2.0, 7.2.4.1 | |
HT-4 | built | HINT.boost_enable (domain power) | |
HT-5 | built | HINT.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-6 | built | HINT.input_polarity (domain power) | |
HT-7 | built | HINT.jack_supply (core; connector roles tip, ring, sleeve, tip_switch, ring_switch, sleeve_switch) | |
HT-8 | built | HINT.audio_ground (domain audio) | |
HT-9 | built | HINT.flicker (core) | |
HT-10 | built | HINT.heater (domain motors) | |
HT-11 | built | HINT.thermal_copper (domain power) | |
HT-12 | built | HINT.motor_supply (domain motors) | |
HT-13 | built | HINT.class_d (domain audio) | |
HT-14 | built | HINT.relay_load (core) | |
HT-15 | built | HINT.jack_battery (domain guitar) | |
HT-16 | built | HINT.audio_switching (domains audio, guitar) | |
HT-17 | built | HINT.signal_ceramic (domains audio, guitar) | |
HT-18 | built | HINT.pedal_supply (domain guitar) | |
HT-19 | built | HINT.string_ground (domain guitar) |
Blocks (BL)
| ID | Status | Where | Missing |
|---|---|---|---|
BL-1 | built | edakit/blocks/addressable-led-input.json | the owner's signatures of the parts entries; tested without the simulation – the example's +5V below the 74AHCT's minimum |
BL-2 | built | edakit/blocks/nmos-switch.json | the owner's signatures of the parts entries |
BL-3 | built | edakit/blocks/pmos-high-side.json | the owner's signatures of the parts entries |
BL-4 | built | edakit/blocks/lipo-charger.json | the owner's signatures of the parts entries; tested without the simulation – the example has no USB input that suits a charger |
BL-5 | built | edakit/blocks/ldo-3v3.json | the owner's signatures of the parts entries |
BL-6 | built | edakit/blocks/battery-sense.json | the owner's signatures of the parts entries |
BL-7 | built | edakit/blocks/esp32-wroom-32e.json | the owner's signatures of the parts entries; tested without the simulation – the example's 3V3 rail is 0.3 A |
BL-8 | built | edakit/blocks/usb-c-data.json | the owner's signatures of the parts entries |
BL-9 | built | edakit/blocks/i2c-level-shift.json | the owner's signatures of the parts entries |
BL-10 | built | edakit/blocks/rs485.json | the owner's signatures of the parts entries |
BL-11 | built | edakit/blocks/midi.json | the 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-12 | built | edakit/blocks/cable-input.json | the owner's signatures of the parts entries |
BL-13 | built | edakit/blocks/servo-connector.json | the owner's signatures of the parts entries |
BL-14 | built | edakit/blocks/dc-motor-drv8833.json | the owner's signatures of the parts entries |
BL-15 | built | edakit/blocks/eurorack-power.json | the 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-16 | built | edakit/blocks/instrument-buffer.json | the owner's signatures of the parts entries |
BL-17 | built | edakit/blocks/pedal-power.json | the owner's signatures of the parts entries |
BL-18 | built | edakit/blocks/relay-bypass.json | the 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
| ID | Status | Where | Missing |
|---|---|---|---|
electrical-audio | built | edakit/domains/audio.toml [review] | |
electrical-cables | built | edakit/domains/cables.toml [review] | |
pcb-rf | built | edakit/domains/radio.toml [review] pcb (antenna areas, GEO.keepout) | |
pcb-hazardous | out | rules-at-scale.md, decision 7 (2026-10-31): hazardous voltage recognised by LIM.hazardous, no spacing checked | |
pcb-thermal-pads | built | edakit/domains/core.toml [review] pcb (copper and vias under exposed pads) |
Part facts – the parts library
| Group | Status | Entries | Missing |
|---|---|---|---|
| modules | partial | C701341 (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 displays | partial | C2874885 (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 |
| power | partial | C6186 (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) |
| switching | partial | C20917, C38774, C2598, C50506, C141517, C19922, C38437, C81582, C2150710 | the owner's signatures |
| sensors buses | partial | C9866 (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, C18148 | the owner's signatures; HC-SR04 – no manufacturer document, an entry is not defensible |
| audio | partial | C910544, C17337, C5438445 | the owner's signatures |