Hacker News

The federated code forge

Tangled, 저장소에 이슈·PR 기록 저장하는 새 분산 구조 발표

Tangled가 웹 화면과 인덱서를 분리하고, 이슈·PR·댓글 등 협업 기록을 코드 저장소를 호스팅하는 knot에 Git 객체 형태로 저장하는 새 구조를 발표했습니다. 기록은 AT Protocol firehose로 동기화되며, 작성·수정 정보는 사용자의 PDS에 남기는 attestation으로 연결합니다. 비공개 저장소와 CLI 등은 발표 당시 향후 공개 예정이었습니다.

본문

Tangled가 10월 30일 코드 협업 서비스의 새 구조와 기능을 발표했습니다. 웹 화면을 엣지에 배포하고 Rust 기반 인덱서 bobbin을 11개가 넘는 지역에서 운영하며, 이슈와 코드 리뷰 기록은 각 저장소를 호스팅하는 knot에 함께 저장합니다. 바뀐 구조의 핵심은 협업 기록도 코드와 함께 이동하도록 만든 점입니다.

기존에는 Go 단일 서비스 appview가 AT Protocol 데이터 인덱싱과 캐시, 웹 화면 렌더링을 맡았습니다. 새 구성에서는 Svelte 프런트엔드가 엣지에서 제공되고, bobbin은 AT Protocol 데이터만 읽어 색인합니다. 저장소를 호스팅하는 knot2는 Rust로 다시 만들었으며 Git 서버와 SSH 서버를 한 프로그램에 담았습니다. Tangled는 새 배치로 API와 화면 응답이 빨라졌다고 설명했지만, 발표에는 성능 측정값이 제시되지 않았습니다.

저장 방식도 달라졌습니다. 이슈, 풀 리퀘스트(PR), 댓글, 반응, 라벨과 협력자 정보는 이제 작성자별 PDS 대신 저장소의 knot에 협업 객체(COB)로 기록됩니다. COB는 저장소 안의 Git 객체 체인이며, knot는 서명과 전체 이력을 보관하고 기록을 AT Protocol firehose로 동기화합니다. 이 구조에서는 프로젝트를 다른 곳에 호스팅하더라도 코드와 그에 딸린 협업 기록을 같은 저장소에 둘 수 있습니다.

knot가 사용자의 말을 임의로 기록하는 문제를 막기 위해 Tangled는 웹 앱이 기록을 만들거나 수정할 때 해당 기록의 정확한 버전과 COB 변경을 가리키는 attestation을 사용자의 PDS에도 쓴다고 밝혔습니다. 이는 knot의 기록과 사용자 계정에 남는 확인 정보를 연결하는 설계입니다.

새 기능으로는 자체 DID와 핸들을 가진 조직 계정, Git과 Jujutsu 사용자 모두를 위한 stacked PR 제출·검토가 포함됐습니다. Git 사용자는 PR 버전 간 차이를 비교하고, Jujutsu 사용자는 개별 변경 간 비교도 할 수 있습니다. 비공개 저장소, CLI, 언어별 SDK와 에이전트용 skills는 발표 당시 향후 몇 주 동안 순차 공개할 계획이었습니다.

자체 호스팅 운영자는 knot를 v1.20.0으로 올려야 합니다. 업그레이드 문서는 운영자 연락 이메일과 LFS 저장 경로 설정을 요구하며, 이벤트 스트림 주소도 /events에서 /xrpc/com.atproto.sync.subscribeRepos로 바꾸도록 안내합니다.

자료: Tangled / 정리·해설: Trawling

참고 자료