Replies: 1 comment
|
Thank you for this. I've gone through every claim against the source rather than taking them on trust, and the headline finding is real, worse than you measured, and now fixed. Verdicts and root causes below, including one correction to the report and one place where I have to disagree with my own earlier assumption. The transfer corruption — CONFIRMED, and it is the whole bug
for child in &mut definition.items {
let Ok(mut pad) = kiapi::board::types::Pad::decode(child.value.as_slice()) else {
continue;
};
...
*child = pack_any(&pad, "kiapi.board.types.Pad");
}A footprint definition keeps pads, graphics and text in one repeated Your numbers fall straight out of the wire format. Two things the report did not have:
One detail I measured while writing the regression test, because it explains something your report implied but didn't state: Why 874 tests missed it: the only unit test for this path builds its fixture with Fixed in I swept for the same pattern and found three more sites. All are now type-checked, but I want to be precise rather than claim four bugfixes: none of the other three was reachable. A pad decoded as a graphic carries no net, so Review and manufacturing failing open — CONFIRMED, both of themThis is the finding I think matters most, because as you say it produces exactly the language an automation client would use to authorise an order. Neither tool had ever consulted DRC. A search for And Fixed across
Schematic-only reviews are unchanged; DRC is required when a board is in scope, not always. Verified live on your exact case. I took the "board_info": { "footprint_count": 15, "net_count": 13, "track_count": 58 },
"drc": { "design_rule_violations": 18, "unconnected_items": 1, "errors": 1 },
"verdict": "NOT READY"And the reason the old code said READY for that board is worth spelling out, because both halves had to fail together: the 18 design-rule violations are all warnings — the single
The unrouted item was invisible to everything — CONFIRMED, and this one you didn't fileChasing "KiCad says 1 unrouted, Konnect says clean" found a third defect. Measured rather than inferred: I took the bundled Two more things the same look at real output turned up:
Fixed in A correction: stderr is not dropped
Konnect does capture it — The likely cause is in your other discussion (#224): PDF and SVG pass repeated Filed as #250 and #252; not fixed this round. Everything else, filed with evidenceAll confirmed, all with the file and line:
I did not file the 3D model as its own issue — one render isn't enough to separate a model-path problem from a resolution problem, and #254 may already cover it. If you can reproduce it with the library roots explicitly set, that would settle it. What I take from thisEvery P0 here is the same defect wearing different clothes: Konnect reported success from the request rather than from the result. The transfer succeeded because the transport accepted the bytes. The review looked good because its own smaller checks were quiet. The position file reported The second one is closer to home: a fixture that shares the code's assumption proves nothing. Your benchmark found all of this precisely because it ran against reality and then read the artifacts instead of trusting the success messages. The |
Uh oh!
There was an error while loading. Please reload this page.
Important
This is a hands-on Codex evaluation, not a maintainer-authored compatibility claim.
I used Konnect v0.6.0, KiCad 10.0.5 on Windows, the standalone
konnect-codexv0.6.0 companionplugin, Konnect's MCP tools, the installed Freerouting ActionPlugin 2.3.0, the
current JLCPCB database, actual KiCad UI/IPC behavior, and the generated project
artifacts. The report includes successful operations, failed calls, unsafe false
positives, GUI fallbacks, and defects encountered during the run. Nothing below
should be read as a claim that the generated board is ready to order.
Result
Overall: PARTIAL — 63/100
END_TO_END: FAIL — the board is not manufacturing-ready
KONNECT_ONLY: FAIL — revision-checked PCB transfer corrupted footprint contents
The modified safe-parts benchmark achieved its first objective: it avoided the
repeatable native KiCad crash and progressed through a complete schematic, PCB
placement, autonomous Freerouting invocation, GND zone creation/refill, DRC, review,
3D rendering, STEP export, and JLCPCB Gerber/BOM/CPL/drill generation.
It did not pass. The benchmark exposed a non-crashing but severe transfer-integrity
failure, routing-rule propagation problems, a remaining unrouted connection, 25 DRC
errors after required widths were enforced, misleading review/manufacturing approval,
and several export/package defects.
3D result
The 1800 x 1200 image was rendered from the final saved
.kicad_pcb. It confirmsthat the board outline, mounting holes, passive placement, SOIC-8 timer, LED, copper,
and silkscreen exist. It also exposes an additional artifact problem: the USB-C
footprint's pads and shell holes are visible, but its connector body did not render,
despite the library preflight reporting a 3D model. That suggests a model-path or
model-resolution gap that deserves separate verification.
Benchmark change: fixed crash-controlled part profile
The original benchmark allowed the agent to choose among suitable in-stock parts.
That made crash reproduction depend on which standard footprint happened to be
selected. The revised prompt uses a fixed allowlist and performs a footprint-graphics
preflight before placement. Footprints containing unsupported user layers
(
Dwgs.User,Cmts.User,Eco1.User,Eco2.User), undefined layers, or unsupportedgraphic types are rejected before live IPC creation.
Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12Package_SO:SOIC-8_3.9x4.9mm_P1.27mmResistor_SMD:R_0402_1005MetricResistor_SMD:R_0402_1005MetricResistor_SMD:R_0603_1608MetricResistor_SMD:R_0402_1005MetricCapacitor_SMD:C_0805_2012MetricCapacitor_SMD:C_0402_1005MetricCapacitor_SMD:C_0402_1005MetricLED_SMD:LED_0603_1608MetricAll seven unique footprint families passed the layer/graphics preflight. The selected
graphics used only
F.Silkscreen,F.Courtyard, andF.Fab, with supported line,polygon, and rectangle primitives. This profile avoided the
Dwgs.User/undefinedlayer failure described in issue #237
and the related broad mapping work in
PR #232.
The result is important: avoiding the native crash did not make transfer correct.
It revealed a second failure mode—silent semantic corruption—that the crash had
previously hidden.
What konnect-codex contributed
This run used the standalone
konnect-codexplugin rather than relying on genericMCP tool descriptions alone. The plugin supplied Codex-native routing for KiCad work,
project-integrity rules, schematic/PCB/library/manufacturing workflows, verification
order, stop conditions, and explicit handling of the Freerouting exception.
The plugin materially improved the run:
cross-editor/native-update crash state;
person to click it;
LOOKS GOODorREADYas authoritative when DRC disagreed; andThe plugin does not patch Konnect or replace its server implementation. It improves
how Codex uses and validates Konnect. This benchmark shows why those are different
jobs: the companion can prevent unsafe claims and choose a safer sequence, but it
cannot make a corrupt IPC payload correct.
Gate table
get_datasheet_urllater returnednullfor all ten IDs even though datasheet information is present in the catalog/schematic flow.run_design_reviewreturned complete/LOOKS GOODandvalidate_for_manufacturingreturnedREADY, both with zero issues, despite the real DRC failures and unrouted item. Review board coverage also saidpads: 0.Detailed execution and findings
1. Catalog and footprint preflight worked, with two inspection gaps
Konnect's local JLCPCB database reported 770,682 parts. Every selected LCSC record was
retrieved by exact ID with manufacturer, MPN, package, library class, price, and stock.
The final BOM contains all ten expected grouped entries and all LCSC IDs.
Two inconsistencies remain:
get_datasheet_urlreturnednullfor every exact C-number. Earlier inspection ofthe downloaded database showed that its
components.Datasheetcolumn alreadycontains the exact LCSC PDF URLs, so the resolver is not using data that is already
available locally. The catalog query tools also omit that column.
get_footprint_infofound the selected library footprints but reportedpad_count: 0. Live/native board inspection later proved the parts have pads. Thebenchmark therefore had to validate graphics separately and compare live transfer
counts after creation.
2. Project and schematic creation succeeded
A fresh project was created without overwriting the earlier crashed project. Project
symbol and footprint libraries were registered through Konnect. The schematic contains
the USB-C power sink, independent 5.1 kΩ CC pull-downs, NE555 astable, timing network,
control bypass capacitor, LED/resistor, explicit USB data/SBU no-connects, and two power
flags. The calculated nominal frequency was added to the sheet:
f = 1 / (0.693 × (10 kΩ + 2 × 68 kΩ) × 10 µF) ≈ 0.99 HzFinal schematic checks agreed on the electrical result:
3. Schematic-editing tools still disagree about direct pin labels
Direct labels placed exactly on pins produced a correct netlist and passed ERC, wire
validation, component validation, short detection, and the connection audit.
find_orphan_items, however, reported all 35 as floating labels.An attempted workaround changed them to 2.54 mm labelled stubs. That exposed a second
problem: adjacent automatically oriented R1/R2 vertical stubs met at their midpoint
and briefly shorted CC2 to GND. Konnect's short detector caught it. The temporary 35
labels and 35 wires were deleted through Konnect and the validated direct-label form
was restored.
This is not just cosmetic. A strict agent needs a single reliable definition of
connectivity. The orphan checker should use the same pin-endpoint semantics as ERC and
the dedicated validators, and automatic stub placement should collision-check before
committing.
4. Custom fields could not be created in bulk
batch_edit_schematic_componentscorrectly edited standard existing fields such asFootprint and Datasheet but rejected Manufacturer, MPN, and LCSC because those custom
fields did not yet exist. All 36 custom annotations were added individually using
add_component_annotation.That is contract-consistent, but expensive and awkward. A bulk create-or-update custom
field operation would substantially simplify sourced designs and reduce partial-write
risk.
5. Launcher/document targeting remains unreliable
launch_kicad_uiwith the project opened KiCad Project Manager, not PCB Editor. Thefirst transfer dry-run failed with
GetOpenDocuments AS_UNHANDLEDbecause no boarddocument was open. Passing the
.kicad_pcbpath to the same launcher opened anotherproject-manager error rather than PCB Editor. Launching standalone
pcbnew.exedid notproduce the IPC socket needed by Konnect.
The strict benchmark permits GUI automation only for Freerouting, so this already
prevents a clean pass. For diagnostic continuation, Codex opened the PCB file from the
project manager. A dedicated
launch_pcb_editor/open_boardoperation should targetthe requested document and wait until that exact document owns a ready IPC endpoint.
6. Revision-checked transfer did not crash—but corrupted every complex footprint
Once PCB Editor was open,
update_pcb_from_schematicdry-run returned a valid planrevision and proposed 12 footprint additions with no conflicts. Applying that exact
revision completed without a native KiCad crash.
The result was semantically invalid:
(0,0);The count relationship is exact: graphic primitives were serialized/deserialized as
phantom pads. This is a dangerous failure because the transaction reported success and
did not crash. A post-apply invariant check must compare expected and actual footprint
pad/graphic counts before reporting success. Ideally the entire transfer should roll
back when those invariants fail.
The corrupted footprints were removed through Konnect. Native KiCad Update PCB from
Schematic was then used as a disclosed diagnostic fallback. KiCad reported zero
transfer warnings/errors and produced the correct result: 50 pads, 15 nets, U1 with 8
pads/20 graphics, and J1 with 22 pads/13 graphics.
7. Native transfer/cross-editor state can destabilize later IPC writes
During earlier narrowing, KiCad crashed after a native update when both schematic and
PCB editors had been involved. Official KiCad issue
#24966 documents a closely related
Windows failure where the first PCB IPC write can terminate KiCad when both editors are
open and no interactive PCB edit has occurred.
For this run, all KiCad editors were closed after native transfer, stale lock files were
moved to a recoverable folder, and only PCB Editor was reopened. Sequential live writes
then succeeded: board outline, twelve footprint moves, two mounting holes, four
silkscreen strings, rule changes, and netclass assignment. KiCad remained responsive.
This supports two separate conclusions:
Dwgs.User/invalid-layer crash is avoidable with the controlled parts;and
8. Placement and mechanical checks reached a clean pre-route state
The board was set to 45 x 30 mm. J1 was placed at the front edge, the LED at the
opposite edge, C3 within 5 mm of the NE555 supply pins, all assembled parts on the top,
and two 3.2 mm NPTH mounting holes at the rear corners. The board used 0.20 mm minimum
clearance, 0.25 mm minimum signal width, 0.60/0.30 mm vias, and a 0.50 mm VBUS netclass.
After moving C3 and shifting J1 away from the edge, placement DRC reached 0 errors and
four warnings: clipped silkscreen, one HRO library mismatch, and two mounting-hole
library-not-found warnings. JLCPCB DFM audit returned zero findings.
9. Freerouting ActionPlugin worked autonomously
Codex opened KiCad's
Tools > External Plugins > Freeroutingmenu, launched theinstalled Freerouting 2.3.0 ActionPlugin, waited for its Java routing workflow, and
verified the imported live board through Konnect. No person clicked anything and the
disabled Konnect
autoroutehandler was not used.Freerouting imported:
KiCad stayed alive. This is meaningful progress beyond the prior run, which never
reached PCB Editor or routing.
10. Routing rules were not carried into the DSN
The generated
temp-freerouting.dsncontained a 0.20 mm default width. The importedroute used 0.20 mm and 0.15 mm segments even though the benchmark required 0.25 mm
signals and a 0.50 mm VBUS netclass. The project-level minimum constraint did not cause
the ActionPlugin's DSN export to use the required default width, and the VBUS class was
not reflected in the route.
All 100 segments were modified sequentially through Konnect: signals to 0.25 mm and
VBUS to 0.50 mm. Width errors disappeared, but the widened geometry produced 25 real
clearance violations, some as small as 0.0694 mm. This cannot be repaired by lowering
the board rule without violating the benchmark.
The routing workflow needs one of the following:
11. The filled GND zone did not produce a clean final board
A B.Cu GND pour was added through Konnect over the board interior and refilled through
live IPC. The rendered board and B.Cu Gerber show the zone. KiCad still reported one
unrouted item. Final DRC reported:
The board must not be sent to fabrication or assembly in this state.
12. Review and manufacturing validation failed open
This was the most serious verification issue after transfer corruption.
run_design_reviewreturned:LOOKS GOOD — no critical issues found;validate_for_manufacturing(fab_house="jlcpcb")returned:READY;Those approvals conflict with a DRC that reports 25 errors and with KiCad's one
unrouted item. A non-empty board with zero reported pads should make review coverage
INCOMPLETE, not complete. Manufacturing validation must consume DRC/unrouted state or
run equivalent checks itself. Passing open here is unsafe because it produces exactly
the language an automation client might use to authorize an order.
13. BOM health passed, but datasheet evidence remains inconsistent
check_bom_healthreported twelve assembled components, zero issues, zero missingfootprints, zero missing values, and zero missing MPNs. The generated grouped JLCPCB
BOM contains all expected C-numbers.
However, the dedicated datasheet resolver returned
nullfor all ten exact LCSC IDs.The run used the HRO connector PDF, the TI NE555 datasheet already carried by the KiCad
symbol, and exact catalog data. The local catalog's Datasheet field should be the first
resolver source, with the web API only as a fallback.
14. Manufacturing package generation returned success but needs stronger QA
export_manufacturing_packagereported 24 entries and no warnings. Non-empty outputsincluded F.Cu/B.Cu Gerbers, masks, paste, silkscreen, Edge.Cuts, separate PTH and NPTH
drills, BOM, CPL, and job file.
Problems found by inspecting the files rather than trusting the success message:
positions.csvincludes H1 and H2 even though mounting holes should be excluded fromthe assembly position file;
4.822835, Y=-4.145669correspond to the board'smillimetre coordinates converted to inches, but the CSV has no unit declaration;
this is unsafe for a JLCPCB upload unless the exporter guarantees the receiving
format interprets inches;
Adhesive,Courtyard,Fab,Margin,User_Comments, andUser_Drawings) that are unnecessary and can confusea turnkey upload; and
The BOM itself was the strongest output: ten grouped rows, correct designators/values,
footprints, and all LCSC numbers.
15. Board PDF/SVG export and snapshot reporting were inconsistent
Schematic PDF export succeeded. STEP export succeeded and produced a 575,242-byte
model. The 3D PNG render succeeded. Board PDF and board SVG export both failed with
kicad-cli exited with 1and empty stderr, leaving no actionable diagnosis.snapshot_projectreturned apcb_snapshotpath and a combined snapshot path. Thereported PCB PDF did not exist on disk; only the combined/schematic-sized PDF existed.
Snapshot creation should verify every reported artifact exists and is non-empty before
returning success.
16. Parent output directory handling was brittle
The first DRC call with an output path failed because the requested
reportsdirectory did not yet exist. Creating the directory and rerunning succeeded. Export
and report tools should either create their narrowly scoped parent directory or return
a structured missing-parent error that names it.
17. The 3D render revealed a model-resolution problem
The selected footprint preflight indicated a 3D model and the STEP export completed,
but the HRO USB-C connector body is absent in the final 3D image. The pads, shell
mounting holes, and outline are present. This may be a missing
${KICAD10_3DMODEL_DIR}resolution, a footprint model-path mismatch, or a model omitted during render/export.
The preflight should resolve and validate the actual model file, not only report that a
model entry exists.
Verification summary
LOOKS GOOD/ 0 pads reported.READY/ 0 issues, conflicting with DRC.Artifact results
.kicad_pro.kicad_sch.kicad_pcbTool and fallback disclosure
Konnect operations used across the run included configuration/toolbox discovery,
project creation, library registration, JLCPCB database inspection, exact part lookup,
symbol/footprint search and inspection, schematic placement and annotation, net and
no-connect creation, ERC/connectivity/short/orphan/overlap audits, revision-checked
PCB transfer, component deletion/recovery, board sizing, placement, holes, text,
design rules, netclasses, DRC, live trace queries and modifications, GND pour/refill,
design review, BOM health, manufacturing validation/DFM, cost estimate, 2D/3D view,
STEP/PDF/SVG/snapshot exports, and the full manufacturing package export.
Freerouting ActionPlugin 2.3.0 was invoked through KiCad's External Plugins menu and
was the declared permitted outside writer for route application. Konnect's disabled
autoroutehandler was not called and DSN/SES files were not manually exchanged.Disclosed strict-benchmark fallbacks:
Project Manager;
solely to continue independent downstream gates; and
No
.kicad_pro,.kicad_sch,.kicad_pcb,.kicad_sym,.kicad_mod,fp-lib-table, orsym-lib-tablewas manually patched, repaired, or generated.Recommended implementation order
P0 — transfer correctness and fail-closed validation
shapes/text and unsupported layers cannot become undefined layer indices.
text, line, rectangle, polygon, courtyard, fab, silk, and model counts.
counts before committing or reporting success.
unrouted items, extraction unexpectedly reports zero pads, or any required coverage
source failed.
P1 — launch, routing, and package correctness
launch_pcb_editor/open_boardoperation that waits forthe exact board's IPC endpoint.
or expose explicit routing constraints in the ActionPlugin flow.
exclude_from_pos_filesfootprints from CPL.explicitly requested.
P2 — evidence and usability
get_footprint_infopad counts and validate model paths actually resolve.automatic net stubs.
kicad-clistderr for PDF/SVG failures and verify snapshot paths.Bottom line
The safe-parts change was worth doing. It converted an opaque native KiCad crash into a
much more informative full-stack run and proved that
konnect-codexcan guide Codexthrough sourcing, schematic capture, live placement, autonomous ActionPlugin routing,
zone fill, verification, and manufacturing export without hiding failures.
The result also shows why a successful tool call is not enough. Konnect currently has
at least two fail-open paths in this workflow: transfer can report success while
destroying footprint semantics, and review/manufacturing validation can approve a board
with 25 DRC errors and one unrouted item. Those should be addressed before calling the
end-to-end workflow production-ready.
The generated board and package are retained as diagnostic artifacts only. Do not
manufacture this revision.
All reactions