Working on edakit¶
For developers who change edakit itself – its code, its catalog, its documentation. After this page you know how the repository is organised, how a change gets onto main, how the tests and the evals hold it, and how the site is built. What edakit is as a system is on the architecture page.
The repository¶
Organisation lists every path with its kind: documentation, source, code, data, generated or test data. The kind decides how a file changes. Documentation is kept true to the code. Code changes test first. Data – the catalog, domains, blocks, parts, makers – changes through the skills add-rule and add-feature, on the owner's word. A generated file is never edited by hand: its source changes and the script runs again.
The main parts:
| Path | What it holds |
|---|---|
edakit/ |
the Python package and command line: checks, simulation, the EasyEDA and KiCad tool chains, PCB, routing, Gerber analysis, the gate, ordering |
edakit/catalog/, edakit/domains/ |
the engines' codes with rule, why, fix and sources; the tables; the domains of rules |
edakit/blocks/, edakit/parts/, edakit/makers/ |
building blocks and their checked parts; the makers' profiles |
skills/, agents/, hooks/, bin/ |
the Claude Code plugin |
handbook/, docs/, README.md |
the documentation; docs/concepts/ the concepts |
tests/, evals/ |
the negative tests and their fixtures; the evals for claude plugin eval |
upstream/ |
what edakit needs from EasyEDA Pro and easyeda-mcp-pro, as requirements |
The rules of a session¶
A session in this repository works by CLAUDE.md. In short:
- Concepts go on main through the notes lane (
python3 .github/notes.py), and so does every change ofTODO.md. A concept starts indocs/concepts/new/, moves todone/once it is decided and built, todiscarded/when the owner rejects it. The concepts' index shows each with its state. - Everything else goes through a branch, onto main only with the owner's OK.
- A merge is a version. A branch that changes what a project reads carries a fragment
changes/<branch>.md:minorwhen a project must act on the update,patchotherwise.python3 .github/merge.py <pr>numbers it, waits for the checks and merges;release.ymlsets the tag. The major number is the owner's. - main is protected: only pull requests with the checks test, kicad, build, paths and version green.
- No click in EasyEDA because its API falls short, and no patch of easyeda-mcp-pro of edakit's own: what edakit needs goes upstream (upstream).
Tests¶
What the tests prove, layer by layer – from every check seen red once on the example led-bar to the published open designs –, which circuits they run on and what a new one must bring: How edakit is tested (handbook 19).
The documentation has tests of its own:
tests/test_references.py– every handbook section and chapter file that code, skills and agents name exists;tests/test_style.py– the countable rules of the style guide;tests/test_walkthrough.py,tests/test_walkthrough_kicad.py,tests/test_quickstart.py– what the walkthroughs and the quickstart quote still holds;tests/test_catalog.py,tests/test_catalog_page.py,tests/test_agreements.py,tests/test_plugin.py,tests/test_pages.py– the generated sections, the catalog's pages, section 11.4, the plugin's lists, the site.
uv run --group dev pytest -q
uvx ruff check edakit tests
Evals¶
evals/ holds typical tasks for claude plugin eval. What they measure:
handbook 19.8; the cases, the baseline and how to run them:
evals.
The site¶
docs/pages.py assembles the site into build/pages, MkDocs Material builds it, and the workflow pages.yml
publishes it from main. The navigation is data: the table NAV in docs/pages.py, a group per reader. The sources –
concepts, skills, agents, evals, CLAUDE.md – have the last tab, "Inside edakit", with the index of each in its
sidebar; every page of them is marked as a source. A page's address follows its tab – /start/…, /circuit/…,
/handbook/…, /inside/… –, while the files stay where the code and the skills name them; the rule catalog keeps
/catalog/. Every old address sends the reader on, the anchor kept.
python3 docs/pages.py
uvx --with mkdocs-material==9.6.23 --from mkdocs==1.6.1 mkdocs build --strict -f build/pages/mkdocs.yml
The rule catalog's pages are written by docs/catalog/build.py, the handbook's generated sections by
python -m edakit.catalog.handbook --write.
Contributing¶
Issues and pull requests are welcome; the owner merges. A question, a bug or a board built with edakit has its form under issues.
Rules and features also come from projects: /edakit:propose-rule and /edakit:propose-feature open a sealed issue.
The Action proposals triages the owner's sealed proposals only – it runs on the owner's credentials. An issue by
someone else becomes a proposal when the owner adopts it with a sealed comment. Accepted proposals are built into one
pull request each, and the owner merges (adding a rule).