astra/pd-power-supply

USB-PD Power Supply with RP2040 controller

Version
1.1.6
License
unset
Stars
1

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":"9256f5d4-aa2c-4b42-9939-aec937743978","package_id":"4526141e-6f81-4c10-9cec-4d2551d159a1","version":"1.1.7","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-10-07T18:55:22.245Z","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-d96ac57ddbf33941b75fc946daacfe92","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=9256f5d4-aa2c-4b42-9939-aec937743978\u0026file_path=dist%2Fboard%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=9256f5d4-aa2c-4b42-9939-aec937743978\u0026file_path=dist%2Fboard%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=9256f5d4-aa2c-4b42-9939-aec937743978\u0026file_path=dist%2Fboard%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"a8b17161-649b-4837-8166-07871b33d866","user_code_job_started_at":"2026-10-07T18:56:42.828Z","user_code_job_completed_at":"2026-10-07T19:01:48.743Z","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=77d0a5213660cd82ace5cda77565540df6beb2397062a7f0b1a0c0d66d3db013","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"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_PACKAGE_ROUTE = {"author":"astra","packageName":"pd-power-supply","packageNameWithScope":"astra/pd-power-supply","version":null,"isLegacyRoute":false,"kind":"file","filePath":"scripts/verify-fabrication.py"};