258 Commits

Author SHA1 Message Date
Diode Robot 23e08ef2ee Release v0.2.10 v0.2.10 2025-10-14 15:28:00 +00:00
Akhil Velagapudi 84ddcb835c Typed nets w/ metadata (#221)
* Add minimal repro

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove repro/ contents

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add new typed nets API

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Switch to new typed nets API

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Update snapshots

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* cargo fmt

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add net metadata w/ type checking

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Document builtin.net()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix units in units.zen

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Treat symbol as standard net property

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix bug where casting between net types would alloc new id

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* fixup! Treat symbol as standard net property

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Use net contructor to assign default values

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add net conversion (Power -> Net)

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Make regular release builds faster

We can just do all the optimizations on cargo dist.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add .NET deprecated field, static typing for fields

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Allow NET keyword arg

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Make print(net) less verbose

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Hijack stdlib single-net interfaces

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix net naming regressions

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Rename builtin.net() -> builtin.net_type()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-14 11:00:40 -04:00
Akhil Velagapudi fe7441b7f4 Deferred child module evaluation (#226)
* Deferred child module evaluation

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Require load_resolver

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Avoid unsafe {}

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Define imports at top of file

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add minimal repro

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add custom enum impl with structural type checking

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Bump starlark-rust to use stable record type ids

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove repro/ contents

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Delete copy_value, deep copy

Also, migrate testbench to use deferred eval.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix Symbol type ID stability for config defaults

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-13 11:59:14 -04:00
Akhil Velagapudi 198eb0414e Add back net/interface discriminant for signature json (#227)
Commit 2a8e1d3 swapped the module-signature serializer from our InputValue
wrapper to plain serde_json::Value. That dropped the legacy {"Net": {...}} /
{"Interface": {...}} tags inside __signature, so pcbviz’s hsheet code stopped
recognizing IOs (it only recurses when those tags are present). Normal
components were unaffected because they ignore __signature.

Reintroduce the legacy shape when exporting signatures—serialize
nets/interfaces explicitly so the JSON still carries the {"Net": …} and
{"Interface": …} wrappers expected by the viewer.

We could make a change in pcbviz to accept the new json, but seems like
it would be better to fix in pcb for now.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-11 11:07:48 -04:00
Akhil Velagapudi 22ea42fff5 Bump kicad to 9.0.5 (#225)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-10 14:35:02 -04:00
Akhil Velagapudi 2a8e1d30ca Replace InputValue with deep copy and native json ser/de (#223)
* Use deep_copy instead of input value conversion

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Delete InputValue

Use builtin starlarkvalue <> json serialization or deepcopy.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Dedup io() and config()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Impl DeepCopyToHeap for records, enums

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-10 12:14:29 -04:00
Diode Robot 992a3c6934 Release v0.2.9 v0.2.9 2025-10-09 17:18:58 +00:00
Akhil Velagapudi 1b6dad8243 Make PhysicalValue consistent with PhysicalRange (#222)
PhysicalRange has a better typing strategy.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-09 13:07:34 -04:00
Akhil Velagapudi 4634c160ab Fix an issue where the gltf optimizer would lose color data (#220)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-09 10:47:25 -04:00
Davide Asnaghi 25ef81ef01 feat: use symbol reference as fallback (#219)
* add reference parsing

* fall back on symbol reference when not provided

* fmt

* update snapshots

* update snapshots
2025-10-08 15:00:07 -04:00
Diode Robot 1b271a690c Release v0.2.8 v0.2.8 2025-10-08 03:09:27 +00:00
Akhil Velagapudi 0a77bbaa43 Add GLB export w/ gltfpacking (#218)
* Add GLB export w/ gltfpacking

Also separate 3d model exports into multiple tasks

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Switch to gltfpack-sys lib

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Bump gltfpack to drop cmake dependency

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-07 20:28:24 -04:00
Akhil Velagapudi 8170a10b1d Add "ground" copper role, don't use role in symmetric checks (#217)
* Don't use role in symmetric check

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add "ground" copper role

This is only for internal use as kicad only supports power.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Sync stdlib board_config.zen for documentation

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-07 18:32:34 -04:00
Diode Robot 0c7b1bf1ba Release v0.2.7 v0.2.7 2025-10-06 14:35:41 +00:00
Akhil Velagapudi 461d30b3f2 Add a workflow for bumping version (#216)
Use this instead of the "pcb-tag-release" script.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-06 10:28:40 -04:00
Akhil Velagapudi 602303f9a1 Add description as Component parameter (#215)
* Add description as Component param

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fall back to symbol datasheet, description if not set

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-05 20:48:59 -04:00
Akhil Velagapudi 6b65301cce Add spec to BoardConfg() and datasheet to Component() (#214)
* Add spec to BoardConfig

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add datasheet as Component param

Also, sets the built-in "Datasheet" field instead of adding a custom
"datasheet" field.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-05 18:07:38 -04:00
Akhil Velagapudi aacae1f857 Fix flaky test race condition (#213)
Both component_duplicate_pin_names and
component_manufacturer_from_symbol were using test_symbol.kicad_sym,
which caused the contents of one test to be visible to the other. Use
different file names as a short-term fix for this.

Example CI flakes: https://github.com/diodeinc/pcb/actions/runs/18253545573/job/51971797596?pr=212

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-05 00:27:53 -04:00
Akhil Velagapudi 304551b1db Add better error messages, update blinky.zen (and add it to CI) (#212)
* Improve pcb layout error messages

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Update blinky code to use versioned stdlib, board config

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Keep examples/blinky.zen in sync with README.md blinky

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Build all examples in CI

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Build all examples

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-05 00:27:42 -04:00
Davide Asnaghi 6e6e65daf9 Release v0.2.6 (#211) v0.2.6 2025-10-05 04:18:49 +02:00
Akhil Velagapudi 40a5ec69b1 Add pcb-tag-release script (#210)
Usage:
```
pcb-tag-release v0.2.6
```

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-04 22:17:37 -04:00
Akhil Velagapudi 4042c809c7 Fetch all tags and branches when updating git dependencies (#209)
The previous implementation only fetched the default refspec, which could
miss new tags, branches, or force-updated refs. This caused worktree
creation to fail when trying to check out newly published versions.

Now explicitly fetches:
- All tags (--tags)
- All branches (+refs/heads/*:refs/heads/*)
- Force-updated refs (--force)
- Prunes deleted refs (--prune, --prune-tags)

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-04 22:15:48 -04:00
Davide Asnaghi 58f91840a8 add support for dielectric sublayers (#208) 2025-10-05 03:25:26 +02:00
Diode Robot 2d81c942aa Only delete worktrees on pcb clean (#207)
* Only delete worktrees on `pcb clean`

Leave the bare repos as they're just stable object stores.

If `--force` is set, nuke everything.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add fast path that bypasses file locking

fslock is a bit slow on macos

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
Co-authored-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-04 01:16:53 -04:00
Akhil Velagapudi a877cfd530 Use git worktrees for more efficient dep fetching (#206)
Loading multiple versions/refs from the same repository required
separate full clones. This was slow, wasted disk space, and network
bandwidth despite having 90%+ content overlap in some cases.

Use git worktrees with a shared bare repository as the object store.
Each version gets a lightweight working directory that references the
same underlying git objects.

Also use a .lock file to avoid race conditions.

Cache Structure:
  ~/.cache/pcb/github/{user}/{repo}/
  ├── .repo/             # Shared bare repo
  ├── .repo.lock         # Lock file
  ├── v0.2.7/            # Worktree
  └── v0.2.10/           # Worktree

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-04 00:15:01 -04:00
Lenny Khazan 03776f66f0 [ENG-84] First-party DNP support (#204)
* [ENG-84] First-party DNP support

* format
2025-10-03 11:01:35 -04:00
Lenny Khazan da5eecaf98 Fix geber export (#203) 2025-10-02 18:31:00 -04:00
Akhil Velagapudi 4dd6bd1027 Release v0.2.5 (#202) v0.2.5 2025-10-02 18:04:51 -04:00
Akhil Velagapudi 67b164f34b Add builtin.add_electrical_check (#199)
* Add builtin.add_electrical_check

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add snapshot tests

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add checks arg to io()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* le final api

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Allow constructing PhysicalRange with PhysicalRange value

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Reduce API surface, only expose check_voltage_within

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-02 17:57:46 -04:00
Akhil Velagapudi 56c88f23de Make TestBench() check eval lazy (#198)
* Don't alloc to get suppress_errors field

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Make TestBench() check eval lazy

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Simplify

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove evalmode

It's no longer needed as pcb build and pcb test do eval the same way
now. The only difference is post-eval.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Update TestBench() spec

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add a rano parse unit test

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-02 17:43:29 -04:00
Akhil Velagapudi 5bfe35c143 Fix single-net interface net naming (#201)
Before: check that interface has 1 field and that it is a net
After: check that interface has 1 net field (and no interfaces)

This allows for adding metadata fields without changing the net naming.
This should (hopefully) not cause that much churn because we haven't
really used metadata fields in interfaces yet.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-02 13:25:06 -04:00
Lenny Khazan e6b5ff186e First-party component manufacturer support (#200)
* Add manufacturer to component

* Parse manufacturer from symbol

* add to netlist

* cargo fmt
2025-10-02 09:24:14 -07:00
Lenny Khazan 8356e663ff Release v0.2.4 (#197) v0.2.4 2025-10-01 18:02:20 -04:00
Lenny Khazan 1b5886086a Fix for removePositions lookup (#196) 2025-10-01 17:59:44 -04:00
Akhil Velagapudi 1680e12d65 Add physical value ranges (#195)
* Dedup quantity str

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Switch to get_methods for builtin

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add PhysicalRange

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove unused ComponentFactoryValue

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Document the physical range feature

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add ser/de and InputValue support for ranges

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Ensure min <= nominal <= max

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add min, nominal, max, unit attrs to physical range

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-01 16:57:01 -04:00
Akhil Velagapudi d84cb60c6f Release v0.2.3 (#194) v0.2.3 2025-10-01 14:54:48 -04:00
Akhil Velagapudi 5e669e6fcb Bunch of minor fixes from testing against read boards (#193)
- Make # of user layers configurable (defaults to 4)
- Preserve all kicad standard technical layers
- Add 0 value placeholder entries for predefined sizes
- Fix layers sexpr formatting
- Make netclass diff_pair_via_gap and priority configureable
- For "Default" netclass, modify the default
- Add better type hints

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-01 14:50:56 -04:00
Lenny Khazan 71fc380f32 v0.2.2 (#192) v0.2.2 2025-10-01 10:37:55 -04:00
Lenny Khazan c816722f52 Add LSP command to delete position comment (#191) 2025-10-01 10:35:57 -04:00
Akhil Velagapudi 0c7a770d44 Don't auto DNP TP* designators (#190)
Some test points may require parts.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-30 13:21:58 -04:00
Akhil Velagapudi a2ffe8f823 Release v0.2.1 (#189) v0.2.1 2025-09-30 11:47:56 -04:00
Akhil Velagapudi ac8434ff42 Board-level configuration (#188)
* Add `builtin.add_board_config`

Sets constraints

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Enable json extension

Useful for debugging

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* More compact config mapping

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add predefined sizes support to board config

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Make all board config fields optional, add merging

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add netclass support to board config

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add stackup support, sexpr library

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Patch stackup on `pcb layout`

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Sync board config by default

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix deep_merge

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Document board config feature

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Flatten netclasses

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add base configurations

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove unused _is_new_board

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Move board_config.zen to examples/

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Use pcb-sexpr

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Replace --dont-sync with --sync (default true)

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-29 15:57:15 -04:00
Akhil Velagapudi 5aff6c7e45 Use mirrored kicad image (#187)
* Use mirrored kicad image

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add comment for how to sync

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-25 17:32:25 -04:00
Akhil Velagapudi 71984e70af Try ubicloud runners (#185)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-25 15:53:51 -04:00
Akhil Velagapudi 49163707bc Bump dist, drop brew, npm support (#183)
* Bump dist, drop brew, npm support

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Use large runners

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
v0.2.0
2025-09-25 13:57:06 -04:00
Akhil Velagapudi eeabb9dcca Release v0.2.0 (#184) 2025-09-25 13:48:11 -04:00
Akhil Velagapudi 632eb6278b Don't auto-update in CI (#182)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-23 23:54:13 -04:00
Akhil Velagapudi 92c512e21d Release v0.2.0-prerelease.12 (#181) v0.2.0-prerelease.12 2025-09-23 23:27:50 -04:00
Akhil Velagapudi d9bfb02551 Unified caching for load(), Module() (#180)
* Simplify eval error wrapping

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Simply Module() span resolution

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Unified caching for load(), Module()

This simplifies the code and improves the performance substantially.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-23 23:19:39 -04:00
Akhil Velagapudi dcca0defe8 Add physical value comparison,.with_value() (#177)
* Add compare, equals support to PhysicalValue

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix inconsistent attr data

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* fixup! Add compare, equals support to PhysicalValue

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add PhysicalValue builtin, add .with_value()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-23 16:30:19 -07:00