imrishabh18/corne-keyboard

The code defines and renders two surface-mount chip components with SMT pads, silkscreen outlines, and 3D CAD models (OBJ and STEP) for PCB assembly.

Version
2.0.21
License
unset
Stars
1

scripts/verify-jlc-footprints.py

"""Compare installed imports and each built supplier footprint to exact references.

Run after building scripts/footprint-references.tsx and the panel. Copper/drill
geometry is checked up to rigid placement and layer transforms at 1 um tolerance.
DNP hot-swap switch bodies and bare PCB features are reported separately.
"""
import ast,json,re,hashlib,sys,math
from pathlib import Path
from collections import Counter
from shapely.geometry import Point,Polygon,LineString,box
from shapely.affinity import rotate,translate,scale
from shapely.ops import unary_union
project=Path(__file__).resolve().parent.parent
for node in ast.parse((project/'scripts/audit-copper.py').read_text()).body:
 if isinstance(node,ast.FunctionDef) and node.name in ['ring','pill','rect','copper']:exec(compile(ast.Module(body=[node],type_ignores=[]),'geometry','exec'))
manifest=json.load(open(project/'lib/parts/jlc-import-manifest.json'));parts={p['lcsc']:p for p in manifest['parts']}
for p in parts.values():
 reference_file=project/'vendor/jlc-exact-imports'/(p['lcsc']+'.tsx.txt')
 assert hashlib.sha256(reference_file.read_bytes()).hexdigest()==p['exact_import_sha256'],p['name']+' reference changed'
 text=(project/p['import_file']).read_text();fp=text.split('footprint={',1)[1].split('</footprint>}',1)[0]+'</footprint>'
 assert hashlib.sha256(re.sub(r'\s+','',fp).encode()).hexdigest()==p['footprint_sha256'],p['name']+' changed from exact import'
reference_path=next(p for p in (project/'dist').rglob('circuit.json') if 'footprint-references' in str(p))
reference=json.load(open(reference_path));input_path=Path(sys.argv[1]) if len(sys.argv)>1 else project/'dist/index/circuit.json';actual=json.load(open(input_path))
def component_records(j):
 sc={e['source_component_id']:e for e in j if e['type']=='source_component'}
 return [(e,sc[e['source_component_id']]) for e in j if e['type']=='pcb_component']
def footprint(j,c):
 ports={e['pcb_port_id']:e for e in j if e['type']=='pcb_port'};sp={e['source_port_id']:e for e in j if e['type']=='source_port'}
 result=[]
 for e in j:
  if e.get('pcb_component_id')!=c['pcb_component_id'] or e['type'] not in ['pcb_smtpad','pcb_plated_hole','pcb_hole']:continue
  if e['type']=='pcb_hole':
   assert e['hole_shape']=='circle';g=translate(Point(0,0).buffer(e['hole_diameter']/2,quad_segs=64),e['x'],e['y'])
  else:g=copper(e)
  g=rotate(translate(g,-c['center']['x'],-c['center']['y']),-c.get('rotation',0),origin=(0,0))
  if c['layer']=='bottom':g=scale(g,xfact=-1,yfact=1,origin=(0,0))
  port=sp.get(ports.get(e.get('pcb_port_id'),{}).get('source_port_id'),{})
  label=str(port.get('pin_number',port.get('name','')))
  result.append((e['type'],label,g))
 bounds=unary_union([g for _,_,g in result]).bounds;x=(bounds[0]+bounds[2])/2;y=(bounds[1]+bounds[3])/2
 return [(t,p,translate(g,-x,-y)) for t,p,g in result]
refs={s['name']:footprint(reference,c) for c,s in component_records(reference)}
results=[];features=[];switches=[]
for c,s in component_records(actual):
 code=(s.get('supplier_part_numbers') or {}).get('jlcpcb',[None])[0];name=s['name']
 if name.endswith('_KEY'):
  assert c.get('do_not_place') and code=='C400230'
  holes=[r for r in actual if r.get('pcb_component_id')==c['pcb_component_id'] and r['type']=='pcb_hole']
  assert len(holes)==3 and sorted(round(r['hole_diameter'],6) for r in holes)==[1.999996,1.999996,3.500018],name
  assert not any(r['type'] in ['pcb_smtpad','pcb_plated_hole'] for r in actual if r.get('pcb_component_id')==c['pcb_component_id']),name
  switches.append(name);continue
 if not code:
  assert c.get('do_not_place'), 'Unsourced assembled part: '+name
  assert name.endswith('_ENCODER_PADS') or re.match(r'^r?JP1
#39;,name) or name.startswith('LOGO_'),name features.append(name);continue assert code in parts,(name,code) patterns=footprint(actual,c);remaining=list(refs[code]);assert len(patterns)==len(remaining),(name,len(patterns),len(remaining)) maximum=0 for kind,pin,g in patterns: candidates=[(i,g.hausdorff_distance(h)) for i,(t,p,h) in enumerate(remaining) if kind==t and pin==p] assert candidates,(name,kind,pin) i,distance=min(candidates,key=lambda q:q[1]);maximum=max(maximum,distance);assert distance<.001,(name,kind,pin,distance) remaining.pop(i) results.append({'designator':name,'jlcpcb':code,'do_not_place':bool(c.get('do_not_place')),'features_checked':len(patterns),'max_geometry_difference_mm':maximum}) assert len(switches)==42 counts=Counter(r['jlcpcb'] for r in results if not r['do_not_place']);assert counts['C5333465']==46 report={'input_sha256':hashlib.sha256(input_path.read_bytes()).hexdigest(),'import_types_verified':len(parts),'supplier_placements_verified':len(results),'assembled_placements':sum(counts.values()),'assembled_sockets':counts['C5333465'],'dnp_removable_switches':switches,'unpopulated_board_features':features,'placements':results,'tolerance_mm':.001} output=Path(sys.argv[2]) if len(sys.argv)>2 else project/'dist/jlc-footprint-verification.json';output.write_text(json.dumps(report,indent=2)+'\n') print(f"Verified {len(parts)} exact imports, {len(results)} placed supplier footprints, {sum(counts.values())} assembled parts and {counts['C5333465']} sockets. All 42 removable switches remain DNP.")
,name) or name.startswith('LOGO_'),name\n features.append(name);continue\n assert code in parts,(name,code)\n patterns=footprint(actual,c);remaining=list(refs[code]);assert len(patterns)==len(remaining),(name,len(patterns),len(remaining))\n maximum=0\n for kind,pin,g in patterns:\n candidates=[(i,g.hausdorff_distance(h)) for i,(t,p,h) in enumerate(remaining) if kind==t and pin==p]\n assert candidates,(name,kind,pin)\n i,distance=min(candidates,key=lambda q:q[1]);maximum=max(maximum,distance);assert distance\u003c.001,(name,kind,pin,distance)\n remaining.pop(i)\n results.append({'designator':name,'jlcpcb':code,'do_not_place':bool(c.get('do_not_place')),'features_checked':len(patterns),'max_geometry_difference_mm':maximum})\nassert len(switches)==42\ncounts=Counter(r['jlcpcb'] for r in results if not r['do_not_place']);assert counts['C5333465']==46\nreport={'input_sha256':hashlib.sha256(input_path.read_bytes()).hexdigest(),'import_types_verified':len(parts),'supplier_placements_verified':len(results),'assembled_placements':sum(counts.values()),'assembled_sockets':counts['C5333465'],'dnp_removable_switches':switches,'unpopulated_board_features':features,'placements':results,'tolerance_mm':.001}\noutput=Path(sys.argv[2]) if len(sys.argv)\u003e2 else project/'dist/jlc-footprint-verification.json';output.write_text(json.dumps(report,indent=2)+'\\n')\nprint(f\"Verified {len(parts)} exact imports, {len(results)} placed supplier footprints, {sum(counts.values())} assembled parts and {counts['C5333465']} sockets. All 42 removable switches remain DNP.\")\n","content_mimetype":"application/octet-stream","created_at":"2026-09-08T16:52:04.898Z"}; window.SSR_PACKAGE_RELEASES = [{"package_release_id":"dadcc3e3-2713-4e98-887f-4b6137bd5354","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.21","github_commit_sha":null,"is_locked":false,"is_latest":true,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-09-08T16:51:00.213Z","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-c972a675127a917f4275e6ed2e8d118e","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=dadcc3e3-2713-4e98-887f-4b6137bd5354\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=dadcc3e3-2713-4e98-887f-4b6137bd5354\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=dadcc3e3-2713-4e98-887f-4b6137bd5354\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"87ce88af-6ebc-4d18-8566-4157e21ea81e","user_code_job_started_at":"2026-09-08T16:52:33.622Z","user_code_job_completed_at":"2026-09-08T16:59:59.297Z","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=d6b4ee33048d45c49f3c2aa07288211b524699d6de79c1297a7ac825a214cef2","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"1bd43346-33f3-4cde-bfc0-0d0f5ef7be46","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.20","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-09-08T15:16:56.192Z","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-d11498066a18b91f14cfef35200ce692","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=1bd43346-33f3-4cde-bfc0-0d0f5ef7be46\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=1bd43346-33f3-4cde-bfc0-0d0f5ef7be46\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=1bd43346-33f3-4cde-bfc0-0d0f5ef7be46\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"25ade5eb-73d1-47ce-9823-5f98374536ec","user_code_job_started_at":"2026-09-08T15:18:02.030Z","user_code_job_completed_at":"2026-09-08T15:25:40.398Z","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=89a479e0fa012d7b67eda0b76d5ebc3715268e252699e7ddd07a3464689ff513","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"8c74453a-83e2-4172-bcda-666d01f22b9f","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.19","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-09-08T15:06:14.644Z","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-d91e0490b469149ed15fbb1a51ebd6c4","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":"1eb0a04c-ecf7-497e-af22-0e9b9527afed","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.18","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-09-08T14:59:07.818Z","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-d29c5c93da4790e226795ec61a311545","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":"310748ea-1f54-4e0b-bcb0-e26de0418bbe","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.17","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-20T09:08:27.021Z","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-3ab68ad76231274fced8daa9b4d216d1","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":null,"sch_preview_image_url":null,"cad_preview_image_url":null,"package_release_website_url":null,"display_status":"pending","latest_package_build_id":"31871f8c-83e2-47f0-968e-30522688d9b6","user_code_job_started_at":"2026-09-07T20:49:28.128Z","user_code_job_completed_at":"2026-09-07T21:05:41.129Z","user_code_job_error":{"message":"Your code failed to build (exit code 1), see build logs for the error details","error_code":"user_code_build_error"},"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=295f4c032a00680940217b249f3b3f4fc21ade71a404fb9d8dd81770696f8397","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"de03c299-1b05-400b-9a9e-29d42c16b2bc","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.16","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-17T16:56:08.078Z","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-d8dbda73d7ae6158f52f028821fc56ee","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":"3bf37cdc-0107-4eac-9892-f247c5e18661","user_code_job_started_at":"2026-08-17T16:58:40.245Z","user_code_job_completed_at":"2026-08-17T17:28:41.191Z","user_code_job_error":{"message":"Build timed out after 30 minutes","error_code":"user_code_job_timeout"},"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=76d319070ca1fa7f302a7515628d2639daeeecb6a5981c696f85e46107e3b9b9","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"0e701bc3-f617-464c-b79c-8117d2c86339","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.15","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-12T16:15:42.323Z","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-1d696f35b011352aeb71a3a73b619442","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=0e701bc3-f617-464c-b79c-8117d2c86339\u0026file_path=dist%2Fleft%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=0e701bc3-f617-464c-b79c-8117d2c86339\u0026file_path=dist%2Fleft%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=0e701bc3-f617-464c-b79c-8117d2c86339\u0026file_path=dist%2Fleft%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"b70c43ef-2eed-47b4-b330-04f89859db6a","user_code_job_started_at":"2026-08-12T19:18:18.738Z","user_code_job_completed_at":"2026-08-12T19:28:03.200Z","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=12aa44a3f0616a1a15b3a1b0b9f58c05bbb5a610306d691dd1254f2acd6c484b","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"051bc4bf-1895-4c06-848e-06f0dca2393d","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.14","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-12T15:57:48.194Z","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-0c5e9892ec1ff3b912eed0a8c52f86d6","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":"27e8a9f6-e7eb-447a-8734-0d94020b0275","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.13","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-12T15:50:05.533Z","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-9c0370a7e35c6d29e28e2ecfd1a35f0d","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":"09680cad-cb3a-43bc-b3d9-3977d56d794c","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.12","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-12T15:44:02.661Z","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-5db3a4d5fec54b23a1879189c3ae3cbb","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":"9800209a-d5a4-4a4b-940a-d0269c8f63b6","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.11","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-11T15:04:42.562Z","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-566054e353ef8fe7b66172bc2fae98b0","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=9800209a-d5a4-4a4b-940a-d0269c8f63b6\u0026file_path=dist%2Fleft%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=9800209a-d5a4-4a4b-940a-d0269c8f63b6\u0026file_path=dist%2Fleft%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=9800209a-d5a4-4a4b-940a-d0269c8f63b6\u0026file_path=dist%2Fleft%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"30a6cf6d-8331-40a2-88c1-c288ec518721","user_code_job_started_at":"2026-08-12T06:03:29.394Z","user_code_job_completed_at":"2026-08-12T06:05:35.547Z","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=9786155159a44073aca7f275639c5bba8096798efe9ea7bbec0ac5bff5dbbff4","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"dfee26ad-0833-46ab-80ba-c79f11c42204","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.10","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-11T15:00:53.088Z","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-3323412296cadec0032dc46d61871214","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":"ab72b3d5-3b6f-492c-97d2-683e46ee727f","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.9","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-10T12:08:14.180Z","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-c3f01b7ce05c51934f420bc6f5a6bef2","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=ab72b3d5-3b6f-492c-97d2-683e46ee727f\u0026file_path=dist%2Fleft%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=ab72b3d5-3b6f-492c-97d2-683e46ee727f\u0026file_path=dist%2Fleft%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=ab72b3d5-3b6f-492c-97d2-683e46ee727f\u0026file_path=dist%2Fleft%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"a09c97ff-fc3a-43f6-adb6-fdecc09ac5a4","user_code_job_started_at":"2026-08-10T12:14:11.619Z","user_code_job_completed_at":"2026-08-10T12:22:41.299Z","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=bd272eacf6b19c9d8bca9ff7025a50289e8cc5dcce91b374d4398239f9b8fdc6","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"aab741d2-66d6-4141-a56f-dec9a93f0745","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.8","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-10T12:05:54.107Z","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":null,"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":"8d099371-81f4-4556-9b50-06c5ff43530c","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.7","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-10T12:01:26.302Z","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-90b8b592fc532bc050dfa0051f22721d","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":"b5644906-1850-4f7e-bc7f-384131bc85d5","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.6","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-10T11:57:22.892Z","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-645c7d3e9b78aedbd409f63ea760ff03","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":"bf68f755-3410-47ae-a8f7-bf1842ede84f","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.5","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-10T10:36:56.206Z","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-fae103c87d843cdbb7d5853edd5e00a1","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":"62b3be01-12c5-415f-af59-2eb8cd87f0a2","user_code_job_started_at":"2026-08-10T10:39:53.625Z","user_code_job_completed_at":"2026-08-10T10:46:01.744Z","user_code_job_error":{"message":"Your code failed to build (exit code 1), see build logs for the error details","error_code":"user_code_build_error"},"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=5b7af5faf2794cb43b7c2ef0edf4af78aee1d8f2cbf54dc1148ababea99e1991","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"12026e15-765c-488a-9886-a89e93409099","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.4","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-10T10:32:18.439Z","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-640370fe7412c50c2a81985dc4c85ea1","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":"49831c5f-ff27-4706-b8d9-7a0fe1662179","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.3","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-10T10:28:40.595Z","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-abd2412878570b9cbce9d060b8e64f90","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":"2bbe2022-8ce9-4466-bce4-9d3460eb7620","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.2","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-10T10:24:34.733Z","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-0c6ef3495ed62c8311da6c2a4a5ce1f1","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":"511d059e-9f7c-4d44-b609-44cd623b4972","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.1","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-09T20:30:50.584Z","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-932b3b7914f4275cc095769b0f588268","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":null,"sch_preview_image_url":null,"cad_preview_image_url":null,"package_release_website_url":null,"display_status":"pending","latest_package_build_id":"af3b8d2e-6b0e-4354-9c73-14b62b65bd8d","user_code_job_started_at":"2026-08-10T09:05:50.472Z","user_code_job_completed_at":"2026-08-10T09:11:56.569Z","user_code_job_error":{"message":"Your code failed to build (exit code 1), see build logs for the error details","error_code":"user_code_build_error"},"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=858f0f5564ef737003bbfa6e781aeca055df3ed980065067ac7a494d91462263","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"0c2b43a3-54ff-41cc-9c2a-3c072a4bfce4","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"2.0.0","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-09T20:27:15.716Z","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-09c3251b45a913a702805e1ecccbb7b5","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":"6243441b-092b-4166-b003-a232a9cb59ff","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","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-08-06T14:45:44.407Z","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-f8665c2de359b48d96d3d32c1ca7d0f8","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":"3fcb8ef5-0e39-440c-a18f-1c682ef1e73d","user_code_job_started_at":"2026-08-06T14:45:50.004Z","user_code_job_completed_at":"2026-08-06T14:49:33.535Z","user_code_job_error":{"message":"There was an error running the job on our infrastructure, this is probably not your code, see build logs","error_code":"user_code_job_infrastructure_error"},"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=cbd18a5931f35b3cf6d4679c66ba2eeffba4e991283dff69751626b4d0c8bd62","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"8c27b90d-b11f-403c-8691-41f218374a8f","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","version":"1.0.2","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":false,"is_pr_preview":false,"created_at":"2026-08-06T13:40:38.469Z","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-e220e519e921d21de687f0af4239252c","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":"ea20fb0d-e807-43f9-ba83-8978b2a9cd04","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","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-08-06T13:38:39.968Z","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-234591a7f9c087d813fd8d5ecbda0d46","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=ea20fb0d-e807-43f9-ba83-8978b2a9cd04\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=ea20fb0d-e807-43f9-ba83-8978b2a9cd04\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=ea20fb0d-e807-43f9-ba83-8978b2a9cd04\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"5155b2ea-d7ed-41fc-80c6-d6311b4b55b4","user_code_job_started_at":"2026-08-06T13:38:48.763Z","user_code_job_completed_at":"2026-08-06T13:40:21.516Z","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=2d9c8a936d46c3ed4f25c54515d1eb4ff16872ade7b430062b7a024bd40f6dee","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"b80fb022-a9cf-48de-bee1-cf4e0bfd1e9c","package_id":"4dcf7237-6a2a-458d-ab13-f2fb4c221b56","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-08-06T13:15:02.283Z","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-1def03398d147a237eb937a952295e79","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=b80fb022-a9cf-48de-bee1-cf4e0bfd1e9c\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=b80fb022-a9cf-48de-bee1-cf4e0bfd1e9c\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=b80fb022-a9cf-48de-bee1-cf4e0bfd1e9c\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"97b18410-03ef-4231-98d7-89ecd9b787a4","user_code_job_started_at":"2026-08-06T13:15:08.904Z","user_code_job_completed_at":"2026-08-06T13:16:24.373Z","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=279a064e6ac1ab57ef793fb8ad3a32d71e6b5262e3dd6104e362a8d55c2f7b68","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":"imrishabh18","packageName":"corne-keyboard","packageNameWithScope":"imrishabh18/corne-keyboard","version":null,"isLegacyRoute":false,"kind":"file","filePath":"scripts/verify-jlc-footprints.py"};