edakit documentation

FILES

Manufacturing files and sheets complete and consistent – 4 codes.

Each engine decides one kind of relation; a finding's code is ENGINE.relation. Severities are the catalog's defaults – a project's domains may set others; a grade is a sub-case with its own severity, a topic the part of a code a domain switches on.

FILES.sheet polarity sheet

error

Every board gets a polarity sheet drawn from the Gerber data: each polarised part with copper, silkscreen, pad numbers, pin roles and nets, and the signs GEO.mark pairs with it, also beyond the footprint.

Why
Polarity at the footprint is what neither the graph nor the DRC can see: a library footprint once printed '+' next to the cathode pad. The sheet is what the second datasheet check (M-1) compares with the datasheet drawings, and what is compared with JLCPCB's assembly preview (M-2).
What to do
Read the sheet against the datasheets. A wrong pad is fixed in the graph by swapping the nets and roles, not in the footprint.
Sources
  1. edakit handbook 4.4 and 8.1

Replaces P-2

FILES.manifest files of one run

error

The upload files of every maker of [cart] makers – JLCPCB's Gerber ZIP, BOM and pick-and-place file without [cart] – come from the same gate run, with their SHA-256 in fab/manifest.json; a file the planned maker takes missing fails, one only another maker takes is a warning named with that maker, and edakit cart prepare stops for it.

  • the upload files of every maker of [cart] makers from the same run – JLCPCB's Gerber ZIP, BOM and pick and place without [cart], bom_<b>_mpn.csv, cpl_<b>_<maker>.csv and odb_<b>.zip for the makers that take them; fab/manifest.json with SHA-256 per file, the state hashes and the fab hash (8.2); a missing file of a maker other than the planned one a warning
Why
Files from different states fit together only on paper; the manifest is the record of what was ordered.
What to do
Run the gate again and upload only from its folder.
Sources
  1. edakit handbook 8.3

Replaces F-4

FILES.set Gerber set

errormargin: warning

The Gerber set is complete; outline and mounting holes equal the plan (±0.2 mm); tooling holes are in the NPTH drill file with the mask open and no copper in the opening.

  • Gerber set complete (a missing file is named here, and GEO.copper, GEO.mark, GEO.hole and GEO.silk, which read it, report it as not checked); outline and mounting holes from the outline layer = plan (± 0.2 mm); tooling holes in the NPTH file, mask open, no copper in the opening
Why
A missing layer or a shifted outline is found at the factory at best; tooling holes with copper or mask make JLCPCB add their own.
What to do
Export again; correct outline, holes or tooling holes in the board file and apply them.
Sources
  1. edakit handbook 7 and 8.1

Replaces F-5

FILES.order order settings = board

errormargin: warningother_maker: warningtooling: warninglead: error

With [order] (of the board file or of edakit.toml) or [cart]: per maker of [cart] makers – a finding fails for [cart] maker, JLCPCB without [cart], and warns for every other maker – every field's value is one the maker's form offers (its profile edakit/makers/<maker>.toml; a list the profile marks as read only in part leaves another value unchecked), no combination the profile excludes; the remark fits the form (JLCPCB: at most 200 characters, all ASCII); the board's thickness_mm is a thickness of the form (JLCPCB, FR-4, 2 layers: 0.4, 0.6, 0.8, 1.0, 1.2, 1.6, 2.0 mm); the silkscreen colour is the one the maker prints on the solder mask colour (JLCPCB: black on a white mask, white on every other); mark = "specify" has the maker's placeholder (PCBWay: WayWayWay) on a silkscreen layer, at least its least height in [[silk.texts]] (a height not given there is a warning) – at a maker whose form offers no order number at its place (JLCPCB since May 2026: "Remove Mark" or a 2D barcode) mark = "specify" is a value the form does not offer; a placeholder with another mark is a warning; while the maker's profile reports its order number gone (rules.placeholder_gone), its placeholder on the board or mark = "specify" is a warning; another maker's placeholder on the silkscreen is a finding – PCBWay's WayWayWay at any other maker: the maker prints the letters; a former placeholder (rules.former_placeholder: JLCPCB's JLCJLCJLCJLC, its order number gone since May 2026, seen on its form by ordering step 0 on 2026-10-31) is a warning at every maker, JLCPCB too: the letters are printed as text; an assembly class with fewer tooling holes than the profile names is a warning (JLCPCB: Economic, 2); [order] customs, the shipment's customs category with its HS code, is an entry of the maker's form (JLCPCB's "Product Description") – not set where the form asks it, it is named as information: the owner chooses it at the cart. Independent of the maker: [order] layers and size_mm, where set, are those of the Gerber files; delivery = panel_by_customer fails (the run is one board); pcba_quantity is at most quantity, and another number than [project] quantity is a warning; no copper of either side lies within tab_copper_mm (1.0 mm) of a declared tab zone of the outline, measured on the Gerber files; a finish with lead (HASL that is not lead-free) fails for purpose.use sale or without a purpose, warns for gift and is a note for private (grade lead, as ORDER.finish grades it at the cart). The outline stretches free of copper are listed, a provisional profile is named, and fab/<board>/order.md holds every field of the planned maker's form with its value and where it comes from. Without [order] and [cart] no order.md is written: a board with [tooling] holes and assembled parts, on a class the planned maker asks tooling holes for (JLCPCB: Economic), is a warning (grade tooling) – no file tells the maker that the holes are the customer's.

  • with [order] (board file or edakit.toml) or [cart] (8.4), per maker of [cart] makers – a finding fails for the planned maker and warns for every other one (grade other_maker): every field a value the maker's form offers (its profile), no combination it excludes; the remark at most 200 characters, ASCII (JLCPCB); thickness_mm a thickness of the form – JLCPCB 0.4, 0.6, 0.8, 1.0, 1.2, 1.6 or 2.0 mm; the silkscreen colour the one the maker prints on the mask colour – JLCPCB black on white, white on every other; mark = "specify" with the maker's placeholder (PCBWay: WayWayWay) on a silkscreen layer of pcb.json, at least its least height in [[silk.texts]] (no height there: warning) – JLCPCB offers no order number at a place since May 2026, so mark = "specify" is not a value of its form; the placeholder with another mark (warning); while the profile reports the maker's order number gone, its placeholder or mark = "specify" (warning); another maker's placeholder – PCBWay's WayWayWay – on the silkscreen; JLCPCB's former placeholder JLCJLCJLCJLC at every maker (warning: printed as text); fewer tooling holes than the class needs (warning: JLCPCB drills its own); customs an entry of the maker's form – JLCPCB's "Product Description", category and HS code –, not set where the form asks it (information: the owner chooses it at the cart). For every maker: layers and size_mm where set = the Gerber files; panel_by_customer (fail); pcba_quantity at most quantity, another number than [project] quantity (warning); no copper of either side within tab_copper_mm of a declared tab zone, measured on the Gerber copper against the Gerber outline (fail, with the distance and the position); a finish with lead, HASL that is not lead-free – fail for sale or no purpose (RoHS), warning for gift (REACH Art. 33), information for private (grade lead, as ORDER.finish at the cart; support, not legal advice); the outline stretches free of copper and a provisional profile (information). Without [order] and [cart]: [tooling] holes on an assembled board of a class the planned maker asks tooling holes for – JLCPCB Economic – warn (grade tooling): no order.md tells the maker they are the customer's
Why
The order form fields that depend on the board are filled in by hand while ordering: a cart with 'Remove Mark' prints the placeholder as text, a remark of 202 characters does not fit the field, a remark that allows tabs where a track runs 0.45 mm from the edge lets the tab cut it, and an Economic order without own tooling holes gets JLCPCB's, possibly on a visible edge – as does one with its own holes when the form is left at "Added by JLCPCB": in the walkthrough of handbook 17 no file said that the round board's holes were the customer's until its [order] got a remark. Each was found late in pytree, the tooling holes only in the quote. Thickness and colours stood in no file: the form's defaults (1.6 mm, green, white print) went into the cart unless someone remembered otherwise, while the mechanical model took the board file's thickness_mm. A thickness the form does not have (1.57 mm, the 62 mil of US fabs) cannot be ordered as drawn, and the print colour follows the mask: in pytree a white mask was an open question for one board whose silkscreen artwork was drawn for white print – JLCPCB prints black on a white mask. With several makers to choose from, a release must describe one board whichever maker builds it: edakit's defaults are the same for every maker, the profile only translates, and a value a maker does not offer, or a placeholder printed as text, is found at the release – for the maker the board is planned for as a failure, for a second maker as a warning, so that a setting only the second one lacks does not block the first. A leaded finish was found only at the cart (ORDER.finish), after the sign-offs and the published release; the finish is in the fab hash, so the board as released holds the lead, and the release says so.
What to do
Correct [order] – a value the maker's form offers (edakit cart fields lists the fields and the maker's words), a shorter ASCII remark, mark = "specify" with the placeholder (or another mark; at JLCPCB mark = "remove" or a barcode), the silkscreen colour the maker prints on the mask (or another mask), tab zones only on stretches order.md lists as free, or the copper moved back from the edge – or add [tooling] holes; set thickness_mm to a thickness of the form (the mechanical model takes the same value). A placeholder at a maker without one: take the maker out of [cart] makers, or the placeholder off the board. JLCPCB's former JLCJLCJLCJLC: take it off the silkscreen (mark = "remove", or barcode = "qr" or "datamatrix" for traceability). Tooling holes without [order] or [cart]: add [order] to the board file – a remark such as "2 tooling holes added by customer" – so that order.md says "Added by Customer". A finish with lead: finish = "LeadFree HASL" or "ENIG" in [order]. A warning the owner wants (JLCPCB's tooling holes, a hand-placed placeholder, a second maker's lack, a gift with lead and the statement at hand) is accepted in the sign-off file.
Sources
  1. edakit handbook 8.4
  2. edakit handbook 15.1 and 15.2 (RoHS, REACH Art. 33, graded by purpose); Directive 2011/65/EU (RoHS 2) Annex II: lead 0.1 % by weight in homogeneous materials
  3. The review at the order of 2026-10-30 (implementation plan 5.5): the agent regulatory-reviewer graded leaded HASL block at the cart and named lead at the release a check candidate; the owner's decision of 2026-11-01: at the release, graded as at the cart (grade lead)
  4. edakit handbook 17.11: the walkthrough's M-5, note 3 – without [order] no file said that the tooling holes are the customer's (grade tooling)
  5. JLCPCB order form (Mark on PCB, Remark, PCBA Type, Tooling holes); pytree's order of 2026-10-25
  6. JLCPCB PCB Manufacturing Capabilities (read 2026-10-28): solder mask colours Green, Purple, Red, Yellow, Blue, White, Black; FR-4 thicknesses 0.4/0.6/0.8/1.0/1.2/1.6/2.0 mm, 2.5 mm and above for 12+ layers only – https://jlcpcb.com/capabilities/pcb-capabilities
  7. JLCPCB online quote (read 2026-10-28), PCB Color and Silkscreen: 'For most colors, the silkscreen is printed white. Only for white solder mask, the silkscreen is printed black.' – https://cart.jlcpcb.com/quote
  8. pytree: the cart of 2026-10-24 with PCB Thickness 1.6mm, PCB Color Green, Silkscreen White (the form's defaults), and its silkscreen concept: with a white mask (an open question for the snow tree) JLCPCB prints black, so the artwork had to look right in black too
  9. JLCPCB Quote & Order, "Product Description" (ordering step 0, 2026-10-31: a required cascader of category and entry with its HS code – tests/fixtures/makers/jlcpcb/step0_2026-10-31.md); the owner's decision of 2026-11-01: a key of [order], outside the fab hash
  10. Ordering at the manufacturer (docs/concepts/done/ordering.md, decided 2026-10-30): every field of the form as a key with edakit's default, the maker's profile, checks per maker; edakit/makers/jlcpcb.toml, recorded by ordering step 0 on 2026-10-31
  11. JLCPCB, "How to remove order number from your PCB" (last updated 2026-05-22; read in search summaries on 2026-10-30): the order number not available since May 2026, JLCJLCJLCJLC not to be added, a 2D barcode or a serial number instead – https://jlcpcb.com/help/article/how-to-mark-on-pcb; the owner's decision of 2026-10-30: FILES.order warns until ordering step 0 has seen the form
  12. JLCPCB's quote page as read by ordering step 0 on 2026-10-31, signed in (tests/fixtures/makers/jlcpcb/): Mark on PCB offers "Remove Mark" (preselected) and "2D barcode (Serial Number)" only, with 1 and with 2 layers – the order number is gone; JLCJLCJLCJLC becomes rules.former_placeholder

Replaces F-6