173 Commits

Author SHA1 Message Date
Akhil Velagapudi e5631d11ce feat: add pcb step export (ENG-1711) (#1275)
Move kicad-step into the workspace as pcb-step and add pcb step export,
which writes the STEP assembly for a board without kicad-cli: body with
drills, footprint models from embedded STEP files, silkscreen and mask.
2026-09-13 02:08:25 -04:00
Lenny Khazan 715d68a50f ENG-248 Avoid redundant net names in imported boards (#1279) 2026-09-12 14:00:57 -04:00
Lenny Khazan c91383479e ENG-1674 Repair intentional no-connect markers (#1274)
* Repair intentional no-connect markers

Co-authored-by: Amp <amp@ampcode.com>
Amp-Thread-ID: https://ampcode.com/threads/T-01a092b5-1c76-7279-8032-46086d7ca820

* Detect overlapping no-connect pins

Amp-Thread-ID: https://ampcode.com/threads/T-01a092b5-1c76-7279-8032-46086d7ca820
Co-authored-by: Amp <amp@ampcode.com>

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-09-11 21:22:30 -04:00
Lenny Khazan 276e7a0d45 Fix rotated mirrored schematic pin geometry (#1273)
Amp-Thread-ID: https://ampcode.com/threads/T-01a092b5-31ef-745f-9e5d-22e83f0892ed

Co-authored-by: Amp <amp@ampcode.com>
2026-09-11 19:45:37 -04:00
Lenny Khazan db281f8f2e Fix false schematic apply open failure (#1272)
Amp-Thread-ID: https://ampcode.com/threads/T-01a092b5-38bf-756e-a0c7-7229ff3c0b17

Co-authored-by: Amp <amp@ampcode.com>
2026-09-11 19:32:43 -04:00
Akhil Velagapudi c3a23c175d Route mouse-bite panels from board-array create (#1271)
* Space mouse-bite holes by chord and limit tabs by curve radius

Drill centers now sit one pitch apart in a straight line along the offset outline, so the web between holes is a true drill-to-drill distance on curves as on straight edges, and a tab whose web falls below the pattern's ligament is rejected. Placement derives its bend limits from one minimum tab radius and reports outline stretches too tight for a tab.

* Emit mouse-bite panels from board-array create

Route a slot around every board instance and bridge it with perforated tabs at the placed sites, using the single-tab builder for each tab. The array profile carries the routed voids as cutouts, the perforations go to the drill layer, V-scores are skipped, and cells grow by the slot so rails and tooling keep their distances. The retained panel is checked whole: every board held before the break rows are cut and free after.

* Open routed slots around tab necks and land tabs on the frame piece beneath them

* Grow mouse-bite cells by 1 mm instead of the whole routing gap

* Trim the mouse-bite tab result and describe chord-spaced rows

* Route a 1.4 mm slot inside the board margin so mouse-bite arrays fit like scored ones
2026-09-11 17:49:39 -04:00
Akhil Velagapudi 6c8e06f82d Add mouse-bite tab placement analysis (#1269)
Add `--mouse-bite-placement` to `board-array create`, which chooses the fewest tab sites that keep a board within a deflection limit under a process load and reports them as JSON. Also ignore footprints without courtyards in mouse-bite eligibility and reject unusable ones.
2026-09-11 01:43:14 -04:00
Lenny Khazan f9c98abeb7 feat: prefer Board(path) with layout_path compatibility (#1267)
* feat: use project path in Board with layout_path compatibility

Amp-Thread-ID: https://ampcode.com/threads/T-01a08986-f282-7225-8fba-ba0448e07284
Co-authored-by: Amp <amp@ampcode.com>

* fix: preserve board template compatibility and reject empty paths

Amp-Thread-ID: https://ampcode.com/threads/T-01a08986-f282-7225-8fba-ba0448e07284
Co-authored-by: Amp <amp@ampcode.com>

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-09-10 13:35:58 -04:00
Lenny Khazan 2d57c80bf0 feat(publish): add structured release preflight checks (#1264)
* feat(publish): add structured release preflight checks

Amp-Thread-ID: https://ampcode.com/threads/T-01a08395-8e11-75c8-b1ce-51467340320b
Co-authored-by: Amp <amp@ampcode.com>

* test(publish): focus check coverage on release behavior

Amp-Thread-ID: https://ampcode.com/threads/T-01a08395-8e11-75c8-b1ce-51467340320b
Co-authored-by: Amp <amp@ampcode.com>

* refactor(publish): use native diagnostics for preflight results

Amp-Thread-ID: https://ampcode.com/threads/T-01a08395-8e11-75c8-b1ce-51467340320b
Co-authored-by: Amp <amp@ampcode.com>

* test(publish): remove redundant preflight coverage

Amp-Thread-ID: https://ampcode.com/threads/T-01a08395-8e11-75c8-b1ce-51467340320b
Co-authored-by: Amp <amp@ampcode.com>

* fix(publish): avoid success marks on diagnostic stages

Amp-Thread-ID: https://ampcode.com/threads/T-01a08395-8e11-75c8-b1ce-51467340320b
Co-authored-by: Amp <amp@ampcode.com>

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-09-09 16:30:47 -04:00
Akhil Velagapudi 9faae1a766 Add analysis-only mouse-bite outline eligibility reports (#1261)
* Add analysis-only mouse-bite outline eligibility to board-array create

Amp-Thread-ID: https://ampcode.com/threads/T-01a08437-61ee-713f-bc74-dc7c2f10cb5c

* Shorten mouse-bite eligibility changelog entry

Amp-Thread-ID: https://ampcode.com/threads/T-01a08437-61ee-713f-bc74-dc7c2f10cb5c

* Reject incomplete courtyard references and ambiguous board selection

Amp-Thread-ID: https://ampcode.com/threads/T-01a08437-61ee-713f-bc74-dc7c2f10cb5c
2026-09-09 02:24:30 -04:00
Lenny Khazan f65f69bfde fix(sim): handle bare source filenames (ENG-1527) (#1259)
Amp-Thread-ID: https://ampcode.com/threads/T-01a083f2-fc7b-777c-b99a-39019f4c42a4

Co-authored-by: Amp <amp@ampcode.com>
2026-09-08 23:01:56 -04:00
Akhil Velagapudi 7d65f98650 ENG-1441: Update approved CLI help snapshot
Amp-Thread-ID: https://ampcode.com/threads/T-01a07c7f-dbdd-70ef-b61e-694d08c325e1
2026-09-07 12:28:12 -04:00
Akhil Velagapudi 2bc8ca73f6 ENG-1441: Expose the CLI geometry accuracy budget
Amp-Thread-ID: https://ampcode.com/threads/T-01a07c7f-dbdd-70ef-b61e-694d08c325e1
2026-09-07 12:28:12 -04:00
Akhil Velagapudi 589b9e6627 ENG-1442: Carry caller resolution through IPC library paths
Amp-Thread-ID: https://ampcode.com/threads/T-01a07c7e-c166-707d-9df1-fc764485da74
2026-09-07 12:21:19 -04:00
Akhil Velagapudi 10ec137c44 ENG-1356: Prepare curved geometry to a stated accuracy (#1171)
Regions carry the resolution they were prepared at, so approximation budgets are chosen once and inherited instead of threaded through every signature. Elliptical arcs close the IR under affine transforms, making placement and expansion exact.
2026-09-07 10:45:54 -04:00
detail-app[bot] a0094b4947 fix(import): classify metric-only 0402Metric/0603Metric passives as 01005/0201 (#1209)
* fix(import): classify metric-only 0402Metric/0603Metric passives as 01005/0201

* fix: strip library namespace and use digit-boundary guard in parse_package_from_text

- Strip the KiCad library namespace (everything before ':') before matching
  metric and imperial package tokens, so a library name such as '0402Metric'
  or '1005Metric' cannot shadow the actual footprint name.
- Switch metric-suffix checks from plain contains() to contains_code() so
  that '1005metric' is not spuriously matched inside '01005metric'.
- Add regression tests for both cases.

* fix(import): keep metric package precedence focused

Amp-Thread-ID: https://ampcode.com/threads/T-01a07a15-395f-7383-bd2b-363ef353aa45

* fix(import): exclude namespaces at package extraction boundary

Amp-Thread-ID: https://ampcode.com/threads/T-01a07a15-395f-7383-bd2b-363ef353aa45

---------

Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: detail-app[bot] <detail-app[bot]@users.noreply.github.com>
Co-authored-by: Akhil Velagapudi <akhil@diode.computer>
2026-09-07 10:45:28 -04:00
detail-app[bot] a8c058dd4c fix(migrate): walk root-level .zen files in pure-container workspaces (#1218)
* fix(migrate): walk root-level .zen files in pure-container workspaces

* Trim container migration regression and correct changelog placement

Amp-Thread-ID: https://ampcode.com/threads/T-01a07a16-b43e-72db-bcef-810d8f6afd4e

* Limit container migration scan to direct root sources

Amp-Thread-ID: https://ampcode.com/threads/T-01a07a16-b43e-72db-bcef-810d8f6afd4e

---------

Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: Akhil Velagapudi <akhil@diode.computer>
2026-09-07 10:43:29 -04:00
detail-app[bot] 2994fc1ed0 fix(pcb-layout): resolve chained net renames in a single pass (#1216)
* fix(pcb-layout): resolve chained net renames in a single pass

* fix(import): apply allocated net names directly

Amp-Thread-ID: https://ampcode.com/threads/T-01a07a16-11c9-72f3-b863-2bf2f74d374b

* fix(import): reject collisions with untouched PCB nets

Amp-Thread-ID: https://ampcode.com/threads/T-01a07a16-11c9-72f3-b863-2bf2f74d374b

* docs: remove import rename bookkeeping release note

Amp-Thread-ID: https://ampcode.com/threads/T-01a07a16-11c9-72f3-b863-2bf2f74d374b

---------

Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: Akhil Velagapudi <akhil@diode.computer>
2026-09-07 10:43:24 -04:00
detail-app[bot] 1199479274 fix(doc): include [workspace].path in pcb doc --package <local-path> H1 header (#1202)
* fix(doc): include [workspace].path in pcb doc --package <local-path> H1 header

* Simplify doc URL regression coverage and fix changelog placement

Amp-Thread-ID: https://ampcode.com/threads/T-01a07a13-bad4-733f-9f2c-7f504772908a

* Remove granular doc URL changelog entry

Amp-Thread-ID: https://ampcode.com/threads/T-01a07a13-bad4-733f-9f2c-7f504772908a

---------

Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: Akhil Velagapudi <akhil@diode.computer>
2026-09-07 10:43:23 -04:00
detail-app[bot] 0764ff471b fix(import): Escape Zener sync Path property when inserting into KiCad PCB (#1212)
* fix(import): Escape Zener sync Path property when inserting into KiCad PCB

* Simplify imported Path regression coverage and correct changelog

Amp-Thread-ID: https://ampcode.com/threads/T-01a07a15-e2c3-72ce-8abe-b10881d86081

---------

Co-authored-by: detail-app[bot] <180357370+detail-app[bot]@users.noreply.github.com>
Co-authored-by: Akhil Velagapudi <akhil@diode.computer>
2026-09-07 09:30:00 -04:00
Akhil Velagapudi d41bb47aba Consolidate BOM table and JSON rows by selected offer (#1225)
* Consolidate BOM table and JSON rows by selected offer

Amp-Thread-ID: https://ampcode.com/threads/T-01a07830-313a-754d-98f1-c37d1e612e1c

* Keep grouped BOM sourcing and totals consistent

Amp-Thread-ID: https://ampcode.com/threads/T-01a07830-313a-754d-98f1-c37d1e612e1c

* Share sourcing data once per BOM JSON group

Amp-Thread-ID: https://ampcode.com/threads/T-01a07830-313a-754d-98f1-c37d1e612e1c
2026-09-06 18:51:06 -04:00
Lenny Khazan 55d2ac1ed7 feat: scaffold a starter board specification (#1199)
Amp-Thread-ID: https://ampcode.com/threads/T-01a073fb-bbd6-76db-8ac8-f4df82db770e

Co-authored-by: Amp <amp@ampcode.com>
2026-09-05 22:03:08 -04:00
Lenny Khazan 2455354a4f fix(lsp): use cached BOM matches during schematic evaluation (#1195)
Amp-Thread-ID: https://ampcode.com/threads/T-01a072c4-74c1-774a-9a36-5307843f02b4

Co-authored-by: Amp <amp@ampcode.com>
2026-09-05 20:35:28 +00:00
Lenny Khazan 3d82841166 Preserve hierarchical sheet ownership when placements are deleted (#1196)
* fix: preserve hierarchical sheet ownership when placements are deleted

Amp-Thread-ID: https://ampcode.com/threads/T-01a072c8-0941-7019-a2ca-68b1e2352816
Co-authored-by: Amp <amp@ampcode.com>

* fix: handle retained sheet repair collisions and hierarchy changes

Amp-Thread-ID: https://ampcode.com/threads/T-01a072c8-0941-7019-a2ca-68b1e2352816
Co-authored-by: Amp <amp@ampcode.com>

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-09-05 15:58:28 -04:00
Akhil Velagapudi 81e6a7a1f7 docs: trim IPC and KiCad developer guides
Amp-Thread-ID: https://ampcode.com/threads/T-01a06f70-15f1-72fd-9321-6cb7dfa45e18
2026-09-04 23:22:31 -04:00
Akhil Velagapudi f83892f682 Remove redundant pricing and layout helpers (#1173)
Amp-Thread-ID: https://ampcode.com/threads/T-01a06f6d-7de5-7658-9186-6ee15dc5db1e
2026-09-04 23:01:39 -04:00
Akhil Velagapudi 566301326d Add PCB service-account authentication (#1164)
* Add PCB service-account authentication

* Keep service-account imports on the active endpoint
2026-09-04 17:36:34 -04:00
Akhil Velagapudi e22a697f4e Simplify bundled DFM PDKs 2026-09-04 15:22:18 -04:00
Akhil Velagapudi f78e954848 Open DFM reports in web viewer 2026-09-03 22:17:47 -04:00
Akhil Velagapudi 7f9c5ac110 Update supported LED colors 2026-09-03 21:21:57 -04:00
Akhil Velagapudi 882b27ec43 Preserve authored release BOM intent (#1156)
Amp-Thread-ID: https://ampcode.com/threads/T-01a0686b-e9d3-729e-8bc6-09681ec30d96
2026-09-03 15:18:50 -04:00
Lenny Khazan ba03b9f9d5 fix(schematic): ignore nested NotConnected ports (ENG-1300) (#1150) 2026-09-03 09:07:35 -04:00
Akhil Velagapudi 69a86fa531 Fix IPC-2581 assembly hole reporting (#1145) 2026-09-02 15:46:23 -04:00
Akhil Velagapudi 0d10c59987 Expose via protection evidence in assembly reports
Amp-Thread-ID: https://ampcode.com/threads/T-01a05fed-a624-770b-928a-d521d02b77b4
Co-authored-by: Amp <amp@ampcode.com>
2026-09-02 11:31:53 -04:00
Akhil Velagapudi f6be77059d Hide advice diagnostics from pcb publish (ENG-1255) (#1142)
* Hide advice diagnostics from pcb publish

Amp-Thread-ID: https://ampcode.com/threads/T-01a05fa1-40c4-71ac-8dbb-88677e669049
Co-authored-by: Amp <amp@ampcode.com>

* Simplify diagnostic rendering policy

Amp-Thread-ID: https://ampcode.com/threads/T-01a05fa1-40c4-71ac-8dbb-88677e669049
Co-authored-by: Amp <amp@ampcode.com>

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-09-02 02:09:28 +00:00
Akhil Velagapudi a77b032e3b ENG-1254 Fetch tags before publish versioning
Fetch remote tags before calculating versioned board releases. Preserve local-only tags and local publish behavior on detached or untracked branches.
2026-09-01 21:26:54 -04:00
Akhil Velagapudi 6ecb7ea0ec Fix pcb doc package URL resolution (#1140)
Classify domain-based package references with the shared package URL parser so pcb doc resolves registry URLs returned by pcb search.
2026-09-01 20:33:42 -04:00
Akhil Velagapudi c0801e6bcc Fix pcb layout check contract
Amp-Thread-ID: https://ampcode.com/threads/T-01a05f0d-72e4-702d-8d21-63f80d0b4e7c
Co-authored-by: Amp <amp@ampcode.com>
2026-09-01 20:20:01 -04:00
Akhil Velagapudi 901fab536f Preserve exact IPC-2581 assembly geometry (#1137)
* Preserve exact assembly package geometry

Amp-Thread-ID: https://ampcode.com/threads/T-01a055d1-d6f8-72c4-8ace-0dcead9681bd
Co-authored-by: Amp <amp@ampcode.com>

* Simplify assembly geometry lowering

Amp-Thread-ID: https://ampcode.com/threads/T-01a055d1-d6f8-72c4-8ace-0dcead9681bd
Co-authored-by: Amp <amp@ampcode.com>

* Make assembly profile test line-ending neutral

Amp-Thread-ID: https://ampcode.com/threads/T-01a055d1-d6f8-72c4-8ace-0dcead9681bd
Co-authored-by: Amp <amp@ampcode.com>

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-09-01 17:24:18 -04:00
Akhil Velagapudi 2b07e4d881 Structure PDK profile support and rule cases (#1132)
Amp-Thread-ID: https://ampcode.com/threads/T-01a05b89-01e4-75aa-b44f-047e346dbd96

Co-authored-by: Amp <amp@ampcode.com>
2026-09-01 15:38:10 -04:00
Akhil Velagapudi 2314a2393f ENG-1199 Expose PCBA assembly report through CLI (#1131)
Amp-Thread-ID: https://ampcode.com/threads/T-01a055d1-d6f8-72c4-8ace-0dcead9681bd

Co-authored-by: Amp <amp@ampcode.com>
2026-09-01 15:07:29 -04:00
Akhil Velagapudi cee1e63b6a Add profile-based DFM PDKs
Amp-Thread-ID: https://ampcode.com/threads/T-01a05b89-01e4-75aa-b44f-047e346dbd96
Co-authored-by: Amp <amp@ampcode.com>
2026-09-01 07:03:07 +00:00
Akhil Velagapudi 64759d1f25 Update dependencies and adapt affected APIs (#1118) 2026-08-30 23:06:58 -04:00
Akhil Velagapudi 7e65cc0f48 ENG-1163 Fail pcb fmt on parse, read, and write errors.
Format files once and return a nonzero exit in write, diff, and check modes when a file fails. Keep --check as the only mode that fails for unformatted files.

Amp-Thread-ID: https://ampcode.com/threads/T-01a05502-bd12-7499-b020-40fa1b823b19
2026-08-31 01:18:11 +00:00
Lenny Khazan 9ca4474a81 Handle closed CLI output pipes (#1112)
* fix: handle closed CLI output pipes

Amp-Thread-ID: https://ampcode.com/threads/T-01a04c02-604b-776e-8969-5bf3bac7ea8e

* docs: document CLI output handling

Amp-Thread-ID: https://ampcode.com/threads/T-01a04c02-604b-776e-8969-5bf3bac7ea8e

* docs: simplify CLI output guidance

Amp-Thread-ID: https://ampcode.com/threads/T-01a04c02-604b-776e-8969-5bf3bac7ea8e
2026-08-30 18:40:56 +00:00
Akhil Velagapudi ef43af98c4 Add WASM support for IPC import, export, and DFM (#1117)
* Make IPC and IR tooling compatible with WASM

Separate native CLI dependencies from in-memory IPC import, export, and DFM code. Keep native parallel execution and run the same geometry algorithms sequentially on WASM.

* Add WASM APIs for IPC import, export, and DFM

Expose typed IpcDocument bindings and shared export helpers. Add package builds, JavaScript runtime tests, and TypeScript checks.
2026-08-30 13:33:48 -04:00
Akhil Velagapudi 8e2bbb1901 Add self-contained JSON DFM reports with native geometry (#1116)
* feat: add interactive DFM diagnostic viewer

Export check-owned sites, geometry, measurements, and layout provenance. Add a standalone viewer with grouped findings, full vector artwork, native evidence curves, and synchronized navigation.

* feat: export portable DFM report bundles

Replace the POC viewer with versioned data bundles for external consumers. Share JSON serialization, preserve checked inputs, and document the archive and diagnostic contracts.

* feat: make DFM reports self-contained JSON
2026-08-30 13:13:23 -04:00
Akhil Velagapudi 423133a328 ENG-1148 Inherit symbol descriptions in BOM
Amp-Thread-ID: https://ampcode.com/threads/T-01a04f02-87e5-7409-941d-21508375373c
2026-08-29 19:38:56 -04:00
Lenny Khazan 001d10ba71 Revert "fix: handle closed CLI output pipes"
This reverts commit 5b426383ea.
2026-08-29 06:18:58 +00:00
Lenny Khazan 5b426383ea fix: handle closed CLI output pipes
Amp-Thread-ID: https://ampcode.com/threads/T-01a04c02-604b-776e-8969-5bf3bac7ea8e
2026-08-29 06:15:13 +00:00