1.0.2 — 추정 라벨 통일, 임계값 미만 코멘트 문구
러너 분 추정 라벨을 text·markdown·json 렌더러에서 같은 문구로 통일했다. 렌더러마다 다르게 부르던 것을 하나로 맞췄다.
코멘트가 임계값 아래로 내려갔을 때의 문구를 실행 환경(Action·App)에 맞게 구분하고, 추정이 참고하는 run 이력 창을 문서에서 분명히 했다.
03 / Changelog — 12 releases
각 프로젝트가 버전마다 어디로 움직였는지 남깁니다. 무엇이 바뀌었고, 왜 바꿨는지.
러너 분 추정 라벨을 text·markdown·json 렌더러에서 같은 문구로 통일했다. 렌더러마다 다르게 부르던 것을 하나로 맞췄다.
코멘트가 임계값 아래로 내려갔을 때의 문구를 실행 환경(Action·App)에 맞게 구분하고, 추정이 참고하는 run 이력 창을 문서에서 분명히 했다.
액션의 표시 이름(name)을 "quanto workflow diff"로 바꿨다. 이름만 보고도 하는 일을 알 수 있도록.
워크플로 실행 모델 diff를 머지 전에 보여주는 첫 공개 릴리스다. matrix 전개 후 잡 수, needs 체인 길이, 최대 동시 잡 수, 권한·시크릿·서드파티 액션·트리거·스케줄 변화, 그리고 과거 run 기반 러너 분 추정을 Job Summary·주석·PR 코멘트로 보고한다. GitHub Action(composite)과 자체 호스팅 GitHub App 두 경로로 돈다.
공개 오픈소스 PR 11건에 직접 적용해 유용 4·무의미 5·오류 2에서 시작했고, 원인을 고친 뒤 오류 0, 코멘트가 달린 4건은 모두 유용으로 판정했다.
판단하지 않고 수치만 보고하며 머지를 막지 않는다. 여기서 공개 계약이 시작된다.
러너 분 추정을 GitHub 과금 단위(billable minutes)에 맞춰 표기한다. 추정이 실제 청구와 같은 방식으로 읽히도록 바꿨다.
액션에 브랜딩(아이콘·색)을 달고, release 워크플로가 안정 릴리스마다 v1 메이저 태그를 자동으로 옮기게 했다. 핀을 쓰는 사용자가 릴리스마다 태그를 손대지 않아도 되도록.
인덱스 스키마에 심볼 end_line을 기록한다. 이전에는 각 심볼의 본문을 "다음 심볼 정의 줄 직전까지"로 근사했고, 파일의 마지막 심볼은 끝까지 뻗었다. 그래서 파일 끝에 새 함수를 추가하면 기존 마지막 심볼이 변경된 것으로 오보고됐다. 이제 실제 심볼 경계로 판정한다. audit의 유일한 거짓 양성 원인이었다.
impact에 선택적 depth 파라미터를 추가했다. 미지정 시 기존 동작을 유지한다. 1.0.0 이후로는 API 표면을 늘리지 않으므로 지금 넣었다.
스키마 버전이 올라갔다. 구버전 인덱스는 corbel index로 재구축해야 하며, serve가 이를 거부하고 안내한다.
여기서 기능 개발을 마친다. 빌드가 깨지는 의존성 변경, 보안 권고, 기존 기능의 오작동에만 최선 노력으로 대응한다. 새 기능, 새 언어, 성능 개선, 정확도 개선은 범위 밖이다.
정확도는 F1 0.707, 같은 셋에서 ripgrep + ctags는 0.713이다. baseline에 미치지 못한 채로 1.0.0을 맞는다. 마지막까지 이 숫자를 그대로 둔다.
corbel audit을 추가했다. corbel serve --audit 상태에서 모든 MCP 질의를 .corbel/audit.jsonl에 기록하고(심볼명과 파일 경로만, 소스 코드는 저장하지 않으며 외부로 전송하지 않는다), git diff HEAD로 얻은 변경 심볼과 대조해 에이전트가 영향 범위를 확인하지 않고 코드를 고친 지점을 찾아낸다.
find 질의는 커버리지로 인정하지 않는다. 이름을 훑는 것은 관계를 이해한 것이 아니다. impact의 affected 목록을 받은 것 자체도 확인으로 치지 않으며, 각 심볼마다 get_symbol을 따로 불러야 한다.
resolution 필드 문서를 정정했다. scoped와 global-unique는 import를 따라가는 순차 단계가 아니라 같은 검사이며, 라벨은 호출자 파일에 해당 import가 있는지만 알려준다. 동작은 바뀌지 않았고 설명이 틀렸던 것이다.
find 도구가 추가돼 심볼 이름을 대소문자 무관 부분 문자열로 검색한다(ASCII 폴딩만 지원). get_symbol에 token_budget 파라미터가 생겨 예산을 매칭된 심볼과 그 caller/callee에 고르게 분배한다. symbols 테이블에 owner 컬럼이 추가되고, 인덱스 스키마가 v3에서 v4로 올라갔다(기존 인덱스는 corbel index로 재빌드해야 한다).
BREAKING: MCP 응답의 callers/callees name 값이 메서드에 한해 owner로 한정된 이름(Owner.method, Rust는 Owner::method)으로 바뀌었다. free function은 기존처럼 이름만 반환한다. corbel serve는 이제 인덱스를 읽기 전용으로 열고, 스키마 버전이 맞지 않으면 자동 마이그레이션 대신 에러로 재인덱싱을 요구한다.
파일 하나가 인덱싱에 실패해도 전체 인덱싱이 중단되지 않도록 고쳤고, UTF-8이 아닌 바이너리 파일이 조용히 잘못 인덱싱되던 문제와 파일 시작의 UTF-8 BOM이 파싱을 깨뜨리던 문제를 고쳤다. 서드파티 저장소 세 곳에서 수작업 검증한 120개 골든셋 기준 벤치마크 하네스를 공개했고, Windows x86_64 바이너리 배포가 추가됐다.
코드베이스를 스캔해 심볼과 임포트를 저장하고, 모든 호출을 same-file → scoped-import → global-unique → external → unresolved 순서로 해석하는 인덱싱 파이프라인을 공개했다. 저장소는 에러 타입, 저장소 상대 경로, 콘텐츠 해싱, gitignore를 따르는 파일 탐색, SQLite 기반 스토어(스키마와 마이그레이션 포함)로 구성된다.
corbel index CLI 명령이 인덱싱한 파일 수와 내부 해석률을 보고한다. Rust, Python, TypeScript, TSX, JavaScript를 하나의 LanguageSupport 인터페이스로 지원한다.
ImportKind를 문자열 대신 열거형(Direct, Reexport, Wildcard, Namespace, SideEffect)으로 바꿔, wildcard re-export가 scoped import로 잘못 인식되던 버그를 없앴다.
amdb는 Corbel의 전신이다. 1.0.0에서 공개 계약을 동결하고 마무리했으며, 여기 언급된 기능 중 다수는 Corbel에 이어지지 않았다.
새 기능 없이 공개 계약을 동결한 안정화 릴리스다. CLI 서브커맨드(init, daemon, generate, serve)와 플래그, MCP 도구 세 개(amdb_get_context, amdb_focus, amdb_get_symbol)와 그 응답 필드, amdb.toml 설정 키, 0.6 이상 인덱스의 자동 마이그레이션을 계약으로 고정했다. contract_test.rs가 이 범위가 흔들리면 실패한다.
amdb_get_symbol의 callees에 resolution 필드를 추가했다(same-file, global-unique, unresolved). 나중에 언어별 해석 전략이 늘어날 때 응답 구조를 바꾸지 않고 값만 추가하면 되도록 미리 넣었다.
레거시 스키마 마이그레이션이 symbols와 relationships만 지우고 file_hashes를 남겨, 다음 init이 모든 파일을 건너뛰고 빈 인덱스를 만드는 버그를 고쳤다. 릴리스된 버전에서는 발생할 수 없었지만 다음 스키마 상승에서 터졌을 경로였다.
자체 소스 기준 재측정: 정밀도 28/28, 전역 효율 91.5%, 노이즈 감소 81.7%, 그래프 존재율 28/28.
amdb는 Corbel의 전신이다. 1.0.0에서 공개 계약을 동결하고 마무리했으며, 여기 언급된 기능 중 다수는 Corbel에 이어지지 않았다.
Tree-sitter 파서 지원을 16개 언어로 확장했다: Rust, Python, JavaScript, TypeScript, C, C++, C#, Go, Java, Ruby, PHP, HTML, CSS, JSON, Bash. is_public 판정과 시그니처 추출 같은 AST 강화는 Rust · Python · TypeScript에 적용되고, 나머지 언어는 심볼 추출까지 지원한다.
한 코드베이스가 한 언어로만 이루어진 경우는 드물다. 백엔드 Rust 옆의 프런트엔드 TypeScript, 배포 스크립트 Bash까지 같은 인덱스에 들어가야 컨텍스트가 완성된다.
amdb는 Corbel의 전신이다. 1.0.0에서 공개 계약을 동결하고 마무리했으며, 여기 언급된 기능 중 다수는 Corbel에 이어지지 않았다.
daemon 모드가 추가됐다. 파일 변경을 실시간으로 감시해 벡터 DB를 증분 업데이트하므로, 편집할 때마다 전체 재인덱싱을 돌릴 필요가 없다. focus 모드는 exact match를 먼저 시도하고 실패할 때만 vector search로 넘어가는 하이브리드 검색이 됐다.
--depth 0/1/2로 call graph 확장 깊이를 제어할 수 있고, Docker 이미지(ghcr.io) 배포가 추가됐다.
amdb는 Corbel의 전신이다. 1.0.0에서 공개 계약을 동결하고 마무리했으며, 여기 언급된 기능 중 다수는 Corbel에 이어지지 않았다.
amdb 자기분석 벤치마크를 공개했다. Rust 모듈 30개, 11,683 raw tokens를 tiktoken cl100k_base로 측정한 결과: 컨텍스트 토큰 91.5% 절감, 핵심 파일 94.2% 압축(11~18배), 파일 검색 정밀도 96.7%, LLM API 토큰 비용 약 12배 절감.
"컨텍스트를 압축한다"는 주장을 재현 가능한 숫자로 바꾸는 것이 목적이었다. 측정 방법론은 저장소에 함께 공개했다.