패치 노트

All notable changes to Antibody Structure Map are recorded here.

[2.03.2] — 2026-09-10

Fixed

  • A VHH-Fc construct's VH is now recognised even when its J-segment carries an engineered S-I in place of the germline W-G (or the already-supported V-P) at the same conserved anchor.
  • A heavy chain with no CH1 anywhere (VHH format) now reads VHH instead of plain VH wherever a domain label is drawn — the structure-map glyph, the architecture string (e.g. VHH-Hinge-CH2-CH3), and the Sequences panel's domain colour-bar. A normal Fab arm's VH (which does have a CH1) is unaffected.

수정

  • VHH-Fc 구조체의 VH가 germline W-G 대신 엔지니어링된 S-I를 가진 J-segment를 갖고 있어도(기존에 지원하던 V-P와 같은 자리) 이제 인식됩니다.
  • CH1이 전혀 없는 중쇄(VHH 포맷)는 이제 도메인 라벨이 표시되는 모든 곳에서 VH 대신 VHH로 표기됩니다 — 구조 지도의 도형, 구조 표기 (예: VHH-Hinge-CH2-CH3), Sequences 패널의 도메인 색상바까지 전부 해당됩니다. CH1이 있는 일반 Fab 팔의 VH는 그대로 VH로 유지됩니다.

[2.03.1] — 2026-09-10

Fixed

  • A VHH-Fc (heavy-chain-only) construct's VH is now recognised even when its J-segment carries an engineered V-P in place of the germline W-G — the structure map no longer leaves it Unknown.
  • The lone VH of a VHH construct is now drawn tilted at the same arm angle as a normal Fab's domains, standing in the Fab's own CH1 slot instead of on a vertical stub, so the hinge line matches every other arm.

수정

  • VHH-Fc(중쇄만 있는) 구조체의 VH가 germline W-G 대신 엔지니어링된 V-P를 가진 J-segment를 갖고 있어도 이제 인식됩니다 — 구조 지도에서 더 이상 Unknown으로 남지 않습니다.
  • VHH 구조체의 단독 VH가 이제 일반 Fab 도메인과 동일한 arm 각도로 기울어져 그려지며, 수직 스텁 대신 Fab 고유의 CH1 자리에 위치해 힌지 선이 다른 모든 arm과 일치합니다.

[2.03] — 2026-08-31

What's new, on first launch after an update

  • The app now pops up what changed since you last ran it, read straight from this changelog — no separate release-notes list to keep in sync. Silent on a fresh install, and silent again if nothing changed since your last launch.

업데이트 후 첫 실행 시 표시되는 변경 사항

  • 이제 마지막 실행 이후 무엇이 바뀌었는지 이 changelog에서 바로 읽어와 팝업으로 보여줍니다 — 별도의 릴리스 노트 목록을 따로 관리할 필요가 없습니다. 새로 설치했을 때는 표시되지 않으며, 마지막 실행 이후 바뀐 내용이 없을 때도 표시되지 않습니다.

Save maps: a TXT format for a copy-pasteable sequence dump

  • A new TXT checkbox next to PNG/SVG saves each chosen antibody as a plain-text file — the antibody name, then each chain's code and its sequence, nothing else, ready to paste elsewhere. Checking it switches Include to "Sequences only" and clears every detail toggle, since none of them apply to a text dump.

지도 저장: 복사용 서열 덤프 TXT 포맷

  • PNG/SVG 옆에 새로 생긴 TXT 체크박스는 선택한 각 항체를 일반 텍스트 파일로 저장합니다 — 항체 이름, 그리고 각 사슬의 코드와 서열만 담기며 그 외 내용은 없어 다른 곳에 바로 붙여넣기 좋습니다. 체크하면 Include가 자동으로 "Sequences only"로 바뀌고 모든 세부 토글이 꺼지는데, 텍스트 덤프에는 그중 어느 것도 해당되지 않기 때문입니다.

Sequences panel: Shift range-selects domains

  • Shift-clicking (or Shift-double-clicking) a domain now selects every domain between it and the last plain pick, not just the one you clicked — the usual Shift behaviour for a range. Works from either the colour bar or the residue text, so a click that lands a little off the (thin) bar still ranges correctly instead of dropping the selection.

서열 패널: Shift로 도메인 범위 선택

  • 도메인을 Shift+클릭(또는 Shift+더블클릭)하면 클릭한 도메인 하나만이 아니라, 마지막으로 일반 선택했던 도메인부터 그 사이 모든 도메인이 선택됩니다 — 흔히 쓰는 Shift 범위 선택 동작입니다. 색 트랙(컬러 바)과 잔기 텍스트 어느 쪽에서 클릭해도 동작하므로, (얇은) 바에서 살짝 벗어난 클릭도 선택이 풀리지 않고 정확히 범위로 처리됩니다.

Fixed

  • A VL region ending on a J-segment with the conservative Kabat-106 V→I substitution (e.g. the JK3-derived ...FGPGTKIDIK) is now recognised, instead of the whole chain falling through as Unknown.
  • Save layout now exports the legend at the position you dragged it to, instead of always writing it back at the default spot.

수정

  • Kabat-106 위치에 보존적인 V→I 치환이 있는 J-segment로 끝나는 VL 영역 (예: JK3 유래 ...FGPGTKIDIK)이 이제 인식되며, 더 이상 사슬 전체가 Unknown으로 처리되지 않습니다.
  • Save layout이 이제 범례를 드래그해 둔 위치 그대로 내보내며, 항상 기본 위치로 되돌려 저장하지 않습니다.

[2.02] — 2026-08-28

ADC: a light-chain/Fc-fusion Fab arm is now drawn and conjugated correctly

  • A Fab arm whose CH2-bearing chain carries CL instead of CH1 (e.g. a B-body-style construct, where one arm's "light chain" is itself fused to an Fc) now gets its L-H disulfide drawn on CL's own terminal Cys, not drifting onto that chain's own unrelated hinge. A hinge-less Fd's bare EPKSC tail (its LC-pairing Cys, with no core hinge following it) is no longer silently dropped from domain segmentation, so its Hinge 1 ADC site is now offered, placeable, and styled -- direction and linker length -- exactly like a plain light chain's CL site. CL itself, when it sits on such a heavy-role chain, gets its own bead direction rotated 45 deg clockwise instead of pointing back into that chain's own hinge/Fc.

ADC: 경쇄/Fc-융합 Fab arm이 올바르게 그려지고 접합됨

  • CH2를 가진 사슬이 CH1 대신 CL을 갖는 Fab arm(예: 한쪽 arm의 "경쇄"가 그 자체로 Fc에 융합된 B-body 스타일 구조체)에서, 이제 L-H 이황화 결합이 CL 자신의 말단 Cys 위에 그려지며 해당 사슬 자신의 무관한 힌지 쪽으로 어긋나지 않습니다. 힌지가 없는 Fd의 단독 EPKSC 꼬리(뒤에 core 힌지가 없는, LC와 결합하는 Cys)가 더 이상 도메인 분할에서 조용히 누락되지 않으므로, 이제 그 Hinge 1 ADC site가 일반 경쇄의 CL site와 완전히 동일하게(방향과 linker 길이 포함) 제공되고 배치할 수 있습니다. 이런 heavy 역할을 하는 사슬 위에 CL 자신이 위치할 때는, CL의 bead 방향이 해당 사슬 고유의 힌지/Fc 쪽을 가리키는 대신 시계 방향으로 45도 회전됩니다.

ADC dialog: Domain autocomplete, and no two sites sharing one cysteine

  • A site's Domain field now autocompletes as you type, completing to the topmost remaining match with the rest pre-selected so the next keystroke overwrites it.
  • A chain's cysteine can no longer be claimed by two different sites at once: a domain already picked elsewhere on the same chain (any site, any payload group) drops out of every other site's Domain dropdown for it, and freeing one (removing that site, or changing its chain/domain) makes it available again everywhere.

ADC 대화 창: Domain 자동완성 및 시스테인 중복 선택 방지

  • site의 Domain 필드가 이제 입력하는 대로 자동완성되며, 남은 후보 중 가장 위의 것으로 완성되고 나머지 부분은 선택된 상태로 남아 다음 입력이 바로 덮어씁니다.
  • 한 사슬의 시스테인을 두 개의 서로 다른 site가 동시에 차지할 수 없습니다 — 같은 사슬의 다른 곳(어떤 site든, 어떤 payload 그룹이든)에서 이미 선택된 domain은 그 사슬의 다른 모든 site의 Domain 드롭다운에서 빠지며, 하나를 해제하면(해당 site를 삭제하거나 chain/domain을 바꾸면) 다시 모든 곳에서 선택할 수 있게 됩니다.

[2.01] — 2026-08-28

Sign-in required

  • The app now asks for a company e-mail before it can be used. Enter it, get a 6-digit code by e-mail, type it in — no password to set or remember. A successful sign-in is remembered for 30 days, so the app keeps working fully offline within that window; past it, sign in again the same way. Existing history (Projects/Antibodies) is untouched either way — sign-in status lives separately from your saved data.
  • An e-mail that isn't recognised isn't rejected outright: it files a request and the admin gets notified, so a new teammate can ask to be let in from inside the app instead of being added ahead of time.

로그인 필요

  • 이제 앱을 사용하려면 먼저 회사 이메일을 입력해야 합니다. 이메일을 입력하면 6자리 코드가 이메일로 전송되고, 그 코드를 입력하면 됩니다 — 따로 설정하거나 기억할 비밀번호는 없습니다. 로그인에 성공하면 30일간 기억되어, 그 기간 동안은 완전히 오프라인 상태에서도 계속 사용할 수 있습니다. 30일이 지나면 같은 방식으로 다시 로그인하면 됩니다. 기존 히스토리(Projects/Antibodies)는 어느 경우든 그대로 유지됩니다 — 로그인 상태는 저장된 데이터와 별도로 관리됩니다.
  • 등록되지 않은 이메일이라도 바로 거부되지는 않습니다: 대신 요청이 접수되고 관리자에게 알림이 가서, 새 팀원이 미리 등록되어 있지 않아도 앱 안에서 직접 사용 허가를 요청할 수 있습니다.

Intro, how-to, patch notes and feedback moved to the web

  • The ❓ How to use, 💬 Feedback and 🆕 What's new toolbar buttons are gone, replaced by a single 🌐 Website button. The program intro, a fuller (and now current) usage guide, this changelog, and a public question/feedback board with answers all live on the hub site now, organised by topic instead of one long page each.

소개·사용법·패치 노트·피드백이 웹으로 이동

  • 툴바의 ❓ How to use, 💬 Feedback, 🆕 What's new 버튼이 사라지고 🌐 Website 버튼 하나로 통합되었습니다. 프로그램 소개, 더 자세하고 (이제는 최신 상태로 유지되는) 사용법 안내, 이 changelog, 그리고 답변이 달리는 공개 질문/피드백 게시판이 모두 hub 사이트로 옮겨져, 각각 하나의 긴 페이지 대신 주제별로 정리되어 있습니다.

[2.00.1] — 2026-08-27

Fixed

  • An additional engineered mutation site is now recognised.

수정

  • 엔지니어링 변이 부위 하나가 추가로 인식됩니다.

[2.00.0] — 2026-08-26

Antibody-drug conjugates (ADC)

  • A new ADC payloads dialog (button beside Target colours) lets you build one or more payload/linker groups and pick their conjugation sites by chain and domain — CL, Hinge 1/2/3, or a detected engineered cysteine (e.g. V205C). DAR is computed from the sites you pick, never typed by hand: CL and each hinge cysteine carry one thiol apiece, an engineered site carries one, all multiplied by however many arms that chain is drawn as.
  • Picking a native site (CL or Hinge 1/2/3) means that interchain disulfide was reduced to make the free thiol the payload sits on — its line is erased from the map once the beads are placed. An engineered THIOmab site never touches a native disulfide, so nothing is erased for those. Picking Hinge 1 for a heavy chain auto-adds its paired light chain's CL as a site too, since they're two ends of the same bond — otherwise the DAR would be half-counted until both were set by hand.
  • Hinge 1/2/3 and CL now reflect hIgG1's actual chemistry: the light chain's CL cysteine bonds the hinge's own N-terminal cysteine (not one on CH1), and the two hinge-hinge disulfides sit in the hinge itself, above CH2 — drawn accordingly, with the hinge redrawn as a longer vertical run to carry them correctly.
  • A payload sits as a small two-tone bead: a wider outer ring and a narrower inner fill, independently coloured in the dialog. The connector line filling a reduced native bond's gap takes the outer colour. Leave either colour on Auto and it's picked for you; two antibodies in the same project using the identical payload+linker combo always end up the same colour, even left on Auto, so an ADC and its naked parent read consistently across a comparison.
  • A Layout tile's caption gains one line per payload group (e.g. "MMAE / mc-vc-PAB · DAR 4"), and a Layout's merged legend collapses matching payload+linker entries from different antibodies into one, ignoring each one's own DAR.
  • Re-opening the dialog on an antibody that already has ADC groups offers Save (writes everything — payload, linker, sites, colours, group count — onto that antibody in place) alongside Create New ADC (forks a separately-named antibody, leaving the one you had open untouched).

항체-약물 접합체(ADC)

  • Target colours 옆에 새로 생긴 ADC payloads 대화 창에서 하나 이상의 payload/linker 그룹을 만들고, 그 접합 위치를 chain과 domain 기준으로 고를 수 있습니다 — CL, Hinge 1/2/3, 또는 검출된 엔지니어링 시스테인 (예: V205C). DAR는 직접 입력하지 않고 고른 site로부터 항상 자동 계산됩니다: CL과 각 힌지 시스테인은 각각 thiol 하나씩, 엔지니어링 site도 하나씩을 가지며, 여기에 그 사슬이 그려지는 arm 수를 곱해 계산됩니다.
  • native site(CL 또는 Hinge 1/2/3)를 고르면 payload가 붙는 자유 thiol을 만들기 위해 해당 사슬간 이황화 결합이 환원된 것으로 간주되어, bead가 배치되면 지도에서 그 결합선이 지워집니다. 엔지니어링 THIOmab site는 native 이황화 결합을 건드리지 않으므로 아무것도 지워지지 않습니다. 중쇄에서 Hinge 1을 고르면 짝을 이루는 경쇄의 CL도 site로 자동 추가되는데, 둘이 같은 결합의 양쪽 끝이기 때문입니다 — 그렇지 않으면 둘 다 수동으로 설정하기 전까지 DAR가 절반만 계산됩니다.
  • Hinge 1/2/3과 CL이 이제 hIgG1의 실제 화학 구조를 반영합니다: 경쇄의 CL 시스테인은 (CH1이 아니라) 힌지 자신의 N말단 시스테인과 결합하며, 두 개의 힌지-힌지 이황화 결합은 CH2 위쪽, 힌지 자체 안에 위치합니다 — 이에 맞춰 그려지며, 이를 제대로 담기 위해 힌지가 더 긴 수직 구간으로 다시 그려집니다.
  • payload는 작은 이중 색상 bead로 표시됩니다: 바깥쪽의 넓은 링과 안쪽의 좁은 채움이며, 대화 창에서 각각 독립적으로 색을 지정합니다. 환원된 native 결합의 빈틈을 채우는 연결선은 바깥쪽 색을 따릅니다. 두 색 모두 Auto로 두면 자동으로 배정되며, 같은 프로젝트 안에서 같은 payload+linker 조합을 쓰는 두 항체는 Auto로 두어도 항상 같은 색으로 맞춰져, ADC와 그 원본(naked parent)이 비교 시 일관되게 보입니다.
  • Layout 타일의 캡션에 payload 그룹마다 한 줄씩 추가되며(예: "MMAE / mc-vc-PAB · DAR 4"), Layout의 통합 범례는 서로 다른 항체의 payload+linker 항목이 같으면 각자의 DAR 값과 무관하게 하나로 합칩니다.
  • 이미 ADC 그룹이 있는 항체에서 대화 창을 다시 열면 Save(payload, linker, site, 색, 그룹 수 등 모든 내용을 그 항체에 그대로 덮어씀)와 Create New ADC(별도 이름의 항체로 분리하고, 열려 있던 항체는 그대로 둠) 중에서 고를 수 있습니다.

Layouts — display, style and navigation

  • Two independent toggles, saved with the sheet: Antibody info (each tile's chain-code and ADC caption lines) and Legend (one merged key for the whole sheet, rather than repeating it per tile).
  • Label font split into three roles — Name (the tile heading), Target (a tile's antigen/Fc/scFv labels) and Legend — each its own font and size (Sans-serif/Serif/Monospace, 6–40pt). Click the Name/Target/Legend label next to the font controls to choose which one you're editing.
  • Mouse-wheel zoom, keeping the point under the cursor fixed on screen; double-click resets it. Panning is now real scrollbars, since left-drag already places antibodies here.
  • The merged legend can be dragged anywhere on the sheet — a rough outline of its own box follows the cursor while you drag — and Reset legend position puts it back below the grid.
  • Saving a sheet as PNG/SVG no longer draws a border around an empty cell (still shown on screen, for drag-and-drop clarity), and a transparent-background PNG no longer loses the legend's own colour swatches.

Layout — 표시, 스타일, 탐색

  • 시트와 함께 저장되는 독립된 토글 두 가지: Antibody info(각 타일의 chain 코드와 ADC 캡션 줄)와 Legend(타일마다 반복하지 않고 시트 전체에 대해 하나로 합친 범례).
  • Label font가 세 가지 역할로 나뉩니다 — Name(타일 제목), Target(타일의 항원/Fc/scFv 라벨), Legend — 각각 별도의 글꼴과 크기를 가집니다 (Sans-serif/Serif/Monospace, 6–40pt). 글꼴 설정 옆의 Name/Target/Legend 라벨을 클릭해 어느 것을 편집할지 고릅니다.
  • 마우스 휠로 확대/축소할 수 있으며, 커서 아래 지점이 화면상 고정된 채 확대/축소됩니다. 더블클릭으로 원래대로 되돌립니다. 좌클릭 드래그는 이미 항체를 배치하는 데 쓰이므로, 화면 이동(panning)은 이제 실제 스크롤바로 합니다.
  • 통합 범례를 시트 아무 곳에나 드래그할 수 있으며 — 드래그하는 동안 범례 박스의 대략적인 윤곽이 커서를 따라옵니다 — Reset legend position으로 격자 아래 원래 위치로 되돌릴 수 있습니다.
  • 시트를 PNG/SVG로 저장할 때 빈 칸에는 더 이상 테두리가 그려지지 않으며(화면에서는 드래그 앤 드롭을 위해 계속 표시됩니다), 투명 배경 PNG에서도 범례 자체의 색 견본(swatch)이 더 이상 사라지지 않습니다.

Fixed

  • + Antibody and a project's right-click Add antibody now prompt for a name, like New/Rename project already do, instead of always falling back to an auto-numbered one.
  • A hinge-inserted (or N-terminal-only) arm scFv's antigen label now lands close to its ovals instead of reaching out at a tandem-Fab-tuned distance meant for a different layout.

수정

  • + Antibody와 프로젝트 우클릭의 Add antibody가 이제 New/Rename project처럼 이름을 물어보며, 더 이상 항상 자동 번호가 매겨진 이름으로 넘어가지 않습니다.
  • 힌지에 삽입된(또는 N말단에만 있는) arm scFv의 항원 라벨이 이제 자신의 타원 가까이에 위치하며, 다른 레이아웃(tandem-Fab)에 맞춰졌던 먼 거리로 떨어져 나가지 않습니다.

Notes

  • New HistoryStore.set_drug_color/get_drug_colors + auto_drug_colors (assemble.py) give ADC payload/linker combos the same project-wide colour + remembered-auto-hue system target_colors/auto_target_colors already gives antigens; a group's own stored colour still wins over a merely-remembered auto hue, only a real explicit project-wide pick overrides it.
  • layoutsheet.layout() now returns a 3-tuple (adds the grid's own size alongside the sheet size) and gained transform_ops(), combine_legend(), _legend_key(); the shared transform_ops scales every field a coordinate or length lives in (including a shape's absolute points), used by both the shrink-to-fit path and the new interactive zoom.
  • seqpanel.legend_layout gained an 'adc' shape (two stacked circles) alongside the pre-existing 'dot' (KiH knob) and line-sample shapes.
  • assemble.build_scene gained label_style (a Layout's own font/size, independent of the antibody map's own look) and drug_colors/adc_groups params.
  • Test suite grows across test_adc.py (61 checks) and the test_layout_* suites (sheet geometry, export, editor, store, tree).

참고

  • 새로 추가된 HistoryStore.set_drug_color/get_drug_colors + auto_drug_colors(assemble.py)는 ADC payload/linker 조합에도 antigen에 이미 쓰이던 target_colors/auto_target_colors 방식과 동일한 프로젝트 전역 색 + 기억된 auto-hue 체계를 제공합니다. 그룹 자신에게 저장된 색이 단순히 기억된 auto hue보다 항상 우선하며, 실제로 명시적인 프로젝트 전역 지정만이 이를 덮어씁니다.
  • layoutsheet.layout()이 이제 3-튜플을 반환하며(시트 크기와 함께 격자 자체의 크기도 추가), transform_ops(), combine_legend(), _legend_key()가 새로 생겼습니다. 공용 transform_ops는 좌표나 길이를 담는 모든 필드를 스케일링하며(도형의 절대 points 포함), 화면 맞춤 축소 경로와 새 인터랙티브 줌 양쪽에서 쓰입니다.
  • seqpanel.legend_layout에 기존의 'dot'(KiH knob)과 line-sample 모양에 더해 'adc' 모양(원 두 개를 겹친 형태)이 추가되었습니다.
  • assemble.build_scenelabel_style(항체 지도 자체의 모양과는 독립적인 Layout 고유의 글꼴/크기)과 drug_colors/adc_groups 매개변수가 추가되었습니다.
  • 테스트 스위트가 test_adc.py(61개 확인 항목)와 test_layout_* 스위트(시트 기하 구조, 내보내기, 편집기, 저장소, 트리) 전반에 걸쳐 늘어났습니다.

[1.11.1] — 2026-08-13

A disulfide-stabilised knob-into-hole is told apart from a plain one

  • S354C and Y349C now draw the inter-chain disulfide they form. Until now the pair only tinted the CH3s knob and hole, exactly as T366W and Y407V do on their own, so a KiH carrying the extra bond and one without it came out as the same picture. The bond crosses the channel between the two CH3s, high in the domains where EU 349/354 sit and clear of the knob below.
  • It takes both halves, one on each chain: a lone cysteine has no partner to bond to, so the map stays a plain KiH.
  • The same bond is drawn on a CH3-swapped Fab arm — a Fab whose CH1 and CL slots hold a knob/hole CH3 pair (Additional structure 4). There it sits on the side away from the hinge, where a CH3's N-terminus points once the domain is in a Fab slot, with the knob between it and the hinge end. It stops short of the variable domains, so it cannot be read as a V-to-constant bond.

이황화 결합으로 안정화된 knob-into-hole과 일반 knob-into-hole의 구분

  • S354C와 Y349C가 이제 서로 형성하는 사슬간 이황화 결합을 그립니다. 지금까지는 이 조합이 T366W, Y407V 단독일 때와 마찬가지로 CH3의 knob과 hole만 색으로 표시했을 뿐이라, 이 추가 결합이 있는 KiH와 없는 KiH가 같은 그림으로 나왔습니다. 이 결합은 두 CH3 사이의 채널을 가로지르며, EU 349/354가 위치한 도메인 상단, knob보다 위쪽에 그려집니다.
  • 양쪽 사슬 모두에 시스테인이 있어야 합니다: 한쪽에만 있으면 결합할 상대가 없으므로 지도는 일반 KiH 그대로 유지됩니다.
  • 같은 결합은 CH3가 치환된 Fab arm(CH1과 CL 자리에 knob/hole CH3 쌍이 들어간 Fab, Additional structure 4)에도 그려집니다. 이 경우 힌지 반대쪽, 즉 도메인이 Fab 자리에 들어갔을 때 CH3의 N말단이 향하는 쪽에 위치하며, knob이 그 결합과 힌지 쪽 끝 사이에 놓입니다. 가변 도메인에는 미치지 않으므로 V 도메인과 constant 도메인 사이의 결합으로 오인될 수 없습니다.

Fixed

  • A CH3-swapped Fab arm no longer draws a CH1-CL disulfide. Two CH3s hold together non-covalently, so nothing bonds at that position — the arm was borrowing the bond a real CH1-CL pair has. The only disulfide there now is the engineered S354C/Y349C one, when the design carries it.

Only knob-into-hole maps change: those with the two cysteines gain the bond, and a CH3-swapped arm loses one it should never have had. Detection, sequences and saved projects are untouched — this is how the map is drawn, not what it is drawn from. tests/test_kih_layout.py grows to 25 checks, covering both placements and the arm that must stay bond-free.

수정

  • CH3가 치환된 Fab arm이 더 이상 CH1-CL 이황화 결합을 그리지 않습니다. 두 CH3는 비공유 결합으로만 붙어 있어 그 위치에는 아무런 결합도 생기지 않는데, 이 arm은 실제 CH1-CL 쌍이 가진 결합을 잘못 빌려 쓰고 있었습니다. 이제 그 자리에 그려지는 유일한 이황화 결합은 설계에 포함된 경우의 엔지니어링 S354C/Y349C 결합뿐입니다.

knob-into-hole 지도만 바뀝니다: 두 시스테인을 가진 지도는 결합이 추가되고, CH3가 치환된 arm은 원래 있어서는 안 될 결합을 잃습니다. 검출, 서열, 저장된 프로젝트는 영향받지 않습니다 — 이는 지도가 그려지는 방식의 변화일 뿐, 무엇으로부터 그려지는지의 변화가 아닙니다. tests/test_kih_layout.py가 25개 확인 항목으로 늘어나, 두 가지 배치와 결합이 없어야 하는 arm을 모두 다룹니다.

[1.11] — 2026-08-11

Every scFv is drawn where the sequence puts it

A heavy chain's arm has one slot for the module that runs into the hinge, and every chain now uses it the same way. A plain Fab puts its CH1 and CL there. A chain whose scFv is spliced between CH1 and the hinge puts that scFv there and slides its Fab one column further out. A chain that opens with an scFv instead of a Fab puts that scFv there too. Same module, same place — so the two arms of a bispecific line up instead of drifting apart, and a map can be read straight down the sequence.

  • A hinge-inserted scFv (VH-CH1-scFv-Hinge-CH2-CH3) used to hang below its arm. Making room meant lifting that arm well clear of the other one, so an antibody with the insert on only one arm came out visibly lopsided; the scFv was also tilted the mirror of the Fab, so the arm kinked halfway down. The arm is now one straight limb, both arms sit level, and it reads in order: Fv, constants, inserted Fv, hinge, Fc.
  • A C-terminal scFv is drawn as the Fab's constants reflected across the Fc — a quarter turn from where it sat, clockwise on the knob arm and anticlockwise on the hole arm. Its two domains now lie along the arm the way CH1 and CL do, and land on the mirror of their slots, so the four arms read as one symmetric X. Its linker from CH3 meets the domain on the side rather than end-on, where it would fork against the scFv's own linker.
  • An N-terminal scFv (scFv-Hinge-CH2-CH3) now reaches CH2 through a linker and then the hinge, split by residue count like every other arm. Before it was one green linker end to end, which hid the hinge those chains actually have.
  • A C-terminal scFab sits on the footprint of the Fab reflected across the Fc, on the same four slots, so the two ends of the molecule are the same size and reach. Inside it the chain sets the order: variable pair inboard, constants outboard, the VL-CL run on the lower row and VH-CH1 on the upper one. That keeps its two green runs apart — the CH3 linker lands on VL's inner side, low and near the Fc, while the long internal linker leaves CL's outer end, far out on the other side of the cluster.

모든 scFv가 서열이 위치한 자리에 그려짐

중쇄의 arm에는 힌지로 이어지는 모듈이 들어갈 자리가 하나 있고, 이제 모든 사슬이 이 자리를 같은 방식으로 씁니다. 일반 Fab은 여기에 CH1과 CL을 놓습니다. CH1과 힌지 사이에 scFv가 삽입된 사슬은 여기에 그 scFv를 놓고 자신의 Fab을 한 칸 더 바깥쪽으로 밀어냅니다. Fab 대신 scFv로 시작하는 사슬도 scFv를 여기에 놓습니다. 같은 모듈이 같은 자리에 놓이므로, 이중특이항체의 두 arm이 서로 어긋나지 않고 나란히 정렬되며, 지도를 서열 순서 그대로 읽을 수 있습니다.

  • 힌지에 삽입된 scFv(VH-CH1-scFv-Hinge-CH2-CH3)는 예전에는 자신의 arm 아래로 늘어져 그려졌습니다. 공간을 만들려면 그 arm을 다른 arm과 확연히 떨어뜨려야 했으므로, 한쪽 arm에만 삽입이 있는 항체는 눈에 띄게 비대칭으로 보였습니다. scFv도 Fab을 거울처럼 뒤집은 각도로 기울어져 있어 arm이 중간에서 꺾여 보였습니다. 이제 arm은 하나의 곧은 팔이 되고, 두 arm이 같은 높이에 놓이며, Fv, constant 영역, 삽입된 Fv, 힌지, Fc 순서로 읽힙니다.
  • C말단 scFv는 이제 Fc를 기준으로 Fab의 constant 영역을 대칭 이동한 형태로 그려집니다 — 원래 위치에서 90도 돌아간 자리로, knob arm에서는 시계 방향, hole arm에서는 반시계 방향입니다. 두 도메인은 이제 CH1과 CL처럼 arm을 따라 놓이며, 각자의 자리를 대칭 이동한 위치에 놓여 네 개의 arm이 하나의 대칭적인 X자 형태로 읽힙니다. CH3에서 나오는 링커는 도메인 끝이 아니라 옆면에서 만나는데, 끝에서 만나면 scFv 자신의 링커와 갈라지듯 겹쳐 보이기 때문입니다.
  • N말단 scFv(scFv-Hinge-CH2-CH3)는 이제 다른 모든 arm과 마찬가지로 잔기 수에 따라 나뉜 링커, 그리고 힌지를 거쳐 CH2에 이어집니다. 이전에는 하나의 녹색 링커가 끝까지 이어져 있어, 그 사슬이 실제로 가진 힌지를 가려 버렸습니다.
  • C말단 scFab는 Fc를 기준으로 Fab을 대칭 이동한 자리, 즉 같은 네 자리 위에 놓여 분자 양쪽 끝의 크기와 길이가 같아집니다. 그 안에서는 사슬 순서가 배치를 정합니다: 가변 도메인 쌍이 안쪽, constant 영역이 바깥쪽에 오며, VL-CL 구간은 아래쪽 줄에, VH-CH1은 위쪽 줄에 놓입니다. 이 덕분에 두 개의 녹색 링커 구간이 서로 떨어져 있게 됩니다 — CH3에서 오는 링커는 VL의 안쪽, Fc에 가까운 낮은 위치에 닿고, 길게 이어지는 내부 링커는 CL의 바깥쪽 끝에서 나와 클러스터 반대편 멀리까지 이어집니다.

The linker inside an scFv says which domain comes first

  • It is drawn as an S: out of the first domain's C-terminal end, round into the channel between the pair, along that gap parallel to both, then out to the second domain's N-terminal end. The old drawing was a symmetric loop between the two ovals, which said nothing about the order the chain runs in — that was left to the (VL-VH) note under the antigen label, which is still there.
  • The two V domains now sit as close as a Fab's CH1 and CL, so an scFv reads as the Fv it is rather than two domains that happen to be near each other.
  • The same S carries a scFab's long internal linker, the one joining its VL-CL run to its VH-CH1 run: out of CL's C-terminal end, down the channel between the two runs, out to VH's N-terminal end.
  • An engineered ds-scFv disulfide is drawn thicker than the map's other bonds, and crosses the linker at the middle of the pair. It passes behind the domains like every disulfide does, so only the few units inside the gap show — at the standard width it was easy to miss, and where it sat before it covered the end of the linker and made it look cut short.

Every map of an antibody carrying an scFv is redrawn by this release; twelve of the fourteen reference constructs change. Sequences, detection and saved projects are untouched — this is how the map is drawn, not what it is drawn from.

scFv 내부 링커가 어느 도메인이 먼저인지 나타냄

  • 이제 S자 모양으로 그려집니다: 첫 번째 도메인의 C말단에서 나와 두 도메인 사이 채널로 돌아 들어가고, 그 간격을 따라 둘과 평행하게 이어지다가 두 번째 도메인의 N말단으로 빠져나갑니다. 예전 그림은 두 타원 사이의 대칭적인 고리 모양이라 사슬이 어느 방향으로 이어지는지 아무것도 말해주지 않았고, 그 정보는 항원 라벨 아래의 (VL-VH) 표기에만 맡겨져 있었습니다 — 이 표기는 지금도 그대로 남아 있습니다.
  • 두 V 도메인은 이제 Fab의 CH1과 CL만큼 가깝게 배치되어, scFv가 우연히 가까이 있는 두 도메인이 아니라 실제 Fv로 읽힙니다.
  • 같은 S자 모양이 scFab의 긴 내부 링커, 즉 VL-CL 구간과 VH-CH1 구간을 잇는 링커에도 쓰입니다: CL의 C말단에서 나와 두 구간 사이 채널을 따라 내려가 VH의 N말단으로 빠져나갑니다.
  • 엔지니어링된 ds-scFv 이황화 결합은 지도의 다른 결합보다 두껍게 그려지며, 두 도메인 사이 링커의 중간을 가로지릅니다. 다른 모든 이황화 결합과 마찬가지로 도메인 뒤로 지나가므로 간격 안의 몇 단위만 보이는데, 기존 두께로는 놓치기 쉬웠고 예전 위치에서는 링커 끝부분을 가려 링커가 짧게 잘린 것처럼 보이게 했습니다.

scFv를 가진 항체의 모든 지도는 이번 릴리스로 다시 그려집니다. 14개 참조 구조체 중 12개가 바뀝니다. 서열, 검출, 저장된 프로젝트는 영향받지 않습니다 — 이는 지도가 그려지는 방식의 변화일 뿐, 무엇으로부터 그려지는지의 변화가 아닙니다.

[1.10] — 2026-08-06

Layouts — several antibodies compared on one sheet

  • A layout puts several of a project's antibodies side by side on a grid, so a set of constructs can be taken in at a glance instead of clicked through one at a time. Right-click a project → Add layout; it appears under a 📐 Layouts folder and opens like an antibody.
  • Opening one gives it the whole workspace — the map, chains and sequences areas become the sheet, because a comparison is unreadable in a third of the window. Clicking an antibody puts everything back, split where you left it.
  • Set Rows and Columns, then drag an antibody from the list onto a cell. Drag a cell onto another to move it, onto a filled one to swap them, or off the grid to take it off the sheet. The list marks what is already placed.
  • Each tile shows the antibody's name centred above its map, and below it one line per chain: the Benchling code and a short tag saying what that chain isHC, LC, or HC · knob / HC · hole for the two halves of a knob-into-hole pair. Every map is drawn at the same scale, so a bigger construct really does look bigger — fitting each tile to its own box would have hidden exactly the difference the sheet exists to show.
  • While you drag, the pointer carries the antibody's name on a badge and the cursor changes, so it is clear something is being moved and what it is; the cell it would land in is outlined.
  • A cell holds the antibody by reference: edit its sequences and every layout showing it follows. Target colours carry over too — a sheet is drawn with the project's antigen palette, the same one its maps use, and recolouring an antigen shows on the sheet the next time you open it. Deleting an antibody, or moving it to another project, just empties the cells that named it.
  • With a layout open the History button becomes [💾 Save layout…] and writes the sheet as one PNG or SVG — format, white or transparent background, and the sheet width. It is a single artifact, so it asks for one file rather than the batch dialog's tick-lists. An empty sheet says so instead of writing a blank image, and a cell whose antibody cannot be drawn is called out first.

Layout — 여러 항체를 한 시트에서 비교

  • Layout은 한 프로젝트의 여러 항체를 격자 위에 나란히 놓아, 구조체 묶음을 하나씩 클릭해 보는 대신 한눈에 파악할 수 있게 해줍니다. 프로젝트를 우클릭 → Add layout을 하면 📐 Layouts 폴더 아래 생기고, 항체처럼 클릭해 열 수 있습니다.
  • Layout을 열면 작업 화면 전체를 차지합니다 — map, chains, sequences 영역이 모두 시트가 되는데, 비교 화면이 창의 3분의 1 크기로는 읽을 수 없기 때문입니다. 항체를 클릭하면 이전에 나눠 두었던 상태로 모두 되돌아갑니다.
  • Rows(행)Columns(열)을 설정한 뒤, 목록에서 항체를 드래그해 칸에 놓습니다. 칸을 다른 칸 위로 드래그하면 이동하고, 이미 채워진 칸 위로 드래그하면 서로 자리를 바꾸며, 격자 밖으로 드래그하면 시트에서 빠집니다. 목록에는 이미 배치된 항체가 표시됩니다.
  • 각 타일은 지도 위에 가운데 정렬된 항체 이름을 표시하고, 그 아래에 사슬마다 한 줄씩 Benchling 코드와 그 사슬이 무엇인지 짧게 표기합니다 — HC, LC, 또는 knob-into-hole 쌍의 두 절반을 나타내는 HC · knob / HC · hole. 모든 지도는 같은 축척으로 그려지므로 실제로 더 큰 구조체는 정말 더 크게 보입니다 — 각 타일을 자기 박스 크기에 맞췄다면 시트가 보여주려는 바로 그 차이를 감춰 버렸을 것입니다.
  • 드래그하는 동안 포인터에는 항체 이름이 적힌 배지가 함께 따라오고 커서 모양도 바뀌어, 무언가가 옮겨지고 있다는 것과 그것이 무엇인지 분명히 알 수 있습니다. 놓일 칸에는 테두리가 표시됩니다.
  • 칸은 항체를 원본 그대로(참조) 담습니다: 그 항체의 서열을 고치면 그것을 보여주는 모든 layout이 함께 바뀝니다. Target colours도 그대로 이어집니다 — 시트는 지도와 동일한 프로젝트의 항원 팔레트로 그려지며, 항원 색을 바꾸면 다음에 시트를 열 때 반영됩니다. 항체를 삭제하거나 다른 프로젝트로 옮기면 그 항체를 담고 있던 칸만 비워집니다.
  • layout이 열려 있는 동안 History 버튼은 [💾 Save layout…]로 바뀌어 시트를 PNG 또는 SVG 하나로 저장합니다 — 형식, 흰색/투명 배경, 시트 너비를 고를 수 있습니다. 하나의 산출물이므로 배치 대화 창의 체크 목록 대신 파일 하나만 물어봅니다. 빈 시트는 빈 이미지를 쓰는 대신 비어 있다고 알려주고, 그릴 수 없는 항체가 든 칸이 있으면 먼저 알려줍니다.

Select residues in the Sequences panel and copy them

  • Drag across the residues in the Sequences panel to select them, then press Ctrl+C. The selection follows the line wrap, and what lands on the clipboard is the residues alone — one line, no FASTA header, no line breaks — so it pastes straight into a sequence box, BLAST, or a spreadsheet cell.
  • A whole domain in one click: double-click anywhere inside a domain, or click its coloured bar, and that domain is selected end to end — across line wraps. Clicking any part of a bar takes the whole domain, not just the run on that line, so a VH or a CH3 is one click and a Ctrl+C away.
  • A selection stays inside the chain it started in. Dragging on past the end clamps there rather than running into the next chain: two chains are two molecules, and joining them would produce a sequence that does not exist.
  • The range is held as residue positions, not pixels, so resizing the window — which rewraps the panel — keeps the same residues selected.

서열 패널에서 잔기 선택 후 복사

  • Sequences 패널에서 잔기 위를 드래그해 선택한 뒤 Ctrl+C를 누릅니다. 선택 영역은 줄바꿈을 따라가며, 클립보드에 담기는 것은 잔기 문자뿐입니다 — 한 줄, FASTA 헤더 없음, 줄바꿈 없음 — 그대로 서열 입력칸, BLAST, 스프레드시트 셀에 바로 붙여넣을 수 있습니다.
  • 클릭 한 번으로 도메인 전체 선택: 도메인 안 아무 곳이나 더블클릭하거나 그 색 트랙(컬러 바)을 클릭하면 줄바꿈을 가로질러 도메인 전체가 끝에서 끝까지 선택됩니다. 바의 어느 부분을 클릭해도 그 줄의 구간만이 아니라 도메인 전체가 선택되므로, VH나 CH3 하나를 클릭 한 번과 Ctrl+C만으로 가져올 수 있습니다.
  • 선택 영역은 시작한 사슬 안에서만 유지됩니다. 끝을 넘어가도록 드래그하면 다음 사슬로 넘어가지 않고 그 자리에서 멈춥니다: 두 사슬은 두 개의 분자이므로, 이어 붙이면 실제로 존재하지 않는 서열이 만들어지기 때문입니다.
  • 선택 범위는 픽셀이 아니라 잔기 위치로 유지되므로, 창 크기를 바꿔 패널이 다시 줄바꿈되어도 선택된 잔기는 그대로 유지됩니다.

A chain can have a readable name, and the Sequences panel says more

  • Each chain card gains a Name box beside Code — a readable name such as Heavy chain or anti-CD3 scFv arm. Optional, stored with the antibody, and shown in the Sequences panel so a map read back weeks later says what each chain was meant to be.
  • The Sequences panel now heads each chain with two lines: the code, the name and the antigens, then the chain's domain architecture (VH-CH1-Hinge-CH2-CH3). The architecture gets its own line because an scFv or scFab arm makes it long enough to push the antigens off the edge.
  • The card's head is now two rows — Code and Name on the first, Plasmid and Targets on the second — so none of the four boxes is squeezed.

사슬에 읽기 쉬운 이름 부여, 서열 패널 정보 확장

  • 각 사슬 카드에 Code 옆으로 Name 입력칸이 추가됩니다 — Heavy chain이나 anti-CD3 scFv arm처럼 읽기 쉬운 이름입니다. 선택 사항이며 항체와 함께 저장되고, Sequences 패널에도 표시되어 몇 주 뒤에 지도를 다시 봐도 각 사슬이 무엇을 의도한 것인지 알 수 있습니다.
  • Sequences 패널이 이제 각 사슬 머리글을 두 줄로 표시합니다: 첫 줄은 코드, 이름, 항원, 둘째 줄은 사슬의 도메인 구조 (VH-CH1-Hinge-CH2-CH3)입니다. scFv나 scFab arm이 있으면 구조가 길어져 항원 표시를 밀어낼 수 있으므로 구조는 별도 줄로 분리했습니다.
  • 카드 머리글이 이제 두 줄로 나뉩니다 — 첫 줄에 Code와 Name, 둘째 줄에 Plasmid와 Targets — 그래서 네 입력칸 어느 것도 좁아지지 않습니다.

Fixed

  • The Save maps list only scrolled from its scrollbar. The wheel did nothing over the list itself — Tk sends a wheel event to the widget under the pointer and never up to the canvas behind it, so every entry was a dead spot. The same thing the chain cards had fixed in 1.08, now applied to that list.

수정

  • Save maps 목록이 스크롤바로만 스크롤되던 문제. 목록 자체 위에서는 마우스 휠이 아무 반응이 없었습니다 — Tk가 휠 이벤트를 커서 아래 위젯에만 보내고 뒤에 있는 캔버스로는 올려보내지 않아, 목록의 모든 항목이 반응 없는 자리였습니다. 1.08에서 chain 카드에 적용했던 것과 같은 수정을 이 목록에도 적용했습니다.

The History right-click menu names its shortcuts

  • Right-clicking a project or an antibody now shows the key beside each entry — Rename F2, Duplicate Ctrl+D, Delete Del — so the shortcuts are discoverable from the menu instead of only from How to use. The keys themselves are unchanged.

History 우클릭 메뉴에 단축키 표시

  • 프로젝트나 항체를 우클릭하면 이제 각 항목 옆에 단축키가 함께 표시됩니다 — Rename F2, Duplicate Ctrl+D, Delete DelHow to use에서만 알 수 있던 단축키를 메뉴에서도 바로 확인할 수 있습니다. 단축키 자체는 바뀌지 않았습니다.

Notes

  • A layout is a layouts list on a project, additive like the rest, so SCHEMA_VERSION stays at 2 and a file written before this reads back with none. duplicate_project remaps a copied layout onto the copied antibodies, which get fresh ids and would otherwise leave the copy's sheet pointing into the original. New layoutsheet.py holds the grid geometry as renderer-agnostic ops, the same shape seqpanel uses, and draw_scene gained a box parameter that draws a scene as one tile — with box=None every path is what it was. New tests/test_layout_store.py (27), test_layout_tree.py (23), test_layout_sheet.py (37), test_layout_editor.py (27) and test_layout_export.py (19).
  • Exporting a sheet reuses the per-scene renderers rather than re-deriving the drawing: PNG renders each tile through the same render a single map goes through and composites it, SVG nests each finished map in a <g transform>. Rendering an antibody a second way for the sheet is what would let the two drift apart. scene_span moved to render_svg, beside _bbox, so all three renderers size a tile identically.
  • The panel is a Canvas, so there is no native text selection to lean on. The shared layout now tags each wrapped residue line with its chain and starting residue (a residues key on that op), which lets the Tk renderer return a hit-map from pixel to residue. layout is shared with the PNG and SVG exporters; both read only the standard op keys and are unaffected — a test pins that.
  • The selection band is a fixed #b3d4fc rather than a theme accent: this panel's paper is white in every palette, so one tint works throughout, while the dark palette's accent is a dark slate that would swamp the residues. The residue text is raised back over the band, which also keeps the band visible across a mutation highlight (itself a rect behind the residues).
  • The band is exactly one residue cell tall, the same box a mutation highlight uses, so it stops above the domain bar and never hides that colour. The bars carry their domain's full span (a domain key on the bar op), which is what lets a click on any run of a bar select the domain whole.
  • Ctrl+C is bound on the panel, not globally, so the chain cards' own copy still works. New tests/test_seq_select.py (30 checks).
  • The chain name is an additive chain_name key on each stored chain, so SCHEMA_VERSION stays at 2 and an antibody saved before this reads as blank. Unlike the plasmid code it does travel into the scene, since the panel draws it. New tests/test_chain_name.py (19 checks); test_chains_wheel now walks every row of a card's head rather than assuming there is one.

참고

  • layout은 프로젝트에 추가되는 layouts 목록으로, 다른 것들과 마찬가지로 애디티브(additive) 방식이라 SCHEMA_VERSION은 2로 유지되며 이전에 저장된 파일은 layout 없이 그대로 읽힙니다. duplicate_project는 복제된 layout을 복제된 항체들에 맞춰 다시 매핑하는데, 이 항체들은 새 id를 받으므로 그렇게 하지 않으면 복제본의 시트가 원본을 계속 가리키게 됩니다. 새로 추가된 layoutsheet.py는 격자 기하 구조를 렌더러에 무관한 연산(op)으로 보관하며, 이는 seqpanel이 쓰는 것과 같은 형태입니다. draw_scene에는 장면을 하나의 타일로 그리는 box 매개변수가 추가되었고, box=None일 때는 기존 경로 그대로입니다. 새 테스트: tests/test_layout_store.py (27개), test_layout_tree.py(23개), test_layout_sheet.py(37개), test_layout_editor.py(27개), test_layout_export.py(19개).
  • 시트를 내보낼 때는 그림을 다시 유도하지 않고 장면별 렌더러를 그대로 재사용합니다: PNG는 각 타일을 단일 지도가 거치는 것과 같은 render 로 그려 합성하고, SVG는 완성된 각 지도를 <g transform> 안에 중첩시킵니다. 시트를 위해 항체를 다른 방식으로 다시 그린다면 둘이 서로 어긋날 수 있기 때문입니다. scene_span_bbox 옆의 render_svg로 옮겨, 세 렌더러 모두 타일 크기를 동일하게 계산합니다.
  • 이 패널은 Canvas라 기본 텍스트 선택 기능을 쓸 수 없습니다. 공용 layout이 이제 줄바꿈된 각 잔기 줄에 사슬과 시작 잔기 정보를 표시하며(해당 연산의 residues 키), 이를 이용해 Tk 렌더러가 픽셀에서 잔기로의 히트맵을 반환합니다. layout은 PNG·SVG 내보내기와 공유되며, 둘 다 표준 연산 키만 읽으므로 영향을 받지 않습니다 — 테스트로 이를 고정해 두었습니다.
  • 선택 밴드는 테마 강조색이 아니라 고정된 #b3d4fc를 씁니다: 이 패널의 바탕은 모든 팔레트에서 흰색이라 한 가지 색조로 충분한 반면, 다크 팔레트의 강조색은 어두운 슬레이트 색이라 잔기 글자를 삼켜 버립니다. 잔기 텍스트는 밴드 위로 다시 올라와 그려지며, 이는 밴드가 변이 하이라이트(잔기 뒤의 사각형) 위에서도 보이게 해 줍니다.
  • 밴드의 높이는 변이 하이라이트가 쓰는 것과 같은, 잔기 한 칸 높이 그대로라 도메인 바 위에서 멈추고 그 색을 절대 가리지 않습니다. 바는 해당 도메인의 전체 범위를 담고 있어(바 연산의 domain 키), 바의 어느 구간을 클릭해도 도메인 전체가 선택됩니다.
  • Ctrl+C는 전역이 아니라 패널에만 바인딩되어 있어 chain 카드 자체의 복사 기능은 그대로 동작합니다. 새 tests/test_seq_select.py(30개 확인 항목).
  • chain 이름은 저장된 각 chain에 추가되는 chain_name 키이므로 SCHEMA_VERSION은 2로 유지되며, 이전에 저장된 항체는 빈 값으로 읽힙니다. plasmid 코드와 달리 이 이름은 패널이 그리는 값이므로 장면(scene)까지 전달됩니다. 새 tests/test_chain_name.py(19개 확인 항목); test_chains_wheel은 이제 카드 머리글에 한 줄만 있다고 가정하지 않고 모든 줄을 검사합니다.

[1.09] — 2026-08-06

Undo and redo for an action that replaced the whole input

  • [Load example], opening a FASTA/JSON or a .docx project, and [Reset] each replace every chain at once. [↶ Undo] in the toolbar (or Ctrl+Z) now takes any of them back — the cards, the map, and the antibody as History holds it. [↷ Redo] (Ctrl+Y, or Ctrl+Shift+Z) puts it back again, for when you undo one step too many.
  • Restoring the stored record is the point. Generate writes the input to history.json as it draws, so by the time you notice the mistake the entry on disk already holds the replacement; refilling the cards alone would leave the overwritten record there. Undo puts the chains, title and name back too, so the screen, the History panel and the file agree again.
  • The two arrows sit to the right of [🆕 What's new] and grey out when there is nothing to undo or redo, so the toolbar says what is available.
  • The last 10 steps are kept each way, and starting a new action drops the redo chain. Typing in a card is not undone, and neither is deleting from History — that already asks first.

입력 전체를 교체하는 동작에 대한 Undo/Redo

  • [Load example], FASTA/JSON이나 .docx 프로젝트 열기, [Reset]은 각각 모든 사슬을 한 번에 교체합니다. 툴바의 [↶ Undo](또는 Ctrl+Z)가 이제 이 동작들을 모두 되돌립니다 — 카드, 지도, 그리고 History가 들고 있는 항체까지 함께요. [↷ Redo](Ctrl+Y, 또는 Ctrl+Shift+Z)는 한 단계 과하게 되돌렸을 때 다시 앞으로 되돌립니다.
  • 핵심은 저장된 기록을 복원하는 것입니다. Generate는 그리는 동시에 입력을 history.json에 기록하므로, 실수를 알아챌 즈음이면 디스크의 항목은 이미 교체된 내용으로 덮여 있습니다 — 카드만 다시 채워서는 덮어써진 기록이 그대로 남습니다. Undo는 사슬, 제목, 이름까지 되돌려 놓아 화면, History 패널, 파일이 다시 일치하게 만듭니다.
  • 두 화살표는 [🆕 What's new] 오른쪽에 있으며, 되돌리거나 다시 실행할 것이 없을 때는 회색으로 비활성화되어 툴바가 지금 무엇을 할 수 있는지 알려줍니다.
  • 각 방향으로 마지막 10단계까지 보관되며, 새 동작을 시작하면 redo 체인은 사라집니다. 카드에 직접 입력한 내용이나 History에서 삭제한 것은 undo 대상이 아닙니다 — 삭제는 이미 먼저 확인을 물어봅니다.

Load example no longer overwrites the antibody you are viewing

  • Reported 2026-08-05. With an antibody open, one misclick on [Load example] filled the cards with the Herceptin example and Generate wrote it over that antibody — in history.json as well, so the original was gone for good.
  • [Load example] now adds the example as an antibody of its own under the current project and opens that, leaving the entry you were on untouched. No prompt to click through, because nothing is at risk.
  • Opening a FASTA/JSON or picking a .docx project still replaces the current input — that is usually what you meant — but it now asks first when the cards have content, and is undoable either way. Declining a .docx project also puts the picker back on the project that is actually loaded.

Load example가 더 이상 보고 있는 항체를 덮어쓰지 않음

  • 2026-08-05 제보. 항체를 열어 둔 상태에서 [Load example]을 잘못 눌러 카드가 Herceptin 예제로 채워지고, Generate가 그것을 그 항체 위에 그대로 덮어썼습니다 — history.json에도 마찬가지로 덮어써져 원본이 완전히 사라졌습니다.
  • 이제 [Load example]은 예제를 현재 프로젝트 아래 별도의 항체로 추가하고 그것을 열어, 보고 있던 항목은 그대로 둡니다. 위험할 것이 없으므로 확인 창을 거칠 필요도 없습니다.
  • FASTA/JSON 열기나 .docx 프로젝트 선택은 여전히 현재 입력을 교체합니다 — 보통 그것이 의도한 동작이기 때문입니다 — 다만 이제는 카드에 내용이 있을 때 먼저 물어보며, 어느 쪽이든 undo가 가능합니다. .docx 프로젝트 선택을 취소하면 실제로 로드되어 있는 프로젝트로 선택 창이 되돌아갑니다.

A chain can carry its DNA plasmid code

  • Each chain card has a Plasmid box between Code and Targets, for that chain's DNA plasmid code (e.g. PL0042). It is optional: the box shows a grey PL0000 hint while empty, and takes whatever you type — a code from another scheme is not rejected.
  • The code is stored with the antibody in History and comes back when you reopen it, undo and redo included. The structure map and the sequence panel are unchanged, so saved images look exactly as before — this is for the record, not for the figure.

사슬에 DNA 플라스미드 코드 기록 가능

  • 각 chain 카드에 Code와 Targets 사이에 Plasmid 입력칸이 생겨, 그 사슬의 DNA 플라스미드 코드(예: PL0042)를 적을 수 있습니다. 선택 사항이며, 비어 있을 때는 회색 PL0000 힌트가 표시되고 무엇을 입력하든 받아들입니다 — 다른 체계의 코드라도 거부되지 않습니다.
  • 이 코드는 History에 항체와 함께 저장되며, 다시 열었을 때(undo, redo 포함) 그대로 돌아옵니다. 구조 지도와 서열 패널은 바뀌지 않으므로 저장되는 이미지는 이전과 똑같습니다 — 이는 기록을 위한 것이지 그림을 위한 것이 아닙니다.

Notes

  • The plasmid code is an additive plasmid key on each stored chain, so SCHEMA_VERSION stays at 2 and an antibody saved before this simply reads as blank. New tests/test_plasmid_code.py (14 checks) covers the round trip through the cards, the store and history.json on disk, the grey hint never being saved as a value, a card kept alive by a plasmid code alone, and the map and sequence panel staying clear of it.
  • A restore point holds the cards, the active project/antibody and a copy of the project's whole antibody list. Snapshotting the list rather than just the open antibody is what makes undo and redo the same operation in opposite directions: it carries an antibody an action added or removed with its id intact, so redoing [Load example] reopens the very entry undo had removed. Restoring deliberately does not go through _activate_antibody: that captures the screen into the store first, which would save the replacement over the very record being restored. A theme switch clears both stacks, since their cards are about to be destroyed.
  • New tests/test_undo.py (34 checks): the new-antibody path, undo of both the create and the overwrite case, redo including the id round-trip, the redo chain being dropped by a new action, the stack bound, the empty-stack no-ops, the toolbar buttons' enabled state and the confirmation's three outcomes. It drives the real key paths with event_generate, not just the handlers.
  • How to use gains the Ctrl+Z shortcut under History, and its [Load example] paragraph now says the example arrives as its own antibody.

참고

  • plasmid 코드는 저장된 각 chain에 추가되는 plasmid 키이므로 SCHEMA_VERSION은 2로 유지되며, 이전에 저장된 항체는 그냥 빈 값으로 읽힙니다. 새 tests/test_plasmid_code.py(14개 확인 항목)는 카드·저장소·디스크상의 history.json을 오가는 왕복, 회색 힌트가 값으로 저장되지 않는지, plasmid 코드 하나만으로 카드가 유지되는 경우, 지도와 서열 패널이 이 값과 무관하게 유지되는지를 다룹니다.
  • 복원 지점(restore point)은 카드, 활성 프로젝트/항체, 그리고 프로젝트의 전체 항체 목록 사본을 담습니다. 열려 있는 항체 하나만이 아니라 목록 전체를 스냅샷하는 방식 덕분에 undo와 redo가 방향만 반대인 같은 연산이 됩니다: 어떤 동작이 추가하거나 제거한 항체를 id 그대로 담고 있으므로, [Load example]을 redo하면 undo가 제거했던 바로 그 항목이 다시 열립니다. 복원은 의도적으로 _activate_antibody를 거치지 않는데, 그 함수는 먼저 화면을 저장소에 캡처하므로 지금 복원하려는 바로 그 기록 위에 교체본을 저장해 버리기 때문입니다. 테마를 전환하면 카드가 곧 파괴되므로 undo/redo 스택 둘 다 비웁니다.
  • tests/test_undo.py(34개 확인 항목): 새 항체 경로, 생성과 덮어쓰기 두 경우 모두의 undo, id 왕복을 포함한 redo, 새 동작으로 redo 체인이 사라지는지, 스택 한도, 빈 스택에서의 무동작, 툴바 버튼의 활성화 상태, 확인 창의 세 가지 결과까지 다룹니다. 핸들러만 호출하는 것이 아니라 event_generate로 실제 키 입력 경로를 구동합니다.
  • How to use의 History 항목에 Ctrl+Z 단축키가 추가되었고, [Load example] 문단도 이제 예제가 별도의 항체로 추가된다고 설명합니다.

[1.08.2] — 2026-08-05

Fixed

  • An appended scFv's VL went missing when its light chain came from a mouse. On a heavy chain carrying an scFv after CH3, the VL was left unlabelled — it fell through as a single long Unknown block together with the linker in front of it, and because an scFv needs two V domains joined by a linker, the whole scFv failed to group too. The map read VH-CH1-Hinge-CH2-CH3-VH, one domain short.
  • The cause was the VL J-segment motif, which a variable domain is located by. It was written around the human JK germlines and was a residue-class too narrow at two positions: Kabat-107 allowed only I/V, but the murine JK5 that a chimeric/humanised light chain brings along ends ...FGAGTKLELK; and Kabat-103 allowed only K/E/Q, so the human JK5 ...FGQGTRLEIK missed as well. Both positions now take the wider class, which covers the human and murine JK sets and lambda.

수정

  • 경쇄가 마우스 유래일 때 부가된 scFv의 VL이 누락되던 문제. CH3 뒤에 scFv를 가진 중쇄에서 VL에 라벨이 붙지 않아, 그 앞의 링커와 함께 하나의 긴 Unknown 블록으로 처리되었고, scFv는 링커로 이어진 두 개의 V 도메인이 있어야 하므로 scFv 전체도 그룹으로 묶이지 못했습니다. 지도에는 VH-CH1-Hinge-CH2-CH3-VH로 표시되어 도메인이 하나 빠진 채 나왔습니다.
  • 원인은 가변 도메인을 찾는 데 쓰이는 VL J-segment 모티프였습니다. 이 모티프는 사람 JK germline을 기준으로 작성되어 두 위치에서 잔기 범위가 너무 좁았습니다: Kabat-107은 I/V만 허용했지만, chimeric/humanised 경쇄가 가져오는 마우스 JK5는 ...FGAGTKLELK로 끝납니다. 또 Kabat-103은 K/E/Q만 허용했지만, 사람 JK5인 ...FGQGTRLEIK 역시 걸러지지 않았습니다. 이제 두 위치 모두 더 넓은 잔기 범위를 허용하도록 바뀌어, 사람과 마우스의 JK 세트, 그리고 lambda까지 포괄합니다.

Notes

  • The change is one regex in domains.py. Re-running it over every sequence in db/ and reference/ (114) moved no existing match, and the constant-region references stay free of false hits, so nothing that was detected before is detected differently.
  • New tests/test_vl_j_motif.py (21 checks) pins the germline JK/lambda set, the clean constant references, and the reported scFv-Fc chain annotating end to end as VH-CH1-Hinge-CH2-CH3-scFv.

참고

  • 이번 변경은 domains.py의 정규식 하나입니다. db/reference/의 모든 서열(114개)에 다시 적용해 본 결과 기존에 일치하던 항목은 하나도 바뀌지 않았고, constant 영역 참조 서열에도 잘못된 검출이 생기지 않아, 이전에 검출되던 것 중 달라진 것은 없습니다.
  • tests/test_vl_j_motif.py(21개 확인 항목)가 germline JK/lambda 세트, 깨끗한 constant 참조 서열, 그리고 제보된 scFv-Fc 사슬이 VH-CH1-Hinge-CH2-CH3-scFv로 처음부터 끝까지 정확히 주석 처리되는지 고정해 검증합니다.

[1.08.1] — 2026-07-31

Saved maps are captioned with the antibody's name

  • Every image written by 💾 Save maps… now carries the antibody's name at the top, so a map dropped onto a slide says what it is. The name is the one in the History panel, read at save time — rename there and the next save follows.
  • The on-screen map is unchanged; the caption is added on export only. A Sequences only export has no figure area, so it has no caption either.

저장된 지도에 항체 이름 캡션 추가

  • 💾 Save maps…로 저장하는 모든 이미지 상단에 이제 항체 이름이 붙어, 슬라이드에 옮겨 놓아도 무엇인지 알 수 있습니다. 이름은 History 패널에 있는 것을 저장 시점에 그대로 읽어오므로, 거기서 이름을 바꾸면 다음 저장부터 반영됩니다.
  • 화면에 보이는 지도 자체는 바뀌지 않으며, 캡션은 내보낼 때만 추가됩니다. Sequences only로 내보내면 그림 영역이 없으므로 캡션도 붙지 않습니다.

An antigen on 'Auto' keeps one colour across its project

  • An antigen left on Auto was coloured by its binding site's position in the hue cycle within one antibody, so the same antigen could come out green in one map and purple in the next — the two were no longer comparable side by side.
  • A project now remembers the hue it first handed an antigen (auto_target_colors on the project) and reuses it for every antibody under it, saved images included. Colours assigned in 🎨 Target colours still win; if one of them claims a hue an antigen was already using, only that antigen moves to a free family. Switching an antigen back to Auto returns it to the hue it had before.
  • A Fv whose colour is one of the six built-in families now keeps that family's own light (VL) shade instead of an arithmetically lightened one — so an automatic hue and the matching preset in Target colours draw identically.

'Auto'로 둔 항원은 프로젝트 전체에서 같은 색 유지

  • Auto로 둔 항원은 지금까지 한 항체 안에서 결합 부위의 위치에 따라 색상 순환 중 하나로 칠해졌기 때문에, 같은 항원이 어떤 지도에서는 초록색으로, 다른 지도에서는 보라색으로 나올 수 있었습니다 — 그러면 둘을 나란히 비교할 수 없었습니다.
  • 이제 프로젝트가 항원에 처음 배정한 색조를 기억해두고 (프로젝트의 auto_target_colors) 그 프로젝트 아래 모든 항체에 동일하게 재사용합니다 — 저장된 이미지도 포함해서요. 🎨 Target colours에서 직접 지정한 색은 여전히 우선하며, 그중 하나가 어떤 항원이 이미 쓰던 색조를 차지하면 그 항원만 비어 있는 다른 색 계열로 옮겨갑니다. 항원을 다시 Auto로 돌리면 이전에 쓰던 색조로 돌아갑니다.
  • 색이 6가지 내장 색 계열 중 하나인 Fv는 이제 산술적으로 밝게 만든 색이 아니라 그 계열 고유의 밝은(VL) 색조를 그대로 유지합니다 — 그래서 자동 색조와 Target colours의 해당 프리셋이 동일하게 그려집니다.

Fixed

  • A collapsed History folder springs back open. Collapsing one project and then using another re-expanded the first. _refresh_history rebuilds the tree from scratch and re-inserted every project open — and nearly everything rebuilds it (drawing a map, renaming, adding an antibody), so any collapsed folder was undone by the next action. _sync_selection did the same through see(), which opens a row's ancestors to bring it into view, re-expanding the project holding the active antibody.
  • The open/closed state now lives in App._collapsed rather than in the tree widget, so it also survives a theme switch (which destroys and rebuilds the window) and is written to state.json on quit — the panel comes back the way you left it after a restart.

수정

  • 접었던 History 폴더가 다시 펼쳐지던 문제. 한 프로젝트를 접은 뒤 다른 프로젝트를 쓰면 접었던 프로젝트가 다시 펼쳐졌습니다. _refresh_history가 트리를 처음부터 다시 만들면서 모든 프로젝트를 펼친 상태로 다시 삽입했는데, 지도를 그리거나 이름을 바꾸거나 항체를 추가하는 등 거의 모든 동작이 트리를 다시 만들었기 때문에 접어 둔 폴더는 다음 동작에서 곧바로 원상 복구되었습니다. _sync_selectionsee()를 통해 같은 일을 했는데, 이 함수는 어떤 행을 화면에 보이게 하기 위해 그 조상 항목들을 펼쳐, 활성 항체가 속한 프로젝트를 다시 펼쳤습니다.
  • 펼침/접힘 상태는 이제 트리 위젯이 아니라 App._collapsed에 저장되어, 창을 파괴하고 다시 만드는 테마 전환에도 살아남고, 종료 시 state.json에 기록됩니다 — 재시작 후에도 패널이 나갈 때 모습 그대로 돌아옵니다.

Notes

  • History gains a per-project auto_target_colors map, and state.json a collapsed_projects list. Both are additive: existing files load unchanged (the keys are filled in on read) and SCHEMA_VERSION stays at 2.
  • New tests/test_target_colors.py (20 checks) covers the hue bookkeeping, the colour staying put across two antibodies whose binding sites are in opposite order, and the name reaching the saved file. New tests/test_history_tree.py (19 checks) drives the folder states, the theme switch and a relaunch. out/save_full.png, out/save_map_only.png and out/save_target_colours.png are sample exports.

참고

  • History에 프로젝트별 auto_target_colors 맵이 추가되고, state.json에는 collapsed_projects 목록이 추가됩니다. 둘 다 애디티브 방식이라 기존 파일은 그대로 읽히며(읽을 때 키가 채워짐) SCHEMA_VERSION은 2로 유지됩니다.
  • tests/test_target_colors.py(20개 확인 항목)는 색조 관리, 결합 부위 순서가 서로 반대인 두 항체에서도 색이 유지되는지, 이름이 저장 파일까지 반영되는지를 다룹니다. 새 tests/test_history_tree.py (19개 확인 항목)는 폴더 펼침/접힘 상태, 테마 전환, 재실행을 검증합니다. out/save_full.png, out/save_map_only.png, out/save_target_colours.png는 샘플 내보내기 파일입니다.

[1.08] — 2026-07-28

Chains panel scrolls from anywhere

  • The mouse wheel now scrolls the chain list from any part of a card — the Code / Targets row, the labels, the entries, the ✕ button. Previously only the card's ~10px side margins answered the wheel, because Tk sends a wheel event to the widget under the pointer and never up to its parent.
  • Over the sequence box the wheel still scrolls the sequence itself; once that box is already at its top or bottom, the wheel moves the card list on instead of stopping there.

Chains 패널이 어디서든 스크롤됨

  • 이제 마우스 휠로 카드의 어느 부분에서든 chain 목록을 스크롤할 수 있습니다 — Code/Targets 줄, 라벨, 입력칸, ✕ 버튼 어디든요. 이전에는 카드 양옆의 약 10px 여백만 휠에 반응했는데, Tk가 휠 이벤트를 커서 아래 위젯에만 보내고 부모 위젯으로는 올려보내지 않았기 때문입니다.
  • 서열 입력칸 위에서는 여전히 휠이 서열 내용 자체를 스크롤하며, 그 칸이 이미 맨 위나 맨 아래에 도달했을 때는 거기서 멈추지 않고 카드 목록이 이어서 스크롤됩니다.

Knob-into-hole always draws knob-left

  • A KiH Fc is now always drawn knob on the left, hole on the right — the way KiH designs are conventionally drawn — no matter which heavy chain you entered first. Previously the arms followed the input order, so entering the hole chain first put the knob on the right.
  • The whole arm moves with its chain (its Fab / scFv, antigen labels, disulfides and linkers), and light chains still pair with the heavy chain they were entered alongside. The sequence panel keeps the order you entered.
  • Nothing changes for a plain IgG, for a KiH entered knob-first, or for an Fc that is not a knob/hole pair.

Knob-into-hole은 항상 knob을 왼쪽에 그림

  • KiH Fc는 이제 어떤 중쇄를 먼저 입력했든 관계없이 항상 knob이 왼쪽, hole이 오른쪽에 그려집니다 — KiH 설계를 관례적으로 그리는 방식입니다. 이전에는 arm이 입력 순서를 그대로 따라, hole 사슬을 먼저 입력하면 knob이 오른쪽에 그려졌습니다.
  • arm 전체(그 Fab/scFv, 항원 라벨, 이황화 결합, 링커 포함)가 사슬과 함께 움직이며, 경쇄는 여전히 함께 입력된 중쇄와 짝을 이룹니다. 서열 패널은 입력한 순서를 그대로 유지합니다.
  • 일반 IgG, knob을 먼저 입력한 KiH, 또는 knob/hole 쌍이 아닌 Fc의 경우는 아무것도 바뀌지 않습니다.

scFv orientation on the map

  • An scFv binding site's antigen label gains a second line giving its variable-domain order in N→C direction — (VL-VH) or (VH-VL) — so a single-chain arm's orientation is readable off the map. Fab, scFab and single-domain sites are unchanged (they carry no orientation note).

지도 위 scFv 방향 표시

  • scFv 결합 부위의 항원 라벨에 N→C 방향 가변 도메인 순서를 나타내는 둘째 줄 — (VL-VH) 또는 (VH-VL) — 이 추가되어, single-chain arm의 방향을 지도만 보고도 알 수 있습니다. Fab, scFab, 단일 도메인 부위는 바뀌지 않습니다(방향 표기가 붙지 않습니다).

Chains panel

  • Each chain card shows its #N position next to the Code field, renumbered as cards are added or removed — so a chain stays identifiable while scrolling a long input list.

Chains 패널

  • 각 chain 카드가 Code 필드 옆에 #N 위치 번호를 표시하며, 카드가 추가되거나 삭제될 때마다 다시 번호가 매겨집니다 — 긴 입력 목록을 스크롤하는 동안에도 어느 사슬인지 알아볼 수 있습니다.

[1.07] — 2026-07-23

Colour themes

  • Pick a colour theme (🎨 Theme, top-right of the toolbar): five palettes — Neutral blue (default), Warm indigo, Teal, Cool slate, and Graphite (dark). The whole app repaints at once and the choice is remembered across restarts. The structure map and sequence panel keep their own colours, so PNG/SVG exports look the same under every theme.
  • Fresh flat styling throughout — the app now uses the clam ttk theme with a single accent, hairline borders, roomier padding, a proper UI font (Segoe UI / Malgun Gothic where available), and a real ✓ checkbox indicator.

색상 테마

  • 색상 테마를 고를 수 있습니다(툴바 오른쪽 위의 🎨 Theme): 다섯 가지 팔레트 — Neutral blue(기본값), Warm indigo, Teal, Cool slate, Graphite(다크). 앱 전체가 한 번에 다시 칠해지며 선택은 재시작 후에도 유지됩니다. 구조 지도와 서열 패널은 자신만의 색을 그대로 유지하므로, 어떤 테마에서도 PNG/SVG 내보내기는 동일하게 보입니다.
  • 전반적으로 새로운 플랫 스타일을 적용했습니다 — 이제 앱은 단일 강조색, 얇은 테두리, 더 넉넉한 여백, 제대로 된 UI 글꼴(가능한 경우 Segoe UI/맑은 고딕), 실제 ✓ 표시가 있는 체크박스를 갖춘 clam ttk 테마를 사용합니다.

Save maps: choose what to include

  • The 💾 Save maps… dialog gains an Include section: a preset — Everything, Structure map only, or Sequences only — over six detail toggles (domain labels, Anti-… target labels, Fc status text, legend box, sequence colour bars, mutation highlights). Toggles not relevant to the chosen preset are disabled.
  • Structure map only exports are saved on a transparent background (PNG and SVG), so the map drops straight onto a slide.
  • Filenames now record the content: project_antibody_content, where content is full / map / seq plus a no-… piece for any detail switched off (e.g. …_map_no-legend). Saving again never overwrites — a name that already exists in the folder gets _2, _3, …

지도 저장: 포함 내용 선택

  • 💾 Save maps… 대화 창에 Include 항목이 추가됩니다: 프리셋 — Everything, Structure map only, Sequences only — 아래에 여섯 개의 세부 토글(도메인 라벨, Anti-… 타겟 라벨, Fc 상태 텍스트, 범례 박스, 서열 색 트랙, 변이 하이라이트)이 놓입니다. 선택한 프리셋과 무관한 토글은 비활성화됩니다.
  • Structure map only로 내보내면 투명 배경(PNG, SVG 모두)으로 저장되어 지도를 슬라이드에 바로 얹을 수 있습니다.
  • 파일명이 이제 내용을 담습니다: project_antibody_content 형태이며, contentfull/map/seq에 꺼진 세부 항목마다 no-… 조각이 붙습니다(예: …_map_no-legend). 다시 저장해도 절대 덮어쓰지 않으며, 폴더에 이미 있는 이름이면 _2, _3, … 이 붙습니다.

Fixed

  • Batch export no longer silently overwrites a file saved earlier with different options; existing files in the target folder are detected and the new file is numbered instead.

수정

  • 일괄 내보내기(batch export)가 더 이상 다른 옵션으로 이전에 저장한 파일을 조용히 덮어쓰지 않습니다. 대상 폴더의 기존 파일을 감지해, 대신 새 파일에 번호를 붙입니다.

[1.06] — 2026-07-22

Target colours

  • Assign a colour per antigen (🎨 Target colours, above the map): the antigen's VH oval and its Anti-… label take the chosen shade, its paired VL a lighter shade of the same hue, and the sequence-panel domain bars follow. Pick from 12 presets or any custom colour.
  • The assignment belongs to the project, so every antibody added under it is drawn with the same target colours — including batch Save maps… exports. Duplicating a project copies its colours.
  • Antigens left on Auto keep the automatic per-clone hue, but skip any family already assigned to another target, so two targets never share a colour.

타겟 색상

  • 항원마다 색을 지정할 수 있습니다(지도 위의 🎨 Target colours): 해당 항원의 VH 타원과 Anti-… 라벨이 지정한 색을 따르고, 짝을 이루는 VL은 같은 색조의 더 밝은 색을, 서열 패널의 도메인 바도 함께 따라갑니다. 12가지 프리셋 또는 원하는 임의의 색 중에서 고를 수 있습니다.
  • 이 지정은 프로젝트 단위로 적용되어, 그 아래 추가되는 모든 항체가 같은 타겟 색으로 그려집니다 — 일괄 Save maps… 내보내기도 포함됩니다. 프로젝트를 복제하면 색도 함께 복사됩니다.
  • Auto로 둔 항원은 클론별 자동 색조를 유지하되, 이미 다른 타겟에 지정된 색 계열은 건너뛰어 두 타겟이 같은 색을 쓰지 않도록 합니다.

[1.05] — 2026-07-16

Tandem-Fab (BiXAB) support

  • New architecture: a tandem-Fab heavy chain — two Fab modules in series on one chain before the Fc (VH-CH1-linker-VH-CH1-Hinge-CH2-CH3), e.g. the Va7.2 × CD19 BiXAB. The map draws both Fabs stacked along each arm (the N-terminal Fab at the tip, the C-terminal Fab next to the hinge), each paired with its cognate light chain matched by antigen target.
  • Non-canonical kappa J now recognised: a light chain whose J region carries E/Q at the conserved Kabat-103 position (e.g. FGGGTELEIK) is detected as a VL instead of falling to unknown.
  • The cysteine-free connector joining the two Fabs (a hinge-derived linker whose CPPC cysteines are mutated away) is drawn as a linker, not a disulfide hinge, and drops out of the structural architecture.

Tandem-Fab(BiXAB) 지원

  • 새로운 구조: tandem-Fab 중쇄 — Fc 앞에 한 사슬 위에 Fab 모듈 두 개가 직렬로 이어진 형태(VH-CH1-linker-VH-CH1-Hinge-CH2-CH3), 예를 들면 Va7.2 × CD19 BiXAB. 지도는 각 arm을 따라 두 Fab을 겹쳐 그립니다(N말단 Fab은 끝에, C말단 Fab은 힌지 쪽에), 각각 항원 타겟으로 매칭된 짝이 되는 경쇄와 짝지어집니다.
  • 비정형 kappa J도 이제 인식됩니다: J 영역의 보존된 Kabat-103 위치에 E/Q를 가진 경쇄(예: FGGGTELEIK)는 unknown으로 빠지지 않고 VL로 검출됩니다.
  • 두 Fab을 잇는 시스테인이 없는 연결부(CPPC 시스테인이 변이로 제거된, 힌지에서 유래한 링커)는 이황화 힌지가 아니라 링커로 그려지며, 구조 아키텍처에서 제외됩니다.

[1.04] — 2026-07-16

History: multi-select, shortcuts, project duplication

  • Multi-select in the history tree: Ctrl/Shift-click to pick several projects and/or antibodies at once, then 💾 Save maps… (or right-click → Save selected maps…) exports them all together — a selected project contributes all of its antibodies. Building a multi-selection no longer reloads the map; single-click still opens an antibody as before.
  • Keyboard shortcuts on the selected row: F2 = rename, Del = delete (with confirmation), Ctrl+D = duplicate.
  • Duplicate a whole project (Ctrl+D on a project, or right-click → Duplicate): deep-copies the project and every antibody under it, with fresh IDs, placed just below the original.

History: 다중 선택, 단축키, 프로젝트 복제

  • History 트리에서 다중 선택: Ctrl/Shift+클릭으로 여러 프로젝트와/또는 항체를 한 번에 고른 뒤 💾 Save maps…(또는 우클릭 → Save selected maps…)로 한꺼번에 내보낼 수 있습니다 — 선택된 프로젝트는 그 안의 모든 항체를 포함합니다. 다중 선택을 구성하는 동안에는 지도가 다시 로드되지 않으며, 단일 클릭은 이전처럼 항체를 바로 엽니다.
  • 선택된 행에 대한 키보드 단축키: F2 = 이름 변경, Del = 삭제(확인 창 포함), Ctrl+D = 복제.
  • 프로젝트 전체 복제(프로젝트에서 Ctrl+D, 또는 우클릭 → Duplicate): 프로젝트와 그 아래 모든 항체를 새 ID로 깊이 복사해 원본 바로 아래에 놓습니다.

Structure map

  • Fc effector-status tag to the right of the Fc: wild type (grey) when the Fc carries no effector mutation, or the specific Fc-null mutations in EU order (e.g. L234A, L235A, N297A, red) — LALA, N297x, P329x, GRLR, FES, etc.

구조 지도

  • Fc 오른쪽에 Fc effector 상태 태그가 표시됩니다: Fc에 effector 변이가 없으면 wild type(회색)으로, 있으면 EU 넘버링 순서로 구체적인 Fc-null 변이(예: L234A, L235A, N297A, 빨간색) — LALA, N297x, P329x, GRLR, FES 등을 표시합니다.

Layout & inputs

  • History + Structure map together now span the same width as the Chains column (Chains takes half the window); History keeps its width and the map absorbs the change. The split holds on resize.
  • Sequences panel reflows its residues-per-line to fill the panel width (no right-side whitespace). PNG/SVG exports stay at the fixed 50 per line.
  • Chain sequence input boxes are shorter (2 rows) at full card width.
  • Generate map ▶ moved from the toolbar into the Chains action row, equal width beside + Add chain and Reset.
  • Removed the redundant PNG / SVG / Fit buttons under the map — save via the history Save maps…, fit by double-clicking the map. That freed strip is now part of the status log.

화면 레이아웃 및 입력

  • History + 구조 지도를 합친 너비가 이제 Chains 열과 같은 너비를 차지합니다(Chains가 창의 절반을 차지). History는 자기 너비를 유지하고 지도가 나머지 변화를 흡수합니다. 이 비율은 창 크기를 조절해도 유지됩니다.
  • Sequences 패널이 패널 너비에 맞춰 줄당 잔기 수를 다시 계산합니다(오른쪽 여백 없음). PNG/SVG 내보내기는 여전히 줄당 50자로 고정됩니다.
  • chain 서열 입력 칸이 카드 전체 너비에서 더 짧아졌습니다(2줄).
  • Generate map ▶가 툴바에서 Chains 액션 줄로 옮겨져 + Add chain, Reset과 같은 너비로 나란히 놓입니다.
  • 지도 아래의 불필요했던 PNG / SVG / Fit 버튼을 제거했습니다 — 저장은 history의 Save maps…로, 맞춤은 지도를 더블클릭해서 합니다. 비워진 공간은 이제 상태 로그의 일부가 되었습니다.

[1.03] — 2026-07-16

History: Projects → Antibodies

  • The history panel is now a two-level Project → Antibody hierarchy (replacing the flat entry + category model). Create a project (+ Project), then add antibodies under it (+ Antibody); a new antibody is named after its first chain code when you Generate. A blank project name auto-numbers (Project N).
  • Right-click a project → Rename / Add antibody / Save maps… / Delete. Right-click an antibody → Rename / Duplicate / Move to (another project) / Save map… / Delete. Deletes ask for confirmation.
  • The active project and antibody are shown bold with a tinted background; each antibody row shows its target, each project an antibody count.
  • List order is stable (creation order, no bubbling); the last-open antibody is restored on launch (recorded in state.json). The window opens maximized so it fits above the taskbar.

History: Project → Antibody 구조로 개편

  • History 패널이 이제 (평면적인 항목+카테고리 방식을 대체하는) 2단계 Project → Antibody 구조가 되었습니다. 프로젝트를 만들고(+ Project) 그 아래 항체를 추가합니다(+ Antibody); Generate를 실행하면 새 항체는 첫 번째 chain 코드를 따서 이름이 붙습니다. 프로젝트 이름을 비워두면 자동으로 번호가 매겨집니다 (Project N).
  • 프로젝트 우클릭 → Rename / Add antibody / Save maps… / Delete. 항체 우클릭 → Rename / Duplicate / Move to(다른 프로젝트로 이동) / Save map… / Delete. 삭제는 확인을 거칩니다.
  • 활성 프로젝트와 항체는 굵게, 색이 들어간 배경으로 표시되며, 각 항체 행에는 타겟이, 각 프로젝트에는 항체 개수가 표시됩니다.
  • 목록 순서는 안정적으로 유지되며(생성 순서, 자동으로 위로 올라가지 않음), 마지막에 열려 있던 항체가 실행 시 복원됩니다 (state.json에 기록). 창은 작업 표시줄 위에 맞도록 최대화된 상태로 열립니다.

Batch export

  • Save maps… (history-panel button, or right-click a project/antibody): pick any projects and/or individual antibodies and export every map to PNG and/or SVG into a chosen folder in one go.

일괄 내보내기(Batch export)

  • Save maps…(History 패널 버튼, 또는 프로젝트/항체 우클릭): 원하는 프로젝트와/또는 개별 항체를 골라 모든 지도를 PNG 및/또는 SVG로 한 번에 원하는 폴더에 내보냅니다.

Fixed / added (folds in the unreleased 1.02.1)

  • Update install could fail while closing the running app. The installer now force-closes the running instance in PrepareToInstall (Restart Manager's interactive close is disabled), and the app quits itself right after launching the installer, so absmap.exe is never locked during the update. The post-install launch runs as the original (non-elevated) user (runasoriginaluser).
  • "What's new" popup on the first run after an update, and the 🆕 What's new toolbar button.

수정/추가 (미출시 1.02.1 통합)

  • 실행 중인 앱을 닫는 과정에서 업데이트 설치가 실패할 수 있던 문제. 이제 installer가 PrepareToInstall에서 실행 중인 인스턴스를 강제로 종료하며(Restart Manager의 대화형 종료는 비활성화됨), 앱도 installer를 실행한 직후 스스로 종료되어, 업데이트 동안 absmap.exe 가 잠기는 일이 없습니다. 설치 후 실행은 원래 사용자 권한(권한 상승 없이, runasoriginaluser)으로 이루어집니다.
  • 업데이트 후 첫 실행 시 뜨는 "What's new" 팝업🆕 What's new 툴바 버튼.

[1.02] — 2026-07-15

History panel & categorization

  • Left-hand history (feedback N7): the app now keeps a persistent, named list of maps. Each entry is a document — the chains you typed plus a free-text category — created first (+ New entry), then drawn. Click an entry to reopen its inputs and map; rename/recategorize or delete from the panel. Entries are grouped by category and survive app restarts.
  • Inputs (including sequences) are stored locally only, under the per-user app-data dir (%APPDATA%\absmap\history.json on Windows), and are never sent anywhere — the hub client does not read this file.

History 패널 및 분류

  • 좌측 히스토리(피드백 N7): 이제 앱이 이름이 붙은 지도 목록을 영구적으로 유지합니다. 각 항목은 하나의 문서로, 입력한 chain들과 자유 텍스트 카테고리로 구성되며, 먼저 만들고(+ New entry) 나중에 그립니다. 항목을 클릭하면 그 입력값과 지도가 다시 열립니다; 패널에서 이름 변경/카테고리 변경 또는 삭제가 가능합니다. 항목은 카테고리별로 묶이며 앱을 재시작해도 유지됩니다.
  • 서열을 포함한 입력값은 로컬에만 저장됩니다 — 사용자별 앱 데이터 폴더(Windows에서는 %APPDATA%\absmap\history.json) 아래이며, 어디로도 전송되지 않습니다 — hub 클라이언트도 이 파일을 읽지 않습니다.

Language

  • The GUI is now fully English (toolbar, panels, the How-to-use guide, the feedback dialog and its categories, update prompts, and all messages).

언어

  • GUI가 이제 전부 영어입니다(툴바, 패널, How-to-use 가이드, 피드백 대화 창과 그 카테고리, 업데이트 안내, 모든 메시지 포함).

[1.01] — 2026-07-14

Feedback & updates

  • In-app feedback (💬 button): pick a category, describe the issue, and optionally attach the current map — rendered without the sequence panel, so no amino-acid sequence ever leaves the machine. Falls back to a pre-filled email if the hub is unreachable.
  • Update check on startup: a non-blocking banner appears when a newer build is available; the app downloads the signed installer directly (sha256-verified) and you install it — no silent auto-update.

피드백 및 업데이트

  • 앱 내 피드백(💬 버튼): 카테고리를 고르고 문제를 설명한 뒤, 원하면 현재 지도를 첨부할 수 있습니다 — 서열 패널을 상태로 렌더링되므로 아미노산 서열이 기기 밖으로 나가는 일은 없습니다. hub에 접속할 수 없으면 미리 채워진 이메일로 대체됩니다.
  • 시작 시 업데이트 확인: 더 새로운 버전이 있으면 방해되지 않는 배너가 나타나며, 앱이 서명된 installer를 직접 다운로드해 (sha256로 검증) 사용자가 직접 설치합니다 — 조용한 자동 업데이트는 없습니다.

[1.00] — 2026-07-09

First release.

Prediction engine

  • Domain architecture predicted from amino-acid sequence alone — no alignment tools or third-party dependencies (pure standard library).
  • Variable domains (VH/VL) found via conserved J-segment motifs; constant regions (CH1/CH2/CH3/CL) located by ungapped scan against wild-type human IgG1/kappa references, which also extracts point mutations.
  • Automatic detection of scFv grouping, chain pairing, hinges and linkers.
  • Engineering features recognised: knob-into-hole (KiH), Fc-null variants (LALA, N297A, and related), disulfide-stabilised scFv, single-chain Fab (scFab), CrossMab/CH3-crossover, C-terminal appended domains, Fc-only (one-armed) partners, and the P-O-T (obscurin/titin) light-chain-pairing scaffold.

예측 엔진

  • 아미노산 서열만으로 도메인 구조를 예측합니다 — 정렬(alignment) 도구나 외부 의존성 없이(순수 표준 라이브러리만 사용).
  • 가변 도메인(VH/VL)은 보존된 J-segment 모티프로 찾고, constant 영역(CH1/CH2/CH3/CL)은 야생형 사람 IgG1/kappa 참조 서열과의 갭 없는 스캔으로 위치를 찾으며, 이 과정에서 점 변이(point mutation)도 함께 추출됩니다.
  • scFv 그룹화, 사슬 짝짓기, 힌지, 링커를 자동으로 검출합니다.
  • 엔지니어링 특징 인식: knob-into-hole(KiH), Fc-null 변이(LALA, N297A 및 관련 변이), 이황화 결합으로 안정화된 scFv, single-chain Fab(scFab), CrossMab/CH3-crossover, C말단 부가 도메인, Fc만 있는 (one-armed) 파트너, P-O-T(obscurin/titin) 경쇄 짝짓기 스캐폴드.

Structure map

  • 2D cartoon in the BIOINTRON construct-diagram style; each binding site (Fv) gets its own colour family (VH dark / VL light).
  • Per-Fv antigen labels (Anti-…) from user-supplied targets.
  • Sequence panel under the map: per-chain sequence with coloured domain tracks and background highlights for engineering mutations.
  • Legend box keying the disulfide / hinge / linker connectors.
  • Export to SVG (vector) and PNG.

구조 지도

  • BIOINTRON 구조체 다이어그램 스타일의 2D 카툰; 각 결합 부위(Fv)는 자신만의 색 계열을 가집니다(VH는 진하게, VL은 밝게).
  • 사용자가 입력한 타겟으로부터 Fv별 항원 라벨(Anti-…)을 표시합니다.
  • 지도 아래 서열 패널: 사슬별 서열에 색이 입혀진 도메인 트랙과 엔지니어링 변이에 대한 배경 하이라이트가 함께 표시됩니다.
  • 이황화 결합/힌지/링커 연결선을 설명하는 범례 박스.
  • SVG(벡터)와 PNG로 내보내기.

Desktop app (GUI)

  • Chain-card input (Code · Targets N→C · Sequence) — no hand-written FASTA.
  • Full-height map pane with mouse-wheel zoom (0.5×–12×) and drag-to-pan; double-click / Fit resets the view.
  • Load example fills in trastuzumab (anti-HER2 IgG1), a public construct.

데스크톱 앱(GUI)

  • Chain 카드 입력 방식(Code · Targets N→C · Sequence) — FASTA를 직접 작성할 필요가 없습니다.
  • 마우스 휠 확대/축소(0.5×–12×)와 드래그 팬을 지원하는 전체 높이 지도 창; 더블클릭/Fit으로 보기를 초기화합니다.
  • Load example은 공개된 구조체인 trastuzumab(anti-HER2 IgG1)을 채워 넣습니다.

Packaging

  • Standalone Windows executable (absmap.exe, no Python needed on the target PC) built via a local Wine cross-build.
  • Inno Setup installer (absmap-setup.exe) with Start-menu / desktop shortcuts and an uninstaller.
  • Application icon and internal-use license bundled.

패키징

  • 로컬 Wine 크로스 빌드로 만든 독립 실행형 Windows 실행 파일 (absmap.exe, 대상 PC에 Python이 필요 없음).
  • 시작 메뉴/바탕화면 바로가기와 제거 프로그램을 포함한 Inno Setup installer(absmap-setup.exe).
  • 애플리케이션 아이콘과 사내 전용 라이선스 포함.

Verification

  • 42/42 reference chains match the documented architecture (python tests/verify_phase1.py).

검증

  • 참조 사슬 42개 전부가 문서화된 구조와 일치합니다 (python tests/verify_phase1.py).