AnasSarkiz/rp2040-usb-c-single-axis-dm542t-motion-controller--01a0e89c
A USB‑C RP2040 controller board with external QSPI flash, crystal clock, regulated 3.3/1.1/5 V power, boost-converted motor-driver supply, protected USB and limit inputs, status LEDs, reset/boot switches, and AO3400A MOSFET outputs for stepper-control signals.
- Version
- 0.1.0-prototype.19
- License
- unset
- Stars
- 0
tooling/README.md
# Source-built fabrication fixes
These four packages are local forks, **not official upstream releases**. They
are installed by the board's locked Bun overrides. The ordinary `tsci` commands
load the board's core package; there is no runtime monkey patch and no Gerber or
Circuit JSON rewriting. Every published package archive is hashed in
`manifest.json`, alongside its official upstream Git commit and source patch.
Upstream licenses are preserved in `licenses/`.
- **props/core:** explicit `solderPasteDisabled` on plated holes. The optional
boolean leaves existing shape-specific behavior unchanged when omitted or
false. True omits paste on both sides, while retaining the original copper,
drill, mask, and connectivity. It does not conflict with mask properties.
The board sets it only on J2–J6. The core version reporter also returns the
actual package version, including its local prerelease suffix.
- **core a0.2:** classifies internal component links before expanding net aliases.
Previously, an internally connected switch pad made every obstacle on its net
assignable, including fixed ground pads and the unbroken ground plane. The
change preserves assignable interconnect pads/vias and fixes unrelated copper.
A failing-before/passing-after regression, reviewed snapshot, 23 related tests,
typecheck and canonical build validate this source fix. The board SRJ now has a
fixed ground plane and 10 actual assignable obstacles instead of 80.
- **alphabet:** adds U+2022 BULLET to the stroke alphabet and advance metrics.
Outlines and the TTF/base64 font are regenerated by the upstream scripts.
Validation: props parsing/default/rejection tests and typecheck pass; core
typecheck, canonical build, version test, and 17 relevant plated-hole/paste
regressions pass; all 10 alphabet tests pass. New visual snapshots were rendered
and inspected. Upstream font generation emits one Boolean-union warning on both
the unchanged baseline and this fork; the added bullet's stroke, polygon, and
TTF exports pass explicit regression checks. DejaVu comparison tests report that
the optional reference font is absent; they are not counted as comparisons.
`python3 scripts/rebuild-tooling.py` reconstructs the source checkouts under
`.tscircuit/rebuild-toolchain/`, applies the source patches, copies the regression
tests, regenerates props docs/font outputs, checks and builds the packages, and
packs them into that folder's `packages/`. It requires network access, Bun 1.3.9,
Python 3.14, the standard `patch` command, and yalc 1.0.0-pre.53. It uses the
handbook's yalc workflow only between source packages. It does not replace the
board's reviewed package archives or publish anything. Inspect any rebuilt
package before updating the manifest and lockfile.
The source fixtures in `regression-tests/` compile and run in their respective
upstream repositories, not as board circuit sources.
Reconstruction verification on 2026-09-29: the helper reconstructed, built and
tested props and alphabet. Core's fresh dependency installation stalled without
network activity and was stopped after more than ten minutes; the helper now
limits this installation to five minutes and fails explicitly on timeout. Thus
end-to-end verification of this convenience helper remains incomplete. The
reviewed core archive was built and typechecked from the same patched source in
the original checkout, where all relevant core tests passed. The board installs
the hashed archives from its locked dependencies without rebuilding them.
**Autorouter a0.2 (prototype.19):** repair-stage DRC carries the board's
`minViaHoleEdgeToViaHoleEdgeClearance` through Circuit JSON conversion as a
floor. The indexed repair engine measures copper edges, so its search margin
subtracts the smallest via annular-diameter difference from the drill rule.
For 0.30/0.60 mm vias, the 0.46 mm drill gap becomes 0.16 mm copper gap;
this conversion stays conservative for mixed via sizes. The authoritative
check still examines actual holes. Nine focused tests, TypeScript and the
canonical build pass. This does not guarantee a route solves.
The source checkout follows upstream's disabled lockfile-saving setting. An
attempt to save a source lockfile produced an invalid unresolved peer entry;
that file is quarantined locally and is not published or used by the helper.
The board's own dependency lockfile and package archive hashes remain the
reproducibility boundary. Source reconstruction has not been verified end to
end. No upstream benchmark was run: the repository requires Blacksmith for
benchmarks, unavailable here.
**Core a0.3 (prototype.19):** the configured `autorouter.traceClearance`
is now forwarded as the local solver's `defaultObstacleMargin`, including
explicit per-phase settings and the legacy simplified remote endpoint. A
regression reproduced the missing 0.23 mm setting and passes with the fix.
The core's 24 focused tests, TypeScript and canonical source build pass.
The board requests 0.20 mm routing clearance; physical acceptance thresholds
remain unchanged. No generated copper is modified.