Skip to content

feat(ecad): Update ECAD to support latest atopile and fix some bugs - #119

Open
finger563 wants to merge 24 commits into
mainfrom
feat/ecad-update
Open

feat(ecad): Update ECAD to support latest atopile and fix some bugs#119
finger563 wants to merge 24 commits into
mainfrom
feat/ecad-update

Conversation

@finger563

Copy link
Copy Markdown
Contributor
  • feat(ecad): Update ecad / atopile and improve workflow
  • add step file to repo
  • add box-3 step file
  • improve workflow

Description

Motivation and Context

How has this been tested?

Screenshots (if appropriate, e.g. schematic, board, console logs, lab pictures):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation Update
  • Hardware (schematic, board, system design) change
  • Software change

Checklist:

  • My change requires a change to the documentation.
  • I have added / updated the documentation related to this change via either README or WIKI

Software

  • I have added tests to cover my changes.
  • I have updated the .github/workflows/build.yml file to add my new test to the automated cloud build github action.
  • All new and existing tests passed.
  • My code follows the code style of this project.

Hardware

  • I have updated the design files (schematic, board, libraries).
  • I have attached the PDFs of the SCH / BRD to this PR
  • I have updated the design output (GERBER, BOM) files.

Copilot AI review requested due to automatic review settings July 11, 2026 00:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

@finger563 finger563 self-assigned this Jul 11, 2026
@finger563 finger563 added documentation Improvements or additions to documentation enhancement New feature or request hardware ci continuous integration electronics atopile labels Jul 11, 2026
@github-actions

github-actions Bot commented Jul 11, 2026

Copy link
Copy Markdown

ESP-IDF Size Report for 'Esp Box Emu'

Metric Base PR Delta
FLASH 3,137,688 bytes (49.87%) 3,137,688 bytes (49.87%) 0 bytes (0.00%)
DRAM 178,931 bytes (52.36%) 178,931 bytes (52.36%) 0 bytes (0.00%)
IRAM 0 bytes 0 bytes 0 bytes
RAM (DRAM+IRAM) 178,931 bytes 178,931 bytes 0 bytes (0.00%)

FLASH uses app .bin size or json2 flash sum. RAM sums DRAM+IRAM via idf_size. Percentages shown when totals are available.
DRAM/IRAM usage does not include memory used by the heap allocator at runtime.
This report was generated by esp-idf-size-delta.

finger563 and others added 12 commits July 12, 2026 22:14
packages.atopileapi.com no longer resolves (taken down in the 0.16
platform migration, like the components API), so dependency resolution
of atopile/ti-tps63020@0.4.0 fails in CI and on any machine without a
warm .ato/modules. Commit the installed package (sans .cache) so
`ato build` finds it via its installed-package path and never contacts
the dead registry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ato validates installed packages against the file hashes in
.package_meta.json; git's CRLF->LF normalization of the STEP files
changed their bytes on checkout, making CI fail with "Package has
local modifications". Exempt ecad/.ato/modules from text normalization
and re-commit the original bytes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ization

The atopile-kicad docker image sets ATO_FROZEN=1, silently forcing CI
builds into frozen mode, which fails on phantom in-memory diffs
(locked-attribute defaults, arc direction normalization) that never
reach the file on disk. Pass ATO_FROZEN=0 from the workflow — we verify
layout stability ourselves via canonicalize + git diff.

Also re-serialize box-emu-base.kicad_pcb through the same container
build + canonicalize pipeline CI runs: the file had last been written
by desktop KiCad (zone refills), whose s-expr dialect differs from
atopile's writer, so CI's rebuild produced an 8k-line formatting diff.
Verified idempotent across two container builds; DRC unchanged
(265 violations / 0 unconnected, same accepted classes).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
finger563 and others added 4 commits July 29, 2026 08:38
Add scripts/tidy-silkscreen.py: auto-places every visible reference
label in the nearest clear spot around its footprint (avoiding pads,
vias, silk/fab artwork, bare-copper membrane fingers, board edges and
the other labels), normalized to upright 0/90 orientation and
consistent 1.0/0.8/0.7 mm sizes. Applied to all 9 boards; the two
labels the search could not fit (R8 in the button pocket) were placed
by hand. Outline-footprint REF** markers hidden. Layouts re-serialized
via the container build + canonicalize pipeline; DRC unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The first tidy pass under-estimated text extents (~40% smaller than
KiCad's rendered bounding boxes), so labels still collided with pads,
neighboring parts and each other. tidy-silkscreen.py now measures the
actual text bbox at each candidate position, adds pad-union part bodies
as obstacles, caps blanket-sized artwork bboxes (membrane outline
polylines), and gains a --verify mode that reports any label
overlapping copper, artwork or another label. All 9 boards re-placed
and verified clean; layouts re-serialized via the container build +
canonicalize pipeline; DRC unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ized

Rework the label placer for readability rather than any-free-spot:
gap from the part body is hard-capped (~1.2 mm; a bounded straggler
pass for pullups buried in the membrane fields), slots score by side
preference (above > below > sides), lateral slide and size, tented vias
count as soft cost instead of hard obstacles (freeing space in the
via-dense io region), and row/column clusters of passives get their
labels snapped into alignment. Fixes an anchor bug where non-center
text justification offset the real text from the checked position.
All 9 boards verify clean; every label except four membrane-pocket
pullups sits within 1.5 mm of its part (previously up to 13 mm).
DRC unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
R8/R9/R10 (down/left/right button pullups) sat inside the d-pad
membrane outline where the rubber membrane rests on the board; no
components may live there. Relocated all three to the clear corridor
south of the membrane next to R11 (up), tapping their button nets on
the existing dive-fan vias / new tap vias on the B-layer verticals,
with a shared 3.3V feed spur off the io bus. The now-unused west-side
3.3V feed tree (nw vertical, west bus run, lp1/dnp1 chains, 32 items)
is removed. Verified: no component intrudes on any membrane region
(d-pad blob, A/B / X/Y capsules, start/select strip; C4 clears the
d-pad corner arc by 0.25mm), labels re-placed and overlap-clean, DRC
unchanged on all boards.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

atopile ci continuous integration documentation Improvements or additions to documentation electronics enhancement New feature or request hardware

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants