Imported from kyunghyunHan/Cluster (
AGENTS.md). Install upstream withnpx skills add kyunghyunHan/Cluster. Copyright stays with the author.
AGENTS.md
이 파일은 Cluster 회로도 편집기 저장소에서 작업하는 Codex, Claude, Cursor, Aider 등 코딩 에이전트를 위한 루트 지침이다.
사람용 설명은 README.md를 보고, 에이전트는 작업 전 이 파일을 먼저 기준으로 삼는다.
프로젝트 개요
Cluster는 Rust + egui 기반 ESP32/Arduino 학습 및 프로토타이핑 회로 툴이다. 목표는 KiCad를 완전히 복제하는 것이 아니라 Fritzing/Tinkercad처럼 직관적이면서 PCB 제작까지 이어질 수 있는 beginner-friendly KiCad-lite다.
현재 방향:
- 저항, 커패시터, 인덕터, 다이오드, LED, 스위치, 전원, 배터리, OP AMP, 램프 지원
- ESP32, OLED 같은 실제 전자 모듈 배치 지원
- ESP32/OLED/Sensor는 핀 이름과 역할(VIN/3V3/GND/SDA/SCL/GPIO 등)을 가진다.
- Breadboard View는 회로도 netlist를 읽어 ESP32/Arduino I2C 예제의 점퍼 배선을 안내한다.
- CAD 데이터 모델은 schematic symbol과 physical footprint를 분리하고, netlist를 PCB layout/DRC/export와 공유하는 방향으로 확장한다.
- 스냅 그리드, 90도 배선, 핀 표시, 선택/회전/삭제 지원
- 기본 라이브 시뮬레이션: 닫힌 도통 경로가 있으면 배선과 부품을 강조
- SVG 이미지 내보내기 지원
좋은 변경의 기준:
- 회로를 더 빨리 만들 수 있다.
- 초보자가 실제 브레드보드 배선을 더 빨리 이해할 수 있다.
- schematic에서 PCB 제작 데이터로 넘어가는 흐름이 명확하다.
- 부품과 핀이 더 명확하게 읽힌다.
- 연결됨/끊김/전류 흐름 상태가 즉시 보인다.
- 저장/내보내기 결과가 실제 문서에 쓸 수 있을 만큼 깔끔하다.
- UI가 조밀하지만 피로하지 않다.
상용 제품 기준
상용화를 전제로 작업할 때는 "데모로 보이는 기능"보다 "반복 사용해도 신뢰되는 워크플로우"를 우선한다.
제품 기준:
- 사용자가 만든 회로 데이터는 절대 조용히 유실되면 안 된다.
- 저장, 불러오기, 내보내기, 삭제 같은 작업은 성공/실패 상태가 UI에 명확히 남아야 한다.
- 잘못된 회로는 앱이 멈추는 대신 경고와 수정 가능한 상태로 남아야 한다.
- 빈 회로, 큰 회로, 잘못 연결된 회로, 일부 값이 비어 있는 회로를 모두 정상 상태로 취급한다.
- 기능 추가 시 새 사용자가 1분 안에 기본 회로를 만들 수 있는 흐름을 해치지 않는다.
- 전문가가 반복 작업할 때 클릭 수와 마우스 이동이 불필요하게 늘어나지 않아야 한다.
상용화 우선순위:
- 데이터 안정성: 저장/복원, 자동 복구, 포맷 호환성
- 회로 검증: short/open/reversed polarity/missing ground 같은 실수 감지
- 작업 속도: 빠른 배치, 복제, 정렬, 핀 스냅, 키보드 조작
- 출력 품질: 문서/수업/공유에 바로 쓸 수 있는 SVG/PNG
- 신뢰성: panic 없는 UI, 명확한 에러 메시지, 느려지지 않는 큰 회로
설정 명령
- 빌드/검사:
cargo check - 앱 실행:
cargo run - 코드 검색:
rg "<pattern>" - 파일 목록:
rg --files
참고:
- 작은 변경에서 전체 구조를 크게 갈아엎지 않는다.
src/main.rs단일 파일 구조가 크면, 먼저 명확한 함수 단위로 정리하고 이후 모듈 분리를 검토한다.- 네트워크가 필요한 dependency 추가는 신중히 한다. 가능하면 egui와 표준 라이브러리 안에서 해결한다.
테스트 지침
- 코드 변경 후 기본 검증은
cargo check다. - UI 변경은 가능하면
cargo run으로 실제 배치, 좁은 패널, 빈 회로 상태를 확인한다. - 저장/불러오기 변경은 최소한 빈 회로, 단일 부품, 배선 포함 회로, 모듈 포함 회로를 왕복 확인한다.
- 시뮬레이션 변경은 최소한 아래 케이스를 생각한다.
- 전원 + 부하 + GND가 닫힌 경우 흐름 표시
- 스위치
open/off일 때 끊김 표시 - 전원만 있거나 부하만 있을 때 Open circuit
- ESP32/OLED 모듈 핀이 live loop에 물렸을 때 활성 표시
- 내보내기 변경은 생성 파일이 브라우저에서 열리는지 확인한다.
- 회귀 위험이 큰 로직은 작고 직접적인 단위 테스트를 추가한다.
코드 스타일
- 기존 Rust/egui 스타일을 우선 따른다.
- 큰 리팩터링보다 작고 검증 가능한 개선을 선호한다.
- 불필요한 abstraction을 만들지 않는다.
- UI 텍스트는 짧고 기능 중심으로 쓴다.
- 사용자 변경사항을 되돌리지 않는다.
- manual edit은 좁게 유지한다.
- 코드 식별자는 영어를 사용한다. 문서와 짧은 설명은 한국어를 사용해도 된다.
- 저장 포맷, 시뮬레이션 결과, 에러 상태처럼 장기 유지될 데이터는 명시적인 타입으로 표현한다.
- 사용자가 볼 수 있는 에러 메시지는 짧고 원인/다음 행동을 알 수 있게 쓴다.
데이터와 호환성
- 회로 저장 포맷은 가능하면 사람이 읽을 수 있는 JSON을 기본으로 한다.
- 저장 데이터에는 앱 버전 또는 schema version을 포함한다.
- 새 필드를 추가할 때는 기존 파일을 읽을 수 있는 기본값을 둔다.
- 불러오기 실패 시 앱이 crash/panic하지 않고 status에 원인을 표시한다.
- 좌표, 회전, 부품 타입, 값, 핀 연결, 스위치 상태, 모듈 핀 역할은 저장/복원 대상이다.
- 포맷 변경은 migration 또는 backwards-compatible parser를 먼저 고려한다.
신뢰성과 오류 처리
- UI 이벤트, 파일 I/O, export, parsing 경로에서
unwrap()/expect()는 피한다. 불변 조건이 코드상 명확한 경우만 예외로 한다. - 실패 가능한 작업은
Result로 다루고, 사용자에게 필요한 메시지를 status 또는 panel에 남긴다. - 한 부품 또는 한 배선의 오류가 전체 회로 렌더링을 막으면 안 된다.
- 삭제, 덮어쓰기, 초기화 같은 작업은 사용자의 의도를 확인하거나 되돌릴 수 있는 흐름을 둔다.
- 장시간 작업이 생기면 UI가 멈춘 것처럼 보이지 않게 상태를 표시한다.
성능 기준
- 일반 작업은 마우스 입력에 즉각 반응해야 한다.
- 큰 회로에서도 pan/zoom/select/wire drawing이 눈에 띄게 버벅이면 안 된다.
- 매 프레임 전체 회로를 불필요하게 재계산하지 않는다. 연결성, bounds, export data는 변경 시점 캐싱을 우선 검토한다.
- 렌더링보다 시뮬레이션/검증 로직이 커질 경우, 계산 단위를 작게 나눠 테스트 가능하게 유지한다.
- 성능 개선은 가독성을 크게 해치지 않는 범위에서 한다.
디자인 기준
기본 방향은 Dense Practical Lab이다.
항상 확인할 점:
- 장식보다 회로 가독성이 우선이다.
- 부품명, 값, 핀, 배선이 겹치지 않아야 한다.
- 색상은 의미가 있을 때만 사용한다.
- 파랑: 일반 배선
- 주황: live/전류 흐름
- 초록: 선택
- 노랑: 핀
- 버튼과 패널은 조밀하게 유지한다.
- 큰 카드, 과한 glow, 불필요한 여백을 피한다.
- OLED/ESP32 같은 모듈은 실제 핀 배열을 떠올릴 수 있게 그린다.
- 좁은 창에서도 주요 도구, 상태, 캔버스가 서로 밀려 사라지지 않아야 한다.
- 색상만으로 상태를 구분하지 않는다. live/open/error/selected는 라벨, 선 스타일, 아이콘, 두께 중 하나를 함께 고려한다.
- 툴팁과 status text는 짧게 쓰고, 작업 흐름을 가리지 않는다.
시뮬레이션 기준
현재 시뮬레이션은 SPICE급 아날로그 해석이 아니라 연결성 기반 live-path 판정이다.
현재 지원:
- canonical connectivity graph가 geometry normalization, typed endpoint/junction/label resolution, global merge, union-find, deterministic net generation, diagnostics를 한 번 수행하고 ERC/DC/AC/transient/current-flow/Breadboard/PCB/SPICE/codegen이 같은 projection을 공유한다.
- 전원/배터리/전류원과 return/GND 사이에 닫힌 도통 경로가 있으면
Current flowing - 저항/인덕터/다이오드/LED/램프/닫힌 스위치는 도통 부품으로 처리
- 커패시터/OP AMP는 기본 DC 도통 경로에서는 open으로 처리
- ESP32/OLED/Sensor 모듈은 live loop에 핀이 연결되면 활성 표시
- 배선 클릭 위치가 핀 근처이면 자동으로 핀에 스냅한다.
- 부품 핀이 배선 선분 중간에 닿아도 같은 net으로 병합한다.
- DC MNA 분기 전류에서 배선 전류 크기와 방향을 계산해 표시한다.
- 다이오드/LED는 역바이어스에서 누설 수준으로 처리하고 순방향 전압 강하를 적용한다.
- NMOS/PMOS는 Vgs/Vsg 임계전압에 따라 ON/OFF 저항을 전환한다.
- floating pin/net, GND DC 경로가 없는 voltage island, open voltage source, 아무 핀에도 연결되지 않은 배선, 한 핀에만 연결된 고립 배선을 ERC로 경고한다.
- 부품별 simulation support, voltage/current 제한, driver/current-limit 요구사항을 metadata로 관리한다.
- DC solver는 구조화된 오류와 KCL residual, dissipating/supplying power role을 제공한다.
- 시뮬레이션 결과는 OK/Warning/Failed 상태와 초보자용 설명 문장을 포함한다.
- inspector는 부품 model/support, 핀별 net/전압, wire net/current/open 상태를 표시한다.
- ESP/Pico GPIO 5V, GPIO 직접 부하, relay flyback diode, I2C pull-up 누락을 ERC로 경고한다.
- 한 polyline 안에서 분기 전류가 달라지면 잘못된 단일 전류 화살표를 표시하지 않는다.
- 정상 ESP32/Arduino I2C 예제는 4.7k SDA/SCL pull-up을 포함한다.
향후 시뮬레이션 방향:
- 핀 역할(VCC/GND/SDA/SCL/GPIO)을 구조화한다.
- LED 방향성, 다이오드 방향성, 스위치 상태를 UI로 명확히 바꾼다.
- 저항값 기반 전류 추정, 전압 강하, 쇼트 경고를 추가한다.
- 완전한 SPICE 연동은 별도 solver 도입 전까지 범위 밖으로 둔다.
검증 메시지 방향:
Open circuit: 전원과 return/GND 사이 경로가 없음Short risk: 전원과 GND가 부하 없이 직접 연결될 가능성Polarity warning: LED/다이오드/전해 커패시터 방향 의심Signal mismatch: SDA/SCL/UART/SPI 핀이 예상 역할과 다르게 연결됨- 경고는 작업을 막기보다, 문제가 있는 부품/핀을 찾기 쉽게 표시한다.
내보내기 기준
- 이미지 저장은 기본적으로 SVG를 우선한다.
- SVG는 배선, 부품 박스, 라벨, 값, 핀을 포함해야 한다.
- 파일명은 충돌이 적고 사용자가 바로 찾을 수 있어야 한다.
- 내보내기 실패 시 status에 에러를 표시한다.
- export 결과는 배경이 투명/흰색일 때 모두 읽을 수 있어야 한다.
- 문서 삽입을 위해 적절한 viewBox, 여백, 텍스트 크기를 유지한다.
- PNG export를 추가할 때도 SVG export 품질을 떨어뜨리지 않는다.
- SPICE
.cir, BOM CSV, Arduino starter sketch export는 회귀 테스트로 검증한다. - README 예제 이미지는 앱의 SVG exporter로 재생성할 수 있어야 한다.
- CI는
cargo fmt --check,cargo clippy -- -D warnings,cargo test, release build를 실행한다.
릴리스 준비 상태
릴리즈를 목표로 하는 변경은 아래를 고려한다.
- 앱 시작, 새 회로, 저장, 불러오기, 내보내기, 기본 부품 배치가 모두 동작한다.
- panic이 발생할 수 있는 사용자 입력 경로를 점검한다.
- 기본 예제 회로 또는 샘플 파일이 최신 저장 포맷으로 열리는지 확인한다.
- 릴리즈 노트에 사용자에게 보이는 변경, breaking change, 알려진 제한을 남길 수 있게 변경 내용을 정리한다.
- 새 dependency는 라이선스, 유지보수 상태, binary size, offline build 영향을 검토한 뒤 추가한다.
v*태그 릴리스는 Linux/macOS/Windows 바이너리 압축 파일을 생성한다.
로드맵
우선순위 높은 순서:
- Breadboard View: 일부 완료 - ESP32/Arduino/STM32 + OLED/Sensor I2C 예제의 VCC/GND/SDA/SCL 점퍼 체크, schematic net 강조, 누락 점퍼 자동 schematic 배선 추가 지원. 향후 실제 점퍼 편집, 전원 레일, 핀 하이라이트 확장
- CAD/PCB 데이터 모델: 일부 완료 - SymbolInstance, Footprint, NetClass, Board, Track, Via, 기본 DRC, Gerber/Excellon scaffold, bottom dock Update PCB/footprint auto-place/PCB preview+DRC marker/board fit/ratsnest route helper/selectable DRC rows/project folder save-load/DRC-gated fabrication export 추가. 향후 기존 Component를 SymbolInstance로 점진 이전
- Schematic netlist 안정화: 일부 완료 - deterministic net name/id 생성, global GND merge, explicit junction/no-connect annotation의 페이지별 저장/복원, crossing/T-junction/pin-to-wire/multi-page label 회귀 테스트 추가. 향후 junction/no-connect UI 편집, local/global label scope 확장
- 초보자 ERC 강화: 일부 완료 - GPIO 전류 초과, LED 저항 누락, 모터/릴레이 직접 구동, 공통 GND, 입력 전용 GPIO, ADC 과전압, I2C/SPI/UART 배선 실수, ERC repair suggestion/Auto fix UI scaffold, I2C pull-up/relay flyback diode 자동 배선 repair, 배선 중 PinRole 기반 호환/의심 목적지 Smart Wiring 안내 추가. 향후 전압 범위 metadata를 이용한 더 정밀한 배선 안내와 안전한 자동 repair 확장
- PCB editor MVP: 완료 - 전용 PCB workspace, 독립 pan/zoom/grid, footprint 다중/box 선택·drag·rotate·flip, track endpoint/segment drag preview, F.Cu/B.Cu 표시, 45°/90° manual route, via, copper/outline 편집, undo/redo, pad snap, spatial-index culling, copper-connected island ratsnest와 배치 보존 ECO 적용. route collision/copper zone 같은 고급 copper 편집은 후속으로 관리
- DRC panel: 일부 완료 - track width/clearance/different-net short/via/annular ring/edge clearance/outside copper/open outline/outside footprint/duplicate reference/dangling track·via/unrouted ratsnest 검사, PCB dock DRC row 선택 및 preview marker 추가. 향후 pad-to-pad/hole-to-copper/silkscreen/mask violation과 workspace 직접 탐색 연결
- Export: 일부 완료 - SVG/SPICE/BOM/Arduino 유지, Gerber RS-274X/Excellon scaffold, BOM/CPL CSV helper, PCB DRC error가 있으면 fabrication export 차단, 선택적 ngspice batch 실행 경로 추가. 향후 UI export wizard와 ngspice 결과 plot 연결
- 실제 부품 라이브러리: ESP32 DevKit V1, Arduino Uno, Pico, STM32 Blue Pill/Nucleo, SSD1306 OLED, DHT11/DHT22, PIR, DS3231, Relay Module, L298N, SG90, buzzer 등 한국어/영어 검색 지원
- 프로젝트 관리: 일부 완료 - PCB dock에서
project.cluster/폴더에 schematic/board/project JSON 저장 및 로드 지원. 향후.cluster파일, 자동 저장, 복구, 최근 프로젝트, 프로젝트 썸네일 - 고급 시뮬레이션: internal beginner DC 유지 + 선택적 ngspice export/run/import
현재 구조 안정화 상태:
- 임베디드 시작 스케치 생성은
src/export/arduino.rs에서 canonical netlist를 읽고 단일 MCU/공통 GND/I2C 연결을 검증한다. 일반 신호는 INPUT으로 유지하며 검증된 단순 저항+LED 분기만 OUTPUT으로 설정한다. UNO 아날로그/STM32 포트 이름, Pico/STM32 코어별 Wire 설정, I2C 스캔, 버튼+OLED 동시 초기화를 지원하고 코드 내보내기는 원자 저장/백업을 사용한다. 펌웨어 컴파일 및 실기기 검증은 별도 필요하다. - Breadboard 안내는 ESP32/S3/C3/UNO/Pico/STM32 심볼의 실제 SDA/SCL 핀과 모든 OLED/I2C 센서를 사용하고 기존 대체 GPIO 연결을 보존한다. 충돌하는 점퍼 추가는 status로 거부한다. 자동 helper 배선은 다른 핀·다른 net의 배선 접점과 접촉을 줄이는 우회 후보를 평가한다. ESP32 OLED/Sensor 시작 예제는 5V 전원과 분리된 VIN/3V3 net을 사용한다.
- 성능 기준선과 구조 마무리 수치는 README Performance baseline에 기록한다.
benches/performance.rs와examples/performance_probe.rs가 realistic schematic/PCB/실제 command undo/frame percentile/heap 핵심 경로를 재현한다. offscreen egui benchmark는 productionupdate_ui/panel/canvas paint/tessellation을 측정한다.DocumentRevisions와Arccache, bounded revision-tagged analysis worker, schematic entity/attachment/shared spatial index, PCB entity/spatial index, local DRC가 적용되어 visual-only/PCB-only 변경이 schematic 분석 cache를 무효화하지 않고 오래된 worker 결과를 폐기한다. ProjectDocument/EditorState/WorkspaceState/AnalysisState소유권 경계를 사용한다. component/wire 삭제는 swap-remove 후 ID index를 단일 보정하고, drag preview는 release 전까지 분석 revision을 올리지 않는다. schematic command는 entity/attachment/segment spatial index를 함께 incremental 갱신하고 debug commit에서 document/index invariant를 검증한다. explicit pin endpoint 이동은PinRefidentity와 이전 물리 위치를 함께 사용한다.- editor command는 제한된
CommandContext와 typedChangeSet을 사용하며 중앙 dispatcher가 cache/dirty/autosave/repaint를 처리한다. 표준 schematic command, page/annotation, compound ERC repair, component/wire drag는 영향받은 entity delta를 저장하고, undo/redo는 16 MiB 제한을 적용한다. full snapshot history는 project/circuit load·recovery·migration 같은 전체 문서 교체 경계에만 남아 있다. - canonical connectivity의 endpoint/spatial-index/intersection/junction/geometry/label/union-find/diagnostics 단계가 분리되었고 입력 배열 순서와 무관한 exact net mapping을 테스트한다. contact exact-check 결과를 canonical segment normalization에서 재사용하며 단계별 프로파일을 probe에 출력한다.
ProjectPage가 junction/no-connect annotation을 소유하며 schema v4 JSON과 다중 페이지/undo/자동복구 왕복에서 이를 보존한다. canonical 결과는 좌표와 typedJunctionId양쪽의 exact net mapping을 제공한다.- ERC rule registry는 rule disable/severity override와 certainty를 지원하며 annotation/no-connect/ground rule이 domain module로 분리되었다. topology/value dependency를 분리하고 topology 결과를 revision cache하며, rules-only evaluator는 net별 pin index를 사용해 반복 전수 탐색을 피한다.
- custom part schema v2는 v1 파일을 유지하면서 구조화 metadata와 footprint 검증을 지원하고 symlink/1 MiB 초과 입력을 거부한다.
- 저장은 같은 디렉터리의 임시 파일을 sync/rename하고 3세대 backup을 유지한다.
- 문서/PCB 구조 validator가 중복 ID, 잘못된 endpoint/geometry/index 상태를 구조화해 보고하며 load 경계에서 repair/invariant 수를 status에 남긴다. PCB validator는 entity/spatial index, footprint/pad definition, zone polygon, layer, net class/design rule, CAD net cross-reference도 검사하고 구조 오류가 있으면 fabrication export를 차단한다. PCB immutable lookup의 stale-index 선형 fallback은 제거되었다.
- performance probe는 ERC rules-only/value-only/topology-only와 connectivity+ERC를 분리한다. GND 없는 synthetic MNA는
mna_prepare_no_ground_*로 명시하고, 실제 solver-only/parameter-update는 solvable mixed fixture로 측정한다. worker는 같은 connectivity revision의 canonical 결과를Arc로 재사용한다. 2026-07-23의 3회×21표본 before/after와 남은 acceptance 상태는docs/architecture/commercial-completion-audit-2026-07-23.md에 기록한다. - PCB footprint pad lookup/spatial index/Gerber/Excellon은 공통
FootprintTransform을 사용하며 0/90/180/270도와 back flip 좌표를 테스트한다. Excellon은 배치 footprint drill과 실제 tool diameter를 출력한다. v*tag release workflow가 Linux/macOS/Windows portable archive, SHA-256 checksum, 자동 release note를 생성한다.- 공학 값 파서는 UI/ERC/MNA/AC/SPICE 경로가 공유하며
M(mega)/m(milli), embedded 표기와 단위를 일관되게 검사한다. SPICE export는M의미 충돌을 막기 위해 과학 표기법으로 정규화한다.
2026-10-12 소스 감사 체크포인트
- 근거와 재현 로그는
docs/audit/architecture-audit.md,electrical-correctness.md,pcb-manufacturing.md,performance.md,remaining-risks.md에 기록한다. baseline은a998077419fd59d91141ce2b9b1fe48ae0d2d7aa다. - MNA는 명시적 GND 우선/단일 fallback return, 저항 1 nΩ regularization, 행·열 scaling/finite 검사, 다중 ideal source cycle 검사, AC real/imaginary source constraint를 사용한다. RC transient는 실제 단일 RC charging loop만 지원한다. SPICE 정확도를 주장하지 않는다.
- canonical connectivity는 topology snapshot이다. 값/라벨을 읽는 소비자는
current_netlist또는with_component_propertiesprojection을 사용한다. structural ERC에도 값 의존성이 남아 있어 worker cache는 electrical revision 변경 시 다시 검사한다. - project.json은 schematic+board의 authoritative commit으로 마지막에 저장한다. 기존 separate JSON은 mirror/legacy fallback이다. SavedCircuit/자동복구는 optional PCB snapshot을 보존하고 exhausted ID 입력은 거부한다. autosave 실패는 같은 revision을 재시도할 수 있다.
- PCB net mapping은 schematic pin과 실제 per-instance pad로 계산하고 copper/layer overlap으로 island를 구분한다. ECO는 저장한 pin identity로 net을 remap하며 split/unknown은 orphan 처리한다. export는 fresh full DRC 및 미지원 geometry 검사를 수행한다.
- Gerber/Excellon은 immutable aperture, 실제 pad shape/via copper, decimal mm drill과 독립 golden fixture를 사용한다. 제조 출력은 experimental이다. mask/silk/PTH-NPTH/외부 viewer/fabrication 검증은 미완료다.
model/device.rscapability/profile은 제조사 문서로 확인한 부분만 제공한다. package/current rating/clone header/Nucleo exact variant는 unknown이며 전체 hardware validation이 아니다.- 최종 295 library tests와 fmt/check/all-targets·all-features clippy/release가 통과했다. physical pad DRC 강화로 큰 PCB full DRC가 느려졌으며 broad-phase/cancellation 개선은 후속 과제다. 실제 desktop GUI/firmware/hardware 검증은 하지 않았다.
2026-10-18 배선 편집 개선
- 부품 이동/회전/정렬/분산은 핀 연결과 기존 배선의 분기 접점을 보존한다. 배선 중간에 직접 닿은 핀을 이동하면 원래 접점까지 연결선을 추가하며 drag transaction의 undo/redo에 포함한다.
- 끝점 재배선은 핀 identity를 갱신하고, 꺾임점 이동은 양쪽 핀 위치를 유지한다. 끝점 드래그는 자신의 선을 제외한 연결 대상에 자동 스냅하며 Alt로 해제한다. 기하학적 attachment는 실제 접촉 허용오차 1px를 사용한다.
- Lessons: Current Flows에 6V/1kΩ 저항 직렬·병렬 예제를 추가했다. 반복 이동/회전/undo/redo 후 전류와 직각 배선, 분기 접점 유지, 빈/좁은 offscreen UI를 회귀 검증한다. 부품/다른 net을 모두 피하는 완전한 장애물 회피 자동 배선과 실제 desktop 조작 검증은 후속이다.
2026-10-19 신뢰성 및 작업 흐름 개선
- 빠른 부품 드래그는 현재 커서가 아닌 press origin으로 대상을 선택하고 부품 중심을 그리드에 맞춘다. 실제 egui pointer 입력으로 이동/전류 유지/단일 undo를 검증한다.
- 공통 저장기는 고유·배타 생성 임시 파일, OS 파일 잠금, 동기화된 backup 교체를 사용한다. 잠금 파일은 삭제하지 않고 프로세스 종료 시 OS 잠금이 해제된다. Rust 최소 버전은 1.89다. SVG/PNG/SPICE/BOM/텍스트 출력도 공통 저장기를 사용한다.
- 중복된 component/junction ID를 명시적으로 참조하는 손상 파일은 기존 문서를 바꾸기 전에 거부한다. 존재하지 않는 핀/junction 참조는 배선 위치를 보존한 채 free endpoint로 복구한다. 누락된 custom part definition의 pin identity는 보존하고 구조 validator에서 허용한다.
- load repair 내용은 Workspace의 Load report 버튼으로 다시 열고 복사할 수 있다. 복구된 문서는 dirty로 남기며 같은 revision도 자동 복구 저장 대상이다. project load wrapper는 상세 상태를 덮어쓰지 않는다.
- PCB 제작 출력은
cluster_pcb_exports/pcb-…/staging+manifest+directory rename으로 세트 단위 공개한다. Gerber 4.6 좌표 범위를 검사한다. 제조 출력의 experimental 제한은 유지한다. - Full DRC는 물리 pad의 transform/layer/bounds를 1회 준비하고 보수적 copper bounds로 먼 exact check를 생략한다. 이전 전수 검사와 결과를 비교하며 track candidate 순서는 결정적이다. 250 footprint/2000 track/150 via의 release probe 3표본 중앙값은 약 596ms → 38ms이며 모든 PCB의 성능 보장은 아니다. 중첩 pair loop 및 full DRC cancellation은 후속이다.
- 상세 검증과 남은 범위는
docs/audit/completion-2026-10-19.md에 기록한다.
완료 조건
작업 완료 전 확인한다.
- 기능이 실제 UI에서 접근 가능하다.
- 빈 회로 상태에서도 깨지지 않는다.
- 좁은 UI에서도 읽을 수 있다.
- 사용자 데이터가 유실될 수 있는 경로를 고려했다.
- 실패 가능한 작업은 status/error로 확인 가능하다.
- 시뮬레이션 변경이면 open/closed 케이스를 고려했다.
- 저장/불러오기 변경이면 기존 파일 호환성과 왕복 저장을 확인했다.
- 내보내기 변경이면 파일이 생성된다.
- 큰 회로에서 불필요한 매 프레임 재계산을 만들지 않았다.
- 기존 사용자 변경을 되돌리지 않았다.
-
cargo check가 통과한다. - 완료/할일 상태가 바뀌면
AGENTS.md를 업데이트한다.
