akhilles
51c5e44997
Delete copy_value, deep copy
...
Also, migrate testbench to use deferred eval.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-10-12 01:01:23 -04:00
akhilles
3efddaf778
Remove repro/ contents
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-10-11 19:02:00 -04:00
akhilles
4f1f4b6d38
Bump starlark-rust to use stable record type ids
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-10-11 19:01:42 -04:00
akhilles
5266653458
Add custom enum impl with structural type checking
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-10-11 18:32:20 -04:00
akhilles
93f3eae692
Add minimal repro
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-10-11 16:27:13 -04:00
akhilles
17d9fba809
Define imports at top of file
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-10-11 16:27:13 -04:00
akhilles
65b00bfcd5
Avoid unsafe {}
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-10-11 11:26:03 -04:00
akhilles
e13890dc4f
Require load_resolver
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-10-11 11:26:03 -04:00
akhilles
0357d45408
Deferred child module evaluation
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-10-11 11:26:03 -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