astra/pd-power-supply

USB-PD Power Supply with RP2040 controller

Version
1.1.6
License
unset
Stars
0

scripts/verify-fabrication.py

"""Check that exported manufacturing data agrees with the validated board."""
import csv, io, json, math, re, zipfile
from collections import Counter
from pathlib import Path
circuit=json.loads(Path('dist/board/circuit.json').read_text())
parts=json.loads(Path('parts.json').read_text())
vias=[e for e in circuit if e['type']=='pcb_via']
with zipfile.ZipFile('fabrication/gerbers.zip') as archive:
    assert {'F_Cu.gbr','In1_Cu.gbr','In2_Cu.gbr','B_Cu.gbr','drill-L1-L4.drl','drill_npth.drl'} <= set(archive.namelist())
    drill=archive.read('drill-L1-L4.drl').decode()
    tool=next(t for t,d in re.findall(r'^(T\d+)C([\d.]+)$',drill,re.M) if abs(float(d)-.3)<1e-9)
    hits=drill.split('\n'+tool+'\n')[1].split('\nM30')[0]
    points=[(float(x),float(y)) for x,y in re.findall(r'^X([-\d.]+)Y([-\d.]+)$',hits,re.M)]
    assert len(points)==len(vias)==205
    assert Counter((round(x,4),round(y,4)) for x,y in points)==Counter((round(v['x'],4),round(v['y'],4)) for v in vias)
    bom=list(csv.DictReader(io.StringIO(archive.read('bom.csv').decode())))
    assert {r['Designator']:r['JLCPCB Part #'] for r in bom}==parts
    cpl=list(csv.DictReader(io.StringIO(archive.read('pick_and_place.csv').decode())))
    assert len(cpl)==80 and {r['Designator'] for r in cpl}==set(parts)
    source={e['name']:e['source_component_id'] for e in circuit if e['type']=='source_component'}
    placements={e['source_component_id']:e for e in circuit if e['type']=='pcb_component'}
    for row in cpl:
        component=placements[source[row['Designator']]]
        assert math.hypot(float(row['Mid X'])-component['center']['x'],float(row['Mid Y'])-component['center']['y'])<.001
print('PASS: four-layer Gerbers; 205 exported 0.3 mm via drill hits match board positions; 80 exact JLC BOM/CPL references.')
,drill,re.M) if abs(float(d)-.3)\u003c1e-9)\n hits=drill.split('\\n'+tool+'\\n')[1].split('\\nM30')[0]\n points=[(float(x),float(y)) for x,y in re.findall(r'^X([-\\d.]+)Y([-\\d.]+)
,hits,re.M)]\n assert len(points)==len(vias)==205\n assert Counter((round(x,4),round(y,4)) for x,y in points)==Counter((round(v['x'],4),round(v['y'],4)) for v in vias)\n bom=list(csv.DictReader(io.StringIO(archive.read('bom.csv').decode())))\n assert {r['Designator']:r['JLCPCB Part #'] for r in bom}==parts\n cpl=list(csv.DictReader(io.StringIO(archive.read('pick_and_place.csv').decode())))\n assert len(cpl)==80 and {r['Designator'] for r in cpl}==set(parts)\n source={e['name']:e['source_component_id'] for e in circuit if e['type']=='source_component'}\n placements={e['source_component_id']:e for e in circuit if e['type']=='pcb_component'}\n for row in cpl:\n component=placements[source[row['Designator']]]\n assert math.hypot(float(row['Mid X'])-component['center']['x'],float(row['Mid Y'])-component['center']['y'])\u003c.001\nprint('PASS: four-layer Gerbers; 205 exported 0.3 mm via drill hits match board positions; 80 exact JLC BOM/CPL references.')\n","content_mimetype":"application/octet-stream","created_at":"2026-10-02T05:53:56.597Z"}; window.SSR_PACKAGE_RELEASES = [{"package_release_id":"57387f49-bd91-4277-8a82-706b1575c5ed","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.1.6","github_commit_sha":null,"is_locked":false,"is_latest":true,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-10-02T05:49:17.341Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-39bf50c27b23653dc748b2f8c6a5c1eb","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=57387f49-bd91-4277-8a82-706b1575c5ed\u0026file_path=dist%2Fboard%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=57387f49-bd91-4277-8a82-706b1575c5ed\u0026file_path=dist%2Fboard%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=57387f49-bd91-4277-8a82-706b1575c5ed\u0026file_path=dist%2Fboard%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"24f0cf38-fb40-45d0-836b-0e6f86d71589","user_code_job_started_at":"2026-10-02T05:54:07.184Z","user_code_job_completed_at":"2026-10-02T05:57:46.075Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=9c12c200c606a8a4fc4b22bea98b5066b71fb09dcbd7a7f400745d1cf5e227bf","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"d0b3c64f-beee-4dc5-abcb-a4b31620e56c","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.1.5","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-10-02T05:21:26.255Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-4bbac40f730a6e666746638b5bce0214","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=d0b3c64f-beee-4dc5-abcb-a4b31620e56c\u0026file_path=dist%2Fboard%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=d0b3c64f-beee-4dc5-abcb-a4b31620e56c\u0026file_path=dist%2Fboard%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=d0b3c64f-beee-4dc5-abcb-a4b31620e56c\u0026file_path=dist%2Fboard%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"9977a9d1-ffee-4530-a0ce-f8a2a6a17354","user_code_job_started_at":"2026-10-02T05:28:49.844Z","user_code_job_completed_at":"2026-10-02T05:32:44.542Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=32426885c29cd0f472a13041c7fe25f30e1bba855a0e921f03a1363769439d45","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"461e22f2-cf3b-4373-988a-4c7c84b0546c","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.1.3","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-10-01T06:05:29.938Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-6982b644b25eba5507a88650e659d250","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=461e22f2-cf3b-4373-988a-4c7c84b0546c\u0026file_path=dist%2Fboard%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=461e22f2-cf3b-4373-988a-4c7c84b0546c\u0026file_path=dist%2Fboard%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=461e22f2-cf3b-4373-988a-4c7c84b0546c\u0026file_path=dist%2Fboard%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"1598d6b7-8f6b-425c-855b-cc36d43d637e","user_code_job_started_at":"2026-10-01T06:06:23.266Z","user_code_job_completed_at":"2026-10-01T06:10:29.578Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=4ec2a27978add42a483db852b0cf6a4bcc09bd149295bbdb3c56b596648434cc","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"74ade332-adf9-49dc-8bc5-b52f1719ca1f","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.1.2","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-10-01T05:58:28.515Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-13ca21a27871f650576f2b5f4407b0be","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=74ade332-adf9-49dc-8bc5-b52f1719ca1f\u0026file_path=dist%2Fboard%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=74ade332-adf9-49dc-8bc5-b52f1719ca1f\u0026file_path=dist%2Fboard%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=74ade332-adf9-49dc-8bc5-b52f1719ca1f\u0026file_path=dist%2Fboard%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"7aeef6c5-b681-4956-99c6-4fa7aaf0c075","user_code_job_started_at":"2026-10-01T05:59:25.674Z","user_code_job_completed_at":"2026-10-01T06:02:19.402Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=b964dcfadb31baa2f4bad744502fd1f6ee5db2d583366c69db155cef4b14077e","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"c1e9a7d2-505a-429b-83dc-a3869e8fccd1","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.1.1","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-10-01T05:58:00.618Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-cd82ecf7a30c32df857a8420afb43d85","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":null,"sch_preview_image_url":null,"cad_preview_image_url":null,"package_release_website_url":null,"display_status":"pending","latest_package_build_id":null,"user_code_job_started_at":null,"user_code_job_completed_at":null,"user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":null,"ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"59e27c0a-2d98-4a01-b6f0-02c8dfcd72f3","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.1.0","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-10-01T05:56:53.634Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-5fa557ccfcdd3e8e324ca42475980960","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":null,"sch_preview_image_url":null,"cad_preview_image_url":null,"package_release_website_url":null,"display_status":"pending","latest_package_build_id":null,"user_code_job_started_at":null,"user_code_job_completed_at":null,"user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":null,"ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"5b567f30-ca83-4d69-9c46-e1e92f8d45a6","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.0.3","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-09-28T20:35:28.873Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":true,"transpilation_display_status":"pending","fs_sha":"md5-dc1a9fc318af6029473d110f57b13735","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":true,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":true,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=5b567f30-ca83-4d69-9c46-e1e92f8d45a6\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=5b567f30-ca83-4d69-9c46-e1e92f8d45a6\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=5b567f30-ca83-4d69-9c46-e1e92f8d45a6\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"4ae0b9e6-8a82-4663-944d-7585dc3d56cd","user_code_job_started_at":"2026-09-28T20:35:43.870Z","user_code_job_completed_at":"2026-09-28T20:42:31.252Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=cdae67d8f4cc4360b331919349ba8beac69db5c4e9c7da14f89c748200e986c2","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"8d468217-a6ee-485d-aead-aca0549dcc75","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.0.2","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-09-28T20:20:10.873Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":true,"transpilation_display_status":"pending","fs_sha":"md5-c1d1de79e0ce1a317309aafdf7bdd2bd","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":true,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":true,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=8d468217-a6ee-485d-aead-aca0549dcc75\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=8d468217-a6ee-485d-aead-aca0549dcc75\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=8d468217-a6ee-485d-aead-aca0549dcc75\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"7301b8b6-96d1-463f-9bae-9d3b8528b8bb","user_code_job_started_at":"2026-09-28T20:20:16.722Z","user_code_job_completed_at":"2026-09-28T20:25:24.768Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=9c0933379e2c9c5f6df2ab35d41e258efe099c2a98d29df5b693b245b7717119","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"4471ed3f-4107-4aa1-925e-7265d9a2390e","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.0.1","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-09-28T20:00:02.156Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":true,"transpilation_display_status":"pending","fs_sha":"md5-2c901a084d7194c7eedee88ada2a121e","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":true,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":true,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=4471ed3f-4107-4aa1-925e-7265d9a2390e\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=4471ed3f-4107-4aa1-925e-7265d9a2390e\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=4471ed3f-4107-4aa1-925e-7265d9a2390e\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"be4dbc88-124e-46e5-8de1-bb6c3114b081","user_code_job_started_at":"2026-09-28T20:00:15.179Z","user_code_job_completed_at":"2026-09-28T20:06:31.397Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=103b45821100f63a6063b6b740a9d259a0505aa9a2632df8a9f10288495c06e5","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"753728c0-7a2a-4c40-9a87-da31189b337f","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.0.0","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-09-28T19:51:44.665Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":true,"transpilation_display_status":"pending","fs_sha":"md5-7a6a050ecd74b635409e781fdb5badef","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":true,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":true,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=753728c0-7a2a-4c40-9a87-da31189b337f\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=753728c0-7a2a-4c40-9a87-da31189b337f\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=753728c0-7a2a-4c40-9a87-da31189b337f\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"a53e5323-dc58-4f0e-9a89-3290fac7cc11","user_code_job_started_at":"2026-09-28T19:51:48.288Z","user_code_job_completed_at":"2026-09-28T19:55:31.881Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=b62dac558bccf57f412148d739fb39273c2b03f5c97742a23e406f09faf4d6b5","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null}]; window.SSR_PACKAGE_BUILDS = []; window.SSR_RELATED_PACKAGES = [{"package_id":"d2ea0487-143c-447f-a62e-ab971c2524cd","creator_account_id":"9f398687-69d0-4ef4-a48c-bb6dc990e7df","latest_package_release_id":"bde55b83-e437-4d8f-b5c0-1e0b68a70ec3","last_built_release_id":"bde55b83-e437-4d8f-b5c0-1e0b68a70ec3","latest_package_release_fs_sha":"md5-4095a4495925ad2deb356dc9c3cccaaf","latest_pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=bde55b83-e437-4d8f-b5c0-1e0b68a70ec3\u0026file_path=dist%2Findex%2Fpcb.svg","latest_sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=bde55b83-e437-4d8f-b5c0-1e0b68a70ec3\u0026file_path=dist%2Findex%2Fschematic.svg","latest_cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=bde55b83-e437-4d8f-b5c0-1e0b68a70ec3\u0026file_path=dist%2Findex%2F3d.png","latest_version":"1.4.0","license":"unset","owner_org_id":"7ca3101d-0ece-4182-a775-d3aee7d7f0a0","org_owner_tscircuit_handle":"astra","owner_github_username":null,"github_repo_full_name":null,"is_source_from_github":false,"description":null,"name":"astra/nema17-stepper-motor-controller-spring-clamp-rp2040","unscoped_name":"nema17-stepper-motor-controller-spring-clamp-rp2040","star_count":0,"created_at":"2026-09-26T19:14:57.511Z","updated_at":"2026-09-28T19:52:44.691Z","ai_description":"A 4-layer RP2040 controller board that negotiates USB‑C PD motor power and drives a NEMA17 stepper via a DRV8825, with current sensing, thermal shutdown, RGB status LED, buzzer alarm, optional AS5600 encoder, protection/filtering, and test points.","ai_usage_instructions":null,"is_private":false,"is_unlisted":false,"is_public":true,"public_dist_enabled":false,"has_public_dist":true,"starred_at":null,"default_view":"files","website":null,"github_installation_id":null,"allow_pr_previews":false,"related_type":"same_author","thumbnail_url":"https://api.tscircuit.com/package_files/view?package_release_id=bde55b83-e437-4d8f-b5c0-1e0b68a70ec3\u0026file_path=dist%2Findex%2Fpcb.svg"},{"package_id":"7c4f7ef6-0c20-441e-b5a5-1952d955eccf","creator_account_id":"d16b4134-1b33-4d60-bdf2-151748766d5b","latest_package_release_id":"cbdd52b4-d52e-4095-8882-d107ff959339","last_built_release_id":"cbdd52b4-d52e-4095-8882-d107ff959339","latest_package_release_fs_sha":"md5-2ea962e9b2b863a7a4703b259838dc8e","latest_pcb_preview_image_url":"https://registry-api.tscircuit.com/package_files/view?package_release_id=cbdd52b4-d52e-4095-8882-d107ff959339\u0026file_path=dist%2Findex%2Fpcb.svg","latest_sch_preview_image_url":"https://registry-api.tscircuit.com/package_files/view?package_release_id=cbdd52b4-d52e-4095-8882-d107ff959339\u0026file_path=dist%2Findex%2Fschematic.svg","latest_cad_preview_image_url":"https://registry-api.tscircuit.com/package_files/download?package_release_id=cbdd52b4-d52e-4095-8882-d107ff959339\u0026file_path=dist%2Findex%2F3d.png","latest_version":"0.0.1","license":"unset","owner_org_id":"9e4219cf-4b9e-4932-9128-52cef42cad89","org_owner_tscircuit_handle":"0hmx3","owner_github_username":null,"github_repo_full_name":null,"is_source_from_github":false,"description":"","name":"aura/diy-power-delivery-trigger","unscoped_name":"diy-power-delivery-trigger","star_count":0,"created_at":"2026-04-23T21:10:31.029Z","updated_at":"2026-04-25T11:57:14.077Z","ai_description":"This hardware design implements a USB Type-C port with supporting power management and signal conditioning components, including a USB-C connector, a FUSB302 USB-C port controller, ESD protection diodes, a buck converter for 3.3V power regulation, an STM32 microcontroller for control and processing, an RGB LED indicator, push button, terminal block connections, and associated filtering and support components.","ai_usage_instructions":null,"is_private":false,"is_unlisted":false,"is_public":true,"public_dist_enabled":false,"has_public_dist":true,"starred_at":null,"default_view":"files","website":null,"github_installation_id":null,"allow_pr_previews":false,"related_type":"similar_ai_description","thumbnail_url":"https://registry-api.tscircuit.com/package_files/view?package_release_id=cbdd52b4-d52e-4095-8882-d107ff959339\u0026file_path=dist%2Findex%2Fpcb.svg"},{"package_id":"8b12cf44-92d8-4b4c-af52-66e2fd3d686f","creator_account_id":"1f745cb8-1b99-4215-905f-f8e3dc29bc28","latest_package_release_id":"61e192b9-d8a1-462b-a891-3a41ca437d68","last_built_release_id":"61e192b9-d8a1-462b-a891-3a41ca437d68","latest_package_release_fs_sha":"md5-1a6957eaf2a59147dcbfbb42de50f2d6","latest_pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=61e192b9-d8a1-462b-a891-3a41ca437d68\u0026file_path=dist%2Findex%2Fpcb.svg","latest_sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=61e192b9-d8a1-462b-a891-3a41ca437d68\u0026file_path=dist%2Findex%2Fschematic.svg","latest_cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=61e192b9-d8a1-462b-a891-3a41ca437d68\u0026file_path=dist%2Findex%2F3d.png","latest_version":"1.0.9","license":"unset","owner_org_id":"60917f07-d371-4c51-854f-e2bd7dab9e5a","org_owner_tscircuit_handle":"hrithik18k","owner_github_username":null,"github_repo_full_name":null,"is_source_from_github":false,"description":null,"name":"hrithik18k/air-mouse","unscoped_name":"air-mouse","star_count":0,"created_at":"2026-08-26T10:56:09.431Z","updated_at":"2026-09-22T04:51:57.607Z","ai_description":"A hardware component library defining footprints and 3D models for an ESP32 module, motion sensors, battery chargers, voltage regulator, connectors, switches, and status LED.","ai_usage_instructions":null,"is_private":false,"is_unlisted":false,"is_public":true,"public_dist_enabled":false,"has_public_dist":true,"starred_at":null,"default_view":"files","website":null,"github_installation_id":null,"allow_pr_previews":false,"related_type":"random","thumbnail_url":"https://api.tscircuit.com/package_files/view?package_release_id=61e192b9-d8a1-462b-a891-3a41ca437d68\u0026file_path=dist%2Findex%2Fpcb.svg"}]; window.SSR_PACKAGE_ROUTE = {"author":"astra","packageName":"pd-power-supply","packageNameWithScope":"astra/pd-power-supply","version":null,"isLegacyRoute":false,"kind":"file","filePath":"scripts/verify-fabrication.py"};