본문으로 건너뛰기

연구

기법

통제군과 증거 등급으로 수행한 결함 감사

녹색 기준선 위에서 버그 조건과 정상 조건을 쌍으로 실행하고, UI·로직·연역·라이브 포렌식의 증거 등급을 붙였습니다. 감사 스냅샷에는 재현 결함 14개가 열거돼 있지만 45개 전체 후보 원장과 개별 반증 로그는 보존되지 않아, 45→14를 완전 재현 가능한 funnel로 주장하지 않습니다.

감사 스냅샷에 개별 열거 · 45개 전체 후보 원장은 미보존
14 findings
감사 전 기준선 · 프런트엔드 982 / 백엔드 1,010 테스트
0 failures

질문: 파일·그래프 생명주기와 편집 UI의 결함 후보를, 의심 목록이 아니라 반증 가능한 증거로 어떻게 좁힐 것인가?

관찰: 녹색 기준선 위에서 버그 조건과 통제 조건을 쌍으로 실행해 후보 45개 중 결함 14개를 남겼지만, 탈락한 31개 전체의 판정 원장은 보존되지 않았다.

결정: 14개를 2026-07-31 시점의 증거 등급·심각도·재현물과 함께 공개하고, 현재 미해결 목록이나 14명의 인간 검토로 과장하지 않는다.

녹색 기준선, 버그와 통제 조건, 네 증거 등급을 거쳐 14개 결함을 남긴 감사 구조

45→14는 성과 퍼널이 아니라 증거 보존 범위를 드러내는 감사 장부다.

1. 결함으로 인정하는 규칙부터 고정했다

감사 기준 커밋은 96aaf8e6, 실행 기록 커밋은 523dd576이다. 시작 시점의 프런트엔드 85개 파일·982개 테스트와 Rust 백엔드 1,010개 테스트는 모두 실패 0건이었다. 이 녹색 기준선 위에서 새로 실패하는 단언만 결함 증거로 취급했다.

각 후보는 최소한 두 조건을 가져야 했다. 버그 조건은 문제가 나타나는 입력이나 상태를, 통제 조건은 같은 코드가 정상적으로 동작하는 인접 조건을 실행한다. 둘을 함께 두지 않으면 설계된 동작, 잘못 옮긴 테스트 코드, 환경 고유 현상을 제품 결함과 구별할 수 없다. 감사가 세는 분석 단위는 사용자 세션이나 발생 빈도가 아니라 독립된 결함 주장이다.

기준선 스위트 n · 단위 · 조건 결과
프런트엔드 테스트 982개 · 파일 85개 · 감사 시작 체크아웃 실패 0
Rust 백엔드 테스트 1,010개 · cargo test --lib · 감사 시작 체크아웃 실패 0

2. 결론마다 증거가 어디까지 실행됐는지 표시했다

등급 증거가 실행한 것 말할 수 없는 것
T1 · 실행 UI 실제 App.tsx를 Chromium에서 구동하고 사용자 동작 재현 다른 OS·장기 사용 빈도
T2 · 실행 로직 출하 함수 직접 호출 또는 비공개 로직을 원본과 대조해 축자 실행 이식 코드 밖의 통합 효과
T3 · 연역 추적 호출 그래프 전수와 가드가 있는 형제 경로를 대조 런타임 발생 빈도
F · 라이브 포렌식 한 실제 설치본의 1.2 GB DB와 볼트를 읽기 전용 측정 다른 사용자·설치본으로의 일반화

등급은 심각도와 다르다. T3로 확인한 고위험 경로가 T1로 본 저위험 UI 결함보다 증거가 약하다는 뜻도, 반대도 아니다. 하나는 “어떻게 확인했는가”, 다른 하나는 “발생하면 얼마나 해로운가”를 기록한다.

3. 45→14에서 실제로 보존된 증거

1차 기록은 후보 45개를 트리아지하고 실험·반증 검토 뒤 14개를 남겼다고 보고한다. 보존된 것은 아래 14개 결함의 ID, 감사 당시 심각도, 증거 등급, 재현 설명과 주요 기각 사례다. 보존되지 않은 것은 45개 전체 후보 명세, 탈락한 31개 각각의 판정과 리뷰어별 원시 로그다. 따라서 “31개가 모두 독립 실험으로 반증됐다”거나 “14명의 사람이 각각 하나를 검토했다”고 말할 근거는 없다.

ID 2026-07-31 심각도 증거 보존된 결함 주장
C1 critical T1 부분 파일 목록을 삭제로 해석해 더티 탭을 가드 없이 닫음
C2 high T1 + T2 폴더 작업이 열린 탭을 정확 경로로만 매칭
C3 high T2 경로 변경 캐스케이드 호출처가 한 곳뿐
C4 high T2 같은 폴더의 잘라내기→붙여넣기가 파일명을 바꿈
M1 medium T2 대소문자만 바꾸는 이름 변경 실패
M2 medium T2 그래프 rekey가 목적지를 지우지 않아 두 문서를 병합
M3 medium T2 볼트 폴더 이동 시 사용자 판정이 유실·덮어쓰기됨
M4 medium T2 이식 이름이 바뀐 파일을 되감기가 옛 경로에 되살림
M5 medium T1 + vitest 표 위젯 write-back이 원문을 손실
M6 medium F, partial 워크스페이스 전환이 그래프 스토어 캐시를 파괴
M7 medium T3 종료 직후 추출이 graph.nq를 덮어쓸 수 있음
L1 low F + T2 삭제된 노트의 알림 행이 남음
L2 low vitest 프런트매터의 세로줄 문자가 표로 렌더돼 파괴적으로 편집됨
L3 low vitest 표 셀 선택 범위가 드리프트함

심각도는 최초 후보의 등급이 아니라 반증 검토 후 2026-07-31에 기록된 등급이다. 예를 들어 C3와 M3는 최초 critical에서 각각 high와 medium으로 내려갔다. 이것이 반증 단계의 실질적 산출물이다.

4. 실행물은 단언 방향까지 함께 읽어야 한다

감사 기록 시점의 산출물은 Rust 프로브 11개, 프런트엔드 단언 10건, e2e 스펙 2종, C1용 영구 회귀 스펙 6조건으로 보고됐다. 그러나 이 숫자는 현재 파일의 함수 개수가 아니라 523dd576에 고정된 역사적 인벤토리다.

산출물 감사 당시 단언 결함 존재 시 신호
src-tauri/src/audit_probe.rs 버그 동작을 직접 단언 통과
tests/unit/audit_*.test.ts 올바른 표 왕복을 단언 실패
tests/e2e/audit_*.spec.ts 항목별로 버그 또는 수정 상태를 명시 라벨과 함께 해석
tests/e2e/tabLifecycle.spec.ts 수정 후의 올바른 탭 생명주기를 단언 수정 전 6조건 실패

“테스트 통과”만으로는 의미를 알 수 없다. 버그를 단언하는 재현 프로브는 수정하면 실패해야 하고, 정답을 단언하는 회귀 테스트는 수정하면 통과해야 한다. 이 방향을 뒤집지 않은 채 프로브를 회귀 테스트로 승격하면, 고쳐진 뒤에도 녹색인 무의미한 검사가 된다.

5. 감사의 기여는 결함 수보다 반증 가능한 구조다

14개는 여섯 근본 원인으로 모였다. 경로 변경의 캐스케이드 부재, 리컨사일러의 관찰 범위와 삭제 권한 불일치, 정확 경로만 보는 탭 가드, 목적지 충돌 해소의 출발지 인식 부재, 표시용 표 정규화의 write-back 재사용, 캐시 파괴 뒤 동기화 완료로 표시하는 상태 전이가 그것이다. 이 묶음은 증상별 패치보다 공통 경계에 가드를 세울 수 있게 했다.

더 중요한 산출물은 반증된 제안도 남겼다는 점이다. 예를 들어 워크스페이스 전환이 전량 재추출을 일으킨다는 가설은 1,727/1,727 본문 해시 일치로 기각됐고, 알림이 무기한 남는다는 주장은 30일 보존·2,000행 제한으로 반증됐다. 다만 1차 기록의 재제안 금지 목록은 대표 항목만 담고 있어, 탈락한 31개 전체 장부를 복원하지는 못한다.

6. 관찰과 현재 상태를 분리한다

이 기록은 2026-07-31의 발견 과정이지 현재 백로그가 아니다. 이후 여러 결함의 구현과 테스트가 바뀌었으므로 “14개가 지금도 열려 있다”, “Rust 프로브가 현재도 11개다”, “e2e 두 건이 아직 실패한다”는 문장을 여기서 만들 수 없다. 현재 상태는 각 수정 커밋과 최신 테스트를 별도로 확인해야 한다.

또한 이 감사는 결함의 존재를 재현했지 실사용 빈도를 측정하지 않았다. 라이브 포렌식은 한 머신·한 사용자의 설치본이고, UI 실행도 당시 환경에 묶여 있다. 8월 1일 수행한 되감기 그래프 범위의 라이브 반사실 재현은 이 감사와 날짜·방법·결론이 다르므로 별도 기록으로 분리한다.

7. 재현성과 증거 경계

증거 보존된 관찰·조건 보존되지 않았거나 일반화할 수 없는 것 원본
녹색 기준선 프런트 982개/85파일, 백엔드 1,010개, 실패 0 · 96aaf8e6 기반 최신 체크아웃의 현재 테스트 수·상태 docs/details/lifecycle-usability-audit-2026-07-31.md:9-17
증거 등급 T1, T2, T3, F의 정의와 결론별 표기 등급 간 확률적 신뢰도 환산 docs/details/lifecycle-usability-audit-2026-07-31.md:19-25
14개 결함 C1–C4, M1–M7, L1–L3의 제목·심각도·증거 전체 45개 후보 원장과 탈락 31개의 개별 판정 docs/details/lifecycle-usability-audit-2026-07-31.md:60-264
반증 단계 14개 독립 반증 검토가 있었다는 1차 기록 사람 14명이라는 신원·리뷰별 로그·완전한 독립성 docs/details/lifecycle-usability-audit-2026-07-31.md:3-5
실행 산출물 감사 당시 프로브·단언·e2e·6조건 회귀 스펙 이후 수정된 현재 파일 개수와 미해결 상태 docs/details/lifecycle-usability-audit-2026-07-31.md:27-37
주요 기각 설계 의도·해시 1,727/1,727·보존 제한 등 대표 반증 탈락 31개 전체의 완전한 대응표 docs/details/lifecycle-usability-audit-2026-07-31.md:701-725

무엇을 측정한 것인가

  • Consilience

    지식그래프를 바탕으로 코딩·디자인·질의를 수행하는 범용 AI 에이전트입니다. 파견 엔지니어 없이 문서에서 온톨로지를 구축하고 관리합니다.

메시지 보내기