main
John Lauer Publish 0.1.0 55a9481 2d ago
{
 "name": "jlcpcb",
 "description": "From a finished board to boards in hand from JLCPCB (PCB + assembly), with the rotation corrections shared.",
 "steps": [
  {
   "name": "intake",
   "done": [
    "state.json"
   ],
   "do": "Run `init --release <board-release.json> --target <desktop>` (or `--board <B.kicad_pcb> --bom <csv>` when the board flow wrote no release). Read the BOM: every part placed by JLCPCB needs an LCSC number; parts fitted after assembly (contacts, machine pins) carry fit=post."
  },
  {
   "name": "sourcing",
   "done": [
    "sourcing.json"
   ],
   "do": "Make every placed part orderable at JLCPCB, as cheaply as is safe. Search in Hydrogen so the search is on screen: `adom-parts-search show \"<spec>\"` (add `--basic` for JLCPCB basic parts; each extended part type costs a setup fee). Order the exact MPN when JLCPCB has it. For an unstocked part, or an extended part with a basic equivalent, read BOTH datasheets, write swaps/<REF>.json with every number's source, and run `swap --ref <REF> --facts swaps/<REF>.json`, then `--apply` on a PASS. A deliberate exception goes in the facts' \"waive\" with the reason. Ask the human before swapping anything that changes the design's behaviour (dielectric, colour). Record each search with `clip start --name sourcing --hwnd <Hydrogen window>`. Close with `sourcing --why \"...\"`."
  },
  {
   "name": "rules",
   "done": [
    "rules.json"
   ],
   "do": "Run `rules`: KiCad DRC of a copy of the board with JLCPCB's design rules for its copper layer count, read from adom/pcb-design-rules (kicad/jlcpcb-2L|4L|6L.kicad_dru; the same page carries JLCPCB's Altium and Fusion rules). The design's own rules file is never changed. A failure goes back to the board flow (adom-aiflow); paying JLCPCB for a tighter process is the human's call. `export` refuses until this passes on the current board."
  },
  {
   "name": "export",
   "done": [
    "fab/*-fab-manifest.json"
   ],
   "do": "Run `export`: the gerber zip, JLCPCB BOM and CPL from the desktop's native kicad-cli, then the rotation check, which fits JLCPCB's own footprint for every LCSC number to the board's pads and corrects the CPL. A FAIL means the wrong footprint or LCSC number, or a mirrored part: fix the board or the BOM, never the CPL by hand. Parts JLCPCB has no footprint for are flagged; set a hand correction only from the preview (`--rotations rot.json`)."
  },
  {
   "name": "preview",
   "done": [
    "preview.json"
   ],
   "do": "Open cart.jlcpcb.com in a pup window (pup, never the OS mouse) and record it: `clip start --name upload --hwnd <pup window>`. Upload the gerber zip, choose PCB assembly, upload the BOM and CPL from jlcpcb-flow/fab/. In the placement preview, check pin 1 on every part the export flagged and save a screenshot of each with `preview --png <file> --refs <refs>`. If a part sits wrong, re-export with a correction; never fix it on JLCPCB's page."
  },
  {
   "name": "quote",
   "done": [
    "quote.json"
   ],
   "do": "Read the total JLCPCB shows before checkout and record it: `quote --total <amount> --currency USD`. Show the human the total, the board count and what drives the cost (extended parts, assembly setup)."
  },
  {
   "name": "approval",
   "done": [
    "approval.json"
   ],
   "do": "Wait for the human's explicit OK to pay this amount, in their own words. Record it with `approve --by <name> --amount <total> --words \"<what they said>\"`. Never write an approval the human did not give, and never pay without one."
  },
  {
   "name": "order",
   "done": [
    "order.json"
   ],
   "do": "Check the shipping address the human named, pay, and record the order number: `ordered --order <number>`. The checkout clip shows addresses and account details: keep it private, never on a public page."
  },
  {
   "name": "delivered",
   "done": [
    "delivered.json"
   ],
   "do": "When the boards arrive and have been tried, record them: `delivered --boards <N> --working <N>`. A failing board may be a part turned the wrong way: find out before anything is shared as proven."
  },
  {
   "name": "share",
   "done": [
    "shared.json"
   ],
   "do": "Share what this order proved: for each corrected or hand-set part with a wiki component page you own or were asked to update, `share --ref <REF> --page <owner/slug> --screenshot <its preview png>` (delivered boards are added automatically). On anyone else's page, open an issue with the record instead. Close with `share --done --why \"...\"`."
  },
  {
   "name": "report",
   "done": [
    "report.md"
   ],
   "do": "Run `report` and hand the next stage (probing, bring-up) what it needs: the order, the evidence, and anything that differed from the board release."
  }
 ]
}