Visus 인수인계Visus HandoverVisus — Tài liệu bàn giao

v5 · 2026-10-20

00어디부터 읽을 것인가 · Where to start · Bắt đầu đọc từ đâu

이 문서는 처음부터 끝까지 읽으라고 만든 것이 아니다. 하려는 일에 따라 들어오는 문이 다르다.

This is not meant to be read front to back. Come in through the door that matches what you are about to do.

Tài liệu này không yêu cầu đọc từ đầu đến cuối. Hãy bắt đầu ở phần phù hợp với việc bạn sắp làm.

당신이 하려는 것what you are doingviệc bạn muốn làm읽을 것read, in this orderđọc theo thứ tự này
구조·모델·배포를 명세로 보고 싶다you want the specification: structure, models, deploymentmuốn xem đặc tả: cấu trúc, mô hình, triển khai부록 A — 최종 구조Appendix A — the final architecturePhụ lục A — kiến trúc cuối cùng — 저장소 · 프로젝트 구조 · 로직 아키텍처 · 로직별 모델의 스펙과 지표 · 로직 흐름 · 서빙. 이 문서는 경위이고 부록은 명세다 — repositories, project structure, logic architecture, the spec and metrics of each logic’s model, the flow and the serving. This document is the history; the appendix is the specification — các kho mã, cấu trúc dự án, kiến trúc xử lý, đặc tả và chỉ số mô hình của từng bước, luồng xử lý và phục vụ hệ thống. Tài liệu này trình bày quá trình phát triển; phụ lục trình bày đặc tả
처음이다 — 이게 뭔지 알고 싶다your first dayngày đầu tiếp nhận dự án
~40 min
§1.1 도메인the domainkiến thức nghiệp vụ → §1.4 세 가지 오류the three error classesba nhóm lỗi → §4.1 시스템의 모양the shape of the systemcấu trúc tổng thể của hệ thống → §4.4 한 건이 지나가는 길the path of one caseđường đi của một vụ việc → §5.1 결과what it scoreskết quả đánh giá
코드를 고치려 한다about to change codechuẩn bị sửa mã§4.4 호출과 입출력calls and payloadslời gọi và dữ liệu vào/ra → §7.4 강제되는 것과 안 되는 것what is enforced and what only looks itđiều được cưỡng chế và điều chỉ trông như vậy → §8.7 엔진의 실제 동작what the engines really docách các bộ máy thực sự hoạt động → §8.14 오류 등록부the error registersổ theo dõi lỗi. §7.4를 건너뛰지 말 것 — 없는 보호를 믿게 된다Do not skip §7.4 — you will otherwise trust a guard that is not thereĐừng bỏ qua §7.4 — nếu không, bạn sẽ tin vào một cơ chế bảo vệ không tồn tại
숫자를 인용하려 한다about to cite a numberchuẩn bị trích dẫn số liệu§0.2 자료의 순위which source winsnguồn nào được ưu tiên → §5.8 무엇이 재현되나what reproduceskết quả nào tái lập được → §8.8 측정 장치the measurement harnessbộ công cụ đo lường → §8.14 함정 목록the trapsnhững điểm dễ hiểu sai
모델·라이브러리를 고르려 한다choosing a model or a librarychọn mô hình hoặc thư viện§9.2 라이선스 규칙의 역사the licence rule and its two reversalsquy tắc giấy phép và hai lần thay đổi → §9.5 측정하고 버린 것what was tested and droppednhững gì đã thử nghiệm rồi loại bỏ → §9.6 다시 쓸 수 있는 결론the reusable conclusionscác kết luận có thể dùng lại. 이미 측정된 것을 다시 측정하지 않기 위해서다So you do not re-measure what has already been measuredĐể không đo lại những gì đã được đo
정확도를 올리려 한다trying to improve accuracymuốn nâng độ chính xác§7.3 최우선 항목the top itemmục ưu tiên cao nhất → §8.7 역할이 A로 떨어지는 경로how the role falls to Acách vai trò bị gán mặc định thành A → §3.3 표현의 빈칸the gap in the representationkhoảng trống trong cách biểu diễn → §5.6 영상만의 성적the video-only scorekết quả chỉ dựa trên video
운영·배포를 맡았다running or deploying itvận hành hoặc triển khai hệ thống§6.1 환경들the environmentscác môi trường → §6.5 문서와 코드가 어긋나는 곳where the runbooks disagree with the codenhững chỗ hướng dẫn vận hành lệch với mã → §4.5 동시성concurrencyxử lý đồng thời → §6.4 AWS 자산the AWS estatecác tài nguyên AWS. prod은 지금도 KB에 서비스 중이다Production is still serving KBMôi trường production vẫn đang phục vụ KB
CV를 맡았다 — 또는 카메라 보정을 다시 하려 한다taking over the CV — or about to retry calibrationtiếp nhận CV — hoặc chuẩn bị thử hiệu chuẩn lại§9.10 카메라를 모른다 — 세 번의 측정된 실패the camera is unknown: three measured failureskhông biết thông số camera: ba lần thất bại đã được đo → §9.9 미터는 어디서 나오는가where metric scale comes fromthang đo theo mét đến từ đâu → §8.3 지금 돌아가는 체인the chain running todaychuỗi xử lý đang chạy hiện tại → §9.6 다시 쓸 수 있는 결론the reusable conclusionscác kết luận có thể dùng lại. §9.10을 먼저 읽을 것 — 어느 정식화가 세 번 실패했고 어느 것이 끝내 풀렸는지를 알고 시작하기 위해서다read §9.10 first, to know which formulations failed three times and which one was eventually solvedđọc §9.10 trước để biết cách đặt bài toán nào đã thất bại ba lần và cách nào cuối cùng đã giải được
왜 이 스키마인가 — 사실 표현을 바꾸려 한다about to change how facts are representedchuẩn bị thay đổi cách biểu diễn các sự kiện thực tế§2.2 같은 사고가 0% · 70% · 100%가 되는 표the table where one accident becomes 0%, 70% and 100%bảng mà cùng một tai nạn cho kết quả 0%, 70% và 100% → §3.3 표현의 빈칸the hole in the representationkhoảng trống trong cách biểu diễn → §8.1 이미 설계되어 있던 사건 그래프the event graph that was already designedđồ thị sự kiện đã được thiết kế từ trước → §8.9 등급 어휘의 출처where the tier vocabulary came fromnguồn gốc hệ thuật ngữ phân tầng
VLM을 더 밀어붙이려 한다about to push the VLM harderchuẩn bị khai thác VLM sâu hơn§8.10 일곱 번 다 도표 0 — 그리고 오라클 실행chart match 0 in all seven runs, oracle includedkhớp biểu đồ bằng 0 trong cả bảy lần chạy, kể cả khi dùng dữ liệu chuẩn → §9.5 측정하고 버린 것what was tested and rejectednhững gì đã thử nghiệm và bị loại bỏ → §5.6 영상만의 성적the score from video alonekết quả chỉ dựa vào video. 당긴 레버 목록이 §8.10에 있다 — 같은 것을 다시 당기지 말 것§8.10 lists the levers already pulled; do not pull them again§8.10 liệt kê các cách đã thử; đừng lặp lại chúng
책·도표 데이터를 손보려 한다about to touch the chart datachuẩn bị sửa dữ liệu biểu đồ§8.6 인쇄면 한 장이 비율이 되기까지one printed page becoming a ratiotừ một trang in đến tỷ lệ lỗi → §8.11 독립적인 두 도출과 그 계보the two independent derivations and their lineagehai quy trình suy ra độc lập và nguồn gốc của chúng → §3.2 진단만 되고 고쳐지지 않은 게이트the gate that was diagnosed but never fixedđiều kiện kiểm tra đã được chẩn đoán nhưng chưa sửa. 🚨 §8.11의 저작권 경고를 먼저 읽을 것read the copyright note in §8.11 firstđọc lưu ý bản quyền trong §8.11 trước
「그때 무슨 일이 있었나」를 알고 싶다you want to know what was happening at the timemuốn biết chuyện gì đã xảy ra khi đótimeline.html — 세션 ↔ 커밋 타임라인. 세션 37개 · 커밋 1,925개 · 조종 입력 5,715개를 시간과 레포를 함께 써서 이어 붙인 것. 어떤 커밋이 어느 작업 세션에서 나왔고 그 직전에 무엇을 시도했는지가 보인다 — 이 문서가 구조적으로 담지 못하는 시도의 순서다the session ↔ commit timeline. 37 sessions, 1,925 commits and 5,715 steering turns, joined on repository and time together. It shows which session produced a commit and what was tried just before it — the order of attempts this document structurally cannot holddòng thời gian phiên làm việc ↔ commit. 37 phiên, 1,925 commit và 5,715 lượt chỉ dẫn, được liên kết theo cả kho mã lẫn thời gian. Nó cho biết commit xuất phát từ phiên nào và những gì được thử ngay trước đó — thứ tự các lần thử mà cấu trúc tài liệu này không thể thể hiện
데이터를 찾는다looking for datatìm dữ liệu§5.0 쓴 자료 전부 — 한 장every dataset, in one tabletoàn bộ bộ dữ liệu trong một bảng
왜 이렇게 되어 있는지 알고 싶다why is it built like thismuốn biết vì sao hệ thống được xây dựng như vậy§2.1 계보the lineagequá trình phát triển → §3.1 왜 접었는가 (A·B·C·D)why things stopped — four different reasonsvì sao các hướng dừng lại — bốn lý do khác nhau → §7.7 원장에 없는 결정들decisions that never reached a ledgercác quyết định chưa từng được ghi vào sổ → §7.5 정리되지 않은 긴장what was never resolvednhững vấn đề chưa được giải quyết
⭐ 하나만 읽는다면if you read one thingnếu chỉ đọc một phần

§0.2 자료의 순위다. 이 프로젝트는 같은 사실이 네 종류의 자료에 서로 다른 상태로 남아 있고, 순위를 모르면 끝난 일을 안 끝난 일로 읽는다. 이 문서도 그 함정에 먼저 빠졌고 그 기록이 남아 있다.

§0.2, the source precedence. The same fact survives in four kinds of record in four different states, and without the ranking you will read finished work as unfinished. This document fell into that trap first, and says so.

§0.2, thứ tự ưu tiên nguồn. Cùng một sự kiện còn được lưu trong bốn loại hồ sơ với bốn trạng thái khác nhau; nếu không biết thứ tự ưu tiên, bạn sẽ đọc nhầm công việc đã xong thành chưa xong. Chính tài liệu này từng mắc bẫy đó và có ghi nhận lại.

표시 규칙 — ✅ 코드 경로가 적혀 있고 열어서 대조할 수 있다 · 📒 원장 id로 찾는다 · 🗣 구두 어느 레포에도 없다. 🚨 는 오늘 틀어져 있는 것, ⚠️ 는 조심해서 읽을 것, ⭐ 는 다시 쓸 수 있는 것.

✅ in the code, with a path · 📒 in a ledger, by id · 🗣 in no repository at all. 🚨 marks something wrong today, ⚠️ something to read carefully, ⭐ something reusable.

✅ có trong mã, kèm đường dẫn · 📒 có trong sổ, tìm theo ID · 🗣 không có trong bất kỳ kho mã nào. 🚨 đánh dấu vấn đề hiện còn sai, ⚠️ điều cần đọc thận trọng, ⭐ nội dung có thể dùng lại.

00이 문서를 어떻게 믿을 것인가 · How to check anything here · Cách kiểm chứng mọi nội dung trong tài liệu

📌 이 문서의 범위what this document coversphạm vi của tài liệu

이 문서는 이 프로젝트를 이어받을 개발자를 위해 쓰였다. 범위는 「어떻게 동작하나」가 아니라 「어떻게 동작하고, 무엇을 시도했고, 무엇이 왜 실패했고, 어떤 자료와 논문을 봤나」 전부다 — 이미 재어 보고 접은 길을 적어 두지 않으면 같은 길을 다시 걷게 되기 때문이다. 시행착오가 부록이 아니라 본문인 이유가 이것이다.

This document is written for the developer who takes the project on. Its scope is not "how it works" but how it works, what was tried, what failed and why, and which material and papers were considered — because an approach that was measured and set aside, left unrecorded, simply gets walked again. That is why trial and error is the body of this document rather than an appendix.

Tài liệu này dành cho lập trình viên tiếp nhận dự án. Phạm vi không chỉ là "hệ thống hoạt động thế nào", mà còn gồm cách hoạt động, những gì đã thử, điều gì thất bại và vì sao, cùng các tài liệu và bài báo từng được cân nhắc — bởi một hướng đã được đo rồi gác lại, nếu không ghi chép, sẽ bị thử lại từ đầu. Vì vậy, quá trình thử và sai nằm trong phần chính, không phải phụ lục.

이 프로젝트는 모든 사실에 출처 등급을 붙인다. 이 문서도 같은 규칙을 따른다 — 그래야 어느 문장을 그대로 믿고 어느 문장을 먼저 확인해야 하는지 구분된다.

This project stamps every fact with a tier. This document does the same, so you can tell which sentences to trust and which to check first.

Dự án gắn cấp độ nguồn gốc cho từng sự kiện thực tế. Tài liệu này cũng vậy, giúp bạn biết câu nào đáng tin và câu nào cần kiểm tra trước.

표시markký hiệu뜻meansý nghĩa어떻게 확인하나how to check itcách kiểm tra
✅ 코드✅ Mã nguồn레포의 코드·문서에 있다it is in the codecó trong mã본문에 경로가 적혀 있다. 열어서 대조하면 된다the path is given — open itđã nêu đường dẫn — mở để đối chiếu
📒 원장📒 Sổ ghiDECISIONS.md · EXPERIMENTS.md · docs/results/인용된 id로 찾을 것 (V-Dn · E-V-nnn)look it up by the cited idtìm theo ID được trích dẫn
🗣 구두🗣 Xác nhận miệng어느 레포에도 없다in no repositorykhông có trong kho mã nào — 만든 사람의 증언Lời người xây dựng확인할 길이 없다.cannot be checked.không thể kiểm chứng. 중요하면 다시 물을 것ask, if it mattershãy hỏi nếu nội dung này quan trọng

🗣 표시가 붙은 문장은 코드로 뒷받침되지 않는다. 대부분 「왜 그렇게 했나」에 해당하고, 사실관계가 아니라 의도다.

🗣 Những câu có ký hiệu này không được mã nguồn hỗ trợ. Phần lớn trả lời "vì sao làm như vậy" — đó là ý định, không phải sự kiện đã kiểm chứng.

0.0⭐ 먼저 어휘 — 아무것도 모른다고 가정한다 · The vocabulary first, assuming no background · Thuật ngữ trước tiên, không giả định kiến thức nền

이 문서는 과실비율 업무도, 이 코드베이스도 처음인 사람을 상정한다. 아래 열 개를 먼저 읽으면 나머지가 전부 풀린다.

This document assumes no prior exposure either to Korean fault-ratio work or to this codebase. Ten terms, and the rest unlocks.

Tài liệu này giả định bạn chưa biết nghiệp vụ tỷ lệ lỗi của Hàn Quốc cũng như mã nguồn này. Hiểu mười thuật ngữ là có thể đọc phần còn lại.

도메인 — 이 일이 무엇인가The domain — what the job isNghiệp vụ — công việc cần giải quyết

과실비율fault ratiotỷ lệ lỗi교통사고에서 누가 몇 퍼센트 잘못했는가. 70:30처럼 쓴다. 보험금이 여기서 갈리므로 1%p가 곧 돈이다in a traffic accident, who was at fault and by how much, written like 70:30. The payout follows it, so one percentage point is moneytrong một tai nạn giao thông, ai có lỗi và mức độ bao nhiêu, biểu diễn như 70:30. Tiền bồi thường dựa vào tỷ lệ này, nên mỗi điểm phần trăm đều là tiền
도표chart (도표)biểu đồ (도표)사고 유형마다 기본 비율을 정해 둔 표. 손해보험협회가 책으로 펴낸다. 차43-2처럼 번호로 부른다 — 「차」는 차대차, 앞 숫자는 계열, 뒷 숫자는 그 안의 가지. 차대차만 108개다. 이 제품의 일은 「어느 도표인가」를 맞히는 것이다a table fixing the base ratio for one accident type, published as a book by the insurance association. Referred to by number, e.g. 차43-2 — 차 means car-to-car, the first number is the family, the second the variant. There are 108 car-to-car charts. This product’s job is to get "which chart" rightmột bảng quy định tỷ lệ cơ sở cho một loại tai nạn, do hiệp hội bảo hiểm xuất bản thành sách. Được gọi bằng mã, ví dụ 차43-2 — 차 nghĩa là ô tô với ô tô, số đầu là nhóm, số sau là biến thể. Có 108 biểu đồ ô tô với ô tô. Nhiệm vụ của sản phẩm là chọn đúng biểu đồ
고객차 · 상대차고객차 · 상대차고객차 · 상대차 (xe khách hàng · xe đối phương)고객차 = 우리 보험 가입자의 차(대시캠을 달고 있는 차), 상대차 = 상대방고객차 is our policyholder’s car — the one carrying the dashcam. 상대차 is the other party고객차 là xe của người mua bảo hiểm bên ta — xe gắn camera hành trình. 상대차 là xe của bên còn lại
A · B🚨 도표 안의 자리 이름이지 차가 아니다. 도표마다 A와 B가 무엇을 뜻하는지가 따로 정해져 있고, 고객차를 A에 놓느냐 B에 놓느냐가 비율을 뒤집는다. 차43-2에서 A는 「후행 직진차」이다. 이 한 글자가 이 문서에서 가장 비싼 오류의 정체다(§8.7)🚨 These are positions in the chart, not vehicles. Each chart defines its own A and B, and putting the 고객차 in the wrong one inverts the ratio. On 차43-2, A is "the following car going straight". This single letter is the most expensive defect in this document (§8.7)🚨 Đây là vị trí trong biểu đồ, không phải danh tính xe. Mỗi biểu đồ tự định nghĩa A và B; đặt 고객차 vào nhầm vị trí sẽ đảo ngược tỷ lệ. Trong 차43-2, A là "xe đi thẳng ở phía sau". Chỉ một chữ cái này tạo nên lỗi gây thiệt hại lớn nhất trong tài liệu (§8.7)
판단 불가 · 해당 없음판단 불가 · 해당 없음판단 불가 · 해당 없음 (không thể xác định · không áp dụng)정상적인 답이다. 「영상으로는 판단할 수 없다」·「이 사건에는 해당하지 않는다」 — 빈칸이나 실패가 아니라 시스템이 내야 하는 답이다These are valid answers, not blanks and not failures: "cannot be determined from the video" and "does not apply here". The system is required to be able to say themĐây là câu trả lời hợp lệ, không phải bỏ trống hay thất bại: "không thể xác định từ video" và "không áp dụng trong trường hợp này". Hệ thống bắt buộc phải có khả năng đưa ra chúng
가감요소modifiersyếu tố điều chỉnh기본 비율에 더하고 빼는 항목(「현저한 과실」 +10, 「중대한 과실」 +20 등). 도표를 고른 뒤의 일이고, 현업에서 실제 마찰은 여기서 생긴다items added to or subtracted from the base ratio (gross negligence +10, serious negligence +20, and so on). They come after the chart is chosen, and in practice this is where the real friction iscác mục cộng hoặc trừ vào tỷ lệ cơ sở (bất cẩn đáng kể +10, bất cẩn nghiêm trọng +20, v.v.). Chúng được xét sau khi chọn biểu đồ, và trong thực tế đây là nơi phát sinh nhiều tranh luận nhất

기계 — 세 가지 접근법과 그 이름The machinery — three approaches and their namesCơ chế — ba cách tiếp cận và tên gọi

이 계보는 같은 문제를 세 번 다르게 풀었다. 이름을 구분하지 못하면 2장과 8장이 읽히지 않는다.

This lineage solved the same problem three different ways. Chapters 2 and 8 do not parse without telling them apart.

Quá trình phát triển này đã giải cùng một bài toán bằng ba cách khác nhau. Không phân biệt chúng thì khó hiểu chương 2 và 8.

이름nametên어떻게 동작하는가how it workscách hoạt động왜 못 미치는가why it fell shorthạn chế
규칙 엔진rule enginebộ máy quy tắc
question-ledger · knia-dag
책의 분기를 조건식으로 컴파일해 둔다. 사실을 넣으면 도표가 나온다 — facts in, chart out. 가장 끝의 가지를 leaf라 부른다(예: 23개 도표 → 25 leaf)the book’s branches compiled into condition expressions. Feed it facts and a chart comes out — facts in, chart out. The terminal branch is called a leaf (e.g. 23 charts → 25 leaves)các nhánh trong sách được biên dịch thành biểu thức điều kiện. Đưa sự kiện thực tế vào để nhận biểu đồ — facts in, chart out. Nhánh tận cùng gọi là lá (ví dụ 23 biểu đồ → 25 lá)사실을 누가 채우느냐를 풀지 않는다. 검증도 자기가 자기를 채점했다 — 그것이 244/244 · 25/25 같은 수의 정체다it does not answer who fills the facts in. And it was verified against itself — which is what numbers like 244/244 and 25/25 actually arekhông trả lời câu hỏi ai điền các sự kiện đầu vào. Và nó được kiểm tra bằng chính nó — đó mới là ý nghĩa thật của các số như 244/244 và 25/25
질문 원장 · 질문 플래너question ledger · question plannersổ câu hỏi · bộ lập kế hoạch câu hỏi
question-ledger · resolve-questions
원장 = 도표를 가르는 데 필요한 질문과 허용 답을 미리 적어 둔 목록. 플래너 = 그중 지금 물어야 가장 많이 갈라지는 질문을 고르는 것. 스무고스처럼 질문을 던져 답을 받는다the ledger is a pre-written list of the questions that separate charts and the answers each allows. The planner picks which question to ask next — the one that splits the remaining candidates best, twenty-questions stylesổ là danh sách viết sẵn gồm những câu hỏi phân biệt các biểu đồ và các đáp án được phép. Bộ lập kế hoạch chọn câu hỏi tiếp theo — câu chia tập ứng viên còn lại hiệu quả nhất, như trò chơi hai mươi câu hỏi질문에 정의가 없었다 — 「같은 방향으로 가고 있었는가」가 영상 앞에서 무슨 뜻인지 갈린다. 그리고 물어볼 사람이 없었다the questions had no definitions — "were they going the same direction?" splits apart the moment you face a video. And there was nobody to askcác câu hỏi không có định nghĩa — câu "hai xe có cùng hướng không?" trở nên mơ hồ ngay khi xem video. Và không có ai để hỏi
에이전트 판독agentic readingđọc bằng tác nhân AI
lense · visus
모델에게 도구와 작업공간을 주고 영상을 직접 읽히는 것. 프레임을 보고, 계측 도구를 부르고, 사실을 하나씩 써나간다 — §4.0이 그 전부다give a model tools and a workspace and have it read the video: look at frames, call measurement tools, write facts one at a time — §4.0 is exactly thatcấp cho mô hình công cụ và không gian làm việc, rồi để nó đọc video: xem khung hình, gọi công cụ đo, ghi từng sự kiện — §4.0 chính là cách này지금 출하된 것이 이것이다. 남은 한계는 모델이 아니라 — 영상에 없는 사실과 어휘의 빈칸이다(§3.3)this is what shipped. What limits it is not the model but facts the video never shows, and gaps in the vocabulary (§3.3)đây là cách đã đưa vào sử dụng. Giới hạn nằm ở những sự kiện video không thể hiện và khoảng trống trong hệ thuật ngữ, không nằm ở mô hình (§3.3)

지금 시스템의 역할 이름Role names inside the system as it standsTên các vai trò trong hệ thống hiện tại

판독기readerbộ đọc영상을 보고 사실 문장을 쓰는 모델. 도표는 고르지 않는다the model that looks at the video and writes fact sentences. It does not choose the chartmô hình xem video và viết các câu mô tả sự kiện. Nó không chọn biểu đồ
판정자decider / judgebộ quyết định / bộ phán định사실을 책의 조항과 대조해 도표를 도출한다. 빠른 결정 모델을 Jev라 부른다matches the facts against the book’s clauses to derive the chart. The fast decision model in that slot is called Jevđối chiếu các sự kiện với điều khoản trong sách để suy ra biểu đồ. Mô hình quyết định nhanh ở vị trí này được gọi là Jev
등급tiercấp độ nguồn gốc사실마다 어떻게 알게 됐는지를 붙인다 — read(보고 읽음) · measured(계측됨) · confirmed(사람이 확정) · claimed(주장) · undeterminable · not_applicableevery fact carries how it came to be known — read, measured, confirmed by a human, claimed, undeterminable, not_applicablemỗi sự kiện ghi rõ nó được biết bằng cách nào — read, measured, confirmed bởi con người, claimed, undeterminable, not_applicable
harness모델을 둘러싼 운영 방식 전체 — 단계 순서, 도구, 프롬프트, 재시도. 🚨 버전 번호는 모델이 아니라 harness의 것이다 — 「판독 3.4.2」는 harness 버전이다everything around the model — step order, tools, prompts, retries. 🚨 Version numbers belong to the harness, not the model: "reader 3.4.2" is a harness versiontoàn bộ phần bao quanh mô hình — thứ tự bước, công cụ, prompt, thử lại. 🚨 Số phiên bản thuộc về bộ điều phối, không phải mô hình: "reader 3.4.2" là phiên bản bộ điều phối

⭐ 숫자를 읽기 전에 한 가지만 더. 이 문서에는 x/y 꼴의 수가 많은데 두 종류가 섞여 있다 — ① 실제 사고에 대한 정확도(예: 209/300 — KB가 접수한 도표와 비교), ② 자기가 자기를 채점한 수(예: 244/244 · 123/123 · 25/25 — 엔진에 그 엔진이 기대하는 답을 넣고 맞는지 본 것). ②는 상한이지 성적이 아니다. 이 문서는 둘을 섞지 않으려 했고, 섞인 곳은 그렇다고 적어 둔다.

⭐ One more thing before any number. The document is full of x/y figures and they are two different kinds: ① accuracy against real accidents (e.g. 209/300, against the chart KB actually filed), and ② a system scoring itself (e.g. 244/244, 123/123, 25/25 — feed an engine the answers that engine expects and check it agrees). ② is a ceiling, not a performance. This document tries never to mix them, and says so where they have been mixed.

⭐ Một điều nữa trước khi đọc số liệu. Tài liệu có nhiều số dạng x/y, nhưng chúng thuộc hai loại khác nhau: ① độ chính xác trên tai nạn thực tế (ví dụ 209/300, đối chiếu biểu đồ KB thực sự ghi nhận), và ② hệ thống tự chấm mình (ví dụ 244/244, 123/123, 25/25 — đưa đúng các đáp án mà bộ máy mong đợi rồi kiểm tra nó có đồng ý không). ② là trần lý thuyết, không phải hiệu năng. Tài liệu cố gắng không trộn lẫn hai loại và chỉ rõ những chỗ từng bị trộn.

0.1레포 — 전부 smt-privacy 에 있다 · All the code · Toàn bộ mã nguồn

gh repo clone smt-privacy/visus     # 제품. 작업 브랜치는 stage (6장)
gh repo clone smt-privacy/lense     # 전임 파이프라인. CV 체인은 아직 쓰인다
gh repo clone smt-privacy/knia-api  # 책 크롤러 — data/knia/*.json 을 만든다
gh repo clone smt-privacy/visus     # Sản phẩm. Nhánh làm việc là stage (chương 6)
gh repo clone smt-privacy/lense     # Pipeline tiền thân. Chuỗi CV vẫn được dùng
gh repo clone smt-privacy/knia-api  # Bộ thu thập sách — tạo data/knia/*.json
레포repokho mã무엇인가what it isnội dung어디에wherevị trí
visus지금의 제품the productsản phẩm4·5·6
lense전임 파이프라인 · CV 체인predecessor · the CV chaintiền thân · chuỗi CV2·3
knia-api인정기준 크롤러the book crawlerbộ thu thập dữ liệu sách2
new-knia온톨로지 · 리서치 16편 · 인쇄본 대조 감사ontology · 16 research memos · the audithệ khái niệm · 16 bản ghi nghiên cứu · kiểm toán3 §3.3
question-ledger (= ql-re)규칙 엔진 · 질문 원장 — 23도표 / 25 leafthe rule engine and ledgerbộ máy quy tắc và sổ câu hỏi2·3
knia-dag · resolve-questions같은 문제의 다른 시도other attempts at the same thingcác cách thử khác cho cùng bài toán2
cv-processing · entry-signal-benchCV 측정 · 신호 판독 벤치마크CV measurement · signal benchmarkđo bằng CV · chuẩn đánh giá tín hiệu2·3
vlm · vlm2영상 추출 v1 · v2extraction v1 and v2trích xuất v1 và v22
fault-lab가감산·협의 — 협의 준비표의 조상ancestor of the negotiation boardtiền thân của bảng đàm phán2·4
labeling정답셋 도구 (93편, 미완)gold set: labeller A finished 68, then a definition change restarted ittập chuẩn: người gán nhãn A hoàn thành 68 mục, sau đó phải làm lại vì thay đổi định nghĩa3 §3.2
hd-map · lane-detectionBEV 투영 · 차선BEV projection · laneschiếu BEV · làn đường2
ams-demo-0 · ams-1080초기 데모 · 라벨 1,080편early demo · 1,080 labelled clipsdemo ban đầu · 1,080 clip đã gán nhãn2
acci-vlm · knia-analysis · blackbox-pi최초 프로토타입 · 책 추출 · 비식별first prototype · book extraction · redactionnguyên mẫu đầu tiên · trích xuất sách · che thông tin2
CarAccident물려받은inheritedkế thừa 규칙 엔진Bộ máy quy tắc2 −1
LATR⚠️ 상류 코드upstreamthượng nguồn — ICCV 2023 논문 구현. 조사용Triển khai bài báo. Dùng cho nghiên cứu2

kb-dashboard · gather 는 이 과제와 무관한 것으로 본다.

kb-dashboard · gather được xem là không liên quan đến nhiệm vụ này.

0.2🚨 자료의 순위 — 무엇이 무엇을 이기는가 · Which source wins · Nguồn nào được ưu tiên

이 프로젝트는 같은 사실이 여러 자료에 서로 다른 상태로 남아 있다. 세션 기록은 진행 중의 한 시점이고, 원장은 그 시점에 적힌 것이고, 최종 보고는 끝난 뒤의 것이다. 순위를 모르면 끝난 일을 안 끝난 일로 읽는다.

The same fact sits in several sources in different states. A transcript is a moment while the work was still in progress; a ledger entry is what was written that day; the final report is from after it ended. Without a rank you will read finished work as unfinished.

Cùng một sự kiện xuất hiện trong nhiều nguồn với trạng thái khác nhau. Bản chép phiên là một thời điểm khi công việc còn đang làm; mục trong sổ phản ánh điều được ghi ngày đó; báo cáo cuối cùng được lập sau khi kết thúc. Không có thứ tự ưu tiên, bạn sẽ đọc nhầm công việc đã xong thành chưa xong.

순위rankthứ tự자료sourcenguồn무엇에 대해 최종인가final for whatcó thẩm quyền cuối cùng về
1최종 결과 보고 (47쪽)the 47-page final reportbáo cáo cuối cùng 47 trangKB에 보고된 모든 수치. 69.7 · 73.0 · 79.3 · 사정사 재채점 표 · 도표별 준비도 11/14/5 · 건당 비용every figure reported to KBmọi số liệu đã báo cáo cho KB
2EXPERIMENTS.md · DECISIONS.md실험의 설계와 n, 결정의 id. 단 쓰인 날짜 기준이고 뒤에 뒤집힌 것이 있다design and n — but as of the day written, and some were later reversedthiết kế và cỡ mẫu n — nhưng chỉ tại ngày ghi, một số sau đó bị đảo ngược
3origin/stage 의 코드mã nguồn của지금 돌아가는 동작. 문서가 뭐라 적었든 코드가 이긴다what actually runs — code beats any document about codenhững gì thực sự chạy — mã có giá trị hơn mọi tài liệu nói về mã
4세션 기록session transcriptsbản chép phiên làm việc이유. 왜 그렇게 했는지는 여기에만 있다. 그러나 상태에 대해서는 최종이 아니다the why — and nothing else has it. But never final on statelý do — không nguồn nào khác có. Nhưng không bao giờ là kết luận cuối cùng về trạng thái
🚨 그런데 1순위 자료가 어디에 있는지는 이 문서에 적혀 있지 않다but this document never says where the rank-1 source isnhưng tài liệu này chưa từng nói nguồn ưu tiên số 1 nằm ở đâu

최종 결과 보고(47쪽)는 어느 레포에도 없다. 이 문서가 「모든 수치의 최종 권위」로 지목하면서도 그 파일이 어디 있는지는 한 번도 적지 않는다. 레포를 다 뒤져도 나오지 않고, 이 문서를 만든 기계에서도 찾지 못했다 — 같은 이름으로 흔히 오해되는 KB 2차 보고(75쪽)는 다른 문서다.

The 47-page final report is in no repository. This document names it as the final authority for every figure and never records where it lives. It is not in any of the repositories, and it was not found on the machine this document was built on — the similarly-named 75-page KB second report is a different document.

Báo cáo cuối cùng 47 trang không nằm trong kho mã nào. Tài liệu này coi nó là nguồn có thẩm quyền cuối cùng cho mọi số liệu nhưng không ghi vị trí lưu. Nó không có trong các kho mã và cũng không tìm thấy trên máy dùng để xây dựng tài liệu này — báo cáo KB lần hai 75 trang có tên gần giống là tài liệu khác.

⭐ 그러므로 인수인계에서 가장 먼저 받아야 할 것이 이것이다. §5.8이 재현되는 수치와 아닌 수치를 가르고, 재현되지 않는 쪽은 전부 이 보고서에 걸려 있다 — 69.7 · 73.0 · 79.3, 사정사 재채점 표, 도표별 준비도, 건당 비용. 이 문서는 그 수치들을 인용할 뿐 뒷받침하지 못한다(그렇게 표시해 두었다).

⭐ 다만 — 그 수치들은 DB에서 다시 뽑을 수 있다but — those figures can be re-derived from the databasetuy vậy — có thể tính lại các số liệu từ cơ sở dữ liệu

보고서가 없어도 막다른 길은 아니다. 그 숫자들이 나온 실행 자체는 운영 DB에 남아 있다 — RDS visus-db(운영)와 visus-stage-db(스테이지). 관련 테이블은 analyses · analysis_facts · case_verdicts · cases · report_extractions이다(visus/db.py).

The report’s absence is not a dead end. The runs those numbers came from are still in the production database — RDS visus-db (prod) and visus-stage-db (stage). The tables that hold them are analyses, analysis_facts, case_verdicts, cases and report_extractions (visus/db.py).

Thiếu báo cáo không phải là ngõ cụt. Các lần chạy tạo ra những số liệu ấy vẫn còn trong cơ sở dữ liệu production — RDS visus-db (prod) và visus-stage-db (stage). Các bảng lưu chúng là analyses, analysis_facts, case_verdicts, cases và report_extractions (visus/db.py).

⭐ 스테이지에서 하라. docs/ENVIRONMENTS.md가 적어 둔 대로 visus-stage-db는 2026-10-12에 운영 백업에서 복원한 것이라 사건이 같다 — 운영을 건드리지 않고 같은 수치를 다시 계산할 수 있다.

⭐ Do it on stage. As docs/ENVIRONMENTS.md records, visus-stage-db was restored from prod’s backup on 2026-10-12 and carries the same cases — so the figures can be recomputed without touching production.

⭐ Hãy làm trên stage. Theo docs/ENVIRONMENTS.md, visus-stage-db được khôi phục từ bản sao lưu prod ngày 2026-10-12, có cùng các vụ việc — nên có thể tính lại số liệu mà không đụng tới production.

⚠️ 한 가지 장벽: 두 인스턴스 모두 publicly_accessible=false다. VPC 안(배포 박스 또는 ECS 태스크)에서 돌리거나 visus-db-sg를 통해 들어가야 한다 — 자격 증명이 아니라 네트워크 경로의 문제다. 이 문서를 만든 기계에서는 닿지 않는다(확인함).

⚠️ One obstacle: both instances are publicly_accessible=false. You need to run from inside the VPC — the deploy box or an ECS task — or come in through visus-db-sg. It is a network-path problem, not a credentials one. Verified: it is not reachable from the machine this document was built on.

⚠️ Một trở ngại: cả hai instance đều đặt publicly_accessible=false. Cần chạy bên trong VPC — từ máy triển khai hoặc tác vụ ECS — hoặc truy cập qua visus-db-sg. Đây là vấn đề đường mạng, không phải thông tin đăng nhập. Đã kiểm tra: máy dùng để xây dựng tài liệu này không truy cập được.

⭐ So this is the first thing to ask for in the handover. §5.8 separates the figures that reproduce from those that do not, and everything in the second group rests on this report — 69.7, 73.0, 79.3, the adjuster re-score table, the per-chart readiness tiers and the cost per case. This document quotes those numbers; it cannot support them, and says so where they appear.

⭐ Vì vậy đây là thứ đầu tiên cần yêu cầu khi bàn giao. §5.8 phân biệt số liệu tái lập được và không tái lập được; mọi số liệu ở nhóm thứ hai đều dựa vào báo cáo này — 69.7, 73.0, 79.3, bảng chấm lại của chuyên viên giám định, mức sẵn sàng theo biểu đồ và chi phí mỗi vụ việc. Tài liệu này trích dẫn các số đó nhưng không thể tự chứng minh, và chỉ rõ điều này tại nơi chúng xuất hiện.

⚠️ 이 함정에 먼저 빠진 기록a trap already sprungmột bẫy đã từng mắc

세션 기록 2026-10-07에는 「검토자 A가 91건 중 35건에서 멈춤」이라고 남아 있다. 그 시점에는 사실이었다. 두 사정사는 끝까지 검토했고, 최종 보고 5쪽에 두 사람의 완성된 표(오판 47건 / 38건)와 63/91 일치가 실려 있다 — 91건을 둘 다 보지 않았다면 계산될 수 없는 수다.

Bản ghi phiên ngày 2026-10-07 nói "người đánh giá A dừng ở 35 trên 91". Điều đó đúng tại thời điểm ấy. Cả hai chuyên viên đã hoàn thành toàn bộ; trang 5 báo cáo cuối có bảng hoàn chỉnh của hai người (47 / 38 ca phán sai) và 63/91 lần đồng ý — con số không thể tính nếu cả hai chưa xem đủ 91 ca.

규칙: 세션 기록에서 「아직 안 끝났다 · 답을 못 받았다 · 측정되지 않았다」를 읽었다면, 그것은 그날의 상태다. 최종 보고와 origin/stage를 확인하기 전에는 미완으로 단정하지 말 것.

The rule: when a transcript says something is unfinished, unanswered or unmeasured, that is the state on that day. Check the final report and origin/stage before concluding it stayed that way. A 10-07 transcript records reviewer A stopping at 35 of 91; both adjusters in fact completed all 91, and the final report carries both finished columns.

Quy tắc: khi bản chép phiên nói một việc chưa xong, chưa trả lời hay chưa đo, đó là trạng thái vào ngày ấy. Kiểm tra báo cáo cuối cùng và origin/stage trước khi kết luận nó vẫn như vậy. Bản chép ngày 10-07 ghi người đánh giá A dừng ở 35 trên 91; thực tế cả hai chuyên viên đã hoàn thành toàn bộ 91, báo cáo cuối cùng có đủ cả hai cột.

0.3오래된 자료를 읽을 때 · Reading dated material · Đọc tài liệu có mốc thời gian

docs/results/ 와 원장의 결과는 그 시점의 상태다. 이 프로젝트는 빠르게 움직였고, 9월의 결론이 10월에 뒤집힌 경우가 여러 번 있다.

Anything under docs/results/ or in the ledgers is the state on the day it was written. This project moved fast, and more than once a September conclusion was overturned in October.

Mọi nội dung dưới docs/results/ hoặc trong các sổ đều là trạng thái vào ngày được viết. Dự án thay đổi nhanh, nhiều kết luận tháng 9 đã bị đảo ngược trong tháng 10.

9월에 이렇게 적혀 있다what September saystài liệu tháng 9 nói10월의 상태where it stands nowtrạng thái hiện tại
「충돌 시점 검출은 기권할 수 없다」"impact detection cannot abstain""phát hiện va chạm không thể từ chối kết luận"CV가 후보를 내고 판독기가 고른다 (E-V-030)CV proposes, the reader picksCV đề xuất, bộ đọc lựa chọn
「VO heading은 계측으로 불인정」 (E-V-005a)"VO heading not admissible""hướng từ VO không được chấp nhận làm bằng chứng"오답의 주원인은 계측이 아니라 라벨이었다 (E-V-033)the labels were the cause, not the instrumentnguyên nhân là nhãn, không phải công cụ
「조항 적합도는 미검증」"clause fit unverified""độ khớp điều khoản chưa được kiểm chứng"여전히 미검증 — E-V-008은 아직 안 돌았다still true — E-V-008 never ranvẫn đúng — E-V-008 chưa từng chạy

결과 문서를 읽을 때는 날짜를 함께 읽을 것. 그리고 master가 아니라 stage가 현재다 (§6.1).

Read results with their date attached — and stage, not master, is the present.

Đọc kết quả kèm ngày tháng — và stage, không phải master, mới phản ánh hiện tại.

🔗 이 문서의 코드 링크가 가리키는 것what the code links in this document point atcác liên kết mã trong tài liệu này trỏ tới đâu

줄 번호가 붙은 링크(…#L1379)는 커밋 07ce2ce(2026-10-15)에 고정되어 있다 — 이 문서의 모든 주장을 대조한 시점이다. 그래서 클릭하면 여기서 말하는 바로 그 줄이 나온다. 줄 번호가 없는 링크(DECISIONS.md 등)는 브랜치를 가리키므로 항상 최신을 보여 준다.

Liên kết có số dòng (…#L1379) được ghim vào commit 07ce2ce (2026-10-15) — thời điểm đối chiếu mọi nhận định của tài liệu. Vì vậy nhấp vào sẽ mở đúng dòng đang được nói đến. Liên kết không có số dòng (như DECISIONS.md) trỏ tới nhánh và luôn hiển thị bản mới nhất.

그 줄이 지금은 어떻게 되어 있는지 보려면 URL의 해시를 stage로 바꾸면 된다. 단, 줄 번호는 이미 어긋나 있다 — 10-15의 지식기반 커밋들로 v2.py는 25줄 밀렸다(예: 역할 동점 처리가 1379 → 1404). 코드를 찾을 때는 줄 번호가 아니라 함수 이름으로 찾을 것.

A link with a line number is pinned to commit 07ce2ce (2026-10-15), the tree every claim here was checked against, so clicking it lands on exactly the line meant. A link without one points at the branch and always shows the current file. To see a cited line as it stands today, swap the hash in the URL for stage — but expect it to have moved: the knowledge-base commits of 10-15 shifted v2.py by 25 lines. Find code by its function name, not by the line number.

Liên kết có số dòng được ghim vào commit 07ce2ce (2026-10-15), cây mã dùng để kiểm tra mọi nhận định trong tài liệu, nên mở ra sẽ đến đúng dòng được nhắc tới. Liên kết không có số dòng trỏ tới nhánh và luôn hiển thị tệp hiện tại. Muốn xem dòng trích dẫn hiện nay, đổi hash trong URL thành stage — nhưng vị trí có thể đã dịch: các commit cơ sở tri thức ngày 10-15 làm v2.py lệch 25 dòng. Tìm mã theo tên hàm, không theo số dòng.

⚠️ 데모 날짜 — 문서와 기록이 다르다demo dates: the docs and the record disagreengày demo: tài liệu và hồ sơ không khớp

docs/OBJECTIVES.md는 하드 제약으로 적는다 — 「KB손해보험 live demo 2026-09-30: 현장에서 고른 임의 클립, 끝까지, 리허설 없음」. 그러나 세션 기록에는 그날 데모가 없다 — 그날은 임원 보고 자료를 다듬는 데 쓰였다.

docs/OBJECTIVES.md records it as a hard constraint — "KB Insurance live demo 2026-09-30: a clip chosen on the spot, run end to end, no rehearsal". The transcripts contain no demo that day — it was spent polishing the material for the executive report.

docs/OBJECTIVES.md ghi đây là ràng buộc cứng — "demo trực tiếp cho KB Insurance 2026-09-30: chọn clip tại chỗ, chạy toàn bộ, không diễn tập". Bản chép phiên không có buổi demo nào trong ngày ấy — ngày đó được dùng để hoàn thiện nội dung báo cáo lãnh đạo.

기록으로 확인되는 것: Được hồ sơ xác nhận: 최종 보고 마감 10-08Hạn chót báo cáo cuối 10-08 · 「demo is done. we have one more demo to go on friday (10.16 Fri)」“Demo đã kết thúc. Chúng ta còn một buổi demo vào thứ Sáu (10.16).”(2026-10-14) · 그리고 (2026-10-14) · và 청중이 바뀌었다đối tượng đã thay đổi — 보고 대상이 — báo cáo chuyển tới KB손해보험에서 지주사로từ KB손해보험 sang công ty mẹ 옮겨갔다(10-07). (10-07).

The objectives doc records a hard constraint that the transcripts do not support. Demos are confirmed on 10-14 and 10-16, and the audience moved from the insurer to the holding company.

Tài liệu mục tiêu ghi một ràng buộc cứng nhưng bản chép phiên không xác nhận. Demo được xác nhận vào 10-14 và 10-16, đối tượng chuyển từ công ty bảo hiểm sang công ty mẹ.

0.4어느 레포에도 없는 사실들 · Facts that exist in no repository · Những sự kiện không có trong kho mã nào

아래는 코드로도 원장으로도 확인할 수 없는 것들이고, 전부 프로젝트를 만든 사람이 확인해 준 것이다(2026-10-19). 찾다가 시간을 쓰기 쉬운 것들만 모았다 — 각각 무엇이고, 왜 당신에게 중요하고, 무엇을 할 수 있는지를 적는다.

None of these can be established from the code or the ledgers. All were confirmed by the person who built the project. Each one is something you would otherwise lose time hunting for, so each says what it is, why it matters to you, and what you can do with it.

Không thể xác lập các mục này từ mã hoặc sổ. Tất cả được người xây dựng dự án xác nhận. Mỗi mục là điều bạn có thể mất thời gian tìm kiếm vô ích, nên đều nêu nội dung, ý nghĩa với người tiếp nhận và cách sử dụng.

자료에 닿는 법Getting to the dataTiếp cận dữ liệu

사실the factsự kiện당신에게 무슨 뜻인가what it means for youý nghĩa với bạn
KB가 반출해 준 영상은 전부 S3에 있다every clip KB exported is in S3mọi clip KB xuất đều nằm trên S3약 2,900편 중 300편만 평가에 썼다. 나머지 약 2,600편은 손대지 않은 채 그대로 있고, 비식별을 다시 할 필요가 없다. → 정답셋을 만들거나 도표 범위를 넓히려 할 때 새 데이터를 구할 필요가 없다는 뜻이다. 이것이 §3.1의 B·C(자료·정답 부족으로 접은 것들)를 다시 여는 열쇠다Only 300 of ~2,900 were used. The rest are sitting there, already de-identified — so widening the chart coverage or building a labelled set needs no new data and no new PII round. This is what reopens the work parked in §3.1 for want of data or ground truth.Chỉ 300 trong khoảng ~2,900 clip được sử dụng. Phần còn lại đã được khử thông tin nhận dạng và vẫn ở đó — nên mở rộng phạm vi biểu đồ hay tạo tập gán nhãn không cần dữ liệu mới hoặc một vòng xử lý PII mới. Đây là cơ sở mở lại công việc ở §3.1 từng dừng vì thiếu dữ liệu hoặc nhãn chuẩn.
사정사 검토 답은 S3 버킷에 있다the adjuster review answers are in a bucketđáp án đánh giá của chuyên viên nằm trong một bucket§5.2의 76.7~86.7%가 거기서 나왔는데 레포에는 답 파일이 없다. 버킷은 visus-kb-review-20261006이고 접근 권한이 없으면 IAM에 추가하면 된다. → 그 숫자를 다시 세거나 검증하려면 이 버킷이 필요하다. E-V-035가 이미 그렇게 읽어서 채점했다The 76.7–86.7% ladder in §5.2 came from there, and the answer files are not in the repo. Access can be granted. You need this bucket to recompute or audit that figure — E-V-035 already does exactly that.Thang 76.7–86.7% ở §5.2 đến từ đó; các tệp đáp án không nằm trong kho mã. Có thể cấp quyền truy cập. Cần bucket này để tính lại hoặc kiểm tra số liệu — E-V-035 đã làm đúng việc đó.
인쇄본 책은 지워졌지만 되살릴 수 있다the printed standard is recoverablecó thể khôi phục bản tiêu chuẩn in§3.2의 감사 세 건이 쪽 번호로 인용하는데(p.352, p.406 …) 그 PDF가 마지막 커밋에서 지워졌다. 히스토리에 그대로 있다 — git show 9ce9a10^:source/car_to_car.pdf, 11,006,443 바이트. → 인용을 검증할 수 있고, verify.mjs도 다시 통과한다. ⚠️ 저작물이므로 공개하지 말 것Three audits in §3.2 cite it by printed page; the file was deleted in the final commit but is intact in git history. Restoring it makes those citations checkable again. It is copyrighted — do not publish it.Ba cuộc kiểm tra ở §3.2 trích theo số trang in; tệp bị xóa trong commit cuối nhưng còn nguyên trong lịch sử git. Khôi phục tệp giúp đối chiếu lại các trích dẫn. Tệp có bản quyền — không công bố.

숫자를 읽을 때 알아야 할 것Before you trust a numberTrước khi tin một con số

🚨 69.7%를 낸 모델이 무엇인지 아무도 모른다nobody knows which model produced the 209không ai biết mô hình nào tạo ra con số 209그 300건은 한 번에 돈 배치가 아니라 몇 주에 걸쳐 쌓인 「각 사건의 활성 분석」이고, 그 사이에 판독 모델이 Fable에서 Opus 5.5로 바뀌었다. 어느 분석이 어느 모델이었는지 기록이 없다. → §5.3의 모델 비교표에서 기준선 행만 단일 모델이 아닐 수 있다는 뜻이다. 확인은 쉽다 — analyses 행마다 모델이 적혀 있으므로 질의 한 번이면 300건의 모델 분포가 나온다The 300 are not one batch but each case's active analysis, accumulated over weeks across a Fable → Opus 5.5 switch that nobody recorded. So in §5.3's model comparison the baseline row alone may be a mixture. One query against analyses settles it — the model is stored per row.300 trường hợp không phải một đợt chạy mà là phân tích đang được chọn của từng vụ việc, tích lũy nhiều tuần qua lần chuyển Fable → Opus 5.5 không được ghi nhận. Vì vậy trong so sánh mô hình ở §5.3, riêng hàng cơ sở có thể pha trộn nhiều mô hình. Một truy vấn analyses là đủ xác định — mô hình được lưu theo từng hàng.
30개 도표는 사고의 약 96%를 덮는다the 30 charts cover ~96% of accidents30 biểu đồ bao phủ ~96% tai nạnKB가 그 30개를 고른 기준이다. 문서는 없고 구두로만 확인됐다. → §5.5의 「30개 중 11개가 운영 가능」을 어떻게 읽을지가 여기에 달려 있다 — 108개 중 11개가 아니라 사고의 대부분을 덮는 30개 중 11개다This is the basis on which KB chose those 30. Stated verbally; no document. It decides how §5.5's "11 of 30 ready" should be read — not 11 of 108, but 11 of the charts that carry nearly all the volume.Đó là cơ sở KB chọn 30 biểu đồ này. Thông tin được nói miệng, không có tài liệu. Nó quyết định cách hiểu "11 trên 30 đã sẵn sàng" ở §5.5 — không phải 11 trên 108, mà là 11 trong các biểu đồ chiếm gần toàn bộ lượng vụ việc.

지금 상태 — 당신이 물려받는 것The state you are inheritingTrạng thái bạn đang tiếp nhận

🚨 prod은 지금도 KB에 서비스 중이다production is still serving KBproduction vẫn đang phục vụ KB§6.5의 운영 위험은 과거 기록이 아니라 살아 있는 위험이라는 뜻이다 — 리퍼 grace가 문서의 6시간이 아니라 1시간, attempts=3에서 작업이 영원히 좌초, 배포 스크립트에 prod 가드가 없다. → 아무것도 고치지 않더라도 이 셋은 알고 있어야 한다It makes everything in §6.5 live rather than historical: the reaper's grace is one hour not six, a job that exhausts its attempts strands forever, and the deploy helper has no production guard. Know these three even if you change nothing.Vì vậy mọi điều ở §6.5 đều đang có hiệu lực chứ không chỉ là lịch sử: thời gian chờ của bộ thu hồi là một giờ chứ không phải sáu, tác vụ hết số lần thử sẽ mắc kẹt vĩnh viễn, công cụ triển khai không có chốt bảo vệ production. Cần biết ba điều này kể cả khi không thay đổi gì.
판정 수정에 아무도 손대지 않았다nobody has started the judge fixchưa ai bắt đầu sửa bộ phán định§7.3의 최우선 항목 — 판정 단계가 트리의 정답을 버리고 있다(트리가 맞은 43건 vs 판정이 맞은 2~3건). E-V-035가 수정 방향까지 적어 두었다. → 비어 있는 채로 당신을 기다리고 있고, 모델을 바꾸지 않고 데이터를 더 모으지 않고 지금 있는 것만으로 할 수 있는 가장 큰 개선이다§7.3's top item — the judge discards what the tree got right, 43 times to 2–3. E-V-035 names the fix. It is open, and it is the largest improvement reachable without a better model or more data.Mục ưu tiên cao nhất của §7.3 — bộ phán định bỏ đi những trường hợp cây quyết định làm đúng, tỷ lệ 43 so với 2–3. E-V-035 nêu cách sửa. Việc vẫn mở và là cải thiện lớn nhất có thể đạt mà không cần mô hình tốt hơn hoặc thêm dữ liệu.
「선행」 같은 말의 뜻은 KB에게 물어야 한다definitions come from KB, not the bookđịnh nghĩa đến từ KB, không phải sách§3.3이 말하는 빈칸 — 「선행」이 충돌 순간 기준인지 내내 기준인지 정의된 적이 없다. 그리고 책이 아니라 KB에게 물어야 한다: 실무 관행이 책과 다를 수 있기 때문이다. → 이것은 연구가 아니라 요청이다. 받은 답은 KB_PRACTICE.md로 가고, 그것이 곧 온톨로지가 된다The gap §3.3 describes: nobody ever settled whether 선행 means "in front at impact" or "in front throughout". Ask KB rather than the book, because practice can differ from the printed text. This is a request, not a research task — and the answer is the ontology.Khoảng trống §3.3 mô tả: chưa ai thống nhất 선행 nghĩa là "ở phía trước lúc va chạm" hay "ở phía trước trong toàn bộ diễn biến". Hỏi KB thay vì tra sách, vì thực hành có thể khác văn bản in. Đây là yêu cầu làm rõ, không phải đề tài nghiên cứu — câu trả lời chính là hệ khái niệm.
판독 시간 제한은 정해진 값이 아니다the reading budget is not a product constraintngân sách thời gian đọc không phải ràng buộc sản phẩm클립 하나를 읽는 데 허용된 시간이 선별한 300건을 보고 관찰로 정한 값이고 합의된 제약이 아니다. 지금은 180~600초로 계산된다(§4.5). → 긴 클립을 받기로 한다면 바꿔도 되는 숫자다. E-V-034에서 180초짜리 클립 하나가 여기 걸려 유실됐다The time a reading is allowed is an observation from the screened 300, not an agreed limit. If you decide to accept longer clips, this is a number you may change — one 180-second clip was already lost to it.Thời gian cho phép một lần đọc là giá trị quan sát từ 300 clip đã lọc, không phải giới hạn được thỏa thuận. Nếu chấp nhận clip dài hơn, bạn có thể thay đổi số này — đã có một clip 180 giây bị loại vì giới hạn đó.
E-V-009b 는 막힌 것이 아니다không phải là bị chặn원장은 「사람 채점 대기」로 남아 있지만 실제로는 하려다 끝내지 못한 것이다. 채점할 이미지 20장은 이미 커밋되어 있다. → 누군가 앉아서 보면 끝난다 — highlight 도구를 쓸지 말지를 정하는 유일한 측정이다The ledger says "awaiting human grading", but it was simply never finished. The 20 images are committed. Someone sitting down with them completes it — and it is the only measurement that decides whether the highlight tool is usable.Sổ ghi "đang chờ con người chấm", nhưng thực tế chỉ là chưa hoàn tất. 20 ảnh đã được commit. Chỉ cần một người ngồi chấm chúng — đây là phép đo duy nhất quyết định công cụ highlight có dùng được không.

0.5기록되지 않은 것 · What is written down nowhere · Những điều không được ghi lại ở đâu

아래는 코드에도 원장에도 없다. 전부 🗣 구두 등급이고, 대부분 「왜」에 해당한다:

Dưới đây là những điều không có trong mã cũng không có trong sổ. Tất cả mang cấp 🗣 Xác nhận miệng, phần lớn trả lời "vì sao":

  • resolve-questions · knia-dag 가 각각 무엇을 시도했는지의 의도ý định của từng hướng đã thử
  • AI Hub 라벨의 자기모순 — 같은 영상의 변형본에 다른 도표 라벨 (2장)AI Hub's labels contradict themselves — re-encodings of the same clip carry different charts (ch.2)nhãn của AI Hub tự mâu thuẫn — các bản mã hóa lại của cùng một clip mang biểu đồ khác nhau (ch.2)
  • AX 팀의 라벨링이 왜 충분하지 않았는지, 그때 왜 혼란이었는지 (2장)why the AX team's labelling was not enough, and why that period was chaotic (ch.2)vì sao việc gán nhãn của nhóm AX chưa đủ và vì sao giai đoạn đó hỗn loạn (ch.2)
  • KB가 30개 도표를 고른 이유 — 사고 커버리지 약 96%. 문서는 없다 (5장)why KB chose those 30 charts — about 96% accident coverage. No document states it (ch.5)vì sao KB chọn 30 biểu đồ ấy — bao phủ khoảng 96% tai nạn. Không tài liệu nào ghi (ch.5)
  • 작은 표본으로 방향을 읽는 작업 방식 (5장 §5.7)the working method of reading direction from a small sample (ch.5 §5.7)phương pháp đọc hướng hoạt động được trên một mẫu nhỏ (ch.5 §5.7)

이 다섯 가지는 프로젝트를 만든 사람에게 직접 물어야 하는 것이고, 그래서 여기 적어 둔다.

These five can only be settled by asking the person who built it — which is why they are listed.

Năm mục này chỉ có thể xác nhận bằng cách hỏi người xây dựng dự án — đó là lý do chúng được liệt kê.

0.6🚨 git 이력이 잃어버린 것 — 그리고 전사에는 남아 있는 것 · What the git history lost, and what the transcripts still hold · Lịch sử git đã mất gì, bản chép phiên còn giữ gì

이 절은 타임라인을 만들면서 알게 된 것이다. 세션 기록을 레포별로 잘라 커밋과 맞춰 보니, 레포 여덟 개는 작업 이력이 통째로 사라져 있다 — 커밋이 2026-10-14 「Handover snapshot」 하나뿐이다. 그 작업이 없어진 것이 아니라, 푸시되지 않았을 뿐이고 전사에는 그대로 남아 있다.

This section comes from building the timeline. Cutting the session records by repository and matching them against commits shows that eight repositories have lost their working history entirely — their only commit is the 2026-10-14 "Handover snapshot". The work was not lost, it was never pushed, and the transcripts still carry it.

Phần này xuất phát từ việc dựng dòng thời gian. Chia hồ sơ phiên theo kho mã rồi đối chiếu commit cho thấy tám kho mã đã mất toàn bộ lịch sử làm việc — commit duy nhất là "Handover snapshot" ngày 2026-10-14. Công việc không bị mất mà chưa từng được push; bản chép phiên vẫn lưu lại.

레포repositorykho mã작업 구간work segmentsphân đoạn công việc주고받은 턴exchangeslượt trao đổi커밋commitscommit
new-knia333,0841
hd-map54971
fault-lab94541
vlm133501
vlm210601
ams-10807441
labeling1181
lane-detection161
합계totaltổng794,5138

⭐ 그래서 이 레포들에 대해서는 전사가 유일한 기록이다. §8.6이 knia-dag의 「커밋 71개가 엿새에 몰려 있다」를 읽을 수 있었던 것은 그 레포가 이력을 가지고 있기 때문이고, new-knia에 대해 같은 것을 할 수 없는 이유는 커밋이 하나뿐이기 때문이다. new-knia의 3,084턴이 그 자리를 대신한다.

⭐ For these repositories the transcript is the only record. §8.6 can say that knia-dag's 71 commits fall on six dates because that repository kept its history; the same cannot be said of new-knia, which has one commit. Its 3,084 exchanges stand in that place instead.

⭐ Với các kho mã này, bản chép phiên là hồ sơ duy nhất. §8.6 có thể nói 71 commit của knia-dag rơi vào sáu ngày vì kho mã ấy giữ được lịch sử; không thể nói tương tự về new-knia vì nó chỉ có một commit. 3,084 lượt trao đổi của nó thay thế cho lịch sử ấy.

⚠️ 그리고 전사도 전부는 아니다 — 7·8월이 비어 있다and the transcripts are not complete either — July and August are thinbản chép phiên cũng không đầy đủ — tháng 7 và 8 rất thưa

전사가 덮는 날은 53일이고, 고르게 퍼져 있지 않다.

The transcripts cover 53 days, and not evenly.

Bản chép phiên bao phủ 53 ngày, phân bố không đều.

            커밋    세션이 있던 날
2026-05       8          0
2026-06       8          2
2026-07     271          3   ← 거의 비어 있다
2026-08     206          6   ← 거의 비어 있다
2026-09   1,165         28
2026-10     267         14            commits   days with a session
2026-05           8          0
2026-06           8          2
2026-07         271          3   ← nearly blank
2026-08         206          6   ← nearly blank
2026-09       1,165         28
2026-10         267         14            commit   ngày có phiên
2026-05           8          0
2026-06           8          2
2026-07         271          3   ← gần như trống
2026-08         206          6   ← gần như trống
2026-09       1,165         28
2026-10         267         14

🚨 7·8월에 커밋 477개가 있는데 세션은 9일치뿐이다. 그리고 그 두 달이 정확히 ams-demo-0 · resolve-questions · knia-analysis · knia-dag가 만들어진 때다 — 커밋을 세션에 붙이지 못한 509건 중 414건이 이 네 레포다. 그 시기의 세션은 남아 있지 않다.

🚨 July and August hold 477 commits against nine days of session coverage — and those two months are exactly when ams-demo-0, resolve-questions, knia-analysis and knia-dag were built. Of the 509 commits that match no session, 414 belong to those four repositories. The sessions from that period were not kept.

🚨 Tháng 7 và 8 có 477 commit nhưng chỉ chín ngày có bản chép phiên — đúng giai đoạn xây dựng ams-demo-0, resolve-questions, knia-analysis và knia-dag. Trong 509 commit không khớp phiên nào, 414 thuộc bốn kho mã đó. Các phiên trong giai đoạn này không được giữ lại.

⭐ 두 기록은 서로를 메운다. 7·8월 작업은 커밋으로 읽어야 하고(그래서 §8.5·§8.6·§8.12가 커밋 분석에 기대고 있다), 9·10월 작업은 전사로 읽는 편이 낫다. 어느 쪽도 혼자서는 다섯 달을 담지 못한다.

⭐ The two records fill each other’s gaps. July and August have to be read through commits — which is why §8.5, §8.6 and §8.12 lean on commit analysis — while September and October read better through transcripts. Neither one covers the five months on its own.

⭐ Hai loại hồ sơ bù đắp chỗ thiếu của nhau. Tháng 7 và 8 phải đọc qua commit — vì vậy §8.5, §8.6 và §8.12 dựa vào phân tích commit — còn tháng 9 và 10 dễ hiểu hơn qua bản chép phiên. Không loại nào tự bao phủ được cả năm tháng.

⭐ 세 번째 기록 — 레포에도 전사 페이지에도 없던 계획 문서 넷 · a third record⭐ Hồ sơ thứ ba — bốn tài liệu kế hoạch không có trong kho mã hay trang chép phiên · hồ sơ thứ ba

2026-07-20에 쓰인 프로그램 계획 문서 네 편이 ~/projects/ 루트에 있었다 — AMS_PLAN.md(661행) · AMS_CONSOLIDATION.md(1,103행) · AMS_PORTFOLIO_STATUS.md(306행) · AMS_WORKLOG_2026-07-01_08-28.md(135행), 합계 2,205행. 어느 레포에도 커밋되지 않았고, 이 문서도 모르고 있었다. 세션의 툴 출력에서 복구해 recovered/ 에 넣었다 — 포트폴리오 현황은 306행 전문, CONSOLIDATION 은 696행(약 63%), 나머지 둘은 부분이다. 원본은 작업하던 노트북의 ~/projects/ 에 아직 남아 있을 수 있다 — 있다면 그쪽이 낫다. 그리고 이 문서들이 덮는 기간이 정확히 7·8월, 바로 위 표가 비어 있다고 말한 그 구간이다.

감사의 결론 셋 — 15일 동안 아홉 갈래가 한 제품을 공격하고 있던 시점의 진단이다:

① 같은 KNIA 룰북이 네 번 따로 인코딩됐고, KB 시연에 연결된 것이 유일하게 아무도 검증하지 않은 판본이다.
② 정답과 대조한 적이 한 번도 없다. 라벨링 사양서는 셋이 쓰였고 라벨은 0건이다 — 포트폴리오의 모든 정확도 주장이 모델 대 모델 일치이거나 내부 정합성이었다.
③ 진짜 관문은 코드가 아니라 회의였다 — KB 측 검증 세션이 하이파이·승인·개발 전부의 상류인데 일정이 잡혀 있지 않았다.

⭐ ②가 이 문서 전체를 관통한다. §5.1의 80% 목표가 어디에 기대고 있는지, 9장이 왜 라벨 없이 채점하는 방법에 그렇게 매달리는지가 전부 같은 결핍에서 나온다. 2026-07-20에 이미 그렇게 적혀 있었다.

Four programme-level planning documents written on 2026-07-20 sat at the ~/projects/ root — AMS_PLAN.md (661 lines), AMS_CONSOLIDATION.md (1,103), AMS_PORTFOLIO_STATUS.md (306) and AMS_WORKLOG_2026-07-01_08-28.md (135): 2,205 lines, committed to no repository, and unknown to this document until now. They were recovered from tool output in the sessions and placed under recovered/ — the portfolio status complete at 306 lines, CONSOLIDATION at 696 (about 63%), the other two partial. The originals may still exist on the machine the work was done on, and those would be better. They cover exactly July and August — the window the table above calls empty.

Bốn tài liệu kế hoạch cấp chương trình viết ngày 2026-07-20 nằm tại gốc ~/projects/ — AMS_PLAN.md (661 dòng), AMS_CONSOLIDATION.md (1,103), AMS_PORTFOLIO_STATUS.md (306) và AMS_WORKLOG_2026-07-01_08-28.md (135): 2,205 dòng, không được commit vào kho mã nào, tài liệu này trước đó không biết đến. Chúng được khôi phục từ kết quả công cụ trong các phiên và đặt dưới recovered/ — trạng thái danh mục đủ 306 dòng, CONSOLIDATION có 696 (khoảng 63%), hai tài liệu còn lại chỉ có một phần. Bản gốc có thể vẫn còn trên máy thực hiện công việc và sẽ đầy đủ hơn. Chúng đề cập đúng tháng 7 và 8 — khoảng thời gian bảng trên coi là trống.

The audit reached three conclusions, taken with nine parallel efforts attacking one product over 15 days: (1) the same KNIA rulebook had been encoded four separate times, and the encoding wired into the KB demo was the only one nobody had verified; (2) nothing had ever been measured against ground truth — three labelling specs written, zero labels, every accuracy claim in the portfolio model-versus-model agreement or internal consistency; (3) the real gate was a meeting, not code — the client-side validation session was upstream of hi-fi, sign-off and build, and was not scheduled. The second conclusion runs through this entire document, and it was already written down on 2026-07-20.

Cuộc kiểm tra đi đến ba kết luận trong bối cảnh chín hướng song song cùng xử lý một sản phẩm trong 15 ngày: (1) cùng sách quy tắc KNIA đã được mã hóa độc lập bốn lần, và bản được nối vào demo KB là bản duy nhất chưa ai kiểm chứng; (2) chưa từng đo đối chiếu nhãn chuẩn — có ba đặc tả gán nhãn, không có nhãn nào, mọi tuyên bố độ chính xác trong danh mục đều là độ đồng ý giữa mô hình hoặc tính nhất quán nội bộ; (3) điều kiện chặn thực sự là một cuộc họp, không phải mã — phiên xác nhận phía khách hàng phải diễn ra trước bản hi-fi, phê duyệt và triển khai nhưng chưa được lên lịch. Kết luận thứ hai xuyên suốt toàn bộ tài liệu này và đã được viết từ 2026-07-20.

01문제 · The Problem · Bài toán

이 코드는 도메인을 모르면 읽을 수 없다. 모든 것이 도메인 이름으로 되어 있다.

You cannot read this code without the domain. Everything is named after it.

Không thể đọc mã này nếu chưa hiểu nghiệp vụ. Mọi thứ đều được đặt tên theo nghiệp vụ.

1.1과실비율과 「그 책」 · Fault ratios and the book · Tỷ lệ lỗi và sách tiêu chuẩn

한국에서 두 차가 충돌하면 보험사들은 과실비율(예: 30:70)에 합의해야 한다. 그들은 원칙에서 추론하지 않는다 — 책에서 찾아본다. 손해보험협회 「자동차사고 과실비율 인정기준」은 사고 상황마다 이름이 붙은 도표들의 목록이고, 각 도표에 기본 비율과 수정 규칙이 있다.

When two cars collide in Korea, the insurers must agree a fault ratio (e.g. 30:70). They do not reason from first principles — they look it up in a book. The KNIA standard is a catalogue of named accident situations (도표, charts), each with a base ratio and adjustment rules.

Khi hai ô tô va chạm ở Hàn Quốc, các công ty bảo hiểm phải thống nhất tỷ lệ lỗi (ví dụ 30:70). Họ không suy luận từ nguyên lý — họ tra trong sách. Tiêu chuẩn KNIA là danh mục các tình huống tai nạn có tên gọi (도표, biểu đồ), mỗi tình huống có tỷ lệ cơ sở và quy tắc điều chỉnh.

108
차대차 — car ↔ carô tô với ô tô
the only tree we walkcây duy nhất được duyệt
55
차대자전거 — bicycleô tô với xe đạp
38
차대보행자 — pedestrianô tô với người đi bộ
2,460
분쟁심의 결정문quyết định giải quyết tranh chấp
dispute rulings
가장 중요한 구분 · The one distinctionPhân biệt quan trọng nhất

책은 두 당사자를 A와 B로 부른다. 이것은 도표 안의 자리이지 차가 아니다. 우리 고객의 차는 고객차, 상대는 상대차. 판정한다는 것은 도표와 역할을 둘 다 고르는 것이고, 역할을 틀리면 비율이 뒤집힌다.

The book names the parties A and B — these are positions in a chart, not vehicles. Deciding a case means picking a chart and a role. Get the role wrong and the ratio inverts. Never use A/B as a vehicle name; never say 의뢰차.

Sách gọi hai bên là A và B — đây là vị trí trong biểu đồ, không phải danh tính xe. Quyết định một vụ việc là chọn biểu đồ và vai trò. Gán sai vai trò sẽ đảo ngược tỷ lệ. Không dùng A/B làm tên xe; không gọi xe là 의뢰차.

1.2KB가 제기한 문제 · What KB asked for · KB yêu cầu gì

KB손해보험 대물보상지원파트의 오픈이노베이션 협업 과제 신청서가 출발점이다. 과제명: AI 기반 사고영상 분석을 통한 자동차 사고 과실조사 자동화.

The starting point is an Open Innovation request from KB손해보험's property-claims unit: automating fault investigation through AI analysis of accident video.

Điểm khởi đầu là yêu cầu Open Innovation từ đơn vị bồi thường tài sản của KB손해보험: tự động hóa điều tra lỗi bằng AI phân tích video tai nạn.

문제 · ProblemBài toán내용whatnội dung
1느리고 사람마다 다른 판단 — 담당자가 영상을 직접 보고 분석해야 해서 시간이 길고 담당자별 편차가 생긴다Slow and inconsistent — an adjuster must watch the footage personally, so analysis is slow and judgements vary by personChậm, thiếu nhất quán — chuyên viên phải tự xem video nên phân tích mất thời gian, đánh giá thay đổi theo người
2고객에게 설명하기 어려움 — 고객은 안내 전까지 책임 유무·비율을 알 수 없고, 근거·법규·판례를 모아 쓰는 데 시간이 든다Hard to explain to the customer — who cannot learn liability or ratio until contacted, while assembling evidence, statutes and precedent takes timeKhó giải thích cho khách hàng — khách chưa biết trách nhiệm hay tỷ lệ cho đến khi được liên hệ, trong khi tổng hợp bằng chứng, điều luật và án lệ mất thời gian

현장 사정사의 시각: 도표 선택 자체보다 고객 설명·설득과 상대 보험사와의 협의에 더 많은 시간이 든다.

From the adjusters themselves: more time goes into explaining to the customer and negotiating with the other insurer than into picking the chart. So the system settles the chart fast, and puts its weight on what comes after.

Theo chính các chuyên viên: thời gian giải thích cho khách hàng và đàm phán với công ty bảo hiểm đối phương nhiều hơn thời gian chọn biểu đồ. Vì vậy hệ thống chọn biểu đồ nhanh rồi tập trung cho các bước sau.

다섯 개 산출물 · The five deliverables · Năm sản phẩm bàn giao

#산출물deliverablesản phẩm bàn giao결과resultkết quả
D1예상과실도표 Biểu đồ lỗi dự kiến — estimated chart & ratio— biểu đồ và tỷ lệ ước tính구현implementedđã triển khai
D2과실비율 수정 가감산요소 Yếu tố cộng/trừ điều chỉnh tỷ lệ lỗi — adjustment factors— yếu tố điều chỉnh구현implementedđã triển khai
D3분쟁시 우위요소 Yếu tố có lợi khi tranh chấp — dispute advantages— lợi thế tranh chấp구현implementedđã triển khai
D4도로형태 기반 사고약도 Sơ đồ tai nạn theo hình dạng đường — road-geometry diagram— sơ đồ hình học đường만들지 않음not builtchưa xây dựng
D5사고과실조사 레포트 Báo cáo điều tra lỗi tai nạn — investigation report— báo cáo điều tra대체replacedđã thay thế
결정적 제약 · The constraint that shaped everythingRàng buộc định hình toàn bộ hệ thống

신청서에 이미 적혀 있다 — KB는 사고개요 text를 활용한 자체 AI-Agent 예상과실도표 추천서비스를 이미 운영 중이다. 그러므로 텍스트만으로 낼 수 있는 결과는 이 과제의 가치가 아니다. 영상이 차별점이다.

KB already ran a text-driven chart recommender. Anything obtainable from text alone proves nothing. Video is the differentiator — which is why the dispatch report enters as a claimed fact, never as truth.

KB đã có bộ đề xuất biểu đồ dựa trên văn bản. Kết quả chỉ lấy từ văn bản không chứng minh được giá trị mới. Video là điểm khác biệt — vì vậy báo cáo hiện trường được đưa vào dưới dạng sự kiện claimed, không bao giờ coi là sự thật đã xác nhận.

⚠️ 그러나 측정은 이 전제를 완전히 지지하지 않는다. 초기 보고를 빼면 69.7% → 26.3%로 떨어지고 86건은 판정에 도달조차 못 한다. 다만 그 실패의 88%가 「보였을 것」으로 분류된 사실이다 — 안 보여서가 아니라 못 읽거나 읽고도 안 쓰여서다 (§5).

⚠️ The measurement does not fully support this premise — without the report the score falls to 26.3%. But 88% of those failures were on visible facts.

⚠️ Phép đo không hoàn toàn ủng hộ tiền đề này — bỏ báo cáo, kết quả giảm còn 26.3%. Tuy nhiên 88% lần thất bại thuộc các sự kiện nhìn thấy được.

⭐ 이 제품의 모양을 정한 한 문장 — 사정사 인터뷰⭐ The sentence that shaped the product⭐ Câu nói định hình sản phẩm

과제는 「도표를 자동으로 고른다」로 시작했다. 그런데 현업 인터뷰가 전제를 뒤집었다 — fault-lab의 README에 그대로 남아 있다:

Dự án bắt đầu từ việc "tự động chọn biểu đồ". Nhưng phỏng vấn người làm thực tế đã đảo ngược tiền đề — câu này vẫn còn trong README của fault-lab:

「KB 인터뷰 결론: 도표(차N-M) 특정은 사람이 쉽게 한다. 마찰은 가감산(수정요소)과 「현저한 과실」 판단이다.」

"The chart itself is easy for a person to pick. The friction is in the adjustment factors and the gross-negligence call." An entire project — fault-lab — exists because of that sentence, and it takes the chart as already decided.

"Con người dễ chọn được biểu đồ. Vướng mắc nằm ở yếu tố điều chỉnh và đánh giá bất cẩn đáng kể." Cả dự án fault-lab tồn tại vì câu đó, coi biểu đồ là đã quyết định xong.

그래서 제품의 무게가 옮겨 갔다. 도표는 빨리 확정시키고, 그 뒤의 협의와 고객 설명에 힘을 쓴다. 최종 보고서의 「도표 선택보다 설명·설득과 협의에 시간이 더 든다」가 같은 발견이고, §4.6의 다섯 단계가 그 모양이다.

So the weight of the product moved. Settle the chart fast, then spend the effort on the negotiation and on explaining it to the customer. The final report’s "persuading and negotiating costs more time than choosing the chart" is the same finding, and the five stages in §4.6 are that shape.

Vì vậy trọng tâm sản phẩm thay đổi. Chọn biểu đồ nhanh, rồi tập trung vào đàm phán và giải thích cho khách hàng. Nhận định "thuyết phục và đàm phán tốn thời gian hơn chọn biểu đồ" trong báo cáo cuối cùng là cùng phát hiện ấy; năm giai đoạn ở §4.6 phản ánh cấu trúc này.

⚠️ 그런데 만든 사람 자신이 이 말을 믿지 말라고 적어 두었다 (2026-10-06):

⚠️ Tuy nhiên, chính người xây dựng đã ghi rằng đừng tin câu nói đó một cách máy móc (2026-10-06):

현업 사정사들은 도표를 고르는 일 자체는 어렵지 않다고 말했다 — 적어도 체감으로는 몸에 익은 작업이라는 것이다. 다만 그 진술을 그대로 믿는 것은 위험하다.

Adjusters in the field said choosing the chart is not the hard part — by their own sense of it, something they know by heart. Taking that statement at face value is dangerous.

Các chuyên viên thực tế nói chọn biểu đồ không phải phần khó — theo cảm nhận của họ, đó là việc đã thuộc lòng. Tin hoàn toàn lời này rất nguy hiểm.

사정사들이 쉽다고 느끼는 것과 실제로 일치하는 것은 다르다 — 그리고 §5.2가 그 차이를 잰다: 두 사정사가 91건 중 63건에서만 서로 일치했다. 쉽다고 느끼는 일에서 사람끼리 31%가 갈린다.

The author flagged his own source: adjusters feel the chart is easy. §5.2 measures that feeling — the two adjusters agreed with each other on only 63 of 91 cases. On the task they call easy, humans differ 31% of the time.

Tác giả tự lưu ý về nguồn: các chuyên viên cảm thấy chọn biểu đồ dễ. §5.2 đo cảm nhận ấy — hai chuyên viên chỉ đồng ý với nhau ở 63 trong 91 vụ. Với công việc họ gọi là dễ, con người bất đồng 31% số trường hợp.

KB가 세운 검증 지표 — 그리고 셋은 측정할 수 없었다KB's own KPIs — and three could never be measuredKPI của KB — ba chỉ số chưa từng đo được

협업계획서에 KB가 적은 검증 지표는 아홉 개다. 어느 것이 우리 쪽에서 잴 수 있고 어느 것이 KB 쪽 사람을 필요로 하는지가 갈린다 — 파일럿을 설계할 때 이것이 첫 번째 제약이다.

KB wrote nine verification metrics into the collaboration plan. What divides them is which we could measure ourselves and which need a person on KB’s side — and that is the first constraint when you design the pilot.

KB đưa chín chỉ số kiểm chứng vào kế hoạch hợp tác. Điểm phân biệt là chỉ số nào ta tự đo được, chỉ số nào cần người phía KB — đó là ràng buộc đầu tiên khi thiết kế thử nghiệm thí điểm.

잴 수 있었던 것measurable by usta tự đo đượcKB 쪽 사람이 있어야 하는 것needs KB's peoplecần nhân sự KB
필수정보 충족률 · 영상 정보 추출 정확도 · 과실 판단 일치도 · 가감산 요소 식별률 · 근거 제시 완전성required-field coverage · extraction accuracy · fault-verdict agreement · factor identification · completeness of the evidence shownđộ bao phủ trường bắt buộc · độ chính xác trích xuất · độ đồng ý về kết luận lỗi · nhận diện yếu tố · độ đầy đủ của bằng chứng hiển thị무수정 승인율 · 검토·작성 시간 절감 · 당사자 설명 수용성unedited-approval rate · time saved reviewing and writing · whether the customer accepts the explanationtỷ lệ phê duyệt không cần sửa · thời gian tiết kiệm khi xem xét và viết · khách hàng có chấp nhận giải thích không

🚨 오른쪽 셋은 전부 비어 있다. 사정사가 실제 사건에서 쓰지 않으면 측정 자체가 성립하지 않는다 — 그래서 최종 제안이 「4~8주 파일럿」인 것이고(§5.9), 그것이 이 과제에서 아직 답하지 못한 질문 셋이다.

🚨 All three on the right are empty. None can be measured without adjusters using the system on live cases — which is exactly why the proposal ends in a 4–8 week pilot. These three are the questions this project has not answered.

🚨 Cả ba chỉ số bên phải đều chưa có số liệu. Không thể đo nếu chuyên viên chưa dùng hệ thống trên vụ việc thực tế — đó chính là lý do đề xuất kết thúc bằng thí điểm 4–8 tuần. Đây là ba câu hỏi dự án chưa trả lời.

1.3문서에서 보게 될 기호 · Ids you will meet · Những ID bạn sẽ gặp

이 문서와 레포가 쓰는 식별자는 전부 레포 안에서 찾을 수 있다.

Mọi định danh dùng trong tài liệu và kho mã đều có thể tìm thấy trong các kho mã.

기호idID어디서 왔나 · where it livesnguồn gốc · vị trí lưu
V-D1 … V-D27결정 기록 — DECISIONS.md. 무엇을 왜 골랐는가decisions — what was chosen and whyquyết định — đã chọn gì và vì sao
E-V-001 … E-V-036실험 원장 — EXPERIMENTS.md. 결과는 docs/results/the experiment ledgersổ thí nghiệm
D1 … D5KB 신청서의 다섯 산출물 (위 표)KB's five deliverables, abovenăm sản phẩm KB yêu cầu ở trên
C-1 … C-4사정사에게서 온 구성(construal) — V-D21construals from the adjusters — V-D21cách diễn giải của chuyên viên — V-D21
G-1알려진 공백 — DECISIONS.md의 「Known gaps」a known gap, recorded in DECISIONS.mdkhoảng trống đã biết, ghi trong DECISIONS.md
차43-2도표 번호 — 계열(43) + 형제(2)a chart id — family 43, sibling 2ID biểu đồ — nhóm 43, biến thể 2

⚠️ 결과 파일명 일부는 옛 번호를 달고 있다 (09-23 재번호). 원장의 id를 인용할 것, 파일명 말고.

⚠️ Some result filenames carry pre-renumbering ids. Cite the ledger id, not the filename.

⚠️ Một số tên tệp kết quả chứa ID trước khi đánh lại số. Trích ID trong sổ, không trích theo tên tệp.

1.4왜 어려운가 — 세 가지 오류 · Three error classes · Ba nhóm lỗi

사정사든 시스템이든 같다. 과실 판단이 틀리는 이유는 셋뿐이고, 이 셋이 다섯 달 전체를 설명한다.

The same for a human or a machine. There are only three, and they explain the whole five months.

Giống nhau với con người và máy. Chỉ có ba nhóm, đủ giải thích toàn bộ năm tháng.

오류error classnhóm lỗi무엇인가what it isnội dung예exampleví dụ
①증거 누락
Missing evidence

Thiếu bằng chứng
필요한 사실이 자료에 아예 없다The fact is simply not in the materialSự kiện không có trong tư liệu상대 쪽 신호, 가려진 장면, 도로 폭, 정확한 속도the other party's signal, an occluded moment, road width, exact speedtín hiệu của xe đối phương, khoảnh khắc bị che khuất, chiều rộng đường, tốc độ chính xác
②증거 오독
Misread evidence

Đọc sai bằng chứng
자료에는 있는데 잘못 읽는다It is there, but read wronglyBằng chứng có nhưng bị đọc sai상대차가 온 방향, 누가 먼저 진입했는지which side the other car came from, who entered firstxe đối phương đến từ phía nào, ai đi vào trước
③해석 차이Khác biệt diễn giải
Interpretation

Diễn giải
사실은 같은데 기준을 다르게 적용Same facts, different standard appliedCùng sự kiện nhưng áp dụng tiêu chuẩn khác nhau「갑자기」·「상당한」 — 정의 없는 문구, KB 관행「갑자기」, 「상당한」 — undefined wording, and KB's own practice「갑자기」 (đột ngột), 「상당한」 (đáng kể) — từ ngữ chưa được định nghĩa và thực hành riêng của KB

③은 연구 문제가 아니라 협상 문제다. 「상당한」에는 정의가 없고 어떤 모델도 풀 수 없다. KB와 함께 정하는 것이고, 먼저 정한 쪽이 업계 기준을 갖는다.

→ ①은 §5.0(자료)과 §3.1-B에서, ②는 §8.7(엔진이 실제로 어떻게 읽는가)에서, ③은 §3.3(표현의 빈칸)과 §0.4(누구에게 물어야 하나)에서 이어진다.

→ ① continues in §5.0 and §3.1-B, ② in §8.7, ③ in §3.3 and §0.4.

→ ① tiếp tục ở §5.0 và §3.1-B, ② ở §8.7, ③ ở §3.3 và §0.4.

③ is not a research problem but a negotiation. 「상당한」 has no definition; no model solves it. It is settled with the client — and whoever settles it first owns the standard.

③ không phải bài toán nghiên cứu mà là đàm phán. 「상당한」 không có định nghĩa; không mô hình nào giải được. Cần thống nhất với khách hàng — bên thống nhất trước sẽ nắm tiêu chuẩn.

셋은 깔끔히 나뉘지 않는다 — ③이 ②를 만든다 · ③ manufactures ②Ba nhóm không tách biệt rõ ràng — ③ tạo ra ②

상대차는 충돌 순간에 앞에 있었으면 「선행」인가, 내내 앞에 있었어야 「선행」인가? 영상은 선명하고 판독도 정확할 수 있다 — 그래도 답이 갈린다. 겉으로는 ②(오독)이지만 원인은 ③(정의 없음)이다 — ③이 ②를 만들어 낸다. 그리고 더 아래에는, 그 정의를 쓸 수 있는 표현 수단 자체가 없다.

Is a car 선행 because it was in front at the moment of contact, or the whole time? It is counted as ② — but its cause is ③, and underneath both, we lack the construction in which the definition could be written. Those definitions are the ontology.

Một xe là 선행 vì ở phía trước lúc tiếp xúc hay trong toàn bộ diễn biến? Lỗi được tính là ② — nhưng nguyên nhân là ③; bên dưới cả hai, ta thiếu cấu trúc để viết ra định nghĩa. Các định nghĩa ấy chính là hệ khái niệm.

그 정의들이 곧 온톨로지다 — 기계가 단어를 어떻게 읽을지, 사람과 어떻게 합의할지 → §3.3

그리고 구조적 난점 둘Hai khó khăn về cấu trúc · Two structural obstacles · Hai trở ngại về cấu trúc

  1. 블랙박스는 자기 차를 볼 수 없다. 그런데 과실은 흔히 자차의 기동에 달려 있다 — 카메라 에고모션으로만 추론된다.a dashcam cannot see its own car — yet fault usually turns on the customer car's manoeuvre, which is only inferable from camera ego-motioncamera hành trình không nhìn thấy chính xe gắn nó — trong khi lỗi thường phụ thuộc động tác của xe khách hàng, chỉ có thể suy ra qua chuyển động của camera
  2. 카메라 내부·외부 파라미터를 모른다. 화각·높이·각도를 알 수 없어 미터 단위 복원이 막히고, 가정을 박아야 한다 (lane 3.5 m, HFOV 110°).the camera's intrinsics and extrinsics are unknown. Without field of view, height or angle, metric reconstruction is blocked and assumptions must be hard-coded (lane 3.5 m, HFOV 110°)không biết thông số nội tại và ngoại tại camera. Thiếu góc nhìn, chiều cao, góc đặt khiến việc dựng lại kích thước theo mét bị chặn, phải ghi cứng giả định (làn 3.5 m, HFOV 110°)

02계보 · The Lineage · Quá trình phát triển

물려받은 자산은 「사실 → 비율」을 이미 풀고 있었다. 다섯 달은 전부 그 앞의 「영상 → 사실」이었고, 그쪽이 어려운 쪽이었다.

The inherited asset already solved facts → ratio. Five months went into the half it presupposes — video → facts — which is where the difficulty actually lives.

Tài sản kế thừa đã giải được phần sự kiện → tỷ lệ. Năm tháng tập trung vào nửa mà nó mặc định đã có — video → sự kiện — nơi khó khăn thực sự nằm.

2026-05-14 → 07-03 · 물려받음 / inherited2026-05-14 → 07-03 · kế thừa
CarAccident smt-privacy (원래 mythndevil에 있었다)(originally under mythndevil)(ban đầu thuộc mythndevil)

Ian 합류 전부터 존재한 유일한 자산. FastAPI 과실비율 API — POST /fault-ratio에 사고 조건과 과실요소를 JSON으로 주면 매칭 케이스와 비율을 돌려준다. EC2에 systemd + MariaDB로 실제 배포되어 돌았다. 17 커밋, 9,142줄.

The only thing that existed before. A FastAPI fault-ratio API: give it conditions and factors as JSON, get a matched case and a ratio. Deployed on EC2 with systemd and MariaDB.

Thứ duy nhất đã có từ trước. Một API tỷ lệ lỗi dùng FastAPI: đưa điều kiện và yếu tố dưới dạng JSON, nhận trường hợp khớp và tỷ lệ. Triển khai trên EC2 với systemd và MariaDB.

중요 — 사람이 입력하는 도구로 만들어진 것이 아니다. 설계 의도는 처음부터 전체 체인이었고, Ian이 인수받은 시점이 바로 여기다. 즉 「VLM이 스키마를 채운다」는 전제 자체가 물려받은 것이고, 다섯 달은 그 전제를 검증한 과정이다.

It was not built as a human-input tool. The intended design was the whole chain, and that is the point at which it was handed over — so the premise that a VLM fills the schema was itself inherited. Five months went into testing that premise.

Nó không được xây dựng như công cụ nhập liệu thủ công. Thiết kế dự kiến là toàn bộ chuỗi; lúc bàn giao dự án đang ở bước ấy — nên giả định VLM sẽ điền lược đồ cũng là điều được kế thừa. Năm tháng dùng để kiểm nghiệm giả định đó.

VLM  →  schema  →  engine  →  chart        ← the intended chain
        └──────── verified ────────┘
└─ never verified ─┘
VLM  →  schema  →  engine  →  biểu đồ     ← chuỗi dự kiến
        └──────── đã kiểm chứng ───────┘
└─ chưa từng kiểm chứng ─┘
작동이 검증된 부분VerifiedĐã kiểm chứng스키마 → 엔진 → 도표lược đồ → bộ máy → biểu đồ — facts in, ratio out— đưa sự kiện vào, nhận tỷ lệ
검증되지 않은 고리Never verifiedChưa từng kiểm chứngVLM → 스키마VLM → lược đồ — 그리고 여기가 틀렸다and this is the one that is falsevà đây là giả định sai

이 스키마는 뒤에 나올 질문 원장의 조상이다 — 도표를 가르는 항목을 미리 정해 두고 채운다는 같은 발상이고, 차이는 채우는 방식이다.

This schema is the ancestor of the question ledger: the same idea — fix the slots that separate charts, then fill them.

Lược đồ này là tiền thân của sổ câu hỏi: cùng một ý tưởng — cố định các trường phân biệt biểu đồ rồi điền chúng.

"a FastAPI rules engine that assumes clean human-typed features. Our niche = the perception + uncertainty half CarAccident doesn't do."“Một engine quy tắc FastAPI giả định đầu vào là đặc trưng sạch do người nhập. Phần riêng của chúng ta là nhận thức và xử lý bất định mà CarAccident chưa làm.”acci-vlm, 2026-07

AMS_PoC_Realignment.md(07-02)가 이 자산에 던진 세 질문이 사실상 다섯 달의 연구 계획이 된다: 모델→JSON, JSON→계산, 계산→신뢰. 답은 이렇게 나왔다 — 2번은 참, 3번은 조건부 참, 1번이 거짓. 깨끗한 JSON을 낼 수 있다는 전제가 틀렸고, 그래서 프로젝트는 「스키마를 채우는 법」이 아니라 「무엇을 모르는지 말하는 법」이 되었다.

Three questions were asked of it: model→JSON, JSON→calc, calc→trust. The answer the work produced: 2 holds, 3 holds conditionally, 1 is false. The premise that a model could emit clean conforming JSON was wrong — so the project became about saying what it cannot see. That is why 판단 불가 is a normal answer, not a failure.

Ba câu hỏi được đặt ra: mô hình→JSON, JSON→tính toán, tính toán→độ tin cậy. Kết quả: 2 đúng, 3 đúng có điều kiện, 1 sai. Giả định mô hình có thể xuất JSON sạch, đúng cấu trúc là sai — dự án chuyển sang mô tả những gì không thể nhìn thấy. Vì vậy 판단 불가 là đáp án bình thường, không phải thất bại.

06-29 → 08-04
blackbox-pi — 비식별 blackbox-pi — khử thông tin nhận dạng · redaction· che thông tin

첫 작업이 과실비율이 아니라 개인정보 비식별이었던 이유는 단순하다 — 그렇게 하지 않으면 데이터를 받을 수 없었다. KB가 약속한 데이터 셋 중 실제로 온 것은 대시캠 영상 하나뿐이고, 그조차 KB 데이터센터 안에서 비식별을 수행한 뒤에야 반출되었다. 요구는 가혹했다: 모든 얼굴과 번호판, 늦은 탐지도 실패, 프레임 사이 한 번이라도 풀리면 실패, 그리고 외부 네트워크 없이.

Not research — this was how the data was obtained at all. Of three promised datasets only the dashcam footage arrived, and only after de-identification performed inside KB's own datacentre, offline. The 2,460 dispute rulings in the final product were crawled by us, not supplied.

Không phải nghiên cứu — đây là điều kiện để có được dữ liệu. Trong ba bộ dữ liệu được hứa, chỉ video hành trình được giao, sau khi khử thông tin nhận dạng ngoại tuyến bên trong trung tâm dữ liệu KB. 2,460 quyết định tranh chấp trong sản phẩm cuối do ta tự thu thập, không phải được cung cấp.

07 → 09 · KB 데이터가 오기 전까지until KB's data arrivedtrước khi dữ liệu KB tới
AI Hub — 유용하면서 동시에 쓸모없었던 데이터useful and useless at oncevừa hữu ích vừa không dùng được

✅ 코드✅ Mã nguồn + 🗣 구두🗣 Xác nhận miệng

KB 영상이 오기 전까지 쓴 것은 AI Hub 교통사고 영상 데이터다. acci-vlm의 벤치마크, lense의 골드셋 273편, E-V-001의 48편이 전부 여기서 나왔다. 그리고 경로는 AI Hub → Label Studio → ams-1080 (1,080편) → 골드셋 273편이다.

Until KB’s footage arrived, everything ran on AI Hub’s traffic-accident video. acci-vlm’s benchmark, lense’s 273-clip gold set and E-V-001’s 48 clips all came from there. The path is AI Hub → Label Studio → ams-1080 (1,080 clips) → the 273-clip gold set.

Trước khi nhận video KB, mọi thứ chạy trên video tai nạn giao thông của AI Hub. Chuẩn đánh giá acci-vlm, tập chuẩn 273 clip của lense và 48 clip E-V-001 đều từ đó. Đường đi là AI Hub → Label Studio → ams-1080 (1,080 clip) → tập chuẩn 273 clip.

가장 결정적인 증거 · the decisive evidenceBằng chứng quyết định

같은 영상의 변형본들이 서로 다른 도표 라벨을 달고 있었다 — 어둡게 하거나 해상도를 바꾼 사본이 다른 도표로 들어온다. 「라벨러가 틀렸을 수 있다」가 아니라 라벨 체계가 자기 자신과 일치하지 않는다는 뜻이다. 게다가 A/B 역할이 아예 없다 — 역할을 틀리면 비율이 뒤집히는데도.

The same accident, re-encoded darker or at another resolution, carried a different chart label. Not "a labeller may be wrong" — the label set does not agree with itself. And there is no A/B role at all, though getting the role wrong inverts the ratio.

Cùng một tai nạn, mã hóa lại tối hơn hoặc ở độ phân giải khác, lại mang nhãn biểu đồ khác. Không phải "người gán nhãn có thể sai" — chính bộ nhãn không nhất quán. Cũng không hề có vai trò A/B, dù gán sai vai trò sẽ đảo tỷ lệ.

유용했던 이유useful becausehữu ích vì쓸모없었던 이유useless becausekhông dùng được vì
지금 존재한다 — 기다리며 다섯 달을 비울 수 없었다it existedít nhất nó có tồn tại같은 영상에 다른 라벨 · A/B 역할 없음same video, different labels; no rolecùng video, nhãn khác nhau; thiếu vai trò
기저율과 비교 기준을 만들 수 있었다gave base rates and a yardstickcung cấp tỷ lệ nền và thước đo프리소트 ≠ 라벨러 (808중 16) · ~17% 오류 추정presort ≠ labeller; ~17% likely wrongsắp xếp sơ bộ ≠ gán nhãn; khoảng ~17% có thể sai
통제된 1인칭 전방 영상controlled first-person inputđầu vào góc nhìn thứ nhất có kiểm soátego_manoeuvre는 관찰이 아니라 도표 역할에서 파생derived, not observedđược suy ra, không được quan sát

그리고 「라벨이 없었다」는 말은 부정확하다"There were no labels" is too simpleNói "không có nhãn" là quá đơn giản

AX 팀이 AI Hub 클립으로 질문 원장과 CV 과제에 대한 라벨을 실제로 만들었다. 그 라벨이 필요한 범위를 다 덮지는 못했는데, 이유는 작업 자체가 아니라 작업의 조건에 있다 — 질문 원장이 라벨링과 동시에 계속 바뀌고 있었고, 무엇이 필요한지가 고정되기 전에 무엇을 라벨할지를 정해야 했다.

The AX team did produce labels from the AI Hub clips, for the question ledger and for the CV tasks. Those labels did not cover the range that was needed — and the reason sits in the conditions of the work, not the work: the question ledger kept changing while the labelling ran, so what to label had to be decided before what was needed had settled.

Nhóm AX đã tạo nhãn từ các clip AI Hub, cho sổ câu hỏi và tác vụ CV. Các nhãn ấy không bao phủ phạm vi cần thiết — nguyên nhân nằm ở điều kiện làm việc, không phải bản thân công việc: sổ câu hỏi liên tục thay đổi khi đang gán nhãn, nên phải quyết định gán nhãn gì trước khi nhu cầu được chốt.

방법을 탐색하고, 설계를 바꾸고, 라벨을 요청하는 일이 전부 동시에 일어났다. 아무것도 고정되지 않은 채로. 돌아보면 혼란이었고, 원인은 능력이 아니라 시간이다. 그리고 그 기간의 성능은 받아들일 만한 수준에 이르지 못했다.

Methods were being explored, the design was changing, and labels were being requested — all at once, with nothing fixed. In retrospect it was chaos, and the cause was time, not ability. Performance over that period did not reach an acceptable level.

Khám phá phương pháp, thay đổi thiết kế và yêu cầu gán nhãn diễn ra cùng lúc, chưa có gì cố định. Nhìn lại, đó là giai đoạn hỗn loạn vì thiếu thời gian, không phải năng lực. Hiệu năng giai đoạn ấy chưa đạt mức chấp nhận được.

그래서 3장에서 C 「정답이 없어 접었다」로 분류한 것은 라벨이 존재하지 않았다는 뜻이 아니라, 움직이는 표적에 대고 라벨을 만들고 있었다는 뜻이다.

So when chapter 3 files something under C, "abandoned for want of ground truth", it does not mean the labels did not exist. It means we were making labels against a moving target.

Vì vậy khi chương 3 xếp một việc vào nhóm C, "dừng vì thiếu nhãn chuẩn", không có nghĩa là nhãn không tồn tại. Nghĩa là ta tạo nhãn cho một mục tiêu liên tục dịch chuyển.

07-02 → 08-03
acci-vlm · knia-analysis · ams-demo-0

acci-vlm — 학습 없는 VLM+RAG 프로토타입이 끝까지 돌았다 (5개 클립 top-2 4/5). 그리고 이후 모든 설계를 지배하는 발견: 블랙박스는 자기 차를 볼 수 없다, 자차는 A일 수도 B일 수도 있고 라벨은 말해주지 않는다, 병목은 매처가 아니라 지각(⚠️ 이것은 문장의 절반이다 — §8.9가 나머지 절반과 남아 있던 매처 쪽 공백을 적는다). 스키마 v2에서 unknown 하나가 네 가지 일을 하고 있던 것을 분리했다 — observed / inferred / uncertain / not_visible / not_applicable.

acci-vlm — nguyên mẫu VLM+RAG không huấn luyện đã chạy trọn chuỗi (top-2 4/5 trên 5 clip). Những phát hiện chi phối mọi thiết kế sau đó: camera hành trình không nhìn thấy chính xe của nó, xe gắn camera có thể là A hoặc B nhưng nhãn không cho biết, nút thắt là tri giác, không phải bộ so khớp (⚠️ đây chỉ là một nửa nhận định — §8.9 ghi nửa còn lại và khoảng trống phía bộ so khớp). Lược đồ v2 tách những vai trò mà một giá trị unknown từng gánh — observed / inferred / uncertain / not_visible / not_applicable.

knia-analysis — 인쇄본 108개 도표를 YAML leaf로. 실무적 발견은 정확히 이것이다 — PDF의 텍스트 레이어 자체는 깨끗하다(스캔본이 아니라 한글이 그대로 추출된다). 깨지는 것은 표·비율 박스뿐이라 — 셀을 가로지르며 읽기 순서가 깨진다 — 산문은 텍스트에서, 수치는 렌더링한 도표 이미지에서 읽는다.

knia-analysis — the printed standard’s 108 car-to-car charts turned into YAML leaves. The practical finding is narrower than it is usually told: the PDF’s text layer is clean — it is not a scan, and Korean extracts directly. What breaks is only the tables and ratio boxes, where reading order runs across cells, so prose comes from the text and every number is read visually from the rendered chart image.

knia-analysis — chuyển 108 biểu đồ ô tô với ô tô trong tiêu chuẩn in thành các lá YAML. Phát hiện thực tế hẹp hơn cách thường được kể: lớp văn bản của PDF sạch — không phải bản quét, có thể trích tiếng Hàn trực tiếp. Chỉ bảng và ô tỷ lệ bị hỏng thứ tự đọc, chữ bị đọc xuyên ô; vì vậy phần văn xuôi lấy từ văn bản, mọi con số đọc trực quan từ ảnh biểu đồ đã kết xuất.

⚠️ 보정 — 「108개 중 2개만 검수」는 지나간 한 시점이다correction — "only 2 of 108 reviewed" was a moment, not the end stateĐính chính — "chỉ duyệt 2 trên 108" là một thời điểm, không phải trạng thái cuối

이 문서는 앞서 「108개 중 2개만 검수되었고 나머지는 구조적으로 얕다」고 적었다. 둘 다 틀렸다. 「구조적으로 얕다」는 표현은 어느 커밋에도 존재하지 않는다. 그리고 HEAD의 REVIEW_LOG.md 첫 줄은 「✅ REVIEW COMPLETE — 108/108 leaves (2026-07-10)」이고, 세어 보면 leaf YAML 136개 전부가 status: reviewed, 전부가 ratio_verified_against_diagram: true다.

This document said "only 2 of 108 were reviewed, the rest structurally shallow". Both halves are wrong. The phrase "structurally shallow" exists at no commit. And at HEAD the first line of REVIEW_LOG.md reads "✅ REVIEW COMPLETE — 108/108 leaves (2026-07-10)", with all 136 leaf YAMLs marked status: reviewed and every one ratio_verified_against_diagram: true.

Tài liệu từng nói "chỉ 2 trên 108 được duyệt, phần còn lại sơ sài về cấu trúc". Cả hai vế đều sai. Cụm "sơ sài về cấu trúc" không tồn tại ở commit nào. Tại HEAD, dòng đầu của REVIEW_LOG.md ghi "✅ REVIEW COMPLETE — 108/108 leaves (2026-07-10)", cả 136 YAML lá đều có status: reviewed và từng tệp đều có ratio_verified_against_diagram: true.

어디서 왔는가: 2026-07-08의 한 커밋에서 레포가 정확히 2개의 손으로 쓴 leaf만 가지고 있었고, 바로 다음 커밋이 나머지 106개를 일괄 생성했다. 참인 순간이 최종 상태처럼 그대로 옮겨 적혀 온 것이다. 살아남는 진짜 단서는 따로 있다 — leaf는 먼저 일괄 추출되고 나중에 검토됐다(REVIEW_LOG 자신의 표현으로 「bulk-extracted leaves에 대한 반복적 충실성 검토」). 그리고 INDEX.md는 지금도 「5 of 108 extracted」이라고 적혀 있다 — 같은 오해로 가는 세 번째 길이다.

Where it came from: one commit of 2026-07-08 is the state in which the repo held exactly two hand-written leaves, and the very next commit bulk-generated the other 106. A true snapshot carried forward as though final. The real caveat that does survive is a different one — the leaves were bulk-extracted first and reviewed second, in REVIEW_LOG’s own words an "iterative faithfulness review of the bulk-extracted leaves". And INDEX.md still says "5 of 108 extracted" at HEAD — a third road to the same wrong impression.

Nguồn gốc: một commit ngày 2026-07-08 phản ánh trạng thái kho mã chỉ có đúng hai lá viết tay; commit ngay sau đó tạo hàng loạt 106 lá còn lại. Một ảnh chụp trạng thái đúng bị kéo dài như thể là kết luận cuối. Lưu ý thực sự còn hiệu lực là điều khác — các lá được trích xuất hàng loạt trước, duyệt sau; REVIEW_LOG gọi là "duyệt độ trung thực lặp lại cho các lá được trích xuất hàng loạt". INDEX.md tại HEAD vẫn ghi "đã trích 5 trên 108" — con đường thứ ba dẫn đến cùng ấn tượng sai.

🚨 저작권 — 이 레포는 사실상 책 그 자체를 담고 있다copyright — this repo effectively contains the bookBản quyền — kho mã này thực chất chứa cuốn sách

공개하거나 밖으로 내보내서는 안 되는 것이 네 가지다. ① 도표 이미지 112장 — 도표당 한 장씩 인쇄면을 150 DPI로 그대로 렌더한 것이고, 표지·러닝 헤더·쪽 번호까지 들어 있다 — 2차 저작물이 아니라 책이다. ② extraction/text/에 해당 장 365쌍의 전문 덤프. ③ leaf마다 *_verbatim 필드가 본문을 인용한다. ④ tools/package_bundle.sh는 도표를 base64로 박은 배포 가능한 HTML 번들을 만든다 — 공유물에는 절대 돌리지 말 것.

Four things that must not be published or sent outside. ① 112 chart images — one per chart, each a 150 DPI render of the printed page itself, running header, page number and all: not a derivative work but the book. ② extraction/text/ holds the complete 365-page text dump of the chapter. ③ every leaf carries *_verbatim fields quoting the text. ④ tools/package_bundle.sh regenerates a distributable HTML bundle with the diagrams embedded as base64 — never run it for anything that will be shared.

Bốn thứ không được công bố hoặc gửi ra ngoài. ① 112 ảnh biểu đồ — mỗi biểu đồ một ảnh, là trang in gốc kết xuất ở 150 DPI, có cả đầu trang và số trang: không phải tác phẩm phái sinh mà chính là cuốn sách. ② extraction/text/ lưu toàn bộ văn bản 365 trang của chương. ③ mỗi lá có các trường *_verbatim trích nguyên văn. ④ tools/package_bundle.sh tạo lại gói HTML có thể phân phối với biểu đồ nhúng dạng base64 — tuyệt đối không chạy cho thứ sẽ được chia sẻ.

⭐ 그리고 「284 분기」가 어디서 왔는지 확정됐다and the "284 branches" is now pinned downvà "284 nhánh" nay đã xác định rõ nguồn

이 문서가 여러 번 인용한 284 분기는 knia-dag의 것이 아니다 — resolve-questions의 proposal/rules.v2.json에 있고, 그 파일 자신의 counts 블록이 branches 284 · charts 108 · variants 124 · requirements 2,527이라고 적는다(세어봤다 — 레코드 284개, 고유 id 284개).

The 284 branches this document cites repeatedly is not knia-dag’s — it lives in resolve-questions’ proposal/rules.v2.json, whose own counts block reads branches 284 · charts 108 · variants 124 · requirements 2,527 (counted: 284 records, 284 distinct ids).

284 nhánh được tài liệu trích nhiều lần không thuộc knia-dag — chúng nằm trong proposal/rules.v2.json của resolve-questions, có khối thống kê branches 284 · charts 108 · variants 124 · requirements 2,527 (đã đếm: 284 bản ghi, 284 ID riêng biệt).

「분기」는 책의 단위가 아니라 계산된 것이다 — 124개 변형 중 62개가 최상위 선언(OR)이라, 그것을 풀어 펼치면 284개가 된다(차55-3 하나가 최대 24개). ⭐ 그리고 날짜가 계보를 마무리한다 — 그 파일이 처음 나타난 날은 2026-08-04, 커밋 제목은 「Publish the rules, without which the question set cannot be used」이고 — ams-demo-0가 내장(vendoring)했던 knia-dag 엔진을 지운 바로 그날이다(§8.6).

A "branch" is computed, not a unit of the book — 62 of the 124 variants are top-level disjunctions, and expanding them gives 284 (차55-3 alone accounts for 24). ⭐ And the date closes the lineage: that file first appears on 2026-08-04 under the commit message "Publish the rules, without which the question set cannot be used" — the same day ams-demo-0 deleted the vendored knia-dag engine (§8.6).

"Nhánh" là kết quả tính toán, không phải đơn vị của sách — 62 trên 124 biến thể là phép HOẶC ở cấp cao nhất, khai triển ra được 284 (riêng 차55-3 chiếm 24). ⭐ Ngày tháng khép kín chuỗi nguồn gốc: tệp xuất hiện lần đầu ngày 2026-08-04, thông điệp commit "Công bố các quy tắc, nếu thiếu chúng không thể dùng bộ câu hỏi" — đúng ngày ams-demo-0 xóa bộ máy knia-dag nhúng trong dự án (§8.6).

ams-demo-0 — 질문 원장 + 플래너가 VLM에게 질문을 던지는 설계. 여기서 결정적 발견이 나온다: VLM이 틀린 이유는 보이는 것의 한계만이 아니라 질문 원장 자체의 오류였다 — 질문이 던져지는 단계, 모호성, 순서.

acci-vlm proved the pipeline ran end-to-end, and produced the findings that govern everything since: the dashcam cannot see its own car; ego may be party A or B and the label never says which; the bottleneck is perception, not matching. knia-analysis turned the printed book into data — and found that tables scramble in the text layer, so every number must be read from the rendered diagram. ams-demo-0 found that part of what looked like "the VLM can't see it" was actually "we asked it wrong" — the step, the ambiguity, the order of the questions.

acci-vlm chứng minh chuỗi chạy trọn vẹn và tạo các phát hiện chi phối về sau: camera hành trình không nhìn thấy xe mình; xe đó có thể là bên A hoặc B nhưng nhãn không nói rõ; nút thắt là tri giác, không phải so khớp. knia-analysis chuyển sách in thành dữ liệu — phát hiện bảng bị đảo lộn trong lớp văn bản nên mọi con số phải đọc từ ảnh biểu đồ. ams-demo-0 phát hiện một phần điều tưởng là "VLM không nhìn được" thực ra là "ta hỏi sai" — sai bước, mơ hồ, sai thứ tự câu hỏi.

08-24 → 09-13
질문 원장 — 같은 문제, 여러 번 Sổ câu hỏi — cùng bài toán, nhiều lần thử · the ledger, attempted repeatedly· sổ câu hỏi, thử nhiều lần

✅ 코드✅ Mã nguồn question-ledger·new-knia·vlm·fault-lab·hd-map·cv-processing·lense·ams-demo-0·knia-dag·visus/web 확인 — 줄 단위 해부는 8장Đã kiểm tra question-ledger·new-knia·vlm·fault-lab·hd-map·cv-processing·lense·ams-demo-0·knia-dag·visus/web — phân tích từng dòng ở chương 8

⚠️ 보정 · correction⚠️ Đính chính

규칙 계보는 세 단계가 아니라 네 단계다. 이 장을 처음 쓸 때 한 단계를 빠뜨렸다:

Chuỗi kế thừa quy tắc có bốn bước, không phải ba. Bản đầu của chương này bỏ sót một bước:

knia-analysis (07-08→07-15, 순서 의존적 축적이라는 이유로 폐기)
  → knia-dag (07-18→07-27)
  → resolve-questions        ← 실제로 출하된 카탈로그는 이것이다
  → ams-demo-0
  → visusknia-analysis (07-08→07-15, abandoned for order-dependent accumulation)
  → knia-dag (07-18→07-27)
  → resolve-questions        ← this is the catalogue that actually shipped
  → ams-demo-0
  → visusknia-analysis (07-08→07-15, dừng vì tích lũy phụ thuộc thứ tự)
  → knia-dag (07-18→07-27)
  → resolve-questions        ← đây là danh mục thực sự được đưa vào sử dụng
  → ams-demo-0
  → visus

ams-demo-0은 knia-dag의 엔진을 벤더링한 지 열하루 만에 삭제하고(f5e71d9, 2026-08-04) resolve-questions의 284개 분기로 갔다. knia-dag에는 아무도 알리지 않았고, 사흘을 더 만들었다. → §8.6

The rulebook lineage is four deep, not three — and the repo whose engine was dropped was never told.

Chuỗi kế thừa sách quy tắc có bốn tầng, không phải ba — kho mã có bộ máy bị bỏ chưa từng được thông báo.

확인된 것 — question-ledger가 곧 ql-re다question-ledger is ql-requestion-ledger chính là ql-re
범위ScopePhạm vi「다. 같은 방향 진행차량 상호 간의 사고」 — 차41-1 … 차48-1, 23개 도표 / 25 leaf23 charts, 25 judgment units23 biểu đồ, 25 đơn vị phán định
구성Built asCách xây dựng① 도표별 조건표 → ② 질문 원장 → ③ 수정요소표 → ④ 도표 엔진 → ⑤ 가감산 엔진five steps from condition tables to the modifier enginenăm bước từ bảng điều kiện đến bộ máy yếu tố điều chỉnh
규모 · 상태Size · statusQuy mô · trạng tháiPython 63,192줄 · §7.2 테스트 스위트 266/266 (pytest 259 passed) · leaf 도달 25/2563k lines · a test-suite pass count63k dòng · số ca kiểm thử đạt
⚠️ 둘 다 성능이 아니다⚠️ neither is a performance figure⚠️ cả hai đều không phải số liệu hiệu năng — §8.1

이 23개 도표 범위가 new-knia 인쇄본 대조 감사의 범위와 정확히 같다 — 감사는 이 엔진의 데이터를 대조한 것이다.

That scope is exactly the scope of the printed-standard audit — the audit was checking this engine's data.

Phạm vi ấy chính là phạm vi cuộc kiểm tra tiêu chuẩn in — cuộc kiểm tra đối chiếu dữ liệu của bộ máy này.

"Everything below is a structural property of the data and engine… None of it is accuracy on real accidents — there is no labeled real-case set yet."ql-re, reports/measurements.md

"Mọi điều dưới đây là đặc tính cấu trúc của dữ liệu và bộ máy… Không mục nào là độ chính xác trên tai nạn thực tế — chưa có tập vụ việc thực đã gán nhãn."ql-re, reports/measurements.md

266/266도 25/25도 구조적 속성이지 실제 사고 정확도가 아니다 — 문서가 스스로 그렇게 적어 두었다.

⚠️ 숫자를 섞지 말 것: lense의 244/244(합성 오라클)와 ql-re의 266/266(엔진·API 검사)은 다른 엔진의 다른 측정이다.

⚠️ Do not conflate lense's 244/244 with ql-re's 266/266 — different engines, different measurements.

⚠️ Đừng nhầm 244/244 của lense với 266/266 của ql-re — khác bộ máy, khác phép đo.

그리고 fault-lab이 협의 준비표의 조상이다fault-lab is the ancestor of the negotiation boardfault-lab là tiền thân của bảng đàm phán

Python 15,420줄 — 「도표 확정 이후의 절반: 가감산·상대 주장·방어 논리」. 그 전제가 중요하다:

Python 15,420 dòng — "nửa công việc sau khi chốt biểu đồ: yếu tố điều chỉnh, lập luận đối phương, lý lẽ bảo vệ". Tiền đề của nó rất quan trọng:

「KB 인터뷰 결론: 도표(차N-M) 특정은 사람이 쉽게 한다. 마찰은 가감산(수정요소)과 「현저한 과실」 판단이다.」 그래서 이 랩의 입력은 도표가 이미 정해진 상태다.

"From the KB interviews: humans pick the chart easily. The friction is the modifiers and the 현저한 과실 judgement." So this lab's input is a case whose chart is already settled.

"Theo phỏng vấn KB: con người dễ chọn biểu đồ. Vướng mắc nằm ở yếu tố điều chỉnh và đánh giá 현저한 과실 (bất cẩn đáng kể)." Vì vậy đầu vào của phòng thử nghiệm này là vụ việc đã chốt biểu đồ.

이것이 최종 보고서의 「도표 선택보다 설명·설득과 협의에 시간이 더 든다」와 같은 발견이고, visus가 도표를 빨리 확정시키고 그 뒤에 무게를 둔 이유다.

Đó là cùng phát hiện với câu "giải thích, thuyết phục và thỏa thuận tốn thời gian hơn chọn biểu đồ" trong báo cáo cuối, cũng là lý do visus chọn biểu đồ nhanh rồi đặt trọng tâm vào phần sau.

여기서 접근이 바뀐다: 「도표를 맞혀라」가 아니라 「도표를 가르는 질문을 만들어라」. 그리고 이것들은 서로 다른 프로젝트가 아니라 같은 문제에 대한 반복된 시도다.

The approach changes: stop guessing charts, generate the questions that separate them. These are not separate projects — they are repeated attempts at one thing, with different methods.

Cách tiếp cận thay đổi: ngừng đoán biểu đồ, tạo các câu hỏi phân biệt chúng. Đây không phải những dự án tách biệt — mà là nhiều lần giải cùng bài toán bằng các phương pháp khác nhau.

프로젝트projectdự án그 시도의 방법 · methodphương pháp của lần thử
ql-re질문 원장 + 규칙 엔진 — ledger + rule engine— sổ câu hỏi + bộ máy quy tắc
resolve-questions질문 원장의 충돌·모호성 해소 Giải quyết mâu thuẫn và mơ hồ trong sổ câu hỏi — resolving its conflicts— giải quyết mâu thuẫn
knia-dag그래프 구조로 Theo cấu trúc đồ thị — as a graph— dưới dạng đồ thị
new-knia인쇄본이 아니라 Dùng 크롤링한 웹사이트trang web đã thu thập를 원본으로 làm nguồn thay cho bản in — crawled site, not the printed book— trang web thu thập được thay vì sách in
question-ledgerql-re에서 갈라져 플래너까지 완성 Tách nhánh từ ql-re và hoàn thiện tới bộ lập kế hoạch — carried through to a planner— hoàn thiện tới bộ lập kế hoạch
가장 비싼 교훈 · the most expensive lessonBài học đắt giá nhất

고정 질문 트리는 합성 오라클에 대해 244/244로 검증되었다. 그리고 실제 클립에서 답변 커버리지 14.4%였다. — 자기 자신에 대해 검증된 로직은 아무것도 증명하지 않는다.

A fixed question tree verified 244/244 against a synthetic oracle, and answered 14.4% of real clips. Verified against itself, never against the world.

Một cây câu hỏi cố định đạt 244/244 với bộ đáp án chuẩn tổng hợp, nhưng chỉ trả lời được 14.4% clip thực tế. Nó được kiểm chứng bằng chính mình, chưa từng bằng thực tế.

죽은 것은 질문 원장이라는 생각이 아니라 고정성이다. 트리는 살아남았다 — 책 자신의 분류를 그때그때 걸어 내려가고, 확신이 안 서는 단계는 조사자에게 던지는 질문이 된다.

What died was the fixedness, not the ledger. The tree survived — as a walk down the book's own classification, where an unsure step becomes the adjuster's question.

Điều bị bỏ là tính cố định, không phải sổ câu hỏi. Cây vẫn tồn tại — để lần theo cách phân loại của sách, nơi mỗi bước không chắc chắn trở thành câu hỏi cho chuyên viên.

09-14 → 09-28
lense가 시작된 이유 Lý do lense bắt đầu · why lense began· vì sao lense ra đời — 2026-09-04

✅ 코드✅ Mã nguồn vlm2/README.md

Phase A 중간 결과: 「도표 0/12, 항목 정확도 베이스라인과 동률, Stage 0이 6/12편에서 접촉을 부정. 현재로선 v1 대비 개선 근거 없음. v1(~/projects/vlm)은 시연 불가 판정. 9/14 KB 데모에 무엇을 쓸지는 이 저장소의 Phase A 결과를 보고 정한다.」

Both VLM paths were judged undemoable on 4 September. The KB demo was the 14th — and lense starts on the 14th.

Cả hai hướng VLM đều bị đánh giá là chưa thể demo vào ngày 4 tháng 9. Demo KB vào ngày 14 — và lense bắt đầu đúng ngày 14.

두 경로 모두 데모를 감당하지 못한다는 판정이 9월 4일에 나왔고, 데모는 9월 14일이었다. 그리고 lense가 9월 14일에 시작한다.

The verdict that neither path could carry the demo came on September 4th; the demo was September 14th. And lense begins on September 14th.

Kết luận cả hai hướng không thể phục vụ demo được đưa ra ngày 4 tháng 9; demo vào 14 tháng 9. lense bắt đầu ngày 14 tháng 9.

09-14 → 09-28
lense — 파이프라인의 끝까지 lense — đi đến cuối chuỗi xử lý · the pipeline, taken all the way· chuỗi xử lý được thực hiện tới cùng

2주, 856 커밋, Python 11만 줄. 에이전트 여섯 트랙 동시 진행 — B 라벨링 · C KB 데모 · D 인프라 · E 차량과 모션 · V VLM 답변 · W 월드맵.

Two weeks, 856 commits, 110k lines of Python, run as six parallel agent tracks. lense was not abandoned because it failed — it was limited by a fixed planner: one VLM prompt per question, no instruments, and no right to say "I can't see that".

Hai tuần, 856 commit, 110k dòng Python, triển khai thành sáu luồng tác nhân song song. lense không bị bỏ vì thất bại — nó bị giới hạn bởi bộ lập kế hoạch cố định: một prompt VLM cho mỗi câu hỏi, không công cụ đo, không được nói "tôi không nhìn thấy".

lense는 실패해서 버려진 게 아니다. 한계는 고정 플래너였다 — 질문마다 VLM 프롬프트 하나, 계측 도구 없음, 「그건 안 보입니다」라고 말할 권리 없음. lense가 남긴 진짜 가치는 코드가 아니라 숫자다 (3장).

lense was not discarded for failing. Its limit was the fixed planner — one VLM prompt per question, no measurement tools, and no right to say "that is not visible". What lense really left behind is not code but numbers (chapter 3).

lense không bị loại vì thất bại. Giới hạn của nó là bộ lập kế hoạch cố định — mỗi câu hỏi một prompt VLM, không công cụ đo và không quyền nói "điều đó không nhìn thấy được". Di sản thực sự của lense không phải mã mà là số liệu (chương 3).

09-17 → 현재 / present09-17 → hiện tại
lense는 언제, 왜 끝났나 lense kết thúc khi nào, vì sao · when lense ended· thời điểm lense kết thúc — 2026-09-23

🗣 전사🗣 Bản chép phiên

트래킹이 실제로 올라와 있는지 확인하라는 지시와 함께 lense를 여기서 끝내기로 했다.

Tracking was to be checked for whether it was even running, and lense was ended at that point.

Đã yêu cầu kiểm tra tính năng theo dõi có thực sự chạy hay không, rồi lense kết thúc tại thời điểm đó.

끝을 선언한 자리가 트래킹이었다 — 3장의 「트래킹+월드맵 M1 0/12」과 같은 곳이다.

그리고 바로 그날, 같은 세션에서 300건 평가 세트가 선정된다:

Và ngay ngày ấy, trong cùng phiên, bộ đánh giá 300 vụ được chọn:

도표마다 10편씩 고르기로 하고, 조건을 함께 정했다 — 1인칭 · 사고당사자 · 사고장면 포함 · 전면부 블랙박스 · 블랙박스 영상을 다시 촬영한 것이 아닐 것. 이것이 앞으로 숫자를 보고할 기준 데이터셋이 된다.

Ten clips per chart, with the conditions set at the same time: first-person view, the recording vehicle a party to the accident, the moment of the accident in frame, a forward dashcam, and not a re-filmed screen. This became the dataset the numbers would be reported against.

Mười clip cho mỗi biểu đồ, đồng thời đặt điều kiện: góc nhìn thứ nhất, xe ghi hình tham gia tai nạn, khoảnh khắc tai nạn nằm trong khung hình, camera trước, không quay lại từ màn hình. Đây trở thành bộ dữ liệu dùng để báo cáo các con số.

다섯 가지 선정 조건은 Ian이 정했고, 이 평가 세트는 lense에서 만들어져 visus로 넘어왔다.

범위는 9월 14일에 이미 정해져 있었다 — 중복 영상은 평가 세트에서 빼고, 타사 블랙박스와 후면 카메라는 과제 범위 밖으로 정해졌다. 중복 제거가 이때 지시되었고, 그 중복 중 9쌍이 서로 다른 주석을 달고 있다는 것이 뒤에 드러난다.

The scope was already fixed on September 14th — duplicates were to come out of the testing set, and third-party dashcams and rear cameras were out of scope. De-duplication was ordered then, and it emerges later that 9 of those duplicate pairs carry conflicting annotations.

Phạm vi đã cố định từ ngày 14 tháng 9 — loại clip trùng khỏi tập kiểm thử, camera xe thứ ba và camera sau nằm ngoài phạm vi. Việc khử trùng được yêu cầu khi đó, sau này phát hiện 9 cặp trùng mang nhãn mâu thuẫn.

09-17 → 현재 / present09-17 → hiện tại
visus — 에이전트로 다시 visus — xây lại bằng tác nhân AI · the agentic rebuild· xây lại theo hướng tác nhân

전환점은 E-V-001 골드셋 감사였다. 48개 클립을 블라인드로 읽혔더니 라벨과 50% 일치했고, 2차 판독에서 라벨의 약 17%가 틀렸을 가능성이 드러났다. 그런데 그 감사를 수행한 것은 파이프라인이 아니었다:

The turning point was the E-V-001 gold-set audit. Forty-eight clips read blind agreed with the labels 50% of the time, and a second reading suggested about 17% of the labels were themselves wrong. But it was not the pipeline that carried out that audit:

Bước ngoặt là cuộc kiểm tra tập chuẩn E-V-001. Đọc mù 48 clip chỉ đồng ý với nhãn 50%, lần đọc thứ hai cho thấy khoảng 17% nhãn có thể tự chúng đã sai. Tuy nhiên cuộc kiểm tra ấy không do chuỗi xử lý thực hiện:

🗣 visus는 32분 만에 결정되었다visus was decided in 32 minutesQuyết định về visus được đưa ra trong 32 phút

레포에는 V-D1「visus는 새 프로젝트다」라는 결과만 있다. 원인은 세션 기록에만 있고, 지표가 아니라 인식의 전환이었다. 2026-09-17 아침:

The repo holds only the outcome, V-D1 "visus is a new project". The cause is in the transcripts alone, and it was not a metric but a change of mind. The morning of 2026-09-17:

Kho mã chỉ lưu kết quả, V-D1 "visus là dự án mới". Nguyên nhân chỉ nằm trong bản chép phiên, không phải một chỉ số mà là thay đổi quan điểm. Sáng 2026-09-17:

00:25무엇으로 확인하고 있는지, 그것이 서브에이전트 판독보다 더 정확하다고 말할 근거가 무엇인지what the confirmation actually rests on, and why it would be more accurate than the subagents’ readingsviệc xác nhận thực sự dựa vào đâu, vì sao chính xác hơn cách đọc của các tác nhân phụ
00:29이런 식의 검증과 단계가 지금 설계보다 낫지 않은가 — 더 에이전트적인 방식 아닌가whether that kind of verification is simply better than the current design — a more agentic way of getting thereliệu kiểu kiểm chứng ấy có đơn giản là tốt hơn thiết kế hiện tại — một cách đạt kết quả thiên về tác nhân hơn
00:53제약이 없다면 그렇게 설계하겠는가 — 제대로 시험된 적 없는 컴파일된 로직을 그래도 쓰겠는가whether this is how it would be designed with no constraints — and whether compiled logic never properly tested would still be usednếu không có ràng buộc, liệu có thiết kế như vậy không — và có còn dùng logic biên dịch chưa từng được kiểm tra đúng nghĩa không
00:57→ → "since this deviates largely from the architecture and decisions we've made so far, could you create a new ~/project/visus"“Vì cách này khác khá xa kiến trúc và các quyết định đã thống nhất, hãy tạo dự án mới tại ~/project/visus.”

그리고 그 자리에서 V-D9가 될 원칙이 나온다 — lense에서 한 작업을 쓰는 것은 괜찮지만, 앞선 문서와 결정이 더 나은 선택을 가로막아서는 안 된다는 것이다. 모델이 사용자의 말에 끌려가는 경향을 감안해 판단의 여지를 넓게 두기로 했다.

The principle that became V-D9 was set there: using the work done on lense is fine, but earlier documents and decisions must not crowd out a better choice. Knowing that a model tends to follow whatever it is told, the judgement was deliberately left wide.

Nguyên tắc sau này thành V-D9 được đặt ra lúc ấy: có thể dùng lại công việc trên lense, nhưng tài liệu và quyết định cũ không được lấn át lựa chọn tốt hơn. Biết mô hình có xu hướng làm theo bất cứ điều gì được bảo, phạm vi phán đoán được cố ý để mở.

⚠️ 그리고 정직하게 적어 둘 것 하나: 이 결정을 정당화한 숫자 E-V-002(라벨러 자신의 사실로 구동해도 컴파일된 엔진이 정답 도표를 3.7% 배제, 틀린 사실로는 5.9%)는 결정 다음 날 아침에 나왔다. 원장에는 실험으로 남아 있지만, 그것이 결정을 뒤따라 만들어졌다는 사실은 남아 있지 않다.

The number that made this defensible — E-V-002 — came the next morning. The ledger records it as an experiment; it does not record that it was constructed after the decision, to justify it.

Con số khiến quyết định này có cơ sở — E-V-002 — chỉ có vào sáng hôm sau. Sổ ghi đó là thí nghiệm nhưng không ghi nó được thực hiện sau quyết định để chứng minh cho quyết định ấy.

"it was a worker with a scratchpad, tools, parallel blind readers, a second look, and the honesty to say 'not determinable'."“Đó là một worker có vùng ghi nháp, công cụ, các bộ phân tích độc lập chạy song song, một lượt xem lại, và sự trung thực để nói ‘không thể xác định’.”

스크래치패드를 든 작업자, 도구, 서로를 모르는 병렬 판독자, 두 번째 확인, 그리고 「판단 불가」라고 말하는 정직함.

Người làm việc có sổ nháp, công cụ, các bộ đọc song song không biết kết quả của nhau, lần kiểm tra thứ hai, và sự trung thực khi nói "không thể xác định".

visus는 그 관찰을 설계로 바꾼 것이다 — 사건 하나가 작업 디렉터리, 방법은 텍스트로 된 스킬, 도구는 실행 가능한 코드, 모든 단계는 조사자가 볼 수 있는 trace 한 줄.

visus is that observation turned into architecture: a case is a directory, the method is skills as text, tools are runnable code, and every step is a trace row the adjuster can read.

visus biến quan sát đó thành kiến trúc: vụ việc là một thư mục, phương pháp là skill dạng văn bản, công cụ là mã chạy được, mỗi bước là một dòng nhật ký chuyên viên có thể đọc.

🗣 범위가 왜 그렇게 움직였나why the scope movedvì sao phạm vi thay đổi

범위는 2026-09-23에 고객(KB손해보험)과 다시 합의되었다 — 기간·기능·대상을 함께 조정했다.

The scope was renegotiated with the client on 2026-09-23 — dates, functionality and coverage adjusted together.

Phạm vi được thương lượng lại với khách hàng ngày 2026-09-23 — điều chỉnh đồng thời lịch trình, chức năng và phạm vi bao phủ.

이 한 문장이 계보 전체의 범위 변경을 설명한다 — 다섯 개 산출물 중 D4 약도를 만들지 않기로 한 것, 도표 자동 특정을 데모에서 빼기로 했던 것, 평가 세트를 300건으로 좁힌 것이 전부 고객과 다시 합의한 결과이지 기술적 선택만은 아니다.

The scope changes across this lineage were renegotiated with the client, not merely chosen on technical grounds.

Những thay đổi phạm vi trong quá trình này đều được thương lượng lại với khách hàng, không chỉ do lựa chọn kỹ thuật.

⭐ 이 장은 「무엇이 있었나」이고, 각 프로젝트를 코드로 열어 본 것은 8장이다 — §8.1 question-ledger · §8.2 fault-lab · §8.3 lense CV · §8.5 ams-demo-0 · §8.6 knia-dag. 그 프로젝트들이 쓰거나 버린 모델과 논문은 9장에 있다.

⭐ This chapter is what existed. Chapter 8 opens each of these repositories and reads the code — §8.1 question-ledger, §8.2 fault-lab, §8.3 the lense CV chain, §8.5 ams-demo-0, §8.6 knia-dag — and chapter 9 holds the models and papers they used or rejected.

⭐ Chương này nói những gì đã tồn tại. Chương 8 mở từng kho mã và đọc mã nguồn — §8.1 question-ledger, §8.2 fault-lab, §8.3 chuỗi CV lense, §8.5 ams-demo-0, §8.6 knia-dag — còn chương 9 trình bày mô hình, bài báo đã dùng hoặc loại bỏ.

⚠️ 244는 셋이다 — 그리고 셋째가 가장 유용하다there are three 244s — and the third is the useful oneCó ba con số 244 — con số thứ ba mới hữu ích

이 문서는 lense의 244/244(합성 오라클)와 ql-re의 266/266(엔진·API 검사)을 섞지 말라고 적는다. 세 번째가 있다. 같은 질문 집합을 같은 방식으로 채점했을 때 lense의 엔진이 도달한 것은 144/244 = 59%다 — 244/244가 아니다. 그리고 그 부족분의 약 절반은 질문 집합의 어떤 질문으로도 가를 수 없는 도표들이다 — 지각의 결함이 아니라 도표 인코딩의 결함이다.

This document warns not to conflate lense's 244/244 (a synthetic oracle) with ql-re's 266/266 (an engine and API check). There is a third. Scored the same way, lense's own engine reached 144/244 = 59%, not 244/244 — and about half of the shortfall is charts that no question in the set can separate: a defect of the chart encoding, not of perception.

Tài liệu cảnh báo không nhầm 244/244 của lense (đáp án chuẩn tổng hợp) với 266/266 của ql-re (kiểm tra bộ máy và API). Còn một con số thứ ba. Chấm cùng cách, bộ máy riêng của lense chỉ đạt 144/244 = 59%, không phải 244/244 — và khoảng một nửa phần thiếu là các biểu đồ mà không câu hỏi nào trong bộ có thể phân biệt: lỗi mã hóa biểu đồ, không phải tri giác.

⭐ 후임자에게 중요한 이유: 지각을 아무리 고쳐도 그 절반에는 닿지 못한다. 같은 보고의 실제 데이터 두 줄이 규모를 준다 — 저장된 사정사 세션 재생에서 top-1이 라벨과 맞은 것은 53건 중 28건(상위 3개 안에는 38건), 라벨된 클립에 대한 lense 자신의 답(VLM + CV)은 18건 중 4건(상위 3개 안 6건).

⭐ Why it matters to a successor: no amount of perception work reaches that half. Two real-data lines from the same report give the scale — replaying stored adjuster sessions, the top chart matched the label on 28 of 53 (38 of 53 in the top three), and lense's own answers (VLM plus CV) on labelled clips matched on 4 of 18 (6 of 18 in the top three).

⭐ Ý nghĩa với người tiếp nhận: cải thiện tri giác đến đâu cũng không sửa được nửa đó. Hai phép đo dữ liệu thực trong cùng báo cáo cho thấy quy mô — phát lại phiên chuyên viên đã lưu, biểu đồ đứng đầu khớp nhãn ở 28/53 (top ba 38/53); câu trả lời riêng của lense (VLM cộng CV) trên clip có nhãn khớp 4/18 (top ba 6/18).

2.0시도하고 접은 것 — 이유와 함께 · What was tried and dropped, with the reason · Những hướng đã thử rồi bỏ, kèm lý do

계보를 읽는 가장 빠른 방법이다. 각 줄이 한 접근을 실제로 닫았고, 이유는 측정 · 자료 · 정답 · 시간 넷 중 하나다 (§3.1의 A·B·C·D). 측정으로 닫힌 것만 다시 하지 말 것 — 나머지는 열려 있다.

The fastest way to read this lineage. Each row closed one approach, and the reason is always one of four: a measurement, missing data, missing ground truth, or time (§3.1's A/B/C/D). Only the ones closed by measurement should stay closed.

Cách nhanh nhất để đọc quá trình phát triển. Mỗi hàng khép lại một hướng, lý do luôn thuộc bốn nhóm: kết quả đo, thiếu dữ liệu, thiếu nhãn chuẩn hoặc thời gian (A/B/C/D ở §3.1). Chỉ các hướng bị loại bằng phép đo mới nên tiếp tục đóng.

무엇whathướng thử무슨 일이 있었나what happenedkết quả왜 멈췄나whylý do
규칙 엔진 + 질문 원장 + 플래너를 구동체로the rule engine as the driverdùng bộ máy quy tắc dẫn dắtE-V-002: 라벨러 자신의 사실을 먹여도 컴파일된 엔진이 정답 도표를 3.7% 배제했고, 틀린 기동을 먹이면 5.9% — 2포인트 더 높다fed the labeller's own facts, the compiled engine excluded the labeller's own chart 3.7% of the time — and with a wrong manoeuvre, 5.9%, two points morenhập chính sự kiện của người gán nhãn, bộ máy biên dịch loại chính biểu đồ của họ trong 3.7% trường hợp — với động tác sai, tỷ lệ là 5.9%, nhiều hơn hai điểm측정 + 정의measurementkết quả đo
자유 모드 — 에이전트가 볼 곳을 스스로 정함free modechế độ tự doE-V-003 Fable 33% · E-V-004 qwen3-vl 8% = 기저율. 그 다음 v1 1/10 · v2 0/10 · v3(고정 6단계) 4/10then v1 1/10, v2 0/10, and v3 with six fixed steps 4/10sau đó v1 1/10, v2 0/10, còn v3 với sáu bước cố định đạt 4/10측정measurementkết quả đo
HD 지도 · GPS 궤적 겹치기HD map and GPS overlaychồng bản đồ HD và GPS몇 주 동안 정렬 실패 — 엉뚱한 교차로, 축척 불일치, GPS 드리프트, 중앙선 반대편에 그려진 궤적weeks of alignment failures — wrong junction, scale mismatch, drift, the trajectory drawn on the wrong side of the centre linenhiều tuần căn chỉnh thất bại — nhầm giao lộ, sai tỷ lệ, trôi, quỹ đạo vẽ sai phía vạch tim đường자료 + 시간data + timedữ liệu + thời gian
🗣 「hd map이 모든 곳을 덮지 않고, 그 영상은 GPS가 찍힌 것을 손으로 고른 것이다」"Bản đồ HD không phủ mọi nơi; video ấy là clip có GPS được chọn thủ công"
정적 BEV — 「자차가 도로를 칠한다」a static BEV mapbản đồ BEV tĩnh여러 번 요청됐고 끝내 나오지 않았다 — 매번 프레임마다 자차 고정 BEV가 나왔지 지속되는 2D 지도가 아니었다asked for repeatedly and never delivered — every attempt produced a per-frame ego-fixed BEV instead of a persistent mapđược yêu cầu nhiều lần nhưng chưa bao giờ có — mỗi lần đều tạo BEV theo từng khung hình gắn với xe, thay vì bản đồ bền vững기술 · 미해결technical, unresolvedkỹ thuật, chưa giải quyết
attention으로 상대차 찾기attention as a counterpart priordùng attention làm ưu tiên xác định xe đối phương크기를 정규화하면 0/12, 안 하면 7/10 — 그런데 그것은 「큰 박스가 이긴다」와 같은 말이었다(면적만 적분해도 6/10으로 동일)size-normalised it scores 0/12; un-normalised 7/10 — which is the same as "the biggest box wins"chuẩn hóa theo kích thước đạt 0/12; không chuẩn hóa đạt 7/10 — tương đương "hộp lớn nhất thắng"측정measurementkết quả đo
그리고 진짜 병목이 드러났다 — 12클립 중 3클립은 접촉 1초 안에 상대차 박스가 아예 없다Nút thắt thật xuất hiện — 3/12 clip không hề có hộp xe đối phương trong vòng 1 giây quanh tiếp xúc
단안 미터 깊이monocular metric depthđộ sâu theo mét từ camera đơn네 모델 모두 점선 길이 검증 ≤ 1/6 통과all four models passed the dashed-line check on 1 of 6 or fewercả bốn mô hình đều qua kiểm tra vạch đứt ở tối đa 1/6 trường hợp측정 — 「미터 불가」measurement — metres are not recoverablekết quả đo — không khôi phục được mét
Cosmos Reason 2/3Cosmos Reason 2/3진로변경을 좌/우회전으로, 「정지 중」을 「정지함」으로 읽었다 — 어휘가 우리 온톨로지와 어긋났다read a lane change as a left or right turn, and "stopping" as "stopped" — its vocabulary did not match oursđọc chuyển làn thành rẽ trái/phải, đọc "đang dừng" thành "đã dừng" — hệ thuật ngữ không khớp với ta측정 + 온톨로지 불일치measurement + ontology mismatchkết quả đo + lệch hệ khái niệm
대화형 다중 턴 추출conversational multi-turn extractiontrích xuất bằng hội thoại nhiều lượt🗣 「첫 턴엔 충돌이 없다고 하고, 다른 턴에선 충돌을 봤다고 한다 … 환각만이 아니라 같은 일을 반복해서 다시 하고 있다」"it contradicts itself … not just hallucinating but redoing the work again and again""nó tự mâu thuẫn… không chỉ bịa mà còn làm đi làm lại cùng công việc"설계 — 측정된 오염에서design, from measured contaminationthiết kế, dựa trên nhiễm bẩn đã đo
Kimi K3 를 공개 모델 권고로làm mô hình công khai được đề xuất공개 모델 중 최고 정확도 62.0%. 그런데 체크포인트가 약 1.56 TB, H100 32장 최소 — 장비비만 100만 달러가 넘는다the best open-weight score at 62.0% — on a ~1.56 TB checkpoint needing at least 32 H100s, over $1M in hardware aloneđiểm mô hình trọng số mở cao nhất 62.0% — checkpoint ~1.56 TB cần ít nhất 32 H100, riêng phần cứng đã hơn $1M비용costchi phí
→ 6%p 낮은 Gemma 4 31B를 권고→ recommend Gemma 4 31B, 6 points lower→ đề xuất Gemma 4 31B, thấp hơn 6 điểm
비평자(critic) 에이전트the critic agenttác nhân phản biện🚨 첫날 설계되어 v1·v2에 붙었고, v3에는 없다. 그리고 어느 쪽에서도 측정된 적이 없다. 하는 일은 런타임 바운스와 모순 조항 규칙이 조용히 대신했다designed on day one, wired into v1 and v2, absent from v3, and never measured in either — its job was quietly taken over by runtime bouncesthiết kế từ ngày đầu, nối vào v1 và v2, vắng trong v3, chưa từng được đo ở cả hai — nhiệm vụ âm thầm chuyển cho cơ chế trả lại khi chạy🚨 결정이 아니라 표류drift, not a decisiontrôi thiết kế, không phải quyết định
CLAUDE.md는 아직 「보여 주기 전에 비평자」라고 약속한다CLAUDE.md vẫn hứa "phản biện trước khi hiển thị"
Ian이 직접 CV 이벤트를 라벨링hand-labelling CV eventsgán nhãn thủ công các sự kiện CV🗣 CV 방법을 만들고 평가하려면 반드시 있어야 하는 라벨인데, 그것을 만드는 데는 사정사의 자격이 필요하고 프로젝트 안에 그 자격이 없었다 — 그래서 접었다the labels are required to build and score a CV method, but producing them needs an adjuster’s standing, which the project did not have — so it was droppednhãn là bắt buộc để xây dựng và chấm phương pháp CV, nhưng tạo chúng cần thẩm quyền của chuyên viên mà dự án không có — nên đã dừng정답 + 자격ground truth + standingnhãn chuẩn + thẩm quyền
5월 MayTháng 57월 JulTháng 78월 AugTháng 89월 SepTháng 910월 OctTháng 10acci-vlmVLM+RAGknia-analysis책 → YAMLsách → YAMLquestion-ledger25 leafknia-dag같은 시도cùng một hướng thửfault-lab가감산yếu tố điều chỉnhnew-knia리서치 17편17 nghiên cứuams-demo-0데모demolenseCVvisus출하đưa vào sử dụng규칙 엔진 계보는 네 단계다 — knia-analysis → knia-dag → resolve-questions → ams-demo-0.The rulebook lineage is four deep — knia-analysis → knia-dag → resolve-questions → ams-demo-0.Chuỗi kế thừa sách quy tắc có bốn tầng — knia-analysis → knia-dag → resolve-questions → ams-demo-0.visus는 새 프로젝트로 시작했고(V-D1) 코드가 아니라 숫자와 교훈을 물려받았다 — 단 lense의 CV 체인만은 그대로 내장(vendoring)되어 지금도 돌아간다.visus started fresh (V-D1) and inherited numbers and lessons, not code — except lense’s CV chain, which is vendored and still runs.visus bắt đầu mới (V-D1), kế thừa số liệu và bài học thay vì mã — ngoại trừ chuỗi CV của lense được nhúng và vẫn đang chạy.

그림 5. 계보. 같은 문제를 규칙 엔진 → 질문 원장 → 에이전트로 세 번 풀었고, 판정 쪽과 지각 쪽 두 줄기가 나란히 달렸다.Figure 5. The lineage — the same problem attacked three ways (rule engine → question ledger → agent), along a decision track and a perception track.Hình 5. Quá trình phát triển — ba cách giải cùng bài toán (bộ máy quy tắc → sổ câu hỏi → tác nhân), theo một luồng quyết định và một luồng tri giác.

2.1한 장으로 보는 계보 · The arc in one table · Toàn bộ quá trình trong một bảng

시기whenthời gian프로젝트projectdự án증명한 것 · what it provedđã chứng minh điều gì
05-14CarAccident사실 → 비율은 이미 풀려 있었다. 전제는 「사람이 깨끗하게 입력한다」facts→ratio was already solved; it assumes a human types the factssự kiện→tỷ lệ đã được giải; giả định con người nhập sự kiện
06-29blackbox-pi비식별은 연구가 아니라 데이터 접근 조건redaction was the price of the datache thông tin là điều kiện để nhận dữ liệu
07-06acci-vlm자차는 안 보인다 · A/B는 뒤집힌다 · 병목은 지각ego is invisible · A/B flips · perception is the bottleneckkhông thấy xe mình · đảo A/B · tri giác là nút thắt
07-08knia-analysis책은 데이터가 된다 — 단, 표는 이미지에서 읽어야the book can become data — but tables must be read from imagescó thể chuyển sách thành dữ liệu — nhưng bảng phải đọc từ ảnh
07-15ams-demo-0질문 원장 자체에도 오류가 있다the question ledger itself carries errorschính sổ câu hỏi cũng có lỗi
08-24new-knia도표가 아니라 질문을 만들어라 · 17편의 perception 리서치generate questions, not chartstạo câu hỏi thay vì biểu đồ
08-26hd-map약도에는 위치·GPS·카메라 파라미터가 전부 필요하다the diagram needs location, GPS and intrinsics — all absentsơ đồ cần vị trí, GPS, thông số nội tại — đều thiếu
08-31knia-api책 → JSON (도표 201 · 결정문 2,460)the book as JSONsách dưới dạng JSON
09-08cv-processingCV로 뽑을 수 있는 것과 없는 것 — 파라미터 부재가 전부를 막는다what CV can and cannot extract without intrinsicsCV có và không thể trích gì khi thiếu thông số nội tại
09-13question-ledger244/244 합성 · 14.4% 실제244/244 synthetic · 14.4% on real clips244/244 tổng hợp · 14.4% trên clip thực
09-14lense파이프라인의 한계를 숫자로 확정pinned the pipeline's limits with numbersđịnh lượng giới hạn chuỗi xử lý
09-17visus워크스페이스 + 스킬 + 도구 + 블라인드 판독 + 판단 불가workspace, skills, tools, blind readers, 판단 불가không gian làm việc, skill, công cụ, bộ đọc mù, không thể xác định

2.2⭐ 물려받은 스키마 — 무엇이 이미 풀려 있었고, 어디가 비어 있었나 · The inherited schema, and the five holes that set the next five months · Lược đồ kế thừa và năm khoảng trống định hình năm tháng tiếp theo

이 절은 이 문서에서 가장 중요한 인과 사슬이다. 그 다음에 온 모든 것 — 질문 원장, CV 도구, 에이전트 판독 — 이 여기서 비어 있던 칸을 메우려는 시도였기 때문이다.

This section is the most important causal chain in the document. Everything that came after — the question ledger, the CV tools, agentic reading — was an attempt to fill a hole that is visible right here.

Đây là chuỗi nguyên nhân quan trọng nhất trong tài liệu. Mọi thứ về sau — sổ câu hỏi, công cụ CV, cách đọc bằng tác nhân — đều là nỗ lực lấp khoảng trống có thể nhìn thấy ngay tại đây.

물려받은 것 — 실제 스키마What was inherited — the actual schemaNhững gì được kế thừa — lược đồ thực tế

CarAccident는 FastAPI 규칙 엔진이고, 「사실 → 비율」은 이미 풀고 있었다. 입력은 차량당 필드 열세 개짜리 VehicleInput 하나다.

CarAccident is a FastAPI rules engine, and it already solved facts → ratio. Its input is one VehicleInput per vehicle, thirteen fields wide.

CarAccident là bộ máy quy tắc FastAPI, đã giải được sự kiện → tỷ lệ. Đầu vào gồm một VehicleInput cho mỗi xe, với mười ba trường.

필드fieldtrường허용값 (실제)the actual allowed valuescác giá trị thực sự được phép
direction 필수requiredbắt buộc직진 · 좌회전 · 우회전 · 유턴 · 합류 · 정지 · 회전 · đi thẳng · rẽ trái · rẽ phải · quay đầu · nhập làn · dừng · quay · 출차rời chỗ đỗ · 후진 · lùi — 그리고 슬래시 합성 4개— plus 4 slash composites— cộng 4 giá trị ghép bằng dấu gạch chéo: 직진/좌회전 · 좌회전/우회전 · 좌회전/유턴 · 직진/우회전 : đi thẳng/rẽ trái · rẽ trái/rẽ phải · rẽ trái/quay đầu · đi thẳng/rẽ phải (총 13개)(13 in all)(tổng cộng 13)
accident_type신호위반 · 진로변경 · 추월 · 중앙선침범 · 후방추돌 · 문열림 · 낙하물 · 도로진입 · 보도횡단 · 주차 · 출차 · 측면충돌 · 합류vi phạm tín hiệu · chuyển làn · vượt xe · lấn vạch tim đường · đâm từ phía sau · mở cửa · vật rơi · vào đường · băng qua vỉa hè · đỗ xe · rời chỗ đỗ · va chạm bên hông · nhập làn
violation신호위반 · 중앙선침범 · 진로변경위반 · 진로변경방법위반 · 노면표시위반 · 일시정지위반 · 일시정지불이행 · 추월위반 · 진로양보위반 · 안전거리미확보 · 갓길통행위반 · 보도주행위반 · 서행불이행 · 주정차위반 · 일방통행위반 · 급유턴 · 동시유턴 · 적재물불량 · vi phạm tín hiệu · lấn vạch tim đường · vi phạm chuyển làn · vi phạm cách chuyển làn · vi phạm vạch đường · vi phạm dừng tạm thời · không thực hiện dừng tạm thời · vi phạm vượt xe · vi phạm nhường đường · không giữ khoảng cách an toàn · đi sai trên lề đường · đi trên vỉa hè · không giảm tốc · vi phạm dừng/đỗ · vi phạm đường một chiều · quay đầu gấp · quay đầu đồng thời · hàng chở không an toàn · 안전운전의무위반vi phạm nghĩa vụ lái xe an toàn · 안전확인불이행không kiểm tra an toàn · 진행방해cản trở lưu thông — 그리고 슬래시 합성 4개, 총 25개— plus 4 slash composites, 25 in all— cộng 4 giá trị ghép bằng dấu gạch chéo, tổng cộng 25
entry_order선행 · 후행 · 선진입 · 후진입 · 동시진입 · 도로진입 · 역주행đi trước · đi sau · vào trước · vào sau · vào đồng thời · vào đường · đi ngược chiều
traffic_signal녹색 · 적색 · 황색 · 녹색/좌회전 · 좌회전 · 적색/좌회전 · 적색점멸 · 황색점멸 · 보행자적색xanh · đỏ · vàng · xanh/rẽ trái · rẽ trái · đỏ/rẽ trái · đỏ nhấp nháy · vàng nhấp nháy · đèn đỏ người đi bộ
나머지the restphần còn lạivehicle_type · safety_sign · relative_position · road_condition · road_marking · road_type · key_point · factors

이 모양을 먼저 보아야 한다 — 필드마다 값은 하나고, 시간축이 없고, 두 차량분을 한 번에 다 채운다.

Look at the shape before the contents: each field holds one value, there is no time axis, and both vehicles are filled in a single pass.

Nhìn cấu trúc trước nội dung: mỗi trường chứa một giá trị, không có trục thời gian, cả hai xe được điền trong một lượt.

① 사건을 담을 수 없다 — 가장 비싼 구멍① It cannot hold an event — the most expensive hole① Không thể biểu diễn một chuỗi sự kiện — khoảng trống đắt giá nhất

direction은 값 하나다. 그런데 실제 사고는 순서로 일어난다 — 「정차했다가 출발」은 정지도 아니고 직진도 아니다. 이 열거에는 그 값이 없다.

direction takes one value. But accidents happen in sequence — "stopped, then pulled away" is neither 정지 nor 직진. The enum has no value for it.

direction chỉ nhận một giá trị. Nhưng tai nạn diễn ra theo trình tự — "đã dừng rồi khởi hành" không phải 정지 cũng không phải 직진. Danh sách giá trị không có lựa chọn này.

이것은 사소한 빈칸이 아니다 — 책에 그 이름의 도표 계열이 있다. 차47-1 「정차 후 출발 대 직진」, 차47-2 「정차 후 출발 대 진로변경」. 그리고 300건 평가에서 차47-1은 「집중 개선 5개」 가장 나쁜 등급에 있고(10건 중 5), 차47-2는 중간 등급(7)이다. 표현할 수 없는 사실이 가장 못 맞히는 도표와 정확히 같은 자리에 있다.

This is not a trivial gap — the book has a whole chart family named after it. 차47-1 "stop-then-go versus a car going straight", 차47-2 "stop-then-go versus a lane change". In the 300-case evaluation 차47-1 sits in the worst tier ("needs focused work", 5 of 10) and 차47-2 in the middle (7). The fact that cannot be expressed is in exactly the same place as the charts that score worst.

Đây không phải thiếu sót nhỏ — cả một nhóm biểu đồ trong sách mang tên tình huống đó. 차47-1 "dừng rồi đi gặp xe đi thẳng", 차47-2 "dừng rồi đi gặp xe chuyển làn". Trong đánh giá 300 vụ, 차47-1 ở nhóm kém nhất ("cần tập trung cải thiện", 5/10), 차47-2 ở nhóm giữa (7). Sự kiện không biểu diễn được nằm đúng ở những biểu đồ có kết quả kém nhất.

그리고 이 빈칸은 지금도 안 메워졌다. §3.3이 적어 둔 대로 v3 판독기의 어휘에도 「정차 후 출발」은 없다. 지금 visus가 그 계열을 맞히는 방법은 — 영상을 읽어서가 아니라 사정사가 써 넣은 보고서 문장을 정규식으로 잡아서다.

And the hole is still not filled. As §3.3 records, the v3 reader’s vocabulary has no "stop-then-go" either. The way visus reaches that family today is not by reading the video but by matching a regex against the sentence the adjuster typed.

Và khoảng trống vẫn chưa được lấp. Theo §3.3, hệ thuật ngữ của bộ đọc v3 cũng không có "dừng rồi đi". Hiện nay visus tới nhóm biểu đồ đó không phải bằng đọc video mà bằng regex khớp câu chuyên viên nhập.

routing.py  —  ("stop_then_go", re.compile(r"(주)?정차\s*(후|하였다가|했다가|하다가|상태에서|중)\s*출발|정차후\s*출발"), [SAME_DIR, …])
LEAF_RULES["stop_then_go"]  —  「차선|진로|차로 변경」 → 차47-2   ·   「교차로|사거리|삼거리」 → 차47-1

⭐ 이것이 §5.6의 26%를 설명한다. 영상만으로는 말할 수 없는 사실을 보고서 텍스트가 대신 주고 있었다. 보고서를 빼면 성적이 무너지는 것은 모델이 약해서가 아니라 그 문장이 없어졌기 때문이다.

⭐ This is what explains the 26% in §5.6. A fact the video cannot express was being supplied by the report text instead. Take the report away and the score collapses — not because the model got weaker, but because that sentence is gone.

⭐ Đây là lời giải thích cho 26% ở §5.6. Một sự kiện video không thể biểu đạt được văn bản báo cáo cung cấp thay. Bỏ báo cáo, kết quả sụt mạnh — không phải mô hình yếu đi mà vì câu ấy đã mất.

⭐ 증명 — 같은 사고 하나를, 스키마가 허락하는 세 가지로 적어 봤다proof — one accident, written the only three ways the schema allowsBằng chứng — một tai nạn được viết theo đúng ba cách lược đồ cho phép

이것은 추론이 아니라 실제로 매처를 돌려 본 결과다. 사고는 하나다 — 고객차가 길가에 정차해 있다가 출발했고, 상대차가 지나가고 있었다. direction은 값을 하나만 받으므로, 이 사고를 적는 방법은 세 가지뿐이다.

This is not an inference — the real matcher was run. One accident: our customer was stopped at the kerb, then pulled away, while the other car was passing. Since direction takes a single value, there are exactly three ways to write it down.

Đây không phải suy đoán — đã chạy bộ so khớp thật. Một tai nạn: xe khách hàng dừng sát lề rồi khởi hành, trong khi xe đối phương đi ngang qua. Vì direction chỉ nhận một giá trị, có đúng ba cách viết lại tình huống.

한 단어the one wordmột từ được chọn엔진이 고른 도표the chart the engine picksbiểu đồ bộ máy chọn고객차 과실our customer’s faulttỷ lệ lỗi xe khách hàng
정지 dừng (멈춰 있었다)(was stopped)(đã dừng)차42-20 : 100
직진 đi thẳng (가고 있었다)(was going)(đang chạy)후보 15개, 차47 계열은 아예 없다; 1순위 차41-115 candidates, no 차47 at all; top-ranked 차41-115 ứng viên, không có 차47; đứng đầu là 차41-1100 : 0
출차 rời chỗ đỗ (가장 가까운 값)(the nearest value)(giá trị gần nhất)차47-270 : 30

🚨 같은 사고에서 고객 과실이 0% · 70% · 100%로 나온다. 바뀐 것은 한 칸에 적은 단어 하나뿐이다. ⭐ 그리고 셋 중 어느 것도 거짓말이 아니다 — 사고의 한 국면씩은 전부 맞다. 틀린 것은 국면 하나를 사고 전체로 적게 만드는 칸 자체다. 「사건을 담을 수 없다」가 비용으로 환산되면 이 표다.

🚨 The same accident yields 0%, 70% and 100% customer fault. All that changed is one word in one field. ⭐ And none of the three is a lie — each is a true description of one phase of the accident. What is wrong is the field that forces a phase to stand for the whole event. This table is what "it cannot hold an event" costs.

🚨 Cùng một tai nạn tạo ra tỷ lệ lỗi khách hàng 0%, 70% và 100%. Chỉ thay đổi một từ trong một trường. ⭐ Không cách nào trong ba cách là nói sai — mỗi cách mô tả đúng một giai đoạn của tai nạn. Sai nằm ở trường buộc một giai đoạn đại diện cho toàn bộ sự kiện. Bảng này cho thấy cái giá của việc "không thể biểu diễn sự kiện".

가장 가까운 값조차 다른 뜻이다even the nearest value means something elsengay cả giá trị gần nhất cũng mang nghĩa khác스키마가 출차를 직접 정의한다 — "Exiting from parking spot". 주차면에서 빠져나오는 것이지 「정차했다가 출발」이 아니다. 그런데 차47 계열에 닿는 유일한 값이라 그렇게 쓰이게 된다the schema defines 출차 itself: "Exiting from parking spot" — pulling out of a parking bay, not "stopped, then moved off". But it is the only value that reaches the 차47 family, so that is what it gets used forlược đồ tự định nghĩa 출차: "Exiting from parking spot" — rời khỏi ô đỗ xe, không phải "đã dừng rồi khởi hành". Nhưng đó là giá trị duy nhất dẫn tới nhóm 차47, nên nó bị dùng cho tình huống ấy
순서를 적을 칸은 있다 — 매칭에서 제외된다there is a field for the sequence — and it is excluded from matchingcó trường lưu trình tự — nhưng bị loại khỏi so khớp🚨 사건의 순서는 key_point에 살아남는다. 그런데 service.py:43-44가 그 필드를 매칭 대상에서 명시적으로 뺀다. 순서는 기록되지만 판정에 닿지 않는다🚨 the ordering does survive, in key_point. But service.py:43-44 explicitly excludes that field from matching. The sequence is recorded and never reaches the decision🚨 trình tự vẫn còn trong key_point. Nhưng service.py:43-44 chủ động loại trường này khỏi so khớp. Trình tự được lưu nhưng không bao giờ đến bước quyết định
그리고 코드가 「정지」를 적극적으로 지운다and the code actively erases 정지mã còn chủ động xóa trạng thái 정지_normalize_transient_stop(service.py:788-830)은 오직 direction = "정지"를 "직진"으로 제자리에서 덮어쓰기 위해 존재한다 — 상대차 것까지. 일시적인 멈춤이 주행으로 둔갑한다_normalize_transient_stop (service.py:788-830) exists for one purpose: to overwrite direction = "정지" with "직진" in place — including the counterpart’s. A momentary stop is rewritten as travel_normalize_transient_stop (service.py:788-830) chỉ có một mục đích: ghi đè tại chỗ direction = "정지" thành "직진" — kể cả cho xe đối phương. Dừng thoáng qua bị viết lại thành di chuyển
책의 문장도 같은 칸에 구겨 넣었다the book’s own sentence was crammed into the same fieldcâu trong sách cũng bị nhét vào cùng trường ấy차41-1의 「앞차가 정지한 직후를 포함」이 사례표에 직진/정지로 들어가 있다. 매처는 그것을 「둘 중 하나」로 읽는다 — 「하나 다음에 다른 하나」로는 절대 읽지 못한다차41-1’s "including just after the car ahead stopped" is stored in the case table as 직진/정지. The matcher reads that as a disjunction — and never as an orderingCụm "kể cả ngay sau khi xe trước dừng" của 차41-1 được lưu trong bảng trường hợp thành 직진/정지. Bộ so khớp đọc nó là phép HOẶC — không bao giờ là trình tự
⭐ 그리고 역할이 뒤집히는 문제를 CarAccident가 이미 알고 있었다 — 코드에 교정기가 있다and CarAccident already knew about role inversion — there is a corrector in the codeCarAccident đã biết lỗi đảo vai trò — trong mã có bộ sửa

매처는 A↔B를 스스로 재배정한다(service.py:352-355가 A↔B를 먼저, 그 다음 B↔A를 시도하고 이긴 쪽 행에서 기본 비율을 읽는다). 그리고 LLM 경로에는 역할 뒤집힘 교정기가 따로 붙어 있다 — _enforce_my_side_by_role(llm_fault_ratio.py:542-561)이 my_base > 50이 한국어 키워드 목록과 맞을 때까지 A/B를 바꿔 끼운다. 키워드는 "추돌함" · "들이받" · "박았" 같은 부분 문자열이다.

The matcher reassigns A↔B itself (service.py:352-355 tries A↔B then B↔A and reads the base ratio off whichever row won). And the LLM path carries a separate role-inversion corrector — _enforce_my_side_by_role (llm_fault_ratio.py:542-561) swaps A and B until my_base > 50 agrees with a list of Korean keywords, matched as substrings: "추돌함", "들이받", "박았".

Bộ so khớp tự gán lại A↔B (service.py:352-355 thử A↔B rồi B↔A, đọc tỷ lệ cơ sở từ hàng thắng). Đường xử lý LLM còn có bộ sửa đảo vai trò riêng — _enforce_my_side_by_role (llm_fault_ratio.py:542-561) đổi A và B cho đến khi my_base > 50 khớp danh sách từ khóa Hàn, so theo chuỗi con: "추돌함", "들이받", "박았".

⭐ 이것이 역할 뒤집힘이 알려진 미해결 문제였다는 가장 강한 증거다 — 교정기를 짜 넣었다는 것은 뒤집힌다는 것을 알고 있었다는 뜻이고, 교정 수단이 문장 속 부분 문자열이었다는 것은 구조로는 풀 수 없었다는 뜻이다. §2.1의 「A와 B는 차가 아니라 도표 위의 자리」라는 규율이 왜 visus에서 그렇게 엄격한지가 여기 있다.

⭐ This is the strongest evidence that role inversion was a known, unsolved failure. Writing a corrector means knowing it inverts; correcting it by substring match on a sentence means it could not be solved structurally. It is why §2.1’s rule — A and B are positions on the chart, not vehicles — is held so strictly in visus.

⭐ Đây là bằng chứng rõ nhất rằng đảo vai trò là lỗi đã biết nhưng chưa giải quyết. Viết bộ sửa nghĩa là biết nó bị đảo; sửa bằng khớp chuỗi con trong một câu nghĩa là chưa giải được bằng cấu trúc. Vì vậy visus giữ chặt quy tắc §2.1 — A và B là vị trí trên biểu đồ, không phải danh tính xe.

② 사실이 아니라 법적 결론을 묻는다② It asks for a legal conclusion, not a fact② Yêu cầu kết luận pháp lý thay vì sự kiện quan sát

violation의 허용값은 전부 법규 위반의 이름이다 — 신호위반, 안전거리미확보, 서행불이행… 「무엇을 보았나」가 아니라 「무슨 법을 어겼는가」를 한 칸에 넣으라는 것이다. 빈칸으로 두면 엔진은 그저 못 맞힌다.

Every allowed value of violation is the name of a statutory breach — running a signal, failing to keep distance, failing to slow. It asks not "what did you see" but "which law was broken", in one field. Leave it blank and the engine simply does not match.

Mọi giá trị của violation đều là tên một hành vi vi phạm luật — vượt tín hiệu, không giữ khoảng cách, không giảm tốc. Nó không hỏi "đã thấy gì" mà hỏi "đã vi phạm luật nào", trong một trường duy nhất. Để trống, bộ máy đơn giản là không khớp.

이것을 영상 모델에게 요구하면 — 교통법규 전부를 알고, 장면에 적용하고, 해석까지 마친 단일 플래그를 내놓으라는 뜻이 된다. 그리고 그렇게 나온 플래그는 내역을 검사할 수 없다 — 왜 그렇게 판단했는지가 값 안에 남지 않는다. visus가 사실과 근거를 분리하고 등급을 붙이는 이유가 정확히 이것이다(§4.0의 여덟 문장을 다시 볼 것).

Ask a vision model for this and you are asking it to know the traffic code, apply it to the scene, and hand back a single interpreted flag. And a flag like that cannot be audited — the reasoning does not survive inside the value. This is precisely why visus separates the fact from its evidence and stamps a tier on it (look again at the eight sentences in §4.0).

Hỏi mô hình thị giác như vậy là yêu cầu nó biết luật giao thông, áp dụng vào cảnh và trả về một cờ đã diễn giải. Cờ ấy không thể kiểm toán — lập luận không được lưu trong giá trị. Đó chính là lý do visus tách sự kiện khỏi bằng chứng và gắn cấp độ nguồn gốc (xem lại tám câu ở §4.0).

③ 시간이 거의 없고, 그나마도 추정된다③ Time barely exists, and what exists is inferred③ Hầu như không có thời gian; phần có được cũng là suy luận

시간을 말하는 필드는 entry_order 하나다(선행/후행/선진입/후진입/동시진입…). 그리고 추출 프롬프트는 그것을 파손 부위에서 역추산한다 — 「옆면을 맞은 차 = 선진입, 들이받은 차 = 후진입」. 관측이 아니라 추론이고, 그 추론이 필드 안에 값으로 주저앉는다.

The only field that speaks about time is entry_order (first/second, leading/following, simultaneous). And the extraction prompt infers it from where the damage is — "the car struck on its flank entered first; the car that struck it entered second". That is an inference, not an observation, and it settles into the field as if it were one.

Trường duy nhất nói về thời gian là entry_order (trước/sau, dẫn trước/theo sau, đồng thời). Prompt trích xuất suy ra nó từ vị trí hư hỏng — "xe bị đâm vào hông vào trước; xe đâm nó vào sau". Đó là suy luận, không phải quan sát, nhưng được ghi vào trường như thể là quan sát.

이것이 §3.3의 「선행/후행」 문제와 같은 뿌리다 — 순서 관계를 한 순간의 값으로 접어 넣으려는 것. 질문 원장도 같은 일을 한다 — q_maneuver의 time_scope는 instant이다(§8.1).

This is the same root as the 선행/후행 problem in §3.3: an ordering relation folded into a single instantaneous value. The question ledger inherited the habit — q_maneuver carries time_scope: instant (§8.1).

Cùng gốc với vấn đề 선행/후행 ở §3.3: quan hệ thứ tự bị thu gọn thành một giá trị tức thời. Sổ câu hỏi kế thừa thói quen ấy — q_maneuver có time_scope: instant (§8.1).

④ 한 번에, 도표와 무관하게, 전부 채운다④ One pass, every field, regardless of the chart④ Một lượt, mọi trường, bất kể biểu đồ

추출은 두 차량의 열세 필드를 한 번에 다 채운다. 어느 도표가 걸리는지와 무관하게 모든 질문에 답하게 된다 — 주차장 사고에도 traffic_signal이 있고, 후방추돌에도 road_marking이 있다. 쓸모없는 질문에 대한 답도 틀리면 후보를 깎는다.

Extraction fills all thirteen fields for both vehicles in a single pass. Whichever chart is actually in play, every question gets answered — a car-park collision still carries a traffic_signal slot, a rear-end still carries road_marking. And a wrong answer to an irrelevant question still costs you candidates.

Trích xuất điền đủ mười ba trường của cả hai xe trong một lượt. Bất kể biểu đồ đang xét, mọi câu hỏi đều được trả lời — va chạm bãi đỗ vẫn có trường traffic_signal, đâm sau vẫn có road_marking. Trả lời sai câu hỏi không liên quan vẫn làm mất ứng viên.

⭐ 질문 원장이 시작된 이유가 정확히 이것이다. 목표는 세 가지였다 — ① 지금 가장 값어치 있는 질문만 묻는다(남은 후보를 가장 잘 가르는 것), ② 답의 정의를 정해 둔다(값 목록과 관측 규칙), ③ VLM이 실제로 무엇을 답할 수 있는지를 재는 것 — 그래서 질문마다 evidence.difficulty와 sources가 붙어 있다(§8.1).

⭐ This is exactly why the question ledger was started. Three goals: ① ask only the question that is worth most right now — the one that best splits what is left; ② define what an answer may be, with a value list and an observation rule; ③ find out what a VLM can actually answer, which is why every question carries evidence.difficulty and sources (§8.1).

⭐ Đây chính là lý do sổ câu hỏi ra đời. Ba mục tiêu: ① chỉ hỏi câu có giá trị nhất ngay lúc này — câu chia tập còn lại tốt nhất; ② định nghĩa đáp án được phép, với danh sách giá trị và quy tắc quan sát; ③ xác định VLM thực sự trả lời được gì, nên mỗi câu có evidence.difficulty và sources (§8.1).

⑤ 영상이 아니라 접수 메모를 위해 만들어졌다⑤ It was built for a typed memo, not for video⑤ Được xây cho ghi chú nhập tay, không phải video

추출 프롬프트의 첫 줄은 「보험사 접수 메모(사고내용)를 읽어」다. 입력은 사람이 정리해 타이핑한 문장이고, 그래서 주어 생략 규칙(「주어가 없으면 자차」)과 물리 상식 규칙까지 프롬프트에 들어 있다. acci-vlm이 이것을 한 줄로 정리해 두었다:

The extraction prompt opens with "read the insurer’s intake memo". The input is a sentence a person typed, which is why the prompt also carries a subject-elision rule ("if no actor is named it is our client") and a page of physical common sense. acci-vlm summed it up in one line:

Prompt trích xuất mở đầu bằng "đọc ghi chú tiếp nhận của công ty bảo hiểm". Đầu vào là câu do người gõ, nên prompt còn có quy tắc lược chủ ngữ ("không nêu chủ thể thì là khách hàng bên ta") và một trang kiến thức vật lý thường thức. acci-vlm tóm lại trong một dòng:

"a FastAPI rules engine that assumes clean human-typed features. Our niche = the perception + uncertainty half CarAccident doesn’t do."acci-vlm, 2026-07

"bộ máy quy tắc FastAPI giả định đầu vào là đặc trưng sạch do người nhập. Phần của ta = nửa tri giác + bất định mà CarAccident không làm."acci-vlm, 2026-07

그래서 무엇이 남았나 — 출하 시점에도 풀리지 않은 것들What remained — still unsolved at shipPhần còn lại — vẫn chưa giải xong khi đưa vào sử dụng

정직히 말하면, 위의 구멍 중 완전히 메워진 것은 없다. 어디까지 갔는지만 정확히 적어 둔다.

Honestly: none of the holes above was fully closed. What follows records exactly how far each one got.

Nói thẳng: chưa khoảng trống nào ở trên được lấp hoàn toàn. Phần sau ghi chính xác từng mục đã tiến đến đâu.

남은 문제what is still openviệc còn mở지금 상태where it standstrạng thái
사건의 순서를 담을 수단이 제품에 없다the product has no way to hold a sequence of eventssản phẩm không có cách biểu diễn một chuỗi sự kiện사실은 여전히 한 시점의 단일 값이다. 사건·구간·순서를 담는 표현은 한 사실에 대해서만 만들어졌고 일반화되지 않았다(§3.3). ⭐ 다만 「설계된 적이 없다」는 말은 틀렸다 — §8.1이 보이듯 두 번 설계됐고(CONFLICT를 네 번째 값으로 가진 사건 그래프까지), 검증되지 않았고 이어지지 않았을 뿐이다. 빈 종이가 아니라 시험되지 않은 설계가 기다리고 있다facts are still a single value at a single instant. A representation for events, intervals and ordering was built for one fact only and never generalised (§3.3). ⭐ But "never designed" is the wrong word — as §8.1 shows it was designed twice, down to an event graph carrying CONFLICT as a fourth value; it was never validated and never carried forward. What waits is an untested design, not a blank pagesự kiện vẫn là một giá trị tại một thời điểm. Cách biểu diễn sự kiện, khoảng thời gian và thứ tự chỉ được xây cho một loại sự kiện, chưa tổng quát hóa (§3.3). ⭐ Nhưng nói "chưa từng thiết kế" là sai — §8.1 cho thấy nó đã được thiết kế hai lần, đến mức có đồ thị sự kiện với giá trị thứ tư CONFLICT; nó chưa được kiểm chứng và chưa được kế thừa. Điều đang chờ là thiết kế chưa thử, không phải trang trắng
계열 라우팅이 틀린다cases routed to the wrong familyvụ việc bị đưa vào nhầm nhóm biểu đồ포괄 정규식 둘이 re.compile(r".")로 무조건 매치되고, 그렇게 고른 도표가 by:"adjuster"로 기록돼 다시 검토되지 않는다(§8.7). 🚨 대가가 측정되어 있다 — §8.1의 영상 093은 80점이 뒤집혔고(정차 후 출발 사건이었다), §8.12는 같은 결함을 비율로 쟀다 — 후보들이 같은 비율을 보이는 즉시 멈추면 47.3%가 조용히 틀린다two catch-all regexes match unconditionally, and the chart they pick is recorded as the adjuster’s own choice and never reviewed again (§8.7). 🚨 The cost has been measured: video 093 in §8.1 swung 80 points (it was a stop-then-go), and §8.12 measured the same defect as a rate — stopping as soon as the candidates agree is silently wrong 47.3% of the timehai regex bao quát khớp vô điều kiện, biểu đồ được chọn bị ghi thành lựa chọn của chính chuyên viên và không bao giờ duyệt lại (§8.7). 🚨 Thiệt hại đã được đo: video 093 ở §8.1 lệch 80 điểm (đó là dừng rồi đi); §8.12 đo cùng lỗi dưới dạng tỷ lệ — dừng ngay khi các ứng viên đồng thuận là âm thầm sai trong 47.3% trường hợp
VLM이 어떤 질문을 얼만큼 맞히는지 모른다no per-question VLM accuracykhông có độ chính xác VLM theo từng câu hỏi질문별·도구별 정확도를 재는 실험 E-V-005는 지금도 「계획」 상태다. 질문 원장이 difficulty를 적어 둔 것은 재어서가 아니라 추정이다. ⭐ 앞선 레포도 똑같았고, 그것을 스스로 적어 두었다 — §8.1의 커밋 제목이 「정확도는 측정되지 않았다」이고, 68편을 답한 것은 모델이 아니라 사람이었다E-V-005, the experiment that would measure accuracy per question and per tool, is still marked "planned". The ledger’s difficulty values are estimates, not measurements. ⭐ The repo before it was in the same position and said so — a commit in §8.1 is titled "accuracy is unmeasured", and the 68 videos were answered by a person, not a modelE-V-005, thí nghiệm đo độ chính xác theo câu hỏi và công cụ, vẫn mang trạng thái "planned". Giá trị difficulty trong sổ là ước lượng, không phải phép đo. ⭐ Kho mã tiền nhiệm cũng ở tình trạng ấy và đã nói rõ — một commit ở §8.1 mang tên "độ chính xác chưa được đo"; 68 video do con người trả lời, không phải mô hình
가장 어려운 사실에만 CV 보조를 붙였다CV helpers only where help was needed mostcông cụ CV chỉ được thêm ở nơi cần hỗ trợ nhất자차 heading·상대차 경로·충돌 시점은 도구가 됐고(§4.0), 방향지시등은 끝내 도구가 되지 않았다 — 리서치가 「병목은 모델이 아니라 관측 커버리지」라고 결론했기 때문이다(§9.11). ⚠️ 보정 — 「검출기가 없다」는 틀렸다. new-knia에 knia/perception/lights.py가 있고, 채점된 적도 타임라인에 연결된 적도 없을 뿐이다(§9.5)ego heading, the other car’s path and the impact moment all became tools (§4.0), but the indicator never did — the research concluded the bottleneck there is observation coverage, not the model (§9.11). ⚠️ Correction — "no detector exists" is wrong. new-knia has knia/perception/lights.py; what it never got was a score or a wire into the timeline (§9.5)hướng xe mình, quỹ đạo xe đối phương và thời điểm va chạm đều thành công cụ (§4.0), nhưng đèn báo rẽ chưa có — nghiên cứu kết luận nút thắt ở đây là độ bao phủ quan sát, không phải mô hình (§9.11). ⚠️ Đính chính — nói "không tồn tại bộ phát hiện" là sai. new-knia có knia/perception/lights.py; thứ chưa có là điểm đánh giá và kết nối vào dòng thời gian (§9.5)
CV 자체가 오차를 전파한다CV itself propagates errorbản thân CV cũng lan truyền sai số운영에서 labelled_impact_s는 항상 None이라 충돌 시점이 「길이×0.5」로 정해지고, 프레임·재앵커·상대차 재선택이 전부 그 숫자에 걸린다. E-V-028은 계측이 틀린 시점에 다시 앵커되어 「일치」한다고 적어 둔다(§8.7). 🚨 상류 한 곳이 틀리면 얼마나 번지는지가 §9.10에 숫자로 있다 — 지평선 ±11.3픽셀이 5 m에서 0.23 m, 40 m에서 14.9 m가 된다. 그리고 거기에 조용한 사례가 하나 더 있다 — 클래스 이름 하나가 어긋나 오토바이가 690편에서 0대로 검출됐고, 모든 차로 점유 수치가 그 위에서 계산됐다in production labelled_impact_s is always None, so the impact time becomes "duration × 0.5", and the frame sequence, the re-anchoring window and the counterpart re-pick all hang off it. E-V-028 records that the measurements then re-anchor to the wrong moment and "agree" (§8.7). 🚨 How far one upstream error spreads is quantified in §9.10: ±11.3 px of horizon is 0.23 m at 5 m and 14.9 m at 40 m. And there is a silent instance there too — one mismatched class name meant zero motorcycles were detected across 690 clips, with every lane-occupancy number computed on top of thattrong production, labelled_impact_s luôn là None, nên thời điểm va chạm thành "duration × 0.5"; chuỗi khung hình, cửa sổ tái neo và lần chọn lại xe đối phương đều phụ thuộc nó. E-V-028 ghi nhận các phép đo tái neo về sai thời điểm rồi "đồng ý" với nhau (§8.7). 🚨 Mức lan truyền của một lỗi thượng nguồn được định lượng ở §9.10: chân trời lệch ±11.3 px gây sai số 0.23 m ở 5 m và 14.9 m ở 40 m. Còn một ví dụ âm thầm — tên lớp không khớp khiến không phát hiện xe máy nào trong 690 clip, mọi con số chiếm làn đều tính trên nền đó
카메라 내부·외부 파라미터를 모른다intrinsics and extrinsics are unknownkhông biết thông số nội tại và ngoại tại문헌과 공개 구현은 거의 전부 보정된 카메라나 추가 센서를 전제한다. 소비자 대시캠은 둘 다 없고, 130° 왜곡 렌즈는 그들이 공유하는 핀홀 가정을 깨뜨린다(§9.6). 다만 §9.9가 필요한 것은 초점거리가 아니었다는 것을 보인다. ⭐ 그리고 §9.10이 세 번의 보정 시도를 전부 숫자로 기록해 두었다 — 같은 종류의 대시캠에서 추정 초점거리가 477픽셀에서 5,921픽셀까지 흩어지고, 한 클립 안에서도 173.5픽셀씩 흔들린다. 네 번째로 시도하기 전에 읽을 것nearly all the literature and open-source work assumes a calibrated camera or extra sensors. A consumer dashcam has neither, and a ~130° distorted lens breaks the pinhole assumption they share (§9.6). Though §9.9 shows focal length was never the quantity actually needed. ⭐ And §9.10 records all three calibration attempts as numbers — across the same class of dashcam the estimated focal runs 477 px to 5,921 px, and wanders 173.5 px within a single clip. Read it before attempting a fourthgần như mọi tài liệu và mã nguồn mở đều giả định camera đã hiệu chuẩn hoặc có cảm biến bổ sung. Camera hành trình dân dụng không có cả hai; ống kính méo ~130° phá vỡ giả định lỗ kim chung của chúng (§9.6). Dù §9.9 cho thấy tiêu cự chưa từng là đại lượng thực sự cần. ⭐ §9.10 ghi số liệu cả ba lần hiệu chuẩn — cùng loại camera nhưng tiêu cự ước tính từ 477 px tới 5,921 px, dao động 173.5 px ngay trong một clip. Hãy đọc trước khi thử lần thứ tư

⭐ 한 문장으로: 물려받은 엔진은 사람이 깨끗하게 정리해 줄 것을 전제했고, 지난 다섯 달은 그 전제를 없애려는 시도였다. 질문 원장은 「무엇을 물을 것인가」를, CV 도구는 「무엇을 재줄 것인가」를, 에이전트 판독은 「모르면 모른다고 말할 권리」를 맡았다. 세 개는 같은 빈칸의 세 면이다.

⭐ In one sentence: the inherited engine assumed a human had already tidied the facts, and the five months since were an attempt to remove that assumption. The question ledger took on "what should be asked", the CV tools took on "what can be measured", and agentic reading took on "the right to say it cannot be told". Three faces of one hole.

⭐ Trong một câu: bộ máy kế thừa giả định con người đã làm sạch các sự kiện, năm tháng tiếp theo là nỗ lực loại bỏ giả định ấy. Sổ câu hỏi giải "nên hỏi gì", công cụ CV giải "đo được gì", đọc bằng tác nhân giải "quyền nói rằng không thể xác định". Ba mặt của cùng một khoảng trống.

03무엇이 살아남고, 무엇이 왜 접혔는가 · What Survived · Những gì còn lại

이 장은 실패 목록이 아니다. 시도 대부분은 버려진 것이 아니라 흡수되었고, 접힌 것들조차 대부분 틀려서가 아니라 자료·정답·시간이 없어서 접혔다.

Not a list of failures. Most of it was absorbed, not discarded — and most of what stopped did not stop because it was wrong.

Đây không phải danh sách thất bại. Phần lớn được tiếp thu thay vì loại bỏ — và đa số hướng dừng lại không phải vì sai.

⭐ 이 장은 「왜 접었나」이고, 그 레포를 실제로 열어 본 것은 8장이다 — §8.1 question-ledger(질문 워크의 실제 비용) · §8.2 fault-lab(가감산의 조상) · §8.3 lense CV(지금도 돌아가는 것) · §8.5 ams-demo-0 · §8.6 knia-dag. 그 시도들이 쓴 모델과 논문은 9장에 있다.

⭐ This chapter says why things stopped; chapter 8 opens those repositories and reads the code, and chapter 9 holds the models and papers they used.

⭐ Chương này giải thích vì sao các hướng dừng lại; chương 8 mở các kho mã và đọc mã nguồn, chương 9 trình bày các mô hình và bài báo đã dùng.

3.1왜 접었는가 — 네 가지 서로 다른 이유 · Four different reasons · Bốn lý do khác nhau

인수인계에서 가장 중요한 구분이다. 접힌 것들은 같은 이유로 접히지 않았다.

The single most important distinction in this document.

Phân biệt quan trọng nhất trong tài liệu này.

이유 · reasonlý do후임자에게 · what it means for youý nghĩa với người tiếp nhận
A측정이 닫았다 — 재보니 정보가 없었다Closed by measurementĐóng lại vì kết quả đo다시 하지 마라.Don't redo it.Đừng làm lại. 숫자가 있다There's a numberĐã có số liệu
B자료가 없었다 — 입력 자체가 존재하지 않았다Missing dataThiếu dữ liệu자료가 생기면 다시 열린다Reopens when data arrivesMở lại khi có dữ liệu
C정답이 없었다 — 잴 수가 없었다No ground truthKhông có nhãn chuẩn라벨을 만들면 다시 열린다Reopens when labels existMở lại khi có nhãn
D시간·자원 — 가능하지만 못 했다Time and resourcesThời gian và nguồn lực그냥 열려 있다. 안 해 본 것이지 안 되는 것이 아니다Simply open — untried, not impossibleVẫn để mở — chưa thử, không phải bất khả thi

일부를 접은 이유는 자료가 없었거나(라벨·정답), 주어진 시간과 자원이 거기까지였기 때문이다. 그 전부가 막다른 길이었다는 뜻은 아니다 — 주어진 시간 안에서 실현 가능성을 보고 고른 결과다.

Parts were dropped for missing data — labels, ground truth — or because the time and resources ran to there. That does not make them dead ends; they are what feasibility allowed in the time available.

Một số phần bị dừng vì thiếu dữ liệu — nhãn, đáp án chuẩn — hoặc vì thời gian và nguồn lực chỉ cho phép tới đó. Điều này không biến chúng thành ngõ cụt; đó là giới hạn khả thi trong thời gian hiện có.

이 프로젝트는 가능한 모든 접근을 소진한 결과가 아니라, 주어진 시간 안에서 실현 가능성을 보고 고른 최선이다.

This is not the result of exhausting every approach. It is the best feasible path within the time available.

Đây không phải kết quả sau khi đã thử hết mọi hướng. Đây là con đường khả thi tốt nhất trong thời gian cho phép.

A 측정이 닫은 것 Những hướng đóng lại bằng phép đo · closed by measurement · đóng lại bằng phép đo

이 표는 요약의 요약이다 · a summary of a summaryBảng này là bản tóm tắt của một bản tóm tắt

숫자들은 visus의 docs/FINDINGS.md에서 왔고, 그것은 다시 lense의 EXPERIMENTS.md를 압축한 것이다. 진짜 숫자와 n은 lense 쪽이 더 정확하다 — 중요한 판단 전에는 lense 원장을 직접 볼 것.

Các số liệu lấy từ docs/FINDINGS.md của visus, vốn là bản rút gọn EXPERIMENTS.md của lense. Số liệu thực và cỡ mẫu n ở lense chính xác hơn — trước quyết định quan trọng, xem trực tiếp sổ lense.

예: 「진로변경 그리드 77%」는 원장에서 「251/328 = 77%, 장면 불문 같은 비율 — 교차로 77%, 도로 75%, 회전교차로 81%, 주차장 71%」다. 모든 장면에서 같은 비율이라는 것이 예스 머신의 증거이지 77%라는 수치가 아니다.

These come from visus's FINDINGS.md, itself a compression of lense's ledger. The real numbers and their n are more precise in lense.

Các số này từ FINDINGS.md của visus, vốn rút gọn từ sổ lense. Số liệu thực và cỡ mẫu n ở lense chính xác hơn.

🚨 번호 충돌 · id collision🚨 Trùng ID

lense에도 E-V-nnn 계열이 있다 (E-V-004 … E-V-024) — visus의 E-V-001…035와 번호가 겹치지만 완전히 다른 실험이다. lense는 트랙별로 E-V(VLM) · E-E(엔진) · E-B · E-A · E-C를 쓴다. 어느 레포의 원장인지 먼저 확인할 것.

lense has its own E-V series that collides numerically with visus's and means something entirely different.

lense có dãy E-V riêng, trùng số với visus nhưng mang nghĩa hoàn toàn khác.

시도attempthướng thử결과resultkết quả기저율base ratetỷ lệ nền판정verdictkết luận
VLM — 상대차 좌/우 VLM — trái/phải của xe đối phương left/righttrái/phải우연ngẫu nhiên50%닫힘closedđã đóng
사고 유형을 질문 하나로asking a VLM for the accident type in one questionhỏi VLM loại tai nạn bằng một câu duy nhất23%21%정보 없음no informationkhông có thông tin
방향 관계를 VLM으로asking a VLM for the directional relationhỏi VLM quan hệ hướng di chuyển31%71%상수보다 나쁨worse than a constantkém hơn trả lời một giá trị cố định
CV 방향 관계를 티어로 게이트gating CV relation by tierlọc quan hệ CV theo cấp độ lense E-V-02451/93
= 54.8%
상수도
54.8%
a constant also scores 54.8%giá trị cố định cũng đạt 54.8%
정확히 같다exactly equalbằng nhau hoàn toàn
CV를 VLM 판정에 늦은 융합fusing CV late into a VLM verdictkết hợp CV vào kết luận VLM ở bước cuối0건0 trường hợp—한 건도 못 바꿈changed nothingkhông thay đổi gì
진로변경 그리드the lane-change gridlưới chuyển làn251/328
= 77%
—예스 머신 · 철회yes-machine · withdrawnluôn trả lời có · đã rút bỏ
오디오 — 접촉 시점audio — contact timingâm thanh — thời điểm tiếp xúc51%10%타이밍만timing onlychỉ xác định thời gian
에고 VO VO của xe mình visual odometryđịnh vị bằng thị giác미터 일치khớp đơn vị mét—살아남음survivedđược giữ lại
트래킹 + 월드맵 (상대차 heading)tracking + world map (the other car's heading)theo dõi + bản đồ thế giới (hướng xe đối phương)~10%—약한 고리the weak linkmắt xích yếu
저장된 VO를 기동 판정에 E-V-005astored VO as the manoeuvre measurement (E-V-005a)dùng VO đã lưu để đo động tác (E-V-005a)회전 3/6turns 3/6rẽ 3/6—계측 불인정measurement not acceptedphép đo không được chấp nhận
오픈웨이트 판독자 E-V-004an open-weight model as the reader (E-V-004)mô hình trọng số mở làm bộ đọc (E-V-004)8%8%모드 붕괴mode collapsesụp đổ chế độ đầu ra
컴파일 로직을 라벨러 사실로 E-V-002driving the compiled logic with the labeller's own facts (E-V-002)dẫn dắt logic biên dịch bằng chính sự kiện của người gán nhãn (E-V-002)3.7%5.9%*사실만으로 구동 불가cannot run on facts alonekhông thể chỉ chạy từ các sự kiện

* 틀린 사실을 줬을 때가 2포인트 더 높다 — 대조군이 본 arm을 이겼다.* the control arm, fed wrong facts, excluded the correct chart more often — two points better than the real one.* nhóm đối chứng nhận sự kiện sai lại loại biểu đồ đúng thường xuyên hơn — tốt hơn nhóm thật hai điểm.

B 자료가 없어 접은 것 Những hướng dừng vì thiếu dữ liệu · stopped for missing data · dừng vì thiếu dữ liệu

접은 것what stoppedviệc dừng lại없던 자료the data that was missingdữ liệu còn thiếu생기면 · if it arrivesnếu có dữ liệu
사고약도 (D4)the accident sketch (D4)sơ đồ tai nạn (D4)위치 · GPS · 카메라 파라미터location, GPS, intrinsicsvị trí, GPS, thông số nội tạihd-map 접근이 되살아난다the hd-map approach reviveshướng bản đồ HD có thể mở lại
분쟁심의 · 판례 연동linking dispute decisions and precedentsliên kết quyết định tranh chấp và án lệKB가 약속한 ②③이 오지 않았다KB's promised datasets never camecác bộ dữ liệu KB hứa chưa bao giờ được giao「실제 인정 사례」로 바뀐다becomes real precedenttrở thành án lệ thực tế
상대 쪽 신호 상태the other party's signal statetrạng thái tín hiệu của xe đối phương전방 단안에 구조적으로 안 보인다structurally invisible to a forward mono cameravề cấu trúc, camera đơn phía trước không thể nhìn thấyCCTV · 후방 · 상대차 영상CCTV · rear camera · the other party's footageCCTV · camera sau · video phía đối phương
도로 폭 (대로/소로)road width (major vs minor road)chiều rộng đường (đường chính so với đường nhánh)전방 카메라로 측면을 못 본다a forward camera never sees it side-oncamera trước không bao giờ nhìn ngang được chiều rộng정밀 지도 연동HD-map integrationtích hợp bản đồ HD
미터 단위 깊이depth in metresđộ sâu tính bằng métintrinsics 부재 — Metric3D · UniDepth 등이 모두 "requires GT intrinsics"every metric-depth model requires GT intrinsicsmọi mô hình độ sâu theo mét đều cần thông số nội tại chuẩn화각·장착 정보가 오면 기성 모델이 바로 쓰인다off-the-shelf models become usable immediatelymô hình có sẵn dùng được ngay

C 정답이 없어 접은 것 Những hướng dừng vì thiếu đáp án chuẩn · no ground truth · không có nhãn chuẩn

잴 수 없으면 채택할 수 없다 (V-D3). 되는지 안 되는지를 모르는 채로 남은 것들이다.

A tool enters the library only with a number (V-D3). These are the ones we never found out about.

Công cụ chỉ được đưa vào thư viện khi có số liệu (V-D3). Đây là những công cụ chưa từng xác định được hiệu quả.

접은 것what stoppedviệc dừng lại왜 못 쟀나 · why it could not be measuredvì sao không đo được
상대차 id 단위 정확도Counterpart id accuracyĐộ chính xác nhận diện xe đối phương트랙은 운영에 쓰이지만 「이 트랙이 맞는 상대차인가」는 2026-09까지 직접 채점된 적이 없었다. ✅ 그 뒤 측정됐다 — §8.3(E-V-034, 177편)와 §9.6의 조건부 수치tracks are in production, and "is this the right counterpart" had not been scored as of 2026-09. ✅ It was measured afterwards — see §8.3 (E-V-034, 177 clips) and the conditional figures in §9.6các vệt theo dõi đã có trong production, nhưng câu hỏi "đây có đúng xe đối phương không" chưa được chấm tính đến 2026-09. ✅ Sau đó đã được đo — xem §8.3 (E-V-034, 177 clip) và số liệu có điều kiện ở §9.6
도구별 사실 정확도 E-V-005per-tool fact accuracy (E-V-005)độ chính xác sự kiện theo từng công cụ (E-V-005)사람 재확인 필요 — planned로 남음needs human re-check — still plannedcần con người kiểm tra lại — vẫn planned
라벨 그 자체the labels themselveschính các nhãn라벨러 ≠ 프리소트 (808 중 16), 라벨의 ~17%가 오류 추정 → V-D12labeller ≠ presort (16 of 808); ~17% of labels likely wrongngười gán nhãn ≠ sắp xếp sơ bộ (16/808); khoảng ~17% nhãn có thể sai
라벨 불신은 네 번 독립적으로 발견되었다: ① cv-processing splits.py:80 — 바이트 단위로 동일한 중복 클립 59쌍 중 9쌍이 서로 다른 주석을 달고 있고, 그중 하나는 A/B 역할이 뒤바뀌어 과실이 0:100 ↔ 100:0으로 뒤집힌다 (모델이 개입하지 않은 직접 증거) ② E-V-001(09월) 라벨 ~17% 오류 추정 ③ E-V-033(10월) 골드셋 ego_manoeuvre는 관찰이 아니라 도표 역할에서 파생 ④ 최종 보고(10월) 두 사정사가 91건 중 63건에서만 일치
⚠️ 여기 entry-signal-bench의 「상호 일치 76%」를 쓰지 말 것 — 이 문서가 처음에 ①로 썼다가 철회했다. 계산하는 코드가 없고, 애초에 통계적 검정도 아니다 (§3.2, 등록부 F2)
Label unreliability was found four independent times. The strongest is model-free: among byte-identical duplicate clips, 9 of 59 pairs carry conflicting annotations, one of them inverting the A/B roles so the fault goes 0:100 ↔ 100:0. Then E-V-001's ~17% estimate, E-V-033 finding the gold set's ego manoeuvre was derived from the chart role rather than observed, and the final report's two adjusters agreeing on only 63 of 91. ⚠️ Do not use entry-signal-bench's "76% cross-model agreement" here — this document used it first and withdrew it: no code computes it, and it is not a valid test (§3.2).Nhãn thiếu tin cậy được phát hiện độc lập bốn lần. Bằng chứng mạnh nhất không dùng mô hình: trong các clip trùng giống từng byte, 9/59 cặp có nhãn mâu thuẫn, một cặp đảo vai trò A/B làm tỷ lệ lỗi 0:100 ↔ 100:0. Tiếp đó là ước lượng ~17% ở E-V-001, E-V-033 phát hiện động tác xe mình trong tập chuẩn được suy ra từ vai trò biểu đồ thay vì quan sát, rồi hai chuyên viên trong báo cáo cuối chỉ đồng ý 63/91 ca. ⚠️ Đừng dùng "76% đồng ý giữa mô hình" của entry-signal-bench ở đây — tài liệu đã dùng rồi rút lại: không mã nào tính số đó, đây không phải phép kiểm hợp lệ (§3.2).
✅ 코드✅ Mã nguồn 그 뒤에 일어난 일 — CV는 측정되었고 운영에 쓰인다what happened next — the CV was measured, and it runs in productiondiễn biến tiếp theo — CV đã được đo và chạy trong production

위 목록은 2026-09의 상태였다. stage는 지금 충돌 시점 후보 · 상대차 후보 · 트랙을 CV로 만들어 판독기에 넘긴다 (visus/cvsvc/, 벤더링된 lense 체인 detect · egomask · link).

That list described September. stage now produces impact candidates, counterpart candidates and tracks with CV and hands them to the reader.

Danh sách đó mô tả tháng 9. stage hiện dùng CV tạo ứng viên va chạm, ứng viên xe đối phương và vệt theo dõi, rồi chuyển cho bộ đọc.

문제problemvấn đề어떻게 풀렸나 · how it was solvedcách giải quyết
검출기가 기권하지 못한다the detector cannot abstainbộ phát hiện không thể từ chối kết luận기권하게 만들지 않았다 — 고르게 했다. CV가 후보를 최대 5개 제시하고(접촉·접근 피크) 판독기가 id로 고른다. 자기 확신을 꾸며낼 자리가 사라진다It was not made to abstain — it was made to offer. CV proposes up to five candidates and the reader picks one by idKhông sửa nó thành bộ biết từ chối — sửa thành bộ đề xuất. CV đề xuất tối đa năm ứng viên, bộ đọc chọn một theo ID
후드 반사가 차로 검출된다hood reflections detected as carsphản chiếu nắp ca-pô bị nhận thành xe후드 마스킹 — egomask의 hood_row_at_axis로 박스를 후드 선에서 잘라낸다. 면적 피크도 hood-clipped 기준hood masking — boxes are clipped at the hood lineche vùng ca-pô — cắt hộp tại đường giới hạn ca-pô
충돌 시점이 판독의 주 실패wrong impact time was the main failuresai thời điểm va chạm là nguyên nhân thất bại chínhE-V-030: Opus 5/7/7 → 6/9/9 · Gemini 5/6/7 → 5/7/8 · 보고 없는 Opus 1/3/3 → 3/5/5 · ego bounce 3·5 → 0 · 후보 recall 9/10E-V-030: Opus 5/7/7 → 6/9/9 · Gemini 5/6/7 → 5/7/8 · no-report Opus 1/3/3 → 3/5/5 · ego bounces 3 and 5 → 0 · candidate recall 9/10E-V-030: Opus 5/7/7 → 6/9/9 · Gemini 5/6/7 → 5/7/8 · Opus không báo cáo 1/3/3 → 3/5/5 · trả lại vì xe mình từ 3 và 5 → 0 · độ bao phủ ứng viên 9/10

E-V-033 — 가장 큰 「오답」 원인은 계측이 아니라 라벨이었다the biggest cause of a "miss" was the label, not the instrumentnguyên nhân lớn nhất của một lần "sai" là nhãn, không phải công cụ

골드셋의 ego_manoeuvre는 관찰된 값이 아니다 — 라벨러의 도표 역할에서 파생된 것이다. 눈으로 다시 본 결과:

ego_manoeuvre trong tập chuẩn không phải giá trị quan sát — nó được suy ra từ vai trò biểu đồ của người gán nhãn. Xem lại bằng mắt cho kết quả:

회전 라벨 오답 27건 중 12건12 of the 27 clips labelled as turns12 trong 27 clip được gán nhãn rẽ영상이 라벨과 모순the video contradicts the labelvideo mâu thuẫn với nhãn
직진 클립 18건 중 11건이 회전으로 읽힘11 of 18 straight clips were read as turning11/18 clip đi thẳng bị đọc thành rẽ다수가 라벨 쪽 문제mostly the labelchủ yếu do nhãn
의심했던 분할 약점 4종the four suspected weak spotsbốn điểm yếu bị nghi ngờ0 · 0 · 1 · 0 of 27 — 프로토타입을 만들어도 얻는 것이 없다— prototypes gain nothing— các nguyên mẫu không cải thiện gì
진짜 계측 실패the real failurescác lỗi thực sự광학 흐름(VO) 실패optical-flow failureslỗi luồng quang học
값싼 수정 하나one cheap fixmột cách sửa ít tốn kém창이 충돌 0.5초 뒤까지 가서 충돌 자체의 yaw를 집어온다 → 충돌에서 끊을 것the window runs 0.5 s past impact and picks up the collision's own yawcửa sổ kéo dài 0.5 s sau va chạm, thu cả góc xoay do va chạm gây ra

읽는 법: C는 「측정되지 않았다」는 상태였지 「측정할 수 없다」는 판정이 아니었다. CV 쪽은 그 뒤 실제로 측정되었고, 숫자가 좋아졌고, 운영에 들어갔다. 그리고 재보니 남은 병목은 도구가 아니라 라벨이었다 — 다시 V-D12로 돌아온다.

Group C described a state, not a verdict. The CV line was measured, improved the numbers and shipped — and the remaining bottleneck turned out to be the labels, not the instrument.

Nhóm C mô tả trạng thái, không phải phán quyết. Luồng CV đã được đo, cải thiện số liệu và đưa vào sử dụng — nút thắt còn lại hóa ra là nhãn, không phải công cụ.

✅ 코드✅ Mã nguồn C에 대한 정정 — 정답셋 프로젝트는 존재하고, 한 걸음 앞에서 멈췄다correction to C — the gold-set project does exist, and it stopped one step shortđính chính nhóm C — dự án tập chuẩn tồn tại và dừng cách đích một bước

smt-privacy/labeling — AI Hub 차대차 영상에서 선별해 판정 엔진(25 leaf)의 실사고 정확도 측정용 정답셋을 만드는 프로젝트가 이미 만들어져 있다.

A gold-set project already exists — and it stopped one step short.

Dự án tập chuẩn đã tồn tại — dừng chỉ cách đích một bước.

어디까지 갔나 · how far it gotđã làm tới đâu
배치 구성batchđợt dữ liệu93편 data/labeling_batch.csv93 clips (data/labeling_batch.csv)93 clip (data/labeling_batch.csv)
시점 검수 · 중복 처리timing review, dedupduyệt thời điểm, khử trùng완료doneđã xong
라벨링 뷰어 · 병합 도구viewer and merge toolingtrình xem và công cụ gộp준비 완료readysẵn sàng
엔진 피드백 루프engine feedback loopvòng phản hồi bộ máy있음present scripts/engine_feedback.pypresent (scripts/engine_feedback.py)đã có (scripts/engine_feedback.py)
본 라벨링the labelling itselfviệc gán nhãn thực tế「다음은 두 작업자의 실제 라벨링」에서 멈춤stopped heredừng tại đây

이중 라벨링 + 충돌 기록은 곧 작업자 간 일치율을 낳는다. 최종 보고서가 「두 사정사가 91건 중 63건만 일치」로 뒤늦게 얻은 바로 그 숫자를, 이 설계는 처음부터 내도록 되어 있었다.

Double labelling with conflict tracking produces an inter-labeller agreement number by construction — the very figure the final report only obtained months later from two adjusters.

Gán nhãn kép và theo dõi mâu thuẫn tự tạo ra chỉ số đồng ý giữa người gán nhãn — chính con số mà báo cáo cuối chỉ có được nhiều tháng sau từ hai chuyên viên.

왜 멈췄나 — 더 나은 자료가 도착했다Why it stopped: better data arrivedVì sao dừng: dữ liệu tốt hơn đã tới

누가whosecủa ai규모sizequy mô결말outcomekết quả
ams-1080AX 팀nhóm AX1,080끝내지 못함unfinishedchưa hoàn tất
labelingIan93작업자 A가 68편을 끝내고, 정의가 바뀜 재라벨 중 멈춤stopped before the passdừng trước lượt xử lý

둘 다 AI Hub 위에 정답을 쌓는 작업이었다. 그 무렵 개인정보 처리를 마친 KB 데이터가 들어왔다 — 실제 사고, 실제 접수 도표, 약 2,900편. 자기모순적인 라벨 위에 더 쌓는 것보다 진짜 사건으로 옮겨 가는 쪽이 나았고, 시간도 없었다. 합리적인 판단이었다.

Both were building answers on top of AI Hub. Then the PII-processed KB data arrived — real accidents, real filed charts, ~2,900 clips. Moving was the right call.

Cả hai đều xây đáp án trên AI Hub. Sau đó dữ liệu KB đã xử lý PII tới — tai nạn thật, biểu đồ được ghi nhận thật, khoảng ~2,900 clip. Chuyển sang đó là quyết định đúng.

그래서 권고를 바꾼다 · a corrected recommendationVì vậy khuyến nghị được điều chỉnh

「labeling을 끝내라」가 정답이 아니다. 필요한 것(실사고에 대한 믿을 만한 정답셋)은 여전히 비어 있지만, 더 나은 바탕은 이제 KB의 약 2,600편이지 AI Hub의 93편이 아니다. 재사용할 가치가 있는 것은 클립이 아니라 장치다.

Don't finish the 93. The need is still open, but the better substrate is KB's unused ~2,600. What is worth reusing is the tooling, not the clips.

Đừng hoàn thiện 93 clip đó. Nhu cầu vẫn còn, nhưng nguồn tốt hơn là khoảng ~2,600 clip KB chưa dùng. Phần đáng tái sử dụng là công cụ, không phải clip.

재사용할 장치the reusable toolingcông cụ có thể dùng lại
전수 이중 라벨링 + 충돌 기록double labelling with conflict trackinggán nhãn kép và theo dõi mâu thuẫn작업자 간 일치율이 공짜로 나온다inter-labeller agreement for freecó chỉ số đồng ý giữa người gán nhãn mà không thêm bước
엔진이 고르는 질문에만 답하게 함answers only the engine's questionschỉ trả lời câu hỏi của bộ máy라벨이 판정 엔진과 같은 어휘를 쓴다labels share the engine's vocabularynhãn dùng chung hệ thuật ngữ với bộ máy
유보 키 (가려짐 / 화면 밖 / 해당 없음 / 모르겠음)reservation keyscác khóa ghi nhận sự dè dặt「판단 불가」가 라벨에서도 정상 답판단 불가 is a normal answer in the labels too판단 불가 cũng là đáp án bình thường trong nhãn
engine_feedback.py결과를 /evaluate에 되먹여 후보 0·open 원인 역추적traces back why candidates were empty or opentruy ngược lý do tập ứng viên rỗng hoặc vẫn mở

D 시간으로 접은 것 — Những hướng dừng vì thời gian — 열려 있다still openvẫn để mở

E-V-008 조항 적합도 본실험E-V-008, the clause-fit experiment properE-V-008, thí nghiệm độ khớp điều khoản đúng nghĩacoded 09-21 — 코드는 있고 키 캡에 막혀 못 돌렸다written, blocked on an API key capđã viết, bị chặn bởi hạn mức khóa API
트리 백트래킹Tree backtrackingquay lui trong cây알려진 한계 — 잘못 내려가면 복구 불가a known limit: a wrong step is unrecoverablegiới hạn đã biết: bước sai không thể phục hồi
어휘 공백Vocabulary gapkhoảng trống hệ thuật ngữ G-1차54 형제 구분용 사실을 fact_vocab.json에 추가하면 됨add the discriminating facts to the vocabularybổ sung các sự kiện phân biệt vào hệ thuật ngữ
스토어를 authoritative하게Store as source of truthkho lưu trữ làm nguồn sự thật chuẩnV-D24에서 의도적으로 연기 — 워커 2개 이상의 전제 조건deliberately deferred — the prerequisite for more than one workerchủ động hoãn — điều kiện cần để có nhiều hơn một worker
⭐ E-V-002의 나머지 절반 — 배제하지 않는다는 것은 고르지도 않는다는 뜻이었다the other half of E-V-002 — not excluding also meant not choosingnửa còn lại của E-V-002 — không loại cũng đồng nghĩa không chọn

이 문서는 E-V-002의 3.7%와 5.9%(그리고 통제 팔이 2포인트 더 높다는 역전)를 적는다. 같은 실험의 양성 쪽 수치가 빠져 있다 — 자차 기동이 확인된 교차로에서 열린 채로 남는 도표가 108개 중 100개다.

This document records E-V-002's 3.7% and 5.9%, and the inversion in which the control arm excludes two points more. The positive half of the same experiment is missing: at a junction with the ego manoeuvre confirmed, 100 of 108 charts are left open.

Tài liệu ghi 3.7% và 5.9% của E-V-002, cùng nghịch lý nhóm đối chứng loại nhiều hơn hai điểm. Nhưng thiếu nửa khẳng định của cùng thí nghiệm: ở giao lộ, dù đã xác nhận động tác xe mình, vẫn còn mở 100/108 biểu đồ.

⭐ 두 수치는 함께 읽어야 결론이 된다. 배제율은 「논리가 정답 도표를 잘못 죽이지는 않는다」고 말하고, 100/108은 「고르지도 못한다」고 말한다. 실험 자신의 한 줄이 그대로 결정이다 — 「라벨러가 기록하는 사실만으로는 논리가 좁히지도, 변별하지도 않는다.」 앞쪽만 인용하면 온건한 결과로 읽히고, 둘을 함께 읽으면 「이것이 판정의 동력일 수 없다」가 된다 — 그리고 그것이 실제로 내려진 결정이다.

⭐ Read together they are the conclusion. The exclusion rate says the logic does not wrongly kill the right chart; the 100 of 108 says it does not choose either. The experiment's own line is the decision: "with the facts a labeller records, the logic neither narrows nor discriminates." Quoted alone the first half reads as a mild result; the pair reads as "this cannot be the driver" — which is what was in fact decided.

⭐ Phải đọc cả hai mới ra kết luận. Tỷ lệ loại nói logic ít loại nhầm biểu đồ đúng; 100/108 nói nó cũng không chọn được. Chính câu trong thí nghiệm là kết luận: "với các sự kiện người gán nhãn ghi lại, logic không thu hẹp cũng không phân biệt được." Trích riêng nửa đầu trông như kết quả nhẹ; cả hai có nghĩa "không thể dùng nó dẫn dắt" — đó là quyết định đã được đưa ra.

⚠️ 그리고 정답지 쪽에서 — 도표가 함의하는 방향의 다섯 중 하나가 영상과 다르다and on the ground-truth side — one chart side in five disagrees with the footagevề phía nhãn chuẩn — cứ năm bên biểu đồ thì một bên không khớp video

2026-09-16, E-021. 도표에서 유도한 당사자 방향을 라벨러가 그린 상자의 방향과 대조했다 — 64건 중 52건 = 81.2%(CI 70–89). 어긋난 12건은 라벨러와 AI Hub가 도표 자체를 두고 다투는 7건, 역할이 뒤바뀐 2건, 도표와 역할이 같은데도 다른 3건이다.

2026-09-16, E-021. The side implied by the chart was compared against the side of the labeller's own box: 52 of 64 = 81.2% (CI 70–89). The 12 disagreements split into 7 where the labeller and AI Hub dispute the chart itself, 2 with the roles swapped, and 3 sharing chart and roles.

2026-09-16, E-021. So phía được biểu đồ ngụ ý với phía trong hộp do chính người gán nhãn vẽ: 52/64 = 81.2% (CI 70–89). 12 bất đồng gồm 7 ca người gán nhãn và AI Hub bất đồng ngay về biểu đồ, 2 ca đảo vai trò, 3 ca cùng biểu đồ và vai trò.

⭐ 왜 중요한가: 「상대차가 어느 쪽에서 왔는가」는 교차로 도표를 가르는 두세 개의 사실 중 하나다. 그것을 정답으로 쓰는 모든 측정은 다섯 중 하나가 영상과 어긋나는 기준 위에 서 있다 — 이 문서의 라벨 잡음 목록(E-V-001의 17%, 프리소트 불일치, 바이트 동일 중복의 상이한 주석)에 네 번째 독립 증거로 붙는다.

⭐ Why it matters: which side the other car came from is one of the two or three facts that decide a junction chart. Any measurement that takes it as truth stands on a reference that disagrees with the footage one time in five — a fourth independent piece of evidence alongside this document's label-noise list (E-V-001's 17%, the presort mismatch, byte-identical duplicates annotated differently).

⭐ Vì sao quan trọng: xe đối phương tới từ phía nào là một trong hai hoặc ba sự kiện quyết định biểu đồ giao lộ. Mọi phép đo coi nó là sự thật đều dựa trên mốc tham chiếu không khớp video trong một phần năm trường hợp — bằng chứng độc lập thứ tư, bên cạnh danh sách nhiễu nhãn của tài liệu (17% ở E-V-001, lệch sắp xếp sơ bộ, clip trùng từng byte nhưng nhãn khác nhau).

3.2책을 코드로 옮기면 책과 달라진다 · Encoding the book diverges from the book · Mã hóa sách bị lệch khỏi sách

✅ 코드✅ Mã nguồn 근거 등급 · verified Cấp bằng chứng · đã kiểm chứng

smt-privacy/new-knia → docs/audit-printed-standard.md (54 KB) 를 직접 읽고 대조했다. 아래 숫자는 그 문서의 §6 집계 그대로다. 대상은 차대차 · 같은 방향 23개 도표 166행, 원본은 인쇄본 600쪽.

Read directly from the repository. The figures below are the audit's own tally — 23 charts, 166 rows, against the 600-page printed standard.

Đọc trực tiếp từ kho mã. Số liệu dưới đây là thống kê của cuộc kiểm tra — 23 biểu đồ, 166 hàng, đối chiếu tiêu chuẩn in 600 trang.

이 프로젝트에서 가장 값비싼 단일 발견이고, 최종 설계를 결정한 것이다. new-knia에서 가감요소를 술어로 인코딩한 뒤 인쇄본과 한 줄씩 대조했다 (차대차·같은방향 166행).

The most expensive single finding, and the one that settled the final design. Modifiers were encoded as predicates, then checked line-by-line against the printed standard.

Phát hiện đơn lẻ gây thiệt hại lớn nhất, quyết định thiết kế cuối. Yếu tố điều chỉnh được mã hóa thành điều kiện, sau đó đối chiếu từng dòng với tiêu chuẩn in.

87/166
행이 원문과 어긋남hàng lệch nguyên bản
rows diverged
13
치명 결함 항목lỗi mức nghiêm trọng
critical defects
22
높음 결함 항목lỗi mức cao
high-severity defects
4
도표의 게이트가 통째로 누락thiếu toàn bộ điều kiện chặn của biểu đồ
charts missing their gatecác biểu đồ thiếu điều kiện chặn
⚠️ 감사 자신이 달아 둔 셈법 주의the audit’s own warning about these countscảnh báo của chính cuộc kiểm tra về các số đếm này

87이라는 행 수를 먼저 읽지 말 것. 감사 §6이 직접 적어 둔다 — 「슬라이스마다 『불일치』의 셈법이 조금 다르다 … 행 수보다 §1·§2의 결함 항목 수(치명 13, 높음 22)를 우선해 볼 것」. 한 슬라이스는 표기만 틀린 행을 따로 뺀다(15행). 다른 슬라이스는 술어 하나의 결함을 12행으로 셌다. 그래서 87은 크기의 감각이지 세어서 비교할 수는 아니다. 누락은 아니다 — 감사는 「크롤이 통째로 빠뜨린 인쇄본 행은 없다」고 확인한다. 문제는 수집이 아니라 번역이다.

Do not read the row count first. §6 of the audit says so itself — "the slices count a ‘divergence’ slightly differently … prefer the defect-item counts in §1 and §2 (critical 13, high 22) over the row count". One slice pulls notation-only rows into a separate column (15 of them); another counts a single shared-predicate defect as 12 rows. So 87 is a sense of scale, not a figure to compare against. Nothing was missed in the crawl — the audit confirms every chart’s row count matches the printed page. The problem is not collection but translation.

Đừng đọc số hàng trước. §6 của bản kiểm tra tự nói: "các phần đếm ‘sai lệch’ hơi khác nhau… ưu tiên số mục lỗi ở §1 và §2 (nghiêm trọng 13, cao 22) hơn số hàng". Một phần tách các hàng chỉ khác ký hiệu ra cột riêng (15 hàng); phần khác đếm một lỗi điều kiện dùng chung thành 12 hàng. Vì vậy 87 cho biết quy mô, không phải số để so sánh. Không bỏ sót gì khi thu thập — kiểm tra xác nhận số hàng mỗi biểu đồ khớp trang in. Vấn đề không phải thu thập mà là chuyển nghĩa thành mã.

도표chartbiểu đồ우리가 쓴 것what we encodedđã mã hóa책이 말한 것what the book sayssách quy định결과resultkết quả
전 도표
현저한 과실
every chart · gross negligencemọi biểu đồ · bất cẩn đáng kể
speed − limit >= 0「시속 20㎞ 미만 제한속도 위반」「exceeding the limit by under 20 km/h」「vượt giới hạn dưới 20 km/h」제한속도를 정확히 지킨 차도 참true even for a car exactly at the limitđúng cả với xe đang chạy đúng giới hạn
차48-1야간·악천후를 운전자의 의무 위반으로night/weather as a duty breachđêm/thời tiết bị coi là vi phạm nghĩa vụ낙하물이 발견되기 어려운 상황 자체가 사유the condition itself is the reasonchính điều kiện hoàn cảnh là lý do행이 절대 발동하지 않는다the row never fireshàng không bao giờ được kích hoạt
차45-5「앞지르기 위험장소」 = 교차로·터널·다리hazardous place = junction/tunnel/bridgenơi nguy hiểm = giao lộ/đường hầm/cầu「요철·미끄러운·시야 나쁜·협소한·보행자 많은 도로」「uneven, slippery, poor-visibility, narrow, or pedestrian-heavy roads」「đường gồ ghề, trơn trượt, tầm nhìn kém, hẹp hoặc nhiều người đi bộ」「위험」을 「금지」로 바꿔 읽음read "hazardous" as "prohibited"đọc "nguy hiểm" thành "bị cấm"
차43-2{A:100, B:0}후행 차로변경차에게 일방과실sole fault to the lane-changertoàn bộ lỗi thuộc xe chuyển làn부호 반전 — 피해차에게 100%sign inverted — 100% to the victimđảo dấu — 100% cho nạn nhân

책은 네 도표(pp.352·355·360·365)에서 같은 조항을 반복한다 — 「… A의 비율이 100미만이 될 경우에 한하여 A의 과실 사유를 가산한다」. 이 게이트가 한 번도 인코딩되지 않았다. 그래서 비율이 110~130으로 튀고, 최종 클램프가 그 사실을 조용히 감춘다.

The book repeats the same clause across four charts (pp.352, 355, 360, 365) — "… only where A’s own ratio comes to be below 100, A’s grounds of fault are added". That gate was never encoded. Ratios ran to 110–130 and the final clamp silently hid it.

Sách lặp cùng điều khoản trên bốn biểu đồ (tr.352, 355, 360, 365) — "… chỉ khi chính tỷ lệ của A xuống dưới 100, các căn cứ lỗi của A mới được cộng". Điều kiện này chưa từng được mã hóa. Tỷ lệ lên 110–130, chặn cuối âm thầm che đi.

⚠️ 보정 — 이 문서가 이 조항을 먼저 잘못 읽었다correction — this document misread the clause firstđính chính — tài liệu này từng đọc sai điều khoản trước

처음에는 「상대 비율이 100 미만일 경우」로 적었다. new-knia의 감사가 세 가지를 바로잡는다 — ① 「상대 비율」이라는 표현은 네 쪽 어디에도 없다. 게이트는 100을 쥔 쪽 자신의 비율이 — 상대가 먼저 과실을 받아 — 100 미만으로 내려올 때 열린다. 주어를 반대로 읽으면 게이트가 반대 방향으로 구현된다. ② 네 도표의 특칙이 아니라 총설 p.21 ②의 일반 규칙이고, 그 감사의 23개 도표 중 12개에 걸린다. ③ 게이트 뒤의 동사는 「가산」이다 — p.360은 한 문장 안에서 비게이트 측을 「가감」, 게이트 측을 「가산」으로 의도적으로 갈라 쓴다. 감산이 게이트를 통과하는지는 여전히 열려 있는 해석 두 개(R1·R2)로 남아 있다.

We first wrote it as "the other party’s share". The audit in new-knia corrects three things. ① The phrase "상대 비율" appears nowhere on those four pages. The gate opens when the ratio of the side holding 100 itself falls below 100, because the other party has been found at fault. Read the subject the wrong way round and the gate gets implemented backwards. ② It is not a special rule of four charts but the general rule at 총설 p.21 ②, and it catches 12 of that audit’s 23 charts. ③ The verb behind the gate is "가산" (add) — p.360 deliberately splits 가감 for the ungated side from 가산 for the gated one in a single sentence. Whether subtractions pass the gate is still two live readings (R1 and R2).

Ban đầu chúng tôi viết là "phần của đối phương". Kiểm tra trong new-knia sửa ba điều. ① Cụm "상대 비율" không xuất hiện ở cả bốn trang. Điều kiện mở khi tỷ lệ của chính bên đang giữ 100 giảm xuống dưới 100 vì đã xác định lỗi phía còn lại. Đọc ngược chủ thể sẽ cài điều kiện ngược. ② Đây không phải luật riêng của bốn biểu đồ mà là quy tắc chung ở 총설 tr.21 ②, áp dụng 12/23 biểu đồ được kiểm tra. ③ Động từ sau điều kiện là "가산" (cộng) — tr.360 cố ý phân biệt 가감 cho bên không bị chặn với 가산 cho bên bị chặn trong cùng câu. Việc khoản trừ có đi qua điều kiện này không vẫn còn hai cách đọc (R1 và R2).

🚨 그리고 이 게이트는 진단만 되었고 고쳐지지 않았다and this gate is diagnosed, not fixedđiều kiện này đã chẩn đoán, chưa sửa

엔진에는 게이트가 아예 없다 — 최종 클램프 하나뿐이다. 감사가 제안한 gate_side·gate_source 필드와 T_GATE_BLOCKS_LOSSES 임계값은 그 문서 밖 어디에도 나타나지 않는다(knia/ 전체 검색 결과 0건). 결과는 구체적이다 — 차42-1에서 10%p 틀리고, 차46-1에서는 우연히 맞는다.

The engine has no gate at all — only a final clamp. The gate_side and gate_source fields and the T_GATE_BLOCKS_LOSSES threshold the audit proposes appear nowhere outside that document (zero hits across knia/). The consequence is concrete: 10 percentage points wrong on 차42-1, and accidentally right on 차46-1.

Bộ máy không có điều kiện chặn nào — chỉ có chặn giá trị cuối. Các trường gate_side, gate_source và ngưỡng T_GATE_BLOCKS_LOSSES được đề xuất không xuất hiện ngoài tài liệu ấy (không kết quả trong knia/). Hệ quả cụ thể: sai 10 điểm phần trăm ở 차42-1 và đúng do tình cờ ở 차46-1.

⭐ 후임자에게: 「감사가 있다」와 「고쳐졌다」는 다른 말이다. 스냅샷이 커밋 하나라 diff로 확인할 방법도 없다. 고치기 전에 반드시 다시 확인할 것. 같은 감사가 차46-1에 인쇄본상 기본 비율이 둘((가) A0:B100 · (나) A20:B80)인데 온톨로지는 하나만 들고 있다는 것도 찾아 두었다 — (나) 사건에 (가)를 쓰면 가감요소를 하나도 적용하기 전에 이미 20%p가 어긋난다.

⭐ For a successor: "there is an audit" and "it was fixed" are different statements, and with a single-commit snapshot there is no diff to check it against. Verify before relying on it. The same audit also found that 차46-1 has two printed base ratios ((가) A0:B100 and (나) A20:B80) while the ontology stores only one — so using (가) on a (나) case is 20 points out before a single modifier is applied.

⭐ Với người tiếp nhận: "đã có kiểm tra" khác "đã sửa"; với ảnh chụp chỉ có một commit, không có diff để đối chiếu. Kiểm chứng trước khi tin dùng. Cùng cuộc kiểm tra phát hiện 차46-1 in hai tỷ lệ cơ sở ((가) A0:B100 và (나) A20:B80) nhưng hệ khái niệm chỉ lưu một — dùng (가) cho trường hợp (나) là đã sai 20 điểm trước khi áp dụng yếu tố điều chỉnh nào.

그래서 설계가 바뀌었다 · so the design changed · vì vậy thiết kế thay đổi

전 · beforetrước후 · aftersau
책 → 술어로 인코딩 → 술어를 평가encode the book as predicates, evaluate themmã hóa sách thành điều kiện rồi tính책의 조항을 사실과 대조 → 일치 / 모순 / 미확인match each clause against the factsđối chiếu từng điều khoản với sự kiện
어긋남이 코드 안에 숨는다divergence hides inside codesai lệch ẩn trong mã대조 결과가 그대로 「왜 이 도표인가」가 된다the match is the explanationkết quả khớp chính là giải thích
모호한 문구를 우리가 몰래 정의we quietly defined ambiguous wordingta âm thầm định nghĩa từ mơ hồ모호하면 판단 불가 · 구성은 책 자신의 정의에서ambiguity returns 판단 불가; construals come from the book's own wordsmơ hồ trả về 판단 불가; cách diễn giải lấy từ chính lời sách
후임자 주의 · caveatlưu ý cho người tiếp nhận

이 감사는 차대차·같은 방향 한 계열에 대해서만 수행되었다. 나머지 계열은 대조되지 않았다. 그리고 visus가 쓰는 것은 크롤링본(201개)이지 이 감사가 대조한 인쇄본이 아니다.

This audit covered one family only. The rest were never checked — and visus ships the crawled edition, not the printed one the audit compared against.

Cuộc kiểm tra chỉ bao phủ một nhóm biểu đồ. Phần còn lại chưa được đối chiếu — visus dùng bản thu thập từ web, không phải bản in được kiểm tra.

⭐ 번역이 틀리는 세 가지 다른 방식 — 전부 측정됐다⭐ Three different ways the translation goes wrong — all three measured⭐ Ba cách khác nhau khiến chuyển nghĩa thành mã bị sai — cả ba đều đã đo

위의 87행은 한 줄씩 대조해서 나온 것이다. 그 작업을 하던 같은 주에, 줄 단위 대조로는 보이지 않는 세 가지 오류가 따로 측정됐다. 셋 다 한 줄씩 보면 전부 맞아 보인다.

The 87 rows above came from a line-by-line comparison. In the same week, three further classes of error were measured that a line-by-line comparison cannot see. In all three, every individual line looks correct.

87 hàng trên có được từ đối chiếu từng dòng. Cùng tuần, ba nhóm lỗi khác được đo mà đối chiếu từng dòng không nhìn ra. Trong cả ba, từng dòng riêng lẻ đều trông đúng.

① 행은 맞는데 합이 틀린다① the rows are right and the sum is not① từng hàng đúng nhưng tổng sai
측정measuredđã đo상한을 걸지 않으면 차대차·같은 방향 가지에서 (도표, 당사자) 조합 46개 중 26개가 상한을 넘는다. 최악은 차43-3의 A쪽 — 규칙이 30%p를 허용하는 자리에서 100%p. 책 전체로 보면 46개 중 46개가 넘고 최악은 +70%p다without caps, 26 of 46 (chart, side) combinations in the 차대차 · same-direction branch overshoot, worst being 차43-3's A side at 100%p where the rule allows 30. Taken over the whole book the exposure is 46 of 46, worst by +70%pkhông có trần, 26/46 cặp (biểu đồ, bên) trong nhánh ô tô với ô tô · cùng hướng bị vượt, nặng nhất là bên A của 차43-3 đạt 100%p trong khi quy tắc cho phép 30. Tính toàn sách, có rủi ro ở 46/46, lớn nhất vượt +70%p
크기sizemức độ🚨 100%p는 비율 전체의 크기다. 상한이 없는 가감 엔진은 조금 틀리는 것이 아니라 경계가 없다 — 그리고 그 결함은 실제로 있었다(「내 수정요소 계층에 정확히 그 버그가 있었다」)🚨 100 percentage points is the size of the whole ratio. An uncapped modifier engine is not slightly wrong, it is unbounded — and the defect was real ("my modifier layer had exactly that bug")🚨 100 điểm phần trăm bằng toàn bộ tỷ lệ. Bộ máy điều chỉnh không có trần không chỉ sai nhẹ mà không có giới hạn — lỗi có thật ("lớp điều chỉnh của tôi từng có đúng lỗi đó")
그래서thereforevì vậyHYUNJEO_STACK_CAP은 취향이 아니라 제품의 안전 난간이다. 그리고 상한은 총합만 막는다 — 애초에 함께 설 수 없는 둘을 함께 세우는 것은 점선 묶음이 막는다(§4.4)the cap is not a preference, it is a guard rail. And it bounds only the total — what stops two mutually exclusive factors standing together is the dotted-line grouping (§4.4)trần không phải tùy chọn mà là hàng rào bảo vệ. Nó chỉ chặn tổng — nhóm nét đứt mới ngăn hai yếu tố loại trừ nhau cùng tồn tại (§4.4)
② 한 도표가 기본비율을 둘 이상 싣는데, 저장소에는 하나만 남는다② a chart publishes more than one base ratio; the store keeps one② biểu đồ công bố nhiều tỷ lệ cơ sở, kho dữ liệu chỉ lưu một
원인causenguyên nhân포털의 data-ratio-a/b가 단일값이다. 둘·셋을 싣는 도표는 첫 번째만 남는다the portal's data-ratio-a/b is single-valued, so a chart publishing two or three ratios keeps only the firstdata-ratio-a/b trên cổng thông tin chỉ có một giá trị, nên biểu đồ công bố hai hoặc ba tỷ lệ chỉ giữ tỷ lệ đầu
규모scalequy mô최소 20개 도표가 해당된다(책 전체). 차대차만 보면 108개 중 97개는 일치하고, 어긋나는 11개가 전부 이 원인이다at least 20 charts book-wide. In 차대차 alone, 97 of 108 base ratios match and all 11 that differ are thisít nhất 20 biểu đồ toàn sách. Riêng ô tô với ô tô, 97/108 tỷ lệ cơ sở khớp; cả 11 trường hợp lệch đều do lỗi này
최악worst casetrường hợp nặng nhất🚨 차33-1은 (나) A100:B0을 잃고 (가) A20:B80만 남는다 — 100점짜리 분기가 통째로 사라진 것이다. 이 문서가 다른 곳에 적은 차46-1의 20%p는 같은 병의 작은 쪽 사례다🚨 차33-1 loses its (나) A100:B0 and keeps only (가) A20:B80 — a hundred-point branch gone. The 차46-1 case this document records elsewhere, worth 20%p, is the mild end of the same disease🚨 차33-1 mất (나) A100:B0, chỉ giữ (가) A20:B80 — mất một nhánh cả trăm điểm. Trường hợp 차46-1 trị giá 20%p được ghi ở phần khác chỉ là đầu nhẹ của cùng căn bệnh
왜 못 찾았나why it was missedvì sao bị bỏ sót⚠️ 절반은 (가)/(나) 표시가 아예 없는 산문형이다 — 「도로 폭이 좁을 때는 10%, 넓을 때는 30% … 같을 때는 20%」(보22). 표시를 찾는 방법은 이것들을 하나도 못 찾는다. 게다가 포털은 단어 중간에서 줄을 끊는다(기본 과실비율\n을 80:20) — 멀쩡한 정규식이 차1-2에서 조용히 실패한다⚠️ half of them are prose with no (가)/(나) markers at all — "10% where the road is narrow, 30% where it is wide … 20% where they are equal" (보22). A marker-based search finds zero of these. And the portal breaks lines mid-word (기본 과실비율\n을 80:20), which silently defeated a reasonable regex on 차1-2⚠️ một nửa viết bằng văn xuôi, không có ký hiệu (가)/(나) — "10% khi đường hẹp, 30% khi rộng… 20% khi bằng nhau" (보22). Tìm theo ký hiệu không ra mục nào. Cổng thông tin còn ngắt dòng giữa từ (기본 과실비율\n을 80:20), âm thầm khiến regex hợp lý thất bại ở 차1-2
🚨 ③ 같은 목록이 책 안에서 세 번 다르게 인쇄된다 — 두 번 잘못 골랐다③ the same list is printed three different ways in one book — and the wrong one was picked twice③ cùng danh sách được in ba cách trong một sách — đã chọn sai hai lần

현저한 과실·중대한 과실의 구성 항목 목록이 문제였다. 처음에는 「포털에 없다 — 인쇄본이 필요하다」고 결론하고 설계 문서에 적었다. 그 다음에는 보행자 도표 쪽에서 그 목록을 「찾아」 수정으로 삼았다. 그런데 그것은 다른 인쇄이고, 차 가지에 적용됐다.

The subject was the constituent list of 현저한 과실 and 중대한 과실. The first conclusion was "it is not in the portal — the printed book is needed", written into the design document. The second was to "find" the list under the 보행자 charts and treat that as the fix. But that is a different rendering, and it was applied to a 차 branch.

Đối tượng là danh sách thành phần của 현저한 과실 và 중대한 과실. Kết luận đầu là "không có trên cổng thông tin — cần sách in", được ghi vào thiết kế. Lần hai "tìm thấy" danh sách dưới các biểu đồ 보행자, coi là đã sửa. Nhưng đó là cách diễn đạt khác, bị áp dụng vào nhánh 차.

항목itemmục차 쪽 인쇄as printed for carsbản in dành cho ô tô보행자 쪽 인쇄 (잘못 가져온 것)as printed for pedestrians (what was borrowed)bản in dành cho người đi bộ (đã bị mượn sang)
①졸음운전, 한눈팔기 등drowsy driving, distraction, etc.lái xe buồn ngủ, mất tập trung, v.v.한눈팔기 등 — 졸음운전 없음distraction etc. — no drowsy drivingmất tập trung, v.v. — không có lái xe buồn ngủ
③시속 20㎞ 미만 — 하한이 없다under 20 km/h over the limit — no lower boundvượt giới hạn dưới 20 km/h — không có cận dưới10km/h 이상 20km/h 미만10 km/h or more, under 20 km/htừ 10 km/h trở lên, dưới 20 km/h

결과는 두 가지다. ① 졸음운전이 통째로 빠졌다. ② 존재하지 않는 10km/h 하한이 생겼다 — 그리고 이쪽이 더 나쁘다. 차에 대해서는 5km/h 초과도 현저한 과실인데 술어는 아니라고 답한다. 이 유령은 출력 어디에도 나타나지 않는다 — 수정요소를 조용히 좁힐 뿐이다.

Two consequences. ① Drowsy driving was dropped entirely. ② A 10 km/h floor was invented, and that is the worse one: for a car, 5 km/h over the limit is already 현저한 과실, and the predicate said no. The phantom appears nowhere in the output — it only narrows the modifier silently.

Hai hệ quả. ① Bỏ hẳn lái xe buồn ngủ. ② Tự đặt thêm ngưỡng dưới 10 km/h, nghiêm trọng hơn: với ô tô, vượt 5 km/h đã là 현저한 과실, nhưng điều kiện trả lời không. Ngưỡng tưởng tượng không hiện ở đầu ra — nó chỉ âm thầm thu hẹp phạm vi điều chỉnh.

⭐ 이 둘이 포털에 없었던 것도 아니다. 두 목록은 201개 페이지 전부에 #carNoticeableFaultPopup / #carGrossFaultPopup 모달로 들어 있었고, 파서(parser.py:210)가 수정요소 해설 아코디언만 읽고 있었다. 그 증거는 세어 보면 바로 나온다 — 201개 중 197개가 factor_notes를 정확히 하나씩 갖고, 196개에 중대한 과실 행이 있는데, 공동위험행위·난폭운전·마약은 데이터에 0번 나온다.

⭐ Neither list was missing from the portal. Both sat on all 201 pages as #carNoticeableFaultPopup / #carGrossFaultPopup modal blocks, and the parser (parser.py:210) read only the 수정요소 해설 accordion. The evidence is one count away: 197 of 201 charts carry exactly one factor_notes entry and 196 carry a 중대한 과실 row, while 공동위험행위, 난폭운전 and 마약 appear zero times in the data.

⭐ Không danh sách nào thiếu trên cổng thông tin. Cả hai có trên toàn bộ 201 trang trong khối modal #carNoticeableFaultPopup / #carGrossFaultPopup; bộ phân tích (parser.py:210) chỉ đọc accordion 수정요소 해설. Chỉ cần đếm là thấy: 197/201 biểu đồ có đúng một mục factor_notes, 196 có hàng 중대한 과실, nhưng 공동위험행위, 난폭운전 và 마약 xuất hiện 0 lần trong dữ liệu.

⭐ 후임자에게 넘기는 규율: 인정기준을 다시 추출한다면 각 줄이 어느 인쇄에서 왔는지를 함께 적으라. 「같은 개념이 같은 책 안에서 같은 말로 쓰여 있을 것」이라는 가정이 여기서 두 번 깨졌다.

⭐ The discipline to carry forward: if the standard is re-extracted, record which rendering each line came from. The assumption that one concept is worded one way inside one book broke twice here.

⭐ Nguyên tắc cần giữ: nếu trích xuất lại tiêu chuẩn, ghi mỗi dòng đến từ cách trình bày nào. Giả định một khái niệm chỉ có một cách diễn đạt trong cùng sách đã sai hai lần ở đây.

3.3②와 ③이 겹치는 자리, 그리고 그 아래 · Where ② and ③ overlap · Nơi ② và ③ chồng lấn

⭐ 이 장의 논증은 2026-09-14에 이미 쓰여 있었다this argument was written on 2026-09-14lập luận này được viết ngày 2026-09-14

visus가 생기기 사흘 전, 질문 집합이 왜 계속 실패하는지를 만든 사람이 직접 적었다. §3.4 전체가 이 문단의 전개다 — 세션 기록에만 있고 어느 레포에도 없다.

Ba ngày trước khi visus ra đời, chính người xây dựng đã viết vì sao bộ câu hỏi liên tục thất bại. Toàn bộ §3.4 là triển khai từ đoạn này — chỉ có trong bản ghi phiên, không có trong kho mã nào.

이전 질문 집합에는 정의가 없었다. 여기서 정의란, 질문을 받은 사람이나 컴퓨터가 무엇을 보고 답해야 하는지 분명한 상태를 말한다. 「두 차가 같은 방향으로 가고 있었는가」는 쉬워 보이지만, 영상만 주어지면 「같은 방향」이 무엇을 뜻하는지부터 갈린다 — 도로의 구성인가, 두 차의 heading 차이인가, 그리고 언제 기준인가. 실제로 두 차가 충돌했다는 이유만으로 반대 방향이라고 답하는 경우가 있었고, 답의 서술 수준이 질문의 서술 수준을 따라가지 못했다.

The old question set had no definitions — meaning no state in which a person or a computer could tell what to look at in order to answer. "Were the two cars travelling in the same direction?" looks easy, but given only a video what "same direction" means is already open: the layout of the road, the heading difference between the vehicles — and as of when. Answers came back as "opposite" purely because the two cars had collided, and the answer never carried the same level of description as the question.

Bộ câu hỏi cũ không có định nghĩa — không ở trạng thái mà người hay máy biết phải nhìn gì để trả lời. "Hai xe có đi cùng hướng không?" tưởng dễ, nhưng chỉ với video, nghĩa của "cùng hướng" đã chưa rõ: cấu trúc đường, chênh lệch hướng giữa xe — và tính tại thời điểm nào. Câu trả lời "ngược hướng" xuất hiện chỉ vì hai xe va chạm, đáp án không bao giờ cùng cấp mô tả với câu hỏi.

The questions carried that defect, and answering one "correctly" gave no confidence it led to the right chart. Working through the planner’s questions by hand ended on a different chart than the case warranted — which is the main problem.

Bộ câu hỏi mang lỗi đó, nên trả lời "đúng" không bảo đảm đến biểu đồ đúng. Tự trả lời thủ công các câu của bộ lập kế hoạch vẫn tới biểu đồ không phù hợp vụ việc — đó là vấn đề chính.

The printed standard may not describe the structure fully: the families it uses may not be the right way to categorise, and some charts sit in a family only because they could not sit elsewhere. The source is not sufficient on its own — the design has to be ours, and things improve without reaching a point that is acceptable. 2026-09-14

Tiêu chuẩn in có thể chưa mô tả đủ cấu trúc: cách chia nhóm của nó có thể không thích hợp để phân loại, một số biểu đồ nằm trong nhóm chỉ vì không còn chỗ khác. Nguồn không tự nó đủ — ta phải tự thiết kế; kết quả cải thiện nhưng chưa tới mức chấp nhận được. 2026-09-14

세 가지가 여기서 전부 나온다. ① 정의 없는 술어가 사람과 기계를 똑같이 혼란시킨다(§3.3 층 1) ② 「언제?」 — 시간이 질문에 들어 있지 않다(층 2, 사건의 열) ③ 책의 분류를 그대로 따르면 안 된다. 그리고 결정적으로 — 만든 사람 자신이 자기 질문에 답하고도 틀린 도표에 도달했다. 모델의 문제가 아니라는 가장 강한 증거다.

All three layers of §3.3 are already here: an undefined predicate confuses human and machine alike; "also the timing, when?" is the event-sequence gap; and the book's own family structure cannot be followed literally. The decisive evidence that this is not a model problem: the author answered his own questions correctly and still landed on the wrong chart.

Cả ba tầng ở §3.3 đã có ở đây: điều kiện chưa định nghĩa gây nhầm cho cả người và máy; "còn thời điểm, lúc nào?" là thiếu chuỗi sự kiện; cấu trúc nhóm của sách không thể được theo máy móc. Bằng chứng quyết định rằng đây không phải vấn đề mô hình: tác giả trả lời đúng câu hỏi của mình mà vẫn tới biểu đồ sai.

세 가지 오류는 깔끔히 나뉘지 않는다 · the three classes do not partition cleanlyBa nhóm lỗi không tách biệt rõ ràng

②(증거 오독)가 ③(해석이 정의되지 않음) 때문에 일어나는 경우가 있다. 그리고 그 아래에 더 깊은 문제가 있다 — 정의를 쓰려고 해도 쓸 수 있는 표현 수단이 없다.

Sometimes ② happens because ③ was never settled — and underneath that, we lack the construction in which a definition could even be written.

Đôi khi ② xảy ra vì ③ chưa được thống nhất — bên dưới đó, ta thiếu cấu trúc để thậm chí viết được định nghĩa.

CarAccident → question-ledger → visus 세 세대가 전부 물려받았고 지금도 그대로 있다.

층 1 — ③이 정의되지 않으면 ②가 만들어진다An unsettled standard manufactures misreadingsTiêu chuẩn chưa thống nhất tạo ra lỗi đọc sai

상대차는 충돌 순간에 앞에 있었으면 「선행」인가, 내내 앞에 있었어야 「선행」인가?

Is a car 선행 because it was in front at the moment of contact, or the whole time?

Một xe là 선행 vì ở phía trước lúc tiếp xúc hay trong toàn bộ diễn biến?

책도, 우리도 정의한 적이 없다. 그러면 영상이 선명하고 판독이 정확해도, 무엇이 맞는 읽기인지가 존재하지 않으므로 어떤 답이든 절반은 「오독」으로 집계된다. 겉으로는 ②이고 통계에도 ②로 들어가지만 원인은 ③이다.

Neither the book nor we ever defined it. The video can be clear and the reading accurate — but with no correct reading to match, the answer lands as a "misreading" in the numbers. It looks like ②, it is counted as ②, and its cause is ③.

Cả sách lẫn ta chưa từng định nghĩa. Video có thể rõ, việc đọc có thể chính xác — nhưng không có cách đọc chuẩn để đối chiếu, đáp án bị tính là "đọc sai". Trông như ②, được đếm là ②, nguyên nhân lại là ③.

③은 ②를 만들어 내는 공장이다. 정의되지 않은 술어 하나가 판독 오류로 계속 전환된다.

An undefined predicate is a factory for misreadings — converting, case after case, into what the numbers record as ②.

Điều kiện chưa định nghĩa là nhà máy tạo lỗi đọc sai — từng vụ một biến thành con số được ghi nhận là ②.

왜 중요한가: ②로 집계된 오류를 ②로 취급해 고치려 하면 — 더 좋은 모델, 더 많은 프레임, 더 나은 프롬프트 — 고쳐지지 않는다. 원인이 거기 없기 때문이다.

Why it matters: attacking those errors as ② — a better model, more frames, a better prompt — will not move them.

Vì sao quan trọng: xử lý các lỗi ấy như ② — mô hình tốt hơn, thêm khung hình, prompt tốt hơn — không cải thiện được chúng.

"lead_follow": "선행 / 후행 / 옆 차로 / 해당 없음 / 판단 불가"     ← no temporal scope at all
"lead_follow": "선행 / 후행 / 옆 차로 / 해당 없음 / 판단 불가"
  = đi trước / đi sau / làn bên cạnh / không áp dụng / không thể xác định
  ← hoàn toàn chưa có phạm vi thời gian

차43-2(후행 직진 대 선행 진로변경), 차41-1(후방 추돌), 43 계열 전체가 여기 달려 있다. 최종 보고서가 주된 약점으로 지목한 것이 「선후행, 진입 방향, 차로」이고 — 선후행이 맨 앞, 32건 중 14건.

차43-2 (a following car going straight against a leading car changing lanes), 차41-1 (rear-end) and the whole 43 family hang on this. What the final report names as the main weakness is "leading/following, entry direction, lane" — with leading/following first, 14 of 32 cases.

차43-2 (xe đi sau đi thẳng với xe đi trước chuyển làn), 차41-1 (đâm sau) và cả nhóm 43 đều phụ thuộc điều này. Báo cáo cuối gọi điểm yếu chính là "đi trước/đi sau, hướng vào, làn" — đi trước/đi sau đứng đầu với 14/32 vụ.

층 2 — 정의하려 해도 쓸 말이 없다We lack the construction to define itThiếu cấu trúc để định nghĩa

「그럼 선행을 정의하면 되지 않나」 — 여기서 진짜 문제가 나온다. 제대로 정의하려면 시간에 걸친 순서 관계를 말해야 한다: 어느 구간에서, 얼마나 지속되었고, 언제 역전되었는가. 그런데 우리 사실 표현은 한 시점의 단일 값이다.

"Then just define 선행." — and here the real problem appears. To define it properly you have to state an ordering relation over time: over which interval, for how long, and when it reversed. But our fact representation is a single value at a single instant.

"Vậy cứ định nghĩa 선행." — đây là lúc vấn đề thật lộ ra. Muốn định nghĩa đúng phải nêu quan hệ thứ tự theo thời gian: trong khoảng nào, bao lâu, đảo chiều lúc nào. Nhưng biểu diễn sự kiện của ta là một giá trị tại một thời điểm.

정의하려면 필요한 것what a definition needsđịnh nghĩa cần지금 있는 것what existsnhững gì đang có
시간 구간을 가진 사건(창)an event with a spanmột sự kiện có khoảng kéo dài단일 enum 값a single enum valuemột giá trị enum
사건들 사이의 순서ordering between eventsthứ tự giữa các sự kiện없음nonekhông có
상태가 언제 바뀌었는가when the state changedthời điểm trạng thái thay đổi없음nonekhông có
그 창을 무엇 기준으로 끊는가what anchors the windowyếu tố neo cửa sổ thời gian충돌 시점 — 이제 CV가 후보를 내고 판독기가 고른다(E-V-030). 다만 창이 충돌 +0.5초까지 간다(E-V-033)impact time — now CV proposes, the reader picks; but the window still runs 0.5 s past itthời điểm va chạm — nay CV đề xuất, bộ đọc chọn; nhưng cửa sổ vẫn kéo dài thêm 0.5 s sau đó

같은 결핍이 다른 곳에서도 똑같이 나타난다. 자차 기동이 가장 분명하다 — v3 판독자의 어휘에 「정차 후 출발」이 없다:

Cùng thiếu sót xuất hiện nguyên vẹn ở nơi khác. Rõ nhất là động tác xe mình — hệ thuật ngữ bộ đọc v3 không có "dừng rồi khởi hành":

MANOEUVRES = 직진 / 좌회전 / 우회전 / 유턴 / 차로변경 / 후진 / 정차 / 출차 / 진입 / 진출 / 회전 중 / 판단 불가
MANOEUVRES = 직진 / 좌회전 / 우회전 / 유턴 / 차로변경 / 후진 / 정차 / 출차 / 진입 / 진출 / 회전 중 / 판단 불가
  = đi thẳng / rẽ trái / rẽ phải / quay đầu / chuyển làn / lùi / dừng / rời chỗ đỗ / đi vào / đi ra / đang rẽ / không thể xác định

그리고 이것은 단어 하나가 빠진 문제가 아니다. 「정차 후 출발」은 사건의 열이다(정지했다 → 출발했다). 단일 값 어휘로는 원리적으로 표현할 수 없다. 판독자는 직진이나 정차를 고를 수밖에 없고, 그 순간 차47 계열을 가르는 사실이 사라진다.

This is not one missing word. 「정차 후 출발」 is a sequence — stopped, then started — and a single-value vocabulary cannot express it in principle.

Không chỉ thiếu một từ. 「정차 후 출발」 là một chuỗi — dừng rồi khởi hành — mà hệ thuật ngữ đơn giá trị về nguyên tắc không thể biểu diễn.

그 구분은 다른 경로로만 들어온다 — report_facts.py가 사고개요 텍스트에서 뽑아 claimed 등급으로 넣는다. 「영상이 차별점」과 정확히 반대 방향이다. 차47-1은 집중 개선 5개 중 하나, 10건 중 5건.

그러므로 이것은 「정의를 깜빡했다」가 아니다. 정의가 쓰일 수 있는 문법이 없다.

This is not "we forgot to define it". There is no grammar in which the definition could be written.

Không phải "quên định nghĩa". Không có ngữ pháp để viết định nghĩa ấy.

층 3 — 이미 있는 유일한 선례The one precedent that existsTiền lệ hiện có

빠진 구성이 무엇인지는 사실 이미 한 번 만들어졌다 — V-D21의 C-1:

Cấu trúc còn thiếu thực ra đã được xây một lần — C-1 trong V-D21:

진로변경은 창이지 라벨이 아니다. 충돌이 진로변경이 진행 중일 때 일어났을 때만 진로변경 사고다. 그래서 판독기는 바른 단어 대신 개시/완료 시각을 충돌 시각 기준으로 적는다.

진로변경 is a window, not a label — so the reader writes start/finish times against the impact time instead of the bare word.

진로변경 là một khoảng thời gian, không phải nhãn — bộ đọc ghi thời điểm bắt đầu/kết thúc tương đối với va chạm, thay vì chỉ ghi một từ.

이것이 정확히 층 2가 요구하는 모양이다 — 단일 값이 아니라 시각이 붙은 사건, 다른 사건을 기준으로 해석되는 창. 한 사실에 대해서만 만들어졌고 일반화되지 않았을 뿐이다. ⚠️ 보정: 「설계된 적이 없다」는 틀렸고, 두 번 설계됐다 — §8.1이 question-ledger에서 그 증거를 연다.

This is exactly the shape tier 2 demands — not a single value but a timestamped event, and a window read relative to another event. It was simply built for one fact and never generalised. ⚠️ Correction: saying it was never designed is wrong — it was designed twice; §8.1 opens the evidence in question-ledger.

Đúng cấu trúc tầng 2 cần — không phải một giá trị mà là sự kiện có mốc thời gian và cửa sổ đọc tương đối với sự kiện khác. Chỉ là nó được xây cho một loại sự kiện, chưa tổng quát hóa. ⚠️ Đính chính: nói chưa từng thiết kế là sai — đã thiết kế hai lần; §8.1 mở bằng chứng trong question-ledger.

층 4 — 이것이 바로 「온톨로지」다This is what the ontology was forĐó là mục đích của hệ khái niệm

여기서 2장의 네 단계(new-knia · knia-dag · ql-re · resolve-questions)가 제자리를 찾는다. 그 프로젝트들이 만들려던 온톨로지는 도표의 분류 체계가 아니었다. 바로 이 정의들이 온톨로지다.

Ở đây bốn bước trong chương 2 (new-knia · knia-dag · ql-re · resolve-questions) mới vào đúng chỗ. Hệ khái niệm các dự án ấy muốn xây không phải hệ phân loại biểu đồ. Chính các định nghĩa này mới là hệ khái niệm.

온톨로지 = 기계가 한 단어를 어떻게 읽어야 하는가 + 그것을 시스템과 사람이 어떻게 합의하는가.

The ontology is: how a machine should read a word, and how the system and the human agree to define it.

Hệ khái niệm là: máy phải hiểu một từ thế nào, hệ thống và con người thống nhất định nghĩa nó ra sao.

그리고 결정적으로 — 모든 단어가 같은 모양을 갖지 않는다. 어떤 것은 사건의 열, 어떤 것은 스칼라·벡터, 어떤 것은 조건이다. 온톨로지를 만든다는 것은 단어마다 그 모양을 정하는 일이다.

And decisively — not every word has the same shape. Some are sequences of events, some are scalars or vectors, some are conditions. Building the ontology is deciding that shape, word by word.

Điểm quyết định — không phải từ nào cũng có cùng cấu trúc. Có từ là chuỗi sự kiện, có từ là đại lượng vô hướng hoặc vectơ, có từ là điều kiện. Xây hệ khái niệm là quyết định cấu trúc ấy cho từng từ.

모양 · shapecấu trúc예exampleví dụ지금 상태 · statustrạng thái hiện tại
조건
conditionsđiều kiện
「차도가 아닌 장소」 · 「앞지르기 위험장소」 · 신호 상태「a place that is not a roadway」 · 「a dangerous place to overtake」 · signal state「nơi không phải phần đường xe chạy」 · 「nơi nguy hiểm để vượt」 · trạng thái tín hiệu부분적으로 있다partly there define()이 책 자신의 정의를 돌려주고, 구성은 V-D13으로 기록partly — define() returns the book's own wording, and the construal is logged as V-D13một phần — define() trả về nguyên văn sách, cách diễn giải được ghi thành V-D13
스칼라 · 벡터
scalars, vectorsđại lượng vô hướng, vectơ
도로 폭 · 속도 · yaw 변화 · 궤적road width · speed · yaw change · trajectorychiều rộng đường · tốc độ · thay đổi góc quay · quỹ đạo제한적limited ego_heading·other_path — 카메라 파라미터 부재로 미터 단위가 막힌다limited — ego_heading and other_path, with metres blocked by the missing camera parameterscó giới hạn — ego_heading, other_path; đơn vị mét bị chặn vì thiếu thông số camera
사건의 열
series of eventschuỗi sự kiện
선행/후행 · 정차 후 출발 · 진로변경 개시·완료 · 진입 순서선행/후행 · stopped-then-moved-off · lane change start and finish · order of entryđi trước/đi sau · dừng rồi khởi hành · bắt đầu/kết thúc chuyển làn · thứ tự đi vào넷 중 하나one of the four 선행/후행만 실제로 만들어졌고 측정까지 됐다 — new-knia knia/perception/longitudinal.py. 나머지 셋(정차 후 출발 · 진로변경 개시·완료 · 진입 순서)은 비어 있다. C-1은 유일한 선례가 아니다only 선행/후행 was actually built, and measured — new-knia's longitudinal.py. The other three are empty. C-1 is not the only precedentchỉ 선행/후행 thực sự được xây và đo — longitudinal.py của new-knia. Ba mục còn lại trống. C-1 không phải tiền lệ duy nhất
빈칸이 어디인지 보인다 · the gap is visiblethấy rõ khoảng trống nằm ở đâu

조건에는 도구가 있고 스칼라에도 도구가 있는데, 사건의 열에는 사실상 아무것도 없다. 그리고 이 절이 말한 실패들 — 선행/후행, 정차 후 출발, 진입 순서 — 이 전부 세 번째 줄에 모여 있다.

Conditions have a tool, scalars have tools, and event sequences have almost nothing — while every failure in this section sits in exactly that row.

Điều kiện có công cụ, đại lượng vô hướng có công cụ, còn chuỗi sự kiện gần như không có gì — mọi lỗi trong phần này lại nằm đúng hàng ấy.

⭐ 그 하나는 제대로 만들어졌다 · the one that was built, was built well⭐ Phần duy nhất được xây đã được xây tốt

전사가 아니라 코드에 적혀 있다 — new-knia의 knia/perception/longitudinal.py 36–78행. 선행/후행 슬롯은 접지행 순서(박스 하변 중앙의 이미지 행 비교)로 만들어졌고, 수치가 함께 적혀 있다: 상대가 특정된 469건에서 커버리지는 충돌 시각 48.6%, −0.5초 54.6%, 충돌 전 2초 창 안에서 한 번이라도 값이 나오는 클립은 369/469 = 78.7%. 그리고 ⭐ 질의 시각이 기하보다 중요하다 — 질의를 0.5초만 앞으로 옮기면 좌우 절단이 24.4% → 17.9%로 줄고 커버리지가 4.1%p 오른다. 차43-2·차43-5·차45-6에서 질의를 충돌이 아니라 진로변경·추월 개시로 옮겨야 하는 이유가 의미론뿐 아니라 기하에도 있다는 뜻이다.

Nội dung nằm trong mã, không phải bản chép phiên — dòng 36–78 của knia/perception/longitudinal.py trong new-knia. Trường đi trước/đi sau được xây từ thứ tự hàng tiếp đất (so hàng ảnh của tâm cạnh dưới hộp), kèm số liệu: trên 469 clip xác định được xe đối phương, độ bao phủ tại va chạm là 48.6%, tại −0.5 giây là 54.6%; clip có giá trị ít nhất một lần trong cửa sổ 2 giây trước va chạm là 369/469 = 78.7%. ⭐ Thời điểm truy vấn quan trọng hơn hình học — dịch truy vấn sớm 0.5 giây giảm cắt cụt ngang từ 24.4% → 17.9%, tăng bao phủ 4.1%p. Nghĩa là lý do chuyển thời điểm truy vấn ở 차43-2·차43-5·차45-6 từ va chạm sang lúc bắt đầu chuyển làn/vượt không chỉ thuộc ngữ nghĩa mà còn thuộc hình học.

⭐ 라벨 없이 검증했다. 판정한 car–car 쌍 1,223건을 독립적인 깊이 신호인 박스 높이와 대조해 94.1% 일치, 그리고 반대칭 위반 0건(order(A,B)와 order(B,A)가 서로 반대). 라벨을 쓰지 않고도 슬롯을 채점하는 방법이다 — §4.0의 등급 체계가 찾던 바로 그 형태다.

⭐ Đã kiểm chứng không cần nhãn. Đối chiếu 1,223 cặp car–car đã kết luận với tín hiệu độ sâu độc lập là chiều cao hộp cho 94.1% đồng ý, 0 vi phạm phản đối xứng (order(A,B) và order(B,A) ngược nhau). Đây là cách chấm trường mà không dùng nhãn — đúng hình thức hệ cấp độ ở §4.0 tìm kiếm.

🚨 그리고 못 하는 것을 적어 두었다. ① abreast를 한 번도 내지 않는다 — 평면 차선 모델에서 초점거리가 소거되어 겹침을 미터로 확인할 수 없다. ② 자차가 선행인 경우를 구조적으로 낼 수 없다 — 전방 카메라에 안 보이고 「안 보임」이 가림·사각·프레임 밖과 구별되지 않아, 자차-대-상대에서 나온 228건이 전부 follow다. 확인하려면 2채널 후방 영상이 필요하다 — 이것은 모델 문제가 아니라 입력 문제다. ③ 제3자 두 대의 순서는 사실상 못 낸다: 충돌 시각 car–car 쌍 26,524건 중 값이 나오는 것은 4.6%뿐이고, 나머지의 74.8%가 contact_line_occluded — 혼잡한 장면에서 서로가 서로의 접지선을 가린다.

This sits in the code, not in a transcript — new-knia's longitudinal.py, lines 36–78. The lead/follow slot was built from contact-row order and carries its own numbers: on the 469 clips where the counterpart was identified, coverage is 48.6% at impact, 54.6% at −0.5 s, and 369/469 = 78.7% of clips get a value at least once inside the two seconds before impact. Query time matters more than geometry: moving the query half a second earlier cuts lateral truncation from 24.4% to 17.9% and lifts coverage 4.1 points. It was also validated without labels — 94.1% agreement with box height as an independent depth signal over 1,223 judged pairs, and zero antisymmetry violations. And it records what it cannot do: abreast is never emitted because focal length cancels in the planar lane model; ego-as-leader is structurally unavailable from a forward camera, so all 228 ego-vs-other values are follow and a second rear channel is required; and ordering two third parties is out of reach — only 4.6% of the 26,524 car–car pairs at impact get a value, 74.8% of the rest blocked by occluded contact lines.

Nội dung nằm trong mã, không phải bản chép phiên — longitudinal.py của new-knia, dòng 36–78. Trường đi trước/đi sau dựa trên thứ tự hàng tiếp đất và có số liệu riêng: trên 469 clip xác định được xe đối phương, độ bao phủ là 48.6% tại va chạm, 54.6% tại −0.5 s, 369/469 = 78.7% clip có giá trị ít nhất một lần trong hai giây trước va chạm. Thời điểm truy vấn quan trọng hơn hình học: dịch sớm nửa giây giảm cắt cụt ngang từ 24.4% xuống 17.9%, tăng bao phủ 4.1 điểm. Cũng đã kiểm chứng không cần nhãn — đồng ý 94.1% với chiều cao hộp như tín hiệu độ sâu độc lập trên 1,223 cặp, 0 vi phạm phản đối xứng. Mã cũng ghi giới hạn: không bao giờ xuất abreast vì tiêu cự triệt tiêu trong mô hình làn phẳng; camera trước về cấu trúc không xác định được xe mình là xe dẫn trước, nên cả 228 giá trị xe mình so với xe khác đều là follow, cần thêm kênh camera sau; không thể sắp thứ tự hai xe bên thứ ba — chỉ 4.6% trong 26,524 cặp car–car tại va chạm có giá trị, 74.8% phần còn lại bị chặn vì đường tiếp đất bị che.

그리고 이것이 ③과 같은 일이다And this is the same activity as ③Đây cũng chính là công việc ở ③

온톨로지는 우리가 혼자 쓰는 것이 아니다. 「선행 = 접촉 시점 기준」은 KB 사정사와 합의해야 의미를 갖는다.

Hệ khái niệm không phải thứ ta tự viết một mình. "선행 = xét tại thời điểm tiếp xúc" chỉ có ý nghĩa khi thống nhất với chuyên viên KB.

③(해석 차이)을 줄이는 일Reducing ③Giảm ③모호한 단어의 기준을 현업과 정립하는 일settling ambiguous wording with the adjustersthống nhất từ ngữ mơ hồ với chuyên viên
온톨로지를 만드는 일Building the ontologyXây hệ khái niệm그 기준을 기계가 읽을 수 있는 모양으로 적는 일writing that standard in a machine-readable shapeviết tiêu chuẩn ấy thành cấu trúc máy đọc được

둘은 같은 작업의 두 면이다. 「상당한」·「갑자기」에 정의가 없다는 것은 ③의 문제이면서 동시에 온톨로지의 빈칸이다. 합의가 곧 정의이고, 정의가 곧 기계가 읽을 수 있는 형식이 된다. 그리고 먼저 정한 쪽이 업계 기준을 갖는다.

Settling a word with the adjusters is writing the ontology. The agreement is the definition, and the definition is the machine-readable form — and whoever settles it first owns the standard.

Thống nhất một từ với chuyên viên chính là viết hệ khái niệm. Sự thống nhất là định nghĩa, định nghĩa là hình thức máy đọc được — bên thống nhất trước sẽ nắm tiêu chuẩn.

🗣 그리고 누구에게 물어야 하는지가 확인되었다 (2026-10-19): KB다 — 그리고 「책」이 아니라 KB다. 실무 관행이 책과 다를 수 있기 때문이다. 즉 이 빈칸을 채우는 것은 해석 작업이 아니라 KB에게 묻는 일이고, 받은 답은 KB_PRACTICE.md로 간다. 책의 문언이 최종 권위가 아니다 — 이것은 §5.9의 「KB 도표는 정답이 아니라 KB의 관행이다」와 같은 말이다.

🗣 Confirmed 2026-10-19: KB supplies these definitions — and ask KB, not the book, because practice can differ from the printed text. So filling this gap is an ask, not an interpretation exercise, and the printed clause is not the final authority.

🗣 Xác nhận ngày 2026-10-19: KB cung cấp các định nghĩa — hãy hỏi KB, không phải sách, vì thực hành có thể khác bản in. Lấp khoảng trống là yêu cầu làm rõ, không phải bài tập diễn giải; điều khoản in không có thẩm quyền cuối cùng.

할 수 있는 일What you can actually doViệc thực tế có thể làm

  1. C-1의 모양을 일반화하라. 사실을 {값, 개시, 완료}로 쓸 수 있게 하고 충돌 시각 기준으로 해석한다. 이것이 선행/후행·정차 후 출발·진입 순서를 동시에 푼다 — 전부 같은 결핍이다Generalise the C-1 shape — one change addresses 선행/후행, 정차 후 출발 and entry order togetherTổng quát hóa cấu trúc C-1 — một thay đổi giải quyết đồng thời đi trước/đi sau, dừng rồi khởi hành và thứ tự đi vào
  2. 그 다음에 술어를 정의하라. 표현이 생긴 뒤에야 「선행 = 접촉 시점 기준」이 의미를 갖는다Then define the predicate — a definition only means something once there is a form to hold itSau đó định nghĩa điều kiện — định nghĩa chỉ có ý nghĩa khi có cấu trúc để chứa nó
  3. ②로 집계된 오류를 다시 분류하라. 어느 것이 진짜 오독이고 어느 것이 ③에서 왔는지 가르기 전에는 모델을 바꿔도 숫자가 움직이지 않는다Re-classify the recorded ② errors before touching the modelPhân loại lại lỗi ② đã ghi trước khi sửa mô hình
  4. 어휘 공백(G-1)과 같은 뿌리다. 회전교차로 차로·진로변경 방향이 판정자에게 도달하지 못하는 것도 같은 결핍의 다른 얼굴이다Same root cause as the G-1 vocabulary gap.Cùng nguyên nhân gốc với khoảng trống từ vựng G-1.
🚨 결정이 아니라 표류로 사라진 것 하나 — 비평자one thing lost to drift, not decisionmột phần mất vì trôi thiết kế, không phải quyết định

비평자(critic)는 첫날 설계되었다. v1과 v2는 지금도 critic.md를 읽는다. v3는 읽지 않는다 — 그리고 어느 쪽에서도 측정된 적이 없다. 하던 일은 런타임 바운스와 모순 조항 규칙이 조용히 대신했다.

Tác nhân phản biện được thiết kế ngay ngày đầu. v1 và v2 vẫn đọc critic.md. v3 không đọc — cũng chưa từng đo ở phiên bản nào. Công việc của nó âm thầm được thay bằng cơ chế trả lại lúc chạy và quy tắc điều khoản mâu thuẫn.

🚨 그런데 CLAUDE.md는 아직 「보여 주기 전에 비평자」라고 약속한다. 측정된 적이 있기는 하다 — astra 포크에서: E-A-009가 사건 2401의 역할 반전을 실제로 잡았고, 이어진 E-A-009b는 비평자가 자기 프레임 id를 판독기 것과 혼동해 틀린 반대를 제기하는 것을 잡았다. 그 기록의 결론이 좋다 — 「두 번째 모델은 감사이지 신탁이 아니다」.

The critic was designed on day one and is still loaded by v1 and v2. v3 does not load it, and it was never measured in either — runtime bounces and the contradicted-clause rule quietly took over its job, while CLAUDE.md still promises "a critic before anything is shown". It was measured once, in the astra fork: E-A-009 caught a real role inversion on case 2401, and E-A-009b caught the critic raising a false objection by confusing its own frame ids with the reader's. The conclusion recorded there is worth keeping — "a second model is an audit, not an oracle."

Tác nhân phản biện được thiết kế ngày đầu, v1 và v2 vẫn tải nó. v3 không tải, chưa từng được đo ở cả hai — cơ chế trả lại khi chạy và quy tắc điều khoản mâu thuẫn âm thầm thay nhiệm vụ, trong khi CLAUDE.md vẫn hứa "phản biện trước khi hiển thị". Nó được đo một lần trong nhánh astra: E-A-009 bắt được lỗi đảo vai trò thật ở vụ 2401; E-A-009b bắt được phản đối sai của tác nhân vì nhầm ID khung hình của mình với bộ đọc. Kết luận đáng giữ: "mô hình thứ hai là bên kiểm tra, không phải nguồn chân lý."

3.4「확신이 서지 않는다」를 다루는 법 · The confidence problem · Vấn đề độ tin cậy

Jev는 모든 도표를 고려하는 것보다 빠르게 도달하거나, 아니면 시스템이 어떤 증거에도 확신하지 못해 길을 잃는다. 이것이 전반에 박힌 장치들의 이유다.

Either Jev is reached faster than considering every chart would take, or the system is confident in no evidence at all and loses its way. That is the reason for the machinery scattered through this chapter.

Hoặc đạt Jev nhanh hơn việc xem xét từng biểu đồ, hoặc hệ thống không tin bằng chứng nào và lạc hướng. Đó là lý do cho các cơ chế rải khắp chương này.

🗣 왜 Jev인가, 그리고 무엇으로 바꿀 수 있나why Jev, and what could replace itvì sao dùng Jev, có thể thay bằng gì

Jev를 쓰는 이유는 빠르기 때문이다. 채팅 모델은 응답이 느리고 턴마다 결과가 들쭉날쭉하다. Jev 자리에 쓸 수 있는 공개 모델이 있는지, 성능이 어떤지는 재어 볼 일로 남아 있다.

Jev is used because it is fast. A chat model is slower and varies from turn to turn. Whether an open-weight model could take that slot, and how it would perform, is left to be measured. 2026-10-12

Jev được dùng vì nhanh. Mô hình hội thoại chậm hơn, thay đổi giữa các lượt. Liệu mô hình trọng số mở thay được vị trí ấy không, hiệu quả thế nào, vẫn cần đo. 2026-10-12

묶여 있는 것들: default_decider()가 typesafe/* id만 받고, 문턱값이 전부 여기에 맞춰져 있다(CONFIDENT_P 0.6 · MARGIN 0.2 · 조항 일치 0.7 · 배제 0.8). 판독 1건에 decide 호출 8~25회, 채팅 턴당 12~30회.

Các ràng buộc đi kèm: default_decider() chỉ nhận ID typesafe/*, mọi ngưỡng đều được chỉnh theo nó (CONFIDENT_P 0.6 · MARGIN 0.2 · khớp điều khoản 0.7 · loại trừ 0.8). Mỗi lần đọc gọi decide 8~25 lần, mỗi lượt chat 12~30 lần.

검토된 대체 후보(돌려 보지는 않았다): Kev 9B · Clef-flash 9B · logit readout. 그리고 E-V-023이 이 교체의 대가를 이미 재 두었다 — 공개 모델에는 싼 결정 모델이 없어 25배 느려진다(중앙값 44~55초 vs 1.9초). Jev를 바꾸는 것은 모델 교체가 아니라 빠른 경로를 통째로 바꾸는 일이다.

Các phương án thay đã cân nhắc (chưa chạy): Kev 9B · Clef-flash 9B · đọc logit. E-V-023 đã đo giá phải trả cho thay đổi này — mô hình công khai thiếu bộ quyết định rẻ nên chậm hơn 25 lần (trung vị 44~55 giây so với 1.9 giây). Thay Jev không phải thay mô hình mà là thay cả đường xử lý nhanh.

그리고 도표가 판정기에 어떻게 도착하는지 — 「도표가 문서가 아니라 질문으로 도착합니다」. 사건 3에서는 54개 조항을 3번의 배치 호출로.

Jev is kept for latency, and the thresholds are tuned to it. Replacing it is not a model swap — E-V-023 measured the cost: an open stack has no cheap decision model, so the fast path is lost by construction and the judge runs 25× slower.

Jev được giữ vì độ trễ, các ngưỡng được chỉnh theo nó. Thay nó không chỉ là đổi mô hình — E-V-023 đã đo chi phí: hệ mở không có bộ quyết định rẻ, mất đường xử lý nhanh ngay từ cấu trúc, bộ phán định chạy chậm hơn 25×.

Either it reaches a chart faster than considering all of them, or it gets lost because the system is never confident about any evidence. Hence:

Hoặc chọn được biểu đồ nhanh hơn xem hết, hoặc lạc hướng vì không bao giờ đủ tin cậy với bằng chứng nào. Vì vậy cần:

장치mechanismcơ chế하는 일what it doeschức năng
tierread 판독 · measured 계측 · confirmed 확정 · claimed 주장 · undeterminable 판단 불가 · not_applicable 해당 없음read 판독 · measured · confirmed 확정 · claimed · undeterminable 판단 불가 · not_applicable 해당 없음read đã đọc · measured đã đo · confirmed đã xác nhận · claimed được khai báo · undeterminable không thể xác định · not_applicable không áp dụng
판단 불가không thể xác định실패가 아니라 답. 화면에서 중립색 — 절대 빨강 아님an answer, not a failure. Rendered neutrally — never redmột đáp án, không phải thất bại. Hiển thị trung tính — không bao giờ màu đỏ
P ≥ 0.6, margin ≥ 0.2P를 못 넘으면 트리가 멈추고 조사자에게 묻는다. 🚨 margin은 작동하지 않는다 — _choose_model이 margin에 p를 그대로 돌려준다 (§8.7)below P the walk stops and asks — but the margin test is inert (§8.7)dưới P, quá trình duyệt dừng và hỏi — nhưng kiểm tra biên chênh lệch không có tác dụng (§8.7)
두 판독의 불일치Reader disagreementBộ đọc bất đồng평결이 아니라 「두 판독이 다르다」로 기록하고 신뢰도를 낮춘다recorded as disagreement, not a verdict — and confidence dropsghi là bất đồng, không phải kết luận — và hạ độ tin cậy
tier 게이트the tier gateđiều kiện chặn theo cấp độread 등급 사실은 고객에게 서술될 수 없다 — 🚨 의도는 그렇지만 _narratable이 등급 검사를 우회한다 (§7.4)a read-tier fact may never be narrated — intended, but the check is bypassed (§7.4)sự kiện cấp read không được kể như kết luận — thiết kế là vậy nhưng kiểm tra bị bỏ qua (§7.4)
정직하게 · honestlynói thẳng

일부를 접은 이유는 자료가 없었거나(라벨·정답), 주어진 시간과 자원이 거기까지였기 때문이다. 그 전부가 막다른 길이었다는 뜻은 아니다 — 주어진 시간 안에서 실현 가능성을 보고 고른 결과다.

Parts were dropped for missing data — labels, ground truth — or because the time and resources ran to there. That does not make them dead ends; they are what feasibility allowed in the time available.

Một số phần dừng vì thiếu dữ liệu — nhãn, đáp án chuẩn — hoặc vì thời gian và nguồn lực chỉ cho phép tới đó. Không có nghĩa chúng là ngõ cụt; đó là giới hạn khả thi trong thời gian cho phép.

이 문서는 성공담이 아니다. 지금의 visus는 주어진 시간 안에서 고른 경로이지 최적해가 아니다. 알려진 결함은 7장에 모아 두었다.

This is not a success story. What exists is a feasible path chosen under time pressure, not an optimum. The known flaws are collected in chapter 7.

Đây không phải câu chuyện thành công. Những gì hiện có là lộ trình khả thi được chọn dưới áp lực thời gian, chưa phải tối ưu. Các lỗi đã biết được gom ở chương 7.

04시스템 · The System As Built · Hệ thống đã được xây dựng

권위 있는 문서는 레포 안에 있다 — docs/ARCHITECTURE.md, PLATFORM-v2.md, WORKFLOW.md. 이 장은 그것들을 연결하고 어디가 낡았는지 표시한다.

The authoritative documents live in the repo. This chapter connects them and marks what is stale.

Tài liệu có thẩm quyền nằm trong kho mã. Chương này kết nối chúng và đánh dấu nội dung đã cũ.

stale

docs/ARCHITECTURE.md 는 2026-09-23 기준이고 그 뒤로 ~90 커밋이 들어왔다 (5단계 워크플로, 도표 확정 잠금, stateless, CV 서비스, 오토스케일). 그 부분은 PLATFORM-v2.md와 WORKFLOW.md가 최신이다.is stamped 2026-09-23; ~90 commits landed after it. For those areas, PLATFORM-v2.md and WORKFLOW.md are current.mang ngày 2026-09-23; khoảng ~90 commit xuất hiện sau đó. Với các phần ấy, PLATFORM-v2.md và WORKFLOW.md mới là bản hiện hành.

4.0⭐ 한 건이 지나가는 길 — 실제 사건 하나로 · One real case, end to end · Một vụ việc thật, từ đầu đến cuối

이 절을 먼저 읽으면 나머지가 전부 쉽게 읽힌다. 아래는 지어낸 예가 아니라 2026-09 개발 DB에 남아 있는 실제 분석 하나다 — 사건 50, 분석 100063, 엔진 v3, 판독 모델 Fable 5.1. 영상은 AI Hub 공개 데이터 10초이고, 아래 사진은 판독 모델이 실제로 본 바로 그 프레임이다.

Read this section first and the rest of the document falls into place. What follows is not a constructed example but one real analysis from the September 2026 development database — case 50, analysis 100063, engine v3, reader model Fable 5.1. The clip is 10 seconds of public AI Hub footage, and the stills below are the exact frames the reader model was shown.

Đọc phần này trước, phần còn lại sẽ dễ hiểu hơn. Đây không phải ví dụ dựng mà là phân tích thật từ cơ sở dữ liệu phát triển tháng 9/2026 — vụ 50, phân tích 100063, bộ máy v3, bộ đọc Fable 5.1. Clip dài 10 giây từ nguồn AI Hub công khai; ảnh dưới là đúng các khung hình mô hình đã xem.

① 영상 — 10초에 일어난 일① The clip — what happens in ten seconds① Clip — chuyện diễn ra trong mười giây

2.5초 · 사거리 교차로 진입부. 신호주가 보인다2.5 s · approaching a signalled junction; the signal mast is visible2.5 s · tới gần giao lộ có đèn; thấy cột tín hiệu
4.4초 · 오른쪽 차로의 흰 승합차가 왼쪽으로 꺾기 시작한다4.4 s · the white van in the right-hand lane begins to turn left4.4 s · xe tải nhỏ màu trắng ở làn phải bắt đầu rẽ trái
4.8초 · 상대차 왼쪽 측면이 고객차 보닛 위에 걸쳐 있다4.8 s · the van’s left flank is across the bonnet4.8 s · hông trái xe tải cắt ngang phía trước ca-pô
7.5초 · 상대차는 앞으로 빠져 좌회전으로 이어간다7.5 s · the van pulls ahead and carries on into a left turn7.5 s · xe tải đi lên trước và tiếp tục rẽ trái

사람이 보면 10초짜리 장면 하나다. 시스템은 이것을 8단계로 나눠 읽고, 단계마다 문장 하나씩을 남긴다.

To a person this is a single ten-second scene. The system reads it in eight steps and leaves one sentence behind at each.

Với người, đây là một cảnh mười giây. Hệ thống đọc thành tám bước, mỗi bước để lại một câu.

② 0단계 — 계측이 먼저 돌다 (모델 호출 없음)② Step 0 — measurement runs first, with no model call② Bước 0 — đo trước, chưa gọi mô hình

판독 모델이 프레임을 보기 전에 CV 도구 둘이 먼저 돌고, 그 결과가 뒤단계 입력으로 들어간다. 아래는 이 분석이 실제로 받은 문자열 그대로다.

Before the reader model sees a single frame, two CV tools run and their output becomes input to the later steps. These are the strings this analysis actually received.

Trước khi bộ đọc xem một khung hình nào, hai công cụ CV chạy, đầu ra làm đầu vào các bước sau. Đây là các chuỗi phân tích này thực sự nhận được.

도구toolcông cụ돌려준 값what it returnedkết quả trả về신뢰도confđộ tin cậy
ego_heading「고객차 진행방향 변화 −5° (직진; 변화 구간 없음)」 · yaw_delta −5.0° · valid_frac 0.86 · 카메라 힌트 「배경이 다가옴」"the 고객차’s heading changed by −5° (straight; no turning segment)" · yaw_delta −5.0° · valid_frac 0.86 · camera hint: "the background is approaching""hướng của 고객차 thay đổi −5° (đi thẳng; không có đoạn rẽ)" · yaw_delta −5.0° · valid_frac 0.86 · gợi ý camera: "cảnh nền đang tiến lại gần"0.55
other_path「최초 등장: 오른쪽 (x 0.67, 0.0 s); 오른쪽에 머문 (0.0–5.6 s); 충돌 직전 1.5 s: 오른쪽, 왼쪽으로 (x 0.82→0.61, 상자 폭 0.36→0.54, 커짐); 충돌 후 9.9 s: 왼쪽」"first seen: right (x 0.67 at 0.0 s); stays right (0.0–5.6 s); in the 1.5 s before impact: right, moving left (x 0.82→0.61, box width 0.36→0.54, growing); after impact at 9.9 s: left""thấy đầu tiên: bên phải (x 0.67 ở 0.0 s); giữ bên phải (0.0–5.6 s); trong 1.5 s trước va chạm: bên phải, chuyển sang trái (x 0.82→0.61, chiều rộng hộp 0.36→0.54, đang lớn lên); sau va chạm tại 9.9 s: bên trái"0.63

⭐ 여기서 이 시스템의 성격이 드러난다. 계측은 「오른쪽에서 왼쪽으로, 상자가 커지면서」라고만 말한다 — 「진로변경」이라고 말하지 않는다. 그 이름을 붙이는 것은 판독 모델의 일이고, 붙였으면 근거로 계측 이름을 적어야 한다.

⭐ This is where the character of the system shows. The measurement says only "from the right, moving left, box growing" — it never says "lane change". Naming it is the reader model’s job, and once it does, it must cite the measurement as its evidence.

⭐ Đây là nơi thể hiện bản chất hệ thống. Phép đo chỉ nói "từ phải, di chuyển trái, hộp lớn dần" — không bao giờ nói "chuyển làn". Đặt tên là việc của bộ đọc; sau khi đặt tên, nó phải trích phép đo làm bằng chứng.

③ 1–8단계 — 순서가 강제된 읽기, 그리고 남은 여덟 문장③ Steps 1–8 — the forced reading order, and the eight sentences it left③ Bước 1–8 — thứ tự đọc bắt buộc và tám câu để lại

이 분석의 실제 단계 순서는 measure → scene → impact_grid → impact_seq → ego → other → camera → statements였고, 8턴 · 이미지 21장 · $0.835가 들었다. 남은 사실은 여덟이고, 각각 등급과 근거를 달고 있다.

The step order this analysis actually took was measure → scene → impact_grid → impact_seq → ego → other → camera → statements, at a cost of 8 turns, 21 images, $0.835. It left eight facts, each carrying a tier and its evidence.

Thứ tự thực sự của phân tích này là measure → scene → impact_grid → impact_seq → ego → other → camera → statements, tốn 8 lượt, 21 ảnh, $0.835. Nó để lại tám sự kiện, mỗi sự kiện có cấp độ và bằng chứng.

사실factsự kiện모델이 쓴 문장 (요약)the sentence it wrote (abridged)câu đã viết (rút gọn)등급tiercấp độ
s1 현장s1 hiện trường
scene
신호기 있는 사거리 교차로 진입부. 상대차는 처음부터 오른쪽 옆 차로에서 같은 방향으로 나란히 진행 → 교차 진입이 아니라 동일방향 사고a signalled four-way junction. The other car travelled alongside in the right-hand lane from the start → so this is a same-direction accident, not a crossing onegiao lộ bốn nhánh có đèn. Xe đối phương chạy song song ở làn phải ngay từ đầu → đây là tai nạn cùng hướng, không phải cắt ngangread
s2 신호s2 tín hiệu
signal
신호기는 있으나 신호 색은 판단 불가 — 역광·측면으로 점등 색 판독 불가a signal head is present but its colour cannot be determined — backlit and side-oncó đèn tín hiệu nhưng không xác định được màu — ngược sáng và nhìn nghiêngundeterminable
s3 도로폭s3 chiều rộng đường
width
해당 없음/판단 불가 — 두 차가 같은 도로의 인접 차로에 있어 폭을 비교할 대상이 없다not applicable / undeterminable — both cars are in adjacent lanes of the same road, so there is nothing to compare widths againstkhông áp dụng / không thể xác định — hai xe ở hai làn kề nhau trên cùng đường, không có đường khác để so chiều rộngundeterminable
s4 충돌s4 va chạm
impact
약 5.0초, 고객차 보닛 앞 중앙~오른쪽과 상대차 왼쪽 측면. 하단 센서 수치 0.02→0.29 도약about 5.0 s, the 고객차’s front-centre-right against the van’s left flank; the on-screen sensor jumps 0.02→0.29khoảng 5.0 s, vùng trước giữa lệch phải của 고객차 chạm hông trái xe tải; cảm biến trên màn hình nhảy 0.02→0.29read
s5 고객차s5 xe khách hàng
ego
자기 차로를 유지하며 직진 — 배경이 좌우로 흐르지 않고 차로선 평행. 계측 −5°와 일치held its lane, going straight — the background does not sweep and the lane lines stay parallel. Agrees with the measured −5°giữ làn, đi thẳng — cảnh nền không quét ngang, vạch làn giữ song song. Khớp mức đo −5°measured
s6 상대차s6 xe đối phương
other
오른쪽 옆 차로에서 같은 방향으로 나란히(약간 앞서) 진행 · 계측의 「0.0–5.6 s 오른쪽에 머문」과 일치travelling alongside in the right-hand lane, slightly ahead · matches the measurement’s "stays right, 0.0–5.6 s"chạy song song ở làn phải, hơi phía trước · khớp phép đo "giữ bên phải, 0.0–5.6 s"measured
s7 상대차 기동s7 động tác xe đối phương
other manoeuvre
🔸 오른쪽 차로에서 고객차 앞으로 왼쪽으로 진로변경 · 근거로 frames/04.40과 계측 x 0.82→0.61, 폭 0.36→0.54를 함께 적는다🔸 changed lanes from the right into the 고객차’s path · citing both frames/04.40 and the measurement x 0.82→0.61, width 0.36→0.54🔸 chuyển từ làn phải vào đường chạy của 고객차 · trích cả frames/04.40 và phép đo x 0.82→0.61, width 0.36→0.54measured
s8 카메라s8 camera
camera
고객차의 전방 카메라 — 보닛 상단과 대시보드가 보이고 황단보도가 다가오며 커짐a forward camera on the 고객차 — bonnet and dashboard are in shot and the crossing grows as it approachescamera trước của 고객차 — thấy ca-pô và bảng điều khiển, giao lộ lớn dần khi tiến gầnmeasured

🔸 s7이 이 사건의 결정적 사실이다 — 상대차가 진로변경했는지 여부가 43 계열을 가른다. 그리고 s2·s3이 판단 불가로 남은 것이 정상이다 — 영상이 보여 주지 않는 것을 지어내지 않았다는 뜻이고, §4.3가 말하는 설계가 바로 이것이다.

🔸 s7 is the deciding fact here — whether the other car changed lanes is what separates the 43 family. And s2 and s3 staying undeterminable is the system working, not failing: it declined to invent what the video does not show, which is the design §4.3 describes.

🔸 s7 là sự kiện quyết định ở đây — xe đối phương có chuyển làn không là điều phân biệt nhóm 43. s2 và s3 vẫn không xác định là hệ thống hoạt động đúng, không phải thất bại: nó từ chối bịa điều video không cho thấy, đúng thiết kế ở §4.3.

④ 판정 — 책의 조항에 사실을 대조한다④ The judgement — facts checked against the book’s clauses④ Phán định — đối chiếu sự kiện với điều khoản trong sách

판정자는 도표를 「고르지」 않는다. 후보 도표의 조항을 하나씩 사실과 대조해 matched / contradicted / unknown을 붙인다. 아래는 탈락한 후보 차43-1에 실제로 붙은 표다.

The judge does not "pick" a chart. It walks the candidate’s clauses one at a time against the facts and marks each matched / contradicted / unknown. This is the table it actually produced for the losing candidate, 차43-1.

Bộ phán định không "chọn" biểu đồ. Nó lần lượt đối chiếu điều khoản ứng viên với sự kiện, đánh dấu matched / contradicted / unknown. Đây là bảng thật tạo cho ứng viên bị loại, 차43-1.

차43-1 조항차43-1 clauseđiều khoản 차43-1역할 Aas Avới vai trò A역할 Bas Bvới vai trò B
일반 도로 또는 고속도로an ordinary road or an expresswayđường thông thường hoặc đường cao tốcunknownunknown
차로가 감소하거나 합류하는 지점a point where lanes end or mergeđiểm kết thúc hoặc nhập lànunknownunknown
고객차 본선 진행the 고객차 running on the main line고객차 chạy trên tuyến chínhmatched—
고객차 진로변경하여 본선에 합류the 고객차 merging by changing lanes고객차 nhập đường bằng chuyển làn—contradicted

역할 B가 모순으로 즉시 탈락한다 — s5가 「고객차는 차로를 유지했다」고 말했기 때문이다. 그랬는데도 나머지 조항 둘은 끝내 unknown으로 남았고, 그것이 최종 신뢰도를 0.6에 묶어 둔다.

Role B dies immediately on a contradiction, because s5 said the 고객차 held its lane. Even so, two clauses stay unknown to the end, and that is what holds the final confidence down to 0.6.

Vai trò B bị loại ngay vì mâu thuẫn, do s5 nói 고객차 giữ làn. Dù vậy, hai điều khoản vẫn unknown đến cuối, khiến độ tin cậy cuối chỉ ở 0.6.

⑤ 나온 것 — 답, 차선, 그리고 되묻는 질문⑤ What came out — an answer, a runner-up, and a question back⑤ Đầu ra — câu trả lời, ứng viên thứ hai, câu hỏi trả lại

도표chartbiểu đồ차43-2 — 후행 직진 대 선행 진로변경— a following car going straight against a leading car changing lanes— xe đi sau đi thẳng gặp xe đi trước chuyển làn
역할rolevai tròA (고객차 = 후행 직진차)(the 고객차 is the following car going straight)(고객차 là xe đi sau đi thẳng)
신뢰도confidenceđộ tin cậy0.6 — 조항 둘이 unknown으로 남았기 때문— because two clauses stayed unknown— vì hai điều khoản chưa xác định
차선runner-upứng viên thứ hai차43-1 (합류 지점) — 버려지지 않고 기록된다(the merge case) — recorded, not discarded(trường hợp nhập làn) — được ghi lại, không vứt bỏ
⭐ 되묻는 질문⭐ the question back⭐ câu hỏi trả lại「고객차가 뒤(후행)이었습니까?」 · 미확인 항목 도로 · 고객차가 뒤(후행)"Was the 고객차 the following vehicle?" · unverified: road type and following position"고객차 có phải xe đi sau không?" · chưa kiểm chứng: loại đường, vị trí đi sau

이 마지막 칸이 제품의 핵심이다. 시스템은 답을 내놓고 끝내지 않고, 자기가 확인하지 못한 것을 이름으로 짚어 사정사에게 되묻는다. 사정사가 한 문장으로 답하면 그 답이 새 사실로 들어가고 도표가 다시 도출된다 — §4.4의 채팅이 하는 일이다.

That last row is the product. The system does not stop at an answer: it names what it could not verify and hands the question back to the adjuster. One sentence in reply becomes a new fact and the chart is derived again — which is what the chat in §4.4 is for.

Hàng cuối đó chính là sản phẩm. Hệ thống không dừng ở câu trả lời: nó nêu điều chưa kiểm chứng, chuyển câu hỏi cho chuyên viên. Một câu trả lời trở thành sự kiện mới, biểu đồ được suy ra lại — đó là mục đích phần chat ở §4.4.

⑥ 그리고 화면은 이렇게 생겼다 — 사정사가 실제로 보는 것⑥ And this is what it looks like — what an adjuster actually sees⑥ Giao diện thực tế — chuyên viên nhìn thấy gì

아래 세 장은 2026-10-19에 운영(ams.smt.ai.kr)에서 그대로 찍은 화면이다. ⚠️ 위의 사건 50과는 다른 사건들이다 — 운영과 9월 개발 DB는 별개고 번호가 같아도 같은 사건이 아니다.

These three are captured from production (ams.smt.ai.kr) on 2026-10-19, read-only. ⚠️ They are different cases from the case 50 above — production and the September development database are separate, and the same number is not the same case.

Ba ảnh chụp từ production (ams.smt.ai.kr) ngày 2026-10-19, chỉ đọc. ⚠️ Đó là các vụ khác vụ 50 phía trên — production và cơ sở dữ liệu phát triển tháng 9 tách biệt; cùng số không có nghĩa cùng vụ.

사건 목록. 운영에 312건. 상단 필터가 공정의 단계다 — 판독 중 0 · 도표 확정 대기 303 · 과실 협의 9 · 고객 안내 0 · 종결 0. 한 줄이 한 사건이고, 도표·지금 단계·다음 할 일이 붙어 있다. 거의 전부가 「도표 확정 대기」에 멈춰 있다는 것이 지금의 상태다.The case list. 312 cases in production. The filters along the top are the stages of the work — reading 0, awaiting chart settlement 303, in negotiation 9, customer notice 0, closed 0. Each row carries its chart, its current stage and the next action. That nearly all of them sit at "awaiting chart settlement" is the state of the product today.Danh sách vụ việc. Production có 312 vụ. Bộ lọc phía trên là các giai đoạn — đang đọc 0, chờ chốt biểu đồ 303, đàm phán 9, thông báo khách hàng 0, đóng 0. Mỗi hàng có biểu đồ, giai đoạn hiện tại, hành động tiếp theo. Gần như tất cả nằm ở "chờ chốt biểu đồ" phản ánh trạng thái sản phẩm hiện tại.
사건 화면. 위에서부터 — 다섯 단계 띠(판독 → 도표 확정 → 과실 협의 → 고객 안내 → 종결), 프레임 단위로 움직이는 영상, 그리고 「책의 경로」 — 차대차 → 교차로 95% → 신호등 없는 교차로 97% → … → 차16-3. 단계마다 확신도가 붙어 있는 것이 핵심이다 — 도표를 「고른」 것이 아니라 책을 따라 걸어간 경로가 보인다. 아래 판정 카드가 고객차 = 도표 B(80) · 상대차 = 도표 A(20)와 차선책 차16-1을 함께 보여 준다The case view. From the top: the five-stage strip (reading → settle the chart → negotiation → customer notice → close), a video that steps frame by frame, and the path through the book — car-to-car → junction 95% → unsignalled junction 97% → … → 차16-3. The confidence on every step is the point: the chart was not "picked", it was walked to. The verdict card below gives 고객차 = chart position B (80) and 상대차 = position A (20), with 차16-1 as the runner-upTrang vụ việc. Từ trên xuống: thanh năm giai đoạn (đọc → chốt biểu đồ → đàm phán → thông báo khách hàng → đóng), video xem từng khung hình, đường đi qua sách — ô tô với ô tô → giao lộ 95% → giao lộ không đèn 97% → … → 차16-3. Độ tin cậy từng bước là điểm chính: biểu đồ không được "chọn đại" mà được lần tới. Thẻ kết luận bên dưới cho 고객차 = vị trí B (80), 상대차 = vị trí A (20), với 차16-1 là ứng viên thứ hai
과실 협의 화면(2단계). §4.4가 어려운 말로 설명한 비율 스트립이 여기 그대로 있다 — 왼쪽「우리 쪽 협의 중 항목 없음 70」·가운데「지금 기준 70」·오른쪽「상대 쪽 70」과 0–100 눈금. 아래는 가감요소 검토 — 우리가 주장할 수 있는 것 15개 대 상대가 주장할 수 있는 것 19개. ⭐ 각 항목에 「자료 필요」·「근거 약함」·「확인됨」이 붙어 있다 — 이것이 등급 어휘가 고객 화면까지 내려온 모양이다. 헤더가 34/34개 항목 · 자료 필요 27이라고 적는다 — 대부분은 영상만으로는 채울 수 없다는 뜻The negotiation board (stage 2). The ratio strip §4.4 describes in prose is right here — "nothing of ours in play, 70" on the left, "as it stands, 70" in the centre, "nothing of theirs, 70" on the right, over a 0–100 scale. Below it, the modifier review: 15 things we could argue against 19 things they could. ⭐ Every row is graded "needs evidence", "weak basis" or "confirmed" — this is the tier vocabulary reaching the surface. The header reads 34 of 34 items · 27 need evidence, which is to say most of them cannot be closed from the video aloneBảng đàm phán (giai đoạn 2). Thanh tỷ lệ mô tả bằng chữ ở §4.4 nằm ngay đây — bên trái "không tính yếu tố bên ta, 70", giữa "hiện tại, 70", phải "không tính yếu tố bên họ, 70", trên thang 0–100. Bên dưới là duyệt yếu tố điều chỉnh: 15 điều ta có thể lập luận so với 19 điều bên họ có thể dùng. ⭐ Mỗi hàng được xếp "cần bằng chứng", "cơ sở yếu" hoặc "đã xác nhận" — hệ cấp độ đã tới giao diện. Đầu bảng ghi 34/34 mục · 27 cần bằng chứng, tức phần lớn không thể chốt chỉ từ video

✅ 코드 위의 모든 값은 9월 개발 DB(Supabase, 사건 59건 · 09-21~09-29)에서 그대로 읽어왔다 — analyses · analysis_facts · analysis_trace · analysis_assets의 분석 100063. 사진은 analyses/100063/frames/에 저장된 프레임이고, 클립 원본과 대조해 동일함을 확인했다.

✅ code Every value above was read out of the September development database (Supabase, 59 cases, 09-21 to 09-29) — analysis 100063 in analyses, analysis_facts, analysis_trace and analysis_assets. The stills are the stored frames from analyses/100063/frames/, checked against the original clip.

✅ mã nguồn Mọi giá trị trên được đọc từ cơ sở dữ liệu phát triển tháng 9 (Supabase, 59 vụ, 09-21 tới 09-29) — phân tích 100063 trong analyses, analysis_facts, analysis_trace, analysis_assets. Ảnh là khung hình lưu trong analyses/100063/frames/, đã đối chiếu clip gốc.

⚠️ 운영 DB에서 이 사건을 찾지 말 것. 운영은 RDS visus-db이고 사건이 312건(10-15까지)이며, 거기의 사건 50은 다른 영상·다른 분석이다. 위 분석은 9월 개발 DB의 것이고, 두 DB는 사건 번호가 같아도 같은 사건이 아니다 — visus/.env의 DATABASE_URL은 Supabase를 가리킨다(§6.1).

⚠️ Do not look for this case in production. Production is RDS visus-db with 312 cases through 10-15, and case 50 there is a different clip and a different analysis. The one above lives in the September development database, and the same case number does not mean the same case across the two — the DATABASE_URL in visus/.env points at Supabase (§6.1).

⚠️ Đừng tìm vụ này trong production. Production là RDS visus-db, có 312 vụ đến 10-15; vụ 50 ở đó là clip và phân tích khác. Vụ phía trên nằm trong cơ sở dữ liệu phát triển tháng 9, cùng số vụ không có nghĩa là cùng vụ giữa hai nơi — DATABASE_URL trong visus/.env trỏ Supabase (§6.1).

webNext.js :3000api.pyFastAPI :8020service.pyDB 전용 · all DB accesschuyên trách DB · mọi truy cập DBPostgresvisus_appworkerjob 클레임nhận tác vụS3framesCV serviceGPU 1 slotOpenRoutermodelsFOR UPDATE SKIP LOCKEDHTTP브라우저는 2초마다 폴링한다. API는 DB를 직접 만지지 않고 전부 service.py로 넘긴다.The browser polls every 2 s. The API never touches the database — everything goes through service.py.Trình duyệt hỏi lại mỗi 2 s. API không chạm trực tiếp cơ sở dữ liệu — mọi thứ đi qua service.py.

그림 1. 한 건이 지나가는 경로. 워커는 줄에서 작업을 원자적으로 집어가고, GPU는 한 프로세스가 소유해 HTTP로 부른다.Figure 1. The path one case takes. The worker claims a job atomically, and one process owns the GPU, called over HTTP.Hình 1. Đường đi của một vụ việc. Worker nhận tác vụ bằng thao tác nguyên tử, một tiến trình sở hữu GPU và được gọi qua HTTP.

4.1모양 · Shape · Cấu trúc

   browser
      │  cookie visus_session (same-site)
      ▼
┌──────────────┐        ┌───────────────┐
│  web :3000   │ HTTP   │  API :8020    │  FastAPI · visus/api.py
│  Next.js 16  │───────▶│  never touches│  thin: auth + shape only
└──────────────┘        │  the DB       │
                        └───────┬───────┘
                                │ visus/service.py   ← all lifecycle logic
                                ▼
                        ┌───────────────┐      ┌────────────────────┐
                        │ Postgres      │◀────▶│ worker (N procs)   │
                        │ schema        │ jobs │ SELECT … SKIP LOCKED│
                        │ visus_app     │      └─────────┬──────────┘
                        └───────────────┘                ▼
                                       runs/scratch/<analysis_id>/  ← the workspace
                                                         │
                                      ┌──────────────────┴─────────────┐
                                      ▼                                ▼
                              OpenRouter (models)          S3 (clips, frames, media)
   trình duyệt
      │  cookie visus_session (cùng trang)
      ▼
┌──────────────┐        ┌───────────────────┐
│  web :3000   │ HTTP   │  API :8020        │  FastAPI · visus/api.py
│  Next.js 16  │───────▶│  không truy cập DB│  chỉ xác thực + định dạng
└──────────────┘        └─────────┬─────────┘
                                 │ visus/service.py  ← toàn bộ logic vòng đời
                                 ▼
                        ┌───────────────┐      ┌─────────────────────┐
                        │ Postgres      │◀────▶│ worker (N tiến trình)│
                        │ schema        │ jobs │ SELECT … SKIP LOCKED│
                        │ visus_app     │      └─────────┬───────────┘
                        └───────────────┘                ▼
                                       runs/scratch/<analysis_id>/  ← vùng làm việc
                                                         │
                                      ┌──────────────────┴─────────────┐
                                      ▼                                ▼
                              OpenRouter (mô hình)          S3 (clip, khung hình, media)

4.2사건은 폴더다 · The case is a workspace · Vụ việc là một không gian làm việc

핵심 설계 아이디어: 에이전트가 레포에서 일하는 코딩 에이전트처럼 일한다. 사건 하나가 디렉터리이고, 에이전트의 일은 그 안에 파일을 쓰는 것이다. 워커에서 왔든 오프라인 CLI든 채팅 턴이든 같은 파일이다.

The central idea: the agent works a case the way a coding agent works a repo. Same files whether it came from the worker, the offline CLI, or a chat turn.

Ý tưởng trung tâm: tác nhân xử lý vụ việc như tác nhân lập trình xử lý kho mã. Cùng các tệp dù được gọi từ worker, CLI ngoại tuyến hay lượt chat.

runs/scratch/<analysis_id>/
  case.json      media id · 길이 · 그리드 형상 · 초기 보고
  grid.jpg       클립 전체를 담은 타임스탬프 contact sheet 한 장
  frames/        시각으로 이름 붙인 스틸 — 03.50.jpg
  facts.jsonl    ← 에이전트가 쓴다. 한 줄에 JSON 하나, id로 UPSERT
  chart.json     ← 판정
  fit.json       후보 도표마다 절 단위 적합도 (+ 트리 보행)
  notes.md       작업 메모runs/scratch/<analysis_id>/
  case.json      media id, duration, grid geometry, the initial report
  grid.jpg       one timestamped contact sheet spanning the whole clip
  frames/        stills named by timestamp — 03.50.jpg
  facts.jsonl    ← the agent writes this. One JSON per line, UPSERT BY id
  chart.json     ← the verdict
  fit.json       clause-by-clause fit per candidate chart (+ the tree walk)
  notes.md       working notesruns/scratch/<analysis_id>/
  case.json      ID tư liệu, thời lượng, hình học lưới, báo cáo ban đầu
  grid.jpg       bảng ảnh có mốc thời gian bao phủ toàn clip
  frames/        ảnh đặt tên theo thời điểm — 03.50.jpg
  facts.jsonl    ← tác nhân ghi tệp này. Mỗi dòng một JSON, UPSERT BY id
  chart.json     ← kết luận
  fit.json       độ khớp từng điều khoản của mỗi ứng viên (+ đường duyệt cây)
  notes.md       ghi chú làm việc

facts.jsonl은 id로 upsert한다 — 에이전트는 바꾸는 줄만 쓰고, 언급하지 않은 것은 살아남는다. 채팅 수정이 안전한 이유가 이것이다.

Writing a partial file is correct and intended — anything unmentioned survives. That is what makes chat edits safe.

Chỉ ghi một phần tệp là đúng và có chủ đích — nội dung không nhắc tới được giữ nguyên. Nhờ vậy chỉnh sửa bằng chat an toàn.

코드에 있는 가드 · guards that live in code, not promptsCơ chế bảo vệ nằm trong mã, không chỉ trong prompt

한 채팅 턴이 조사자가 확인한 사실을 무관한 근거로 뒤집고 who="adjuster"로 서명한 뒤에 생겼다.

Chúng xuất hiện sau khi một lượt chat đảo ngược sự kiện chuyên viên đã xác nhận bằng bằng chứng không liên quan, rồi dùng who="adjuster" để ký tên.

  1. who는 시스템이 찍는다 — 모델이 주장할 수 없다who is stamped by the system — a model cannot claim ithệ thống gắn who — mô hình không tự nhận được
  2. 사람이 출처인 사실은 조용히 뒤집히지 않는다 — 거부되고, 에이전트는 물어야 한다a human-sourced fact is not silently reversed — the write is refused and the agent must asksự kiện do người cung cấp không bị âm thầm đảo ngược — lệnh ghi bị từ chối, tác nhân phải hỏi

After one turn reversed an adjuster's confirmed fact on unrelated evidence and signed it as the adjuster: who is now stamped by the system, and a human-sourced fact cannot be flipped — the write is refused and the agent must ask.

Sau khi một lượt đảo sự kiện chuyên viên đã xác nhận bằng bằng chứng không liên quan rồi ký tên như chuyên viên: who nay do hệ thống gắn, sự kiện từ người không được lật ngược — lệnh ghi bị từ chối, tác nhân phải hỏi.

A model will talk its way past a prompt. It cannot talk its way past code.Mô hình có thể tìm cách vượt qua prompt. Nó không thể vượt qua ràng buộc trong mã.

🚨 그러나 이 두 가드는 채팅 경로에서만 참이다. 판독 경로에서는 normalise_statement가 모델이 보낸 who를 살려 둔다(v2.py:358) → 판독기가 who:"adjuster"를 내면 사람 잠금을 획득한다. 전체 목록은 §7.4, 등록부는 §8.14-G.

🚨 Both guards hold on the chat path only — on the reading path a model-supplied who survives. See §7.4.

🚨 Cả hai cơ chế chỉ có tác dụng trên đường chat — đường đọc vẫn giữ who do mô hình cung cấp. Xem §7.4.

🚨 upsert가 가정하는 것 — 「한 명의 일관된 응답자」, 그리고 그것이 깨졌던 기록what upsert assumes — "one consistent respondent" — and the measurement showing it brokengiả định của upsert — "một người trả lời nhất quán" — và phép đo cho thấy giả định hỏng

id로 upsert한다는 규칙은 좋은 규칙이다. 그런데 그 규칙 아래에는 가정이 하나 있다 — 턴을 거듭해도 같은 사람이 같은 영상을 기억하고 답한다는 가정이다. 2026-09-04에 vlm이 그 가정을 직접 쟀다. 모델은 턴마다 완전히 무상태이고, 누적되는 것은 엔진 쪽의 답 목록뿐이며, 엔진은 그것을 일관된 한 응답자의 답으로 취급한다. 일관성 검사는 어디에도 없었다.

Upserting by id is a good rule, and underneath it sits an assumption: that across turns the same respondent remembers the same video. On 2026-09-04 vlm measured that assumption directly. The model is entirely stateless per turn; what accumulates is the engine's list of answers, and the engine treats them as coming from one consistent respondent. There was no consistency check anywhere.

Upsert theo ID là quy tắc tốt, nhưng ẩn dưới là giả định: qua các lượt, cùng người trả lời nhớ cùng video. Ngày 2026-09-04, vlm đo trực tiếp giả định đó. Mô hình hoàn toàn không giữ trạng thái mỗi lượt; thứ tích lũy là danh sách đáp án của bộ máy, được coi là từ một người trả lời nhất quán. Không có kiểm tra nhất quán ở đâu.

실행runlần chạy한 클립 안에서 「충돌 있음」과 「충돌 없음」을 모두 주장clips asserting both "collision" and "no collision"clip khẳng định cả "có va chạm" và "không va chạm"다른 턴에서 상대차 움직임을 서술하면서 상대차를 「해당 없음」으로 답함counterpart answered "not applicable" while its motion is described in another turntrả lời xe đối phương "không áp dụng" nhưng lại mô tả chuyển động ở lượt khác
BASE (68편 clips clip)3023
R2 (68)218
G2 (12)73
G2F8 (12)103

🚨 즉 44%(BASE)에서 83%(G2F8)의 클립에서 서로 모순되는 장면 해석이 공존한다 — 예외가 아니라 구조다. 그리고 프레임을 늘릴수록 나빠진다(G2F8이 최악): 매 턴의 재해석 분산이 함께 커지기 때문이다. 기록에 적힌 해법은 단순하다 — <scene>을 클립당 한 번 만들고 이후 턴은 그것을 참조할 것.

🚨 So on 44% (BASE) to 83% (G2F8) of clips, mutually contradictory scene readings coexist — the structure, not the exception. And it gets worse with more frames (G2F8 is the worst), because the per-turn re-interpretation variance grows with them. The fix in the record is simple: generate the <scene> once per clip and have later turns reference it.

🚨 Ở 44% (BASE) tới 83% (G2F8) clip, các cách đọc cảnh mâu thuẫn cùng tồn tại — đây là cấu trúc chung, không phải ngoại lệ. Thêm khung hình còn làm tệ hơn (G2F8 kém nhất), vì biến thiên diễn giải lại mỗi lượt tăng theo chúng. Cách sửa trong hồ sơ rất đơn giản: tạo <scene> một lần cho mỗi clip, các lượt sau tham chiếu nó.

⚠️ 사람과 비교하는 논거는 반대 방향으로 간다: 「사람 라벨러는 문항별로 답해도 영상에 대한 기억을 문항 사이에 유지한다.」 문항식 인터페이스가 사람에게 안전한 이유가 모델에게는 적용되지 않는다. visus에서 확인할 것: 한 사건의 facts.jsonl에서 서로 양립할 수 없는 사실 쌍이 함께 살아남을 수 있는가. upsert는 id가 같을 때만 덮어쓴다 — id가 다른 두 모순은 둘 다 남는다.

⚠️ The comparison with people runs the other way: "a human labeller answers question by question but keeps a memory of the video between questions." What makes a question-at-a-time interface safe for people does not transfer to the model. What to check in visus: whether a case's facts.jsonl can hold two facts that cannot both be true. Upsert overwrites only when the id matches — two contradictions under different ids both survive.

⚠️ So với con người thì ngược lại: "người gán nhãn trả lời từng câu nhưng giữ ký ức về video giữa các câu." Điều khiến giao diện từng câu an toàn cho người không áp dụng được cho mô hình. Cần kiểm tra trong visus: facts.jsonl của một vụ có thể chứa hai sự kiện không thể cùng đúng không. Upsert chỉ ghi đè khi trùng ID — hai mâu thuẫn mang ID khác nhau đều còn lại.

4.3엔진 셋 — 나란히, 측정됨 · Three engines, side by side · Ba bộ máy đặt cạnh nhau

⭐ 세 역할의 분리 — 설계를 한 문장으로the three roles, in one lineba vai trò trong một câu

KB에 설명하기 위해 쓰인 문장인데, 이 시스템의 구조를 가장 짧게 말한 것이다:

Câu dùng để giải thích cho KB nhưng cũng là mô tả ngắn nhất về cấu trúc hệ thống:

「한 사람이 영상도 보고 도표도 정하면, 본 것에 맞는 도표를 고르게 됩니다. 그래서 도표는 영상을 보지 않은 쪽이 정합니다.」

"Nếu cùng một người xem video và chọn biểu đồ, họ sẽ chọn biểu đồ phù hợp với điều mình đã thấy. Vì vậy bên chưa xem video mới quyết định biểu đồ."

lense는 픽셀을 보고 책을 절대 보지 않는다 · 판독기는 픽셀과 책을 둘 다 보되 본 것만 쓴다 · 판정기는 진술과 책을 보고 픽셀을 절대 보지 않는다.

If one party both watches the video and picks the chart, it picks the chart that fits what it saw. So the chart is decided by the party that did not watch. lense sees pixels, never the book; the reader sees both and writes only what it saw; the arbiter sees statements and the book, never a pixel.

Nếu cùng một bên xem video và chọn biểu đồ, họ sẽ chọn biểu đồ khớp điều mình thấy. Vì vậy bên chưa xem video quyết định biểu đồ. lense thấy pixel, không thấy sách; bộ đọc thấy cả hai nhưng chỉ ghi điều đã quan sát; bộ phân xử thấy các câu mô tả và sách, không thấy pixel.

그리고 자유를 why 뺏었는지도 코드 주석에만 있었다 — 「처음엔 영상을 통째로 주고 알아서 보라고 했는데, 틀린 게 도표가 아니라 「본 것」이었다. 좌우를 바꿔 읽고, 나란히 가는 차를 마주 오는 차로 보고, 회전교차로를 못 알아봤다. 자유롭게 훑는 방식은 볼 곳을 스스로 정하다 보니 정작 중요한 순간을 지나쳤다」 — 같은 사건에서 측정된 순서는 v3 4/10 · v1 1/10 · v2 0/10. 「빼야 했던 것은 자유였다.」

And why the freedom was taken away exists only in a code comment — "at first we handed over the whole video and said look at it yourself, but what was wrong was not the chart, it was what it saw. It read left for right, took a car travelling alongside for one coming the other way, and failed to recognise a roundabout. Scanning freely, it chose where to look and so went past the moment that mattered." Measured on the same cases, in order: v3 4/10 · v1 1/10 · v2 0/10. "What had to be removed was the freedom."

Lý do vì sao bỏ tự do chỉ nằm trong chú thích mã — "ban đầu đưa cả video và bảo tự xem, nhưng sai không ở biểu đồ mà ở điều nó thấy. Đọc trái thành phải, coi xe chạy song song là xe ngược chiều, không nhận ra vòng xuyến. Tự do quét khiến nó tự chọn chỗ nhìn và bỏ qua khoảnh khắc quan trọng." Đo cùng các vụ, theo thứ tự: v3 4/10 · v1 1/10 · v2 0/10. "Phải loại bỏ sự tự do."

id이름nametên접근 · approachcách tiếp cận
v1어휘+표hệ thuật ngữ + bảng7컬럼 통제 어휘 → 평면 표 랭커 → 증거 판정controlled vocabulary → flat table → evidence judgehệ thuật ngữ kiểm soát → bảng phẳng → phán định bằng chứng
v2문장+책 읽기statements + reading the bookcác câu mô tả + đọc sách증거 붙은 문장 → 책 본문 검색 → 조항 적합도. judge()를 소유statements with evidence → book retrieval → clause fitcác câu có bằng chứng → truy xuất sách → độ khớp điều khoản
v3 default트리 판독đọc theo cây책의 질문을 순서대로 + CV 계측 선행, v2의 판정자 위에the book's questions in order, CV measurements first, over v2's judgecâu hỏi của sách theo thứ tự, đo CV trước, dùng bộ phán định v2

어느 것도 지우지 않는다 — 원장이 어느 쪽이 나은지 말할 때까지 (V-D20). v1의 어휘가 병목이었다는 것이 v2를 낳았고, 「18건 중 10건이 자차 heading·상대차 경로 오독」이 v3의 계측 선행을 낳았다.

None is removed until the ledger says which is better. v1's vocabulary was the old question–choice pair in disguise; v3 exists because 10 of 18 misses were ego-heading and other-path facts the VLM read as "straight".

Không bộ máy nào bị xóa trước khi sổ cho biết bộ nào tốt hơn. Hệ thuật ngữ v1 thực chất là cặp câu hỏi–đáp án cũ; v3 ra đời vì 10/18 lần sai thuộc hướng xe mình và quỹ đạo xe đối phương mà VLM đọc thành "đi thẳng".

v3 판독 순서thứ tự đọc v3 · the fixed reading order · thứ tự đọc cố định

0. 계측        CV 먼저 — ego_heading, other_path        (모델 호출 없음)
1. 장면        그리드에서 장소 / 유형 / 신호
2. 충돌 순간    그리드 위에서 찾고 열로 읽는다   (−2.0초 … +0.5초 @ 0.2초)
3. 고객차 기동   heading 계측과 대조
4. 상대차       최초 등장, 상대 운동, 기동, 선행/후행
5. 카메라       전방인가 후방인가 — 후방이면 규칙으로 좌우를 뒤집는다
6. 진술        v2 형식으로 s1..sN0. measure     CV first — ego_heading, other_path        (no model call)
1. scene       place / type / control, from the grid
2. impact      located on the grid, read as a sequence   (−2.0s … +0.5s @ 0.2s)
3. ego         reconciled against the heading measurement
4. other       first appearance, relative motion, manoeuvre, lead/follow
5. camera      front or rear — a rear view flips left/right by rule
6. statements  s1..sN in the v2 shape0. measure     CV trước — ego_heading, other_path        (không gọi mô hình)
1. scene       địa điểm / loại / điều khiển, từ lưới ảnh
2. impact      định vị trên lưới, đọc thành chuỗi   (−2.0s … +0.5s @ 0.2s)
3. ego         đối chiếu với phép đo hướng xe mình
4. other       xuất hiện đầu tiên, chuyển động tương đối, động tác, trước/sau
5. camera      trước hay sau — camera sau đảo trái/phải theo quy tắc
6. statements  s1..sN theo cấu trúc v2

계측은 힌트가 아니라 모델이 반드시 대조해야 하는 사전 정보다 — 30° 이상 측정된 회전이 모델의 「직진」과 부딪치면 그 단계를 한 번 되돌린다.

Measurements are stated priors the model must reconcile with, not hints: a measured turn ≥30° against a model "straight" bounces the step once.

Phép đo là thông tin có trước được nêu rõ mà mô hình phải đối chiếu, không phải gợi ý: đo thấy rẽ ≥30° nhưng mô hình nói "đi thẳng" thì bước bị trả lại một lần.

판정자 · the judge · bộ phán định

  1. 후보 top-k 검색retrieve top-k candidatestruy xuất top-k ứng viên
  2. 책 자신의 분류 트리를 걸어 내려감 — leaf의 형제들이 후보 집합. 확신 없는 단계는 그 노드의 자식을 선택지 버튼으로 한 조사자 질문walk the book's own tree; an unsure step becomes the adjuster's question with that node's children as buttonsduyệt cây của chính sách; bước chưa chắc trở thành câu hỏi cho chuyên viên, các nút con là nút đáp án
  3. 조항 적합도 — 절마다 일치/모순/미확인. 도표 = 모순 없음 + 일치 최다. 동점이면 질문clause fit — the chart is the one with nothing contradicted and the most matched; a tie is an askđộ khớp điều khoản — chọn biểu đồ không có điều mâu thuẫn và nhiều điều khớp nhất; hòa thì hỏi
  4. 역할을 따로 결정 — 탈락한 바인딩은 모순과 함께 보여 준다role decided separately; the rejected binding is kept and shownquyết định vai trò riêng; cách gán bị loại vẫn được giữ và hiển thị
트리는 백트래킹하지 않는다 · the walk does not backtrackcây không quay lui

그래서 RESIDUAL 게이팅이 있다 — 「기타 유형 › 주차장 사고」와 「이륜차 특수유형」은 첫 질문에서도 부모의 설명에서도 빠지고, 아무것도 안 맞을 때 2차 패스에서만 제시된다. 이게 없으면 진술에 「주차장」이라는 단어가 있다는 이유로 어휘적으로 그 가지가 선택되고, 되돌아갈 수 없으므로 맞는 도표가 도달 불가능해진다.

Residual branches are withheld from the first ask and from the parent's description, offered only on a second pass. Without this, the mere word 주차장 in a statement captured the pick lexically — and because the walk never backtracks, the right chart became unreachable.

Nhánh dư được ẩn khỏi câu hỏi đầu và mô tả nút cha, chỉ đưa ra ở lượt hai. Nếu không, chỉ từ 주차장 trong mô tả đã hút lựa chọn theo mặt chữ — cây không quay lui nên biểu đồ đúng không còn tới được.

🗣 V-D21은 사정사가 말해 준 것이다 — 2026-09-22 중간보고V-D21 came from the adjustersV-D21 đến từ chuyên viên

다음 날 아침 그대로 전달된 네 가지:

Bốn điều được chuyển nguyên vẹn vào sáng hôm sau:

중간 보고에서 사정사들이 말한 것: 진로변경이 이미 완료된 뒤라면 사고와 무관하다. 두 차량의 충돌에서 진로변경이 관련 사실이 되는 것은 진로변경이 진행 중일 때 사고가 난 경우뿐이고, 교차로에서 진로변경인지 좌·우회전인지를 가르는 기준은 차량이 정지선을 완전히 지났는지다.

From the mid-report with the adjusters: once a lane change is complete it has no bearing on the accident. In a two-car collision a lane change counts as a related fact only if the accident happened while it was in progress, and what separates a lane change from a turn at a junction is whether the vehicle has fully passed the stop line.

Từ báo cáo giữa kỳ với chuyên viên: khi chuyển làn hoàn tất, nó không còn liên quan tai nạn. Với va chạm hai xe, chuyển làn chỉ tính là sự kiện liên quan nếu tai nạn xảy ra trong lúc đang chuyển làn; phân biệt chuyển làn với rẽ tại giao lộ bằng việc xe đã qua hoàn toàn vạch dừng chưa.

그리고 책에서 그것이 확인되었다 — 「주차장은 도표가 2개뿐이고 둘 다 주차구획을 요구한다: 차51-1「통로주행 대 주차구획 출차」, 차51-2「주차구획으로 선행진입 개시 대 통로진행 추월」. 통로를 따라 달리는 두 차를 기술하는 도표는 없다. … 이륜차 특수유형은 이름 붙은 시나리오 3개이지 차종 분류가 아니다. 우리는 책이 인코딩한 우선순위를 뭉갰다. 그게 버그다」

Điều đó được xác nhận trong sách — "Bãi đỗ chỉ có 2 biểu đồ, cả hai đòi hỏi ô đỗ: 차51-1 ‘chạy trên lối đi gặp xe rời ô đỗ’, 차51-2 ‘bắt đầu vào ô đỗ phía trước gặp xe vượt trên lối đi’. Không có biểu đồ mô tả hai xe cùng chạy dọc lối đi. … Loại đặc biệt xe hai bánh là 3 kịch bản có tên, không phải phân loại phương tiện. Ta đã làm mất thứ tự ưu tiên được sách mã hóa. Đó là lỗi"

왜 치명적이었는지도 같은 자리에 있다 — 트리는 되돌아가지 않는 탐욕적 하강이고, 가지 이름에 「주차장」·「이륜차」라는 단어가 들어 있다. 판독기가 「주차장에서」라고 쓰기만 하면 어휘적으로 그 가지가 당겨지고, 맞는 도표는 도달 불가능해진다. → RESIDUAL 게이팅.

Cùng nơi cũng nêu vì sao nghiêm trọng — cây là quá trình đi xuống tham lam không quay lui; tên nhánh chứa các từ "bãi đỗ", "xe hai bánh". Chỉ cần bộ đọc viết "trong bãi đỗ", nhánh bị hút theo mặt chữ, biểu đồ đúng không thể tới được. → chặn RESIDUAL.

⚠️ 그리고 사정사에게 되물었으나 답을 찾을 수 없는 것 하나: 차47-2·47-3은 「정차 후 출발차량과 그 앞으로 진로변경」이고 차45-2는 「진로변경 진입 직후 추월」이다 — 진로변경 완료 여부에 걸터앉은 도표들이고, C-1을 글자 그대로 적용하면 배제되어 버린다.

⚠️ One question went back to the adjusters and no answer is recorded: 차47-2/47-3 and 차45-2 are charts that sit astride lane-change completion, which C-1 as written would exclude.

⚠️ Một câu hỏi được gửi lại chuyên viên nhưng chưa có đáp án ghi nhận: 차47-2/47-3 và 차45-2 nằm vắt qua thời điểm hoàn tất chuyển làn, có thể bị C-1 hiện tại loại bỏ.

measureCV0scene장소địa điểm1signal신호tín hiệu2width도로폭chiều rộng đường3impact충돌va chạm4ego고객차xe khách hàng5other상대차xe đối phương6camera카메라camera7순서는 강제된다 — 건너뛰거나 바꿀 수 없고, 한 단계가 한 번의 모델 호출이고 문장 하나다.The order is forced — no skipping, no reordering. One step is one model call and one sentence.Thứ tự bắt buộc — không bỏ bước, không đổi thứ tự. Mỗi bước là một lời gọi mô hình và một câu.0단계는 모델을 부르지 않는다. 계측이 먼저 돌고 그 결과가 3·4·5단계 입력으로 들어간다.Step 0 calls no model: measurement runs first and its output feeds steps 3–5.Bước 0 không gọi mô hình: đo trước, đầu ra cấp cho bước 3–5.영상이 보여 주지 않으면 그 단계는 「판단 불가」로 쓴다.If the video does not show it, that step writes 판단 불가.Video không cho thấy thì bước đó ghi 판단 불가.

그림 2. v3의 읽는 순서. §4.0의 사건이 정확히 이 순서로 돌았다.Figure 2. v3’s reading order — the case in §4.0 ran exactly this sequence.Hình 2. Thứ tự đọc v3 — vụ việc ở §4.0 chạy đúng chuỗi này.

4.4⭐ 한 건이 지나가는 길 — 호출과 입출력 · The path of one case: calls, inputs, outputs · Đường đi một vụ: lời gọi, đầu vào, đầu ra

이 절은 「왜」가 아니라 「무엇이 실제로 일어나는가」다. 사건 하나를 올리면 어떤 호출이 어떤 순서로 일어나고, 각 단계가 무엇을 받고 무엇을 내놓는지를 적는다. 첫 주에 사건 하나를 끝까지 돌려 볼 때 무엇이 정상인지 판단하는 기준이다.

Not why, but what actually happens. One case, end to end: which calls fire in what order, and what each step receives and returns. This is the reference that tells you whether what you are seeing on day 3 is correct or broken.

Không bàn lý do mà nêu điều thực sự diễn ra. Một vụ từ đầu đến cuối: gọi gì, theo thứ tự nào, mỗi bước nhận và trả gì. Đây là mốc để biết điều bạn thấy ngày thứ ba là đúng hay đang hỏng.

① 올리기 → 작업 큐Upload → queueTải lên → hàng đợi

POST /clips            file → S3, a clips row, queue job screen
  worker: screen       original from S3 → ffprobe → reject if not a video or >180 s
                       → transcode to H.264 → clip ready → queue job analyze
POST /cases/{id}/analyze   (or automatically, above) queue analyze — params: engine, model, options
  worker: analyze      create runs/scratch/<analysis_id>/ → read → judge
                       → ingest into the analyses* tables → upload grid + frames to S3
                       → if the case has no active analysis, activate → derive the verdict
POST /clips            tệp → S3, một hàng clips, xếp tác vụ screen
  worker: screen       bản gốc từ S3 → ffprobe → từ chối nếu không phải video hoặc >180 s
                       → chuyển mã H.264 → clip sẵn sàng → xếp tác vụ analyze
POST /cases/{id}/analyze   (hoặc tự động như trên) xếp analyze — tham số: engine, model, options
  worker: analyze      tạo runs/scratch/<analysis_id>/ → phân tích → phán định
                       → nạp vào các bảng analyses* → tải grid + khung hình lên S3
                       → nếu hồ sơ chưa có bản phân tích đang dùng thì kích hoạt → suy ra kết luận

브라우저는 그동안 2초마다 GET /cases/{id}를 폴링한다. 상태 변화는 일어나는 즉시 커밋되므로(autocommit) 화면이 따라올 수 있다. API는 DB를 직접 만지지 않는다 — 인증과 모양만 보고 전부 service.py로 넘긴다. 엔드포인트는 모두 49개다(고정 커밋 기준 — 10-16에 지식 기반 라우트가 더해져 지금 stage는 60개다).

Meanwhile the browser polls GET /cases/{id} every two seconds. State changes are committed the moment they happen (autocommit), so the screen can keep up. The API never touches the database — it checks authentication and shape and hands everything to service.py. There are 49 endpoints at the pinned commit — the knowledge routes of 10-16 added eleven more, so stage has 60 today.

Trình duyệt hỏi GET /cases/{id} mỗi hai giây. Thay đổi trạng thái được lưu ngay khi xảy ra (autocommit), nên màn hình theo kịp. API không chạm trực tiếp cơ sở dữ liệu — chỉ kiểm tra xác thực, cấu trúc rồi chuyển cho service.py. Có 49 endpoint ở commit được ghim — tuyến knowledge ngày 10-16 thêm mười một, nên stage hiện có 60.

② 판독 — 여섯 단계, 한 단계가 한 번의 모델 호출The reading: six steps, one model call eachQuá trình đọc: sáu bước, mỗi bước gọi mô hình một lần

v3의 step() 하나가 하는 일은 단순하다 — 질문 텍스트 + 이미지들을 보내고 JSON 하나를 받는다. JSON이 아니면 한 번만 다시 묻는다.

One step() in v3 does something simple — send the question text plus the images, receive one JSON object. If it is not JSON, ask again exactly once.

Một step() của v3 rất đơn giản — gửi văn bản câu hỏi và ảnh, nhận một đối tượng JSON. Nếu không phải JSON, hỏi lại đúng một lần.

step(name, text, images) →
    content = [ {"type":"text", "text": 질문}, image 1, image 2, … ]
    · 보낼 수 없는 이미지가 있으면 그 사실을 본문에 적어 보낸다
      ("다음 이미지는 이 케이스에 없어 보내지 못했습니다 — 인용하지 마십시오")
    · 보낸 이미지는 전부 trace에 look 행으로 남는다 (워커가 장수를 센다)
    · 답 행에 API 사용량과 비용이 붙는다
  ← {"…": …}  JSON 하나step(name, text, images) →
    content = [ {"type":"text", "text": the question}, image 1, image 2, … ]
    · when an image cannot be sent, the prompt says so in its own body
      (the source string reads: "the following image is not in this case and was
       not sent — do not quote it")
    · every image sent is recorded in the trace as a look row (the worker counts them)
    · the answer row carries API usage and cost
  ← {"…": …}  one JSON objectstep(name, text, images) →
    content = [ {"type":"text", "text": câu hỏi}, ảnh 1, ảnh 2, … ]
    · khi không gửi được ảnh, prompt nói rõ ngay trong nội dung
      (chuỗi nguồn ghi: "ảnh sau không có trong vụ này và chưa được
       gửi — không trích dẫn nó")
    · mỗi ảnh đã gửi được ghi vào trace thành hàng look (worker đếm chúng)
    · hàng đáp án có mức dùng API và chi phí
  ← {"…": …}  một đối tượng JSON
단계stepbước받는 것inđầu vào내놓는 것outđầu ra
0 계측0 đo lường클립 (모델 호출 없음)the clip (no model call)clip (không gọi mô hình)ego_heading · other_path — CV 서비스 호출ego_heading · other_path — calls to the CV serviceego_heading · other_path — gọi dịch vụ CV
1 장면1 bối cảnhgrid.jpg + 넓은 프레임 2~3장(고해상도) + 카메라 사전정보grid.jpg + two or three wide high-resolution frames + the camera priorgrid.jpg + hai hoặc ba ảnh toàn cảnh độ phân giải cao + thông tin có trước về camera먼저 「본 것」(seen_crossing_road · seen_lane_curve · seen_island · seen_signs), 그 다음 place · junction_shape · control · signal_color · road_width · camera_guessfirst what it SAW (seen_crossing_road · seen_lane_curve · seen_island · seen_signs), then place · junction_shape · control · signal_color · road_width · camera_guesstrước hết ghi điều ĐÃ THẤY (seen_crossing_road · seen_lane_curve · seen_island · seen_signs), sau đó place · junction_shape · control · signal_color · road_width · camera_guess
2 충돌2 va chạm그리드에서 위치를 잡고 frames −2.0s…+0.5s @ 0.2slocated on the grid, then frames −2.0 s…+0.5 s at 0.2 sđịnh vị trên lưới, rồi các ảnh −2.0 s…+0.5 s cách nhau 0.2 simpact_t · impact_frame · 접촉 부위impact_t · impact_frame · the contact pointimpact_t · impact_frame · điểm tiếp xúc
3 고객차 기동3 the customer car's manoeuvre3 động tác xe khách hàng시퀀스 + 접근 프레임 + heading 계측the sequence + approach frames + the heading measurementchuỗi ảnh + ảnh tiếp cận + phép đo hướng기동 — 계측과 대조. 30° 이상 측정된 회전이 「직진」과 부딪치면 이 단계를 한 번 되돌린다the manoeuvre — reconciled against the measurement. A measured turn of 30° or more against a model "straight" bounces this step onceđộng tác — đối chiếu với phép đo. Đo rẽ từ 30° trở lên nhưng mô hình nói "đi thẳng" thì trả lại bước này một lần
4 상대차4 xe đối phương시퀀스 + other_paththe sequence + other_pathchuỗi ảnh + other_path첫 등장 · 상대 운동 · 기동 · 진입/진출 · 선행/후행first appearance · relative motion · manoeuvre · entering/leaving · 선행/후행 (leading/following)xuất hiện đầu tiên · chuyển động tương đối · động tác · đi vào/đi ra · 선행/후행 (đi trước/đi sau)
5 카메라5 camera줌 힌트 + 프레임the zoom hint + framesgợi ý phóng to + khung hình전방 / 후방 — 후방이면 좌우·전후를 규칙으로 뒤집는다front or rear — a rear view flips left/right and ahead/behind by ruletrước hoặc sau — camera sau đảo trái/phải và trước/sau theo quy tắc
6 진술6 mô tả sự kiện1~5의 답 전부 + 계측 블록 + 뒤집기 규칙every answer from steps 1–5 + the measurement block + the flip rulemọi đáp án bước 1–5 + khối phép đo + quy tắc đảostatements[] — 판정자가 읽는 유일한 것statements[] — the only thing the judge readsstatements[] — thứ duy nhất bộ phán định đọc

6단계가 내놓는 모양이 이 시스템의 핵심 자료구조다:

Cấu trúc bước 6 trả ra là cấu trúc dữ liệu trung tâm của hệ thống:

{"statements": [
  {"id":"s1", "step":"scene", "statement":"신호기 없는 교차로", "confidence":0.8,
   "tier":"read", "evidence":["grid.jpg","frames/05.00.jpg"], "why":"…"},
  {"id":"s2", "step":"control", …} ]}

step 값: scene · control · width · impact · ego · other_origin · other_manoeuvre · camera
tier 값: read 판독 · measured 계측만으로 · undeterminable 판단 불가{"statements": [
  {"id":"s1", "step":"scene", "statement":"신호기 없는 교차로", "confidence":0.8,
   "tier":"read", "evidence":["grid.jpg","frames/05.00.jpg"], "why":"…"},
  {"id":"s2", "step":"control", …} ]}
                    └─ statement text stays Korean: it is what the model writes

step values: scene · control · width · impact · ego · other_origin · other_manoeuvre · camera
tier values: read (from the video) · measured (from instruments alone) · undeterminable{"statements": [
  {"id":"s1", "step":"scene", "statement":"신호기 없는 교차로", "confidence":0.8,
   "tier":"read", "evidence":["grid.jpg","frames/05.00.jpg"], "why":"…"},
  {"id":"s2", "step":"control", …} ]}
                    └─ nội dung statement giữ tiếng Hàn: mô hình viết như vậy

Giá trị step: scene · control · width · impact · ego · other_origin · other_manoeuvre · camera
Giá trị tier: read (từ video) · measured (chỉ từ công cụ) · undeterminable

프롬프트가 요구하는 것 중 후임자가 알아야 할 세 가지: ① 순서가 강제된다 — (1)장소 (2)신호 (3)도로폭 (4)충돌 (5)고객차 기동 (6)상대차 진입 방향 (7)상대차 기동 (8)카메라, 반드시 이 순서로 ② 근거 없는 진술은 쓰지 않는다 — evidence는 보낸 프레임 이름 그대로이거나 계측 이름("ego_heading") ③ 영상이 안 보여 주면 진술 자체를 「… 판단 불가 — …이 있으면 정해짐」으로 쓰고 tier를 undeterminable로.

Three things the prompt demands that a successor needs to know: ① the order is forced — (1) place (2) signal (3) road width (4) impact (5) the 고객차’s manoeuvre (6) the 상대차’s direction of entry (7) the 상대차’s manoeuvre (8) camera, in that order and no other. ② nothing is stated without evidence — evidence is either a frame name exactly as it was sent or the name of a measurement ("ego_heading"). ③ if the video does not show it, the statement itself is written as "… 판단 불가 — would be settled by …" with tier set to undeterminable.

Ba yêu cầu của prompt người tiếp nhận cần biết: ① bắt buộc thứ tự — (1) địa điểm (2) tín hiệu (3) chiều rộng đường (4) va chạm (5) động tác 고객차 (6) hướng vào của 상대차 (7) động tác 상대차 (8) camera, đúng thứ tự ấy. ② không khẳng định khi thiếu bằng chứng — evidence là tên khung hình đúng như đã gửi hoặc tên phép đo ("ego_heading"). ③ nếu video không cho thấy, câu mô tả ghi "… không thể xác định — có thể xác nhận bằng …", tier là undeterminable.

⭐ 판독자 규약(PROTOCOL)이 네 줄로 요약한다: 「답은 보낸 이미지에서 본 것만」 · 「용어는 고객차/상대차, A/B는 쓰지 않는다」 · 「영상이 보여 주지 않는 것은 판단 불가 — 추측을 답으로 꾸미지 않는다」 · 「방향은 우선 화면 기준으로 읽고, 마지막 단계에서 카메라 규칙에 따라 고객차 기준으로 바꾼다」.

The reader's protocol in four lines: answer only from the images you were sent; 고객차/상대차, never A/B; say 판단 불가 rather than dressing a guess as an answer; read directions screen-relative first and convert to the customer's frame only at the last step.

Quy trình bộ đọc trong bốn dòng: chỉ trả lời từ ảnh được gửi; dùng 고객차/상대차, không dùng A/B; nói 판단 불가 thay vì ngụy trang phỏng đoán thành đáp án; đọc hướng tương đối với màn hình trước, chỉ đổi sang góc nhìn khách hàng ở bước cuối.

③ 도구 — 일곱 개, 모두 같은 모양을 돌려준다The tools: seven, one return shapeCông cụ: bảy loại, một dạng kết quả

도구toolcông cụ시그니처signaturechữ ký hàm무엇whatchức năng
frames(media_id, t0, t1, step=0.5, width=640)구간을 스틸로 — ffmpeg, 캐시됨an interval as stills — ffmpeg, cachedchuyển một khoảng thành ảnh tĩnh — ffmpeg, có bộ nhớ đệm
zoom(media_id, t, region="center", width=800)한 프레임의 일부 — left·center·right·top·bottom 또는 "x,y,w,h" 분수part of one frame — left·center·right·top·bottom, or "x,y,w,h" as fractionsmột vùng của khung hình — trái·giữa·phải·trên·dưới, hoặc "x,y,w,h" theo tỷ lệ
highlight(media_id, t, target_ko, model, window_s=0.5)대상에 상자 — 모델을 부르는 유일한 도구a box on the target — the only tool that calls a modelhộp quanh đối tượng — công cụ duy nhất gọi mô hình
ego_heading(media_id, t0, t1, …, impact_t, yaws, zooms)자차 진행방향 변화 (+ E-V-034의 timeline)change in the ego vehicle's heading (plus E-V-034's timeline)thay đổi hướng xe mình (cộng dòng thời gian E-V-034)
other_path(media_id, track, width, impact_t, track_id, compute, doc)상대차의 화면상 경로the other car's path across the picturequỹ đạo xe đối phương trên ảnh
chart_text(chart_id)도표 원문 — 사고상황·적용범위·해설the chart's own text — situation, scope, commentaryvăn bản của biểu đồ — tình huống, phạm vi, bình luận
define(term)책 자신의 정의 문단 (V-D13)the book's own definition paragraph (V-D13)đoạn định nghĩa nguyên gốc trong sách (V-D13)
every tool returns:
{"value": …, "confidence": 0.0–1.0, "interval": [t0, t1], "evidence": [paths…], "sanity": null|"…"}

e.g. frames: {"value": ["…/05.00.jpg", …], "confidence": 1.0,
              "interval": [5.0, 7.0], "evidence": [the same paths], "sanity": null}
mọi công cụ trả về:
{"value": …, "confidence": 0.0–1.0, "interval": [t0, t1], "evidence": [paths…], "sanity": null|"…"}

ví dụ frames: {"value": ["…/05.00.jpg", …], "confidence": 1.0,
                "interval": [5.0, 7.0], "evidence": [cùng các đường dẫn], "sanity": null}

⚠️ sanity가 핵심이다 — 계측이 불가능했으면 값 대신 sanity: "unavailable: …"가 온다. 그리고 §8.3이 보여 주듯 confidence는 저장되고 출력될 뿐 어디에서도 문턱으로 쓰이지 않는다.

⚠️ sanity is the important part — when a measurement was impossible, what comes back instead of a value is sanity: "unavailable: …". And as §8.3 shows, confidence is stored and printed but is never used as a threshold anywhere.

⚠️ sanity là phần quan trọng — không đo được thì thay giá trị bằng sanity: "unavailable: …". Theo §8.3, confidence được lưu và in nhưng không bao giờ dùng làm ngưỡng ở đâu.

④ 판정 — 진술만 읽는다The judge: statements onlyBộ phán định: chỉ nhận các câu mô tả

v2.judge(statements, …)
  1. search_charts          키워드로 후보 top-k
  2. tree.walk              책 자신의 분류를 걸어 내려감 — 단계마다 Jev decide 호출
                            확신이 없으면 멈추고 조사자에게 묻는다 (그 노드의 자식 = 선택지)
  3. 조항 적합도             후보 도표 × 역할마다, 절 하나하나에 일치 / 모순 / 미확인
                            → fit.json
  4. 역할                   고객차가 A인가 B인가 — 따로 결정 (§8.7의 결함이 여기 있다)
  → chart.json             {chart, role, confidence, ask?, unverified[]}v2.judge(statements, …)
  1. search_charts          top-k candidates by keyword
  2. tree.walk              walks the book's own taxonomy — calling Jev decide at each step
                            stops and asks the adjuster when unsure (that node's children = the options)
  3. clause fit             per candidate chart × role, clause by clause:
                            matches / contradicts / unverified → fit.json
  4. role                   is the customer's car A or B — decided separately
                            (the defect in §8.7 lives here)
  → chart.json             {chart, role, confidence, ask?, unverified[]}v2.judge(statements, …)
  1. search_charts          top-k ứng viên theo từ khóa
  2. tree.walk              duyệt hệ phân loại của sách — gọi Jev decide mỗi bước
                            dừng, hỏi chuyên viên khi chưa chắc (nút con = lựa chọn)
  3. clause fit             mỗi biểu đồ ứng viên × vai trò, từng điều khoản:
                            khớp / mâu thuẫn / chưa kiểm chứng → fit.json
  4. role                   xe khách hàng là A hay B — quyết định riêng
                            (lỗi ở §8.7 nằm đây)
  → chart.json             {chart, role, confidence, ask?, unverified[]}

도표는 문서가 아니라 질문으로 판정자에 도착한다 — 사건 3에서는 54개 조항을 3번의 배치 호출로. 판독 1건에 Jev decide 호출이 8~25회, 채팅 턴당 12~30회다.

The chart reaches the judge as questions, not as a document — in case 3, 54 clauses over three batched calls. One reading makes 8–25 decide calls, and a chat turn 12–30.

Biểu đồ đến bộ phán định dưới dạng câu hỏi, không phải tài liệu — vụ 3 có 54 điều khoản qua ba lời gọi theo lô. Mỗi lần đọc gọi decide 8–25 lần, mỗi lượt chat 12–30.

⑤ 한 건의 실제 크기What one case actually costsChi phí thực tế của một vụ

7.5
모델 호출 / 건lời gọi mô hình / vụ
model calls per casesố lần gọi mô hình mỗi hồ sơ
~20
보낸 이미지 / 건ảnh gửi / vụ
images sent
8.5
턴 / 건lượt / vụ
turns
167k
입력 토큰 / 건 (출력 11k)token đầu vào / vụ (đầu ra 11k)
in / out tokenstoken đầu vào / đầu ra

그리고 단계 중앙값 18.1초 · 건당 261초 · $0.445. 이 숫자들에서 크게 벗어나면 무언가 잘못된 것이다 — 예를 들어 E-V-018의 Qwen은 30턴을 전부 그리드 밖 프레임을 요구하는 데 썼다.

Roughly 7.5 model calls, 20 images, 8.5 turns, 167k in / 11k out, 261 s, $0.445. A run far outside these numbers is a run that has gone wrong — E-V-018's Qwen burned all 30 turns asking for frames that were not on the grid.

Khoảng 7.5 lời gọi mô hình, 20 ảnh, 8.5 lượt, 167k vào / 11k ra, 261 s, $0.445. Lần chạy lệch xa các số này là lần chạy gặp vấn đề — Qwen ở E-V-018 dùng hết 30 lượt xin các khung hình không có trên lưới.

⑥ 그 다음 — 확정 · 협의 · 안내문After the readingSau khi đọc

POST /cases/{id}/chart_lock          lock the chart — nothing changes it automatically after this (V-D25)
POST /cases/{id}/negotiation/init    the locked chart's factors become rows, from knia.factors(chart)
PATCH …/negotiation/items/{item_id}  moves a row's state only
                                     points come only from the book — nobody invents a number
POST /cases/{id}/notice/init         build blocks → lint → review
POST /cases/{id}/notice/publish      409 if any included block fails the lint
GET  /n/{token}                      public, unauthenticated, a snapshot — never live data
POST /cases/{id}/chart_lock          khóa biểu đồ — sau đó không tự động thay đổi (V-D25)
POST /cases/{id}/negotiation/init    yếu tố của biểu đồ đã khóa thành các hàng, từ knia.factors(chart)
PATCH …/negotiation/items/{item_id}  chỉ chuyển trạng thái một hàng
                                     điểm chỉ lấy từ sách — không ai tự đặt số
POST /cases/{id}/notice/init         dựng các khối → lint → duyệt
POST /cases/{id}/notice/publish      409 nếu bất kỳ khối được chọn nào không qua lint
GET  /n/{token}                      công khai, không xác thực, bản chụp cố định — không phải dữ liệu động

채팅은 같은 서비스 호출을 부른다 — POST /cases/{id}/chat이 버튼과 같은 일을 하고 같은 기록을 남긴다. 그래서 「버튼으로도 채팅으로도」가 두 개의 구현이 아니다.

Chat calls the same service functions — POST /cases/{id}/chat does what the buttons do and leaves the same record. "By button or by chat" is therefore not two implementations.

Chat gọi cùng hàm dịch vụ — POST /cases/{id}/chat làm điều các nút làm, để lại cùng hồ sơ. "Bằng nút hay bằng chat" vì vậy không phải hai cách triển khai.

⑦ 채팅 한 턴 — 안에서 무슨 일이 일어나는가One chat turn, mechanicallyCơ chế một lượt chat

Chat is not a separate feature — it is a second path writing into the same workspace, capped at 12 steps, with only the last 12 turns of history. Four guards make it safe. Claim detection decides whether a message asserts something about the world, from its verb endings and its vocabulary, and a claim must be on record before the agent may answer — with one clever exception: "딱 봐도 54-4인데" names a chart and asserts nothing, so it routes to a chart check rather than becoming a statement. The confirm lock refuses any value that contradicts what the adjuster confirmed by button, while explicitly allowing the agent's own earlier reading of the adjuster's words to be corrected — the prompt forbids saying "that value is already confirmed". Say-what-you-did: promising an edit without performing a write gets the turn sent back. And a write refused twice blocks further writes that turn, after a case where one refusal repeated to the step limit and the reply came back empty.

Chat không phải tính năng tách biệt — là đường thứ hai ghi cùng không gian làm việc, tối đa 12 bước, chỉ giữ 12 lượt lịch sử gần nhất. Bốn cơ chế bảo vệ: phát hiện khẳng định dựa vào đuôi động từ và từ vựng để xem tin nhắn có nói về thực tế không; phải lưu khẳng định trước khi trả lời. Ngoại lệ: "딱 봐도 54-4인데" chỉ nêu biểu đồ, không khẳng định sự kiện, nên chuyển sang kiểm tra biểu đồ. Khóa xác nhận từ chối giá trị trái điều chuyên viên xác nhận bằng nút, nhưng cho phép sửa cách hiểu lời chuyên viên do tác nhân tự ghi trước đó — prompt cấm nói "giá trị đã được xác nhận". Nói điều đã làm: hứa sửa mà chưa ghi sẽ bị trả lượt lại. Lệnh ghi bị từ chối hai lần chặn ghi tiếp trong lượt ấy, sau vụ một từ chối lặp đến hết bước khiến trả lời rỗng.

채팅은 따로 만든 기능이 아니라 같은 작업공간에 쓰는 또 하나의 경로다. chat_turn()은 조사자 메시지 하나 → 에이전트의 행동들 → 답변 하나, 최대 12 스텝.

Chat is not a separate feature but another route into the same workspace. chat_turn() is one investigator message → the agent’s actions → one reply, at most 12 steps.

Chat không phải tính năng tách biệt mà là đường khác vào cùng không gian làm việc. chat_turn() gồm tin nhắn điều tra viên → hành động tác nhân → một trả lời, tối đa 12 bước.

chat_turn(run_id, media_id, model, history, message, max_steps=12, engine)
  system   = protocol + CHAT_RULES + WORKFLOW_RULE   (v1 also appends the vocabulary block)
  history  = the last 12 turns only
  writable = ("facts.jsonl", "notes.md") + whatever the view hook adds
  ↓ one JSON per step — write · tool · say
  a `say` ends the turn
chat_turn(run_id, media_id, model, history, message, max_steps=12, engine)
  system   = protocol + CHAT_RULES + WORKFLOW_RULE   (v1 thêm khối từ vựng)
  history  = chỉ 12 lượt gần nhất
  writable = ("facts.jsonl", "notes.md") + những gì hook dạng xem thêm vào
  ↓ mỗi bước một JSON — write · tool · say
  một `say` kết thúc lượt
장치mechanismcơ chế무엇을 막는가what it preventsngăn điều gì
주장 감지 has_world_claim()claim detection · has_world_claim()phát hiện khẳng định · has_world_claim()메시지가 세상에 대해 무언가를 주장하는지를 어미(…이야 · 였 · 했 · 있 · 없 · 맞 …)와 용어(고객차 · 신호 · 교차로 · 차로 …)로 판정한다. 주장이면 답하기 전에 기록되어야 한다. 똑똑한 예외 하나 — 「딱 봐도 54-4인데」는 도표를 지목할 뿐 세상에 대해 아무것도 주장하지 않는다 → 진술이 아니라 check_chartdecides whether a message asserts something about the world, from verb endings and domain vocabulary. A claim must be on record before the agent answers. One clever exception — 「딱 봐도 54-4인데」 names a chart and asserts nothing, so it routes to check_chart rather than becoming a statementxác định tin nhắn có khẳng định điều gì về thực tế không từ đuôi động từ và từ vựng nghiệp vụ. Phải ghi khẳng định trước khi trả lời. Ngoại lệ — 「딱 봐도 54-4인데」 chỉ nêu biểu đồ, không khẳng định sự kiện, nên chuyển tới check_chart thay vì thành câu mô tả
확정 잠금khóa xác nhận조사자가 확정 버튼으로 확정한 값(who=adjuster)과 다른 값은 거부된다. 그러나 이전 턴에 에이전트가 조사자의 말을 해석해 적은 값(who=chat)은 다음 말로 바로잡을 수 있고, 바로잡아야 한다 — 프롬프트가 명시한다: 「이미 확인된 값이라 못 바꾼다고 말하지 마십시오」a value contradicting what the adjuster confirmed by button (who=adjuster) is refused. But a value the agent wrote in an earlier turn from its own reading of the adjuster's words (who=chat) can and must be corrected — the prompt says so explicitly: never answer "that value is already confirmed"giá trị trái điều chuyên viên xác nhận bằng nút (who=adjuster) bị từ chối. Nhưng giá trị tác nhân tự hiểu từ lời chuyên viên ở lượt trước (who=chat) có thể và phải được sửa — prompt nói rõ: không trả lời "giá trị đó đã được xác nhận"
말과 행동의 일치say what you didnói điều đã làm「수정하겠습니다」라고 말해 놓고 write를 하지 않으면 시스템이 되돌려 보낸다. 하겠다고만 하고 끝내는 것이 금지되어 있다promising "I'll fix that" without performing a write sends the turn back. Saying you will and stopping there is forbiddenhứa "tôi sẽ sửa" nhưng không thực hiện ghi thì lượt bị trả lại. Cấm chỉ nói sẽ làm rồi dừng
거부 루프 차단refusal-loop cut-offngắt vòng lặp từ chối같은 내용의 write가 두 번 거부되면 그 턴의 쓰기를 막는다 — 사건 51에서 한 번 거부된 write가 max_steps까지 반복되며 답변이 비어 버린 적이 있다the same write refused twice blocks writes for the rest of the turn — in case 51 one refused write repeated to max_steps and the reply came back emptycùng lệnh ghi bị từ chối hai lần sẽ chặn ghi đến hết lượt — vụ 51 có lệnh bị từ chối lặp đến max_steps, trả lời rỗng

🚨 그리고 에이전트가 할 수 없는 것 — 도표를 직접 쓰는 것이다. 「도표(chart.json)는 직접 쓰지 마십시오. fact가 바뀌면 시스템이 규칙과 판정으로 도표를 자동 도출합니다 … 조사자를 기쁘게 하려고 도표가 정해지지 않습니다」. 조사자가 다른 도표를 제안하면 반드시 chart_text로 두 도표의 사고상황을 조회해 현재 사실과 대조해야 하고 — 「절대 조사자에게 그 도표를 설명해 달라고 요청하지 마십시오 — 책은 당신에게 있습니다」.

🚨 And what the agent cannot do is write the chart itself. "Do not write the chart (chart.json) directly. When a fact changes the system derives the chart from the rules and the judgement … a chart is not settled to please the investigator." If the investigator proposes a different chart, the agent must fetch both charts’ accident descriptions with chart_text and compare them against the current facts — and "never ask the investigator to explain that chart to you — you are the one holding the book".

🚨 Điều tác nhân không được làm là tự ghi biểu đồ. "Không ghi trực tiếp biểu đồ (chart.json). Khi sự kiện đổi, hệ thống suy ra biểu đồ từ quy tắc và phán định… không chốt biểu đồ để chiều điều tra viên." Nếu điều tra viên đề xuất biểu đồ khác, tác nhân phải lấy mô tả tai nạn của cả hai bằng chart_text, so với sự kiện hiện tại — "đừng yêu cầu điều tra viên giải thích biểu đồ — bạn mới là người đang giữ sách".

단계 이동은 말로 요청할 때만 일어나고, case_ops.jsonl에 한 줄로 적힌다:

{"op":"chart_lock"}                     lock the chart at the current verdict
{"op":"chart_lock","use":"suggestion"}  adopt the pending suggestion instead
{"op":"chart_unlock"} · {"op":"agree","ratio":30} · {"op":"agree_undo"}
{"op":"close","reason":"합의|분심위|기타","note":"…"} · {"op":"reopen"}
                                        reason = settled | dispute committee | other
{"op":"chart_lock"}                     khóa biểu đồ theo kết luận hiện tại
{"op":"chart_lock","use":"suggestion"}  thay bằng đề xuất đang chờ
{"op":"chart_unlock"} · {"op":"agree","ratio":30} · {"op":"agree_undo"}
{"op":"close","reason":"합의|분심위|기타","note":"…"} · {"op":"reopen"}
                                        reason = đã thỏa thuận | hội đồng tranh chấp | khác

이 규칙이 생긴 이유도 적혀 있다 — v2에 이것이 없어서 「도표 확정해줘」에 "저는 사실만 쓸 수 있습니다"라고 답한 사건(사건 300, 2026-10-08).

Why the rule exists is written down too — v2 lacked it, and to "settle the chart for me" it answered "I can only write facts" (case 300, 2026-10-08).

Lý do có quy tắc cũng được ghi — v2 thiếu nó, nên khi được yêu cầu "chốt biểu đồ giúp tôi", nó trả lời "tôi chỉ ghi được sự kiện" (vụ 300, 2026-10-08).

⭐ 말투까지 코드에 있다 — 「조사자 곁의 비서처럼 짧고 분명하게: 한 일과 결과 먼저, 필요하면 근거, 끝에 다음 제안 하나」. 그리고 답에 쓰면 안 되는 것이 열거되어 있다: 사실 id(s9, r101) · 등급 영어(claimed/read/measured) · 파일 이름(facts.jsonl, workflow.json) · 「시스템이 다시 도출」 같은 말. 대신 「조사자 말씀으로 기록했습니다」 · 「영상으로 확인된 것」 · 「판정은 그대로 차43-2입니다」.

The register is in the code too: lead with what you did and what resulted; never show fact ids, English tier names, file names, or machine talk. This is why the chat surface reads the way it does — it is enforced, not stylistic luck.

Sổ cũng được thể hiện trong mã: nêu việc đã làm và kết quả trước; không hiển thị ID sự kiện, tên cấp độ tiếng Anh, tên tệp hay ngôn ngữ máy. Vì vậy giao diện chat hiển thị như hiện tại — do mã cưỡng chế, không phải ngẫu nhiên phong cách.

⑧ 과실 협의 — 행과 상태, 숫자는 책에서만Negotiation: rows, states, and where the numbers come fromĐàm phán: các hàng, trạng thái và nguồn của các con số

The locked chart's adjustment factors become rows, straight from the book. There are exactly three states — excluded, under negotiation, agreed — and the model and the adjuster can only move a row between them; neither invents a number. The ratio strip is a calculation with four points (base, current, if they claim everything, if we claim everything) and the span between the last two is the range. If no row is under negotiation the range is null and the customer notice says "under review" rather than showing a band. Two book rules sit in the code as bare constants with no comment: gross-negligence reasons cap at 20 points however many apply, and the book's phrasing is "5 to 10 points may be added".

Yếu tố điều chỉnh của biểu đồ đã khóa trở thành các hàng, lấy thẳng từ sách. Có đúng ba trạng thái — loại trừ, đang đàm phán, đã thống nhất — mô hình và chuyên viên chỉ được di chuyển hàng giữa chúng, không bên nào tự tạo số. Thanh tỷ lệ là phép tính bốn điểm (cơ sở, hiện tại, nếu bên họ yêu cầu tất cả, nếu bên ta yêu cầu tất cả); khoảng giữa hai điểm cuối là phạm vi. Nếu không có hàng nào đang đàm phán, phạm vi là null và thông báo khách hàng ghi "đang xem xét" thay vì hiện dải. Hai quy tắc sách nằm trong mã dưới dạng hằng số không chú thích: lý do bất cẩn đáng kể bị giới hạn tổng 20 điểm dù có bao nhiêu lý do, và sách viết "có thể cộng 5 đến 10 điểm".

확정된 도표의 가감요소가 knia.factors(chart)에서 행이 되어 나온다. 일반 항목(현저한 과실 +10 · 중대한 과실 +20)은 책의 기본값이고, 도표 자신의 요소 행이 있으면 그쪽이 이긴다.

Once the chart is settled, its modifiers come out of knia.factors(chart) as rows. The general items (현저한 과실 +10 · 중대한 과실 +20) are the book’s defaults; where the chart carries its own factor rows, those win.

Khi biểu đồ chốt, yếu tố điều chỉnh lấy từ knia.factors(chart) thành các hàng. Mục chung (현저한 과실 +10 · 중대한 과실 +20) là mặc định của sách; nếu biểu đồ có hàng riêng, hàng riêng được ưu tiên.

상태statetrạng tháioff 제외 · potential 협의 중 · fixed 합의 — 셋뿐이다. 모델도 사람도 상태만 옮긴다off 제외 excluded · potential 협의 중 under negotiation · fixed 합의 agreed — only three. The model and the adjuster only move a row between themoff 제외 đã loại · potential 협의 중 đang đàm phán · fixed 합의 đã thống nhất — chỉ ba trạng thái. Mô hình và chuyên viên chỉ di chuyển hàng giữa chúng
방향sidephíatheirs → 고객차 과실 ↑ (상대가 주장할 수 있는 것) · ours → ↓theirs → raises the customer's fault (what the other side can claim) · ours → lowers itbên họ → tăng lỗi khách hàng (điều bên kia có thể yêu cầu) · bên ta → giảm lỗi
증거 등급cấp bằng chứng영상으로 확인됨 · 영상 근거 약함 · 영상으로 판단 불가 · 다른 자료 필요confirmed on video · weak video support · cannot be determined from video · needs other materialxác nhận trên video · video hỗ trợ yếu · video không xác định được · cần tư liệu khác
고칠 수 있는 필드patchablecó thể cập nhậtstate · notes · defence · their_answer · evidence_grade · evidence · amount · finding_override — 이 목록 밖은 API가 받지 않는다state · notes · defence · their_answer · evidence_grade · evidence · amount · finding_override — the API rejects anything outside this liststate · notes · defence · their_answer · evidence_grade · evidence · amount · finding_override — API từ chối mọi giá trị ngoài danh sách này

비율 스트립은 계산이지 약속이 아니다 — strip()이 네 개를 돌려준다: 기본 → 지금 기준(fixed 행 반영) → 상대가 전부 주장하면 → 우리가 전부 주장하면, 그리고 그 사이가 범위다. ⚠️ potential 행이 하나도 없으면 범위는 None이고, 안내문은 띠 대신 「검토 중」이라고 쓴다. off 행은 어디에도 세지 않는다.

The ratio strip is a calculation, not a promise — strip() returns four numbers: the base → as it stands now (fixed rows applied) → if the other side claims everything → if we claim everything, and the span between them is the range. ⚠️ With no potential rows at all the range is None, and the notice writes "under review" instead of a band. off rows are counted nowhere.

Thanh tỷ lệ là phép tính, không phải lời hứa — strip() trả bốn số: cơ sở → hiện tại (đã áp dụng hàng cố định) → nếu bên kia yêu cầu tất cả → nếu bên ta yêu cầu tất cả; khoảng giữa chúng là phạm vi. ⚠️ Không có hàng potential, phạm vi là None, thông báo ghi "đang xem xét" thay vì dải. Hàng off không được tính ở đâu.

⚠️ 책의 규칙 두 개가 상수로 박혀 있고 설명이 없다 — HYUNJEO_STACK_CAP = 20(현저한 과실 사유를 쌓아도 20을 넘지 않는다)과 HYUNJEO_MIN = 5(「5~10% 범위로 가산할 수 있다」). 그리고 LABEL_ALIASES에 「중과실」 → 「중대한 과실」이 있는데 이유가 적혀 있다 — 차20-2·차43-5·차47-2가 줄임말로 인쇄되어 있어서, 알아보지 못했을 때 평범한 가감요소로 합산되고 있었다.

⚠️ Two of the book’s rules are frozen as constants with no explanation — HYUNJEO_STACK_CAP = 20 (stacked 현저한 과실 grounds never exceed 20) and HYUNJEO_MIN = 5 ("may be added in the 5–10% range"). And LABEL_ALIASES maps 중과실 → 중대한 과실, with the reason recorded: 차20-2, 차43-5 and 차47-2 are printed with the abbreviation, and when it went unrecognised it was being summed as an ordinary modifier.

⚠️ Hai quy tắc sách bị đóng băng thành hằng số không giải thích — HYUNJEO_STACK_CAP = 20 (cộng dồn 현저한 과실 không vượt 20) và HYUNJEO_MIN = 5 ("có thể cộng trong khoảng 5–10%"). LABEL_ALIASES ánh xạ 중과실 → 중대한 과실, có lý do: 차20-2, 차43-5, 차47-2 in dạng viết tắt; khi không nhận dạng, chúng bị cộng như yếu tố thường.

⭐ 보정 — 그 두 상수에는 출처가 있다. 책이 아니라 KNIA FAQ다correction — those constants do have a source, and it is a KNIA FAQ, not the bookđính chính — các hằng số có nguồn, đó là FAQ của KNIA, không phải sách

「설명이 없다」는 틀렸다. 타임라인의 2026-08-24 new-knia 작업에서 나온다 — KNIA는 결합 규칙을 공표한다. 다만 인쇄본에도, new-knia가 읽던 정의 모달에도 없다. 과실비율 FAQ 13번에 있고(accident.knia.or.kr/faq), resolve-questions의 data/knia-review.sqlite에서 복원됐다(faq_entry.faq_id='faq:knia:web:13', authority_class=official_explanation). 번호 매긴 목록으로 그것을 적어 두는 유일한 KNIA 면이다.

"No explanation" is wrong. It surfaces in the 2026-08-24 new-knia work on the timeline: KNIA does publish the combination rules — they are simply not in the printed book, nor in the definition modals new-knia had been reading. They are in 과실비율 FAQ #13 (accident.knia.or.kr/faq), recovered from resolve-questions’ data/knia-review.sqlite (faq_entry.faq_id='faq:knia:web:13', authority_class=official_explanation) — the only KNIA surface that states them as a numbered list.

"Không có giải thích" là sai. Nội dung xuất hiện trong công việc new-knia ngày 2026-08-24 trên dòng thời gian: KNIA có công bố quy tắc kết hợp — chúng chỉ không nằm trong sách in hay modal định nghĩa mà new-knia đọc. Chúng nằm trong FAQ tỷ lệ lỗi KNIA số 13 (accident.knia.or.kr/faq), khôi phục từ data/knia-review.sqlite của resolve-questions (faq_entry.faq_id='faq:knia:web:13', authority_class=official_explanation) — nguồn KNIA duy nhất viết chúng thành danh sách đánh số.

「1. 수정요소를 가산한 일방 차량의 최종 값이 100%를 넘을 수 없으며 반대로 0%보다 작을 수 없다. 또한 양자의 최종 과실비율의 합계는 언제나 100%가 되어야 한다.
2. 현저한 과실과 중과실이 중복될 경우는 중과실의 수정요소만을 적용하는 것을 원칙으로 한다.
3. 현저한 과실 내에서 여러 개가 중복되어도 최대 20%…」

"1. A party’s final value after added modifiers may not exceed 100% nor fall below 0%, and the two must always sum to 100.
2. Where 현저한 과실 and 중과실 overlap, only the 중과실 modifier applies, as a principle.
3. Several 현저한 과실 grounds stacking together are capped at 20%.
4. Where the chart separates modifiers with a DOTTED line, you must choose one; if they overlap, only the one with the larger ratio applies.
5. Within 중과실, or several other non-현저한 additions overlapping, up to 30% may be added — and where the victim had avoidability and foreseeability, up to 10% may be assigned to them."

"1. Giá trị cuối của một bên sau khi cộng yếu tố không được vượt 100% hoặc xuống dưới 0%, hai bên luôn cộng bằng 100.
2. Khi 현저한 과실 và 중과실 chồng nhau, chỉ áp dụng yếu tố 중과실, theo nguyên tắc.
3. Nhiều lý do 현저한 과실 cộng dồn bị giới hạn ở 20%.
4. Nếu biểu đồ tách yếu tố bằng đường NÉT CHẤM, phải chọn một; nếu chồng, chỉ áp dụng yếu tố có tỷ lệ lớn hơn.
5. Trong 중과실, hoặc nhiều khoản cộng không phải 현저한 chồng nhau, có thể cộng tới 30% — nếu nạn nhân có khả năng và khả năng dự liệu để tránh, có thể phân cho họ tới 10%."

⭐ 4번을 보라 — 이것은 인쇄된 도표가 선을 어떻게 그었는지에 대한 규칙이다. 수정요소가 점선으로 갈라져 있으면 하나만 고른다는 뜻이고, 인쇄면을 텍스트로 추출하면 보이지 않는다. §8.6의 「수치는 렌더링한 도해에서 눈으로 읽는다」는 규율이 숫자만이 아니라 선이 담은 규칙에도 적용되어야 한다.

⭐ Look at rule 4 — it is a rule about how the printed chart draws its lines. A dotted separator means choose one, and extracting the printed page as text does not show it. §8.6’s discipline — read the numbers visually from the rendered diagram — has to extend from the numbers to the rules the lines encode.

⭐ Nhìn quy tắc 4 — đây là quy tắc về cách biểu đồ in vẽ đường. Đường nét chấm nghĩa là chọn một, còn trích trang in thành văn bản không thể hiện nó. Kỷ luật §8.6 — đọc số bằng mắt trên ảnh biểu đồ — phải mở rộng từ con số tới quy tắc mà các đường ấy mã hóa.

⭐ 보정 — 점선 규칙은 포털 HTML에서 그대로 복원된다correction — the dotted-line rule is recoverable from the portal HTMLđính chính — quy tắc đường nét chấm khôi phục được từ HTML cổng thông tin

이 문서는 앞서 이 규칙이 추출로는 영영 보이지 않는다고 적었다. 인쇄면에 대해서는 맞고, 포털에 대해서는 틀렸다. 묶음은 이미 크롤링해 둔 HTML에 data-orcndno 속성으로 들어 있다. new-knia가 2026-08-24에 다시 긁어서 센 결과가 이것이다 — 가감요소 1,660행 중 778행이 배타 묶음에 속하고, 201개 도표 중 185개에 그런 묶음이 있다. 그때까지 자기 쪽 수치는 166행 중 90행이었다.

This document said the rule can never be seen in an extraction. That is true of the printed page and false of the portal. The grouping is carried in HTML that had already been crawled, as a data-orcndno attribute. Re-crawled and counted on 2026-08-24: 778 of 1,660 factor rows sit in an exclusion group, across 185 of the 201 charts — against 90 of 166 in the copy then in hand.

Tài liệu từng nói quy tắc không thể thấy trong bản trích xuất. Điều đó đúng với trang in nhưng sai với cổng thông tin. Nhóm được lưu trong HTML đã thu thập, qua thuộc tính data-orcndno. Thu thập và đếm lại ngày 2026-08-24: 778/1,660 hàng yếu tố nằm trong nhóm loại trừ, trải trên 185/201 biểu đồ — so với 90/166 ở bản lúc đó.

「파서가 같은 부류의 것을 하나 더 흘리고 있었다. FAQ ④의 점선 묶음은 data-orcndno로 HTML에 있는데 우리가 버렸다. … 이것을 무시하면 서로 배타적인 수정요소가 쌓인다. 상한이 최악의 경우는 막지만, 그 아래의 과다 합산은 막지 못한다.」 — new-knia, 2026-08-24

"The parser was dropping a second thing, same class as the modals. FAQ ④'s dotted-line grouping lives in the HTML as data-orcndno — and we discarded it. … Ignoring them stacks mutually-exclusive modifiers; the caps stop the worst case but not the over-counting beneath it." — new-knia, 2026-08-24

"Bộ phân tích đã bỏ một thứ thứ hai, cùng loại với modal. Nhóm đường nét chấm FAQ ④ nằm trong HTML ở data-orcndno — và ta đã bỏ nó. … Bỏ qua chúng sẽ cộng dồn các yếu tố loại trừ nhau; trần chặn trường hợp xấu nhất nhưng không chặn đếm quá bên dưới." — new-knia, 2026-08-24

🚨 후임자가 먼저 확인할 것: visus가 쓰는 data/knia/ 말뭉치와 data/chart_table.tsv에 이 속성이 실려 있는가. 실려 있지 않으면 가감요소를 합산하는 모든 코드가 배타 묶음을 모른 채 더하고 있다 — 상한(HYUNJEO_STACK_CAP)은 총합만 막고, 애초에 함께 설 수 없는 둘을 함께 세우는 것은 막지 못한다.

🚨 First thing to check: whether the data/knia/ corpus visus reads, and data/chart_table.tsv, carry that attribute at all. If they do not, every piece of code that sums modifiers is summing across groups whose members are mutually exclusive — the cap bounds the total, it does not stop two factors standing together that may never stand together.

🚨 Việc đầu tiên cần kiểm tra: corpus data/knia/ mà visus đọc và data/chart_table.tsv có mang thuộc tính đó không. Nếu không, mọi mã cộng yếu tố đang cộng qua các nhóm mà thành viên loại trừ lẫn nhau — trần chỉ giới hạn tổng, không ngăn hai yếu tố vốn không thể cùng có mặt.

⚠️ 두 상한의 출처가 다르다. +20은 2023년 인쇄본 p.144가 독립적으로 뒷받침한다 — 「현저한 과실간 중복적용 가능(단, 합하여 최대 20%까지)」 — 포털 모달은 이 괄호를 빼고 싣는다. +30은 오직 FAQ에만 있다.

⚠️ The two caps have different provenance. The +20 is independently corroborated by the 2023 printed edition, p.144 — "현저한 과실 may be applied cumulatively (but to at most 20% in total)", a parenthesis the portal modal drops. The +30 exists only in the FAQ.

⚠️ Hai trần có nguồn khác nhau. +20 được xác nhận độc lập từ bản in 2023, tr.144 — "현저한 과실 có thể cộng dồn (nhưng tổng tối đa 20%)", phần trong ngoặc bị modal cổng thông tin bỏ. +30 chỉ có trong FAQ.

⭐ 그래서 HYUNJEO_STACK_CAP = 20은 누가 고른 숫자가 아니라 KNIA가 적어 둔 규칙 3번이다. 규칙 1번은 §8.12에서 resolve-questions가 policy.bounds로 공표한 그 조항이고, 규칙 2번은 policy.severity.exclusive다 — 두 레포가 같은 FAQ를 각자 발견해 서로 다른 형태로 인코딩한 것이다.

⭐ So HYUNJEO_STACK_CAP = 20 is not a number somebody chose — it is KNIA’s own rule 3. Rule 1 is the clause resolve-questions publishes as policy.bounds in §8.12, and rule 2 is its policy.severity.exclusive — two repositories found the same FAQ independently and encoded it in different shapes.

⭐ Vì vậy HYUNJEO_STACK_CAP = 20 không phải con số ai đó chọn — đó là quy tắc 3 của KNIA. Quy tắc 1 là điều khoản resolve-questions công bố dưới policy.bounds ở §8.12; quy tắc 2 là policy.severity.exclusive — hai kho mã độc lập tìm thấy cùng FAQ rồi mã hóa thành hai cấu trúc khác nhau.

🚨 후임자에게 중요한 것은 이것이다: 가감요소를 어떻게 합치는지에 대한 권위 있는 진술이 책 밖에 있다. 인쇄본만 다시 읽으면 영원히 찾지 못한다 — §8.6과 §8.11의 두 추출 작업이 둘 다 놓친 이유가 그것이다.

🚨 What matters to a successor: the authoritative statement of how modifiers combine lives outside the book. Re-reading the printed standard will never find it — which is why both extraction efforts in §8.6 and §8.11 missed it.

🚨 Điều người tiếp nhận cần biết: quy tắc có thẩm quyền về cách kết hợp yếu tố nằm ngoài sách. Đọc lại tiêu chuẩn in sẽ không bao giờ thấy — vì vậy cả hai nỗ lực trích xuất ở §8.6 và §8.11 đều bỏ sót.

🚨🚨 그리고 더 깊은 것 — 공표된 값은 전부 상한이지 더하는 수가 아니다and a deeper one — every published value is a ceiling, not an addendvà một điểm sâu hơn — mọi giá trị công bố đều là trần, không phải khoản cộng

같은 작업이 함께 찾아낸 것이고, 엔진의 모양을 바꾼다. 책은 수정요소를 고정값으로 적지 않는다:

Found in the same work, and it changes the shape of the engine. The book does not state modifiers as fixed values:

Tìm thấy trong cùng công việc, và nó thay đổi cấu trúc bộ máy. Sách không nêu yếu tố là giá trị cố định:

현저한 과실「5~10% 범위로 가산하거나 감산할 수 있다」 — 구간이고, 양방향이다a range — and it runs in both directionsmột khoảng — và chạy theo cả hai hướng
중대한 과실「20%까지」 — 상한a ceilingmột trần
사고상황별per accident typetheo loại tai nạn「각 기준에서 정한 비율까지 가산할 수 있다」
p.133 12대 중과실p.133, the twelve gross faultstr.133, mười hai lỗi bất cẩn đáng kể같은 조건이 띠로 적혀 있다 — 음주 0.03% 이상 = (+)10~20%이상. charts.json은 이것을 「+20」으로 납작하게 만든다the same conditions are printed as bands — BAC ≥ 0.03% is (+)10~20% or more. charts.json flattens that to "+20"cùng điều kiện được in thành dải — BAC ≥ 0.03% là (+)10~20% hoặc hơn. charts.json làm phẳng thành "+20"

🚨 그래서 합산 엔진은 어떤 상한이 물리기도 전에 이미 과도하게 조정한다. §8.12의 resolve-questions가 100을 넘을 때 자르지 않고 거부하는 설계를 택한 이유가 여기서 더 분명해진다 — 넘쳤다는 것은 고를 조합을 잘못 골랐다는 신호이지, 깎아서 될 일이 아니다. 그리고 §4.0의 협의 화면이 단일 값이 아니라 범위를 보여 주는 것도 책의 모양과 맞다.

🚨 So a summation engine over-adjusts before any cap bites. It makes §8.12’s choice sharper — resolve-questions rejects rather than clamps when a total passes 100, and the reason is now plainer: overflow means the wrong combination was chosen, not that the number needs trimming. It also vindicates the negotiation screen in §4.0, which shows a band rather than a single value — that is the shape the book actually has.

🚨 Vì vậy bộ máy cộng sẽ điều chỉnh quá mức trước khi bất kỳ trần nào tác động. Nó làm lựa chọn ở §8.12 rõ hơn — resolve-questions từ chối thay vì chặn khi tổng vượt 100; lý do nay rõ: tràn nghĩa là chọn sai tổ hợp, không phải cần cắt số. Nó cũng xác nhận màn hình đàm phán ở §4.0, hiển thị một dải chứ không phải một số — đó mới là cấu trúc thật của sách.

⭐ 후임자가 먼저 확인할 것: 지금 엔진이 +10·+20을 더하고 있는지, 아니면 상한으로 다루고 있는지. 이 문서가 인용해 온 가감요소 산수(§8.6의 30:70 → 20:80을 포함해)는 전부 더하는 쪽을 전제한다.

⭐ The first thing a successor should check: whether the engine today adds +10 and +20, or treats them as ceilings. Every piece of modifier arithmetic this document quotes — including 30:70 → 20:80 in §8.6 — assumes the adding interpretation.

⭐ Điều đầu tiên người tiếp nhận nên kiểm tra: bộ máy hiện tại cộng +10, +20 hay coi là trần. Mọi phép tính yếu tố được tài liệu trích — gồm 30:70 → 20:80 ở §8.6 — đều giả định cách cộng.

⑨ 고객 안내문 — 큐레이션 작업대와 린트The notice: a curation bench with a lintThông báo: bàn biên tập có lint

Eleven block kinds in a fixed public order, six of them singletons and three graded by similarity and favourability. The inclusion rules are numeric: a favourable case below 0.6 similarity is excluded and marked optimistic, below 0.3 it is excluded as unrelated, and dispute decisions are capped because one chart maps 25 of them and the agent's file has to stay readable. The lint blocks publishing on four things — anything that looks like personal data, promise words, a percentage stated without a hedge, and (for agent-written blocks only) a sentence with no source tag. Publishing with a failing block returns 409. A successful publish freezes a snapshot behind a 22-character token; the public page is unauthenticated and serves that snapshot, never live data, and chart images go out as a one-hour presigned redirect so the bucket and key never appear in it.

Mười một loại khối theo thứ tự công khai cố định, sáu loại chỉ xuất hiện một lần và ba loại được chấm theo độ tương đồng, mức có lợi. Quy tắc đưa vào là số: trường hợp có lợi dưới độ tương đồng 0.6 bị loại và đánh dấu lạc quan, dưới 0.3 bị loại vì không liên quan; quyết định tranh chấp bị giới hạn vì một biểu đồ có thể ánh xạ 25 quyết định khiến tệp tác nhân khó đọc. Lint chặn công bố bốn thứ — dữ liệu cá nhân, từ ngữ hứa hẹn, tỷ lệ nêu như sự thật không có điều kiện, và (chỉ với khối do tác nhân viết) câu không có thẻ nguồn. Công bố khi còn lỗi trả 409. Công bố thành công đóng băng ảnh chụp sau token 22 ký tự; trang công khai không xác thực, phục vụ ảnh chụp chứ không dữ liệu trực tiếp, ảnh biểu đồ đi qua redirect presigned một giờ để bucket và key không lộ.

블록 11종이 공개 페이지 순서로 고정되어 있다 — summary · basis · media · ratio · movers · law · precedent · mediation · dispute · next_steps · contact. 그중 6종은 하나만(SINGLETON), 3종은 등급이 매겨진다(판례·조정·분쟁심의: 유사도 · 유불리 · 포함 규칙).

Eleven block kinds are fixed in the order of the public page — summary · basis · media · ratio · movers · law · precedent · mediation · dispute · next_steps · contact. Six of them may appear only once (SINGLETON), and three are graded (precedent, mediation and dispute decisions: similarity, favourability, and a rule for inclusion).

Mười một loại khối cố định theo thứ tự trang công khai — summary · basis · media · ratio · movers · law · precedent · mediation · dispute · next_steps · contact. Sáu loại chỉ xuất hiện một lần (SINGLETON), ba loại được chấm (tiền lệ, hòa giải, quyết định tranh chấp: tương đồng, mức có lợi và quy tắc đưa vào).

포함 규칙이 숫자로 있다: 유리한데 유사도 < 0.6이면 제외하고 「낙관적」 표시, < 0.3이면 「무관」 제외. 분쟁심의 결정은 도표에 매핑된 것 최대 8건 + 유사도 상위 6건 — 상한이 있는 이유가 적혀 있다: 차16-1은 25건이 매핑되어 있어서 에이전트의 notice.json이 읽을 수 없게 된다.

The inclusion rule is numeric: a favourable item with similarity < 0.6 is excluded and marked "optimistic"; below 0.3 it is excluded as "unrelated". Dispute decisions are at most 8 mapped to the chart plus the 6 most similar — and the reason for the cap is recorded: 차16-1 has 25 mapped to it, which makes the agent’s notice.json unreadable.

Quy tắc đưa vào là số: mục có lợi với tương đồng < 0.6 bị loại và ghi "lạc quan"; dưới 0.3 bị loại là "không liên quan". Quyết định tranh chấp tối đa 8 mục được ánh xạ biểu đồ cộng 6 mục tương đồng nhất — lý do giới hạn được ghi: 차16-1 có 25 quyết định ánh xạ, khiến notice.json của tác nhân khó đọc.

린트가 발행을 막는다(lint(block)) — 네 가지를 본다:

1 개인정보1 personal data1 dữ liệu cá nhânpii.find() — 걸리면 「고객 안내문에는 들어갈 수 없습니다」pii.find() — a hit means "this cannot go into a customer notice"pii.find() — có kết quả nghĩa là "không được đưa vào thông báo khách hàng"
2 약속 표현2 promise words2 từ ngữ hứa hẹn반드시 · 확실히 · 틀림없이 · 최종 · 보장 · 무조건 · 100% 승 · 승소 확정 — 단 판례를 그대로 인용한 경우는 예외반드시 · 확실히 · 틀림없이 · 최종 · 보장 · 무조건 · 100% 승 · 승소 확정 (must, certainly, guaranteed, final, …) — except when quoting a precedent verbatim반드시 · 확실히 · 틀림없이 · 최종 · 보장 · 무조건 · 100% 승 · 승소 확정 (phải, chắc chắn, bảo đảm, cuối cùng, …) — trừ khi trích nguyên văn tiền lệ
3 단정된 퍼센트3 a percentage stated as fact3 tỷ lệ nêu như sự thật퍼센트나 「30:70」이 완충어 없이 나오면 경고. 완충어: 예상 · 범위 · 사이 · 달라질 · 수 있 · 기본 과실 · 약 · 참고 · 가능성 · 협의. 인용된 판례의 결과는 예외a percentage or "30:70" with no hedge raises a warning. Hedges: 예상 estimated · 범위 range · 사이 between · 달라질 may change · 기본 과실 base fault · 약 about · 참고 for reference · 가능성 possibility · 협의 under negotiation. A cited case outcome is exempttỷ lệ hoặc "30:70" không có điều kiện sẽ cảnh báo. Từ giảm nhẹ: 예상 ước tính · 범위 phạm vi · 사이 khoảng · 달라질 có thể đổi · 기본 과실 lỗi cơ sở · 약 khoảng · 참고 tham khảo · 가능성 khả năng · 협의 đang đàm phán. Kết quả vụ được trích dẫn được miễn
4 출처 없는 문장4 a sentence with no source4 câu không có nguồn에이전트가 쓴 블록에만 적용 — 문장에 [s9] 같은 태그가 없으면 경고. ⚠️ 조사자가 한 번이라도 고치면 generated_by가 바뀌어 이 검사에서 영구히 빠진다 (§7.4)agent-written blocks only — a sentence with no [s9]-style tag warns. ⚠️ One adjuster edit flips generated_by and exempts that block permanently (§7.4)chỉ khối do tác nhân viết — câu không có thẻ kiểu [s9] sẽ cảnh báo. ⚠️ Một chỉnh sửa của chuyên viên đổi generated_by và miễn vĩnh viễn khối đó (§7.4)

발행: 린트 실패 블록이 포함된 채로 POST …/notice/publish를 부르면 409. 성공하면 그 시점의 스냅샷이 동결되고 22자 토큰이 생긴다. GET /n/{token}은 공개·비인증이고 라이브 데이터가 아니다. 도표 이미지는 /n/{token}/media/{block_id} → 1시간짜리 presigned URL로 302, 버킷과 키는 스냅샷에 들어가지 않는다. 그리고 모든 안내문에 면책 문구가 붙는다 — 「인정기준은 참고 기준이며 법적 구속력이 없습니다」.

Publishing: calling POST …/notice/publish while a block still fails lint returns 409. On success the snapshot of that moment is frozen and a 22-character token is created. GET /n/{token} is public and unauthenticated, and it is not live data. Chart images go through /n/{token}/media/{block_id}, a 302 to a one-hour presigned URL, and the bucket and key never enter the snapshot. Every notice carries the disclaimer: "the standard is a reference and is not legally binding".

Công bố: gọi POST …/notice/publish khi khối vẫn lỗi lint trả 409. Thành công đóng băng ảnh chụp thời điểm ấy và tạo token 22 ký tự. GET /n/{token} công khai, không xác thực, không phải dữ liệu trực tiếp. Ảnh biểu đồ qua /n/{token}/media/{block_id}, 302 tới URL presigned một giờ; bucket và key không đi vào ảnh chụp. Mọi thông báo có câu: "tiêu chuẩn chỉ để tham khảo, không có giá trị ràng buộc pháp lý".

4.5동시성 — 한 번에 몇 건이 돌 수 있나 · Concurrency: how much runs at once · Xử lý đồng thời: chạy bao nhiêu việc cùng lúc

동시성은 세 층에 있고 층마다 다른 장치를 쓴다. 설계가 꽤 정교한데 어느 문서에도 한자리에 설명되어 있지 않아 여기 모았다.

Concurrency lives at three layers, each with its own mechanism. The design is more careful than it looks, and it is written down in one place nowhere — so it is collected here.

Xử lý đồng thời có ba tầng, mỗi tầng có một cơ chế. Thiết kế thận trọng hơn vẻ ngoài, nhưng chưa được ghi ở một chỗ nào — nên gom tại đây.

① 작업 큐 — 겹치지 않게 집어가기The job queue: claiming without collisionsHàng đợi tác vụ: nhận việc không va chạm

update jobs set status='running', started_at=now(), worker=%s, attempts=attempts+1
where id = (select id from jobs
            where kind = any(%s) and attempts < 3 and <lane>
              and (status='queued'
                   or (status='running' and started_at < now() - interval '30 minutes'))
            order by kind in ('negotiation_grade','notice_init') desc, queued_at, id
            limit 1 for update skip locked)
returning *

One atomic statement does the whole claim. FOR UPDATE SKIP LOCKED means two workers racing for the same row never block each other — the loser skips to the next job — so you can run many workers with no coordinator, no lock table and no leader election.

Một lệnh nguyên tử thực hiện toàn bộ thao tác nhận. FOR UPDATE SKIP LOCKED nghĩa là hai worker tranh cùng hàng không chặn nhau — bên thua bỏ qua tới tác vụ kế — nên có thể chạy nhiều worker mà không coordinator, bảng khóa hay bầu leader.

  • 죽은 워커의 작업을 되찾는다. status='queued'만으로는 부족했다 — 분석 도중 죽은 워커는 작업을 running에 남기고 아무도 다시 보지 않았다. 그래서 임대를 뒀다: live 30분, batch 48시간A worker that died mid-analysis used to leave its job running forever. The lease fixes it: 30 minutes live, 48 hours batch.Worker chết giữa phân tích từng để lại tác vụ running vĩnh viễn. Lease sửa điều đó: live 30 phút, batch 48 giờ.
  • 짧은 작업이 먼저다. 정렬이 negotiation_grade · notice_init 먼저, 그 다음 FIFO — 조사자가 기다리는 짧은 작업이 4분짜리 판독 뒤에 줄 서지 않는다Short interactive jobs jump ahead of a four-minute reading; the rest is FIFO.Tác vụ tương tác ngắn vượt lên trước lượt đọc bốn phút; phần còn lại FIFO.
  • 🚨 attempts < 3은 조건이지 정리 장치가 아니다. 세 번 실패한 작업은 다시 집어가지지 않고 running으로 영원히 남는다 — 사건은 analyzing에 갇히고 리퍼는 그 작업공간을 보호한다 (§6.5 H7)🚨 The attempt limit is a filter, not a sweeper: a job that exhausts it stays running forever and nothing collects it.🚨 Giới hạn số lần thử là bộ lọc, không phải bộ quét: tác vụ dùng hết số lần vẫn ở running mãi, không ai thu hồi.
🗣 이 수정이 어떻게 발견되었나how the lease was foundlease được phát hiện thế nào

claim의 docstring이 날짜까지 적어 두었다: 2026-09-29, 작업 15가 돌고 있는 중에 배포를 했고, 그것이 영영 돌아오지 않는 것을 지켜보다 발견했다. 그 전까지 ship.py의 docstring은 「다음 claim이 시도 횟수로 집어간다」고 주장했고, 그렇지 않았다.

Found on 2026-09-29 by shipping while job 15 was mid-run and watching it never come back. The deploy script's docstring claimed the next claim would pick it up by attempt count. It did not.

Phát hiện ngày 2026-09-29 khi triển khai trong lúc tác vụ 15 đang chạy và thấy nó không quay lại. Docstring script deploy nói lần nhận tiếp theo sẽ nhặt theo số lần thử. Thực tế không.

② 워커 — 스레드와 레인The worker: threads and lanesWorker: thread và làn

--parallel 6한 프로세스 안에서 판독 6건을 스레드로. 안전한 이유는 claim이 SKIP LOCKED이라 두 루프가 같은 작업을 잡을 수 없고, 판독은 대부분 모델 API를 기다리는 시간이며 CV는 별도 서비스에서 돌아 이 프로세스는 모델을 들고 있지 않기 때문이다six readings as threads in one process — safe because claims cannot collide, and a reading mostly waits on the model APIsáu lượt đọc dưới dạng thread trong một tiến trình — an toàn vì claim không va chạm, lượt đọc chủ yếu chờ API mô hình
--procs 1격리용으로만. CV가 프로세스 안에서 돌 때 트래커의 네이티브 크래시가 프로세스 하나만 가져가게 한다isolation only, for when CV runs in-processchỉ cô lập khi CV chạy trong tiến trình
--lanelive · batch · experiment로 큐를 가른다. 실험이 운영 작업을 집어갈 수 없다. 그리고 결정적으로 — 오토스케일러가 lane_filter라는 같은 SQL 함수를 쓴다 → 스케일러가 세는 큐 깊이가 그 레인의 워커가 실제로 집어갈 작업과 언제나 정확히 일치한다live / batch / experiment partition the queue — and the autoscaler counts depth with the same SQL function the workers claim with, so it can never count work its workers would not takelive / batch / experiment chia hàng đợi — autoscaler đếm độ sâu bằng chính hàm SQL worker dùng để claim, nên không thể đếm việc worker sẽ không nhận
dryrun가짜 모델 작업과 진짜 작업을 양방향으로 갈라 진짜 판독이 가짜 모델에서 돌 수 없게 한다partitioned both ways, so a real reading can never run on a mocked modelphân vùng theo cả hai chiều, nên lượt đọc thật không bao giờ chạy trên mô hình giả

SIGTERM을 받으면 작업을 돌려준다 — running → queued, 시도 횟수는 올리지 않고(중지당한 것은 작업 탓이 아니다), 열어 둔 분석 행은 실패로 닫으며 사용자에게 한국어 메시지가 남는다: 「워커가 중지되어(축소·배포) 이 분석은 중단되었고, 같은 작업이 다시 대기열에 들어갔습니다」. 그래서 축소나 배포는 판독 한 번의 재시작 비용만 들고, 30분 임대를 기다리지 않는다.

On SIGTERM the worker hands its jobs back — running → queued, the attempt not counted (being stopped is not the job's fault), the open analysis closed as failed with a Korean message to the user. A scale-in or a deploy therefore costs one reading's restart, never the 30-minute lease.

Khi SIGTERM, worker trả việc lại — running → queued, không tính lượt thử (bị dừng không phải lỗi tác vụ), đóng phân tích đang mở là thất bại và để lại thông báo tiếng Hàn cho người dùng. Vì vậy scale-in hay deploy chỉ tốn một lần khởi động lại, không tốn lease 30 phút.

③ GPU — 진짜 희소 자원The GPU: the one genuinely scarce resourceGPU: tài nguyên thực sự khan hiếm

CV 모델이 워커 프로세스 안에서 돌 때는 GPU 메모리가 프로세스마다 늘어 병렬성이 막혔다. 그래서 GPU를 한 프로세스가 소유하고 워커는 HTTP로 부른다. 그 서비스 안의 장치가 넷이다.

When the CV models ran inside the worker process, GPU memory grew with every process and parallelism was blocked. So one process owns the GPU and the workers call it over HTTP. There are four mechanisms inside that service.

Khi mô hình CV chạy trong worker, bộ nhớ GPU tăng theo từng tiến trình, không thể song song. Vì vậy một tiến trình sở hữu GPU, worker gọi qua HTTP. Dịch vụ đó có bốn cơ chế.

슬롯slotsslot계수 세마포어. GPU 기본 1칸, CPU 2칸. 대기·실행·처리·만료·점유시간을 계수해 /queue로 내보낸다 — 오토스케일러가 읽는 숫자가 이것이다a counting semaphore — one GPU slot, two CPU slots by default — reporting the numbers the autoscaler readssemaphore đếm — mặc định một slot GPU, hai slot CPU — báo số mà autoscaler đọc
예산 있는 대기bounded waitchờ có giới hạn시간이 지나면 Expired로 포기한다. 주석이 이유를 적어 둔다 — 「판독자는 자기 예산에서 트랙 기다리기를 그만두므로, 아무도 기다리지 않는 요청이 아직 기다리는 판독들을 막고 GPU 큐를 붙들어서는 안 된다」a request nobody is waiting for any more must not hold the GPU queue against readings that still areyêu cầu không còn ai chờ không được giữ hàng GPU trước lượt đọc vẫn còn người đợi
단일 비행single flightsingle flight같은 키의 동시 요청은 한 번만 계산하고 결과를 나눠 갖는다 — 두 판독이 같은 클립의 트랙을 동시에 물으면 GPU는 한 번만 돈다concurrent callers with the same key share one computationcác caller đồng thời cùng khóa dùng chung một phép tính
흘려보내기 · 배수shed / drainshed / drain꽉 차면 429를 주고 클라이언트가 다른 복제본으로 재시도한다. SIGTERM에는 /healthz가 503을 내 로드밸런서가 보내기를 멈추되 진행 중인 것은 끝낸다429 when full so the client retries elsewhere; on SIGTERM health goes 503 so the balancer stops sending while in-flight work finishes429 khi đầy để client thử nơi khác; SIGTERM chuyển health thành 503 để balancer ngừng gửi trong lúc việc đang chạy hoàn thành

⭐ 가장 잘 된 한 가지 — 예산이 한 함수다The best piece: one budget functionPhần tốt nhất: một hàm ngân sách

tracks_budget_s(duration) = min(600, max(180, duration × s_per_video_s + 30))

판독자가 트랙을 얼마나 기다릴지와 요청이 GPU 큐에서 얼마나 기다려도 되는지를 같은 함수 하나가 정한다 — 그래서 둘이 어긋날 수가 없다. 약 66초까지의 클립은 늘 쓰던 180초를 그대로 쓰고, 더 긴 클립은 자기 계산량에 맞는 시간 + 큐 30초를 받는다.

The same function decides how long the reader waits for tracks and how long a request may sit in the GPU queue — so the two can never disagree. Clips up to about 66 s keep the 180 s they always had; longer ones get the time their compute actually needs plus 30 s of queue.

Cùng một hàm quyết định reader chờ track bao lâu và request nằm trong hàng GPU bao lâu — nên hai thứ không thể bất nhất. Clip tới khoảng 66 s giữ 180 s vốn có; clip dài hơn nhận thời gian tính thực tế cần cộng 30 s chờ hàng.

⚠️ 그래서 「180초 상한」이라는 설명은 낡았다 — 상한은 600초이고 180초는 하한이다. 이 변경 자체가 로드 테스트에서 나왔다: 케이스 161의 180초 클립은 계산에 4~7분이 걸려 180초를 맞출 수가 없었다.

⚠️ The "180-second cap" described elsewhere is out of date: 180 s is now the floor and 600 s the ceiling. The change came out of a load test — case 161's 180-second clip needs 4–7 minutes of compute and could never have made 180 s.

⚠️ Mô tả "giới hạn 180 giây" ở nơi khác đã cũ: 180 s nay là sàn, 600 s là trần. Thay đổi đến từ kiểm thử tải — clip 180 giây của vụ 161 cần 4–7 phút tính toán, không thể xong trong 180 s.

🚨 그런데 워커를 여러 개 띄우면 안 되는 이유Why you still should not run many workersVì sao vẫn không nên chạy nhiều worker

위의 모든 것은 작업 수준에서 올바르다. 막는 것은 텍스트다 — facts.jsonl의 writer가 일곱 개이고 규칙이 서로 다르며 그중 셋은 데이터를 잃는다(§7.4). 진실이 한 박스의 디스크에 사는 한 두 워커가 한 사건을 나눠 가질 수 없다. V-D24의 「writer를 하나로 모으는 것이 워커 2개의 전제 조건」이 이것이고, V-D26이 그 간극의 대부분을 닫았다 — 디스크는 캐시, DB와 S3가 기록.

All of the above is correct at the job level. The blocker is text: several writers to facts.jsonl with different rules (§7.4 enumerates eight call sites), three of which lose data. While the truth lives on one box's disk, two workers cannot share a case — which is what V-D24 meant by "unify the writers first", and what V-D26 mostly closed by making disk a cache and the DB plus S3 the record.

Tất cả trên đúng ở cấp tác vụ. Nút thắt là văn bản: nhiều writer ghi facts.jsonl với quy tắc khác nhau (§7.4 liệt kê tám call site), ba trong đó làm mất dữ liệu. Khi sự thật nằm trên đĩa của một hộp, hai worker không thể chia sẻ vụ — đó là ý của V-D24 "thống nhất writer trước", và V-D26 chủ yếu đóng bằng cách biến đĩa thành cache, DB cùng S3 thành hồ sơ.

4.6다섯 단계와 도표 확정 잠금 · Five stages and the lock · Năm giai đoạn và khóa

1
판독đọc
영상을 사실 단위로 · 사고개요는 「주장」chuyển video thành sự kiện · báo cáo tai nạn là "khẳng định"
2
도표 확정 🔒chốt biểu đồ 🔒
인정기준 원문과 대조 · 사정사가 잠근다đối chiếu nguyên văn tiêu chuẩn · chuyên viên khóa
3
과실 협의đàm phán lỗi
가감산 요소를 양쪽 주장 · 증거 등급 · 범위yếu tố điều chỉnh theo lập luận hai bên · cấp bằng chứng · phạm vi
4
고객 안내hướng dẫn khách hàng
근거 있는 블록만 · 약속 표현 차단chỉ khối có bằng chứng · chặn câu hứa
5
종결kết thúc
합의 · 분쟁심의 · 기타thống nhất · hội đồng tranh chấp · khác

도표 확정은 잠금이다. 조사자가 확정하면(버튼으로든 채팅으로든 — 같은 서비스 호출), 재분석·판정기 변경·채팅 판단은 전부 「새 판정 제안」이 되어 채택하거나 둔다. 협의 행은 확정된 도표에만 존재하고(다른 도표는 가감산 요소가 완전히 다르다), 안내문은 확정을 요구한다.

Once the adjuster confirms the chart, nothing replaces it by itself — a re-analysis or a chat judgement becomes a suggestion to adopt or leave. Negotiation rows exist only for a confirmed chart; a notice requires one.

Khi chuyên viên xác nhận biểu đồ, không gì tự thay thế nó — phân tích lại hoặc phán định từ chat chỉ là đề xuất chấp nhận hay để đó. Hàng đàm phán chỉ tồn tại cho biểu đồ đã xác nhận; thông báo cần có một biểu đồ như vậy.

왜: 분석을 고르면 KB 사건이 현재 판정기로 조용히 재판정되었다 — 사건 11에서 47-x 런 세 개가 전부 43-1로 표시되었다.

Why: selecting an analysis silently re-judged KB cases on the current decider — case 11 showed three 47-x runs as 43-1.

Lý do: chọn một phân tích từng âm thầm phán định lại vụ KB bằng bộ quyết định hiện tại — vụ 11 cho thấy ba lượt 47-x thành 43-1.

불변식 — 분석은 불변이다bất biến — phân tích không đổi · an analysis is immutable · phân tích là bất biến

effective_facts(case_id) = facts of cases.active_analysis_id
                           ⊕ latest case_facts per fact_id
effective_facts(case_id) = dữ kiện của cases.active_analysis_id
                           ⊕ case_facts mới nhất theo từng fact_id

다시 돌리면 새 행이 생긴다. 덮어쓰지 않는다. 이것이 측정된 실험이 조사자의 수정으로 오염되지 않는 이유이고, 채팅이 사건에는 파괴적이면서 측정에는 그렇지 않은 이유다.

Re-running produces a new analysis. This is why a measured experiment is never corrupted by a correction, and why chat can be destructive to a case without being destructive to a measurement.

Chạy lại tạo phân tích mới. Vì vậy thí nghiệm đã đo không bị sửa hỏng, và chat có thể phá thay đổi vụ việc mà không phá phép đo.

4.7협의와 안내문 — 숫자는 코드가 통제한다 · Numbers are controlled by code · Số liệu do mã kiểm soát

규칙 · rulequy tắc
%p오직 책에서만 온다. 모델도 조사자도 상태를 옮길 뿐 숫자를 발명하지 않는다come from the book only — the model moves states, never invents numberschỉ lấy từ sách — mô hình di chuyển trạng thái, không tự tạo số
비율RatioTỷ lệ언제나 범위, 0~100 클램프. 절대 단일 숫자가 아니다always a range, clamped — never a single numberluôn là một khoảng, có chặn — không bao giờ một số đơn
tier 게이트the tier gateđiều kiện cấp độread 등급 사실은 서술 불가 — 🚨 source=="adjuster"이면 우회된다 (§7.4)a read-tier fact may not be narrated — bypassed when source is adjuster (§7.4)sự kiện cấp read không được kể — bỏ qua khi nguồn là chuyên viên (§7.4)
추적성TraceabilityKhả năng truy nguyên모든 문장이 출처 id에 묶여야 하고, 못 묶는 문장은 생성 단계에서 버린다sentences that cannot be tied to a source are dropped at generationcâu không gắn được nguồn bị bỏ ở bước tạo
약속 린트Promise lintlint câu hứa「반드시」·「확실히」·「최종」 → 그 블록은 포함 불가, 발행이 409로 거부publication refused (409) while an included block fails linttừ chối công bố (409) khi còn khối lỗi lint
기대치ExpectationKỳ vọng유리한데 유사도 < 0.6 → 「낙관적」으로 처음부터 제외favourable but weakly similar → excluded as 「낙관적」 by defaultcó lợi nhưng tương đồng yếu → mặc định loại là 「낙관적」 (lạc quan)

발행은 사건당 하나, 재발행은 같은 토큰(같은 링크)을 갱신한다. 공개 페이지는 스냅샷을 서빙하고 라이브 데이터가 아니다 — 파일명·A/B·진술 id는 의도적으로 제거되었다.

Publishing is one notice per case, and re-publishing refreshes the same token (the same link). The public page serves the snapshot and not live data — filenames, A/B and statement ids are deliberately stripped.

Mỗi vụ chỉ có một thông báo; công bố lại làm mới cùng token (cùng liên kết). Trang công khai phục vụ ảnh chụp, không dữ liệu trực tiếp — tên tệp, A/B và ID sự kiện bị chủ động loại bỏ.

05결과 · Measured ResultsKết quả đo lường

⚠️ 안내문이 말없이 사례 카드를 못 만드는 도표가 44개 있다for 44 charts the notice silently produces no case cards44 biểu đồ không tạo thẻ tình huống nào trong thông báo, không báo lý do

2026-09-21의 기록이다. 사건 3의 안내문에서 차18-1은 코퍼스에 판례·조정사례·결정문 대응이 하나도 없어 사례 카드가 아예 생기지 않는다. 코퍼스 전체를 세면 이렇다 — 201개 도표 중 157개에 판례가 있고, 조정사례는 0건, 결정문 대응은 1,043건이다.

From 2026-09-21. In case 3's notice, 차18-1 has no precedent, no mediation case and no decision in the corpus, so no case cards are produced at all. Counted over the corpus: 157 of 201 charts have a precedent, mediation cases are zero, and 1,043 decisions map across.

Từ 2026-09-21. Trong thông báo của hồ sơ 3, 차18-1 không có tiền lệ, vụ hòa giải hay quyết định nào trong dữ liệu, nên không tạo thẻ tình huống nào. Đếm toàn bộ dữ liệu: 157 trên 201 biểu đồ có tiền lệ, số vụ hòa giải bằng 0, có 1,043 quyết định ánh xạ được.

🚨 그래서 44개 도표에서 그 구역은 빈 채로 그려진다 — 「코퍼스에 비교할 사례가 없습니다」라고 말하는 대신이다. 고객이 보는 문서에서 빈 구역과 「없음」은 같은 것이 아니다. §0.0의 어휘가 여기에 그대로 적용된다 — 해당 없음은 답이고, 공백은 답이 아니다.

🚨 So for 44 charts that section renders empty instead of saying "there is no comparable case in the corpus". In a document a customer reads, an empty section and "none" are not the same thing — and the vocabulary of §0.0 applies directly: 해당 없음 is an answer; a blank is not.

🚨 Với 44 biểu đồ, mục đó hiển thị trống thay vì nói “không có vụ việc tương tự trong dữ liệu”. Trong tài liệu khách hàng đọc, mục trống khác với “không có” — quy tắc thuật ngữ tại §0.0 áp dụng trực tiếp: không áp dụng (해당 없음) là một câu trả lời; để trống thì không.

⚠️ 같은 보고가 정직하게 적어 둔 둘: ① 빌더 테스트 하나가 set_active_analysis를 호출하면서 실제 유료 판정 재도출 1회가 나갔다(결과는 차18-1 유지). ② 원장 채점과 안내문 작성 호출의 비용이 트레이스에 기록되지 않는다 — 그러므로 이 문서의 건당 비용 수치는 전부 하한이다.

⚠️ Two things the same report records honestly: ① a builder test called set_active_analysis and fired one real, paid verdict re-derivation (the verdict held at 차18-1); ② the cost of ledger scoring and notice writing is not recorded in the trace — so every per-case cost figure in this document is a lower bound.

⚠️ Hai điều cùng báo cáo đó ghi nhận thẳng thắn: ① kiểm thử bộ tạo đã gọi set_active_analysis, kích hoạt một lần suy ra lại kết luận thật, có tính phí (kết luận vẫn là 차18-1); ② chi phí chấm sổ và viết thông báo không được ghi trong trace — vì vậy mọi chi phí mỗi hồ sơ trong tài liệu này đều là cận dưới.

5.0쓴 자료 전부 — 한 장 · Every dataset, in one placeMọi bộ dữ liệu ở cùng một nơi

「우리가 쓴 모든 데이터」는 이 문서 일곱 장에 흩어져 있었다. 여기 모은다 — 어디에 있고, 무슨 모양이고, 무엇에 쓸 수 있고, 무엇이 잘못되어 있는지.

What exists, where it is, what shape it is, what it is good for, and what is wrong with it.

Có gì, ở đâu, cấu trúc thế nào, dùng được vào việc gì, có vấn đề gì.

자료datasetbộ dữ liệu규모 · 어디size · wherequy mô · vị trí쓸 수 있는 것 / 🚨 조심할 것good for / 🚨 watch outdùng cho / 🚨 lưu ý
KB 사고 영상
ams-blackbox-export
KB accident footage · ams-blackbox-exportvideo tai nạn KB · ams-blackbox-export
원본 약 6,000편 → 비식별 반출 약 2,900편. S3에 전부 있다(2026-10-19 확인). 사고개요·출동개요 텍스트 + KB 접수 도표 + 기본 과실비율 동반~6,000 originals → ~2,900 exported after de-identification. All of them are in S3 (confirmed 2026-10-19), each with the dispatch and accident summary text, KB's filed chart and its base ratio~6,000 bản gốc → ~2,900 bản xuất sau khi khử định danh. Tất cả nằm trong S3 (xác nhận 2026-10-19), mỗi bản có văn bản điều phối và tóm tắt tai nạn, biểu đồ KB ghi nhận và tỷ lệ cơ sở실제 사고 · 실제 접수 도표. 이 과제의 유일한 운영 자료다. 🚨 약 2,600편은 아직 쓰지 않았다 — 열려 있는 가장 큰 자원Real accidents, really filed charts. The only operational data this project has. 🚨 About 2,600 have never been touched — the largest open resource hereTai nạn thật, biểu đồ thực sự được ghi nhận. Dữ liệu vận hành duy nhất của dự án. 🚨 Khoảng 2,600 hồ sơ chưa từng được sử dụng — nguồn tài nguyên còn mở lớn nhất
KB 300 평가셋
data/kb_selection/
the 300-case evaluation set · data/kb_selection/tập đánh giá 300 hồ sơ · data/kb_selection/
30 도표 × 10건. 선별: 2,968 → 2,916 → 1,143 → 476 → 305. 코호트 파일 data/kb/final_300_ego.csv는 레포에 없다30 charts × 10 cases. Screening: 2,968 → 2,916 → 1,143 → 476 → 305. The cohort file data/kb/final_300_ego.csv is not in the repo30 biểu đồ × 10 hồ sơ. Sàng lọc: 2,968 → 2,916 → 1,143 → 476 → 305. Tệp quần thể data/kb/final_300_ego.csv không có trong kho mã모든 헤드라인 숫자의 분모. 🚨 도표별 10건 균등이지 KB 접수 비중이 아니다 · 23건은 상대차 촬영분을 뒤집어 쓴 것이고 그 23건의 도표 일치는 52.2% · contact_visible=0이 86건 · 아직 못 찾은 뒤집을 건이 남아 있을 수 있다The denominator under every headline number. 🚨 Ten per chart is not KB's real case mix · 23 cases are the other party's footage used flipped, and those 23 score 52.2% · contact_visible=0 on 86 · there may be flips still undetectedMẫu số của mọi con số nổi bật. 🚨 Mười hồ sơ mỗi biểu đồ không phản ánh cơ cấu hồ sơ thật của KB · 23 hồ sơ dùng video bên đối phương sau khi đảo vai; 23 hồ sơ đó đạt 52.2% · contact_visible=0 ở 86 hồ sơ · có thể vẫn còn trường hợp đảo vai chưa phát hiện
AI Hub 교통사고 영상AI Hub traffic-accident footagevideo tai nạn giao thông AI Hub공개 데이터. ams-1080(1,080편) · lense 골드셋 273편(파일은 560행이지만 중복이다 — 아래 N11) · E-V-001 감사 48편이 전부 여기서 나왔다Public data. ams-1080 (1,080 clips), lense's gold set (273 clips; the file has 560 lines but they are duplicates — see N11) and E-V-001's 48-clip audit all come from hereDữ liệu công khai. ams-1080 (1,080 video), tập chuẩn lense (273 video; tệp có 560 dòng nhưng trùng lặp — xem N11), và kiểm tra 48 video E-V-001 đều lấy từ đây통제된 입력 · 공통 기준. 🚨 라벨이 자기 자신과 불일치한다 — 같은 영상의 변형본에 다른 도표; 중복 59쌍 중 9쌍이 주석 충돌; 라벨 ~17% 오류 추정; A/B 역할이 없다; ego_manoeuvre는 관찰이 아니라 도표 역할에서 파생. 그리고 국외 반출 금지Controlled input, a common yardstick. 🚨 The labels do not agree with themselves — a re-encode of the same clip carries a different chart; 9 of 59 duplicate pairs conflict; ~17% of labels are probably wrong; there is no A/B role; and ego_manoeuvre is derived from the chart role rather than observedĐầu vào có kiểm soát, thước đo chung. 🚨 Nhãn tự mâu thuẫn — cùng video mã hóa lại mang biểu đồ khác; 9 trên 59 cặp trùng mâu thuẫn; ~17% nhãn có thể sai; không có vai trò A/B; ego_manoeuvre được suy từ vai trò trong biểu đồ, không được quan sát
인정기준 (책)
data/knia/
the standard (the book) · data/knia/quy chuẩn (sách) · data/knia/
크롤링본 201 도표 + 분쟁심의 결정문 2,460건(knia-api가 만든다, 레포에 벤더링). 조항은 clauses.json — 차 도표 108개, 절 개수 중앙값 6The crawled form: 201 charts + 2,460 dispute decisions (built by knia-api, vendored into the repo). Clauses live in clauses.json — 108 car-to-car charts, median 6 clausesDạng thu thập tự động: 201 biểu đồ + 2,460 quyết định tranh chấp (knia-api tạo, được tích hợp vào kho mã). Điều khoản nằm trong clauses.json — 108 biểu đồ ô tô va chạm ô tô, trung vị 6 điều khoản판정의 근거 그 자체. 🚨 인쇄본(600쪽)과는 다른 벌이다 — 인쇄본은 차대차 108 leaf이고 knia-dag git 히스토리에서 되살릴 수 있다(§0.4). 🚨 결정문의 79%가 공시 기본비율에서 벗어난다The basis of every verdict. 🚨 It is a different edition from the printed book — the print has 108 car-to-car leaves and is recoverable from knia-dag's git history (§0.4). 🚨 79% of the decisions depart from the published base ratioCơ sở của mọi kết luận. 🚨 Khác ấn bản sách in — bản in có 108 nút lá ô tô va chạm ô tô, khôi phục được từ lịch sử git của knia-dag (§0.4). 🚨 79% quyết định lệch tỷ lệ cơ sở công bố
정답셋 도구
labeling
gold-set tooling · labelingcông cụ tạo tập chuẩn · labeling
93편 배치, 뷰어·병합·충돌 기록·engine_feedback.py까지 완성. 작업자 A가 68편을 끝내고, 정의가 바뀜 재라벨 중 멈춤A batch of 93 clips, with viewer, merge, conflict log and engine_feedback.py all finished. It stopped one step before the labelling itselfLô 93 video; trình xem, gộp dữ liệu, nhật ký mâu thuẫn và engine_feedback.py đều đã xong. Dừng ngay trước bước thực sự gán nhãn재사용할 것은 클립이 아니라 장치다 — 전수 이중 라벨링이 작업자 간 일치율을 공짜로 낸다. 🚨 라벨러 B는 시작하지 않았고, 그래서 모델 정확도의 상한이 한 번도 측정되지 않았다What is worth reusing is the tooling, not the clips — double labelling yields inter-labeller agreement for free. 🚨 Labeller B never started, so the ceiling on model accuracy was never measuredĐáng tái sử dụng là công cụ, không phải video — gán nhãn đôi tự tạo phép đo đồng thuận giữa người gán nhãn. 🚨 Người gán nhãn B chưa bắt đầu, nên chưa đo được trần độ chính xác mô hình
실험 산출물
docs/results/ · runs/
experiment outputs · docs/results/ · runs/đầu ra thí nghiệm · docs/results/ · runs/
kb_open_20261006/에 per-case CSV 11개(공개 모델 arm 전부 재현됨) · data/audit/(E-V-001 완비) · runs/는 git 제외kb_open_20261006/ holds 11 per-case CSVs (every open-model arm reproduces) · data/audit/ is complete for E-V-001 · runs/ is git-ignoredkb_open_20261006/ có 11 CSV theo hồ sơ (mọi phương án mô hình mở đều tái lập được) · data/audit/ đầy đủ cho E-V-001 · runs/ được git bỏ qua실험 arm은 전부 재계산된다. 🚨 운영 arm의 per-case 데이터는 없다 → 209를 분해할 수 없다 · 원장의 runs/… 포인터는 배포 박스에만 있다Every experiment arm recomputes. 🚨 There is no per-case data for the production arm → the 209 cannot be decomposed · the ledger's runs/… pointers exist only on the deployed boxMọi phương án thí nghiệm tính lại được. 🚨 Phương án production không có dữ liệu từng hồ sơ → không phân rã được số 209 · đường dẫn runs/… trong sổ chỉ tồn tại trên máy đã triển khai
사정사 검토
visus-kb-review-20261006
the adjuster review · visus-kb-review-20261006giám định viên rà soát · visus-kb-review-20261006
불일치 91건을 두 사정사가 각자 전부 검토. 답은 S3 버킷에, 레포에는 없다Two adjusters each reviewed all 91 disagreements. The answers are in an S3 bucket, not in the repoHai giám định viên, mỗi người rà soát toàn bộ 91 trường hợp lệch. Câu trả lời ở bucket S3, không ở kho mã이 과제에서 가장 강한 고객 증거. 76.7~86.7% 사다리와 63/91 일치가 여기서 나온다. 🚨 다시 세려면 버킷 접근이 필요(IAM 추가 가능)The strongest client evidence in the project. The 76.7–86.7% ladder and the 63/91 agreement come from here. 🚨 Recomputing it needs bucket access (IAM can be extended)Bằng chứng mạnh nhất từ khách hàng trong dự án. Dãy 76.7–86.7% và mức đồng thuận 63/91 lấy từ đây. 🚨 Tính lại cần quyền truy cập bucket (có thể mở rộng IAM)
세션 기록bản ghi phiên làm việc764편 · 6.5 GB · 2026-07-28 → 10-14. 사람이 직접 친 메시지만 1,221건764 files · 6.5 GB · 2026-07-28 → 10-14. 1,221 messages typed by a human764 tệp · 6.5 GB · 2026-07-28 → 10-14. 1,221 tin nhắn do con người gõ「왜」가 있는 유일한 곳 — 9장과 §7.5가 여기서 나왔다. 🚨 자격 증명과 KB 사고 내용이 들어 있다 — 레포에 넣지 말 것 · 상태에 대해서는 최종이 아니다(§0.2)The only place the "why" exists — chapter 9 and §7.5 came from here. 🚨 It contains credentials and KB accident material — keep it out of any repo · and it is never final on state (§0.2)Nơi duy nhất lưu lý do “vì sao” — chương 9 và §7.5 lấy từ đây. 🚨 Chứa thông tin xác thực và dữ liệu tai nạn KB — không đưa vào bất kỳ kho mã nào · và không bao giờ là nguồn cuối cùng về trạng thái (§0.2)

🚨 KB가 약속하고 오지 않은 것 둘 — 과실분쟁심의 결정사례와 소송판례 데이터. 그래서 결정문 2,460건은 우리가 크롤링했다. 이 둘이 들어오면 도표 해석과 고객 안내문이 모두 「실제 인정 사례」로 바뀐다 — 파일럿 제안의 첫 요청 항목이다.

Two of the three datasets KB promised never arrived — the dispute decisions and the litigation precedents — which is why we crawled 2,460 rulings ourselves. If they arrive, chart interpretation and the customer notice both move from inference to filed precedent.

Hai trong ba bộ dữ liệu KB hứa chưa đến — quyết định tranh chấp và tiền lệ tố tụng — nên nhóm tự thu thập 2,460 phán quyết. Nếu nhận được, cách diễn giải biểu đồ và thông báo khách hàng đều chuyển từ suy luận sang tiền lệ đã ghi nhận.

🚨 ⭐ 리허설 집합이 운영과 구조적으로 다르다 — 그리고 KB 접수의 절반쯤만 이 시스템에 맞는다⭐ the rehearsal set is structurally unlike production — and only about half of KB’s intake fits this system at all⭐ tập chạy thử khác production về cấu trúc — chỉ khoảng một nửa hồ sơ KB tiếp nhận thuộc phạm vi hệ thống

타임라인 2026-09-16에서 나온다. 연습 사건 11건은 전부 완결되고 정확하다. 그런데 그중 어느 것도 데모가 실제로 도는 조건을 리허설하지 않는다.

From 2026-09-16 on the timeline. All eleven practice cases are complete and correct — and not one of them rehearses the conditions the demo actually runs in.

Từ 2026-09-16 trên dòng thời gian. Cả mười một hồ sơ thực hành đều hoàn tất, chính xác — nhưng không hồ sơ nào mô phỏng điều kiện bản demo thực sự chạy.

연습 집합the practice settập thực hànhKB 실제 클립KB’s real clipsvideo thật của KB
편수clipsvideo102,886
길이durationthời lượng전부 정확히 10.0초all exactly 10.0 stất cả chính xác 10.0 s평균 34.5초 · 0.05초 ~ 726초(12분)mean 34.5 s, from 0.05 s to 726 s (12 minutes)trung bình 34.5 s, từ 0.05 s đến 726 s (12 phút)
🚨 오디오audioâm thanh🚨 02,774 (96%)

⭐ 연습은 AI Hub 10초 무음 클립이고, 데모는 KB 클레임 위에서 돈다. 길이가 3배 이상이고 거의 전부 소리가 있다 — 그리고 §8.13이 적은 대로 비식별 파이프라인은 오디오를 그대로 통과시킨다. 리허설이 통과했다는 것이 데모가 통과한다는 뜻이 아니다.

⭐ The practice runs on silent 10-second AI Hub clips; the demo runs on KB claims. Those are three times longer and almost all carry sound — and as §8.13 records, the redaction pipeline passes audio straight through. A rehearsal passing does not mean the demo will.

⭐ Thực hành dùng video AI Hub không tiếng, 10 giây; demo dùng hồ sơ bồi thường KB. Video thật dài gấp ba, gần như đều có âm thanh — và như §8.13 ghi nhận, quy trình che thông tin cho âm thanh đi thẳng qua. Chạy thử đạt không đồng nghĩa demo sẽ đạt.

🚨 그리고 더 큰 숫자가 하나 있다. 같은 날 KB 클립 50건을 눈으로 선별한 결과 — 이 시스템이 다룰 수 있는 「전방 블랙박스 차대차 충돌」은 약 56%다. 나머지 절반 가까이는 도표를 고르기 전에 이미 범위 밖이다. §5.6의 성적은 전부 그 56% 안에서 잰 것이다.

🚨 And there is a larger number beside it. Screening 50 KB clips by eye the same day gave about 56% that are a usable front-dashcam car-to-car collision — nearly half are out of scope before a chart is ever chosen. Every score in §5.6 is measured inside that 56%.

🚨 Còn một con số lớn hơn bên cạnh. Cùng ngày, xem thủ công 50 video KB thấy khoảng 56% dùng được: camera trước, ô tô va chạm ô tô — gần một nửa đã ngoài phạm vi trước khi chọn biểu đồ. Mọi điểm số trong §5.6 đều đo bên trong 56% đó.

⚠️ knia-api를 소비할 때의 함정 넷 — 엔드포인트 표에는 적혀 있지 않다four traps in consuming knia-api that the endpoint table does not statebốn bẫy khi dùng knia-api mà bảng endpoint không nói

2026-08-31에 정리된 것이고, 넷 다 조용히 틀린 결과를 준다.

Recorded on 2026-08-31. All four give a quietly wrong result.

Ghi nhận 2026-08-31. Cả bốn âm thầm cho kết quả sai.

감산요소는 음수로 온다감산요소 arrive negativeyếu tố giảm lỗi (감산요소) đã mang dấu âm🚨 절댓값으로 뒤집으면 의미가 반전된다 — 깎아 줄 요소가 더해진다🚨 flip them to absolute values and the meaning inverts — a reduction becomes an addition🚨 đổi thành giá trị tuyệt đối sẽ đảo nghĩa — giảm trở thành tăng
/charts는 요약, /charts/{no}가 전체 레코드/charts is a summary; /charts/{no} is the full record/charts là tóm tắt; /charts/{no} là bản đầy đủ목록에는 situation도 법조문도 없다 — visus의 조항 대조가 필요로 하는 텍스트가 조용히 빠진다the list has no situation and no law text — exactly what visus's clause matching needs silently absentdanh sách không có situation hay văn bản pháp luật — đúng phần đối chiếu điều khoản visus cần lại âm thầm thiếu
결정문의 비율이 도표의 기본비율과 다른 것은 정상이다a decision's ratio legitimately differs from the chart's base ratiotỷ lệ trong quyết định có thể hợp lệ dù khác tỷ lệ cơ sở của biểu đồ데이터 버그처럼 보이지만 아니다 — §5.1의 중앙값 20%p가 바로 그것이다it looks like a data bug and is not — it is the median 20%p of §5.1trông như lỗi dữ liệu nhưng không phải — đó là trung vị 20%p ở §5.1
201개 미디어 중 38개는 정지 이미지38 of the 201 media are stills38 trong 201 tệp đa phương tiện là ảnh tĩnhmedia.kind가 <video>인지 <img>인지를 결정한다media.kind decides <video> versus <img>media.kind quyết định dùng <video> hay <img>

5.1숫자 뒤의 목표 — 80% · The target behind the numbersMục tiêu đằng sau các con số

🗣 구두🗣 Trao đổi miệng 어느 DECISIONS.md에도 없다. 세션 기록에만 있다Không nằm trong bất kỳ DECISIONS.md nào. Chỉ có trong bản ghi phiên làm việc

80%는 내부 목표였다(2026-10-01) — 그리고 어느 DECISIONS.md에도 적히지 않았다. 같은 기간에 하나의 긴장이 함께 기록된다: KB 라벨을 그대로 정답으로 보지 않는다는 것은 V-D12로 이미 정해진 원칙이면서, 동시에 80%에 도달했다고 말할 수 있게 하는 논거이기도 하다. 두 가지가 같은 사실에 기대고 있다.

80% was the internal target (2026-10-01), and it is written in no DECISIONS.md. Recorded alongside it is a tension worth carrying: not treating KB’s label as ground truth is a principle already settled in V-D12, and it is also what would let the number be described as clearing 80%. Both rest on the same fact.

80% là mục tiêu nội bộ (2026-10-01), không được ghi trong DECISIONS.md nào. Cùng đó là một mâu thuẫn cần giữ lại: không coi nhãn KB là chân lý vừa là nguyên tắc đã chốt ở V-D12, vừa cho phép mô tả con số là vượt 80%. Cả hai dựa trên cùng sự thật.

이것을 알아야 아래 표가 제대로 읽힌다. 최종 보고서의 「사정사 기준 76.7 ~ 86.7%」는 두 가지가 동시에 참인 수치다:

Knowing this is what makes the table below readable. The final report’s "76.7–86.7% by the adjusters’ standard" is a figure of which two things are true at once:

Hiểu điều này mới đọc được bảng dưới. Con số “76.7–86.7% theo tiêu chuẩn giám định viên” trong báo cáo cuối có đồng thời hai ý nghĩa:

진짜 측정이다a real measurementmột phép đo thực sự두 사정사가 불일치 91건을 각자 따로 실제로 검토했다two adjusters independently reviewed all 91 mismatcheshai giám định viên độc lập rà soát cả 91 trường hợp lệch
동시에 80%에 이르는 논거이기도 하다and also the argument for clearing 80%đồng thời là lập luận cho việc vượt 80%라벨 불신은 V-D12로 이미 결정된 원칙이면서, 받아들여질 수치에 도달하는 길이기도 했다label distrust was both settled principle and the route to the numbernghi ngờ nhãn vừa là nguyên tắc đã chốt, vừa là con đường đến con số
둘 다 사실이라는 점이 중요하다 · both are truecần nhớ cả hai đều đúng

재분류는 정당했다 — 라벨이 못 믿을 것이라는 증거는 7월부터 네 번 독립적으로 나왔다. 그러나 그 재분류가 중립적인 상황에서 나온 것은 아니다. 숫자를 다시 제시할 때는 어느 것이 엄격한 채점이고 어느 것이 재분류 후의 값인지 구분해서 말할 것.

The re-scoring was legitimate — the labels were independently shown unreliable four times since July — and it was also the route to a number that would clear the bar. Keep strict and re-scored figures clearly apart when presenting them again.

Việc chấm lại là hợp lý — nhãn đã được chứng minh không đáng tin cậy qua bốn lần độc lập từ tháng Bảy — đồng thời là cách đạt con số vượt ngưỡng. Khi trình bày lại, phải phân biệt rõ số nghiêm ngặt và số chấm lại.

엄격한 채점은 69.7%다. 그 위의 모든 숫자에는 「무엇을 제외했는가」가 붙어 있다.

KB 실제 사고 300건, 블라인드 평가. KB가 접수한 도표를 정답으로 놓고 엄격하게 채점했다.

300 real KB cases, blind, scored strictly against KB's own filed chart.

300 hồ sơ KB thật, chấm mù, đối chiếu nghiêm ngặt với biểu đồ chính KB ghi nhận.

69.7%
도표 일치 (1순위)Khớp biểu đồ (hạng 1)
209 / 300
79.3%
상위 5개 후보 안Trong 5 ứng viên đầu
238 / 300
73.0%
기본 과실 일치Khớp tỷ lệ lỗi cơ sở
219 / 300
620원620 KRW
건당 · 4분 20초 · 300건 18.7만원mỗi hồ sơ · 4 phút 20 giây · 300 hồ sơ hết 187,000 KRW
per case ($0.445) — analysis onlymỗi hồ sơ ($0.445) — chỉ phần phân tích
11
지금 운영 가능한 도표biểu đồ hiện có thể vận hành
of 30 evaluated

⚠️ 이 69.7%는 영상만의 성적이 아니다. 조사자의 「초기 보고」가 함께 들어간 구성이고, 빼면 26.3%로 떨어진다 — 아래 §를 반드시 같이 읽을 것.

⚠️ This is not a video-only figure. Without the adjuster's dispatch text it falls to 26.3%.

⚠️ Đây không phải con số chỉ từ video. Không có văn bản điều phối của giám định viên thì giảm còn 26.3%.

🚨 제품을 가두는 숫자 — 도표의 기본비율 자체가 결정문과 중앙값 20%p 떨어져 있다the number that bounds the product — the chart's own base ratio sits a median 20%p from what committees decidecon số giới hạn sản phẩm — tỷ lệ cơ sở của biểu đồ lệch trung vị 20%p so với quyết định hội đồng

80%는 도표를 맞히는 목표다. 그런데 도표를 100% 맞혀도 비율이 맞는 것은 아니다. 2026-08-24에 new-knia가 분쟁심의위원회 결정문 111건을 도표와 대조했다: 도표의 기본비율은 위원회가 실제로 내리는 비율과 중앙값 20%p 떨어져 있고, 가감요소가 그 간극을 움직인 것은 111건 중 18건뿐이다. 이유는 모델이 약해서가 아니라 결정문이 우리 술어가 필요로 하는 사실을 적지 않기 때문이다.

80% is a target for getting the chart right. But getting the chart right is not getting the ratio right. On 2026-08-24, new-knia compared 111 dispute-committee decisions against the charts: the chart's base ratio sits a median 20 percentage points from what the committee actually decides, and the modifier layer moved only 18 of the 111 — not because the models are weak, but because the decision texts do not state the facts our predicates need.

80% là mục tiêu chọn đúng biểu đồ. Nhưng đúng biểu đồ chưa có nghĩa đúng tỷ lệ. Ngày 2026-08-24, new-knia so 111 quyết định hội đồng tranh chấp với biểu đồ: tỷ lệ cơ sở lệch trung vị 20 điểm phần trăm so với quyết định thật; lớp điều chỉnh chỉ thay đổi 18 trong 111 trường hợp — không phải mô hình yếu, mà vì văn bản quyết định không nêu dữ kiện các vị từ cần.

「엔진은 『인정기준은 여기서 시작한다』고는 정직하게 말할 수 있다. 『이것이 최종 비율이다』라고는 말할 수 없다.」 — new-knia, 2026-08-24

"The engine can honestly say 'this is where the 인정기준 starts', not 'this is the final ratio.'" — new-knia, 2026-08-24

“Bộ máy có thể trung thực nói ‘đây là điểm xuất phát của quy chuẩn (인정기준)’, không phải ‘đây là tỷ lệ cuối cùng.’” — new-knia, 2026-08-24

⭐ 이것은 결함이 아니라 제품의 경계다, 그리고 이 문서가 다른 곳에 적은 「위원회는 도표에 연결된 결정문의 79%에서 공표된 기본비율을 벗어난다」와 같은 사실의 다른 쪽 면이다 — 79%는 얼마나 자주이고, 20%p는 얼마나 멀리다. 둘을 함께 말해야 visus의 출력이 무엇을 주장해도 되는지가 정해진다: 출발점과 그 근거이지 합의될 비율이 아니다.

⭐ This is a boundary, not a defect, and it is the other face of the figure this document records elsewhere — the committee departs from the published base ratio in 79% of chart-linked decisions. 79% is how often; a median 20%p is how far. Said together they settle what visus's output is allowed to claim: the starting point and its warrant, not the ratio that will be agreed.

⭐ Đây là ranh giới, không phải lỗi; là mặt còn lại của con số ghi ở nơi khác — hội đồng lệch tỷ lệ cơ sở công bố trong 79% quyết định gắn biểu đồ. 79% là tần suất; trung vị 20%p là mức lệch. Đọc cùng nhau, chúng xác định đầu ra visus được phép khẳng định gì: điểm xuất phát và căn cứ, không phải tỷ lệ sẽ được thỏa thuận.

⭐⭐ 300과 286은 같은 집단이 아니다 — 그리고 80%는 투영이었다⭐⭐ 300 and 286 are not the same cohort — and 80% was a projection⭐⭐ 300 và 286 không cùng quần thể — 80% từng là dự báo

이 문서는 다른 곳에서 레포에 300건 정확도가 둘 있는데 서로를 참조하지 않는다고 적었다 — 209/300 = 69.7%(10-06)와 171/286 = 59.8%(10-01). 기록에 빠진 고리가 있다. 10-01에 집단이 의도적으로 300 → 292 → 286으로 좁혀졌고, 그 규칙과 제외된 사건 번호가 남아 있다.

Elsewhere this document records an open puzzle: two 300-case accuracies in the repo that never cross-reference each other — 209/300 = 69.7% (10-06) and 171/286 = 59.8% (10-01). The missing link is in the record. On 10-01 the cohort was deliberately narrowed, 300 → 292 → 286, and both the rule and the excluded case ids survive.

Tài liệu ghi một câu hỏi chưa giải: hai độ chính xác trên 300 hồ sơ trong kho mã không dẫn chiếu nhau — 209/300 = 69.7% (10-06) và 171/286 = 59.8% (10-01). Mắt xích thiếu có trong bản ghi. Ngày 10-01, quần thể được chủ ý thu hẹp, 300 → 292 → 286; cả quy tắc và ID bị loại đều còn.

제외removedđã loại사유reasonlý do사건caseshồ sơ
1선별에서 떨어진 영상rejected at screeningbị từ chối khi sàng lọc161
2출동 텍스트가 상대차 카메라라고 명시the dispatch text says outright it is 상대차's cameravăn bản điều phối nói rõ đây là camera xe đối phương (상대차)29 · 101
5자차에 영상이 없다고 적혀 있음 — KB가 준 영상은 남의 것the text says 자차 had no footage, so KB's clip is someone else'svăn bản nói xe khách hàng không có video, nên video KB thuộc người khác173 · 200 · 219 · 232 · 276
6출동 텍스트가 서술하는 자차의 동작을 영상에서는 상대차가 하고 있다the text describes 자차 doing what the clip shows the other car doingvăn bản mô tả xe khách hàng làm điều mà video cho thấy xe bên kia đang làm76 · 99 · 162 · 202 · 203 · 238

🚨 그래서 두 수치는 같은 것의 두 측정이 아니다. 59.8%는 상대차 영상을 빼고 잰 것이고, 69.7%는 그중 23건을 뒤집어 다시 넣은 집단에서 잰 것이다. 둘 중 하나를 다시 돌리려면 이 규칙과 사건 번호가 필요하다. 그리고 방향을 적어 두는 것이 공정하다 — 최종 보고서의 분모는 닷새 전 팀 자신의 범위 규칙에 비해 수치가 올라가는 쪽으로 움직였다.

🚨 So the two figures are not two measurements of one thing. 59.8% is scored with the other party's footage removed; 69.7% is scored on a cohort with 23 of those put back, flipped. Re-running either requires this rule and these ids. And the direction is worth stating plainly: relative to the team's own scoping rule five days earlier, the final report's denominator moved the way that raises the number.

🚨 Hai con số không phải hai phép đo cùng một thứ. 59.8% được chấm sau khi loại video bên đối phương; 69.7% được chấm trên quần thể đưa lại 23 video đó, đảo vai. Chạy lại số nào cũng cần quy tắc và các ID này. Cần nói rõ hướng thay đổi: so với quy tắc phạm vi nhóm tự đặt năm ngày trước, mẫu số báo cáo cuối đã đổi theo hướng làm tăng điểm.

🚨 「돈이 걸린 숫자」 — 80%가 어디에 기대어 있었고, 실제로 어디에 도달했나"the number the money depends on" — what 80% rested on, and where it actually landed“con số quyết định tiền bạc” — 80% dựa vào gì, thực tế đạt đâu

10-01 00:21. 121건의 오답을 전부 열어 본 뒤의 판단이다 — 「80%는 도달 가능하다. 엄격 top-1은 약 77%(220/286)로 투영되고, 같은 비율을 주는 다른 도표를 정답으로 세면 약 80%(228/286)로 투영된다. 그것이 돈이 걸린 숫자다. 이것들은 추정이고, 각 수정 묶음은 도착할 때마다 측정한다.」

10-01, 00:21. After opening every one of the 121 misses: "80% is reachable. Strict top-1 projects to about 77% (220/286). Counting a different chart that gives the same ratio as correct, it projects to about 80% (228/286). That's the number the money depends on. These are estimates; each fix batch gets measured as it lands."

10-01, 00:21. Sau khi mở đủ 121 trường hợp sai: “Có thể đạt 80%. Top-1 nghiêm ngặt dự báo khoảng 77% (220/286). Nếu tính biểu đồ khác nhưng cùng tỷ lệ là đúng thì dự báo khoảng 80% (228/286). Đó là con số quyết định tiền bạc. Đây là ước tính; mỗi lô sửa sẽ được đo khi tích hợp.”

같은 날 07:51 — 측정된 결과다.

The same day at 07:51 — measured.

Cùng ngày 07:51 — kết quả đo.

운영 박스(3.2.1 / 3.3.1 판정기)live box (3.2.1 / 3.3.1 decider)máy đang phục vụ (bộ quyết định 3.2.1 / 3.3.1)171 / 286 = 59.8%
master + 3.4, 판정기만master with 3.4, decider onlymaster với 3.4, chỉ bộ quyết định182 / 286 = 63.6% (19건 얻고 8건 잃음)(19 gained, 8 lost)(thêm đúng 19, mất đúng 8)
목표 80%target, 80%mục tiêu, 80%229 — 47건 더47 morecần thêm 47

🚨 그 47건은 판정기 쪽 오답 58건 안에서 나와야 했다 — 즉 81%의 수정 성공률이 필요하다. 같은 보고의 문장이 결론이다: 「병합은 끝났지만, 판정기만으로는 80%에 닿지 않는다.」

🚨 Those 47 had to come out of 58 identified decider-side misses — an 81% fix rate. The report's own sentence is the conclusion: "the merge is done, but 80% is not within reach from the decider alone."

🚨 Phải lấy 47 trường hợp đó từ 58 lỗi đã nhận diện phía bộ quyết định — tỷ lệ sửa 81%. Câu của chính báo cáo là kết luận: “đã gộp xong, nhưng chỉ sửa bộ quyết định thì không thể đạt 80%.”

⭐ 이것이 이 절 앞머리의 경고 아래 있는 산수다. 80%라는 목표는 DECISIONS.md 어디에도 없고, 기댄 곳은 투영 228/286이며, 같은 집단에서 측정된 최고치는 182/286 = 63.6%다. 이 문서가 다른 곳에 적은 「라벨을 정답으로 보지 않는 것이 80%에 이르는 논거이기도 하다」는 경고는, 바로 이 간극을 메우는 다른 방법이 재채점이었다는 뜻이다. 둘 다 사실이고, 후임자는 둘 다 알아야 한다.

⭐ This is the arithmetic beneath the warning at the top of this section. The 80% target is in no DECISIONS.md, it rested on a projection of 228/286, and the best measured figure on that cohort was 182/286 = 63.6%. The warning this document records elsewhere — that declining to treat KB's label as ground truth is also what would support describing the number as 80% — is about the other way of closing exactly this gap. Both are true, and a successor needs both.

⭐ Đây là phép tính phía dưới cảnh báo đầu mục. Mục tiêu 80% không có trong DECISIONS.md nào, dựa vào dự báo 228/286; kết quả đo tốt nhất trên quần thể đó là 182/286 = 63.6%. Cảnh báo ở nơi khác — không coi nhãn KB là chân lý cũng là điều cho phép mô tả con số thành 80% — nói về con đường khác để lấp chính khoảng cách này. Cả hai đều đúng; người tiếp quản cần biết cả hai.

⭐ 같은 질문에 대한 더 이른 답 — 단계를 다 밟아도 70~73%다an earlier answer to the same question — the whole ladder tops out at 70–73%câu trả lời sớm hơn cho cùng câu hỏi — toàn bộ chuỗi chỉ đạt trần 70–73%

2026-10-01 00:10, 80%가 가능한가에 대한 답이다. 결론부터 — 「지금 가진 지렛대로 완전 자동 top-1 일치로는 아니다. 사정사가 실제로 경험하는 약간 다른 척도로는 가능해 보인다.」

2026-10-01, 00:10, answering whether 80% is reachable. The conclusion first: "Not as fully automatic top-1 agreement with KB's label, not with the levers we have now. As a slightly different measure, the one an adjuster would actually experience, yes."

2026-10-01, 00:10, trả lời có thể đạt 80% không. Kết luận: “Không, nếu đo top-1 hoàn toàn tự động khớp nhãn KB, với các đòn bẩy hiện có. Có, nếu dùng thước đo hơi khác, sát trải nghiệm giám định viên hơn.”

단계stepbước무엇을 공격하나what it attacksxử lý điều gì추정 top-1estimated top-1top-1 ước tính
지금 (3.2.1)now (3.2.1)hiện tại (3.2.1)—58%
단일 사실 수정 셋 — 차43-5(누가 먼저 움직였나, 보고서에서), 차42-2(가장자리 주차 대 차로 내 정차), 차5-1(한쪽만 신호인 교차로)three single-fact fixes — 차43-5 (who moved first, taken from the report), 차42-2 (parked at the edge versus stopped in the lane), 차5-1 (one-side-signal junctions)ba bản sửa một dữ kiện — 차43-5 (ai di chuyển trước, lấy từ báo cáo), 차42-2 (đỗ sát mép hay dừng trong làn), 차5-1 (giao lộ chỉ một phía có đèn)오답 28건28 misses28 trường hợp sai~63–65%
트리 가드 — 보고서나 조항 검사가 반박하면 계열 결정을 다시 연다a tree guard — reopen the family when the report or the clause check contradicts itcổng bảo vệ cây — mở lại nhóm khi báo cáo hoặc kiểm tra điều khoản mâu thuẫn계열 오류(32%)family errors (32%)lỗi nhóm (32%)~68–70%
판독기를 2~3회 돌려 투표run the reader 2–3 times and votechạy bộ phân tích 2–3 lần, bỏ phiếu실행 간 잡음(50건에서 4승 2패)run-to-run noise (4 gains, 2 losses in 50)nhiễu giữa các lần chạy (thêm đúng 4, mất đúng 2 trên 50)~70–73%

🚨 단계를 다 밟은 꼭대기가 목표에 못 미친다. 그리고 그 위에 한계가 둘 더 있다 — ① 순위만으로는 약 66%다(KB의 도표가 우리 상위 세 조항 적합 안에 드는 비율이고, 나머지 3분의 1은 1·2단계에서 계열을 잘못 확정한 것이라 — 계열 일치 68% — 그 뒤로는 어떤 순위 조정이나 판정기도 복구하지 못한다). ② 29%의 사건에서 접촉 자체가 보이지 않는다.

🚨 The top of the ladder is below the target. And two further ceilings sit above it: ① ranking alone reaches about 66% — KB's chart is among our three best clause fits that often, and in the other third the tree committed to the wrong family at step 1 or 2 (family agreement 68%), after which no ranking change and no judge can recover it; ② in 29% of cases the contact is not visible at all.

🚨 Đỉnh của chuỗi cải tiến vẫn dưới mục tiêu. Còn hai giới hạn khác: ① chỉ xếp hạng đạt khoảng 66% — biểu đồ KB nằm trong ba kết quả đối chiếu điều khoản tốt nhất ở mức đó; một phần ba còn lại cây đã chốt sai nhóm ở bước 1 hoặc 2 (khớp nhóm 68%), sau đó không đổi xếp hạng hay bộ phán định nào cứu được; ② 29% hồ sơ hoàn toàn không thấy thời điểm tiếp xúc.

⭐⭐ 그리고 모든 일치 수치의 한계를 정하는 질문이 여기 적혀 있다: 「손으로 하나씩 짚어 본 50건에서 오답 21건 중 약 4건은 KB가 같은 비율을 주는 이웃 도표나 이상하게 고른 도표를 택한 것이다 … 외삽하면 전체의 약 5~10%가 라벨 모호성일 수 있다 — 두 번째 KB 사정사라면 첫 번째와 다를 수 있는 사건들이다. KB 자신의 일관성 비율을 아무도 모르고, 그것이 모든 일치 점수의 상한이다.」 이 문서는 AI Hub 라벨의 불신을 네 가지 독립 증거로 적는다. 같은 논증이 KB 라벨에는 적용된 적이 없고, KB 라벨은 모든 대표 수치의 정답지다.

⭐⭐ And the question that caps every agreement figure is stated here: "In the 50 hand-walked cases, about 4 of the 21 misses were KB choosing a neighbouring chart with the same ratio, or an oddly chosen chart … extrapolated, roughly 5–10% of all cases may be label ambiguity, where a second KB adjuster could disagree with the first. Nobody knows KB's own consistency rate, and it caps any agreement score." This document documents the unreliability of the AI Hub labels four independent ways. The same argument has never been applied to KB's labels — and KB's label is the ground truth under every headline number.

⭐⭐ Câu hỏi đặt trần cho mọi tỷ lệ đồng thuận được nêu ở đây: “Trong 50 hồ sơ đọc thủ công, khoảng 4 trên 21 trường hợp lệch do KB chọn biểu đồ lân cận cùng tỷ lệ, hoặc chọn biểu đồ bất thường… ngoại suy, khoảng 5–10% toàn bộ hồ sơ có thể mơ hồ về nhãn, nơi giám định viên KB thứ hai có thể khác người thứ nhất. Chưa ai biết độ nhất quán của chính KB; nó giới hạn mọi điểm đồng thuận.” Tài liệu chứng minh nhãn AI Hub không đáng tin bằng bốn cách độc lập. Lập luận đó chưa từng áp dụng với nhãn KB — nhãn KB lại là chuẩn của mọi con số nổi bật.

5.2사정사 검토로 다시 본 정확도 · Re-scored by adjustersGiám định viên chấm lại

불일치 91건을 두 사정사가 각자 따로 검토했다.

Hai giám định viên rà soát độc lập 91 trường hợp lệch.

기준criteriontiêu chí사정사 1adjuster 1giám định viên 1사정사 2adjuster 2giám định viên 2
KB 도표와 일치matches KB's chartkhớp biểu đồ KB69.7%69.7%
+ AMS 도표도 타당+ AMS's chart also valid+ biểu đồ AMS cũng hợp lệ76.7%77.3%
+ 관행 차이+ a difference of practice+ khác biệt thực tiễn78.3%82.3%
+ 판단 불가 제외+ excluding the undeterminable cases+ loại trường hợp không thể xác định83.3%86.7%
AMS 오판judged wrongbị đánh giá là sai47건 (15.7%)47 cases (15.7%)47 hồ sơ (15.7%)38건 (12.7%)38 cases (12.7%)38 hồ sơ (12.7%)

두 사정사 모두 91건을 끝까지 검토했다 — 그래서 「두 사람의 답이 같은 사건 63/91」을 셀 수 있다. 최종 보고 5쪽.

Both adjusters completed all 91, which is what makes the 63/91 agreement figure computable. Final report, p.5.

Cả hai giám định viên hoàn tất đủ 91 hồ sơ, nên tính được mức đồng thuận 63/91. Báo cáo cuối, trang 5.

이 과제에서 처음 숫자로 나온 사실 · measured here for the first timesự thật lần đầu được đo thành số trong dự án

두 사정사가 모두 오판으로 본 것은 32건 (10.7%). 그리고 두 사람의 답이 같았던 것은 91건 중 63건(69%)이다. 갈린 28건 중 10건은 한 사람이 「관행상 KB 도표」, 다른 사람이 「AMS 오판」으로 봤다.

Cả hai giám định viên đều coi là phán định sai ở 32 hồ sơ (10.7%). Hai người trả lời giống nhau ở 63 trên 91 hồ sơ (69%). Trong 28 hồ sơ bất đồng, 10 hồ sơ có một người coi là “biểu đồ KB theo thực tiễn”, người kia coi là “AMS sai”.

사람끼리도 갈린다. 그래서 라벨과의 불일치를 오답으로 치지 않는다 (V-D12).

Both adjusters called it a miss in only 32 of 300 (10.7%) — and the two of them agreed with each other on just 63 of 91 (69%). Humans diverge too, which is why disagreement with a label is not scored as an error.

Cả hai cùng đánh giá sai chỉ ở 32 trên 300 hồ sơ (10.7%) — họ chỉ đồng thuận với nhau ở 63 trên 91 (69%). Con người cũng khác nhau, nên lệch nhãn không tự động được tính là lỗi.

5.3모델 독립성 · Model independenceĐộc lập mô hình

판독 모델만 바꾸고 나머지는 전부 같게. 같은 300건, 같은 단계·질문 순서·프레임 수, 같은 계측을 넘기고, 도표 판정 단계는 모든 모델에서 동일.

Only the reader model changed — same cases, same steps, same measurements, same judge.

Chỉ đổi mô hình phân tích — cùng hồ sơ, bước xử lý, phép đo và bộ phán định.

판독 모델reading modelmô hình phân tích운영 방식how it runscách chạy도표 일치chart matchkhớp biểu đồ상용 대비vs commercialso với thương mại건당per casemỗi hồ sơ
Claude Opus 5.5 🚨상용 · 외부 APIcommercial · external APIthương mại · API bên ngoài69.7%기준cơ sở620원620 KRW
Kimi K3공개 · KB 내부 다중 GPUopen · KB's own multi-GPUmở · nhiều GPU của KB62.0%89%390원390 KRW
Gemma 4 31B공개 · GPU 1장open · a single GPUmở · một GPU56.3%81%14원14 KRW
Qwen3.8-27B공개 · GPU 1장open · a single GPUmở · một GPU55.3%79%100원100 KRW
🚨 기준선 행을 조심해서 읽을 것read the baseline row with caređọc dòng cơ sở cẩn thận

세 공개 모델은 각각 한 번의 통제된 배치이고 per-case CSV가 커밋돼 있어 그대로 재현된다. 그런데 기준선(69.7%)은 그런 배치가 아니다 — 어느 시점에 각 사건이 들고 있던 활성 분석을 그대로 모은 것이고, 그것은 몇 주에 걸쳐 쌓인 것이다.

Ba mô hình mở, mỗi mô hình chạy một lô có kiểm soát, có CSV từng hồ sơ đã commit nên tái lập nguyên trạng được. Nhưng cơ sở 69.7% không phải lô như vậy — chỉ gom phân tích đang hoạt động mà mỗi hồ sơ có ở một thời điểm, tích lũy nhiều tuần.

그리고 🗣 구두로 확인했다: 그 기간에 판독 모델이 Fable에서 Opus 5.5로 바뀌었고, 어느 분석이 어느 모델이었는지 아무도 모른다. 즉 이 표의 「Claude Opus 5.5」 행은 단일 모델의 성적이 아니라 혼합일 수 있다.

Đã xác nhận qua 🗣 trao đổi miệng: giai đoạn đó mô hình đổi từ Fable sang Opus 5.5, không ai biết phân tích nào dùng mô hình nào. Vì vậy dòng “Claude Opus 5.5” có thể là hỗn hợp, không phải điểm của một mô hình.

확인하는 법은 간단하다 — analyses 행마다 모델이 기록되어 있다. stage 박스에서 질의 한 번이면 300건의 모델 분포가 나온다. 그 전까지 「공개 모델 대 Opus 5.5」라는 비교는 엄밀하지 않다. 80~90%라는 비율 자체는 분자(세 배치)가 깨끗하므로 방향으로는 유효하다.

The three open-model rows are single controlled batches with committed per-case data. The baseline is not — it is whatever active analysis each case happened to hold at the time, accumulated over weeks across a Fable → Opus 5.5 switch that nobody recorded. One query against analyses settles it; until then "open model vs Opus 5.5" is not a clean comparison.

Ba dòng mô hình mở là các lô có kiểm soát, có dữ liệu từng hồ sơ đã commit. Cơ sở thì không — gom các phân tích đang hoạt động, tích lũy nhiều tuần qua lần đổi Fable → Opus 5.5 không ai ghi lại. Một truy vấn analyses sẽ giải quyết; trước đó, “mô hình mở so với Opus 5.5” chưa là so sánh sạch.

그 「어느 시점」조차 자료마다 다르다. 최종 보고서 4쪽은 2026-10-03 분석 기준이라고 적고, 레포의 산출물과 사정사 검토 버킷은 10-06로 적혀 있다(docs/results/kb_open_20261006/, visus-kb-review-20261006, 그리고 v300.md의 「the readings the KB adjusters reviewed on 10-06」). 둘 중 무엇이 스냅샷 날짜인지 우리는 끝내 확인하지 못했다 — 10-03에 뜬 분석을 10-06에 검토했다고 보면 둘 다 맞지만, 기록이 그렇게 말하지는 않는다. 어느 쪽이든 결론은 같다: 한 번의 배치가 아니다.

Even "at the time" is dated two ways. Page 4 of the final report footnotes the figures 2026-10-03 분석 기준; the repo's artifacts and the review bucket are stamped 10-06. The two reconcile if the 10-03 analyses were reviewed on 10-06, but nothing on record says so, and we never resolved it. It changes nothing about the conclusion — the baseline is not one batch.

Ngay cả “tại thời điểm đó” cũng có hai ngày. Chú thích trang 4 báo cáo cuối ghi 2026-10-03 분석 기준 (theo phân tích 2026-10-03); hiện vật trong kho và bucket rà soát ghi 10-06. Có thể phân tích 10-03 được rà soát 10-06, nhưng không bản ghi nào nói vậy; chưa giải quyết. Kết luận không đổi — cơ sở không phải một lô.

그 단서를 달고도: KB 내부에서 직접 돌릴 수 있는 공개 모델이 상용의 80~90% 수준이다. 영상과 사고 자료가 KB 밖으로 나가지 않는 구성이 가능하다 — 목표 #4(모델 독립성)가 추상적 원칙이 아니라 측정된 선택지인 이유다.

Open models that KB can run on its own hardware reach 80–90% of the commercial one. Model independence is not a principle here — it is a measured option.

Mô hình mở KB có thể chạy trên phần cứng riêng đạt 80–90% mô hình thương mại. Độc lập mô hình ở đây là lựa chọn đã được đo.

⭐ 파이프라인을 떼면 어디까지 떨어지는가 — 공개 모델 혼자 도표 트리를 걷게 했을 때⭐ What the models do with the pipeline removed — an open model walking the chart tree alone⭐ Khi bỏ quy trình xử lý — mô hình mở tự duyệt cây biểu đồ

위의 표는 visus 전체에 판독 모델만 갈아 끼운 것이다. 2026-09-08에는 반대 실험이 돌았다 — 도구도, 계측도, 유도 질문도 없이 모델이 도표 트리를 네 단계로 직접 걷게 했다. 정답셋은 vlm2에서 사람이 검토한 53편, 호출 886회, 재시도 0·오류 0.

The table above swaps the reader inside the whole of visus. On 2026-09-08 the opposite experiment was run: with no tools, no measurements and no guided questions, the model walked the chart tree itself, four steps deep. The gold set was 53 human-reviewed clips from vlm2; 886 calls, zero retries, zero errors.

Bảng trên đổi bộ phân tích bên trong toàn bộ visus. Ngày 2026-09-08 chạy thí nghiệm ngược lại: không công cụ, không phép đo, không câu hỏi dẫn dắt, mô hình tự duyệt cây biểu đồ sâu bốn bước. Tập chuẩn là 53 video đã được người rà soát từ vlm2; 886 lệnh gọi, không thử lại, không lỗi.

모델modelmô hình정답 도표에 도달landed on the gold chartđến đúng biểu đồ chuẩn2단계step 2bước 23단계step 3bước 34단계 (선택지가 실제로 있는 노드)step 4 (nodes with a real choice)bước 4 (nút có lựa chọn thực sự)
Cosmos3-Nano15% (8/53)30%60%47%
Qwen3-VL-8B11% (6/53)47%28%39%
Qwen3-VL-32B-FP821% (11/53)70%43%50%
Qwen3-VL-235B-A22B15%74%28%47%
무조건 차41-1이라고 답하기always answer 차41-1luôn trả lời 차41-121% (11/53)———
단계마다 무작위random choice per stepchọn ngẫu nhiên ở mỗi bước0.4%———

🚨 가장 좋은 모델이 상수와 정확히 비긴다. 그리고 235B를 넣어도 올라가지 않는다 — 2단계(장면)는 올라가고 3·4단계(잎)는 내려간다. 실행 보고의 표현이 가장 정확하다: 「큰 모델은 장면을 더 자주 맞히고, 그래도 계열과 잎은 찍는다.」 실패의 모양도 한결같다 — 각 모델이 클립과 무관하게 한두 계열로 쏠린다(Cosmos는 53편 중 43편을 진로변경, 8B는 37편을 안전거리미확보 추돌, 235B는 34편을 안전거리미확보 추돌).

🚨 The best model exactly ties the constant. And the 235B does not help — step 2 (the scene) rises while steps 3 and 4 (the leaf) fall. The run's own sentence is the precise one: "bigger models get the scene right more often and still guess the family and the leaf." The failure shape is constant too: each model collapses onto one or two families regardless of the clip — Cosmos answers 진로변경 on 43 of 53, the 8B answers 안전거리미확보 추돌 on 37, the 235B on 34.

🚨 Mô hình tốt nhất chỉ ngang hằng số cơ sở. 235B cũng không giúp — bước 2 (bối cảnh) tăng, bước 3 và 4 (nút lá) giảm. Câu của báo cáo rất chính xác: “mô hình lớn đọc bối cảnh đúng hơn nhưng vẫn đoán nhóm và nút lá.” Kiểu thất bại cũng như nhau: mỗi mô hình dồn về một, hai nhóm bất kể video — Cosmos trả chuyển hướng (진로변경) ở 43/53, 8B trả tông sau do thiếu khoảng cách (안전거리미확보 추돌) ở 37, 235B ở 34.

⚠️ 이 표를 인용할 때 반드시 함께 말할 두 가지two things that must be said whenever this table is quotedhai điều phải nêu mỗi khi trích bảng này

① 1·2단계는 이 말뭉치에서 단일 클래스다 — 53편이 전부 차대차 > 같은 방향 아래에 있다. 보고서가 스스로 적어 둔 주의이고, 단계별 정확도는 그만큼 과대평가다. visus의 정답셋(273편)에도 같은 성질이 있는지 인용 전에 확인할 것. ② 단계 정확도는 정답 접두사를 보여준 상태(teacher-forced)에서 잰 것이다.

① Steps 1 and 2 are single-class on this corpus — all 53 clips sit under 차대차 > 같은 방향. The report flags this itself, and it means the step accuracies overstate the walk. Check visus's own 273-clip gold set for the same property before quoting its step accuracies. ② The step figures are teacher-forced — the correct prefix was shown.

① Bước 1 và 2 chỉ có một lớp trên dữ liệu này — cả 53 video thuộc ô tô va chạm ô tô > cùng hướng (차대차 > 같은 방향). Báo cáo tự lưu ý: độ chính xác từng bước phóng đại khả năng duyệt cây. Phải kiểm tra tập chuẩn 273 video của visus có tính chất tương tự trước khi trích độ chính xác theo bước. ② Các điểm theo bước dùng teacher forcing — đã cho sẵn đường dẫn đúng trước đó.

⭐ 그런데 정확도 열보다 visus에 중요한 열이 따로 있다 — 기권이다. 같은 실행에서 「알 수 없다」고 말한 클립 수가 모델 간 14배 차이가 난다: Cosmos는 53편 중 3편, 두 Qwen은 약 42편. 그리고 Cosmos는 묻지도 않은 과실 판정을 보고서 15편에서 스스로 내린다. §0.0이 판단 불가를 답으로 취급하는 제품에서, 이 열은 정확도보다 먼저 보는 열이다.

⭐ But there is a column that matters more to visus than accuracy — abstention. In the same run the number of clips on which a model says something cannot be known varies by a factor of fourteen: Cosmos on 3 of 53, the two Qwens on about 42. Cosmos also issues an unasked fault verdict in 15 of its reports. In a product where §0.0 makes 판단 불가 an answer, this is the column to read first.

⭐ Có một cột quan trọng với visus hơn độ chính xác — không kết luận. Cùng lần chạy, số video mô hình nói không thể biết chênh nhau mười bốn lần: Cosmos 3/53, hai Qwen khoảng 42. Cosmos còn tự đưa phán quyết lỗi dù không được hỏi trong 15 báo cáo. Sản phẩm mà §0.0 coi không thể phán định (판단 불가) là câu trả lời thì phải đọc cột này trước.

⚠️ 작은 모델은 온도 0에서 반복 루프에 빠진다 — Cosmos 53편 중 13편, 8B 9편이 루프였고, 8B는 35편이 최대 토큰에서 잘렸다. 32B와 235B는 루프 0편이다.

⚠️ The small models loop at temperature 0 — 13 of 53 for Cosmos and 9 for the 8B, with 35 of the 8B's runs cut at max tokens. The 32B and 235B loop on none.

⚠️ Mô hình nhỏ lặp vô hạn ở temperature 0 — Cosmos 13/53, 8B 9; 35 lần chạy 8B bị cắt ở max tokens. 32B và 235B không lặp.

⭐ 반대쪽 끝 — 가장 좋은 모델에게 가장 어려운 두 문제를 면제해 줘도⭐ The other end — a frontier model with the two hardest problems removed⭐ Đầu bên kia — mô hình hàng đầu được bỏ hai bài toán khó nhất

2026-09-07에 vlm이 오라클 조건을 만들었다: 상대차와 접촉 시각을 정답으로 고정하고 나머지를 묻는다. 12편에서 헤딩 9/12 · 자차 동작 8/12 · 차로 2/11 · 상대차 동작 3/12. 같은 12편에 프론티어 모델(Gemini 3.1 Pro, 4 fps 상당, SoM, 0.42달러)을 붙이면 상대차 식별이 3/12 → 6/12로 오르고, 상대차 동작은 그대로 3/12다 — 진로변경은 보지만 좌·우를 두 편에서 반대로 말한다.

On 2026-09-07 vlm built an oracle condition: fix the counterpart and the contact time to their gold values, then ask the rest. Over 12 clips: heading 9/12 · ego manoeuvre 8/12 · lane 2/11 · counterpart manoeuvre 3/12. Put a frontier model on the same 12 (Gemini 3.1 Pro, ~4 fps, set-of-mark, $0.42) and counterpart identification rises 3/12 → 6/12 while counterpart manoeuvre stays at 3/12 — it sees the lane change and calls left for right on two of them.

Ngày 2026-09-07, vlm tạo điều kiện oracle: cố định xe đối phương và thời điểm tiếp xúc theo chuẩn rồi hỏi phần còn lại. Trên 12 video: hướng 9/12 · thao tác xe gắn camera 8/12 · làn 2/11 · thao tác xe đối phương 3/12. Dùng mô hình hàng đầu trên cùng 12 video (Gemini 3.1 Pro, ~4 fps, set-of-mark, $0.42), nhận diện xe đối phương tăng 3/12 → 6/12 nhưng thao tác vẫn 3/12 — thấy chuyển làn nhưng nói trái thay vì phải ở hai trường hợp.

⭐ 이 둘을 겹쳐 읽으면 경계가 보인다. 상대차 동작은 상대차를 못 찾아서도, 시각을 못 맞춰서도 아니다 — 두 가지를 다 면제해 줘도 3/12다. 더 좋은 판독 모델이 visus에 사 줄 수 있는 것은 식별이고, 「언제·어느 쪽으로」는 사 주지 못한다. 그것이 §2.2가 말하는 공백이 모델 교체로 닫히지 않는 이유다.

⭐ Read together, the two runs fix a boundary. The counterpart's manoeuvre is not downstream of finding the counterpart or of timing the contact — exempt both and it is still 3/12. What a better reader model buys visus is identification; it does not buy "when, and which way". That is why the gap in §2.2 does not close by changing models.

⭐ Hai lần chạy xác định một ranh giới. Đọc thao tác xe đối phương không đơn thuần phụ thuộc việc tìm đúng xe hay đúng thời điểm — cho sẵn cả hai vẫn chỉ 3/12. Mô hình phân tích tốt hơn giúp visus nhận diện, không giúp “khi nào, hướng nào”. Vì vậy khoảng trống ở §2.2 không khép lại bằng cách đổi mô hình.

⚠️ E-V-012 — 더 큰 카드는 돕고, 고치지는 못한다. 그리고 비용 순서를 뒤집는다E-V-012 — a bigger card helps, does not fix it, and inverts the cost orderingE-V-012 — GPU lớn hơn có ích nhưng không giải quyết, đảo thứ tự chi phí

방향 관계(direction relation)에서 8B 30% → 30B 41%(CI 33–50)로 오른다. 그런데 둘 다에 대한 상수 기준선이 72%다. 즉 한계는 카드가 아니라 프롬프트나 증거 쪽에 있다.

On the direction relation, the 8B's 30% rises to the 30B's 41% (CI 33–50) — against a constant baseline of 72% for both. So the ceiling is the prompt or the evidence, not the card.

Về quan hệ hướng, 30% của 8B tăng lên 41% của 30B (CI 33–50) — so với hằng số cơ sở 72% cho cả hai. Giới hạn nằm ở prompt hoặc bằng chứng, không phải GPU.

⭐ 그리고 비용에 대한 직관이 깨진다. 같은 30B 카드가 격자 표시(grid marks) 작업에서는 가장 빨랐다 — 클립당 큰 호출 한 번이기 때문이다. 그런데 이 작업에서는 약 2배 느리다 — 작은 호출 약 148회라 MoE 라우팅 오버헤드가 매번 붙는다. 기록된 문장이 결론이다 — 「어느 카드가 더 싼가에는 작업의 모양과 독립한 답이 없다.」 이 절의 건당 비용 표를 다른 작업 모양에 옮길 때 그대로 적용된다.

⭐ And the cost intuition breaks. The same 30B card was the fastest on grid marks, because that is one big call per clip. Here it is about 2× slower, because this is roughly 148 small calls and the MoE routing overhead lands on each one. The recorded sentence is the conclusion: "which card is cheaper has no answer independent of the shape of the work." That applies directly when the per-case cost table in this section is carried to a differently shaped workload.

⭐ Trực giác chi phí cũng sai. Cùng GPU 30B nhanh nhất khi đánh dấu lưới, vì mỗi video là một lệnh gọi lớn. Ở đây nó chậm hơn khoảng 2×, vì có khoảng 148 lệnh nhỏ, chi phí định tuyến MoE phát sinh mỗi lần. Kết luận đã ghi: “không thể nói GPU nào rẻ hơn nếu chưa biết hình dạng công việc.” Điều này áp dụng trực tiếp khi dùng bảng chi phí mỗi hồ sơ cho tải khác.

5.4⚠️ 이 숫자는 운영 빌드의 것이다 — 지금 stage는 다르다 · These are production's numbersĐây là số liệu production

✅ 코드✅ Mã nguồn EXPERIMENTS.md E-V-035 (2026-10-15)

위의 69.7%는 운영 중인 빌드(3.4.2)가 10-06에 낸 성적이다. 그 뒤 stage에 여러 수정이 들어갔고, 같은 300건에 다시 돌린 결과는 조금 낮다.

The headline is production's figure. The current stage build, re-run on the same 300, scores slightly lower.

Con số nổi bật thuộc production. Bản stage hiện tại chạy lại cùng 300 hồ sơ đạt thấp hơn một chút.

운영productionproduction (3.4.2)stage (v300_1015)
도표 일치 (top-1)chart top-1biểu đồ top-1209207 (−2)
기본 과실 일치base ratiotỷ lệ cơ sở219211 (−8)

−8의 내역: top-1 −2 · 맞는 도표에서 역할(role) −4 · 우연히 맞던 기본값 −2.

Where the −8 goes: top-1 −2 · role on the right chart −4 · defaults that had been right by accident −2.

−8 nằm ở đâu: top-1 −2 · vai trò trong biểu đồ đúng −4 · mặc định từng đúng tình cờ −2.

CV 작업이 깎은 것이 아니다 — 명시적으로 쟀다: bounce 0, 상대차 non-A 선택 5 이득 / 4 손실, 충돌 시점 후보가 바꾼 것은 두 건뿐.

It was not the CV work that cost those points — that was measured explicitly: bounces 0, choosing a non-A 상대차 gained 5 and lost 4, and the impact-time candidates changed only two cases.

Không phải thay đổi CV làm mất điểm — đã đo rõ: bounces 0, chọn xe đối phương không phải A thêm đúng 5, mất đúng 4; ứng viên thời điểm va chạm chỉ đổi hai hồ sơ.

⭐ 가장 값나가는 발견 · the most valuable finding⭐ phát hiện giá trị nhất

"Tree leaf ≠ verdict on 57 readings per arm; the tree is right 43 times, the verdict 2–3."

“Nút lá cây ≠ kết luận ở 57 lần phân tích mỗi phương án; cây đúng 43 lần, kết luận đúng 2–3.”

트리 워크가 도달한 leaf와 최종 판정이 57건에서 다르고, 트리가 맞은 것이 43건 · 판정이 맞은 것이 2~3건이다. 판정자가 트리가 이미 찾아낸 정답을 버리고 있다 — §아래 PRESENT_UNUSED와 같은 방향의 증거다.

The judge is discarding answers the tree already found. Same direction as PRESENT_UNUSED.

Bộ phán định đang bỏ câu trả lời cây đã tìm đúng. Cùng hướng với PRESENT_UNUSED.

형제 도표 교환 14건 중 9건은 사실이 다르다 — 충돌 전 이력, 한 차로 추종, 충돌 순간, 도로 폭. 나머지 5건은 순위 노이즈이고 전부 판단 불가인 분리 사실 위에 있다.

Of the 14 sibling-chart trades, 9 differ on a fact — history before the impact, following within one lane, the moment of contact, road width. The other 5 are ranking noise, and all of them sit on a separating fact that is 판단 불가.

Trong 14 lần đổi giữa biểu đồ cùng nhóm, 9 khác nhau ở một dữ kiện — lịch sử trước va chạm, đi sau cùng làn, thời điểm tiếp xúc, chiều rộng đường. 5 lần còn lại là nhiễu xếp hạng; tất cả nằm trên dữ kiện phân biệt đang không thể phán định (판단 불가).

사정사 비교는 공정하지 않다 · not like-for-likeso sánh giám định viên không cùng điều kiện

가/가(둘 다 오판)는 32 → 23으로 줄었다. 그러나 신규 빌드의 도표 30건은 아직 검토되지 않았고(운영은 0건), 손실 13건이 전부 미검토 도표로 간다 — 검토가 운영의 선택만 덮고 있어 비교가 신규 쪽에 불리하게 기울어 있다.

Both-adjusters-miss fell 32 → 23, but 30 of the new build's charts are unreviewed against none of production's, so the comparison is tilted against the new build.

Số cả hai cùng đánh giá sai giảm 32 → 23, nhưng 30 biểu đồ của bản mới chưa được rà soát, production không có trường hợp nào; so sánh bất lợi cho bản mới.

5.5도표별 준비도 · Per-chart readinessMức sẵn sàng theo biểu đồ

평가한 30개 도표, 도표마다 10건씩. 운영에 쓸 수 있는 수준 = 8건 이상 일치하고 두 사정사 모두 오답으로 본 사건이 없음.

Thirty charts evaluated, ten cases each. "Ready for operational use" = at least 8 of 10 match and no case that both adjusters judged wrong.

Đánh giá ba mươi biểu đồ, mỗi biểu đồ mười hồ sơ. “Sẵn sàng vận hành” = khớp ít nhất 8/10, không hồ sơ nào bị cả hai giám định viên đánh giá sai.

도표chartbiểu đồ내용whattình huống일치matchkhớp
차43-3좌우 동시 진로변경both cars changing lane at oncehai xe chuyển làn đồng thời10
차54-1회전교차로 회전 대 진입circulating in a roundabout vs entering itxe đang đi trong vòng xuyến và xe nhập vào10
차2-6비보호 좌회전 대 직진unprotected left turn vs straightrẽ trái không được ưu tiên và đi thẳng10
차52-1직진 대 문 열림straight vs a door openingđi thẳng và mở cửa xe10
차41-1후방 추돌tông từ phía sau10
차16-3대로 직진 대 소로 좌회전straight on the major road vs left turn from the minorđi thẳng trên đường chính và rẽ trái từ đường nhánh10
차43-1차로 감소(합류)a lane ending (merge)làn kết thúc (nhập làn)9
차12-1동일폭 직진 대 직진straight vs straight, equal widthđi thẳng và đi thẳng, bề rộng bằng nhau9
차51-1통로 주행 대 출차driving the aisle vs leaving a bayđi trong lối xe và rời ô đỗ9
차31-1중앙선 침범crossing the centre linecắt qua vạch giữa đường8
차11-1좌회전 차로 직진going straight from a left-turn laneđi thẳng từ làn rẽ trái8

집중 개선 5개5 needing focused work5 biểu đồ cần tập trung xử lý 차47-1 · 차43-5 · 차43-4 · 차5-1 · 차42-2 — 차47-1 · 차43-5 · 차43-4 · 차5-1 · 차42-2 —두 사정사 모두 오답 3건 이상both adjusters called 3+ a misscả hai giám định viên đánh giá từ 3 điểm trở lên là sai

이 30개 도표가 무엇인지 — 「11/30」을 제대로 읽는 법What those 30 charts are30 biểu đồ đó là gì

🗣 자료가 실제로 어떻게 도착했나how the data actually arriveddữ liệu thực sự đến như thế nào

실제로 도착한 자료는 도표 라벨이 붙은 블랙박스 영상뿐이고, 나머지는 끝내 오지 않았다. 영상은 데이터센터에서 직접 비식별 처리를 만들어 여러 차례 반려와 재제출을 거친 뒤 반출되었다. → 반출 시점은 ams-blackbox-export 버킷 생성일로 확인된다: 2026-09-11 13:55 UTC (2026-10-27, 계정 990959830794에서 조회).

The only data that arrived is the dashcam footage with chart labels; the rest never came. It was exported from the data centre after we built the de-identification ourselves and went through several rejections and resubmissions. → The export date is the creation date of the ams-blackbox-export bucket: 2026-09-11 13:55 UTC (read from account 990959830794 on 2026-10-27).

Dữ liệu duy nhất nhận được là video camera hành trình kèm nhãn biểu đồ; phần còn lại không đến. Dữ liệu được xuất từ trung tâm sau khi nhóm tự dựng khử định danh, trải qua vài lần từ chối và gửi lại. → Ngày xuất chính là ngày tạo bucket ams-blackbox-export: 2026-09-11 13:55 UTC (đọc từ tài khoản 990959830794 ngày 2026-10-27).

선별 깔때기(뒤에 보고서에서 삭제됨): 2,968 → 2,916 → 1,143 → 476 → 305.

⚠️ 약속되고 오지 않은 것đã hứa nhưng không đến — "KB never delivered the other data that they promised … that includes 과실분쟁결정사례 and 소송판례 데이터 which will help in chart interpretation and customer notice."“KB chưa bao giờ giao phần dữ liệu khác đã hứa … gồm dữ liệu quyết định tranh chấp lỗi và tiền lệ tố tụng, giúp diễn giải biểu đồ và viết thông báo khách hàng.” 그래서 결정문 2,460건은 Vì vậy 2,460 quyết địnhKB가 아니라 우리가 크롤링했다không phải KB mà do nhóm tự thu thập(knia-api).

Of three datasets promised, only the dashcam footage arrived — after going into KB's own datacentre, building the redaction, being rejected, and iterating. The 2,460 dispute rulings in the product were crawled by us, not supplied.

Trong ba bộ dữ liệu đã hứa, chỉ video camera hành trình đến — sau khi vào trung tâm dữ liệu KB, tự dựng khử thông tin, bị từ chối và lặp lại. 2,460 quyết định tranh chấp trong sản phẩm do chúng ta thu thập, không phải KB cung cấp.

KB 원본 약 6,000편
   → 개인정보 처리 후 약 2,900편        (절반쯤만 사용 가능)
   → 전부 KB가 고른 30개 도표 안에 들어간다
   → 도표마다 10편씩 사람이 확인해 선정  = 300편~6,000 clips from KB
   → ~2,900 after redaction            (only about half are usable)
   → all of them fall inside the 30 charts KB chose
   → 10 per chart, picked by eye       = 300 clips~6,000 video từ KB
   → ~2,900 sau khử định danh            (chỉ khoảng một nửa dùng được)
   → tất cả nằm trong 30 biểu đồ KB chọn
   → mỗi biểu đồ 10 video, chọn thủ công       = 300 video
30개는 표본이 아니다 · the 30 are not a sample30 biểu đồ không phải mẫu đại diện

KB가 의도적으로 고른 것이고, 기준은 실제 사고 커버리지다 — 🗣 구두 약 96%이고 뒷받침하는 문서는 없다. 그러므로 「평가한 30개 중 11개가 운영 가능」은 「108개 중 11개」가 아니라 「사고의 약 96%를 덮는 30개 중 11개」다.

KB chose them to cover roughly 96% of real accidents — stated verbally, with no document behind it. So "11 of 30 ready" means 11 of the charts that carry almost all the volume, not 11 of 108.

KB chọn chúng để bao phủ khoảng 96% tai nạn thật — chỉ nói miệng, không có tài liệu. Vì vậy “11/30 sẵn sàng” là 11 biểu đồ chiếm gần như toàn bộ lưu lượng, không phải 11/108.

선정 조건 (사람이 건건이 확인): 블랙박스 1인칭 시점 · 촬영 차량이 사고 당사자 · 전방 카메라 · 화면을 다시 찍지 않은 원본 · 충돌 순간이 영상 안에 있음.

Selection criteria, checked case by case by a person: dashcam first-person view · the recording vehicle is a party to the accident · forward camera · an original recording, not a re-filmed screen · the moment of impact is inside the clip.

Tiêu chí chọn, được kiểm tra từng hồ sơ bởi một người: góc nhìn camera hành trình · xe ghi hình là bên trong tai nạn · camera trước · bản ghi gốc, không quay lại màn hình · thời điểm va chạm nằm trong video.

⚠️ 그런데 그 300건도 깨끗하지 않다The 300 is not clean either300 hồ sơ cũng chưa sạch

✅ 코드✅ Mã nguồn kb_scope.py · kb_flip.py · ev025-scope-review.md

이 시스템이 전제하는 입력은 좁다 — 고객차 블랙박스 · 전방 카메라 · 사고가 화면 안에 있음. 그런데 KB가 내준 약 2,900편은 KB의 반출 기준(개인정보)을 통과한 것이지 우리의 분석 기준을 통과한 것이 아니다. 가장 큰 어긋남은 상대차가 찍은 영상이다.

The system assumes a narrow input. KB's ~2,900 passed KB's export criteria, not ours — and the biggest mismatch is footage shot by the other party.

Hệ thống giả định đầu vào hẹp. Khoảng 2,900 video của KB đạt tiêu chí xuất dữ liệu của KB, không phải tiêu chí của chúng ta — lệch lớn nhất là video do bên đối phương quay.

신호signaltín hiệu무엇을 보나what it looks atkiểm tra điều gì걸린 수flaggedđược đánh dấu
S1 보고báo cáo「자차 블랙박스 없음」 · 「대차 영상 등재」 · 「블박 off」"no dashcam on our car" · "the other party's footage is on file" · "dashcam was off"“xe chúng tôi không có camera hành trình” · “đã lưu video của bên kia” · “camera hành trình tắt”6
S2 역할vai trò우리 도표+역할이 고객차에게 KB의 반대편 비율을 준다our verdict gives the customer KB's other-side ratiokết luận trả cho khách hàng tỷ lệ phía đối phương của KB17
S3 후방phía sau카메라 방향 판정 · KB 노트 · 보고rear-camera signalstín hiệu camera sau1
S4 충돌va chạm판독기가 접촉을 못 찾음 · 「화면에 충돌 없음」no contact foundkhông tìm thấy tiếp xúc22

판정 기준: 「보고서의 자차 기동이, 화면에서는 상대차가 하고 있는 것」 — 보고가 「자차 후진」인데 화면에서는 상대차가 카메라차로 후진해 들어온다면, 그 영상은 상대차의 것이다.

The deciding test: the report's own-car manoeuvre is what the clip shows the other car doing.

Phép thử quyết định: thao tác xe của mình trong báo cáo chính là điều video cho thấy xe kia thực hiện.

결과: 23건이 범위 밖 (전부 Ian 확인) — 상대차 촬영분 21 + 길이 초과 1 + 보고와 영상이 아예 다른 1건(보고는 택시, 화면은 오토바이).

Result: 23 fell outside the range (all confirmed by Ian) — 21 filmed from the 상대차, 1 over length, and 1 where the report and the video are of different accidents entirely (the report says taxi, the screen shows a motorcycle).

Kết quả: 23 hồ sơ ngoài phạm vi (đều Ian xác nhận) — 21 quay từ xe đối phương, 1 quá dài, 1 nơi báo cáo và video nói về hai tai nạn khác nhau hoàn toàn (báo cáo nói taxi, màn hình cho thấy xe máy).

고친 방식이 중요하다 · the fix is the lessoncách sửa mới là bài học

kb_flip은 시스템이 아니라 입력의 시점을 돌렸다 — 사고개요의 자차 ↔ 대차, KB 기본 비율 100 − x, 도표는 그대로(같은 사고니까). 원본은 절대 수정하지 않는다. 그리고 일회성 빌더이지 파이프라인 단계가 아니다 — 실행 중에는 아무것도 뒤집히지 않는다.

It changed the input's point of view, not the system — so the assumption stayed sharp instead of being blurred to fit the data. A one-time builder, never a runtime step.

Nó thay đổi góc nhìn của đầu vào, không thay hệ thống — giữ giả định rõ ràng thay vì làm mờ để vừa dữ liệu. Một bước dựng chạy một lần, không phải bước runtime.

알려진 한계도 적혀 있다: 「대차」는 렌트 대차를 뜻하기도 한다. 그리고 수정과실 1–5는 뒤집지 않고 버린다 — KB의 한쪽 편 전용 조정이라서.

The known limits are written down too: 대차 can also mean a rental replacement car. And modified-fault levels 1–5 are discarded rather than inverted, because they are KB’s own one-sided adjustment.

Các giới hạn đã biết cũng được ghi: 대차 có thể nghĩa là xe thay thế cho thuê. Cấp điều chỉnh lỗi 1–5 bị loại thay vì đảo dấu, vì đó là điều chỉnh một phía của KB.

남는 불확실성 · what remains uncertainbất định còn lại

아직 발견되지 않은, 뒤집어야 할 사건이 남아 있을 수 있다. 그러므로 69.7%는 「방향이 전부 올바른 300건」에 대한 숫자가 아니다 — 알려진 23건은 처리했고, 모르는 것은 모른다.

Some cases that should be flipped may still be undetected. Known orientation errors are fixed; unknown ones are unquantified.

Một số hồ sơ đáng lẽ phải đảo vai có thể vẫn chưa phát hiện. Lỗi hướng đã biết được sửa; lỗi chưa biết chưa định lượng.

그리고 KB 자신의 플래그: contact_visible=0이 300건 중 86건 — 접촉 지점이 화면 밖이다. 충돌 순간을 읽어 판정하는 시스템에게 86/300은 작은 수가 아니다.

And KB’s own flag: contact_visible=0 on 86 of the 300 — the point of contact is off screen. For a system that decides by reading the moment of impact, 86 out of 300 is not a small number.

Cờ riêng của KB: contact_visible=0 ở 86/300 hồ sơ — điểm tiếp xúc ngoài màn hình. Với hệ thống quyết định bằng cách đọc khoảnh khắc va chạm, 86/300 không phải số nhỏ.

그래도 남는 주의 · the caveat that remainslưu ý vẫn còn

도표마다 10건씩 균등이지 KB 실제 접수 비중은 아니다 — 운영 정확도는 파일럿에서 실제 구성비로 다시 재야 한다. 그리고 나머지 약 2,600편은 아직 쓰지 않은 자료다.

Still ten per chart, not KB's real mix — and ~2,600 clips remain unused.

Vẫn là 10 hồ sơ mỗi biểu đồ, không phải cơ cấu thật của KB — ~2,600 video chưa dùng.

🚨 어떤 도표는 전방 카메라로 증거를 만들 수 없다 — 자료 수집 단계에서 도표별로 측정됐다some charts cannot be evidenced by a front camera at all — measured per chart at acquisition timemột số biểu đồ không thể có bằng chứng chỉ từ camera trước — đo theo từng biểu đồ lúc thu thập

2026-09-23, 시연용 클립을 도표마다 10편씩 모으는 작업에서 나온 숫자다. 후보를 사람이 한 편씩 검토해 통과시킨 비율이고, 왜 떨어지는지가 도표마다 다르다.

From 2026-09-23, while collecting ten demonstration clips per chart. These are pass rates from a human reviewing candidates one by one, and the reason for failure differs by chart.

Từ 2026-09-23, khi thu thập mười video demo cho mỗi biểu đồ. Đây là tỷ lệ đạt khi một người xem từng ứng viên, và lý do thất bại khác nhau theo biểu đồ.

도표chartbiểu đồ통과passesđạt무엇이 문제인가what goes wronglỗi ở đâu
차43-32 / 46🚨 양쪽이 진로를 바꾸며 스치는 사고라 접촉이 고객차 옆에서 일어난다 — 앞이 아니다. 기록의 예상: 후보 113편을 전부 봐도 10편에 못 미칠 것🚨 both cars change lanes and sideswipe, so the contact is beside the 고객차, not in front. The record's own expectation: it will not reach 10 even after all 113 candidates🚨 hai xe cùng chuyển làn và quẹt ngang, nên điểm tiếp xúc nằm bên cạnh xe khách hàng, không ở phía trước. Kỳ vọng ghi trong bản ghi: không đạt 10 ngay cả sau 113 ứng viên
차43-26 / 45전방 카메라가 볼 수 없는 긁힘(사고개요가 묘사하는 것이 대개 그것이다)a scrape the front camera cannot see — usually what the case text describesmột vết quệt mà camera trước không nhìn thấy — thường là tình huống văn bản hồ sơ mô tả
차47-27 / 45충격도 정지도 없이 가깝게 지나가는 장면a close pass with no jolt and no stopmột lần lướt sát, không giật, không dừng
차42-210 / 45고객차가 후진하는 사고 — 전방 카메라로는 보이지 않는다the 고객차 is reversing, which the front camera cannot showxe khách hàng đang lùi, camera trước không thể thấy
차43-411 / 45끼어들기인데 충격이 보이지 않는 장면cut-ins with no visible impactxe tạt đầu với va chạm không nhìn thấy

🚨 그리고 「통과」와 「접촉이 보인다」는 또 다르다. 차51-1은 통과 13편 중 접촉이 보이는 것은 1편이고(접촉이 보닛 선 아래나 화면 가장자리 밖에 있다), 차47-2는 7편 중 1편, 차43-4는 11편 중 3편이다. 가장 흔한 탈락 사유는 모든 도표에서 같다 — 충돌이 영상에 보이지 않는다. 그 다음이 화면을 다시 찍은 영상(모니터·휴대폰 녹화)으로, 도표마다 3~9편씩이다.

🚨 And "passed" is not "the contact is visible". 차51-1 has 13 passes with the contact visible on 1 (it sits under the bonnet line or just off the frame edge); 차47-2 is 1 of 7 and 차43-4 3 of 11. The most common failure is the same on every chart — no collision visible in the clip — followed by re-shot footage (a monitor or a phone recording a screen), 3 to 9 clips per chart.

🚨 “Đạt” không đồng nghĩa “nhìn thấy tiếp xúc”. 차51-1 có 13 lần đạt nhưng chỉ 1 lần thấy tiếp xúc (nằm dưới đường nắp ca-pô hoặc ngay ngoài mép khung); 차47-2 là 1/7, 차43-4 3/11. Lỗi thường gặp nhất ở mọi biểu đồ giống nhau — video không cho thấy va chạm — sau đó là video quay lại (màn hình hoặc điện thoại quay màn hình), 3 đến 9 video mỗi biểu đồ.

⭐ 이것이 도표별 준비도의 다른 쪽 면이다. 이 문서는 차43-3을 사정사 검토에서 10/10으로 적는다 — 그 말은 고를 수 있었던 그 두 편에 대해 시스템이 잘했다는 뜻이지, 그 도표의 사건을 영상으로 다룰 수 있다는 뜻이 아니다. 어떤 도표는 모델 문제가 아니라 관측 문제이고, 그것은 §7.3의 결론과 같은 방향을 가리킨다 — 후방 카메라나 사고 현장 사진, 또는 출동 기록이 있어야 메워진다.

⭐ This is the other face of per-chart readiness. This document records 차43-3 at 10/10 on adjuster review — which says the system did well on the two clips that could be found, not that cases under that chart can be handled from video. For some charts the problem is not the model but the observation, and it points the same way as §7.3: it closes with a rear camera, scene photographs, or the dispatch record — not with a better reader.

⭐ Đây là mặt còn lại của mức sẵn sàng theo biểu đồ. Tài liệu ghi 차43-3 đạt 10/10 khi giám định viên rà soát — nghĩa là hệ thống làm tốt trên hai video tìm được, không phải hồ sơ thuộc biểu đồ có thể xử lý từ video. Với một số biểu đồ, vấn đề không phải mô hình mà là quan sát; cùng hướng với §7.3: cần camera sau, ảnh hiện trường hoặc biên bản điều phối — không phải bộ phân tích tốt hơn.

5.6⚠️ 가장 불편한 숫자 — 69.7%는 영상만의 성적이 아니다 · The most uncomfortable numberCon số khó chịu nhất

🗣 이 분해는 KB 제안서에 들어가지 않았다this decomposition was not in the proposalphân rã này không có trong đề xuất

후임자가 제안서와 측정을 나란히 놓으면 반드시 발견할 차이이므로 적어 둔다. 2026-10-12에 제안서의 범위를 정하면서, 「초기 보고 없이 Opus 5.5가 26%로 내려간다」는 측정값은 제안서에 넣지 않기로 했다.

Recorded here because a successor placing the proposal next to the measurements will find the gap. When the proposal’s scope was set on 2026-10-12, the measured figure — Opus 5.5 falls to 26% without the initial report — was not included in it.

Ghi lại vì người tiếp quản đặt đề xuất cạnh số đo sẽ thấy khoảng trống. Khi chốt phạm vi đề xuất ngày 2026-10-12, con số đo được — Opus 5.5 giảm còn 26% khi bỏ báo cáo ban đầu — không được đưa vào.

빠뜨린 것이 아니라 범위를 정한 판단이다. 그러므로 후임자가 알아야 할 것은 두 가지다 — ① 69.7%는 영상만의 성적이 아니다(영상 + 사정사가 쓴 보고서) ② KB에 그 분해가 전달되지 않았다. 파일럿에서 영상 단독 성능이 화제가 되면 이 수치가 이미 측정되어 있다는 사실부터 꺼내야 한다.

This was a scoping decision, not an oversight. A successor needs both halves: the 69.7% is a video + adjuster-written-report number, and that decomposition was not given to KB. If video-only performance comes up in a pilot, the figure already exists.

Đây là quyết định phạm vi, không phải sơ suất. Người tiếp quản cần cả hai nửa: 69.7% là con số video + báo cáo do giám định viên viết, nhưng không cung cấp phân rã đó cho KB. Nếu thí điểm hỏi hiệu quả chỉ video, con số đã có.

🚨🚨 ⭐ 그리고 분해의 나머지 절반이 있다 — 텍스트만으로 64.0%⭐ and there is the other half of that decomposition — text alone scores 64.0%⭐ và còn nửa kia của phân rã — chỉ văn bản đạt 64.0%

위가 「영상만 주면 얼마나 떨어지나」라면, 이것은 「영상이 얼마나 보태나」다. 2026-10-06에 측정됐다 — 사고개요 + 출동개요만 주고 영상은 주지 않은 채 같은 300건을 돌린 결과:

If the above asks how far it falls with video alone, this asks what the video adds. Measured on 2026-10-06 — the same 300 cases, given only the intake and dispatch text, with no video at all:

Nếu phần trên hỏi video đơn lẻ giảm bao xa, phần này hỏi video đóng góp gì. Đo ngày 2026-10-06 — cùng 300 hồ sơ, chỉ đưa văn bản tiếp nhận và điều phối, hoàn toàn không có video:

수정 전before the fixtrước khi sửa보정 후correctedsau khi sửa
텍스트만 top-1text-only top-1top-1 chỉ văn bản190/300 (63.3%)192/300 (64.0%)
🚨 영상이 보태는 것(운영 209/300 대비)what video adds (against production’s 209/300)video đóng góp gì (so với production 209/300)+19 (6.4%p)🚨 +17 (5.7%p)
텍스트만 기권text-only stops to askchỉ văn bản dừng để hỏi2826

⚠️ 그리고 그 보정 자체가 한 번 더 아프다. 23건에서 상대차 시점의 보고서를 읽고 있던 이중 스왑 버그가 있었다. 고친 뒤 그 23건에서 — 텍스트만이 14건, 영상을 쓰는 운영이 12건 KB 도표와 일치했다. 기록의 설명은 「여기서는 카메라 차가 KB의 자기 차가 아니어서, 영상보다 텍스트가 상황을 더 잘 서술한다」이다.

⚠️ And the correction itself stings. On 23 clips a double-swap bug had the replay reading the report from the other car’s point of view. After the fix, on those 23 — text-only matched KB’s chart on 14, production with video on 12. The record’s own explanation: "here the camera car isn’t KB’s own car, so the text describes the situation better than the video does."

⚠️ Chính bản sửa cũng gây đau. Ở 23 video, lỗi đảo vai hai lần khiến lần chạy lại đọc báo cáo từ góc nhìn xe kia. Sau sửa, trên 23 hồ sơ đó — chỉ văn bản khớp biểu đồ KB 14 hồ sơ, production có video 12 hồ sơ. Giải thích của bản ghi: “ở đây xe quay không phải xe của KB, nên văn bản mô tả tình huống tốt hơn video.”

🚨 그리고 2026-10-07에 이 수치가 산출물에서 빠졌다. 기록은 이렇게 적는다 — 「텍스트만은 감춘다. 비교 슬라이드는 이제 모델 비교일 뿐이고 제목을 「판독 모델만 바꿔…」로 바꿨다. 보고서 5.5는 「공개 모델과의 비교」로 이름을 바꿨고, 192와 +17 수치는 전부 사라졌다」. 그 판단의 이유는 기록에 없다.

🚨 And on 2026-10-07 the figure was taken out of the deliverable. The record reads: "Text-only is hidden. The comparison slide is now just the models, renamed 「판독 모델만 바꿔…」. Report 5.5 is renamed 「공개 모델과의 비교」, and the 192 and +17 figures are gone everywhere." The reasoning behind that decision is not in the record.

🚨 Ngày 2026-10-07, con số bị rút khỏi sản phẩm bàn giao. Bản ghi: “Chỉ văn bản bị ẩn. Slide so sánh giờ chỉ còn mô hình, đổi tên thành ‘chỉ đổi mô hình phân tích…’. Báo cáo 5.5 đổi thành ‘so sánh với mô hình mở’, và hai con số 192 và +17 biến mất ở mọi nơi.” Lý do quyết định không có trong bản ghi.

⭐ 후임자가 이것을 알아야 하는 이유는 비난이 아니라 계획이다. 영상 파이프라인 전체의 측정된 기여가 +17건이다 — CV 체인, 판독 모델, 프레임 샘플링, 상대차 선택, 충돌 시점이 다 합쳐서. 어디에 노력을 쓸지 정하려면 이 분모를 알아야 하고, KB는 이미 텍스트 기반 추천을 돌리고 있다. 다음에 「영상이 정말 값을 하는가」가 나오면 — 그 수치는 이미 측정되어 있고, 두 번 측정됐다.

⭐ A successor needs this for planning, not for blame. The entire video pipeline’s measured contribution is +17 cases — the CV chain, the reading model, the frame sampling, the counterpart pick and the impact moment, all of it together. Deciding where effort goes requires that denominator, and KB already runs a text-driven recommender of their own. When "is the video actually earning its place" comes up — the figure exists, and it has been measured twice.

⭐ Người tiếp quản cần số này để lập kế hoạch, không phải đổ lỗi. Đóng góp đo được của toàn bộ chuỗi video là +17 hồ sơ — chuỗi CV, mô hình phân tích, lấy mẫu khung hình, chọn xe đối phương và thời điểm tiếp xúc, tất cả cùng đóng góp. Muốn phân bổ công sức phải biết mẫu số; KB đã có bộ gợi ý dựa trên văn bản. Khi hỏi “video có thực sự đáng dùng không” — đã có con số, và đã đo hai lần.

✅ 코드✅ Mã nguồn docs/results/kb_open_20261006/

같은 모델(Opus 5.5), 같은 300건, 같은 파이프라인. 바꾼 것은 「초기 보고」(사고개요·출동개요)를 넣느냐 빼느냐 하나뿐이다.

Same model, same 300 cases, same pipeline. The only change: whether the adjuster's dispatch text is present.

Cùng mô hình, cùng 300 hồ sơ, cùng quy trình. Thay đổi duy nhất: có hay không văn bản điều phối của giám định viên.

도표 일치chart matchkhớp biểu đồ기본 과실base faultlỗi cơ sở멈춤stoppeddừng lại건당per casemỗi hồ sơ
보고 있음 (운영 구성)With reportCó báo cáo69.7%
209/300
73.0%0$0.445
보고 없음 — 영상만Video onlyChỉ video26.3%
79/300
32.3%86$0.423

43포인트. 조사자가 타이핑한 텍스트를 빼면 성적의 3분의 2가 사라지고, 300건 중 86건은 아예 판정에 도달하지 못한다. 모델도 비용도 거의 같다 — 사라진 것은 정보다.

Remove the adjuster's typed text and two-thirds of the score goes with it, and 86 of 300 never reach a verdict at all.

Xóa văn bản do giám định viên gõ khiến mất hai phần ba điểm số, và 86/300 hồ sơ hoàn toàn không đi đến kết luận.

그런데 왜인가 — 「안 보여서」가 아니다And the reason is not invisibilityVà lý do không phải vì không nhìn thấy

보고 없이 틀린 221건을 원인별로 분류하고, 각 건마다 「그 결정적 사실이 영상에서 보일 만한 것이었나(visible_likely)」를 함께 기록했다.

The 221 that were wrong without the report were classified by cause, and for each one it was also recorded whether that decisive fact was the sort of thing the video could have shown (visible_likely).

221 hồ sơ sai khi thiếu báo cáo được phân loại theo nguyên nhân; với mỗi hồ sơ còn ghi liệu dữ kiện quyết định có phải loại video đáng lẽ nhìn thấy được không (visible_likely).

이 칸이 무엇인지 먼저 · what that field isTrước hết, trường này nghĩa là gì

visible_likely는 분석 과정에서 내린 판단이지, 사람이 영상을 다시 보고 독립적으로 확인한 값이 아니다. 「읽을 수 있었어야 한다」는 평가이고, 오류를 낸 것과 같은 종류의 과정이 매겼다. 방향 신호로 읽을 것, 측정치로 인용하지 말 것.

It is a judgement made during the analysis — not an independent human re-check against the video, and made by the same kind of process that produced the errors. Read it as a direction, not a measurement.

Đó là phán đoán trong lúc phân tích — không phải người độc lập xem lại video, và do cùng kiểu quy trình tạo ra lỗi. Hãy coi là hướng chỉ báo, không phải phép đo.

원인 · causenguyên nhân건수countsố lượng그중 보였을 것of which visibletrong đó nhìn thấy được
WRONG — 보이는 것을 잘못 읽음misread what was theređọc sai thứ đang có7872
OPEN — 판단 불가로 멈춤stopped at 판단 불가dừng ở không thể phán định7765
LABEL_DOUBT — KB 라벨이 의심스러움KB's own label doubtfulnhãn của chính KB đáng nghi3427
PRESENT_UNUSED — 판독자가 말했는데 판정자가 안 씀stated, but the judge did not use itđã phát biểu nhưng bộ phán định không dùng1818
NOT_STATED — 판독자가 아예 말하지 않음never statedchưa từng phát biểu1412
합계totaltổng221194 (88%)
221건 중 「못 볼 것」으로 분류된 것은 단 1건of 221, exactly one was classed as "could not have been seen"trong 221 trường hợp, đúng một được xếp “không thể nhìn thấy”

분석 자신의 판단으로는, 영상만의 실패 중 88%가 「읽을 수 있었어야 하는」 사실에서 났다. 독립 검증은 아니다 — 그러나 실패가 「카메라가 못 본다」에 몰려 있다는 증거는 어디에도 없다. 그 방향으로는 충분히 강하다.

In the analysis's own judgement, 88% were on facts that should have been readable. Not independently verified — but nothing suggests the failures are dominated by an unseeing camera.

Theo phán đoán của chính quá trình phân tích, 88% là dữ kiện đáng lẽ đọc được. Chưa xác minh độc lập — nhưng chưa có dấu hiệu lỗi chủ yếu vì camera không thấy.

  1. ①(증거 누락)의 문제가 아니다. 주로 ②(오독)와 판독자가 멈춰 버리는 것(OPEN 77)이다Not a missing-evidence problem — mostly misreading and stoppingKhông chủ yếu thiếu bằng chứng — phần lớn đọc sai hoặc dừng
  2. PRESENT_UNUSED 18건은 전부 보였고 전부 진술되었는데 판정자가 쓰지 않았다 — 지각이 아니라 판정 쪽 결함all 18 were visible and stated — a judge defect, not a perception limitcả 18 đều nhìn thấy và đã được phát biểu — lỗi phán định, không phải giới hạn nhận thức
  3. OPEN 77 상당수는 §3.3의 문제 — 보이는데도 우리가 준 어휘로 말할 수 없어 판단 불가로 떨어진다much of OPEN 77 is the §3.3 problem — the fact is visible on screen, but cannot be said in the vocabulary we gave, so it falls through to 판단 불가phần lớn OPEN 77 là vấn đề §3.3 — dữ kiện hiện trên màn hình nhưng không diễn đạt được bằng bộ từ vựng đã cấp, nên rơi vào không thể phán định

지금의 성적은 영상이 텍스트를 대체한 결과가 아니라, 영상이 텍스트에 더해진 결과다. 더해진 몫은 실제로 있다 — 사례 1에서 판독기는 사고개요가 틀렸다는 것을 영상으로 반박했다. 그러나 영상 단독으로 서는 수준은 아직 아니다.

The present score is video added to text, not video replacing it. The added value is real, but video does not yet stand alone.

Điểm hiện tại là video bổ sung văn bản, không phải thay thế văn bản. Giá trị bổ sung có thật, nhưng video chưa đứng độc lập.

그리고 VLM이 좋아지면 저절로 풀리는 문제가 아니다 — 실패의 88%가 이미 보이는 사실에 대한 것이고, 상당수가 harness와 표상의 문제다.

And it is not a problem that a better VLM solves by itself — 88% of the failures concern a fact that is already visible, and a good share of them are harness and representation problems.

VLM tốt hơn không tự giải quyết được — 88% thất bại liên quan dữ kiện đã nhìn thấy, phần đáng kể do bộ điều phối và cách biểu diễn.

⭐ 판독 160건을 턴 단위로 읽은 결과 — E-V-028⭐ Reading 160 readings turn by turn — E-V-028⭐ Đọc từng lượt của 160 lần phân tích — E-V-028

점수가 아니라 「무엇을 어떻게 틀렸나」를 본 유일한 분석이다. 초기 보고를 넣었을 때와 뺐을 때, 모델이 결정적 사실을 맞힌 비율:

This is the only analysis that looked at what was got wrong and how rather than at a score. The rate at which each model got the decisive fact right, with the initial report supplied and withheld:

Đây là phân tích duy nhất xem sai gì, sai thế nào thay vì chỉ nhìn điểm. Tỷ lệ mỗi mô hình đọc đúng dữ kiện quyết định, có và không có báo cáo ban đầu:

판독 모델readerbộ phân tích보고 있을 때with the reportcó báo cáo보고 없을 때withoutkhông có
GPT-6 Astra82%46%
GPT-6.1 Sol79%50%
Claude Opus 5.579%50%
Kimi K361%46%
Gemini 3.1 Pro46%25%
Gemma 4 31B57%18%
운영 구성productionproduction86%—

모든 모델이 거의 절반으로 떨어진다. 그리고 실패의 분해: 판독 오류 75 · 판정 오류 4 · 판단 불가 갈림길에서 형제 기본값 14 · 올바르게 질문함 7.

Every model falls by nearly half. And the decomposition of the failures: reading errors 75 · judging errors 4 · a sibling default taken at a 판단 불가 fork 14 · correctly asked a question 7.

Mọi mô hình giảm gần một nửa. Phân rã lỗi: lỗi đọc 75 · lỗi phán định 4 · chọn nút cùng nhóm mặc định ở chỗ rẽ không thể phán định 14 · hỏi đúng một câu 7.

🚨 그리고 이 실험이 찾아낸 가장 중요한 세 가지:

🚨 Ba phát hiện quan trọng nhất từ thí nghiệm:

① 가장 큰 판독 실패는 충돌 순간이다 — 프런티어 모델이 틀린 사실의 약 40%. 그리고 「계측이 그 잘못된 시점에 다시 앵커되어 「일치한다」고 말한다」 — 틀린 기준점이 틀린 계측을 확증으로 바꾼다.

① Lỗi đọc lớn nhất là thời điểm va chạm — khoảng 40% dữ kiện sai của mô hình hàng đầu. Và “phép đo được neo lại vào chính thời điểm sai rồi nói ‘khớp’” — mốc sai biến phép đo sai thành bằng chứng xác nhận.

② 모델에게 「계측과 맞습니까?」라고 묻는 것은 쓸모가 없다 — 「내용과 무관하게 70~100% 「맞다」고 답한다. 그 예/아니오 확인은 그렇게 물어서는 가치가 없다」. §4.4의 3단계 되돌림이 이것에 기대고 있다.

② Hỏi mô hình ‘có khớp phép đo không?’ là vô ích — “bất kể nội dung, 70–100% trả lời ‘khớp’. Xác nhận có/không theo cách hỏi đó không có giá trị”. Bước xét lại thứ 3 tại §4.4 dựa vào điều này.

③ 판독 뒤에 붙인 규칙들이 도움보다 해가 됐다 — 「post-rules(bind_ego_turn, roundabout_suspicion)가 도움보다 해가 됐다」, 그리고 「에고 바운스는 42건 중 0건을 고쳤다」.

🚨 The three findings that matter most: the impact moment is the largest reader failure at about 40% of frontier models' wrong facts, and the measurements then re-anchor to it and "agree". Asking a model whether it agrees with a measurement is worthless as asked — it says yes 70–100% of the time regardless of content. And the post-reading rules hurt more than they helped, with the ego bounce fixing 0 of 42.

🚨 Ba phát hiện quan trọng nhất: thời điểm va chạm là lỗi đọc lớn nhất, chiếm khoảng 40% dữ kiện sai của mô hình hàng đầu; phép đo sau đó neo lại vào mốc sai và ‘đồng ý’. Hỏi mô hình có khớp phép đo không vô ích theo cách hỏi hiện tại — bất kể nội dung, 70–100% nói có. Các quy tắc sau phân tích gây hại nhiều hơn giúp; bước xét lại xe gắn camera sửa được 0/42.

⚠️ 교란 하나가 기록되어 있다: Gemini에서 보고 사실 추출이 조용히 실패했다 — 10건 중 5건(비디오 포함 시 7건)에 r101… 행이 없었고 다른 모델은 전부 10/10이었다. Gemini의 점수는 과소평가된 것이고, 추출기를 고친 뒤 다시 재야 한다.

⚠️ One confound is recorded: report-fact extraction failed silently for Gemini on 5 of 10 cases (7 of 10 with video) while every other model was 10/10 — so Gemini's score is understated and needs a re-run after the extractor is fixed.

⚠️ Có yếu tố gây nhiễu: trích xuất dữ kiện báo cáo âm thầm thất bại với Gemini ở 5/10 hồ sơ (7/10 khi có video), mô hình khác đều 10/10 — điểm Gemini bị thấp đi, cần chạy lại sau sửa bộ trích xuất.

🚨 ⭐ 게이트가 정확도를 올리는 게 아니다 — 섞임이 고른 부분집합을 고를 뿐이다⭐ a gate does not raise accuracy — it selects a subset with a more even class mix⭐ cổng lọc không tăng độ chính xác — nó chọn tập con có cơ cấu lớp cân bằng hơn

이 문서에는 「게이트를 통과한 것만 보면 X%」꼴의 수치가 여러 개 있다. 그 수치들이 왜 올라가는지가 한 번 숫자로 설명되어 있다(E-E-016):

The document carries several figures of the form "X% among those that pass the gate". Why those figures rise is explained once, with numbers (E-E-016):

Tài liệu có nhiều con số dạng ‘X% trong số qua cổng’. Lý do tăng được giải thích một lần bằng số (E-E-016):

"Gating on the tier doesn’t make the relation more readable — it selects a subset whose class mix is more even (constant 56.9% → 54.8%) while the rule stays where it was."

“Lọc theo cấp độ không làm quan hệ dễ đọc hơn — nó chọn tập con có cơ cấu lớp cân bằng hơn (hằng số 56.9% → 54.8%), trong khi quy tắc vẫn ở mức cũ.”

「등급으로 게이트를 걸어도 관계가 더 잘 읽히게 되는 것이 아니다 — 계급 분포가 더 고른 부분집합이 선택될 뿐이고(상수 기준선 56.9% → 54.8%) 규칙 자체는 제자리다.」

⭐ 그래서 게이트가 붙은 수치는 전부 상수 기준선과 함께 읽어야 한다 — 기준선이 같이 내려갔다면 오른 것은 성능이 아니라 문제의 난이도다. 이 문서에 있는 것들:

⭐ So every gated figure has to be read next to its constant baseline — if the baseline fell too, what improved is the difficulty of the subset, not the method. The ones in this document:

⭐ Mọi con số sau lọc phải đọc cạnh hằng số cơ sở của nó — nếu cơ sở cũng giảm, tập con dễ hơn chứ phương pháp chưa tốt hơn. Các trường hợp trong tài liệu:

상대차 선택counterpart pickchọn xe đối phương답한 80.7% 중 62.5% — 분모가 두 겹이다62.5% of the 80.7% it answers — the denominator is two deep62.5% trong 80.7% được trả lời — mẫu số có hai lớp
자차 회전ego turnhướng rẽ xe gắn camera게이트 통과 시 80.0%, 그런데 「항상 직진」 상수가 68.6% — 게다가 그 구간을 dev에서 골랐다. ⭐ 그 뒤 보류셋에서 재현됐다 — 아래를 볼 것80.0% at gate pass against an always-straight constant of 68.6% — and the band was chosen on dev. ⭐ It was then replicated held out — see below80.0% khi qua cổng, so với hằng số luôn-đi-thẳng 68.6% — dải ngưỡng được chọn trên dev. ⭐ Sau đó tái lập trên tập giữ riêng — xem dưới
장소placeđịa điểm49.8% 대 「항상 교차로」 75.2% — 상수보다 25점 아래49.8% against an always-junction constant of 75.2% — 25 points below the constant49.8% so với hằng số luôn-giao-lộ 75.2% — thấp hơn hằng số 25 điểm
🚨 KB 상대차 게이트the KB counterpart gatecổng chọn xe đối phương KB60건 중 26건(43%)만 통과 — 나머지 57%에는 수치가 없다passes on 26 of 60 (43%) — there is no figure at all for the other 57%qua ở 26/60 (43%) — hoàn toàn không có số liệu cho 57% còn lại

⭐⭐ 한계가 왜 거기인가 — 도표 하나가 사실 4~6개를 동시에 요구한다⭐⭐ Why the ceiling sits where it does — one chart needs four to six facts at once⭐⭐ Vì sao có trần đó — một biểu đồ cần đồng thời bốn đến sáu dữ kiện

2026-10-07, 영상만으로 왜 현장출동 보고서에 상당하는 것을 못 만드는가라는 질문에 대한 답이다. 산수는 짧다.

2026-10-07, answering the question why video alone cannot produce the equivalent of a dispatch report. The arithmetic is short.

2026-10-07, trả lời vì sao video đơn lẻ không tạo được thứ tương đương báo cáo điều phối. Phép tính rất ngắn.

「도표 하나는 사실 4~6개가 함께 결정한다 — 장소 종류, 신호, 도로 폭, 고객차의 기동, 상대차의 출처와 기동, 누가 먼저 갔는가. 우리 계측에서 판독기는 각각을 대략 55~85%로 맞힌다(충돌 시점 86%, 고객차 기동은 에이전트 안에서 55%·단독으로 물으면 73%, 회전은 좋고 차로 변경은 나쁘다). 곱하면 다섯 개가 각각 80%라도 0.8⁵ ≈ 33%다. 우리가 계속 부딪히는 한계가 거의 정확히 그것이다.」

"A chart is decided by about 4–6 facts together: place type, signal, road width, the camera car's manoeuvre, the other car's origin and manoeuvre, and who went first. From our measurements the reader gets each one right roughly 55–85% of the time (impact moment 86%; the camera car's manoeuvre 55% inside the agent and 73% when asked alone; turns are good, lane changes poor). Multiplied together, even 80% on each of five facts gives 0.8⁵ ≈ 33%. That is almost exactly the ceiling we keep hitting."

“Một biểu đồ được quyết định bởi khoảng 4–6 dữ kiện cùng nhau: loại địa điểm, đèn tín hiệu, bề rộng đường, thao tác xe camera, nguồn xuất hiện và thao tác xe kia, ai đi trước. Phép đo cho thấy bộ phân tích đọc đúng mỗi dữ kiện khoảng 55–85% (thời điểm va chạm 86%; thao tác xe camera 55% trong agent, 73% khi hỏi riêng; rẽ tốt, chuyển làn kém). Nhân lại, ngay cả 80% cho từng dữ kiện trong năm dữ kiện cũng chỉ có 0.8⁵ ≈ 33%. Gần đúng trần liên tục gặp phải.”

🚨 그리고 자료가 그것을 직접 보여 준다 — 에이전트가 기동을 맞힌 경우에도 도표는 58%에서 여전히 틀렸다. 다른 사실 하나가 틀렸기 때문이다. 이것이 이 프로젝트의 「사실 하나를 고쳤는데 도표가 안 움직인다」는 결과 전부를 설명한다 — 그리고 계획 규칙이 된다: 단일 사실 도구는 top-1을 움직이지 못한다. 출동 보고서의 사실이 100%에 가까운 이유도 같은 문장에 있다 — 「그들은 현장에 있었고, 양쪽 운전자와 이야기했고, 도로를 봤다.」

🚨 And the data shows it directly: when the agent got the manoeuvre right, the chart was still wrong 58% of the time, because a different fact was wrong. This explains every "we fixed one fact and the chart did not move" result in the project, and it becomes a planning rule: single-fact instruments cannot move top-1. The same message says why the dispatch report's facts are close to 100%: "they were at the scene, spoke to both drivers, and saw the road."

🚨 Dữ liệu chỉ ra trực tiếp: khi agent đọc đúng thao tác lái, biểu đồ vẫn sai 58%, vì dữ kiện khác sai. Điều này giải thích mọi kết quả ‘sửa một dữ kiện nhưng biểu đồ không đổi’, trở thành quy tắc lập kế hoạch: công cụ một dữ kiện không thể đẩy top-1. Cùng tin nhắn giải thích vì sao dữ kiện báo cáo điều phối gần 100%: “họ ở hiện trường, nói chuyện với hai tài xế và thấy con đường.”

⚠️ 그리고 어떤 사실은 전방 카메라에 애초에 없다 — 차로가 끝나고 있었는지, 프레임 밖의 도로 폭, 교차 도로의 신호, 사각에서 오는 차와 누가 먼저 차로를 바꿨는지, 주차된 차의 문. 어떤 판독기도 전방 카메라만으로 이것을 복원하지 못한다. 이 문단은 이 절의 「영상이 더하는 것은 약 6포인트」와 같은 사실의 설명이다 — 하나는 측정이고, 이것은 그 측정의 이유다.

⚠️ And some facts are not in the front camera at all — whether the lane was ending, road width beyond the frame, the signal on the crossing road, who changed lanes first when the other car comes from the blind side, a parked car's door. No reader recovers these from the front camera alone. This paragraph is the explanation of this section's "video adds about six points": one is the measurement, this is why the measurement reads that way.

⚠️ Một số dữ kiện hoàn toàn không nằm trong camera trước — làn có kết thúc không, bề rộng đường ngoài khung, tín hiệu đường cắt ngang, ai chuyển làn trước khi xe kia đến từ điểm mù, cửa xe đang đỗ. Không bộ phân tích nào khôi phục được chỉ từ camera trước. Đây là lời giải thích cho ‘video thêm khoảng sáu điểm’: một bên là phép đo, đây là nguyên nhân của phép đo.

🚨 그리고 가장 많이 틀리는 사실 하나는 모델이 아니라 우리 계측이 틀린 것이다 — 헤딩 도구 진단🚨 And the single most-wrong fact is our instrument, not the model — the heading tool, diagnosed🚨 Dữ kiện sai nhiều nhất lại do công cụ của chúng ta, không phải mô hình — chẩn đoán công cụ hướng

같은 날, 고객차 자신의 동작을 판독기가 틀린 사건들에서 우리 헤딩 계측 · 판독기의 서술 · KB 보고서를 나란히 놓았다. 대부분에서 판독기는 우리 계측을 따랐고, 계측이 틀렸거나 침묵했다.

The same day, on the cases where the reader got the camera car's own movement wrong, the heading measurement, the reader's statement and KB's report were put side by side. In most of them the reader followed our measurement, and the measurement was wrong or silent.

Cùng ngày, trên hồ sơ bộ phân tích đọc sai chuyển động xe gắn camera, nhóm đặt phép đo hướng, phát biểu của bộ phân tích và báo cáo KB cạnh nhau. Phần lớn bộ phân tích làm theo phép đo; phép đo sai hoặc im lặng.

사건casehồ sơKB 보고서(사실)KB report (truth)báo cáo KB (chuẩn)우리 헤딩 계측our heading measurementphép đo hướng của chúng ta판독기가 쓴 것what the reader wrotebộ phân tích viết gì
65비보호 좌회전unprotected left turnrẽ trái không được ưu tiên−166°, 「유턴 또는 급선회」labelled "U-turn or sharp swerve"gán ‘quay đầu hoặc đánh lái gấp’유턴quay đầu
70신호 좌회전signalled left turnrẽ trái có tín hiệu−189°, 「유턴 또는 급선회」labelled "U-turn or sharp swerve"gán ‘quay đầu hoặc đánh lái gấp’유턴quay đầu
63비보호 좌회전unprotected left turnrẽ trái không được ưu tiên+12°, 직진+12°, đi thẳng직진đi thẳng
88좌회전 차로에서 직진straight from a left-turn laneđi thẳng từ làn rẽ trái+46°, 우회전+46°, rẽ phải우회전rẽ phải
47차로 변경 1→2lane change 1→2chuyển làn 1→2−12°, 기권(10~30° 구간)−12°, abstained (the 10–30° band)−12°, không kết luận (dải 10–30°)직진, 차로 변경 없음straight, no lane changeđi thẳng, không chuyển làn
84 · 85 · 86좌회전 차로에서 직진straight from a left-turn laneđi thẳng từ làn rẽ trái−33 / −45 / −30°, 기권−33 / −45 / −30°, abstained−33 / −45 / −30°, không kết luận정차 / 좌회전 / 좌회전stopped / left / leftdừng / trái / trái

세 가지 서로 다른 문제이고, 셋 다 우리 쪽이다.

Three distinct problems, all on our side.

Ba vấn đề riêng, đều phía chúng ta.

① 헤딩 도구가 회전을 과대평가한다① the heading tool overstates turns① công cụ hướng phóng đại góc rẽ좌회전이 −160°~−190°로 나와 유턴으로 표기된다. 충돌 지점의 회전만이 아니라 클립 안의 모든 회전을 더하기 때문이다(진입 곡선 + 회전 + 그 뒤 곡선). 🚨 그리고 판독기는 자기 눈보다 계측을 믿으라고 지시받으므로, 오류가 그대로 통과한다a left turn comes out at −160° to −190° and is labelled a U-turn, because it adds up every rotation in the clip — the approach curve, the turn, and the curve after — not the turn at the collision. 🚨 And the reader is told to trust the measurement over its own eyes, so the error goes straight throughrẽ trái thành −160° đến −190°, bị gán quay đầu vì cộng mọi góc xoay trong video — đường cong tiếp cận, lúc rẽ, đường cong sau đó — thay vì góc rẽ lúc va chạm. 🚨 Bộ phân tích được yêu cầu tin phép đo hơn mắt mình, nên lỗi đi thẳng qua
② 고객차 자신의 차로 변경을 재는 것이 아무것도 없다② nothing measures the camera car's own lane change② không có gì đo chuyển làn của xe gắn camera헤딩 도구는 설계상 10~30°에서 기권하는데 차로 변경이 정확히 그 구간이고, 차선을 가로지르는 횡방향 이동을 재는 도구는 없다. 그래서 차로 변경은 계측에 보이지 않고 판독기는 「변경 없음」으로 기본값을 쓴다. lense에는 차선 검출기가 있었고 연결되지 않았다the tool abstains by design between 10° and 30°, which is exactly where lane changes live, and nothing measures sideways movement across lane lines. So a lane change is invisible to the instruments and the reader defaults to "no lane change". lense had a lane-line detector that was never wired incông cụ chủ ý không kết luận trong dải 10° đến 30°, đúng nơi chuyển làn diễn ra; không có gì đo chuyển động ngang qua vạch. Vì vậy công cụ không thấy chuyển làn, bộ phân tích mặc định ‘không chuyển làn’. lense từng có bộ phát hiện vạch làn nhưng chưa kết nối
③ 「좌회전 차로에서 직진」이 좌회전으로 읽힌다③ "straight from a left-turn lane" is read as a left turn③ ‘đi thẳng từ làn rẽ trái’ bị đọc thành rẽ trái계측이 기권하면 판독기는 보이는 차로에서 동작을 추론한다. 합리적인 추측이지만 KB가 차11-x로 접수하는 노면표시 위반 사건에서 정확히 틀린다 — 이 문서가 §5.5에서 가장 어려운 도표로 꼽는 계열이다when the measurement abstains the reader infers the movement from the lane it can see. A reasonable guess that is wrong for exactly the road-marking cases KB files under 차11-x — the family this document lists among the hardest in §5.5khi phép đo không kết luận, bộ phân tích suy chuyển động từ làn nhìn thấy. Phỏng đoán hợp lý nhưng sai với đúng các tình huống vạch đường KB xếp dưới 차11-x — nhóm nằm trong danh sách khó nhất ở §5.5

⭐ 이 진단이 중요한 이유: 이 문서는 헤딩 도구의 결과(판독기가 고객차 기동을 얼마나 맞히는가)를 적지만, 왜 틀리는지는 여기 처음 적힌다. 세 가지 다 모델 교체로는 고쳐지지 않는다 — 둘은 도구의 산술이고 하나는 기권의 기본값이다. ⚠️ 인용 주의: 「84 / 85 / 86」은 비율이 아니라 한 행에 묶인 사건 번호 셋이다. 같은 메시지의 「상대차 경로 도구가 300건 중 274건에서 결과를 냈다」도 정확도가 아니라 호출 성공률이고, 저자 자신이 정확도는 확인하지 않았다고 적는다.

⭐ Why the diagnosis matters: this document records the heading tool's outcome; why it is wrong is written here for the first time. None of the three is fixed by changing models — two are the tool's arithmetic and one is the default taken when it abstains. ⚠️ Quoting care: "84 / 85 / 86" is not a ratio but three case ids sharing a row. And the same message's "the other-car path tool returned a result in 274 of 300 analyses" is a call-success rate, not an accuracy — the author states he had not checked the accuracy.

⭐ Vì sao chẩn đoán quan trọng: tài liệu ghi kết quả công cụ hướng; đây là lần đầu ghi vì sao sai. Đổi mô hình không sửa được cả ba — hai vấn đề là phép tính công cụ, một là mặc định khi nó im lặng. ⚠️ Thận trọng khi trích: ‘84 / 85 / 86’ không phải tỷ lệ mà là ba ID hồ sơ chung dòng. Cùng tin nhắn nói ‘công cụ đường đi xe kia trả kết quả ở 274/300 phân tích’ là tỷ lệ gọi thành công, không phải độ chính xác — tác giả nói chưa kiểm tra độ đúng.

5.7작은 표본의 방법론 — 방향을 읽되 크기를 믿지 않는다 · The small-sample methodPhương pháp mẫu nhỏ

원장을 처음 읽으면 표본이 작은 것에 놀라게 된다. 등장하는 n: 5 · 6 · 7 · 9 · 10(열 번) · 12 · 25 · 48. 300건 평가는 맨 마지막에 한 번 나온다. 이것은 허술함이 아니라 의도된 방법이다.

The ledger runs on small n — 5, 6, 7, 9, 10 (ten times), 12, 25, 48 — with the 300-case evaluation appearing only at the end. That is deliberate.

Sổ dùng n nhỏ — 5, 6, 7, 9, 10 (mười lần), 12, 25, 48 — đánh giá 300 hồ sơ chỉ đến cuối. Đây là lựa chọn có chủ ý.

어떻게 일했나How it workedCách làm
작은 표본의 정답은 Ian이 직접 확인한 경우가 많다 (소수)small samples, often hand-confirmedmẫu nhỏ, thường được người xác nhận
그 표본으로 작은 시험을 돌려 방향을 바꿀 만한지를 본다a small test, to see whether a change of direction is worth makingthử nhỏ để biết có đáng đổi hướng không
바꿀 만하면 코드에 넣고, 크기는 300건에서 잰다then the magnitude is measured on the 300sau đó đo mức ảnh hưởng trên 300 hồ sơ

"n = 10, one case = 10 points: the direction is consistent across all three arms, and the size of the gain is within noise. Decision: merged into stage, and it goes into the 300-case validation."E-V-030

“n = 10, một hồ sơ = 10 điểm: hướng thay đổi nhất quán ở cả ba phương án, mức tăng nằm trong nhiễu. Quyết định: gộp vào stage, đưa vào đánh giá 300 hồ sơ.”E-V-030

세 arm에서 방향이 일치하므로 채택하고, 이득의 크기는 노이즈 범위임을 같은 문장에서 인정한다.

"n = 10: one case is 10 points, so the score moves are within noise. The measured result is the input: the report facts are now the same, and present, for every reader."E-V-029

“n = 10: một hồ sơ là 10 điểm, nên thay đổi điểm nằm trong nhiễu. Kết quả đo được là đầu vào: dữ kiện báo cáo nay giống nhau và có mặt với mọi bộ phân tích.”E-V-029

점수가 아니라 입력 성질이 측정 결과다. n=10에서 실제로 측정 가능한 것을 측정했다.

읽기 규칙How to read themCách đọc
말 것do notkhông nênn=10의 「4/10 → 6/10」을 정확도로 인용하기 — 한 건이 10포인트다don't quote small-n moves as accuracykhông trích biến động n nhỏ thành độ chính xác
말 것do notkhông nên표본이 작다고 원장 전체를 무시하기 — 방향 신호로는 유효하다don't dismiss the ledger as underpowered — it is valid as a direction signalkhông bác sổ vì thiếu lực thống kê — vẫn có giá trị chỉ hướng
할 것to donên làm작은 n은 「이 방향이 맞나」에만 쓰고, 크기는 300건 런에서use small n for direction, the 300 for magnitudedùng n nhỏ cho hướng, 300 cho mức ảnh hưởng
할 것to donên làmarm을 여러 개 두고 방향의 일치를 보기run several arms and look for consistent directionchạy nhiều phương án, tìm hướng nhất quán
할 것to donên làmn이 작으면 점수 말고 다른 것이 측정 가능한지 보기ask what else is measurable at that nhỏi còn đo được gì khác với n đó

시간이 없을 때 이것이 옳은 방법이다. 매번 300건을 돌릴 비용도 시간도 없었고, 아무것도 재지 않고 바꾸는 것보다 열 건으로 방향을 보는 쪽이 낫다. 이 원장의 미덕은 그 숫자가 무엇을 말하고 무엇을 말하지 않는지를 같은 줄에 적어 둔 것이다.

Under time pressure this is the right method. The ledger's virtue is that it writes down, on the same line, what each number does and does not support.

Dưới áp lực thời gian, đây là phương pháp đúng. Điểm tốt của sổ là ghi cùng một dòng mỗi con số hỗ trợ và không hỗ trợ điều gì.

⚠️ 편차와 정확도는 반드시 따로 재라 — 조상이 남긴 반례Agreement is not accuracy — the counterexampleĐồng thuận không phải độ chính xác — phản ví dụ

ams-demo-0의 PROJECT_LOG.md(2026-07-27)에 남은, 이 계보에서 유일한 진짜 VLM 정확도 측정 (클립 하나, 3회 실행, 20클립 중 6개만 라벨됨):

The only real measurement of VLM accuracy anywhere in this lineage, left in ams-demo-0’s PROJECT_LOG.md (2026-07-27) — one clip, three runs, and only 6 of 20 clips labelled:

Phép đo độ chính xác VLM thực sự duy nhất trong toàn bộ dòng phát triển, lưu ở PROJECT_LOG.md của ams-demo-0 (2026-07-27) — một video, ba lần chạy, chỉ 6/20 video có nhãn:

편차(실행 간 일치)run-to-run agreementđồng thuận giữa các lần chạy60% (3/5)
정확도(라벨 대비)accuracy vs labelsđộ chính xác so với nhãn50% (2/4)
road_category일치 100% · 정답 0%100% agreement · 0% correct100% đồng thuận · 0% đúng

모델은 일관되게 틀렸다. 실행 간 일치만 보고 있었다면 road_category는 가장 믿을 만한 필드처럼 보였을 것이다. 그래서 두 수를 합치지 않는다. 같은 레포가 울타리도 쳐 두었다 — MIN_N = 20, 그 아래에서는 분수로만 쓰고 %를 쓰지 않는다.

The model was consistently wrong. On agreement alone it would have looked like the most reliable field on the screen.

Mô hình sai nhất quán. Nếu chỉ nhìn đồng thuận, trường đó trông đáng tin nhất trên màn hình.

「충분하다」의 기준은 네 번 바뀌었다What "good enough" meant, four timesBốn lần định nghĩa ‘đủ tốt’

숫자를 읽을 때 그때의 기준을 같이 읽어야 한다. 전부 🗣 세션 기록에만 있다.

Đọc con số phải đọc cùng tiêu chuẩn lúc đó. Tất cả chỉ có trong 🗣 bản ghi phiên làm việc.

2026-08-26PoC의 기준 — Tiêu chí PoC — "5 cases, 19 cases as something adjuster has to choose from is unacceptable… PoC's are there to report those numbers, but show possibility on the future it holds. “Đưa 5 hoặc 19 trường hợp cho giám định viên chọn là không chấp nhận được… PoC cần báo những con số ấy, nhưng cũng cho thấy tiềm năng tương lai. if we have just a few clips that works perfectly doesn't matter.Chỉ có vài clip hoạt động hoàn hảo cũng không sao. the audience just has to see that something works, and that something is not yet perfect, but will be given time and effort." Người xem cần thấy một thứ hoạt động được; hiện chưa hoàn hảo nhưng sẽ cải thiện khi có thời gian và công sức.”
2026-08-27한 샘플이면 된다 (hd-map) — Một mẫu là đủ (hd-map) — 필요한 것은 정밀도가 아니라 개념 증명이고, 잘 되는 표본 하나면 된다 — 그 표본에만 맞도록 파라미터를 고정해도 무방하다what was wanted was a proof of concept, not precision — one sample that works is enough, even with parameters fixed to fit that sample alonecần bằng chứng khái niệm, không phải độ chính xác — một mẫu hoạt động là đủ, dù cố định tham số chỉ để vừa mẫu đó
2026-10-0180%가 처음 등장한다 — 오답을 전수로 다시 보면 80%는 가능하다는 판단이었다. 그리고 같은 자리에 단서가 붙는다 — KB 라벨을 그대로 정답으로 보지 않는 것이 80%를 말할 수 있게 하는 논거이기도 하다는 점이다80% first appears — the judgement being that going through the misses one by one would reach it. A caveat is recorded in the same place: declining to treat KB’s label as ground truth is also what would support describing the number as 80%.80% xuất hiện lần đầu — nhận định là xem từng lỗi sẽ đạt. Cùng chỗ có lưu ý: không coi nhãn KB là chân lý cũng là điều cho phép mô tả con số thành 80%.
2026-10-07🚨 영상만의 기준 — Tiêu chí chỉ video — 영상 단독 40~50%면 받아들일 만하다고 보았다 — 영상 단독 성적이 낮으면 제품이 사실상 보고서만 읽는 쪽으로 기운다는 것이 그 이유다40–50% on video alone would be acceptable — the reasoning being that if video-only is low, the product leans into being a reader of the report40–50% khi chỉ video là chấp nhận được — nếu điểm video đơn lẻ thấp, sản phẩm nghiêng về đọc báo cáo

마지막 줄이 이 프로젝트에서 가장 날카로운 자기 평가다. 영상만으로는 26.3%였다(§5.6) — 스스로 정한 40~50% 바닥 아래다. 그 기준으로 읽으면 지금의 제품은 보고서 기반 LLM 판정기에 영상이 더해진 것이고, 그 반대가 아니다.

That last line is the sharpest self-assessment in the project. Video-only measured 26.3% — below the 40–50% floor set for it. By that standard the product today is a report-driven judge with video added, not the other way round.

Dòng cuối là tự đánh giá sắc nhất của dự án. Chỉ video đo được 26.3% — dưới ngưỡng 40–50% tự đặt. Theo chuẩn đó, sản phẩm hiện tại là bộ phán định dựa trên báo cáo có bổ sung video.

⭐ 자차 회전 게이트는 보류셋에서 재현됐다 — 그리고 사정사에게 필요한 숫자는 따로 있다the ego-turn gate did replicate held out — and the number an adjuster needs is a different onecổng hướng rẽ xe camera tái lập được trên tập giữ riêng — con số giám định viên cần lại khác

2026-09-15, 방법과 구간을 고정한 뒤 보류셋에서 다시 쟀다(라벨은 ams-1080 라벨러의 도표 역할, 단일 주석자).

On 2026-09-15 the method and the band were frozen and scored on a held-out set (labels are the ams-1080 labeller's chart role for the recording car, a single annotator).

Ngày 2026-09-15, phương pháp và dải ngưỡng được đóng băng, chấm trên tập giữ riêng (nhãn là vai trò xe ghi hình trong biểu đồ do người gán nhãn ams-1080 đặt, chỉ một người).

dev보류셋held outtập giữ riêng
게이트 통과율gate pass ratetỷ lệ qua cổng140/19060/90 = 66.7%
회전 분류(좌/직/우) | 게이트 통과turn class (left/straight/right) | gate passlớp hướng rẽ (trái/thẳng/phải) | qua cổng112/140 = 80.0%52/60 = 86.7% (CI 76–93)
같은 통과 클립에서 「항상 직진」always-straight on the same passing clipsluôn-đi-thẳng trên cùng video qua cổng68.6%73.3%
게이트 없이 3분류ungated, 3 classeskhông lọc, 3 lớp—56/90 = 62.2% — 자기 상수(73.3%)보다 아래56/90 = 62.2%, below its own constant of 73.3%56/90 = 62.2%, thấp hơn hằng số cơ sở 73.3%

🚨 그런데 86.7%의 대부분은 「직진」이라는 답이다. 사정사가 실제로 필요로 하는 것은 좌·우가 걸렸을 때의 정답률이고, 그것만 떼어 세면 보류셋 11/14 = 78.6%(CI 52–92), dev 27/39 = 69.2%(CI 54–81)다. 오답은 거의 전부 「회전이라고 했는데 라벨은 직진」이고 좌우가 바뀐 것은 dev에서 한 건뿐이다. n=14는 작으므로 반드시 신뢰구간과 함께 쓸 것 — 기록이 제안한 표현이 그대로 쓸 만하다: 「좌·우회전 판독: 보류 표본 14건 중 11건 일치(79%, 95% CI 52–92%, 단일 라벨러)」.

🚨 But most of that 86.7% is the answer "straight". What an adjuster needs is the rate when left or right is at stake, and taken alone that is 11/14 = 78.6% held out (CI 52–92) and 27/39 = 69.2% on dev (CI 54–81). Almost every miss is "said turn, label straight", with one left/right swap on dev. n=14 is small, so it must travel with its interval — the recorded phrasing is usable as it stands: "left/right turn reading: 11 of 14 held-out clips agree (79%, 95% CI 52–92, single annotator)."

🚨 Phần lớn 86.7% là câu trả lời ‘đi thẳng’. Giám định viên cần tỷ lệ khi phải phân biệt trái/phải; xét riêng là 11/14 = 78.6% trên tập giữ riêng (CI 52–92), 27/39 = 69.2% trên dev (CI 54–81). Gần mọi lỗi là ‘nói rẽ, nhãn đi thẳng’, có một lần đảo trái/phải trên dev. n=14 nhỏ, phải nêu cùng khoảng tin cậy — có thể dùng nguyên cách ghi: ‘đọc hướng rẽ trái/phải: khớp 11/14 video giữ riêng (79%, CI 95% 52–92, một người gán nhãn).’

⭐ 그리고 게이트가 왜 필요한지는 마지막 줄이 말한다 — 게이트 없는 3분류는 62.2%로, 자기 상수보다 11점 아래다. 이 절이 경고하는 「게이트는 관계를 더 읽기 쉽게 만드는 것이 아니라 부분집합을 고른다」와 모순되지 않는다 — 둘 다 참이다: 게이트는 쓸 수 있는 조각을 만들고, 그 조각의 성적을 그 조각의 상수와 비교해야 한다. 라벨 쪽 단서도 기록돼 있다 — 「눈으로 보면 「직진」 라벨 몇 개가 실제로는 보이는 회전이어서 참값은 아마 더 높겠지만, 그것은 측정되지 않았다.」

⭐ And the last row says why the gate exists: ungated three-class is 62.2%, eleven points below its own constant. This does not contradict this section's warning that a gate selects a subset rather than making the relation more readable — both are true: a gate carves out a usable slice, and that slice's score must be read against that slice's constant. The record also notes a label caveat: "by eye, several 'straight' labels were visible turns, so the true rate is probably higher — but that is not measured."

⭐ Dòng cuối giải thích vì sao có cổng: ba lớp không lọc đạt 62.2%, dưới hằng số của nó mười một điểm. Không mâu thuẫn với cảnh báo cổng chọn tập con chứ không làm quan hệ dễ đọc hơn — cả hai đúng: cổng tạo lát cắt dùng được, điểm lát cắt phải so với hằng số của chính nó. Bản ghi còn lưu ý nhãn: ‘nhìn bằng mắt, một số nhãn đi thẳng thực ra đang rẽ, tỷ lệ thật có lẽ cao hơn — nhưng chưa đo.’

5.8이 숫자들을 다시 세어 본 결과 · What reproduces, checkedĐã kiểm tra khả năng tái lập

✅ 직접 실행 · origin/stageran it directly · origin/stagechạy trực tiếp · origin/stage 커밋된 per-case CSV 11개를 전부 재계산했다. 전체는 §8.8Đã tính lại toàn bộ 11 CSV từng hồ sơ đã commit. Chi tiết ở §8.8

수치figurecon số상태statustrạng thái
26.3% · 중단 8626.3% · 86 reaching no verdict26.3% · 86 không có kết luận✅ 정확히 재현된다. 단일 통제 배치. 이 묶음에서 가장 깨끗한 수✅ Reproduces exactly. One controlled batch. The cleanest number in the set✅ Tái lập chính xác. Một lô có kiểm soát. Con số sạch nhất trong tập
E-V-001 ~17%✅ 재현 (8/48 = 16.7%). 단 AI Hub 골드셋의 수치다 — KB 300의 라벨 의심은 다른 수(23/286 ≈ 8%)✅ Reproduces (8/48 = 16.7%). But it is the AI Hub gold set — KB's 300 has its own label-doubt figure (23/286 ≈ 8%)✅ Tái lập được (8/48 = 16.7%). Nhưng đây là tập chuẩn AI Hub — 300 hồ sơ KB có số nhãn đáng nghi riêng (23/286 ≈ 8%)
69.7% / 73.0%⚠️ 209·219는 실재하지만 디스크에는 로그 한 줄로만 있다. 운영 arm의 per-case 내보내기가 없어 분해할 수 없다⚠️ 209 and 219 are real but exist on disk as a single log line. With no per-case export for the production arm they cannot be decomposed⚠️ 209 và 219 là thật nhưng trên đĩa chỉ có một dòng log. Không có xuất dữ liệu từng hồ sơ cho production nên không phân rã được
그 top-1의 정의what that top-1 actually meanstop-1 đó thực sự nghĩa là gì🚨 세 정의 중 가장 관대한 것 — 나무가 멈춰도 한 표를 받는다. 그리고 운영의 중단 건수는 출력조차 되지 않는다🚨 The most generous of three definitions — a stopped tree still gets a pick. And production's stop count is never even printed🚨 Định nghĩa rộng nhất trong ba định nghĩa — cây dừng vẫn được chọn. Số lần dừng production thậm chí không được in ra
76.7 → 83.3 / 86.7%⚠️ 출처는 최종 보고서이고 레포에서 재유도할 수 없다. ✅ 다만 E-V-035가 그 S3 버킷을 읽어 채점한다 — "new 239 vs prod 251"⚠️ The source is the final report and it cannot be re-derived from the repo. ✅ But E-V-035 does read that S3 bucket and score against it — "new 239 vs prod 251"⚠️ Nguồn là báo cáo cuối, không suy ra lại được từ kho mã. ✅ Nhưng E-V-035 đọc bucket S3 đó và chấm theo nó — ‘mới 239 so với prod 251’
실패의 88%88% of the failures88% trường hợp thất bại⚠️ 194/221로 재현되지만 보고 없는 arm의 실패다 — 운영의 91건이 아니다. visible_likely는 쓰는 코드가 없는 사후 판단⚠️ Reproduces as 194/221, but these are the no-report arm's failures, not production's 91. And visible_likely is a post-hoc judgement with no producing code⚠️ Tái lập là 194/221, nhưng đây là thất bại của phương án không có báo cáo, không phải 91 lỗi production. visible_likely là phán đoán sau thực nghiệm, không có mã tạo ra
접근 방향 53% → 87.8%approach side 53% → 87.8%phía tiếp cận 53% → 87.8%⚠️ lense의 E-V-001이고 정답은 박스 중심 프록시다. lense가 E-V-022에서 철회했고 E-B-008은 이 바인딩이 도표를 가르지 않는다고 적었다⚠️ This is lense's E-V-001, and the ground truth is a box-centre proxy. lense itself withdrew it in E-V-022, and E-B-008 found this binding never decides a chart⚠️ Đây là E-V-001 của lense, chuẩn là đại diện tâm hộp. Chính lense rút lại ở E-V-022; E-B-008 thấy ràng buộc này không bao giờ quyết định biểu đồ

🚨 가장 큰 맥락 둘. ① E-V-025는 아직 running이고, 헤드라인을 채점하는 그 300건 위에서 반복 튜닝으로 돌았다 — DECISIONS.md V-D12가 금지한 것. ② E-V-032가 76/300에서 멈췄으므로 69.7%는 stage의 모든 수정보다 앞선다. 그 뒤 실제로 300을 돌린 것은 E-V-035이고 결과는 top-1 207 · 비율 211 — 약간 내려갔으며 그 −8의 절반이 역할 문제다 (§8.7).

🚨 The two largest pieces of context. ① E-V-025 is still running, and it was run as a tuning loop on the very 300 cases that score the headline — which is what V-D12 in DECISIONS.md forbids. ② E-V-032 stopped at 76 of 300, so 69.7% predates every fix on stage. What did go on to run all 300 is E-V-035, and it comes out at top-1 207 · ratio 211 — slightly down, and half of that −8 is the role problem (§8.7).

🚨 Hai bối cảnh lớn nhất. ① E-V-025 vẫn running, chạy vòng tinh chỉnh ngay trên 300 hồ sơ tạo số liệu nổi bật — điều V-D12 trong DECISIONS.md cấm. ② E-V-032 dừng ở 76/300, nên 69.7% có trước mọi bản sửa trên stage. E-V-035 mới chạy đủ 300, cho top-1 207 · tỷ lệ 211 — giảm nhẹ; một nửa −8 là vấn đề vai trò (§8.7).

🚨🚨 ⭐ 잡음 수준이 하나 더 있다 — 같은 프롬프트를 다시 돌리는 것만으로 14점⭐ there is a second noise floor — 14 points from re-running the same prompt⭐ có sàn nhiễu thứ hai — 14 điểm chỉ vì chạy lại cùng prompt

이 문서는 라벨 잡음 바닥(~17%)은 적어 두었지만 모델 표집 잡음 바닥은 한 번도 적지 않았다. 2026-09-16 lense 작업에서 측정됐다:

The document records a label-noise floor (~17%) and has never recorded a model-sampling one. It was measured in the lense work of 2026-09-16:

Tài liệu ghi sàn nhiễu nhãn (~17%) nhưng chưa ghi sàn lấy mẫu mô hình. Đã đo trong công việc lense ngày 2026-09-16:

"Decisive. Byte-identical prompts swing a mean of 14 points per binding (max 25). The rewritten prompts swing 17.8 — but 13 bindings down and 10 up, symmetric. That is the shape of noise, not of a fix."

‘Rõ ràng. Prompt giống hệt từng byte dao động trung bình 14 điểm mỗi ràng buộc (tối đa 25). Prompt viết lại dao động 17.8 — nhưng 13 ràng buộc giảm, 10 tăng, đối xứng. Đó là hình dạng nhiễu, không phải bản sửa.’

「결정적이다. 바이트 단위로 같은 프롬프트가 결합마다 평균 14점(최대 25점) 흔들린다. 고쳐 쓴 프롬프트는 17.8점 흔들리는데 — 13개는 내려가고 10개는 올라간다. 대칭이다. 그건 개선의 모양이 아니라 잡음의 모양이다.」

🚨 그리고 5분 뒤에 그 결과가 자기 자신을 겨눈다:

🚨 And five minutes later the result turns on itself:

🚨 Năm phút sau, kết quả quay lại chất vấn chính nó:

"if the floor is 10 points, E-V-018’s 15-point gap — the finding that motivated this whole line — is only one floor wide."

‘nếu sàn là 10 điểm, khoảng cách 15 điểm của E-V-018 — phát hiện khởi động toàn bộ hướng này — chỉ rộng một sàn nhiễu.’

「바닥이 10점이라면, 이 작업 전체를 시작하게 만든 E-V-018의 15점 차이는 바닥 하나 너비밖에 안 된다.」

⭐ 왜 이것이 이 장 전체에 대한 읽기 지침인가: 원장의 결합별 수치는 대부분 n=1에서 나왔다. 바닥이 14점이면 한 번 돌린 두 설정의 10점 차이는 아무것도 말하지 않는다 — §5.6·§5.3의 비교를 읽을 때 차이가 잡음보다 큰지 먼저 물어야 한다. §9.5의 「측정했다가 검증했다는 뜻이 아니다」가 여기서는 「한 번 측정한 것은 측정한 것이 아니다」가 된다.

⭐ Why this is a reading instruction for the whole chapter: most per-binding figures in the ledger were produced at n=1. If the floor is 14 points, a 10-point difference between two single runs says nothing — so when reading the comparisons in §5.6 and §5.3, ask first whether the gap clears the floor. §9.5’s "measured is not validated" becomes, here, "measured once is not measured."

⭐ Vì sao đây là hướng dẫn đọc cả chương: đa số số liệu mỗi ràng buộc trong sổ được tạo ở n=1. Sàn 14 điểm nghĩa là chênh 10 điểm giữa hai lần chạy đơn lẻ chưa nói lên gì — khi đọc so sánh §5.6, §5.3, hỏi khoảng cách có vượt sàn không trước. ‘Đã đo chưa phải đã xác nhận’ của §9.5 thành ‘đo một lần chưa đủ gọi là đo.’

⚠️ 그리고 이것은 라벨 잡음과 별개로 쌓인다. 라벨 ~17%와 표집 14점은 서로 다른 원인이고, 둘 다 같은 수치 위에 얹혀 있다.

⚠️ And it stacks on top of the label noise. The ~17% label floor and the 14-point sampling floor have different causes, and both sit under the same figures.

⚠️ Nó còn chồng lên trên nhiễu nhãn. Sàn nhãn ~17% và sàn lấy mẫu 14 điểm có nguyên nhân khác nhau; cả hai cùng nằm dưới những con số này.

5.9이 숫자들을 어떻게 읽어야 하나 · How to read theseCách đọc các con số

  1. KB 도표는 정답이 아니라 KB의 관행이다. 일관된 관행은 따르고, 책과 갈리면 책을 따랐다.KB's chart is not ground truth — it is KB's practice. Consistent practice was followed; where it diverged from the book, the book won.Biểu đồ KB là thực tiễn KB, không phải chân lý. Thực tiễn nhất quán được tuân theo; khác sách thì ưu tiên sách.
  2. 라벨 잡음 수준은 ~17%. 불일치의 사람 재확인이 모든 정확도 숫자의 일부다 (V-D6).The label-noise floor is ~17%. A human re-check of every disagreement is part of every accuracy figure here (V-D6).Sàn nhiễu nhãn khoảng 17%. Người xem lại mọi bất đồng là thành phần của mọi con số độ chính xác ở đây (V-D6).
  3. KB 원본 클립은 성능 측정용이 아니다 — 데모 준비도용이다. 통제되지 않은 입력은 전이되지 않는 이유로 실패한다.KB's raw clips are not a performance set — they are a demo-readiness set. Uncontrolled input fails for reasons that do not transfer.Video gốc KB là tập kiểm tra sẵn sàng demo, không phải tập hiệu năng. Đầu vào không kiểm soát thất bại vì lý do không chuyển sang môi trường khác được.
  4. 운영 지표를 정확도 옆에 둔다 — 건당 초·비용·토큰·모델 호출 수·비정상 종료.Keep the operational numbers beside the accuracy: seconds per case, cost, tokens, model calls, abnormal finishes.Đặt số vận hành cạnh độ chính xác: giây mỗi hồ sơ, chi phí, token, số lệnh mô hình, kết thúc bất thường.
🚨 그리고 저장된 실행은 전부 n = 1이었다 — 한 번 뽑은 답이다and every stored run used n = 1 — a single drawmọi lần chạy lưu lại đều dùng n = 1 — một lần lấy mẫu

2026-09-16, E-V-018. 가장 불명확한 결속 30개를 dev 클립 20편에서 세 번씩 물었다. 600표 중 만장일치는 335표 — 56%다. 최악은 op_across_centre_at_impact로 20편 중 15편에서 갈린다.

2026-09-16, E-V-018. The 30 least clear bindings were asked three times over 20 dev clips. Only 335 of 600 votes are unanimous — 56%. The worst, op_across_centre_at_impact, splits on 15 of 20 clips.

2026-09-16, E-V-018. 30 ràng buộc kém rõ nhất được hỏi ba lần trên 20 video dev. Chỉ 335/600 phiếu hoàn toàn đồng thuận — 56%. Tệ nhất, op_across_centre_at_impact, bất đồng ở 15/20 video.

🚨 실험보다 멀리 가는 이유: 명료성 보고서가 표본 불일치를 not_measured_here로 분류해 둔 것은 저장된 모든 실행이 n=1이었기 때문이다. 그래서 이때가 처음 들여다본 것이다. 이 결속들에서 답이 answered로 오느냐 cannot_judge로 오느냐는 뽑기에 가깝고, 따라서 편향표·도표 일관성 수치·명료성 플래그가 각각 집중되지 않은 분포에서 한 번 뽑은 값이다.

🚨 Why it reaches further than the experiment: the clarity report filed sample disagreement under not_measured_here because every stored run used n=1 — so this was the first look. On these bindings, whether an answer comes back answered or cannot_judge is close to a draw, which makes the bias table, the chart-consistency figures and the clarity flags each one draw from a distribution that is often not concentrated.

🚨 Vì sao tác động vượt thí nghiệm: báo cáo độ rõ đặt bất đồng lấy mẫu dưới not_measured_here vì mọi lần chạy lưu dùng n=1 — đây là lần nhìn đầu tiên. Với những ràng buộc này, nhận answered hay cannot_judge gần như tung đồng xu; vì vậy bảng thiên lệch, chỉ số nhất quán biểu đồ và cờ độ rõ đều là một mẫu từ phân phối thường không tập trung.

⚠️ 저자 자신이 붙여 둔 단서를 함께 옮긴다: 「이 30개 결속은 가장 불명확했기 때문에 고른 것이다. 모든 결속에 대한 비율이 아니라, 이미 불안정을 의심하던 자리에서의 불안정률이다. 이것을 『렌즈가 자기 자신과 56% 일치한다』로 인용하면 틀린다.」 🚨 그리고 이 문서 안에 다른 56%가 있다 — §5.0의 「KB 접수분 중 이 시스템이 다룰 수 있는 전방 블랙박스 차대차 충돌이 약 56%」. 서로 아무 관계가 없는 두 숫자다.

⚠️ The author's own caveat travels with it: "these 30 bindings were chosen because they were the least clear. It is the instability rate where we already suspected instability, not the rate over all bindings. Anyone quoting it as 'Lense agrees with itself 56% of the time' would be wrong." 🚨 And there is a second 56% in this document — §5.0's share of KB intake that is a usable front-dashcam car-to-car collision. The two have nothing to do with each other.

⚠️ Phải nêu kèm lưu ý của tác giả: ‘chọn 30 ràng buộc này vì chúng kém rõ nhất. Đây là độ bất ổn ở nơi đã nghi ngờ bất ổn, không phải trên mọi ràng buộc. Trích thành “Lense tự đồng thuận 56%” là sai.’ 🚨 Còn một 56% khác trong tài liệu — §5.0, tỷ lệ hồ sơ KB dùng được: camera trước, ô tô va chạm ô tô. Hai số không liên quan.

⭐ 그날 내려진 결정: 인증 실행은 n=3으로 투표한다(약 3달러 → 9달러). 기록된 이유가 그대로 규칙이다 — 「한 번 뽑아서 인증된 사실은 사실이 아니다.」

⭐ The decision taken that day: certification runs vote at n=3 (about $3 → $9). The recorded reason is the rule itself: "a fact certified on one draw isn't a fact."

⭐ Quyết định hôm đó: lần chạy chứng nhận bỏ phiếu n=3 (khoảng $3 → $9). Lý do chính là quy tắc: ‘dữ kiện được chứng nhận từ một mẫu không phải dữ kiện.’

⭐⭐ 하루에 세 번 — 좋아 보이는 수치가 「실패할 수 없는 측정」에서 나왔다⭐⭐ Three times in one day — a good-looking number that came from a measurement that could not fail⭐⭐ Ba lần một ngày — con số đẹp từ phép đo không thể thất bại

2026-09-16 하루의 기록이고, 이 문서 전체에서 가장 옮길 만한 읽기 규칙이 여기서 나온다.

One day, 2026-09-16 — and the most transferable reading rule in this document comes out of it.

Một ngày, 2026-09-16 — từ đó có quy tắc đọc dễ áp dụng rộng nhất trong tài liệu.

좋아 보인 수치the good-looking numbercon số trông đẹp실제로 잰 것what it actually measuredthực ra đo gì
차로변경 검출 재현율 10/12lane-change recall of 10/12recall chuyển làn 10/12🚨 36편 비교셋 대신 dev 328편 전체에 돌리자 251/328 = 77%에 「변경했다」고 답한다 — 장면과 무관하게 같은 비율로(교차로 77% · 도로 75% · 회전교차로 81% · 주차장 71%). 주차장 클립의 71%에서 차로변경이 일어나지는 않는다. 라벨된 도표 대비 변별은 +9점(함의될 때 82%, 아닐 때 73%)뿐이다. 26편 중 19편이 양성인 집합에서 「봤다」를 77% 말하는 경로는 10/12를 구조적으로 얻는다 — 아무것도 볼 필요가 없었다🚨 run over all 328 dev clips instead of the 36-clip comparison set, it marks a lane change on 251 of 328 = 77%, at the same rate in every scene — junction 77%, road 75%, roundabout 81%, car park 71%. Lane changes do not happen on 71% of car-park clips. Discrimination against the labelled chart is +9 points (82% where implied, 73% where not). On a set that is 19 positives of 26, a route that says "seen" 77% of the time scores 10/12 by construction — it never had to see anything🚨 chạy toàn bộ 328 video dev thay vì tập so sánh 36 video, đánh dấu chuyển làn ở 251/328 = 77%, cùng tỷ lệ mọi bối cảnh — giao lộ 77%, đường 75%, vòng xuyến 81%, bãi xe 71%. Không thể 71% video bãi xe có chuyển làn. Khả năng phân biệt theo nhãn biểu đồ là +9 điểm (82% khi có ngụ ý, 73% khi không). Tập có 19 dương tính/26, cách luôn nói ‘thấy’ 77% tự đạt 10/12 — không cần nhìn thấy gì
고객차 차로변경 20/20고객차 lane change, 20/20chuyển làn xe khách hàng, 20/20⚠️ 경로는 어디서나 「변경 없음」이라 답했고, 라벨러도 그렇게 답했다. 같은 날 아침 저자 자신이 「기량이 아니다」라고 지목하며, 격자판의 18/20을 「더 낮은 점수이고 더 정직한 점수」라고 적었다⚠️ the route said "no change" everywhere and so did the labeller. That morning the same author had called it out — "never skill" — and described the grid version's 18/20 as "a worse score and a more honest one"⚠️ cách này nói ‘không đổi làn’ ở mọi nơi, người gán nhãn cũng vậy. Sáng đó chính tác giả đã cảnh báo — ‘không phải năng lực’ — gọi 18/20 của bản lưới là ‘điểm kém hơn, trung thực hơn’
91.3%로 사실 등급에 오른 결속a binding promoted to the 사실 tier on 91.3%một ràng buộc được nâng lên cấp dữ kiện (사실) ở 91.3%🚨 사람이 20편을 직접 라벨하자 13편에서 「좌/우 관계가 아니다」라고 답했다 — 상자 중심 대리지표는 그 답을 표현할 수조차 없다(항상 좌 아니면 우를 말한다). 사람과의 일치는 4/11 = 36%로, 사람의 상수 기준선 65% 아래다. 91.3%는 「이 결속에서 사람과 어긋나는 대리지표」와의 일치였다. beats_baseline·measured·confidence가 철회되어 사실 등급은 다시 비었고, 그것이 정직한 상태다🚨 when a person labelled 20 clips by hand, they answered "not a left/right relation at all" on 13 of them — and the box-centre proxy cannot even express that, since it only ever says left or right. Agreement with the person was 4/11 = 36%, below their own constant baseline of 65%. The 91.3% was agreement with a proxy that disagrees with the human on this very binding. beats_baseline, measured and confidence were withdrawn, so the 사실 tier is empty again — the honest state🚨 khi người gán tay 20 video, họ trả ‘không phải quan hệ trái/phải’ ở 13 — đại diện tâm hộp thậm chí không diễn đạt được điều đó, vì chỉ nói trái hoặc phải. Khớp người 4/11 = 36%, dưới hằng số cơ sở 65%. 91.3% là đồng thuận với đại diện vốn không khớp người ở chính ràng buộc này. Đã rút beats_baseline, measured, confidence, nên cấp dữ kiện (사실) lại trống — trạng thái trung thực

⭐⭐ 그 하루가 낳은 규칙 셋 — 그대로 쓸 수 있다.

⭐⭐ Three rules came out of that day, usable as they stand.

⭐⭐ Ba quy tắc rút ra ngày đó, có thể dùng ngay.

① 이 측정이 말할 수 없었던 것이 무엇인지 물으라① ask what this measurement could not have said① hỏi phép đo này không thể nói điều gì셋 다 그 질문 하나로 잡혔다. 「무엇을 맞혔나」보다 먼저 묻는다all three were caught by that one question — asked before "what did it get right?"cả ba bị phát hiện bằng câu hỏi đó — trước câu ‘nó đúng gì?’
② 검출기는 음성이 많은 집합에서 채점하라② score a detector on a negatives-heavy set② chấm bộ phát hiện trên tập nhiều âm tính원장에 규칙 줄로 올라갔다 — 모든 검출 결과는 재현율 옆에 전체 집합에서의 양성률을 함께 보고하고, 양성이 많은 집합의 재현율은 단독으로 인용하지 않는다. 양성이 많은 집합은 검출기와 「예 기계」를 구별할 수 없다it became a rule line in the ledger: every detection result reports the route's positive rate on the full set beside its recall, and a recall from a mostly-positive set is never quoted alone. A positives-heavy set cannot tell a detector from a yes-machinethành quy tắc trong sổ: mọi kết quả phát hiện báo tỷ lệ dương tính trên tập đầy đủ cạnh recall; không trích recall trên tập chủ yếu dương tính một mình. Tập nhiều dương tính không phân biệt được bộ phát hiện với máy luôn nói có
③ 철회는 제자리에서③ retract in place③ rút lại ngay tại chỗE-V-003의 권고는 원장 안에서 철회됐다 — 다른 곳에 정정문을 쓰는 것이 아니라. 그리고 붙기 전에 잡혔다 — 사례 화면에 붙이기 전에 전체 집합을 돌린다는 규칙 덕이다E-V-003's recommendation was withdrawn inside the ledger, not corrected somewhere else. And it was caught before it attached — because of the rule that the full set is run before a case-attached version moveskhuyến nghị E-V-003 được rút trong chính sổ, không sửa ở nơi khác. Phát hiện trước khi gắn vào hồ sơ — nhờ quy tắc chạy tập đầy đủ trước khi đưa bản gắn hồ sơ lên

⚠️ 그리고 저자가 스스로 적어 둔 것이 이 항목을 값지게 만든다 — 「이것은 내가 그날 아침 이름 붙인 바로 그 함정이고, 나는 그 뒤 반대 방향으로 그 안에 걸어 들어갔다.」 함정을 아는 것과 피하는 것은 다른 일이다는 것이 이 기록의 실제 교훈이다.

⚠️ And what makes the entry valuable is what the author wrote about himself: "this is the same trap I named this morning and then walked into, in the opposite direction." The real lesson in the record is that naming a trap and avoiding it are different acts.

⚠️ Giá trị nằm ở điều tác giả viết về mình: ‘đúng cái bẫy tôi chỉ ra sáng nay rồi bước vào, theo hướng ngược lại.’ Bài học thật là gọi tên bẫy và tránh bẫy là hai việc khác.

🚨 같은 날의 짝 — 일관성 96%와 정확도 31%가 같은 결속의 두 수치다its companion the same day — 96% consistency and 31% accuracy, on one bindingcùng ngày — 96% nhất quán, 31% chính xác trên một ràng buộc

방향 관계(direction relation)를 라벨과 대조한 결과다 — 74/239 = 31.0%(CI 25–37), 그리고 「항상 교차」 상수는 70.7%다. 상수보다 40점 아래다.

The direction relation scored against the labels: 74/239 = 31.0% (CI 25–37) against an always-교차 constant of 70.7% — forty points below a constant guess.

Quan hệ hướng chấm theo nhãn: 74/239 = 31.0% (CI 25–37), so với hằng số luôn-giao-cắt 70.7% — dưới đoán hằng số bốn mươi điểm.

방향directionhướng재현율recallrecall정밀도precisionprecision
같은 방향cùng hướng52/5752/159
교차giao cắt21/16921/23
마주 오는ngược chiều1/131/5

239편 중 159편에 「같은 방향」이라고 답한다 — 거의 상수다. 🚨 그런데 같은 결속의 「도표 일관성」 수치는 46/48 = 96%이고, 그 숫자가 커밋된 보고서 안에 들어 있다. 이유는 단순하다 — 일방향 일관성은 도표가 답을 강제하는 클립만 보므로 좋아 보일 수밖에 없다.

It answers 같은 방향 on 159 of 239 clips — a near-constant answer. 🚨 And the chart-consistency figure for the same binding is 46/48 = 96%, sitting inside a committed report. The reason is simple: one-sided consistency only looks at the clips where the chart forces the answer, so it can only ever look excellent.

Nó trả cùng hướng ở 159/239 video — gần như đáp án hằng số. 🚨 Chỉ số nhất quán biểu đồ cho cùng ràng buộc là 46/48 = 96%, nằm trong báo cáo đã commit. Lý do: nhất quán một phía chỉ xét video mà biểu đồ ép câu trả lời, nên chỉ có thể trông xuất sắc.

⭐ 이 문서가 다른 곳에 규칙으로 적은 「일방향 일관성은 정확도가 아니다」에 숫자가 붙는 자리다 — 96%와 31%가 같은 결속의 두 숫자다. 그리고 결과 하나가 더 따라온다: 이 결속에 기대고 있는 사고 유형 규칙의 75.5%는 라벨러의 사실에 대한 상한이고, 기계의 사실로는 오늘 돌릴 수 없다. ⭐ 같은 보고의 정직한 한 줄도 옮긴다 — 상대차 정지 여부는 「측정 불가」로 보고됐다: 데이터베이스에 해당 필드가 없고, 도표에서 유도하면 순환이 되기 때문이다.

⭐ This is where the rule recorded elsewhere — one-sided consistency is not accuracy — acquires its number: 96% and 31% are two figures for one binding. A consequence follows: the 75.5% accident-type rule standing on this binding is a ceiling on the labeller's facts, and cannot be run on machine facts today. ⭐ One more honest line from the same report travels with it: whether the other car was stopped was reported as "not measurable" — no such field exists in the database, and deriving it from the chart would be circular.

⭐ Quy tắc ở nơi khác — nhất quán một phía không phải độ chính xác — có con số ở đây: 96% và 31% là hai số của cùng một ràng buộc. Hệ quả: quy tắc loại tai nạn 75.5% dựa vào nó là trần trên dữ kiện người gán nhãn, hiện không chạy được trên dữ kiện máy. ⭐ Một dòng trung thực khác: xe kia có dừng không được báo ‘không đo được’ — không có trường như vậy trong DB, suy từ biểu đồ sẽ thành vòng lặp.

06운영 · Operations · Vận hành

가장 먼저 알아야 할 것 · read this firstĐiều cần biết trước tiên · đọc phần này trước

레포를 클론하면 master를 보게 되는데, 거기서 일이 일어나지 않는다.

Clone the repo and you land on master — which is not where the work is.

Clone kho mã sẽ đưa bạn vào master — nơi không chứa công việc hiện tại.

브랜치branchnhánh뜻meansý nghĩa
stage통합 브랜치. 여기가 현재다.The integration branch — this is the present.Nhánh tích hợp — đây là hiện tại. 모든 새 작업이 여기 들어오고 여기서 측정된다Mọi công việc mới vào đây và được đo ở đây
masterstage보다 176 커밋 뒤처져 있다 (10-06에 멈춤)176 commits behind stagechậm hơn 176 commit so với stage
prod/backend
prod/preview-web
KB가 보고 있는 것. 데모, 고정됨What KB is looking at. Frozen.Những gì KB đang xem. Đã đóng băng.
docs/cutover
platform/new-prod
진행 중 — stage보다 각각 6·9 커밋 앞(2026-10-19 기준)in flight — 6 and 9 commits ahead of stage as of 2026-10-19đang thực hiện — đi trước stage 6 và 9 commit tính đến 2026-10-19

원격 브랜치 36개 중 34개가 stage에 완전히 포함되어 있다(2026-10-19에 다시 셌다 — 이전 판은 measure/cv-uses 하나만 앞서 있다고 적었는데, 그 사이에 합류했고 다른 둘이 앞서 있다). 브랜치 그래프는 보기보다 단순하다 — stage가 진실이고 나머지는 그리로 합류한 주제 브랜치들이다.

🚨 그냥 클론하면 돌아가고 있는 코드를 받지 못한다a plain clone does not give you the running codeclone thường không đưa bạn tới mã đang chạy

origin/HEAD가 master를 가리키므로 gh repo clone은 master를 체크아웃한다. 그런데 master는 stage보다 176 커밋 뒤에 있고 — 마지막 커밋이 2026-10-06, stage는 2026-10-19다. 앞서 있는 것은 하나도 없다(순수하게 뒤처진 것이지 갈라진 것이 아니다). ⚠️ 그리고 이 문서의 코드 링크가 고정한 커밋은 stage에 있고 master에서는 보이지 않는다 — GitHub 링크는 SHA로 열리므로 그대로 열리지만, 로컬에서 master를 켜 둔 채로는 같은 경로를 찾지 못한다.

origin/HEAD points at master, so gh repo clone checks out master. But master is 176 commits behind stage — last commit 2026-10-06 against stage’s 2026-10-19 — and it is ahead by nothing (purely behind, not diverged). ⚠️ The commit this document pins its code links to lives on stage and is not reachable from master: the GitHub links open fine because they resolve by SHA, but with master checked out locally you will not find those paths.

origin/HEAD trỏ master, nên gh repo clone checkout master. Nhưng master chậm hơn 176 commit so với stage — commit cuối 2026-10-06 so với 2026-10-19 của stage — và không đi trước commit nào (chỉ chậm, không phân kỳ). ⚠️ Commit tài liệu ghim liên kết nằm trên stage, không truy cập được từ master: liên kết GitHub vẫn mở nhờ SHA, nhưng checkout master cục bộ sẽ không có các đường dẫn ấy.

⭐ 그래서 후임자의 첫 명령은 이것이다: git checkout stage.

⭐ So your first command is: git checkout stage.

⭐ Vì vậy lệnh đầu tiên là: git checkout stage.

34 of the 36 remote branches are fully contained in stage (recounted 2026-10-19 — an earlier version of this page said only measure/cv-uses was ahead; it has since merged and two others are now ahead). The branch graph is simpler than it looks: stage is the truth and the rest are topic branches that join it.

34/36 nhánh từ xa được chứa trọn trong stage (đếm lại 2026-10-19 — bản cũ nói chỉ measure/cv-uses đi trước; nhánh đó đã hợp nhất và hai nhánh khác nay đi trước). Đồ thị nhánh đơn giản hơn vẻ ngoài: stage là nguồn sự thật, các nhánh còn lại là nhánh tính năng nhập vào đó.

⚠️ 이 장을 읽기 전에 두 가지. ① prod은 지금도 KB에 서비스 중이다(§0.4) — 아래의 위험은 전부 살아 있다. ② 런북을 그대로 믿지 말 것: §6.5가 문서와 코드가 어긋나는 여덟 자리를 적어 두었고, 동시성의 실제 동작은 §4.5에 있다.

⚠️ Two things first. Production is still serving KB (§0.4), so everything below is live rather than historical. And do not trust the runbooks as written — §6.5 lists eight places where they disagree with the code, and the real concurrency behaviour is in §4.5.

⚠️ Hai điều trước tiên. Production vẫn đang phục vụ KB (§0.4), nên mọi điều dưới đây là trạng thái trực tiếp, không phải lịch sử. Và đừng tin nguyên văn tài liệu vận hành — §6.5 liệt kê tám chỗ lệch mã; hành vi đồng thời thực nằm ở §4.5.

6.1환경 — prod · stage, 그리고 운영 박스 위의 프리뷰 · The environments — prod, stage, and the preview on the prod box · Các môi trường — prod, stage và bản preview trên máy prod

prodstage
역할RoleVai tròKB가 보는 것 — 데모, 고정What KB sees — frozenKB đang thấy gì — đóng băng모든 새 작업 — 켜고 끈다All new work — switched on and offMọi công việc mới — bật tắt theo nhu cầu
주소AddressĐịa chỉams.smt.ai.krstage.ams.smt.ai.kr
실행Runs asChạy dưới dạngsystemd + Caddy (tarball, venv)systemd units + host Caddyunit systemd + Caddy trên host컨테이너containerscontainer — docker compose, ECR
DBRDS visus-dbRDS visus-stage-db

규칙 · rules · quy tắc

  1. prod에 실험 금지. ship 금지, 손으로 파일 복사 금지, 실험 워커를 prod DB에 붙이지 말 것No experiments on prod. Do not ship, do not hand-copy files, do not point an experiment worker at the prod databaseKhông thử nghiệm trên prod. Không triển khai, không chép tệp thủ công, không trỏ worker thử nghiệm vào DB production
  2. 승격 = stage에서 돌아본 커밋을 prod/backend에 머지 → 아무도 데모를 안 쓸 때 --promotePromotion = merge a commit that has run on stage into prod/backend → then --promote when nobody is using the demoPromotion = hợp nhất commit đã chạy trên stage vào prod/backend → rồi --promote khi không ai dùng demo
  3. 핫픽스 = prod/backend에서 분기 → 가능하면 stage에서 먼저 → 승격 → stage에 다시 머지Hotfix = branch from prod/backend → through stage if possible → promote → then merge back into stageHotfix = tạo nhánh từ prod/backend → qua stage nếu có thể → promote → sau đó hợp nhất ngược vào stage
  4. stage는 부수라고 있는 곳. 유휴 시 정지stage exists to be broken. Stop it when idlestage tồn tại để bị phá. Dừng khi không dùng
🚨 환경은 둘이 아니다 — 세 번째가 운영 박스 위에서 돌고, 운영과 같은 데이터베이스를 쓴다there are not two environments — a third runs on the prod box, against the production databasekhông chỉ có hai môi trường — môi trường thứ ba chạy trên máy prod, dùng DB production

2026-10-08에 새 디자인(face lift)이 https://ams.smt.ai.kr/preview에 올라갔다. 운영 박스에서 돌아가는 다섯 서비스 중 하나(visus-web-preview)이고, 로그인 API와 데이터베이스가 운영과 같다.

On 2026-10-08 a face lift went live at https://ams.smt.ai.kr/preview. It is one of the five services on the production box (visus-web-preview), and it uses the same login API and the same database as production.

Ngày 2026-10-08, một giao diện làm mới lên production tại https://ams.smt.ai.kr/preview. Đây là một trong năm dịch vụ trên máy production (visus-web-preview), dùng cùng API đăng nhập và cùng cơ sở dữ liệu với production.

🚨 그래서 겹치는 것은 화면이 아니라 데이터다. 기록의 문장이 정확하다 — 「프리뷰와 라이브는 같은 사건을 다루므로, 프리뷰에서 도표를 잠그거나 안내문을 발행하면 실제 사건이 바뀐다. 데모 사건을 프리뷰에서 리허설했다면 실제 데모 전에 데모 사건 초기화를 다시 돌릴 것.」

🚨 So what overlaps is not the screen but the data. The record's own sentence is exact: "the preview and the live site work on the same cases, so locking a chart or publishing a notice in the preview changes the real case. If you rehearse on the demo cases in the preview, re-run the demo-case reset before the actual demo."

🚨 Vậy phần chồng lấn không phải màn hình mà là dữ liệu. Hồ sơ ghi chính xác: "preview và trang live làm việc trên cùng các vụ việc, nên khóa biểu đồ hoặc công bố thông báo trong preview sẽ thay đổi vụ thật. Nếu diễn tập bằng vụ demo trong preview, chạy lại reset vụ demo trước demo thật."

⚠️ 그리고 수명이 불안정하다: 평범한 ship.py 배포는 프리뷰를 건드리지 않지만, 박스를 다시 만들면 사라진다. 내리는 방법은 visus-web-preview를 중지하고 /etc/caddy/Caddyfile.bak-20261008을 복원하는 것이다. 이 문서가 다른 곳에서 「환경은 둘」이라고 적은 곳은 이 셋째를 세지 않은 것이다.

⚠️ And its lifetime is fragile: an ordinary ship.py deploy leaves it alone, but a full box rebuild drops it. To take it down, stop visus-web-preview and restore /etc/caddy/Caddyfile.bak-20261008. Wherever this document says there are two environments, it is not counting this third one.

⚠️ Vòng đời cũng mong manh: deploy ship.py thông thường không ảnh hưởng, nhưng rebuild toàn máy sẽ xóa nó. Muốn dừng, dừng visus-web-preview và khôi phục /etc/caddy/Caddyfile.bak-20261008. Mọi chỗ tài liệu nói có hai môi trường đều không tính môi trường thứ ba này.

6.2명령어 · Commands · Lệnh

# 배포 · deploy (all default to stage)
python -m scripts.deploy.ship                 # build+push images, compose roll-out
python -m scripts.deploy.ship --status        # deployed tag vs committed, containers, jobs
python -m scripts.deploy.ship --env prod --promote

# 전원 · power (box + DB + scaler)
python -m scripts.deploy.stage_power status|on|off

# 롤백 · rollback to the preserved systemd units
python -m scripts.deploy.ship_images --rollback

# ECS CV 풀 · the GPU pools
python -m scripts.deploy.pool status          # replicas, queue depth, $/h, alarms
python -m scripts.deploy.pool up experiment --cv 6
# Triển khai (tất cả mặc định là stage)
python -m scripts.deploy.ship                 # dựng + đẩy image, triển khai compose
python -m scripts.deploy.ship --status        # tag triển khai so với commit, container, tác vụ
python -m scripts.deploy.ship --env prod --promote

# Nguồn điện (máy + DB + bộ điều chỉnh quy mô)
python -m scripts.deploy.stage_power status|on|off

# Quay lui về các unit systemd được giữ lại
python -m scripts.deploy.ship_images --rollback

# Các nhóm GPU cho ECS CV
python -m scripts.deploy.pool status          # số bản sao, độ sâu hàng đợi, $/h, cảnh báo
python -m scripts.deploy.pool up experiment --cv 6

KB 배치는 풀 명령이 필요 없다 — kb_open이 큐에 넣으면 스케일러가 큐 깊이를 발행하고, 첫 잡 후 7~8분에 첫 레플리카가 건강해지고, 큐가 빈 지 10분 뒤 0으로 돌아간다.

A KB batch needs no pool command: the scaler publishes queue depth, the first replica is healthy ~7–8 min after the first job, and the pool returns to zero 10 min after the queue empties.

Batch KB không cần lệnh pool: scaler công bố độ sâu hàng đợi, replica đầu khỏe sau khoảng 7–8 phút từ job đầu, pool về 0 sau 10 phút từ lúc hàng rỗng.

6.3디스크와 stateless · Disk and statelessness · Đĩa và tính không trạng thái

작업 공간의 99.76%가 미디어다 — 클립 사본, 프레임, 그리드. 에이전트가 쓴 JSON/JSONL은 ~28 KB.

99.76% of a workspace is media. The text the agent writes is ~28 KB of an 11.5 MB workspace.

99.76% workspace là media. Văn bản tác nhân ghi khoảng 28 KB trong workspace 11.5 MB.

분석 하나가 13.5~36 MB를 남긴다. 회수하지 않으면 ~1,000건이 97 GB 볼륨을 채우고, 그 뒤 워커는 degrade가 아니라 ffmpeg 쓰기에서 실패한다 (V-D23). 지우는 것 중 authoritative한 것은 없다 — 스토어와 S3에서 재구성된다. 메커니즘은 이미 있었고 정책만 없었다.

The reaper is 180 lines, not a refactor, because the rebuild mechanism already existed — only the policy was missing.

Reaper 180 dòng, không cần refactor vì cơ chế rebuild đã có — chỉ thiếu chính sách.

의도적으로 연기됨 · deliberately deferred (V-D24)chủ động hoãn · tạm hoãn có chủ đích (V-D24)

스토어를 텍스트의 authoritative source로 만드는 것. facts.jsonl에 writer가 6개(원장의 셈)이고 각자 upsert 규칙이 다르다 — 🚨 실제로 세어 보면 일곱 개이고 그중 셋은 데이터를 잃는다 (§7.4). 하나로 모으는 것은 분석 임계 경로의 리팩터링이라 데모 전날 할 일이 아니었다. 워커를 둘 이상 돌리기 위한 전제 조건이다.

Six writers touch facts.jsonl, each with its own upsert rules. Funnelling them through one interface is the prerequisite for running more than one worker.

Sáu writer chạm facts.jsonl, mỗi writer có quy tắc upsert riêng. Gom chúng qua một interface là điều kiện để chạy nhiều hơn một worker.

6.3bCV 서비스와 오토스케일 풀 · The CV service and the pools · Dịch vụ CV và các pool

문제: CV 모델이 워커 프로세스 안에서 돌았다. GPU 메모리가 프로세스마다 늘어 병렬성이 막혔다 — 프로세스당 약 3.3 GB(T4).

Vấn đề: mô hình CV chạy trong tiến trình worker. Bộ nhớ GPU tăng theo từng tiến trình, chặn xử lý song song — khoảng 3.3 GB mỗi tiến trình (T4).

해결(2026-10-13): GPU를 한 프로세스가 소유하고 워커는 VISUS_CV_URL로 부른다. 이미지도 갈렸다 — cv는 GPU, worker는 CPU 전용. 자세한 동작은 §4.5.

The CV models used to run inside the worker, and GPU memory grew per process, so parallelism was capped. Since 2026-10-13 one process owns the GPU and workers call it over HTTP; the images are split into a GPU cv and a CPU-only worker.

Mô hình CV từng chạy trong worker, bộ nhớ GPU tăng theo tiến trình nên song song bị giới hạn. Từ 2026-10-13, một tiến trình sở hữu GPU, worker gọi qua HTTP; ảnh được tách thành cv dùng GPU và worker chỉ CPU.

풀poolpool무엇whatnội dung
실험 풀experimentthử nghiệmkb_open 잡을 Fargate Spot 워커가 집어가고, Spot L4 CV 풀이 큐 깊이에 따라 뜨고 진다Fargate Spot workers take kb_open jobs; a Spot L4 CV pool rises and falls with queue depthWorker Fargate Spot nhận job kb_open; pool CV Spot L4 tăng giảm theo độ sâu hàng
라이브 풀livelive박스 자체의 cv+worker 용량(4)을 넘으면 L4 복제본 2대 + 워커가 합류beyond the box's own capacity of 4, two L4 replicas and workers joinvượt sức chứa 4 của máy, hai replica L4 và worker tham gia

⭐ KB 배치를 돌릴 때 풀 명령은 필요 없다. kb_open이 큐에 넣으면 스케일러가 깊이를 발행하고, 첫 잡 뒤 7~8분에 첫 복제본이 건강해지고, 큐가 빈 지 10분 뒤 0으로 돌아간다. 미리 pool up 하는 것은 급할 때만이고, 그때는 반드시 MinCapacity를 되돌릴 것 — stage_power off는 그것을 하지 않는다(§6.5).

A KB batch needs no pool commands: the scaler publishes queue depth, the first replica is healthy 7–8 minutes after the first job, and the pool returns to zero 10 minutes after the queue empties. Pre-warming is only for when you are in a hurry — and then you must reset MinCapacity yourself, because stage_power off does not.

Batch KB không cần lệnh pool: scaler công bố độ sâu, replica đầu khỏe sau 7–8 phút từ job đầu, pool về 0 sau 10 phút từ lúc hàng rỗng. Pre-warm chỉ khi vội — khi đó phải tự reset MinCapacity vì stage_power off không làm việc ấy.

측정됨: g6.xlarge(L4)가 판독당 최적. 로드 테스트 A~E는 docs/results/autoscale.md. ⚠️ 런 D(shed=0)는 무효 — 60/60이 트랙 없이 끝났다. 런 E는 504가 0이었으나 1/60이 판독기 예산에 걸려 유실 — 풀은 런 C 설정 유지.

Measured: a g6.xlarge (L4) is the best fit per reading. Load tests A–E are in docs/results/autoscale.md. ⚠️ Run D (shed=0) is void — 60 of 60 finished with no tracks. Run E had zero 504s but lost 1 of 60 to the reader’s budget, so the pool stays on run C’s settings.

Đã đo: g6.xlarge (L4) phù hợp nhất mỗi lượt đọc. Load test A–E ở docs/results/autoscale.md. ⚠️ Run D (shed=0) vô hiệu — 60/60 hoàn tất nhưng không có track. Run E không có 504 nhưng mất 1/60 do ngân sách bộ đọc, nên pool giữ cấu hình của run C.

6.4AWS 자산 — 실제로 무엇이 떠 있나 · The AWS estate as it actually is · Tài nguyên AWS thực tế

✅ 코드✅ Mã nguồn 2026-10-14 계정 직접 조회 (read-only) 2026-10-14 tra trực tiếp tài khoản (chỉ đọc)

레포 어디에도 이 목록이 없다. 계정 990959830794 · 서울 리전은 공용이다 — delivery-papa · smt-rms-aws · settlecloud · rms2 가 같은 계정에 산다. visus/lense 자원은 project 태그로만 구분된다. 새 자원에 반드시 붙일 것 — 비용 귀속의 유일한 근거다.

Nothing in the repo records this. The account is shared with several unrelated products; visus/lense resources are distinguished only by a project tag, which is the sole basis for cost attribution.

Kho mã không ghi điều này. Tài khoản dùng chung cho nhiều sản phẩm không liên quan; tài nguyên visus/lense chỉ phân biệt bằng tag project, là cơ sở duy nhất để phân bổ chi phí.

$518
visus + lense
최근 30일 / last 30 days30 ngày gần nhất
90%
EC2 컴퓨트Tính toán EC2
$468 of it
$16.6
평시 일 비용Chi phí ngày thường
daily floor
223GB
S3 전체Toàn bộ S3
across 9 buckets

상시 가동Always onLuôn bật

타입typeloại용도used fordùng cho
EC2 visus-appg4dn.xlargeprod — KB가 보는 데모the demo KB seesdemo KB nhìn thấy · EIP 3.34.20.195
EC2 visus-stageg4dn.xlargestage · EIP 3.39.180.55 — 런북상 유휴 시 정지 대상the runbook says stop it when idlerunbook nói dừng khi rảnh
🚨 EIP visus-prod-eip54.116.90.162어느 인스턴스에도 붙어 있지 않다(2026-10-19 직접 조회). 미연결 EIP는 요금이 붙는다. ⚠️ 더 중요한 것은 이름이 「prod」이라는 점이다 — 운영은 visus-app(3.34.20.195)이고 여기가 아니다. 버리든지 맞고, 버리기 전에 DNS가 이 주소를 가리키지 않는지만 확인할 것attached to no instance (checked directly, 2026-10-19). An unassociated Elastic IP is billed. ⚠️ The bigger risk is its name — production is visus-app at 3.34.20.195, not this. Releasing it is probably right; check no DNS record points at it firstkhông gắn với instance nào (kiểm tra trực tiếp 2026-10-19). Elastic IP không liên kết vẫn bị tính phí. ⚠️ Rủi ro lớn hơn là tên của nó — production là visus-app tại 3.34.20.195, không phải máy này. Có lẽ nên giải phóng; trước tiên kiểm tra không có bản ghi DNS nào trỏ tới nó
RDS visus-db
visus-stage-db
db.t4g.micro
postgres 18.3
각 20 GB · 둘 다 availableboth availablecả hai đều sẵn sàng

수요에 따라 뜨고 지는 것Scales on demandco giãn theo nhu cầu

ECS 클러스터 visus-stage — 서비스 5개. GPU는 g6.xlarge (L4) ASG visus-stage-gpu-live, 내부 ALB visus-stage-cv 뒤.

ECS cluster visus-stage — five services. The GPU is a g6.xlarge (L4) in the ASG visus-stage-gpu-live, behind the internal ALB visus-stage-cv.

Cụm ECS visus-stage — năm dịch vụ. GPU là g6.xlarge (L4) trong ASG visus-stage-gpu-live, sau ALB nội bộ visus-stage-cv.

visus-stage-scaler큐 깊이를 CloudWatch에 발행 (상시 1)publishes queue depthcông bố độ sâu hàng
cv-live · worker-live라이브 레인 — 박스 용량(4)을 넘으면 뜬다live lane — joins when the box is over capacitylàn live — tham gia khi máy vượt công suất
cv-exp · worker-exp실험 레인 — kb_open 배치용. 평소 0experiment lane — normally 0làn thử nghiệm — thường là 0

스케일러가 내보내는 지표What the scaler publishesScaler công bố gì

namespace visus/stage          dimension Lane = live | experiment

Backlog · Queued · Running · Demand          work
CvReplicas · CvHealthy · CvWanted            CV replicas
CvInflight · CvGpuRunning · CvGpuWaiting     GPU lane occupancy
CvShed · CvExpired                           shedding (429) · deadline misses
WorkersRunning · WorkersWanted · GpuInstances
PoolHourlyCostUSD                            ← what the pool costs right now
namespace visus/stage          dimension Lane = live | experiment

Backlog · Queued · Running · Demand          khối lượng công việc
CvReplicas · CvHealthy · CvWanted            các bản sao CV
CvInflight · CvGpuRunning · CvGpuWaiting     mức sử dụng hàng GPU
CvShed · CvExpired                           từ chối tải (429) · trễ hạn
WorkersRunning · WorkersWanted · GpuInstances
PoolHourlyCostUSD                            ← chi phí nhóm hiện tại

운영 중 가장 빨리 확인하는 법. PoolHourlyCostUSD는 유휴 시 ~$0.014, 2 GPU가 뜨면 ~$2.22/h. CvShed > 0 이면 GPU 레인이 포화되어 요청이 429로 밀린 것이다 — 설계된 동작이고 ALB를 통해 재시도된다.

The fastest read on live state. PoolHourlyCostUSD is ~$0.014 idle and ~$2.22/h with two GPUs up. CvShed above zero means the GPU lane is saturated and requests are being 429'd — by design, retried through the ALB.

Cách nhanh nhất để đọc trạng thái live. PoolHourlyCostUSD khoảng ~$0.014 khi rảnh và ~$2.22/giờ khi bật hai GPU. CvShed lớn hơn 0 nghĩa là lane GPU quá tải, request bị 429 — theo thiết kế và được thử lại qua ALB.

저장소StorageLưu trữ — 223 GB

버킷bucketbucket크기sizekích thước내용whatnội dung
ams-blackbox-export146.9 GBKB 반출 영상 — 가장 큼KB exported footage — the largestvideo KB xuất — lớn nhất
ams-aihub34.2 GBAI Hub 원본AI Hub originalsbản gốc AI Hub
ams-user-uploads24.8 GB업로드 + 프레임·그리드 자산 — 161,755 객체uploads + frame/grid assets — 161,755 objectstệp tải lên + ảnh/frame/lưới — 161,755 đối tượng
ams-aihub-h26410.0 GB브라우저 재생용browser-playablephát được trên trình duyệt
visus-kb-review-202610064.1 GB사정사 검토 페이지the adjuster review pagestrang đánh giá của chuyên viên
ams-lense-outputs · ams-knia-media3.2 GBlense CV 출력 · 도표 이미지lense CV outputs · chart mediađầu ra CV lense · media biểu đồ
visus-tfstate-…—Terraform state

시크릿: SSM SecureString /visus/env · /visus-stage/env · /visus/db_password. 값은 절대 출력하거나 레포에 넣지 않는다.

Secrets: SSM SecureString /visus/env · /visus-stage/env · /visus/db_password. Never print the values or put them in a repository.

Secret: SSM SecureString /visus/env · /visus-stage/env · /visus/db_password. Không in giá trị hoặc đưa vào kho mã.

비용 — 최근 30일Cost — last 30 daysChi phí — 30 ngày gần nhất

USD
visus$351EC2 컴퓨트 $468 (90%) · EC2-기타 $31 · RDS $11 · S3 $3EC2 compute $468 (90%)Tính toán EC2 $468 (90%)
lense$167
합계Tổng$518
평시floormức sàn$16.6/일$16.6/day$16.6/ngày상시 가동 g4dn 두 대the two always-on GPU boxeshai máy GPU luôn bật
10-06$68.5KB 300건 공개 모델 평가the open-model evaluationđánh giá mô hình mở
10-12~13$37플랫폼 v2 · CV 풀platform v2 and the CV poolsplatform v2 và pool CV
가장 먼저 볼 것 · the first thing to look atĐiều cần xem trước · việc đầu tiên cần xem

바닥 비용의 거의 전부가 상시 가동 GPU 박스 두 대다. visus-stage는 런북상 유휴 시 꺼야 하는데 조회 시점에 계속 떠 있었다 — stage_power off가 바닥을 절반 가까이 줄인다. prod는 KB가 보고 있으므로 끄지 않는다.

Almost the entire floor is two always-on GPU boxes. The runbook says stage should be stopped when idle; it was not. stage_power off roughly halves the floor. prod stays up — KB is looking at it.

Gần như toàn bộ mức sàn là hai máy GPU luôn bật. Runbook nói dừng stage khi rảnh nhưng đã không làm. stage_power off giảm khoảng một nửa mức sàn. prod vẫn bật — KB đang sử dụng.

조회 방법How to inspect itCách kiểm tra

AWS CLI는 설치되어 있지 않지만 필요 없다 — visus의 venv에 boto3가 있고 자격 증명은 visus/.env에서 온다. ~/.aws/에 아무것도 쓰지 않는다.

The AWS CLI is not installed, and it is not needed — boto3 is in visus’s venv and the credentials come from visus/.env. Nothing is ever written to ~/.aws/.

AWS CLI chưa cài và không cần — boto3 có trong venv của visus, thông tin xác thực lấy từ visus/.env. Không bao giờ ghi vào ~/.aws/.

from visus.model import load_env
import boto3
env = load_env()
S = boto3.Session(aws_access_key_id=env['AWS_ACCESS_KEY_ID'],
                  aws_secret_access_key=env['AWS_SECRET_ACCESS_KEY'],
                  region_name=env.get('AWS_REGION', 'ap-northeast-2'))
# Cost Explorer only answers in us-east-1
from visus.model import load_env
import boto3
env = load_env()
S = boto3.Session(aws_access_key_id=env['AWS_ACCESS_KEY_ID'],
                  aws_secret_access_key=env['AWS_SECRET_ACCESS_KEY'],
                  region_name=env.get('AWS_REGION', 'ap-northeast-2'))
# Cost Explorer chỉ phản hồi ở us-east-1
🚨 확인하고 넘길 것 — 조상 레포의 자격증명이 공유 계정의 관리자 권한이었다check this before you inherit it — the predecessor's credentials were account-wide admin in a shared accounthãy kiểm tra trước khi tiếp nhận — thông tin xác thực tiền nhiệm là admin toàn tài khoản trong tài khoản dùng chung

2026-09-16의 기록에 이렇게 적혀 있다 — lense/.env의 키는 IAM 사용자 하나에 대한 AdministratorAccess 정적 키이고, 그 계정은 다른 회사의 운영도 함께 돌리는 계정이다. 같은 기록에 범위를 좁힌 대체 정책이 작성되어 있고, 적용되었다는 기록은 없다.

The record of 2026-09-16 states it plainly: the keys in lense/.env are static AdministratorAccess keys for one IAM user, in an account that also runs other companies' production. A scoped replacement policy was written in the same record, and there is no record of it being applied.

Hồ sơ ngày 2026-09-16 ghi rõ: key trong lense/.env là key AdministratorAccess tĩnh của một IAM user, trong tài khoản cũng chạy production của công ty khác. Chính sách thay thế giới hạn phạm vi đã được viết trong hồ sơ, nhưng không có ghi nhận đã áp dụng.

⚠️ 현재 상태는 이 문서가 확인하지 못했다 — 전사 기록이 말하는 것이 전부다. 인수 첫 주에 확인할 것: ① 그 키가 아직 유효한가, ② 권한이 여전히 계정 전체인가, ③ 작성된 범위 축소 정책이 적용됐는가. 정적 키이고 관리자이며 공유 계정이라는 세 조건이 겹치면, 교체는 선택이 아니다. (키 값은 이 문서 어디에도 없고, 있어서도 안 된다.)

⚠️ This document could not verify the current state — the transcripts are all there is. Check in your first week: ① whether those keys are still valid, ② whether the permission is still account-wide, ③ whether the scoped policy that was written was ever applied. Static keys, administrator rights and a shared account together make rotation not a choice. (No key value appears anywhere in this document, and none should.)

⚠️ Tài liệu không thể xác minh trạng thái hiện tại — bản chép phiên là toàn bộ bằng chứng. Trong tuần đầu cần kiểm tra: ① key còn hiệu lực không, ② quyền còn toàn tài khoản không, ③ chính sách giới hạn đã viết có từng áp dụng không. Key tĩnh, quyền admin và tài khoản dùng chung kết hợp lại khiến luân chuyển key là bắt buộc. (Không có giá trị key trong tài liệu và không nên có.)

6.5🚨 문서와 코드가 어긋나는 곳 · Where the runbooks and the code disagree · Nơi runbook lệch với mã

✅ 코드 확인 · stageverified in the code · stageđã kiểm trong mã · stage

🚨 prod은 지금도 KB에 서비스 중이다 (2026-10-19 확인). 아래는 과거 기록이 아니라 살아 있는 위험이다.

🚨 Production is still serving KB. What follows is live, not historical.

🚨 Production vẫn phục vụ KB. Phần sau là trực tiếp, không phải lịch sử.

배포 문서를 그대로 믿으면 다친다. 아래는 전부 scripts/deploy/와 docs/를 나란히 읽어 확인한 것이다.

Everything below was checked by reading the scripts against the runbooks that describe them.

Mọi điều sau được kiểm bằng cách đọc script đối chiếu runbook.

H1remote.py:33이 VISUS_DEPLOY_ENV를 읽고 prod 가드가 없다 → VISUS_DEPLOY_ENV=prod python -m scripts.deploy.remote '<shell>'이 데모 박스에서 임의 root 명령을 돌린다remote.py:33 reads VISUS_DEPLOY_ENV with no production guard → one environment variable runs arbitrary root commands on the demo boxremote.py:33 đọc VISUS_DEPLOY_ENV nhưng không có chốt production → một biến môi trường có thể chạy lệnh root tùy ý trên máy demo
H2--promote는 단언일 뿐이다 — 그 커밋이 stage에서 실제로 돌았는지 아무것도 확인하지 않는다--promote is an assertion only — nothing verifies that the commit ever ran on stage--promote chỉ là assertion — không kiểm tra commit đã chạy trên stage
H3ship.py:200(prod)은 「작업 유무를 물어볼 수 없었음」을 「작업 없음」으로 취급하고 ship_images.py:139(stage)는 거부한다 → prod 경로가 더 관대하다ship.py:200 (prod) treats "could not ask about running jobs" as "no running jobs", while ship_images.py:139 (stage) refuses → the production path is more permissiveship.py:200 (prod) coi "không hỏi được job đang chạy" là "không có job đang chạy", trong khi ship_images.py:139 (stage) từ chối → đường production dễ dãi hơn
H4stage_power off는 pools()를 except Exception으로 감싸고 출력만 한다. pool up --cv 6 뒤 오토스케일링 MinCapacity를 되돌리지 않는다stage_power off wraps pools() in except Exception and only prints. After pool up --cv 6 it never resets the autoscaling MinCapacitystage_power off bọc pools() trong except Exception và chỉ in. Sau pool up --cv 6, nó không bao giờ reset MinCapacity autoscaling
H5pool down의 거부 판정은 스케일러가 쓴 CloudWatch를 읽는다 → 스케일러가 죽으면 값이 None이 되고 조용히 진행한다pool down's refusal reads CloudWatch values written by the scaler → if the scaler is down the values are None and it proceeds silentlypool down từ chối dựa vào giá trị CloudWatch scaler ghi → nếu scaler tắt, giá trị là None và lệnh lặng lẽ tiếp tục
H6리퍼: grace 기본 6시간이 아니라 1.0시간, 최소 여유 25가 아니라 20, 「진행 중 분석은 못 건드린다」는 압박 상황에서 거짓 — protected_analyses()는 규칙 2에서만 제외되고 규칙 3에는 포함되어 맨 뒤로 정렬될 뿐The reaper: grace defaults to 1 hour, not the documented 6; min-free is 20, not 25; and "an active analysis is untouchable" is false under pressure — protected_analyses() is excluded from rule 2 but included in rule 3, merely sorted lastReaper: grace mặc định 1 giờ, không phải 6; min-free là 20, không phải 25; và "phân tích đang chạy không thể đụng" là sai khi chịu áp lực — protected_analyses() bị loại ở luật 2 nhưng đưa vào luật 3, chỉ sắp cuối
H7🚨 attempts=3에서 좌초하는 작업 — MAX_ATTEMPTS는 클레임 필터일 뿐이다 → 작업은 running으로 영원히 남고, 사건은 analyzing에 머물고, 리퍼는 그 작업공간을 영구히 보호한다. 쓸어내는 코드가 없다🚨 Jobs strand at attempts=3 — MAX_ATTEMPTS is only a claim filter, so the job stays running forever, the case stays analyzing, and the reaper protects that workspace permanently. Nothing sweeps them🚨 Job mắc kẹt ở attempts=3 — MAX_ATTEMPTS chỉ là bộ lọc claim, nên job chạy mãi, vụ ở trạng thái analyzing, reaper bảo vệ workspace vĩnh viễn. Không có bộ quét nào thu hồi.
H8문서 드리프트: ENVIRONMENTS.md:11은 cv를 「아직 안 올림」이라 하지만 올라가 있다; DEPLOY.md:235의 명령들은 이제 stage를 기본값으로 잡는데 거기엔 visus-worker 유닛이 없다 → 빈 출력으로 성공한 것처럼 보인다Doc drift: ENVIRONMENTS.md:11 says cv is "not shipped yet" but it is; DEPLOY.md:235's commands now default to stage, where no visus-worker unit exists, so they succeed with misleading empty outputTrôi tài liệu: ENVIRONMENTS.md:11 nói cv "chưa ship" nhưng đã có; lệnh ở DEPLOY.md:235 nay mặc định stage, nơi không có unit visus-worker nên thành công với đầu ra rỗng gây hiểu nhầm

실제로 걸리는 시간Measured timingsThời gian đo được

GPU 호스트 InServiceGPU host InServiceGPU host InService3.7 분phút
복제본 정상replica healthyreplica khỏe6.7–6.8 분6.7–6.8 min6.7–6.8 phút
첫 워커first workerworker đầu tiên8.3 분phút
축소scale-inscale-inCV 10분 / 워커 5분 — 다만 GPU 호스트는 마지막 측정 37분 뒤에야 반납된다CV 10 min / workers 5 min — but GPU hosts are only released 37 minutes after the last readingCV 10 phút / worker 5 phút — nhưng GPU host chỉ được giải phóng 37 phút sau lượt đọc cuối

6.5b🚑 무언가 잘못됐을 때 — 어디부터 보나 · When something is wrong: where to look first · Khi có lỗi: xem ở đâu trước

이 프로젝트에서 실제로 일어난 고장들이다. 증상 → 먼저 의심할 것 순으로 적는다.

These are failures that actually happened here, written as symptom → what to suspect first.

Đây là các lỗi thực sự từng xảy ra, viết theo dạng triệu chứng → điều cần nghi ngờ trước.

증상symptomtriệu chứng먼저 의심할 것suspect firstnghi ngờ trước
사건이 analyzing에서 영원히 멈춤a case stuck in analyzing forevervụ kẹt ở analyzing mãi🚨 작업이 attempts=3에서 좌초했다. MAX_ATTEMPTS는 클레임 필터일 뿐이라 작업은 running으로 남고 아무도 쓸어내지 않는다. 큐를 직접 보고 손으로 되돌려야 한다 (§6.5 H7)the job stranded at attempts=3. MAX_ATTEMPTS is only a claim filter, so the job stays running and nothing sweeps it — requeue it by handjob mắc ở attempts=3. MAX_ATTEMPTS chỉ là bộ lọc claim, job vẫn running và không ai thu hồi — tự xếp hàng lại
인스턴스는 떠 있는데 작업이 안 돈다instances are up but nothing runsinstance bật nhưng không có gì chạy🗣 권한 확인에서 멈춰 있을 수 있다 — 무인 실행에서 반복된 사고다: 「인스턴스는 떠 있는데 작업이 안 돌고 돈만 쓴다」. 배치 전에 한 건을 지켜보며 돌릴 것it may be blocked on a permission prompt — a repeated incident in unattended runs. Watch one case through before launching a batchcó thể bị chặn bởi prompt xin quyền — sự cố lặp lại trong lượt chạy không giám sát. Theo dõi một vụ tới cuối trước khi chạy batch
판독은 끝났는데 트랙이 없다a reading finished with no trackslượt đọc xong nhưng không có trackCV 요청이 예산 안에 GPU를 못 잡고 Expired했거나, 풀이 429로 흘려보냈다. /queue의 expired·shed 카운터를 볼 것. ⚠️ 로드 테스트 런 D가 정확히 이것이었다 — 60/60이 트랙 없이 「성공」the CV request Expired in the GPU queue, or the pool shed it with a 429. Check the expired and shed counters — load-test run D was exactly this: 60/60 "succeeded" with no tracksrequest CV hết hạn trong hàng GPU hoặc pool loại với 429. Kiểm tra bộ đếm expired và shed — load test D đúng trường hợp này: 60/60 "thành công" nhưng không có track
배포했더니 돌던 분석이 사라짐a deploy lost a running analysisdeploy làm mất phân tích đang chạy정상이다 — SIGTERM에 작업을 돌려주고 시도 횟수를 올리지 않는다(§4.5). 사용자에게는 「다시 대기열에 들어갔다」고 보인다. 돌아오지 않으면 그때가 임대(30분) 문제다this is correct — on SIGTERM jobs are handed back without counting the attempt. If it never returns, then it is the 30-minute leaseđây là đúng — SIGTERM trả job lại mà không tính lượt. Nếu không trở lại, đó là lease 30 phút
확정했는데 판정이 안 바뀜confirmed a fact, the verdict did not moveđã xác nhận sự kiện nhưng kết luận không đổi🚨 조용히 삼켜졌을 수 있다 — service.py:617-621이 활동 로그와 derive_verdict를 둘 다 삼킨다 (§7.4)it may have been swallowed — service.py:617-621 swallows both the activity log and derive_verdictcó thể đã bị nuốt — service.py:617-621 nuốt cả activity log và derive_verdict
명령이 성공했는데 아무 일도 안 일어남a command succeeded and did nothinglệnh thành công nhưng không làm gì🚨 DEPLOY.md의 명령들이 이제 stage를 기본값으로 잡는데 거기엔 visus-worker 유닛이 없다 → 빈 출력으로 성공한다 (§6.5 H8)the runbook's commands now default to stage, where no visus-worker unit exists, so they succeed with empty outputlệnh runbook nay mặc định stage, nơi không có unit visus-worker nên thành công với đầu ra rỗng
디스크가 찬다the disk fillsđĩa đầy분석 하나가 13.5~36 MB이고 99.76%가 미디어다. 리퍼는 돌지만 grace가 문서의 6시간이 아니라 1시간이고, 좌초한 작업의 작업공간은 영구히 보호된다99.76% of a workspace is media. The reaper runs, but its grace is 1 hour not the documented 6, and a stranded job's workspace is protected forever99.76% workspace là media. Reaper chạy nhưng grace là 1 giờ thay vì 6; workspace của job mắc kẹt được bảo vệ mãi

⭐ 돈을 쓰기 전에 확인하는 순서 — ship --status(배포 태그 vs 커밋, 컨테이너, 잡) → pool status(복제본, 큐 깊이, 인플라이트, $/h, 알람) → smoke_platform.py(스토어+워커 왕복, 모델 호출 0) → pytest. 네 개가 깨끗하면 환경 문제는 아니다.

Before spending anything: ship --status, then pool status, then the platform smoke test (store and worker end to end, zero model calls), then pytest. If all four are clean, the problem is not your environment.

Trước khi tiêu tiền: ship --status, rồi pool status, sau đó smoke test nền tảng (store và worker từ đầu đến cuối, 0 lời gọi mô hình), cuối cùng pytest. Nếu cả bốn sạch, vấn đề không nằm ở môi trường.

⭐⭐ 배포는 한때 존재하지 않았다 — 그리고 가장 중요한 수정이 바로 그래서 돌지 않고 있었다⭐⭐ Deployment did not exist — and the fix that mattered most was not running because of it⭐⭐ Triển khai từng không tồn tại — và bản sửa quan trọng nhất không chạy vì vậy

2026-09-29, 「api·web·worker는 언제 새 코드를 받나」라는 질문에 대한 답이 이것이었다 — 「지금은 받지 않는다. 갱신 기구가 아예 없다. 코드는 출시 때 S3 tar로 한 번 도착했고 그 뒤 아무것도 갱신하지 않는다.」

On 2026-09-29, the answer to "when do the api, web and worker get new code?" was: "Right now, they don't — there is no update mechanism at all. The code arrived once as an S3 tarball at launch and nothing refreshes it."

Ngày 2026-09-29, câu trả lời cho "khi nào api, web và worker nhận mã mới?" là: "Hiện giờ không nhận — hoàn toàn không có cơ chế cập nhật. Mã chỉ tới một lần dưới dạng tarball S3 khi khởi chạy, sau đó không gì làm mới."

🚨 그리고 드리프트는 조용히 실제였다. 박스는 세 커밋 뒤처져 있었고, 뒤처진 것 중에 연결 풀이 있었다 — psycopg_pool을 박스에 설치는 했는데 그것을 쓰는 코드를 배포하지 않았다. 즉 RDS에 풀러가 없다는 이유로 만든 수정이, 정작 RDS를 상대로 돌고 있지 않았다.

🚨 And the drift was real and silent. The box was three commits behind, and among them was the connection pool: psycopg_pool had been installed on the box while the code that uses it was never shipped. So the fix made specifically because RDS has no pooler was not running against RDS.

🚨 Và trôi mã có thật, âm thầm. Máy chậm ba commit; một trong đó là pool kết nối: psycopg_pool được cài trên máy nhưng mã dùng nó chưa từng được triển khai. Vì vậy bản sửa dành riêng cho RDS không có pooler chưa chạy với RDS.

무엇이 틀렸나the bug underneathlỗi bên dướiget_conn()이 연결을 threading.local에 캐시하고 닫지 않았다. Supavisor가 그것을 흡수하고 있었고, RDS에는 풀러가 없으므로 호스트당 약 40 연결 대 79가 됐을 것이다get_conn() cached a connection on a threading.local and never closed it. Supavisor had been absorbing that; RDS has no pooler, so it would have been about 40 connections per host against 79get_conn() cache kết nối trong threading.local và không bao giờ đóng. Supavisor từng hấp thụ; RDS không có pooler, nên sẽ khoảng 40 kết nối mỗi host trên giới hạn 79
고친 형태the fixbản sửa프로세스마다 상한 있는 psycopg_pool(최소 1 · 최대 8). 측정: 24 스레드가 12회씩 질의 — 1.0초에 292 요청을 처리했고, 8에서 묶였으며 대기 0. 상한은 4 프로세스 × 8 = 32 대 79a bounded psycopg_pool per process (min 1, max 8). Measured: 24 threads issuing 12 queries each — 292 requests served in 1.0 s, bounded at 8, with zero waits. The ceiling is 4 processes × 8 = 32 against 79một psycopg_pool giới hạn mỗi process (min 1, max 8). Đã đo: 24 thread phát 12 truy vấn mỗi thread — phục vụ 292 request trong 1.0 s, giới hạn 8, không chờ. Trần là 4 process × 8 = 32 trên 79
드리프트를 보이게 만든 것what made drift visibleđiều làm trôi mã lộ raship --status (커밋된 것 대 배포된 것, 그리고 그 사이의 커밋들) · 박스의 DEPLOYED_SHA(committed versus deployed, and the commits between) and DEPLOYED_SHA on the box(đã commit so với đã triển khai và các commit ở giữa) cùng DEPLOYED_SHA trên máy

⭐ 그 자리에서 가드가 남의 작업을 잡아냈다. ship이 배포를 거부하며 보여 준 더러운 트리는 다른 세션이 진행 중이던 V-D22 기능(사정사의 자유 문장을 대기 중인 조항 질문에 결속)이었다. 기록된 판단이 그대로 규칙이다 — 「남의 작업을 커밋하지도 되돌리지도 않는다. 다만 그것이 내 스크립트의 결함을 드러냈다 — tar가 작업 디렉터리에서 빌드하므로, 더티 트리 가드가 없었다면 커밋되지 않은 코드를 배포했을 것이다.」 「커밋된 것을 배포한다」가 말 그대로 참이 된 것은 그때부터다.

⭐ On the spot, the guard caught someone else's work. The dirty tree that made ship refuse was another session's in-flight V-D22 feature — binding an adjuster's free text to a pending clause question. The recorded judgment is itself the rule: "I won't commit or revert someone else's work. But it exposes a flaw in my own script: tar builds from the working directory, so without the dirty-tree guard it would have shipped uncommitted code." "Deploy what is committed" became literally true only then.

⭐ Ngay tại chỗ, cơ chế bảo vệ bắt được công việc của phiên khác. Cây bẩn khiến ship từ chối là tính năng V-D22 đang làm dở của một phiên khác — gắn văn bản tự do của chuyên viên vào câu hỏi điều khoản đang chờ. Nhận định đã ghi cũng là quy tắc: "Tôi sẽ không commit hay revert công việc của người khác. Nhưng nó lộ lỗi trong script của tôi: tar build từ thư mục làm việc, nên không có chốt cây bẩn thì nó đã triển khai mã chưa commit." Chỉ từ đó "triển khai điều đã commit" mới đúng theo nghĩa đen.

⚠️ 그리고 이 배포 방식이 안고 있는 네 가지 결함 — 저자 자신이 적어 두었다and the four defects this deploy method carries — named by its own authorvà bốn lỗi mà cách deploy này mang theo — do chính tác giả đặt tên
원자적이지 않다not atomickhông nguyên tửtar xzf가 서비스가 살아 있는 디렉터리 위로 푼다. 프로세스가 절반만 갱신된 트리를 읽을 수 있다 — 창은 좁지만 실재한다tar xzf unpacks over a live directory while the services are running, so a process can read a half-updated tree — a small window, and a real onetar xzf giải nén đè lên thư mục đang chạy khi dịch vụ còn hoạt động, nên tiến trình có thể đọc cây mã nửa cập nhật — cửa sổ nhỏ nhưng có thật
지워진 파일이 떠나지 않는다deleted files never leavetệp bị xóa không biến mấttar x는 덮어쓰기만 하므로 git에서 삭제된 것이 박스에 영원히 남는다 — 드리프트가 조용히 쌓인다tar x overlays, so anything removed in git lingers on the box forever — drift accumulates silentlytar x chỉ phủ lên, nên mọi thứ xóa trong git vẫn nằm trên máy vĩnh viễn — trôi mã tích lũy âm thầm
롤백이 없다no rollbackkhông rollbackDEPLOYED_SHA가 무엇이 올라가 있는지는 알려 주지만 돌아갈 이전 릴리스가 없다 — 옛 체크아웃에서 다시 배포해야 한다DEPLOYED_SHA tells you what is there, but there is no previous release to switch back to — you re-ship from an older checkoutDEPLOYED_SHA cho biết đang có gì, nhưng không có bản phát hành trước để quay lại — phải triển khai lại từ checkout cũ
환경을 제자리에서 변형한다the environment is mutated in placemôi trường bị sửa tại chỗ절반 실패한 pip install은 깨끗한 이전 상태가 없는 망가진 박스를 남긴다a half-failed pip install leaves a broken box with no clean prior statepip install thất bại giữa chừng để lại máy hỏng, không có trạng thái sạch trước đó

⭐ 그리고 대안에 대한 답이 미리 적혀 있다. GitHub Actions는 대체재가 아니라 방아쇠다 — 아래에 여전히 기구(S3 tar 또는 ECR)가 필요하고, 당신 아닌 누군가가 배포하거나 테스트로 배포를 막고 싶을 때 값을 한다. ECR이 올바른 종착지이고 네 결함을 한꺼번에 고친다(원자적 교체 · 불변 · 정확한 환경 · 태그 변경으로 롤백). 비용은 실재한다 — 약 7.5 GB 이미지와 호스트의 nvidia-container-toolkit. 디스크 실측: venv 6.7 GB · node_modules 614 MB · CV 가중치 237 MB · HF 캐시 827 MB · 소스와 책 146 MB = 8.5 GB. 지금 것은 「오늘 작동하는」 100여 줄이고, 정확성 부채를 안고 있다.

⭐ And the answer about alternatives is already on the record. GitHub Actions is the trigger, not the alternative — a mechanism (S3 tarball or ECR) is still needed underneath, and it earns its keep when someone other than you deploys, or when tests should gate deploys. ECR is the right end state and fixes all four defects at once — atomic swap, immutable, exact environment, rollback by retagging. The cost is real: a ~7.5 GB image and nvidia-container-toolkit on the host. Measured on disk: venv 6.7 GB · node_modules 614 MB · CV weights 237 MB · HF cache 827 MB · source and book 146 MB = 8.5 GB. What exists today is about a hundred lines that work, carrying correctness debt.

⭐ Câu trả lời về phương án khác đã có trong hồ sơ. GitHub Actions là trigger, không phải phương án triển khai — vẫn cần cơ chế bên dưới (tarball S3 hoặc ECR), và chỉ đáng dùng khi người khác triển khai hoặc khi test phải chặn deploy. ECR là đích phù hợp, sửa cả bốn lỗi cùng lúc — swap nguyên tử, bất biến, môi trường chính xác, rollback bằng đổi tag. Chi phí có thật: image ~7.5 GB và nvidia-container-toolkit trên host. Đã đo trên đĩa: venv 6.7 GB · node_modules 614 MB · trọng số CV 237 MB · cache HF 827 MB · mã nguồn và sách 146 MB = 8.5 GB. Hiện tại là khoảng một trăm dòng hoạt động được nhưng mang nợ tính đúng đắn.

6.6먼저 환경을 확인할 것 · Check your environment first · Kiểm tra môi trường trước

python3 scripts/smoke_platform.py   # store + worker end to end, ZERO model calls
.venv/bin/pytest tests/ -q          # 50+, fast, model-free
python3 scripts/smoke_platform.py   # kho lưu trữ + worker xuyên suốt, KHÔNG gọi mô hình
.venv/bin/pytest tests/ -q          # hơn 50 kiểm thử, nhanh, không dùng mô hình

돈을 쓰기 전에 환경이 맞는지 말해 준다.

It tells you your environment is right before you spend anything.

Nó cho biết môi trường đúng trước khi bạn tiêu tiền.

07인수인계 · Taking This Over · Tiếp nhận dự án

🚨 이 기계의 작업 사본은 한 달 뒤처져 있다 — 2026-10-20 기준the working copy on this machine is a month behind — as of 2026-10-20bản làm việc trên máy này chậm một tháng — tại ngày 2026-10-20

~/projects/visus의 master는 origin/master보다 215 커밋 뒤에 있다(로컬 2026-09-17 · 원격 2026-10-06). 그래서 이 작업 사본을 열면 이 문서와 어긋나는 것을 보게 된다 — 예를 들어 data/charts_ko.json은 로컬에는 있고, 이 문서가 §8.11에서 적은 대로 원격에는 없다(c903048이 data/knia/로 옮겼다).

The master checked out in ~/projects/visus is 215 commits behind origin/master (local 2026-09-17, remote 2026-10-06). So opening that working copy shows you things this document contradicts — for instance data/charts_ko.json is present locally and, exactly as §8.11 says, absent on the remote, where c903048 moved the corpus to data/knia/.

Nhánh master đang checkout tại ~/projects/visus chậm 215 commit so với origin/master (bản cục bộ: 2026-09-17; bản trên remote: 2026-10-06). Vì vậy, khi mở bản này, bạn sẽ thấy những điều trái với tài liệu — chẳng hạn data/charts_ko.json có ở máy nhưng không có trên remote, đúng như §8.11 ghi; commit c903048 đã chuyển tập dữ liệu sang data/knia/.

규칙은 단순하다 — 코드에 대해서는 로컬이 아니라 원격이 이기고, 읽을 브랜치는 stage다(6장 머리말). 무엇을 읽기 전에 git fetch && git status -sb를 한 번 돌리고, git checkout stage로 시작하라. 이 문서의 코드 링크는 모두 GitHub의 커밋을 가리키므로 로컬 상태와 무관하게 옳다.

The rule is simple — for code the remote wins over your local tree, and the branch to read is stage (as the chapter opens by saying). Run git fetch && git status -sb before reading anything, and start from git checkout stage. Every code link in this document points at a commit on GitHub, so the links are right regardless of what the local tree holds.

Quy tắc đơn giản: với mã nguồn, remote có ưu tiên cao hơn cây cục bộ; nhánh cần đọc là stage (như đã nêu ở đầu chương). Chạy git fetch && git status -sb trước khi đọc, bắt đầu bằng git checkout stage. Mọi liên kết mã nguồn trong tài liệu đều trỏ đến một commit trên GitHub, nên vẫn đúng bất kể bản cục bộ chứa gì.

7.1첫 주 · Your first week · Tuần đầu tiên

Day 1 — read before running. CLAUDE.md, then the objectives doc, then §1 of the architecture doc for the domain. Without the domain no file makes sense. Day 2 — run it without spending anything. Check out stage (not master), run the platform smoke test and the test suite, then bring up API, worker and web locally. Day 3 — take one case all the way: upload, read, confirm the chart, negotiate, write the notice, close. Then read that case's trace.jsonl line by line — it is the fastest way into this system. Days 4–5 — read the ledger, specifically E-V-001, 002, 003 and 007; those four explain most of why the design is what it is.

Ngày 1 — đọc trước khi chạy. Đọc CLAUDE.md, tài liệu mục tiêu, rồi §1 của tài liệu kiến trúc để hiểu nghiệp vụ. Chưa hiểu nghiệp vụ thì không tệp nào có ý nghĩa. Ngày 2 — chạy mà không tốn phí. Checkout stage (không phải master), chạy smoke test nền tảng và bộ kiểm thử, rồi khởi động API, worker, web ở máy cục bộ. Ngày 3 — xử lý trọn vẹn một hồ sơ: tải lên, phân tích, xác nhận biểu đồ, thương lượng, viết thông báo, đóng hồ sơ. Sau đó đọc từng dòng trace.jsonl của hồ sơ — đây là cách nhanh nhất để hiểu hệ thống. Ngày 4–5 — đọc sổ ghi chép, đặc biệt E-V-001, 002, 003 và 007; bốn mục này giải thích phần lớn lý do của thiết kế hiện tại.

일차dayngày할 일to doviệc cần làm
1돌려 보기 전에 읽기. CLAUDE.md → docs/OBJECTIVES.md → ARCHITECTURE.md §1(도메인). 도메인 없이는 코드가 읽히지 않는다Read before running. Without the domain, no file makes senseĐọc trước khi chạy. Chưa hiểu nghiệp vụ thì không tệp nào có ý nghĩa
2돈 쓰지 않고 돌리기. git checkout stage → smoke_platform.py → pytest. 그 다음 로컬 3종Run it without spending. Then bring up API, worker and webChạy mà không tốn phí. Sau đó khởi động API, worker và web
3사건 하나를 끝까지. 업로드 → 판독 → 확정 → 협의 → 안내문 → 종결. 그리고 trace.jsonl을 읽어라 — 이게 가장 빠른 길이다Take one case all the way, then read its trace.jsonl — the fastest way inXử lý trọn vẹn một hồ sơ, rồi đọc trace.jsonl — cách nhanh nhất để nhập cuộc
4–5원장 읽기. E-V-001 → 002 → 003 → 007만 읽어도 설계의 이유 대부분이 설명된다Read the ledger. Those four explain most of the designĐọc sổ ghi chép. Bốn mục trên giải thích phần lớn thiết kế

7.2알려진 결함 · Known flaws · Các thiếu sót đã biết

가장 근본적인 것 — 온톨로지의 빈칸The deepest one — the hole in the ontologyThiếu sót sâu nhất — lỗ hổng trong mô hình khái niệm

The deepest flaw is not a bug. Some fault standards were never defined (is a car "leading" at the moment of contact, or throughout?), so a reading that is perfectly accurate still gets scored wrong — an undefined standard manufactures what the numbers record as misreadings. And underneath that, there is no grammar in which the definition could be written: a fact is a single value at a single time, while "leading", "stopped then moved off" and "who entered first" are all sequences of events. One precedent exists — a lane change is recorded as a window with a start and an end, interpreted against the impact time — and it was never generalised. Confirmed 2026-10-19: KB supplies these definitions, and you ask KB rather than the book, because practice can differ from the printed text. No model change touches any of this.

Thiếu sót sâu nhất không phải một lỗi phần mềm. Một số tiêu chuẩn xác định lỗi chưa từng được định nghĩa (xe được coi là “đi trước” tại thời điểm va chạm hay trong suốt một khoảng thời gian?), nên kết quả phân tích hoàn toàn chính xác vẫn bị chấm sai — tiêu chuẩn chưa rõ tạo ra những trường hợp mà số liệu ghi thành lỗi đọc. Sâu hơn nữa, chưa có cách biểu diễn để viết định nghĩa đó: một sự kiện chỉ có một giá trị tại một thời điểm, trong khi “đi trước”, “dừng rồi khởi hành” và “ai đi vào trước” đều là chuỗi sự kiện. Đã có một tiền lệ: chuyển làn được ghi thành khoảng thời gian có điểm đầu, điểm cuối, diễn giải so với thời điểm va chạm; nhưng chưa được khái quát hóa. Xác nhận ngày 2026-10-19: KB cung cấp các định nghĩa này; cần hỏi KB thay vì tra sách vì thực tiễn có thể khác văn bản in. Thay mô hình không giải quyết được những vấn đề này.

③이 정의되지 않아 ②가 만들어지고, 그 정의를 쓸 표현 수단이 없다 (§3.3). 모델을 바꿔서 고칠 수 있는 종류가 아니다.

③ is undefined, which is what creates ②, and there is no means of expression in which to write that definition (§3.3). This is not the kind of thing a change of model fixes.

③ chưa được định nghĩa, tạo ra ②; cũng chưa có cách biểu diễn để viết định nghĩa ấy (§3.3). Đây không phải vấn đề có thể sửa bằng cách thay mô hình.

선행/후행에 시간 범위가 없다선행/후행 has no temporal scopeKhái niệm xe đi trước/đi sau (선행/후행) chưa có phạm vi thời gian「충돌 순간에 앞」인지 「내내 앞」인지 정의된 적이 없다. 코드에서는 시간 범위 없는 단일 enum. 그런데 주된 약점 1위이고 32건 중 14건never defined — yet it is the top-named weakness, 14 of the 32 agreed misseschưa từng được định nghĩa, nhưng là điểm yếu được nêu nhiều nhất: 14 trong 32 trường hợp sai đã thống nhất
기동 어휘에 해상도가 없다The manoeuvre vocabulary lacks resolutionBộ từ vựng hành vi xe chưa đủ chi tiếtMANOEUVRES에 「정차 후 출발」이 없다. 그 구분은 조사자 텍스트에서 claimed 등급으로만 들어온다. 차47-1 = 10건 중 5건it enters only as a claimed fact from the report textchỉ được đưa vào dưới dạng dữ kiện claimed lấy từ văn bản báo cáo
해당 없는 칸도 채우게 한다Inapplicable slots are still forcedVẫn buộc điền các trường không áp dụng물려받은 「한 번에 전부 답한다」의 잔재 — 「반드시 답하십시오」a remnant of the inherited one-pass schematàn dư của schema phân tích một lượt được kế thừa

먼저 할 일은 모델을 바꾸는 것이 아니라, 사건의 열을 표현할 수단을 만들고 그 위에서 술어를 정의하는 것이다 — 그리고 그 정의를 KB와 합의하는 것이 곧 온톨로지다.

The first move is not a better model. It is a representation that can hold a sequence — then a definition agreed with KB, which is the ontology.

Bước đầu tiên không phải tìm mô hình tốt hơn. Cần cách biểu diễn chứa được một chuỗi sự kiện, sau đó thống nhất định nghĩa với KB — đó chính là mô hình khái niệm.

그 밖의 결함The restCác thiếu sót còn lại

The rest, in rough order of how much they cost: the reading window runs to 0.5 s past the impact and so picks up the yaw of the collision itself — E-V-033 called this the one cheap fix and it is still not done; the impact anchor, which the whole v3 reading order hangs on, was 98.5% accurate on short clips and 50% on KB's longer ones, with a median error of 4.64 s, and has not been re-measured on long clips since the candidate approach landed; the vocabulary cannot express a stop-then-go state or an ordering of events; and several guarantees in chapter 4 are not actually enforced — see the invariants below.

Các vấn đề còn lại, xếp gần theo mức thiệt hại: cửa sổ phân tích kéo dài 0,5 giây sau va chạm nên thu cả góc xoay do chính cú va chạm gây ra — E-V-033 gọi đây là cách sửa ít tốn kém duy nhất nhưng vẫn chưa làm; mốc va chạm, nơi toàn bộ thứ tự phân tích v3 dựa vào, chính xác 98,5% trên clip ngắn nhưng chỉ 50% trên clip dài của KB, sai số trung vị 4,64 giây, chưa được đo lại trên clip dài từ khi triển khai cách tiếp cận theo ứng viên; bộ từ vựng không biểu diễn được trạng thái dừng rồi đi hoặc thứ tự sự kiện; một số bảo đảm ở chương 4 chưa thực sự được cưỡng chế — xem các điều kiện bất biến bên dưới.

결함defectthiếu sót
판정adjudicationphán định트리가 백트래킹하지 않는다The walk does not backtrackQuá trình duyệt không quay lui — 잘못 내려가면 그 판독 안에서 복구 불가Nếu rẽ sai thì không thể phục hồi trong lần phân tích đó
판정adjudicationphán định형제 도표 구분이 주 약점Sibling separation is the main weaknessPhân biệt các nút cùng cấp là điểm yếu chính — 선후행·진입 방향·차로. 두 사정사 모두 오판 32건 중 14건14 of the 32 agreed misses14 trong 32 trường hợp sai đã thống nhất
판정adjudicationphán định어휘 공백Vocabulary gapThiếu từ vựng G-1 — 7컬럼 밖의 사실로 갈리는 계열은 분리 불가. 판정자가 그 사실을 받지도 못한다Không phân biệt được các nhóm phụ thuộc dữ kiện ngoài 7 cột. Bộ phán định thậm chí không nhận được dữ kiện đó
측정measurementđo lường상대차 id 단위 정확도가 채점되지 않았다Counterpart id accuracy is unscoredChưa chấm độ chính xác nhận dạng xe đối phương — 트랙은 운영에 쓰인다Các quỹ đạo vẫn được dùng trong vận hành
데이터datadữ liệu인쇄본 대조는 한 계열만The printed-standard audit covered one familyKiểm toán tiêu chuẩn in chỉ bao phủ một nhóm — 게다가 visus는 크롤링본을 쓴다Hơn nữa, visus dùng dữ liệu thu thập từ web
플랫폼platformnền tảng워커를 둘 이상 못 돌린다Cannot run more than one workerKhông thể chạy nhiều hơn một worker — facts.jsonl writer 6개Có 6 tiến trình ghi
문서documentationtài liệumaster 176 커밋 뒤처짐 · ARCHITECTURE.md 09-23 기준 · README.md 낡음(아직 옛 채팅 표면을 설명)master is 176 commits behind · ARCHITECTURE.md is stamped 09-23 · README.md is stale (it still describes the old chat surface)master chậm 176 commit · ARCHITECTURE.md ghi ngày 09-23 · README.md đã lỗi thời (vẫn mô tả giao diện chat cũ)

7.3다음에 할 일 · What to do next · Việc cần làm tiếp

In priority order: fix the confusion first (fast-forward or archive master, refresh the architecture doc, rewrite the README). Then the single largest gap reachable without a better model or more data — the judge discards what the tree got right, on 57 readings per arm, where the tree was right 43 times and the verdict 2–3. Nobody has started on it. Then widen the input, which is the only direct attack on missing evidence and is now unblocked because all of KB's exported clips are in S3. Then the measurements that were coded and never run.

Theo thứ tự ưu tiên: trước hết dọn sự nhầm lẫn (fast-forward hoặc lưu trữ master, cập nhật tài liệu kiến trúc, viết lại README). Tiếp đến là khoảng cách lớn nhất có thể thu hẹp mà không cần mô hình tốt hơn hay thêm dữ liệu: bộ phán định bỏ đi kết quả đúng của cây, trong 57 lần phân tích ở mỗi nhánh thử nghiệm, cây đúng 43 lần nhưng kết luận chỉ đúng 2–3 lần. Chưa ai bắt đầu xử lý. Sau đó mở rộng đầu vào — cách trực tiếp duy nhất để giải quyết thiếu bằng chứng; hiện đã có thể làm vì toàn bộ clip xuất từ KB đã nằm trong S3. Cuối cùng là những phép đo đã viết mã nhưng chưa chạy.

할 일to doviệc cần làm
즉시immediatelyngay lập tứcmaster를 stage로 전진시키거나 아카이브로 명시 · ARCHITECTURE.md를 stage 기준으로 갱신 · README.md 다시 쓰기Fast-forward or archive master; refresh the architecture doc; rewrite the READMEFast-forward hoặc lưu trữ master; cập nhật tài liệu kiến trúc; viết lại README
⭐ 최우선highest priorityưu tiên cao nhất판정자가 트리의 정답을 버리고 있다The judge discards what the tree got rightBộ phán định bỏ đi kết quả đúng của cây 아무도 시작하지 않았다nobody has startedchưa ai bắt đầu
E-V-035: 트리 leaf와 최종 판정이 57건에서 다르고, 트리가 맞은 것이 43건 · 판정이 2~3건. PRESENT_UNUSED 18건(전부 보였고 전부 진술됨)과 같은 방향이다. 모델을 바꾸지 않고, 데이터를 더 모으지 않고, 지금 있는 것만으로 들여다볼 수 있는 가장 큰 단일 격차.E-V-035: nút lá của cây khác kết luận cuối trong 57 trường hợp; cây đúng 43 trường hợp, kết luận đúng 2–3 trường hợp. Cùng hướng với 18 trường hợp PRESENT_UNUSED (đều nhìn thấy và đều được nêu ra). Đây là khoảng cách lớn nhất có thể kiểm tra ngay với những gì đang có, không thay mô hình, không thu thập thêm dữ liệu.
먼저 볼 것: v2.judge의 조항 적합도 집계와 역할 결정 — E-V-035의 −8 중 −4가 「맞는 도표에서 역할이 틀린 것」이고 3건은 open role filled by the clause-count fallback로 기록돼 있다.Cần xem trước: cách tổng hợp mức phù hợp điều khoản và gán vai trò trong v2.judge — trong mức −8 của E-V-035, −4 là “đúng biểu đồ nhưng sai vai trò”; 3 trường hợp được ghi là vai trò chưa xác định bị điền bằng cơ chế dự phòng đếm điều khoản.
The largest single gap reachable without a better model or more data. Start at the clause-fit tally and the role binding in v2.judge.Khoảng cách lớn nhất có thể thu hẹp mà không cần mô hình tốt hơn hay thêm dữ liệu. Bắt đầu từ cách tổng hợp mức phù hợp điều khoản và gán vai trò trong v2.judge.
✅ 그리고 그 역할 문제는 이제 책의 데이터로 확인되었다(§8.7): 역할 둘 다 있는 차 도표 104개 중 7개는 A와 B가 오직 「신호」와 「좌·우 도로」에서만 다른데, v2.py:1396이 바로 그 두 부류를 신뢰도에서 뺀다 → 차1-1(기본 0:100)에서 신호를 못 읽으면 「고객차 과실 0%, 신뢰도 0.8」이 나간다. 나머지 여섯은 차1-3 · 차1-5 · 차12-1 · 차17-1 · 차20-1 · 차21-1.✅ Vấn đề vai trò nay đã được xác nhận bằng dữ liệu trong sách (§8.7): trong 104 biểu đồ ô tô có đủ hai vai trò, 7 biểu đồ chỉ phân biệt A và B bằng “tín hiệu” và “đường bên trái/phải”, nhưng v2.py:1396 lại loại đúng hai nhóm này khỏi phép tính độ tin cậy. Vì vậy, ở biểu đồ 차1-1 (tỷ lệ cơ bản 0:100), khi không đọc được tín hiệu, hệ thống trả về “xe khách hàng chịu lỗi 0%, độ tin cậy 0.8”. Sáu biểu đồ còn lại: 차1-3 · 차1-5 · 차12-1 · 차17-1 · 차20-1 · 차21-1.
🚨 같은 자리에 두 번째 실패가 겹친다 — reader_tree.py:919는 카메라 방향이 판단 불가면 조용히 전방으로 간다. 후방이면 좌/우가 뒤집히고, 위 7개 중 4개가 좌·우 도표다.🚨 Một lỗi thứ hai chồng lên ngay vị trí đó: reader_tree.py:919 âm thầm mặc định camera trước khi không xác định được hướng camera. Với camera sau, trái/phải bị đảo; 4 trong 7 biểu đồ trên phân biệt đường trái/phải.
E-V-035의 수정 후보 (2)가 이것을 그대로 적어 두었다: "close an open role on the A/B separating clause instead of clause counts." 추측이 아니라 이미 합의된 다음 작업이다.Phương án sửa (2) của E-V-035 đã ghi đúng việc này: “chốt vai trò còn mở bằng điều khoản phân biệt A/B thay vì đếm điều khoản.” Đây là việc tiếp theo đã thống nhất, không phải phỏng đoán.
입력inputđầu vào입력을 넓힐 것 — ①(증거 누락)을 정면으로 공격하는 유일한 길Widen the input — the only direct attack on missing evidenceMở rộng đầu vào — cách trực tiếp duy nhất để giải quyết thiếu bằng chứng
✅ 그리고 자료는 지금 있다 — KB 반출본 전체가 S3에 있고, 약 2,600편은 비식별을 다시 하지 않고 바로 쓸 수 있다 (2026-10-19 확인).
1단계, 지금 있는 자료를 더 받기: 후방 카메라(v3가 이미 카메라 방향을 판정하고 규칙으로 좌우를 뒤집는다 — 토대는 있다) · 상대차 촬영분(kb_flip이 일회성으로 이미 한다 → 정식 입력 경로로 올리고, 업로드 때 「누구의 카메라인가」를 묻기) · 충돌이 화면 밖(KB 플래그로 86/300)
✅ Dữ liệu hiện đã có: toàn bộ clip xuất từ KB nằm trong S3; khoảng 2.600 clip có thể dùng ngay, không cần ẩn danh lại (xác nhận ngày 2026-10-19).
Bước 1, nhận thêm dữ liệu đang sẵn có: camera sau (v3 đã xác định hướng camera và đảo trái/phải theo quy tắc — đã có nền tảng) · video từ xe đối phương (kb_flip đã xử lý riêng một lần; cần đưa thành luồng đầu vào chính thức, hỏi “camera của ai?” khi tải lên) · va chạm ngoài khung hình (86/300 theo cờ KB)

2단계, 여러 출처: 고객차 전방+후방 · 양쪽 당사자의 블랙박스(상대 쪽 신호는 전방 단안으로 구조적으로 안 보인다) · 제3자·CCTV · 구조화된 출동 설문 · 정밀 지도·신호 주기Bước 2, nhiều nguồn: camera trước và sau của xe khách hàng · camera hành trình của cả hai bên (camera trước đơn mắt về bản chất không nhìn được tín hiệu phía đối phương) · bên thứ ba/CCTV · phiếu khảo sát hiện trường có cấu trúc · bản đồ chi tiết/chu kỳ đèn tín hiệu
Carry the kb_flip lesson into the product: don't change the system — record the input's point of view. Once "whose camera is this" is a property of the case, the existing rules handle the rest.Đưa bài học kb_flip vào sản phẩm: ghi lại góc nhìn của đầu vào. Khi “camera của ai?” trở thành thuộc tính hồ sơ, các quy tắc hiện có sẽ xử lý phần còn lại.
측정measurementđo lườngE-V-008 조항 적합도 (코드는 있다) · E-V-005 도구별 정확도 · E-V-009b highlight 검증E-V-008 clause fit (the code exists) · E-V-005 per-tool accuracy · E-V-009b highlight validationE-V-008: mức phù hợp điều khoản (đã có mã) · E-V-005: độ chính xác từng công cụ · E-V-009b: xác thực đoạn đánh dấu
정확도accuracyđộ chính xác어휘 공백(G-1) 메우기 · 집중 개선 5개 도표 · 충돌 시점 자동 검출과 궤적 추적 강화Close G-1; the five weak charts; stronger impact and trajectory measurementKhép G-1; xử lý năm biểu đồ yếu; cải thiện phép đo va chạm và quỹ đạo
구조structurecấu trúc스토어를 authoritative하게 (워커 2개 이상의 전제) · 트리 백트래킹Make the store authoritative; tree backtrackingBiến kho lưu trữ thành nguồn có thẩm quyền; bổ sung quay lui khi duyệt cây
파일럿pilotthử nghiệm thực tế운영 가능한 11개 도표부터 4~8주, 실제 신규 사건에. 측정: 무수정 확정률, 처리 시간, 합의 비율과 제시 범위의 차이4–8 weeks on the 11 ready charts, measuring unedited-confirmation rate and time per case4–8 tuần với 11 biểu đồ đã sẵn sàng, đo tỷ lệ xác nhận không sửa và thời gian mỗi hồ sơ

⭐⭐ 만들기 전에 달라고 할 것 — 좌표 하나와 도로등급 하나가 가장 큰 지렛대다⭐⭐ Ask for it before building it — one coordinate and one road class are the biggest levers on the list⭐⭐ Hỏi trước khi xây — một tọa độ và một loại đường là hai đòn bẩy lớn nhất trong danh sách

이 문서가 적은 기하 오차 예산 전체에서 가장 큰 두 항은 모델로 줄이는 것이 아니라 물어보면 사라진다.

Across the whole geometry error budget this document records, the two largest terms are not reduced by a better model — they disappear if you ask.

Trong toàn bộ ngân sách sai số hình học được ghi nhận ở tài liệu, hai thành phần lớn nhất không giảm nhờ mô hình tốt hơn — chúng biến mất nếu hỏi được thông tin.

항termthành phần지금todayhiện tại도로등급만 알면knowing only the road classkhi chỉ biết loại đường
차로폭 사전분포the lane-width priorgiả định tiên nghiệm về bề rộng làn±8.5%(등급 unknown) — H ← 차로폭 경로 오차 8.9%의 거의 전부±8.5% at unknown road class — essentially all of the 8.9% on the lane-width route to H±8.5% khi loại đường là unknown — gần như toàn bộ 8.9% của cách suy ra H từ bề rộng làn2.5 – 3.8%
λ (점선 주기)λ (the dash pitch)λ (chu kỳ vạch đứt)21.2% — 한국의 점선 규격이 8 · 13 · 20 m 셋인데 어느 것인지 영상에서 보이지 않는다21.2% — the Korean dash spec is 8, 13 or 20 m and which one applies is not visible in the video21.2% — quy chuẩn vạch đứt Hàn Quốc là 8, 13 hoặc 20 m, video không cho biết áp dụng loại nào등급이 규격을 결정한다the class settles the specloại đường xác định quy chuẩn

⚠️ 그리고 42편 중 12편이 지금 unknown 등급이다. 보험사의 사고 접수 파일에는 사고 장소가 있다. 온톨로지가 이미 그렇게 적어 두었다 — 「사고 위치를 반경 50 m로만 받아도 map/*이 살아나고, 13개 슬롯이 추정에서 조회로 바뀐다」(아래 자료 층 표는 map/* 12슬롯으로 센다 — 온톨로지와 한 칸 차이가 나고, 어느 쪽이 맞는지는 기록에 없다). 좌표를 요청하는 것은 CV 문제가 아니라 업무 문제이고, 목록에서 가장 지렛대가 큰 항목이다.

⚠️ And 12 of 42 clips currently carry an unknown road class. The insurer's claim file has the accident location. The ontology already says so: "take the accident location to within 50 m and map/* comes alive — 13 slots turn from estimation into lookup." (the data-layer table below counts 12 map/* slots — one apart from the ontology, and the record does not say which is right) Asking for a coordinate is a business question, not a CV problem, and it is the highest-leverage item on the list.

⚠️ Hiện 12 trong 42 clip có loại đường unknown. Hồ sơ bồi thường của bảo hiểm có vị trí tai nạn. Mô hình khái niệm đã ghi: “có vị trí tai nạn chính xác trong 50 m thì map/* hoạt động — 13 trường chuyển từ ước lượng sang tra cứu.” (Bảng lớp dữ liệu bên dưới đếm 12 trường map/*, lệch một trường so với mô hình khái niệm; hồ sơ không xác định số nào đúng.) Xin tọa độ là câu hỏi nghiệp vụ, không phải bài toán CV; đây là việc có tác động lớn nhất trong danh sách.

⭐ 자료 한 층을 올릴 때마다 무엇이 열리는가 — 그리고 가장 큰 변화는 정확도가 아니다what each extra data layer opens — and the biggest change is not accuracymỗi lớp dữ liệu bổ sung mở ra điều gì — thay đổi lớn nhất không nằm ở độ chính xác
+ 번인 속도계+ the burnt-in speedometer+ tốc độ hiển thị trực tiếp trên videoλ ±2.9%, 자차 속도를 직접 얻는다 — 거리·접근속도·TTC가 7배 정확해진다λ to ±2.9% and ego speed directly — distance, closing speed and TTC become 7× more accurateλ đạt ±2.9% và có tốc độ xe gắn camera trực tiếp — khoảng cách, tốc độ tiếp cận và TTC chính xác hơn 7 lần
+ GPS+ GPS+ GPS절대 위치 — map/* 12슬롯이 추정 → 조회, 도로등급이 차로폭 사전분포를 8.5% → 2.5%absolute position — 12 map/* slots go from estimate to lookup, and the road class takes the lane-width prior from 8.5% to 2.5%vị trí tuyệt đối — 12 trường map/* chuyển từ ước lượng sang tra cứu; loại đường giảm sai số giả định bề rộng làn từ 8.5% xuống 2.5%
+ HD 지도+ an HD map+ bản đồ HD차선 종류·정지선·교차로 기하 — 막혀 있던 cv/lane_marking 9슬롯이 열린다lane type, stop lines, junction geometry — the nine blocked cv/lane_marking slots openloại làn, vạch dừng, hình học nút giao — mở được chín trường cv/lane_marking đang bị chặn

⭐ 가장 큰 도약은 정확도가 아니라 인식론이다. 오늘 우리는 「B가 진로변경을 한 것으로 보인다, 30:70」이라고 말한다. 위치와 지도가 있으면 「B가 37.5229N 127.0384E에서 실선을 넘었고, 국토지리정보원은 그 구간을 진로변경 금지 구간으로 기록한다」가 된다. 하나는 오차막대가 붙은 의견이고, 다른 하나는 검증 가능한 사실이다 — 그리고 §4.7의 협의 화면이 사정사에게 내밀어야 하는 것이 바로 후자다.

⭐ The biggest jump is not accuracy, it is epistemics. Today we say "B appears to have changed lanes, 30:70." With location and a map it becomes "B crossed a solid line at 37.5229N 127.0384E, which the national mapping agency records as a no-lane-change section." One is an opinion with an error bar; the other is a checkable fact — and the latter is what the negotiation screen in §4.7 has to put in front of an adjuster.

⭐ Bước nhảy lớn nhất nằm ở cơ sở để biết một điều là đúng. Hiện ta nói “Có vẻ B đã chuyển làn, 30:70.” Với vị trí và bản đồ, có thể nói “B vượt vạch liền tại 37.5229N 127.0384E, vị trí mà cơ quan bản đồ quốc gia ghi nhận là đoạn cấm chuyển làn.” Câu đầu là nhận định có biên sai số; câu sau là sự thật kiểm chứng được — và đó là điều giao diện thương lượng ở §4.7 phải trình bày cho giám định viên.

⚠️ 다만 위치로 얻을 수 있는 것의 한계도 측정돼 있다 — 「어느 도로」는 되고 「어느 차로」는 안 된다but the ceiling of what location buys is measured too — it answers "which road", never "which lane"giới hạn của thông tin vị trí cũng đã được đo — biết “đường nào”, không biết “làn nào”

hd-map이 2026-08-26에 잰 것이다. 도심 GPS 오차가 차로폭 3.5 m를 넘기 때문에, 「어느 도로인가」는 사실상 완벽하게(95~99%) 답하고 「어느 차로인가」는 답하지 못한다(3 m에서 82.5%, 8 m에서 43.2%). 같은 실행의 자료 주의 둘: maxspeed가 모든 링크에서 null이라 지도 기반 과속 수정요소는 시도해 보기도 전에 막힌다. 그리고 「2025년」 빌드는 실제로 2022-09 조사 + 2024-12 부분 재조사이므로, 영상과 지도가 어긋나면 updatedate를 먼저 볼 것.

Measured by hd-map on 2026-08-26. Because urban GPS error exceeds the 3.5 m lane width, it answers "which road" essentially perfectly (95–99%) and cannot answer "which lane" (82.5% at 3 m, 43.2% at 8 m). Two data caveats from the same run: maxspeed is null on every link, which kills any map-based speeding modifier before it is attempted; and the "2025" build is really a 2022-09 survey with a partial 2024-12 re-survey, so when the footage disagrees with the map, check updatedate first.

hd-map đã đo ngày 2026-08-26. Vì sai số GPS đô thị lớn hơn bề rộng làn 3.5 m, nó trả lời gần như hoàn hảo “đường nào” (95–99%) nhưng không trả lời được “làn nào” (82.5% ở 3 m, 43.2% ở 8 m). Hai lưu ý dữ liệu cùng lần đo: maxspeed là null ở mọi liên kết đường, khiến mọi yếu tố tăng lỗi chạy quá tốc độ dựa vào bản đồ không thể thực hiện ngay từ đầu; bản dựng mang tên “2025” thực chất là khảo sát 2022-09, cập nhật một phần bằng khảo sát lại 2024-12, nên nếu video khác bản đồ, kiểm tra updatedate trước.

7.4불변식 — 지켜지는 것과 지켜지지 않는 것 · Invariants: enforced vs merely intended · Điều kiện bất biến: được cưỡng chế hay mới là dự định

✅ 코드 확인 · stageverified in the code · stageđã kiểm tra trong mã · stage

이 목록은 원래 「절대 깨지 말아야 할 것」 하나였다. 코드를 열어 보니 여러 개가 강제되지 않는다. 의도와 강제를 섞어 두면 후임자가 없는 보호를 믿는다 — 그래서 둘을 갈랐다.

This was one list. Read against the code, several of them are not enforced — and a handover that mixes intent with enforcement leaves you trusting a guard that isn't there.

Trước đây tất cả nằm chung một danh sách. Đối chiếu mã cho thấy một số điều chưa được cưỡng chế; tài liệu bàn giao trộn lẫn ý định với cơ chế thực thi sẽ khiến bạn tin vào hàng rào chưa tồn tại.

✅ 코드가 실제로 강제하는 것Actually enforcedĐược cưỡng chế thực sự

Seven guarantees that the code genuinely enforces: an analysis is immutable and a re-run creates a new row; percentage points come only from the book, and chat refuses to set them; ratios are clamped to 0–100; publishing a notice is blocked by the lint and the API returns 409; the public notice is a frozen snapshot served through a presigned redirect, with the bucket and key stripped; the 180-second cap applies in both the worker and the browser; and the product and research schemas are separate.

Bảy bảo đảm được mã thực sự cưỡng chế: bản phân tích là bất biến, chạy lại tạo hàng mới; điểm phần trăm chỉ lấy từ sách, chat từ chối tự đặt; tỷ lệ bị giới hạn trong 0–100; bộ lint chặn xuất bản thông báo, API trả 409; thông báo công khai là bản chụp cố định, phục vụ qua chuyển hướng URL ký sẵn, đã bỏ bucket và key; giới hạn 180 giây áp dụng cả ở worker lẫn trình duyệt; schema sản phẩm và nghiên cứu được tách riêng.

분석은 불변analyses are immutablebản phân tích là bất biến매 잡이 새 행 worker.py:496 · 복제는 새 id service.py:383every job inserts a new row (worker.py:496) · a clone gets a new id (service.py:383)mỗi tác vụ chèn hàng mới (worker.py:496) · bản sao có ID mới (service.py:383)
%p는 책에서만points come only from the bookđiểm chỉ lấy từ sách채팅이 points를 거부 negotiation.py:779 · _op_fields에 amount 없음chat refuses to set points (negotiation.py:779) · _op_fields has no amount keychat từ chối tự đặt điểm (negotiation.py:779) · _op_fields không có khóa amount
0~100 클램프clamped to 0–100giới hạn trong 0–100negotiation.py:338
발행은 린트에 막힌다publishing is blocked by the lintbộ lint chặn xuất bảnNoticeLintError → API 409 api.py:1013
공개 안내문은 스냅샷the public notice is a snapshotthông báo công khai là bản chụp cố định검토 시점에 동결 notice_ledger.py:1443, 버킷·키 제거 후 302 presignedfrozen at review time (notice_ledger.py:1443); bucket and key are stripped and it goes out as a 302 presigned URLđóng băng lúc duyệt (notice_ledger.py:1443); bỏ bucket và key, trả URL ký sẵn qua chuyển hướng 302
180초 상한the 180-second capgiới hạn 180 giây워커와 브라우저 양쪽. 🗣 다만 이 값은 제품 제약이 아니라 선별한 300건을 보고 정한 관찰값이다 — 확정된 것이 없으니 긴 클립을 받으려면 바꿔도 된다 (0장). E-V-034에서 180초 클립 하나가 여기 걸려 유실됐다in both the worker and the browser. 🗣 But this number is an observation from the screened 300, not a product constraint — nothing is settled, so if you accept longer clips you may change it (ch.0). One 180-second clip was already lost to it in E-V-034áp dụng cả worker lẫn trình duyệt. 🗣 Nhưng con số này là quan sát từ 300 clip đã sàng lọc, không phải ràng buộc sản phẩm — chưa có kết luận cuối; có thể đổi khi chấp nhận clip dài hơn (chương 0). E-V-034 đã mất một clip 180 giây vì giới hạn này
두 스키마 분리the two schemas are kept aparthai schema được tách riêngvisus_app / visus

🚨 의도일 뿐, 강제되지 않는 것Intended, not enforced — the most important correction in this documentMới là dự định, chưa được cưỡng chế — đính chính quan trọng nhất trong tài liệu

Nine things this project believed were enforced and are not. The two that matter most: "who is stamped by the system, a model cannot claim it" holds on the chat path only — on the reading path a model-supplied who survives, and the human-lock list is a single string a reader can emit. And "a read-tier fact may not be narrated to the customer" is bypassed whenever the source is the adjuster, which also happens to unconfirmed read-tier rows. Beyond those: a ratio can be stored as a single integer, an adjuster can enter a number larger than the book's, a comparison run can become active on a case that has no active analysis, the lock rule is reimplemented rather than called, the public payload contains the case id and a literal "A"/"B" against its own docstring, and a block edited once by an adjuster is permanently exempt from the traceability lint.

Chín điều dự án từng tin là được cưỡng chế nhưng thực tế chưa có. Hai điều quan trọng nhất: “who do hệ thống đóng dấu, mô hình không thể tự nhận” chỉ đúng ở luồng chat — trong luồng phân tích, who do mô hình cung cấp vẫn được giữ; danh sách khóa người dùng chỉ là một chuỗi mà bộ phân tích có thể xuất ra. Và “dữ kiện tầng read không được thuật lại cho khách hàng” bị bỏ qua khi nguồn là giám định viên, kể cả các hàng tầng read chưa xác nhận. Ngoài ra: tỷ lệ có thể được lưu thành một số nguyên; giám định viên có thể nhập số lớn hơn sách; lần chạy đối chứng có thể trở thành bản phân tích đang dùng ở hồ sơ chưa có bản đang dùng; quy tắc khóa được viết lại thay vì gọi chung; dữ liệu công khai chứa ID hồ sơ và chuỗi “A”/“B”, trái với docstring; khối đã được giám định viên sửa một lần được miễn lint truy xuất nguồn vĩnh viễn.

믿고 있던 것what we believedđiều từng tin실제what the code doesmã thực sự làm gì
「who는 시스템이 찍는다. 모델이 주장할 수 없다」"who is stamped by the system; a model cannot claim it"“who do hệ thống đóng dấu; mô hình không thể tự nhận”채팅 경로에서만 참이다. 판독 경로에서는 normalise_statement가 f.setdefault("who", who)(v2.py:358) → 모델이 넣은 값이 살아남고 그대로 저장된다(worker.py:383). 그리고 HUMAN_LOCK = ("adjuster",) — 판독기가 who:"adjuster"를 내면 사람 잠금을 획득한다True on the chat path only. On the reading path normalise_statement does f.setdefault("who", who) (v2.py:358), so a model-supplied value survives and is stored as-is (worker.py:383). And HUMAN_LOCK = ("adjuster",) — a reader that emits who:"adjuster" acquires the human lockChỉ đúng ở luồng chat. Trong luồng phân tích, normalise_statement gọi f.setdefault("who", who) (v2.py:358), nên giá trị mô hình đưa vào vẫn tồn tại, được lưu nguyên trạng (worker.py:383). HUMAN_LOCK = ("adjuster",) — bộ phân tích xuất who:"adjuster" sẽ nhận được khóa dành cho người dùng
「read 등급은 고객에게 서술될 수 없다」"a read-tier fact may not be narrated to the customer"“dữ kiện tầng read không được thuật lại cho khách hàng”아니다. _narratable은 source=="adjuster" 또는 who in HUMAN_WHO면 등급 검사를 건너뛴다(notice_ledger.py:110). 그리고 미확정 상태에서도 tier="read" 행이 source="adjuster"로 들어간다(service.py:597)It can. _narratable skips the tier check whenever source=="adjuster" or who is in HUMAN_WHO (notice_ledger.py:110). And a tier="read" row enters case_facts with source="adjuster" even unconfirmed (service.py:597)Vẫn được. _narratable bỏ kiểm tra tầng khi source=="adjuster" hoặc who thuộc HUMAN_WHO (notice_ledger.py:110). Hàng tier="read" đi vào case_facts với source="adjuster" ngay cả khi chưa xác nhận (service.py:597)
「비율은 언제나 범위」"the ratio is always a range"“tỷ lệ luôn là một khoảng”strip은 potential 행이 없으면 range: None(negotiation.py:404), agree_negotiation은 단일 정수를 저장(service.py:766)strip returns range: None when there is no potential row (negotiation.py:404), and agree_negotiation stores a single integer (service.py:766)strip trả range: None khi không có hàng tiềm năng (negotiation.py:404); agree_negotiation lưu một số nguyên (service.py:766)
「조사자도 숫자를 발명하지 않는다」"not even the adjuster invents a number"“ngay cả giám định viên cũng không tự đặt số”_check_amount가 제한속도·음주·약물에 (1, 100)을 허용(negotiation.py:356) — 책의 값보다 큰 수를 메모만으로_check_amount allows (1, 100) for speed, alcohol and drugs (negotiation.py:356) — a number larger than the book's, on a free-text note alone_check_amount cho phép (1, 100) đối với tốc độ, cồn và ma túy (negotiation.py:356) — mức lớn hơn sách, chỉ dựa vào ghi chú văn bản tự do
「비교 런이 화면을 움직이면 안 된다」"a comparison run must not move the screen"“lần chạy đối chứng không được thay đổi nội dung đang hiển thị”가드는 맞지만(worker.py:541) 두 줄 위에서 active_analysis_id = coalesce(...) — 활성 분석이 없는 사건에서는 실험 arm도 활성이 된다the guard is right (worker.py:541), but two lines above it active_analysis_id = coalesce(...) — on a case with no active analysis, an experiment arm becomes the active oneđiều kiện bảo vệ đúng (worker.py:541), nhưng phía trên hai dòng có active_analysis_id = coalesce(...) — ở hồ sơ chưa có bản phân tích đang dùng, một nhánh thử nghiệm trở thành bản đang dùng
「확정 도표는 effective_verdict를 거친다」"a locked chart always goes through effective_verdict"“biểu đồ đã khóa luôn đi qua effective_verdict”progress.py:31-67이 같은 규칙을 복사해 다시 판단한다 — 호출이 아니라 중복 구현progress.py:31-67 copies the same rule and decides again — a duplicate implementation, not a callprogress.py:31-67 sao chép cùng quy tắc rồi quyết định lại — triển khai trùng lặp, không gọi hàm chung
「공개 페이지에 A/B 없음」"no A/B on the public page"“không có A/B trên trang công khai”_snapshot_of가 case_id와 role(문자 그대로 "A"/"B")을 공개 페이로드에 담는다(notice_ledger.py:1340) — 자기 docstring과 모순_snapshot_of puts case_id and role (the literal "A"/"B") into the public payload (notice_ledger.py:1340) — contradicting its own docstring_snapshot_of đưa case_id và role (chuỗi "A"/"B") vào dữ liệu công khai (notice_ledger.py:1340) — trái với chính docstring của hàm
「모든 문장이 출처에 묶인다」"every sentence is tied to a source"“mỗi câu đều gắn với một nguồn”추적성 린트는 에이전트 전용(:296)이고, patch_block이 한 번만 고쳐도 generated_by="adjuster"가 되어 그 블록은 영구 면제(:1009)the traceability lint is agent-only (:296), and one patch_block edit flips generated_by to "adjuster", exempting that block permanently (:1009)lint truy xuất nguồn chỉ áp dụng cho agent (:296); một lần sửa patch_block đổi generated_by thành "adjuster", miễn kiểm tra khối đó vĩnh viễn (:1009)
「facts.jsonl은 id로 upsert」"facts.jsonl upserts by id"“facts.jsonl upsert theo ID”여러 writer가 서로 다르게 동작한다 — 아래the writers behave differently — belowcác tiến trình ghi có hành vi khác nhau — xem dưới
facts.jsonl writer — 아래 표는 호출 지점 8개를 센다— the table below counts eight call sites— bảng dưới đếm tám vị trí gọi동작behaviourhành vi
chat.merge_facts✔ upsert · who 스탬프 · 역전 거부✔ upsert · stamps who · refuses a reversal✔ upsert · đóng dấu who · từ chối đảo ngược
v2.merge_chat_statements✔ upsert + 잠금✔ upsert + lock✔ upsert + khóa
v2.merge_statementsupsert — 스탬프 없음, 잠금 없음upsert — no stamp, no lockupsert — không đóng dấu, không khóa
free._merge_factsupsert — 스탬프 없음, 잠금 없음upsert — no stamp, no lockupsert — không đóng dấu, không khóa
loop파일 통째로 덮어쓰기overwrites the whole fileghi đè toàn bộ tệp
store.pull_run통째로 덮어쓰기 + 6개 컬럼 유실 (statement·origin·basis·turn·retracted·corrected_from)overwrites the whole file and loses six columns (statement · origin · basis · turn · retracted · corrected_from)ghi đè toàn bộ tệp, mất sáu cột (statement · origin · basis · turn · retracted · corrected_from)
materialise_case통째로 덮어쓰기 (뷰로서는 맞음)overwrites the whole file (correct, as a view)ghi đè toàn bộ tệp (đúng, vì đây là dạng xem)
worker.build_workspaceappend 전용 — id 중복 제거 없음append only — no de-duplication by idchỉ nối thêm — không loại trùng theo ID

V-D24가 「writer 여섯을 하나로 모으는 것이 워커 2개의 전제 조건」이라고 적은 것은 디스크 문제가 아니라 이것이다. 실제로는 여섯(원장) · 일곱(이 문서의 이전 셈) · 여덟(위 표의 호출 지점)으로 셈이 갈리고, 그중 셋은 데이터를 잃는다. 파일에 직접 쓰는 곳만 세면 origin/stage에 다섯이다 — chat · engines/v2 · loop · service · store.

V-D24's "unify the writers before a second worker" is not about disk. The ledger says six, this document counted seven, and the table above enumerates eight call sites — three of which lose data. Counting only the places that write the file directly, origin/stage has five: chat, engines/v2, loop, service and store; the rest reach disk through those.

Yêu cầu “thống nhất các tiến trình ghi trước khi thêm worker thứ hai” trong V-D24 không nói về ổ đĩa. Sổ ghi chép nói sáu, tài liệu từng đếm bảy, bảng trên liệt kê tám vị trí gọi — ba vị trí làm mất dữ liệu. Chỉ tính nơi ghi tệp trực tiếp thì origin/stage có năm: chat, engines/v2, loop, service và store; các nơi còn lại ghi xuống đĩa thông qua chúng.

그 밖에 조용히 삼켜지는 것Other things swallowed in silenceNhững lỗi khác bị nuốt âm thầm

Four silent failure modes worth knowing before you debug anything. Confirming a fact can fail to update the verdict and say nothing — both the activity log and the re-derivation are swallowed. One function that reads like a decision ignores both its arguments and always returns the same engine. The "is a job running?" check has a 30-minute window, so reset and delete treat a long-queued job as not running — a long analysis can be deleted out from under a live worker, which then writes facts to a case that no longer exists. And a constant that caps stacked gross-negligence reasons at 20 is the book's rule with no comment explaining it: the easiest number in the codebase for a newcomer to "fix".

Bốn kiểu lỗi âm thầm cần biết trước khi gỡ lỗi. Xác nhận dữ kiện có thể không cập nhật kết luận mà không báo gì — cả nhật ký hoạt động lẫn bước suy ra lại đều bị nuốt lỗi. Một hàm có vẻ đưa ra quyết định thực chất bỏ qua cả hai tham số, luôn trả cùng engine. Kiểm tra “tác vụ có đang chạy không?” dùng cửa sổ 30 phút, nên thao tác đặt lại/xóa xem tác vụ chờ lâu là không chạy — bản phân tích dài có thể bị xóa khi worker vẫn hoạt động, rồi worker ghi dữ kiện vào hồ sơ không còn tồn tại. Một hằng số giới hạn tổng các lý do sơ suất nghiêm trọng ở 20 là quy tắc của sách nhưng không có chú thích: đây là con số dễ bị người mới “sửa” nhầm nhất.

  • 사실 확정이 판정을 갱신하지 못해도 조용하다 — service.py:617-621이 활동 로그와 derive_verdict를 둘 다 삼킨다 → 확정했는데 판정이 낡은 채로 남을 수 있다a fact confirmation can fail to update the verdict, silently — service.py:617-621 swallows both the activity log and derive_verdict, so you can confirm a fact and leave the verdict stalexác nhận dữ kiện có thể âm thầm không cập nhật kết luận — service.py:617-621 nuốt lỗi cả nhật ký hoạt động lẫn derive_verdict; xác nhận xong vẫn có thể giữ kết luận cũ
  • _judging_engine(service.py:866)은 인자 둘을 무시하고 무조건 "v2"를 반환한다 — 결정처럼 읽히는 죽은 파라미터_judging_engine (service.py:866) ignores both its arguments and always returns "v2" — a dead parameter that reads like a decision_judging_engine (service.py:866) bỏ qua cả hai tham số, luôn trả "v2" — tham số vô tác dụng khiến hàm trông như đang quyết định
  • 🚨 _running_job의 30분 창(service.py:292) — reset_case·delete_case가 30분 넘게 큐에 있던 잡을 「실행 중 아님」으로 본다. 긴 분석이 살아 있는 워커 밑에서 삭제될 수 있고, 워커는 이미 없는 사건에 사실과 자산을 쓴다🚨 _running_job's 30-minute window (service.py:292) — reset_case and delete_case treat a job queued for more than 30 minutes as "not running". A long analysis can be deleted out from under a live worker, which then writes facts and assets to a case that no longer exists🚨 cửa sổ 30 phút của _running_job (service.py:292) — reset_case và delete_case xem tác vụ chờ hơn 30 phút là “không chạy”. Bản phân tích dài có thể bị xóa khi worker vẫn đang hoạt động; sau đó worker ghi dữ kiện và tài sản vào hồ sơ đã biến mất
  • HYUNJEO_STACK_CAP = 20(negotiation.py:49) — 현저한 과실 사유를 합산되지 않게 하는 책의 규칙인데 어디에도 설명이 없다. 모르는 후임자가 「버그」로 고치기 가장 쉬운 숫자다HYUNJEO_STACK_CAP = 20 (negotiation.py:49) — the book's rule that gross-negligence reasons do not stack past 20, with no comment anywhere. The easiest number in the codebase for a newcomer to "fix"HYUNJEO_STACK_CAP = 20 (negotiation.py:49) — quy tắc trong sách: các lý do sơ suất nghiêm trọng không cộng vượt 20, không có chú thích ở đâu. Con số dễ bị người mới “sửa” nhầm nhất trong mã

7.5🚨 끝내 정리되지 않은 긴장 — 당신이 물려받는 것 · Tensions that were never resolved · Những mâu thuẫn chưa được giải quyết

아래는 버그가 아니라 서로 모순되는 결정들이고, 전부 기록에 살아 있다. 어느 쪽이 맞는지 정해진 적이 없다.

These are not bugs. They are decisions that contradict each other, all of them live in the record, none of them settled.

Đây là các quyết định trái nhau, tất cả đều có trong hồ sơ nhưng chưa quyết định nào được phân xử dứt điểm.

① 자유를 줄 것인가 뺏을 것인가 — V-D7은 뒤집혔고 수정되지 않았다V-D7 was reversed in practice and never amendedV-D7 đã bị đảo ngược trong thực tế nhưng chưa được sửa

DECISIONS.md의 V-D7은 「free mode가 목표, guided mode가 대비책 — 둘 다 측정한다」고 적혀 있다. 09-30에 출하된 것은 정반대다: 여섯 단계 고정 판독에 모델이 프레임을 보기 전에 CV가 먼저 돈다. 측정도 그쪽을 지지했다 — v3 4/10 · v1 1/10 · v2 0/10.

V-D7 in DECISIONS.md reads "free mode is the goal, guided mode the fallback — measure both". What shipped on 09-30 is the opposite: a six-step fixed reading, with CV running before the model sees a single frame. The measurement supported that too — v3 4/10 · v1 1/10 · v2 0/10.

V-D7 trong DECISIONS.md ghi “chế độ tự do là mục tiêu, chế độ hướng dẫn là dự phòng — đo cả hai”. Bản phát hành ngày 09-30 làm ngược lại: phân tích cố định sáu bước, chạy CV trước khi mô hình nhìn khung hình đầu tiên. Phép đo cũng ủng hộ cách đó: v3 4/10 · v1 1/10 · v2 0/10.

그런데 만든 사람은 이것을 받아들이지 않았다 (2026-10-08):

Nhưng người tạo hệ thống không chấp nhận cách diễn giải đó (2026-10-08):

에이전트에게 자유를 주는 쪽이 더 유망하다고 보았고, 질문 원장 → 질문 플래너 → 에이전트로 온 것 자체가 그 판단이었다. 최종 보고가 반대 방향으로 읽히는 것은 그래서 그대로 받아들이기 어렵다 — 그리고 ams-demo-0, car-accident를 비롯한 선행 프로젝트가 전부 지금 visus의 이전 판본이라는 점도 함께 보아야 한다.

Giving the agent freedom was considered the more promising direction, and the path from question ledger to question planner to agent was that judgement. The final report reading the other way is therefore not simply accepted — and ams-demo-0, car-accident and the rest are all earlier versions of today’s visus.

Trao quyền tự do cho agent được xem là hướng hứa hẹn hơn; lộ trình từ sổ câu hỏi, sang bộ lập kế hoạch câu hỏi, rồi agent thể hiện đánh giá đó. Vì vậy, cách hiểu theo hướng ngược lại từ báo cáo cuối không được chấp nhận ngay — ams-demo-0, car-accident và các dự án còn lại đều là những phiên bản trước của visus hiện nay.

이 긴장은 기록 안에서 해소되지 않는다. 10-07의 「autonomous arm」 실험들이 이것을 다시 열려던 시도였다. V-D7은 지금도 원래 문장 그대로다.

The measurement favoured the fixed order. That reading was not adopted, and the reasons given are recorded with it. The tension is unresolved, and V-D7 still reads as originally written.

Phép đo nghiêng về thứ tự cố định. Cách hiểu ấy chưa được chấp nhận; lý do đã được ghi cùng kết quả. Mâu thuẫn chưa được giải quyết, V-D7 vẫn giữ nguyên văn ban đầu.

② 판단 불가를 낼 것인가, 가까운 답을 낼 것인가 — 고객이 반대쪽을 원한다The client wants an answer, not an abstentionKhách hàng muốn có câu trả lời thay vì từ chối kết luận

측정 규약 (lense/vlm, 09-01)the measurement protocol (lense/vlm, 09-01)quy trình đo (lense/vlm, 09-01)「오판정율이 오르면 일치율이 올라도 채택하지 않는다. 유보는 손해가 없고 오판정은 손해가 있으므로 두 지표는 대등하지 않다」"If the misjudgement rate rises we do not adopt it, even if agreement rises. An abstention costs nothing and a wrong call costs something, so the two are not equal."“Nếu tỷ lệ phán sai tăng thì không áp dụng, dù mức đồng thuận tăng. Không kết luận thì không mất gì; kết luận sai gây thiệt hại, hai điều không tương đương.”
고객 (09-23)the client (09-23)khách hàng (09-23)🗣 고객은 판단 불가보다 답이 보이는 쪽을 선호한다. 과정에 사람이 개입하는 것은 전제이므로, 가까운 도표라도 제시하는 편이 아무것도 주지 않는 것보다 낫다the client prefers an answer shown over 판단 불가. A human in the loop is a given, so offering the closest chart beats offering nothingkhách hàng muốn hiện câu trả lời hơn là “không thể xác định”. Luôn có người kiểm tra, nên đưa ra biểu đồ gần nhất tốt hơn không đưa gì

시스템 전체가 전자의 원칙 위에 세워져 있다 — 판단 불가는 답이고, 중립색으로 그려지고, 트리는 확신이 없으면 멈추고 묻는다. 고객은 후자를 원한다고 말했다. 이 둘을 어떻게 조정할지는 정해진 적이 없고, 파일럿에서 가장 먼저 부딪칠 자리다.

The entire system is built on the first principle. The client stated the second. Nothing reconciles them, and a pilot will hit this immediately.

Toàn bộ hệ thống được xây theo nguyên tắc thứ nhất. Khách hàng nêu nguyên tắc thứ hai. Chưa có cách dung hòa; thử nghiệm thực tế sẽ gặp vấn đề này ngay.

③ 확신도는 거꾸로 붙어 있고, 세 번 발견되었다Confidence is anti-informative — found three timesĐộ tin cậy cung cấp thông tin ngược — phát hiện ba lần

판독 슬롯readerbộ phân tíchE-V-004 (원장에 있음) — qwen3-vl: 일치 0.71 / 불일치 0.69 (fable 0.52 / 0.49). 「확신에 차서 우연 수준」E-V-004 (in the ledger) — qwen3-vl: 0.71 mean when agreeing vs 0.69 when differing (fable 0.52 / 0.49). Confidently at chance.E-V-004 (có trong sổ) — qwen3-vl: trung bình 0.71 khi đồng thuận, 0.69 khi khác biệt (fable 0.52 / 0.49). Tự tin trong khi chỉ ngang mức ngẫu nhiên.
판정 슬롯judgebộ phán địnhE-V-023 (원장에 있음) — 「Qwen은 한 번도 기권하지 않고(△0) 확신에 찬 틀린 도표 셋을 냈다 … 고객이 보는 것에 대해 최악의 실패 양식」E-V-023 (in the ledger) — "Qwen never declines (△0), committing to three confident wrong charts … the worst failure mode for something a customer sees"E-V-023 (có trong sổ) — “Qwen không bao giờ từ chối (△0), tự tin chọn ba biểu đồ sai… kiểu lỗi tệ nhất với kết quả khách hàng nhìn thấy”
🚨 운영 스택productionmôi trường vận hành2026-09-30에 같은 것이 운영 스택에서도 측정되었다 — 그리고 원장에 들어가지 않았다: 맞은 31건 평균 0.67 / 틀린 12건 평균 0.73. 「확신도로 「이건 믿어도 되고 저건 사람이 봐야 한다」를 가려낼 수가 없습니다 … 62%라는 숫자 자체보다 이쪽이 먼저 고쳐야 할 문제로 보입니다」The same thing was measured on the production stack on 2026-09-30 — and it never reached the ledger: 31 correct averaging 0.67, 12 wrong averaging 0.73. "You cannot use confidence to decide which cases a human should look at … this looks more urgent than the 62% itself"Cùng hiện tượng được đo trên hệ thống vận hành ngày 2026-09-30, nhưng chưa bao giờ vào sổ: 31 kết quả đúng có trung bình 0.67, 12 kết quả sai có trung bình 0.73. “Không thể dùng độ tin cậy để chọn hồ sơ cần người xem… việc này có vẻ cấp bách hơn chính mức 62%”

고쳐졌다는 증거가 없다. 그리고 §8.7이 보여 주듯 판독 단계의 확신도는 어차피 한 번도 문턱으로 쓰이지 않는다 — 즉 지금은 해롭지 않지만, 쓰려고 하는 순간 해로워진다. 「확신도가 낮으면 사람에게 보낸다」는 가장 자연스러운 다음 기능이 이 보정 문제를 먼저 풀지 않으면 역효과를 낸다.

No evidence it was fixed. And because the reader's confidences are never thresholded (§8.7), the defect is currently harmless — and becomes harmful the moment anyone uses them. "Route low-confidence cases to a human" is the obvious next feature, and it will work backwards until this is fixed.

Chưa có bằng chứng đã sửa. Vì độ tin cậy của bộ phân tích chưa được dùng làm ngưỡng (§8.7), hiện thiếu sót này chưa gây hại — nhưng sẽ gây hại ngay khi ai đó dùng đến. “Chuyển hồ sơ độ tin cậy thấp cho người xử lý” là tính năng tiếp theo dễ nghĩ tới, nhưng sẽ hoạt động ngược cho đến khi sửa được vấn đề.

④ 물어봤고, 13일 뒤에 답이 나왔다A question asked, answered 13 days laterMột câu hỏi được trả lời sau 13 ngày

2026-10-02 — 첫 분석 실행과 판정자가 왜 서로 다른 답을 내는가. 같은 판독에 대해서라면 1차 실행과 2차 실행이 일치해야 한다. 중간에 엔진이 바뀐 것이라면, 어딘가 깨뜨린 것은 아닌가.

2026-10-02 — why the first analysis run and the decider do not agree. Against the same reading, the first and second runs should match. If the engine changed along the way, something may have been broken. It was deferred in the same session.

2026-10-02 — vì sao kết quả phân tích đầu tiên khác bộ quyết định. Với cùng kết quả đọc, lần chạy thứ nhất và thứ hai phải giống nhau. Nếu engine thay đổi giữa chừng, có thể đã hỏng chỗ nào đó. Việc này bị hoãn ngay trong phiên.

✅ 답은 E-V-035(2026-10-15)에 있다 — 트리가 도달한 leaf와 최종 판정이 arm당 57건에서 다르고, 트리가 맞은 것이 43건 · 판정이 맞은 것이 2~3건. 즉 엔진이 깨진 것이 아니라, 판정 단계가 트리의 정답을 버리고 있었다. §7.3의 최우선 항목이 바로 이것이고, 아무도 손대지 않았다.

The answer is in E-V-035: the tree's leaf and the final verdict differ on 57 readings per arm, and the tree is right 43 times to the verdict's 2–3. Nothing is broken upstream — the judge is discarding what the tree got right.

Câu trả lời nằm ở E-V-035: nút lá của cây khác kết luận cuối ở 57 lần phân tích mỗi nhánh thử nghiệm; cây đúng 43 lần, kết luận đúng 2–3 lần. Phía trước không hỏng — bộ phán định đã bỏ đi điều cây làm đúng.

7.6자산 목록 · What exists, and where · Tài sản hiện có và vị trí

Everything is under the smt-privacy organisation. Two warnings. lense is finished as a project but its CV code still runs — vendored inside visus, not cloned beside it; the warning below the table corrects an earlier version of this line. And the standard's text is licensed through KB as a KNIA member firm: the source PDF is copyrighted, so keep it out of anything public.

Tất cả thuộc tổ chức smt-privacy. Hai lưu ý: dự án lense đã kết thúc nhưng mã CV vẫn chạy — được đưa thẳng vào visus, không clone bên cạnh; cảnh báo dưới bảng đính chính cách mô tả cũ. Quyền sử dụng văn bản tiêu chuẩn được cấp thông qua KB, một công ty thành viên KNIA: PDF nguồn có bản quyền, không đưa vào tài sản công khai.

레포repokho mã내용whatnội dung
smt-privacy/visus제품. Python 46k + TS 16k. stage 브랜치The product. Work on stage.Sản phẩm. Làm việc trên stage.
smt-privacy/lense전임 파이프라인. 856 커밋, 문서 920 KB. CV 체인은 아직 살아 있는 의존성The predecessor — and still a live dependency for the CV chainTiền thân — vẫn là phụ thuộc đang dùng của chuỗi CV
smt-privacy/knia-api책 크롤러 — data/knia/*.json을 재생성the crawler that regenerates the bookbộ thu thập web tái tạo dữ liệu sách
smt-privacy/CarAccident물려받은 규칙 엔진 — 사실 → 비율(§2.2)inherited rule engine — facts → ratio (§2.2)engine quy tắc được kế thừa — dữ kiện → tỷ lệ (§2.2)
smt-privacy/나머지 18개the other 1818 kho còn lạiknia-analysis · acci-vlm · ams-demo-0 · blackbox-pi · knia-dag · resolve-questions · new-knia · question-ledger · vlm · vlm2 · fault-lab · labeling · entry-signal-bench · ams-1080 · cv-processing · hd-map · lane-detection · LATRknia-analysis, acci-vlm, ams-demo-0, blackbox-pi, knia-dag, resolve-questions, new-knia, question-ledger, vlm, vlm2, fault-lab, labeling, entry-signal-bench, ams-1080, cv-processing, hd-map, lane-detection, LATRknia-analysis, acci-vlm, ams-demo-0, blackbox-pi, knia-dag, resolve-questions, new-knia, question-ledger, vlm, vlm2, fault-lab, labeling, entry-signal-bench, ams-1080, cv-processing, hd-map, lane-detection, LATR
smt-privacy/visus-handoff이 문서this documenttài liệu này
⚠️ 보정 — 이 표는 두 개의 없는 조직을 가리키고 있었다correction — this table pointed at two organisations that do not existđính chính — bảng này từng trỏ đến hai tổ chức không tồn tại

앞선 판은 mythndevil/CarAccident와 ian-park-ctx/*로 적고 있었다. 둘 다 열리지 않는다 — 확인해 보면 다섯 레포 전부 smt-privacy에 있다. 바로 위 문장이 「전부 smt-privacy에 있다」고 말하는데 표가 그것과 어긋나 있었다. 지금은 23개 전부가 smt-privacy 아래 있다.

An earlier version listed mythndevil/CarAccident and ian-park-ctx/*. Neither resolves — checked against GitHub, all five live under smt-privacy. The sentence directly above the table already said everything was under smt-privacy, and the table contradicted it. All 23 repositories are under smt-privacy today.

Bản cũ liệt kê mythndevil/CarAccident và ian-park-ctx/*. Cả hai đều không truy cập được; kiểm tra GitHub cho thấy cả năm đều thuộc smt-privacy. Câu ngay trên bảng đã nói mọi thứ thuộc smt-privacy, nhưng bảng lại mâu thuẫn với câu đó. Hiện cả 23 kho đều thuộc smt-privacy.

주의 · watch outlưu ý

🚨 보정 — 이 경고는 낡았다. CV는 더 이상 그 클론을 필요로 하지 않는다. lense의 CV 체인은 visus/vendor/lense/에 통째로 들어와 있고(파이썬 33개 파일), visus/__init__.py가 그것을 sys.path 맨 앞에 끼워 넣는다. 그 파일이 이유까지 적어 둔다 — 「그 전에는 워커가 LENSE_ROOT를 풀어서 ~/projects/lense에서 import했고, 그래서 옆에 레포가 하나 더 없으면 배포할 수 없었다」. 게다가 tests/test_vendored_lense.py가 그 의존을 되살리면 실패하도록 지키고 있다.

⭐ 증거는 이 기계 자체다 — ~/projects/lense는 여기 존재하지 않는데 운영은 돌고 있다.

그래도 클론이 필요한 곳은 둘뿐이고, 런타임이 아니라 스크립트다: scripts/kb_stage.py:29와 scripts/kb_case.py:39가 KB 300건 코호트 파일(~/projects/lense/storage/blackbox-0915/final_300.csv)을 읽는다. 그리고 model.py:18의 .env 폴백은 2순위일 뿐이라 visus/.env가 있으면 아무 일도 일어나지 않는다(위 테스트도 이 한 건만 예외로 둔다). VISUS_USE_SYSTEM_LENSE=1로 벤더링을 끄고 시스템 lense를 쓸 수도 있다 — A/B용이다.

인정기준 원문의 사용권은 KNIA 회원사인 KB를 통해 확보되어 있다. 원본 PDF는 저작물이다 — 공개하지 말 것.

🚨 Correction — this warning is stale. The CV no longer needs that clone. lense’s CV chain is vendored into visus/vendor/lense/ (33 Python files), and visus/__init__.py inserts it at the front of sys.path. That file states the reason: "Before this, the worker resolved LENSE_ROOT on the local filesystem and imported lense out of ~/projects/lense, which meant visus could not be deployed without a second repo sitting beside it." And tests/test_vendored_lense.py fails if that dependency is reintroduced.

🚨 Đính chính — cảnh báo đã lỗi thời. CV không còn cần bản clone đó. Chuỗi CV của lense được đưa thẳng vào visus/vendor/lense/ (33 tệp Python), và visus/__init__.py chèn nó vào đầu sys.path. Lý do được ghi ngay trong tệp: “Trước đây worker tìm LENSE_ROOT trên máy rồi import lense từ ~/projects/lense, khiến visus không triển khai được nếu thiếu một kho khác nằm cạnh.” tests/test_vendored_lense.py sẽ thất bại nếu phụ thuộc đó quay lại.

⭐ This machine is the proof: ~/projects/lense does not exist here, and production is running.

⭐ Chính máy này là bằng chứng: ~/projects/lense không tồn tại ở đây, nhưng hệ thống vận hành vẫn chạy.

Two things still want the clone, and both are scripts rather than the runtime: scripts/kb_stage.py:29 and scripts/kb_case.py:39 read the KB 300-case cohort from ~/projects/lense/storage/blackbox-0915/final_300.csv. The .env fallback at model.py:18 is second in line and does nothing when visus/.env exists — the test whitelists that one file. Set VISUS_USE_SYSTEM_LENSE=1 to bypass the vendored copy and A/B against the original.

Còn hai nơi cần bản clone, đều là script chứ không phải runtime: scripts/kb_stage.py:29 và scripts/kb_case.py:39 đọc tập 300 hồ sơ KB tại ~/projects/lense/storage/blackbox-0915/final_300.csv. Cơ chế dự phòng .env ở model.py:18 là lựa chọn thứ hai, không hoạt động khi có visus/.env; kiểm thử cho phép riêng tệp này. Đặt VISUS_USE_SYSTEM_LENSE=1 để bỏ qua bản vendored và thử A/B với bản gốc.

The book’s content rights are held through KB as a KNIA member firm — the source PDF is copyrighted.

Quyền sử dụng nội dung sách được cấp thông qua KB, một công ty thành viên KNIA — PDF nguồn có bản quyền.

7.7원장에 없는 결정들 · Decisions that never reached the ledger · Các quyết định chưa từng vào sổ

Five decisions that shaped the product but never reached the decision log — they exist only in session transcripts, which is why they are written down here. Versions belong to the harness, not to the models it calls. The model menu deliberately pairs frontier models against each other and includes open-weight ones to show what KB could run internally. Authority runs chat > report > reader, because the adjuster's job is to correct what is wrong. Readings are replayed and only the judge re-run, which makes judge experiments almost free. And the engine was frozen before the demo.

Năm quyết định định hình sản phẩm nhưng chưa vào sổ quyết định — chỉ tồn tại trong bản chép phiên làm việc, nên được ghi lại ở đây. Phiên bản thuộc về harness, không phải mô hình mà nó gọi. Danh sách mô hình cố ý đặt các mô hình hàng đầu đối đầu nhau, thêm mô hình trọng số mở để cho thấy KB có thể tự vận hành gì nội bộ. Thứ bậc thẩm quyền là chat > báo cáo > bộ phân tích, vì giám định viên có nhiệm vụ sửa điều sai. Kết quả đọc được phát lại, chỉ chạy lại bộ phán định, khiến thử nghiệm phán định gần như miễn phí. Engine được đóng băng trước buổi demo.

🗣 전사에만 있다only in the transcriptchỉ có trong bản chép phiên DECISIONS.md에 V-Dn으로 올라가지 않았지만 코드와 제품에 반영된 것들Những điều đã đi vào mã và sản phẩm nhưng chưa được ghi thành V-Dn trong DECISIONS.md

결정decisionquyết định무엇인가what it isnội dung
버전은 harness의 것이다versions are the harness'sphiên bản thuộc harness09-29버전은 우리가 쓰는 모델이 아니라 harness의 것이다 — 「판독 3.4.1」이 모델이 아니라 harness의 버전인 이유versions belong to the harness, not to the models used — why "reader 3.4.1" numbers the harness and not the modelphiên bản thuộc harness, không phải mô hình được dùng — vì vậy “reader 3.4.1” đánh số harness chứ không đánh số mô hình
모델 선택지의 구성 원칙how the model list is chosencách chọn danh sách mô hình09-29claude(fable·opus 5.5) · gpt(astra·sol) · 공개(qwen·gemma) — 프런티어끼리 맞붙이기 위해서이고, 공개 모델은 KB가 내부에서 돌릴 수 있는 선택지를 보이기 위해서다claude (fable, opus 5.5) · gpt (astra, sol) · open (qwen, gemma) — chosen so that frontier is set against frontier, with the open models there to show what KB could run internallyclaude (fable, opus 5.5) · gpt (astra, sol) · mô hình mở (qwen, gemma) — chọn để mô hình hàng đầu đối đầu mô hình hàng đầu; mô hình mở cho thấy KB có thể tự vận hành gì nội bộ
권한 순서: 채팅 > 보고 > 판독chat > report > readerchat > báo cáo > bộ phân tích10-02"출동개요 and 사고개요 is the same level … chat having bigger authority or overriding reader + 출동개요/사고개요. since the purpose of adjuster is to fix what's wrong." → f4d27b3"출동개요 and 사고개요 is the same level … chat having bigger authority or overriding reader … since the purpose of adjuster is to fix what's wrong"“Tóm tắt hiện trường và tóm tắt tai nạn có cùng cấp… chat có thẩm quyền cao hơn hoặc ghi đè bộ phân tích… vì giám định viên có nhiệm vụ sửa điều sai”
판독을 재사용해 판정만 다시 돌린다replay the reading, re-run only the deciderphát lại kết quả đọc, chỉ chạy lại bộ quyết định10-01판독을 다시 돌리지 않고 같은 VLM 출력 위에서 판정만 손본다(10-01) → kb_replay의 존재 이유work the decider on the same VLM outputs instead of re-reading (10-01) → the reason kb_replay existsthử bộ quyết định trên cùng đầu ra VLM, không đọc lại (10-01) — lý do có kb_replay
데모 전 엔진 동결engine freeze before the demođóng băng engine trước demo10-02엔진은 더 손대지 않는다. 시점을 바로잡은 채로 300건을 돌린다 — 우선순위는 chat > report > readerNo further engine changes. Run the 300 with the perspective corrected, priority chat > report > readerKhông thay engine nữa. Chạy 300 hồ sơ với góc nhìn đã sửa, thứ bậc chat > report > reader

kb_replay는 후임자가 가장 먼저 쓸 도구일 수 있다. 판정자를 고치는 실험(§위의 최우선 항목)은 판독을 다시 돌릴 필요가 없다 — 저장된 판독 위에서 판정만 바꿔 재채점하면 되고, 모델 비용이 들지 않는다.

kb_replay may be the first tool you reach for. Fixing the judge needs no re-reading — re-score the stored readings with a changed decider, at no model cost.

kb_replay có thể là công cụ nên dùng đầu tiên. Sửa bộ phán định không cần đọc lại: chấm lại kết quả đã lưu bằng bộ quyết định đã đổi, không tốn chi phí mô hình.

⚠️ 끝내 답이 오지 않은 질문 둘 — 그리고 그중 하나는 번호 충돌을 남겼다two questions that never got an answer — and one of them left an id collisionhai câu hỏi chưa có câu trả lời — một câu để lại xung đột ID

2026-10-08에 두 가지가 명시적으로 물어졌고, 기록 어디에도 답이 없다. ① 10-07 블라인드 에이전트 결과를 EXPERIMENTS.md에 E-V-028/029로 기록할 것인가. ② poc-report 완료 초안의 「자율 모드 철회」 줄을 고칠 것인가.

Two things were asked outright on 2026-10-08, and the record holds no answer to either. ① Should the 10-07 blind-agent results be filed in EXPERIMENTS.md as E-V-028/029? ② Should the "autonomous mode withdrawn" line in the poc-report completion draft be corrected?

Hai việc đã được hỏi thẳng ngày 2026-10-08, hồ sơ chưa có câu trả lời cho cả hai. ① Có nên ghi kết quả blind-agent ngày 10-07 vào EXPERIMENTS.md dưới ID E-V-028/029? ② Có nên sửa câu “đã rút chế độ tự chủ” trong bản nháp hoàn thành poc-report?

🚨 첫 번째는 그대로 두면 충돌한다. 이 문서는 이미 E-V-028과 E-V-029를 다른 실험으로 인용한다(E-V-028은 충돌 시점이 프론티어 판독기 오답 사실의 약 40%라는 측정이다). 같은 번호를 두 실험이 쓰면 원장은 그 순간 인용할 수 없는 물건이 된다 — 후임자는 10-07 결과에 새 번호를 주고, 어느 쪽이 먼저였는지 날짜로 적어 둘 것.

🚨 The first one collides if it is left as it is. This document already cites E-V-028 and E-V-029 for different experiments (E-V-028 is the measurement that the impact moment accounts for about 40% of a frontier reader's wrong facts). Two experiments under one id makes the ledger uncitable at that point — a successor should give the 10-07 results a fresh id and date which came first.

🚨 Câu đầu sẽ gây xung đột nếu giữ nguyên. Tài liệu này đã dùng E-V-028 và E-V-029 cho các thử nghiệm khác (E-V-028 đo việc thời điểm va chạm gây khoảng 40% dữ kiện sai của bộ phân tích dùng mô hình hàng đầu). Hai thử nghiệm chung một ID khiến sổ không thể được trích dẫn chính xác tại đó — người tiếp nhận nên cấp ID mới cho kết quả ngày 10-07, ghi ngày để biết thứ tự.

⭐ 그리고 원장에 닿지 않은 작업 규칙이 하나 더 있다(2026-10-13): 긴 실행을 시작하기 전에 알려진 공백을 전부 먼저 선언한다. 이 문서의 §7.8이 적는 일하는 방식과 같은 계열이고, DECISIONS.md 어디에도 없다.

⭐ And one more working rule never reached the ledger (2026-10-13): declare every known gap before starting a long run. It belongs with the practices in §7.8, and it is in no DECISIONS.md.

⭐ Một quy tắc làm việc nữa chưa vào sổ (2026-10-13): khai báo mọi lỗ hổng đã biết trước khi chạy tác vụ dài. Quy tắc thuộc nhóm thực hành ở §7.8, nhưng không có trong bất kỳ DECISIONS.md nào.

7.8일하는 방식 · How work is done here · Cách tổ chức công việc

이 프로젝트가 일한 방식 — 만든 사람의 지시로How the work was actually runCông việc thực tế được tổ chức ra sao

아래는 전부 🗣 세션 기록이고, 코드의 모양을 설명하는 것들이다. 같은 방식으로 이어서 일할 사람에게는 규칙으로 읽힌다.

Các mục dưới đây đều là 🗣 ghi chép phiên làm việc, giải thích hình dạng hiện tại của mã nguồn. Với người tiếp tục theo cách làm này, chúng là quy tắc.

문제에서 도망치지 않는다do not run away from the problemkhông né tránh bài toán「내부 파라미터를 모른다」는 것은 그 방법을 버릴 이유가 되지 못한다 — 추정할 수 있는지부터 본다. 외부·내부 파라미터는 어차피 오차를 갖는다. 패딩이 있으면 전처리하고, 치수가 정확하지 않으면 오차를 안은 채 진행하면서 구현으로 오차를 줄인다."we do not know the intrinsics" is not a reason to drop an approach — first ask whether they can be estimated. Extrinsics and intrinsics carry error either way. If clips have padding, pre-process them; if dimensions are not exact, proceed with the error and reduce it through better implementation.“Chưa biết tham số nội tại camera” không phải lý do bỏ một phương án — trước hết hỏi có ước lượng được không. Tham số ngoại tại và nội tại đều mang sai số. Clip có viền đệm thì tiền xử lý; kích thước chưa chính xác thì tiếp tục với sai số, giảm dần bằng cách triển khai tốt hơn.
말 말고 화면을 보여라cho xem hình ảnh, đừng chỉ nóishow the clip, not the claimcho xem clip thay vì chỉ nêu nhận định이 프로젝트에서 가장 자주 반복된 요구다. 판독에 대해 무엇을 주장하든 영상과 오버레이를 함께 보여야 한다 — 그리고 어떤 질문을 던졌고, 프롬프트가 무엇이고, 무엇이 돌아왔는지까지 같이 보인다. 지금의 트레이스 뷰어와 오버레이 도구가 여기서 나왔다.The most repeated requirement in the project. Any claim about a reading has to come with the clip and its overlays — and with the questions asked, the prompt, and what came back. The trace viewer and the overlay tools exist because of it.Yêu cầu lặp lại nhiều nhất trong dự án. Mọi nhận định về kết quả đọc phải đi kèm clip và lớp phủ minh họa, cùng câu hỏi đã đặt, prompt và kết quả trả về. Trình xem trace và công cụ lớp phủ ra đời vì yêu cầu này.
결정에는 결과와 대가를 붙여라a decision needs its consequencequyết định phải kèm hệ quả결정 지점을 이름만 나열하지 않는다. 각각 무엇을 얻고 무엇을 잃는지를 함께 적고, D4·D21 같은 id에는 가리키는 곳을 붙인다. 문서가 흩어지면 id만 남고 근거는 사라진다.Decision points are not just named. Each carries what it buys and what it costs, and an id like D4 or D21 carries a pointer to its basis. Scatter the documents and only the ids survive.Các điểm quyết định không chỉ được đặt tên. Mỗi điểm phải ghi được gì, mất gì; ID như D4 hoặc D21 phải trỏ đến cơ sở của quyết định. Tài liệu phân tán thì chỉ còn ID sống sót.
병렬로, 밤새song song, xuyên đêmin parallel, overnight지금의 병렬 에이전트 습관이 여기서 나왔다. 독립적인 작업은 병렬 에이전트에 맡기고, 밤 사이 긴 실행을 돌린 뒤 아침에 결과를 보고한다. 그리고 이것은 점검되는 규칙이다 — 병렬 작업을 조용히 그만두면 지적된다.This is where the parallel-agent habit came from. Independent work goes to parallel agents, long runs go overnight, and the results are reported in the morning. It is a rule that gets checked — quietly dropping parallel work does not pass unnoticed.Đây là nguồn gốc thói quen dùng agent song song. Giao việc độc lập cho các agent chạy đồng thời, tác vụ dài chạy qua đêm, báo kết quả vào buổi sáng. Đây là quy tắc được kiểm tra — âm thầm bỏ phần việc song song sẽ bị phát hiện.
고치기 전에 돌리지 않는다chưa sửa xong thì chưa chạydo not run before the fix landschưa tích hợp bản sửa thì chưa chạy알려진 수정이 들어가기 전에 $120짜리 전수 실행이 한 번 돌아간 뒤에 생긴 규칙이다. 수정이 예정되어 있으면 먼저 전부 넣고, 그 다음에 전수 실행을 돌린다. 비용뿐 아니라 그 결과를 다시 쓸 수 없게 되는 것이 문제다.The rule exists because a $120 full run went ahead before a known fix had landed. If fixes are planned, land them all first, then run — the cost is not the main loss; the run simply cannot be used.Quy tắc ra đời vì đã có lần chạy đầy đủ tốn $120 trước khi bản sửa đã biết được tích hợp. Nếu có kế hoạch sửa, tích hợp hết rồi mới chạy — tổn thất chính không phải tiền; kết quả lần chạy đơn giản là không dùng được.
문서는 썩는다documents rottài liệu sẽ lỗi thời문서에 담아야 하는 것: 무엇을 만들었고, 어떤 모델과 어떤 데이터를 썼고, 뒤의 수학과 개념은 무엇이고, 빠진 값과 필요한 값은 무엇이고, 어느 값이 중복인지 — 그리고 맞은 것과 틀린 것 둘 다. 이 문서가 이런 모양인 이유다.What a document has to carry: what was built, which models and which data, the maths or the concept behind it, the missing values and the needed ones, which values are duplicates — and what is wrong as well as what is right. It is why this document has the shape it does.Tài liệu cần nêu: đã xây gì, dùng mô hình và dữ liệu nào, toán học hoặc ý tưởng nền tảng, giá trị thiếu và giá trị cần, giá trị nào bị trùng; đồng thời nêu cả điều sai lẫn điều đúng. Vì vậy tài liệu này có cấu trúc như hiện tại.

⚠️ 그리고 운영상 알아 둘 것:Một lưu ý vận hành: 무인 실행이 nhiều lần chạy không giám sát 권한 확인 때문에 멈춰 있었다đã dừng để chờ xác nhận quyền는 기록이 반복된다 — — ghi chép lặp lại rằng 권한 파일도, 자동 승인 모드도 소용이 없었다cả tệp cấp quyền lẫn chế độ tự động phê duyệt đều không giải quyết được 배치를 돌릴 때 . Khi chạy theo lô, trước hết kiểm tra khả năng 인스턴스는 떠 있는데 작업이 안 도는 상태máy chủ đã bật nhưng tác vụ không chạy를 먼저 의심할 것..

Five working rules, each of which was paid for. A ledger row before the run, with the question, the n, the base rate and the cost — no exceptions. A base rate beside every recall, because one-sided consistency is not accuracy. A control arm for any causal claim. Construals are ours, are logged, and adjusters see them. And the ledgers are records, not walls: when a better choice appears, make it, log it, and say so.

Năm quy tắc làm việc, mỗi quy tắc đều đã phải trả giá để có. Trước khi chạy phải có một hàng trong sổ, ghi câu hỏi, n, tỷ lệ nền và chi phí — không ngoại lệ. Mọi recall đi kèm tỷ lệ nền, vì nhất quán một chiều không đồng nghĩa chính xác. Nhận định nhân quả phải có nhánh đối chứng. Cách diễn giải là lựa chọn của chúng ta, phải ghi lại, giám định viên được xem. Sổ là hồ sơ, không phải bức tường: thấy lựa chọn tốt hơn thì làm, ghi lại, báo rõ.

돌리기 전에 원장 행A ledger row before the runGhi một hàng vào sổ trước khi chạy질문 · n · 기저율 · 비용. 예외 없음question, n, base rate, costcâu hỏi, n, tỷ lệ nền, chi phí
모든 재현율 옆에 기저율Base rate beside every recallTỷ lệ nền đi cùng mọi recall한쪽으로만 일관된 것은 정확도가 아니다one-sided consistency is not accuracynhất quán một chiều không đồng nghĩa chính xác
인과 주장에는 대조군A control arm for causal claimsCó nhánh đối chứng cho nhận định nhân quảE-V-002가 틀린 사실로 대조군을 돌린 이유why E-V-002 ran a wrong-facts armlý do E-V-002 chạy nhánh dữ kiện sai
구성은 우리 것이고 기록된다Construals are ours, and loggedCách diễn giải là của chúng ta, phải ghi lại조사자가 본다adjusters see themgiám định viên được xem
기록이지 벽이 아니다Records, not wallsSổ là hồ sơ, không phải bức tường더 나은 선택이 생기면 바꾸고, 행을 추가하고, 알린다make the better choice, log it, report itchọn cách tốt hơn, ghi lại, báo rõ

7.9지식 기반 — 라우팅을 대체하려는 것 · The knowledge base, built to replace routing · Cơ sở tri thức được xây để thay routing

⭐ 이 문서가 거의 다루지 않은 하위 체계다a subsystem this document otherwise does not covermột hệ thống con chưa được đề cập ở những phần khác

10-15〜10-16에 들어온 가장 최근의 하위 체계고, 이 문서의 나머지 부분은 그 전의 나무를 대조했다. 기본값이 off이므로 지금 운영에는 영향이 없지만, 당신이 물려받는 코드에는 스키마·API·웹 화면까지 전부 들어 있다. 모르고 지나가면 §8.7의 라우팅 비판을 읽고도 이미 설계된 해답이 있다는 것을 모른다.

This is the newest subsystem, landed 10-15–10-16; everything else in this document was checked against the tree before it. It is off by default and changes nothing in production today, but it is all there in the code you inherit — schema, API and a web screen. Miss it and you can read §8.7’s criticism of routing without learning that the answer has already been designed.

Đây là hệ thống con mới nhất, được tích hợp ngày 10-15–10-16; mọi phần khác trong tài liệu đã được đối chiếu với cây mã trước đó. Mặc định tắt, hiện không thay đổi vận hành, nhưng mã bạn tiếp nhận đã có đủ schema, API và màn hình web. Bỏ qua nó, bạn có thể đọc phê bình routing ở §8.7 mà không biết câu trả lời đã được thiết kế.

무엇을 고치려는 것인가What it is meant to fixVấn đề muốn khắc phục

routing.py의 정규식 규칙은 우리가 채점하는 바로 그 KB 300건에 맞춰 만들어졌고, 판정자가 돌기 전에 계열과 도표를 강제한다. V-D27(2026-10-15)은 이것을 출처가 붙은 데이터로 바꾼다 — 규칙이 아니라 인용되는 증거이고, 판정자가 거부할 수 있다.

The regex rules in routing.py were fitted on the very KB 300 we score against, and they force the family and the chart before the decider runs. V-D27 (2026-10-15) turns them into data with provenance — not a rule but cited evidence that the decider is free to reject.

Các quy tắc regex trong routing.py được khớp trên chính bộ 300 hồ sơ KB dùng để chấm; chúng ép nhóm và biểu đồ trước khi bộ quyết định chạy. V-D27 (2026-10-15) chuyển chúng thành dữ liệu có nguồn gốc — thành bằng chứng có trích dẫn mà bộ quyết định được quyền bác bỏ, thay vì quy tắc bắt buộc.

종류kindloại무엇을 담는가what it holdsnội dung누가 받는가who receives itbên nhận
interpretation (25개)(25)(25)진술의 말투 → 책의 계열·노드·조항statement wording → the book’s family, node and clausecách diễn đạt phát biểu → nhóm, nút và điều khoản trong sách판정자와 채팅. v2에서는 판독기에도 「무엇을 확인할지」로the decider and chat; in v2 the reader too, as "what to check"bộ quyết định và chat; ở v2 còn có bộ phân tích, dưới dạng “điều cần kiểm tra”
practice (3개)(3)(3)KB가 실제로 접수하는 방식how KB actually filescách KB thực sự phân loại hồ sơ판정자와 채팅만. 판독기에는 절대 가지 않는다the decider and chat only — never the readerchỉ bộ quyết định và chat — không bao giờ gửi bộ phân tích

책과 받아들여진 practice 항목이 어긋나거나, 항목이 판단 불가인 사실 위에 서 있으면 — 그것은 분기 질문이지 조용한 덮어쓰기가 아니다. 항목은 버전이 붙고, 이름이 적힐 KB TFT 담당자만 활성화할 수 있으며, 쓰인 기록이 남고 leave-one-out 통계가 붙는다.

Where the book and an accepted practice entry disagree, or an entry rests on a 판단 불가 fact, the result is a fork question — never a silent override. Entries are versioned, activated only by a named KB TFT owner, every use is recorded, and each carries leave-one-out statistics so a case never counts toward its own entry.

Khi sách khác với mục thực hành đã được chấp nhận, hoặc một mục dựa vào dữ kiện không thể xác định, kết quả là câu hỏi phân nhánh — tuyệt đối không âm thầm ghi đè. Các mục có phiên bản, chỉ được kích hoạt bởi người phụ trách TFT của KB có tên cụ thể; mọi lần dùng được ghi lại, mỗi mục kèm thống kê loại từng mẫu để một hồ sơ không góp vào chính mục dùng cho nó.

코드에서 어디에 있나Where it lives in the codeVị trí trong mã

스위치the switchcông tắcVISUS_KNOWLEDGE=off|shadow|on — 기본 off(출하된 라우팅 그대로). engines/v2.judge에 살고, off이면 아무것도 import되지 않는다default off (routing exactly as released). It lives in engines/v2.judge, and off means nothing here is imported at allmặc định tắt (routing giữ đúng hành vi phát hành). Nằm trong engines/v2.judge; khi tắt, không import bất kỳ phần nào ở đây
모듈modulemô-đunvisus/knowledge.py (838줄) — load/upsert/review, 결정론적 retrieve(cue + 도표·트리 키, 그 다음 키워드 커버리지 — 모델 호출 없음), leave-one-out, annotate(838 lines) — load/upsert/review, a deterministic retrieve (cues plus chart/tree keys, then keyword coverage — no model call), leave-one-out, annotate(838 dòng) — tải/upsert/duyệt, retrieve xác định (gợi ý cùng khóa biểu đồ/cây, sau đó xét độ phủ từ khóa — không gọi mô hình), thống kê loại từng mẫu, chú giải
테이블tablesbảngknowledge_entries (버전됨)(versioned)(có phiên bản) · entry_sources · entry_uses · entry_reviews · entry_stats — python -m visus.db migrate, 멱등적, idempotent, chạy lại không làm đổi kết quả
v1이 담은 것what v1 holdsnội dung v1routing.py의 모든 규칙 28개를 제안(proposed) 항목으로 변환 — 전부 proposed이므로 검토 전에는 아무것도 활성이 아니다all 28 rules converted into proposed entries — every one proposed, so nothing is active before reviewtoàn bộ 28 quy tắc được chuyển thành mục đề xuất — tất cả là proposed, nên không có mục nào hoạt động trước khi duyệt
검토 화면review screensmàn hình duyệt검토자 전용 /knowledge 라우트(역할 tft|admin, 아니면 404) + 웹 화면. 이것이 api.py를 49 → 60으로 늘린 11개다(§4.4)reviewer-only /knowledge routes (role tft|admin, 404 otherwise) plus a web screen. These are the eleven endpoints that took api.py from 49 to 60 (§4.4)các route /knowledge chỉ dành cho người duyệt (vai trò tft|admin, trường hợp khác trả 404), cùng màn hình web. Đây là 11 endpoint khiến api.py tăng từ 49 lên 60 (§4.4)
설계 문서design doctài liệu thiết kếdocs/KNOWLEDGE.md — 설계·성장 통제·거버넌스·측정 계획·v1의 알려진 한계. ⚠️ 고정 커밋 이후에 추가되었으므로 브랜치에만 있다design, growth controls, governance, the measurement plan and v1’s known limits. ⚠️ Added after the pinned commit, so it exists only on the branchthiết kế, kiểm soát tăng trưởng, quản trị, kế hoạch đo, giới hạn đã biết của v1. ⚠️ Thêm sau commit được ghim, nên chỉ có trên nhánh

측정됐다 — E-V-036It was measured — E-V-036Đã đo — E-V-036

판정자만 다시 돌렸다(판독은 v300_1015의 것을 고정). 즉 아래 숫자는 판정 단계만의 차이이고, 판독이 바뀔 때의 효과는 아직 모른다.

The decider alone was replayed, with the readings from v300_1015 held fixed. So these numbers isolate the judging step; what happens when the reading changes is not yet known.

Chỉ chạy lại bộ quyết định, giữ nguyên kết quả đọc từ v300_1015. Vì vậy các số này tách riêng bước phán định; chưa biết khi kết quả đọc thay đổi thì điều gì xảy ra.

집합settập라우팅 onrouting onbật routing라우팅 offrouting offtắt routing지식 기반knowledgecơ sở tri thức
전체 300all 300toàn bộ 300187–190157–162179–180
라우트가 발동한 81the 81 routed81 hồ sơ có routing6940–4257
나머지 219the other 219219 hồ sơ còn lại118–121117–120122–123 (top-1 피해 없음)(no top-1 harm)(không làm giảm top-1)

라우팅 가치의 약 2/3를 강제 없이 회수한다. 나머지는 대체로 설계상 분기·중단이다. ⚠️ 단, 미라우트 집합에서 top-3가 off 대비 −6〜−8이고 근사치 항목 두 개(KE-R-reader_direction · KE-R-leaf47-47-1)에 몰려 있다 — 검토에서 먼저 폐기할 것.

It recovers about two-thirds of routing’s value without forcing anything, and most of the rest is forks and stops by design. ⚠️ But on the unrouted set top-3 falls 6–8 against routing-off, concentrated in two approximate entries (KE-R-reader_direction, KE-R-leaf47-47-1) — retire those two first.

Khôi phục khoảng hai phần ba giá trị của routing mà không ép kết quả; phần còn lại chủ yếu là phân nhánh và dừng theo thiết kế. ⚠️ Tuy nhiên, ở tập không routing, top-3 giảm 6–8 so với tắt routing, tập trung ở hai mục xấp xỉ (KE-R-reader_direction, KE-R-leaf47-47-1) — ngừng dùng hai mục này trước.

⭐ 가장 전달할 만한 교훈the lesson most worth carryingbài học đáng mang theo nhất

첫 번째 arm은 81건 중 42건이었다 — 라우팅을 꺼 것과 똑같다. 원인은 모델도 검색도 아니고 문장이었다: 항목마다 「이 사고의 사실 진술이 아님」이라는 단서가 붙어 판정자가 이것을 할 일 목록처럼 읽었다. 매핑 자체를 「진술의 말 → 책의 가지 경로」로 한 번 일반적으로 다시 쓴 것만으로 56〜57로 올랐고, 그 뒤로는 사건별 튜닝을 하지 않았다.

The first arm scored 42 of 81 — exactly routing-off. The cause was neither the model nor the retrieval but the wording: each entry carried a caveat saying it was "not a statement of fact about this accident", and the decider read the whole thing as a to-do list. One general rewording of the mapping itself — statement words → the book’s branch path — lifted it to 56–57, with no case-driven tuning afterwards. Cost of the whole experiment: about $2.60.

Nhánh thử đầu đạt 42/81 — đúng bằng khi tắt routing. Nguyên nhân nằm ở cách diễn đạt, không phải mô hình hay truy xuất: mỗi mục kèm lưu ý “đây không phải phát biểu sự thật về tai nạn này”, nên bộ quyết định đọc toàn bộ thành danh sách việc cần làm. Một lần viết lại tổng quát cách ánh xạ — từ ngữ phát biểu → đường đi nhánh trong sách — nâng điểm lên 56–57, không tinh chỉnh theo từng hồ sơ sau đó. Tổng chi phí thử nghiệm khoảng $2.60.

당신이 할 일What is left for youViệc còn lại cho người tiếp nhận

1TFT 검토 — 근사치 항목 두 개를 먼저 폐기하고, practice 3개는 KB가 지명한 TFT 담당자가 있어야 한다 — 기술 작업이 아니라 사람을 정하는 일이다TFT review — retire the two approximate entries first, and note the 3 practice entries need KB’s named TFT owner: that is not an engineering task but an appointmentTFT duyệt — ngừng hai mục xấp xỉ trước; 3 mục thực hành cần người phụ trách TFT có tên cụ thể từ KB: đây là việc bổ nhiệm, không phải kỹ thuật
2shadow 모드를 새 prod에 걸고 도표 확정과 대조한다 — 판정은 그대로 두고 제안만 기록된다run shadow mode on new production against 도표 확정 — the verdict is untouched and only the suggestion is recordedchạy chế độ theo dõi ngầm trên dữ liệu vận hành mới, đối chiếu với biểu đồ đã xác nhận — giữ nguyên kết luận, chỉ ghi đề xuất
3interpretation 항목을 판독기에 「무엇을 확인할지」로 보내는 v2. §5.6의 「실패의 88%가 이미 보이는 사실」과 정확히 같은 자리를 가리킨다v2, sending interpretation entries to the reader as "what to check" — which points at exactly the place §5.6 does when it says 88% of failures are about a fact that is already visiblev2 gửi các mục diễn giải cho bộ phân tích dưới dạng “điều cần kiểm tra” — đúng điểm mà §5.6 nêu: 88% thất bại liên quan dữ kiện vốn đã nhìn thấy

08저장소 해부 · Repository dissections · Phân tích các kho lưu trữ

1~7장은 「무엇이 있고 왜 그렇게 되었나」다. 이 장은 코드를 직접 열어 숫자가 실제로 무엇을 재는지 확인한 기록이다.

Chapters 1–7 say what exists and why. This one records what the numbers actually measure, read from the code.

Các chương 1–7 nói về những gì tồn tại và lý do. Chương này ghi lại các con số thực sự đo gì, đọc trực tiếp từ mã.

🇬🇧 영어로 읽는 경우reading in Englishđọc bằng tiếng Việt

Every finding in this chapter is written in English, but the tables are mostly Korean — a row's citation (file:line) and its numbers survive the language toggle, its explanation does not. Read the English paragraph under each heading for the finding, and use the tables as an index into the code. Korean terms you will meet throughout: 도표 chart, 판정 verdict, 고객차 / 상대차 customer's car / other car, 판단 불가 cannot be determined, 해당 없음 not applicable, 진로변경 lane change, 선행 / 후행 leading / following, 가감요소 adjustment factors.

Bản tiếng Việt giữ nguyên các trích dẫn nguồn (file:line), số liệu và mã định danh để đối chiếu với mã. Hãy đọc đoạn dưới mỗi tiêu đề để nắm phát hiện, rồi dùng bảng như chỉ mục vào mã. Các thuật ngữ tiếng Hàn sẽ gặp trong trích dẫn gốc: 도표 biểu đồ, 판정 phán định, 고객차 / 상대차 xe của khách / xe đối phương, 판단 불가 không thể xác định, 해당 없음 không áp dụng, 진로변경 chuyển làn, 선행 / 후행 xe trước / xe sau, 가감요소 yếu tố điều chỉnh.

측정이 잘못 해석되면 인수인계가 잘못된 방향으로 안내한다 — 열려 있는 선택지를 「끝난 일」이라고 하거나, 자기 자신을 확인한 숫자를 「성능」으로 읽게 된다.

A misread measurement makes a handover misdirect: it calls a live option closed, or reads a self-consistency check as performance.

Đo sai khiến bàn giao sai hướng: một lựa chọn còn hoạt động bị coi là đã đóng, hoặc phép kiểm tra tự nhất quán bị đọc thành hiệu năng.

🔬 정밀🔬 Chi tiết숫자를 만든 코드를 줄 단위로 읽음line by line through the code that produces the numbersđi qua từng dòng mã tạo ra các con số
📖 구조📖 Cấu trúc구성·문서·핵심 모듈structure, docs, key modulescấu trúc, tài liệu, mô-đun chính
👁 표면👁 Bề mặtREADME와 산출물만README and outputs onlychỉ README và đầu ra

8.1question-ledger (= ql-re) · the rule engine and its question set · bộ máy luật và tập câu hỏi 🔬 정밀🔬 Chi tiết

규칙 기반 과실 판정 엔진. 「다. 같은 방향 진행차량 상호 간의 사고」 — 차41-1 … 차48-1, 23개 도표 / 25 leaf. Python 63,192줄.

A rule-based fault-determination engine. Section "다. accidents between vehicles travelling in the same direction" — 차41-1 … 차48-1, 23 charts / 25 leaves. 63,192 lines of Python.

Bộ máy xác định tỷ lệ lỗi dựa trên luật. Mục "다. tai nạn giữa các xe chạy cùng hướng" — 차41-1 … 차48-1, 23 biểu đồ / 25 lá. 63,192 dòng Python.

규모sizequy mô
조건conditionsđiều kiện260 — 필수 189 · 참고 33 · 배제 38260 — 189 required · 33 advisory · 38 excluding260 — 189 bắt buộc · 33 tư vấn · 38 loại trừ
질문questionscâu hỏi74 — 도표를 가르는 것 46, 관찰 전용 2874 — 46 that separate charts, 28 observation-only74 — 46 câu phân tách biểu đồ, 28 câu chỉ để quan sát
수정요소modifiersyếu tố điều chỉnh182

⚠️ 숫자가 실제로 무엇을 재는가 — 자기 참조다What the numbers measure: themselvesCác con số thực sự đo gì: chính chúng

ql-re's headline numbers check the data against itself. 25/25 means "feed a leaf the values it declares, and the engine reaches that leaf"; 266/266 is a count of passing tests. Neither is accuracy on a real accident, and the repo says so itself. The simulated adjuster is also an optimist — it deliberately picks values no competing leaf expects, which no real adjuster does.

Các con số nổi bật của ql-re kiểm tra dữ liệu với chính nó. 25/25 nghĩa là "đưa các giá trị mà một lá tự khai báo vào, rồi bộ máy đi tới đúng lá đó"; 266/266 là số bài kiểm thử đạt. Không con số nào là độ chính xác trên tai nạn thật, và chính kho mã cũng nói vậy. Điều tra viên mô phỏng còn quá lạc quan — nó cố ý chọn các giá trị mà không lá cạnh tranh nào mong đợi, điều không điều tra viên thật nào làm.

r, ans = drive(leaf, canonical(leaf))     # canonical = the leaf's OWN declared expected values
ok     = confirmed(r) == leaf             # …then check it reaches that leaf
r, ans = drive(leaf, canonical(leaf))     # canonical = giá trị kỳ vọng do CHÍNH nút lá khai báo
ok     = confirmed(r) == leaf             # …rồi kiểm tra có đến đúng nút lá đó không

「leaf가 스스로 선언한 답을 주면 그 leaf에 도달한다」는 데이터 일관성 검사다. 엔진이 판별할 수 있는지는 재지 않는다.

"Nếu đưa đáp án do chính lá tự khai báo thì sẽ tới được lá đó" là phép kiểm tra nhất quán dữ liệu. Nó không đo xem bộ máy có phân biệt được hay không.

"Simulated adjuster: … Prefer a value that is not the expected value of any competing leaf, never trigger leaf's own exclude…"tests/harness.py

"Điều tra viên mô phỏng: … Ưu tiên giá trị không phải giá trị kỳ vọng của bất kỳ lá cạnh tranh nào, không bao giờ kích hoạt điều kiện loại trừ của chính lá…"tests/harness.py

모의 조사자는 경쟁 leaf가 기대하지 않는 값을 골라 준다 — 언제나 가장 잘 판별되는 참말을 하는 이상적 조사자다. 실제 조사자는 그렇게 답하지 않는다.

The simulated investigator picks the value a competing leaf does not expect — an ideal informant who always says the most discriminating true thing. Real investigators do not answer like that.

Điều tra viên mô phỏng chọn giá trị mà một lá cạnh tranh không kỳ vọng — một người cung cấp thông tin lý tưởng, luôn nói điều đúng có tính phân biệt cao nhất. Điều tra viên thật không trả lời như vậy.

「266/266」도 정확도가 아니다 — §7.2 테스트 스위트 통과 수다 (pytest 259 passed).

"266/266" cũng không phải độ chính xác — đó là §7.2 số bài trong bộ kiểm thử đạt (pytest đạt 259 bài).

🚨 이 문서가 하던 오해 소지 · an error this document was making🚨 Một cách diễn giải sai mà tài liệu này từng tạo ra

2장에서 266/266과 25/25를 나란히 적었다. 둘 다 자기 자신을 확인한 수인데 성능처럼 읽힌다. 바로잡았다.

Ở chương 2, 266/266 và 25/25 được đặt cạnh nhau. Cả hai đều là con số tự kiểm tra chính nó nhưng trông như hiệu năng. Đã sửa cách trình bày.

단, ql-re 자신은 숨기지 않았다 — "None of it is accuracy on real accidents". 정직한 것은 문서이고 오해한 것은 인용한 쪽이다.

To its credit, ql-re did not hide this — "None of it is accuracy on real accidents". The document was honest; it was the people quoting it who misread it.

Điểm đáng ghi nhận là ql-re không che giấu điều này — "Không con số nào là độ chính xác trên tai nạn thật". Tài liệu đã trung thực; người trích dẫn nó mới đọc sai.

⭐ 아직 아무도 쓰지 않은 유용한 수치Three measurements nobody has usedBa phép đo chưa ai sử dụng

Three numbers in the same file carry real information and have never been cited. A chart takes a median of 13 answers to confirm (range 9–21) — you cannot ask an adjuster 13 questions per case, and that is the structural reason this approach could not become a product. 12.9% of facts are fragile: one wrong answer makes the engine confidently reach a different chart, even when everything else is right — the direct ancestor of visus's sibling-chart problem. And occlusion never kills the right leaf (189/189), which means treating "not visible" as a normal answer was already correct at the engine level, and already measured. The fragility test is reusable and has never been run against visus's judge.

Ba con số trong cùng một tệp mang thông tin thực và chưa từng được trích dẫn. Một biểu đồ cần trung vị 13 câu trả lời để xác nhận (phạm vi 9–21) — không thể yêu cầu điều tra viên trả lời 13 câu cho mỗi vụ, và đó là lý do mang tính cấu trúc khiến cách tiếp cận này không thể thành sản phẩm. 12.9% sự kiện là mong manh: chỉ một đáp án sai khiến bộ máy tự tin đi tới biểu đồ khác dù mọi thứ còn lại đúng — tiền thân trực tiếp của vấn đề biểu đồ chị em trong visus. Ngoài ra, che khuất không bao giờ loại bỏ lá đúng (189/189), nghĩa là coi "không nhìn thấy" là một câu trả lời bình thường vốn đã đúng ở tầng bộ máy và đã được đo. Phép kiểm tra độ mong manh có thể tái sử dụng nhưng chưa từng chạy với bộ phán định của visus.

같은 파일에 진짜 정보가 있는 측정이 셋 있고, 이 문서에도 visus 원장에도 인용된 적이 없다.

13
도표 하나를 확정하는 답의 수Số câu trả lời để xác nhận một biểu đồ
median answers to confirm (9–21)trung vị số câu trả lời để xác nhận (9–21)
12.9%
취약 사실Sự kiện mong manh
one wrong answer → wrong chartmột câu trả lời sai → sai biểu đồ
189/189
가림 내성Khả năng chịu che khuất
occlusion never kills the right leafche khuất không bao giờ loại nút lá đúng

조사자에게 사건당 13개 질문을 시킬 수는 없다. 이것이 질문 워크가 제품으로 설 수 없었던 구조적 이유이고, visus가 「판독 + 조항 적합도」로 간 이유를 숫자로 설명한다. 어느 문서에도 이렇게 적혀 있지 않다.

Không thể bắt điều tra viên trả lời 13 câu cho mỗi vụ. Đây là lý do mang tính cấu trúc khiến quy trình câu hỏi không thể trở thành sản phẩm, đồng thời giải thích bằng số vì sao visus chuyển sang "đọc + độ phù hợp điều khoản". Không tài liệu nào ghi điều này theo cách đó.

🗣 그리고 사람 쪽 증거가 전사에 있다 — 2026-09-15, 실제로 써 본 뒤: 실제로 한 건을 끝까지 써 본 뒤 「쓰기 어렵고 질문이 사건을 가르지 못한다」는 평가가 남았다. 측정과 사용감이 같은 곳을 가리킬 때는 대개 그 길은 막다른 길이다.

You cannot ask an adjuster 13 questions per case. That is the structural reason the question-walk could not become a product — and it is written down nowhere.

Không thể bắt điều tra viên trả lời 13 câu cho mỗi vụ. Đó là lý do mang tính cấu trúc khiến quy trình câu hỏi không thể trở thành sản phẩm — và không được ghi ở đâu khác.

답 하나가 틀렸을 때one wrong answermột đáp án sai (372 trials / 139 facts) (372 lần thử / 139 dữ kiện)
후보가 아예 없어짐no candidate leftkhông còn ứng viên55.1%
열린 채openđang mở18.5%
선두만 바뀜leading changesthay đổi xe trước17.7%
다른 leaf를 확정해 버림confirms a different leafxác nhận một lá khác8.6%

취약 사실 18/139 = 12.9% — 단 하나의 틀린 답이, 나머지가 전부 맞아도 엔진이 다른 도표를 확신하게 만든다. visus의 형제 도표 구분 문제의 직계 조상이다. 그리고 55%가 「후보 없음」이라는 것은 이 엔진이 관대한 게 아니라 깨지기 쉽다는 뜻 — lense의 「예스 머신」과 정반대 실패다.

Fragile facts 18/139 = 12.9% — a single wrong answer makes the engine confident of a different chart even when everything else is right. This is the direct ancestor of visus’s sibling-chart problem. And the 55% that come back "no candidate" mean the engine is not lenient but brittle — the opposite failure to lense’s "yes machine".

Các sự kiện mong manh 18/139 = 12.9% — chỉ một đáp án sai khiến bộ máy tự tin chọn biểu đồ khác dù mọi thứ còn lại đúng. Đây là tiền thân trực tiếp của vấn đề biểu đồ chị em trong visus. Ngoài ra, 55% kết quả trả về "không có ứng viên" cho thấy bộ máy không dễ dãi mà giòn — lỗi ngược với "cỗ máy luôn trả lời có" của lense.

가림 내성 189/189 — 「안 보인다」를 정상 답으로 다루는 설계가 엔진 수준에서 이미 옳았고, 측정까지 되어 있다.

후임자에게What this means for youĐiều này có nghĩa gì với bạn

Do not cite 25/25 or 266/266 as performance. Treat the median of 13 answers as the real ceiling of the question-walk approach. Run the fragility test against visus. And note that 0 of 50 adjacent chart pairs are indistinguishable — the book's siblings can be separated in principle; what is missing is the facts.

Đừng trích 25/25 hoặc 266/266 như hiệu năng. Hãy coi trung vị 13 câu trả lời là giới hạn thực của cách tiếp cận theo quy trình câu hỏi. Chạy phép kiểm tra độ mong manh với visus. Đồng thời lưu ý: 0 trong 50 cặp biểu đồ kề nhau là không thể phân biệt — các biểu đồ chị em trong sách có thể tách được về nguyên tắc; thứ còn thiếu là dữ kiện.

  1. 25/25 · 266/266을 성능 근거로 쓰지 말 것don't cite them as performanceđừng trích chúng như hiệu năng
  2. 중앙값 13개 답이 이 접근의 실질적 한계다median 13 answers is the real limit of this approachtrung vị 13 câu trả lời là giới hạn thực của cách tiếp cận này
  3. 취약 사실 12.9%는 재사용 가능한 시험이다 — visus 판정자에도 돌릴 수 있고 돌린 적이 없다the fragility test is reusable and has never been run against visus's judgephép kiểm tra độ mong manh có thể tái sử dụng nhưng chưa từng chạy với bộ phán định của visus
  4. data/pairs.json: 인접 쌍 50개 중 구분 불가 0개 — 책의 형제 도표는 원리적으로 구분 가능하다. 못 하는 것은 사실을 얻지 못해서다0 of 50 adjacent pairs are indistinguishable — siblings are separable in principle; the gap is getting the facts0 trong 50 cặp kề nhau không thể phân biệt — các biểu đồ chị em có thể tách về nguyên tắc; khoảng trống nằm ở việc lấy được dữ kiện

⭐ 끝까지 따라가 보기 — 차43-1 하나로 규칙 엔진이 무엇인지⭐ Walk one leaf — what a rule engine actually is, using 차43-1⭐ Đi qua một lá — bộ máy luật thực sự là gì, dùng 차43-1

§4.0에서 visus가 차선으로 밀어낸 바로 그 도표를 여기서 규칙 엔진 쪽에서 다시 본다. 같은 책, 같은 도표, 완전히 다른 기계.

The chart visus pushed into second place in §4.0, seen here from the rule-engine side. Same book, same chart, an entirely different machine.

Biểu đồ mà visus đẩy xuống vị trí thứ hai ở §4.0, nay nhìn từ phía bộ máy luật. Cùng một cuốn sách, cùng một biểu đồ, một bộ máy hoàn toàn khác.

① leaf 하나는 조건 목록이다. 차43-1은 조건 8개(필수 7 · 참고 1)로 이루어진다. 왼쪽은 책의 문장이고 오른쪽은 그것을 기계가 읽을 수 있게 바꾼 것이다.

① A leaf is a list of conditions. 차43-1 is eight of them — seven required, one advisory. On the left is the book’s sentence; on the right is what a machine can read.

① Một lá là danh sách điều kiện. 차43-1 có tám điều kiện — bảy bắt buộc, một tư vấn. Bên trái là câu trong sách; bên phải là thứ máy có thể đọc.

책의 문장the book’s wordslời trong sách조건으로as a conditiondưới dạng điều kiện종류kindloại
자동차와 자동차(이류차 포함)의 사고an accident between motor vehicles (including motorcycles)một vụ tai nạn giữa các xe cơ giới (kể cả xe máy)q_counterparty_type = vehiclerequired
같은 방향 진행차량 상호 간의 사고between vehicles travelling in the same directiongiữa các xe chạy cùng hướngq_travel_direction_relation = samerequired
scope gate
차로가 감소하거나 합류하는 지점에서at a point where lanes reduce or mergetại nơi các làn đường thu hẹp hoặc nhập vào nhauq_merge_point = lane_reduction_or_mergerequired
본선을 진행하는 A차량vehicle A, running on the main linexe A chạy trên làn chínhA: q_maneuver = straight
A: q_merge_lane_role = mainline
required
진로를 변경하여 본선에 합류하는 B차량vehicle B, merging in by changing lanesxe B nhập vào bằng cách chuyển lànB: q_maneuver = lane_change
B: q_merge_lane_role = merging_lane
required
일반 도로뿐만 아니라 고속도로에서도 준용applies on expressways as well as ordinary roadsáp dụng cho cả đường cao tốc và đường thông thườngq_road_type = generaladvisory

② 질문 하나는 이렇게 생겼다. 위에서 두 번 나온 q_maneuver가 차43-1과 차43-2를 가르는 바로 그 질문이다.

② And this is what one question looks like. q_maneuver, which appears twice above, is the question that separates 차43-1 from 차43-2.

② Đây là hình dạng của một câu hỏi. q_maneuver, xuất hiện hai lần phía trên, là câu hỏi phân biệt 차43-1 với 차43-2.

text「충돌 직전 {차량}은 어떤 동작을 하고 있었습니까?」"Just before the collision, what was {vehicle} doing?""Ngay trước va chạm, {vehicle} đang làm gì?"
domainstraight · lane_change · u_turn · left_turn · right_turn · stopped · reversing
labels직진 · 진로변경 · 유턴 · 좌회전 · 우회전 · 정차·주차 중 · 후진the Korean labels shown to a person answeringcác nhãn tiếng Hàn hiển thị cho người trả lời
evidencemodality vision · sources self_dashcam, other_dashcam · difficulty medium · estimated truemodality vision · sources self_dashcam, other_dashcam · difficulty medium · estimated truephương thức vision · nguồn self_dashcam, other_dashcam · độ khó medium · ước lượng true
note「관측 규칙(I02): 순간 동작만 답한다. 추월 여부는 별도 질문」"observation rule I02: answer the instantaneous action only; overtaking is a separate question""quy tắc quan sát I02: chỉ trả lời hành động tức thời; vượt xe là câu hỏi riêng"

⭐ 여기서 §3.3의 빈칸이 보인다. time_scope: instant이라 「충돌 직전」 한 순간만 답할 수 있다. 그런데 차43 계열을 가르는 「선행/후행」은 시간에 걸친 순서 관계다 — 순간 동작으로는 쓸 수 없다. 질문의 모양이 답을 정해 버린다.

⭐ This is where §3.3’s gap becomes visible. time_scope: instant means only the moment before impact can be answered. But 선행/후행 — leading versus following, which splits the 43 family — is an ordering relation over time, and an instantaneous action cannot express it. The shape of the question decides what can be answered.

⭐ Đây là nơi khoảng trống ở §3.3 hiện ra. time_scope: instant nghĩa là chỉ có thể trả lời thời điểm ngay trước va chạm. Nhưng 선행/후행 — xe trước so với xe sau, yếu tố chia họ 43 — là quan hệ thứ tự theo thời gian, và một hành động tức thời không thể biểu đạt nó. Hình dạng câu hỏi quyết định điều có thể trả lời.

③ 그래서 25/25는 무엇인가. 평가 하네스의 truthful_value()는 「목표 leaf가 기대하는 답」을 그 leaf에게 넣어 준다 — 함수 주석 그대로 「경쟁 leaf가 기대하지 않는 값을 고르고, 자기 exclude는 절대 건드리지 않는다」. 차43-1의 필수 조건 7개를 전부 기대대로 답하면 당연히 차43-1에 도착한다.

③ So what is 25/25? The test harness’s truthful_value() feeds each leaf the answers that leaf expects — its own docstring says it picks "a value that is not the expected value of any competing leaf" and "never trigger[s] the leaf’s own exclude". Answer 차43-1’s seven required conditions as expected and of course you arrive at 차43-1.

③ Vậy 25/25 là gì? Hàm truthful_value() của bộ kiểm thử đưa cho mỗi lá các đáp án mà chính lá đó mong đợi — docstring nói nó chọn "giá trị không phải giá trị kỳ vọng của bất kỳ lá cạnh tranh nào" và "không bao giờ kích hoạt điều kiện loại trừ của chính lá". Trả lời đúng kỳ vọng cho bảy điều kiện bắt buộc của 차43-1 thì đương nhiên sẽ tới 차43-1.

이것은 정확도가 아니라 상한이다 — 「사람이 모든 질문에 완벽히 답했을 때 엔진이 제 일을 하는가」를 재는 것이고, 답은 「그렇다」다. ql-re 문서는 이것을 숨기지 않았다 — "None of it is accuracy on real accidents". 정직한 것은 문서이고 오해한 것은 인용한 쪽이다.

It is a ceiling, not an accuracy. It measures whether the engine does its job when a human answers every question perfectly, and the answer is yes. ql-re’s own documents never hid this — "None of it is accuracy on real accidents". The document was accurate; the figures travelled as performance through the citing, not through the source (the same point as ① above).

Đó là giới hạn trên, không phải độ chính xác. Nó đo xem bộ máy có làm đúng việc khi một người trả lời hoàn hảo mọi câu hỏi hay không, và câu trả lời là có. Tài liệu ql-re chưa bao giờ che giấu điều này — "Không con số nào là độ chính xác trên tai nạn thật". Tài liệu đúng; các con số biến thành hiệu năng qua cách trích dẫn, không phải từ nguồn (cùng ý với ① phía trên).

규모 감각: 추출된 leaf 19개에 조건 총 189개 — leaf당 최소 7 · 중앙값 10 · 최대 15개. 질문은 46개가 실제로 참조된다.

For scale: 19 extracted leaves carry 189 conditions — min 7, median 10, max 15 each — and they reference 46 distinct questions.

Về quy mô: 19 lá đã trích xuất mang 189 điều kiện — tối thiểu 7, trung vị 10, tối đa 15 mỗi lá — và tham chiếu 46 câu hỏi riêng biệt.

🚨 걸어보지 않았으면 못 찾았을 것 — 질문 어휘가 두 벌이다found only by walking it — there are two question vocabularieschỉ phát hiện khi lần theo mã — có hai bộ từ vựng câu hỏi

레포에 질문 목록이 두 개 있고 id가 하나도 겹치지 않는다. data/questions.json에 74개(q_… 꼴), knowledge/questions.json에 63개(causal_relevance 같은 이름). 엔진의 조건은 앞의 것만 쓴다 — 참조되는 46개가 전부 거기 있고, 뒤의 63개는 조건에서 한 번도 참조되지 않는다.

The repo holds two question lists and not one id is shared. data/questions.json has 74 (the q_… style); knowledge/questions.json has 63 (names like causal_relevance). The engine’s conditions use only the first — all 46 referenced ids live there, and none of the 63 is referenced by any condition.

Kho chứa hai danh sách câu hỏi và không trùng một ID nào. data/questions.json có 74 câu (kiểu q_…); knowledge/questions.json có 63 câu (tên như causal_relevance). Các điều kiện của bộ máy chỉ dùng danh sách thứ nhất — toàn bộ 46 ID được tham chiếu đều ở đó, và không câu nào trong 63 câu được bất kỳ điều kiện nào tham chiếu.

후임자에게 중요한 이유: 누군가 「질문 원장」을 말할 때 둘 중 어느 쪽인지 먼저 물어야 한다. 두 세대가 같은 레포에 남아 있고, 어느 쪽이 폐기된 것인지는 문서에 적혀 있지 않다.

Why this matters to a successor: when someone says "the question ledger", ask which one. Two generations sit side by side in the repo and nothing records which was retired.

Vì sao người tiếp quản cần biết: khi ai nói "sổ câu hỏi", hãy hỏi sổ nào. Hai thế hệ nằm cạnh nhau trong kho và không có ghi chép cho biết bản nào đã ngừng dùng.

⭐ 그리고 여기서 계보 전체가 한 줄로 보인다and here the whole lineage lines up in one rowở đây toàn bộ dòng phát triển xếp thẳng hàng

같은 사실을 세 번 물었다.

Cùng một sự kiện được hỏi ba lần.

어디서whereở đâu같은 사실을 어떻게 다루는가how the same fact is handledcách xử lý cùng một sự kiện
question-ledgerq_maneuver — 사람이 양식에서 고른다(7개 값 중 하나). 비용 0, 단 답할 사람이 있어야 한다q_maneuver — a person picks from a form, one of seven values. Costs nothing, but needs a personq_maneuver — một người chọn từ biểu mẫu, một trong bảy giá trị. Không tốn chi phí, nhưng cần một người
visus §4.0사실 s7 — 모델이 영상에서 읽고 「오른쪽 차로에서 왼쪽으로 진로변경」이라 쓰고, 근거로 frames/04.40과 계측 x 0.82→0.61을 달았다fact s7 — a model reads it off the video as "changed lanes from the right", citing frames/04.40 and the measurement x 0.82→0.61sự kiện s7 — mô hình đọc từ video thành "chuyển làn từ bên phải", trích frames/04.40 và phép đo x 0.82→0.61
그리고 같은 일이 벌어졌다and the same thing happenedvà cùng một việc đã xảy ra둘 다 차43-1을 후보로 놓고 같은 조항을 물었다. 차이는 누가 답하느냐일 뿐이다 — 그리고 그것이 §2.1 계보 전체의 주제다both put 차43-1 up as a candidate and asked the same clauses. The only difference is who answers — and that is the whole subject of the lineage in §2.1cả hai đưa 차43-1 lên làm ứng viên và hỏi cùng các điều khoản. Khác biệt duy nhất là ai trả lời — đó cũng là toàn bộ chủ đề dòng phát triển ở §2.1
🚨 먼저 — 이 레포에는 시스템이 둘 들어 있다. 섞으면 숫자가 전부 틀린다first — this repo holds two systems, and conflating them makes every number wrongtrước hết — kho này chứa hai hệ thống; nhập nhằng chúng khiến mọi con số sai
ql-re — README가 설명하는 것ql-re — the one the README documentsql-re — hệ thống được README mô tả108도표 원장 — README가 없는 것the 108-chart ledger — the one with no READMEsổ 108 biểu đồ — hệ thống không có README
언제whenkhi nào2026-09-01 → 09-042026-09-12 → 09-14
규모sizequy mô도표 23개 · 질문 74개 · 조건 260개(필수 189 · 배제 38 · 참고 33) · 수정요소 182 · leaf 2523 charts, 74 questions, 260 conditions (189 required, 38 excluding, 33 advisory), 182 modifiers, 25 leaves23 biểu đồ, 74 câu hỏi, 260 điều kiện (189 bắt buộc, 38 loại trừ, 33 tư vấn), 182 yếu tố điều chỉnh, 25 lá도표 108개 · 질문 507개(사용 369) · 프로그램 108개108 charts, 507 questions (369 used), 108 programs108 biểu đồ, 507 câu hỏi (369 được dùng), 108 chương trình
어디whereở đâudata/questions.jsonknowledge/ · ledger/ · unified/

⚠️ 그리고 보고서가 자기 데이터와 어긋난다. reports/measurements.md는 질문 71 · 조건 244 · 시행 559 · 7.2% · 취약 사실 21이라고 적는데, 그것이 왔다는 data/measurements.json은 74 · 260 · 372 · 8.6% · 18이다. JSON을 쓸 것. README.md의 14·35·36·37행도 같은 식으로 낡았다 — §8.11의 new-knia와 똑같은 함정이다.

⚠️ And the report disagrees with its own data. reports/measurements.md says 71 questions, 244 conditions, 559 trials, 7.2%, 21 fragile facts; the data/measurements.json it claims to come from says 74, 260, 372, 8.6%, 18. Use the JSON. README.md lines 14, 35, 36 and 37 are stale the same way — the same trap as new-knia in §8.11.

⚠️ Báo cáo còn mâu thuẫn với chính dữ liệu. reports/measurements.md nói 71 câu hỏi, 244 điều kiện, 559 lần thử, 7.2%, 21 sự kiện mong manh; nhưng data/measurements.json mà báo cáo nhận là nguồn lại ghi 74, 260, 372, 8.6%, 18. Hãy dùng JSON. Các dòng 14, 35, 36 và 37 trong README.md cũng lỗi thời như vậy — cùng cái bẫy với new-knia ở §8.11.

실제 커밋 이력: 107커밋, 2026-09-01 → 10-14 — 납작한 스냅샷이 아니다. 다만 107개 중 98개가 9월 12~14일에 몰려 있고, 10-14 「Handover snapshot」은 tmp/ 잔재만 더한다.

The real history: 107 commits, 2026-09-01 → 10-14 — not a flat snapshot. But 98 of the 107 land on 12–14 September, and the 10-14 "Handover snapshot" adds only tmp/ residue.

Lịch sử thực: 107 commit, 2026-09-01 → 10-14 — không phải một ảnh chụp phẳng. Nhưng 98 trong 107 commit nằm ở 12–14 tháng 9, và "Handover snapshot" ngày 10-14 chỉ thêm phần dư tmp/.

⭐ 보정 — 「사건의 순서는 설계된 적이 없다」는 틀렸다. 두 번 설계됐다correction — "a sequence of events was never designed" is wrong. It was designed twiceđính chính — "chưa từng thiết kế chuỗi sự kiện" là sai. Nó được thiết kế hai lần

이 문서는 사건·구간·순서를 담는 표현이 한 사실에 대해서만 만들어졌다고 적어 왔다. question-ledger를 열어 보면 그보다 훨씬 멀리 가 있다.

This document has said that a representation for events, intervals and ordering was built for one fact only. Opening question-ledger shows it went considerably further than that.

Tài liệu này từng nói biểu diễn sự kiện, khoảng thời gian và thứ tự chỉ được xây cho một sự kiện duy nhất. Mở question-ledger cho thấy nó đã đi xa hơn đáng kể.

① ql-re가 한 칸을 셋으로 쪼갰다① ql-re split the one field into three① ql-re tách một trường thành baCarAccident의 direction 한 칸이 q_maneuver(time_scope: instant) + q_prior_state(span) + q_prior_stop_kind(span)로 갈라진다. ⭐ 그리고 세 번째 질문의 주석이 곧 계열 라우터다 — "주·정차 출발 → 차47 계열, 대기열 이탈 → 차43-4 계열". §2.2가 표현할 수 없다고 한 바로 그 사실에, 이름과 시간 범위와 행선지가 붙어 있다CarAccident’s single direction becomes q_maneuver (time_scope: instant) plus q_prior_state (span) plus q_prior_stop_kind (span). ⭐ And the third question’s note is itself the family router: "pulling away from a stop → the 차47 family; leaving a queue → the 차43-4 family." The very fact §2.2 calls unsayable has a name, a time scope and a destinationTrường direction duy nhất của CarAccident trở thành q_maneuver (time_scope: instant) cùng q_prior_state (span) và q_prior_stop_kind (span). ⭐ Ghi chú của câu hỏi thứ ba tự nó chính là bộ định tuyến họ biểu đồ: "khởi hành từ trạng thái dừng → họ 차47; rời hàng xe → họ 차43-4." Chính sự kiện mà §2.2 gọi là không thể nói có tên, phạm vi thời gian và đích đến
② 108도표 원장에는 진짜 사건 그래프가 있다② the 108-chart ledger has a real event graph② sổ 108 biểu đồ có đồ thị sự kiện thựcEvent.kind ∈ {boundary_crossing, impact, signal_change, maneuver_start, maneuver_end, observation_interval, …}, 시각은 이름 붙은 시계 위의 구간 값, 그리고 before()가 네 값을 돌려준다 — TRUE · FALSE · UNKNOWN · CONFLICT. ⭐ 「모른다」와 「증거가 서로 부딪힌다」를 구분한다. 게다가 RestartParkingHistory가 따로 있고 차46-1·47-1·47-2·47-3·51-1·51-2에 직접 묶여 있다Event.kind ∈ {boundary_crossing, impact, signal_change, maneuver_start, maneuver_end, observation_interval, …}, times are intervals on named clocks, and before() returns four values: TRUE, FALSE, UNKNOWN and CONFLICT. ⭐ It distinguishes "I don’t know" from "the evidence contradicts itself." There is even a dedicated RestartParkingHistory bound to 차46-1, 47-1, 47-2, 47-3, 51-1 and 51-2Event.kind ∈ {boundary_crossing, impact, signal_change, maneuver_start, maneuver_end, observation_interval, …}, thời gian là các khoảng trên đồng hồ có tên, và before() trả về bốn giá trị: TRUE, FALSE, UNKNOWN và CONFLICT. ⭐ Nó phân biệt "tôi không biết" với "bằng chứng tự mâu thuẫn". Thậm chí có RestartParkingHistory riêng gắn với 차46-1, 47-1, 47-2, 47-3, 51-1 và 51-2
🚨 그런데 검증된 적이 없다but it was never validatednhưng chưa từng được xác thực차47-1 예제가 "case_id": "synthetic-차47-1", "final_ratio": null, "certified": false다. 설계는 있고 실제 사건을 통과한 적은 없다the 차47-1 example reads "case_id": "synthetic-차47-1", "final_ratio": null, "certified": false. The design exists; it never ran on a real caseví dụ 차47-1 ghi "case_id": "synthetic-차47-1", "final_ratio": null, "certified": false. Thiết kế tồn tại; nó chưa từng chạy trên vụ thật

⭐ 그러므로 정확한 진술은 이렇다: 「설계되지 않았다」가 아니라 「설계되었고, 검증되지 않았고, 이어지지 않았다」. 후임자에게는 이쪽이 훨씬 쓸모 있는 말이다 — 빈 종이가 아니라 시험되지 않은 설계가 기다리고 있다는 뜻이니까. 특히 CONFLICT라는 네 번째 값은 지금 visus의 등급 어휘에 없는 것이다(§8.9의 「판단 불가가 둘을 합쳤다」와 같은 종류의 손실).

⭐ So the precise statement is: not "it was never designed" but "it was designed, never validated, and never carried forward". That is far more useful to a successor — what waits is an untested design, not a blank page. The fourth value, CONFLICT, is in particular absent from visus’s tier vocabulary today — the same kind of loss as the merge noted in §8.9.

⭐ Vì vậy phát biểu chính xác là: không phải "chưa từng thiết kế" mà là "đã thiết kế, chưa xác thực và chưa được chuyển tiếp". Điều đó hữu ích hơn nhiều cho người tiếp quản — thứ đang chờ là một thiết kế chưa thử nghiệm, không phải trang giấy trắng. Giá trị thứ tư, CONFLICT, đặc biệt vắng mặt trong bộ từ vựng cấp độ của visus hôm nay — cùng kiểu thất thoát như việc nhập nhóm ở §8.9.

🚨 계열 라우팅이 틀리면 어떻게 되는가 — 영상 번호와 함께what wrong-family routing costs, with the video numberschi phí định tuyến nhầm họ, kèm số video

레포가 이것을 「조용한 오확정」이라고 부른다 — 자신 있게, 틀린 계열로 확정하는 경우다. 셋이 기록되어 있다.

The repo calls these "silent false confirmations" — confident settlements on the wrong family. Three are recorded.

Kho gọi đây là "xác nhận sai âm thầm" — quyết định tự tin vào nhầm họ. Ba trường hợp được ghi lại.

영상videovideo정답goldchuẩn확정된 것what it confirmedđiều đã được xác nhận고객차 과실의 이동swing in our customer’s faultmức thay đổi tỷ lệ lỗi của khách hàng
009 · 029차43-2 (70)(70)차43-7(가) (0)(0)🚨 70점 points điểm
093차47-1 (80)(80)차45-3 (0)(0)🚨 80점 points điểm

⭐ 093을 보라 — 정확히 「정차 후 출발」 사건이다. 멈춰 서 있다가 슬금슬금 앞으로 나온 차가 「정차후출발」로 이름 붙었고 그대로 확정됐다. §2.2가 스키마에서 보인 구멍이 여기서는 80점짜리 오류로 나타난다. 같은 유형이 17편에 영향을 준다고 이슈가 적는다.

⭐ Look at 093 — it is exactly a stop-then-go. A car that waited and then crept forward was named 정차후출발 and confirmed on the restart chart. The hole §2.2 shows in the schema appears here as an 80-point error. The issue record says the same pattern affects 17 videos.

⭐ Nhìn 093 — đúng là dừng rồi đi. Một xe chờ rồi nhích lên đã được đặt tên 정차후출발 và xác nhận trên biểu đồ khởi hành lại. Khoảng trống lược đồ ở §2.2 hiện ra ở đây thành lỗi 80 điểm. Bản ghi lỗi nói cùng mẫu đó ảnh hưởng 17 video.

구조적으로도 세어 두었다 — data/fragile.json의 32건은 한 답만 틀려도 다른 leaf가 완전히 확정되는 경우들이고, 빠지는 곳은 차41-1이 14건 · 차43-2가 11건, 그리고 32건 중 12건이 q_maneuver에서 비롯된다. 가장 자주 틀리는 질문이 가장 많이 망가뜨리는 질문이다.

The structural count is there too — the 32 entries in data/fragile.json are cases where one wrong answer fully confirms a different leaf, the sinks being 차41-1 with 14 and 차43-2 with 11, and 12 of the 32 driven by q_maneuver. The question that is wrong most often is also the one that breaks the most.

Số đếm về cấu trúc cũng có — 32 mục trong data/fragile.json là trường hợp một đáp án sai xác nhận hoàn toàn một lá khác; đích rơi vào 차41-1 với 14 và 차43-2 với 11, và 12 trong 32 do q_maneuver gây ra. Câu hỏi thường sai nhất cũng là câu phá vỡ nhiều nhất.

⭐ 그래서 어떻게 끝났나 — 고쳤더니 엔진이 결정을 멈췄다how it ended — the fix made the engine stop decidingkết thúc ra sao — bản sửa khiến bộ máy ngừng quyết định

조용한 오확정을 막자 확정 24건 → 0건이 됐다(열림 63 · 선두 2). 레포는 이것을 「의도된 결과」라고 적는다 — 틀리게 확정하느니 열어 두는 편이 낫다. 그 다음 단계는 작업자 B의 재라벨링이었고, 그 일은 일어나지 않았다(§8.13).

Once the silent false confirmations were blocked, confirmations went 24 → 0 (63 open, 2 leading). The repo calls this "the intended outcome" — better open than confidently wrong. The next step was a re-labelling pass by labeller B, and it never happened (§8.13).

Sau khi chặn xác nhận sai âm thầm, số xác nhận từ 24 → 0 (63 mở, 2 dẫn đầu). Kho gọi đó là "kết quả chủ đích" — thà để mở còn hơn tự tin sai. Bước tiếp theo là một lượt gán nhãn lại do người gán nhãn B thực hiện, và nó chưa từng diễn ra (§8.13).

지금 남아 있는 최종 상태(재생 결과를 직접 열어 확인): 영상 68편, 확정 0 · 정답 지지 0 · 오답 지지 0, 클립당 평균 9.22개 도표가 여전히 살아 있다. 🚨 그리고 — 차47-1이 68편 중 65편에서 살아 있다.

The end state as it stands (read directly from the replay output): 68 videos, 0 confirmed, 0 gold-supported, 0 wrong-supported, a mean of 9.22 charts still alive per clip. 🚨 And — 차47-1 is alive on 65 of the 68.

Trạng thái cuối hiện có (đọc thẳng đầu ra phát lại): 68 video, 0 xác nhận, 0 được chuẩn ủng hộ, 0 được dữ liệu sai ủng hộ, trung bình 9.22 biểu đồ còn sống mỗi clip. 🚨 Ngoài ra — 차47-1 còn sống ở 65 trong 68 video.

⭐ 이 한 줄로 이 문서의 사슬이 맞물린다. 정차 후 출발 도표는 「틀리게 확정되는 것」에서 「한 번도 제거되지 않는 것」으로 옮겨 갔을 뿐이다. 표현할 수단이 생기지 않는 한, 그 도표는 확정되지도 탈락하지도 않는다. §2.2의 구멍 · §5.6의 26% 붕괴 · 여기의 65/68이 전부 같은 하나의 결핍이다.

⭐ That one line closes this document’s chain. The stop-then-go chart simply moved from "wrongly confirmed" to "never eliminated". Until there is a way to express the fact, that chart can be neither settled nor ruled out. §2.2’s hole, §5.6’s 26% collapse and the 65-of-68 here are one and the same deficiency.

⭐ Một dòng đó khép kín chuỗi lập luận của tài liệu. Biểu đồ dừng rồi đi chỉ chuyển từ "xác nhận sai" sang "không bao giờ bị loại". Cho đến khi có cách biểu đạt sự kiện, biểu đồ ấy không thể được xác nhận lẫn loại trừ. Khoảng trống ở §2.2, mức sụp 26% ở §5.6 và 65/68 ở đây là cùng một thiếu sót.

⚠️ 두 가지는 바로잡아 둔다 — 이 문서가 세게 말해 온 것들two things this document had stated too stronglyhai điều tài liệu này đã nói quá mạnh

① 「무관한 질문 하나가 옳은 도표를 떨어뜨린다」는 절반만 맞다. 엄격 모드에서는 그렇다. 그러나 실제로 재어 보면 — 무관한 traffic_signal 하나가 match_score를 1.0 → 0.35로 떨어뜨리지만, 6단계 폴백이 여전히 차47-2를 돌려준다. 정확한 표현은 「확신 신호를 파괴하고, 마지막 수단이 하드코딩된 차42-2/차41-1 추측인 폴백 사슬로 떨어뜨린다」이지 「틀린 도표를 고른다」가 아니다. 후자가 더 자극적이지만 전자가 사실이고, 더 나쁘다 — 틀린 답이 아니라 근거 없는 답이 나온다.

① "One irrelevant question drops the right chart" is only half true. In strict mode, yes. Measured, though: one irrelevant traffic_signal takes match_score from 1.0 to 0.35, but a six-stage fallback still returns 차47-2. The accurate statement is "it destroys the confidence signal and drops into a cascade whose last resort is a hard-coded 차42-2 / 차41-1 guess" — not "it picks the wrong chart". The second is more dramatic; the first is true, and worse — what comes back is not a wrong answer but an unevidenced one.

① "Một câu hỏi không liên quan làm rơi biểu đồ đúng" chỉ đúng một nửa. Đúng trong chế độ strict. Nhưng khi đo: một traffic_signal không liên quan làm match_score từ 1.0 xuống 0.35, còn chuỗi dự phòng sáu giai đoạn vẫn trả về 차47-2. Phát biểu chính xác là "nó phá hủy tín hiệu độ tin cậy rồi rơi vào chuỗi dự phòng mà biện pháp cuối là đoán cứng 차42-2 / 차41-1" — không phải "nó chọn sai biểu đồ". Cách thứ hai kịch tính hơn; cách thứ nhất đúng và tệ hơn — thứ trả về không phải đáp án sai mà là đáp án không có bằng chứng.

② 「이 결함들 때문에 question-ledger가 시작됐다」는 레포로 확인되지 않는다. question-ledger 어디에도 CarAccident를 가리키는 문장이 없다. 두 레포 사이의 관계는 코드가 아니라 사람의 기억에서 온다. 인과는 그럴듯하고 증거는 정황이다 — 그렇게 적어 둔다. 다만 설계 자체가 증거이기는 하다: 위의 ①에서 본 대로, ql-re가 쪼갠 세 질문은 정확히 CarAccident의 한 칸이 못 하던 일을 한다.

② "These defects are why question-ledger started" is not confirmable from the repos. Nothing in question-ledger references CarAccident. The link between them comes from memory, not from code. The causal story is plausible and the evidence circumstantial — recorded as such. Though the design is itself a kind of evidence: as ① above shows, the three questions ql-re split out do precisely what CarAccident’s one field could not.

② "Các khuyết điểm này là lý do bắt đầu question-ledger" không thể xác nhận từ các kho. Không có gì trong question-ledger tham chiếu CarAccident. Mối nối đến từ ký ức, không phải mã. Câu chuyện nhân quả hợp lý nhưng bằng chứng chỉ gián tiếp — được ghi đúng như vậy. Tuy nhiên chính thiết kế cũng là một loại bằng chứng: như ① trên cho thấy, ba câu hỏi ql-re tách ra làm đúng việc mà trường đơn của CarAccident không làm được.

⚠️ 그리고 「질문별 VLM 정확도가 없다」는 — 레포가 세 번 스스로 적어 두었다and "no per-question VLM accuracy" — the repo says so itself, three timesvà "không có độ chính xác VLM theo từng câu hỏi" — chính kho nói ba lần
1reports/measurements.md — "evidence.difficulty 태그는 추정치이지 측정된 VLM 성능이 아니다(원문: 「질문에 붙은 evidence.difficulty 태그」)"reports/measurements.md — "the evidence.difficulty tags on questions are estimates, not measured VLM performance"reports/measurements.md — "các thẻ evidence.difficulty trên câu hỏi là ước lượng, không phải hiệu năng VLM đã đo"
2⭐ 커밋 제목 자체가 그 고백이다 — "Stop labelling dashcam-visible questions as AI-answerable; accuracy is unmeasured". 그 커밋이 라벨을 「AI가 답할 수 있음」에서 「(AI 정확도 미측정)」으로 바꾼다⭐ a commit title is the admission: "Stop labelling dashcam-visible questions as AI-answerable; accuracy is unmeasured" — and it changes the label from "the AI can answer this" to "(AI accuracy unmeasured)"⭐ tiêu đề commit là lời thừa nhận: "Ngừng gắn nhãn các câu hỏi nhìn được từ camera hành trình là AI có thể trả lời; độ chính xác chưa được đo" — đổi nhãn từ "AI có thể trả lời" sang "(độ chính xác AI chưa đo)"
3reports/ledger-coverage.json — "independent_semantic_verification": {"charts": 0, "questions": 0, "real_case_gold": 0}. 세 칸 다 0이다reports/ledger-coverage.json — "independent_semantic_verification": {"charts": 0, "questions": 0, "real_case_gold": 0}. All three are zeroreports/ledger-coverage.json — "independent_semantic_verification": {"charts": 0, "questions": 0, "real_case_gold": 0}. Cả ba đều bằng 0

🚨 그리고 68편을 답한 것은 모델이 아니라 사람이다(「라벨러 A」). 즉 이 레포의 어떤 숫자도 VLM 성능이 아니다. 덧붙여 — 507개 질문 중 블랙박스로 답할 수 있다고 판단된 것은 72개뿐이고, 322개는 requires_reasoned_judgment: true로 사람에게 간다.

🚨 And the 68 videos were answered by a human ("labeller A"), not a model — so no number in this repo is a VLM measurement. Note too that only 72 of the 507 questions are judged answerable from a dashcam at all, and 322 carry requires_reasoned_judgment: true, routing them to a person.

🚨 68 video được một người trả lời ("người gán nhãn A"), không phải mô hình — nên không con số nào trong kho này là phép đo VLM. Cũng lưu ý chỉ 72 trong 507 câu được đánh giá là có thể trả lời từ camera hành trình, và 322 câu mang requires_reasoned_judgment: true, chuyển chúng cho con người.

⭐ 마지막으로, 공정하게. 이 문서가 CarAccident를 두고 「불리언 플래그가 VLM에게 교통법규 전체를 알라고 요구한다」는 식으로 말해 온 것은 글자 그대로는 맞지 않는다 — CarAccident의 사고 스키마에는 불리언이 하나도 없다(유일한 bool은 매처 손잡이인 strict다). 역설적이게도 불리언이 많은 쪽은 question-ledger다(507개 중 317개). 차이는 불리언이냐가 아니라 규약이 붙어 있느냐다 — question-ledger의 불리언에는 세 번째 상태(unresolved)와 금지된 추론 목록이 붙어 있다(예: "VLM의 위험도 점수만으로 고의를 만들지 않는다"). CarAccident의 한 칸짜리 법적 결론에는 그 둘이 다 없었다.

⭐ And finally, in fairness. Where this document has framed CarAccident as asking a VLM to know the whole traffic code behind a boolean flag, that is not literally right — there is no boolean anywhere in CarAccident’s accident schema (the only bool is strict, a matcher knob). Ironically the boolean-heavy repo is question-ledger (317 of 507). The difference is not booleans but protocol: question-ledger’s come with a third state (unresolved) and a list of forbidden inferences — for example, "do not manufacture intent from a VLM risk score alone." CarAccident’s one-field legal conclusion had neither.

⭐ Cuối cùng, để công bằng. Khi tài liệu mô tả CarAccident yêu cầu VLM hiểu cả luật giao thông đằng sau cờ boolean, điều đó không đúng theo nghĩa đen — không có boolean nào trong lược đồ tai nạn của CarAccident (giá trị bool duy nhất là strict, một tùy chọn bộ khớp). Trớ trêu là kho nhiều boolean lại là question-ledger (317 trong 507). Khác biệt nằm ở giao thức, không ở boolean: các câu của question-ledger đi kèm trạng thái thứ ba (unresolved) và danh sách các suy luận bị cấm — ví dụ "không tạo ra ý định chỉ từ điểm rủi ro của VLM." Kết luận pháp lý gói trong một trường của CarAccident không có cả hai.

8.2fault-lab · ancestor of the negotiation table · tiền thân của bảng thương lượng 🔬 정밀🔬 Chi tiết

협의 준비표(2단계)의 조상. 4일, 클립 12편. 한 레포에 서로 다른 두 몸통이 들어 있다 — ① 본체 약 2,000줄(expected.py 규칙 엔진 · m1_* VLM 관찰 · m2_* 주장·방어 작성), ② 관련 없는 지각 연구 — bev_* · lanes_* · depth* · worldmap* 파일만 9,266줄(전체 15,420줄 중). 자산: data/kb/leaves_snapshot.json — 25 leaf · 수정요소 182 · 관찰 질문 74.

Ancestor of the negotiation board (stage 2). Four days, 12 clips. One repo holds two unrelated bodies of code — ① the core, about 2,000 lines (expected.py rule engine · m1_* VLM observation · m2_* claim and defence writing), and ② about 13,000 lines of unrelated perception research (bev_* · lanes_* · depth* · worldmap*). The asset: data/kb/leaves_snapshot.json — 25 leaves, 182 modifiers, 74 observation questions.

Tiền thân bảng thương lượng (giai đoạn 2). Bốn ngày, 12 clip. Một kho chứa hai nhóm mã không liên quan — ① phần lõi, khoảng 2,000 dòng (bộ luật expected.py · quan sát VLM m1_* · viết lập luận và phản biện m2_*), và ② khoảng 13,000 dòng nghiên cứu tri giác không liên quan (bev_* · lanes_* · depth* · worldmap*). Tài sản: data/kb/leaves_snapshot.json — 25 lá, 182 yếu tố điều chỉnh, 74 câu hỏi quan sát.

⚠️ 숫자가 실제로 무엇을 재는가 — 오라클 채점What the numbers measure: an oracleCác con số thực sự đo gì: đáp án chuẩn được cấp sẵn

fault-lab's "strict 3/4 · 2/2" is not accuracy on cases. The LLM is handed the rule engine's own input and scored on whether it reproduces that engine's output — an oracle, on a denominator of 4 and 2. Its M1 "10 right / 2 wrong" is scored against the same derived facts. The repo's own README §7 forbids exactly this ("do not make your own gold"), and a question raised in its design doc about whether this was legitimate was never answered.

"strict 3/4 · 2/2" của fault-lab không phải độ chính xác trên các vụ. LLM được cấp chính đầu vào của bộ luật rồi chấm xem có tái tạo được đầu ra của bộ luật không — một phép thử oracle, với mẫu số 4 và 2. "10 đúng / 2 sai" của M1 cũng được chấm theo chính các dữ kiện suy ra đó. README §7 của kho cấm đúng điều này ("đừng tự tạo chuẩn của mình"), và câu hỏi trong tài liệu thiết kế về tính hợp lệ của cách làm ấy chưa được trả lời.

README의 「엄격 3/4 · 2/2」는 사건 정확도가 아니다. LLM이 규칙 엔진의 입력을 받아 그 엔진의 출력을 재현한 것이다.

The README’s "strict 3/4 · 2/2" is not case accuracy. It is an LLM being handed the rule engine’s input and reproducing that engine’s output.

"strict 3/4 · 2/2" trong README không phải độ chính xác theo vụ. Đó là LLM được cấp đầu vào của bộ luật rồi tái tạo đầu ra của chính bộ luật.

m2_compose.py:3       "--facts expected = ORACLE"
render_facts        → runs/expected/<clip>.json 의 exp["facts"] 를 그대로 출력
score_m2.score_clip → exp["lower_ours_expected"] 에 대해 채점
expected.py:158     ← 그 값을 같은 facts 로부터 계산m2_compose.py:3       "--facts expected = ORACLE"
render_facts        → prints exp["facts"] from runs/expected/<clip>.json verbatim
score_m2.score_clip → scores against exp["lower_ours_expected"]
expected.py:158     ← which computes that value from the same factsm2_compose.py:3       "--facts expected = ORACLE"
render_facts        → in exp["facts"] từ runs/expected/<clip>.json nguyên văn
score_m2.score_clip → chấm theo exp["lower_ours_expected"]
expected.py:158     ← tính giá trị đó từ cùng những dữ kiện

분모도 작다 — 12편에서 예측 4건, 강한 주장 2건. M1의 「10 정답 / 2 오답」도 같은 runs/expected 사실에 대해 채점된다 = Ian의 라벨을 스크립트가 변환한 것이 정답지다. README §7이 바로 이것을 금지한다(「gold를 스스로 만들지 않는다」). fault-lab-v1.md §6 Q2가 판단을 요청해 두었고 — 답이 없는 채로 남아 있다.

The denominator is small too — 4 predictions and 2 strong claims from 12 clips. M1’s "10 right / 2 wrong" is scored against the same runs/expected facts, which makes the answer key a script’s transformation of the same labels being scored. §7 of the README forbids exactly this ("do not manufacture your own gold"). fault-lab-v1.md §6 Q2 raised it for a decision — and it is still unanswered.

Mẫu số cũng nhỏ — 4 dự đoán và 2 lập luận mạnh từ 12 clip. "10 đúng / 2 sai" của M1 được chấm theo cùng dữ kiện runs/expected, khiến đáp án chuẩn chỉ là phép biến đổi bằng kịch bản của chính các nhãn đang được chấm. §7 README cấm đúng điều này ("đừng tự chế chuẩn"). fault-lab-v1.md §6 Q2 đã nêu để quyết định — nhưng vẫn chưa có trả lời.

🚨 모델이 뒤집어쓴 코드 버그A code bug the model was blamed forLỗi mã mà mô hình bị quy trách nhiệm

This is the most important kind of correction in a handover. m1_questions.py:158 derives "the following distance was close" — the fact that triggers a sole-fault finding — from a difference between two timestamps. Report 01 recorded the resulting bogus sole-fault claims as the VLM inventing things. They were a unit confusion in our own code. A successor who believes the report will try to change the model, and nothing will improve.

Đây là kiểu đính chính quan trọng nhất trong bàn giao. m1_questions.py:158 suy ra "khoảng cách bám xe gần" — dữ kiện kích hoạt kết luận lỗi đơn phương — từ chênh lệch hai mốc thời gian. Báo cáo 01 ghi các lập luận lỗi đơn phương giả đó là VLM bịa. Thực tế là nhầm đơn vị trong mã của chúng ta. Người tiếp quản tin báo cáo sẽ tìm cách đổi mô hình, và không có gì được cải thiện.

m1_questions.py:158 — 「차간거리 close」(일방과실을 발동시키는 거리 사실)를 시간 차이에서 추론한다:

m1_questions.py:158 — suy ra "khoảng cách bám xe close" (dữ kiện khoảng cách kích hoạt lỗi đơn phương) từ chênh lệch thời gian:

if lat is not None and t_c is not None and t_c - lat <= 1.0: return "close"

report 01이 「VLM 탓」으로 돌린 가짜 일방과실 주장의 원인이다. 모델의 실패로 기록된 것이 실은 코드의 단위 혼동이었다 — 후임자가 이것을 믿고 모델을 바꾸려 들 수 있다.

What the report recorded as the VLM inventing a sole-fault claim was a unit confusion in our own code.

Điều báo cáo ghi là VLM bịa ra lập luận lỗi đơn phương thực chất là nhầm đơn vị trong mã của chúng ta.

그 밖의 결함other defectscác khuyết điểm khác
m1_questions.py:133None에서 확신 있는 코드를 만들어 낸다 — docstring의 「never guessed」와 모순manufactures a confident code out of None — contradicting its own docstring's "never guessed"tạo ra mã chắc chắn từ None — trái với docstring "không bao giờ đoán" của chính nó
score_m2.expected_rangeapply(ids, direction)가 direction을 쓰지 않는다. 배타 쌍 이중 계산 가능 (현재는 중복 제거에 가려진 잠복 버그)apply(ids, direction) never uses direction. Mutually exclusive pairs can be double-counted (latent today, hidden by de-duplication)apply(ids, direction) không bao giờ dùng direction. Các cặp loại trừ lẫn nhau có thể bị đếm hai lần (đang tiềm ẩn, bị che bởi loại trùng)
expected.py:126서로 다른 질문을 OR로 묶는다. 182개 중 104개가 질문 2개 이상이고 일부는 AND다 (차41-1#m04 = 저속 그리고 이유 없는 정지 그리고 3차로 이상)ORs together questions that are not alternatives. 104 of 182 modifiers have two or more questions and some are AND conditions (차41-1#m04 = slow and stopping without reason and three or more lanes)OR các câu hỏi vốn không phải lựa chọn thay thế. 104 trong 182 yếu tố điều chỉnh có từ hai câu hỏi, và một số là điều kiện AND (차41-1#m04 = chạy chậm và dừng không lý do và từ ba làn trở lên)
run_m1.py:164실패만 재시도하며 samples에 덧붙인다 → 클립마다 n_samples가 달라져 자기일관성 임계값이 비교 불가retries only failures and appends to samples → n_samples differs per clip, so the self-consistency threshold is not comparable across clipschỉ thử lại các lần thất bại và nối thêm vào samples → n_samples khác nhau giữa clip, nên ngưỡng tự nhất quán không thể so sánh giữa các clip
counterpart_rank.pymin_frames가 한 번도 전달되지 않는다. 「최소 프레임 5」는 실제로 전체 트랙 길이로 거른다min_frames is never passed. The "minimum 5 frames" row actually filters on total track lengthmin_frames không bao giờ được truyền. Dòng "tối thiểu 5 khung hình" thực tế lọc theo tổng chiều dài quỹ đạo
report 00 vs 03báo cáo 00 so với 03크기 적분 5/9 vs 4/9size-integral 5/9 vs 4/9tích phân kích thước 5/9 so với 4/9
.gitignore: runs/*/🚨 모든 산출물·점수표·그림이 레포에 없다. 어떤 헤드라인도 재현 불가하고 VLM은 사라진 RunPod 파드였다🚨 Every run output, scorecard and figure is absent from the repo. No headline can be reproduced, and the VLM was a RunPod pod that no longer exists🚨 Mọi đầu ra chạy, bảng điểm và hình đều vắng mặt trong kho. Không con số nổi bật nào tái hiện được, và VLM từng nằm trên pod RunPod không còn tồn tại

⭐ 쓰이지 않은 유용한 수치Measurements nobody usedCác phép đo chưa ai dùng

Five of the twelve clips (차43-4) have zero modifiers observable from video at all — half the clip set was wasted, and a 68-clip × question table for choosing a better one already exists. All twelve ground-truth lane markings are dashed, so solid-vs-dashed cannot be measured on this data at all. Input geometry beat model choice: cropping to the road band took lane fitting from 0/12 to 3/12. And in lenient mode a weak 현저한 과실 claim leaks on 11 of 12 clips — a policy decision nobody has made yet, already quantified.

Năm trong mười hai clip (차43-4) không có yếu tố điều chỉnh nào quan sát được từ video — một nửa tập clip bị lãng phí, trong khi bảng 68 clip × câu hỏi để chọn tập tốt hơn đã có. Toàn bộ mười hai nhãn chuẩn vạch làn đều là nét đứt, nên không thể đo phân biệt liền/đứt với dữ liệu này. Hình học đầu vào thắng lựa chọn mô hình: cắt vào dải mặt đường nâng khớp làn từ 0/12 lên 3/12. Ngoài ra, chế độ dễ dãi để lọt lập luận yếu về 현저한 과실 ở 11/12 clip — một quyết định chính sách chưa ai đưa ra nhưng đã được định lượng.

  • 12편 중 5편(차43-4)은 영상으로 관찰 가능한 수정요소가 0개 — 클립 세트의 절반이 낭비됐다. 쓸 만한 세트를 고르는 68클립 × 질문 표가 이미 있다5 of the 12 clips (차43-4) have zero modifiers observable from video at all — half the clip set was wasted. A 68-clip × question table for choosing a better set already exists5 trong 12 clip (차43-4) không có yếu tố điều chỉnh nào quan sát được từ video — một nửa tập clip bị lãng phí. Bảng 68 clip × câu hỏi để chọn tập tốt hơn đã có
  • 정답 차선 12개가 전부 점선 → 실선/점선 판별은 이 데이터로 측정 자체가 불가능All 12 ground-truth lanes are dashed → solid-vs-dashed cannot be measured on this data at allCả 12 làn trong chuẩn đều nét đứt → không thể đo liền so với đứt bằng dữ liệu này
  • 입력 기하가 모델 선택을 이긴다: 전체 프레임 0/12 → 도로 밴드 3/12, support 0.13 → 0.22Input geometry beats model choice: whole frame 0/12 → road band 3/12, support 0.13 → 0.22Hình học đầu vào thắng lựa chọn mô hình: cả khung 0/12 → dải mặt đường 3/12, mức hỗ trợ 0.13 → 0.22
  • 접촉 시점 9/11이 ±1.0 s 이내. 관대 모드에서 11/12에 현저한 과실 약한 주장이 샌다 — 아직 내려지지 않은 정책 결정이 이미 정량화돼 있다Contact timing within ±1.0 s on 9 of 11. And in lenient mode a weak gross-negligence claim leaks on 11 of 12 — a policy decision nobody has made, already quantifiedThời điểm tiếp xúc trong ±1.0 s ở 9 trong 11. Ngoài ra, chế độ dễ dãi để lọt lập luận lỗi nghiêm trọng yếu ở 11 trong 12 — một quyết định chính sách chưa ai đưa ra, đã được định lượng
⚠️ 주의해서 읽을 것đọc cẩn thận

「수정요소 체계가 visus로 넘어가지 않았다」는 사실이 아니다. visus에는 visus/negotiation.py가 있고 knia.factors(chart_no)가 {label, applies_to, a, b, or_group}을 돌려준다. 구조는 넘어가지 않았지만 기능은 다시 만들어졌다 — 책에서 직접 가져오는 방식으로.

It is often said that fault-lab's modifier machinery did not survive into visus. That is wrong: visus has its own negotiation module, and knia.factors(chart) returns each factor with the party it accuses and its signed points. The structure did not carry over; the capability was rebuilt — by reading the factors straight out of the book instead of encoding them.

Thường có ý kiến rằng cơ chế yếu tố điều chỉnh của fault-lab không sống tiếp trong visus. Điều đó sai: visus có mô-đun thương lượng riêng, và knia.factors(chart) trả mỗi yếu tố cùng bên bị quy trách nhiệm và số điểm có dấu. Cấu trúc không được chuyển tiếp; năng lực được xây lại — đọc các yếu tố thẳng từ sách thay vì mã hóa chúng.

⭐ 끝까지 따라가 보기 — 클립 011 하나가 지나가는 길⭐ Walk one clip — clip 011 through the modifier engine⭐ Đi qua một clip — clip 011 qua bộ máy yếu tố điều chỉnh

§4.0이 도표를 고르는 절반을 보였다면, fault-lab은 그 뒤의 절반이다 — 도표가 정해진 다음에 가감요소로 비율이 얼마나 움직이는가. 아래는 레포의 코드를 그대로 다시 돌려서 얻은 출력이다.

If §4.0 showed the half that chooses the chart, fault-lab is the half after it — once the chart is fixed, how far do the modifiers move the ratio. What follows is the output of re-running the repo’s own code.

Nếu §4.0 cho thấy nửa chọn biểu đồ, fault-lab là nửa sau đó — sau khi chốt biểu đồ, các yếu tố điều chỉnh dịch chuyển tỷ lệ bao xa. Dưới đây là đầu ra khi chạy lại chính mã của kho.

단계stagegiai đoạn클립 011에서 실제로 나온 것what clip 011 actually producedclip 011 thực sự tạo ra gì
입력inputđầu vào도표는 이미 정해져 있다(차43-3). 여기서부터가 fault-lab의 문제다the chart is already settled (차43-3). fault-lab’s problem starts herebiểu đồ đã được chốt (차43-3). Bài toán của fault-lab bắt đầu ở đây
expected.py규칙 표가 세 묶음을 낸다 — 우리가 낮추자고 할 수 있는 것 [차43-3#m08] · 상대가 주장할 것 [#m01, #m07] · 모르겠는 것 [#m03]the rule table emits three buckets — what we could argue down [차43-3#m08], what the other side will claim [#m01, #m07], and what is unknown [#m03]bảng luật tạo ba nhóm — những gì ta có thể lập luận để giảm [차43-3#m08], những gì phía đối phương sẽ yêu cầu [#m01, #m07], và những gì chưa biết [#m03]
범위rangephạm vi40 – 80 — 양쪽 주장이 다 받아들여질 때의 양 끝. §4.0의 비율 스트립과 같은 생각이다40 – 80 — the two ends if every claim on each side lands. The same idea as the ratio strip in §4.040 – 80 — hai đầu nếu mọi lập luận của mỗi bên đều được chấp nhận. Cùng ý tưởng với dải tỷ lệ ở §4.0
남긴 표시a flag it raisedmột cờ đã được nêu「stop kind unknown」 — 정차인지 서행인지를 가르지 못했다는 표시. §2.2의 「사건을 담을 수 없다」가 여기서 또 나온다"stop kind unknown" — it could not tell a stop from a slow-down. This is §2.2’s "it cannot hold an event" surfacing again"không rõ loại dừng" — không phân biệt được dừng với giảm tốc. Đây là việc "không chứa được sự kiện" ở §2.2 tái xuất hiện
🚨 그런데 「엄격 3/4 · 2/2」는 정확도가 아니다but "strict 3/4 · 2/2" is not an accuracynhưng "strict 3/4 · 2/2" không phải độ chính xác

정답지를 expected.py 자신의 출력에서 가져온다(score_m2.py), 그리고 LLM에게는 그 정답지가 도출된 바로 그 사실들을 그대로 넣어 준다(m2_compose.py). 즉 하나의 규칙 표를 같은 입력에 두 번 적용한 결과가 서로 맞는지를 본 것이고, 사정사의 판단과는 비교된 적이 없다.

The answer key is taken from expected.py’s own output (score_m2.py), and the LLM is handed the very facts that key was derived from (m2_compose.py). It measures agreement between two applications of one rule table over identical inputs. It was never compared against an adjuster.

Đáp án chuẩn lấy từ chính đầu ra của expected.py (score_m2.py), còn LLM được cấp đúng các dữ kiện dùng suy ra chuẩn đó (m2_compose.py). Nó đo mức đồng ý giữa hai lần áp dụng cùng bảng luật lên đầu vào giống hệt. Chưa từng so với điều tra viên.

분모도 작다. 12클립 전체에서 정답 항목은 다 합쳐 5개이고 그중 2개는 클립 하나(011)에서 나왔으며, 12클립 중 9클립은 정답을 하나도 기여하지 않는다(다섯 클립은 차43-4라 영상으로 볼 가감요소가 아예 없다). 관대 모드로 세면 같은 실행이 3/7 · 2/14로 읽힌다.

The denominator is small too. Across all 12 clips there are five ground-truth items in total, two of them from a single clip (011), and nine of the twelve contribute none at all — five are 차43-4, which has no visually checkable modifier. Counted leniently the same run reads 3/7 and 2/14.

Mẫu số cũng nhỏ. Trong cả 12 clip chỉ có tổng cộng năm mục chuẩn, hai mục từ một clip (011), và chín trong mười hai clip không đóng góp mục nào — năm clip là 차43-4, vốn không có yếu tố điều chỉnh kiểm chứng được bằng hình ảnh. Nếu đếm dễ dãi, cùng lần chạy cho 3/7 và 2/14.

⭐ 그리고 레포가 이것을 스스로 물어 놓고 답하지 않았다. docs/fault-lab-v1.md의 미해결 질문 2번이 그대로 이 질문이다 — "v0(expected.py)이 stage0_gold에서 기대 수정요소를 유도하는 것을 gold로 인정하는가(README §7 「gold를 스스로 만들지 않는다」와의 관계)". 기록에 답은 남아 있지 않다.

⭐ And the repo asked itself exactly this, then never answered. The second of its own open questions, in docs/fault-lab-v1.md, reads: "does deriving the expected modifiers from stage0_gold count as gold — given README §7, ‘do not manufacture your own gold’?" No answer is in the record.

⭐ Chính kho đã tự hỏi đúng điều này, rồi không trả lời. Câu hỏi mở thứ hai trong docs/fault-lab-v1.md viết: "suy ra các yếu tố điều chỉnh kỳ vọng từ stage0_gold có được coi là chuẩn không — xét README §7 ‘đừng tự chế chuẩn’?" Không có câu trả lời trong bản ghi.

M1의 「10 정답 / 2 오답」은 진짜 비교이다(VLM 대 사람의 주석). 다만 분모가 클립이 아니라 (질문, 당사자) 쌍이고, 정답 10 + 오답 2 + 기권 13 + 정답지 없음 17 = 42 중 채점된 것은 25개다. 그리고 레포 자신의 평가가 더 냉정하다 — 「A의 정답은 기저율이다」, 즉 다수값을 답해서 이긴 것이고 +20을 움직이는 바로 그 사실은 놓쳤다.

M1’s "10 right / 2 wrong" is a genuine comparison (the VLM against a human’s annotation), but the denominator is (question, party) keys, not clips: 10 correct + 2 wrong + 13 abstentions + 17 keys with no gold = 42, so 25 were scored. The repo’s own verdict is harsher — "A’s correct answer is the base rate": it wins by answering the majority value, and missed the one fact that carried +20.

"10 đúng / 2 sai" của M1 là so sánh thực (VLM so với nhãn của người), nhưng mẫu số là các khóa (câu hỏi, bên), không phải clip: 10 đúng + 2 sai + 13 từ chối trả lời + 17 khóa không có chuẩn = 42, nên 25 mục được chấm. Kết luận của chính kho còn khắt khe hơn — "Đáp án đúng của A là tỷ lệ nền": nó thắng bằng cách trả giá trị chiếm đa số, và bỏ lỡ sự kiện duy nhất mang +20.

⚠️ 그리고 이 수치들은 이제 감사할 수 없다. .gitignore 5행이 runs/*/라서 인용된 모든 실행 산출물이 스냅샷에서 빠졌고, 문서가 가리키는 그림 16장은 전부 죽은 링크다. 위의 클립 011 결과를 얻으려면 코드를 다시 돌리는 수밖에 없다(그렇게 해서 문서의 주장과 일치함을 확인했다).

⚠️ And none of it can be audited as it stands. .gitignore line 5 is runs/*/, so every stored run the documents cite was excluded from the handover snapshot, and all 16 figures they reference are dead links. The clip-011 output above had to be obtained by re-running the code — which did reproduce the documents’ claim exactly.

⚠️ Không thể kiểm tra lại chúng ở trạng thái hiện tại. Dòng 5 của .gitignore là runs/*/, nên mọi lần chạy được lưu mà tài liệu trích đều bị loại khỏi ảnh chụp bàn giao, và cả 16 hình được tham chiếu đều là liên kết chết. Đầu ra clip 011 phía trên phải lấy bằng chạy lại mã — việc đó tái tạo chính xác tuyên bố trong tài liệu.

물려준 것 · 버린 것what carried over, what did notđiều gì được chuyển tiếp, điều gì không
버려진 쪽이 압도적으로 크다most of it was abandonedphần lớn bị bỏ lại파이썬 15,420줄 중 bev_* · lanes_* · depth* · worldmap* 파일만 9,266줄 — 과실비율과 무관한 지각 연구다. 핵심은 그 나머지 일부에 불과하다of 15,420 Python lines, the bev_* · lanes_* · depth* · worldmap* files alone are 9,266 — perception research unrelated to fault ratio. The core is a fraction of the resttrong 15,420 dòng Python, riêng các tệp bev_* · lanes_* · depth* · worldmap* đã là 9,266 — nghiên cứu tri giác không liên quan đến tỷ lệ lỗi. Lõi chỉ là một phần nhỏ của phần còn lại
설계로만 살아남았다it survived as design intent onlychỉ ý định thiết kế được giữ lạivisus에서 fault-lab을 찾으면 한 건도 나오지 않는다 — 코드는 이어지지 않았다. 그런데 협의 준비표라는 생각 자체는 살아남아 오늘 운영 화면의 과실 협의 보드가 됐다(§4.0의 세 번째 사진)search visus for fault-lab and nothing comes back — no code crossed over. But the idea of a negotiation board did, and it is the 과실 협의 screen running in production today (the third screenshot in §4.0)tìm fault-lab trong visus không ra gì — không mã nào được chuyển sang. Nhưng ý tưởng bảng thương lượng có, và đó là màn hình 과실 협의 đang chạy trong sản phẩm hôm nay (ảnh thứ ba ở §4.0)

8.3lense CV 체인 — visus가 지금 물려받고 있는 것chain — what visus inherits todaychuỗi — những gì visus kế thừa hôm nay 🔬 정밀🔬 Chi tiết

lense는 끝났지만 CV 체인은 살아 있는 의존성이다. visus가 lense.vehicles(detect · egomask · link)를 벤더링해 GPU 서비스 안에서 돌린다. 여기의 결함은 오늘 운영에 그대로 들어간다.

lense is finished, but its CV chain is a live dependency. visus vendors lense.vehicles (detect · egomask · link) and runs it inside the GPU service. Every defect here is in production today.

lense đã kết thúc, nhưng chuỗi CV của nó là phụ thuộc đang hoạt động. visus đưa lense.vehicles (phát hiện · egomask · liên kết) vào mã và chạy trong dịch vụ GPU. Mọi khuyết điểm ở đây đều đang nằm trong sản phẩm.

상대차는 어떻게 정해지나 — 넓이다How the other car is picked: by areaXe đối phương được chọn ra sao: theo diện tích

The other vehicle is chosen by area alone: boxes are normalised, clipped at the bonnet line, and the track with the largest summed area in the 1.5 s before impact wins. min_frames: 1 — a single frame is enough to score. No appearance, no depth, no motion. Approach side is the median sign of the box-bottom centre against the frame axis. Two real defects: the side is measured on un-deduplicated tracks while the id came from a merged ranking, so a severed half-track can be measured; and the axis is the full frame centre rather than the active picture, so pillarboxed video biases the dead band to one side.

Xe đối phương được chọn chỉ theo diện tích: các hộp được chuẩn hóa, cắt ở đường nắp ca-pô, rồi quỹ đạo có tổng diện tích lớn nhất trong 1.5 giây trước va chạm thắng. min_frames: 1 — một khung hình đã đủ tính điểm. Không ngoại hình, không độ sâu, không chuyển động. Phía tiếp cận là trung vị dấu của tâm đáy hộp so với trục khung. Hai lỗi thực: phía được đo trên quỹ đạo chưa loại trùng trong khi ID đến từ xếp hạng đã gộp, nên có thể đo trên nửa quỹ đạo bị đứt; và trục là tâm toàn khung hình thay vì vùng hình hoạt động, nên video có viền dọc làm lệch vùng chết về một phía.

counterpart.py:44-106 — 박스를 0–1000으로 정규화하고 후드 선에서 자른 뒤, [충돌−1.5초, 충돌]에서 면적의 합이 가장 큰 트랙이 상대차다. min_frames: 1 — 한 프레임이면 채점된다. 외형도 깊이도 운동도 쓰지 않는다. 오직 넓이.

counterpart.py:44-106 — normalise the boxes to 0–1000, clip at the hood line, and the track with the largest summed area in [impact−1.5s, impact] is the 상대차. min_frames: 1 — a single frame is enough to be scored. It uses neither appearance, nor depth, nor motion. Only area.

counterpart.py:44-106 — chuẩn hóa hộp về 0–1000, cắt ở đường nắp ca-pô, rồi quỹ đạo có tổng diện tích lớn nhất trong [impact−1.5s, impact] là 상대차. min_frames: 1 — một khung đã đủ tính điểm. Nó không dùng ngoại hình, độ sâu hay chuyển động. Chỉ diện tích.

접근 방향(approach_side.py:76-102)은 같은 구간에서 박스 하단 중심이 프레임 축의 어느 쪽인지의 부호(중앙값)다. 그리고 두 가지 실제 결함:

The approach side (approach_side.py:76-102) is the sign — taken as a median — of which side of the frame axis the bottom centre of the box sits on, over the same interval. And two real defects:

Phía tiếp cận (approach_side.py:76-102) là dấu — lấy trung vị — cho biết tâm đáy hộp nằm bên nào trục khung, trong cùng khoảng thời gian. Có hai lỗi thực:

  • side_at이 중복 제거되지 않은 원본 트랙을 읽는데 넘겨받은 id는 병합된 랭킹에서 왔다 → 잘린 반쪽 트랙 위에서 방향을 잴 수 있다side_at reads un-deduplicated raw tracks while the id it was given came from the merged ranking → the side can be measured on a severed half-trackside_at đọc quỹ đạo thô chưa loại trùng, trong khi ID được cấp đến từ xếp hạng đã gộp → phía có thể được đo trên nửa quỹ đạo bị đứt
  • 축이 video.width / 2 — 활성 화면이 아니라 전체 프레임의 중심이다. picture.crop이 있는데 쓰지 않는다 → 필러박스가 있는 영상에서 데드밴드가 한쪽으로 치우친다the axis is video.width / 2 — the centre of the whole frame, not of the active picture. picture.crop exists and is not used → on pillarboxed video the dead band is biased to one sidetrục là video.width / 2 — tâm toàn khung, không phải vùng hình hoạt động. picture.crop tồn tại nhưng không được dùng → video có viền dọc khiến vùng chết lệch về một phía
🚨 그런데 visus는 이것을 다시, 더 약하게 구현했다nhưng visus đã tự triển khai lại yếu hơn

visus/tools/lense_adapters.py:84-130 — 「충돌 ±0.7초 안에서 가장 큰 박스」. 중복 제거 없음 · margin 없음 · 연속성 없음 · 후드 클리핑 없음 · 충돌 후보 랭킹 없음.

visus/tools/lense_adapters.py:84-130 — "the largest box within ±0.7s of the impact". No de-duplication · no margin · no continuity · no hood clipping · no ranking of impact candidates.

visus/tools/lense_adapters.py:84-130 — "hộp lớn nhất trong ±0.7s quanh va chạm". Không loại trùng · không biên độ · không liên tục · không cắt nắp ca-pô · không xếp hạng ứng viên va chạm.

그래서 lense가 측정한 90.2%(교차 상황 접근 방향)는 visus가 실제로 돌리는 코드의 숫자가 아니다. 더 약한 사본이다.

So the 90.2% lense measured for approach side at crossings is not a number for the code visus actually runs. It is a weaker copy.

Vì vậy 90.2% mà lense đo cho phía tiếp cận ở giao lộ không phải con số cho mã visus thực sự chạy. Đó là bản sao yếu hơn.

✅ 2026-10-14 보정 — ✅ Đính chính 2026-10-14 — 이제 자체 측정치가 있다 (E-V-034)giờ đã có phép đo riêng (E-V-034)

레포의 문서만 보면 「상대차 선택은 측정된 적이 없다」는 결론에 이른다 — 틀렸다. E-V-034가 ams-1080 라벨러의 박스를 상대차 정답으로 놓고 177개 클립에서 쟀다:

Read only the repo’s documents and you reach the conclusion that "counterpart selection has never been measured" — which is wrong. E-V-034 took the ams-1080 labellers’ boxes as ground truth for the 상대차 and measured it on 177 clips:

Chỉ đọc tài liệu kho sẽ dẫn đến kết luận "chưa từng đo chọn xe đối phương" — điều đó sai. E-V-034 lấy hộp do người gán nhãn ams-1080 tạo làm chuẩn cho 상대차 và đo trên 177 clip:

top-1top-3
오늘 쓰는 픽the pick used todaycách chọn đang dùng62%—
면적 기준 (lense 방식)by area (lense's method)theo diện tích (phương pháp lense)71%81%
near-first (제안)near-first (proposed)ưu tiên gần (đề xuất)74%85%
상한 (트랙이 담은 최선)ceiling (the best the tracks contain)giới hạn trên (tốt nhất sẵn có trong các quỹ đạo)89%

스티칭은 −1/−1이라 껐다. 「안 보임」 힌트의 오경보는 보닛 규칙으로 19% → 9%. 결정: 유료 18건에서 도표 이득이 없어 옵션은 기본 꺼짐, a1은 300건의 두 번째 arm 후보.

Đã tắt nối quỹ đạo vì −1/−1. Báo sai của gợi ý "không nhìn thấy" giảm từ 19% → 9% nhờ quy tắc nắp ca-pô. Quyết định: 18 trường hợp trả phí không cải thiện biểu đồ nên tùy chọn mặc định tắt; a1 là ứng viên nhánh thứ hai cho 300 trường hợp.

두 숫자를 나란히 두는 것이 핵심이다 — 오늘 62%, 상한 89%. 상대차 선택은 아직 27포인트가 남아 있고, 고치는 방법도 이미 측정되어 있다.

The repo docs read as though this was never measured. It was: today's pick scores 62%, and the ceiling the tracks already contain is 89%.

Tài liệu kho khiến người đọc tưởng chưa đo. Thực tế đã đo: cách chọn hiện nay đạt 62%, còn giới hạn trên đã có trong quỹ đạo là 89%.

The 90.2% that gets quoted was measured on lense's selector. visus runs a weaker re-implementation with none of its guards and no measurement of its own.

90.2% thường được trích được đo trên bộ chọn của lense. visus chạy bản tự triển khai yếu hơn, thiếu toàn bộ lớp bảo vệ đó và chưa có phép đo riêng.

에고 heading과 그 게이트Ego heading and its gateHướng xe gắn camera và cổng chất lượng

The quality gate lives one layer up: ≤10° straight, >30° turn, and 10–30° is ambiguous and fails the gate. But the left/right class is still emitted in that band — only quality.pass is false — so a caller that reads the class gets an ungated answer. lense's own consumer checks it; visus's ego_heading never looks at quality or reasons at all. And the gate's real pass rate was 0 of 12 clips, with every distance marked scale_assumed and a ±20% focal-length error moving a measured travel distance from 53 m to 80 m.

Cổng chất lượng ở tầng trên: ≤10° đi thẳng, >30° rẽ, còn 10–30° mơ hồ và không qua cổng. Nhưng lớp trái/phải vẫn được xuất trong dải đó — chỉ quality.pass là false — nên bên gọi đọc lớp sẽ nhận đáp án chưa qua cổng. Bên tiêu thụ của lense có kiểm tra; ego_heading của visus không bao giờ nhìn quality hay reasons. Tỷ lệ qua cổng thực tế là 0 trong 12 clip, mọi khoảng cách đều gắn scale_assumed, và sai số tiêu cự ±20% khiến quãng đường đo chuyển từ 53 m đến 80 m.

  • 게이트는 한 층 위에 있다(motion/layers.py:38-44): ≤10° 직진, >30° 회전, 10–30°는 turn_ambiguous → quality.pass = Falsethe gate lives one layer up (motion/layers.py:38-44): ≤10° straight, >30° turn, 10–30° is turn_ambiguous → quality.pass = Falsecổng nằm ở tầng trên (motion/layers.py:38-44): ≤10° đi thẳng, >30° rẽ, 10–30° là turn_ambiguous → quality.pass = False
  • 그 구간에서도 좌/우 class는 계속 쓰인다. quality.pass만 false다 → class를 읽는 호출자는 게이트 없는 답을 받는다the left/right class is still emitted in that band. Only quality.pass is false → a caller that reads class gets an ungated answerlớp trái/phải vẫn xuất trong dải đó. Chỉ quality.pass là false → bên gọi đọc class sẽ nhận đáp án chưa qua cổng
  • 게이트는 설계가 아니라 관례로 지켜진다 — lense 자신의 소비자는 확인하지만(answers/lense_v0.py:63) visus의 ego_heading은 quality/reasons를 아예 보지 않는다the gate is held by convention, not by design — lense's own consumer checks it (answers/lense_v0.py:63), but visus's ego_heading never looks at quality or reasons at allcổng được giữ bằng quy ước, không phải thiết kế — bên tiêu thụ của lense có kiểm tra (answers/lense_v0.py:63), nhưng ego_heading của visus không nhìn quality hoặc reasons
  • 그리고 그 품질의 실제 상태: M1 = 0/12 클립만 게이트 통과 — focal_uncorrected 11/12 · ego_coverage 10/12 · s1_s2_disagree 6/12 · height_implausible 2/12. 모든 미터가 scale_assumed이고 초점거리 ±20%가 이동거리를 53→80 m로 움직였다and what that quality actually was: M1 = 0 of 12 clips passed the gate — focal_uncorrected 11/12 · ego_coverage 10/12 · s1_s2_disagree 6/12 · height_implausible 2/12. Every metre is scale_assumed, and a ±20% focal error moved a travel distance from 53 m to 80 mchất lượng thực tế: M1 = 0 trong 12 clip qua cổng — focal_uncorrected 11/12 · ego_coverage 10/12 · s1_s2_disagree 6/12 · height_implausible 2/12. Mọi mét đều là scale_assumed, và sai số tiêu cự ±20% khiến quãng đường từ 53 m đến 80 m

🚨 부호 규약이 문서와 코드에서 반대다The sign convention contradicts itselfQuy ước dấu tự mâu thuẫn

The docstring says a positive delta is a left turn; the code eleven lines later maps a positive delta to right_turn. A note on the next line records that one clip does not fit either reading. The author acknowledged the uncertainty by multiplying the confidence by 0.5 — and that confidence is never used as a threshold anywhere. It is stored and printed, nothing more.

Docstring nói delta dương là rẽ trái; mã phía dưới mười một dòng ánh xạ delta dương thành right_turn. Ghi chú dòng kế nói có một clip không phù hợp với cả hai cách hiểu. Tác giả thừa nhận bất định bằng cách nhân độ tin cậy với 0.5 — nhưng độ tin cậy đó không bao giờ được dùng làm ngưỡng ở đâu. Nó chỉ được lưu và in ra.

lense_adapters.py:30-31docstring: 「positive delta is a turn to the LEFT (CCW)」docstring: "positive delta is a turn to the LEFT (CCW)"docstring: "delta dương là rẽ sang TRÁI (CCW)"
lense_adapters.py:53코드: delta > 0 → right_turnthe code: delta > 0 → right_turnmã: delta > 0 → right_turn

정반대다. 그리고 :61은 「클립 2318은 이와 맞지 않는다」고 적어 둔다. 이 불확실성을 인정해 신뢰도에 ×0.5를 곱하는데(:57) — 그 신뢰도는 어디에서도 임계값으로 쓰이지 않는다(store.py:90에 저장되고 loop.py:170에 출력될 뿐).

It is the exact opposite. And line 61 notes that "clip 2318 does not fit this". The uncertainty is acknowledged by multiplying the confidence by 0.5 (line 57) — and that confidence is never used as a threshold anywhere (merely stored at store.py:90 and printed at loop.py:170).

Hoàn toàn ngược lại. Dòng 61 còn ghi "clip 2318 không phù hợp với điều này". Sự bất định được thừa nhận bằng cách nhân độ tin cậy với 0.5 (dòng 57) — nhưng độ tin cậy đó không bao giờ được dùng làm ngưỡng (chỉ lưu ở store.py:90 và in ở loop.py:170).

박아 넣은 가정Hard-coded assumptionsCác giả định hard-code

With no camera intrinsics, four constants are hard-coded — and they disagree across repos: lane width is 3.25 m here and 3.5 m in cv-processing, the dashed-line period is 8.0 m when a motorway's is 20 m, and a 110° horizontal field of view is copied into four separate files. Several useful signals are computed and never consumed, including the ego-mask coverage percentage — a runaway mask silently breaks detection and nothing checks for it.

Không có thông số nội tại của camera, bốn hằng số được hard-code — và chúng khác nhau giữa các kho: bề rộng làn 3.25 m ở đây và 3.5 m trong cv-processing, chu kỳ vạch đứt là 8.0 m trong khi đường cao tốc là 20 m, và trường nhìn ngang 110° được chép vào bốn tệp riêng. Một số tín hiệu hữu ích được tính nhưng không dùng, gồm phần trăm phủ ego-mask — mask chạy quá mức sẽ âm thầm phá phát hiện mà không có gì kiểm tra.

차선 폭 3.25 mlane width 3.25 mbề rộng làn 3.25 mworldmap/camera.py:21cv-processing은 3.5 m를 쓴다 — 레포마다 다르다cv-processing uses 3.5 m — the repos disagreecv-processing dùng 3.5 m — các kho không thống nhất
차선 점선 주기 8.0 mdash period 8.0 mchu kỳ vạch đứt 8.0 mcamera.py:22고속도로는 20 m다on a motorway it is 20 mtrên đường cao tốc là 20 m
카메라 높이 1.3 mcamera height 1.3 mchiều cao camera 1.3 mcamera.py:23
HFOV 110°ego.py · relative.py · place_cues.py · worldmap.py사본 넷bốn bản sao

계산해 놓고 쓰지 않는 신호: track["short"] · egomask.coverage_pct(폭주한 ego 마스크가 검출을 조용히 망가뜨린다) · counterpart.answer.share(자연스러운 신뢰도인데 소비자 없음) · visus 쪽 도구 confidence 전부. 조용한 대체: 후드 정보가 없을 때 세 곳이 서로 다른 값으로 대체하고(counterpart.py:57은 1000, contact.py:38·lanes_fl.py:59는 프레임 높이), ReID 임베딩이 없으면 외형 비용이 0.5(중립 추측)로 채워져 실제 거리와 같은 Hungarian에 들어간다(link.py:119). relative.py:76은 측정된 fps가 아니라 헤더 fps를 쓴다.

Signals computed and then not used: track["short"] · egomask.coverage_pct (a runaway ego mask quietly ruins detection) · counterpart.answer.share (a natural confidence with no consumer) · every confidence on visus’s own tools. Silent substitutions: with no hood information three places substitute different values (counterpart.py:57 uses 1000, contact.py:38 and lanes_fl.py:59 the frame height), and with no ReID embedding the appearance cost is filled with 0.5 — a neutral guess — and enters the same Hungarian assignment as real distances (link.py:119). relative.py:76 uses the header fps rather than the measured one.

Tín hiệu được tính rồi không dùng: track["short"] · egomask.coverage_pct (ego mask chạy quá mức âm thầm phá phát hiện) · counterpart.answer.share (độ tin cậy tự nhiên nhưng không có bên dùng) · mọi độ tin cậy trên công cụ riêng của visus. Thay thế âm thầm: khi thiếu thông tin nắp ca-pô, ba nơi dùng các giá trị khác nhau (counterpart.py:57 dùng 1000, contact.py:38 và lanes_fl.py:59 dùng chiều cao khung); khi không có embedding ReID, chi phí ngoại hình được điền 0.5 — một dự đoán trung tính — rồi đưa vào cùng phép gán Hungarian với khoảng cách thật (link.py:119). relative.py:76 dùng fps trong header thay vì fps đo được.

후임자 요약: 상대차 선택과 접근 방향은 면적 기반 휴리스틱이고, visus는 그중에서도 보호장치를 뺀 버전을 쓴다. 에고 heading의 게이트는 visus에서 읽히지 않으며 통과율은 0/12였다. 부호가 어느 쪽인지도 확정되지 않았다.

In short: counterpart selection and approach side are area-based heuristics; visus runs a copy of them with the guards removed; the ego-heading quality gate is never read on the visus side and passed 0 of 12 clips when it was measured; and the sign convention has still not been settled.

Tóm lại: chọn xe đối phương và phía tiếp cận là heuristic dựa trên diện tích; visus chạy bản sao đã gỡ các lớp bảo vệ; phía visus không đọc cổng chất lượng hướng xe và khi đo thì 0/12 clip qua; quy ước dấu vẫn chưa chốt.

8.4visus/web — 사정사가 실제로 보는 화면what the adjuster actually seesđiều tra viên thực sự nhìn thấy gì 🔬 정밀🔬 Chi tiết

Next.js 16 App Router · 어댑터 src/lib/api.ts(1,411줄) 하나가 FastAPI와의 유일한 접점이다.

Next.js 16 App Router · a single adapter, src/lib/api.ts (1,411 lines), is the only point of contact with FastAPI.

Next.js 16 App Router · một adapter duy nhất, src/lib/api.ts (1,411 dòng), là điểm tiếp xúc duy nhất với FastAPI.

✅ 지켜지고 있는 것What holdsNhững gì được giữ

Six product promises are genuinely enforced in the web app: 판단 불가 and 해당 없음 render neutral everywhere and are never painted as errors; the customer notice imports only the tag-stripper and never touches sources, review flags, fact ids, clip names or A/B; the ratio prints as a range and collapses to one number only when the two ends are equal; moving between case, negotiation and notice does not remount the chat, so an in-flight turn survives; only a 401 redirects to login, so a 503 stays visible on screen; and the 2-second poll tears itself down when nothing is in flight.

Sáu lời hứa sản phẩm thực sự được ứng dụng web thực thi: 판단 불가 và 해당 없음 luôn hiển thị trung tính, không bao giờ bị tô như lỗi; thông báo cho khách chỉ import bộ loại thẻ và không đụng vào nguồn, cờ xem xét, ID sự kiện, tên clip hay A/B; tỷ lệ in dưới dạng khoảng và chỉ thu về một số khi hai đầu bằng nhau; chuyển giữa vụ việc, thương lượng và thông báo không remount chat nên lượt đang chạy vẫn sống; chỉ 401 chuyển hướng đăng nhập nên 503 vẫn hiện trên màn hình; và bộ thăm dò 2 giây tự dừng khi không còn lượt chạy.

약속the promiselời hứa코드the codemã
판단 불가·해당 없음은 빨강이 아니다판단 불가 and 해당 없음 are never red판단 불가 và 해당 없음 không bao giờ màu đỏstatus-badge.tsx:53-66 → tone-neutral. prep-list.tsx:43,69·verdict-card.tsx:151도 text-muted-foreground. 어디에서도 tone-bad로 칠하지 않는다status-badge.tsx:53-66 → tone-neutral. prep-list.tsx:43,69 and verdict-card.tsx:151 also use text-muted-foreground. Nothing paints them as an error anywherestatus-badge.tsx:53-66 → tone-neutral. prep-list.tsx:43,69 và verdict-card.tsx:151 cũng dùng text-muted-foreground. Không nơi nào tô chúng như lỗi
고객 안내문에 내부 정보가 없다the customer notice carries nothing internalthông báo cho khách không mang dữ liệu nội bộnotice-document.tsx는 stripSourceTags만 import하고 모든 블록에 적용한다. sources · review_flag · fact_ids · 클립 이름 · A/B 전부 건드리지 않는다notice-document.tsx imports only stripSourceTags and applies it to every block. sources · review_flag · fact_ids · clip names · A/B are all untouchednotice-document.tsx chỉ import stripSourceTags và áp dụng cho mọi khối. sources · review_flag · fact_ids · tên clip · A/B đều nguyên vẹn
비율은 범위로만the ratio is only ever a rangetỷ lệ luôn là một khoảngRatioPanel(:491-505)은 lo ~ hi를 찍고 lo === hi일 때만 한 숫자로 접는다. 값이 없으면 기본 비율 — 약속하지 않는다RatioPanel (:491-505) prints lo ~ hi and collapses to one number only when lo === hi. With no value it shows the base ratio — it never promisesRatioPanel (:491-505) in lo ~ hi và chỉ thu về một số khi lo === hi. Không có giá trị thì hiển thị tỷ lệ cơ sở — không hứa chắc
단계 이동이 대화를 끊지 않는다moving between stages does not break the conversationchuyển giữa các giai đoạn không làm hỏng cuộc trò chuyệnapp-shell.tsx:292 <ChatPanel key={caseId}/> — view는 컴포넌트 안에서 pathname으로 읽는다. 사건→협의→안내문은 remount가 아니다app-shell.tsx:292 <ChatPanel key={caseId}/> — view is read from the pathname inside the component, so case → negotiation → notice is not a remountapp-shell.tsx:292 <ChatPanel key={caseId}/> — view được đọc từ pathname bên trong component, nên case → negotiation → notice không remount
세션 만료만 로그인으로only an expired session goes to loginchỉ phiên hết hạn mới đi đến đăng nhậpapi.ts:99,159,216 — 401만 onUnauthorized(). 503은 화면에 남는다api.ts:99,159,216 — only a 401 calls onUnauthorized(). A 503 stays visible on screenapi.ts:99,159,216 — chỉ 401 gọi onUnauthorized(). 503 vẫn hiện trên màn hình
폴링은 멈춘다polling stopsbộ thăm dò dừngcase-store.tsx:256 2초, isInFlight가 false면 해제. new 상태는 created_at+5분에 끊긴다case-store.tsx:256, every 2 s, torn down once isInFlight is false. A 'new' case stops 5 minutes after created_atcase-store.tsx:256, mỗi 2 giây, được tháo khi isInFlight là false. Vụ việc ‘mới’ dừng 5 phút sau created_at

🚨 지켜지지 않는 것What does notNhững gì không được giữ

Three do not hold. The customer page is not theme-fixed — two comments claim it is, but the theme attribute sits on the root element and wraps the public route group, and every paper token is redefined under the KB theme, so the customer's page follows the adjuster's brand. Model ids and dollar cost reach adjuster screens — a route that calls itself unlisted has no gate and is linked, and the activity log maps cost to a visible "비용 (USD)" row. And the brand colour encodes a fact value: the customer's base-fault number and the ratio bar are painted in the accent, and a pressed 확정 toggle is one colour while the badge beside it saying 확정 is another.

Ba điều không đúng. Trang khách không cố định theme — hai comment nói có, nhưng thuộc tính theme nằm ở phần tử gốc và bao quanh nhóm route công khai, mọi token paper đều được định nghĩa lại dưới theme KB nên trang khách theo thương hiệu điều tra viên. ID mô hình và chi phí đô la lọt vào màn hình điều tra viên — route tự gọi là unlisted nhưng không có cổng và lại được liên kết; nhật ký hoạt động ánh xạ chi phí vào dòng "비용 (USD)" nhìn thấy được. Và màu thương hiệu mã hóa giá trị sự kiện: số lỗi cơ sở của khách và thanh tỷ lệ được tô accent, còn toggle 확정 đang nhấn có một màu trong khi badge 확정 bên cạnh là màu khác.

고객 페이지는 고정 테마가 아니다the customer page is not theme-fixedtrang khách không cố định theme(public)/layout.tsx:10-13과 globals.css:580-582는 둘 다 「고정」이라 적었다. 그런데 app/layout.tsx:20이 data-theme를 <html>에 붙이고 globals.css:319-356이 모든 --paper-*를 재정의한다 → 고객 페이지가 사정사 브랜드를 따라 움직인다(public)/layout.tsx:10-13 and globals.css:580-582 both claim it is. But app/layout.tsx:20 puts data-theme on <html>, which wraps the public route group, and globals.css:319-356 redefines every --paper-* token → the customer's page follows the adjuster's brand(public)/layout.tsx:10-13 và globals.css:580-582 đều khẳng định có. Nhưng app/layout.tsx:20 đặt data-theme trên <html>, bao quanh nhóm route công khai, còn globals.css:319-356 định nghĩa lại mọi token --paper-* → trang khách theo thương hiệu điều tra viên
모델 id와 달러 비용이 노출된다model ids and dollar cost reach adjuster screensID mô hình và chi phí đô la lọt vào màn hình điều tra viênanalysis/page.tsx:90,208(USD + 토큰 — 파일 자신이 「목록에 없는 페이지」라 적었지만 게이트가 없고 링크되어 있다) · activity-timeline.tsx:103(「비용 (USD)」, 정식 뷰 안) · ModelChip 전부. 대비되는 좋은 예: 채팅은 id와 파일명을 의도적으로 지운다(chat-panel.tsx:95-126)analysis/page.tsx:90,208 (USD + tokens — the file calls itself "unlisted" but has no gate and is linked) · activity-timeline.tsx:103 maps cost_usd to a visible "비용 (USD)" row in a listed view · ModelChip everywhere. ✅ The counter-example: chat deliberately strips ids and filenamesanalysis/page.tsx:90,208 (USD + token — tệp tự gọi là "unlisted" nhưng không có cổng và được liên kết) · activity-timeline.tsx:103 ánh xạ cost_usd vào dòng "비용 (USD)" hiển thị trong view có liệt kê · ModelChip ở khắp nơi. ✅ Phản ví dụ: chat cố ý loại ID và tên tệp
브랜드 색이 사실 값을 인코딩한다the brand colour encodes a fact valuemàu thương hiệu mã hóa giá trị sự kiệnverdict-card.tsx:42는 고객차 기본과실 숫자에 text-glow, :56은 비율 막대에 bg-gradient-glow. facts-table.tsx:116은 눌린 확정 토글을 tone-accent로 칠하는데 바로 옆 배지의 확정은 tone-okverdict-card.tsx:42 paints the customer's base-fault number with text-glow and :56 fills the ratio bar with the brand gradient. facts-table.tsx:116 paints a pressed 확정 toggle tone-accent while the badge beside it saying 확정 is tone-ok — two colours for one meaningverdict-card.tsx:42 tô con số lỗi cơ sở của khách bằng text-glow, còn :56 tô thanh tỷ lệ bằng gradient thương hiệu. facts-table.tsx:116 tô toggle 확정 đang nhấn bằng tone-accent trong khi badge 확정 bên cạnh là tone-ok — hai màu cho cùng một nghĩa

🚨 오래된 상태가 화면에 남는 경로Stale-state pathsCác đường dẫn trạng thái cũ

The client overwrites the whole verdict from any chat turn or fact confirmation without checking whether it is still locked. If a response ever returns a newly derived verdict instead of the lock, the 확정됨 badge and the suggestion banner both disappear and the new chart renders as the case's chart — and the client never re-asserts the lock. The 2-second poll only reloads facts and verdict when the job key changes, and does not run at all when nothing is in flight, so a lock or unlock made in another tab never arrives. The notice workbench is the counter-example worth preserving: it blocks publishing and names the chart move.

Client ghi đè toàn bộ phán định từ bất kỳ lượt chat hoặc xác nhận sự kiện nào mà không kiểm tra nó còn bị khóa hay không. Nếu phản hồi trả về phán định mới được suy ra thay vì khóa, badge 확정됨 và banner gợi ý đều biến mất, biểu đồ mới hiện thành biểu đồ của vụ — client không bao giờ đặt lại khóa. Bộ thăm dò 2 giây chỉ tải lại sự kiện và phán định khi khóa công việc đổi, và hoàn toàn không chạy khi không có lượt đang thực hiện, nên khóa hoặc mở từ tab khác không bao giờ đến. Bàn làm việc thông báo là phản ví dụ đáng giữ: nó chặn xuất bản và nói biểu đồ đã đổi.

  • applyVerdict(case-store.tsx:275-277)는 채팅 턴이나 사실 확정이 돌려준 verdict를 locked 여부를 보지 않고 통째로 덮어쓴다. 응답이 새로 파생된 도표를 담아 오면 확정됨 배지와 제안 배너가 둘 다 사라지고 새 도표가 그 사건의 도표로 그려진다. 클라이언트는 락을 다시 주장하지 않는다applyVerdict (case-store.tsx:275-277) overwrites the verdict returned by a chat turn or a fact confirmation without checking whether it is still locked. If a response ever carries a newly derived chart, the locked badge and the suggestion banner both disappear and the new chart renders as the case's chart. The client never re-asserts the lockapplyVerdict (case-store.tsx:275-277) ghi đè phán định do lượt chat hoặc xác nhận sự kiện trả về mà không kiểm tra nó còn bị khóa hay không. Nếu phản hồi mang biểu đồ mới suy ra, badge đã khóa và banner gợi ý đều biến mất, biểu đồ mới được hiển thị là biểu đồ của vụ. Client không bao giờ đặt lại khóa
  • negotiation-board.tsx:167은 보드에 도표가 없으면 verdict?.chart로 대체한다 — 흘러간 verdict가 잠긴 도표용 행들의 머리에 앉을 수 있다negotiation-board.tsx:167 falls back to verdict?.chart when the board has none — a drifted verdict can head rows built for the locked chartnegotiation-board.tsx:167 rơi về verdict?.chart khi board chưa có — phán định trôi có thể dẫn các dòng được xây cho biểu đồ đã khóa
  • 2초 폴링은 job key나 활성 분석이 바뀔 때만 다시 읽고, 아무것도 돌고 있지 않으면 아예 돌지 않는다 → 다른 탭에서 한 확정·해제는 이 탭에 영원히 오지 않는다the 2-second poll only re-reads when the job key or active analysis changes, and does not run at all when nothing is in flight → a lock or unlock made in another tab never arrivesbộ thăm dò 2 giây chỉ đọc lại khi job key hoặc phân tích hoạt động đổi, và hoàn toàn không chạy khi không có lượt đang thực hiện → khóa hoặc mở từ tab khác không bao giờ đến
  • ✅ 잘 된 반례: 안내문 작업대의 stale 가드는 발행을 막고 도표가 움직였다고 말한다(notice-workbench.tsx:102,298,426-429)✅ the good counter-example: the notice workbench's stale guard blocks publishing and says the chart moved (notice-workbench.tsx:102,298,426-429)✅ Phản ví dụ tốt: stale guard của bàn làm việc thông báo chặn xuất bản và nói biểu đồ đã đổi (notice-workbench.tsx:102,298,426-429)

접근성 — 포커스가 진짜 구멍Accessibility: focus is the real gapKhả năng tiếp cận: khoảng trống thật nằm ở focus

Only about twenty files mention focus-visible, and the chat panel is not one of them — its suggestion chips, tree-branch buttons, send button and evidence time chips have hover styling only, while the shared button component does it correctly. Nothing is announced: there is no aria-live on the streaming reply, the step timeline or the working state. The composer disables the textarea on one condition and the send button on another, so focus is dropped mid-turn. Done well: reduced motion is handled globally, and Enter is guarded during IME composition.

Chỉ khoảng hai mươi tệp nhắc đến focus-visible, và chat panel không nằm trong số đó — chip gợi ý, nút nhánh cây, nút gửi và chip thời điểm bằng chứng chỉ có kiểu hover, trong khi component nút dùng chung làm đúng. Không gì được thông báo: phản hồi streaming, timeline bước và trạng thái đang xử lý đều không có aria-live. Composer vô hiệu hóa textarea theo một điều kiện còn nút gửi theo điều kiện khác, nên focus bị mất giữa lượt. Điểm làm tốt: giảm chuyển động được xử lý toàn cục, Enter được bảo vệ trong lúc nhập bằng IME.

focus-visible을 언급하는 파일이 20개뿐이고 chat-panel.tsx는 거기 없다 — 제안 칩 · 트리 분기 버튼 · 전송 버튼 · 증거 시간 칩 전부 hover 스타일만 있다. ui/button.tsx:6은 제대로 한다. 직접 만든 버튼들이 안 한다. 스트리밍 답변·단계 타임라인·작업 중 상태 어디에도 aria-live가 없다. 작성칸은 busy에, 전송 버튼은 busy || waiting에 비활성 → 턴 도중 포커스가 날아간다. ✅ 잘 된 것: prefers-reduced-motion 전역 처리, IME 조합 중 Enter 가드(chat-panel.tsx:590).

Only 20 files mention focus-visible and chat-panel.tsx is not among them — suggestion chips, tree-branch buttons, the send button and evidence time chips all have hover styling only. ui/button.tsx:6 does it properly; the hand-rolled buttons do not. There is no aria-live anywhere on the streaming reply, the step timeline or the working state. The composer is disabled on busy and the send button on busy || waiting, so focus is lost mid-turn. ✅ Done well: prefers-reduced-motion is handled globally, and Enter is guarded during IME composition (chat-panel.tsx:590).

Chỉ 20 tệp nhắc focus-visible và chat-panel.tsx không nằm trong đó — chip gợi ý, nút nhánh cây, nút gửi và chip thời điểm bằng chứng chỉ có hover. ui/button.tsx:6 làm đúng; các nút tự viết thì không. Không có aria-live trên phản hồi streaming, timeline bước hay trạng thái đang xử lý. Composer bị vô hiệu hóa khi busy, nút gửi khi busy || waiting, nên focus mất giữa lượt. ✅ Làm tốt: prefers-reduced-motion được xử lý toàn cục, Enter được bảo vệ khi nhập IME (chat-panel.tsx:590).

⚠️ 처음 읽는 사람이 반드시 걸리는 곳nơi người đọc lần đầu chắc chắn vấp phải

채팅 패널의 정체성 모델. 한 트리에 마운트 전략이 셋 겹쳐 있다 — CaseProvider가 사건 id로 self-key, ChatPanel이 또 사건 id로 key, 모바일에서는 시트가 조건부로 마운트. 그러면서 view는 remount되면 안 되는 그 컴포넌트 안에서 pathname으로 읽고, SSE abort가 히스토리 로드와 같은 effect에 붙어 있다.

Mô hình định danh của panel chat. Một cây có ba chiến lược mount chồng lên nhau — CaseProvider tự key theo ID vụ, ChatPanel lại key theo ID vụ, còn mobile thì sheet mount có điều kiện. Trong khi đó view được đọc bằng pathname bên trong component không được remount, và SSE abort gắn cùng effect với việc tải lịch sử.

🚨 당연해 보이는 리팩터링(pathname으로 key를 바꾸기, view를 prop으로 올리기)은 진행 중인 턴을 조용히 죽인다. 그렇게 말해 주는 것은 app-shell.tsx:289-291의 주석 하나뿐이다.

🚨 Refactor tưởng hiển nhiên (đổi key theo pathname, đưa view thành prop) sẽ âm thầm giết lượt đang chạy. Điều duy nhất nói rõ việc đó là app-shell.tsx:289-291, chỉ một comment.

덤으로 데스크톱 패널 개폐는 양방향이고, use-media-query.ts:6은 서버에서 true를 기본값으로 준다 → 모든 휴대폰이 데스크톱 레이아웃을 한 번 그린 뒤 바뀐다.

The obvious refactors here silently kill in-flight turns, and one comment is the only thing that says so.

Các refactor hiển nhiên ở đây âm thầm giết lượt đang chạy, và chỉ một comment nói điều đó.

작은 버그 하나: postSSE의 읽기 루프(api.ts:267-277)에 abort 가드가 없어 스트리밍 도중 언마운트하면 toast.error("signal is aborted without reason")가 뜨고 언마운트보다 오래 산다. 턴 자체는 서버의 pending 복구로 살아남는다 — 유실은 없고 가짜 에러만 남는다.

One small bug: the read loop in postSSE (api.ts:267-277) has no abort guard, so unmounting mid-stream raises toast.error("signal is aborted without reason"), which outlives the unmount. The turn itself survives through the server’s pending recovery — nothing is lost; only a spurious error remains.

Một lỗi nhỏ: vòng đọc trong postSSE (api.ts:267-277) không có guard abort, nên tháo mount giữa stream sẽ ném toast.error("signal is aborted without reason"), tồn tại sau khi tháo mount. Bản thân lượt vẫn sống nhờ cơ chế phục hồi đang chờ của server — không mất gì; chỉ còn lỗi giả.

8.5ams-demo-0 — KB에 실제로 보여 준 데모the demo KB was actually shownbản demo KB thực sự đã trình diễn 🔬 정밀🔬 Chi tiết

Next.js 16 + TS (~20.7k줄) · Supabase Postgres + Cloudflare R2. 마지막 실제 커밋 origin/demo-cases 3a646cc, 2026-08-25.

Next.js 16 + TS (~20.7k lines) · Supabase Postgres + Cloudflare R2. The last real commit is origin/demo-cases 3a646cc, 2026-08-25.

Next.js 16 + TS (~20.7k dòng) · Supabase Postgres + Cloudflare R2. Commit thật cuối là origin/demo-cases 3a646cc, 2026-08-25.

구조 — 기록과 투영을 나눈다. 추가만 되는 기록(cases · sources · jobs · runs · answers · events · chart_selections · modifier_applications · acknowledgements · finalizations · notices) 위에 순수 투영이 얹힌다:

The structure separates record from projection. Pure projections sit on top of an append-only record (cases · sources · jobs · runs · answers · events · chart_selections · modifier_applications · acknowledgements · finalizations · notices):

Cấu trúc tách bản ghi khỏi phép chiếu. Các phép chiếu thuần nằm trên bản ghi chỉ thêm (cases · sources · jobs · runs · answers · events · chart_selections · modifier_applications · acknowledgements · finalizations · notices):

resolve()      one value per question × subject. precedence: human > measured > sole_answer > fallback_unmeasured
  → projectCase()
  → match()    284 DNF branches / 108 charts. tries both role bindings, and on a tie
               refuses — ratio = null, "cannot be determined". It never invents a 50:50.
resolve()      một giá trị cho mỗi câu hỏi × đối tượng. ưu tiên: human > measured > sole_answer > fallback_unmeasured
  → projectCase()
  → match()    284 nhánh DNF / 108 biểu đồ. Thử cả hai cách gán vai trò; khi hòa thì
               từ chối kết luận — ratio = null, “không thể xác định”. Không bao giờ tự tạo 50:50.

이 두 가지가 visus로 그대로 넘어왔다 — cases/<id>/의 facts.jsonl·trace.jsonl(추가만), 그리고 동점 거부.

Both of these carried straight over into visus — facts.jsonl and trace.jsonl under cases/<id>/ (append-only), and the refusal to break a tie.

Cả hai điều này được chuyển thẳng vào visus — facts.jsonl và trace.jsonl dưới cases/<id>/ (chỉ thêm), cùng việc từ chối phá vỡ thế hòa.

🚨 추출은 HEAD에 없었다phần trích xuất không có trong HEAD

scripts/answerer-worker.mjs는 통조림 답 8개를 돌려준다. HEAD에서 살아 있는 모델은 전문가 의견·고객 안내 문장을 쓰는 텍스트 LLM 하나뿐이다. 영상→사실은 이 레포에서 작동한 적이 없다 — 7월에 있었고 삭제되었다.

The answerer at HEAD returns eight canned answers. The only live model is a text LLM drafting prose. Video → facts never ran in this repository — it existed in July and was deleted. Do not read the demo as evidence that the extraction worked.

Bộ trả lời ở HEAD trả về tám đáp án đóng hộp. Mô hình sống duy nhất là LLM văn bản soạn thảo văn xuôi. Video → sự kiện chưa từng chạy trong kho này — nó tồn tại vào tháng 7 rồi bị xóa. Đừng đọc bản demo như bằng chứng rằng trích xuất đã hoạt động.

숫자가 실제로 무엇을 재는가What its numbers measureCác con số của nó đo gì

Every quoted figure is either an inventory of a vendored artifact, an upstream claim whose producing code is absent, or an oracle. The "121 questions / 284 branches / 146 modifiers" are counts from a fourth repo, and that file contradicts itself ("modifiersOfTotal": "146 of 145"). Running the catalogue audit myself: 215 of 284 branches (75.7%) reach their own chart, 0 reach a wrong one — but the header admits this answers each branch's own requirements, so it is an upper bound on a self-supplied oracle, the same shape as ql-re's. "Median 9 answers to resolve" is degenerate: nothing resolves early, so it is identical to "requirements per branch".

Mọi con số được trích đều là kiểm kê một tài sản vendored, tuyên bố upstream không còn mã tạo ra, hoặc oracle. "121 câu hỏi / 284 nhánh / 146 yếu tố" là số đếm từ kho thứ tư, và tệp đó tự mâu thuẫn ("modifiersOfTotal": "146 of 145"). Tự chạy kiểm tra catalogue: 215 trong 284 nhánh (75.7%) tới được biểu đồ của chính nó, 0 tới biểu đồ sai — nhưng header thừa nhận mỗi nhánh được trả lời theo yêu cầu riêng, nên đây là giới hạn trên của oracle tự cung cấp, cùng dạng với ql-re. "Trung vị 9 câu để giải quyết" là suy biến: không gì được giải quyết sớm, nên giống hệt "yêu cầu mỗi nhánh".

인용되던 수the number people quotedcon số mọi người đã trích실제actuallythực tế
「질문 121 · 분기 284 · 요건 2,439 · 수정요소 146」"121 questions · 284 branches · 2,439 requirements · 146 modifiers" — ⚠️ the shipped rules.v2.json reads 2,527 requirements (§8.12); this snapshot was vendored on 08-04 and the two are never reconciled"121 câu hỏi · 284 nhánh · 2,439 yêu cầu · 146 yếu tố" — ⚠️ rules.v2.json được phát hành ghi 2,527 yêu cầu (§8.12); ảnh chụp này được vendored ngày 08-04 và hai con số chưa bao giờ đối soát네 번째 레포 resolve-questions에서 벤더링한 산출물의 목록 수. 성능 아님. 그 파일의 counts는 자기모순이다 — "modifiersOfTotal": "146 of 145", atomsDropped: 4, labelsWithoutSource: 111an inventory of an artifact vendored from a fourth repo (resolve-questions). Not performance. And that file's own counts contradict themselves — "modifiersOfTotal": "146 of 145", atomsDropped: 4, labelsWithoutSource: 111một bản kiểm kê tài sản vendored từ kho thứ tư (resolve-questions). Không phải hiệu năng. Và chính số đếm của tệp cũng mâu thuẫn — "modifiersOfTotal": "146 of 145", atomsDropped: 4, labelsWithoutSource: 111
acceptance.assembled "284/284"상류의 분리가능성. 만든 코드(verify/assemble.mjs)는 이 레포에 없다upstream separability. The code that produced it (verify/assemble.mjs) is not in this repokhả năng phân tách upstream. Mã tạo ra nó (verify/assemble.mjs) không có trong kho này
데모가 찍던 「13 / 100.0%」the "13 / 100.0%" the demo printedcon số "13 / 100.0%" bản demo in ra7도표 슬라이스a 7-chart slicemột lát cắt 7 biểu đồ
「84/84 · 97/97 테스트」"84/84 · 97/97 tests""84/84 · 97/97 kiểm thử"손으로 쓴 fixture 7개 위의 node:test 통과 수 (현재 재현: 118 pass / 0 fail, 같은 fixture)node:test pass counts over seven hand-written fixtures (reproduced today: 118 pass / 0 fail, same fixtures)số bài node:test đạt trên bảy fixture viết tay (tái hiện hôm nay: 118 đạt / 0 lỗi, cùng fixture)

직접 돌려 본 전체 팩 (npm run audit:catalogue):

Toàn bộ gói tự chạy (npm run audit:catalogue):

75.7%
215/284 자기 도표 도달215/284 tới biểu đồ của chính nó
reach their own chartđến được biểu đồ của chính nó
24.3%
도표는 맞는데 확정 안 됨đúng biểu đồ nhưng chưa xác nhận
right chart, not confirmedđúng biểu đồ, chưa xác nhận
0
틀린 도표biểu đồ sai
wrong chart

헤더가 스스로 밝힌다 — "Answer a branch's own requirements … see whether match() lands on it." → 완벽한 자문자답 위의 오라클 채점. 상한선이지 정확도가 아니다. (§8.1 ql-re와 같은 모양의 숫자다.) 그리고 「확정까지 중앙값 9 · 조기 확정 0건」은 지표가 아니라 퇴화다 — 조기 확정이 0이라 「분기당 요건 수」와 같은 양이다.

The header says so itself — "Answer a branch’s own requirements … see whether match() lands on it." → oracle scoring on top of a perfect self-interrogation. It is a ceiling, not an accuracy. (The same shape of number as ql-re in §8.1.) And "median 9 to determination · 0 early determinations" is not a metric but a degeneracy — with early determinations at zero it is the same quantity as "requirements per branch".

Header tự nói rõ — "Trả lời các yêu cầu riêng của một nhánh … xem match() có tới nhánh đó không." → chấm oracle trên nền tự hỏi đáp hoàn hảo. Đó là giới hạn trên, không phải độ chính xác. (Cùng dạng con số với ql-re ở §8.1.) Và "trung vị 9 câu để xác định · 0 xác định sớm" không phải chỉ số mà là suy biến — khi xác định sớm bằng 0, nó là cùng đại lượng với "số yêu cầu mỗi nhánh".

⭐ 기록된 유일한 진짜 VLM 정확도độ chính xác VLM thực duy nhất được ghi lại

PROJECT_LOG.md 2026-07-27 — 클립 하나, 3회 실행: 편차 60%(3/5) · 정확도 50%(2/4), 20클립 중 6개만 라벨됨. 레포 자신이 울타리를 친다(MIN_N = 20, 그 밑에서는 분수로만). HEAD에서는 "Answerer accuracy is n=0 … every fact resolves fallback_unmeasured."

PROJECT_LOG.md 2026-07-27 — one clip, three runs: variance 60% (3/5) · accuracy 50% (2/4), with only 6 of 20 clips labelled. The repo fences itself (MIN_N = 20; below that it reports fractions only). At HEAD: "Answerer accuracy is n=0 … every fact resolves fallback_unmeasured."

PROJECT_LOG.md 2026-07-27 — một clip, ba lần chạy: biến thiên 60% (3/5) · chính xác 50% (2/4), chỉ 6/20 clip có nhãn. Kho tự đặt rào (MIN_N = 20; thấp hơn chỉ báo phân số). Ở HEAD: "Độ chính xác bộ trả lời là n=0 … mọi sự kiện đều phân giải thành fallback_unmeasured."

여기에 편차와 정확도를 따로 재야 하는 이유의 교과서적 사례가 있다: road_category는 실행 간 일치 100%, 정답률 0%였다. 모델은 일관되게 틀렸다.

And here is the textbook case for why variance and accuracy must be measured separately: road_category was 100% consistent between runs and 0% correct. The model was consistently wrong.

Đây là ví dụ điển hình cho việc phải đo biến thiên và độ chính xác riêng: road_category nhất quán 100% giữa các lần chạy nhưng đúng 0%. Mô hình sai một cách nhất quán.

🚨 발견된 오류Errors foundCác lỗi đã phát hiện

Six, and the first one matters most because visus inherits that stage. The sign of a modifier was never flipped while deciding — the commit says it plainly: "the arithmetic is right once you rule and wrong while you decide", and it was deferred past the demo. Confirmation and the customer notice printed the base ratio while an applied +10 sat in another table with nothing joining them. Every 확정 the app ever wrote carried a blank catalogue version. Two contradicting lanes both rendered as provisionally adopted. The audit always seats the customer as chart-A, so the mirrored binding — where party inversion lives — is never replayed. And the ledger was never cleaned: seven modifier conditions encoded three ways and all inert, 25 of 121 questions required by no chart, and no branch carries an exclusive group, so the rule preventing 중대한 and 현저한 과실 being applied together is unreachable.

Có sáu lỗi; lỗi đầu quan trọng nhất vì visus kế thừa giai đoạn đó. Dấu của yếu tố điều chỉnh không bao giờ được đảo khi đang quyết định — commit nói thẳng: "phép tính đúng sau khi bạn phán quyết và sai khi bạn đang quyết định", rồi hoãn tới sau demo. Xác nhận và thông báo khách in tỷ lệ cơ sở trong khi +10 đã áp dụng nằm trong bảng khác mà không có gì nối lại. Mọi 확정 ứng dụng ghi đều mang phiên bản catalogue trống. Hai làn mâu thuẫn cùng hiển thị là tạm chấp nhận. Kiểm tra luôn đặt khách làm chart-A, nên ràng buộc đối xứng — nơi tồn tại đảo bên — không bao giờ được phát lại. Sổ cũng chưa được dọn: bảy điều kiện điều chỉnh mã hóa ba cách đều vô hiệu, 25/121 câu không biểu đồ nào yêu cầu, không nhánh nào có nhóm loại trừ nên luật cấm áp dụng chung 중대한 và 현저한 과실 không thể tới được.

1판단 중에는 가감산 부호가 뒤집히지 않았다. 커밋 b8e3bf6: "applyRulings already flips the sign through ours_is_a, proposedModifiers and ratioBand do not. The arithmetic is right once you rule and wrong while you decide." — 데모 뒤로 미뤄졌다The sign of a modifier was never flipped while deciding. Commit b8e3bf6: "applyRulings already flips the sign through ours_is_a, proposedModifiers and ratioBand do not. The arithmetic is right once you rule and wrong while you decide." — deferred past the demoDấu của yếu tố điều chỉnh không được đảo khi đang quyết định. Commit b8e3bf6: "applyRulings đã đảo dấu qua ours_is_a; proposedModifiers và ratioBand thì không. Phép tính đúng sau khi phán quyết và sai khi đang quyết định." — hoãn tới sau demo
25851950 — 확정과 고객 안내문이 기본 비율을 찍는데 적용된 +10은 modifier_applications에 앉아 있었다. "nothing joined them"5851950 — the confirmation and the customer notice printed the base ratio while an applied +10 sat in modifier_applications. "nothing joined them"5851950 — xác nhận và thông báo khách in tỷ lệ cơ sở, trong khi +10 đã áp dụng nằm ở modifier_applications. "không có gì nối chúng"
311588a4 — match()가 input.catalogueVersion을 되돌려 주는데 ratio.ts가 null을 넣는다 → 앱이 쓴 모든 확정의 catalogue_version이 비어 있었다. 같은 커밋: findDiscriminators가 다른 도표의 경쟁자를 요구해, 분기가 도표 안에서만 갈리는 경우(차12-1) 가장 값진 질문에 도달할 수 없었다11588a4 — match() echoes input.catalogueVersion back, and ratio.ts passes null → catalogue_version was blank on every confirmation the app ever wrote. Same commit: findDiscriminators required a rival from a different chart, so on charts whose branches differ only internally (차12-1) the single most valuable question was unreachable11588a4 — match() trả lại input.catalogueVersion, còn ratio.ts truyền null → catalogue_version trống trên mọi xác nhận ứng dụng từng ghi. Cùng commit: findDiscriminators yêu cầu đối thủ từ biểu đồ khác, nên ở biểu đồ mà các nhánh chỉ khác nội bộ (차12-1), câu hỏi có giá trị nhất không thể tới được
4889f85f — 모순되는 두 레인이 둘 다 「잠정 채택」으로 그려졌다889f85f — two contradicting lanes both rendered as "provisionally adopted"889f85f — hai làn mâu thuẫn đều hiển thị là "tạm chấp nhận"
5평가 설계 결함: audit.ts의 REPLAY_BINDING은 언제나 고객차를 도표 A에 앉힌다 → orient()/mirror의 당사자 반전이 사는 바로 그 경로가 한 번도 재생되지 않는다An evaluation-design flaw: audit.ts's REPLAY_BINDING always seats the customer car as chart-A → the mirrored binding, which is exactly where party inversion lives, is never replayedLỗi thiết kế đánh giá: REPLAY_BINDING của audit.ts luôn đặt xe khách làm chart-A → ràng buộc đối xứng, đúng nơi có đảo bên, không bao giờ được phát lại
6원장 무결성, 끝까지 열린 채: 가감산 조건 7개가 세 가지 방식으로 인코딩되어 전부 작동하지 않음; 121개 질문 중 25개는 어느 도표도 요구하지 않고, 146개 수정요소 중 33개는 어느 분기도 요구하지 않는다; askable:false를 「사람이 판단함」으로 읽었으나 실제 뜻은 「참조되지 않음」; 어느 분기도 exclusive_group을 갖지 않아 중대한/현저한 과실 동시 적용 금지 규칙에 도달할 수 없다Ledger integrity, still open at the end: 7 modifier conditions encoded three ways and all inert; 25 of 121 questions are required by no chart and 33 of 146 modifiers by no branch; askable:false was read as "a human judges this" when it meant "unreferenced"; and no branch carries an exclusive_group, so the rule preventing 중대한 and 현저한 과실 being applied together is unreachableTính toàn vẹn sổ, vẫn mở ở cuối: 7 điều kiện điều chỉnh được mã hóa ba cách và đều vô hiệu; 25/121 câu không biểu đồ nào yêu cầu, 33/146 yếu tố không nhánh nào dùng; askable:false bị đọc là "người đánh giá" trong khi nghĩa là "không được tham chiếu"; không nhánh nào có exclusive_group, nên luật ngăn áp dụng chung 중대한 và 현저한 과실 không thể tới được

🚨 보강 — 화면의 「정확도」와 가감산 수학The on-screen "accuracy", and the modifier maths"Độ chính xác" trên màn hình và phép tính điều chỉnh

The "96% accuracy, n=41" badge on screen is written into a fixture by hand, and the helper that feeds it rebuilds the input accuracy table out of the fixture's own expected output. "Rehearsal green", quoted in dozens of log entries, answers every open question with the winning branch's own required value — it cannot disagree with the engine. And the modifier maths is the part visus inherits: the band never reads which car a modifier accuses, 141 of 146 modifiers are symmetric so every live one widens the band both ways even where the chart blames one side, the value-at-risk sort is an all-ties no-op, the customer side is dropped at two call sites, and the A/B binding is inferred from the ratio — always true on the 11 branches where both bases are equal, which are exactly the 50:50 charts.

Badge "độ chính xác 96%, n=41" trên màn hình được viết tay trong fixture, và helper cấp nó dựng lại bảng độ chính xác đầu vào từ chính đầu ra kỳ vọng của fixture. "Rehearsal green", được trích hàng chục lần trong log, trả mọi câu hỏi mở bằng đúng giá trị yêu cầu của nhánh thắng — không thể bất đồng với bộ máy. Phép tính điều chỉnh là phần visus kế thừa: dải không đọc yếu tố quy trách xe nào; 141/146 yếu tố đối xứng nên yếu tố sống đều mở dải hai phía dù biểu đồ chỉ quy trách một phía; sắp theo value-at-risk vô tác dụng vì hòa hết; bên khách bị bỏ ở hai điểm gọi; ràng buộc A/B suy từ tỷ lệ — luôn đúng trên 11 nhánh có hai tỷ lệ cơ sở bằng nhau, đúng các biểu đồ 50:50.

(a) 화면에 찍히던 「정확도 96% · n=41」은 지어낸 수이고 순환이다. 배지는 FactReconciliation.tsx:396에서 measured 등급으로 그려지는데 런타임에서 precedence를 내보내는 곳이 없다 → fixture만이 그 값을 먹일 수 있고, fixtures/superseded.json:784-791·determined.json:894가 0.96/n=41, 0.62/n=18, 0.91을 손으로 적어 두었다. 더 나쁜 것은 accuracyOf(fx)가 fixture의 기대 출력 행에서 입력 정확도 표를 되만들어 방금 만든 등급을 단언한다는 점이다.

(a) The "96% accuracy · n=41" that used to appear on screen is an invented number, and it is circular. The badge is drawn at FactReconciliation.tsx:396 from a measured grade, but nothing at runtime ever emits precedence → only a fixture can feed that value, and fixtures/superseded.json:784-791 and determined.json:894 hold 0.96/n=41, 0.62/n=18 and 0.91, written by hand. Worse, accuracyOf(fx) rebuilds the input accuracy table out of the fixture’s expected output rows and then asserts the grade it has just produced.

(a) "Độ chính xác 96% · n=41" từng xuất hiện trên màn hình là con số bịa và vòng tròn. Badge được vẽ tại FactReconciliation.tsx:396 từ cấp measured, nhưng không gì khi chạy thực xuất precedence → chỉ fixture cấp được giá trị đó; fixtures/superseded.json:784-791 và determined.json:894 chứa 0.96/n=41, 0.62/n=18 và 0.91, viết tay. Tệ hơn, accuracyOf(fx) dựng lại bảng độ chính xác đầu vào từ các dòng đầu ra kỳ vọng của fixture rồi kiểm chứng chính cấp vừa tạo.

(b) 로그에 수십 번 나오는 「rehearsal green」은 구조적으로 순환이다. demo-rehearsal.mjs:136 — const value = d.expected; 열린 질문마다 그 분기가 요구하는 값을 그대로 답한다. 찍히는 확정 비율은 엔진과 어긋날 수가 없다.

(b) The "rehearsal green" that appears dozens of times in the logs is structurally circular. demo-rehearsal.mjs:136 — const value = d.expected; — answers every open question with precisely the value its branch requires. The determination rate it prints cannot disagree with the engine.

(b) "rehearsal green" xuất hiện hàng chục lần trong log là vòng tròn về cấu trúc. demo-rehearsal.mjs:136 — const value = d.expected; — trả mọi câu hỏi mở bằng đúng giá trị nhánh yêu cầu. Tỷ lệ xác định nó in không thể bất đồng với bộ máy.

(c) 인용되던 외부 숫자 셋은 이 레포의 성능이 아니다. 「93.5% 모델 정확도」(REWORK_BRIEF.md:324)는 AX 담당자가 자기 모델을 자기 라벨에 대고 말한 것의 인용이고, 「124/124 gates」와 match.ts:122의 T18 수치도 선행 프로젝트에서 들어왔고 재현 불가다.

(c) The three external numbers that were being quoted are not this repo’s performance. The "93.5% model accuracy" (REWORK_BRIEF.md:324) is a quotation of the AX lead describing their own model against their own labels, and the "124/124 gates" and the T18 figures at match.ts:122 also came in from an earlier project and cannot be reproduced.

(c) Ba con số bên ngoài từng được trích không phải hiệu năng kho này. "Độ chính xác mô hình 93.5%" (REWORK_BRIEF.md:324) là trích lời trưởng AX mô tả mô hình của họ so với nhãn của họ; "124/124 cổng" và số T18 tại match.ts:122 cũng đến từ dự án trước và không tái hiện được.

🚨 가감산 수학 — visus가 2단계로 물려받는 바로 그 부분🚨 the modifier maths — exactly what visus inherits as stage 2🚨 phép tính yếu tố điều chỉnh — chính phần visus kế thừa ở giai đoạn 2
J1modifiers.ts:183-191 — ratioBand는 수정요소가 어느 차를 지목하는지 읽지 않는다. side/applies_to를 무시하고 합칠 뿐이다. 146개 중 141개가 대칭 범위라서 도표가 「A 0 | B 10」이라 말해도 모든 요소가 양방향으로 띠를 넓힌다. 요소 8개짜리 분기는 ±90에 이르러 클램프 — 「미결 100%p」modifiers.ts:183-191 — ratioBand never reads which car a modifier accuses. It ignores side/applies_to and simply sums. 141 of 146 modifiers compile to symmetric ranges, so every live one widens the band both ways even where the chart blames one side. A branch with 8 modifiers reaches ±90, clamped to 0–100 — "100 points undecided"modifiers.ts:183-191 — ratioBand không bao giờ đọc yếu tố quy trách xe nào. Nó bỏ qua side/applies_to rồi chỉ cộng. 141/146 yếu tố biên dịch thành khoảng đối xứng, nên yếu tố sống đều mở dải hai phía dù biểu đồ quy trách một phía. Nhánh có 8 yếu tố đạt ±90, bị chặn về 0–100 — "100 điểm chưa quyết định"
J2value_at_risk는 사실상 상수(146개 중 118개가 10) → 「큰 것부터」 정렬이 전부 동점인 무연산이고 우위요소가 거의 모든 요소에 같은 값을 매긴다value_at_risk is effectively a constant (10 for 118 of 146) → the "biggest mover first" sort is an all-ties no-op, and the negotiation prices nearly every modifier identicallyvalue_at_risk thực tế là hằng số (10 cho 118/146) → sắp "yếu tố tác động lớn nhất trước" vô tác dụng vì tất cả hòa, và thương lượng định giá gần mọi yếu tố giống nhau
J3customerIs가 두 호출 지점에서 누락(ratio.ts:97, modifier-decision.ts:133) → 사정사가 고른 모든 도표에서 side가 null. customerIs를 넘기는 테스트는 하나도 없다customerIs is dropped at two call sites (ratio.ts:97, modifier-decision.ts:133) → side is null on every chart the adjuster selects. And no test passes customerIs at allcustomerIs bị bỏ ở hai điểm gọi (ratio.ts:97, modifier-decision.ts:133) → side là null trên mọi biểu đồ điều tra viên chọn. Và không kiểm thử nào truyền customerIs
J4A/B 결속을 비율에서 역추정한다 — ratio.ts:92 oursIsA = alt.base_ours === branch?.base_a. base_a === base_b인 284개 중 11개 분기에서 언제나 참이 되어 역할이 증거 없이 단언된다 — 하필 50:50 도표들에서. J3과 합치면 당사자 반전 계열이 마지막 커밋까지 살아 있었다The A/B binding is inferred from the ratio — ratio.ts:92, oursIsA = alt.base_ours === branch?.base_a. On the 11 of 284 branches where base_a === base_b this is always true, so the role is asserted without evidence on exactly the 50:50 chartsRàng buộc A/B được suy từ tỷ lệ — ratio.ts:92, oursIsA = alt.base_ours === branch?.base_a. Trên 11/284 nhánh có base_a === base_b, giá trị này luôn true, nên vai trò được khẳng định không bằng chứng trên đúng các biểu đồ 50:50
J5CONFIRMATION_BAND = 3은 다른 양에 대한 숫자로 정당화된다. match.ts:122는 "+3 questions past resolution detects 93.4%"를 인용하지만 :216에서는 경쟁 분기 사이의 「매칭된 개수」 마진으로 쓴다 — evaluate.ts:199 자신이 분기 크기에 따라 커진다고 경고하는 차원이다. 위의 24.3% 뭉치를 만드는 것이 이 상수 하나다CONFIRMATION_BAND = 3 is justified with a number about a different quantity. match.ts:122 cites "+3 questions past resolution detects 93.4%", but :216 uses 3 as a matched-count margin between rival branches — a dimension evaluate.ts:199 itself warns scales with branch size. That constant alone produces the 24.3% "right chart, not confirmed" bucketCONFIRMATION_BAND = 3 được biện minh bằng số về đại lượng khác. match.ts:122 trích "+3 câu hỏi sau giải quyết phát hiện 93.4%", nhưng :216 dùng 3 làm biên số khớp giữa các nhánh đối thủ — một chiều mà chính evaluate.ts:199 cảnh báo tăng theo cỡ nhánh. Riêng hằng số đó tạo ra nhóm 24.3% ‘đúng biểu đồ, chưa xác nhận’

후임자에게: visus의 협의 준비표(visus/negotiation.py + knia.factors())는 이 설계의 후손이다. 「어느 차를 지목하는가」와 「범위를 어느 쪽으로 넓히는가」가 같은 코드에서 분리되어 있는지 가장 먼저 확인하라. 조상에서는 분리되어 있지 않았고, 그 사실이 데모 직전에 알려졌는데도 미뤄졌다.

Check first whether "which car is accused" and "which way the band widens" are separated in visus's stage 2. In the ancestor they were not — and it was known before the demo.

Trước hết hãy kiểm tra "xe nào bị quy trách" và "dải mở theo hướng nào" có được tách ở giai đoạn 2 của visus không. Ở tiền thân chúng chưa tách — điều đó đã được biết trước demo.

7월의 「원장 + 플래너 + VLM」 시대, 그리고 그것이 남긴 실패The July ledger+planner+VLM eraThời kỳ sổ + bộ lập kế hoạch + VLM tháng 7

The whole VLM era was deleted on 2026-08-04, and its five documented failures are the direct causes of visus's design. There was no escape hatch for "unknown": the VLM returned 「미확인」, which was not an option, so every gate on it evaluated false, eleven nodes became not-applicable, and the run reported itself done after one round having answered 2 of 18 — hence 판단 불가 as a first-class answer. The shape of the question inverted the parties: "one question, one answer, and 'both vehicles are leading' is impossible by construction — that is the defect behind our party-inversion family" — hence the hard 고객차/상대차 rule. The wrong ledger was read at the wrong step, so the most-cited field in the rulebook could not be labelled. Ordering was structural, with 80–85% of wall-clock time inside the rounds — hence blind parallel readers instead of fixed rounds. And an enum asked with no value list reaches the model open-ended and every downstream check silently misses — hence a fixed fact vocabulary.

Toàn bộ thời kỳ VLM bị xóa ngày 2026-08-04; năm thất bại được ghi là nguyên nhân trực tiếp của thiết kế visus. Không có lối thoát cho ‘không biết’: VLM trả 「미확인」, không nằm trong lựa chọn, nên mọi cổng của nó thành false, mười một nút thành không áp dụng, và lượt chạy tự báo xong sau một vòng dù mới trả 2/18 — từ đó 판단 불가 thành đáp án hạng nhất. Hình dạng câu hỏi đảo các bên: ‘một câu, một đáp án; cả hai xe đều dẫn đầu là bất khả ngay trong cấu trúc — đây là lỗi đứng sau họ đảo bên’ — từ đó có luật cứng 고객차/상대차. Đọc nhầm sổ ở nhầm bước khiến trường được trích nhiều nhất trong sách không gán nhãn được. Thứ tự mang tính cấu trúc, 80–85% thời gian thực nằm trong các vòng — từ đó dùng bộ đọc song song mù thay cho vòng cố định. Enum không có danh sách giá trị tới mô hình như câu mở, mọi kiểm tra sau đó âm thầm trượt — từ đó cố định từ vựng sự kiện.

f5e71d9(2026-08-04)에서 통째로 삭제되었다: lib/extract/(Gemini VLM 파이프라인, 45개 질문과 when 게이트), lib/spec/, /ams/goldset, /api/runs. 그 시대가 남긴 문서화된 실패 다섯이 visus 설계의 직접 원인이다:

All of it was deleted wholesale in f5e71d9 (2026-08-04): lib/extract/ (the Gemini VLM pipeline, 45 questions and their when gates), lib/spec/, /ams/goldset, /api/runs. Five documented failures from that era are the direct cause of visus’s design:

Tất cả bị xóa toàn bộ trong f5e71d9 (2026-08-04): lib/extract/ (pipeline Gemini VLM, 45 câu hỏi và các cổng when), lib/spec/, /ams/goldset, /api/runs. Năm thất bại được ghi từ thời kỳ đó là nguyên nhân trực tiếp của thiết kế visus:

실패failurethất bại남긴 것what it left behinddi sản để lại
i「모르겠다」 탈출구가 없었다. VLM이 「미확인」을 돌려줬는데 선택지에 없었다 → 걸린 모든 게이트가 false → 11노드가 not_applicable, 1라운드 만에 18노드 중 2개만 답한 채 status:"done"There was no escape hatch for "unknown". The VLM returned 「미확인」, which was not among the options → every gate on it evaluated false → 11 nodes went not_applicable and the run reported status:"done" after one round having answered 2 of 18Không có lối thoát cho ‘không biết’. VLM trả 「미확인」, không nằm trong lựa chọn → mọi cổng đánh giá false → 11 nút thành not_applicable và lượt chạy báo status:"done" sau một vòng, mới trả lời 2/18판단 불가가 답판단 불가 as a first-class answer판단 불가 thành đáp án hạng nhất
ii질문의 모양이 당사자를 뒤집었다. "one question, one answer, and 'both vehicles are leading' is impossible by construction. That is the defect behind our party-inversion family." 라벨된 클립에서 3회 중 2회가 고객/상대를 뒤집었다The shape of the question inverted the parties. "one question, one answer, and 'both vehicles are leading' is impossible by construction. That is the defect behind our party-inversion family." Two of three runs inverted the parties on a labelled clipHình dạng câu hỏi đảo các bên. ‘một câu, một đáp án, và cả hai xe đều dẫn đầu là bất khả trong cấu trúc. Đó là lỗi đứng sau họ đảo bên của chúng ta.’ Hai trong ba lượt chạy đảo bên trên một clip có nhãn고객차/상대차 하드 제약the hard 고객차/상대차 ruleluật cứng 고객차/상대차
iii엉뚱한 원장을 엉뚱한 단계에서 읽었다. 주석 폼이 VLM 그래프를 읽는데 그것이 "omitted maneuver entirely" → 책에서 가장 많이 인용되는 필드를 라벨할 수 없었다The wrong ledger was read at the wrong step. The annotation form read the VLM graph, which "omitted maneuver entirely" → the most-cited field in the rulebook could not be labelledĐọc nhầm sổ ở nhầm bước. Biểu mẫu gán nhãn đọc đồ thị VLM, vốn ‘bỏ hẳn maneuver’ → trường được trích nhiều nhất trong sách không gán nhãn được하나의 사실 어휘one fact vocabularymột bộ từ vựng sự kiện
iv순서가 구조적이었다. "round 3 asks entry_signal only because round 2 answered …" — 벽시계의 80~85%가 라운드 안에Ordering was structural. "round 3 asks entry_signal only because round 2 answered …" — 80–85% of wall-clock time was inside the roundsThứ tự mang tính cấu trúc. ‘vòng 3 hỏi entry_signal chỉ vì vòng 2 trả lời …’ — 80–85% thời gian thực nằm trong các vòng고정 라운드 폐기 → 블라인드 병렬 판독fixed rounds dropped → blind parallel readersbỏ vòng cố định → các bộ đọc song song mù
v값 목록 없이 물은 enum은 열린 질문으로 모델에 닿고, 답이 도메인 밖에 떨어지고, 하류의 in/eq가 전부 조용히 빗나간다An enum asked with no value list reaches the model open-ended, its answers land off-domain, and every downstream in/eq check silently missesEnum không có danh sách giá trị tới mô hình như câu mở, đáp án ngoài miền, mọi kiểm tra in/eq phía sau âm thầm trượt사실 어휘를 고정the fact vocabulary fixedcố định từ vựng sự kiện

살아남음: 「AI가 제안하고 사정사가 결정한다」 · 기록 대 투영 · 주장≠사실 · 등급 어휘(read|measured|undeterminable|not_applicable)는 resolve()의 tier에서 왔다 · 동점 거부 · 3상태 보고 · 소견서/고객 안내가 2·3단계로. 버림: 컴파일된 조건 엔진 전체 — "The compiled logic settles 244/244 synthetic runs — verified against itself, never against real facts." visus는 284 분기를 7열짜리 chart_table.tsv로 바꿨고, docs/DESIGN.md는 그 테이블에서도 이미 떠나고 있다.

Survived: "the AI proposes, the adjuster decides" · record versus projection · a claim is not a fact · the grade vocabulary (read | measured | undeterminable | not_applicable), which came from resolve()’s tier · refusing a tie · three-state reporting · the expert opinion and customer notice becoming stages 2 and 3. Discarded: the compiled condition engine entirely — "The compiled logic settles 244/244 synthetic runs — verified against itself, never against real facts." visus replaced the 284 branches with a seven-column chart_table.tsv, and docs/DESIGN.md is already moving away from that table too.

Được giữ: ‘AI đề xuất, điều tra viên quyết định’ · bản ghi so với phép chiếu · lập luận không phải sự kiện · từ vựng cấp độ (read | measured | undeterminable | not_applicable) từ tier của resolve() · từ chối hòa · báo cáo ba trạng thái · ý kiến chuyên gia và thông báo khách thành giai đoạn 2 và 3. Bị bỏ: toàn bộ bộ máy điều kiện đã biên dịch — ‘Logic biên dịch giải quyết 244/244 lượt tổng hợp — kiểm với chính nó, chưa từng với sự kiện thật.’ visus thay 284 nhánh bằng chart_table.tsv bảy cột, và docs/DESIGN.md cũng đang rời khỏi bảng ấy.

⭐ 보강 — 그 배지는 사실 사건 화면에 나올 수 없었고, 레포는 인용하지 말라고 적어 두었다correction — the badge could not reach a real case, and the repo said not to quote itđính chính — badge không thể tới vụ thật, và kho cấm trích nó

먼저 범위. 실제 출하된 데모는 main이 아니라 origin/demo-cases(3a646cc, 2026-08-25)이고, 두 브랜치는 54파일 차이가 난다 — 줄 번호를 인용할 때는 브랜치를 먼저 맞춰야 한다.

Scope first. The demo that actually shipped is not main but origin/demo-cases (3a646cc, 2026-08-25), and the two branches differ by 54 files — match the branch before trusting any line number.

Trước hết là phạm vi. Demo thực sự phát hành không phải main mà là origin/demo-cases (3a646cc, 2026-08-25), hai nhánh khác nhau 54 tệp — khớp nhánh trước khi tin số dòng.

레포가 스스로 금지해 두었다the repo forbade it itselfchính kho đã cấm그 숫자가 있는 fixture 바로 옆에 _note가 붙어 있다 — "FIXTURE PLACEHOLDER NUMBERS — must never be quoted as a measured figure". 문서는 정직했고, 인용한 쪽이 틀렸다 — §8.1의 ql-re와 같은 모양이다the fixture carries a _note right beside the number: "FIXTURE PLACEHOLDER NUMBERS — must never be quoted as a measured figure". The document was honest; the quoting was the error — the same shape as ql-re in §8.1fixture có _note ngay cạnh con số: ‘CÁC CON SỐ GIỮ CHỖ TRONG FIXTURE — không bao giờ được trích như số đã đo’. Tài liệu trung thực; lỗi ở cách trích — cùng dạng với ql-re tại §8.1
파이프라인은 그 값을 만들 수가 없다the pipeline cannot produce itpipeline không thể tạo ra nóresolve.ts의 ResolutionRow에는 precedence 필드 자체가 없다(question_id · subject · value · winner · tier · status · contested가 전부다). 그리고 case.ts:351은 resolve(answers, opts.accuracy ?? {}) — 정확도를 아무도 넘기지 않는다ResolutionRow in resolve.ts has no precedence field at all (question_id, subject, value, winner, tier, status, contested is the whole of it). And case.ts:351 reads resolve(answers, opts.accuracy ?? {}) — nothing ever passes an accuracy inResolutionRow trong resolve.ts hoàn toàn không có trường precedence (question_id, subject, value, winner, tier, status, contested là toàn bộ). case.ts:351 đọc resolve(answers, opts.accuracy ?? {}) — không gì truyền accuracy vào
🔸 그래서 사건 화면에는 96%가 아니라 「미측정」이 뜬다🔸 so a real case shows "unmeasured", not 96%🔸 nên vụ thật hiển thị ‘chưa đo’, không phải 96%실제 데모 사건은 전부 fallback_unmeasured로 떨어진다. 주석이 그렇게 설계됐다고 적는다 — "an unmeasured pick is never mistaken for an evidenced one — the row is tagged fallback_unmeasured and says so on screen". 배지가 나오는 곳은 내부 fixture 갤러리(/ams/preview)뿐이다every real demo case falls to fallback_unmeasured, which the code says is the design: "an unmeasured pick is never mistaken for an evidenced one — the row is tagged fallback_unmeasured and says so on screen". The badge is reachable only from the internal fixture gallery at /ams/previewmọi vụ demo thật đều rơi về fallback_unmeasured, điều mã nói là chủ đích: ‘một lựa chọn chưa đo không bao giờ bị nhầm là có bằng chứng — dòng gắn fallback_unmeasured và nói rõ trên màn hình’. Badge chỉ tới được từ bộ sưu tập fixture nội bộ tại /ams/preview

그러므로 정확한 진술은 이렇다: 「고객이 본 화면에 가짜 정확도가 떠 있었다」가 아니라, 「내부 갤러리에만 뜨는 값이고, fixture가 인용 금지라고 적어 둔 값이며, 그럼에도 나중에 인용됐다」가 맞다. 결함은 코드가 아니라 인용 관행에 있었다.

So the precise statement is this: not "the client saw a fabricated accuracy on screen", but "a value that appears only in an internal gallery, which its own fixture marks as never-quotable, was nonetheless quoted later". The defect was in the quoting practice, not in the code.

Vậy phát biểu chính xác là: không phải ‘khách nhìn thấy độ chính xác bịa trên màn hình’, mà là ‘giá trị chỉ xuất hiện trong bộ sưu tập nội bộ, được fixture đánh dấu không bao giờ được trích, vẫn bị trích về sau’. Lỗi nằm ở thực hành trích dẫn, không phải mã.

읽는 김에 두 가지를 더 적어 둔다. 데모는 스스로 무엇이 목업인지 명시했다 — docs/screens.md:20: "추출은 목업입니다. No fact on any screen was read from a video by a model". 그리고 resolve.ts는 모델 신뢰도와 실행 간 일치율을 근거로 쓰는 것을 명시적으로 거부한다 — "둘 다 순환이다. 확신에 차서 틀린 답이 둘 다에서 좋은 점수를 받는다" — 그리고 그 즉시 road_category가 일치율 100%에 정답률 0%였다는 예를 든다(§8.5에 이미 있는 그 숫자다).

Two things worth recording in fairness. The demo declared its own mock boundary — docs/screens.md:20: "추출은 목업입니다. No fact on any screen was read from a video by a model". And resolve.ts explicitly refuses model self-confidence and run-to-run agreement as precedence signals — "Both are circular — a confidently wrong answer scores well on each" — citing road_category at 100% agreement and 0% correct, which is the very figure already in §8.5.

Hai điểm cần ghi cho công bằng. Demo tự tuyên bố ranh giới mock — docs/screens.md:20: ‘Trích xuất là mô phỏng. Không sự kiện nào trên bất kỳ màn hình nào được mô hình đọc từ video’. Và resolve.ts từ chối rõ ràng dùng tự tin của mô hình và đồng thuận giữa các lượt làm tín hiệu ưu tiên — ‘Cả hai đều vòng tròn — đáp án tự tin sai vẫn điểm cao ở cả hai’ — trích road_category đồng thuận 100% và đúng 0%, đúng con số đã có ở §8.5.

8.6knia-dag — 책을 데이터로 만든 엿새six working dates turning the book into datasáu ngày làm việc biến cuốn sách thành dữ liệu 🔬 정밀🔬 Chi tiết

앱 없음, UI 없음, Python 한 줄 없음 — 데이터/도출 레포. 71커밋 중 70개가 단 여섯 날에 몰려 있다 — 07-18(2) · 07-19(1) · 07-20(1) · 07-23(2) · 07-24(34) · 07-27(30). 달력으로는 열흘이지만 실제로 일한 날은 엿새이고, 그중 이틀에 64커밋이 들어 있다. 마지막 커밋(2026-10-14 「Handover snapshot」)은 source/car_to_car.pdf를 지우기만 한다.

No app, no UI, not one line of Python — a data and derivation repo. Of 71 commits, 70 fall on just six dates — 07-18 (2), 07-19 (1), 07-20 (1), 07-23 (2), 07-24 (34) and 07-27 (30). Ten days of calendar, six days of work, 64 of the commits inside two of them. The final commit (2026-10-14, "Handover snapshot") does nothing but delete source/car_to_car.pdf.

Không ứng dụng, không UI, không một dòng Python — kho dữ liệu và suy dẫn. Trong 71 commit, 70 nằm ở chỉ sáu ngày — 07-18 (2), 07-19 (1), 07-20 (1), 07-23 (2), 07-24 (34) và 07-27 (30). Mười ngày lịch, sáu ngày làm việc, 64 commit nằm trong hai ngày. Commit cuối (2026-10-14, ‘Handover snapshot’) chỉ xóa source/car_to_car.pdf.

L0  data/leaf-facts/*.yaml   108/108 도표. 모든 사실이 인쇄 페이지로 인용되고,
                              적용 단서 · 법령 · 도해 대조까지 붙어 있다
L1  data/tree/leaves.json    123 leaf (다변종 도표를 펼침)
L2  ontology/                fields 117→49 · values 129맵/25필드
                             decisions.json = 사람이 내린 64개 판정, 추가만, sets 블록은 기계가 적용
                             registry.json = 166필드 · conduct.json = 라벨 146 → 수정요소 106
엔진 score.mjs + policy.mjs  후보 소거 · applies_when 관련성 · gate_bonus 순서 · 부드러운 막다른 길
dist/                        ams-demo-0용 번들 + 508KB 단독 viewer.htmlL0  data/leaf-facts/*.yaml   108 of 108 charts. Every fact cited to a printed page,
                              with scope notes, statutes and a diagram cross-check
L1  data/tree/leaves.json    123 leaves (multi-variant charts expanded)
L2  ontology/                fields 117→49 · values 129 maps over 25 fields
                             decisions.json = 64 human rulings, append-only; the machine
                             applies only the sets block
                             registry.json = 166 fields · conduct.json = 146 labels → 106 modifiers
engine score.mjs + policy.mjs  candidate elimination · applies_when relevance · gate_bonus
                               ordering · soft dead ends
dist/                        the bundle for ams-demo-0 + a 508 KB standalone viewer.htmlL0  data/leaf-facts/*.yaml   108/108 biểu đồ. Mỗi sự kiện dẫn trang in,
                              kèm ghi chú phạm vi, điều luật và đối chiếu sơ đồ
L1  data/tree/leaves.json    123 lá (mở rộng biểu đồ nhiều biến thể)
L2  ontology/                trường 117→49 · 129 ánh xạ giá trị trên 25 trường
                             decisions.json = 64 phán quyết con người, chỉ thêm; máy
                             chỉ áp dụng khối sets
                             registry.json = 166 trường · conduct.json = 146 nhãn → 106 yếu tố
engine score.mjs + policy.mjs  loại ứng viên · tính liên quan applies_when · gate_bonus
                               sắp thứ tự · ngõ cụt mềm
dist/                        bundle cho ams-demo-0 + viewer.html độc lập 508 KB

⭐ 끝까지 따라가 보기 — 인쇄 372쪽 한 장이 {A:20, B:80}이 되기까지⭐ Walk it — printed page 372 becoming {A:20, B:80}⭐ Đi hết quy trình — trang in 372 thành {A:20, B:80}

이 레포가 무엇인지는 한 도표를 끝까지 따라가 보면 가장 빨리 이해된다. 고른 것은 차43-2 「후행 직진 대 선행 진로변경」 — 앞차가 차로를 바꾸다가 뒤에서 직진해 오던 차와 부딪힌, 가장 흔한 사고 중 하나다. 아래 일곱 단계는 전부 레포의 코드를 그대로 다시 돌려서 얻은 것이다.

The fastest way to understand this repo is to follow one chart all the way down. The chart is 차43-2, "following car going straight vs. lead car changing lanes" — the lead car moves across a lane line and is struck by the car coming up behind it, one of the commonest collisions there is. All seven steps below are the output of re-running the repo’s own code.

Cách nhanh nhất hiểu kho này là theo một biểu đồ đến cuối. Biểu đồ là 차43-2, ‘xe sau đi thẳng so với xe trước chuyển làn’ — xe trước vượt qua vạch làn rồi bị xe phía sau đâm, một dạng va chạm rất phổ biến. Cả bảy bước dưới đều là đầu ra khi chạy lại chính mã của kho.

단계stepbước무엇이 일어나는가what happensđiều diễn ra
0 · 인쇄면0 · the printed page0 · trang inpdftotext가 뽑은 372쪽. 산문은 깨끗하게 나오는데 비율표가 무너진다 — 「과/실/비/율」이 한 줄에 한 글자씩 쪼개져 내려간다. 이것이 「모든 수치는 도해에서 눈으로 읽는다」 규칙의 전부다(§8.7의 같은 발견)page 372 as pdftotext -layout produced it. The prose comes out clean; the ratio table collapses — the column header 과/실/비/율 runs down the page one character per line. That is the whole reason for the rule "every number is read visually off the diagram"trang 372 do pdftotext -layout tạo. Văn xuôi ra sạch; bảng tỷ lệ sụp đổ — tiêu đề cột 과/실/비/율 chạy dọc trang mỗi dòng một ký tự. Đó là toàn bộ lý do của quy tắc ‘mọi con số phải được đọc bằng mắt từ sơ đồ’
1 · 손으로 쓴 사실1 · the hand-written record1 · bản ghi viết taycha-43-2.yaml. 구속 조건이 하나다 — "Each file must be derivable from that chart’s own pages and diagram alone"(data/leaf-facts/SCHEMA.md:3-5). 모든 사실에 쪽 번호가 붙는다: {field: maneuver, value: "진로변경(차로변경)", source: "(B) 선행 진로 변경, p.372"}. 기본 비율 {A:30, B:70}cha-43-2.yaml, one of 108. One binding constraint: "Each file must be derivable from that chart’s own pages and diagram alone." Every fact carries its page: {field: maneuver, value: "진로변경(차로변경)", source: "(B) 선행 진로 변경, p.372"}. Base ratio {A:30, B:70}cha-43-2.yaml, một trong 108 tệp. Một ràng buộc bắt buộc: ‘Mỗi tệp phải suy ra được chỉ từ trang và sơ đồ của chính biểu đồ đó.’ Mọi sự kiện mang trang nguồn: {field: maneuver, value: "진로변경(차로변경)", source: "(B) 선행 진로 변경, p.372"}. Tỷ lệ cơ sở {A:30, B:70}
2 · 평탄화2 · flattened2 · làm phẳng108개 YAML → 123 leaf. 11개 도표가 26개 변형으로 갈라지기 때문이다(차43-2는 변형이 없어 그대로 통과)108 YAMLs → 123 leaves, because 11 multi-variant charts expand into 26 variant leaves. 차43-2 has none, so it passes through unchanged108 YAML → 123 lá, vì 11 biểu đồ đa biến thể mở thành 26 lá biến thể. 차43-2 không có biến thể nên đi qua nguyên vẹn
3 · 이름과 값을 고름3 · names and values canonicalised3 · chuẩn hóa tên và giá trị선언 파일 셋이 책의 말을 어휘로 바꾼다 — 이름 117개 → 49개(relative_position → lead_follow), 값 129개 맵(「후행 (동일방향, 진로변경 없이 직진)」 → 「후행」). ⭐ 그리고 그 뒤에 사람이 내린 판정이 있다 — 원장 d-0017: 선행/후행은 스냅샷이 아니라 역할이다. "추월에서 추월차는 뒤→옆→앞으로 가지만 내내 후행(추월차)으로 불린다"three declarative files turn the book’s wording into a vocabulary — 117 names → 49 (relative_position → lead_follow), 129 value maps ("후행 (동일방향, 진로변경 없이 직진)" → "후행"). ⭐ And a human ruling sits behind it — ledger record d-0017: lead/follow is a role, not a snapshot. "In 추월 the overtaker goes behind→beside→ahead but is labelled 후행(추월차) throughout"ba tệp khai báo biến câu chữ trong sách thành bộ từ vựng — 117 tên → 49 (relative_position → lead_follow), 129 ánh xạ giá trị (‘후행 (동일방향, 진로변경 없이 직진)’ → ‘후행’). ⭐ Phía sau còn có phán quyết con người — bản ghi sổ d-0017: trước/sau là vai trò, không phải ảnh chụp tức thời. ‘Trong 추월, xe vượt đi từ sau→bên cạnh→trước nhưng vẫn được gắn 후행(추월차) xuyên suốt’
4 · 엔진이 아는 전부4 · all the engine knows4 · toàn bộ những gì bộ máy biết차43-2에 대해 엔진이 가진 것은 조건 여섯 개다. 정말로 이게 전부다:
A: {lead_follow: 후행, maneuver: 직진}
B: {lead_follow: 선행, maneuver: 진로변경}
shared: {approach_relation: 동일방향, approach_config: 동일방향}
what the engine holds for 차43-2 is six conditions, and that is genuinely all of it:
A: {lead_follow: 후행, maneuver: 직진}
B: {lead_follow: 선행, maneuver: 진로변경}
shared: {approach_relation: 동일방향, approach_config: 동일방향}
bộ máy giữ sáu điều kiện cho 차43-2, và thực sự chỉ có vậy:
A: {lead_follow: 후행, maneuver: 직진}
B: {lead_follow: 선행, maneuver: 진로변경}
shared: {approach_relation: 동일방향, approach_config: 동일방향}
5 · 질문이 된다5 · it becomes a question5 · trở thành câu hỏi레지스트리 항목이 곧 질문이다 — "question": "{차량}은 앞차였습니까, 뒤차였습니까?", 도메인 [선행, 후행], 게이트 approach_config ∈ [동일방향, 측면/교차, 도로외], 출처 p.258. {차량}은 화면에서 「귀하 차량」/「상대 차량」으로 치환된다the registry entry is the question: "question": "{차량}은 앞차였습니까, 뒤차였습니까?", domain [선행, 후행], gated on approach_config ∈ [동일방향, 측면/교차, 도로외], sourced to p.258. {차량} is substituted at ask time into 귀하 차량 / 상대 차량mục registry chính là câu hỏi: "question": "{차량}은 앞차였습니까, 뒤차였습니까?", miền [선행, 후행], cổng approach_config ∈ [동일방향, 측면/교차, 도로외], nguồn p.258. {차량} được thay lúc hỏi thành xe của bạn / xe đối phương
6 · 걷는다6 · the walk6 · đi qua cây질문 네 개가 후보를 123 → 10으로 줄인다:
approach_config = 동일방향 → 123 남음
B.maneuver = 진로변경 → 34
A.maneuver = 직진 → 16
B·A.lead_follow = 선행·후행 → 10
Four questions take the candidate set from 123 to 10:
approach_config = 동일방향 → 123 left
B.maneuver = 진로변경 → 34
A.maneuver = 직진 → 16
B·A.lead_follow = 선행·후행 → 10
Bốn câu hỏi giảm tập ứng viên từ 123 xuống 10:
approach_config = 동일방향 → còn 123
B.maneuver = 진로변경 → 34
A.maneuver = 직진 → 16
B·A.lead_follow = 선행·후행 → 10
7 · 산수, 출처를 달고7 · the arithmetic, with its source attached7 · phép tính, kèm nguồn도표가 정해지면 그 도표가 가진 수정요소 8줄만 질문이 된다. 하나가 걸렸다 — 「진로변경 신호 불이행·지연 +10」. 출력은 이렇게 생겼다:
base {A:30,B:70} → final {A:20,B:80}
source: "조정예시 표 ①, p.372 / 해설 ①, p.373"
once the chart is settled, only that chart’s own 8 modifier rows become questions. One applied — "failed or late lane-change signal, +10". The output object:
base {A:30,B:70} → final {A:20,B:80}
source: "조정예시 표 ①, p.372 / 해설 ①, p.373"
khi biểu đồ đã chốt, chỉ 8 dòng điều chỉnh của chính biểu đồ ấy trở thành câu hỏi. Một yếu tố được áp dụng — ‘không bật hoặc bật muộn tín hiệu chuyển làn, +10’. Đối tượng đầu ra:
base {A:30,B:70} → final {A:20,B:80}
source: "조정예시 표 ①, p.372 / 해설 ①, p.373"

⭐ 인쇄 372쪽 → 30:70 → 20:80, 그리고 끝까지 쪽 번호가 붙어 있다. 이 레포의 주장 전체가 이 한 객체 안에 들어 있다 — 그리고 §4.0에서 visus가 사정사에게 보여 주는 「책의 경로」가 어디서 온 생각인지도 여기서 보인다.

⭐ Printed page 372 → 30:70 → 20:80, with the page number still attached at the end. The repo’s entire claim fits in that one object — and it is visibly where the "path through the book" that visus shows an adjuster in §4.0 comes from.

⭐ Trang in 372 → 30:70 → 20:80, cuối cùng vẫn gắn số trang. Toàn bộ tuyên bố của kho nằm trong đối tượng đó — và rõ ràng đây là nguồn của ‘đường đi qua cuốn sách’ mà visus hiển thị cho điều tra viên ở §4.0.

⚠️ 정직하게 — 고른 예시가 이 레포에서 가장 어려운 축에 속한다in fairness — this example is one of the repo’s hardest leavesđể công bằng — ví dụ này là một trong các lá khó nhất của kho

차43-2는 질문 20개가 필요하다. 코퍼스 평균은 7.7개, 중앙값 6개다. 그리고 resolved가 아니라 exhausted로 끝난다 — 차55-7이 0.5점 뒤에 붙어 있다. ⭐ 레포가 이것을 스스로 알고 기록해 두었다 — reports/findings.jsonl의 유일한 미해결 unreachable 건이고, 사유는 "답할 수 있는 증거가 경쟁 leaf의 부분집합이라, 어떤 답으로도 그 위로 올라가지 못한다", 예시는 "차55-7 (역할이 뒤바뀐 것)"이다. 책이 코드가 되는 모습과, 시스템이 자기 가장 약한 이음매를 스스로 표시하는 모습이 같은 도표에 들어 있다.

차43-2 needs 20 questions against a corpus average of 7.7 and a median of 6, and it ends exhausted rather than resolved, with 차55-7 half a point behind. ⭐ The repo knows this and wrote it down: it is the single open unreachable record in reports/findings.jsonl — "Askable evidence is a subset of 1 rival leaf, so no answer ever ranks it above them", example "cha-55-7 (roles swapped)". One chart shows both the book becoming code and the system flagging its own weakest seam.

차43-2 cần 20 câu hỏi so với trung bình tập dữ liệu 7.7 và trung vị 6; nó kết thúc exhausted thay vì resolved, với 차55-7 chỉ kém nửa điểm. ⭐ Kho biết và đã ghi lại: đó là bản ghi unreachable mở duy nhất trong reports/findings.jsonl — ‘Bằng chứng có thể hỏi là tập con của 1 lá đối thủ, nên không đáp án nào xếp nó cao hơn đối thủ’, ví dụ ‘cha-55-7 (đảo vai)’. Một biểu đồ cho thấy cả sách thành mã và hệ thống tự đánh dấu điểm yếu nhất.

🚨 새로 발견 — dist/가 「바이트 동일하게 재생성된다」는 주장은 지금 거짓이다new finding — the "dist/ is byte-idempotent" claim is false at HEADphát hiện mới — tuyên bố ‘dist/ có tính lũy đẳng theo byte’ sai tại HEAD

docs/ARCHITECTURE.md §8은 dist/가 "바이트 동일 — 커밋된 산출물 안에 git sha가 들어가지 않는다"고 적는다. 맞지 않는다. 커밋된 dist/engine.mjs는 버전 e1_aa39ad4a36965f56을 선언하는데, 빌더가 자기 본문에서 계산하는 해시는 195bbb8dc5b57c32이다(본문 자체는 30,649자로 소스와 바이트 단위로 일치한다 — 틀린 것은 스탬프뿐).

docs/ARCHITECTURE.md §8 states dist/ is "byte-idempotent — no git sha inside a committed artifact". It is not. The committed dist/engine.mjs declares version e1_aa39ad4a36965f56, while the hash the builder computes over its own body is 195bbb8dc5b57c32. The body itself is byte-identical to the sources at 30,649 characters — only the stamp is wrong.

docs/ARCHITECTURE.md §8 nói dist/ ‘lũy đẳng theo byte — không có git sha trong artifact đã commit’. Thực tế không vậy. dist/engine.mjs đã commit khai phiên bản e1_aa39ad4a36965f56, trong khi hash builder tính trên chính thân tệp là 195bbb8dc5b57c32. Thân tệp giống nguồn từng byte ở 30,649 ký tự — chỉ con dấu sai.

후임자에게 실제로 일어날 일: 깨끗한 체크아웃에서 node tools/build-dist.mjs를 돌리면 정확히 두 줄(engine.mjs 1행과 manifest.json 27행의 버전 스탬프)이 바뀐다. 그런데 publish-to-db.mjs는 작업 트리가 더러우면 거부하므로, README가 적어 둔 순서(build-dist → publish-to-db)를 그대로 따르면 즉시 막힌다. 원인은 규명하지 못했다.

What will actually happen to a successor: running node tools/build-dist.mjs on a pristine checkout changes exactly two lines — the version stamp in dist/engine.mjs:1 and in dist/manifest.json:27 — and nothing else. Since publish-to-db.mjs refuses a dirty working tree, following README’s own order (build-dist then publish-to-db) blocks immediately. Root cause not determined.

Điều người tiếp quản thực sự gặp: chạy node tools/build-dist.mjs trên checkout sạch sẽ đổi đúng hai dòng — dấu phiên bản ở dist/engine.mjs:1 và dist/manifest.json:27 — không gì khác. Vì publish-to-db.mjs từ chối cây làm việc bẩn, làm đúng thứ tự README (build-dist rồi publish-to-db) sẽ bị chặn ngay. Chưa xác định nguyên nhân gốc.

숫자가 실제로 무엇을 재는가 — 전부 자기 사실 위의 오라클All of them are a self-oracleTất cả đều là oracle tự cung cấp

There is no independent label anywhere in this repo. "Self-rank 123/123, top-3 123/123, 7.7 questions" feeds each leaf its own recorded facts back and checks it ranks first — the repo itself says this saturates. "Robustness 94.7%" is the same self-facts with one withheld at a time: honest within its frame, still label-free. "P1–P4 pass" is tautological by its own comment. The remaining numbers are structural invariants and coverage counts, and are labelled as such correctly.

Không có nhãn độc lập nào trong kho. ‘Self-rank 123/123, top-3 123/123, 7.7 câu hỏi’ đưa lại dữ kiện tự ghi của mỗi lá rồi kiểm nó đứng đầu — chính kho nói chỉ số này bão hòa. ‘Độ vững 94.7%’ là cùng dữ kiện tự cung cấp, mỗi lần giấu một mục: trung thực trong phạm vi ấy nhưng vẫn không có nhãn. ‘P1–P4 đạt’ là hằng đúng theo chính comment. Các số còn lại là bất biến cấu trúc và số đếm độ phủ, được gắn nhãn đúng như vậy.

이 레포에는 독립 정답이 한 개도 없다.

「자기순위 123/123 · top-3 123/123 · 질문 7.7개」"self-rank 123/123 · top-3 123/123 · 7.7 questions"‘self-rank 123/123 · top-3 123/123 · 7.7 câu hỏi’oracle.mjs가 각 leaf에 그 leaf 자신의 사실을 되먹이고 1등으로 오는지 본다. 자기 일관성 — 레포도 적었다: "Self-rank feeds a perfect informant and saturates."oracle.mjs feeds each leaf its own recorded facts back and checks it ranks first. Self-consistency — and the repo says so: "Self-rank feeds a perfect informant and saturates."oracle.mjs đưa lại dữ kiện tự ghi cho từng lá rồi kiểm nó đứng đầu. Tự nhất quán — kho nói rõ: ‘Self-rank cấp người cung cấp tin hoàn hảo nên bão hòa.’
「강건성 94.7%」"robustness 94.7%"‘độ vững 94.7%’같은 자기 사실에서 하나씩 빼며(829/875). 틀 안에서는 정직하고, 여전히 라벨이 없다the same self-facts with one withheld at a time (829/875). Honest within its frame, and still label-freecùng dữ kiện tự cung cấp, mỗi lần giấu một mục (829/875). Trung thực trong phạm vi ấy, vẫn không có nhãn
「P1–P4 통과」"P1–P4 pass"‘P1–P4 đạt’동어반복. 자기 주석: "ground truth here is leaf.facts.A/B themselves, just relabeled."tautological. Its own comment: "ground truth here is leaf.facts.A/B themselves, just relabeled."hằng đúng. Comment của chính nó: ‘ground truth ở đây là chính leaf.facts.A/B, chỉ đổi nhãn.’
나머지phần còn lại구조 불변식과 커버리지 수 — 그렇게 정확히 라벨되어 있다structural invariants and coverage counts — and they are labelled as exactly thatbất biến cấu trúc và số đếm độ phủ — được gắn nhãn chính xác như vậy
verify.mjs 108/365/112파일 존재 확인뿐. 그리고 지금은 실패한다(exit 1) — 인수인계 커밋이 PDF를 지웠다. 재현 체인이 1단계에서 멈추는데 표는 여전히 ✅다file-existence only. And it now fails (exit 1) — the handover commit deleted the PDF, so the documented repro chain aborts at step 1 while the table still shows ✅chỉ kiểm tệp tồn tại. Và giờ thất bại (exit 1) — commit bàn giao xóa PDF, nên chuỗi tái hiện ghi trong tài liệu dừng ngay bước 1 trong khi bảng vẫn hiện ✅

🚨 발견된 오류Errors foundCác lỗi đã phát hiện

1「레지스트리가 제 몫을 한다」는 주장이 더 약한 기준선에만 비교되어 있다. oracle.mjs:173은 G′와만 비교한다. 레지스트리를 끈 구성 G는 97% — 출하된 C(94.7%)보다 2.3pp 높다. 어느 문서에도 없다. 같은 줄 때문에 「자기순위 포화」 경고가 한 번도 출력되지 않는다The "the registry earns its place" claim is only ever compared against the weaker baseline. oracle.mjs:173 compares robustness to G′ only. Config G, with the registry off, scores 97% — 2.3 points above shipped C's 94.7% — and no document says so. The same line makes the "self-rank is saturated" warning never printTuyên bố ‘registry chứng minh được giá trị’ chỉ so với baseline yếu hơn. oracle.mjs:173 chỉ so độ vững với G′. Cấu hình G tắt registry đạt 97% — cao hơn 2.3 điểm so với 94.7% của C được phát hành — nhưng không tài liệu nào nói. Cùng dòng khiến cảnh báo ‘self-rank bão hòa’ không bao giờ được in
2「도달 불가」의 정의가 두 가지로 양립 불가 — 진부분집합 vs 비진부분집합(B.size >= A.size) → 같은 집합을 허용해 양방향을 이중 계수. thin-margin 분기는 크기 가드가 아예 없다Two incompatible definitions of "unreachable" — strict subset vs non-strict (B.size >= A.size), which admits equal sets and double-counts both directions. The thin-margin branch has no size guard at allHai định nghĩa ‘unreachable’ không tương thích — tập con thực sự và không thực sự (B.size >= A.size), cho phép tập bằng nhau và đếm hai lần hai hướng. Nhánh biên mỏng không có guard kích thước
3저작 필드 수가 셋으로 돌아다닌다: 162 · 166 · 116. 「도메인 50 · 질문 47」은 낡았다(실제 46/43)Three different authored-field counts circulate: 162 · 166 · 116. And "50 domains · 47 questions" is stale (actually 46/43)Ba số trường đã biên soạn khác nhau lưu hành: 162 · 166 · 116. ‘50 miền · 47 câu hỏi’ đã lỗi thời (thực tế 46/43)
4sufficiency.mjs --strict는 통과할 수 없다 — §8 자신이 「알려진 오탐」이라 부르는 그 한 건에서 exit 1sufficiency.mjs --strict can never pass — it exits 1 on the single case §8 itself calls "a known false positive"sufficiency.mjs --strict không bao giờ đạt — exit 1 trên chính trường hợp mà §8 gọi là ‘false positive đã biết’
5검증기가 런타임이 쓰지 않는 매처를 시험한다: lib/match.mjs:33은 정확한 문자열 비교인데 출하된 스코어러는 score.mjs::matchVal(주석 제거 + OR 집합)이다 → SUBSUMPTION 35건 · OR_COMPOUND 75건을 보지 못한다The verifier tests a matcher the runtime does not use: lib/match.mjs:33 is exact string equality while the shipped scorer uses score.mjs::matchVal (annotation-stripping + OR-sets) → P1/P3 are blind to the 35 SUBSUMPTION and 75 OR_COMPOUND defects lint-values.mjs reportsBộ xác minh kiểm tra matcher mà runtime không dùng: lib/match.mjs:33 dùng bằng chuỗi chính xác, trong khi scorer phát hành dùng score.mjs::matchVal (loại chú thích + tập OR) → P1/P3 không nhìn thấy 35 lỗi SUBSUMPTION và 75 OR_COMPOUND mà lint-values.mjs báo
6lint-values.mjs는 92필드 212값을 지적하고 123 leaf 중 116개에 영향을 주며 exit 1인데 — 어디에도 인용되지 않는다. 레포가 스스로 말한 1계층 산출물인 「질문 집합의 답변가능성」이, 가장 적게 보고된 숫자다lint-values.mjs flags 212 values across 92 fields, affecting 116 of 123 leaves, and exits 1 — and it is quoted nowhere. The answerability of the question set, which the repo calls its own layer-1 deliverable, is its least-reported numberlint-values.mjs gắn cờ 212 giá trị trên 92 trường, ảnh hưởng 116/123 lá, exit 1 — không được trích ở đâu. Khả năng trả lời của bộ câu hỏi, thứ kho gọi là sản phẩm lớp 1, là con số ít được báo cáo nhất
7modifiers.mjs:80이 중간 단계마다 클램프 → 다중 요소가 순서 의존적이고 비가역. :87은 B = 100 − A로 두고 base_ratio.B를 안 읽는다(오늘은 무해). UNCONFIRMED_COST = 0은 죽은 항modifiers.mjs:80 clamps at every intermediate step → multi-modifier results are order-dependent and irreversible. :87 sets B = 100 − A and never reads base_ratio.B (benign today: 0 of 123 leaves sum to anything else)modifiers.mjs:80 chặn giá trị ở mọi bước trung gian → kết quả nhiều yếu tố phụ thuộc thứ tự và không đảo được. :87 đặt B = 100 − A và không đọc base_ratio.B (hiện vô hại: 0/123 lá có tổng khác)

어디까지 갔나How far it gotĐã đi đến đâu

Stage-1 routing is complete and internally consistent, the stage-2 modifier vocabulary is fully authored (106 of 106), and the distributed bundle is byte-consistent with the ontology — all six hashes recompute. What is not done: the 38 source-verified contest findings were never triaged, untouched for two and a half months; 50 of 60 scenario-side registry fields are unauthored; eight decided-but-unbuilt rulings remain. And the DAG the repo is named for was built, verified, then taken off the runtime — it is complete but read only by two verification scripts.

Định tuyến giai đoạn 1 hoàn chỉnh và nhất quán nội bộ, từ vựng điều chỉnh giai đoạn 2 biên soạn đủ (106/106), bundle phân phối nhất quán byte với ontology — tính lại cả sáu hash. Chưa xong: 38 phát hiện mâu thuẫn đã xác minh nguồn chưa được phân loại, bỏ nguyên hai tháng rưỡi; 50/60 trường registry phía tình huống chưa biên soạn; còn tám phán quyết đã quyết nhưng chưa xây. DAG mà kho lấy tên đã xây, xác minh rồi bỏ khỏi runtime — hoàn chỉnh nhưng chỉ hai kịch bản xác minh đọc.

1단계 라우팅은 완성되고 내부적으로 일관. 2단계 수정요소 어휘도 완전히 저작됨(106/106). dist/는 ontology/와 바이트 일관(해시 6개 재계산 일치, 드리프트 0). 안 된 것: 출처 확인된 38개 경합 발견이 한 번도 분류되지 않았다([NEXT] 항목, 2개월 반 동안 그대로) · 시나리오 쪽 레지스트리 60필드 중 50개 미저작 · 결정됐으나 빌드 안 된 판정 8개.

Finished: stage-1 routing is complete and internally consistent; the stage-2 modifier vocabulary is fully authored (106/106); dist/ is byte-consistent with ontology/ (six hashes recomputed, zero drift). Not finished: 38 sourced conflicts were found and never once classified (a [NEXT] item, untouched for two and a half months); 50 of the 60 scenario-side registry fields are unauthored; and 8 determinations were decided but never built.

Đã xong: định tuyến giai đoạn 1 hoàn chỉnh và nhất quán nội bộ; từ vựng điều chỉnh giai đoạn 2 biên soạn đầy đủ (106/106); dist/ nhất quán byte với ontology/ (tính lại sáu hash, không lệch). Chưa xong: tìm được 38 mâu thuẫn có nguồn nhưng chưa một lần phân loại (mục [NEXT], bỏ nguyên hai tháng rưỡi); 50/60 trường registry phía tình huống chưa biên soạn; 8 phán quyết đã quyết nhưng chưa xây.

⚠️ 레포 이름이 된 그 DAG는, 만들어지고 검증된 뒤 런타임에서 내려졌다. tree.json은 존재하고 완전하지만 검증 스크립트 둘만 읽는다. 순서 휴리스틱은 2026-07-27에 후보 소거 + 스코어링으로 교체되며 삭제되었다.

The DAG the repository is named after was built, verified, and then taken off the runtime. tree.json is complete and reachable, but only two verification scripts read it; the ordering heuristic it existed for was replaced by candidate elimination and scoring.

DAG mà kho lấy tên đã xây, xác minh rồi bỏ khỏi runtime. tree.json hoàn chỉnh và tới được, nhưng chỉ hai kịch bản xác minh đọc; heuristic sắp thứ tự mà nó phục vụ đã được thay bằng loại ứng viên và tính điểm.

살아남은 것은 코드가 아니라 정직성 장치다What survived is the honesty apparatusDi sản là cơ chế giữ trung thực

visus inherits none of this repo's code — no engine, no registry, no 166-field ontology. What it inherits is the discipline: BUILT / VERIFIED / WIRED as three different states became visus's 코드 / 실행됨 / 화면에 있음; the append-only decision ledger with supersedes became DECISIONS.md and EXPERIMENTS.md; "the ontology is contested, not trusted — agents generate, deterministic code decides" became blind parallel readers plus a critic; and "unknown is not contradicted" became 판단 불가. The stated reason for dropping the rest is in visus's design doc: a question set verified against itself says nothing about real clips — loop answer coverage on real sets was 14.4%.

visus không kế thừa mã nào của kho này — không bộ máy, registry hay ontology 166 trường. Nó kế thừa kỷ luật: BUILT / VERIFIED / WIRED là ba trạng thái khác nhau, thành 코드 / 실행됨 / 화면에 있음 của visus; sổ quyết định chỉ thêm có supersedes thành DECISIONS.md và EXPERIMENTS.md; ‘ontology phải được tranh luận, không phải tin — agent tạo, mã xác định quyết’ thành bộ đọc song song mù cùng critic; ‘chưa biết không phải bị bác bỏ’ thành 판단 불가. Lý do được nêu để bỏ phần còn lại trong thiết kế visus: bộ câu hỏi kiểm với chính nó không nói gì về clip thật — độ phủ đáp án vòng lặp trên tập thật là 14.4%.

BUILT / VERIFIED / WIRED 세 상태 → visus의 코드 / 실행됨 / 화면에 있음. supersedes를 가진 추가 전용 결정 원장 → DECISIONS.md(V-Dn) + EXPERIMENTS.md(E-V-nnn). 「온톨로지는 신뢰 대상이 아니라 경합 대상」 — 에이전트가 생성하고 결정론적 코드가 판정한다 → 블라인드 병렬 판독 + critic.md. §8.1의 「자기 오라클은 완전성에 눈이 멀었다」 → visus가 기준율 대비 일치를 재고 17% 라벨 노이즈 바닥을 함께 적는 습관. 「모름 ≠ 모순」 → 판단 불가.

BUILT / VERIFIED / WIRED → visus’s 코드 / 실행됨 / 화면에 있음 (code / ran / on screen). An append-only decision ledger with supersedes → DECISIONS.md (V-Dn) + EXPERIMENTS.md (E-V-nnn). "An ontology is a thing to be contested, not trusted" — agents generate, deterministic code judges → blind parallel readers plus critic.md. §8.1’s "a self-oracle is blind to completeness" → visus’s habit of measuring agreement against a base rate and recording the 17% label-noise floor alongside it. "Unknown ≠ contradictory" → 판단 불가.

BUILT / VERIFIED / WIRED → 코드 / 실행됨 / 화면에 있음 của visus (có mã / đã chạy / có trên màn hình). Sổ quyết định chỉ thêm với supersedes → DECISIONS.md (V-Dn) + EXPERIMENTS.md (E-V-nnn). ‘Ontology là thứ phải tranh luận, không phải tin’ — agent tạo, mã xác định phán xét → bộ đọc song song mù cùng critic.md. ‘Self-oracle mù với tính đầy đủ’ ở §8.1 → thói quen visus đo đồng thuận so với tỷ lệ nền và ghi mức sàn nhiễu nhãn 17% cạnh đó. ‘Chưa biết ≠ mâu thuẫn’ → 판단 불가.

🚨 그리고 어떻게 끝났나và đã kết thúc thế nào

ams-demo-0이 엔진을 벤더링하고(2026-07-24) 열하루 뒤 삭제했다(f5e71d9): "the vendored knia-dag engine and scoring adapter. The matcher runs on the published 284 branches and needs neither." (그 284개 분기가 rules.v2.json이다) DECISIONS.md는 A-8을 "Moot — knia-dag's engine was deleted."로 적는다.

ams-demo-0 vendor bộ máy (2026-07-24) rồi xóa sau mười một ngày (f5e71d9): ‘bộ máy knia-dag và adapter tính điểm được vendor. Matcher chạy trên 284 nhánh đã phát hành và không cần cả hai.’ (284 nhánh đó là rules.v2.json) DECISIONS.md ghi A-8 là ‘Không còn liên quan — bộ máy knia-dag đã bị xóa.’

knia-dag에는 아무도 알리지 않았고, 사흘을 더 만들었다.

Không ai báo cho knia-dag, và nó tiếp tục xây thêm ba ngày.

visus는 이 레포의 코드도 레지스트리도 166필드 온톨로지도 하나도 물려받지 않았다. 이유는 docs/DESIGN.md에 있다 — 자기 자신에 대해 검증된 질문 집합은 실제 클립에 대해 아무 말도 하지 않는다 ("loop answer coverage on real sets was 14.4%").

Eleven days after vendoring it, the consumer deleted it — and nobody told this repo, which kept building for three more days.

Mười một ngày sau khi vendor, bên dùng xóa nó — không ai báo cho kho này, vốn tiếp tục xây thêm ba ngày.

8.7visus의 판정 엔진 — 지금 돌아가는 코드’s own engines — the code that runs today — các bộ máy riêng, mã đang chạy hôm nay 🔬 정밀🔬 Chi tiết

reader_tree.py(1,785줄) · tree.py(412) · v2.py(1,982) · decide.py(743) · free.py(297) · table.py(77) · routing.py(322) 전부. v2.py · tree.py · table.py · decide.py는 E-V-034/035 이후에도 바뀌지 않았다 — 아래는 오늘의 코드다.

All of it: reader_tree.py (1,785 lines) · tree.py (412) · v2.py (1,982) · decide.py (743) · free.py (297) · table.py (77) · routing.py (322). v2.py, tree.py, table.py and decide.py were not changed by E-V-034/035 — what follows is today’s code.

Toàn bộ: reader_tree.py (1,785 dòng) · tree.py (412) · v2.py (1,982) · decide.py (743) · free.py (297) · table.py (77) · routing.py (322). v2.py, tree.py, table.py và decide.py không đổi bởi E-V-034/035 — dưới đây là mã hiện nay.

🚨 (1) 역할 동점은 A로 떨어진다. 그리고 7개 도표에서는 A/B가 비율 전부다A role tie resolves to A — and on 7 charts that is the whole ratioHòa vai trò thì về A — trên 7 biểu đồ, đó là toàn bộ tỷ lệ

The judge picks the role by counting matched clauses and taking max, which returns the first maximum — and fits are emitted A before B, so a tie goes to A. The same shape appears in three other places. The line immediately after then declines to lower confidence for any clause mentioning a signal or a left/right road — exactly the clause classes that distinguish the roles. Counted against the book's own clause data: of the 104 car-to-car charts carrying both roles, 7 differ between A and B only on those ignored classes, and all 7 have asymmetric base ratios. 차1-1's is 0:100. So when the reader honestly cannot read the traffic light, both roles come back clean with equal counts, A wins, and the case ships as "the customer is 0% at fault" at confidence 0.8. The honest answer was available — the judge is offered "the statements do not say which side this is" as a choice — and the code discards it when it is chosen.

Bộ phán định chọn vai trò bằng đếm điều khoản khớp rồi lấy max, trả cực đại đầu tiên — fits xuất A trước B nên hòa thì A thắng. Cùng dạng xuất hiện ở ba nơi khác. Dòng ngay sau lại không hạ độ tin cậy cho điều khoản nhắc tín hiệu hoặc đường trái/phải — đúng các lớp điều khoản phân biệt vai. Đếm dữ liệu điều khoản của sách: trong 104 biểu đồ xe với xe có cả hai vai, 7 biểu đồ chỉ khác A/B ở các lớp bị bỏ qua, cả 7 có tỷ lệ cơ sở bất đối xứng. 차1-1 là 0:100. Khi bộ đọc trung thực không đọc được đèn, hai vai đều sạch và cùng số khớp, A thắng, vụ được phát hành là ‘khách lỗi 0%’ với độ tin cậy 0.8. Đáp án trung thực có sẵn — ‘các phát biểu không nói đây là bên nào’ — nhưng mã vứt bỏ khi được chọn.

# v2.py:1377-1379
leaf_fits = [f for (c, _r), f in fit_of.items() if c == walk["chart"]]
clean = [f for f in leaf_fits if not any(x.get("status") == "contradicted" for x in f["clauses"])]
best  = max(clean, key=lambda f: sum(x.get("status") == "matched" for x in f["clauses"]), default=None)

fit_of는 삽입 순서이고 judge_with_decisions는 ("A","B") 순서로 역할을 내놓는다. max는 첫 번째 최대값을 돌려준다 → 동점이면 A. 같은 모양이 세 군데 더 있다 — decide.py:523 · v2.py:1735 · v2.py:1503-1506(중단 경로, 정규화되지 않은 절 개수).

fit_of is in insertion order and judge_with_decisions emits the roles in the order ("A","B"). max returns the first maximum → a tie resolves to A. The same shape appears in three more places — decide.py:523 · v2.py:1735 · v2.py:1503-1506 (the stop path, on unnormalised clause counts).

fit_of theo thứ tự thêm và judge_with_decisions xuất vai theo (‘A’,‘B’). max trả cực đại đầu tiên → hòa thì về A. Cùng dạng ở ba nơi nữa — decide.py:523 · v2.py:1735 · v2.py:1503-1506 (đường dừng, trên số điều khoản chưa chuẩn hóa).

# v2.py:1396-1398   ← and the very next line declines to lower the confidence
party_unknown = [u for u in unknown if str(u).startswith(("고객차","상대차"))
                 and not any(w in str(u) for w in ("에서 옴", "쪽에", "쪽 도로", "신호"))]
conf = 0.8 if not party_unknown else 0.6
# v2.py:1396-1398   ← dòng ngay sau đó không chịu giảm độ tin cậy
party_unknown = [u for u in unknown if str(u).startswith(("고객차","상대차"))
                 and not any(w in str(u) for w in ("에서 옴", "쪽에", "쪽 도로", "신호"))]
conf = 0.8 if not party_unknown else 0.6

「신호」와 「쪽 도로」가 들어간 절은 party_unknown에서 빠진다 — 즉 역할을 가르는 바로 그 절들이 신뢰도에 영향을 주지 않는다.

Clauses containing "신호" or "쪽 도로" are excluded from party_unknown — which means precisely the clauses that separate the roles have no effect on the confidence.

Điều khoản chứa ‘신호’ hoặc ‘쪽 도로’ bị loại khỏi party_unknown — nghĩa là đúng các điều khoản phân biệt vai lại không ảnh hưởng độ tin cậy.

직접 세어 보았다 (data/knia/clauses.json, 역할 둘 다 있는 차 도표 104개): 7개 도표는 A와 B의 절 목록이 오직 그 「무시되는」 부류에서만 다르다.

We counted it ourselves (data/knia/clauses.json, the 104 car-to-car charts carrying both roles): on 7 charts the A and B clause lists differ only within that "ignored" class.

Chúng tôi tự đếm (data/knia/clauses.json, 104 biểu đồ xe với xe mang cả hai vai): trên 7 biểu đồ, danh sách điều khoản A và B chỉ khác trong lớp ‘bị bỏ qua’ đó.

도표chartbiểu đồ기본 비율 A:Bbase ratio A:Btỷ lệ cơ sở A:BA와 B의 유일한 차이the only difference between A and Bkhác biệt duy nhất giữa A và B
차1-10 : 100고객차 신호 녹색 vs 적색customer's signal green vs redđèn của khách xanh so với đỏ
차1-330 : 70고객차 신호 적색 vs 황색customer's signal red vs amberđèn của khách đỏ so với vàng
차1-570 : 30고객차 도로 적색점멸 vs 황색점멸customer's road flashing red vs flashing amberđường khách đèn đỏ nhấp nháy so với vàng nhấp nháy
차12-140 : 60상대차가 고객차의 오른쪽 vs 왼쪽 도로에서 옴the other car comes from the customer's right vs left roadxe đối phương đến từ đường bên phải so với trái của khách
차17-140 : 60〃〃
차20-140 : 60상대차가 오른쪽 vs 왼쪽에서 진행the other car travels on the right vs the leftxe đối phương chạy bên phải so với bên trái
차21-140 : 60〃〃

차1-1에서 신호를 읽지 못하면 — 판독기가 정직하게 판단 불가를 냈을 때 — 두 역할 모두 모순 없이 같은 매칭 수로 돌아오고 max가 A를 돌려준다. 고객차 과실 0%, 신뢰도 0.8. 판단 불가가 「고객이 전혀 잘못 없음」이라는 확정으로 출력된다.

Khi không đọc được đèn trên 차1-1 — bộ đọc trung thực trả không thể xác định — cả hai vai trở về không mâu thuẫn với cùng số khớp, max trả A. Xe khách lỗi 0%, độ tin cậy 0.8. Không thể xác định biến thành kết luận chắc chắn ‘khách hoàn toàn không có lỗi’.

그리고 정직한 답은 수집되었다가 버려진다: role_by_decision은 판정자에게 「진술만으로는 어느 쪽인지 알 수 없다」를 선택지로 준다(v2.py:994). 판정자가 그것을 고르면 :1002가 None을 돌려주고, 절 개수 기반 A가 그대로 선다.

An unread traffic light on 차1-1 ships as "고객차 0% at fault, confidence 0.8" instead of 판단 불가 — and the honest "cannot tell" answer is collected, then discarded.

Không đọc được đèn trên 차1-1 lại phát hành thành ‘고객차 lỗi 0%, độ tin cậy 0.8’ thay vì 판단 불가 — đáp án trung thực ‘không biết’ đã được thu thập rồi bị bỏ.

✅ 프로젝트도 이것을 알고 있다 — E-V-035 (2026-10-15)dự án cũng biết điều này — E-V-035 (2026-10-15)

"ratio −8 = top-1 −2, role on the right chart −4 (20: KB base 100 not in 33-1's table — unscorable; 87, 161, 270: open role filled by the clause-count fallback)"

"ratio −8 = top-1 −2, role on the right chart −4 (20: KB base 100 not in 33-1’s table — unscorable; 87, 161, 270: open role filled by the clause-count fallback)"

‘ratio −8 = top-1 −2, vai trên biểu đồ đúng −4 (20: KB cơ sở 100 không nằm trong bảng 33-1 — không chấm được; 87, 161, 270: vai mở được fallback đếm điều khoản lấp vào)’

수정 후보 (2): "close an open role on the A/B separating clause instead of clause counts, and mark KB bases outside the chart table as unscorable."

Fix candidate (2): "close an open role on the A/B separating clause instead of clause counts, and mark KB bases outside the chart table as unscorable."

Ứng viên sửa (2): ‘đóng vai mở bằng điều khoản phân biệt A/B thay vì số điều khoản, và đánh dấu tỷ lệ cơ sở KB ngoài bảng biểu đồ là không chấm được.’

원장의 가장 최신 행이, 이 감사가 가리키는 바로 그 줄을 지목한다. 후임자에게 이것은 추측이 아니라 이미 합의된 다음 작업이다.

The newest line in the ledger points at the very line this audit points at. For a successor this is not a guess but work that has already been agreed.

Dòng mới nhất trong sổ chỉ đúng dòng mà kiểm tra này chỉ. Với người tiếp quản đây là việc đã thống nhất, không phải phỏng đoán.

⚠️ (1b) 「절이 긴 도표가 이긴다」는 틀렸다. 실제 기전은 더 나쁘다It is not clause count — it is which clauses can be readKhông phải số điều khoản — mà là điều khoản nào đọc được

이 문서는 처음에 차43-2가 절 목록이 길어서 끌개가 된다고 적었다. 책의 데이터로 세어 보니 아니다 — 차 도표의 절 개수는 최소 3 · 중앙값 6 · 최대 10이고, 차43-2는 정확히 6, 거기에 지는 차5-1은 7로 더 길다.

This document first wrote that 차43-2 becomes an attractor because its clause list is long. Counted against the book’s data, that is false — clause counts on car-to-car charts run min 3 · median 6 · max 10, 차43-2 has exactly 6, and 차5-1, which loses to it, is longer at 7.

Tài liệu từng viết 차43-2 hút ứng viên vì danh sách điều khoản dài. Đếm dữ liệu sách cho thấy sai — số điều khoản biểu đồ xe với xe là tối thiểu 3 · trung vị 6 · tối đa 10, 차43-2 có đúng 6, còn 차5-1 thua nó lại dài hơn với 7.

도표chartbiểu đồ절 (A 역할)clauses (role A)điều khoản (vai A)
차43-2 (끌개)차43-2 (the attractor)차43-2 (điểm hút)도로 · 동일방향 진행 · 고객차가 뒤(후행) · 고객차 직진 · 상대차가 앞(선행) · 상대차 진로변경a road · same direction · customer behind (following) · customer going straight · other car ahead (leading) · other car changing lanemột con đường · cùng hướng · khách phía sau (đi sau) · khách đi thẳng · xe đối phương phía trước (dẫn đầu) · xe đối phương chuyển làn
차43-4 (10건 중 3)차43-4 (3 of 10)차43-4 (3 trong 10)진로변경 전에 정지 또는 거의 정지 상태였음 · 대기하던 차로에서 옆 차로로 · 상대차 직진 · 오른쪽 차로 · 옆을 지나가는 중 · 측면 충돌was stopped or nearly stopped before changing lane · moving from the waiting lane into the next · the other car going straight · in the right-hand lane · passing alongside · struck on its sideđã dừng hoặc gần dừng trước khi chuyển làn · chuyển từ làn chờ sang làn kế · xe đối phương đi thẳng · ở làn bên phải · chạy ngang qua · bị đâm bên hông
차43-5 (10건 중 4)차43-5 (4 of 10)차43-5 (4 trong 10)한 차로에서 선후행 · 고객차가 뒤 · 고객차 먼저 진로변경 개시 · 상대차가 앞 · 상대차가 나중에 진로변경leading and following in one lane · customer behind · the customer began the lane change first · other car ahead · the other car changed lane laterxe trước và sau trong một làn · khách phía sau · khách bắt đầu chuyển làn trước · xe đối phương phía trước · xe đối phương chuyển làn sau
차5-1 (10건 중 3)차5-1 (3 of 10)차5-1 (3 trong 10)한쪽 도로에만 신호기 · 고객차 도로에 신호기 없음 · 고객차 우회전 · 상대차 신호 녹색 · …signals on one road only · no signal on the customer's road · customer turning right · the other car's signal green · …chỉ một đường có đèn · đường khách không có đèn · khách rẽ phải · đèn xe đối phương xanh · …

차43-2의 절은 전부 「거의 언제나 읽히는 것」이다. 같은 방향 진로변경 사고라면 여섯 중 다섯은 자동으로 맞는다. 형제들을 가르는 절은 정확히 「읽을 수 없는 것」이다 — 43-4는 「정지 또는 거의 정지 상태였음」(§3.3의 「정차 후 출발」, 어휘에 없다), 43-5는 「먼저 / 나중에 개시」(사건의 열, 표현 수단이 없다), 5-1은 신호(전방 카메라가 가장 못 읽고, v2.py:1396이 신뢰도에서 빼는 바로 그 부류).

Mọi điều khoản 차43-2 đều là thứ ‘gần như luôn đọc được’. Với tai nạn chuyển làn cùng hướng, năm trong sáu điều tự động khớp. Điều khoản phân biệt các biểu đồ chị em lại chính là thứ ‘không đọc được’ — 43-4 là ‘đã dừng hoặc gần dừng’ (‘khởi hành sau dừng’ ở §3.3, không có trong từ vựng); 43-5 là ‘bắt đầu trước / sau’ (chuỗi sự kiện, không có cách biểu đạt); 5-1 là đèn tín hiệu (camera trước đọc kém nhất, đúng lớp mà v2.py:1396 loại khỏi độ tin cậy).

미확인 절은 matched로 세지지 않지만 contradicted도 아니다. 그래서 일반적인 도표만 점수를 쌓고 구체적인 형제는 못 쌓는다. 집중 개선 대상 5개 중 셋이 전부 차43-2에게 지는 이유가 이것이다.

Điều khoản chưa xác định không được tính matched, nhưng cũng không phải contradicted. Vì vậy chỉ biểu đồ tổng quát tích điểm, các biểu đồ chị em cụ thể thì không. Đó là lý do ba trong năm mục cải thiện trọng tâm đều thua 차43-2.

이것이 §3.3와 §5.5과 §8.7을 하나로 묶는다. 「사건의 열을 표현할 수 없다」는 추상적 결핍이 아니라 차43-4·43-5가 10건 중 3·4건만 맞히는 직접적 원인이고, 판정기 안에서는 「일반적인 도표가 이긴다」는 형태로 나타난다. 모델을 바꿔도 움직이지 않는다 — 표현을 고쳐야 움직인다.

The attractor does not win on clause count — 차43-2 sits at the median, and 차5-1, which loses to it, is longer. It wins because its clauses are the ones that can always be read, while its siblings are separated by a stop-then-go state, an ordering of events, and a traffic light — exactly the three things the fact vocabulary cannot express or the camera cannot see. An unknown clause is not matched, but it is not contradicted either, so only the generic chart accumulates.

Điểm hút không thắng vì số điều khoản — 차43-2 ở trung vị, còn 차5-1 thua nó lại dài hơn. Nó thắng vì các điều khoản luôn đọc được, trong khi biểu đồ chị em được phân biệt bằng trạng thái dừng rồi đi, thứ tự sự kiện và đèn tín hiệu — đúng ba thứ từ vựng sự kiện không biểu đạt được hoặc camera không thấy. Điều khoản chưa biết không khớp nhưng cũng không mâu thuẫn, nên chỉ biểu đồ tổng quát tích điểm.

🚨 (2) 카메라 「판단 불가」는 조용히 전방이 된다A 판단 불가 on the camera silently becomes "front"Camera 판단 불가 âm thầm thành ‘phía trước’

When there is no measurement hint and the model answers 판단 불가, the code tests whether the answer starts with "후방" — it does not, so the walk proceeds as a front-facing camera. A rear camera inverts left/right and ahead/behind by rule, and four of the seven charts above are left/right charts, so the two failures multiply. The correct pattern exists in the same codebase: when the dispatch report says the customer had no dashcam and the other party did, the judge warns and caps confidence at 0.5 and never swaps. The camera flip has no equivalent.

Khi không có gợi ý đo và mô hình trả 판단 불가, mã kiểm đáp án có bắt đầu bằng ‘후방’ không — không, nên cây tiếp tục như camera nhìn trước. Theo luật, camera sau đảo trái/phải và trước/sau; bốn trong bảy biểu đồ phía trên là trái/phải nên hai lỗi nhân nhau. Mẫu đúng có trong cùng mã: báo điều phối nói khách không có camera còn đối phương có thì bộ phán định cảnh báo, chặn độ tin cậy ở 0.5 và không bao giờ đổi. Đảo camera không có bảo vệ tương đương.

# reader_tree.py:919  (계측 힌트가 없을 때)
return {"flip": says_rear, "hint": None, "model": model, "by": "model", "why": "카메라 계측 없음 — 모델의 답"}# reader_tree.py:919  (when there is no measurement hint)
return {"flip": says_rear, "hint": None, "model": model, "by": "model", "why": "카메라 계측 없음 — 모델의 답"}
                                                                          └─ a source literal: "no camera measurement — the model's answer"# reader_tree.py:919  (khi không có gợi ý đo)
return {"flip": says_rear, "hint": None, "model": model, "by": "model", "why": "카메라 계측 없음 — 모델의 답"}
                                                                          └─ chuỗi gốc: ‘không có phép đo camera — đáp án của mô hình’

says_rear = model.startswith("후방"). 모델이 판단 불가라고 답하면 False → 전방으로 진행한다. 후방 카메라는 규칙상 좌/우와 전/후를 전부 뒤집는다(:363-365) — 그리고 위 표의 좌·우 도표 4개가 정확히 그 자리에 있다. 두 실패가 곱해진다.

says_rear = model.startswith("후방"). If the model answers 판단 불가 the result is False → it proceeds as front. A rear camera inverts left/right and front/rear throughout by rule (:363-365) — and the four left/right charts in the table above sit in exactly that place. The two failures multiply.

says_rear = model.startswith("후방"). Nếu mô hình trả 판단 불가, kết quả là False → tiếp tục như camera trước. Theo luật, camera sau đảo trái/phải và trước/sau xuyên suốt (:363-365) — bốn biểu đồ trái/phải trong bảng nằm đúng chỗ đó. Hai lỗi nhân nhau.

올바른 패턴이 같은 코드베이스에 있다: camera_owner_hint(v2.py:945-951)는 초기 보고가 「자차 블랙박스 없음 · 대차 있음」이라 하면 — 즉 영상이 상대 차 것이면 — 경고하고 신뢰도를 0.5로 묶되 절대 바꾸지 않는다. 카메라 뒤집기에는 그런 장치가 없다.

The correct pattern exists in the same codebase: camera_owner_hint (v2.py:945-951) warns and caps the confidence at 0.5 when the initial report says "no dashcam on our vehicle, the other party has one" — that is, when the footage belongs to the other car — but it never flips anything. The camera flip has no such safeguard.

Mẫu đúng có trong cùng mã: camera_owner_hint (v2.py:945-951) cảnh báo và chặn độ tin cậy ở 0.5 khi báo ban đầu nói ‘xe ta không có camera hành trình, bên kia có’ — tức video thuộc xe đối phương — nhưng không đảo gì. Đảo camera thiếu bảo vệ đó.

🚨 (3) 충돌 시점을 못 찾으면 클립 길이의 절반A missed impact becomes half the clipKhông tìm thấy va chạm thì lấy nửa clip

When the impact time cannot be found or falls outside the clip, the code falls back to a labelled impact time — which in production is always null, because only the goldset workspace fills it. So it falls back again, to half the clip duration. Everything downstream keys off that number: the frame sequence, the ego re-anchor window, the counterpart re-pick, the text of steps 5 and 6. A silent "I could not see the crash" becomes a confident timestamp with no trace row saying so and no undeterminable tier. E-V-028 found the impact moment is about 40% of frontier readers' wrong facts, and that measurements then re-anchor to it and "agree".

Khi không tìm được thời điểm va chạm hoặc nó ngoài clip, mã dự phòng về thời điểm đã gán nhãn — vốn luôn null trong production, vì chỉ workspace chuẩn điền nó. Vậy lại dự phòng về nửa độ dài clip. Mọi thứ sau đó dựa vào số ấy: chuỗi khung hình, cửa sổ neo lại xe gắn camera, chọn lại đối phương, văn bản bước 5 và 6. ‘Không thấy tai nạn’ âm thầm thành mốc thời gian chắc chắn, không dòng trace nói điều đó và không cấp không thể xác định. E-V-028 tìm thấy thời điểm va chạm chiếm khoảng 40% dữ kiện sai của bộ đọc frontier, rồi phép đo neo lại theo nó và ‘đồng ý’.

# reader_tree.py:1489 · :1499
if t_imp is None or not (0 <= t_imp <= dur):
    t_imp = _num(meta.get("labelled_impact_s"), dur * 0.5)

운영에서 labelled_impact_s는 언제나 None이다(골드셋 작업공간에서만 채워진다) → dur * 0.5. 하류 전부가 이 숫자에 걸린다 — 프레임 시퀀스, 에고 재앵커 창, 상대차 재선택, 5·6단계 본문. 「충돌을 못 봤다」가 흔적 없는 확신 있는 타임스탬프가 된다. (E-V-028: 판독 실패의 약 40%가 충돌 순간이고 "measurements then re-anchor to it and 'agree'".)

In production labelled_impact_s is always None (only the gold-set workspace fills it) → dur * 0.5. Everything downstream keys off that number — the frame sequence, the ego re-anchoring window, the re-selection of the 상대차, and the bodies of steps 5 and 6. "We never saw the impact" becomes a confident timestamp with no trace. (E-V-028: about 40% of reading failures are the moment of impact, and "measurements then re-anchor to it and ‘agree’".)

Trong production, labelled_impact_s luôn None (chỉ workspace chuẩn điền) → dur * 0.5. Mọi thứ sau đó dựa vào số ấy — chuỗi khung hình, cửa sổ neo lại xe gắn camera, chọn lại 상대차, nội dung bước 5 và 6. ‘Chưa thấy va chạm’ thành mốc thời gian chắc chắn không trace. (E-V-028: khoảng 40% lỗi đọc là thời điểm va chạm, và ‘phép đo sau đó neo lại theo nó rồi “đồng ý”’.)

🚨 (4) 계측이 판단 불가를 단정으로 바꿔 쓴다A measurement rewrites a 판단 불가 into an assertionPhép đo viết lại 판단 불가 thành khẳng định

The binding step overwrites any statement that does not itself state a turn — and "the customer's manoeuvre cannot be determined" does not state a turn, so it is rewritten into "the customer car was turning left just before impact" at tier measured. The threshold is a bare 0.5 with no comment and no experiment behind it. The window-based twin of this function guards against overwriting a roundabout-circulation statement; the production path has no such guard, so the exact failure E-V-028 recorded is still live. That same experiment concluded: "post-rules hurt more than helped" and "ego bounce fixed 0 of 42".

Bước gắn kết ghi đè mọi phát biểu không tự nêu rẽ — ‘không xác định được thao tác xe khách’ không nêu rẽ, nên bị viết thành ‘xe khách rẽ trái ngay trước va chạm’ ở cấp measured. Ngưỡng là 0.5 trần trụi, không comment hay thí nghiệm. Bản song sinh theo cửa sổ có guard chống ghi đè phát biểu lưu thông vòng xuyến; đường production không có, nên lỗi chính E-V-028 ghi vẫn sống. Cùng thí nghiệm kết luận: ‘hậu quy tắc hại nhiều hơn giúp’, ‘ego bounce sửa 0/42’.

bind_ego_turn(:975-1001)은 _states_turn이 거짓인 행을 덮어쓴다 — 「고객차 기동 판단 불가」는 회전을 말하지 않으므로 「고객차는 충돌 직전 좌회전 중이었음」, tier: "measured"로 바뀐다. 문턱은 BIND_TURN_CONF = 0.5, 주석도 근거도 없는 상수다. 창 기반 쌍둥이에는 회전교차로 보호가 있지만 운영 경로에는 없다. 같은 실험의 결론: "post-rules (bind_ego_turn, roundabout_suspicion) hurt more than helped" · "ego bounce fixed 0 of 42".

bind_ego_turn (:975-1001) overwrites any row for which _states_turn is false — "the 고객차’s manoeuvre is 판단 불가" does not mention a turn, so it becomes "the 고객차 was turning left just before the impact", tier: "measured". The threshold is BIND_TURN_CONF = 0.5, a constant with neither comment nor justification. The window-based twin has roundabout protection; the production path does not. The same experiment’s conclusion: "post-rules (bind_ego_turn, roundabout_suspicion) hurt more than helped" · "ego bounce fixed 0 of 42".

bind_ego_turn (:975-1001) ghi đè mọi dòng có _states_turn false — ‘thao tác 고객차 là 판단 불가’ không nhắc rẽ, nên thành ‘고객차 rẽ trái ngay trước va chạm’, tier: "measured". Ngưỡng BIND_TURN_CONF = 0.5, hằng số không comment hay biện minh. Bản theo cửa sổ có bảo vệ vòng xuyến; đường production không có. Kết luận cùng thí nghiệm: ‘post-rules (bind_ego_turn, roundabout_suspicion) hại nhiều hơn giúp’ · ‘ego bounce sửa 0/42’.

(5) 나무 걷기 — 마진은 작동하지 않고, 두 번째 눈길은 구조적으로 죽어 있다The walk: the margin is inert and second looks are structurally deadĐi qua cây: margin vô hiệu, nhìn lại chết về cấu trúc

The model-choice function returns the confidence as both the probability and the margin, so the margin test is implied by the probability test and never binds. The escalation path has no margin test at all, so a judge that is confident but tied is settled by one cheap chat call's self-reported confidence instead of becoming a question. That call's confidence is then merged into the judge's probability dictionary, so every later sort runs on two incompatible scales. Because the returned distribution has only one key, second looks are structurally impossible on any model-decided step. An auto-descend is recorded as p=1.0, asserting a certainty never measured. And a chart chosen by a catch-all regex is recorded as chosen by the adjuster, which is exactly the provenance that makes second looks refuse to revisit it.

Hàm chọn mô hình trả độ tin cậy làm cả xác suất lẫn margin, nên kiểm tra margin đã bị kiểm tra xác suất bao hàm và không bao giờ ràng buộc. Đường nâng cấp không kiểm margin, nên bộ phán định tự tin nhưng hòa được chốt bằng độ tin cậy tự báo của một lần gọi chat rẻ thay vì thành câu hỏi. Độ tin cậy đó được nhập vào từ điển xác suất của bộ phán định, khiến mọi sắp xếp sau chạy trên hai thang không tương thích. Vì phân phối trả về chỉ có một khóa, nhìn lại là bất khả về cấu trúc ở mọi bước do mô hình quyết. Tự đi xuống được ghi p=1.0, khẳng định chắc chắn chưa đo. Biểu đồ do regex bắt mọi thứ chọn được ghi là điều tra viên chọn — đúng nguồn gốc khiến nhìn lại từ chối xét nó.

tree.py:149-153_choose_model이 key, conf, conf, {key: conf}를 돌려준다 → margin = p → CONFIDENT_MARGIN = 0.2는 p < 0.6에 이미 포함되어 한 번도 걸리지 않는다_choose_model returns key, conf, conf, {key: conf} → margin = p → CONFIDENT_MARGIN = 0.2 is already implied by p < 0.6 and never binds_choose_model trả key, conf, conf, {key: conf} → margin = p → CONFIDENT_MARGIN = 0.2 đã được p < 0.6 bao hàm và không bao giờ ràng buộc
tree.py:241에스컬레이션 경로에는 마진 검사가 아예 없다. 판정자가 확신하면서 동점일 때(p=0.6, 2등 0.55) 질문으로 올라가지 않고 채팅 한 번의 자기신고 신뢰도로 끝난다The escalation path has no margin test at all. A judge that is confident but tied (p=0.6, runner-up 0.55) never becomes a question — it is settled by one cheap chat call's self-reported confidenceĐường nâng cấp hoàn toàn không kiểm margin. Bộ phán định tự tin nhưng hòa (p=0.6, thứ hai 0.55) không thành câu hỏi — bị chốt bằng độ tin cậy tự báo của một lần gọi chat rẻ
tree.py:242{**pr, **pr2} — 판정자의 확률과 채팅 모델의 자기신고 신뢰도를 같은 딕셔너리에 섞는다. 이후 모든 정렬이 섞인 눈금 위에서 일어난다{**pr, **pr2} — the judge's probabilities and the chat model's self-reported confidence go into the same dictionary. Every later sort runs on a mixture of two scales{**pr, **pr2} — xác suất bộ phán định và độ tin cậy tự báo của mô hình chat vào cùng từ điển. Mọi sắp xếp sau chạy trên hỗn hợp hai thang
tree.py:329alternatives는 2등을 찾는데 probs에 키가 하나뿐이다 → 모델이 고른 모든 단계에서 두 번째 눈길이 구조적으로 불가능alternatives looks for a runner-up, but probs has only one key → second looks are structurally impossible on any model-decided stepalternatives tìm hạng nhì, nhưng probs chỉ có một khóa → nhìn lại bất khả về cấu trúc ở mọi bước do mô hình quyết
tree.py:215-217자동 하강이 "p": 1.0, "margin": 1.0으로 기록된다 — 재 본 적 없는 확신을 단언한다an auto-descend is recorded as "p": 1.0, "margin": 1.0 — asserting a certainty it never measuredtự đi xuống được ghi "p": 1.0, "margin": 1.0 — khẳng định sự chắc chắn chưa từng đo
routing.py:66,70
→ tree.py:220,294
포괄 정규식(re.compile(r".") → 차31-1 · 차54-1)이 고른 도표가 by: "adjuster"로 기록되고, alternatives는 그런 단계를 다시 보지 않는다 → 정규식이 고른 도표를 「조사자가 골랐다」고 적고 영원히 재검토하지 않는다a chart chosen by a catch-all regex (re.compile(r".") → 차31-1 · 차54-1) is recorded as by: "adjuster", and alternatives refuses to revisit such a step → a regex's pick is labelled as the adjuster's and never reviewed againbiểu đồ do regex bắt mọi thứ (re.compile(r".") → 차31-1 · 차54-1) chọn được ghi by: "adjuster", rồi alternatives từ chối xét lại bước như vậy → lựa chọn regex gắn nhãn điều tra viên và không bao giờ xem lại
tree.py:361-386depth_to_chart가 이름으로 DFS한다. 확인해 보니 노드 이름 5개가 중복이고 그중 하나는 신호 있는 교차로와 없는 교차로 양쪽에 있다. find는 첫 번째를 돌려준다depth_to_chart does a DFS by node name. Checked against the built tree: five node names are duplicated, one of them appearing under both the signalled and the unsignalled junction. find returns the firstdepth_to_chart DFS theo tên nút. Đối chiếu cây đã xây: năm tên nút trùng, một tên xuất hiện dưới cả giao lộ có đèn lẫn không đèn. find trả mục đầu tiên

(6) 평면 테이블은 역할을 구분할 수 없다The flat table cannot tell the roles apartBảng phẳng không phân biệt được vai

The mirror map inverts left/right and ahead/behind but does not map crossing, and the compatibility test lets a crossing cell match either left or right. Eighteen of 108 rows have crossing as the other car's side, so for every one of them the A and B entries are identical and the candidate function emits both, with no score and no tie-break. I ran it: a fully specified fact set returns 14 entries, and the separating-facts function nominates control, ego manoeuvre and other manoeuvre — not the side, because the cells are equal in both orientations. The one fact that decides the role is the one the planner cannot nominate as the thing to measure next.

Ánh xạ gương đảo trái/phải và trước/sau nhưng không ánh xạ crossing; kiểm tương thích cho ô crossing khớp cả trái lẫn phải. 18/108 dòng có crossing làm phía đối phương, nên mỗi dòng có mục A và B giống hệt; hàm ứng viên xuất cả hai, không điểm và không phá hòa. Đã chạy: tập dữ kiện xác định đầy đủ trả 14 mục; hàm phân biệt đề cử điều khiển, thao tác xe ta, thao tác xe kia — không có phía, vì các ô bằng nhau ở cả hai hướng. Dữ kiện duy nhất quyết vai cũng là thứ planner không thể đề cử đo tiếp.

table.py:32의 _MIRROR_SIDE는 좌↔우·전↔후를 뒤집지만 crossing은 매핑하지 않는다. 그리고 compatible(:28-29)은 crossing 칸을 left에도 right에도 맞춰 준다. other_side == "crossing"인 행이 108개 중 18개 → 그 도표들은 A와 B 항목이 구분 불가능하고 candidates()는 둘 다 내놓는다(점수도 타이브레이크도 없이).

직접 돌려 보았다: 완전히 특정된 사실 집합(신호 교차로 · 양쪽 직진 · 상대차 왼쪽)에 14개 항목이 나오고, separating_facts는 ['control','ego_manoeuvre','other_manoeuvre']를 돌려준다 — other_side는 들어 있지 않다.

Đã tự chạy: tập dữ kiện xác định đầy đủ (giao lộ có đèn · cả hai đi thẳng · đối phương bên trái) trả 14 mục, còn separating_facts trả ['control','ego_manoeuvre','other_manoeuvre'] — không có other_side.

역할을 결정하는 그 사실이, 「다음에 재야 할 것」으로 지명될 수 없는 구조다. A와 B를 가를 수 없는 행(other_side = crossing)은 108개 중 18개이고 candidates({})는 108도표에 대해 216개를 돌려준다.

The one fact that decides the role is the one the planner is structurally incapable of nominating as the thing to measure next.

Dữ kiện duy nhất quyết vai là thứ planner bất khả về cấu trúc trong việc đề cử làm phép đo tiếp.

🚨 (7) 문서가 말하는 기계의 상당 부분이 기본적으로 꺼져 있다Much of the documented machinery is off by defaultPhần lớn cơ chế được mô tả mặc định tắt

Impact candidates, the fork question, measurement comparison, native video, and E-V-034's heading timeline and counterpart candidates all default to off, as do backtracking and two routing modes. Meanwhile three separate files describe them in the present tense, and one documented guard — "a report rule that contradicts the reader's own direction is skipped" — can never fire because the flag it depends on is off. What is on by default and silently decisive: two catch-all regexes that pick a chart from the dispatch text, and the signal and road-width exclusions, which turn "the reader could not read the signal" into "the signalled branches are off the table" and "width unknown" into "equal width" — recorded, but costing no confidence and raising no question.

Ứng viên va chạm, câu hỏi ngã rẽ, so sánh phép đo, video gốc, timeline hướng xe và ứng viên đối phương của E-V-034 đều mặc định tắt; quay lui và hai chế độ định tuyến cũng vậy. Trong khi ba tệp riêng mô tả chúng ở thì hiện tại, còn guard ‘bỏ quy tắc báo cáo mâu thuẫn hướng của bộ đọc’ không bao giờ kích hoạt vì cờ phụ thuộc tắt. Thứ bật mặc định và âm thầm quyết: hai regex bắt mọi thứ chọn biểu đồ từ văn bản điều phối, loại trừ theo tín hiệu và độ rộng đường, biến ‘bộ đọc không đọc được đèn’ thành ‘loại nhánh có đèn’, ‘không rõ độ rộng’ thành ‘rộng bằng nhau’ — có ghi lại nhưng không mất độ tin cậy, không hỏi.

run_case의 기본값: impact_candidates=False · fork_question=False · compare_measurements=False · video=False, 그리고 E-V-034의 ego_timeline · other_candidates · stitch · overlay도 「도표 이득 없음(n=18)」으로 꺼진 채다. 환경변수도 VISUS_BACKTRACK off · VISUS_ROUTE_READER 0 · VISUS_ROUTE_YIELD 0.

The defaults in run_case: impact_candidates=False · fork_question=False · compare_measurements=False · video=False, and E-V-034’s ego_timeline · other_candidates · stitch · overlay are off as well, on the ground of "no chart gain (n=18)". The environment variables too: VISUS_BACKTRACK off · VISUS_ROUTE_READER 0 · VISUS_ROUTE_YIELD 0.

Mặc định trong run_case: impact_candidates=False · fork_question=False · compare_measurements=False · video=False; ego_timeline · other_candidates · stitch · overlay của E-V-034 cũng tắt, lý do ‘không cải thiện biểu đồ (n=18)’. Biến môi trường: VISUS_BACKTRACK tắt · VISUS_ROUTE_READER 0 · VISUS_ROUTE_YIELD 0.

그런데 engines/__init__.py:28-38 · routing.py:293-295 · v2.py:1383-1385는 이것들을 현재형으로 설명한다. 특히 「판독기 방향과 모순되는 보고 규칙은 건너뛴다」 가드는 yield_dir가 꺼져 있어 한 번도 발동하지 않는다.

Yet engines/__init__.py:28-38, routing.py:293-295 and v2.py:1383-1385 all describe these in the present tense. In particular the guard that "skips a report rule contradicting the reader’s direction" has never once fired, because yield_dir is off.

Tuy nhiên engines/__init__.py:28-38, routing.py:293-295 và v2.py:1383-1385 đều mô tả chúng ở thì hiện tại. Đặc biệt guard ‘bỏ quy tắc báo cáo mâu thuẫn hướng bộ đọc’ chưa từng kích hoạt, vì yield_dir tắt.

반대로, 기본적으로 켜져 있고 조용히 결정적인 것: routing.py의 포괄 정규식 둘, 그리고 book_rules의 신호·도로폭 제외 — 「신호 판단 불가」를 「신호 있는 가지는 후보에서 제외」로, 「폭 모름」을 「동일폭」으로 바꾼다. 기록은 남지만 신뢰도를 깎지도, 질문으로 올라가지도 않는다(fork_question이 꺼져 있으므로). → 이것을 대체하려고 만든 것이 §7.9의 지식 기반이고, 이미 측정까지 끝났다(E-V-036).

What is on by default and quietly decisive: two catch-all regexes in the router that select a chart straight from the dispatch text, and the book-rule exclusions, which turn "the signal could not be read" into "the signalled branches are off the table" and "width unknown" into "equal width". They are recorded — and they cost no confidence and raise no question, because the fork question is off. The knowledge base in §7.9 was built to replace exactly this, and it has already been measured (E-V-036).

Thứ bật mặc định và âm thầm quyết: hai regex bắt mọi thứ trong router chọn biểu đồ thẳng từ văn bản điều phối; loại trừ theo luật sách biến ‘không đọc được đèn’ thành ‘nhánh có đèn bị loại’, ‘không rõ độ rộng’ thành ‘rộng bằng nhau’. Có ghi lại — không mất độ tin cậy, không hỏi vì fork question tắt. Cơ sở tri thức ở §7.9 được xây để thay đúng điều này, và đã được đo (E-V-036).

(8) 재어 놓고 쓰지 않는 것Measured and never usedĐã đo nhưng chưa dùng

The prompts ask for a confidence eight times, with "be honest; 0.5 means even odds" written out — and it is never used as a threshold. It is copied onto the statement row and into the trace, nothing more. The numbers the adjuster actually sees on screen are nine hardcoded confidence levels in the judge. The same judgement — how much may be missing before abstaining — uses three different arities in one file (1, 2 and 3). On a judge parse failure the system ships the top soft-ranker row's chart and its role at confidence 0.35. One function does the honest thing and is worth copying: when the two halves of lead/follow disagree within a tenth, both go unknown.

Prompt yêu cầu độ tin cậy tám lần, viết rõ ‘trung thực; 0.5 nghĩa là ngang cơ’ — nhưng không bao giờ dùng làm ngưỡng. Chỉ chép lên dòng phát biểu và trace. Các số điều tra viên thực thấy là chín mức độ tin cậy hard-code trong bộ phán định. Cùng phán xét — thiếu bao nhiêu thì từ chối — dùng ba ngưỡng đếm khác nhau trong một tệp (1, 2, 3). Khi parse bộ phán định lỗi, hệ thống phát hành biểu đồ hàng đầu của soft-ranker và vai của nó ở độ tin cậy 0.35. Một hàm làm điều trung thực đáng sao chép: khi hai nửa trước/sau bất đồng trong một phần mười, cả hai về unknown.

  • 단계마다 신뢰도를 여덟 번 묻는다(「정직하게; 0.5는 반반」까지 적어서) — 그리고 한 번도 문턱으로 쓰이지 않는다the prompts ask for a confidence eight times (down to "be honest; 0.5 means even odds") — and it is never used as a thresholdprompt yêu cầu độ tin cậy tám lần (tới mức ‘trung thực; 0.5 nghĩa là ngang cơ’) — không bao giờ dùng làm ngưỡng
  • v2.py의 판정 경로에 하드코딩된 신뢰도 아홉 개 — 조사자가 화면에서 보는 숫자가 이것들이다nine hardcoded confidence levels on v2's judging path — these are the numbers the adjuster sees on screenchín mức độ tin cậy hard-code trên đường phán định v2 — đây là số điều tra viên thấy trên màn hình
  • 같은 판단에 문턱 셋: 미확인 1개면 커밋(decide.py:737), 2개면 기권(:702), 증거 경로에서는 3개(:686)three different arities for the same judgement: commit with 1 unknown (decide.py:737), abstain at 2 (:702), abstain at 3 on the evidence path (:686)ba ngưỡng đếm khác nhau cho cùng phán xét: chốt với 1 unknown (decide.py:737), từ chối ở 2 (:702), từ chối ở 3 trên đường bằng chứng (:686)
  • decide.py:721-724 — 판정자 파싱 실패 시 소프트 랭커 1등 도표와 그 역할을 신뢰도 0.35로 출고한다decide.py:721-724 — on a judge parse failure it ships the top soft-ranker row's chart and its role at confidence 0.35decide.py:721-724 — parse bộ phán định lỗi thì phát hành biểu đồ và vai của hàng soft-ranker đầu ở độ tin cậy 0.35
  • ✅ 좋은 반례: decide.py:636-638은 선행/후행 두 쪽이 COMPLEMENT_MARGIN = 0.1 안에서 어긋나면 둘 다 unknown으로 돌린다✅ the good counter-example: decide.py:636-638 sends both halves of 선행/후행 to unknown when they disagree within COMPLEMENT_MARGIN = 0.1✅ phản ví dụ tốt: decide.py:636-638 đưa cả hai nửa 선행/후행 về unknown khi chúng bất đồng trong COMPLEMENT_MARGIN = 0.1

⚠️ 후임자가 「당연한 수정」으로 깨뜨릴 것What the obvious change breaksSửa hiển nhiên sẽ phá gì

Each of these is a trap. Returning a real distribution from the model-choice function wakes the margin test (steps that currently descend will stop and ask), wakes second looks (every case's candidate set changes), and breaks the stub tests. Removing the impact fallback is not possible as a one-liner: the timestamp is structurally required and there is no undeterminable-impact path to fall into — you have to build one first. Turning impact candidates on by default voids two byte-identity tests and changes the bounce, the binding, the roundabout rule and the re-anchor simultaneously. Deduplicating the candidate list breaks the separating-facts function, which needs both orientations present. And stopping crossing from matching left and right is the hard gate that E-V-008a measured as costing 29% of cases their candidates.

Mỗi mục đều là bẫy. Cho hàm chọn mô hình trả phân phối thật sẽ đánh thức kiểm tra margin (bước hiện đi xuống sẽ dừng hỏi), đánh thức nhìn lại (tập ứng viên mọi vụ đổi), phá kiểm thử stub. Không thể bỏ fallback va chạm bằng một dòng: mốc thời gian là bắt buộc về cấu trúc, chưa có đường không xác định va chạm — phải xây trước. Bật ứng viên va chạm mặc định vô hiệu hai kiểm thử đồng nhất byte và đổi bounce, binding, luật vòng xuyến, neo lại cùng lúc. Loại trùng ứng viên phá hàm phân biệt dữ kiện vốn cần cả hai hướng. Ngăn crossing khớp trái/phải chính là cổng cứng E-V-008a đo làm 29% vụ mất ứng viên.

바꾸고 싶어질 것the change you will want to makethay đổi bạn sẽ muốn làm깨지는 것what breaksthứ bị phá
_choose_model이 진짜 분포를making _choose_model return a real distributioncho _choose_model trả phân phối thậtCONFIDENT_MARGIN이 살아나 지금 하강하던 단계들이 질문이 된다 · alternatives()가 깨어나 모든 사건의 후보가 바뀐다 · 스텁 테스트의 모양이 바뀐다CONFIDENT_MARGIN wakes up and steps that currently descend become questions · alternatives() wakes up and every case's candidate set changes · the stub tests change shapeCONFIDENT_MARGIN thức dậy, bước đang đi xuống thành câu hỏi · alternatives() thức dậy, tập ứng viên mọi vụ đổi · kiểm thử stub đổi dạng
labelled_impact_s 대체 제거removing the labelled_impact_s fallbackbỏ fallback labelled_impact_st_imp는 구조적으로 필수다. run_case에 충돌 시점 판단 불가 경로가 없다 — 먼저 만들어야 한다t_imp is structurally required. run_case has no undeterminable-impact path — you would have to build one firstt_imp bắt buộc về cấu trúc. run_case không có đường không xác định va chạm — phải xây trước
impact_candidates 기본 켜기turning impact_candidates on by defaultbật impact_candidates mặc định바이트 동일성 테스트 두 개가 무효가 되고 바운스·바인딩·회전교차로 규칙·재앵커가 동시에 바뀐다two byte-identity tests are voided, and the bounce, the binding, the roundabout rule and the re-anchor all change at oncehai kiểm thử đồng nhất byte bị vô hiệu, bounce, binding, luật vòng xuyến và neo lại đổi cùng lúc
candidates() 중복 제거de-duplicating candidates() to one entry per chartloại trùng candidates() về một mục mỗi biểu đồseparating_facts가 두 방향이 다 있어야 칸을 비교한다 — 같이 깨진다separating_facts needs both orientations present to compare cells — it breaks with itseparating_facts cần cả hai hướng có mặt để so ô — sẽ bị phá
crossing이 좌·우에 맞는 것 막기stopping `crossing` from matching left and rightngăn `crossing` khớp trái và phải모든 교차 도표의 재현율이 떨어진다 — E-V-008a가 「29%의 사건이 후보를 잃는다」고 측정한 바로 그 게이트recall drops on every crossing chart — exactly the hard gate E-V-008a measured as costing 29% of cases their candidatesrecall giảm trên mọi biểu đồ giao cắt — đúng cổng cứng E-V-008a đo làm 29% vụ mất ứng viên
차43-2 — A = 후행 직진차, B = 선행 진로변경차차43-2 — A is the following car going straight, B the leading car changing lanes차43-2 — A là xe sau đi thẳng, B là xe trước chuyển làn고객차 → Axe khách → A상대차 → Bxe đối phương → B30 : 70고객차 30% 과실our client 30% at faultkhách của ta lỗi 30%고객차 → Bxe khách → B상대차 → Axe đối phương → A70 : 30고객차 70% 과실our client 70% at faultkhách của ta lỗi 70%역할만 바꿔도swap only the rolechỉ đổi vai도표도 영상도 그대로다same chart, same videocùng biểu đồ, cùng video🚨 동점이면 A로 떨어진다 — v2.py:1379🚨 A tie resolves to A — v2.py:1379🚨 Hòa thì về A — v2.py:1379차 도표 104개 중 7개는 A와 B가 「신호」·「쪽 도로」에서만 갈리는데, 그 둘은 신뢰도 계산에서 빠진다.On 7 of 104 car-to-car charts, A and B differ only on clauses the confidence calculation excludes.Trên 7/104 biểu đồ xe với xe, A và B chỉ khác ở điều khoản bị loại khỏi phép tính độ tin cậy.

그림 3. A와 B는 도표 안의 자리이지 차가 아니다 — §8.7.Figure 3. A and B are positions in the chart, not vehicles — §8.7.Hình 3. A và B là vị trí trong biểu đồ, không phải xe — §8.7.

8.8측정 장치 — 어느 숫자가 재현되고 어느 것이 안 되나The measurement harness — which numbers reproduceBộ đo — các con số tái hiện được 🔬 정밀🔬 Chi tiết

커밋된 per-case CSV 11개를 전부 재계산했고 data/audit/score.py와 workspace.score()를 다시 돌렸다. 모델 호출은 하지 않았다.

All eleven committed per-case CSVs were recomputed and data/audit/score.py and workspace.score() were run again. No model calls were made.

Tính lại toàn bộ mười một CSV theo vụ đã commit, chạy lại data/audit/score.py và workspace.score(). Không gọi mô hình.

✅ 재현되는 것What reproducesNhững gì tái hiện được

초기 보고 없이 26.3% · 중단 8626.3% without the initial report · 86 reaching no verdict26.3% khi không có báo ban đầu · 86 vụ không tới phán định정확히 재계산된다. 같은 300건, 같은 채점 경로, 단일 통제 배치. 이 묶음에서 가장 깨끗한 숫자recomputes exactly. Same 300 cases, same scoring path, one controlled batch. The cleanest number in the settính lại khớp chính xác. Cùng 300 vụ, cùng đường chấm, một batch có kiểm soát. Con số sạch nhất trong tập
E-V-001 라벨 ~17%E-V-001's ~17% label noisenhiễu nhãn ~17% của E-V-001원장 줄과 일치 — n=48 agree=24 disagree=21 none=3. 17%는 8/48 = 16.7%. 단 AI Hub 골드셋의 수치다 (KB 300의 라벨 의심은 23/286 ≈ 8%)matches the ledger line — n=48 agree=24 disagree=21 none=3. The 17% is 8/48 = 16.7%. But it is the AI Hub gold set (KB's 300 has its own figure)khớp dòng sổ — n=48 agree=24 disagree=21 none=3. 17% là 8/48 = 16.7%. Nhưng đó là bộ chuẩn AI Hub (300 vụ KB có con số riêng)
E-V-003/004재실행 — fable 16/48 = 33.3%, qwen 4/48 = 8.3%. 커밋된 보고서와 동일re-ran — fable 16/48 = 33.3%, qwen 4/48 = 8.3%. Identical to the committed reportschạy lại — fable 16/48 = 33.3%, qwen 4/48 = 8.3%. Giống hệt báo cáo đã commit
공개 모델 arm 전부every open-model armmọi nhánh mô hình mở11개 CSV가 scores.txt와 한 건도 틀리지 않고, 정답 라벨이 final_300_ids.csv와 300/300 일치all 11 CSVs match scores.txt case for case, and their gold labels cross-check 300/300 against a separately built filecả 11 CSV khớp scores.txt từng vụ, nhãn chuẩn đối chiếu 300/300 với tệp dựng độc lập

⚠️ 69.7% / 73.0% — 진짜 수인데, 디스크에는 로그 한 줄로만 있다Real counts that exist only as a log lineSố đếm thật chỉ tồn tại ở một dòng log

209 and 219 are real and recorded seven times identically. But no code computes the percentages, there is no per-case export for the production arm, so the 209 cannot be decomposed, and reproducing it needs the production database and a cohort file that are not in the repo. Worse for interpretation: the headline uses the most generous of the three top-1 definitions in the codebase — chart if chosen, else best clause fit, so a stopped tree still gets a pick — and production's stop count is never printed at all, so how many of the 300 reached no verdict is unrecorded. Two different 300-case accuracies live in the repo (69.7% and 59.8%) with nothing cross-referencing them, and the directory holding the sole evidence is referenced by nothing.

209 và 219 là thật, được ghi giống nhau bảy lần. Nhưng không mã nào tính phần trăm, không có xuất theo vụ cho nhánh production, nên không phân rã được 209; muốn tái hiện cần DB production và tệp cohort không có trong kho. Về diễn giải còn tệ hơn: số nổi bật dùng định nghĩa top-1 rộng rãi nhất trong ba định nghĩa của mã — biểu đồ đã chọn, nếu chưa có thì điều khoản khớp tốt nhất, nên cây dừng vẫn có lựa chọn — và số dừng production chưa bao giờ in, nên không ghi bao nhiêu trong 300 vụ không tới phán định. Kho có hai độ chính xác 300 vụ khác nhau (69.7% và 59.8%) không tham chiếu nhau, còn thư mục chứa bằng chứng duy nhất không gì tham chiếu.

209와 219는 실재하고 7번 반복 기록되어 있다. 209/300 = 69.7% ✓ · 219/300 = 73.0% ✓. 그러나:

209 and 219 are real and recorded seven times over. 209/300 = 69.7% ✓ · 219/300 = 73.0% ✓. But:

209 và 219 là thật, được ghi bảy lần. 209/300 = 69.7% ✓ · 219/300 = 73.0% ✓. Nhưng:

  • 백분율을 계산하는 코드가 없다. "73.0%"는 레포 어디에도 없다no code computes the percentages. The string "73.0%" appears nowhere in the repokhông mã nào tính phần trăm. Chuỗi ‘73.0%’ không xuất hiện đâu trong kho
  • 운영 arm의 per-case 내보내기가 없다 → 209를 분해할 수 없다. 재현하려면 운영 Postgres와 코호트 파일이 필요한데 둘 다 레포에 없다there is no per-case export for the production arm → the 209 cannot be decomposed. Reproducing it needs the production Postgres and the cohort file, and neither is in the repokhông có xuất theo vụ cho nhánh production → không phân rã được 209. Tái hiện cần Postgres production và tệp cohort, cả hai đều không có trong kho
  • 🚨 top-1의 정의가 세 가지 중 가장 관대한 것이다 — 「고른 도표, 없으면 최선의 조항 적합」. 나무가 멈춰도 한 표를 받는다. kb_score.py는 이 둘을 분리해서 세고 kb_replay.py는 엄격하다🚨 the top-1 definition is the most generous of three — "the chosen chart, else the best clause fit". A stopped tree still gets a pick. kb_score.py keeps these as separate measures and kb_replay.py is strict🚨 định nghĩa top-1 rộng nhất trong ba định nghĩa — ‘biểu đồ đã chọn, nếu chưa có thì điều khoản khớp tốt nhất’. Cây đã dừng vẫn có lựa chọn. kb_score.py giữ chúng làm thước đo riêng; kb_replay.py chấm chặt
  • 🚨 판단 불가가 300 규모에서 답으로 채점된 적이 없다. stops는 실험 arm에만 출력되고 운영에는 아예 출력되지 않는다. (보고 없는 arm에서 세어 보면 중단 86건 중 7건이 top-1 적중, 18건이 비율 적중으로 — 순전히 대체 픽으로 — 집계된다)🚨 판단 불가 has never been scored as an answer at the 300 scale. stops is printed for experiment arms only and never for production. (Counted on the no-report arm: of 86 stops, 7 scored as top-1 hits and 18 as ratio hits — purely through the fallback)🚨 판단 불가 chưa từng được chấm như đáp án ở quy mô 300. stops chỉ in cho nhánh thí nghiệm, không bao giờ cho production. (Đếm nhánh không báo: trong 86 dừng, 7 được chấm trúng top-1, 18 trúng tỷ lệ — hoàn toàn nhờ fallback)
  • 같은 레포에 300건 정확도가 둘이다 — 209/300 = 69.7%(10-06)와 171/286 = 59.8%(10-01). 서로를 가리키는 주석이 없다two different 300-case accuracies live in the repo — 209/300 = 69.7% (10-06) and 171/286 = 59.8% (10-01), with nothing cross-referencing themhai độ chính xác 300 vụ khác nhau trong kho — 209/300 = 69.7% (10-06) và 171/286 = 59.8% (10-01), không có gì tham chiếu nhau
  • docs/results/kb_open_20261006/는 레포의 어느 곳에서도 참조되지 않는다 — 헤드라인의 유일한 증거인데docs/results/kb_open_20261006/ is referenced nowhere in the repo — and it holds the only evidence for the headlinedocs/results/kb_open_20261006/ không được nơi nào trong kho tham chiếu — nó chứa bằng chứng duy nhất cho số nổi bật

🚨 88% — 재현되지만, 다른 arm의 숫자다It reproduces — for a different armTái hiện được — nhưng cho nhánh khác

194 of 221 = 87.78%, exactly. But those 221 are the no-report arm's misses, not the shipped system's 91 — no equivalent classification of production's failures exists. And visible_likely is neither a field the system emits nor a human annotation: the string appears in that one file and nowhere else, with no schema and no writer. The method is stated in a sibling document: "I cannot watch the clips, so the reference for each fact is built from the points where the strong readers agree with each other and with the report." So the chart level is scored against KB's filed chart and is not a self-oracle — but the fact level is, and every per-model deciding-fact rate rests on the same base.

194/221 = 87.78%, chính xác. Nhưng 221 là các vụ nhánh không báo bỏ lỡ, không phải 91 vụ của hệ thống phát hành — không có phân loại tương đương cho lỗi production. visible_likely không phải trường hệ thống xuất hay nhãn người: chuỗi chỉ xuất trong tệp đó, không lược đồ, không bộ ghi. Phương pháp được nêu ở tài liệu bên cạnh: ‘Tôi không xem được clip, nên chuẩn mỗi sự kiện được dựng từ chỗ các bộ đọc mạnh đồng ý với nhau và với báo cáo.’ Vì vậy tầng biểu đồ chấm với biểu đồ KB nộp, không phải self-oracle — nhưng tầng sự kiện thì có, mọi tỷ lệ dữ kiện quyết định theo mô hình đều dựa trên cùng nền.

noreport_miss_classes.jsonl 221행: visible_likely yes 194 / unclear 26 / no 1 → 194/221 = 87.78% ✓. 분류 WRONG 78 · OPEN 77 · LABEL_DOUBT 34 · PRESENT_UNUSED 18 · NOT_STATED 14 = 221 ✓.

그런데 그 221건은 300 − 79 = 보고 없는 Opus arm의 실패다. 운영 시스템의 91건이 아니다. 운영 실패에 대한 같은 분류는 존재하지 않는다.

Nhưng 221 vụ đó là 300 − 79 = thất bại của nhánh Opus không báo. Không phải 91 vụ của hệ thống production. Phân loại tương đương cho lỗi production không tồn tại.

그리고 visible_likely는 모델이 내보내는 필드도, 사람의 주석도 아니다 — 레포 전체에서 그 문자열은 이 JSONL 한 곳에만 있고 스키마도 쓰는 코드도 없다. 방법은 자매 문서가 밝혀 둔다:

Ngoài ra visible_likely không phải trường mô hình xuất hay nhãn con người — trong toàn kho chuỗi chỉ có ở một JSONL này, không lược đồ hay mã ghi. Tài liệu bên cạnh nêu phương pháp:

"I cannot watch the clips, so the reference for each fact is built from … the points where the strong readers agree with each other and with the report. A fact counts as 'visible' when at least two independent frontier readers state it from the frames."ev028-reading-analysis.md:7-16

‘Tôi không xem được clip, nên chuẩn mỗi sự kiện được dựng từ … nơi các bộ đọc mạnh đồng ý với nhau và với báo cáo. Sự kiện tính là “nhìn được” khi ít nhất hai bộ đọc frontier độc lập nêu nó từ khung hình.’ev028-reading-analysis.md:7-16

도표 수준의 채점은 KB가 실제로 접수한 도표에 대고 하므로 자기 오라클이 아니다. 그러나 사실 수준은 자기 오라클이다 — 기준 사실도 「보였는가」도 전부 시스템 자신의 전사에 대한 모델 간 합의에서 나온다. E-V-028의 모델별 결정적 사실 적중률도 같은 기반 위에 있다.

Scoring at the chart level is done against the chart KB actually filed, so it is not a self-oracle. Scoring at the fact level is — both the reference fact and "was it visible" come from inter-model agreement over the system’s own transcript. E-V-028’s per-model decisive-fact hit rate rests on the same foundation.

Tầng biểu đồ được chấm với biểu đồ KB thực nộp, nên không phải self-oracle. Tầng sự kiện thì có — cả sự kiện chuẩn lẫn ‘có nhìn được không’ đến từ đồng thuận mô hình trên bản ghi của chính hệ thống. Tỷ lệ trúng sự kiện quyết định theo mô hình ở E-V-028 dựa cùng nền.

사정사 재채점 76.7 → 83.3 / 86.7%The adjuster re-scoreĐiều tra viên chấm lại

The source is the 47-page final report, not the repo. What the repo holds is the tooling: a builder that makes one review page per reviewer from the cases where the system's top-1 differs from KB's chart — and that count is exactly 300 − 209 = 91. The answers are written to S3 and were never committed. They are not unread, though: E-V-035 reads that bucket and scores against it. So this figure is not unsupported — it is not re-derivable from the repo. Recomputing it needs the review bucket and the production database, and E-V-035 already shows how.

Nguồn là báo cáo cuối 47 trang, không phải kho. Kho giữ công cụ: bộ dựng một trang xem xét cho mỗi người từ các vụ top-1 khác biểu đồ KB — đúng 300 − 209 = 91. Đáp án được ghi S3, chưa commit. Nhưng không phải chưa được đọc: E-V-035 đọc bucket rồi chấm. Vậy số này không phải thiếu căn cứ — nó không suy lại được từ kho. Tính lại cần bucket xem xét và DB production; E-V-035 đã chỉ cách.

출처는 최종 보고서(47쪽)이지 레포가 아니다. 레포에 있는 것은 도구뿐이다 — kb_review_build.py가 시스템 top-1 ≠ KB 도표인 사건으로 리뷰어별 페이지를 만든다. 그 건수는 정확히 300 − 209 = 91 ✓. 답은 S3에 쓰이고 레포에는 커밋되지 않았다.

The source is the 47-page final report, not the repo. What the repo holds is the tooling — kb_review_build.py builds one page per reviewer from the cases where the system’s top-1 differs from KB’s chart, and that count is exactly 300 − 209 = 91 ✓. The answers were written to S3 and never committed.

Nguồn là báo cáo cuối 47 trang, không phải kho. Kho giữ công cụ — kb_review_build.py dựng trang mỗi người xem xét từ vụ top-1 khác biểu đồ KB, đúng 300 − 209 = 91 ✓. Đáp án ghi S3, chưa commit.

✅ 다만 읽히지 않는 것은 아니다 — E-V-035(10-15)가 그 버킷을 읽어 채점한다: "right + acceptable (나+다, either) new 239 vs prod 251; (나, both) 221 vs 226; 가/가 23 vs 32; but 30 new charts are unreviewed vs 0."

✅ That does not make them unreadable — E-V-035 (10-15) reads that bucket and scores against it: "right + acceptable (나+다, either) new 239 vs prod 251; (나, both) 221 vs 226; 가/가 23 vs 32; but 30 new charts are unreviewed vs 0."

✅ Điều đó không khiến chúng không đọc được — E-V-035 (10-15) đọc bucket rồi chấm: ‘đúng + chấp nhận được (나+다, một trong hai) mới 239 so với prod 251; (나, cả hai) 221 so với 226; 가/가 23 so với 32; nhưng 30 biểu đồ mới chưa được xem xét so với 0.’

그러므로 76.7/83.3/86.7은 「근거 없는 수」가 아니라 「이 레포에서 재유도할 수 없는 수」다. 다시 세려면 S3 버킷 visus-kb-review-20261006와 운영 DB가 있어야 하고, E-V-035가 그 방법을 이미 보여 준다.

So 76.7 / 83.3 / 86.7 are not "numbers without a basis" but numbers that cannot be re-derived from this repo. Recomputing them needs the S3 bucket visus-kb-review-20261006 and the production database — and E-V-035 already shows how.

Vậy 76.7 / 83.3 / 86.7 không phải ‘số không căn cứ’ mà là số không thể suy lại từ kho này. Tính lại cần bucket S3 visus-kb-review-20261006 và DB production — E-V-035 đã chỉ cách.

⚠️ 접근 방향 53% → 87.8% — 출처를 바로잡는다Correcting the provenance of 87.8%Đính chính nguồn gốc bằng chứng của 87.8%

This figure is lense's E-V-001, not visus's — the two ledgers share numbering. It is real, with a committed artifact. But the ground truth is counterpart_camera_side, a box-centre proxy, and lense itself withdrew the family the same month: 13 of the author's own 20 labels were other_relation, a value the proxy cannot express, and the routed answer matched him on 4 of 11 against his own 65% baseline — "it is not a measured fact". A third experiment adds that this binding never appears among the answers that hold a chart back. So: the improvement is real against a proxy, the proxy disagrees with the human, and the binding does not decide charts. Quoting it as "nearly doubles accuracy" misdirects.

Đây là E-V-001 của lense, không phải visus — hai sổ trùng số thứ tự. Số thật, có artifact commit. Nhưng chuẩn là counterpart_camera_side, đại diện tâm hộp; chính lense đã rút họ phép đo trong cùng tháng: 13/20 nhãn tác giả là other_relation, giá trị đại diện không biểu đạt được; đáp án định tuyến khớp ông ở 4/11 so với baseline 65% — ‘không phải sự kiện đo được’. Thí nghiệm thứ ba bổ sung rằng ràng buộc này không bao giờ nằm trong các đáp án giữ biểu đồ lại. Vậy cải thiện thật theo đại diện, đại diện bất đồng với người, ràng buộc không quyết biểu đồ. Trích ‘gần gấp đôi độ chính xác’ sẽ dẫn sai hướng.

이 수는 lense의 E-V-001이다 (visus의 E-V-001이 아니다 — 번호가 겹친다):

"상대차 37/70 = 53% → 72/82 = 87.8% (CI 79-93); 고객차 61% → 87.8%; contradicting pairs 34 → 0"lense EXPERIMENTS.md:112

‘Xe đối phương 37/70 = 53% → 72/82 = 87.8% (CI 79-93); xe khách 61% → 87.8%; cặp mâu thuẫn 34 → 0’lense EXPERIMENTS.md:112

그러나 그 정답은 counterpart_camera_side — 라벨러의 박스 중심 대 카메라 축이라는 프록시다. 그리고 lense 자신이 같은 달에 그 계열을 철회했다:

But that ground truth is counterpart_camera_side — a proxy: the labeller’s box centre against the camera axis. And lense itself withdrew that family of measurements the same month:

Nhưng chuẩn đó là counterpart_camera_side — một đại diện: tâm hộp người gán nhãn so với trục camera. Chính lense rút họ phép đo cùng tháng:

lense E-V-022Ian 본인의 라벨 20개 중 13개가 other_relation — 박스 중심 프록시가 표현할 수 없는 값이다. 라우팅된 답과 맞는 것은 4/11 = 36%, 그의 기저율은 65%. → "The 42/46 = 91.3% measured agreement with a proxy that disagrees with the human. It is not a measured fact." 사실 tier 다시 비움13 of the author's own 20 labels were other_relation — a value the box-centre proxy cannot express. The routed answer matches him on 4 of 11 = 36%, against his own 65% baseline13/20 nhãn của tác giả là other_relation — giá trị đại diện tâm hộp không biểu đạt được. Đáp án định tuyến khớp 4/11 = 36%, so với baseline 65% của ông
lense E-B-008그리고 결정적이지도 않다 — "relative_approach_side never appears among the answers that hold a chart back". 도표를 붙잡는 것은 intersection_passage_path(106) · sd_boundary_crossed_to_pass(44) · direct_contact_with_other_vehicle(42) · approach_relation(40) — 어느 것도 측정되지 않았다and it is not decisive either — "relative_approach_side never appears among the answers that hold a chart back". What does: intersection_passage_path (106), sd_boundary_crossed_to_pass (44), direct_contact (42), approach_relation (40) — none of them measurednó cũng không quyết định — ‘relative_approach_side không bao giờ nằm trong các đáp án giữ biểu đồ lại’. Những thứ có: intersection_passage_path (106), sd_boundary_crossed_to_pass (44), direct_contact (42), approach_relation (40) — không thứ nào được đo

고쳐 읽을 것: CV를 VLM 대신 쓰면 박스 중심 프록시에 대해 53% → 87.8%로 오른다. 실재하는 개선이고 모순 쌍을 34 → 0으로 없앤다. 하지만 그 프록시는 사람의 답을 담지 못하고, 이 바인딩은 어차피 도표를 가르지 않는다. 「거의 두 배」라고만 인용하면 후임자를 잘못 보낸다.

Read it this way instead: using CV in place of the VLM raises 53% → 87.8% against a box-centre proxy. The improvement is real and it removes the contradicting pairs, 34 → 0. But the proxy cannot hold a human’s answer, and this binding does not separate the charts anyway. Quote it as "nearly double" and you send your successor the wrong way.

Nên đọc thế này: dùng CV thay VLM tăng 53% → 87.8% so với đại diện tâm hộp. Cải thiện thật và loại cặp mâu thuẫn, 34 → 0. Nhưng đại diện không chứa được đáp án người, ràng buộc này cũng không phân tách biểu đồ. Trích ‘gần gấp đôi’ là dẫn người tiếp quản sai hướng.

원장과 커밋된 데이터가 어긋나는 곳Ledger vs committed dataSổ so với dữ liệu đã commit

Two of the ledger's quoted scores disagree with the committed CSVs — Kimi is recorded as 62.7% and computes to 62.0%, Qwen3.8 as 56.3% and computes to 55.3%, where 56.3% is Gemma's exact value and looks copy-pasted. More importantly, no code computes top-3 or top-5 at all: the scorer produces top-1 and base ratio only, so every "69.7 / 75.7 / 79.3" style triple in the ledger is unsourced.

Hai điểm được trích trong sổ khác CSV commit — Kimi ghi 62.7% nhưng tính ra 62.0%, Qwen3.8 ghi 56.3% nhưng tính ra 55.3%, trong khi 56.3% đúng là của Gemma, trông như sao chép. Quan trọng hơn, không mã nào tính top-3 hoặc top-5: scorer chỉ tạo top-1 và tỷ lệ cơ sở, nên mọi bộ ba kiểu ‘69.7 / 75.7 / 79.3’ trong sổ đều không có nguồn.

원장 (E-V-028)ledger (E-V-028)sổ (E-V-028)커밋된 CSVcommitted CSVCSV đã commit
Kimi 62.7 / 70.7 / 73.0186/300 = 62.0%
Qwen3.8 56.3 / 63.3 / 66.3166/300 = 55.3% (56.3은 Gemma의 값 — 169/300)166/300 = 55.3% (56.3 is Gemma's value — 169/300)166/300 = 55.3% (56.3 là của Gemma — 169/300)
top-3 · top-5 전부every top-3 and top-5 figuremọi số top-3 và top-5계산하는 코드가 없다. kb_open score는 top-1과 비율만 센다no code computes them. kb_open score produces top-1 and base ratio onlykhông mã nào tính chúng. kb_open score chỉ tạo top-1 và tỷ lệ cơ sở

측정되지 않는 것 — 읽는 사람이 측정됐다고 생각할 것들What is not measuredNhững gì chưa đo

Four things a reader would assume were measured. Role is never scored on its own — it enters only through the base ratio, so on a symmetric chart a wrong role scores as a hit. The negotiation stage is a pass/fail regression over 34 hand-written scenarios, with no accuracy and no independent label. The notice stage is the same, and its own status line says it was never run against the live API; the stage-2 and stage-3 metrics the design document planned were never measured at all. And the report extractor was only checked for having run and for two readers agreeing — never for whether the extracted facts are correct.

Bốn điều người đọc sẽ tưởng đã đo. Vai chưa từng được chấm riêng — chỉ đi qua tỷ lệ cơ sở, nên biểu đồ đối xứng thì sai vai vẫn trúng. Giai đoạn thương lượng là hồi quy đạt/trượt trên 34 tình huống viết tay, không độ chính xác, không nhãn độc lập. Giai đoạn thông báo tương tự; dòng trạng thái tự nói chưa chạy với API thật, các chỉ số giai đoạn 2/3 mà thiết kế dự kiến chưa từng đo. Bộ trích xuất báo cáo chỉ được kiểm có chạy và hai bộ đọc đồng ý — chưa kiểm sự kiện trích ra có đúng không.

역할(A/B)role (A/B)vai (A/B)세 채점기 모두 역할은 base_for(chart, role)를 통해서만 들어간다 — 기본 비율을 바꿀 때만 보인다. 대칭 도표에서는 역할이 틀려도 적중이다all three scorers let role in only through base_for(chart, role) — it is visible only when it changes the base ratio. On a symmetric chart a wrong role scores as a hitcả ba scorer đưa vai vào chỉ qua base_for(chart, role) — chỉ thấy khi đổi tỷ lệ cơ sở. Biểu đồ đối xứng thì sai vai vẫn tính trúng
협의 단계giai đoạn thương lượng손으로 쓴 시나리오 34개의 통과/실패 회귀(27/34). 정확도도 독립 라벨도 없다a pass/fail regression over 34 hand-written scenarios (27/34). No accuracy, no independent labelhồi quy đạt/trượt trên 34 tình huống viết tay (27/34). Không độ chính xác, không nhãn độc lập
안내문 단계the notice stagegiai đoạn thông báo같다. 상태는 「코드 … 실행됨 아님」. DESIGN.md:114가 계획한 2·3단계 지표는 하나도 측정되지 않았다the same. Its own status line reads "code … not run". And none of the stage-2/3 metrics DESIGN.md:114 planned was ever measuredtương tự. Dòng trạng thái tự ghi ‘có mã … chưa chạy’. Không chỉ số giai đoạn 2/3 nào DESIGN.md:114 dự kiến từng được đo
초기 보고 추출기the initial-report extractorbộ trích xuất báo ban đầuE-V-029는 돌아갔다는 것만 잰다. 뽑은 r-사실이 맞는지는 확인한 적이 없다E-V-029 measures only that it ran. Whether the extracted facts are correct has never been checkedE-V-029 chỉ đo nó đã chạy. Chưa từng kiểm sự kiện trích ra có đúng không

🚨 가장 큰 맥락The largest contextBối cảnh lớn nhất

E-V-025, the experiment that owns the 300-case evaluation, is still marked running from 2026-09-29, and it ran as an iterative loop — read the trace between runs and change code when a case shows something wrong — on the same 300 cases the headline is scored against. That is tuning on the test set, which the decision log explicitly warns against. E-V-032 then stopped at 76 of 300, so 69.7% predates every fix on the stage branch. The run that did complete afterwards is E-V-035, and it came out slightly lower — top-1 207 against 209, ratio 211 against 219 — with half of that −8 being the role problem above.

E-V-025, thí nghiệm sở hữu đánh giá 300 vụ, vẫn đánh dấu đang chạy từ 2026-09-29; nó chạy theo vòng lặp — đọc trace giữa các lượt, sửa mã khi vụ cho thấy sai — trên chính 300 vụ dùng chấm số nổi bật. Đó là tinh chỉnh trên tập kiểm tra, điều sổ quyết định cảnh báo rõ. E-V-032 dừng ở 76/300, nên 69.7% có trước mọi bản sửa trên nhánh stage. Lần hoàn tất sau đó là E-V-035, thấp hơn nhẹ — top-1 207 so với 209, tỷ lệ 211 so với 219 — nửa mức −8 là vấn đề vai phía trên.

E-V-025(300건 평가를 소유한 실험)는 아직 running 09-29 상태다. 그리고 반복 루프로 돌았다 — "read the trace between runs and change code when a case shows something wrong" — 헤드라인을 채점하는 바로 그 300건 위에서. 시험 집합 위의 튜닝이고, DECISIONS.md V-D12가 하지 말라고 적어 둔 것이다.

E-V-025 — the experiment that owns the 300-case evaluation — is still marked running 09-29. And it was run as an iterative loop — "read the trace between runs and change code when a case shows something wrong" — on the very 300 cases that score the headline. That is tuning on the test set, and V-D12 in DECISIONS.md is where it is written down as something not to do.

E-V-025 — thí nghiệm sở hữu đánh giá 300 vụ — vẫn đánh dấu running 09-29. Nó chạy theo vòng lặp — ‘đọc trace giữa các lượt, sửa mã khi vụ cho thấy sai’ — trên chính 300 vụ chấm số nổi bật. Đó là tinh chỉnh trên tập kiểm tra; V-D12 trong DECISIONS.md ghi rõ là việc không nên làm.

E-V-032는 76/300에서 멈췄다. 그러므로 69.7%는 stage의 모든 수정보다 앞선 숫자다. 그 뒤 실제로 300을 돌린 것은 E-V-035(v300_1015)이고 결과는 top-1 207 vs 209 · 비율 211 vs 219 — 약간 내려갔으며, 그 −8의 절반이 §8.7 (1)의 역할 문제다.

E-V-032 stopped at 76 of 300. So 69.7% predates every fix on stage. What did go on to run all 300 is E-V-035 (v300_1015), and it comes out at top-1 207 vs 209 · ratio 211 vs 219 — slightly down, and half of that −8 is the role problem from §8.7 (1).

E-V-032 dừng ở 76/300. Vậy 69.7% có trước mọi bản sửa trên stage. E-V-035 (v300_1015) đã chạy đủ 300, cho top-1 207 so với 209 · tỷ lệ 211 so với 219 — giảm nhẹ, nửa mức −8 là vấn đề vai ở §8.7 (1).

원장과 디스크: runs/는 git 제외라 원장의 모든 runs/… 포인터가 끊겨 있다. E-V-029·030·031·032는 docs/results/에 결과 파일이 아예 없다. E-V-009b는 2026-09-21부터 사람 채점 대기이고, E-V-005(도구별 사실 정확도)는 아직 「계획」이다 — 위의 접근 방향 문제를 풀 유일한 실험이다.

The ledger versus the disk: runs/ is git-ignored, so every runs/… pointer in the ledger is broken. E-V-029, 030, 031 and 032 have no result file in docs/results/ at all. E-V-009b has been awaiting human grading since 2026-09-21, and E-V-005 (per-tool fact accuracy) is still only "planned" — and it is the one experiment that would settle the approach-side question above.

Sổ so với đĩa: runs/ bị git-ignore nên mọi con trỏ runs/… trong sổ đều gãy. E-V-029, 030, 031, 032 không có tệp kết quả ở docs/results/. E-V-009b chờ người chấm từ 2026-09-21; E-V-005 (độ chính xác sự kiện theo công cụ) vẫn chỉ ‘dự kiến’ — đây là thí nghiệm có thể giải quyết câu hỏi phía tiếp cận bên trên.

8.9acci-vlm — 사흘짜리 프로토타입이 남긴 세 가지 발견 — the three-day prototype whose findings still govern the design — nguyên mẫu ba ngày với phát hiện vẫn chi phối thiết kế 🔬 정밀🔬 Chi tiết

이것이 계보의 첫 코드다. 학습도 GPU도 없이, VLM이 프레임을 보고 고정된 분류 양식을 채우면 그 사실들을 KNIA 108개 사례 표에 맞춰 도표와 기본 비율을 읽어 오는 구조. §4.0에서 visus가 하는 일과 모양이 같다 — 열다섯 달 전, 사흘 만에.

This is the first code in the lineage. No training and no GPU: a vision-language model watches sampled frames and fills a fixed form of classified facts; those facts are then matched against a table of 108 KNIA cases to pick one and read off its base ratio. The same shape as what visus does in §4.0 — fifteen months earlier, built in three days.

Đây là mã đầu tiên trong dòng phát triển. Không huấn luyện, không GPU: mô hình thị giác-ngôn ngữ xem khung hình lấy mẫu rồi điền biểu mẫu cố định các sự kiện phân loại; sự kiện được khớp với bảng 108 vụ KNIA để chọn một và đọc tỷ lệ cơ sở. Cùng hình dạng điều visus làm ở §4.0 — sớm hơn mười lăm tháng, xây trong ba ngày.

⚠️ 보정 — 「2026-05 → 07, 석 달」이 아니라 사흘이다correction — not "three months, 2026-05 to 07" but three daysđính chính — không phải ‘ba tháng, 2026-05 đến 07’ mà là ba ngày

커밋 23개가 전부 2026-07-06 → 07-08에 들어 있다. 5월·6월 커밋은 하나도 없다. 뒤에 붙은 것은 석 달 뒤의 Handover snapshot(2026-10-14) 하나뿐이다. 이 레포가 얼마나 빨리 핵심을 찾아냈는지가 오히려 중요한 사실이고, 「석 달」로 적으면 그게 지워진다.

All 23 commits fall between 2026-07-06 and 07-08. There is no May or June commit at all; the only later one is a Handover snapshot three months on (2026-10-14). How fast this repo found the core problem is the interesting fact, and calling it three months erases it.

Cả 23 commit nằm giữa 2026-07-06 và 07-08. Không có commit tháng 5 hay 6; commit muộn duy nhất là Handover snapshot ba tháng sau (2026-10-14). Tốc độ kho tìm thấy vấn đề cốt lõi mới là điều thú vị, gọi ba tháng xóa mất điều đó.

① 블랙박스는 자기 차를 볼 수 없다 — 그래서 A/B가 뒤집힌다① A dashcam cannot see its own car — so A/B flips① Camera hành trình không thấy chính xe mình — nên A/B đảo

이 문장은 레포 다섯 곳에 따로 적혀 있다 — README, 설계문서, match.py의 주석, 대안 설계를 기각한 이유, 그리고 라벨러용 안내문. 그만큼 반복해서 부딪혔다는 뜻이다.

The sentence appears in five separate places — the README, the design document, a comment in match.py, the reason a design alternative was rejected, and the annotator handbook. It was hit that often.

Câu này xuất hiện ở năm nơi riêng — README, thiết kế, comment match.py, lý do bác phương án thiết kế và sổ tay gán nhãn. Vấn đề bị đụng thường xuyên đến vậy.

"The core difficulty is ego-identification, not scene recognition. A dashcam cannot see the car it’s mounted on. Fault often hinges on the ego vehicle’s own maneuver, which is only inferable from camera egomotion. Both Claude and Gemini, given stills, tend to reason about the visible car." — docs/PROJECT.md (finding F1)

‘Khó khăn cốt lõi là xác định xe gắn camera, không phải nhận dạng cảnh. Camera hành trình không thấy xe mang nó. Tỷ lệ lỗi thường phụ thuộc thao tác chính xe gắn camera, chỉ suy ra được từ chuyển động camera. Cả Claude và Gemini khi nhận ảnh tĩnh đều có xu hướng suy luận về xe nhìn thấy.’ — docs/PROJECT.md (phát hiện F1)

그리고 그 대가가 숫자로 찍혀 있다 — 최초 README의 기준선: MAE 57.9, 다수과실 정답 0%. 사유도 같이 적혀 있다: "모델이 체계적으로 보이는 차(A)를 탓한다 — 정작 과실은 블랙박스를 단 차(B)에 있는데".

And the cost is recorded as a number — the baseline in the very first README: MAE 57.9, 0% majority-fault correct, with the diagnosis attached: the model "systematically blames the visible car (A) when the ego/dashcam car (B) is at fault."

Chi phí được ghi bằng số — baseline trong README đầu tiên: MAE 57.9, đúng bên lỗi chính 0%, kèm chẩn đoán: mô hình ‘quy lỗi có hệ thống cho xe nhìn thấy (A) khi xe gắn camera (B) có lỗi.’

⭐ 두 번째 발견이 더 날카롭다. AI Hub 데이터 규격은 「1인칭 → 본인을 사고객체 B로 간주」라고 적는다. 영상을 직접 본 결과 그렇지 않았다 — 자차가 A(직진차)인 클립들이 있었다. 그래서 A/B는 객관적 역할로 배정되고, 자차는 A일 수도 B일 수도 있다. 라벨러 문서가 가장 명확하게 적는다:

⭐ The second finding is sharper. The dataset spec says first-person footage means the ego car is party B. Watching the clips contradicted it — on verified clips the ego car was party A, the through car. So A/B is assigned by objective role, and ego can be A or ego can be B. The annotator handbook states the consequence most plainly:

⭐ Phát hiện thứ hai sắc hơn. Đặc tả dữ liệu nói video góc nhìn thứ nhất nghĩa là xe gắn camera là bên B. Xem clip lại mâu thuẫn — trên clip đã xác minh, xe gắn camera là bên A, xe đi xuyên qua. Vậy A/B được gán theo vai trò khách quan, và xe gắn camera có thể A hoặc B. Sổ tay gán nhãn nêu hệ quả rõ nhất:

같은 사고, 블랙박스를 어느 차에 달았느냐에 따라 —
  · 큰길 차(A)에 달려 있으면 → 자차 = A → 자차 과실 20
  · 골목 차(B)에 달려 있으면 → 자차 = B → 자차 과실 80
라벨(A:B = 20:80)만 봐서는 「우리 차」가 20인지 80인지 알 수 없다.Same accident, two possible dashcams —
  · dashcam in the main-road car (A) → ego = A → ego fault 20
  · dashcam in the side-road car (B) → ego = B → ego fault 80
From the label (A:B = 20:80) alone you CANNOT tell if "our car" is 20 or 80.Cùng tai nạn, hai camera hành trình có thể có —
  · camera trong xe đường chính (A) → ego = A → lỗi ego 20
  · camera trong xe đường nhánh (B) → ego = B → lỗi ego 80
Chỉ nhãn (A:B = 20:80) KHÔNG THỂ cho biết ‘xe ta’ là 20 hay 80.

해결은 「잘 맞히기」가 아니라 「절대 추측하지 않기」였다 — match.py가 두 배정을 모두 채점하고 점수 차로 고른다: for ego_party, other_party in (("A", "B"), ("B", "A")):. ⭐ 이것이 오늘 visus의 A/B 규율의 조상이다 — A와 B는 차가 아니라 도표 위의 자리이고, 역할을 잘못 주면 비율이 통째로 뒤집힌다(§2.1).

The fix was not to guess better but never to guess — match.py scores both bindings against every case and chooses on the margin: for ego_party, other_party in (("A", "B"), ("B", "A")):. ⭐ This is the ancestor of visus’s A/B discipline today: A and B are positions on the chart, not vehicles, and a wrong role inverts the whole ratio (§2.1).

Cách sửa không phải đoán tốt hơn mà là không bao giờ đoán — match.py chấm cả hai ràng buộc với mọi vụ rồi chọn theo margin: for ego_party, other_party in (("A", "B"), ("B", "A")):. ⭐ Đây là tiền thân kỷ luật A/B của visus: A/B là vị trí trên biểu đồ, không phải xe; sai vai đảo toàn bộ tỷ lệ (§2.1).

② unknown 하나가 세 가지 서로 다른 것을 삼키고 있었다② One unknown was swallowing three different things② Một unknown nuốt ba thứ khác nhau

지금 쓰는 등급 어휘가 어디서 왔는지가 여기 있다. v1 스키마에는 탈출구가 unknown 하나뿐이었다. 그런데 그 한 단어가 서로 전혀 다른 세 상황을 가리키고 있었고, 매처는 셋을 똑같이 0점 처리했다(match.py: if not v or v == "unknown": → return None, 0.0).

This is where the current tier vocabulary comes from. The v1 schema had exactly one escape hatch, unknown — and that one word was covering three unrelated situations, all of which the matcher scored identically as zero evidence (match.py: if not v or v == "unknown": → return None, 0.0).

Đây là nguồn của từ vựng cấp độ hiện nay. Lược đồ v1 chỉ có một lối thoát, unknown — từ đó bao ba tình huống không liên quan, matcher đều chấm bằng không bằng chứng (match.py: if not v or v == "unknown": → return None, 0.0).

v2에서 생긴 값the v2 valuegiá trị v2무엇을 구해냈나what it rescuedđiều nó cứu lại
not_applicable
value: "없음"
「신호등이 없는 교차로」는 못 본 게 아니라 본 것이고, 도표 계열을 고르는 사실이다. v1에서는 0점이 되어 사라졌다. 레포의 표현: "a REAL, matchable fact, not a gap""an unsignalled junction" is not a failure to see — it is an observation, and one that selects a chart family. Under v1 it scored zero and vanished. The repo’s phrase: "a REAL, matchable fact, not a gap"‘giao lộ không đèn’ không phải không thấy — đó là quan sát, và nó chọn họ biểu đồ. Ở v1 nó được chấm 0 rồi biến mất. Lời của kho: ‘sự kiện THẬT, khớp được, không phải khoảng trống’
not_visible
value: null
구조적으로 안 보이는 것(저쪽을 향한 상대차 방향지시등). 채점에서 빠지고, 지각 공백 목록에 자동 등재되며, 과실에 결정적인 필드면 검토 필요를 강제한다structurally invisible — the other car’s indicator facing away. Excluded from scoring, auto-listed in the perception gaps, and forces needs-review when the field is fault-criticalkhông thể thấy về cấu trúc — đèn xi-nhan xe kia quay khỏi camera. Loại khỏi chấm điểm, tự liệt kê vào khoảng trống tri giác và buộc cần xem xét khi trường quyết định tỷ lệ lỗi
uncertain
value: [후보들][candidates][các ứng viên]
보이긴 하는데 후보 사이에서 못 고르겠는 경우. 후보 목록을 들고 best-of로 채점하되 신뢰도에 벌점visible but genuinely ambiguous between candidates. Keeps the candidate list and is scored best-of with a confidence penaltynhìn thấy nhưng thực sự mơ hồ giữa các ứng viên. Giữ danh sách, chấm tốt nhất kèm phạt độ tin cậy
inferred에고모션·기하·신호 상보성에서 추론한 것. 신뢰도가 medium으로 상한되고, ⭐ 가감요소를 자동 적용할 수 없다deduced from egomotion, geometry or signal complementarity. Confidence capped at medium, and ⭐ never auto-applies a KNIA adjustmentsuy ra từ chuyển động xe gắn camera, hình học hoặc tính bổ sung tín hiệu. Độ tin cậy tối đa trung bình, và ⭐ không bao giờ tự áp dụng điều chỉnh KNIA
observed직접 본 것. 기준선directly seen; the baselinenhìn thấy trực tiếp; đường cơ sở

그리고 이것은 산문이 아니라 강제되는 코드다 — extract_features.py의 _validate_v2가 not_visible ⇒ value null, not_applicable ⇒ value "없음"을 검사하고, 매처는 그 둘을 빈 집합으로 돌려 거짓 불일치를 만들지 않는다. 화면에도 그대로 나온다 — 관찰 · 추론 · 불확실 · 안보임 · 없음.

And it is enforced in code, not stated in prose — _validate_v2 in extract_features.py checks not_visible ⇒ value null and not_applicable ⇒ value "없음", and the matcher returns the empty set for both so that they can never produce a false mismatch. The viewer renders all five in Korean: 관찰 · 추론 · 불확실 · 안보임 · 없음.

Điều này được thực thi bằng mã, không chỉ văn xuôi — _validate_v2 trong extract_features.py kiểm not_visible ⇒ value null và not_applicable ⇒ value "없음"; matcher trả tập rỗng cho cả hai để không bao giờ tạo bất khớp giả. Viewer hiển thị năm trạng thái bằng tiếng Hàn: 관찰 · 추론 · 불확실 · 안보임 · 없음.

⭐ 두 가지를 더 가져가야 한다two things worth carrying forwardhai điều đáng chuyển tiếp

(가) 설계문서는 네 개라고 적었고, 출하된 스키마에는 다섯 개가 있다. 제안서에는 uncertain이 없다. 즉 다섯 번째 값은 만들면서 발견됐다 — 「/」를 OR로 쓰던 합성값들을 받아낼 곳이 필요했기 때문이다. 「왜 다섯인가」의 정직한 답은 「설계로 넷, 구현 중에 하나 더」다.

(a) The design note says four; the shipped schema has five. The proposal has no uncertain. The fifth value was found during implementation, to absorb the composites that had been using "/" as OR. The honest answer to "why five" is "four by design, plus one found at build time".

(a) Ghi chú thiết kế nói bốn; lược đồ phát hành có năm. Đề xuất không có uncertain. Giá trị thứ năm được tìm ra khi triển khai, để chứa các giá trị ghép từng dùng ‘/’ làm OR. Trả lời trung thực cho ‘vì sao năm’ là ‘thiết kế bốn, thêm một tìm ra lúc xây’.

(나) 필드마다 쓸 수 있는 값이 다르다 — 이것이 가장 이식 가능한 생각이다. accident_type은 없음도 not_visible도 쓸 수 없다. 사고에는 반드시 유형이 있기 때문이고, 모르겠으면 uncertain + 후보 목록으로 가야 한다. 레포의 변론이 좋다 — "이건 환각을 강요하는 게 아니다. 항상 존재하는 필드에 「없음」을 쓰는 건 정직이 아니라 사실과 다른 말이다". 반면 신호·진입순서·안전표지는 없음이 허용된다.

(b) Which values a field may take depends on the field — the most transferable idea here. accident_type may take neither 없음 nor not_visible, because an accident always has a type; if unsure, it must go to uncertain with a candidate list. The repo’s defence is worth keeping: "This is NOT forcing a hallucination: 없음 on a field that always exists is factually false, not honesty." Signal, junction order and safety signage, by contrast, may be 없음.

(b) Giá trị một trường được phép nhận phụ thuộc trường đó — ý tưởng dễ chuyển giao nhất. accident_type không được 없음 hay not_visible, vì tai nạn luôn có loại; không chắc thì về uncertain kèm danh sách ứng viên. Lý lẽ của kho đáng giữ: ‘KHÔNG phải ép bịa: 없음 trên trường luôn tồn tại là sai sự thật, không phải trung thực.’ Ngược lại, tín hiệu, thứ tự qua giao lộ và biển an toàn có thể là 없음.

⚠️ 그리고 「판단 불가」 하나는 여기 있던 두 가지를 합친 것이다and today’s single "undeterminable" merges two of these‘không thể xác định’ hiện nay gộp hai trạng thái này

오늘 visus의 판단 불가는 acci-vlm의 uncertain(보이는데 못 고르겠다)과 not_visible(구조적으로 안 보인다)을 한 토큰으로 합친 것이다. 그런데 acci-vlm은 둘을 다르게 처리했다 — 전자는 후보를 들고 벌점 채점에 참여하고, 후자는 채점에서 빠지고 검토를 강제한다. 이름이 바뀐 게 아니라 동작 둘이 합쳐진 것이다. 되살릴 가치가 있는지는 후임자가 판단할 일이지만, 합쳐졌다는 사실은 알고 있어야 한다.

visus’s single 판단 불가 today covers what acci-vlm kept as two: uncertain (visible, cannot choose) and not_visible (structurally not visible). acci-vlm treated them differently — the first carries candidates into penalised scoring, the second is excluded from scoring and forces review. That is a merge of two behaviours, not a rename. Whether to restore the distinction is a successor’s call, but the merge should be a known one.

판단 불가 duy nhất của visus bao cả hai thứ acci-vlm tách: uncertain (nhìn được, không chọn được) và not_visible (không thể thấy về cấu trúc). acci-vlm xử lý khác nhau — cái đầu giữ ứng viên vào chấm điểm có phạt, cái sau loại khỏi chấm và buộc xem xét. Đây là gộp hai hành vi, không phải đổi tên. Khôi phục phân biệt hay không là quyết định người tiếp quản, nhưng phải biết đã gộp.

덧붙여 claimed(주장됨)에는 조상이 없다. acci-vlm의 다섯 값은 전부 「카메라가 무엇을 확인했는가」에만 답한다. 「당사자가 그렇게 주장한다」를 담을 자리는 사실 층에 아예 없었다 — 가감요소 쪽 계약에만 source로 흔적이 있다. 협의와 진술을 다루기 시작하면서 새로 만들어야 했던 등급이다.

Note too that claimed has no ancestor here at all. All five of acci-vlm’s values answer only "what did the camera establish". There was no slot for "a party asserts this" at the fact level — only a source field on the modifier contract. It is a tier that had to be invented once negotiation and statements entered the product.

Cũng lưu ý claimed hoàn toàn không có tiền thân ở đây. Cả năm giá trị acci-vlm chỉ trả lời ‘camera xác lập được gì’. Chưa có chỗ cho ‘một bên khẳng định điều này’ ở tầng sự kiện — chỉ có trường source trên hợp đồng yếu tố điều chỉnh. Cấp này phải được sáng tạo khi thương lượng và lời khai vào sản phẩm.

🚨 ③ 「top-2 4/5」를 인용하기 전에 읽을 것③ Read this before quoting "top-2 4/5"③ Đọc trước khi trích ‘top-2 4/5’

레포 자신은 정직하게 적었다 — "(n=5 — 방향성이지 지표가 아니다)". 그런데 문서에서 숫자만 떼어 나오면 그 단서가 사라진다. 실제로는 다섯 가지를 함께 알아야 한다.

The repo was honest about it — "(n=5 — directional, not a metric.)" But the caveat falls off when the number travels alone. Five things belong with it.

Kho trung thực về điều đó — ‘(n=5 — mang tính định hướng, không phải chỉ số.)’ Nhưng chú thích rơi mất khi con số đi riêng. Năm điều phải đi cùng nó.

1산출물이 없다. 그 다섯 클립의 id는 워크트리 어디에도 나타나지 않는다 — 흔적은 results/decide/에 있었고 그 디렉터리는 .gitignore 24행이다. 지금은 재현할 수 없다no artifacts. None of the five clip ids appears anywhere in the worktree — the traces lived in results/decide/, which is .gitignore line 24. It cannot be reproduced todaykhông artifact. Không ID nào trong năm clip xuất hiện trong cây làm việc — trace nằm ở results/decide/, dòng 24 .gitignore. Không thể tái hiện hôm nay
2정답이 독립적이지 않다. 정답은 AI Hub 라벨인데, 같은 문서가 그 라벨을 못 믿겠다고 적는다 — "라벨은 자동으로 붙었고, 일부는 틀렸다". 자기 문서의 또 다른 줄: "아직 골드셋이 없다"the ground truth was not independent. It is the AI Hub label — which the same document declares untrustworthy: "the label was attached automatically, so some are wrong", and elsewhere, "No gold set yet."chuẩn không độc lập. Đó là nhãn AI Hub — chính tài liệu ấy tuyên bố không đáng tin: ‘nhãn gắn tự động, nên một số sai’, chỗ khác ghi ‘Chưa có bộ chuẩn.’
3한 도표가 1위와 2위를 동시에 차지할 수 있다. 후보 목록은 사례마다 배정 두 개가 각각 한 줄이고, 비교는 그 사례의 책 비율로 하므로 두 줄이 같이 정답 처리된다. 즉 「top-2」는 정답 사례 하나가 1·2위를 먹은 상태와 구분되지 않는다one case can occupy both rank 1 and rank 2. The candidate list holds each case twice, once per binding, and the comparison is on the case’s book ratio — so both rows count as hits. A "top-2" result is therefore indistinguishable from a single correct case taking ranks 1 and 2một vụ có thể chiếm cả hạng 1 và 2. Danh sách chứa mỗi vụ hai lần, một cho mỗi ràng buộc, so theo tỷ lệ trong sách — vậy cả hai dòng tính trúng. Kết quả ‘top-2’ không phân biệt được với một vụ đúng chiếm hạng 1 và 2
4🚨 이 벤치마크는 「우리 차가 잘못했는가」를 재지 않는다. 비교가 순서 없는 쌍이라 70:30 예측이 정답 30:70에 정답 처리된다. 실제로 주차장 클립이 정답 30:70에 예측 70:30으로 「#1 ✓」다. 문서도 뷰어도 그렇게 경고한다 — "시나리오·비율 정확도이지 자차 과실이 아니다"🚨 it does not measure "is my car at fault". The comparison is on the unordered pair, so a prediction of 70:30 scores correct against a ground truth of 30:70 — and one clip is literally scored "#1 ✓" with GT 30:70 and a model top of 70:30. Both the document and the on-screen viewer say so: "flip-proof measures scenario/ratio accuracy, not ego-fault"🚨 không đo ‘xe tôi có lỗi không’. So trên cặp không thứ tự, nên dự đoán 70:30 tính đúng với chuẩn 30:70 — một clip thực sự chấm ‘#1 ✓’ với GT 30:70 và mô hình top 70:30. Cả tài liệu lẫn viewer nói rõ: ‘flip-proof đo đúng tình huống/tỷ lệ, không phải lỗi xe gắn camera’
5같은 레포에 「5클립」이 하나 더 있다 — 섞지 말 것. results/v2.log의 MAE 38.0 · 정확 일치 0/5 · 다수과실 1/5는 구(2-pass) 파이프라인의 것이고, ⭐ n=5인 이유가 표본 설계가 아니다 — 6번 클립부터 "Your credit balance is too low"로 전부 실패했다. 청구서가 정한 표본 크기다a second "5 clips" exists in the repo — do not conflate them. results/v2.log reports MAE 38.0, exact match 0/5, majority-fault 1/5 for the legacy two-pass pipeline — and ⭐ its n=5 is not a sampling decision: every clip from the sixth on failed with "Your credit balance is too low". The sample size was set by a billing limitkho có một ‘5 clip’ thứ hai — đừng nhập nhằng. results/v2.log báo MAE 38.0, khớp chính xác 0/5, đúng lỗi chính 1/5 cho pipeline hai lượt cũ — ⭐ n=5 không do quyết định lấy mẫu: mọi clip từ thứ sáu đều lỗi ‘Your credit balance is too low’. Cỡ mẫu bị đặt bởi giới hạn thanh toán

⚠️ 이 문서가 자주 인용해 온 「차6-1가 · 명확한 선진입 자동 적용 · 70:30 · 판례 2002다38767」 worked example은, 이 레포 안에서 산문으로만 존재한다. 그 클립 id로 검색하면 설계문서 안의 네 군데가 전부다 — features.json도, 후보 목록도, 판정 JSON도 없다. 주장으로는 확인되고 산출물로는 확인되지 않는다.

⚠️ The worked example this document has quoted — the 차6-1가 candidate, the auto-applied 명확한 선진입, 70:30, precedent 2002다38767 — exists in this repo only as prose. Searching for that clip id returns four hits, all inside the design document: no features.json, no candidate list, no verdict JSON. Verified as a claim, unverified as an artifact.

⚠️ Ví dụ tài liệu trích — ứng viên 차6-1가, tự áp 명확한 선진입, 70:30, án lệ 2002다38767 — trong kho này chỉ có dạng văn xuôi. Tìm ID clip ra bốn kết quả, đều trong tài liệu thiết kế: không features.json, danh sách ứng viên hay JSON phán định. Xác minh được như một tuyên bố; chưa xác minh được như artifact.

⭐ 그래도 진짜 모델 출력이 하나 남아 있고, 그것이 더 쓸모 있다one real model output does survive, and it is more usefulmột đầu ra mô hình thật còn tồn tại, hữu ích hơn

같은 클립(bb_1_000104)에 대한 네 번의 추출 실행이 커밋되어 있다. 무엇이 정확도를 좌우하는지가 여기 드러난다.

Four committed feature-extraction runs on the same clip (bb_1_000104). What actually drives accuracy shows up here.

Bốn lượt trích đặc trưng đã commit trên cùng clip (bb_1_000104). Thứ thực sự chi phối độ chính xác hiện ra ở đây.

실행runlượt chạy나온 것what it producedđầu ra
고정 8프레임8 fixed frames8 khung hình cố định🚨 사고 자체를 놓친다 — accident_type: unknown인데 confidence: high, 충돌 지점 none, 상대차 직진. 「모르겠다」를 「확신한다」와 함께 말할 수 있다는 것이 v1 스키마의 결함 그 자체다🚨 it misses the accident entirely — accident_type: unknown yet confidence: high, collision point none, other car 직진. That "unknown" and "high confidence" can be said together is the v1 schema defect in one cell🚨 bỏ lỡ hoàn toàn tai nạn — accident_type: unknown nhưng confidence: high, điểm va chạm none, xe đối phương 직진. ‘unknown’ và ‘high confidence’ cùng được nói chính là lỗi lược đồ v1 trong một ô
0.5초 간격0.5 s samplinglấy mẫu 0.5 giây✅ 같은 클립, 같은 모델, 샘플링만 바꿨는데 맞힌다 — 도로진입 (high), 상대차 좌회전 (high), 오른쪽도로. 직진 → 좌회전으로 뒤집힌다✅ same clip, same model, only the sampling changed — and it gets it: 도로진입 (high), other car 좌회전 (high), 오른쪽도로. 직진 flips to 좌회전✅ cùng clip, cùng mô hình, chỉ đổi lấy mẫu — đã hiểu: 도로진입 (high), đối phương 좌회전 (high), 오른쪽도로. 직진 đảo thành 좌회전
Qwen3-VL⚠️ 기하가 어긋난다 — 진로변경 (medium), 상대차가 왼쪽도로(다른 모델은 오른쪽), 진입순서 후행. 모델을 바꾸면 장면의 좌우가 바뀐다⚠️ the geometry disagrees — 진로변경 (medium), other car on the left where the other model said right, entry order 후행. Change the model and the scene’s handedness changes⚠️ hình học bất đồng — 진로변경 (medium), xe đối phương bên left trong khi mô hình kia nói phải, thứ tự vào 후행. Đổi mô hình thì trái/phải của cảnh đổi

⭐ 이 한 표가 두 가지를 동시에 말한다 — 프레임 샘플링이 모델 선택만큼 결과를 바꾼다는 것, 그리고 좌우 혼동이 모델을 가리지 않는 고질병이라는 것. 둘 다 §9장과 visus의 현재 실행에서 다시 나타난다.

⭐ That one table says two things at once: frame sampling moves the answer as much as the choice of model does, and left/right confusion is not a property of one model. Both recur in chapter 9 and in visus’s own runs.

⭐ Một bảng nói hai điều: lấy mẫu khung hình đổi đáp án mạnh như lựa chọn mô hình, và nhầm trái/phải không phải thuộc tính riêng một mô hình. Cả hai tái diễn ở chương 9 và các lượt visus.

⚠️ 그리고 「병목은 지각이지 매처가 아니다」는 절반만 인용된 것이다and "the bottleneck is perception, not the matcher" is only half the sentence‘nút thắt là tri giác, không phải matcher’ chỉ là nửa câu

결론 자체는 레포에 그대로 있다 — "모든 미스가 지각 오류이지 매칭 오류가 아니다". 그런데 같은 문서가 매처의 구조적 결함을 셋 적어 두었고, 고쳐지지 않았다: 책이 사례마다 좌우를 하나만 인코딩해서 거울상 시나리오가 안 맞는다 · accident_type이 사례 표에 50%만 채워져 있다(직접 세어봤다 — 248행 중 125행) · match_keywords와 key_point는 아예 쓰이지 않는다. 그 항목의 자기 결론은 "가장 큰 레버는 키워드/key_point 신호를 넣는 것" — 즉 매처 쪽 레버다. 이 문서는 그동안 지각 쪽 절반만 인용해 왔다.

The conclusion is in the repo as stated — "every miss is a perception error, not matching." But the same document lists three structural matcher gaps, unfixed: the book encodes one handedness per case so mirrored scenarios mismatch; accident_type is only 50% populated in the case table (counted directly: 125 of 248 rows); and match_keywords and key_point are not used at all. That finding’s own conclusion is that "the biggest lever is adding the keyword/key_point signal" — a matcher lever. This document had been quoting only the perception half.

Kết luận có trong kho đúng như thế — ‘mọi bỏ lỡ đều là lỗi tri giác, không phải khớp.’ Nhưng cùng tài liệu liệt kê ba khoảng trống cấu trúc matcher chưa sửa: sách chỉ mã hóa một chiều trái/phải mỗi vụ nên tình huống phản chiếu bất khớp; accident_type chỉ điền 50% bảng vụ (đếm trực tiếp 125/248 dòng); match_keywords và key_point hoàn toàn không dùng. Kết luận riêng của phát hiện ấy là ‘đòn bẩy lớn nhất là thêm tín hiệu keyword/key_point’ — đòn bẩy matcher. Tài liệu này từng chỉ trích nửa tri giác.

🚨 「RAG」라는 말에 속지 말 것do not be misled by the word "RAG"đừng để chữ ‘RAG’ dẫn sai

초기 구조는 「VLM + RAG」로 불린다. 그 RAG는 40줄짜리 부분문자열 키워드 매칭이다 — 임베딩도, 벡터 DB도 없다. 점수는 일치한 키워드의 개수다 — hits = [kw for kw in r.get("keywords", []) if kw.lower() in q] 뒤에 "score": len(hits). 그리고 ⭐ 그 코퍼스는 책이 아니라 손으로 쓴 예시 규칙 여덟 개이고, README가 「예시일 뿐 권위 있는 전체 집합이 아니다」라고 적어 두었다. 지금 돌아가는 파이프라인에는 검색이 아예 없다 — VLM이 enum 스키마를 채우고 표에 근접 조인한다.

The early architecture is called "VLM + RAG". That RAG is 40 lines of substring keyword matching — no embeddings, no vector database; the score is the number of matched keywords — hits = [kw for kw in r.get("keywords", []) if kw.lower() in q], then "score": len(hits). And ⭐ its corpus is eight hand-written illustrative rules, not the book — the README says so: they are "illustrative… not the full authoritative set". The pipeline that followed has no retrieval at all: the VLM fills an enum schema and the result is near-joined against a table.

Kiến trúc đầu gọi ‘VLM + RAG’. RAG đó là 40 dòng khớp từ khóa chuỗi con — không embedding, không DB vector; điểm là số từ khóa khớp — hits = [kw for kw in r.get("keywords", []) if kw.lower() in q], rồi "score": len(hits). ⭐ Kho tư liệu là tám quy tắc minh họa viết tay, không phải sách — README nói rõ: ‘minh họa… không phải toàn bộ tập có thẩm quyền’. Pipeline sau đó không truy xuất gì: VLM điền lược đồ enum rồi gần-nối với bảng.

⚠️ 그리고 그 108개 사례 표는 CarAccident가 PDF에서 LLM으로 뽑은 것이고, 출처 파일이 「검증 전까지 권위 없음」이라고 적어 두었다. 뒤에 「108/108 검증 완료」 커밋이 붙긴 한다. 이것이 §8.6 knia-dag가 나중에 통째로 다시 한 이유다 — 추출을 믿을 수 없으면 그 위의 모든 비율을 믿을 수 없다.

⚠️ And that 108-case table was LLM-extracted from the PDF by CarAccident, with its own provenance file warning it is "not authoritative until validated" — a later commit does claim 108/108 validated. This is why §8.6’s knia-dag redid the whole extraction: if the extraction cannot be trusted, no ratio built on it can be either.

⚠️ Bảng 108 vụ đó do CarAccident dùng LLM trích từ PDF, tệp nguồn gốc cảnh báo ‘chưa có thẩm quyền cho đến khi xác thực’ — commit sau có khẳng định đã xác thực 108/108. Đó là lý do knia-dag ở §8.6 làm lại toàn bộ: nếu không tin được trích xuất thì không tin được tỷ lệ xây trên nó.

✅ 코드 위의 모든 인용과 수치는 acci-vlm 레포를 직접 열어 확인한 것이다. 「top-2 4/5」만은 산출물이 없어 확인할 수 없었고, 그렇게 표시해 두었다.

✅ Mã Mọi trích dẫn và con số trên được xác nhận bằng cách mở trực tiếp kho acci-vlm. Riêng ‘top-2 4/5’ không kiểm chứng được vì thiếu artifact, và đã được đánh dấu.

8.10vlm · vlm2 — 한계를 측정해서 알아낸 두 세대 — the two generations that measured the ceiling — hai thế hệ đo được giới hạn 🔬 정밀🔬 Chi tiết

이 두 레포가 왜 중요한가: 「VLM이 판정 엔진의 질문에 답한다」는 구조 전체가 어디까지 갈 수 있는지를 실제로 재서 끝을 본 곳이다. 결론은 짐작이 아니라 일곱 번의 실행에 적힌 숫자다. visus가 왜 「에이전트 + 도구 + 눈금」으로 다시 만들어졌는지는 여기서 읽어야 한다.

Why these two matter: they are where the whole shape — a VLM answers the engine’s questions — was measured to its limit. The conclusion is not an impression but a number repeated across seven runs. This is the section to read for why visus was rebuilt as an agent with instruments.

Vì sao hai kho này quan trọng: đây là nơi toàn bộ mô hình — VLM trả lời câu hỏi của bộ máy — được đo tới giới hạn. Kết luận là con số lặp lại qua bảy lượt, không phải cảm giác. Đọc mục này để hiểu vì sao visus được xây lại thành agent có công cụ đo.

vlm (v1) — 한 번에 한 질문vlm (v1) — one question at a timevlm (v1) — từng câu mộtvlm2 (v2) — 장면을 먼저 고정vlm2 (v2) — ground the scene firstvlm2 (v2) — neo cảnh trước
구조shapehình dạng엔진이 다음 질문을 지목 → VLM이 클립 전체를 맨눈으로 다시 보고 그 질문 하나에 답 → 제출 → 반복the engine names the next question → the VLM re-watches the whole clip cold and answers that one → submit → repeatbộ máy nêu câu tiếp → VLM xem lại toàn clip từ đầu rồi trả một câu → nộp → lặpStage 0 엔티티·타임라인 표(n=3 합의, 동결) → Stage 1 술어를 독립 호출(n=5 자기일관성) → Stage 2 제출 전 검증 → 엔진 루프Stage 0 entity/timeline table (n=3 consensus, frozen) → Stage 1 predicates called independently (n=5 self-consistency) → Stage 2 pre-submission validation → engine loopGiai đoạn 0 bảng thực thể/timeline (đồng thuận n=3, đóng băng) → Giai đoạn 1 gọi các vị từ độc lập (tự nhất quán n=5) → Giai đoạn 2 xác thực trước nộp → vòng bộ máy
근거evidencebằng chứng자유 텍스트 + 시작·끝 초free text plus a start and end secondvăn bản tự do kèm giây bắt đầu/kết thúc⭐ 구간 목록 + 엔티티 id, id는 동결된 표에 있는 것만 쓸 수 있게 enum으로 묶임 — 그래서 참조 무결성을 기계가 검사할 수 있다⭐ a list of intervals bound to entity ids, the ids enum-constrained to the frozen table — which is what makes referential integrity machine-checkable⭐ danh sách khoảng gắn ID thực thể, ID bị ràng buộc enum theo bảng đóng băng — nhờ đó máy kiểm được toàn vẹn tham chiếu
기본 지표headline metricchỉ số nổi bật도표 일치chart agreementđồng thuận biểu đồ근거·시각 정확도를 1차로 올리고 도표는 2차로 내림evidence and timestamp accuracy promoted to primary; chart metrics demotedđộ chính xác bằng chứng và mốc thời gian thành chính; chỉ số biểu đồ thành phụ
결정론 CVdeterministic CVCV xác định없음nonekhông cóYOLO11-m + ByteTrack + 광류 저크 + Set-of-Marks 번인 + SAM2YOLO11-m + ByteTrack + optical-flow jolt + Set-of-Marks burn-in + SAM2YOLO11-m + ByteTrack + cú giật luồng quang học + ghi Set-of-Marks + SAM2
평가셋eval settập đánh giá68 클립clipsclip12 클립 프로브clip probe settập clip thăm dò

⚠️ 질문 집합은 두 레포 어디에도 없다. 둘 다 실행 시점에 ql-re에서 GET /questions로 받아 온다 — "질문 텍스트·도메인·관측 규칙을 여기 하드코딩하지 말 것". 도표 이름과 도표 조건은 프롬프트에 절대 넣지 않는다는 것이 두 레포 공통의 규율이다(§8.1).

⚠️ Neither repo contains the question set. Both fetch it at run time from ql-re via GET /questions — "never hardcode question text, domains or observation rules here." And in both, chart names and chart conditions are never put in the prompt (§8.1).

⚠️ Không kho nào chứa bộ câu hỏi. Cả hai lấy lúc chạy từ ql-re qua GET /questions — ‘không hard-code câu chữ, miền hay quy tắc quan sát ở đây.’ Ở cả hai, tên biểu đồ và điều kiện không bao giờ vào prompt (§8.1).

⭐ 끝까지 따라가 보기 — 클립 011 하나가 두 세대를 지나간다⭐ Walk it — clip 011 through both generations⭐ Đi hết — clip 011 qua hai thế hệ

정답은 차43-3이고, 사람 라벨러의 답만으로 엔진을 돌리면 그 도표에 정확히 도달한다(「완전 일치」로 검수됨). 즉 질문 집합과 엔진은 이 클립을 풀 수 있다. 못 푸는 것은 보는 일이다.

The gold chart is 차43-3, and running the engine on the human labeller’s answers alone reaches it exactly (reviewed as a complete match). So the question set and the engine can solve this clip. What cannot be done is the seeing.

Biểu đồ chuẩn 차43-3; chạy bộ máy chỉ trên đáp án người gán nhãn tới đúng nó (được xem xét là khớp hoàn toàn). Vậy bộ câu hỏi và bộ máy giải được clip này. Thứ chưa làm được là nhìn thấy.

v1 · 1번째 질문v1 · turn 1v1 · lượt 1「충돌 직전 내 차량은 어떤 동작을 하고 있었습니까?」 → 모델 답 straight(정답 lane_change), 근거 0.0–9.0초, 이유 "영상 전체 구간에서 내 차량은 직진하며 주행하고 있으며, 차선 변경이나 회전 등의 동작은 보이지 않습니다""Just before the collision, what was your own vehicle doing?" → the model answers straight (gold: lane_change), evidence 0.0–9.0 s, reason: "throughout the clip my vehicle travels straight; no lane change or turn is visible."‘Ngay trước va chạm, xe của bạn làm gì?’ → mô hình trả straight (chuẩn lane_change), bằng chứng 0.0–9.0 giây, lý do: ‘suốt clip xe tôi đi thẳng; không thấy chuyển làn hay rẽ.’
🚨 그 즉시immediatelyngay lập tức정답 도표가 첫 질문에서 제거된다. 추적 기록이 범인을 그대로 적는다 — 차43-3 eliminated · eliminated_by 차43-3#c03 · answered_by {q_maneuver, self}. 되돌릴 장치는 없다 — 제출 후 재질의는 규약으로 금지되어 있다the gold chart is eliminated at the first question. The trace names the killer: 차43-3 eliminated · eliminated_by 차43-3#c03 · answered_by {q_maneuver, self}. There is no way back — re-asking after submission is forbidden by the protocolbiểu đồ chuẩn bị loại ở câu đầu. Trace nêu thủ phạm: 차43-3 eliminated · eliminated_by 차43-3#c03 · answered_by {q_maneuver, self}. Không có đường trở lại — giao thức cấm hỏi lại sau nộp
v1 · 끝v1 · endv1 · kết thúc13턴 뒤 confirmation=open · leaf=null, 생존 5개 — 그중에 정답은 없다. 도중에 not_applicable이 세 번 나왔다(상대 차종·접촉 유형 등) — 모델이 충돌이 없었다고 말한 것이다after 13 turns, confirmation=open · leaf=null, five charts alive — and the gold is not among them. Along the way three not_applicable answers (counterparty type, contact type) — the model asserting there was no collision at allsau 13 lượt, confirmation=open · leaf=null, còn năm biểu đồ — không có chuẩn. Trong quá trình có ba đáp án not_applicable (loại đối phương, loại tiếp xúc) — mô hình khẳng định hoàn toàn không có va chạm
v2 · Stage 0v2 · Stage 0v2 · Giai đoạn 0✅ 접촉 3/3 만장일치, t_c = 4.7초 — 사람 정답 5.16초와 0.46초 차로 ±0.5초 허용 안쪽. 접촉 창 [1.7, 5.7]이 열린다✅ contact 3/3 unanimous, t_c = 4.7 s against the human’s 5.16 s — 0.46 s off, inside the ±0.5 s tolerance. The contact window [1.7, 5.7] opens✅ tiếp xúc đồng thuận 3/3, t_c = 4.7 s so với 5.16 s của người — lệch 0.46 s, trong dung sai ±0.5 s. Mở cửa sổ tiếp xúc [1.7, 5.7]
v2 · Stage 1v2 · Stage 1v2 · Giai đoạn 1같은 질문에 5표가 갈린다 — {lane_change: 3, straight: 2} → 80% 미만이라 unknown으로 기권. 상대차 동작은 {lane_change: 5} ✅, 접촉 유형도 ✅. 기권 사유 집계: 답함 13 · 자기불일치 10the same question splits the five votes — {lane_change: 3, straight: 2}, below 80%, so it abstains as unknown. The other car’s manoeuvre comes back {lane_change: 5} ✅ and the contact type ✅. Abstention causes: 13 answered, 10 self-inconsistentcùng câu hỏi chia năm phiếu — {lane_change: 3, straight: 2}, dưới 80%, nên từ chối thành unknown. Thao tác đối phương {lane_change: 5} ✅, loại tiếp xúc ✅. Lý do từ chối: 13 đã trả, 10 tự bất nhất
v2 · 끝v2 · endv2 · kết thúc여전히 open · leaf=null, 생존 9개 — ⭐ 그런데 이번엔 정답이 살아 있다. v2는 확정하지 못했지만 죽이지도 않았다. 이것이 두 세대의 진짜 차이다still open · leaf=null, nine alive — ⭐ but this time the gold survives. v2 did not confirm it, but it did not kill it either. That is the real difference between the generationsvẫn open · leaf=null, còn chín — ⭐ nhưng lần này chuẩn sống. v2 chưa xác nhận, nhưng cũng không giết nó. Đó là khác biệt thật giữa hai thế hệ
🚨 같은 클립의 같은 질문을, 다섯 번 실행하면 다섯 가지 답이 나온다one question, one clip, five runs, five answersmột câu hỏi, một clip, năm lượt, năm đáp án

여기가 가장 불편한 표다. 클립 011의 「내 차량 동작」 하나를 조건만 바꿔 돌린 결과다.

This is the uncomfortable table. One question — clip 011’s "what was my own vehicle doing" — across conditions.

Bảng khó chịu. Một câu — ‘xe tôi làm gì’ của clip 011 — qua các điều kiện.

실행runlượt chạy답answerđáp án표votesphiếu정답 생존gold alivechuẩn còn sống
재실행 전before re-runtrước khi chạy lạilane_change ✅4/5✅
기준선baselineđường cơ sởlane_change ✅5/5✅ (15)
스테이지드stagedtheo giai đoạnunknown3/5✅ (9)
통제군controlđối chứngunknown3/5✅ (14)
🚨 오라클(사람이 접촉 시각·상대차를 직접 줌)oracle (given the human’s contact time and counterpart)oracle (được cấp thời gian tiếp xúc và đối phương từ người)stopped ✗5/5🚨 아니오nokhông

⭐ 읽는 법. ① 정답이 4/5에서 3/5로 떨어져 기권이 된 것은 규칙이 바뀌어서가 아니라 표본 잡음 때문이다 — 5표 중 한 표가 움직였을 뿐이다. ② 🚨 그리고 사람이 「누가」와 「언제」를 직접 집어 줬더니, 모델이 만장일치로 더 틀린 답(stopped)을 내고 정답 도표를 떨어뜨렸다. 이 한 줄이 어떤 집계표보다 한계를 정확히 보여 준다 — 더 좋은 입력이 더 좋은 답을 보장하지 않는다.

⭐ How to read it. ① The correct answer falling from 4/5 to 3/5 and becoming an abstention was sampling noise, not a rule change — one vote of five moved. ② 🚨 And when a human handed the model the "who" and the "when", it answered unanimously with a worse answer (stopped) and killed the gold chart. That single row states the ceiling more precisely than any aggregate table: better input does not buy a better answer.

⭐ Cách đọc. ① Đáp án đúng rơi từ 4/5 xuống 3/5 rồi thành từ chối là nhiễu lấy mẫu, không phải đổi luật — một trong năm phiếu đổi. ② 🚨 Khi người đưa cho mô hình ‘ai’ và ‘khi nào’, nó trả lời nhất trí bằng đáp án tệ hơn (stopped) và giết biểu đồ chuẩn. Một dòng đó nói giới hạn rõ hơn mọi bảng tổng hợp: đầu vào tốt hơn không mua được đáp án tốt hơn.

덧붙여 — 이 클립은 Stage 2의 규칙 하나를 바꾸게 만든 사례이기도 하다. 검증 코드 주석이 그대로 적는다: 인용 구간이 창 밖으로 삐져나가는 것은 위반이 아니다(완전히 벗어날 때만 위반) — "그 표현이 클립 011에서 맞는 lane_change 4/5를 죽였기 때문"(2026-09-04).

Note too that this clip changed one of Stage 2’s rules. The validator’s comment records it: a cited span that overruns the window is not a violation — only one entirely outside it is — because "that phrasing killed a correct lane_change 4/5 on clip 011" (2026-09-04).

Cũng lưu ý clip này đổi một luật của Giai đoạn 2. Comment validator ghi: đoạn được trích vượt quá cửa sổ không phải vi phạm — chỉ đoạn nằm hoàn toàn ngoài mới là — vì ‘cách diễn đạt đó giết lane_change đúng 4/5 trên clip 011’ (2026-09-04).

⭐ 모델이 실제로 보는 화면 — 그리고 거기서 일어난 오류⭐ What the model is actually shown — and the error that happened in it⭐ Mô hình thực sự được cho xem gì — và lỗi xảy ra trong đó

Set-of-Marks란 이런 것이다: 결정론 검출기(YOLO11-m + ByteTrack)가 차마다 상자를 치고 번호를 태워 넣고, 왼쪽 위에 절대 시각을 박는다. 그래야 모델과 사람이 같은 이름으로 같은 차를 가리킬 수 있다 — 「저 은색 차」가 아니라 V63으로. 아래 두 장은 클립 011의 그 영상에서 그대로 뽑은 프레임이다.

Set-of-Marks means this: a deterministic detector (YOLO11-m + ByteTrack) draws a box per vehicle, burns its track number into the frame, and stamps the absolute time in the corner — so that the model and a human can name the same car the same way: not "that silver car" but V63. The two frames below are taken straight from clip 011’s overlay video.

Set-of-Marks nghĩa là: detector xác định (YOLO11-m + ByteTrack) vẽ hộp mỗi xe, in số quỹ đạo lên khung hình và đóng dấu thời gian tuyệt đối ở góc — để mô hình và người có thể gọi cùng một xe theo cùng cách: không phải ‘chiếc xe bạc kia’ mà là V63. Hai khung dưới lấy thẳng từ video overlay clip 011.

t = 4.53초 — 충돌 직전. 검출기가 잡은 것은 V4(왼쪽의 검은 SUV)와 V37(가운데 탑차)뿐이다. ⭐ 정작 들이받게 될 차는 아직 상자가 없다. Stage 0이 「상대차는 누구인가」에 답한 것이 바로 이 시점이고, 답은 V4였다t = 4.53 s, just before contact. The detector has boxed only V4 (the dark SUV on the left) and V37 (the box truck in the middle). ⭐ The car that is about to hit has no box yet. This is the moment Stage 0 answered "who is the counterpart", and its answer was V4t = 4.53 s, ngay trước tiếp xúc. Detector chỉ đóng hộp V4 (SUV tối bên trái) và V37 (xe tải thùng ở giữa). ⭐ Xe sắp đâm chưa có hộp. Đây là lúc Giai đoạn 0 trả lời ‘ai là đối phương’, đáp án là V4
t = 5.20초 — 접촉. 오른쪽에서 끼어드는 은색 차에 이제 V63 상자가 붙었다. 🚨 그리고 사람 정답지의 상대차는 바로 track 63이다. 즉 Stage 0은 반대쪽 차를 지목했다. 더 날카로운 것은 그 다음이다 — 모델이 쓴 근거 문장은 "V4(은색 세단)가 4.7초부터 E0의 차체를 치는 충돌을 일으키므로…"다. 묘사는 오른쪽의 은색 차(V63)를, 번호는 왼쪽의 검은 SUV(V4)를 가리킨다. ⭐ 이것이 「VLM은 정체성을 못 한다」가 한 프레임에서 보이는 모습이다 — 무슨 일이 일어났는지는 대체로 맞게 말하면서, 누구에게 일어났는지는 틀린다t = 5.20 s, contact. The silver car cutting in from the right now carries the box V63. 🚨 And track 63 is exactly the counterpart in the human gold annotation. So Stage 0 named the car on the other side. Sharper still is what the model wrote as its reason: "V4 (a silver sedan) causes a collision striking E0’s body from 4.7 s…" — the description is of the silver car on the right (V63) while the id is the dark SUV on the left (V4). ⭐ This is what "the VLM cannot do identity" looks like in a single frame: it largely says what happened, and gets who it happened to wrongt = 5.20 s, tiếp xúc. Xe bạc cắt vào từ phải giờ mang hộp V63. 🚨 Quỹ đạo 63 chính là đối phương trong nhãn chuẩn của người. Vậy Giai đoạn 0 gọi xe ở phía bên kia. Sắc hơn nữa là lý do mô hình viết: ‘V4 (một sedan bạc) gây va chạm đâm thân E0 từ 4.7 s…’ — mô tả là xe bạc bên phải (V63) trong khi ID là SUV tối bên trái (V4). ⭐ Đây là hình ảnh ‘VLM không làm được định danh’ trong một khung: nó nói phần lớn chuyện gì xảy ra, nhưng sai ai là đối tượng xảy ra

⚠️ 그리고 바로 이 때문에 v2가 엔티티 id를 enum으로 묶었다. 근거의 entity_ids는 동결된 표에 있는 id만 쓸 수 있어서, 존재하지 않는 차를 지어내는 것은 막힌다(Stage 2의 참조 무결성 검사). 그러나 존재하는 차 중에서 틀린 것을 고르는 것은 막지 못한다 — 위가 바로 그 경우다. 스키마로 막을 수 있는 오류와 막을 수 없는 오류의 경계가 여기 있다.

⚠️ This is precisely why v2 enum-bound the entity ids. An answer’s entity_ids may only name ids present in the frozen table, so inventing a car that does not exist is blocked (Stage 2’s referential-integrity check). Picking the wrong one among cars that do exist is not blocked — which is the case above. That is the exact boundary between the errors a schema can catch and the ones it cannot.

⚠️ Đây chính là lý do v2 ràng buộc enum ID thực thể. entity_ids của đáp án chỉ được gọi ID có trong bảng đóng băng, nên không thể bịa xe không tồn tại (kiểm toàn vẹn tham chiếu Giai đoạn 2). Chọn sai một xe có tồn tại thì không bị chặn — đúng trường hợp trên. Đó là ranh giới chính xác giữa lỗi schema bắt được và không bắt được.

같은 순간의 CV 진단 오버레이 — Hough 차선 사다리꼴과 차로 점유. 왼쪽 위에 t=4.53s t_c=5.16 lanes:hough가 찍혀 있다(t_c는 사람이 찍어 준 접촉 시각). ⚠️ 초록 사다리꼴을 보라 — 자차 차로가 아니라 옆 차로와 탑차 위에 걸쳐 있다. 이것이 소실점 기하가 12편 중 1편에 그친 모습이고, 카메라 내·외부 파라미터를 모르는 채로 기하를 복원하려 할 때 생기는 일이다(§9.9). 같은 영상에서 자차 차로 점유는 9/12로 잘 맞는데 상대차는 4/12로 떨어지는 이유도 여기 있다the CV diagnostic overlay at the same moment — the Hough lane trapezoid and lane occupancy, with t=4.53s t_c=5.16 lanes:hough stamped in the corner (t_c being the human-marked contact time). ⚠️ Look at the green trapezoid: it sits across the adjacent lane and the box truck, not the ego lane. This is what vanishing-point geometry scoring 1 of 12 looks like, and what happens when geometry is reconstructed without knowing the camera’s intrinsics or extrinsics (§9.9). It is also why ego lane occupancy reaches 9/12 on the same footage while the other car’s falls to 4/12overlay chẩn đoán CV cùng thời điểm — hình thang làn Hough và độ chiếm làn, góc đóng dấu t=4.53s t_c=5.16 lanes:hough (t_c là thời điểm tiếp xúc người đánh dấu). ⚠️ Nhìn hình thang xanh: nó nằm qua làn kề và xe tải, không nằm trên làn ego. Đây là hình ảnh hình học điểm biến mất đạt 1/12, xảy ra khi dựng hình học không biết thông số nội/ngoại tại camera (§9.9). Vì vậy độ chiếm làn ego đạt 9/12 trên cùng footage trong khi phía xe kia rơi còn 4/12

🚨 그리고 도표는 일곱 번 다 0이다and the chart count is zero in all seven runsvà số biểu đồ bằng 0 trong cả bảy lượt chạy

v2의 모든 실행 점수 파일에서 layer2.match가 0이다 — 진단 실행 셋, 1차 통제군, 1차 실험군, 통제 행, 그리고 오라클 실행까지. ⭐ 오라클 실행은 유일한 「오판정 1」까지 만들어 냈다(클립 006을 차43-2로, 정답은 차43-4).

layer2.match is 0 in every v2 run score file — the three diagnostics, the primary control, the primary experiment, the control row, and the oracle run. ⭐ The oracle run also produced the only misjudgment (clip 006 called 차43-2 against a gold of 차43-4).

layer2.match là 0 trong mọi tệp điểm v2 — ba chẩn đoán, đối chứng chính, thí nghiệm chính, dòng đối chứng, và lượt oracle. ⭐ Lượt oracle cũng tạo ra phán định sai duy nhất (clip 006 gọi 차43-2 trong khi chuẩn là 차43-4).

「모델 급을 올려도 「언제·상대 횡이동」은 안 풀린다 → 기하는 CV 몫. 사람 클릭 2개를 주면 항목 정확도는 오르지만(52/87) 도표 확정은 여전히 0(오판정 1).」 — phase-a-interim.md

"Raising the model class does not solve ‘when’ and ‘the other car’s lateral motion’ → the geometry belongs to CV. Give it two human clicks and item accuracy rises (52/87) but chart confirmations stay at zero (one misjudgment)."

‘Nâng cấp lớp mô hình không giải quyết được “khi nào” và “chuyển động ngang của xe kia” → hình học thuộc về CV. Cho hai cú nhấp chuột người thì độ chính xác sự kiện tăng (52/87) nhưng xác nhận biểu đồ vẫn 0 (một phán định sai).’

모든 레버를 당겨 보고 각각 측정했다. 그리고 대부분이 「차이 없음」으로 기각됐다 — 이것이 이 레포의 진짜 산출물이다.

Every lever was pulled and each one measured. Most were rejected as no-effect — and that register of rejections is the repo’s real output.

Mọi đòn bẩy đều đã thử và đo. Phần lớn bị loại vì không tác dụng — sổ loại trừ đó mới là đầu ra thật của kho.

시도한 것what was triedđã thử결과resultkết quả
접촉 구간만 보여 주기(창)showing only the contact windowchỉ hiển thị cửa sổ tiếp xúc❌ 이득 없음 — 해상도 2.5배까지 포함해서. 통제 행(전체 영상 + 창 지시문)이 오히려 41/87로 실험군 39/85보다 나았다❌ no gain — including the 2.5× resolution it buys. The control row (full media plus a window instruction) actually scored 41/87 against the experiment’s 39/85❌ không tăng — kể cả độ phân giải 2.5× có được. Dòng đối chứng (toàn media và hướng dẫn cửa sổ) thực tế đạt 41/87 so với 39/85 của thí nghiệm
영어 프롬프트 · 더 높은 fps · 더 촘촘한 시간 샘플링English prompts · higher fps · denser time samplingprompt tiếng Anh · fps cao hơn · lấy mẫu thời gian dày hơn❌ 전부 기각. ⭐ 촘촘한 샘플링은 오히려 해로웠다 — 4fps 10/12 vs 16fps 상당 6/12. ⚠️ 단, 10/12 쪽은 출처 자신이 부인한다 — 아래를 볼 것❌ all rejected. ⭐ denser sampling was actively harmful — 4 fps 10/12 against a 16 fps-equivalent 6/12. ⚠️ but the 10/12 is disclaimed by its own source — see below❌ đều bị loại. ⭐ lấy mẫu dày chủ động gây hại — 4 fps 10/12 so với tương đương 16 fps 6/12. ⚠️ nhưng 10/12 bị chính nguồn phủ nhận — xem dưới
서술한 뒤 코드로 매핑describe, then map to a codemô tả, rồi ánh xạ thành mã❌ 순효과 0 — 회복 3~4%, 손실 비슷❌ net zero — 3–4% recovered, about as much lost❌ tổng bằng 0 — thu lại 3–4%, mất xấp xỉ vậy
예/아니오로 쪼개 묻기decomposing into yes/no questionstách thành câu hỏi có/không❌ 더 나빴다 — 216개 중 99개가 기권(자기불일치 97)❌ worse — 99 of 216 abstained (97 self-inconsistent)❌ tệ hơn — 99/216 từ chối (97 tự bất nhất)
문구를 더 좋게(방향 A/B/C)better wording (direction A/B/C)câu chữ tốt hơn (hướng A/B/C)❌ 이득이 통제 문장과 같은 크기 → 표본 잡음으로 판정, 요청 기각❌ the gain equals the control sentence’s → ruled sampling noise, request rejected❌ mức tăng bằng câu đối chứng → coi là nhiễu lấy mẫu, bác yêu cầu
프런티어 모델(Gemini 3.1 Pro)a frontier model (Gemini 3.1 Pro)mô hình frontier (Gemini 3.1 Pro)⚠️ 상대차 식별은 2배로 좋아진다(6/12 vs 3/12). 그런데 같은 벽 — 상대 횡이동 3/12, 그리고 클립 3편은 「사고 없음」이라고 답했다. 총 비용 $0.42⚠️ counterpart identification doubles (6/12 vs 3/12). Same wall otherwise — other-car lateral motion 3/12 — and it answered "no accident" on three clips. Total cost $0.42⚠️ định danh đối phương tăng gấp đôi (6/12 so với 3/12). Các mặt khác vẫn chạm trần — chuyển động ngang xe kia 3/12 — và nó trả ‘không có tai nạn’ trên ba clip. Tổng phí $0.42
✅ 프롬프트 규율과 지각 오버레이prompt discipline and perception overlayskỷ luật prompt và overlay tri giác✅ 여기서만 큰 변화가 났다 — Set-of-Marks + 앵커 목록 + 물리 어휘로 바꾸자 접촉 8→10, 헤딩 2→7, ⭐ 자차 동작 2/12 → 10/12. 그런데 상대차 동작은 0→1에 그쳤다 — 유보 7개가 오답 9개로 바뀌었을 뿐이다. 레포의 표현: 「인지의 벽」✅ the only place a large real effect appeared — Set-of-Marks plus an anchor list plus a physical-motion vocabulary moved contact 8→10, heading 2→7 and ⭐ ego motion 2/12 → 10/12. But other-car motion went only 0→1: seven abstentions simply became nine wrong answers. The repo’s phrase: "the wall of perception"✅ nơi duy nhất có hiệu ứng lớn thực — Set-of-Marks + danh sách neo + từ vựng chuyển động vật lý đưa tiếp xúc 8→10, hướng 2→7 và ⭐ chuyển động ego 2/12 → 10/12. Nhưng chuyển động xe kia chỉ 0→1: bảy từ chối chỉ thành chín đáp án sai. Câu của kho: ‘bức tường tri giác’
⭐ 가장 중요한 한 줄 — 결정론 검출기가 VLM보다 시간을 잘 맞힌다the most important line — the deterministic detector beats the VLM on timingdòng quan trọng nhất — detector xác định thắng VLM ở thời điểm

Stage 0을 사람 정답과 대조한 표가 설계를 통째로 바꾼다. 접촉 시각을 ±0.5초 안에 맞히는 비율이 VLM은 3/12인데, 광류 저크 × 트랙 근접 검출기는 9/11이다(프레임 안에 접촉이 보이는 11편 기준). 상대차 동작은 VLM이 0/12이고, 오버레이를 줘도 1/12, 사람이 상대차를 직접 집어 줘도 3/12다.

Scoring Stage 0 against the human gold is what redesigned everything. Hitting the contact time within ±0.5 s: the VLM manages 3/12; the optical-flow-jolt × track-proximity detector manages 9/11 (of the eleven clips where contact is in frame). Other-car motion is 0/12 for the VLM, 1/12 with overlays, and 3/12 even when a human points at the car.

Chấm Giai đoạn 0 so với chuẩn người đã thiết kế lại mọi thứ. Đúng thời điểm tiếp xúc trong ±0.5 giây: VLM đạt 3/12; detector cú giật luồng quang học × độ gần quỹ đạo đạt 9/11 (trong 11 clip có tiếp xúc nằm trong khung). Chuyển động xe kia 0/12 với VLM, 1/12 với overlay, và 3/12 kể cả khi người chỉ xe.

「원칙: VLM은 기하·정체성·충격 검출을 못 한다(실측). 이 셋은 결정론 모듈이 재고, VLM에는 id·번호·수치·오버레이로 넘긴다.」 — docs/perception.md

"Principle: the VLM cannot do geometry, identity or impact detection (measured). Those three are measured by deterministic modules, and handed to the VLM as ids, numbers, figures and overlays."

‘Nguyên tắc: VLM không làm được hình học, định danh hay phát hiện va chạm (đã đo). Ba việc đó do mô-đun xác định đo, rồi giao cho VLM dưới dạng ID, số, hình và overlay.’

⭐ 이 문장이 오늘 visus 그 자체다. §8.7의 v3 판독 순서가 충돌 격자와 충돌 순서를 도구로 먼저 재고 나서 판독기가 id로 고르게 하는 이유, §8.3의 CV 체인이 상대차 선택과 접근 방향을 모델에게 묻지 않고 계산하는 이유가 전부 이 줄에서 나온다.

⭐ That sentence is visus today. It is why §8.7’s v3 reading order measures the impact grid and impact sequence with tools first and then has the reader choose by id, and why §8.3’s CV chain computes the counterpart and the approach side instead of asking a model for them.

⭐ Đó là visus hôm nay. Vì vậy thứ tự đọc v3 ở §8.7 đo lưới va chạm và chuỗi va chạm bằng công cụ trước, rồi để bộ đọc chọn theo ID; chuỗi CV §8.3 tính đối phương và phía tiếp cận thay vì hỏi mô hình.

⚠️ 인용하기 전에 알아야 할 보정 네 가지four corrections to know before quoting these numbersbốn đính chính cần biết trước khi trích số
1「Stage 0이 6/12편에서 접촉을 부정」은 느슨한 표현이다. 합의 기준으로 접촉을 부정한 것은 4편(003·023·027·053, 전부 3/3 만장일치)이다. 나머지 2편(016·042)은 다수가 「있었다」고 했고, 보수 모드가 걸린 이유는 접촉이 아니라 상대차 불일치다. 사람 정답 대비로는 8/12 정답, 오류 4건"Stage 0 denied contact on 6 of 12" is loosely stated. By consensus it denied contact on four (003, 023, 027, 053, all 3/3 unanimous). The other two (016, 042) voted majority yes and went conservative over counterpart disagreement, not contact. Against the human gold it is 8/12 correct, four errors‘Giai đoạn 0 từ chối tiếp xúc ở 6/12’ là nói lỏng. Theo đồng thuận, nó từ chối ở bốn (003, 023, 027, 053, cả 3/3 nhất trí). Hai vụ kia (016, 042) bỏ phiếu đa số có và thận trọng vì bất đồng đối phương, không phải tiếp xúc. So với chuẩn người là 8/12 đúng, bốn lỗi
2「vlm2는 문서가 많다」는 숫자에 속은 것이다. .md 61개 중 48개는 클립별 근거 시트(12클립 × 4실행), 7개는 자동 생성 실행 보고서다. 사람이 쓴 산문은 6개. 오히려 v1이 산문으로는 더 두껍다(433줄짜리 측정 규약 + 분석 보고서 4편)"vlm2 is heavily documented" is a count artifact. Of 61 .md files, 48 are per-clip evidence sheets (12 clips × 4 runs) and 7 are machine-generated run reports. Six are hand-written prose. In prose terms v1 is the thicker of the two — a 433-line measurement protocol plus four analysis reports‘vlm2 được ghi chép rất nhiều’ là lỗi đếm. Trong 61 tệp .md, 48 là phiếu bằng chứng từng clip (12 clip × 4 lượt) và 7 là báo cáo máy tạo. Chỉ sáu là văn xuôi viết tay. Theo văn xuôi, v1 dày hơn — giao thức đo 433 dòng và bốn báo cáo phân tích
3정답셋이 독립적이지 않다 — 라벨러 1명, 이중 라벨 0%, 라벨러 간 일치율 null. 그리고 도표 정답은 「이 답들로 엔진을 돌린 결과」로 유도된 것이다. 규약 자신이 「전체의 최소 25%는 블라인드로 확보한다」고 요구했는데 지켜지지 않았고, 모든 보고서가 머리글에 「잠정」이라고 적어 두었다the gold set is not independent — one labeller, 0% double-labelled, inter-labeller agreement null. And the chart gold is derived as "the engine run on these answers". The protocol itself demanded that at least 25% be blind; that was not met, and every report says "provisional" in its headerbộ chuẩn không độc lập — một người gán nhãn, 0% gán nhãn kép, đồng thuận liên người null. Và chuẩn biểu đồ được suy ra là ‘bộ máy chạy trên các đáp án này’. Giao thức yêu cầu ít nhất 25% mù; đã không đạt, mọi báo cáo đều có ‘provisional’ ở header
4동결된 비교표가 저장된 점수보다 낡았다. comparison.md는 196/358·관측 325로 적는데 그 실행의 scores.json은 200/365·관측 330이다(채점 대상도 52가 아니라 53). 근거 제시율은 양쪽이 같으므로 같은 실행인데 그 사이에 정답셋이 갱신된 것이다. 산문이 아니라 scores.json을 인용할 것the frozen comparison table is stale against the stored scores. comparison.md prints 196/358 with 325 observed; that run’s scores.json says 200/365 with 330 observed (and 53 scored, not 52). The evidence-citation figure is identical in both, so it is the same run with a refreshed gold set in between. Quote scores.json, not the prosebảng đối chiếu đóng băng lỗi thời so với điểm lưu. comparison.md in 196/358 với 325 quan sát; scores.json lượt đó ghi 200/365 với 330 quan sát (53 được chấm, không phải 52). Con số trích dẫn bằng chứng giống nhau, vậy đó là cùng lượt chạy nhưng bộ chuẩn được làm mới ở giữa. Trích scores.json, đừng trích văn xuôi

이 보정들은 어떤 결론도 바꾸지 않는다 — 전부 그 보고서 자신의 「2~3건 차이는 차이 없음」 규칙 안쪽이다. 다음 사람이 산문이 아니라 저장된 숫자를 인용하도록 적어 둔다.

None of these corrections changes a conclusion — each falls inside the report’s own "a difference of 2–3 is no difference" rule. They are recorded so the next reader quotes the stored numbers rather than the prose.

Không đính chính nào đổi kết luận — mỗi cái nằm trong quy tắc riêng của báo cáo ‘chênh 2–3 không khác biệt’. Ghi lại để người đọc sau trích con số lưu thay vì văn xuôi.

⚠️ 왜 멈췄는가 — 그리고 적혀 있지 않은 것why it stopped — and what is not written downvì sao dừng — và điều không được ghi

「에이전트 방식으로 간다」는 문장은 두 레포 어디에도 없다. 기록은 2026-09-08에 다음 할 일을 열어 둔 채로 끝난다. 남아 있는 것은 수렴하는 음성 결과들과 맞출 수 없었던 데모 일정이다 — vlm2/README.md가 v1을 「시연 불가 판정」으로 적고, v2 자신에 대해서는 「현재로선 v1 대비 개선 근거 없음」이라고 적는다(2026-09-04).

Neither repo contains a sentence saying "we are moving to an agentic approach." The record ends on 2026-09-08 with next steps still open. What it does hold is a converging set of negative results and a demo date that could not be met: vlm2/README.md records v1 as "not demonstrable" and says of v2 itself, "no evidence of improvement over v1 as things stand" (2026-09-04).

Không kho nào có câu ‘ta chuyển sang cách tiếp cận agent’. Bản ghi kết thúc 2026-09-08 với bước tiếp theo vẫn mở. Thứ có là tập kết quả âm tính hội tụ và ngày demo không thể đạt: vlm2/README.md ghi v1 ‘không thể trình diễn’ và nói chính v2 ‘chưa có bằng chứng cải thiện v1 ở trạng thái hiện tại’ (2026-09-04).

⭐ 그리고 한 줄짜리 구조적 진단이 있다. v1에서 68편 중 29편이 후보를 전부 잃었고, 29편 전부가 「한 답만 바꾸면 회복된다」. 클립 011이 그 29편의 모습 그대로다 — 첫 질문의 한 단어가 영구적이다. 이것이 왜 visus가 되돌아갈 수 있는 작업공간과 기권할 권리를 갖게 되었는지의 직접적인 이유다.

⭐ And there is a one-line structural diagnosis. In v1, 29 of 68 clips lost every candidate, and all 29 were one answer away from recovery. Clip 011 is exactly what those 29 look like — one word at the first question, permanent. This is the direct reason visus has a workspace it can revisit and a right to abstain.

⭐ Và có một chẩn đoán cấu trúc một dòng. Ở v1, 29/68 clip mất mọi ứng viên, cả 29 chỉ cách phục hồi một đáp án. Clip 011 đúng hình ảnh của 29 clip ấy — một từ ở câu đầu, vĩnh viễn. Đây là lý do trực tiếp visus có workspace để xem lại và quyền từ chối.

✅ 코드 위의 모든 수치는 vlm·vlm2의 저장된 scores.json·results.json·turns.jsonl에서 직접 확인한 것이다. 두 레포 모두 단일 「Handover snapshot」 커밋(2026-10-14)이라 git 이력이 없고, 날짜는 전부 파일 내용에서 왔다. 이미지 파일은 두 레포 통틀어 0개이고, 대신 som.mp4·cv_overlay.mp4 같은 오버레이 영상이 클립마다 들어 있다.

✅ code Every figure above was read directly from the stored scores.json, results.json and turns.jsonl in the two repos. Both carry a single "Handover snapshot" commit (2026-10-14) and therefore no git history; all dates come from file contents. There are zero image files in either repo — what exists instead is overlay video per clip (som.mp4, cv_overlay.mp4).

✅ mã Mọi số trên đọc trực tiếp từ scores.json, results.json và turns.jsonl đã lưu trong hai kho. Cả hai chỉ có một commit ‘Handover snapshot’ (2026-10-14), không lịch sử git; mọi ngày lấy từ nội dung tệp. Cả hai kho có 0 tệp hình — thay vào đó là video overlay mỗi clip (som.mp4, cv_overlay.mp4).

⚠️ 보정 — 위 표의 10/12를 액면대로 읽지 말 것(출처가 그렇게 적어 두었다)correction — do not read that 10/12 at face value; its own source says sođính chính — đừng đọc 10/12 theo mặt chữ; nguồn tự nói vậy

이 문서는 「촘촘한 샘플링은 해로웠다」를 4 fps 10/12 대 16 fps 상당 6/12로 적는다. 결론은 살아남고, 인용된 증거는 살아남지 않는다. 같은 메시지(vlm2, 2026-09-08)가 직접 적는다 — 정답이 12편 중 9편 lane_change라 무조건 「예」라고 답해도 9/12이고, 모델은 12편 중 11편에 예라고 답했다(직진인 두 편 포함). 즉 「『넘었다』를 잘 맞히는 것이 아니라 잘 말하는 것이고, 좌·우 방향은 못 잡는다.」

This document records "denser sampling was harmful" as 4 fps 10/12 against a 16 fps-equivalent 6/12. The conclusion survives; the evidence as quoted does not. The same message (vlm2, 2026-09-08) says so outright: gold is 9 of 12 lane_change, so answering yes every time scores 9/12, and the model answered yes on 11 of the 12 clips, including the two straight ones. In its own words: "it is not good at seeing 'it crossed', it is good at saying it — and it cannot get left from right."

Tài liệu ghi ‘lấy mẫu dày gây hại’ là 4 fps 10/12 so với tương đương 16 fps 6/12. Kết luận vẫn đứng; bằng chứng được trích thì không. Cùng tin nhắn (vlm2, 2026-09-08) nói thẳng: chuẩn có 9/12 lane_change, nên trả có mọi lần đã được 9/12; mô hình trả có trên 11/12 clip, kể cả hai clip đi thẳng. Nguyên văn: ‘nó không giỏi nhìn “đã cắt qua”, nó giỏi nói như vậy — và không phân biệt được trái phải.’

⭐ 무엇이 남는가: 16 fps 쪽의 붕괴는 실재한다 — 감속 영상에서는 프레임 간 움직임이 작아져 모델이 「안 넘었다/모름」으로 후퇴한다(네 편이 예→아니오로 뒤집혔다). 밀도를 올리지 말라는 결론은 유효하고, 그 근거는 「4 fps가 잘했다」가 아니라 「16 fps가 더 나빠졌다」이다. 이것이 §8.14 레지스터 C가 말하는 「정확도처럼 읽히지만 아닌 것」의 교과서적 사례다.

⭐ What survives: the 16 fps collapse is real — in slowed footage the between-frame motion shrinks and the model retreats to "it did not cross / I do not know" (four clips flipped yes → no). The instruction not to raise the density stands, and its warrant is "16 fps got worse", not "4 fps did well". It is a textbook case of what register C in §8.14 calls a number that reads like an accuracy and is not.

⭐ Điều còn lại: sự sụp ở 16 fps là thật — trong video chậm, chuyển động giữa khung nhỏ đi và mô hình lùi về ‘không cắt qua / tôi không biết’ (bốn clip đổi có → không). Giữ nguyên chỉ dẫn không tăng mật độ, lý do là ‘16 fps tệ hơn’, không phải ‘4 fps tốt’. Đây là ví dụ điển hình cho điều sổ C ở §8.14 gọi là con số trông như độ chính xác nhưng không phải.

⚠️ 같은 실행의 좋은 소식 하나는 반대 방향으로 유용하다 — 부정형 쌍(둘 다 결정된 7쌍)에서 모순이 0이고 예 54 · 아니오 63이다. 즉 전역적인 「예」 편향은 관측되지 않았다. 위의 쏠림은 이 한 문항에서의 쏠림이지 모델의 성향이 아니다 — 남는 것은 언어가 아니라 지각의 문제라는 것이 그 실행의 결론이다.

⚠️ One piece of good news from the same run is useful in the other direction: across the negated pairs where both were decided (7 pairs), contradictions were zero, with 54 yes against 63 no. So no global yes-bias was observed: the skew above is a skew on this one question, not a trait of the model. The run's own conclusion is that what remains is perception, not wording.

⚠️ Tin tốt hữu ích theo hướng khác: trong các cặp phủ định mà cả hai được quyết (7 cặp), mâu thuẫn bằng 0, với 54 có so với 63 không. Vậy không thấy thiên lệch có toàn cục: lệch trên là lệch của riêng câu hỏi này, không phải tính chất mô hình. Kết luận của lượt chạy: thứ còn lại là tri giác, không phải câu chữ.

⭐⭐ 그리고 프롬프트 규율이 왜 유일하게 효과가 있었는지 — 수식어가 한 단계씩 떨어진다⭐⭐ And why prompt discipline was the only lever that moved — qualifiers drop one step at a time⭐⭐ Vì sao kỷ luật prompt là đòn bẩy duy nhất dịch chuyển — bổ ngữ rơi từng bậc

2026-09-04의 vlm 분석이다. 오답으로 끝난 추론 사슬을 되짚으면 같은 모양이 반복된다 — 「왼쪽 차로」 → 「왼쪽에서」 → 「가로질러」. 재서술할 때마다 수식어가 하나씩 떨어지고, 이후의 추론은 영상이 아니라 직전의 재서술을 본다. 한 번 떨어진 것은 회복되지 않는다.

From vlm, 2026-09-04. Walking back the reasoning chains that ended in a wrong answer, the same shape repeats: "the left lane" → "from the left" → "crossing". Each re-description drops a qualifier, and later reasoning attends to the previous re-description rather than to the video. What is lost never comes back.

Từ vlm, 2026-09-04. Lần ngược chuỗi suy luận kết thúc sai, cùng một hình dạng lặp lại: ‘làn trái’ → ‘từ bên trái’ → ‘cắt qua’. Mỗi lần mô tả lại rơi mất một bổ ngữ, suy luận sau chú ý mô tả trước thay vì video. Đã mất thì không quay lại.

세어 본 결과: 오답 사슬에서 수식어 없는 방위 표현이 12/25와 10/23인 데 비해 수식어가 붙은 것은 5건과 2건이다. 🚨 함의가 직관에 반한다 — 추론을 길게 할수록 나빠진다. 재서술이 한 번 더 일어날 기회이기 때문이다.

Counted: in the wrong-answer chains, bare bearings appear 12 of 25 and 10 of 23 times, against 5 and 2 qualified ones. 🚨 The implication runs against intuition — longer reasoning traces are worse, because each one is another chance to re-describe.

Đếm được: trong chuỗi trả lời sai, hướng trơ xuất hiện 12/25 và 10/23 lần, so với 5 và 2 hướng có bổ ngữ. 🚨 Hệ quả ngược trực giác — trace suy luận dài hơn tệ hơn, vì mỗi trace thêm một lần mô tả lại.

⭐ 처방이 구체적이라 그대로 옮길 수 있다: 차로에 번호를 붙이고, 맨 방위(「왼쪽에서」)를 금지하며, same_road · ego_lane · other_lane을 먼저 선언하게 한다. 이 문서가 다른 곳에 적은 「움직인 지렛대는 프롬프트 규율뿐이었다」는 결과의 기전이 이것이다 — 그리고 visus의 §4.2가 턴마다 다시 지각하는 구조라는 점과 겹쳐 읽어야 한다.

⭐ The prescription is concrete enough to carry over: number the lanes, ban bare bearings ("from the left"), and require same_road, ego_lane and other_lane to be declared up front. This is the mechanism behind the outcome recorded elsewhere — that prompt discipline was the only lever that moved — and it should be read together with §4.2, where visus re-perceives the clip on every turn.

⭐ Đơn thuốc đủ cụ thể để chuyển tiếp: đánh số làn, cấm hướng trơ (‘từ bên trái’), và yêu cầu khai báo trước same_road, ego_lane, other_lane. Đây là cơ chế sau kết quả ghi nơi khác — kỷ luật prompt là đòn bẩy duy nhất dịch chuyển — và nên đọc cùng §4.2, nơi visus nhìn lại clip ở mỗi lượt.

8.11new-knia · knia-api · ams-1080 — 계보가 아니라 곁가지, 그런데 오늘 제품이 그것에 기대고 있다 — not a link in the chain but a side branch, and the product stands on it today — không phải mắt xích mà là nhánh bên, nhưng sản phẩm hôm nay dựa vào nó 🔬 정밀🔬 Chi tiết

먼저 자리를 바로잡는다. 이 셋은 CarAccident → … → lense → visus의 계보 안에 있지 않다. 2026년 8월 말에 옆에서 자라나 그 줄기로 흘러들어 간 가지다 — new-knia(8월 하순) → knia-api(8-31 분리) → lense가 9-16에 통째로 벤더링 → visus. ams-1080은 그 옆에서 양쪽으로 동시에 흘러든다.

First, their place. These three are not links in CarAccident → … → lense → visus. They are a branch that grew alongside it in late August and fed into it: new-knia (late August) → knia-api (split off 2026-08-31) → vendored whole into lense on 2026-09-16 → visus. ams-1080 runs beside them, feeding both.

Trước hết, vị trí của chúng. Ba kho này không phải mắt xích trong CarAccident → … → lense → visus. Chúng là nhánh mọc song song cuối tháng 8 rồi nạp vào: new-knia (cuối tháng 8) → knia-api (tách 2026-08-31) → vendor nguyên khối vào lense ngày 2026-09-16 → visus. ams-1080 chạy bên cạnh, cung cấp cho cả hai.

① new-knia — 가장 좁고 가장 깊은 재도출① new-knia — the narrowest and deepest re-derivation① new-knia — tái suy dẫn hẹp nhất và sâu nhất

§8.6의 knia-dag가 108개 도표 전부를 얕게 가져갔다면, new-knia는 23개만 가져가되 끝까지 판다. ⭐ 그리고 둘은 서로를 모른다 — new-knia는 knia-analysis를 한 번도 언급하지 않는다. 포털 크롤과 PDF에서 각각 출발한 독립적인 두 도출이다.

Where knia-dag in §8.6 took all 108 charts shallowly, new-knia takes 23 and goes all the way down. ⭐ And the two do not know about each other — new-knia never mentions knia-analysis. They are two independent derivations, one from a portal crawl and one from the PDF.

Trong khi knia-dag ở §8.6 lấy toàn bộ 108 biểu đồ theo chiều rộng, new-knia lấy 23 và đi hết chiều sâu. ⭐ Hai kho không biết nhau — new-knia không bao giờ nhắc knia-analysis. Đây là hai suy dẫn độc lập, một từ crawl cổng thông tin và một từ PDF.

무엇이 더 있나what it addsnó bổ sung gì
적용범위에서 뽑은 가드guards from 적용범위cổng từ 적용범위93 — 도표가 언제 적용되지 않는지를 책의 문장에서 끌어낸 것. 이것이 §8.6에 없는 층이다— drawn from the book’s own scope text: when a chart does not apply. This is the layer §8.6 does not have— lấy từ phần phạm vi của sách: khi biểu đồ không áp dụng. Đây là tầng §8.6 không có
관측 슬롯 · 술어 · 임계값observation slots · predicates · thresholdsô quan sát · vị từ · ngưỡng61 · 77 · 34
실제 엔진 · 지각 스택 · 테스트a real engine, a perception stack, testsmột bộ máy thật, ngăn xếp tri giác, kiểm thử통과 테스트 599개, 연구 문서 17편, 그리고 감사 다섯 편599 passing tests, 17 research documents, and five audits599 kiểm thử đạt, 17 tài liệu nghiên cứu và năm đợt kiểm
실어 나르는 코퍼스the corpus it carrieskho dữ liệu mang theo201 도표 — 차 108 · 거 55 · 보 38. 자동차 대 자동차는 그중 절반이라는 사실이 여기서 보인다charts — 108 car-to-car, 55 car-to-motorcycle, 38 car-to-pedestrian. Car-to-car is about half the bookbiểu đồ — 108 xe-với-xe, 55 xe-với-xe máy, 38 xe-với-người đi bộ. Xe-với-xe chiếm khoảng nửa cuốn sách
⚠️ README를 믿지 말 것 — 생성된 상태 파일이 맞다do not trust the README — the generated status file is rightđừng tin README — tệp trạng thái sinh tự động mới đúng

README.md:178은 관측 55 · 술어 71 · 가드 85 · 임계값 29라고 적는다. 생성된 docs/status.md:17은 61 · 77 · 93 · 34라고 적는다. 파일을 직접 세어 보면 status.md가 맞고 README가 낡았다. 이 레포에서 수치를 인용할 일이 있으면 생성된 쪽을 쓸 것 — §8.6에서 본 것과 같은 모양의 함정이다.

README.md:178 says 55 observations, 71 predicates, 85 guards, 29 thresholds. The generated docs/status.md:17 says 61 · 77 · 93 · 34. Counting the files shows status.md is right and the README is stale. Quote the generated side — the same shape of trap as in §8.6.

README.md:178 nói 55 quan sát, 71 vị từ, 85 guard, 29 ngưỡng. docs/status.md:17 nói 61 · 77 · 93 · 34. Đếm tệp cho thấy status.md đúng, README lỗi thời. Trích phía sinh tự động — cùng dạng bẫy ở §8.6.

② knia-api — 책이 제품에 들어온 경로이고, 아무도 호출하지 않는다② knia-api — how the book reached the product, and nothing calls it② knia-api — cách sách tới sản phẩm, nhưng không ai gọi

201개 도표 전문과 분쟁 심의 결정 2,460건에 대한 읽기 전용 API + 탐색기. new-knia에서 2026-08-31에 떨어져 나왔고, 진짜 git 이력을 가진 유일한 레포다(커밋 5개, 08-31 → 09-19). 엔드포인트는 스키마 19개 · 코드 라우트 20개이고, 차이는 스키마에서 숨긴 GET / 하나다 — 레포 자신이 그 대사를 이미 적어 두었다.

A read-only API and explorer over the full text of 201 charts and 2,460 dispute decisions. Split out of new-knia on 2026-08-31, and the only one of the three with genuine git history (5 commits, 08-31 → 09-19). 19 endpoints in the OpenAPI schema, 20 routes in code — the difference is one GET / hidden from the schema, and the repo already reconciles this itself.

API chỉ đọc và trình duyệt khám phá toàn văn 201 biểu đồ cùng 2,460 quyết định tranh chấp. Tách từ new-knia ngày 2026-08-31, duy nhất trong ba kho có lịch sử git thật (5 commit, 08-31 → 09-19). 19 endpoint trong OpenAPI, 20 route trong mã — chênh lệch là GET / ẩn khỏi schema, chính kho đã đối soát.

⭐ 책이 visus까지 온 경로를 바이트 단위로 추적했다the book’s path into visus, traced byte for byteđường sách đi vào visus, lần theo từng byte
new-knia/charts.json
   │   sha256 7d199474a7ed…  — knia-api에 있는 것과 같은 파일
   ↓   lense가 통째로 벤더링 (2026-09-16, PROVENANCE.md에 기록)
visus/data/charts_ko.json   108개 situation 문자열이 전부 바이트 동일
       ⚠️ 그런데 이 파일은 더 이상 없다 — c903048
       "monolith (V-D18): KNIA corpus vendored into data/knia"
visus/data/knia/charts.json 지금 자리 — 201개 도표new-knia/charts.json
   │   sha256 7d199474a7ed…  — the same file knia-api holds
   ↓   vendored whole into lense (2026-09-16, recorded in PROVENANCE.md)
visus/data/charts_ko.json   all 108 situation strings byte-identical
       ⚠️ but this file is gone — c903048
       "monolith (V-D18): KNIA corpus vendored into data/knia"
visus/data/knia/charts.json where it lives now — 201 chartsnew-knia/charts.json
   │   sha256 7d199474a7ed…  — cùng tệp knia-api giữ
   ↓   vendor nguyên khối vào lense (2026-09-16, ghi trong PROVENANCE.md)
visus/data/charts_ko.json   toàn bộ 108 chuỗi tình huống giống từng byte
       ⚠️ nhưng tệp này đã mất — c903048
       "monolith (V-D18): KNIA corpus vendored into data/knia"
visus/data/knia/charts.json vị trí hiện tại — 201 biểu đồ

🚨 그런데 visus는 이 API를 호출하지 않는다. visus에서 knia-api를 찾으면 나오는 다섯 건이 전부 산문이고, 그중 docs/DESIGN.md:125는 「knia-api 위의 MCP」를 앞으로 할 일로 적어 둔다. .mcp.json도 없고, 그쪽을 가리키는 HTTP 클라이언트도 없다. visus가 쓰는 것은 벤더링된 정적 파일이다.

🚨 But visus does not call this API. All five hits for knia-api in visus are prose, and one of them — docs/DESIGN.md:125 — lists "MCP over knia-api" as future work. There is no .mcp.json and no HTTP client pointed at it. What visus uses is the vendored static file.

🚨 Nhưng visus không gọi API này. Cả năm kết quả tìm knia-api trong visus đều là văn xuôi; một trong đó — docs/DESIGN.md:125 — liệt kê ‘MCP over knia-api’ là việc tương lai. Không .mcp.json, không HTTP client trỏ tới. visus dùng tệp tĩnh đã vendor.

왜 이게 좋은 소식인가: 지금 돌아가는 제품에 외부 서비스 의존이 하나 없다는 뜻이다. 왜 알아 둬야 하는가: 책이 갱신되면 그 정적 파일을 누가 어떻게 다시 받아 오는지가 아무 데도 적혀 있지 않다.

Why that is good news: the running product has one fewer external dependency. Why it matters anyway: when the standard is revised, nothing records who re-pulls that static file, or how.

Tin tốt: sản phẩm đang chạy có ít hơn một phụ thuộc bên ngoài. Vẫn quan trọng vì: khi tiêu chuẩn đổi, không gì ghi ai kéo lại tệp tĩnh và kéo thế nào.

③ ams-1080 — 데모가 아니라 1,080편짜리 데이터셋이고, 지금도 살아 있다③ ams-1080 — not a demo but a 1,080-clip dataset, and still live③ ams-1080 — không phải demo mà là tập 1.080 clip, vẫn sống

이름이 오해를 부른다. 해상도 변종도 데모도 아니다 — 2026-09-09에 Label Studio에서 내려받은 라벨링된 클립 1,080편이고, 레포 자신이 "이 디렉터리는 코드베이스가 아니라 데이터"라고 적는다. 「1080」은 편수이자 해상도다(1920×1080, 15fps). 서빙 계층이 붙어 있다 — FastAPI + SQLite + ffmpeg, 포트 41080, Range 지원 영상, 그리고 도구 10개짜리 MCP 서버.

The name misleads. It is neither a resolution variant nor a demo: it is 1,080 labelled clips pulled from Label Studio on 2026-09-09, and the repo says of itself that "this directory is data, not a codebase." "1080" is both the clip count and the resolution (1920×1080 at 15 fps). It carries a serving layer — FastAPI, SQLite and ffmpeg on port 41080, Range-capable video, and an MCP server with 10 tools.

Tên gây hiểu lầm. Không phải biến thể độ phân giải hay demo: đây là 1.080 clip có nhãn lấy từ Label Studio ngày 2026-09-09; kho tự nói ‘thư mục này là dữ liệu, không phải codebase.’ ‘1080’ là cả số clip và độ phân giải (1920×1080 tại 15 fps). Có tầng phục vụ — FastAPI, SQLite, ffmpeg ở cổng 41080, video hỗ trợ Range và server MCP 10 công cụ.

⭐ 그리고 lense 골드셋과 겹친다 — 영상 파일명으로 이어 붙이면 273편 중 268편이 여기 있고, 268편 전부가 도표 id까지 일치한다(불일치 0). ⚠️ 그런데 레포는 스스로를 정답으로 부르지 말라고 한다 — "chart_id를 gold라고 부르지 말 것". 그 이유가 §8.13에 이미 적힌 숫자다: 프로젝트 도표와 라벨러 도표가 808건 중 16건만 일치한다.

⭐ It overlaps the lense gold set — joined on video filename, 268 of the 273 gold clips are present, and all 268 agree on the chart id (zero disagreements). ⚠️ Yet the repo refuses to be called ground truth — "do not call chart_id gold." The reason is the figure already in §8.13: the project chart and the labeller chart agree on 16 of 808.

⭐ Nó chồng lấn bộ chuẩn lense — nối theo tên video, 268/273 clip chuẩn có mặt, cả 268 đồng ý ID biểu đồ (không bất đồng). ⚠️ Nhưng kho từ chối được gọi là ground truth — ‘đừng gọi chart_id là chuẩn.’ Lý do là con số ở §8.13: biểu đồ dự án và biểu đồ người gán nhãn đồng ý ở 16/808.

🚨 후임자가 반드시 밟게 될 함정 — 포트 41080이 두 번 쓰인다a trap a successor will hit — port 41080 is bound twicebẫy người tiếp quản sẽ gặp — cổng 41080 được bind hai lần

visus의 scripts/report_run.py:13이 VIDEO_BASE = "http://localhost:41080/videos/"를 하드코딩하고, 주석은 ams-1080의 docker compose를 가리킨다. 🚨 그런데 visus 자신의 scripts/serve_cases.py:483도 같은 41080에 바인딩하고 /videos/를 서빙한다. 즉 보고서의 영상 링크는 그때 떠 있는 쪽으로 풀린다. 어느 쪽이 의도였는지는 확인하지 못했다 — 보고서의 영상이 엉뚱해 보이면 여기부터 보라.

scripts/report_run.py:13 in visus hardcodes VIDEO_BASE = "http://localhost:41080/videos/", with a comment pointing at ams-1080’s docker compose. 🚨 But visus’s own scripts/serve_cases.py:483 binds the same 41080 and serves /videos/ too. A report’s video links therefore resolve against whichever server happens to be up. Which was intended could not be determined — if a report’s video looks wrong, start here.

scripts/report_run.py:13 trong visus hard-code VIDEO_BASE = "http://localhost:41080/videos/", comment trỏ docker compose ams-1080. 🚨 Nhưng scripts/serve_cases.py:483 của chính visus cũng bind 41080 và phục vụ /videos/. Link video báo cáo trỏ tới server nào tình cờ đang chạy. Không xác định được chủ đích là server nào — video báo cáo trông sai thì bắt đầu ở đây.

🚨 저작권 — 경고의 범위를 넓혀야 한다copyright — the warning has to be widerbản quyền — cảnh báo phải rộng hơn

§8.6에 적은 「knia-analysis는 사실상 책을 담고 있다」는 맞지만 충분하지 않다. 같은 성질의 노출이 네 군데 더 있다.

The note in §8.6 — that knia-analysis effectively contains the book — is true but not sufficient. The same exposure exists in four more places.

Ghi chú ở §8.6 — knia-analysis thực tế chứa cuốn sách — đúng nhưng chưa đủ. Cùng rủi ro có ở bốn chỗ nữa.

knia-analysis가장 심하다 — 책 챕터 PDF 자체(365쪽, 11MB)가 추적되고 있고, 쪽별 텍스트 덤프 365개, 도표 페이지 렌더 이미지 111장the worst — the chapter PDF itself (365 pages, 11 MB) is tracked, with 365 per-page text dumps and 111 rendered page imagestệ nhất — chính PDF chương (365 trang, 11 MB) được track, kèm 365 bản văn bản theo trang và 111 hình trang đã render
new-kniaPDF도 페이지 이미지도 없다. 대신 201개 도표의 전문 덤프(사고상황·적용범위·해설 원문 + 가감요소 1,660행), 가드마다 붙은 원문 인용 123건, 리뷰 문서의 원문 블록 170개. ⚠️ 그리고 별개의 문제 — .mp4 111개(AI Hub 블랙박스 영상 106편)가 추적되고 있다no PDF and no page images — but a full-text dump of 201 charts (situation, scope and commentary verbatim, plus 1,660 modifier rows), 123 verbatim source quotes inside the guards, and 170 원문 blocks in the review document. ⚠️ And a separate problem: 111 tracked .mp4 files (106 AI Hub dashcam clips)không PDF hay hình trang — nhưng toàn văn 201 biểu đồ (tình huống, phạm vi, chú giải nguyên văn, thêm 1,660 dòng điều chỉnh), 123 trích dẫn nguyên văn trong guard, 170 khối 원문 trong tài liệu xem xét. ⚠️ Vấn đề riêng: 111 tệp .mp4 được track (106 clip camera hành trình AI Hub)
knia-api그 charts.json의 권위 사본과 분쟁 결정문 2,460건. 원문을 그대로 내보내는 것이 이 레포의 존재 이유다the authoritative copy of that charts.json plus 2,460 dispute decision texts. Passing the source text through is what this repo is forbản có thẩm quyền của charts.json đó cùng 2,460 văn bản quyết định tranh chấp. Truyền nguyên văn nguồn chính là mục đích kho này
ams-1080knia-car-pack.json에 108개 도표 원문 산문과 가감요소 824행knia-car-pack.json carries verbatim prose for 108 charts and 824 modifier rowsknia-car-pack.json mang văn xuôi nguyên văn cho 108 biểu đồ và 824 dòng điều chỉnh
🚨 visus 자신itselfchính nódata/knia/charts.json이 책의 산문을 담고 있다 — 201개 도표(차 108 · 거 55 · 보 38)에 dispute_story·negligence_definitions·factor_notes까지 들어 있다. 상류 세 레포만 경고하면 지금 돌아가는 레포를 빠뜨린다. ⚠️ 경로 보정 — 이 문서는 앞서 data/charts_ko.json이라고 적었는데, 그 파일은 master에도 stage에도 지금은 없다. 커밋 c903048(「monolith (V-D18): KNIA corpus vendored into data/knia」)이 코퍼스를 data/knia/로 옮기면서 지웠다. 옛 경로는 로컬 체크아웃이 오래된 커밋에 멈춰 있을 때만 보인다data/knia/charts.json carries the book’s prose — 201 charts (108 car-to-car, 55 motorcycle, 38 pedestrian), with dispute_story, negligence_definitions and factor_notes alongside. ⚠️ Path correction: this document said data/charts_ko.json earlier, and that file exists on neither master nor stage today — commit c903048 ("monolith (V-D18): KNIA corpus vendored into data/knia") removed it when the corpus moved. The old path is visible only in a local checkout parked on an older commit. A warning scoped to the three upstream repos would miss the repo that is running.data/knia/charts.json mang văn xuôi của sách — 201 biểu đồ (108 xe-với-xe, 55 xe máy, 38 người đi bộ), cùng dispute_story, negligence_definitions, factor_notes. ⚠️ Sửa đường dẫn: tài liệu từng nói data/charts_ko.json; tệp ấy không có trên master lẫn stage hôm nay — commit c903048 (‘monolith (V-D18): KNIA corpus vendored into data/knia’) xóa nó khi chuyển dữ liệu. Đường cũ chỉ thấy ở checkout cục bộ dừng tại commit cũ. Cảnh báo chỉ khoanh ba kho upstream sẽ bỏ lỡ chính kho đang chạy.

⚠️ 그리고 레포들이 서로 반대로 적어 두었다. knia-api는 권리가 확보되어 있다고 적는다 — "콘텐츠 사용권은 KB(KNIA 회원사)를 통해 확보되어 있으며, 데모와 운영 모두에 적용된다". ams-1080은 내부에 두라고 적는다 — "KNIA 페이지는 이 자료가 개인 참고용이며 출판·배포용이 아니라고 적는다. 법무·권리자 승인 전까지 이 산출물을 내부에 둘 것". 같은 프로젝트, 같은 보름 사이, 어느 쪽도 계약서를 인용하지 않는다.

⚠️ And the repos state opposite positions. knia-api says the rights are cleared — "content rights are secured through KB, a KNIA member company, and apply to both demo and production." ams-1080 says keep it internal — "KNIA’s page says the material is for personal reference and not for publication or distribution. Keep this artifact internal until legal or owner approval." Same project, same fortnight, and neither cites a contract.

⚠️ Các kho tuyên bố ngược nhau. knia-api nói quyền đã được làm rõ — ‘quyền nội dung được bảo đảm qua KB, công ty thành viên KNIA, áp dụng cả demo lẫn production.’ ams-1080 nói giữ nội bộ — ‘Trang KNIA nói tài liệu chỉ tham khảo cá nhân, không xuất bản hay phân phối. Giữ artifact nội bộ cho đến khi pháp lý hoặc chủ sở hữu chấp thuận.’ Cùng dự án, cùng hai tuần, không bên nào dẫn hợp đồng.

⭐ 권고: 누군가 KB 사용권 문서를 실제로 내놓기 전까지는 제한적인 쪽을 따르는 것이 맞다. 다만 허용 주장이 문서로 존재한다는 사실도 같이 기록해 둔다 — 나중에 이 질문이 다시 올라올 때 처음부터 다시 찾지 않도록.

⭐ Recommendation: treat the restrictive reading as governing until someone produces the KB licence — while recording that the permissive claim exists in writing, so that when this question comes back nobody has to find it again from scratch.

⭐ Khuyến nghị: áp dụng cách hiểu hạn chế cho tới khi có giấy phép KB — đồng thời ghi rằng tuyên bố cho phép có văn bản, để khi câu hỏi quay lại không phải tìm từ đầu.

✅ 코드 세 레포를 직접 열어 확인했다. new-knia와 ams-1080은 커밋 하나짜리 스냅샷(2026-10-14)이라 날짜는 파일 내용에서 왔고, knia-api만 진짜 이력을 가진다. 확인하지 못한 것: 게이트 해석을 KNIA가 어느 쪽으로 확인해 줄지, 41080에 실제로 어느 서버가 응답하는지, 골드셋 273편 중 ams-1080에 없는 5편이 어디서 왔는지, knia-api가 지금 어딘가 배포되어 있는지. 다만 기록이 범위를 좁혀 준다 — 2026-09-16의 조율 메시지가 「데모 호스트 옆에 배포하라」고 넘기면서 「이미 로컬에서 돌고 있다」, 「knia-api는 아직 아무 데서도 쓰이지 않는다」고 적는다. 즉 9월 중순에 배포가 진행 중이었고, 지금도 응답하는지는 확인되지 않았다.

✅ code All three were opened directly. new-knia and ams-1080 are single-commit snapshots (2026-10-14), so their dates come from file contents; only knia-api has real history. Not verified: which gate reading KNIA would confirm, which server actually answers on 41080, where the 5 gold-set clips absent from ams-1080 came from, and whether knia-api is deployed anywhere today — though the record does narrow it: on 2026-09-16 a coordinator message hands it to a track to deploy "next to the demo host", noting it "runs locally already" and that "knia-api isn’t used anywhere" yet. So it was being deployed in mid-September; whether it still answers is unverified.

✅ mã Đã mở trực tiếp cả ba. new-knia và ams-1080 là ảnh chụp một commit (2026-10-14), nên ngày lấy từ nội dung; chỉ knia-api có lịch sử thật. Chưa xác minh: KNIA xác nhận cách hiểu guard nào, server thực trả cổng 41080, nguồn 5 clip chuẩn thiếu ở ams-1080, knia-api hiện triển khai ở đâu — dù bản ghi thu hẹp: ngày 2026-09-16, điều phối viên giao một nhánh triển khai ‘bên cạnh host demo’, ghi ‘đã chạy cục bộ’ và ‘knia-api chưa được dùng ở đâu’. Vậy nó đang được triển khai giữa tháng 9; nay còn trả lời không thì chưa xác minh.

8.12resolve-questions — 질문을 산문이 아니라 자료구조로 만든 마지막 시도 — the last attempt to make the questions a data structure rather than prose — nỗ lực cuối biến câu hỏi thành cấu trúc dữ liệu thay vì văn xuôi 🔬 정밀🔬 Chi tiết

이것이 「책 → 데이터」 줄의 끝이다. §8.6의 knia-dag가 책을 사실 기록으로 만들었다면, resolve-questions는 그 위에 사정사가 실제로 물어볼 질문 목록과, 답을 비율로 바꾸는 규칙을 올린다. 그리고 한 가지를 고집한다 — 질문은 글이 아니라 변수다. 질문 하나가 정해진 답 집합을 가진 변수이고, 도표의 분기는 (질문, 답) 쌍의 논리곱이며, 맞추기는 코드가 하는 소거다.

This is the end of the book-into-data line. Where knia-dag in §8.6 turned the book into fact records, resolve-questions puts on top of them the list of questions an adjuster’s tool actually asks, and the rules that turn the answers into a split. And it insists on one thing: a question is not prose, it is a variable — one with a fixed set of legal answers. A chart branch is a conjunction of (question, answer) pairs, and matching is elimination done in code.

Đây là điểm cuối dòng sách thành dữ liệu. knia-dag ở §8.6 biến sách thành bản ghi sự kiện; resolve-questions đặt lên đó danh sách câu công cụ điều tra viên thực hỏi, cùng luật biến đáp án thành tỷ lệ. Nó khăng khăng một điều: câu hỏi không phải văn xuôi mà là biến — có tập đáp án hợp lệ cố định. Nhánh biểu đồ là hội các cặp (câu hỏi, đáp án), khớp là loại trừ thực hiện bằng mã.

"A finite-domain CSP encoding of KNIA’s charts, plus a DNF rulebase over it." — and on where the model is allowed to stand: "Inside the loop, as a leaf — never as the loop."

‘Mã hóa CSP miền hữu hạn của biểu đồ KNIA, cùng cơ sở luật DNF trên đó.’ — vị trí mô hình được phép: ‘Bên trong vòng lặp, như lá — không bao giờ làm chính vòng lặp.’

「KNIA 도표의 유한 도메인 CSP 인코딩, 그리고 그 위의 DNF 규칙베이스」 — 그리고 모델이 설 자리에 대해: 「루프 안에, 잎으로. 절대 루프 자체로는 아니다.」 의사코드에서 eliminate·settled·nextQuestion은 전부 코드이고, LLM이 하는 일은 ask(q) 하나뿐이다.

⭐ 끝까지 따라가 보기 — 차43-1 「차로 감소 도로(합류) 사고」⭐ Walk it — 차43-1, the merge-where-a-lane-ends chart⭐ Đi hết — 차43-1, biểu đồ nhập làn nơi làn kết thúc

단계stepbước무엇이 되는가what it becomestrở thành gì
책의 사실the book’s recordbản ghi của sách기본 {A:40, B:60}, A = 본선차, B = 합류차, 가감요소 네 줄, 출처 p.370. ⭐ knia-analysis의 leaf와 행 단위로, 부호까지 일치한다 — 서로 모르는 두 도출이 같은 답에 도달했다(§8.11)base {A:40, B:60}, A = the mainline car, B = the merging car, four modifier rows, anchored at p.370. ⭐ It agrees with knia-analysis’s leaf row for row and sign for sign — two derivations that do not know about each other reaching the same answer (§8.11)cơ sở {A:40, B:60}, A = xe đường chính, B = xe nhập làn, bốn dòng điều chỉnh, neo p.370. ⭐ Khớp lá knia-analysis từng dòng, từng dấu — hai suy dẫn không biết nhau cùng tới đáp án (§8.11)
분기가 셋이 된다it becomes three branchestrở thành ba nhánh책의 「일반 도로 및 고속도로(자동차전용도로 등 포함)」라는 한 구절이 도로 법적 유형에 대한 선언이기 때문이다. 세 분기는 c.road.legal_class만 다르고 나머지는 바이트 단위로 같다. ⭐ 이것이 「284 분기」의 축소판이다 — 도표 108개, 변형 124개, 그중 이 하나가 284개 중 셋으로 펼쳐진다because the book’s phrase "ordinary roads and expressways (including motor-vehicle-only roads)" is a disjunction over road class. The three branches differ only in c.road.legal_class and are byte-identical otherwise. ⭐ This is the "284 branches" in miniature: 108 charts, 124 variants, and this one variant expanding into three of the 284vì câu sách ‘đường thông thường và cao tốc (gồm đường chỉ dành xe cơ giới)’ là phép tuyển theo loại đường. Ba nhánh chỉ khác c.road.legal_class, phần còn lại giống từng byte. ⭐ Đây là ‘284 nhánh’ thu nhỏ: 108 biểu đồ, 124 biến thể, một biến thể này mở ra ba trong 284
조건이 질문이 된다the conditions become questionsđiều kiện thành câu hỏi분기의 다섯 요구 조건이 각각 사람이 답할 수 있는 질문으로 풀린다 — 「두 차량은 서로 어떤 방향으로 진행하고 있었습니까?」 · 「최초 충돌은 어떤 형태였습니까?」 · 「{차량}는 그 자리에서 어떤 통행을 하고 있었습니까?」 · 「사고 장소의 도로 법적 유형은 무엇입니까?」each of the branch’s five requirements resolves into a question a person can answer: "In what directions were the two vehicles travelling relative to each other?", "What form did the first contact take?", "What kind of passage was {vehicle} making at that spot?", "What is the legal road class at the scene?"mỗi yêu cầu trong năm yêu cầu nhánh thành câu người trả lời được: ‘Hai xe đi theo hướng nào so với nhau?’, ‘Tiếp xúc đầu tiên có dạng gì?’, ‘{vehicle} đang đi qua vị trí đó theo kiểu nào?’, ‘Loại đường pháp lý tại hiện trường là gì?’
⭐ 두 가지가 특히 잘 되어 있다 — 지금 제품에 그대로 쓸 수 있는 생각이다two things done particularly well — ideas usable in the product as they standhai việc làm rất tốt — ý tưởng dùng được ngay trong sản phẩm

① 답마다 책의 말이 따라붙는다. 「합류」라는 답 하나가 자기 출처를 들고 다닌다 — koSource: {kind: "chartTitle", chartId: "차43-1", quote: "차로 감소 도로 (합류) 사고"}. ⭐ 그래서 화면에 뜨는 선택지가 곧 책의 문구다. 게다가 한국어가 두 겹이다 — 사정사용 labelKo(「합류 차로 주행」)과 운전자용 labelKoPlain(「차로가 줄며 합쳐지는 지점에서 부딪힘」). 같은 사실을 두 독자에게 다르게 말하는 것이 데이터에 들어 있다.

① Every answer carries the book’s own words. The single answer "merge" travels with its provenance: koSource: {kind: "chartTitle", chartId: "차43-1", quote: "차로 감소 도로 (합류) 사고"}. ⭐ So the option on screen is the book’s phrasing. And the Korean comes in two registers — labelKo for the adjuster ("travelling in the merging lane") and labelKoPlain for the driver ("struck where a lane narrows and joins"). Saying one fact differently to two readers is built into the data.

① Mỗi đáp án mang nguyên lời sách. Đáp án ‘nhập làn’ đi cùng nguồn gốc: koSource: {kind: "chartTitle", chartId: "차43-1", quote: "차로 감소 도로 (합류) 사고"}. ⭐ Lựa chọn trên màn hình chính là câu trong sách. Tiếng Hàn có hai văn phong — labelKo cho điều tra viên (‘đang đi trong làn nhập’) và labelKoPlain cho tài xế (‘va chạm nơi làn thu hẹp và nối vào’). Nói cùng một sự kiện khác nhau cho hai người đọc được xây trong dữ liệu.

⭐ ② 질문은 「A」나 「B」를 입에 담지 않는다. 제목이 "{vehicle}는 그 자리에서 어떤 통행을 하고 있었습니까?" — 자리표시자다. 이유가 레포에 적혀 있다: 「A와 B는 도표의 자리이고, 도표가 맞아떨어지기 전에는 존재하지 않는다」. 이것이 §2.1의 A/B 규율을 질문 수준에서 강제한 모습이고, §2.2가 보인 역할 뒤집힘을 애초에 불가능하게 만드는 방법이다.

⭐ ② The questions never say "A" or "B". The title reads "What kind of passage was {vehicle} making at that spot?" — a placeholder. The repo gives the reason: "A and B are the chart’s slots and do not exist until a chart matches." That is §2.1’s A/B discipline enforced at the level of the question, and it is how the role inversion in §2.2 is made impossible rather than corrected after the fact.

⭐ ② Câu hỏi không bao giờ nói ‘A’ hay ‘B’. Tiêu đề là ‘{vehicle} đang đi qua vị trí đó theo kiểu nào?’ — biến giữ chỗ. Kho nêu lý do: ‘A/B là ô của biểu đồ, chưa tồn tại tới khi biểu đồ khớp.’ Đó là kỷ luật A/B §2.1 được thực thi ngay ở câu hỏi, khiến đảo vai §2.2 bất khả thay vì sửa sau.

⭐ 「중대한 과실」은 질문이 아니라 양동이다 — 그리고 그 밑이 비어 있었다"gross negligence" is not a question but a bucket — and its bottom was missing‘lỗi nghiêm trọng’ không phải câu hỏi mà là nhóm — và nó thiếu đáy

이 레포가 발견한 함정 중 가장 값진 것이다. 「중대한 과실」은 사정사가 예/아니오로 답할 항목이 아니다 — 여러 사실이 모여서 만들어지는 분류다. 그래서 이 레포는 그 분류가 무엇으로부터 유도되는지를 먼저 공표해야 했다:

The most valuable trap this repo found. "Gross negligence" is not something an adjuster answers yes or no — it is a category assembled out of several facts. So the repo had to publish what it is derived from before an engine could compute it:

Cái bẫy giá trị nhất kho tìm ra. ‘Lỗi nghiêm trọng’ không phải thứ điều tra viên trả có/không — nó là nhóm ghép từ nhiều sự kiện. Vì vậy kho phải công bố nó được suy từ gì trước khi bộ máy tính được:

"label": "중대한 과실",
"constituents": ["driver.drowsy eq true", "driver.license_status eq unlicensed",
  "driver.bac_percent gte 0.03", "driver.speed_over_limit_kmh gte 20",
  "driver.drug_impaired eq true", "driver.joint_dangerous_driving eq true"],
"derivation": {"op": "any", "clauses": [...]}

🚨 그리고 이것이 레포가 스스로 「함정」이라고 이름 붙인 것이다 — 「라벨로 공표된 분류는 엔진이 적용할 수 있는 분류가 아니다. 918개 가감요소 행 중 496개가 유도된 양동이를 인용하는데, 그 양동이가 유도되어 나오는 사실 29개 중 28개에는 질문이 없었다」.

🚨 And the repo names this as one of the project’s traps: "A category published as a label is not a category the engine can apply. 496 of the 918 modifier rows cited a derived bucket — and 28 of the 29 facts they are derived FROM had no question."

🚨 Chính kho gọi đây là bẫy dự án: ‘Nhóm được công bố như nhãn chưa phải nhóm bộ máy áp dụng được. 496/918 dòng điều chỉnh dẫn nhóm suy ra — và 28/29 sự kiện NGUỒN để suy ra chúng không có câu hỏi.’

⭐ 왜 이것이 후임자에게 중요한가: 「현저한 과실 +10」을 적용하려면 그 아래 사실들을 물을 수 있어야 한다. 질문이 없으면 그 행은 영원히 적용되지 않거나, 근거 없이 적용된다. §4.0의 협의 화면에서 「자료 필요」가 34개 중 27개인 것이 바로 이 구조의 현재 모습이다.

⭐ Why it matters to a successor: to apply "현저한 과실 +10" you must be able to ask about the facts underneath it. Without a question, that row is either never applied or applied without evidence. The "needs evidence" count of 27 of 34 on the negotiation screen in §4.0 is what this structure looks like today.

⭐ Vì sao người tiếp quản cần biết: muốn áp ‘현저한 과실 +10’ phải hỏi được sự kiện bên dưới. Không có câu hỏi, dòng đó không bao giờ áp hoặc áp không bằng chứng. Số ‘cần bằng chứng’ 27/34 trên màn hình thương lượng §4.0 là hình ảnh cấu trúc này hôm nay.

⭐ 산수도 정직하다 — 100을 넘으면 자르지 않고 거부한다the arithmetic is honest too — over 100 it rejects rather than clampsphép tính cũng trung thực — vượt 100 thì từ chối thay vì chặn

가감요소 조합이 100을 넘으면 어떻게 할 것인가. 이 레포의 답이 §3.2·§8.6의 엔진들과 정반대다:

What to do when a combination of modifiers runs past 100. This repo’s answer is the opposite of the engines in §3.2 and §8.6:

Làm gì khi tổ hợp điều chỉnh vượt 100. Kho này trả lời ngược các bộ máy ở §3.2 và §8.6:

「100을 넘으면 100으로 자르는 것이 아니라, 그렇게 고른 수정요소 조합 자체가 잘못됐다고 본다. 자르면 답이 나오고, 거부하면 사람이 다시 본다.」

"Running past 100 does not mean cutting back to 100 — it means the combination of modifiers that was chosen is itself wrong. Clamp and you get an answer; reject and a person looks again."

‘Vượt 100 không có nghĩa cắt về 100 — nghĩa là chính tổ hợp điều chỉnh đã chọn sai. Chặn thì có đáp án; từ chối thì có người xem lại.’

🚨 대조해 보라. §3.2에서 본 대로, 운영 엔진에는 게이트가 없고 최종 클램프만 있다 — 비율이 110~130으로 튀어도 클램프가 조용히 감춘다. 여기서는 같은 상황이 거부되고 사람에게 간다. 두 설계 중 어느 쪽이 옳은지는 분명하고, 옳은 쪽은 출하되지 않았다.

🚨 Set that against §3.2, where the production engine has no gate and only a final clamp — ratios run to 110–130 and the clamp hides it silently. Here the same situation is rejected and goes to a person. Which of the two designs is right is not in doubt, and the right one is not the one that shipped.

🚨 Đặt cạnh §3.2, nơi bộ máy production không cổng và chỉ chặn cuối — tỷ lệ lên 110–130 và phép chặn âm thầm che nó. Ở đây cùng tình huống bị từ chối rồi chuyển người. Thiết kế nào đúng không có gì nghi ngờ; bản đúng không phải bản được phát hành.

🚨 그리고 「언제 멈출 것인가」를 재어 두었다 — 47.3% 대 3.8%and it measured when to stop asking — 47.3% against 3.8%đã đo khi nào ngừng hỏi — 47.3% so với 3.8%

이 숫자가 이 레포에서 가장 중요하다. 후보들이 전부 같은 비율을 가리키면 거기서 멈추고 싶어진다. 멈추면 안 된다는 것을 재어서 보였다.

This is the most important number in the repo. When every surviving candidate shares the same ratio, it is tempting to stop there. It measured what stopping costs.

Đây là số quan trọng nhất trong kho. Khi mọi ứng viên còn sống cùng tỷ lệ, rất dễ muốn dừng. Kho đo cái giá của việc dừng.

같은 비율이 보이는 즉시 멈추면stop as soon as the ratios agreedừng ngay khi tỷ lệ đồng ý🚨 47.3%가 조용히 틀린다 silently wrong sai âm thầm
거기서 세 질문만 더 물으면ask three more questions firsthỏi thêm ba câu trước✅ 3.8%

⭐ 질문 세 개가 오답률을 열 배 넘게 떨어뜨린다. 그리고 규칙이 같이 적혀 있다 — 「살아 있는 후보가 전부 같은 비율을 공유한다고 해서 멈추지 말 것. 살아남은 후보가 아직 요구하는 것에서 질문을 더 뽑아 물을 것. 그러다 후보 집합이 비면 답들이 서로 모순된다는 뜻이니, 비율을 내지 말고 멈추고 올려 보낼 것」. 공표된 플래너는 284개 분기를 전부 평균 10.9개 질문으로 가른다.

⭐ Three questions cut the error rate by more than tenfold. The rule is published alongside it: "Do not stop when every live candidate shares a ratio. Ask more questions drawn from what the surviving candidate still requires; if the live set empties, the answers contradict each other — stop and escalate rather than return a ratio." The shipped planner resolves all 284 branches at a mean of 10.9 questions.

⭐ Ba câu giảm tỷ lệ lỗi hơn mười lần. Quy tắc công bố kèm: ‘Đừng dừng khi mọi ứng viên sống cùng tỷ lệ. Hỏi thêm từ những gì ứng viên sống còn yêu cầu; nếu tập sống rỗng, các đáp án mâu thuẫn — dừng và nâng cấp thay vì trả tỷ lệ.’ Planner phát hành giải cả 284 nhánh, trung bình 10.9 câu.

🚨 그리고 이것이 §8.1의 「조용한 오확정」과 같은 문제다 — question-ledger는 그것을 사례로 발견했고(영상 093, 80점 차이), resolve-questions는 비율로 재었다(47.3%). 두 레포가 서로를 모르는 채 같은 결함을 찾아냈다.

🚨 And this is the same defect as §8.1’s "silent false confirmations" — question-ledger found it as cases (video 093, an 80-point swing); resolve-questions measured it as a rate (47.3%). Two repos, not aware of each other, finding the same flaw.

🚨 Cùng khuyết điểm ‘xác nhận sai âm thầm’ §8.1 — question-ledger tìm nó qua các vụ (video 093, lệch 80 điểm); resolve-questions đo nó thành tỷ lệ (47.3%). Hai kho không biết nhau tìm cùng lỗi.

⚠️ README가 자기 데이터보다 낡았다 — 이번에도the README is stale against its own data — againREADME lại lỗi thời so với dữ liệu của chính nó
README출하된 파일the shipped filetệp đã phát hành
질문questionscâu hỏi265254
전제 간선presupposition edgescạnh giả định trước7357
요구 조건requirement rowsdòng yêu cầu2,6312,527
검사 / 발견된 결함checks / defects foundkiểm tra / lỗi tìm thấy34 / 044 / 23

모순이 아니라 날짜 문제다. README는 2026-08-18, 데이터 파일은 08-24이고, 그 뒤 커밋들이 질문을 철회했다 — 예를 들어 「분모는 261이 아니라 113이다 — 아무것도 고르지 못하는 질문 셋을 철회한다」. ⭐ 그런데 284는 움직이지 않았다. 이 레포에서 수치를 인용할 일이 있으면 README가 아니라 JSON을 쓸 것 — §8.11의 new-knia, §8.1의 question-ledger와 세 번째로 같은 함정이다.

Not a contradiction but a dating artifact. The README is from 2026-08-18 and the data files from 08-24, after which later commits withdrew questions — for instance "The denominator is 113, not 261 — withdraw three questions that select nothing." ⭐ 284 did not move. Quote the JSON, not the README — the third instance of the same trap, after new-knia in §8.11 and question-ledger in §8.1.

Không mâu thuẫn mà là lệch thời điểm. README từ 2026-08-18, dữ liệu từ 08-24; commit sau rút câu hỏi — ví dụ ‘Mẫu số là 113, không phải 261 — rút ba câu không chọn được gì.’ ⭐ 284 không đổi. Trích JSON, đừng trích README — lần thứ ba cùng bẫy, sau new-knia ở §8.11 và question-ledger ở §8.1.

⭐ 그리고 남은 결함 다섯 개를 스스로 열어 두었다 — 여기서부터 이어가면 된다and it leaves five defects open — this is where to pick it upcòn để mở năm lỗi — đây là nơi tiếp tục

레포가 검사 44개 중 5개를 「열림」으로 남겨 두었다. 감추지 않고 적어 둔 것이고, 후임자에게는 작업 목록이다.

The repo leaves 5 of its 44 checks open. They are recorded rather than hidden, and for a successor they are a work list.

Kho để 5/44 kiểm tra mở. Được ghi, không che; với người tiếp quản đó là danh sách việc.

id무엇인가what it isnó là gì건수countsố lượng
X12책이 말하는 사실인데 판정에 한 번도 닿지 못한다a fact KNIA states that never reaches a decisionsự kiện KNIA nêu nhưng không bao giờ tới quyết định7
🚨 X11🚨 분기가 요구하는 사실인데 그것을 표현할 수 있는 질문이 없다🚨 a fact a branch requires that no question can express🚨 sự kiện nhánh yêu cầu nhưng không câu hỏi nào biểu đạt được4
X1서로 배타적인 답들이 여러 질문에 흩어져 있고, 배타성을 강제하는 것이 없다mutually exclusive answers split across questions, with nothing enforcing the exclusionđáp án loại trừ nhau bị tách qua nhiều câu, không gì thực thi loại trừ8
X6아무것도 반응하지 않는 답an answer nothing in the model reacts tođáp án mà không gì trong mô hình phản ứng3
W4한 질문이 두 층에 두 번 공표됨one question published twice, once in each layermột câu công bố hai lần, mỗi tầng một lần1

⭐ X11을 보라 — 이 문서 전체의 주제가 검사 항목으로 적혀 있다. 「분기가 요구하는 사실인데 그것을 표현할 질문이 없다」는 §2.2의 「정차 후 출발을 말할 수 없다」와 정확히 같은 문장이다. 이 레포는 그 결핍을 추상적으로 느낀 것이 아니라 세어서 4건으로 등록해 두었다.

⭐ Look at X11 — this document’s whole theme written as a check. "A fact a branch requires that no question can express" is the same sentence as §2.2’s "stop-then-go cannot be said". This repo did not feel that deficiency abstractly — it counted it and logged four instances.

⭐ Nhìn X11 — toàn bộ chủ đề tài liệu viết thành kiểm tra. ‘Sự kiện nhánh yêu cầu nhưng không câu hỏi nào biểu đạt được’ là cùng câu với ‘không nói được dừng rồi đi’ ở §2.2. Kho không cảm nhận thiếu sót trừu tượng — nó đếm và ghi bốn trường hợp.

✅ 코드 수치는 전부 출하된 JSON에서 직접 세었다. 이미지는 한 장도 없다 — 이 레포는 책의 페이지를 복제하지 않는다. 다만 out/knia-clean_table.json과 질문의 koSource.quote가 책의 한국어 원문을 짧게 인용하므로, §8.11의 저작권 주의가 정도는 약하게 여기에도 걸린다 — 페이지 복제가 아니라 짧은 인용이다.

✅ code Every figure was counted directly from the shipped JSON. There are no images at all — this repo reproduces no page of the book. It does carry short verbatim Korean quotations in out/knia-clean_table.json and in the questions’ koSource.quote, so §8.11’s copyright note applies here too, though more weakly: short quotations, not page reproductions.

✅ mã Mọi số đếm trực tiếp từ JSON phát hành. Không hình nào — kho không tái tạo trang sách. Có trích dẫn Hàn nguyên văn ngắn ở out/knia-clean_table.json và koSource.quote của câu hỏi, nên ghi chú bản quyền §8.11 cũng áp dụng, nhưng nhẹ hơn: trích ngắn, không sao trang.

⚠️ 47.3%와 47.8% — 둘 다 맞다, 그리고 같은 수치가 아니다47.3% and 47.8% — both are right, and they are not the same measurement47.3% và 47.8% — cả hai đúng, không phải cùng phép đo

기록에는 두 수치가 나란히 있고, 서로 다른 실험이다. 47.3%는 확인 깊이 스윕의 깊이 0 지점이다(질문 9.9개에 조용한 오확정 47.3%, 깊이 3에서 질문 12.4개에 3.8%). 47.8%는 T18 — 답 하나를 일부러 틀리게 넣었을 때 조용히 확정되는 비율이고, 여기에는 같은 조건에서 스스로 멈추는 비율이 0.1%라는 짝 수치가 붙어 있다.

The record carries both figures side by side, and they are different experiments. 47.3% is the depth-0 point of the confirmation-depth sweep (47.3% silently wrong at 9.9 questions; 3.8% at 12.4 questions at depth 3). 47.8% is T18 — the rate when one answer is deliberately made wrong, and it comes with a companion figure: the stopping rule fires on its own in 0.1% of those cases.

Bản ghi giữ hai số cạnh nhau, thuộc thí nghiệm khác. 47.3% là điểm độ sâu 0 trong quét độ sâu xác nhận (47.3% sai âm thầm ở 9.9 câu; 3.8% ở 12.4 câu tại độ sâu 3). 47.8% là T18 — tỷ lệ khi cố ý làm một đáp án sai, đi kèm số: quy tắc dừng tự kích hoạt ở 0.1% các vụ đó.

⭐ 그 0.1%가 이 문단에서 가장 날카로운 숫자다. 「후보들이 일치하면 멈춘다」는 규칙은 사실상 스스로 멈추지 않는다 — 멈추는 것은 틀린 답 위에서다. new-knia는 미상=0에서 멈추는데, 그것이 바로 47.8%로 측정된 그 규칙이고 자기 쪽 수치는 없다.

⭐ That 0.1% is the sharpest number here. The rule "stop once the candidates agree" almost never fires on its own — when it stops, it stops on a wrong answer. new-knia stops at 미상 = 0, which is exactly the rule measured at 47.8%, and it has no equivalent number of its own.

⭐ 0.1% là con số sắc nhất ở đây. Quy tắc ‘dừng khi ứng viên đồng ý’ gần như không tự kích hoạt — khi dừng thì dừng trên một đáp án sai. new-knia dừng ở 미상 = 0, đúng quy tắc đo ra 47.8%, và không có số tương đương riêng.

8.13받침 레포 셋 — 정답셋·신호 벤치·비식별 · Three supporting repositories — the gold set, the signal bench, and redaction · Ba kho hỗ trợ — bộ chuẩn, băng thử tín hiệu, công cụ ẩn danh

세 레포 모두 작은데 결론이 크다. 그리고 셋 중 둘은 이 문서가 먼저 잘못 적었던 것이다.

All three are small repositories with large conclusions — and on two of them this document had it wrong.

Cả ba đều là kho nhỏ, kết luận lớn — ở hai kho, tài liệu này từng sai.

① labeling — 「라벨링을 못 했다」가 아니다① labeling — it is not that they never laboured① labeling — không phải họ chưa từng làm

보정. 이 문서는 앞서 「본 라벨링 직전에 멈춘」다고 적었다. 틀렸다. 작업자 A는 평가셋 68편을 전부 라벨링했고(data/gold/archive_engine011_A/에 NNN__A.json 68개), 그 답으로 실제 엔진 거동 측정까지 나왔다.

Correction. This document said the work "stopped just before the labelling pass". That is wrong. Labeller A labelled all 68 clips of the eval set (68 NNN__A.json files in data/gold/archive_engine011_A/), and a real measurement of engine behaviour came out of those answers.

Đính chính. Tài liệu từng nói việc ‘dừng ngay trước lượt gán nhãn’. Sai. Người gán nhãn A đã gán đủ 68 clip đánh giá (68 tệp NNN__A.json ở data/gold/archive_engine011_A/), và các đáp án đó tạo ra phép đo thật về hành vi bộ máy.

실제로 일어난 일은 더 배우울 것이 많다. 2026-09-04에 「추월」의 정의가 바뀜고, 그 한 가지 때문에 라벨링 전체를 처음부터 다시 했다. 스냅샷 시점의 기록은 「재라벨 중간 점검(9/4 저녁, 18편/68)」에서 멈춰 있다. 정의가 하나 바뀌면 끝난 라벨이 전부 무효가 된다 — §3.3이 말하는 「정의 없는 질문」의 비용이 여기서 실제 금액으로 나타난다.

What actually happened teaches more. On 2026-09-04 the definition of 추월 (overtaking) changed, and that one change restarted the entire labelling pass. The record stops at "re-label checkpoint, evening of 9/4 — 18 of 68". One changed definition invalidated a completed set of labels — this is the cost of §3.3’s undefined questions, showing up as real money.

Điều thực xảy ra dạy nhiều hơn. Ngày 2026-09-04 định nghĩa 추월 (vượt xe) đổi, một thay đổi đó khởi động lại toàn bộ lượt gán nhãn. Bản ghi dừng tại ‘checkpoint gán lại nhãn, tối 9/4 — 18/68’. Một định nghĩa đổi vô hiệu hóa tập nhãn đã hoàn thành — giá của câu hỏi chưa định nghĩa ở §3.3, hiện thành tiền thật.

그리고 작업자 B는 끝내 시작되지 않았다 — 레포 전체에 __B 파일이 0개다. 그래서 merge_gold.py가 계산하도록 만들어진 작업자 간 일치율은 한 번도 나온 적이 없다 — 코드가 작업자가 정확히 둘이 아니면 그 자리에서 종료한다. 문서도 그렇게 적어 둔다 — 「2번째 작업자와의 일치율이 나오기 전이므로」.

And labeller B never started — there are zero __B files anywhere in the repo. So the inter-labeller agreement the code was built to compute has never once been produced: it exits unless there are exactly two labellers. The report says so itself — "because the agreement rate with a second labeller is not in yet".

Người gán nhãn B chưa từng bắt đầu — không tệp __B nào trong kho. Vậy mức đồng thuận liên người mà mã được xây để tính chưa từng được tạo: nó thoát trừ khi có đúng hai người. Chính báo cáo nói — ‘vì tỷ lệ đồng thuận với người thứ hai chưa có’.

⚠️ 단, 그 숫자가 나왔더라도 최종 보고의 「91건 중 63건」과 직접 비교할 수는 없었다. 이쪽은 클립이 아니라 (질문, 당사자) 항목단위로 일치를 셌다 — 클립당 약 11개. 더 잠금, 다른 분모다.

⚠️ Even had it been produced, it would not have been directly comparable with the final report’s "63 of 91". This one counts agreement per (question, party) item — about eleven per clip — not per clip. Finer grained, different denominator.

⚠️ Dù có, cũng không so trực tiếp được với ‘63/91’ trong báo cáo cuối. Ở đây đếm đồng thuận theo mục (câu hỏi, bên) — khoảng mười một mỗi clip — không theo clip. Chi tiết hơn, mẫu số khác.

② entry-signal-bench — 그 76%는 신호가 아니었다② entry-signal-bench — the 76% was not about signals② entry-signal-bench — 76% không phải về tín hiệu

이 문서는 §3.2에서 「76% 모델 간 일치」를 철회했다. 철회는 올바랐고, 이유가 생각보다 하나 더 있다.

This document withdrew a "76% cross-model agreement" in §3.2. The withdrawal was right — and for one more reason than was given.

Tài liệu đã rút ‘76% đồng thuận liên mô hình’ ở §3.2. Rút là đúng — còn thêm một lý do chưa nêu.

측정의 종류가 틀렸다wrong kind of measuresai loại phép đo모델 둘이 서로 같은 답을 했다는 것일 뿐, 정답과 비교한 것이 아니다two models agreed with each other; nothing was compared against a truthhai mô hình đồng ý nhau; không gì được so với sự thật
🔸 재는 대상도 틀렸다🔸 and the wrong feature🔸 và sai đặc trưng그 67/88은 신호가 아니라 「장면 종류」(교차로 모양·직선도로·주차장·고속도로) 일치율이다. 실제 신호 일치율은 60%(9/15)와 64%(14/22)the 67/88 is agreement on scene type — junction shape, straight road, car park, highway — not signals at all. The actual signal agreement figures are 60% (9/15) and 64% (14/22)67/88 là đồng thuận về loại cảnh — dạng giao lộ, đường thẳng, bãi đỗ, cao tốc — hoàn toàn không phải đèn. Số đồng thuận đèn thật là 60% (9/15) và 64% (14/22)
유효성 수치는 없다no validity number existskhông có số hiệu lực이 레포의 신호 관련 수치는 전부 일치율 아니면 응답률이다. 그리고 분모가 27→22→15로 줄어드는데, 답한 판독기만 남기는 조건부 집계라 수치가 위로 편향된다every signal figure here is agreement or commit-rate. And the denominators shrink 27→22→15 because each is conditioned on which readers committed — which biases them upwardmọi số tín hiệu ở đây là đồng thuận hoặc tỷ lệ chốt. Mẫu số giảm 27→22→15 vì điều kiện theo bộ đọc nào chốt — làm lệch lên

③ blackbox-pi — 비식별 도구는 만들어졌고, 실제 영상에 돌아간 적이 없다③ blackbox-pi — the redaction tool was built and never run on real footage③ blackbox-pi — công cụ ẩn danh đã xây, chưa chạy video thật

🚨 후임자가 이것을 쓰기 전에 반드시 읽을 것read this before anyone uses itđọc trước khi ai sử dụng

먼저 범위를 분명히. KB 영상의 비식별은 KB 데이터센터의 자체 공정으로 이뤄졌다(§5.5). 이 레포는 그 공정이 아니다 — 레포 자신의 인수인계 문서가 적어 둔다: 「⚠️ 실제 대시캠 영상에 돌려본 적 없음」, 그리고 번호판 검출률은 「검증되지 않음 — 가장 위험한 미지수」.

Scope first. The KB footage was de-identified by KB’s own process inside their data centre (§5.5). This repository is not that process — its own handoff note says "⚠️ No run on real dashcam footage yet", and plate recall is "unvalidated — the riskiest real-world unknown".

Trước hết là phạm vi. Video KB được ẩn danh bằng quy trình riêng của KB trong trung tâm dữ liệu (§5.5). Kho này không phải quy trình ấy — ghi chú bàn giao tự nói ‘⚠️ Chưa chạy trên video camera hành trình thật’, recall biển số là ‘chưa xác thực — ẩn số thực tế rủi ro nhất’.

그럼에도 적어 두는 이유는, 누군가 이것을 꺼내 쓰면 비식별된 것처럼 보이지만 아닌 파일을 만들게 되기 때문이다. 세 가지를 직접 확인했다:

It is recorded anyway because anyone who picks it up could produce a file that looks redacted and is not. Three things, verified directly in the code:

Vẫn ghi lại vì ai dùng nó có thể tạo tệp trông đã ẩn danh nhưng chưa. Ba điều kiểm trực tiếp trong mã:

🔸 음성은 그대로 지나간다🔸 audio passes straight through🔸 âm thanh đi thẳng qua마지막 mux 단계가 원본에서 오디오를 그대로 가져온다(-map 1:a:0 -c:a aac). 차 안 대화는 전혀 가려지지 않는다, 그리고 레포 어느 문서도 이것을 언급하지 않는다the final mux takes audio from the original (-map 1:a:0 -c:a aac). In-car conversation survives untouched, and no document in the repo mentions itmux cuối lấy âm thanh bản gốc (-map 1:a:0 -c:a aac). Hội thoại trong xe còn nguyên; không tài liệu nào nhắc
🔸 기본값이 되돌릴 수 있는 방식🔸 the default is the reversible mode🔸 mặc định là chế độ đảo ngược được기본값은 pixelate(12×12 블록)이고, 모듈 주석이 직접 적는다 — 「solid만이 잔여 신호를 남기지 않고 복구 불가」, pixelate·gaussian은 다중 프레임 초해상도로 무력화된다. 대시캠은 한 번호판을 수십 프레임 보여 준다 — 정확히 그 조건이다the default is pixelate (a 12×12 grid), and the module’s own docstring says "solid is the only mode that leaves no residual signal and is not recoverable" while pixelate and gaussian are defeatable by multi-frame super-resolution. A dashcam gives dozens of frames of one plate — precisely that conditionmặc định pixelate (lưới 12×12), docstring mô-đun tự nói ‘solid là chế độ duy nhất không để tín hiệu dư, không thể phục hồi’ trong khi pixelate và gaussian bị đánh bại bằng siêu phân giải đa khung. Camera hành trình cho hàng chục khung một biển — đúng điều kiện đó
위치 기록이 같은 폴더에 남는다a location log lands beside itlog vị trí nằm cạnh nótracks.json이 모든 얼굴과 번호판이 언제 어디 있었는지를 그대로 적어 같은 출력 디렉터리에 남는다tracks.json records where and when every face and plate appeared and is written into the same output directorytracks.json ghi nơi và lúc mọi mặt, biển xuất hiện, được ghi cùng thư mục đầu ra

라이선스 쪽에도 막히는 것이 하나 있다 — 레포의 2026-10-08 검토 문서가 얼굴 검출기의 학습 데이터(WIDER FACE)가 비영리(CC BY-NC-ND 4.0)라고 적고, 어떤 납품 구조로도 이것은 남는다고 결론한다 — 즉 제품화하려면 얼굴 모델을 교체해야 한다. 반면 비식별된 영상 자체는 제약이 없다.

There is a licence blocker too — the repo’s 2026-10-08 review records that the face detector’s training data (WIDER FACE) is non-commercial (CC BY-NC-ND 4.0) and concludes that no delivery structure removes it: productising means replacing the face model. The redacted videos themselves are unencumbered.

Còn chặn giấy phép — đợt xem xét 2026-10-08 ghi dữ liệu huấn luyện detector mặt (WIDER FACE) phi thương mại (CC BY-NC-ND 4.0), kết luận không cấu trúc bàn giao nào loại được: thành sản phẩm thì thay mô hình mặt. Bản video đã ẩn danh không bị ràng buộc.

⭐⭐ 라벨된 말뭉치를 읽는 규칙 — A/B는 차가 아니라 도표의 자리다⭐⭐ The rule for reading the labelled corpus — A and B are chart roles, not cars⭐⭐ Quy tắc đọc tập nhãn — A/B là vai biểu đồ, không phải xe

이것을 모르면 말뭉치의 5분의 1을 조용히 버린다. 2026-09-10에 cv-processing이 직접 세어서 정리한 것이다 — 상자가 둘인 클립 659편과 상자가 하나인 클립 168편, 합쳐 827편이다.

Not knowing this silently discards a fifth of the corpus. Counted directly by cv-processing on 2026-09-10: 659 clips with two boxes and 168 with one, 827 in all.

Không biết điều này sẽ âm thầm bỏ một phần năm dữ liệu. cv-processing đếm trực tiếp ngày 2026-09-10: 659 clip có hai hộp, 168 có một, tổng 827.

라벨의 모양what the labels look likehình dạng nhãn편수clipsclip실제 의미what it actually meansý nghĩa thật
상자 둘, 하나는 화면 아래 보닛을 가로지르는 띠two boxes, one a strip across the bottom of the frame, over the hoodhai hộp, một dải ngang đáy khung trên nắp ca-pô643 / 659평범한 1인칭이다. 띠가 자차를 그 도표상의 자리로 표시한 것 — 448편에서 자차가 A, 195편에서 자차가 Bthe ordinary first-person case. The strip marks the ego car in its chart role — ego is A in 448 clips, B in 195trường hợp góc nhìn thứ nhất thông thường. Dải đánh dấu xe gắn camera theo vai biểu đồ — ego là A trong 448 clip, B trong 195
상자 하나one box onlychỉ một hộp168 / 827역시 1인칭이고, 자차를 그리지 않았을 뿐이다. 그 하나는 상대차also first-person, with the ego simply not drawn. The single box is the other partycũng góc nhìn thứ nhất, chỉ không vẽ ego. Hộp duy nhất là xe đối phương
상자 둘, 어느 것도 보닛 위가 아님two boxes, neither on the hoodhai hộp, không hộp nào trên nắp ca-pô16 / 659진짜 3인칭 — 상자가 둘인 클립의 2.4%, 전체 827편의 1.9%genuinely third-person — 2.4% of the two-box clips and 1.9% of all 827thực sự góc nhìn thứ ba — 2.4% clip hai hộp, 1.9% trong tổng 827

🚨 그래서 「자차 상자가 없으면 3인칭」이라는 직관은 틀렸다. Label Studio 지침이 명시한다 — A/B는 도표의 자리이고, 기본적으로 촬영 차량이나 상대차를 뜻하지 않는다. 촬영 차량은 기술 메타데이터일 뿐이다. 이 규칙은 §0.0의 고객차/상대차 어휘에 직접 걸린다 — 라벨의 A/B는 「대시캠이 어느 차에 있었는가」를 알려 주지 않는다. 자차는 역할이 아니라 보닛 띠로 식별된다.

🚨 So the intuition "no ego box means third-person" is wrong. The Label Studio instruction says it outright: A and B are the roles in the chart and do not by default mean the recording vehicle or the opponent; the recording vehicle is technical metadata only. This bears directly on the 고객차 / 상대차 vocabulary in §0.0 — the label's A/B does not tell you which car the dashcam was in. The ego is identified by a hood strip, not by its role.

🚨 Trực giác ‘không hộp ego tức góc nhìn thứ ba’ sai. Hướng dẫn Label Studio nói rõ: A/B là vai trong biểu đồ, không mặc định là xe ghi hình hay đối phương; xe ghi hình chỉ là metadata kỹ thuật. Điều này liên quan trực tiếp từ vựng 고객차 / 상대차 ở §0.0 — A/B của nhãn không nói camera nằm ở xe nào. Ego được nhận bằng dải nắp ca-pô, không phải vai.

🚨 그 오해가 이미 한 평가를 조용히 깎았다the misreading had already shrunk one evaluation, silentlyđọc sai từng âm thầm thu nhỏ một đánh giá

같은 주에 돌린 held-out 검출기 평가가 30편 중 20편에서만 돌았다. 이유는 결과표 어디에도 적혀 있지 않다 — 채점기의 1인칭 규칙이 「자차 상자 없음」을 3인칭으로 보고 건너뛴 것이다. 배제 규칙과 채점기를 다른 손이 썼고, 표에는 분모 경고가 없었다.

A held-out detector evaluation that week ran on only 20 of 30 clips, and the result table said nothing about it: the scorer's first-person rule treated "no ego box" as third-person and skipped them. The exclusion rule and the scorer were written by different hands, and the table carried no denominator warning.

Đánh giá detector giữ lại tuần đó chỉ chạy 20/30 clip, bảng kết quả không nói: quy tắc góc nhìn thứ nhất của scorer coi ‘không hộp ego’ là góc nhìn thứ ba rồi bỏ. Quy tắc loại và scorer do hai người khác viết, bảng không cảnh báo mẫu số.

⭐ 검출기 쪽의 현실도 같은 조사에서 세어 뒀다(36편): 10편에서 검출기가 접촉 시점 또는 그 이후에 보이는 상대차를 놓치고(그런 구간 14개, 합계 약 20초), 다음이 한 차에 상자가 둘 생기는 8편, ID 교체 6편, 화면 밖 복귀 3편, 반사 1편이다. 깨끗한 클립은 4편. 그리고 사람이 상대차를 지목한 30편 중 하나의 ID로 유지되는 것은 14편이고, 나머지 16편은 2~5개의 ID로 쪼개진다.

⭐ The detector-side reality was counted in the same census (36 clips): in 10, the detector loses the visible other party at or after contact (14 such stretches, about 20 seconds in total), then duplicate boxes on one car in 8, 6 ID switches, 3 off-frame returns, 1 reflection. Four clips are clean. And of the 30 clips where a human named the other party, the output keeps it under one ID in 14; in the other 16 it is split across two to five IDs.

⭐ Thực tế phía detector được đếm cùng đợt (36 clip): 10 clip mất đối phương đang nhìn thấy ở hoặc sau tiếp xúc (14 đoạn, tổng khoảng 20 giây), rồi 8 clip có hộp trùng trên một xe, 6 đổi ID, 3 trở lại từ ngoài khung, 1 phản chiếu. Bốn clip sạch. Trong 30 clip người chỉ đối phương, đầu ra giữ một ID ở 14; 16 clip còn lại tách ra hai đến năm ID.

⭐ 그리고 역할을 바꾸면 답이 바뀐다 — 100편 중 93편에서⭐ And flipping the role changes the answer — on 93 of 100 clips⭐ Đảo vai đổi đáp án — trên 93/100 clip

new-knia의 해결기는 ego = A를 하드코딩하고 있었다. 그것이 왜 문제인지는 도표 두 개가 보여 준다 — 차42-2의 가드 「B가 같은 방향에서 뒤따라오다 A를 충격했다」와 차43-2의 「B가 진로변경 중이었다」는 둘 다 B가 움직이는·뒤따르는 차일 것을 요구하는데, 차42-2에서 A는 주차된 차다. 때린 차에 대시캠이 있으면 자차는 B다.

new-knia's resolver hardcoded ego = A. Two charts show why that matters: 차42-2's guard "B, following in the same direction, struck A" and 차43-2's "B was changing lanes" both require B to be the moving or following car — and in 차42-2, A is the parked car. If the dashcam is on the car doing the hitting, the ego is B.

Resolver new-knia hard-code ego = A. Hai biểu đồ cho thấy vì sao quan trọng: guard 차42-2 ‘B đi sau cùng hướng đâm A’ và 차43-2 ‘B đang chuyển làn’ đều cần B là xe di chuyển hoặc đi sau — và trong 차42-2, A là xe đỗ. Camera trên xe đâm thì ego là B.

크기: ego=A는 후보 19.7개, ego=B는 17.2개를 남기고, 100편 중 93편이 둘 사이에서 다른 답을 낸다. 역할 배정은 주변부가 아니라 답 자체를 움직인다.

The size of it: ego=A leaves 19.7 candidates, ego=B leaves 17.2, and 93 of 100 clips answer differently between the two. Role assignment moves the answer itself, not its margins.

Quy mô: ego=A còn 19.7 ứng viên, ego=B còn 17.2, 93/100 clip trả khác giữa hai vai. Gán vai đổi chính đáp án, không phải chỉ biên.

⚠️ 제안과, 같은 기록에 남은 반론 — 둘 다 넘긴다the proposal, and the objection recorded against it — both are handed overđề xuất và phản đối được ghi — bàn giao cả hai

제안: 「배정은 추론이 아니라 입력이어야 한다 — 담당자는 자기 고객의 차를 즉시 안다.」 반론(같은 세션에 기록됨): 담당자가 즉시 아는 것은 누가 상대차인가이지 자차가 A인가 B인가가 아니다. 도표는 조감도(BEV)이고, 자차를 A나 B에 맞추는 일이 바로 그 정황 판단 자체다. 게다가 자차는 영상에 보이지 않고, 추돌이면 상대차도 화면에 없을 수 있다. 그 자리에서 나온 제안이 하나 더 있다 — 그런 경우라면 VLM이 CV보다 나을 수 있다.

The proposal: "the assignment should be an input, not an inference — the adjuster knows which car is their client instantly." The objection, recorded in the same session: what the adjuster knows instantly is who the other party is, not whether the ego is A or B. The chart is a bird's-eye view, and fitting the ego onto A or B is the circumstantial judgment itself. Besides, the ego is never visible in the video, and in a rear-end case the other car may not be on screen either — which is where the other suggestion from that exchange belongs: a VLM may do better than CV in exactly those cases.

Đề xuất: ‘gán vai phải là đầu vào, không phải suy luận — điều tra viên biết ngay xe nào là khách.’ Phản đối cùng phiên: điều điều tra viên biết ngay là ai là đối phương, không phải ego A hay B. Biểu đồ là góc nhìn từ trên, ghép ego vào A/B chính là phán xét hoàn cảnh. Ngoài ra ego không bao giờ thấy trong video; vụ đâm sau thì xe kia cũng có thể ngoài khung — đó là chỗ của gợi ý khác: VLM có thể tốt hơn CV đúng các vụ đó.

🚨 그리고 방법론 경고 하나. 두 역할을 모두 돌린 뒤 정답 도표를 살려 두는 쪽을 고르는 것은 「진단에만 쓸 수 있다 — 선택 규칙으로 쓰면 답을 훔치는 것」이다. visus의 평가가 두 역할 결속을 모두 채점할 때 그대로 적용된다.

🚨 And one methodological warning. Running both roles and then choosing the hypothesis that keeps the labelled chart alive is "diagnosis only — using it as a selection rule would be stealing the answer." That applies directly to any visus evaluation that scores both role bindings.

🚨 Một cảnh báo phương pháp. Chạy cả hai vai rồi chọn giả thuyết giữ biểu đồ có nhãn sống chỉ là ‘chẩn đoán — dùng làm luật chọn là đánh cắp đáp án.’ Áp trực tiếp cho mọi đánh giá visus chấm cả hai ràng buộc vai.

8.14발견된 오류 등록부 · Register of errors found · Sổ lỗi đã phát hiện

고칠 수는 없고, 적어 둘 수는 있다. 아래는 코드를 열어 확인한 것들이고, 각각 후임자를 잘못된 방향으로 보낼 수 있었던 것이다.

We cannot fix these; we can write them down. Each was confirmed by opening the code, and each one could have sent a successor in the wrong direction.

Không sửa được chúng; có thể ghi lại. Mỗi lỗi xác nhận bằng mở mã, mỗi lỗi đều có thể dẫn người tiếp quản sai hướng.

고칠 수는 없고, 적어 둘 수는 있다. 각각 후임자를 잘못된 방향으로 보낼 수 있었던 것들이다.

🚨 A. 원장이 「고쳤다」고 적었으나 코드는 그대로인 것The ledger says fixed; the code is notSổ nói đã sửa; mã thì chưa

A decision row marked decided in August records the discovery that a speeding predicate used >= 0, which makes a car driving exactly at the limit guilty of gross negligence across 45 rows. The predicate and threshold files still contain that code today, and the predicate's own gloss contradicts it. No test exercises it. A successor reading the decision log will believe this is closed.

Dòng quyết định decided tháng 8 ghi phát hiện vị từ quá tốc dùng >= 0, khiến xe chạy đúng giới hạn bị quy lỗi nghiêm trọng trên 45 dòng. Tệp vị từ và ngưỡng vẫn chứa mã đó hôm nay, diễn giải của chính vị từ mâu thuẫn với nó. Không kiểm thử nào chạm tới. Người tiếp quản đọc sổ sẽ tin việc đã đóng.

원장ledgersổnew-knia/knia/ontology/decisions.yaml D52 · status: decided · 2026-08-25 — 「아니다. 한 글자 때문에 그렇게 되어 있었다」new-knia/knia/ontology/decisions.yaml · D52 · status: decided · 2026-08-25 — "No. It was that way because of a single character"new-knia/knia/ontology/decisions.yaml · D52 · status: decided · 2026-08-25 — ‘Không. Nó như vậy vì một ký tự’
코드codemãpredicates.yaml:305 아직 >= · thresholds.yaml:66 아직 value: 0predicates.yaml:305 still >= · thresholds.yaml:66 still value: 0predicates.yaml:305 vẫn >= · thresholds.yaml:66 vẫn value: 0
범위scopephạm vi현저한 과실 45행 — 제한속도를 정확히 지킨 차가 현저한 과실이 된다45 gross-negligence rows — a car driving exactly at the speed limit becomes grossly negligent45 dòng lỗi nghiêm trọng — xe chạy đúng giới hạn trở thành lỗi nghiêm trọng

🚨 B. 모델이 뒤집어쓴 코드 버그A code bug the model was blamed forLỗi mã mô hình bị quy trách

fault-lab/src/faultlab/m1_questions.py:158 — 「차간거리 close」(일방과실을 발동시키는 거리 사실)를 시간 차이에서 추론한다. report 01이 「VLM 탓」으로 돌린 가짜 일방과실 주장의 원인. 후임자가 모델을 바꾸려 들 수 있다 — 원인은 단위 혼동이다.

fault-lab/src/faultlab/m1_questions.py:158 — infers "차간거리 close" (the distance fact that triggers one-sided fault) from a time difference. This is the cause of the spurious one-sided-fault claims that report 01 attributed to the VLM. A successor might set out to change the model — the cause is a unit confusion.

fault-lab/src/faultlab/m1_questions.py:158 suy ra ‘차간거리 close’ (dữ kiện khoảng cách kích hoạt lỗi đơn phương) từ chênh lệch thời gian. Đây là nguyên nhân các lập luận lỗi đơn phương giả mà báo cáo 01 quy cho VLM. Người tiếp quản có thể định đổi mô hình — nguyên nhân là nhầm đơn vị.

C. 정확도처럼 읽히지만 아닌 것Not the accuracy they look likeKhông phải độ chính xác như vẻ ngoài

Six figures that read as accuracy and are not: two self-consistency checks, an oracle score on a denominator of four, a count of collected tests with no ground truth, a colour-accuracy of 1.0 measured on synthetic renders where the real corpus has 6.3% coverage, a recall@3 and recall@6 quoted where top-1 is 7/11, and an "impact time is solved" claim with no evaluation script, no ground truth and no n.

Sáu số trông như độ chính xác nhưng không phải: hai phép tự nhất quán, điểm oracle mẫu số bốn, số bài kiểm thử thu thập không chuẩn, độ chính xác màu 1.0 trên render tổng hợp trong khi dữ liệu thật phủ 6.3%, recall@3 và recall@6 được trích trong khi top-1 7/11, cùng tuyên bố ‘giải được thời điểm va chạm’ không script đánh giá, không chuẩn, không n.

ql-re 25/25 · 266/266자기 일관성 + 테스트 통과 수self-consistency + a count of passing teststự nhất quán + số kiểm thử đạt
fault-lab 3/4 · 2/2오라클 채점 — 규칙 엔진의 입력으로 그 엔진의 출력을 재현. 분모 4·2oracle scoring — the LLM reproduces the rule engine's output from that engine's own input. Denominators of 4 and 2chấm oracle — LLM tái tạo đầu ra bộ luật từ chính đầu vào của bộ luật. Mẫu số 4 và 2
new-knia 599 passedpytest 수집 수. 정답 없음a pytest collection count. No ground truthsố bài pytest thu thập. Không chuẩn
new-knia colour 1.0합성 렌더 — 실제 코퍼스는 색 6.3%, 스타일 2.9%synthetic renders — on the real corpus, colour coverage is 6.3% and style 2.9%render tổng hợp — trên tập thật, độ phủ màu 6.3%, kiểu 2.9%
vlm2 9/11 · 11/11recall@3 · recall@6 — top-1은 7/11recall@3 and recall@6 — top-1 is 7/11recall@3 và recall@6 — top-1 là 7/11
"CV solves impact time"“CV giải quyết thời điểm va chạm”평가 스크립트 · 정답셋 · n 전부 없음no evaluation script, no ground truth, no nkhông script đánh giá, không chuẩn, không n

🚨 G. 제품이 약속하고 코드가 지키지 않는 것Promises the code does not keepCác lời hứa mã không giữ

Seven invariants this document and the product state as rules, which the code does not enforce: who-stamping holds on the chat path only; the narration tier check is bypassed when the source is the adjuster; the confidence margin is inert; role is picked by matched-clause count with A winning ties; the customer page follows the adjuster theme; model ids and dollar cost reach adjuster screens; and the client overwrites a locked verdict without checking the lock.

Bảy bất biến tài liệu và sản phẩm nêu như luật nhưng mã không thực thi: dấu who chỉ giữ trên đường chat; kiểm cấp kể chuyện bị bỏ khi nguồn là điều tra viên; margin tin cậy vô hiệu; vai chọn theo số điều khoản khớp, A thắng khi hòa; trang khách theo theme điều tra viên; ID mô hình và chi phí đô la lọt màn hình; client ghi đè phán định đã khóa mà không kiểm khóa.

이 줄들은 오늘 운영에 그대로 있다. 1~7장이 「원칙」으로 적은 것 중 강제되지 않는 것들이다. → §7.4

약속the promiselời hứa코드the codemã
G1사람 확정은 사람만only a human confirms for a humanchỉ người xác nhận thay ngườiv2.py:358의 f.setdefault("who", who) → 모델이 보낸 who가 살아남는다. HUMAN_LOCK = ("adjuster",)를 모델이 스스로 주장할 수 있다v2.py:358's f.setdefault("who", who) → a model-supplied who survives, and a model can claim HUMAN_LOCK = ("adjuster",) for itselff.setdefault("who", who) ở v2.py:358 → who do mô hình cấp vẫn sống, và mô hình tự nhận HUMAN_LOCK = ("adjuster",) được
G2안내문에는 확정된 사실만only confirmed facts are narrated to the customerchỉ kể sự kiện đã xác nhận cho khách_narratable이 source=="adjuster" 또는 who in HUMAN_WHO면 등급 검사를 우회한다_narratable skips the tier check whenever source=="adjuster" or who is in HUMAN_WHO_narratable bỏ kiểm tier khi source=="adjuster" hoặc who trong HUMAN_WHO
G3확신 마진으로 가지를 고른다branches are chosen on a confidence marginnhánh chọn theo biên độ tin cậytree.py:148-153이 key, conf, conf, {key: conf}를 돌려준다 → CONFIDENT_MARGIN = 0.2는 비교 대상이 없어 작동하지 않는다tree.py:148-153 returns key, conf, conf, {key: conf} → CONFIDENT_MARGIN = 0.2 has nothing to compare against and never firestree.py:148-153 trả key, conf, conf, {key: conf} → CONFIDENT_MARGIN = 0.2 không có gì để so và không bao giờ kích hoạt
G4역할은 근거로 정한다the role is decided on evidencevai được quyết bằng bằng chứngv2.py:1377 — 일치 조항 수의 최대값, A 먼저, 동점이면 A. :1503의 중단 경로는 정규화되지 않은 개수로 도표를 고른다v2.py:1377 — the maximum matched-clause count, A first, and A on a tie. The stopped path at :1503 picks the chart on an unnormalised countv2.py:1377 — đếm điều khoản khớp lớn nhất, A trước và A khi hòa. Nhánh dừng ở :1503 chọn biểu đồ theo số đếm chưa chuẩn hóa
G5고객 페이지는 고정 테마the customer page is theme-fixedtrang khách cố định theme아니다 — data-theme가 (public)까지 덮는다 (§8.4)it is not — data-theme wraps the public route group too (§8.4)không — data-theme cũng bao nhóm route công khai (§8.4)
G6사정사 화면에 모델·비용 없음no model ids or cost on adjuster screenskhông ID mô hình hay chi phí trên màn hình điều tra viên있다 — USD·토큰·모델 id (§8.4)there are — USD, tokens and model ids (§8.4)có — USD, token và ID mô hình (§8.4)
G7확정 도표는 재분석으로 바뀌지 않는다a locked chart is not changed by re-analysisphân tích lại không đổi biểu đồ đã khóa서버는 지킨다. 클라이언트는 applyVerdict에서 locked를 검사하지 않는다 (§8.4)the server holds it. The client does not check locked in applyVerdict (§8.4)server giữ khóa. Client không kiểm locked trong applyVerdict (§8.4)

🚨 H. 플랫폼 — 문서와 코드가 어긋나는 곳Platform: runbooks vs codeNền tảng: runbook so với mã

The three most dangerous: the remote-execution helper reads its environment from a variable with no production guard, so one environment variable runs arbitrary root commands on the demo box; the production ship path treats "could not ask about running jobs" as "no running jobs" while the stage path refuses, making production more permissive than stage; and a job that exhausts its attempts is never swept — it stays running forever, the case stays analyzing, and the reaper protects that workspace permanently.

Ba lỗi nguy hiểm nhất: helper thực thi từ xa đọc môi trường từ biến không có guard production, nên một biến môi trường chạy lệnh root tùy ý trên máy demo; đường phát hành production coi ‘không hỏi được job đang chạy’ là ‘không có job’ trong khi stage từ chối, khiến production dễ dãi hơn stage; job hết lượt thử không bao giờ được quét — chạy mãi, vụ vẫn phân tích, reaper bảo vệ workspace vĩnh viễn.

전체 표는 §6.5에 있다. 가장 위험한 셋만:

H1remote.py:33에 prod 가드가 없다 → 환경변수 하나로 데모 박스에서 임의 root 명령remote.py:33 has no production guard → one environment variable runs arbitrary root commands on the demo boxremote.py:33 không có guard production → một biến môi trường chạy lệnh root tùy ý trên máy demo
H3prod의 배포 경로가 stage보다 관대하다 — 「물어볼 수 없었음」을 「작업 없음」으로 취급the production deploy path is more permissive than stage — it treats "could not ask" as "no running jobs"đường deploy production dễ dãi hơn stage — coi ‘không hỏi được’ là ‘không có job’
H7attempts=3에서 작업이 영원히 좌초하고, 사건은 analyzing에 갇히고, 리퍼가 그 작업공간을 영구히 보호한다. 쓸어내는 코드가 없다jobs strand forever at attempts=3, the case stays analyzing, and the reaper protects that workspace permanently. Nothing sweeps themjob mắc vĩnh viễn ở attempts=3, vụ vẫn phân tích, reaper bảo vệ workspace vĩnh viễn. Không gì quét chúng

I. 조상 레포의 수치 — 인용하기 전에 읽을 것Ancestor numbers: read before citingSố của kho tiền thân: đọc trước khi trích

Eight figures from the ancestor repos that look like results and are not — a fixture-authored accuracy badge, a rehearsal that answers every question with the expected value, a stakeholder's quote about their own model, an inventory count that contradicts itself, an oracle upper bound, a degenerate median, a saturating self-rank, and a robustness score whose registry-off baseline is 2.3 points higher than what shipped and is recorded nowhere.

Tám con số từ kho tiền thân trông như kết quả mà không phải — badge độ chính xác viết trong fixture, rehearsal trả mọi câu bằng giá trị kỳ vọng, trích lời bên liên quan về mô hình của họ, số kiểm kê tự mâu thuẫn, giới hạn trên oracle, trung vị suy biến, self-rank bão hòa và điểm vững có baseline tắt registry cao hơn 2.3 điểm so với bản phát hành nhưng không ghi ở đâu.

ams-demo-0 「정확도 96% · n=41」ams-demo-0's on-screen "96% accuracy · n=41"‘độ chính xác 96% · n=41’ trên màn hình ams-demo-0🚨 fixture에 손으로 적힌 값, 그리고 accuracyOf가 기대 출력에서 입력 표를 되만든다🚨 a value hand-written into a fixture, and accuracyOf rebuilds the input table out of the expected output🚨 giá trị viết tay trong fixture, và accuracyOf dựng bảng đầu vào từ đầu ra kỳ vọng
ams-demo-0 「rehearsal green」🚨 const value = d.expected; — 엔진과 어긋날 수 없다🚨 const value = d.expected; — it cannot disagree with the engine🚨 const value = d.expected; — không thể bất đồng với bộ máy
ams-demo-0 「93.5% 모델 정확도」ams-demo-0's "93.5% model accuracy"‘độ chính xác mô hình 93.5%’ của ams-demo-0AX 담당자가 자기 모델·자기 라벨에 대해 말한 것의 인용. 생산 코드 없음a verbatim quote of the AX stakeholder about THEIR model against THEIR labels. No producing code heretrích nguyên văn bên liên quan AX về mô hình CỦA HỌ so với nhãn CỦA HỌ. Không có mã tạo ở đây
ams-demo-0 audit 215/284오라클 채점의 상한선. 「틀린 도표 0」은 좋지만 정확도가 아니다an upper bound from oracle scoring. "0 wrong charts" is good but it is not accuracygiới hạn trên từ chấm oracle. ‘0 biểu đồ sai’ là tốt nhưng không phải độ chính xác
ams-demo-0 「중앙값 9」ams-demo-0's "median 9 to resolve"‘trung vị 9 để giải quyết’ của ams-demo-0퇴화 — 조기 확정 0건이라 「분기당 요건 수」와 같은 양degenerate — nothing resolves early, so it is identical to "requirements per branch"suy biến — không gì giải quyết sớm nên giống hệt ‘yêu cầu mỗi nhánh’
knia-dag 「자기순위 123/123」knia-dag's "self-rank 123/123"‘self-rank 123/123’ của knia-dag자기 사실 되먹임. 레포도 "saturates"라고 적었다self-facts fed back. The repo itself writes "saturates"đưa dữ kiện tự cấp lại. Chính kho viết ‘bão hòa’
knia-dag 「강건성 94.7%」knia-dag's "robustness 94.7%"‘độ vững 94.7%’ của knia-dag🚨 레지스트리를 끈 구성 G는 97% — 출하본보다 2.3pp 높고 어디에도 안 적혀 있다🚨 config G, with the registry off, scores 97% — 2.3 points above what shipped, and it is written down nowhere🚨 cấu hình G, tắt registry, đạt 97% — cao hơn 2.3 điểm so bản phát hành, và không ghi ở đâu
knia-dag verify.mjs 108/365/112파일 존재 확인. 지금은 exit 1 (PDF가 지워졌다) — 표는 아직 ✅file-existence only. Now exits 1 (the PDF was deleted) — and the table still shows ✅chỉ kiểm tồn tại tệp. Giờ exit 1 (PDF đã xóa) — bảng vẫn hiện ✅

🚨 J. 2단계(가감산)로 그대로 내려올 수 있는 조상의 결함Ancestor defects that can descend into stage 2Khuyết điểm tiền thân có thể rơi xuống giai đoạn 2

The band never reads which car a modifier accuses; the customer side is dropped at two call sites so the side is always null; and the A/B binding is inferred from the ratio, which is true by construction on the 50:50 charts. The commit that found the first one before the demo deferred it: "right once you rule and wrong while you decide." Check visus's own negotiation module for the same three before anything else.

Dải không đọc xe nào yếu tố quy trách; bên khách bị bỏ ở hai điểm gọi nên side luôn null; ràng buộc A/B suy từ tỷ lệ, đúng theo cấu trúc ở biểu đồ 50:50. Commit tìm lỗi đầu trước demo đã hoãn: ‘đúng khi phán và sai khi quyết’. Kiểm mô-đun thương lượng của visus trước hết vì ba lỗi y hệt.

전체는 §8.5에 있다. 요지: 범위 계산이 수정요소가 지목하는 차를 읽지 않고(141/146이 대칭), customerIs가 두 호출에서 누락되어 side가 언제나 null이며, A/B 결속을 비율에서 역추정해 50:50 도표에서 증거 없이 참이 된다. 커밋 b8e3bf6이 데모 전에 알고도 미뤘다 — "right once you rule and wrong while you decide."

The full account is in §8.5. In short: the range calculation never reads which car the modifier names (141 of 146 are symmetric), customerIs is missing from two call sites so side is always null, and the A/B binding is inferred back from the ratio — which is true without evidence on the 50:50 charts. Commit b8e3bf6 knew before the demo and deferred it — "right once you rule and wrong while you decide."

Đầy đủ ở §8.5. Tóm tắt: tính khoảng không đọc xe yếu tố gọi tên (141/146 đối xứng), customerIs thiếu ở hai điểm gọi nên side luôn null, ràng buộc A/B suy ngược từ tỷ lệ — đúng không bằng chứng ở biểu đồ 50:50. Commit b8e3bf6 biết trước demo và hoãn — ‘đúng khi phán và sai khi quyết.’

지금 visus에서 확인할 것: visus/negotiation.py와 knia.factors()(visus/knia.py:86-89 — applies_to · a · b · or_group을 돌려준다). 조상 둘 다 같은 자리에서 틀렸다.

Check visus's own stage 2 first: the negotiation module and knia.factors(), which returns each factor's applies_to, a, b and or_group. Both ancestors got this wrong in the same place — the band widened without reading which car the factor accuses.

Kiểm giai đoạn 2 riêng của visus trước: mô-đun thương lượng và knia.factors(), trả applies_to, a, b, or_group mỗi yếu tố. Cả hai tiền thân đều sai cùng chỗ — dải mở rộng mà không đọc yếu tố quy trách xe nào.

🚨 K. 지금 돌아가는 엔진에서 발견한 것In the engines that run todayTrong bộ máy đang chạy hôm nay → §8.7

Ten findings in the code that runs in production, the first of which is the most consequential thing in this document: a role tie resolves to A, the confidence cap deliberately ignores the clause classes that decide the role, and on 차1-1 — whose base ratio is 0:100 — an unread traffic light therefore ships as "the customer is 0% at fault, confidence 0.8" instead of 판단 불가.

Mười phát hiện trong mã production; phát hiện đầu là điều hệ quả nhất tài liệu: hòa vai về A, chặn độ tin cậy cố ý bỏ lớp điều khoản quyết vai, và trên 차1-1 — tỷ lệ cơ sở 0:100 — đèn không đọc được vì vậy phát hành ‘khách lỗi 0%, độ tin cậy 0.8’ thay vì 판단 불가.

K1역할 동점 → A(v2.py:1379), 그리고 :1396이 신호·좌우 도로 절을 신뢰도에서 뺀다 → 차1-1에서 신호를 못 읽으면 「고객차 과실 0%, 신뢰도 0.8」. 역할 차이가 그 부류뿐인 도표가 104개 중 7개. E-V-035가 안쪽에서 확인 — 비율 −8 중 −4가 역할a role tie goes to A (v2.py:1379), and :1396 excludes signal and left/right-road clauses from the confidence cap → on 차1-1 an unread signal ships as "the customer is 0% at fault, confidence 0.8". 7 of 104 charts differ between roles on those clauses alone. E-V-035 confirms it from the inside — of a −8 ratio loss, −4 is rolehòa vai về A (v2.py:1379), :1396 loại điều khoản tín hiệu và đường trái/phải khỏi chặn độ tin cậy → 차1-1 không đọc đèn thành ‘khách lỗi 0%, độ tin cậy 0.8’. 7/104 biểu đồ khác vai chỉ ở điều khoản đó. E-V-035 xác nhận từ bên trong — trong mức mất tỷ lệ −8, −4 là do vai
K2정직한 답을 버린다 — 「알 수 없다」를 선택지로 주고(:994) 고르면 None을 돌려준다(:1002)the honest answer is collected and thrown away — "the statements do not say which side" is offered as a choice (:994), and choosing it returns None (:1002)đáp án trung thực được thu rồi vứt — ‘phát biểu không nói phía nào’ là lựa chọn (:994), chọn nó trả None (:1002)
K3카메라 판단 불가 → 전방(reader_tree.py:919). 좌/우가 뒤집히고 K1의 좌우 도표 4개와 곱해진다판단 불가 on the camera becomes "front" (reader_tree.py:919). Left and right invert, and that multiplies with the four left/right charts in K1판단 불가 camera thành ‘phía trước’ (reader_tree.py:919). Trái/phải đảo, nhân với bốn biểu đồ trái/phải trong K1
K4충돌 시점을 못 찾으면 dur * 0.5. 운영에서 labelled_impact_s는 언제나 Nonea missed impact becomes dur × 0.5. In production labelled_impact_s is always Nonemất va chạm thành dur × 0.5. Production labelled_impact_s luôn None
K5계측이 판단 불가를 단정으로 덮어쓴다(BIND_TURN_CONF = 0.5, 주석 없음). E-V-028: "post-rules hurt more than helped", "ego bounce fixed 0 of 42"a measurement overwrites a 판단 불가 with an assertion (BIND_TURN_CONF = 0.5, no comment). E-V-028: "post-rules hurt more than helped" and "ego bounce fixed 0 of 42"phép đo ghi đè 판단 불가 bằng khẳng định (BIND_TURN_CONF = 0.5, không comment). E-V-028: ‘hậu quy tắc hại hơn giúp’, ‘ego bounce sửa 0/42’
K6CONFIDENT_MARGIN이 작동하지 않고, 에스컬레이션엔 마진 검사가 없고, 확률 눈금이 섞이고, 두 번째 눈길은 구조적으로 죽어 있다CONFIDENT_MARGIN never fires, the escalation path has no margin test, two probability scales are mixed, and second looks are structurally deadCONFIDENT_MARGIN không bao giờ chạy, đường nâng cấp không kiểm margin, hai thang xác suất trộn nhau, nhìn lại chết về cấu trúc
K7포괄 정규식이 고른 도표가 by:"adjuster"로 기록되어 영원히 재검토되지 않는다a chart chosen by a catch-all regex is recorded as the adjuster's choice and never reviewed againbiểu đồ do regex bắt mọi thứ chọn bị ghi là lựa chọn điều tra viên và không xem lại
K8table.py가 crossing을 좌·우 양쪽에 맞춰 줘 108행 중 18행이 역할 구분 불가이고, other_side를 「다음에 잴 것」으로 지명할 수 없다table.py lets crossing match both left and right → 18 of 108 rows cannot tell the roles apart, and other_side can never be nominated as the thing to measure nexttable.py cho crossing khớp cả trái lẫn phải → 18/108 dòng không phân biệt vai, và other_side không bao giờ được đề cử làm thứ đo tiếp
K9문서가 현재형으로 설명하는 기계의 상당 부분이 기본 꺼짐. 반대로 포괄 정규식과 신호·폭 제외는 켜져 있고 조용히 결정적이다much of the machinery the docs describe in the present tense is off by default. Conversely the catch-all regexes and the signal/width exclusions are on and quietly decisivephần lớn cơ chế tài liệu mô tả ở thì hiện tại mặc định tắt. Ngược lại regex bắt mọi thứ và loại trừ tín hiệu/độ rộng bật và âm thầm quyết định
K10단계 신뢰도를 여덟 번 묻고 한 번도 쓰지 않는다. 조사자가 보는 숫자는 하드코딩된 아홉 개the step confidence is asked for eight times and never used. The numbers the adjuster sees are nine hardcoded valuesđộ tin cậy bước được hỏi tám lần nhưng không dùng. Con số điều tra viên thấy là chín giá trị hard-code

🚨 L. 측정 장치에서 발견한 것In the measurement harnessTrong bộ đo → §8.8

Nine findings about what the numbers measure. The headline top-1 uses the most generous of three definitions, 판단 불가 was never scored as an answer at scale, the production arm has no per-case data so its score cannot be decomposed, the 88% belongs to a different arm, the ledger disagrees with the committed CSVs in two places, and role, negotiation, notice and the report extractor have never had their accuracy measured at all.

Chín phát hiện về con số thực sự đo gì. Top-1 nổi bật dùng định nghĩa rộng nhất trong ba, 판단 불가 chưa từng chấm ở quy mô, production không có dữ liệu theo vụ nên không phân rã được, 88% thuộc nhánh khác, sổ bất đồng CSV commit ở hai chỗ; vai, thương lượng, thông báo, bộ trích xuất báo cáo chưa từng đo độ chính xác.

L1헤드라인 top-1은 세 정의 중 가장 관대한 것 — 나무가 멈춰도 한 표를 받는다the headline top-1 is the most generous of three definitions — a stopped tree still gets a picktop-1 nổi bật là định nghĩa rộng nhất trong ba — cây dừng vẫn có lựa chọn
L2판단 불가가 300 규모에서 답으로 채점된 적이 없다. 운영의 stops는 출력조차 되지 않는다판단 불가 was never scored as an answer at the 300 scale. Production's stops are never even printed판단 불가 chưa từng chấm như đáp án ở quy mô 300. Dừng production thậm chí không được in
L3운영 arm의 per-case 데이터가 없다 → 209를 분해할 수 없다no per-case data for the production arm → the 209 cannot be decomposedproduction không có dữ liệu theo vụ → không phân rã được 209
L488%는 보고 없는 arm의 실패 221건이지 운영의 91건이 아니다. visible_likely는 쓰는 코드가 없는 사후 판단the 88% belongs to the no-report arm's 221 failures, not production's 91. And visible_likely is a post-hoc judgement with no producing code88% thuộc 221 lỗi nhánh không báo, không phải 91 lỗi production. visible_likely là phán xét sau sự kiện, không mã tạo
L5원장과 CSV가 어긋난다(Kimi 62.7 vs 62.0, Qwen 56.3 vs 55.3). top-3 · top-5는 계산 코드가 없다the ledger disagrees with the committed CSVs (Kimi 62.7 vs 62.0, Qwen 56.3 vs 55.3), and no code computes top-3 or top-5sổ bất đồng CSV commit (Kimi 62.7 so 62.0, Qwen 56.3 so 55.3), và không mã nào tính top-3 hay top-5
L6같은 레포에 300건 정확도가 둘이고 서로를 가리키지 않는다. 헤드라인의 유일한 증거 디렉터리는 어디서도 참조되지 않는다two 300-case accuracies in one repo with nothing cross-referencing them, and the directory holding the only evidence is referenced nowherehai độ chính xác 300 vụ trong một kho không tham chiếu, thư mục giữ bằng chứng duy nhất không được tham chiếu ở đâu
L7E-V-025가 시험 집합 위에서 반복 튜닝으로 돌았다 — V-D12가 금지한 것E-V-025 ran as iterative tuning on the very test set the headline is scored against — which V-D12 forbidsE-V-025 tinh chỉnh lặp trên chính tập kiểm tra dùng chấm số nổi bật — V-D12 cấm
L8역할 · 협의 · 안내문 · 초기 보고 추출기 — 어느 것도 정확도가 측정된 적이 없다role · negotiation · notice · the report extractor — none has ever had its accuracy measuredvai · thương lượng · thông báo · bộ trích xuất — chưa mục nào đo độ chính xác
L9E-V-009b는 2026-09-21부터 사람 채점 대기, E-V-005(도구별 사실 정확도)는 아직 「계획」 — 접근 방향 문제를 풀 유일한 실험E-V-009b has been awaiting human grading since 2026-09-21, and E-V-005 (per-tool fact accuracy) is still "planned" — the only experiment that would settle the approach-side questionE-V-009b chờ người chấm từ 2026-09-21, E-V-005 (độ chính xác sự kiện theo công cụ) vẫn ‘dự kiến’ — thí nghiệm duy nhất giải câu hỏi phía tiếp cận

🚨 M. 기록에만 있는 결함 — 코드를 봐도 안 보인다Defects that live only in the transcriptsKhuyết điểm chỉ sống trong transcript

M1motorbike ≠ motorcycle. 검출기는 클래스 이름으로 매칭하는데 체크포인트가 쓰는 이름은 motorbike다 → 캐시된 690 클립에서 이륜차 0건, 그리고 차45-2의 vehicle_class(A) == 'motorcycle' 가드가 원리적으로 참이 될 수 없다 (§9.3)motorbike ≠ motorcycle. The detector matches class names, and the checkpoint's name is motorbike → zero motorcycles across 690 cached clips, and 차45-2's guard can never be true (§9.3)motorbike ≠ motorcycle. Detector khớp tên lớp, tên checkpoint là motorbike → 0 xe máy qua 690 clip cache, guard 차45-2 không thể đúng (§9.3)
M2라이선스 기준을 과도하게 적용한 대가가 측정되어 있다 — OpenLane 계열(LATR·PersFormer)을 배제해 차선 종류와 색 슬롯이 비었고, 그 때문에 앞지르기 계열 6개 도표가 통째로 판정 불가였다. D66이 기준을 끄면서 스스로 적어 둔 것이다 (§9.2)the cost of applying the licence rule too hard is measured — excluding the OpenLane family (LATR, PersFormer) emptied the lane-type and lane-colour slots, and six overtaking charts became undecidable. D66 wrote this down itself while switching the rule off (§9.2)giá phải trả khi áp luật giấy phép quá cứng đã được đo — loại họ OpenLane (LATR, PersFormer) làm trống ô loại làn và màu làn, sáu biểu đồ vượt xe thành không quyết định được. D66 tự ghi khi tắt luật (§9.2)
M3OWLv2는 근거 없이 탈락했고 기록이 그렇게 적는다 — 게다가 라이선스가 셋 중 가장 깨끗하다. 다시 열어 볼 가치가 있는 유일한 후보 (§9.5)OWLv2 was rejected with no evidence and the record says so — and its licence is the cleanest of the three. The one candidate worth reopening (§9.5)OWLv2 bị bác không bằng chứng và bản ghi nói vậy — giấy phép của nó sạch nhất trong ba. Ứng viên đáng mở lại (§9.5)
M4충돌 앵커의 +8점이 held-out에서 ≈+2로 줄었다. 그리고 ±0.5초에서는 재현되지 않았다 — 재현된 것은 ±1.0초뿐이다 (§9.4)the impact anchor's +8 shrank to about +2 on held-out data, and it did not replicate at ±0.5 s — only at ±1.0 s (§9.4)+8 của neo va chạm giảm còn khoảng +2 trên dữ liệu giữ lại, không lặp ở ±0.5 s — chỉ lặp ở ±1.0 s (§9.4)
M5마스킹이 차선 검출에 준 이득은 0이었다— 「학습된 검출기는 보닛을 이미 무시한다」. 자차 마스크는 검출 반사 제거에만 값이 있다 (§9.3)masking bought lane detection nothing — and it is unrelated to lane detection, since the hood experiment emits no lane output. The ego mask is worth having only for removing reflection boxes from detection (§9.3)masking không giúp phát hiện làn — và không liên quan phát hiện làn, vì thí nghiệm nắp ca-pô không xuất làn. Ego mask chỉ đáng có để loại hộp phản chiếu khỏi detector (§9.3)
M6🚨 33밀리초 차이가 100클립 중 45건에서 도표 관련 출력을 바꾼다 → 이런 대조 없이 한 도표 수준 비교는 잡음을 잰 것이다 (§9.6)🚨 33 ms of sampling jitter changes the chart-relevant output on 45 of 100 clips → any chart-level comparison without that control measured noise (§9.6)🚨 33 ms jitter lấy mẫu đổi đầu ra liên quan biểu đồ trên 45/100 clip → mọi so sánh tầng biểu đồ không có kiểm soát đó đo nhiễu (§9.6)

🚨 N. 인수인계 스냅샷을 열면 바로 부딪히는 것What you hit on opening the handover snapshotsĐiều gặp phải khi mở snapshot bàn giao

위의 A–M이 「무엇이 틀렸나」라면, 이 묶음은 「당신이 내일 아침 실제로 밟을 것」이다. 전부 레포를 직접 열어 확인했다.

Where A–M are "what is wrong", this group is "what you will actually trip over tomorrow morning". Each was verified by opening the repo.

A–M là ‘có gì sai’, nhóm này là ‘sáng mai sẽ vấp gì’. Mỗi mục đã xác minh bằng mở kho.

N1🚨 게이트는 진단만 되고 고쳐지지 않았다(§3.2). 엔진에 게이트가 아예 없고 최종 클램프뿐이라 차42-1에서 10%p 틀리고 차46-1에서는 우연히 맞는다. 감사가 제안한 gate_side·T_GATE_BLOCKS_LOSSES는 knia/ 전체에 0건. 「감사가 있다」와 「고쳐졌다」는 다른 말이고, 커밋이 하나뿐이라 diff로 확인할 방법도 없다🚨 the gate is diagnosed, not fixed (§3.2). The engine has no gate at all, only a final clamp, so it is 10 points wrong on 차42-1 and accidentally right on 차46-1. The audit’s proposed gate_side and T_GATE_BLOCKS_LOSSES appear nowhere in knia/. "There is an audit" and "it was fixed" are different statements, and a single-commit snapshot leaves no diff to check against🚨 cổng được chẩn đoán, chưa sửa (§3.2). Bộ máy hoàn toàn không có cổng, chỉ chặn cuối, nên sai 10 điểm ở 차42-1 và tình cờ đúng ở 차46-1. gate_side và T_GATE_BLOCKS_LOSSES do audit đề xuất không nằm đâu trong knia/. ‘Có audit’ và ‘đã sửa’ là hai câu khác nhau; snapshot một commit không có diff để kiểm
N2🚨 차46-1에는 인쇄본상 기본 비율이 둘((가) A0:B100 · (나) A20:B80)인데 온톨로지는 하나만 들고 있다. (나) 사건에 (가)를 쓰면 가감요소를 하나도 적용하기 전에 이미 20%p가 어긋난다🚨 차46-1 has two printed base ratios ((가) A0:B100 and (나) A20:B80) while the ontology stores only one. Using (가) on a (나) case is 20 points out before a single modifier is applied🚨 차46-1 có hai tỷ lệ cơ sở in ((가) A0:B100 và (나) A20:B80) nhưng ontology chỉ lưu một. Dùng (가) cho vụ (나) lệch 20 điểm trước khi áp một yếu tố
N3🚨 knia-dag의 dist/는 「바이트 동일하게 재생성된다」고 적혀 있지만 아니다. 커밋된 engine.mjs의 버전 스탬프가 자기 본문의 해시와 다르다(본문은 일치). 깨끗한 체크아웃에서 build-dist를 돌리면 두 줄이 바뀌고, publish-to-db는 더러운 트리를 거부하므로 README가 적어 둔 순서를 그대로 따르면 즉시 막힌다🚨 knia-dag’s dist/ is documented as byte-idempotent and is not. The committed engine.mjs’s version stamp does not match the hash of its own body (the body does match). On a clean checkout build-dist changes two lines, and publish-to-db refuses a dirty tree — so following the README’s own order blocks immediately🚨 knia-dag’s dist/ được ghi lũy đẳng byte nhưng không. Dấu phiên bản engine.mjs commit không khớp hash thân chính nó (thân khớp). Checkout sạch chạy build-dist đổi hai dòng, publish-to-db từ chối cây bẩn — nên theo đúng thứ tự README sẽ bị chặn ngay
N4🚨 포트 41080이 두 번 바인딩된다. visus의 report_run.py:13이 그 주소를 하드코딩하고 주석은 ams-1080의 컨테이너를 가리키는데, visus 자신의 serve_cases.py:483도 같은 포트에서 /videos/를 서빙한다. 보고서의 영상 링크는 그때 떠 있는 쪽으로 풀린다 — 영상이 엉뚱해 보이면 여기부터 볼 것🚨 port 41080 is bound twice. visus’s report_run.py:13 hardcodes it with a comment pointing at ams-1080’s container, while visus’s own serve_cases.py:483 serves /videos/ on the same port. A report’s video links resolve against whichever is up — start here if a report’s video looks wrong🚨 cổng 41080 bind hai lần. report_run.py:13 của visus hard-code, comment trỏ container ams-1080, còn serve_cases.py:483 chính visus phục vụ /videos/ cùng cổng. Link video báo cáo tới bên nào đang chạy — video sai thì bắt đầu ở đây
N5⚠️ README가 자기 데이터보다 낡은 레포가 셋이다 — new-knia(55/71/85/29 대 실제 61/77/93/34) · question-ledger(71/244/559 대 74/260/372) · resolve-questions(질문 265 대 254, 검사 34·결함 0 대 44·23). 전부 날짜 문제이지 모순이 아니다. 이 레포들에서 수치를 인용할 일이 있으면 산문이 아니라 생성된 JSON을 쓸 것⚠️ in three repos the README is stale against its own data — new-knia (55/71/85/29 against an actual 61/77/93/34), question-ledger (71/244/559 against 74/260/372) and resolve-questions (265 questions against 254; 34 checks / 0 defects against 44 / 23). All dating artifacts, not contradictions. Quote the generated JSON, not the prose⚠️ ba kho có README lỗi thời so với dữ liệu — new-knia (55/71/85/29 so 61/77/93/34), question-ledger (71/244/559 so 74/260/372), resolve-questions (265 câu so 254; 34 kiểm/0 lỗi so 44/23). Đều là lệch thời điểm, không mâu thuẫn. Trích JSON sinh, không văn xuôi
N6🚨 ql-re 재생의 최종 상태가 「확정 0」이다 — 조용한 오확정을 막자 확정 24 → 0이 됐고(레포는 「의도된 결과」라 적는다), 다음 단계였던 작업자 B의 재라벨링은 일어나지 않았다. 지금 68편에 확정 0 · 정답 지지 0 · 클립당 평균 9.22개 도표 생존, 그리고 🚨 차47-1이 65/68에서 살아 있다 — 정차 후 출발 도표가 「틀리게 확정」에서 「한 번도 제거되지 않음」으로 옮겨 갔을 뿐이다🚨 the ql-re replay now settles nothing — blocking the silent false confirmations took confirmations 24 → 0 (the repo calls this "the intended outcome"), and the follow-up, a re-labelling pass by labeller B, never happened. Across 68 videos: 0 confirmed, 0 gold-supported, a mean of 9.22 charts still alive per clip — and 🚨 차47-1 alive on 65 of 68. The stop-then-go chart merely moved from "wrongly confirmed" to "never eliminated"🚨 replay ql-re giờ không chốt gì — chặn xác nhận sai âm thầm đưa xác nhận 24 → 0 (kho gọi ‘kết quả chủ đích’), lượt sau gán lại do người B chưa bao giờ xảy ra. Trong 68 video: 0 xác nhận, 0 có chuẩn ủng hộ, trung bình 9.22 biểu đồ còn sống/clip — và 🚨 차47-1 còn ở 65/68. Biểu đồ dừng rồi đi chỉ chuyển từ ‘xác nhận sai’ sang ‘không bao giờ loại’
N7⭐ resolve-questions는 남은 결함 다섯 개를 스스로 열어 두었다 — 작업 목록으로 쓸 것(§8.12). 그중 X11 「분기가 요구하는 사실인데 그것을 표현할 질문이 없다」가 4건 — 이 문서 전체의 주제가 검사 항목으로 등록되어 있는 것이다⭐ resolve-questions leaves five defects open — use them as a work list (§8.12). Among them, X11, "a fact a branch requires that no question can express", with 4 instances — this document’s whole theme, logged as a check⭐ resolve-questions để năm lỗi mở — dùng làm danh sách việc (§8.12). Trong đó X11, ‘sự kiện nhánh yêu cầu nhưng không câu hỏi nào biểu đạt được’, có 4 trường hợp — toàn bộ chủ đề tài liệu, ghi như một kiểm tra
N8⚠️ CarAccident에는 순서를 적을 칸이 있는데 판정에 닿지 않는다 — 사건의 순서는 key_point에 남지만 service.py:43-44가 그 필드를 매칭에서 명시적으로 뺀다. 게다가 _normalize_transient_stop은 오직 direction = "정지"를 "직진"으로 덮어쓰기 위해 존재한다 — 상대차 것까지⚠️ CarAccident does have a field for the ordering, and it never reaches the decision — the sequence survives in key_point, which service.py:43-44 explicitly excludes from matching. And _normalize_transient_stop exists solely to overwrite direction = "정지" with "직진" — including the counterpart’s⚠️ CarAccident có trường biểu diễn thứ tự, nhưng không tới quyết định — chuỗi sống trong key_point, service.py:43-44 cố ý loại khỏi khớp. Và _normalize_transient_stop chỉ tồn tại để ghi đè direction = "정지" thành "직진" — kể cả hướng của đối phương
N9⚠️ lane-detection은 지금 돌릴 수 없고, 출하된 뷰어는 대표성이 없다 — culane_res34.pth가 없는데 스크립트 다섯 개가 요구하고, 벤더 디렉터리 다섯 개가 전부 비어 있으며, 분석 스크립트의 출력은 저장된 적이 없다. 그리고 16편짜리 뷰어는 프레임의 80%에서 ≥2차선을 보여 주는데 코퍼스 평균은 41%다 — 데모로 쓰기 전에 알고 있을 것⚠️ lane-detection cannot be run today, and its shipped viewer is not representative — culane_res34.pth is absent though five scripts need it, all five vendored directories are empty, and the analysis scripts’ output was never saved. The 16-clip viewer shows ≥2 lanes on 80% of frames against a corpus mean of 41% — know that before demoing it⚠️ phát hiện làn hôm nay không chạy được, viewer phát hành không đại diện — culane_res34.pth vắng dù năm script cần, cả năm thư mục vendor rỗng, đầu ra script phân tích chưa từng lưu. Viewer 16 clip cho ≥2 làn ở 80% khung so với trung bình dữ liệu 41% — biết điều này trước khi demo
N10⚠️ hd-map은 자기 수치와 어긋난다 — 카메라 높이를 두 개 들고 있고(1.255 vs 1.35, 8% 차이는 차로를 가로질러 0.3 m에 해당), 커밋된 잔차 파일에서 재투영 오차 중앙값이 맞춘 뒤에 18.89 → 19.60픽셀로 올라간다. SAM 3 검출기는 가로 보정을 0.343 → 0.845 m로 늘렸고 판정되지 않은 채 남아 있다⚠️ hd-map disagrees with its own numbers — it carries two camera heights (1.255 and 1.35; the 8% gap is 0.3 m across a lane), and in the committed residual file the median reprojection error rises 18.89 → 19.60 px after fitting. The SAM 3 detector increased the lateral correction 0.343 → 0.845 m and was left unadjudicated⚠️ hd-map bất đồng với chính con số — mang hai chiều cao camera (1.255 và 1.35; chênh 8% là 0.3 m qua một làn), file residual commit cho thấy sai số tái chiếu trung vị tăng 18.89 → 19.60 px sau fit. Detector SAM 3 tăng hiệu chỉnh ngang 0.343 → 0.845 m và chưa được phân xử
N11🚨 골드셋의 「560행」은 273편을 두 번씩 적은 것이다. data/goldset/goldset.tsv는 560줄인데 서로 다른 줄은 274개뿐이다 — 268개가 정확히 두 번, 6개가 네 번 나온다. 클립은 273편이고 (파일, 역할) 조합도 273개다. 즉 클립당 기록은 하나이지, 당사자별로 둘이 아니다. ⭐ 지금은 아무것도 틀리지 않는다 — 읽는 코드 두 곳이 전부 media_id로 중복을 제거한다(workspace.py:46의 setdefault, ego_heading_diag.py의 if len(r) != 8 or r[0] in seen: continue). ⚠️ 그러나 행 단위로 무언가를 세거나 이 파일을 다시 내보내는 순간 두 배로 센다, 그리고 네 번 나오는 6편은 네 배로 실린다. 「273편 / 560행」이라는 표현이 당사자별 라벨 560개처럼 읽히므로, 이 문서와 레포 문서 양쪽에서 고쳐 적어야 한다🚨 the gold set’s "560 rows" are 273 clips written out twice. data/goldset/goldset.tsv has 560 lines but only 274 distinct ones — 268 appear exactly twice and 6 appear four times. There are 273 clips, and (file, role) is also 273, so there is one record per clip, not one per party. ⭐ Nothing is wrong today: both readers dedupe by media_id (setdefault in workspace.py:46, if len(r) != 8 or r[0] in seen: continue in ego_heading_diag.py). ⚠️ But anything that counts rows, or re-exports the file, double-counts — and the 6 four-times rows carry quadruple weight. "273 clips / 560 rows" reads as 560 per-party labels, so the phrasing needs fixing here and in the repo’s own docs🚨 ‘560 dòng’ của bộ chuẩn là 273 clip ghi hai lần. data/goldset/goldset.tsv có 560 dòng nhưng chỉ 274 dòng khác biệt — 268 xuất đúng hai lần, 6 xuất bốn lần. Có 273 clip, và (file, role) cũng là 273, vậy mỗi clip một bản ghi, không phải mỗi bên một bản ghi. ⭐ Hiện không có gì sai: cả hai bộ đọc loại trùng theo media_id (setdefault tại workspace.py:46, if len(r) != 8 or r[0] in seen: continue trong ego_heading_diag.py). ⚠️ Nhưng đếm dòng hoặc xuất lại tệp sẽ đếm đôi — 6 dòng xuất bốn lần có trọng số gấp bốn. ‘273 clip / 560 dòng’ đọc như 560 nhãn theo bên, nên phải sửa câu chữ ở đây và tài liệu kho

🚨 O. 조용히 틀리는 것들 — 숫자는 나오고, 그럴듯하고, 틀렸다Silent failures — the numbers come out, look right, and are wrongLỗi âm thầm — con số xuất ra, trông đúng, nhưng sai

이 묶음의 공통점은 예외가 나지 않는다는 것이다. 실행은 성공하고, 수치는 그럴듯하고, 아무도 뭔가 잘못됐다고 말해 주지 않는다. §9.5의 채널 순서 사슬과 §9.10의 오토바이 0건이 같은 부류다.

What these share is that nothing raises. The run succeeds, the figures look reasonable, and nothing says anything is wrong. The channel-order chain in §9.5 and the zero motorcycles in §9.10 are the same family.

Điểm chung là không gì ném lỗi. Lượt chạy thành công, số trông hợp lý, không gì nói sai. Chuỗi thứ tự kênh §9.5 và 0 xe máy §9.10 cùng một họ.

O1🚨 GPU 워커 두 개가 한 카드에 올라가면 검출기가 아무것도 돌려주지 않는다. 각 워커 프로세스의 첫 클립만 검출이 나오고 그 뒤 모든 클립은 상자 0개로 돌아온다. CUDA에서만 일어나고 Mac에서는 멀쩡하다. 🚨 그 실행은 248클립을 오류 없이 끝냈고 $1.19를 썼다 — 시간·메모리 수치는 진짜지만 검출은 쓸 수 없다. 「오류 없이 완료」가 「결과가 있다」를 뜻하지 않는다🚨 two GPU workers on one card make the detector return nothing. Only the first clip in each worker process gets detections; every later clip comes back with zero boxes. It happens only on CUDA and is fine on the Mac. 🚨 The run finished all 248 clips without an error and cost $1.19 — its timing and memory figures are real, but its detections cannot be used. "Completed with no errors" does not mean "produced results"🚨 hai worker GPU trên một card khiến detector trả rỗng. Chỉ clip đầu tiên mỗi tiến trình worker có phát hiện; mọi clip sau trả 0 hộp. Chỉ xảy ra CUDA, Mac bình thường. 🚨 Lượt chạy hoàn tất 248 clip không lỗi, phí $1.19 — thời gian và bộ nhớ thật, nhưng phát hiện không dùng được. ‘Hoàn tất không lỗi’ không có nghĩa ‘tạo ra kết quả’
O2🚨 중복된 test_sets 행이 n을 조용히 두 배로 만든다. goldset-answers라는 이름의 행이 둘 있어서, 328클립짜리 분할을 채점한 결과가 n=478로 보고됐다. ⚠️ 점 추정은 그대로지만 신뢰구간이 약 30% 좁아진다 — 틀린 답이 아니라 과신한 답이 나온다🚨 duplicate test_sets rows double n silently. Two rows named goldset-answers meant a scorer reported n=478 for a 328-clip split. ⚠️ The point estimates are unchanged but the confidence interval comes out about 30% too narrow — not a wrong answer, an overconfident one🚨 dòng test_sets trùng làm n tăng đôi âm thầm. Hai dòng tên goldset-answers khiến scorer báo n=478 cho split 328 clip. ⚠️ Ước lượng điểm không đổi nhưng khoảng tin cậy hẹp hơn khoảng 30% — không phải đáp án sai, mà quá tự tin
O3⚠️ 트랙이 없는 클립을 말없이 건너뛴다. ams1080-crash v1의 581편 중 139편에 트랙이 없고, 실행은 그것을 보고하지 않고 넘어간다 — 분모가 조용히 줄어든다⚠️ clips with no tracks are skipped without saying so. 139 of the 581 clips in ams1080-crash v1 have no tracks, and runs pass over them silently — the denominator shrinks without anyone being told⚠️ clip không có quỹ đạo bị bỏ mà không nói. 139/581 clip trong ams1080-crash v1 không có quỹ đạo; lượt chạy âm thầm bỏ qua — mẫu số giảm mà không ai được báo

F. 같은 자료를 읽으면 당신도 빠질 함정Traps in the source material — they caught this document firstBẫy trong tài liệu nguồn — chúng bắt chính tài liệu này trước

아래는 전부 레포와 원장을 성실하게 읽었을 때 도달하게 되는 잘못된 결론이다. 이 문서가 먼저 빠졌고, 뒤에 코드나 데이터로 확인해 고쳤다. 같은 자료를 읽을 당신에게도 같은 함정이 놓여 있다는 뜻이므로, 틀린 결론과 올바른 결론을 나란히 남긴다.

Every row below is a wrong conclusion you reach by reading the repos and ledgers carefully. This document reached each of them first and corrected it against code or data later. The trap is in the source material, not in the reading — so both the wrong and the right conclusion are kept side by side.

Mỗi dòng dưới là kết luận sai khi đọc cẩn thận kho và sổ. Tài liệu này từng tới từng kết luận trước, rồi sửa theo mã hoặc dữ liệu. Bẫy nằm trong nguồn, không phải cách đọc — nên giữ cả kết luận sai và đúng cạnh nhau.

Twenty-two, kept deliberately. A handover that hides its own corrections teaches a successor to trust it uniformly, which is the opposite of what this document is for. The most consequential were reading a withholding result as "CV adds nothing", citing a cross-model agreement figure that has no producing code and is not a valid test, and explaining the 차43-2 attractor by clause count when the real mechanism is which clauses can be read at all.

Hai mươi hai, cố ý giữ. Bàn giao che sửa sai của mình sẽ dạy người sau tin đồng đều, ngược mục đích tài liệu. Hệ quả nhất là đọc kết quả giữ lại thành ‘CV không thêm gì’, trích số đồng thuận liên mô hình không mã tạo và không phải kiểm hợp lệ, giải thích điểm hút 차43-2 bằng số điều khoản trong khi cơ chế thật là điều khoản nào đọc được.

1ql-re의 25/25 · 266/266을 성능처럼 나란히 적었다presented ql-re's 25/25 and 266/266 side by side as though they were performanceđặt 25/25 và 266/266 của ql-re cạnh nhau như hiệu năng
2「CV 늦은 융합 — 한 건도 못 바꿈」을 「CV는 쓸모없다」로 읽히게 적었다. 실제로는 CV를 VLM 대신 쓰면 접근 방향 53% → 87.8% — 단 아래 11번이 이 수치 자체를 다시 고친다wrote "CV fused late changed no pick" in a way that reads as "CV is useless". In fact, used in place of the VLM, approach side goes 53% → 87.8% — though item 11 below corrects that figure tooviết ‘CV ghép muộn không đổi lựa chọn’ theo cách đọc thành ‘CV vô dụng’. Thực tế dùng thay cho VLM, phía tiếp cận tăng 53% → 87.8% — dù mục 11 bên dưới cũng sửa số này
376% 상호 일치를 라벨 불신의 최초 증거로 내세웠다 — 계산 코드가 없고 통계적 검정도 아니다. 대신 cv-processing/src/cv_processing/splits.py:80의 중복 클립 9/59 주석 충돌이 model-free 직접 증거다offered a "76% cross-model agreement" as the first evidence of label doubt — no code computes it and it is not a valid test. The real model-free evidence is cv-processing/src/cv_processing/splits.py:80: 9 of 59 duplicate pairs carry conflicting annotationsđưa ‘76% đồng thuận liên mô hình’ làm bằng chứng đầu tiên nghi nhãn — không mã tính và không phải kiểm hợp lệ. Bằng chứng không mô hình thật là cv-processing/src/cv_processing/splits.py:80: 9/59 cặp trùng mang nhãn mâu thuẫn
4§3.3을 감사 하나로만 검증했다 — 후속 감사 두 개가 그 수치를 고친다(「네 도표」 → 12/23, 인용 문구는 원문에 없음)verified §3.3 against one audit only — two follow-up audits correct its numbers ("four charts" → 12 of 23, and the quoted phrase does not occur in the source)xác minh §3.3 chỉ theo một audit — hai audit sau sửa số (‘bốn biểu đồ’ → 12/23, và cụm được trích không có trong nguồn)
52026-09의 CV 상태를 현재로 적었다wrote the CV status as of 2026-09 as though it were currentghi trạng thái CV tháng 2026-09 như hiện tại
669.7%가 운영 빌드의 수치임을 밝히지 않았다quoted 69.7% without saying it is the production build's numbertrích 69.7% mà không nói đó là số của bản production
7resolve-questions·knia-dag를 Python 줄 수로 「검증 불가」라 적었다 — 둘 다 마크다운/JS 중심이다called resolve-questions and knia-dag "unverifiable" by Python line count — both are markdown- and JS-centredgọi resolve-questions và knia-dag ‘không thể xác minh’ bằng cách đếm dòng Python — cả hai xoay quanh markdown và JS
8계보를 세 단계로 적었다. 실제로는 네 단계다 (§8.6)described the lineage as three stages. It is four (§8.6)mô tả dòng phát triển có ba giai đoạn. Là bốn (§8.6)
9실패의 88%가 「보였을 사실」이라 적으면서, visible_likely가 분석 중에 내려진 판단이지 독립 확인이 아님을 처음에 밝히지 않았다wrote that 88% of failures were on facts that were visible, without first saying that visible_likely is a judgement made during the analysis rather than an independent checkviết 88% lỗi nằm ở sự kiện nhìn được, không nói trước visible_likely là phán xét lúc phân tích, không phải kiểm độc lập
10「상대차 선택에 자체 측정치가 없다」고 적었다. E-V-034가 177클립에서 쟀다 — 오늘의 픽 62%, 면적 71%, near-first 74%, 상한 89%wrote that the counterpart pick had never been measured. E-V-034 measured it on 177 clips — today's pick 62%, area 71%, near-first 74%, ceiling 89%viết chọn đối phương chưa từng đo. E-V-034 đo trên 177 clip — cách chọn hôm nay 62%, theo diện tích 71%, gần trước 74%, giới hạn 89%
11접근 방향 53% → 87.8%를 「거의 두 배」로 적었다. 출처는 lense의 E-V-001, 정답은 박스 중심 프록시이고 lense 자신이 E-V-022에서 철회했다 (§8.8)wrote the approach-side 53% → 87.8% as "nearly doubles". It is lense's E-V-001, the ground truth is a box-centre proxy, and lense itself withdrew it in E-V-022 (§8.8)viết phía tiếp cận 53% → 87.8% là ‘gần gấp đôi’. Đây là E-V-001 của lense, chuẩn là đại diện tâm hộp, và lense tự rút ở E-V-022 (§8.8)
1269.7%를 인용하면서 그 top-1이 「멈춰도 한 표」인 관대한 정의라는 것과 판단 불가가 분모 안에 있다는 것을 밝히지 않았다quoted 69.7% without saying that its top-1 is the generous "a stop still gets a pick" definition, or that 판단 불가 sits inside the denominatortrích 69.7% mà không nói top-1 là định nghĩa rộng ‘cây dừng vẫn có lựa chọn’ hoặc 판단 불가 nằm trong mẫu số
13차43-2가 「절 목록이 길어서」 끌개가 된다고 적었다. 세어 보니 아니다 — 차 도표 절 개수는 중앙값 6이고 차43-2도 6, 거기에 지는 차5-1은 7로 더 길다. 진짜 기전은 절의 종류다 (§7.3 정정)explained 차43-2's pull by clause-list length. Counted, that is false — the median is 6, 차43-2 is 6, and 차5-1, which loses to it, is 7. The real mechanism is which clauses can be read at all (§7.3)giải thích lực hút 차43-2 bằng độ dài danh sách điều khoản. Đếm cho thấy sai — trung vị 6, 차43-2 6, 차5-1 thua nó 7. Cơ chế thật là điều khoản nào đọc được (§7.3)
14knia-analysis가 「108개 중 2개만 검수」되었다고 적었다. 두 번 틀렸다 — HEAD의 REVIEW_LOG.md 첫 줄이 「REVIEW COMPLETE — 108/108」이고 leaf 136개가 전부 검수 표시다. 「구조적으로 얕다」는 표현은 어느 커밋에도 없다. 2026-07-08의 참인 한 순간이 최종 상태처럼 옮겨 적힌 것 (§8.6)wrote that only 2 of 108 of knia-analysis’s charts were reviewed. Wrong twice over — at HEAD REVIEW_LOG.md opens with "REVIEW COMPLETE — 108/108" and all 136 leaves are marked reviewed, while the phrase "structurally shallow" exists at no commit. A true snapshot of 2026-07-08 carried forward as though final (§8.6)viết chỉ 2/108 biểu đồ knia-analysis được xem xét. Sai hai lần — tại HEAD REVIEW_LOG.md mở bằng ‘REVIEW COMPLETE — 108/108’, cả 136 lá đánh dấu đã xem; cụm ‘nông về cấu trúc’ không có ở commit nào. Snapshot thật 2026-07-08 được chuyển tiếp như thể cuối cùng (§8.6)
15「사건의 순서가 설계된 적이 없다」고 적었다. 두 번 설계됐다 — ql-re가 한 칸을 세 질문으로 쪼갰고, 108도표 원장에는 CONFLICT를 네 번째 값으로 가진 사건 그래프가 있다. 검증되지 않고 이어지지 않았을 뿐이다 — 후임자에게는 빈 종이가 아니라 시험되지 않은 설계가 기다린다 (§8.1)wrote that a sequence of events was never designed. It was designed twice — ql-re split the one field into three questions, and the 108-chart ledger holds an event graph with CONFLICT as a fourth value. It was never validated and never carried forward; what waits is an untested design, not a blank page (§8.1)viết chuỗi sự kiện chưa từng thiết kế. Đã thiết kế hai lần — ql-re tách trường thành ba câu hỏi, sổ 108 biểu đồ giữ đồ thị sự kiện với CONFLICT là giá trị thứ tư. Chưa xác thực và chưa chuyển tiếp; thứ chờ là thiết kế chưa thử, không phải trang trắng (§8.1)
16CarAccident가 true/false 플래그로 VLM에게 교통법규 전체를 요구한다는 식으로 적었다. 글자 그대로는 틀렸다 — 사고 스키마에 불리언이 하나도 없다(유일한 bool은 매처 손잡이). 역설적으로 불리언이 많은 쪽은 question-ledger(507개 중 317개)다. 차이는 불리언이 아니라 규약 — 세 번째 상태와 금지된 추론 목록이 있느냐다 (§2.2·§8.1)framed CarAccident as asking a VLM to know the whole traffic code behind a true/false flag. Not literally right — there is no boolean anywhere in its accident schema (the only bool is a matcher knob). Ironically the boolean-heavy repo is question-ledger (317 of 507). The difference is protocol, not booleans: a third state and a list of forbidden inferences (§2.2, §8.1)mô tả CarAccident yêu cầu VLM biết toàn luật giao thông sau cờ true/false. Không đúng nghĩa đen — lược đồ tai nạn không có boolean nào (bool duy nhất là nút matcher). Trớ trêu kho nhiều boolean là question-ledger (317/507). Khác biệt là giao thức, không boolean: trạng thái thứ ba và danh sách suy luận cấm (§2.2, §8.1)
17「무관한 질문 하나가 옳은 도표를 떨어뜨린다」는 절반만 맞다 — 재어 보면 match_score가 1.0 → 0.35로 떨어지지만 폴백이 여전히 옳은 도표를 돌려준다. 정확히는 「확신 신호를 파괴하고 마지막 수단이 하드코딩된 추측인 사슬로 떨어뜨린다」다. 덜 자극적이고 더 나쁘다 — 틀린 답이 아니라 근거 없는 답이 나온다 (§8.1)"one irrelevant question drops the right chart" is half true — measured, match_score falls 1.0 → 0.35 but a fallback still returns the right chart. Accurately: it destroys the confidence signal and drops into a cascade ending in a hard-coded guess. Less dramatic and worse — not a wrong answer but an unevidenced one (§8.1)‘một câu không liên quan làm rơi biểu đồ đúng’ đúng nửa — khi đo, match_score 1.0 → 0.35 nhưng fallback vẫn trả biểu đồ đúng. Chính xác: phá tín hiệu tin cậy và rơi vào chuỗi kết thúc bằng đoán hard-code. Ít kịch tính hơn nhưng tệ hơn — không phải đáp án sai mà không bằng chứng (§8.1)
18「이 결함들 때문에 question-ledger가 시작됐다」를 사실처럼 적었다 — question-ledger 어디에도 CarAccident를 가리키는 문장이 없다. 인과는 그럴듯하지만 증거는 정황이고, 그렇게 적어 두었다 (§8.1)stated as fact that these defects are why question-ledger started. Nothing in question-ledger references CarAccident. The causal story is plausible but the evidence is circumstantial, and it is now recorded as such (§8.1)khẳng định các lỗi này là lý do question-ledger bắt đầu. Không gì trong question-ledger tham chiếu CarAccident. Câu chuyện nhân quả hợp lý nhưng bằng chứng gián tiếp, giờ được ghi như vậy (§8.1)
19기간을 두 번 늘려 적었다 — acci-vlm은 석 달이 아니라 사흘(2026-07-06→07-08, 5·6월 커밋 0건)이고, knia-dag는 아흐레가 아니라 엿새(71커밋 중 70개가 여섯 날, 그중 이틀에 64개). 둘 다 실제보다 느리게 들리게 적은 것이고, 빠르게 핵심을 찾아낸 사실이 지워진다 (§8.9·§8.6)overstated two durations — acci-vlm is three days, not three months (2026-07-06→07-08, with no May or June commit), and knia-dag is six working dates, not nine days (70 of 71 commits on six dates, 64 of them inside two). Both made the work sound slower than it was, erasing how fast the core problem was found (§8.9, §8.6)nói quá hai khoảng thời gian — acci-vlm ba ngày, không ba tháng (2026-07-06→07-08, không commit tháng 5/6); knia-dag sáu ngày làm việc, không chín (70/71 commit trong sáu ngày, 64 trong hai). Cả hai làm việc có vẻ chậm hơn, xóa mất tốc độ tìm vấn đề lõi (§8.9, §8.6)
20「284 분기」를 knia-dag의 것으로 인용해 왔다 — 실제로는 resolve-questions의 rules.v2.json이고, knia-dag에서는 그 수가 재현되지 않는다. 그리고 「분기」는 책의 단위가 아니라 계산된 것이다 — 124개 변형 중 62개가 선언이라 펼치면 284가 된다 (§8.12)cited "284 branches" as knia-dag’s. It belongs to resolve-questions’ rules.v2.json and cannot be reproduced in knia-dag. And a "branch" is computed, not a unit of the book: 62 of the 124 variants are disjunctions, and expanding them gives 284 (§8.12)trích ‘284 nhánh’ là của knia-dag. Nó thuộc rules.v2.json của resolve-questions và không tái hiện ở knia-dag. ‘Nhánh’ là đơn vị tính, không phải đơn vị sách: 62/124 biến thể là tuyển, mở ra 284 (§8.12)
21Stage 0이 「12편 중 6편에서 접촉을 부정했다」고 적었다. 합의 기준으로는 4편(003·023·027·053)이고, 나머지 둘은 다수가 「있었다」고 했으며 보수 모드가 걸린 이유는 접촉이 아니라 상대차 불일치다. 사람 정답 대비로는 8/12 정답 (§8.10)wrote that Stage 0 denied contact on 6 of 12 clips. By consensus it is 4 (003, 023, 027, 053); the other two voted majority yes and went conservative over counterpart disagreement, not contact. Against the human gold it is 8/12 correct (§8.10)viết Giai đoạn 0 từ chối tiếp xúc 6/12 clip. Đồng thuận là 4 (003, 023, 027, 053); hai clip kia bỏ phiếu đa số có, thận trọng vì bất đồng đối phương, không phải tiếp xúc. So với chuẩn người 8/12 đúng (§8.10)
22🚨 도표 이름 60곳을 잘못된 글자로 적고 있었다 — 「차43-2」가 아니라 다른 글자로. 도표 번호는 이 문서의 핵심 어휘라 조판 문제가 아니라 내용 오류다. 같은 패스에서 깨진 한글 73자와 violation 허용값 12개 → 실제 25개도 고쳤다🚨 60 chart names were written with the wrong character — not 차43-2 but something else. Chart numbers are this document’s core vocabulary, so that is a content error, not a typesetting one. The same pass fixed 73 corrupted Korean characters and corrected the violation enum from 12 listed values to the real 25🚨 60 tên biểu đồ viết sai ký tự — không phải 차43-2 mà là thứ khác. Số biểu đồ là từ vựng lõi tài liệu, nên đây là lỗi nội dung, không phải dàn chữ. Cùng lượt sửa 73 ký tự Hàn hỏng và enum violation từ 12 giá trị được liệt kê thành 25 giá trị thật
읽는 순서 · how to use chapter 8Thứ tự đọc · cách dùng chương 8

8.1 · 8.2 · 8.5 · 8.6은 숫자를 인용하기 전에 읽을 것 — 넷 다 자기 자신을 확인한 수를 성능처럼 내놓는다. 8.3 · 8.4는 코드를 고치기 전에 읽을 것 — 오늘 돌아가는 것의 결함이다. 8.9는 한 장으로 된 목록이다.

Read 8.1 / 8.2 / 8.5 / 8.6 before citing a number — all four present a self-check as performance. Read 8.3 / 8.4 before changing code — those are defects in what runs today. 8.9 is the one-page list.

Đọc 8.1 / 8.2 / 8.5 / 8.6 trước khi trích số — cả bốn trình bày tự kiểm tra như hiệu năng. Đọc 8.3 / 8.4 trước khi sửa mã — đó là lỗi trong thứ đang chạy. 8.9 là danh sách một trang.

09모델 · 논문 · 라이브러리 · Models, papers and librariesMô hình, bài báo và thư viện

이 장은 레포가 아니라 세션 기록 764편(6.5 GB)에서 복원했다. 레포에는 채택된 것만 남아 있고, 무엇을 왜 버렸는지는 기록에만 있다. 버린 것마다 인용된 판정과 숫자를 붙인다 — 후임자가 같은 것을 다시 시도하지 않도록.

Recovered from 764 session transcripts (6.5 GB), not from the repos. The repos keep only what was adopted; why something was dropped exists only in the transcripts. Each rejection carries its quoted verdict and its number.

Khôi phục từ 764 bản ghi phiên (6.5 GB), không phải từ kho mã. Kho mã chỉ giữ thứ được chọn; lý do loại bỏ chỉ có trong bản ghi. Mỗi lựa chọn bị loại có trích kết luận và con số.

→ 여기서 고른 것이 실제로 어떻게 쓰이는지는 §4.4(한 건이 지나가는 길)에, 그 코드의 결함은 §8.3(lense CV 체인)에 있다.

→ How these choices are actually used is in §4.4; the defects in that code are in §8.3.

→ Cách dùng thực tế nằm ở §4.4; lỗi mã nguồn ở §8.3.

⚠️ P. 분모가 조용히 좁아진 숫자들 — 전부 기록에 남은 결과 수치다Numbers whose denominator was quietly narrowed — every one of them a reported resultNhững con số bị âm thầm thu hẹp mẫu số — tất cả đều từng được báo cáo

아래는 틀린 계산이 아니다. 각각 정확하게 측정됐고, 측정된 조건이 인용될 때 함께 따라가지 않았을 뿐이다. 후임자가 이 숫자를 다시 만나면 조건을 먼저 복원할 것.

None of these is a miscalculation. Each was measured correctly, and the condition it was measured under did not travel with it. When a successor meets these figures again, restore the condition first.

Không phải tính sai. Mỗi số đều đo đúng, nhưng điều kiện đo không đi cùng con số. Người tiếp quản gặp lại phải khôi phục điều kiện trước.

인용되는 형태as it gets quotedcách thường được trích실제 조건the actual conditionđiều kiện thực tế
「점선 자(dash ruler)가 λ 오차를 절반으로 — 21.0% → 11.8%」"the dash ruler halves λ error — 21.0% → 11.8%"‘thước vạch đứt giảm nửa lỗi λ — 21.0% → 11.8%’🚨 14편 중 2편에서만 주기가 나온다. 실패는 전부 DASH_MIN_Z = 4.0이고, 성공한 쪽은 z=4.3으로 겨우 통과한다. 말뭉치 규모에서는 42편 중 0편이 교차검증을 통과한다 — 같은 도구가 15편 중 12편에서 떨어진다. 「λ를 쓰지 말 것」이라는 규칙이 문서가 적은 것보다 강한 이유🚨 a dash period is found on 2 of 14 clips; every failure is DASH_MIN_Z = 4.0 and the success scrapes through at z=4.3. At corpus scale 0 of 42 clips pass the cross-check, and the same ruler fails 12 of 15. The "never use λ" rule rests on firmer ground than this document states🚨 tìm thấy chu kỳ vạch đứt ở 2/14 video; mọi thất bại là DASH_MIN_Z = 4.0, thành công chỉ vừa qua ở z=4.3. Trên toàn bộ dữ liệu, 0/42 video qua kiểm tra chéo; cùng thước thất bại 12/15. Quy tắc ‘không bao giờ dùng λ’ có nền vững hơn tài liệu này mô tả
「상자 크기 적분이 상대차를 10편 중 8편에서 고른다」"integrated box size picks the counterpart on 8 of 10"‘kích thước hộp tích lũy chọn đúng xe đối phương ở 8/10’⚠️ 접촉 시각을 정답으로 고정했을 때다. 검출기 자신의 접촉 시각으로는 9편 중 5편으로 떨어진다(한 클립은 8.7초, 다른 하나는 4.5초 틀린다). 그리고 98편에서는 약 70%이고, 같은 계열 7개 변형이 65~69/98 사이에 몰려 서로 잡음 안에 있다. visus의 면적 기반 상대차 선택기가 이 계열이다⚠️ that is with the gold contact time. On the detector's own contact time it is 5 of 9 (one clip off by 8.7 s, another by 4.5 s). At 98 clips the honest figure is about 70%, with seven variants of the family bunched between 65 and 69 of 98, inside each other's noise. visus runs an area-based picker from this family⚠️ đó là khi dùng thời điểm tiếp xúc chuẩn. Dùng thời điểm bộ phát hiện tự tìm thì còn 5/9 (một video lệch 8.7 s, một lệch 4.5 s). Với 98 video, con số trung thực khoảng 70%; bảy biến thể cùng nhóm tụ trong 65 đến 69/98, nằm trong nhiễu của nhau. visus dùng bộ chọn dựa diện tích thuộc nhóm này
「카메라 높이 H를 차로폭에서 얻는다」"H comes from the lane width"‘H lấy từ chiều rộng làn’🚨 12편 중 5편만 쓸 만한 프레임을 갖는다. 다른 경로(차폭 사전분포)는 11편 중 1편만 타당한 장착 높이(1.2~1.5 m)에 들어오고 중앙값이 1.79 m였다 — 승용차가 아니라 버스의 높이다. 축(axle) 행 보정 뒤에도 12편 중 3편. visus가 보고하는 모든 미터가 이 H에 기대고 있다🚨 only 5 of 12 clips have a usable frame. The other route (a vehicle-width prior) put 1 of 11 inside a plausible 1.2–1.5 m mount range, with a median of 1.79 m — a bus, not a passenger car. After the axle-row fix, 3 of 12. Every metre visus reports stands on this H🚨 chỉ 5/12 video có khung dùng được. Cách khác (giả định bề rộng xe) chỉ đưa 1/11 vào độ cao lắp hợp lý 1.2–1.5 m, trung vị 1.79 m — xe buýt chứ không phải xe con. Sau sửa hàng trục bánh, 3/12. Mọi giá trị mét visus báo đều dựa trên H này
acci-vlm의 benchmark_1000으로 잰 모든 수치any figure measured on acci-vlm's benchmark_1000mọi con số đo trên benchmark_1000 của acci-vlm🚨 부풀려져 있다. 파일 1,000개 중 고유 916개, 중복군 82개, 166개(16.6%)가 중복이고 중복 인지 분할이 전혀 없다. 판정 가능한 44개 군 중 23개가 폴드를 가로지른다. 반면 cv-processing의 splits_v2.jsonl은 내용 해시로 묶어 군 단위로 폴드를 배정하므로 누수가 구조적으로 불가능하다(688행 → 628편, 정확 중복 60개 제거, 폴드를 가로지르는 군 0개). 학습·평가에는 splits_v2를 쓸 것🚨 inflated. 1,000 files, 916 unique, 82 duplicate groups, 166 files (16.6%) duplicated, and no duplicate-aware splitting at all; of the 44 groups that can be adjudicated, 23 span folds. cv-processing's splits_v2.jsonl, by contrast, hashes content and assigns folds at group level, making leakage structurally impossible (688 rows → 628 clips, 60 exact duplicates dropped, zero groups spanning folds). Use splits_v2 for anything train or eval🚨 bị phóng đại. 1,000 tệp, 916 duy nhất, 82 nhóm trùng, 166 tệp (16.6%) trùng, không chia tập theo nhóm trùng; trong 44 nhóm xét được, 23 xuyên các fold. Ngược lại, splits_v2.jsonl của cv-processing băm nội dung, chia fold theo nhóm, không thể rò rỉ về cấu trúc (688 dòng → 628 video, loại 60 bản trùng chính xác, không nhóm nào xuyên fold). Dùng splits_v2 cho mọi huấn luyện/đánh giá
파일명의 날짜로 분할하기splitting by the date in the filenamechia tập theo ngày trong tên tệp⚠️ 아무것도 분할하지 않는다. 중복 파일들은 vehicle_NNN_NNNNN 접미사를 공유하고 날짜 접두사만 다르다 — 파일명의 날짜는 수집 산물이지 촬영일이 아니다⚠️ it splits by nothing. The duplicate files share the vehicle_NNN_NNNNN suffix and differ only in the date prefix — filename dates are a collection artefact, not capture dates⚠️ không chia được gì. Tệp trùng có cùng hậu tố vehicle_NNN_NNNNN, chỉ khác tiền tố ngày — ngày tên tệp do quá trình thu thập tạo ra, không phải ngày quay
도표 트리 걷기의 단계별 정확도the step accuracies of the chart-tree walkđộ chính xác từng bước duyệt cây biểu đồ⚠️ 53편이 전부 차대차 > 같은 방향 아래라 1·2단계는 선택지가 없다 — §5.3⚠️ all 53 clips sit under 차대차 > same direction, so steps 1 and 2 have no alternatives — §5.3⚠️ cả 53 video thuộc ô tô va chạm ô tô > cùng hướng, nên bước 1 và 2 không có phương án khác — §5.3
held-out 검출기 평가 「30편」a held-out detector evaluation "on 30 clips"đánh giá bộ phát hiện trên tập giữ riêng ‘30 video’🚨 20편에서 돌았다 — 라벨 오독으로 10편이 조용히 빠졌다(§8.13)🚨 it ran on 20 — ten were silently dropped by a misreading of the labels (§8.13)🚨 thực tế chạy 20 — mười video âm thầm bị loại do đọc sai nhãn (§8.13)

🚨 Q. 멈추지 않는 파이프라인 — 기본값으로 메우고, 숫자로 적어 내보낸다A pipeline that never stops — it fills with defaults and writes the number outQuy trình không bao giờ dừng — điền mặc định rồi xuất số

O 계열이 조용히 틀리는 결과였다면, Q는 그 윗물이다 — 어떤 검사도 실행을 멈추지 않는 설계. 모두 worldmap.py와 그 상류에서 확인된 것이다.

Where register O is about results that are silently wrong, Q is upstream of it — a design in which no check ever stops a run. All of these were confirmed in worldmap.py and the chain above it.

Sổ O nói về kết quả âm thầm sai; Q nằm phía trước — thiết kế không kiểm tra nào dừng lần chạy. Tất cả xác nhận trong worldmap.py và chuỗi gọi phía trên.

어떤 게이트도 실행을 멈추지 않는다no gate ever stops a runkhông cổng nào dừng lần chạy검사는 전부 조용히 기본값으로 떨어지거나 숫자로 적힌다. 한 클립은 기본 카메라 높이 1.3 m를 썼고, 다른 클립은 유효 프레임이 37개 중 0개인 적합에서 나온 0.93 m를 썼으며, 또 한 클립은 S2 경로가 S1의 59.7배인 채로 그대로 기록됐다every check either falls back silently or is written out as a number. One clip used the 1.3 m default camera height; another used 0.93 m from a fit with 0 of 37 valid frames; a third was written out with an S2 path 59.7 times its S1 pathmọi kiểm tra âm thầm dùng dự phòng hoặc ghi ra như con số. Một video dùng độ cao camera mặc định 1.3 m; một dùng 0.93 m từ phép khớp có 0/37 khung hợp lệ; một xuất đường đi S2 dài gấp 59.7 lần S1
라벨된 3초 창에서 적합한 값을 10초 전체에 적용한다numbers fitted on a 3-second window are applied to the whole cliptham số khớp trên cửa sổ 3 giây áp cho toàn video지평선·롤·카메라 높이·보닛 행·초점거리가 전부 라벨된 접촉 시각 ±(−2초~+1초) 창에서만 추정된 뒤 10초 클립 전체에 쓰인다. 게다가 worldmap.py는 사람 라벨 없이는 아예 돌지 않는다(접촉 시각과 상대차 트랙 id를 stage0_gold에서 읽는다)horizon, roll, camera height, hood row and focal length all come from a chain run only on the 3 s window around the labelled contact time (−2 s to +1 s), then are applied to the whole 10 s clip. And worldmap.py will not run without human labels at all — it reads the contact time and the counterpart track id from stage0_goldchân trời, góc nghiêng, độ cao camera, hàng ca-pô, tiêu cự đều lấy từ chuỗi chạy chỉ trên cửa sổ 3 s quanh thời điểm tiếp xúc đã gán nhãn (−2 s đến +1 s), rồi áp cho toàn video 10 s. worldmap.py không chạy được nếu thiếu nhãn người — đọc thời điểm tiếp xúc và ID vệt xe đối phương từ stage0_gold
멈춘 차가 161 m를 달린다a stopped car drives 161 mxe đứng yên chạy 161 m🚨 자차 속도가 측정되지 않은 프레임을 클립 중앙값으로 메운다. 어떤 클립은 150프레임 중 48프레임에서만 측정됐고, 자차는 실제로 선 뒤에도 계속 굴러 실제 ≈75 m 경로가 161 m로 적혔다. 다른 클립은 70프레임 중 14프레임에서 15.2 m/s를 보고하는데, 그 클립의 정답 주석은 자차가 정지·대기였다. 정차 후 출발은 차42·차47 계열을 가르는 사실이다 — 오류 표시는 없다🚨 frames where ego speed was not measured are filled with the clip's median. On one clip the measurement fired on 48 of 150 frames, so the ego keeps rolling after it has actually stopped and a true path of ≈75 m is written as 161 m. On another it reports 15.2 m/s from 14 of 70 frames, on a clip whose gold annotation says the ego was stopped or waiting. Pulling away from a stop is what separates the 차42 and 차47 families — and nothing is flagged🚨 khung chưa đo tốc độ xe camera được điền trung vị của video. Một video chỉ đo được 48/150 khung, nên xe vẫn chạy sau khi đã dừng, đường thật ≈75 m bị ghi thành 161 m. Video khác báo 15.2 m/s từ 14/70 khung dù nhãn chuẩn nói xe đang dừng/chờ. Khởi hành từ trạng thái dừng phân biệt nhóm 차42 và 차47 — không có cờ nào cảnh báo
688편 전부에 트랙이 있고, 전부 비어 있다a track in all 688 clips, and all of it emptycó track trong cả 688 video, nhưng tất cả trống🚨 cv-processing의 타임라인 파일 688개 전부에 marking 트랙이 있고, 표본 200개 중 200개가 status != "ok"다 — 파이프라인이 노면 표시를 전혀 볼 수 없다고 스스로 선언한 것이다. status를 읽지 않는 소비자는 그럴듯하고 꽉 찬, 의미 없는 값을 얻는다. 법적 무게는 분명하다 — 차45-6 대 차43-2가 백색 실선 대 백색 점선에서 갈리고(100:0 대 30:70), 차45-4는 황색 실선에만, 차43-7은 안전지대에 걸린다. 같은 표본에서 ego_lane 트랙은 200개 중 약 115개만 ok다🚨 cv-processing has a marking track in every one of its 688 timeline files, and it is status != "ok" on 200 of 200 sampled — the pipeline declaring it cannot see road markings at all. A consumer that does not read status gets a plausible, fully populated, meaningless result. The legal stakes are explicit: 차45-6 versus 차43-2 turns on solid versus dashed white (100:0 against 30:70), 차45-4 applies only to a solid yellow line, and 차43-7 needs a hatched safety zone. In the same sample the ego_lane track is ok on about 115 of 200🚨 cv-processing có track marking trong toàn bộ 688 tệp timeline, và status != "ok" ở 200/200 mẫu — quy trình tự nói hoàn toàn không thấy vạch đường. Bên dùng không đọc status nhận kết quả đầy đủ, hợp lý bề ngoài nhưng vô nghĩa. Hệ quả pháp lý rõ: 차45-6 và 차43-2 khác nhau ở vạch trắng liền/đứt (100:0 so với 30:70), 차45-4 chỉ áp dụng vạch vàng liền, 차43-7 cần vùng an toàn gạch chéo. Cùng mẫu, track ego_lane ok ở khoảng 115/200
지도의 공백이 「8차로」라는 정수로 도착한다a gap in the map arrives as the integer "8 lanes"khoảng trống bản đồ trở thành số nguyên ‘8 làn’⚠️ 차로 번호가 {2:10, 3:9, 1:2, 8:11}로 흔들린다. 8차로 판독은 가까운 중앙선이 지도에 없는 프레임에서 나온 것으로, 중앙분리대를 건너 반대편 연석까지(+23.9 m) 세고 있었다. 고친 방향은 정직한 UNKNOWN이다 — 최종 실행에서 37프레임 중 20프레임은 아예 번호를 못 매긴다⚠️ the lane number wobbles as {2:10, 3:9, 1:2, 8:11}. The 8-lane readings come from frames where the nearby centre line is not mapped, so it counts across the median to the opposing kerb at +23.9 m. The fix was honest UNKNOWNs: in the final run 20 of 37 frames cannot be numbered at all⚠️ số làn dao động {2:10, 3:9, 1:2, 8:11}. Đọc 8 làn ở khung không ánh xạ được vạch giữa gần, nên đếm xuyên dải phân cách tới lề đối diện +23.9 m. Cách sửa là UNKNOWN trung thực: lần cuối 20/37 khung không xác định được số làn
적합 구간 밖으로 그린 선이 확신을 만든다a model drawn outside its fit interval manufactures confidencevẽ mô hình ngoài miền khớp tạo độ tin cậy giả🚨 프레임 모델은 적합에 쓰인 행에서만 유효한 2차식인데 화면 하단 전체에 그려지고 있었다 — 실패한 적합이 확신에 찬 곡선으로 외삽된다. 첫 번째 경고 시도는 프레임의 100%를 깃발로 표시했다(원근 자체를 실패로 잰 것). 올바른 검사로 바꾸니 12편의 225개 모델 중 17%가 정직한 실패율이다. 같은 계열: 클립 평균 하나로 그린 정지된 차선 — 실제로는 왼쪽 경계가 한 클립에서 298 px(4 m 거리에서 0.77 m) 움직이는데 화면은 얼어붙은 선 하나를 보여 줬다🚨 the frame model is a quadratic valid only over the rows it was fitted on, and it was being drawn across the whole lower frame — so a failed fit extrapolates into a confident-looking curve. The first warning attempt flagged 100% of frames (it was measuring perspective as failure); the right test gives 17% of 225 models across 12 clips as the honest failure rate. Same family: lanes drawn static from one clip-level average, while the left boundary actually sweeps 298 px — 0.77 m at 4 m range across the clip, and the screen showed one frozen line🚨 mô hình khung là hàm bậc hai chỉ hợp lệ trong các hàng dùng để khớp, nhưng bị vẽ toàn nửa dưới khung — khớp lỗi ngoại suy thành đường cong có vẻ chắc chắn. Cảnh báo đầu đánh dấu 100% khung (nhầm phối cảnh là lỗi); phép thử đúng cho tỷ lệ lỗi trung thực 17% trong 225 mô hình, 12 video. Cùng nhóm lỗi: làn được vẽ tĩnh từ trung bình toàn video, trong khi biên trái thực sự quét 298 px — 0.77 m ở khoảng cách 4 m, màn hình vẫn hiện một đường đứng yên
좁아진 차로는 보통 기하가 아니라 가림이다a narrowing corridor is usually occlusion, not geometryhành lang hẹp lại thường do che khuất, không phải hình học⭐ 13편 중 10편에서 더 많이 가려진 쪽 절반의 복도가 더 좁다. 가장 강한 클립은 1.30 → 0.94(28% 붕괴)다. 차로가 좁아진 것이 아니라 도색이 덮인 것이고, 적합이 잡을 것이 없어진 것이다(하단 차로폭이 화면폭의 31%, 맑은 클립은 71%). 정체는 추돌·진로변경 사건이 가장 많이 일어나는 조건이므로, 복도 폭은 장식이 아니라 게이트로 쓸 것⭐ 10 of 13 clips have a narrower corridor in their more-occluded half, the strongest being 1.30 → 0.94, a 28% collapse. The lane does not narrow — the paint is covered, and the fit has nothing to hold (lane width at the bottom of the frame is 31% of frame width, against 71% on a clear clip). Stop-and-go is the condition in which most rear-end and lane-change cases occur, so corridor width should gate the evidence, not decorate it⭐ 10/13 video có hành lang hẹp hơn ở nửa bị che nhiều hơn, mạnh nhất 1.30 → 0.94, sụt 28%. Làn không hẹp — vạch sơn bị che, phép khớp không có chỗ bám (bề rộng làn đáy khung 31% bề rộng khung, so với 71% khi rõ). Dừng–chạy là điều kiện phần lớn tai nạn tông sau/chuyển làn xảy ra, nên bề rộng hành lang phải làm cổng kiểm bằng chứng, không chỉ trang trí

⭐ 이 레지스터 전체는 한 문장으로 요약된다: 「출력이 있다」는 「측정됐다」가 아니다. 이 가지의 코드를 visus로 옮긴다면 첫 작업은 기능이 아니라 게이트다 — 어떤 값이 기본값·중앙값·외삽에서 왔는지 출력 자체가 들고 다니게 할 것.

⭐ The whole register reduces to one sentence: "there is an output" is not "it was measured." If any of this code is ported into visus, the first job is gates, not features — make the output carry whether a value came from a default, a median fill, or an extrapolation.

⭐ Toàn bộ sổ rút về một câu: ‘có đầu ra’ không phải ‘đã đo’. Nếu chuyển mã này vào visus, việc đầu là cổng lọc, không phải tính năng — đầu ra phải mang theo giá trị đến từ mặc định, điền trung vị hay ngoại suy.

🚨 R. 화면까지 갔거나, 갈 뻔한 결함 — 전부 운영 중인 제품이나 그 직전 데모에서Defects that reached the adjuster's screen, or would have — all in the live product or its immediate predecessorLỗi đã hoặc suýt tới màn hình giám định viên — sản phẩm đang chạy hoặc tiền nhiệm trực tiếp

앞의 레지스터들이 수치와 코드의 결함이라면, 여기 여섯은 사람이 보는 면에서 일어난 것이다. 넷(R2–R5)은 고쳐졌고, 둘(R1 · R6)은 고쳤는지 확인이 필요하다.

Where the earlier registers are defects in numbers and code, these six happened on the surface a person looks at. Four (R2–R5) were fixed; two (R1 and R6) need checking.

Các sổ trước nói lỗi số liệu và mã nguồn; sáu lỗi này nằm ngay trên bề mặt con người nhìn. Bốn lỗi (R2–R5) đã sửa; hai lỗi (R1, R6) cần kiểm tra.

결함defectlỗi무엇이 보였나what was on screenmàn hình hiển thị gì
R1 · 증거 표가 빈다the evidence table goes blankbảng bằng chứng trống
service.py · _with_fits()
🚨 v2.judge가 사건 옆에 fit.json을 쓰면서도 그것을 뺀 판정을 돌려준다. 그래서 채팅에서 다시 도출된 판정 342건 전부가 표 없이 저장됐고(「0 of 342」), 사건 화면의 도표와 사실 대조가 첫 채팅 턴 이후 비었다. 데모에서 직접 확인됐다 — 저장된 판정 둘 다 fits = 0. 도표를 왜 골랐는지 보여 주는 바로 그 화면이다. ⚠️ 당시 수정은 커밋되지 않은 작업 트리에만 있었고 ship.py는 git archive HEAD를 배포하므로 배포될 수 없었다 — 후임자는 _with_fits가 결국 들어갔는지 확인할 것🚨 v2.judge writes fit.json beside the case and returns a verdict without it, so every chat-derived verdict was stored with no table ("0 of 342") and the case view's 도표와 사실 대조 went blank after the first chat turn. Confirmed on the demo: both stored verdicts had fits = 0. This is the screen that shows why a chart was chosen. ⚠️ The fix existed only as an uncommitted working-tree change, and ship.py deploys git archive HEAD, so it could not ship — check whether _with_fits ever landed🚨 v2.judge ghi fit.json cạnh hồ sơ nhưng trả kết luận không kèm nó, nên mọi kết luận từ chat lưu không có bảng (‘0 of 342’), mục đối chiếu biểu đồ và dữ kiện trống sau lượt chat đầu. Đã xác nhận trên demo: cả hai kết luận lưu có fits = 0. Đây là màn hình giải thích vì sao chọn biểu đồ. ⚠️ Bản sửa chỉ là thay đổi chưa commit; ship.py triển khai git archive HEAD, nên không thể được phát hành — kiểm tra _with_fits đã tích hợp chưa
R2 · 배포가 성공을 보고하며 낡은 화면을 서빙한다a deploy reports success and serves a stale pagetriển khai báo thành công nhưng phục vụ trang cũ🚨 배포 스크립트의 rsync --delete에 최상위 cases/ 작업공간을 위한 제외가 있었는데 rsync가 그것을 모든 깊이에서 일치시켜 web/src/app/(app)/cases/까지 건너뛰었다. 박스는 몇 시간 전의 사건 화면 코드를 계속 빌드하고 있었다. 같은 제외가 협의 준비 화면의 변경도 함께 떨어뜨렸을 것이다🚨 the deploy script's rsync --delete carried an exclude meant for the top-level cases/ workspaces, and rsync matched it at every depth, so it also skipped web/src/app/(app)/cases/. The box kept rebuilding hours-old case-page code, and the same exclude would have dropped the 협의 준비 changes in those routes too🚨 rsync --delete của script có mẫu loại trừ cho không gian cases/ cấp đầu; rsync khớp ở mọi độ sâu, nên bỏ qua cả web/src/app/(app)/cases/. Máy cứ dựng lại mã trang hồ sơ cũ hàng giờ; mẫu đó cũng sẽ bỏ thay đổi chuẩn bị thương lượng trong các route
R3 · 심볼릭 링크를 통과해 운영 데이터에 쓴다a sync writes through a symlink into live datađồng bộ ghi xuyên symlink vào dữ liệu đang chạy🚨 재생(replay) 사본의 data/가 운영의 /opt/visus/data로 걸린 링크였고, 다른 세션의 동기화가 root로 rsync --delete를 돌려 링크를 통과해 운영 데이터에 그대로 썼다. 운영 데이터 폴더가 root 소유가 되고 로컬 클립 캐시가 지워졌다. 영상은 S3에 있어 유실은 없었지만, 재부팅 이후 워커가 그 폴더에 쓰지 못해 모든 분석이 실패했고 A/B의 저부하·배치 팔이 통째로 날아갔다. 지금은 replay.py가 링크된 폴더로의 동기화를 거부한다🚨 the replay copy's data/ was a link to the live /opt/visus/data, and another session's sync ran rsync --delete as root and wrote straight through it into production. The live data folder became root-owned and the local clip cache was deleted. Nothing was lost — clips live in S3 — but after the reboot the worker could no longer write there, so every analysis failed, taking the A/B's low-effort and batch arms with it. replay.py now refuses to sync into a linked folder🚨 data/ của bản chạy lại là liên kết đến /opt/visus/data đang vận hành; phiên khác chạy rsync --delete bằng root, ghi xuyên vào production. Thư mục dữ liệu thành sở hữu root, bộ đệm video cục bộ bị xóa. Không mất dữ liệu — video ở S3 — nhưng sau khởi động lại, worker không ghi được, mọi phân tích thất bại, kéo theo hai phương án low-effort và batch của A/B. replay.py nay từ chối đồng bộ vào thư mục liên kết
R4 · 정답 도표가 순위 6위라 화면에 없고, 화면은 그것이 사라졌다고 말한다the right chart is rank 6, off screen, and the screen says it is gonebiểu đồ đúng ở hạng 6, ngoài màn hình; giao diện nói đã bị loại🚨 엔진은 32개 중 6위에 차43-2를 두었는데 카드가 상위 3개만 보여 준다. 더 나쁜 것은 유도 질문의 답 칩이었다 — keeps가 「남은 도표 ∩ 화면의 카드 3장」으로 계산되어 6위 도표는 어떤 칩에도 나타날 수 없었다. 그래서 무엇을 고르든 화면은 「당신의 도표는 사라졌다」고 말했다. 엔진의 실제 출력은 그 답 중 둘에서 차43-2를 살려 둔다 — 칩이 사라지지 않은 도표를 사라졌다고 주장한 것이다. 그 사건에서 사정사는 24분을 쓰고 포기했다. 고친 방식이 그대로 설계 규칙이다 — keeps를 remaining_charts에서 도출하고, 후보마다 rank · open_questions · rank_reason_ko를 싣고, keeps == remaining_charts ∩ live를 단언하는 테스트를 둔다🚨 the engine had 차43-2 at rank 6 of 32 while the cards show the top three. Worse were the guided question's answer chips: keeps was computed as remaining charts ∩ the three cards on screen, so a rank-6 chart could never appear in one. Whatever you chose, the screen told you your chart was gone — while the engine's own output keeps 차43-2 alive under two of those answers. A chip claimed a chart was gone when it was not, and on that case the adjuster spent 24 minutes and gave up. The fix is the reusable rule: derive keeps from remaining_charts, put rank · open_questions · rank_reason_ko on every candidate, and assert keeps == remaining_charts ∩ live in a test🚨 bộ máy xếp 차43-2 hạng 6/32, thẻ chỉ hiện ba đầu. Tệ hơn, nhãn đáp án câu hỏi dẫn dắt: keeps được tính bằng biểu đồ còn lại ∩ ba thẻ trên màn hình, nên biểu đồ hạng 6 không thể xuất hiện. Chọn gì màn hình cũng nói biểu đồ đã mất, trong khi đầu ra bộ máy vẫn giữ 차43-2 với hai câu trả lời. Nhãn tuyên bố loại dù chưa loại; giám định viên mất 24 phút rồi bỏ cuộc. Quy tắc sửa tái dùng được: suy keeps từ remaining_charts, thêm rank · open_questions · rank_reason_ko cho mọi ứng viên, kiểm thử keeps == remaining_charts ∩ live
R5 · 공유된 임시 파일 하나가 사건의 15%를 떨어뜨린다one shared temp file would have failed ~15% of casesmột tệp tạm dùng chung có thể làm hỏng ~15% hồ sơ⚠️ 한 클립 안에서 동일한 요청 둘이 동시에 돌면 모델 호출 캐시의 공유 임시 파일에서 충돌하고, 깨진 캐시 항목 하나가 클립 전체를 떨어뜨렸다. 한 실행에서 20편 중 3편, 다른 실행도 같은 것에 부딪혔다 — 운영이었다면 약 15%의 사건이 실패했을 것이다. 옛 코드는 새 테스트를 5/5로 떨어뜨렸다⚠️ when two identical requests ran at once inside one clip they collided on the model-call cache's shared temporary file, and one broken cache entry took the whole clip down. Three of 20 clips in one run, and a second run hit it too — about 15% of live cases would have failed. The old code failed the new test 5 of 5⚠️ hai yêu cầu giống nhau chạy đồng thời trong cùng video đụng vào tệp tạm chung của bộ đệm lệnh mô hình; một mục đệm hỏng làm sập cả video. Một lần chạy có 3/20 video lỗi, lần khác cũng gặp — khoảng 15% hồ sơ trực tiếp sẽ thất bại. Mã cũ thất bại kiểm thử mới cả 5/5
R6 · 기각된 후보가 기각 표시 없이 카드로 뜬다rejected candidates render as cards with no rejection markerứng viên bị loại vẫn hiện thẻ không có dấu loại
fit-section.tsx
⚠️ R1과 함께, 고쳐졌는지 확인되지 않은 둘 중 하나다. 도표와 사실 대조 구역은 후보 도표마다 최적 결속을 펼친 카드를 그리는데, 접힌 「다른 역할」에만 「(기각)」 딱지가 붙는다. 그래서 차43-3·43-4·43-5·43-6은 모순 행으로 가득 찬 온전한 카드로 보이고 배제되었다는 표시가 없다. 화면은 「이 답에는 모순이 많다」로 읽히는데 뜻은 「각 대안이 왜 죽었는지 여기 있다」이다. 🚨 실제로 모순은 전부 기각된 결속 위에 있었다 — 채택된 차43-2/B는 6개 중 0개 모순이다. 제안된 수정은 작다 — 채택되지 않은 카드마다 「제외」와 한 줄 이유(「상대차가 앞(선행) 등 4개 절이 모순 — 제외」)를 붙여 모순이 기각의 근거로 읽히게 한다. ⚠️ 2026-09-22의 수정은 다른 역할 접힘만 고쳤다⚠️ one of the two items here that are not confirmed fixed, with R1. The 도표와 사실 대조 section draws every candidate chart as its own card with the best binding expanded, and only the folded alternate role gets a "(기각)" label. So 차43-3, 43-4, 43-5 and 43-6 appear as full cards packed with contradiction rows and no marker saying they were ruled out. The screen reads as "lots of contradictions" when it means "here is why each alternative died". 🚨 In the case that prompted it, every contradiction was on a rejected binding — the picked 차43-2/B had 0 of 6. The proposed fix is small: mark each non-picked card 제외 with a one-line reason, so contradictions read as the cause of the rejection. ⚠️ A 2026-09-22 commit fixed only the alternate-role fold⚠️ một trong hai mục chưa xác nhận sửa, cùng R1. Mục đối chiếu biểu đồ và dữ kiện vẽ mọi biểu đồ ứng viên thành thẻ, mở vai trò tốt nhất, nhưng chỉ vai trò thay thế thu gọn được ghi ‘(bị loại)’. Vì vậy 차43-3, 43-4, 43-5, 43-6 hiện thẻ đầy hàng mâu thuẫn nhưng không ghi đã loại. Người đọc hiểu ‘rất nhiều mâu thuẫn’ thay vì ‘đây là lý do từng phương án bị loại’. 🚨 Hồ sơ khởi đầu vấn đề có mọi mâu thuẫn thuộc vai trò đã loại — 차43-2/B được chọn có 0/6. Sửa nhỏ: gắn đã loại và lý do một dòng cho mỗi thẻ không chọn, để mâu thuẫn thành nguyên nhân loại. ⚠️ Commit 2026-09-22 chỉ sửa phần thu gọn vai trò thay thế
🚨 그리고 건강 신호 하나가 정반대를 뜻했다 — 「시간 초과가 없었다」and one health signal meant its own opposite — "no request timed out"một tín hiệu sức khỏe mang nghĩa ngược — ‘không yêu cầu nào timeout’

2026-10-13. GPU 풀의 한 실행(run D)에 대해 「시간 초과도, 대기도 없었다」를 좋은 신호로 읽었는데, 그것은 모든 요청이 즉시 거부되었기 때문이었다. 판독 60건 전부가 트랙 없이 돌았고(504는 0건), 각 판독은 120초를 재시도한 뒤 포기했다. 원인은 waiting >= shed라는 검사로, 대기가 0일 때도 항상 참이라 놀고 있는 복제본까지 거부했다.

2026-10-13. On one GPU-pool run, "no request timed out, no request waited" was read as a good sign — and it was true because every request was being refused immediately. All 60 readings ran without tracks (zero 504s), each retrying for 120 s before giving up. The cause was a waiting >= shed check, always true at zero, so even idle replicas refused.

2026-10-13. Một lần chạy nhóm GPU, ‘không timeout, không chờ’ bị hiểu là tốt — nhưng đúng vì mọi yêu cầu bị từ chối ngay. Cả 60 phân tích không có tracks (0 lỗi 504), mỗi lần thử lại 120 s rồi bỏ. Nguyên nhân: kiểm tra waiting >= shed luôn đúng khi cả hai bằng 0, nên bản sao nhàn rỗi cũng từ chối.

⭐ 옮길 것 둘. ① 이 풀에서 「대기 0 · 초과 0」은 완전 거부의 서명이기도 하다 — 둘을 가르려면 트랙이 실제로 붙어 왔는지를 봐야 한다. ② 되돌린 기본 설정(run C)에서도 판독 60건 중 2건은 트랙 없이 도착한다 — 지금 운영 기본값에서 약 3%이고, §6.5의 「판독은 끝났는데 트랙이 없다」가 바로 그것이다.

⭐ Two things to carry. ① In this pool, "zero waits, zero timeouts" is also the signature of total refusal — to tell them apart, check whether tracks actually arrived. ② Even on the setting it was rolled back to, 2 of 60 readings arrive with no tracks — about 3% on the current default, which is exactly the "the reading finished but there are no tracks" row in §6.5.

⭐ Hai điều cần nhớ. ① Trong nhóm này, ‘0 chờ, 0 timeout’ cũng là dấu hiệu từ chối toàn bộ — phân biệt bằng tracks có thực sự đến không. ② Ngay với cấu hình đã khôi phục, 2/60 phân tích không có tracks — khoảng 3% ở mặc định hiện tại, đúng dòng ‘phân tích xong nhưng không có tracks’ tại §6.5.

9.1지각 스택은 둘이었고, 하나만 출하되었다 · Two perception stacks, one shippedHai bộ nhận thức, một bộ phát hành

Two stacks were built and only one shipped. The new-knia / cv-processing stack used RT-DETR and ByteTrack; the lense → visus stack — Mask2Former for the ego mask, YOLO26x, BoT-SORT with the tracker's ReID switched off, and an offline ReID linker — is the one vendored into visus/vendor/lense/ and running today.

Đã xây hai bộ, chỉ phát hành một. Bộ new-knia / cv-processing dùng RT-DETR, ByteTrack; bộ lense → visus — Mask2Former tạo mặt nạ xe camera, YOLO26x, BoT-SORT tắt ReID của tracker, bộ nối ReID ngoại tuyến — được tích hợp vào visus/vendor/lense/, đang chạy hôm nay.

new-knia / cv-processinglense → visus (출하)lense → visus (shipped)lense → visus (đã phát hành)
자차·보닛 마스크ego maskmặt nạ xe camera—Mask2Former Swin-L (Vistas, 「Ego Vehicle」+「Car Mount」, 5프레임 투표)Mask2Former Swin-L (Vistas, "Ego Vehicle" + "Car Mount", 5-frame vote)Mask2Former Swin-L (Vistas, ‘Ego Vehicle’ + ‘Car Mount’, bỏ phiếu 5 khung)
검출detectorbộ phát hiệnRT-DETR rtdetr_r50vd_coco_o365YOLO26x conf 0.15 · 1280 · fp16conf 0.15 · 1280 · fp16
추적trackerbộ theo dõiByteTrackBoT-SORT (sparseOptFlow, 추적기 ReID 끔)BoT-SORT (sparseOptFlow GMC, tracker ReID off)BoT-SORT (sparseOptFlow GMC, tắt ReID của tracker)
ReID—오프라인 트랙릿 연결 yolo26x-reid.onnxoffline tracklet linking · yolo26x-reid.onnxnối đoạn theo dõi ngoại tuyến · yolo26x-reid.onnx
차선laneslàn đườngUFLDv2UFLDv2 (실험실: SAM 3 · CLRerNet)UFLDv2 (lab only: SAM 3 · CLRerNet)UFLDv2 (chỉ phòng thí nghiệm: SAM 3 · CLRerNet)
상태statustrạng thái대체됨đã được thay thế출하 · visus/vendor/lense/에 벤더링shipped · vendored into visus/vendor/lense/đã phát hành · tích hợp vào visus/vendor/lense/

⚠️ SAM 3은 이 기록 전체에서 가장 많이 언급된 모델이고(60개 파일, 약 1,950회) 출하되지 않았다. 언급 횟수를 채택의 신호로 읽으면 안 된다.

SAM 3 is the most-mentioned model in the entire corpus (~1,950 mentions across 60 files) and it did not ship. Mention count is not a signal of adoption.

SAM 3 được nhắc nhiều nhất toàn bộ dữ liệu (~1,950 lần trong 60 tệp), nhưng không phát hành. Số lần nhắc không chứng tỏ được sử dụng.

Mask2Formerego maskYOLO26xconf 0.15BoT-SORTReID offONNX ReIDoffline linkcounterpart상대차xe đối phươngapproach side접근 방향hướng tiếp cận검지 전에 보닛을 가리면 반사 상자가 사라지고 깨끗한 트랙 id가 89–92 → 114 클립으로 늘었다.Masking before detection removes reflection boxes: clean track ids rise from 89–92 to 114 clips.Che trước phát hiện loại hộp phản chiếu: số video có ID theo dõi sạch tăng từ 89–92 lên 114.추적기 자체 ReID는 끌 때가 더 나쁜데다 런타임을 70%까지 먹어 제거했다.The tracker’s own ReID was worse when on and ate up to 70% of runtime, so it was removed.ReID của tracker bật lên lại tệ hơn, chiếm tới 70% thời gian nên bị loại.🚨 상대차는 「충돌 전 1.5초에서 면적 합이 가장 큰 트랙」이다 — 177 클립에서 62%, 상한 89%.🚨 The counterpart is just the largest summed box area in the 1.5 s before impact — 62% on 177 clips, ceiling 89%.🚨 Xe đối phương chỉ là tổng diện tích hộp lớn nhất trong 1.5 s trước va chạm — 62% trên 177 video, trần 89%.

그림 4. 오늘 돌아가는 CV 체인. 앞 네 칸은 성숙하고 뒤 두 칸이 약하다 — §8.3.Figure 4. The CV chain as it runs today. The first four stages are mature; the last two are the weak ones — §8.3.Hình 4. Chuỗi CV hiện tại. Bốn bước đầu trưởng thành; hai bước cuối còn yếu — §8.3.

9.2🚨 라이선스 — 기준이 두 번 바뀌었고, 바꾼 쪽이 대가를 적어 두었다 · The licence rule was switched off twiceQuy tắc giấy phép bị tắt hai lần

Read this before trusting any licence verdict below. D46 (August) set up a standing weight-provenance audit and found that all five blocked assets failed on their training data, not their code — an AGPL scan catches none of them. D66 switched the criterion off and priced the mistake in the same breath: excluding the OpenLane 3D-lane family cost the lane type and colour slots, and without those six overtaking charts were undecidable. D83 closed it — "this is a demo not a product". Three things survive the reversal: data export and residency (which rules out every API-only model regardless of licence), the shipped AGPL redaction tool as a priced delivery obligation, and every rejection made on measured performance.

Đọc trước khi tin nhận định giấy phép bên dưới. D46 (tháng Tám) thiết lập kiểm tra nguồn gốc trọng số thường xuyên, thấy cả năm tài sản bị chặn vì dữ liệu huấn luyện, không phải mã — quét AGPL không bắt được. D66 tắt tiêu chí và nêu chi phí ngay: loại nhóm làn 3D OpenLane làm mất loại/màu làn, thiếu chúng thì sáu biểu đồ vượt xe không quyết định được. D83 đóng lại — ‘đây là demo, không phải sản phẩm’. Ba điều còn hiệu lực: xuất/lưu trú dữ liệu (loại mọi mô hình chỉ có API bất kể giấy phép), nghĩa vụ bàn giao AGPL đã tính giá của công cụ che thông tin, mọi loại bỏ vì hiệu năng đã đo.

라이선스 판정을 읽기 전에 이것부터 읽어야 한다. 같은 레포 안에 서로 반대되는 세 결정이 살아 있다.

D46
(new-knia, 8월)
D46 (new-knia, August)D46 (new-knia, tháng Tám)
가중치 출처 감사를 상시 항목으로. 그날 걸린 다섯 건이 전부 코드가 아니라 학습 데이터에서 걸렸다 — CULane(비상업 명시) · BDD100K · FlyingThings3D · Cityscapes(조항 충돌) · Objects365(academic only). 「AGPL 스캔으로는 하나도 안 걸린다」Made weight provenance a standing audit item. All five assets blocked that day failed on training data, not code — CULane (non-commercial), BDD100K, FlyingThings3D, Cityscapes (conflicting terms), Objects365 (academic only). "An AGPL scan catches none of them."Đặt nguồn gốc trọng số thành hạng mục kiểm tra thường xuyên. Cả năm tài sản bị chặn vì dữ liệu huấn luyện, không phải mã — CULane (phi thương mại), BDD100K, FlyingThings3D, Cityscapes (điều khoản mâu thuẫn), Objects365 (chỉ học thuật). ‘Quét AGPL không bắt được cái nào.’
D66
(2026-08-26)(2026-08-26)
기준을 끈다 — 그리고 비용을 적는다. 「쓰지 않는다. 이것은 제품이 아니라 타당성을 보이는 PoC다… 내가 이 기준을 과도하게 적용했고, 대가가 있었다. OpenLane 사전학습 3D 차선 모델(LATR·PersFormer 계열)은 차선의 종류와 색을 내는데 … 배제했다. 그 두 슬롯이 없어서 앞지르기 계열 6개 도표가 통째로 판정 불가였다」. 자체 집계: 약 25개 자산이 막혔고, 9개가 선택을 바꾸며, 깨끗하게 뒤집히는 것은 정확히 하나Switched the criterion off — and priced it. "We are not using it. This is a PoC showing feasibility, not a product… I applied this criterion too hard, and it cost us. The OpenLane pre-trained 3D lane models (LATR, PersFormer) give lane type and colour … and I excluded them. Without those two slots, six overtaking charts were undecidable." Its own tally: ~25 assets blocked, 9 that change the choice, exactly one that flips cleanlyTắt tiêu chí — và định lượng cái giá. ‘Không áp dụng nữa. Đây là PoC chứng minh khả thi, không phải sản phẩm… Tôi áp tiêu chí quá chặt, gây tổn thất. Mô hình làn 3D huấn luyện sẵn OpenLane (LATR, PersFormer) cho loại và màu làn… tôi đã loại. Thiếu hai trường đó, sáu biểu đồ vượt xe không quyết định được.’ Tự thống kê: ~25 tài sản bị chặn, 9 ảnh hưởng lựa chọn, đúng một đổi trạng thái rõ ràng
D83
(visus, 09-15)(visus, 09-15)
「모델 라이선스는 제약이 아니며 다시 거론하지 않는다」. 🗣 「lift off the license problems. this is a demo not a product」 · 「can we stop talking about licensing once and for all?」. CV·BEV 작업 디렉터리의 집 규칙이 하루 먼저 말했다 — 「Performance first, licence never.」 (2026-09-14, ~/projects/cv/CLAUDE.md·~/projects/bev/CLAUDE.md — 커밋되지 않은 파일이라 어느 레포에서도 찾을 수 없다.)"Model licences are not a constraint and are not raised again." 🗣 "lift off the license problems. this is a demo not a product" · "can we stop talking about licensing once and for all?" The house rule in the CV and BEV working directories said it a day earlier — "Performance first, licence never." (2026-09-14, in CLAUDE.md files that were never committed, so the line appears in no repository.)‘Giấy phép mô hình không phải ràng buộc, không nhắc lại.’ 🗣 ‘bỏ vấn đề giấy phép. đây là demo, không phải sản phẩm’ · ‘có thể ngừng nói giấy phép một lần cho xong không?’ Quy tắc thư mục CV/BEV đã nói trước một ngày — ‘Ưu tiên hiệu năng, không xét giấy phép.’ (2026-09-14, trong CLAUDE.md chưa commit, nên câu này không xuất hiện ở kho nào.)

그러나 D66·D83이 되돌리지 않은 것이 셋 있고, 후임자는 이것을 지켜야 한다:

Ba điều D66·D83 không đảo ngược, người kế nhiệm phải giữ:

1데이터 반출·소재지는 라이선스 문제가 아니다. 「라이선스 이전에 데이터 반출 문제다. 사고 영상은 개인정보와 사고 사실이 함께 든 자료다. 성능과 무관하게 후보에서 뺀다. D66은 이것을 되돌리지 않는다」 → API 전용 모델은 전부 탈락(Grounding DINO 1.5/1.6, DINO-X, T-Rex2). AI Hub의 국외 반출 금지도 그대로Data export and residency is not a licence question. "This comes before licensing: accident footage carries personal data and the facts of an accident together. It is excluded regardless of performance. D66 does not reverse this." → every API-only model is out (Grounding DINO 1.5/1.6, DINO-X, T-Rex2), and AI Hub's export restriction standsXuất và lưu trú dữ liệu không phải vấn đề giấy phép. ‘Đi trước giấy phép: video tai nạn chứa cả dữ liệu cá nhân và sự kiện tai nạn. Loại bất kể hiệu năng. D66 không đảo ngược.’ → mọi mô hình chỉ có API bị loại (Grounding DINO 1.5/1.6, DINO-X, T-Rex2); giới hạn xuất dữ liệu AI Hub giữ nguyên
2출하된 비식별 도구의 AGPL 의무 — KB 제안서에 비용으로 들어간 납품 의무다The shipped redaction tool's AGPL obligation — a delivery commitment that was priced into the KB proposalNghĩa vụ AGPL của công cụ che thông tin đã phát hành — cam kết bàn giao đã tính giá trong đề xuất KB
3성능으로 탈락한 것은 그대로 — 「D-FINE-L은 … 라이선스와 무관하게 탈락이다」Performance rejections stand — "D-FINE-L is out … irrespective of licence"Loại vì hiệu năng vẫn hiệu lực — ‘D-FINE-L bị loại… bất kể giấy phép’

그리고 가장 중요한 한 문장 — 라이선스를 풀면 무엇이 열리는가에 대한 답:

Câu quan trọng nhất — bỏ giấy phép thì mở được gì:

「라이선스 해제로 P2가 자동으로 풀리지는 않는다. 열리는 것은 라벨이지 능력이 아니다」

‘Bỏ ràng buộc giấy phép không tự giải P2. Mở được nhãn, không mở năng lực.’

산수까지 붙어 있다 — 「실촬영 591 판독에서 색 커버리지가 6.3%인데, 그 타일을 사람이 읽을 수 있는 비율도 36%뿐이다. 라이선스 해제는 6%와 36% 사이를 메울 유일한 새 수단이지만 36%를 넘게 하지는 못한다」

Lifting the licence constraint opens labels, not capability. Colour coverage on real footage is 6.3%; the ceiling a human can read off the same tiles is 36%. Licences were the only way to close 6→36, and nothing closes 36→100.

Bỏ ràng buộc giấy phép mở nhãn, không mở năng lực. Độ bao phủ màu trên video thật là 6.3%; trần con người đọc trên cùng ô ảnh là 36%. Giấy phép là cách duy nhất khép 6→36; không gì khép 36→100.

⚠️ 미해결 충돌: lense의 D78은 「제품 경로는 AWS 서울에서 자체 호스팅하는 오픈웨이트만 쓰고, 독점 API는 비교용」이라 하고, D83은 라이선스가 무관하다고 한다. 둘 다 기록에 살아 있다.

Unresolved conflict: lense's D78 says product routes must use open-weight models self-hosted in AWS Seoul, with proprietary APIs for comparison only. D83 says licences are not a constraint at all. Both are live in the record, and nothing reconciles them.

Mâu thuẫn chưa giải: D78 của lense nói luồng sản phẩm phải dùng mô hình trọng số mở tự lưu trữ AWS Seoul, API độc quyền chỉ để so sánh. D83 nói giấy phép không phải ràng buộc. Cả hai còn trong bản ghi, không gì hòa giải.

9.3출하된 것 — 숫자와 결함까지 · What shipped, with its numbers and its defectsĐã phát hành những gì, số liệu và lỗi

Each shipped component carries both its measured gain and its known defect. Masking before detection removed every reflection box and took clean track ids from 89–92 clips to 114 — but bought lane detection nothing. It says nothing about lane detection — the hood experiment emits no lane output at all. The tracker's ReID was removed because it was measurably worse when on, and because of a reported runtime cost of up to 70% on KB clips, and because adding it was worse. The counterpart pick scores 46.6% on dev and 53.1% held out, where the impact anchor's claimed +8 points shrank to about +2.

Mỗi thành phần phát hành có mức tăng đã đo và lỗi đã biết. Che trước phát hiện loại mọi hộp phản chiếu, tăng video có ID sạch từ 89–92 lên 114 — nhưng không giúp phát hiện làn. Thí nghiệm ca-pô không xuất đầu ra làn nên không nói gì về làn. ReID của tracker bị bỏ vì bật lên tệ hơn, tốn đến 70% runtime trên video KB, thêm vào còn kém hơn. Chọn xe đối phương đạt 46.6% dev, 53.1% giữ riêng; lợi ích mốc va chạm từ +8 điểm chỉ còn khoảng +2.

모델modelmô hình왜 채택됐나 · 무엇이 측정됐나why, and what was measuredlý do, phép đo
Mask2Former Swin-L
Mapillary Vistas
「대시보드는 움직이지 않고 광택이 있으면 도로를 반사해서, 깊이와 시간 통계가 그것을 도로로 읽는다」 · 「검출 전에 마스킹하면 반사 상자가 전부 사라진다」. 보닛 검출 11/12, 후드 페인팅으로 깨끗한 id가 89~92 → 114 클립. ⚠️ 그리고 이는 차선 검출과 무관하다 — 후드 실험(lab.vehicles_hood)은 차선 출력을 아예 내지 않는다 — 「학습된 검출기는 보닛을 이미 무시한다」. 코드 MIT · 가중치는 비상업(Vistas)이고 소스에 표시돼 있다"The dashboard never moves, and a glossy one reflects the road, so depth and temporal statistics read it as road" · "masking before detection removed every reflection box". Bonnet found on 11/12; hood painting took clean ids from 89–92 clips to 114. ⚠️ But it bought lane detection nothing — and it is unrelated to lane detection, since the hood experiment emits no lane output. Code MIT, weights non-commercial (Vistas), and the source says so‘Táp-lô không di chuyển, bề mặt bóng phản chiếu đường nên thống kê độ sâu/thời gian đọc nhầm là đường’ · ‘che trước phát hiện loại mọi hộp phản chiếu’. Tìm thấy ca-pô 11/12; che ca-pô tăng ID sạch từ 89–92 video lên 114. ⚠️ Không giúp gì cho phát hiện làn — thí nghiệm không xuất đầu ra làn. Mã MIT, trọng số phi thương mại (Vistas), nguồn nói rõ
YOLO26x
Ultralytics · AGPL-3.0
「Performance first, licence never」로 골랐고 AGPL을 알고 받아들였다. KB 런 60/60 클립, 오류 0, L4에서 영상 1분당 51.9 GPU초. 결함도 기록돼 있다 — 「접촉 직전의 큰 차량에 겹치는 상자를 2~4개 낸다」Chosen under "Performance first, licence never", with the AGPL knowingly accepted. KB run: 60/60 clips, zero errors, 51.9 GPU-seconds per video-minute on an L4. The defect is recorded too — "it emits 2–4 overlapping boxes on a large vehicle just before contact"Chọn theo ‘Ưu tiên hiệu năng, không xét giấy phép’, biết và chấp nhận AGPL. Lần chạy KB: 60/60 video, 0 lỗi, 51.9 giây GPU mỗi phút video trên L4. Lỗi cũng được ghi — ‘xuất 2–4 hộp chồng nhau trên xe lớn ngay trước tiếp xúc’
BoT-SORTv0.3.0에서 추적기 ReID를 껐다 — 「KB 클립에서 추적기 ReID가 전체 시간의 최대 70%(440초 중 302초)」, 그리고 「추적기에 ReID를 더하는 쪽이 더 나빴다」. 상대차 선택 dev 46.6% / held-out 53.1% — 충돌 앵커가 준다던 +8점은 held-out에서 ≈+2로 줄었다v0.3.0 turned the tracker's ReID off — "on KB clips tracker ReID was up to 70% of the time (302 s of 440)", and "adding ReID to the tracker was worse". Counterpart pick: 46.6% dev / 53.1% held out — and the impact anchor's claimed +8 points shrank to about +2 on held-out datav0.3.0 tắt ReID của tracker — ‘trên video KB, ReID chiếm tới 70% thời gian (302/440 s)’, ‘thêm ReID vào tracker tệ hơn’. Chọn xe đối phương: 46.6% dev / 53.1% giữ riêng — lợi ích mốc va chạm tuyên bố +8 điểm còn khoảng +2 trên tập giữ riêng
RT-DETR
(다른 스택)
RT-DETR (the other stack)RT-DETR (bộ còn lại)
🚨 소스 docstring에 선택 이유가 라이선스라고 적혀 있다 — "chosen deliberately: it is Apache-2.0. The obvious alternative (Ultralytics YOLO) is AGPL-3.0". 그런데 체크포인트의 클래스 헤드를 읽어 보니 365가 아니라 80(COCO)이었고, o365→COCO 교체 비용은 「바꿔도 된다. 측정된 비용은 0에 수렴한다」🚨 The source docstring names licensing as the reason for the choice — "chosen deliberately: it is Apache-2.0. The obvious alternative (Ultralytics YOLO) is AGPL-3.0, which would impose source-disclosure obligations on a commercial fault-determination product." But reading the checkpoint's class head shows 80 classes (COCO), not 365, and swapping to COCO-only cost "nothing that could be measured"🚨 Docstring nguồn nêu giấy phép là lý do chọn — ‘chủ ý chọn Apache-2.0. Lựa chọn hiển nhiên Ultralytics YOLO là AGPL-3.0, sẽ yêu cầu công khai mã nguồn sản phẩm xác định lỗi thương mại.’ Nhưng đầu phân lớp checkpoint có 80 lớp (COCO), không phải 365; đổi sang chỉ COCO mất ‘không gì đo được’

🚨 이 기록에서 가장 비싼 문자열 하나 — motorbikeThe single most expensive string in the corpusChuỗi ký tự đắt nhất trong toàn dữ liệu

The detector matches class names rather than indices, deliberately, to dodge the COCO80/COCO91 off-by-one. The checkpoint's name is motorbike; the chart guard tests motorcycle. Across 690 cached clips the motorcycle count is zero, so 차45-2's guard cannot ever be true. The note that found it adds the part worth keeping: the author had printed that class list and looked straight at 'motorbike' without seeing it.

Bộ phát hiện chủ ý khớp tên thay chỉ số, tránh lệch một COCO80/COCO91. Checkpoint gọi motorbike; cổng biểu đồ kiểm motorcycle. Trên 690 video đệm, số xe máy bằng 0, nên cổng 차45-2 không bao giờ đúng. Ghi chú phát hiện còn giữ bài học: tác giả đã in danh sách lớp, nhìn thẳng 'motorbike' mà không nhận ra.

detect.py는 COCO80/COCO91 off-by-one을 피하려고 인덱스 대신 클래스 「이름」으로 매칭한다. 그런데 — 「RT-DETR 체크포인트의 클래스 이름은 motorbike이고 motorcycle이 아니다 … 캐시된 690 클립의 트랙 라벨: car 17,076 · truck 4,719 · bus 1,072 · bicycle 163 — 이륜차 0건. … 차45-2의 vehicle_class(A) == 'motorcycle' 가드가 원리적으로 참이 될 수 없다」

「이름 매칭은 그 함정을 피하는 대신 철자 변형이라는 다른 함정을 만들었고, 나 자신도 오늘 그 클래스 목록을 출력해 'motorbike'를 눈으로 보고도 알아채지 못했다」

Matching class names to dodge the COCO80/91 off-by-one created a spelling trap instead: the checkpoint says motorbike, the guard tests motorcycle, and across 690 cached clips the motorcycle count is zero — so a chart guard that depends on it can never be true.

Khớp tên lớp để tránh lệch một COCO80/91 lại tạo bẫy cách viết: checkpoint nói motorbike, cổng kiểm motorcycle; 690 video đệm có 0 xe máy — cổng biểu đồ phụ thuộc vào nó không bao giờ đúng.

🚨 캐시된 진로변경 사건은 그 동작의 어느 국면도 가리키지 않는다🚨 The cached lane-change event corresponds to no phase of the manoeuvre at all🚨 Sự kiện chuyển làn trong bộ đệm không tương ứng giai đoạn thao tác nào

파이프라인이 내보내는 진로변경 사건이 무엇인지 역으로 뜯어본 결과다 — 5표본 이동중앙값이 경계 + 0.25(차로의 4분의 1만큼 넘어선 양)를 넘고, 3표본 유지된 뒤, 0.4초를 소급한 시각. 개시도 아니고 횡단도 아니다. 실제 경계 횡단 대비 지연 +1.82초이고, 서로 독립한 두 구현이 같은 값을 냈다.

What the pipeline's lane-change event actually is, reverse-engineered rather than guessed: a 5-sample rolling median exceeding the boundary + 0.25 — a quarter-lane overshoot — sustained for 3 samples, then back-dated 0.4 s. It is neither onset nor crossing. Against the real boundary crossing the lag is +1.82 s, reproduced by two independent implementations.

Sự kiện chuyển làn thực tế của quy trình, được suy ngược thay vì đoán: trung vị trượt 5 mẫu vượt biên + 0.25 — vượt quá một phần tư làn — duy trì 3 mẫu, rồi lùi thời gian 0.4 s. Không phải bắt đầu hay cắt vạch. So với lúc cắt biên thật, trễ +1.82 s, tái lập bằng hai triển khai độc lập.

🚨 왜 중요한가: 차43-5는 「누가 먼저 진로변경을 개시했는가」로 갈리고, 차43-2·차43-4는 「갑작스럽게」로 갈린다 — 개시에서 침범까지의 간격이 짧다는 뜻이다. 1.82초 늦고 어느 국면도 아닌 캐시 값은 그 도표들에 확신에 차서 틀리게 답한다.

🚨 Why it matters: 차43-5 turns on which vehicle began the lane change first, and 차43-2 / 차43-4 turn on "abruptly", defined as a short interval from initiation to encroachment. A cached value 1.82 s late that names no phase will answer those charts confidently and wrongly.

🚨 Vì sao quan trọng: 차43-5 phụ thuộc xe nào bắt đầu chuyển làn trước, 차43-2 / 차43-4 phụ thuộc ‘đột ngột’, định nghĩa bằng khoảng ngắn từ bắt đầu tới lấn làn. Giá trị đệm trễ 1.82 s, không đại diện giai đoạn nào sẽ trả lời tự tin nhưng sai.

⭐ 그런데 같은 작업이 쓸 수 있는 숫자도 함께 남겼다 — 그리고 반증 하나를 스스로 취소했다the same work left a usable number too — and withdrew one of its own refutationscùng công việc còn để lại một con số dùng được — rút lại một phản bác của chính mình

타이밍 자체는 좋다 — 검출기가 사람과 같은 변위를 집었을 때 1σ = 0.13초다. 문제는 타이밍이 아니라 식별이다. 그리고 분포를 근거로 한 반증이 오염 때문에 취소됐다: 조용한 표본의 0.3%가 0.2초 안에 0.15차로 이상 튀는데, 그것은 횡방향 2.4 m/s로 어떤 차도 그렇게 움직이지 않는다 — 차선 재앵커 산물은 진짜 급격한 진로변경과 모양으로 구별되지 않는다. 수정된 수치는 중앙값 0.76초·1초 미만 59%(처음 보고한 0.50초·67%가 아니다).

The timing itself is good — 1σ = 0.13 s when the detector picks the same excursion a human would. The problem is identification, not timing. And a distribution-based refutation was withdrawn for contamination: 0.3% of quiet samples jump more than 0.15 lane in 0.2 s, which is 2.4 m/s laterally and no car does that — lane re-anchor artefacts are shape-indistinguishable from a genuinely abrupt lane change. The corrected figures are a median of 0.76 s and 59% under 1.0 s, not the 0.50 s and 67% first reported.

Định thời tốt — 1σ = 0.13 s khi bộ phát hiện chọn cùng lần lệch làn mà người chọn. Vấn đề là nhận diện, không phải định thời. Một phản bác dựa phân phối đã rút vì nhiễm dữ liệu: 0.3% mẫu yên lặng nhảy hơn 0.15 làn trong 0.2 s, tức 2.4 m/s ngang, không xe nào như vậy — lỗi neo lại làn không phân biệt được về hình dạng với chuyển làn đột ngột thật. Số đúng là trung vị 0.76 s, 59% dưới 1.0 s; không phải 0.50 s, 67% báo ban đầu.

9.4⭐ 충돌 시점 — 고전 CV가 모든 학습 모델을 이긴 유일한 자리 · Impact: the one slot where classical CV beat everythingVa chạm: vị trí duy nhất CV cổ điển thắng mọi thứ

impact.motion_peak is not from a paper — frame-difference energy, smoothing, peak suppression, about 0.1 s per clip on CPU. It generates candidates at Hit@1 61/100 and Top-3 85/100, and the anchor picks the latest candidate above a threshold because rank 1 tends to find an earlier braking or swerve. Against it, a VLM asked the same question on a 16-clip × 3-run sweep denied the collision happened on eight clips all three times, and spread one clip across 6.1 seconds at confidence: high every run. The honest caveat is in the ledger too: the "CV solves it" line rests on three or four eyeballed clips, not a labelled set — and on KB clips over 30 seconds the anchor is right only half the time.

impact.motion_peak không lấy từ bài báo — năng lượng chênh khung, làm mượt, triệt đỉnh, khoảng 0.1 s/video trên CPU. Sinh ứng viên Hit@1 61/100, Top-3 85/100; chọn ứng viên muộn nhất vượt ngưỡng vì hạng 1 thường là phanh/đánh lái sớm. VLM hỏi cùng câu trên 16 video × 3 lần phủ nhận va chạm ở tám video trong cả ba lần, một video dao động 6.1 giây nhưng mọi lần confidence: high. Sổ cũng ghi lưu ý trung thực: câu ‘CV giải được’ dựa trên ba, bốn video xem bằng mắt, không phải tập nhãn — trên video KB dài hơn 30 giây, mốc chỉ đúng một nửa.

impact.motion_peak은 논문에서 온 것이 아니다 — 프레임 차분 에너지 + 평활화 + 피크 억제, CPU로 클립당 약 0.1초. 그런데:

impact.motion_peak did not come from a paper — frame-difference energy, smoothing and peak suppression, about 0.1 s per clip on CPU. And yet:

impact.motion_peak không từ bài báo — năng lượng chênh khung, làm mượt, triệt đỉnh, khoảng 0.1 s/video trên CPU. Vậy mà:

후보 생성tạo ứng viênHit@1 ±0.5초 61/100 · Top-3 85/100 (holdout 52/89 · 74/89)Hit@1 within ±0.5 s: 61/100 · Top-3 85/100 (holdout 52/89 · 74/89)Hit@1 trong ±0.5 s: 61/100 · Top-3 85/100 (tập giữ riêng 52/89 · 74/89)
앵커 선택chọn mốc가장 늦은 후보를 고른다 — 「1순위는 더 이른 제동이나 조향을 집는 경향」. held-out n=144에서 75.7% vs 68.8% (±1.0초, McNemar p=0.021) — 단 ±0.5초에서는 재현되지 않았다picks the latest candidate above a threshold — "rank 1 tended to pick an earlier braking or swerve". On held-out n=144: 75.7% vs 68.8% at ±1.0 s (McNemar p=0.021) — but it did not replicate at ±0.5 schọn ứng viên muộn nhất vượt ngưỡng — ‘hạng 1 thường chọn phanh/đánh lái sớm’. Tập giữ riêng n=144: 75.7% so với 68.8% ở ±1.0 s (McNemar p=0.021) — nhưng không tái lập ở ±0.5 s
🚨 알려진 약점🚨 the known weakness🚨 điểm yếu đã biết30초 넘는 KB 클립에서 12/24 = 50% (±5초) — 10초 AI Hub 클립에서는 98.5%(n=511)12/24 = 50% within ±5 s on KB clips over 30 s — against 98.5% on 10-second AI Hub clips (n=511)12/24 = 50% trong ±5 s trên video KB dài hơn 30 s — so với 98.5% trên video AI Hub 10 giây (n=511)
VLM과 비교compared with a VLMso với VLM「16클립×3회에서 8개 클립이 세 번 모두 충돌이 없었다고 부인했고, 하나는 6.8/6.8/0.7초로 6.1초 퍼지면서 매번 confidence: high였다」. 그리고 「90줄짜리 광학흐름 저크×근접 검출기가 11클립 중 9건을 ±0.5초 안에 넣었고, 어떤 VLM도 12건 중 3~4건이었다」"On a 16-clip × 3-run sweep, eight clips denied that a collision occurred on all three runs, and one spread 6.1 s (6.8 / 6.8 / 0.7) with confidence: high every time." Against that: "a 90-line optical-flow-jerk × proximity detector put contact within ±0.5 s on 9 of 11 clips, against 3–4 of 12 for any VLM"‘Trên 16 video × 3 lần chạy, tám video bị phủ nhận có va chạm cả ba lần; một video lệch 6.1 s (6.8 / 6.8 / 0.7), lần nào cũng confidence: high.’ Đối chứng: ‘bộ phát hiện 90 dòng kết hợp biến thiên luồng quang học × độ gần định vị tiếp xúc trong ±0.5 s ở 9/11 video, so với 3–4/12 của mọi VLM’

⚠️ 그래도 「해결됐다」고 적어서는 안 된다. 같은 원장이 스스로 단서를 단다 — 「correctness was eyeballed only, on 3 accident types … '✅ CV solves it — deterministic'은 라벨된 집합이 아니라 눈으로 본 3~4 클립에 기대고 있다」

⚠️ Even so, it must not be written down as "solved". The same ledger qualifies itself — "correctness was eyeballed only, on 3 accident types"; the "✅ CV solves it — deterministic" rests on three or four clips looked at by eye, not on a labelled set.

⚠️ Vẫn không được ghi ‘đã giải quyết’. Chính sổ tự giới hạn — ‘chỉ xem mắt để xác định đúng, trên 3 loại tai nạn’; câu ‘✅ CV giải được — tất định’ dựa trên ba hoặc bốn video xem bằng mắt, không phải tập đã gán nhãn.

9.5측정하고 버린 것 · Tested and rejected, with the quoted verdictĐã thử và loại, kèm trích kết luận

Nothing here was dropped on taste. D-FINE-L detected more and scored lower confidence, which exposed a design fault rather than a model fault — improving the detector makes this product worse. DINOv2 attention turned out to be a box-area prior: size-normalised it scores 0/12. SAM 3 was measured in three independent settings and still did not ship. Grounding DINO was rejected on a capability argument that survives licence removal — an open-vocabulary detector cannot say "I looked at this region under these conditions and it was not there" — and its AP swings sevenfold on prompt wording alone. OWLv2 was rejected with no evidence at all, which the record itself says, and it has the cleanest licence of the three.

Không lựa chọn nào bị bỏ vì sở thích. D-FINE-L phát hiện nhiều hơn nhưng điểm tin cậy thấp hơn, phơi lỗi thiết kế — cải thiện bộ phát hiện làm sản phẩm kém hơn. Attention DINOv2 thực ra là giả định diện tích hộp: chuẩn hóa kích thước còn 0/12. SAM 3 đo trong ba điều kiện độc lập vẫn không phát hành. Grounding DINO bị loại vì giới hạn năng lực còn nguyên dù bỏ giấy phép — bộ phát hiện từ vựng mở không thể nói ‘đã xét vùng này trong điều kiện này và không có’ — AP biến động bảy lần chỉ do cách viết prompt. OWLv2 bị loại không có bằng chứng, bản ghi tự nói vậy, dù giấy phép sạch nhất trong ba mô hình.

무엇whatđối tượng판정과 이유verdictkết luận
D-FINE-L성능으로 탈락 — 라이선스는 오히려 깨끗했다. 「더 많이 검출하는데 확신은 더 떨어진다」: 클립당 트랙 30.0 → 45.5(+41%), 중앙 검출점수 0.530 → 0.427. 그리고 결론이 설계를 겨냥한다 — 「검출기를 좋게 만들면 지금 설계에서는 확신율이 나빠진다. 그 자체가 게이트가 잘못됐다는 신호다」Rejected on measured performance — its licence was actually the cleaner one. "It detects more and is less certain." Tracks per clip 30.0 → 45.5 (+41%), median detection score 0.530 → 0.427. And the conclusion points at the design: "making the detector better makes confidence worse in this design — which is itself a sign the gate is wrong."Loại vì hiệu năng đo được — giấy phép thực ra sạch hơn. ‘Phát hiện nhiều hơn, kém chắc chắn hơn.’ Tracks/video 30.0 → 45.5 (+41%), trung vị điểm phát hiện 0.530 → 0.427. Kết luận chỉ vào thiết kế: ‘bộ phát hiện tốt hơn khiến độ tin cậy kém hơn trong thiết kế này — bản thân nó là dấu hiệu cổng sai.’
DINOv2 attention
(상대차 식별)
DINOv2 attention (identifying the other car)attention DINOv2 (nhận diện xe kia)
측정으로 탈락. 「범용 attention은 사고 신호가 아니다 … 합산한 attention은 사실 박스 면적 prior이고, 크기를 정규화하면 0/12」. 구간 적분 6/10 = 면적 적분 6/10, 클립별 선택이 동일Rejected on measurement. "General-purpose attention is not an accident signal … summed attention is really a box-area prior, and size-normalised it scores 0/12." Interval-integral 6/10 = area-integral 6/10, with identical per-clip picksLoại qua đo lường. ‘Attention tổng quát không phải tín hiệu tai nạn… tổng attention thực ra là giả định diện tích hộp; chuẩn hóa kích thước đạt 0/12.’ Tích phân khoảng 6/10 = tích phân diện tích 6/10, chọn cùng xe ở từng video
SAM 3세 곳에서 독립적으로 측정됐고, 「대체가 아니라 병합」으로 정리된 뒤 출하되지 않았다. 차선 코리더 23.3% vs UFLDv2 16.3%, 프롬프트당 프레임당 0.12초 · 4.27 GB. 선 종류 280회 판독 중 solid 163 / dashed 35 / unknown 71 — 「신뢰하지 않음」. 그리고 프롬프트 하나가 전부를 뒤집는다: "hatched safety zone"은 12클립·1,289프레임에서 0회, "diagonal striped road marking"은 109회Measured in three independent settings, resolved as "merge, not replace", and not shipped. Lane corridors 23.3% vs UFLDv2's 16.3%, at 0.12 s per prompt per frame and 4.27 GB. Line type over 280 readings: 163 solid / 35 dashed / 82 neither — "not trusted". And one prompt changes everything: "hatched safety zone" fired 0 times across 12 clips and 1,289 frames; "diagonal striped road marking" fired 109Đo trong ba điều kiện độc lập, kết luận ‘gộp, không thay’, không phát hành. Hành lang làn 23.3% so với UFLDv2 16.3%, 0.12 s/prompt/khung, 4.27 GB. Loại vạch qua 280 lượt đọc: 163 liền / 35 đứt / 82 không phải — ‘không đáng tin’. Một prompt đổi mọi thứ: "hatched safety zone" kích hoạt 0 lần trên 12 video, 1,289 khung; "diagonal striped road marking" kích hoạt 109
Grounding DINO라이선스를 풀어도 살아남지 못하는 능력 논증으로 탈락. 「absent는 '정해진 ROI를 정해진 조건에서 봤고, 거기 없었다'는 적극적 소견이다 … 오픈보캐뷸러리 검출기는 셋 중 하나도 주지 못한다」 → 부트스트랩 라벨러로만 강등. 그리고 측정 불가능성의 증거: LostAndFound AP가 프롬프트만 바꿔 0.032 ↔ 0.225 — 7배Rejected on a capability argument that survives the licence question entirely. "absent is a positive finding — 'I looked at a defined region under defined conditions and it was not there' … an open-vocabulary detector gives you none of the three." → demoted to a bootstrap labeller only. And the evidence that it cannot be measured: LostAndFound AP swings 0.032 ↔ 0.225 — sevenfold — on prompt wording aloneLoại vì năng lực, hoàn toàn độc lập giấy phép. ‘absent là phát hiện khẳng định — đã xét vùng xác định trong điều kiện xác định và không có… bộ phát hiện từ vựng mở không cung cấp cả ba.’ → hạ thành công cụ gán nhãn khởi tạo. Bằng chứng không đo ổn được: AP LostAndFound dao động 0.032 ↔ 0.225 — bảy lần — chỉ do cách viết prompt
OWLv2🚨 근거 없이 탈락했고, 기록이 그 사실을 적어 두었다 — 「OWLv2의 탈락에 근거가 없다 … 근거 없는 탈락이 문서에 남아 있었다는 사실은 기록한다」. 게다가 라이선스는 셋 중 가장 깨끗하다(Apache-2.0 코드+가중치, Objects365 없음). 다시 열어 볼 가치가 있는 유일한 항목🚨 Rejected with no evidence, and the record says so — "there is no basis for OWLv2's rejection … the fact that an unfounded rejection sat in the document is itself recorded." And its licence is the cleanest of the three (Apache-2.0 code and weights, no Objects365). The one candidate worth reopening.🚨 Loại không có bằng chứng, bản ghi nói rõ — ‘không có cơ sở loại OWLv2… việc lý do vô căn cứ nằm trong tài liệu cũng được ghi lại.’ Giấy phép sạch nhất trong ba (mã và trọng số Apache-2.0, không Objects365). Ứng viên duy nhất đáng mở lại.
OC-SORT · DeepSORT한 번도 돌려 보지 않았다. 문헌은 오히려 OC-SORT를 가리켰다 — 「진로변경 중인 차량은 비선형 운동 영역 그 자체」, DanceTrack에서 ByteTrack을 HOTA 10점 이상 앞선다. 그래도 돌리지 않았다Never tried at all. The literature pointed at OC-SORT — "a vehicle mid-lane-change is a non-linear-motion regime" — and it beats ByteTrack by over 10 HOTA on DanceTrack. It was still never run.Chưa thử. Tài liệu nghiên cứu hướng đến OC-SORT — ‘xe đang chuyển làn chính là chế độ chuyển động phi tuyến’ — hơn ByteTrack trên 10 HOTA ở DanceTrack. Vẫn chưa chạy.
단안 미터 깊이
Depth Pro · Metric3D v2 · UniDepth · Depth Anything V2
monocular metric depth · Depth Pro · Metric3D v2 · UniDepth · Depth Anything V2độ sâu mét một camera · Depth Pro · Metric3D v2 · UniDepth · Depth Anything V2
네 모델 모두 점선 길이 검증 통과 ≤ 1/6. 그리고 클래스 전체에 대한 규칙이 나왔다 — 「longitudinal_order에 단안 깊이 모델을 붙이지 말 것. 순서는 단조변환에 불변이므로 깊이 모델이 줄 것이 없고, 라이선스 문제만 들어온다」. 박스 아랫변이 네 개의 깊이 모델을 이겼다 — 그들이 사려던 바로 그 사실에서All four passed the dashed-line length check on ≤ 1 of 6. And a rule for the whole class came out of it — "do not attach a monocular depth model to longitudinal_order. Order is invariant under a monotonic transform, so a depth model has nothing to give — it only brings licence problems." A bounding-box bottom edge beat four depth models at the fact they were bought for.Cả bốn chỉ qua kiểm tra chiều dài vạch đứt ở ≤ 1/6. Rút quy tắc cho cả nhóm — ‘không gắn độ sâu một camera vào longitudinal_order. Thứ tự bất biến qua biến đổi đơn điệu, mô hình độ sâu không đem lại gì — chỉ thêm giấy phép.’ Mép dưới hộp giới hạn thắng bốn mô hình độ sâu ở chính dữ kiện chúng được chọn để xử lý.
🚨 조용히 실패하는 사슬 하나 — 채널 순서 한 줄이 오버레이를 비웠다one silent failure chain — a channel order emptied the overlaymột chuỗi lỗi im lặng — thứ tự kênh làm lớp phủ trống

hd-map에서 나온 것이고, 오류를 한 번도 내지 않는다는 점이 핵심이다:

From hd-map, and the point is that it never raises an error:

Từ hd-map, điểm chính là không bao giờ phát sinh lỗi:

segment()는 RGB를 기대 (PIL용으로 작성됨)
realmap.py는 cv2.imread() 사용 → BGR
   ↓ 채널 순서가 뒤집힘
도로 마스크 28% → 3%로 붕괴
   ↓
밀도 검사가 전부 기각
   ↓
오버레이가 빈 채로 나온다 — 조용히, 예외 하나 없이segment() expects RGB (it was written for PIL input)
realmap.py loads with cv2.imread() → BGR
   ↓ channel order reversed
road mask collapses 28% → 3%
   ↓
the density test rejects everything
   ↓
the overlay comes out empty — silently, with no errorsegment() cần RGB (viết cho đầu vào PIL)
realmap.py nạp bằng cv2.imread() → BGR
   ↓ đảo thứ tự kênh
mặt nạ đường sụt 28% → 3%
   ↓
kiểm tra mật độ loại tất cả
   ↓
lớp phủ trống — im lặng, không báo lỗi

⭐ 왜 이것을 적어 두는가: 이 사슬의 어느 단계도 틀린 값을 내지 않는다 — 각자 자기 입력에 대해 옳게 동작한다. 비어 있는 결과는 「도색을 못 찾았다」로 읽히지 「채널이 뒤집혔다」로 읽히지 않는다. §9.10의 오토바이 0건과 같은 부류다 — 숫자가 나오고, 그럴듯하고, 재현된다.

⭐ Why record it: no stage in that chain produces a wrong value — each behaves correctly for the input it was given. An empty result reads as "no paint found", not as "the channels are reversed". It is the same family as the zero motorcycles in §9.10: the numbers come out, look reasonable, and reproduce.

⭐ Vì sao ghi lại: không bước nào cho giá trị sai — mỗi bước xử lý đúng đầu vào được nhận. Kết quả trống bị hiểu ‘không tìm thấy vạch sơn’, không phải ‘kênh màu bị đảo’. Cùng nhóm lỗi 0 xe máy ở §9.10: số vẫn xuất, có vẻ hợp lý, tái lập được.

⭐ 그리고 모델이 아니라 규칙이 기각된 것들 — 전사에서만 나온다And the rules that were rejected, not the models — these exist only in the transcriptsCác quy tắc bị loại, không phải mô hình — chỉ tồn tại trong bản ghi

위의 표는 모델과 라이브러리의 기각이다. 그런데 같은 기간에 휴리스틱 규칙도 제안되고 측정되고 기각됐고, 그쪽은 레포에 남지 않았다 — 타임라인의 기계 응답에서만 읽을 수 있다. 셋을 옮겨 적는다.

The table above is about models and libraries. Over the same period heuristic rules were also proposed, measured and rejected — and those left no trace in the repositories. They are readable only in the assistant replies on the timeline. Three are worth carrying.

Bảng trên về mô hình và thư viện. Cùng giai đoạn, các quy tắc kinh nghiệm được đề xuất, đo, loại — không để dấu trong kho mã. Chỉ đọc được trong phản hồi trợ lý trên dòng thời gian. Ba điều đáng giữ.

「20° 돌았으면 교차로」"turned more than 20° → junction"‘rẽ quá 20° → giao lộ’96% 정밀도로 측정됐고 기각됐다. 규칙은 「충돌 전 자차가 20° 넘게 돌았으면 junction이라 답하고 아니면 기권」이었다. 🚨 96%는 회전교차로와 주차장 클립을 빼고 잰 값이고, 315개 dev 클립 전체에 걸면 99건에서 발화하는데 그중 교차로 74 · 회전교차로 19 · 주차장이 섞인다 — 회전교차로 도표는 교차로 도표와 별개이므로 그대로 쓰면 틀린 계열로 보낸다. 제외한 클립이 바로 그 규칙을 깨뜨리는 클립이었다.measured at 96% precision and rejected. The rule was: answer junction whenever the ego car turned more than 20° before impact, otherwise abstain. 🚨 The 96% was measured with roundabout and car-park clips left out; across all 315 dev clips it fires on 99, of which 74 are junctions, 19 roundabouts and the rest car parks — and roundabout charts are separate from junction charts, so the rule routes to the wrong family. The excluded clips were exactly the ones that break it.precision đo được 96%, vẫn bị loại. Quy tắc: trả junction khi xe camera rẽ hơn 20° trước va chạm, còn lại không kết luận. 🚨 96% được đo sau khi bỏ video vòng xuyến/bãi xe; trên toàn bộ 315 video dev kích hoạt 99, trong đó 74 giao lộ, 19 vòng xuyến, còn lại bãi xe — biểu đồ vòng xuyến tách khỏi giao lộ, nên định tuyến sai nhóm. Video bị loại chính là phản ví dụ phá quy tắc.
🚨 fault-lab의 차로폭 게이트fault-lab’s lane-width gatecổng bề rộng làn của fault-lab빌려온 상수 하나가 찾아낸 도색의 82%를 버리고 있었다. E-025 차선 비교에서 460건의 기각 중 378건이 자기 차로폭 게이트였고, 그 범위는 fault-lab의 카메라에 맞춰 고정된 픽셀값이었다 — 시험 클립 중에는 세로 1080도 안 되는 것이 있다. 0.2.0에서 클립마다 자기 기하에서 차로폭 한계를 구하도록 바꿨다. ⭐ §9.10의 주제가 여기서 그대로 재현된다 — 카메라를 모르면서 한 카메라의 상수를 박아 두면, 측정이 아니라 그 카메라를 닮지 않은 것을 전부 버리는 장치가 된다one borrowed constant was discarding 82% of the paint that had been found. In the E-025 lane comparison, 378 of 460 rejections were its own lane-width gate, whose bounds were fixed pixel values tuned to fault-lab’s camera — and one trial clip is not even 1080 tall. Version 0.2.0 changed it to derive the width limits from each clip’s own geometry. ⭐ This is §9.10’s thesis reappearing: hard-code one camera’s constant while the camera is unknown and you have not built a measurement — you have built a device for throwing away everything that does not resemble that cameramột hằng số mượn loại 82% vạch sơn đã tìm thấy. So làn E-025, 378/460 lần từ chối do cổng bề rộng riêng, dùng giá trị pixel cố định tinh chỉnh theo camera fault-lab — một video thử thậm chí không cao 1080. Phiên bản 0.2.0 đổi sang suy giới hạn bề rộng từ hình học từng video. ⭐ Luận điểm §9.10 lại xuất hiện: đóng cứng hằng số một camera khi camera chưa biết không tạo phép đo — tạo thiết bị loại mọi thứ không giống camera đó
이상치 제거outlier rejectionloại ngoại lệ아무것도 하지 않았다는 것이 측정으로 확인됐다. 통과한 창과 기각된 창의 잔차 MAD가 같았다(0.014·frame_w) — 즉 거르고 있던 것이 잡음이 아니었다. 병적인 경우의 상한만 남기고 그렇게 적어 두었다measured, and found to do nothing. Passing and rejected windows had the same residual MAD (0.014·frame_w) — so what it filtered was not noise. It was kept only as a ceiling for pathological cases, and said sođã đo, thấy không tác dụng. Cửa sổ qua/bị loại có cùng MAD phần dư (0.014·frame_w) — không phải lọc nhiễu. Chỉ giữ làm trần cho trường hợp cực đoan, ghi rõ như vậy
차선 트랙 평활화
(hold-last · Kalman)
lane-track smoothing (hold-last · Kalman)làm mượt vệt làn (giữ cuối · Kalman)
커버리지는 늘고 정확도는 한 치도 늘지 않았다. 12편 × 창 45프레임(540)에서 원본 CLRerNet B 는 쌍이 선 프레임 249/540, 그중 페인트 ≥0.5 가 58/540. hold-last K=8 은 쌍을 366/540까지 늘렸는데 페인트 ≥0.5 는 그대로 58/540 — 새로 생긴 117프레임 중 0개가 페인트에 얹혔다. Kalman K=8 은 291/540 에 페인트 ≥0.5 가 오히려 55/540으로 내려갔고 예측 프레임은 2/100. 자차 운동을 넣으면 43/540까지 더 떨어진다. 그런데 보닛행 지터는 4.7 → 2.5 px로 좋아진다 — 평활화가 개선한 유일한 지표가 정확도를 재지 않는 지표다. 011번 편은 검출이 0인데 hold-last 가 차선 쌍 8프레임을 만들어 냈다. 당시 결론: 「예측된 선은 100번에 1번 페인트에 얹힌다」 fault-lab · 2026-09-10It bought coverage and not one point of accuracy. Over 12 clips × a 45-frame window (540), raw CLRerNet B had an ego pair on 249/540 frames, 58/540 of them on paint at ≥0.5. hold-last K=8 raised pairs to 366/540 while paint ≥0.5 stayed at exactly 58/540 — none of the 117 invented frames landed on paint. Kalman K=8 reached 291/540 with paint ≥0.5 falling to 55/540, and 2/100 on its predicted frames. Feeding in ego motion drove it to 43/540. Meanwhile bonnet-row jitter improves, 4.7 → 2.5 px — the one metric smoothing helps is the one that does not measure correctness. On clip 011 the detector found nothing and hold-last produced 8 frames of lane pairs anyway. The verdict at the time: "predicted lines still land on paint 1 in 100 times."Tăng độ bao phủ, không tăng một điểm chính xác. 12 video × cửa sổ 45 khung (540), CLRerNet B thô có cặp làn xe camera ở 249/540 khung, 58/540 bám vạch ≥0.5. hold-last K=8 tăng cặp lên 366/540, bám vạch ≥0.5 vẫn đúng 58/540 — không khung nào trong 117 khung tạo thêm bám vạch. Kalman K=8 đạt 291/540, bám vạch ≥0.5 giảm còn 55/540, 2/100 khung dự đoán. Thêm chuyển động xe camera còn 43/540. Trong khi độ rung hàng ca-pô tốt hơn, 4.7 → 2.5 px — chỉ số được cải thiện lại không đo độ đúng. Video 011 không phát hiện gì nhưng giữ cuối vẫn tạo 8 khung có cặp làn. Kết luận: ‘đường dự đoán chỉ bám vạch 1/100 lần.’
진행방향 3분류 학습 규칙
(교차 · 대향 · 동방향)
a learned 3-class direction rule (crossing · opposing · same direction)quy tắc học 3 lớp hướng (giao cắt · ngược chiều · cùng hướng)
기준선을 이기지 못했다. 교차검증 정확도 114/195 = 0.585 [0.51, 0.65] 대 언제나 「교차」라고 답하기 0.569 — 구간이 겹친다. 분류별로 보면 이유가 분명하다: 교차 재현율 85/111 = 0.766 인데 대향 5/17 = 0.294, 동방향 24/67 = 0.358. 즉 규칙이 배운 것은 방향이 아니라 다수 분류의 빈도다. ⭐ 정확도를 사 준 것은 모델이 아니라 기권이었다 — 확신 0.7 미만을 기권하면 73/195만 답하고 52/73 = 0.712로 오른다. 다만 0.8에서는 18/26 = 0.692로 다시 내려간다. 확신값이 단조롭지 않다는 뜻이고, 문턱은 재어서 고를 것lense · 2026-09-16It did not beat its baseline. Cross-validated accuracy 114/195 = 0.585 [0.51, 0.65] against always answering "crossing" at 0.569 — the intervals overlap. The per-class figures say why: crossing recall 85/111 = 0.766, but opposing 5/17 = 0.294 and same-direction 24/67 = 0.358. What the rule learned was the majority class, not the direction. Abstention, not the model, bought the accuracy: withholding below confidence 0.7 answers only 73/195 and reaches 52/73 = 0.712 — though at 0.8 it falls back to 18/26 = 0.692, so the confidence is not monotone and the threshold has to be measured rather than assumed.Không vượt cơ sở. Kiểm định chéo 114/195 = 0.585 [0.51, 0.65], so với luôn trả ‘giao cắt’ 0.569 — khoảng chồng nhau. Recall từng lớp: giao cắt 85/111 = 0.766, ngược chiều 5/17 = 0.294, cùng hướng 24/67 = 0.358. Học lớp đa số, không học hướng. Không kết luận mới đem độ chính xác, không phải mô hình: giữ lại confidence dưới 0.7 chỉ trả 73/195, đạt 52/73 = 0.712; ngưỡng 0.8 lại giảm 18/26 = 0.692, độ tin cậy không đơn điệu, phải đo ngưỡng thay vì giả định.

⭐ 세 가지가 같은 방향을 가리킨다. 「측정했다」가 「검증했다」를 뜻하지 않는다 — 20° 규칙은 반례를 빼고 쟀고, 차로폭 게이트는 자기가 버린 것을 세지 않았고, 이상치 제거는 거르는 것이 있다고 가정했다. §0.2의 순위가 이것을 잡아 주지 못한다 — 셋 다 「측정된 수치」로 보이기 때문이다.

⭐ The three point the same way. "Measured" does not mean "validated": the 20° rule was scored with its counter-examples removed, the width gate never counted what it discarded, and outlier rejection assumed there was something to filter. §0.2’s ranking does not catch this, because all three arrive looking like measured figures.

⭐ Cả ba cùng chỉ một hướng. ‘Đã đo’ không nghĩa ‘đã xác nhận’: quy tắc 20° loại phản ví dụ trước khi chấm, cổng bề rộng không đếm thứ đã loại, lọc ngoại lệ giả định có thứ cần lọc. Thứ tự nguồn tại §0.2 không bắt được, vì cả ba trông như số đã đo.

⭐ 하나는 실제로 만들어졌다 — 등화(燈火) 검출기, 그리고 그것이 실패한 자리⭐ One of them was actually built — the lamp detector, and exactly where it fails⭐ Có một công cụ thực sự đã xây — phát hiện đèn, chính xác lỗi ở đâu

이 문서는 다른 곳에서 「CV 레포 어디에도 방향지시등 검출기가 없다」고 적었다. 정확하지 않다. new-knia의 knia/perception/lights.py는 blinker · hazard_lights · lamps_on · brake_light를 구현한다. 받지 못한 것은 점수와 배선이다 — 2주 뒤 CV 재고표가 이 줄을 「구현됨, 채점된 적 없음, 상자 크기로 표본의 절반을 버림」으로 적고, 같은 레포의 뷰어는 검출기 미구현을 찍는다. 정직한 상태는 「만들어졌고, 일부만 재어졌고, 연결되지 않았다」이다.

Elsewhere this document says no indicator detector exists in any CV repo. That is not accurate. new-knia's knia/perception/lights.py implements blinker · hazard_lights · lamps_on · brake_light. What it never received was a score and a wire: a CV inventory two weeks later records the row as "Implemented, never scored, discards half the samples on box size", while the same repo's viewer still prints 검출기 미구현. The honest state is built, partially measured, never connected.

Nơi khác nói không kho CV nào có phát hiện xi-nhan. Không chính xác. knia/perception/lights.py của new-knia có blinker · hazard_lights · lamps_on · brake_light. Thiếu điểm số và kết nối: kiểm kê CV hai tuần sau ghi ‘đã xây, chưa chấm, loại nửa mẫu theo kích thước hộp’, trình xem cùng kho vẫn in 검출기 미구현 (chưa xây bộ phát hiện). Trạng thái trung thực: đã xây, đo một phần, chưa kết nối.

설계의 핵심은 색이 아니라 주파수다, 그리고 그 근거가 법령이다. 제동등과 방향지시등은 둘 다 붉다 — 색으로는 갈라지지 않는다. 가르는 것은 자동차규칙 제38조의 분당 60~120회라는 규격이라, 좌·우 등화의 붉은 정도에 주기도(periodogram)를 건다. 한쪽만 1~2 Hz면 방향지시등이고, 양쪽이 같은 위상이면 비상등이다 — 주파수가 같으므로 위상이 유일한 판별자다.

The design point is the frequency, not the colour, and its warrant is a regulation. Brake lights and indicators are both red, so colour cannot separate them. What separates them is the 60–120 flashes per minute fixed by 자동차규칙 제38조, so the detector runs a periodogram on left and right lamp redness. One side at 1–2 Hz is an indicator; both sides in phase is a hazard light — same frequency, so phase is the only discriminator.

Thiết kế dựa tần số, không màu, có quy định làm căn cứ. Đèn phanh và xi-nhan đều đỏ, màu không phân biệt. Khác biệt là 60–120 nháy/phút theo Điều 38 quy tắc ô tô, nên bộ phát hiện chạy periodogram trên độ đỏ đèn trái/phải. Một bên 1–2 Hz là xi-nhan; hai bên cùng pha là đèn cảnh báo — cùng tần số nên chỉ pha phân biệt.

🚨 그리고 제동등은 하필 가장 중요한 동작에서 실패한다 — 이유는 밝기가 아니다and the brake detector fails on exactly the manoeuvre that matters — brightness is not whybộ phát hiện phanh sai đúng thao tác quan trọng — không phải vì độ sáng

한 클립에서 t=3.6초에 앞차의 제동등이 화면에 분명히 켜져 있는데 검출기는 제동 구간을 하나도 내지 않았다. 원인은 밝기가 아니다 — 표본 75개 중 44개가 문턱을 넘는다. 막은 것은 양쪽이 동시에 올라와야 한다는 자기 규칙이고, 그 조건을 만족하는 프레임은 단 1개였다. 붉기가 좌우로 크게 비대칭이기 때문이다(t=3.2에서 좌 17·우 0, t=4.4에서 좌 11·우 50). 그 비대칭의 원인은 가정 자체에 있다 — 「뒷면이 보여야 한다」. 끼어드는 차는 비스듬히 보이므로 한쪽 등이 압도한다. 즉 그 요건은 하필 가장 중요한 동작에서 깨진다.

On one clip the lead car's brake lights are plainly lit at t=3.6 s and the detector returns no brake interval at all. Brightness is not the blocker — 44 of 75 samples clear the threshold. The blocker is its own simultaneity rule: exactly one frame has both sides stepping up together, because redness is strongly asymmetric (t=3.2 → L 17 / R 0; t=4.4 → L 11 / R 50). The asymmetry traces back to the stated assumption "the rear must be visible". A car cutting in is seen at an angle, so one tail light dominates — the requirement fails precisely on the manoeuvre that decides 진로변경 and 안전거리 charts.

Một video thấy rõ đèn phanh xe trước sáng ở t=3.6 s, nhưng trả không khoảng phanh nào. Độ sáng không chặn — 44/75 mẫu vượt ngưỡng. Chặn do quy tắc đồng thời riêng: chỉ một khung có hai bên cùng tăng vì độ đỏ bất đối xứng mạnh (t=3.2 → L 17 / R 0; t=4.4 → L 11 / R 50). Bất đối xứng bắt nguồn giả định ‘phải thấy đuôi xe’. Xe tạt đầu được nhìn nghiêng, một đèn đuôi chiếm ưu thế — giả định sai đúng thao tác quyết định biểu đồ chuyển làn/khoảng cách an toàn.

그 결함은 더 이른 교차검증에서 이미 숫자로 나와 있었다 — 제동등 대 접근 가속도(d²y/dt², 완전히 다른 픽셀): 54건 중 27건 = 50%, 순수한 우연이다. 반대로 같은 실행의 양성 대조는 설득력이 있다 — 장면 조도(하늘 전체)와 lamps_on(차량 크롭)은 서로를 전혀 모르는데 단조롭게 일치한다: 주간 6% · 황혼 25% · 야간 62%.

The defect was already visible as a number in an earlier cross-check: brake lights against closing acceleration (d²y/dt², entirely different pixels) scored 27 of 54 = 50%, pure chance. The positive control from the same run is worth as much in the other direction: scene lighting (whole-frame sky) and lamps_on (vehicle crops) know nothing about each other, yet agree monotonically — day 6% · dusk 25% · night 62%.

Lỗi từng hiện bằng số ở kiểm tra chéo: đèn phanh so với gia tốc áp sát (d²y/dt², vùng pixel hoàn toàn khác) đạt 27/54 = 50%, thuần ngẫu nhiên. Đối chứng dương cùng lần chạy có giá trị ngược lại: chiếu sáng bối cảnh (bầu trời toàn khung) và lamps_on (ảnh cắt xe) độc lập nhưng đồng thuận đơn điệu — ngày 6% · chạng vạng 25% · đêm 62%.

⭐ 후임자에게 남는 것은 코드가 아니라 두 가지다 — ① 주파수·위상으로 간다는 방법과 그 법적 근거, ② 유효성 가정을 먼저 적고 그것이 깨지는 기하를 세어 보라는 절차. 이 검출기는 전자가 옳았고 후자를 건너뛰었다.

⭐ Two things survive for a successor, and neither is the code: ① the route — frequency and phase, with a regulation behind it; and ② the procedure — write the validity assumption down first, then count the geometry in which it breaks. This detector got the first right and skipped the second.

⭐ Hai thứ người tiếp quản nên giữ, đều không phải mã: ① hướng tiếp cận — tần số và pha, có quy định; ② quy trình — ghi giả định hợp lệ trước, rồi đếm hình học khiến nó sai. Công cụ làm đúng điều đầu, bỏ điều sau.

9.6⭐⭐ 다시 쓸 수 있는 결론 — 이 프로젝트가 산 가장 값진 것 · The reusable conclusionsCác kết luận tái sử dụng được

These outlive any model change, and each is tied to a measurement or to algebra. The most consequential: a consumer dashcam is out of distribution for essentially every published model — a ~130° lens with barrel distortion violates the pinhole assumption they all share, costing more mIoU than night and rain combined. Agreement between estimators is consistency, not validation, because every metric number traces back to the same two unverified constants. Coverage, not accuracy, is the product metric — the right question is not "what percentage does it get right" but "what percentage can it answer while staying 99% right". A method that cannot produce evidence cannot be used, which is why a dash-pitch count beats a depth model's 11.3 m. And the ground truth is weak in ways the project measured: human labellers shown byte-identical video disagree 17% of the time, and the dispute committee itself departs from the published base ratio in 79% of chart-linked decisions.

Những điều này tồn tại qua đổi mô hình, mỗi điều gắn phép đo hoặc đại số. Quan trọng nhất: camera hành trình dân dụng ngoài phân phối của gần như mọi mô hình công bố — ống kính ~130° méo thùng vi phạm giả định lỗ kim chung, làm mất mIoU nhiều hơn đêm và mưa cộng lại. Bộ ước lượng đồng thuận là nhất quán, không phải xác nhận, vì mọi số mét truy về cùng hai hằng số chưa kiểm chứng. Độ bao phủ mới là chỉ số sản phẩm — hỏi ‘trả lời được bao nhiêu mà vẫn đúng 99%’, không chỉ ‘đúng bao nhiêu phần trăm’. Phương pháp không tạo bằng chứng không dùng được, nên đếm nhịp vạch đứt thắng 11.3 m của mô hình độ sâu. Chuẩn thật cũng yếu theo cách đã đo: người xem video giống từng byte bất đồng 17%; hội đồng tranh chấp lệch tỷ lệ cơ sở công bố trong 79% quyết định gắn biểu đồ.

모델이 바뀌어도 남는 것들이다. 전부 측정이나 대수(代數)에 묶여 있다.

1소비자용 대시캠은 사실상 모든 공개 모델에게 분포 밖이다. 「~130° 화각의 강한 배럴 왜곡은 이 네트워크들이 전부 가정하는 핀홀 모델을 위반한다」. Cityscapes mIoU 0.747(직선) → 0.420(f=125) → 0.232(f=75). → 「왜곡 보정 없이 130° 프레임을 Cityscapes 학습 모델에 넣는 것이 파이프라인에서 피할 수 있는 가장 큰 단일 오차다 — 밤보다도, 비보다도 크다」A consumer dashcam is out of distribution for essentially every published model. "A ~130° field of view with strong barrel distortion violates the pinhole model that every one of these networks assumes." Cityscapes mIoU 0.747 rectilinear → 0.420 at f=125 → 0.232 at f=75. → "Feeding raw barrel-distorted 130° frames to a Cityscapes-trained model is the single largest avoidable error in the pipeline — larger than night, larger than rain."Camera hành trình dân dụng ngoài phân phối của gần như mọi mô hình công bố. ‘Góc nhìn ~130° với méo thùng mạnh vi phạm mô hình lỗ kim mọi mạng này giả định.’ mIoU Cityscapes 0.747 thẳng → 0.420 ở f=125 → 0.232 ở f=75. → ‘Đưa khung 130° méo thùng thô vào mô hình huấn luyện Cityscapes là lỗi tránh được lớn nhất — lớn hơn đêm, lớn hơn mưa.’
2방법들 사이의 일치는 검증이 아니라 일관성이다. 「추정기들 사이의 일치는 정확도가 아니다」 — 스택의 모든 미터 값이 검증되지 않은 상수 둘로 되돌아가므로, 그 둘을 공유하는 두 경로의 일치는 일관성일 뿐이다. 「절대 진리값이 하나도 없다 … 두 방법이 같은 방향으로 틀렸다면 이 문서는 그것을 잡지 못한다」Agreement between methods is consistency, not validation. "Agreement between estimators is not accuracy." Every metric number in the stack traces back to the same two unverified constants, so two routes that share them agreeing proves only consistency. "There is not one absolute ground-truth value anywhere … if two methods are wrong in the same direction, this document will not catch it."Phương pháp đồng thuận là nhất quán, không phải xác nhận. ‘Các bộ ước lượng đồng thuận không phải độ chính xác.’ Mọi số mét truy về cùng hai hằng số chưa kiểm chứng; hai cách chung hằng số chỉ chứng minh nhất quán. ‘Không có một giá trị chuẩn tuyệt đối nào… hai phương pháp cùng sai một hướng, tài liệu này không bắt được.’
3제품의 지표는 정확도가 아니라 커버리지다. 「정밀도가 아무리 좋아도 커버리지가 곱해진다」 · 「30%p를 움직이는 판정을 22% 미만의 커버리지로 내는 것은 제품으로서 위험하다」. 그리고 지표의 올바른 모양 — 「몇 % 맞히나?」 ❌ / 「99% 정확도를 유지하면서 몇 %를 답할 수 있나?」 ✅Coverage, not accuracy, is the product metric. "However good the precision, coverage multiplies it." · "Issuing a judgement that moves 30 points on under 22% coverage is dangerous as a product." And the right shape for the metric: "what percentage does it get right?" ❌ / "how much can it answer while staying 99% right?" ✅Độ bao phủ là chỉ số sản phẩm, không chỉ độ chính xác. ‘Precision tốt mấy cũng bị nhân với độ bao phủ.’ · ‘Kết luận dịch 30 điểm với độ bao phủ dưới 22% nguy hiểm về sản phẩm.’ Câu hỏi đúng: ‘đúng bao nhiêu phần trăm?’ ❌ / ‘trả lời được bao nhiêu mà vẫn đúng 99%?’ ✅
4근거를 만들 수 없는 방법은 쓸 수 없다. 「'B는 A보다 2.5 점선피치 뒤'는 담당자가 같은 프레임에서 검증 가능하고, 깊이 모델의 11.3m는 아니다」 → 측정과 근거가 같은 물건이 된다. 반대 예도 명시됐다 — 「못 쓰는 것: 딥 VO의 궤적. DPVO가 '자차가 4.2m 전진'이라 해도 담당자가 확인할 방법이 없다」A method that cannot produce evidence cannot be used. "'B is 2.5 dash-pitches behind A' is something the adjuster can verify in the same frame; a depth model's 11.3 m is not" → the measurement and the evidence become the same object. The counter-example is named: "what you cannot use: a deep VO trajectory. If DPVO says the ego car advanced 4.2 m, the adjuster has no way to check it."Không tạo được bằng chứng thì không dùng được. ‘B cách sau A 2.5 nhịp vạch đứt’ là thứ giám định viên kiểm được trong cùng khung; 11.3 m của mô hình độ sâu thì không → phép đo và bằng chứng thành cùng một vật. Phản ví dụ: ‘không dùng được quỹ đạo VO sâu. DPVO nói xe đi 4.2 m, giám định viên không có cách kiểm.’
5🚨 검출기를 좋게 만들면 제품이 나빠질 수 있다. 「충돌 후보가 7.5개에서 11개로 늘면 1·2위 점수차가 좁아지고 … 그 자체가 게이트가 잘못됐다는 신호다」🚨 Making the detector better can make the product worse. "If impact candidates rise from 7.5 to 11, the gap between first and second narrows … that is itself a sign the gate is wrong."🚨 Bộ phát hiện tốt hơn có thể làm sản phẩm kém hơn. ‘Ứng viên va chạm từ 7.5 lên 11, khoảng cách hạng một/hai hẹp lại… bản thân là dấu hiệu cổng sai.’
6식별이 속성보다 먼저다. 「43건 중 23건이 차선이 아예 없는 자리에 색을 단정했다」. 게이트를 고친 뒤: 읽을 수 없는 띠에 단정하는 건수 23 → 3, 정밀도 85% → 88.9%, 커버리지 59.7% → 16.7% — 올바른 교환이다Identity precedes attribute. "23 of 43 asserted a colour where there was no lane at all." After fixing the gate: commitments on unreadable strips 23 → 3, precision 85% → 88.9%, coverage 59.7% → 16.7% — the right tradeDanh tính đi trước thuộc tính. ‘23/43 khẳng định màu ở nơi hoàn toàn không có làn.’ Sửa cổng: cam kết trên dải không đọc được 23 → 3, precision 85% → 88.9%, bao phủ 59.7% → 16.7% — đánh đổi đúng
7페인트를 찾는 것이 의미를 알려주지는 않는다. 안전지대와 도류화는 둘 다 흰 사선 해치이고, 구분은 도로 위상과 법적 기능이지 외형이 아니다. 공개 분류 체계 중 법적·기능적 범주를 인코딩한 것은 없고, 그들 스스로 정책으로 그렇게 밝힌다Finding the paint does not tell you what it means. A safety zone and a channelising island are both white diagonal hatch; the distinction is road topology and legal function, not appearance. No public taxonomy encodes legal-functional categories, and they say so as policy.Tìm thấy vạch sơn không nói được ý nghĩa. Vùng an toàn và đảo dẫn hướng đều gạch chéo trắng; khác biệt là topology đường và chức năng pháp lý, không phải ngoại hình. Không phân loại công khai nào mã hóa nhóm chức năng pháp lý; họ nói rõ đó là chính sách.
8🚨 33밀리초 차이로 계산한 양이 100클립 중 45건에서 도표 관련 출력을 바꾼다. 「모델 품질 비용처럼 보이는 차이가 프레임 샘플링 지터와 구별되지 않는다. 이런 대조 없는 도표 수준 평가는 잡음을 재고 있는 것」🚨 A quantity computed 33 ms apart changes the chart-relevant output on 45 of 100 clips. "A difference that looks like a model-quality cost is indistinguishable from frame-sampling jitter, and any chart-level evaluation without a control of this kind is measuring noise."🚨 Đại lượng tính cách nhau 33 ms đổi đầu ra liên quan biểu đồ ở 45/100 video. ‘Khác biệt trông như chi phí chất lượng mô hình không phân biệt được với rung lấy mẫu khung; đánh giá cấp biểu đồ thiếu đối chứng này đang đo nhiễu.’
9변동의 원인은 모델이 아니라 프롬프트인 경우가 많다. Grounding DINO — 「같은 모델, 같은 데이터, 프롬프트만 바꿔서 AP가 7배 흔들린다. 이건 성능 편차가 아니라 측정 불가능성이다」The variance is often the prompt, not the model. Grounding DINO — "same model, same data, AP swings sevenfold on the prompt alone. That is not performance variance, it is unmeasurability."Phương sai thường do prompt, không mô hình. Grounding DINO — ‘cùng mô hình, dữ liệu, AP dao động bảy lần chỉ do prompt. Không phải biến động hiệu năng, là không đo được ổn định.’
10내부 일관성은 정확성이 아니다. 「셋이 통과했는데 지도는 121미터 틀려 있었다」 · 「그 연쇄는 내부적으로 일관되고 외부적으로 거짓이었다」 · 「엉뚱한 이유로 실패하는 fixture는 없느니만 못하다」Internal consistency is not correctness. "Three of them passed while the map was 121 metres wrong" · "the chain was internally consistent and externally false" · "a fixture that fails for the wrong reason is worse than no fixture."Nhất quán nội bộ không phải đúng. ‘Ba kiểm tra qua dù bản đồ sai 121 mét’ · ‘chuỗi nhất quán nội bộ nhưng sai bên ngoài’ · ‘fixture thất bại sai lý do còn tệ hơn không có.’
11사후 과실 분석은 자율주행이 아니고, 그 비대칭은 우리 편이다. 충돌에서 시간을 거슬러 갈 수 있고, 여러 시점을 겹칠 수 있고, 영상 밖 증거를 쓸 수 있고, 지연 예산이 없다. 넷 다 지금 시스템이 쓰고 있는 설계상의 허가다Post-hoc fault analysis is not self-driving, and the asymmetry is in our favour. You can move backwards from the impact, overlay several viewpoints, use evidence outside the video, and you have no latency budget. All four are design permissions the shipped system usesPhân tích lỗi sau tai nạn khác tự lái; bất đối xứng có lợi. Có thể đi lùi từ va chạm, chồng nhiều góc nhìn, dùng bằng chứng ngoài video, không bị ràng buộc độ trễ. Hệ thống phát hành dùng cả bốn quyền thiết kế này
12자차는 자기를 볼 수 없고, 이것은 물리이지 설계가 아니다. 그리고 거울상이 인코딩되지 않았다 — 「ego_blind는 있는데 자차가 압도적으로 유리한 경우를 표시할 곳이 없다 … 같은 슬롯, 같은 시그니처, 10배 다른 오차」. 실무 함의: 「도표 가드 중 자차 쪽에 걸린 것부터 구현하면 같은 노력으로 훨씬 많은 도표가 결정된다」The ego vehicle cannot see itself, and that is physics, not architecture. And its mirror image was never encoded — "ego_blind exists, but there is nowhere to record that the ego car is overwhelmingly favoured … same slot, same signature, ten times the error." The practical consequence: implement the chart guards that sit on the ego side first and the same effort decides many more chartsXe camera không thấy chính mình: vật lý, không phải kiến trúc. Mặt ngược lại chưa mã hóa — ‘có ego_blind, nhưng không nơi ghi xe camera được ưu thế áp đảo… cùng trường, cùng chữ ký, lỗi gấp mười.’ Hệ quả: xây cổng biểu đồ phía xe camera trước, cùng công sức quyết định được nhiều biểu đồ hơn
13기권은 프롬프트의 선택지가 아니라 입력에 대한 구조적 전제조건 검사여야 한다. 그리고 「UNKNOWN은 후보를 제거하지 않는다」 — 두 프로젝트가 독립적으로 도달했고, 한쪽은 대가를 치른 뒤였다Abstention must be a structural precondition check on the input, not an option in the prompt. And "UNKNOWN never eliminates a candidate" — reached independently by two projects, one of them after paying for itKhông kết luận phải là kiểm tra tiền điều kiện cấu trúc đầu vào, không phải lựa chọn trong prompt. Và ‘UNKNOWN không bao giờ loại ứng viên’ — hai dự án đạt độc lập, một dự án sau khi trả giá
⭐ 그리고 정답셋에 대한 결론 — 이 문서 3장과 같은 곳에 도달한다Kết luận về tập chuẩn — đi tới cùng chỗ với chương 3

「라벨러 간 일치율이 모델 정확도의 상한이다」 — 그리고 라벨러 B는 시작하지 않았으므로 그 상한은 한 번도 측정되지 않았다. 같이 기록된 것들: 바이트 동일 영상에 대해 사람이 17% 불일치 · ams-1080 프리소트와 라벨러는 808건 중 16건만 일치 · 사람 재검토가 라벨러의 도표를 53건 중 32건에서 뒤집음 · AI Hub의 41.3%가 중복이고 그 쌍의 39~48%가 다른 과실비율 · 그리고 분쟁심의위원회 자신도 갈린다(2,460 결정문 중 270건에 소수의견, 중앙값 격차 10%p, 도표 연결 결정의 79%가 공시 기본비율에서 벗어남).

Inter-labeller agreement is the ceiling on model accuracy — and labeller B never started, so the ceiling was never measured. The dispute committee itself splits, departing from the published base ratio in 79% of chart-linked decisions.

Đồng thuận giữa người gán nhãn là trần độ chính xác mô hình — người B chưa bắt đầu nên chưa đo trần. Chính hội đồng tranh chấp cũng khác nhau, lệch tỷ lệ cơ sở công bố ở 79% quyết định gắn biểu đồ.

🚨 ⭐ 가장 값진 한 줄 — 도구가 자기 사실을 고쳤는데 도표는 거의 안 움직였다⭐ the most valuable single result — the tool fixed its own fact and the chart barely moved⭐ kết quả đơn lẻ giá trị nhất — công cụ sửa dữ kiện của nó, biểu đồ hầu như không đổi

타임라인 2026-10-07의 visus 실행에서 나온다. 자차 heading 도구를 붙인 전후를 같은 100건에서 비교했다.

From the visus run of 2026-10-07 on the timeline. The ego-heading tool, measured on the same 100 cases with and without it.

Lần chạy visus 2026-10-07 trên dòng thời gian. Công cụ hướng xe camera đo trên cùng 100 hồ sơ, có/không công cụ.

같은 100건, 영상만same 100 cases, video onlycùng 100 hồ sơ, chỉ videotop-1계열familynhóm자차 기동 정답ego manoeuvre rightđúng thao tác xe camera
에이전트 + 구성autonomous + construalstự chủ + cách diễn giải3043~55%
+ heading 도구+ the heading tool+ công cụ hướng355170% (48/69)
+ 출동 보고의 사건 열(상한)+ the dispatch report’s event line (ceiling)+ dòng sự kiện báo cáo điều phối (trần)5872—

도구는 자기 일을 했다 — 100건 중 99건에서 호출됐고, 자차 기동 정답률이 55% → 70%로 올랐다(우회전 2/7 → 6/7). 그런데 도표 top-1은 30 → 35다 — 얻은 13건, 잃은 8건, p ≈ 0.38. 입증된 개선이 아니다.

The tool did its job — called on 99 of 100 clips, and the ego manoeuvre went from 55% to 70% correct (right turns 2/7 → 6/7). But chart top-1 went 30 → 35: 13 gained, 8 lost, p ≈ 0.38. Not a proven gain.

Công cụ làm đúng việc — gọi ở 99/100 video, đọc đúng thao tác tăng 55% → 70% (rẽ phải 2/7 → 6/7). Nhưng top-1 biểu đồ chỉ 30 → 35: thêm đúng 13, mất đúng 8, p ≈ 0.38. Chưa chứng minh mức tăng.

⭐ 이것이 이 문서 전체에서 가장 중요한 음성 결과일 수 있다. §9.10은 「기하는 CV 몫」이라고 결론했고 이 도구가 바로 그 처방이다 — 처방대로 했고, 측정한 사실은 실제로 좋아졌고, 그래도 제품 지표는 잡음 안에서 움직였다. 같은 표의 마지막 줄이 이유를 가리킨다: 사람이 쓴 사건 열을 주면 top-1이 58로 뛴다. 병목은 자차 기동이 아니라 사건의 열이었다 — §2.2가 스키마에서 짚은 그 결핍이다.

⭐ This may be the most important negative result in the document. §9.10 concluded that the geometry belongs to CV, and this tool is exactly that prescription — it was followed, the measured fact genuinely improved, and the product metric still moved inside the noise. The last row of the same table says why: hand the system a human-written event line and top-1 jumps to 58. The bottleneck was never the ego manoeuvre — it was the sequence of events, the deficiency §2.2 identifies in the schema.

⭐ Có thể là kết quả âm quan trọng nhất. §9.10 kết luận hình học thuộc CV; công cụ làm đúng chỉ dẫn — đã làm theo, dữ kiện thật sự tốt hơn, chỉ số sản phẩm vẫn đổi trong nhiễu. Dòng cuối giải thích: cho hệ thống dòng sự kiện do người viết, top-1 nhảy lên 58. Nút thắt chưa từng là thao tác xe camera — là chuỗi sự kiện, thiếu hụt schema §2.2 xác định.

⭐ 영상만 주면 여섯 가지 방법이 전부 29~35/100에 모인다given video alone, six different methods all land between 29 and 35 out of 100chỉ video, sáu phương pháp đều nằm giữa 29 và 35/100

§9.6의 heading 도구 결과는 혼자가 아니다. 같은 100건에서 읽는 방식을 여섯 번 바꿔 봤고, 전부 같은 띠에 들어간다:

The heading-tool result in §9.6 does not stand alone. Six different ways of reading were tried on the same 100 cases, and all of them land in one band:

Kết quả công cụ hướng ở §9.6 không đơn độc. Sáu cách phân tích trên cùng 100 hồ sơ đều nằm trong một dải:

단계별 단일 사실 연쇄staged single-fact chainchuỗi từng dữ kiện theo bước29
자율 에이전트autonomous agentagent tự chủ30 — 앞의 것과 p = 1.0— against the above, p = 1.0— so với trên, p = 1.0
+ heading 도구+ the heading tool+ công cụ hướng35
+ 상대차 추적기+ the other-car tracker+ theo dõi xe kia30 — 100건 중 97건에서 호출됐는데도 제자리— back to where it started, despite being used on 97 of 100— trở về điểm xuất phát dù dùng ở 97/100
⭐ + 출동 보고의 사건 열+ the dispatch report’s event line+ dòng sự kiện báo cáo điều phối58
운영(보고서 포함)production, with the reportproduction, có báo cáo66

⭐ 영상 쪽에서 무엇을 바꾸든 30 언저리이고, 사람이 쓴 사건 열을 주면 58로 뛴다. §2.2의 결핍이 다섯 번 독립적으로 재확인된 셈이다. ⚠️ 그리고 한때 73%가 나왔던 「질문을 좁혀서 묻기」는 철회됐다 — 「질문 자체가 모델을 예 쪽으로 밀고 있었다」.

⭐ Whatever is changed on the video side the answer sits near 30, and handing it a human-written event line jumps it to 58. That is §2.2’s deficiency confirmed five independent ways. ⚠️ And an earlier 73% from asking narrower targeted questions was retracted — "the question itself was nudging the model toward ‘yes’."

⭐ Đổi gì phía video cũng quanh 30; đưa dòng sự kiện do người viết thì lên 58. Thiếu hụt §2.2 được xác nhận qua năm cách độc lập. ⚠️ Con số 73% trước đó từ câu hỏi hẹp có mục tiêu đã rút lại — ‘chính câu hỏi đẩy mô hình về đáp án có.’

⭐⭐ 빌려 온 상수 하나가 계측을 필터로 바꾼다 — 증명까지⭐⭐ One borrowed constant turns a measurement into a filter — with the proof⭐⭐ Một hằng số mượn biến phép đo thành bộ lọc — có bằng chứng

이 문서는 다른 곳에서 「원인은 모델이 아니라 우리 게이트였다」는 결론을 적었다. 여기 그 증명을 둔다. 후임자가 가져갈 것은 결론이 아니라 이 버그의 모양이기 때문이다.

Elsewhere this document records the conclusion — the cause was our gate, not the model. Here is the proof, because what a successor should carry away is not the conclusion but the shape of the bug.

Nơi khác ghi kết luận — nguyên nhân là cổng của ta, không phải mô hình. Đây là bằng chứng, vì người tiếp quản cần giữ hình dạng lỗi, không chỉ kết luận.

cv-processing/src/cv_processing/lanes.py:500

    rows   = np.linspace(frame_h * 0.55, frame_h * 0.98, 12)   # (1) measure width from 0.55h down
    widths = model.width(rows)
    if np.any(widths <= 0):
        model.valid  = False
        model.reason = "boundaries cross within the road region"

    ... three lines later ...                                   # (2) horizon may sit as low as 0.85h
    if vp_y > frame_h * 0.85:  reject
cv-processing/src/cv_processing/lanes.py:500

    rows   = np.linspace(frame_h * 0.55, frame_h * 0.98, 12)   # (1) đo bề rộng từ 0.55h trở xuống
    widths = model.width(rows)
    if np.any(widths <= 0):
        model.valid  = False
        model.reason = "boundaries cross within the road region"

    ... ba dòng sau ...                                       # (2) chân trời có thể thấp tới 0.85h
    if vp_y > frame_h * 0.85:  reject

두 상수는 함께 참일 수 없다. 적합된 지평선이 0.55·h보다 아래에 있으면, (1)은 지평선 위쪽에서 차로 폭을 재는 것이 된다. 거기서는 두 경계가 이미 수렴해 교차했으므로 폭이 구조적으로 음수이고, 기하학적으로 옳은 모델이 버려진다.

The two constants cannot both be right. When the fitted horizon sits below 0.55·h, (1) is measuring lane width above the horizon, where the boundaries have already converged and crossed — so width is negative by construction and a geometrically correct model is discarded.

Hai hằng số không thể cùng đúng. Chân trời khớp nằm dưới 0.55·h thì (1) đo bề rộng làn phía trên chân trời, nơi biên đã hội tụ và cắt nhau — bề rộng âm ngay theo cấu trúc, mô hình đúng hình học bị loại.

「확인된 계측: 성공적으로 적합된 9,464개 창 전체에서 vp_y ≥ 0.55·h인 것은 0개이고, 최댓값은 정확히 0.550이다. 이 게이트는 한 번도 기하 검사였던 적이 없다 — 지평선 필터였다. 어떤 클립은 3픽셀 차이로 떨어졌다.」 — 2026-08-25

"Confirmed measurement: across 9,464 successfully-fitted windows, zero have vp_y ≥ 0.55·h; the maximum is exactly 0.550. The gate has never been a geometry check — it is a horizon filter. One clip failed by 3 pixels." — 2026-08-25

‘Đo đã xác nhận: trong 9,464 cửa sổ khớp thành công, không cửa sổ nào có vp_y ≥ 0.55·h; tối đa đúng 0.550. Cổng chưa từng kiểm hình học — nó lọc chân trời. Một video trượt vì 3 pixel.’ — 2026-08-25

⚠️ 그리고 뻔한 수정은 수정이 아니다. 0.70으로 풀면 167편 중 57편이, 원본 프레임까지 넣으면 73편이 되살아난다. 그런데 되살아난 것 중 복도(corridor)를 그려 본 12편에서, 복도가 있던 6편 중 맞은 것은 2편이고, 73편 중 4편은 애초에 노면 표시가 없었다. 게이트를 풀면 통과율이 오르고 정확도는 따라오지 않는다.

⚠️ And the obvious fix is not a fix. Relaxing to 0.70 recovers 57 of 167 clips; also bypassing the crop recovers 73. But of 12 rescued clips whose corridors were rendered, only 2 of the 6 that had a corridor were correct, and 4 of the 73 had no painted lane markings at all. Loosening the gate raises the pass rate and accuracy does not follow.

⚠️ Cách sửa hiển nhiên lại không phải sửa. Nới 0.70 cứu 57/167 video; bỏ crop cứu 73. Nhưng 12 video cứu được có dựng hành lang, trong 6 video có hành lang chỉ 2 đúng; 4/73 hoàn toàn không có vạch sơn. Nới cổng tăng tỷ lệ qua, độ đúng không đi theo.

⭐ 찾아야 할 모양: 같은 함수 안에서 서로를 부정하는 두 상수, 그리고 한 번도 그 경계에 닿지 않은 분포. 후자가 결정적이다 — 9,464개 중 0개라면 그 검사는 검사가 아니라 상수다. visus에서도 같은 질문을 던질 것: 이 게이트는 실제로 거절한 적이 있는가, 아니면 항상 같은 쪽만 보고 있었는가.

⭐ The shape to look for: two constants inside one function that contradict each other, and a distribution that never once reaches the boundary. The second is decisive — zero of 9,464 means the check is not a check but a constant. Ask the same of visus's own gates: has this one ever rejected anything, or has it only ever been looking at one side?

⭐ Hình dạng cần tìm: hai hằng số trong một hàm mâu thuẫn nhau, phân phối không bao giờ chạm biên. Điều sau quyết định — 0/9,464 nghĩa là không phải kiểm tra mà là hằng số. Hỏi với cổng visus: đã từng loại gì chưa, hay chỉ luôn nhìn một phía?

⭐⭐ 오차막대만 줄고 교차검증은 그대로일 때 — 이름 붙은 실패 신호⭐⭐ When the error bar narrows and the cross-check does not — a named failure signature⭐⭐ Thanh sai số hẹp lại nhưng kiểm tra chéo không tốt hơn — dấu hiệu lỗi có tên

이것이 batch C에서 가장 옮길 만한 방법론이다. 2026-08-27에 카메라 높이 H의 추정을 「강체화(rigidify)」로 다듬은 결과가 이렇다.

This is the single most transferable method in the batch. On 2026-08-27 a "rigidify" step was applied to the camera-height estimate H, and the result reads like this.

Đây là phương pháp dễ chuyển dùng nhất trong lô. Ngày 2026-08-27, áp bước ‘rigidify’ cho ước lượng độ cao camera H, kết quả như sau.

전beforetrước후aftersau
H 상대오차 중앙값median relative error of Hsai số tương đối trung vị của H8.0%4.8% (17편 중 15편에서 σ 감소)(σ fell on 15 of 17 clips)(σ giảm ở 15/17 video)
독립한 두 H 경로의 |비율−1||ratio−1| between two independent paths to H|tỷ lệ−1| giữa hai đường độc lập tới H0.15010.1629 (8편 중 5편 개선)(5 of 8 improved)(5/8 cải thiện)

「σ는 40% 줄었는데, 독립한 두 경로는 더 잘 맞지 않는다. 이것이 D96이 피하려고 만든 바로 그 실패 신호다 — 정확도를 올리지 않고 오차막대만 좁히는 것은 『확신에 찬 오답』을 만드는 것이다. 그리고 원인이 보인다. width_slope는 σ의 일부를 프레임 간 산포에서 얻는다. 강체화하면 모든 프레임이 같아지므로 그 항이 0으로 꺼진다 — σ의 개선은 정보가 아니라 부기(簿記)다. 그 산포가 곧 불확실성이었다.」

"σ drops 40%, but the two independent paths don't agree better. That is the exact failure signature D96 was built to avoid: narrowing the error bar without improving accuracy is producing a confidently wrong answer. And the mechanism is visible: width_slope derives part of its σ from frame-to-frame spread. Rigidify makes every frame identical, so that term collapses to zero — the σ gain is partly bookkeeping, not information. The spread was the uncertainty."

‘σ giảm 40%, nhưng hai đường độc lập không đồng thuận hơn. Đây chính xác là dấu hiệu lỗi D96 muốn tránh: thu hẹp thanh sai số mà không tăng độ đúng tạo câu trả lời sai nhưng rất tự tin. Cơ chế lộ rõ: width_slope lấy một phần σ từ độ phân tán giữa các khung. Rigidify làm mọi khung giống nhau, thành phần đó về 0 — phần tăng σ là sổ sách, không phải thông tin. Độ phân tán chính là bất định.’

같은 규율이 지평선 추정 둘을 합칠 때도 적용됐다. 역분산 가중은 독립을 가정하는데, 그 두 추정은 같은 UFLDv2 차선점에서 나온다 — 비슷한 σ를 가진 상관된 두 값에 그것을 적용하면 실재하지 않는 σ/√2의 정밀도가 만들어진다. 확인 결과 σ는 15편 중 0편에서 줄었다(중앙값 16.8 → 19.9 px). 반면 지평선을 맞춰 주는 것은 H의 계통오차를 절반으로 줄였고(176편에서 1.057 → 1.030), 대신 지평선을 정말 모르는 10편을 버렸다. 그리고 1에 가까워진 클립은 176편 중 99편(56%)뿐이다 — 치우침을 없앤 것이지 잡음을 없앤 것이 아니다.

The same discipline was applied to fusing two horizon estimates. Inverse-variance weighting assumes independence, and both estimates come from the same UFLDv2 lane points; applying it to two correlated values of similar σ manufactures a σ/√2 precision that is not real. Verified: σ shrank on 0 of 15 clips (median 16.8 → 19.9 px). Reconciling the horizon, by contrast, halved the systematic bias in H (1.057 → 1.030 over 176 clips) at the cost of dropping 10 clips whose horizon was genuinely unknown — and only 99 of 176 (56%) moved closer to 1: it removed bias, not noise.

Kỷ luật tương tự áp dụng khi gộp hai ước lượng chân trời. Trọng số nghịch phương sai giả định độc lập, nhưng cả hai ước lượng đến từ cùng điểm làn UFLDv2; áp vào hai giá trị tương quan có σ tương tự tạo độ chính xác σ/√2 không thật. Đã xác minh: σ giảm ở 0/15 video (trung vị 16.8 → 19.9 px). Ngược lại, hòa giải chân trời giảm một nửa sai lệch hệ thống H (1.057 → 1.030 trên 176 video), đổi lại loại 10 video có chân trời thật sự không biết — chỉ 99/176 (56%) tiến gần 1: loại sai lệch, không loại nhiễu.

⭐ visus에서 바로 쓸 수 있는 검사the check, as it applies to visuskiểm tra áp dụng cho visus

visus는 화면 곳곳에 신뢰도를 적는다. 신뢰도가 좋아졌다고 말하기 전에 한 가지만 물으면 된다 — 독립한 교차검증도 같이 좋아졌는가, 아니면 σ만 좋아졌는가. σ만 좋아졌다면 그 개선분이 어느 항에서 왔는지를 보라. 산포에서 온 항이 꺼진 것이라면, 그것은 측정이 아니라 불확실성을 지운 것이다. 가장 성공처럼 보이는 실패라서 이 검사가 싸고 중요하다.

visus reports confidence in many places. Before calling a confidence improved, ask one question: did an independent cross-check improve too, or only σ? If only σ, find which term the gain came from. If a spread-derived term was switched off, nothing was measured — the uncertainty was erased. The check is cheap and it matters because this is the failure that looks most like success.

visus báo độ tin cậy ở nhiều chỗ. Trước khi nói độ tin cậy tăng, hỏi một câu: kiểm tra chéo độc lập cũng tốt hơn, hay chỉ σ? Chỉ σ thì tìm thành phần tạo mức tăng. Nếu tắt thành phần từ độ phân tán, không phép đo nào xảy ra — đã xóa bất định. Kiểm tra rẻ, đáng làm vì đây là lỗi trông giống thành công nhất.

⭐ 「세 방법이 지평선에 합의한다」는 방향에 대해서만 참이다⭐ "Three methods agree on the horizon" is true for orientation and false for scale⭐ ‘Ba phương pháp đồng thuận về chân trời’ đúng với hướng, sai với tỷ lệ mét

2026-09-10의 자기 정정이다. 구속 조건은 높이 사전분포가 아니라 지평선이다 — 높이는 지평선 아래 거리에 비례하므로, 세 경로가 27픽셀 어긋나면 높이가 22% 흔들린다. 어떤 클립에서는 같은 픽셀에서 2.50 m와 1.45 m가 나왔다.

A self-correction from 2026-09-10. The binding constraint is the horizon, not the height prior: height is proportional to distance below the horizon, so 27 px of disagreement between three horizon routes swings the height by 22%. And where the routes disagree by more than that, one clip reads 2.50 m against 1.45 m from the same pixels.

Tự sửa ngày 2026-09-10. Ràng buộc là chân trời, không phải giả định độ cao: độ cao tỷ lệ với khoảng cách phía dưới chân trời, nên 27 px bất đồng giữa ba đường chân trời làm độ cao đổi 22%. Khi bất đồng lớn hơn, một video đọc 2.50 m so với 1.45 m từ cùng pixel.

「이틀 전에 세 방법이 20픽셀 안에서 일치한다는 이유로 피치와 롤이 견고하다고 말했다. 그것은 방위에 대해서는 맞고 척도에 대해서는 틀렸다. 그때 그렇게 말했어야 했다.」

"I called pitch and roll solid two days ago because three methods agreed within about 20 px. That was right for orientation and wrong for scale, and I should have said so then."

‘Hai ngày trước tôi gọi pitch và roll chắc chắn vì ba phương pháp lệch khoảng 20 px. Đúng với hướng, sai với tỷ lệ mét, đáng lẽ phải nói rõ.’

⭐ 살아남는 쪽도 적어 둔다: 지평선 오차는 모든 자(ruler)가 공유하므로, 두 자의 절대값이 둘 다 틀려도 비율은 의미를 유지한다. 이 문서가 다른 곳에 적은 「±11.3 px → 40 m에서 14.9 m」가 거리 쪽 예산이라면, 이것은 같은 오차가 카메라 높이를, 따라서 모든 횡방향 미터를 함께 무너뜨린다는 나머지 절반이다.

⭐ What survives is worth recording too: because the horizon error is shared by every ruler, the ratio between two rulers stays meaningful even when both absolute numbers are wrong. If the ±11.3 px → 14.9 m at 40 m this document records elsewhere is the longitudinal budget, this is the other half: the same error destroys camera height, and with it every lateral metre.

⭐ Điều còn đúng cũng cần ghi: vì sai số chân trời dùng chung cho mọi thước đo, tỷ lệ giữa hai thước vẫn có ý nghĩa dù hai số tuyệt đối đều sai. Nếu ±11.3 px → 14.9 m ở 40 m trong tài liệu là ngân sách dọc, thì đây là nửa kia: cùng sai số phá hỏng độ cao camera, kéo theo mọi mét ngang.

⭐ 합의는 신호다 — 앙상블의 상한, 그리고, 기권을 결정하는 규칙⭐ Agreement is a signal — the ensemble ceiling, and a rule for abstaining⭐ Đồng thuận là tín hiệu — trần tổ hợp và quy tắc không kết luận

상대차 고르기를 11가지 방법으로 돌려서 나온 두 구조적 숫자다(98편, 2026-09-10 07:43). 한 시간 뒤 같은 98편을 13개 방법으로 다시 돌렸고, 그 결과가 아래 단계표다 — 상한(80/98)과 최고 단일 방법(69)은 두 번 모두 같다.

Two structural numbers from running counterpart selection eleven ways over 98 clips (2026-09-10, 07:43). An hour later the same 98 were run again with thirteen methods, which is the ladder below — the ceiling (80/98) and the best single method (69) come out the same both times.

Hai con số cấu trúc từ việc chạy chọn xe đối phương 11 cách trên 98 video (2026-09-10, 07:43). Một giờ sau chạy lại cùng 98 video bằng 13 phương pháp, tạo chuỗi dưới — trần (80/98) và phương pháp đơn tốt nhất (69) giống nhau cả hai lần.

적어도 한 방법이 맞은 클립at least one method is rightít nhất một phương pháp đúng80 / 98 — 어떤 앙상블도 이 위로 갈 수 없다— no ensemble can beat this— không tổ hợp nào vượt được
단순 다수결plain majority votebỏ phiếu đa số đơn giản72 / 98
모든 방법이 일치한 클립clips where every method agreesvideo mà mọi phương pháp đồng thuận25편 중 23편이 정답23/25 video đúng — 23 of 25 correct— đúng 23/25
후보 수 중앙값median candidate countsố ứng viên trung vị클립당 차량 11대 — top-1 69는 우연보다 한참 위다11 vehicles per clip, so top-1 at 69 is far above chance11 xe mỗi video, nên top-1 ở 69 cao hơn nhiều so với ngẫu nhiên

⭐ visus가 쓸 수 있는 형태로 말하면: 「11개 방법이 모두 같은 답을 냈다」는 92%(23/25)의 정답률을 가진 신호이고(13개 방법에서는 17/17로 더 높다), 반대로 갈리면 그 자리가 판단 불가를 쓸 자리다. 정확도를 올리는 대신 언제 틀릴지를 아는 쪽으로 쓰는 것이 이 수치의 올바른 용법이다.

⭐ Put in the form visus can use: "all eleven methods agreed" is a signal with a 92% hit rate (23 of 25) — and with thirteen methods it is 17 of 17, and disagreement is where 판단 불가 belongs. The right use of these numbers is not a higher score but knowing when the answer will be wrong.

⭐ Đưa về dạng visus dùng được: ‘cả 11 phương pháp đồng thuận’ là tín hiệu đúng 92% (23/25) — 13 phương pháp thì 17/17; bất đồng là nơi đặt không thể phán định. Dùng số này không phải để tăng điểm mà để biết lúc nào câu trả lời sẽ sai.

⚠️ 초점거리는 네 모델을 합쳐도 복원되지 않는다 — 그리고 「안정적」이 비어 있는 경우⚠️ Focal length is not recoverable from four models — and when "stable" means empty⚠️ Không suy được tiêu cự từ bốn mô hình — và ‘ổn định’ đôi khi nghĩa là trống

§9.10이 GeoCalib의 자기신고 불확실성 39%를 적는다. 그 다음에 시도된 것이 네 추정기의 융합이고, 결과는 깨끗하게 실패다 — 「f는 복원 가능한가? 아니다, ±25% 아래로는.」 소스 내부의 잡음은 작고, 어긋남은 소스별 계통 치우침이다. 네 소스가 융합값의 ±15% 안에 모두 든 클립은 12편 중 0편이고, 셋 중 둘 이상이 든 것이 8편이다.

§9.10 records GeoCalib's 39% self-reported uncertainty. What followed was a fusion of four estimators, and it fails cleanly: "Is f recoverable? No, not beyond ±25%." Within-source noise is small; the disagreement is systematic bias per source. All four within ±15% of the fused value: 0 of 12 clips; two or more of three within: 8 of 12.

§9.10 ghi GeoCalib tự báo 39% bất định. Sau đó là gộp bốn bộ ước lượng, thất bại rõ ràng: ‘Có suy được f không? Không, không quá ±25%.’ Nhiễu trong nguồn nhỏ; bất đồng là sai lệch hệ thống riêng của từng nguồn. Cả bốn nằm trong ±15% giá trị gộp: 0/12 video; ít nhất hai trong ba nằm trong: 8/12.

🚨 그리고 여기 함정이 하나 있다. DA3의 카메라 헤드는 내용과 무관하게 12편 중 8편에서 약 2050 px를 돌려준다 — 측정이 아니라 사전값이므로 그 「안정성」은 비어 있다. 가장 흔들리지 않는 추정기가 가장 믿을 만한 추정기인 것은 아니다. 일관성으로 고르면 MoGe-2가 남지만, 그것이 옳다는 외부 증거는 없다. 반대로 지평선은 복원된다(|Δy_h| 중앙값 18 px, 12편 중 8편이 30 px 이하) — 이 둘을 갈라 두는 것이 넘겨줄 결론이다.

🚨 And there is a trap in it. DA3's camera head returns about 2050 px on 8 of 12 clips regardless of content — a prior, not a measurement — so its "stability" is empty. The steadiest estimator is not the most trustworthy one. Picked by consistency, MoGe-2 is the survivor, with no external proof that it is right. The horizon, by contrast, is recoverable (median |Δy_h| 18 px, ≤30 px on 8 of 12) — and keeping those two apart is the conclusion to carry.

🚨 Có bẫy trong đó. Đầu camera DA3 trả khoảng 2050 px trên 8/12 video bất kể nội dung — giả định tiên nghiệm, không phải phép đo — nên ‘ổn định’ là trống. Ước lượng ổn định nhất không phải đáng tin nhất. Chọn theo nhất quán, MoGe-2 sống sót, nhưng không có bằng chứng ngoài cho thấy đúng. Ngược lại, chân trời suy được (trung vị |Δy_h| 18 px, ≤30 px ở 8/12) — giữ hai thứ riêng là kết luận cần mang theo.

⭐⭐ 화면에 뜨는 정확도는 조건부다 — 46.6%는 62.4%와 34.1%의 혼합이다⭐⭐ The accuracy that reaches the screen is conditional — 46.6% is a mixture of 62.4% and 34.1%⭐⭐ Độ chính xác tới màn hình là có điều kiện — 46.6% là trộn của 62.4% và 34.1%

이 문서는 상대차 선택을 dev 46.6% · held-out 53.1%라는 납작한 수치로 적는다. 2026-09-14의 계측은 그것이 두 모집단의 혼합임을 보여 준다.

This document carries counterpart selection as a flat figure — 46.6% dev, 53.1% held out. The measurement of 2026-09-14 shows it is a mixture of two populations.

Tài liệu ghi chọn xe đối phương như một con số phẳng — 46.6% dev, 53.1% giữ riêng. Phép đo 2026-09-14 cho thấy đó là hỗn hợp hai quần thể.

게이트 통과율gate pass ratetỷ lệ qua cổng109 / 247 = 44.1% (CI 38–50)
게이트 통과 시 top-1top-1 | gate passestop-1 | qua cổng68 / 109 = 62.4% (CI 53–71) — 카드에 선택이 표시되는 경우the case where the pick is shown on the cardtrường hợp lựa chọn được hiển thị trên thẻ
게이트 실패 시 top-1top-1 | gate failstop-1 | trượt cổng47 / 138 = 34.1% (CI 27–42)
전체pooledgộp115 / 247 = 46.6%

🚨 28포인트 차이고, 제품이 선택을 보여 주는 것은 게이트가 통과하는 44%뿐이다. 그러므로 46.6%는 보여 준 경우도, 감춘 경우도 묘사하지 않는다 — 어느 쪽도 아닌 혼합값이다. 게이트가 실패하면 화면은 후보를 이름만 대고 34.1%라는 숫자와 함께 사정사에게 영상에서 고르라고 요청한다. ⚠️ 그리고 그 패널은 2026-09-14까지 낡은 테스트셋의 62.8%를 하드코딩하고 있었다 — 어떤 채점 행에도 묶이지 않은 숫자가 화면에 떠 있었다.

🚨 A 28-point spread, and the product only shows the pick on the 44% where the gate passes. So 46.6% describes neither the shown case nor the hidden one. When the gate fails, the panel names a candidate, carries the 34.1% figure, and asks the adjuster to choose from the video. ⚠️ And until 2026-09-14 that panel had a hardcoded 62.8% from a superseded test set — a number on screen that was tied to no scoring row at all.

🚨 Chênh 28 điểm; sản phẩm chỉ hiển thị lựa chọn ở 44% trường hợp qua cổng. Vì vậy 46.6% không mô tả nhóm hiển thị lẫn nhóm ẩn. Trượt cổng thì panel nêu ứng viên, mang 34.1% và yêu cầu giám định viên chọn từ video. ⚠️ Trước 2026-09-14, panel còn hardcode 62.8% từ tập lỗi thời — một con số trên màn hình không gắn hàng chấm nào.

⭐ 그리고 그 선택이 틀리면 하류의 모든 CV 사실이 우연으로 내려간다and when the pick is wrong, every downstream CV fact falls to chancekhi lựa chọn sai, mọi dữ kiện CV phía sau rơi về ngẫu nhiên

이틀 뒤 같은 트랙이 motion.approach_side를 쟀다 — 라벨러의 상자 방향과 143건 중 120건 = 83.9% 일치(CI 77–89). 그런데 쪼개면 이렇다: 우리 상대차 선택이 라벨된 차와 같을 때 97.9%(93–99), 다를 때 49%. 좌·우 두 갈래 질문에서 49%는 우연이다.

Two days later the same track measured motion.approach_side: it agrees with the labeller's box side on 120 of 143 = 83.9% (CI 77–89). Split, it reads: 97.9% (93–99) on clips where our counterpart pick is the labelled car, and 49% where it is not. On a two-way left/right question, 49% is chance.

Hai ngày sau, track tương tự đo motion.approach_side: khớp phía hộp của người gán nhãn ở 120/143 = 83.9% (CI 77–89). Chia ra: 97.9% (93–99) khi lựa chọn xe đối phương đúng xe đã gán, 49% khi sai. Câu trái/phải hai lựa chọn, 49% là ngẫu nhiên.

⭐ 저자의 결론이 그대로 설계 지침이다: 「이제 실험 세 개째다 — 기하는 읽히고, 병목은 어느 차를 추적했는가다. 방향은 맞는 차에서 97.9%, 아닌 차에서 49%였고, 관계(relation)도 같은 분리를 보인다. 그래서 더 나은 투자는 상대차 선택 자체라고 전달했다 — 하류의 모든 CV 사실이 그것을 물려받는다.」

⭐ The author's conclusion is itself the design instruction: "the pattern is now three experiments deep: the geometry is readable, but which car we tracked is the bottleneck. Side was 97.9% with the right car and 49% without; relation shows the same split. So I said the better investment is the counterpart pick itself — every CV fact downstream inherits it."

⭐ Kết luận của tác giả chính là chỉ dẫn thiết kế: ‘mẫu hình nay đã sâu ba thí nghiệm: hình học đọc được, nhưng xe nào đang theo dõi là nút thắt. Phía 97.9% khi đúng xe, 49% khi sai; quan hệ cũng vậy. Vì thế đầu tư tốt hơn là chọn xe đối phương — mọi dữ kiện CV phía sau kế thừa nó.’

🚨 그리고 바로 그 상대차 선택이 위 표의 46.6%다. 2026-09까지 직접 채점된 적이 없던 그 양의 비용이 여기서 숫자로 나오고, 직접 측정치는 그 뒤 §8.3에서 나온다 — 모든 하류 사실에 곱해지는 계수다. 이 절의 98편 80/98 상한과 함께 읽을 것.

🚨 And that counterpart pick is the 46.6% in the table above. This is what the quantity cost while it was still unmeasured — it was scored directly later, in §8.3 — a coefficient multiplying every downstream fact. Read it with the 80 of 98 ceiling above in this section.

🚨 Và lựa chọn xe đối phương đó chính là 46.6% ở bảng trên. Đây là chi phí khi còn chưa đo — sau đó chấm trực tiếp tại §8.3 — một hệ số nhân vào mọi dữ kiện phía sau. Đọc cùng trần 80/98 ở trên.

⭐ 그리고 약한 마진 경고는 진짜 신호다 — 라우팅에 바로 쓸 수 있다and the weak-margin warning is a genuine signal — usable for routing as it standscảnh báo biên yếu là tín hiệu thật — dùng định tuyến được ngay

E-V-034(2026-10-14), CV만으로 상대차를 고른 부분 채점이다.

E-V-034 (2026-10-14), partial scoring of the CV-only counterpart pick.

E-V-034 (2026-10-14), chấm một phần bộ chọn xe đối phương chỉ dùng CV.

오늘의 단일 선택today's single picklựa chọn đơn hiện tại40 / 62 (65%)
상위 3 후보 안right car among the top 3đúng xe trong top 350 / 62 (81%)
어떤 트랙이든 맞는 차 위에 있음 — 상한any track on the right car — the ceilingbất kỳ track nào trên đúng xe — trần56 / 62 (90%)
마진이 분명할 때(≥3배)when the margin is clear (≥3×)khi biên rõ (≥3×)34 / 38 (89%)
시스템이 이미 경고할 때(<3배)when the system already warns (<3×)khi hệ thống đã cảnh báo (<3×)9 / 24 (38%)

⭐ 이것은 이 문서가 다른 곳에 적은 「판정 신뢰도가 뒤집혀 있다」의 정반대다 — 경고가 실제로 틀릴 때를 가리킨다. 클립의 3분의 1에서 마진이 약하고, 거기서는 단일 선택이 맞는 것보다 틀리는 일이 더 많다. 그 자리가 후보를 보여 줄 자리이자 판단 불가로 돌릴 자리다. ⚠️ 인용 조건: 200편 표본 중 62편까지만 채점된 부분 결과이고, 나머지 110편은 GPU 접근 권한에서 막혀 멈춰 있다(에이전트는 차단을 우회하려 하지 않았다). 대표 수치로는 완료된 E-V-034의 값을 쓸 것.

⭐ This is the opposite of the inverted verdict confidence recorded elsewhere in this document — the warning really does point at the cases that are wrong. On a third of clips the margin is weak, and there the single pick is wrong more often than right. That is exactly where candidates belong, and where 판단 불가 belongs. ⚠️ Conditions on quoting it: these are partial results, 62 of a 200-clip sample; the remaining 110 are blocked on GPU access (the agent did not try to work around the block). Use the completed E-V-034 figures for anything headline.

⭐ Ngược với độ tin cậy kết luận đảo ở nơi khác — cảnh báo thực sự chỉ vào ca sai. Một phần ba video có biên yếu; ở đó lựa chọn đơn sai nhiều hơn đúng. Đúng nơi cần đưa ứng viên và không thể phán định. ⚠️ Điều kiện khi trích: đây là kết quả một phần, 62/200 mẫu; 110 còn lại bị chặn quyền GPU (agent không tìm cách né). Dùng số E-V-034 đã hoàn tất cho mọi con số nổi bật.

같은 실행의 두 줄이 더 있다 — 「상대차가 보이지 않음」은 ams-1080으로는 측정할 수 없다(라벨러가 모든 클립에 상대차를 그렸다). 그리고 그 자동 힌트는 5편 중 1편꼴로 잘못 발동했다(작은 차, 또는 충돌 시점에 보닛 선 아래의 차) — 그래서 답으로는 남기고 자동 힌트는 껐다. 이어붙이기(stitching)는 top-1과 top-3에서 각각 1건씩 더 나빠져 꺼둔 채로 남았다.

Two more lines from the same run: "the other car is not visible" cannot be measured on ams-1080 at all, because the labellers drew an other car on every clip; and its automatic hint fired wrongly on about one clip in five (small cars, or cars below the bonnet line at impact), so it was kept as an answer and dropped as an automatic hint. Stitching came out one worse on top-1 and one on top-3, and stays off.

Hai dòng khác cùng lần chạy: ‘xe kia không nhìn thấy’ không thể đo trên ams-1080 vì người gán vẽ xe kia trên mọi video; gợi ý tự động kích hoạt sai khoảng 1/5 video (xe nhỏ hoặc dưới đường ca-pô lúc va chạm), nên giữ làm câu trả lời, bỏ làm gợi ý tự động. Stitching giảm một điểm top-1 và một điểm top-3, nên tắt.

⭐⭐ 합의 신호에는 사다리가 있다 — 그리고 접촉 시각에서는 재현까지 됐다⭐⭐ The agreement signal has a ladder — and on contact time it replicated⭐⭐ Tín hiệu đồng thuận có bậc — và thời điểm tiếp xúc tái lập

같은 98편을 13개 방법으로 돌린 뒤(08:00), 합의의 정도를 단계로 나눈 표다(정답 접촉 시각). 위 11개 방법 표의 「전부 일치 25편 중 23편」과 아래의 「13개 전부 일치 17편 중 17편」은 방법 수가 다르면 만장일치의 뜻도 달라지기 때문이다 — 방법을 늘릴수록 만장일치는 드물어지고 더 정확해진다.

The same 98 clips run with thirteen methods (08:00), with the degree of agreement graded into a ladder (true contact time). The eleven-method table above says 23 of 25 unanimous clips are right; the thirteen-method ladder says 17 of 17 — because what "unanimous" means changes with the number of methods: add methods and unanimity gets rarer and more accurate.

Chạy cùng 98 video bằng 13 phương pháp (08:00), chấm mức đồng thuận thành bậc (thời điểm tiếp xúc thật). Bảng 11 phương pháp nói 23/25 video nhất trí là đúng; chuỗi 13 phương pháp nói 17/17 — vì ‘nhất trí’ đổi nghĩa theo số phương pháp: thêm phương pháp thì nhất trí hiếm hơn và chính xác hơn.

합의 수준agreement levelmức đồng thuận클립clipsvideo정답correctđúng
13개 방법 전부가 같은 차all 13 pick the same vehiclecả 13 chọn cùng xe1717 · 100%
13개 중 12개12 of 1312/133934 · 87%
13개 중 10개10 of 1310/136555 · 85%
13개 중 8개8 of 138/138367 · 81%
가장 좋은 단일 방법best single method alonephương pháp đơn tốt nhất9869 · 70%
적어도 하나가 맞음 — 상한at least one right — the ceilingít nhất một phương pháp đúng — trần9880 · 82%

⚠️ 그리고 만장일치 클립이 쉬운 클립인 것도 아니다 — 후보 차량 수 중앙값이 9대(나머지는 11대)이고, 만장일치 클립 20편 중 16편이 후보 3대 초과다(11개 방법 기준). 「쉬워서 합의한 것」이라는 반박이 숫자로 막힌다.

⚠️ And the unanimous clips are not the easy ones — their median candidate count is 9 vehicles against 11 for the rest, and 16 of 20 of them have more than three candidates (on the eleven-method run). The "they agreed because it was easy" objection is closed by the numbers.

⚠️ Video nhất trí không phải video dễ — trung vị ứng viên 9 xe, so với 11 ở phần còn lại; 16/20 có hơn ba ứng viên (lần chạy 11 phương pháp). Số liệu bác phản đối ‘đồng thuận vì dễ’.

⭐⭐ 접촉 시각에서는 같은 모양이 나오고, 보류셋에서 재현된다 — 이 말뭉치에서 재현된 것은 손에 꼽는다.

⭐⭐ Contact time shows the same shape, and it replicates on the held-out set — one of very few results in this corpus that does.

⭐⭐ Thời điểm tiếp xúc có cùng hình dạng và tái lập trên tập giữ riêng — một trong rất ít kết quả làm được điều đó.

결정론적 네 방법이 0.3초 안에 모일 때when the four deterministic methods land within 0.3 skhi bốn phương pháp tất định nằm trong 0.3 s흩어질 때when they disagreekhi chúng bất đồng상한 / 최고 단일 방법ceiling / best single methodtrần / phương pháp đơn tốt nhất
score-100score-100điểm-10031 / 3430 / 6682 / 100 · 61
보류셋(holdout-89)held out (holdout-89)tập giữ riêng (holdout-89)25 / 3028 / 5970 / 89 · 53

⭐ visus에 그대로 쓸 수 있는 형태: 투표는 top-1을 크게 올리지 못한다(상대차에서 69 → 71, 13개 방법 기준. 11개 방법의 단순 다수결은 72/98이다). 투표가 사 주는 것은 등급이 매겨진 신뢰도다 — 정밀도가 높은 큰 조각을 떼어 내고, 나머지를 사람이나 두 번째 의견으로 보내는 것. 접촉 시각은 visus가 가장 많이 기대는 사실이고(§4.0), 그 사실에 대해 기권 규칙을 숫자로 세울 수 있다는 것이 이 결과의 값이다.

⭐ In the form visus can use: a vote does not lift top-1 much (69 → 71 on the counterpart with thirteen methods; a plain majority of the eleven gets 72 of 98). What it buys is a graded confidence — carve out a large high-precision slice and route the rest to a human or a second opinion. Contact time is the fact visus leans on hardest (§4.0), and the value here is that an abstention rule for it can be set with numbers.

⭐ Dạng visus dùng được: bỏ phiếu không tăng top-1 nhiều (69 → 71 cho xe đối phương với 13 phương pháp; đa số đơn của 11 phương pháp đạt 72/98). Giá trị là độ tin cậy theo bậc — tách lát cắt chính xác cao rồi định tuyến phần còn lại cho người hoặc ý kiến thứ hai. Thời điểm tiếp xúc là dữ kiện visus khó nhất (§4.0), lợi ích là đặt được quy tắc không kết luận bằng số.

9.7arXiv 색인 — 많이 인용된 순 · arXiv index, by mentionsMục lục arXiv, xếp theo số lần nhắc

1,384 distinct arXiv ids appear across the transcripts — counted from the same extraction that produced the table below, and of 120 sampled at random all 120 resolve to real papers. The twenty most-cited are below, with the ids exactly as the transcripts give them — and one logged correction worth carrying: 2210.02493 is Depth Is All You Need for Monocular 3D Detection, not md4all. Check titles, not ids.

Có 1,384 ID arXiv riêng biệt trong bản ghi — đếm từ cùng lần trích xuất tạo bảng; trong 120 mẫu ngẫu nhiên cả 120 đều trỏ tới bài thật. Hai mươi bài được trích nhiều nhất bên dưới, ID giữ nguyên — và một sửa sai cần nhớ: 2210.02493 là Depth Is All You Need for Monocular 3D Detection, không phải md4all. Kiểm tra tiêu đề, không chỉ ID.

고유 arXiv 번호 1,384개가 기록에 있다 — 아래 표를 만든 것과 같은 추출에서 센 수고, 무작위 120개를 조회했는데 120개 전부 실재하는 논문이었다. 아래는 상위 20편이고, 번호는 세션 기록에 적힌 그대로다.

id무엇whatnội dung언급mentionssố lần nhắc
2410.02073Depth Pro (Apple)176
2404.15506Metric3D v2 (TPAMI 2024)176
2403.18913UniDepth (CVPR 2024)145
2502.20110UniDepth V2131
2406.09414Depth Anything V2124
2104.14812SMIYC (Segment Me If You Can)87
2504.08540차선 데이터셋 리뷰 (2025-04)a review of lane datasets (2025-04)tổng quan bộ dữ liệu làn (2025-04)84
2307.10984Metric3D (ICCV 2023)70
2509.13181Road Obstacle Video Segmentation (GCPR 2025) — 도메인 이동 표Road Obstacle Video Segmentation (GCPR 2025) — the domain-shift tableRoad Obstacle Video Segmentation (GCPR 2025) — bảng lệch miền69
2409.02508TLD 후미등 데이터셋TLD, a vehicle tail-light datasetTLD, bộ dữ liệu đèn hậu xe68
2004.05560DNet (IROS 2020) — 접지점 스케일 복원DNet (IROS 2020) — ground-point scale recoveryDNet (IROS 2020) — khôi phục tỷ lệ điểm mặt đất67
2308.09711md4all (ICCV 2023)66
1609.04653Lost and Found (IROS 2016)63
2208.04726DPVO (NeurIPS 2023)60
1805.04687BDD100K59
2305.08366CLRerNet (WACV 2024)57
2302.12288ZoeDepth54
1904.03215Fishyscapes49
1903.00912호모그래피 스케일 복원 (T-ITS)homography scale recovery (T-ITS)khôi phục tỷ lệ bằng homography (T-ITS)48
2211.00945CarDD (IEEE T-ITS)45

그 밖에 기록에서 확인된 주요 인용: 2511.16719 SAM 3 · 2408.00714 SAM 2 · 2503.11651 VGGT · 2308.04583 LATR · 2203.11089 PersFormer · 2304.10440 OpenLane-V2 · 2208.11434 YOLOPv2 · 2105.15203 SegFormer · 2211.06220 OneFormer · 2303.05499 Grounding DINO · 2401.14159 Grounded SAM · 1907.01341 MiDaS · 2011.00359 TartanVO · 2408.01654 DPV-SLAM · 1710.06288 VPGNet · 2311.05332 On the Road with GPT-4V · 2503.03848 Nexar Collision Dataset · 2004.03044 DoTA.

Other significant citations confirmed in the record: 2511.16719 SAM 3 · 2408.00714 SAM 2 · 2503.11651 VGGT · 2308.04583 LATR · 2203.11089 PersFormer · 2304.10440 OpenLane-V2 · 2208.11434 YOLOPv2 · 2105.15203 SegFormer · 2211.06220 OneFormer · 2303.05499 Grounding DINO · 2401.14159 Grounded SAM · 1907.01341 MiDaS · 2011.00359 TartanVO · 2408.01654 DPV-SLAM · 1710.06288 VPGNet · 2311.05332 On the Road with GPT-4V · 2503.03848 Nexar Collision Dataset · 2004.03044 DoTA.

Các trích dẫn quan trọng khác đã xác nhận: 2511.16719 SAM 3 · 2408.00714 SAM 2 · 2503.11651 VGGT · 2308.04583 LATR · 2203.11089 PersFormer · 2304.10440 OpenLane-V2 · 2208.11434 YOLOPv2 · 2105.15203 SegFormer · 2211.06220 OneFormer · 2303.05499 Grounding DINO · 2401.14159 Grounded SAM · 1907.01341 MiDaS · 2011.00359 TartanVO · 2408.01654 DPV-SLAM · 1710.06288 VPGNet · 2311.05332 On the Road with GPT-4V · 2503.03848 Nexar Collision Dataset · 2004.03044 DoTA.

⚠️ 기록에 남은 정정 하나: 2210.02493는 Depth Is All You Need for Monocular 3D Detection이고 md4all이 아니다 — 한 번 잘못 인용됐다가 바로잡혔다. 번호를 그대로 믿지 말고 제목을 확인할 것.

One logged correction: 2210.02493 is Depth Is All You Need for Monocular 3D Detection, not md4all. Check titles, not just ids.

Một sửa sai trong bản ghi: 2210.02493 là Depth Is All You Need for Monocular 3D Detection, không phải md4all. Kiểm tra tiêu đề, không chỉ ID.

9.8CV 레포 넷 — 무엇이 어디서 돌았나 · The four CV repositories, and what ran whereBốn kho CV, và thứ chạy ở đâu

8장은 판정 쪽 레포를 해부했다. 지각 쪽은 레포가 따로 넷이고, 그중 둘(hd-map · lane-detection)은 8장에 해부가 없다. 여기서 메운다 — lense는 이 작업들의 합류점이지 출발점이 아니다.

Chapter 8 dissects the decision-side repositories. The perception side has four of its own, and two of them — hd-map and lane-detection — have no dissection there. This fills that in. lense is where this work converged, not where it started.

Chương 8 mổ xẻ kho phía quyết định. Phía nhận thức có bốn kho riêng, trong đó hd-map và lane-detection chưa được mổ xẻ. Mục này bổ sung. lense là nơi hội tụ, không phải nơi bắt đầu.

레포repokho mã무엇이었나what it wasđã là gì규모 · 상태size and statequy mô và trạng thái
cv-processingCV 본진. 클립 하나 → 타임라인(무엇이 · 어느 차에 · 어느 차로에서 · 몇 초에, 접촉 시각을 모든 행에 표시). 단계는 ls → probe → splits → tracks → lanes → kinematics → timeline → viewer → export. 검출 RT-DETR, 추적 ByteTrack, 차선 UFLDv2/CULaneThe CV proper. One clip → a timeline: what happened, to which vehicle, in which lane, at what second, with contact time marked on every row. Detection RT-DETR, tracking ByteTrack, lanes UFLDv2/CULaneCV cốt lõi. Một video → một dòng thời gian: xảy ra gì, với xe nào, trong làn nào, ở giây nào, thời điểm tiếp xúc đánh dấu mỗi dòng. Phát hiện RT-DETR, theo dõi ByteTrack, làn UFLDv2/CULane6,236줄 · 11커밋 · 마지막 2026-09-09. 차선은 클립의 57%에서만 난다 — 그 수가 뒤의 모든 커버리지 상한이 된다6,236 lines, 11 commits, last 2026-09-09. Lanes resolve on only 57% of clips — that number becomes the ceiling on everything downstream6,236 dòng, 11 commit, cuối 2026-09-09. Làn chỉ suy được ở 57% video — con số này thành trần cho mọi bước phía sau
hd-mapHD 지도에 영상을 정합하려는 시도. 소실점 보정 → BEV에 도색 누적 → 영상만으로 자차 운동(VO) → 관측한 도색을 Routo HD 지도와 chamfer 정합 → 위치 추정. §9.9가 결과다An attempt to register the footage against an HD map. Vanishing-point calibration → paint accumulated into a BEV → ego motion from the pictures (VO) → chamfer matching of observed paint against the Routo map → localisation. §9.9 is the resultThử đăng ký video vào bản đồ HD. Hiệu chỉnh điểm tụ → tích lũy vạch thành BEV → chuyển động xe camera từ ảnh (VO) → khớp chamfer vạch quan sát với bản đồ Routo → định vị. Kết quả ở §9.95,600줄 / 42개 스크립트 · 문서 0개 · 2026-10-14 「Handover snapshot」 단일 커밋. 결과는 코드 옆 JSON에만 있다5,600 lines across 42 scripts, no documents at all, a single "Handover snapshot" commit of 2026-10-14. Its results survive only as JSON beside the code5,600 dòng trong 42 script, hoàn toàn không có tài liệu, chỉ một commit ‘Handover snapshot’ ngày 2026-10-14. Kết quả chỉ còn dưới dạng JSON cạnh mã nguồn
lane-detection차선 검출 단독 작업대 — lanes · borders · horizon · attrs(종류·색) · contact, 그리고 비교·오버레이·뷰어A standalone bench for lane work — lanes, borders, horizon, attrs (type and colour), contact, with compare, overlay and viewer toolingBộ thử độc lập cho công việc làn — lanes, borders, horizon, attrs (loại và màu), contact, cùng công cụ so sánh, lớp phủ và trình xem1,305줄 · 문서 0개 · 스냅샷 단일 커밋1,305 lines, no documents, one snapshot commit1,305 dòng, không tài liệu, một commit snapshot
lense합류점. 위 작업들이 하나의 파이프라인으로 모인 곳이고, visus가 오늘 벤더링해 돌리는 체인이 여기서 나왔다 — 해부는 §8.3Where it converged. The work above came together as one pipeline here, and the chain visus vendors and runs today came out of it — dissected in §8.3Nơi hội tụ. Công việc trên hợp thành một quy trình ở đây; chuỗi visus tích hợp và chạy hôm nay xuất phát từ đây — mổ xẻ tại §8.3⚠️ §9.9의 보정은 688편 라벨 말뭉치(cv-processing의 타임라인 집합)에서 쟀다 — lense의 골드셋 273편과는 다른 집합이다⚠️ the calibration in §9.9 was measured on the 688-clip labelled corpus (cv-processing’s timeline set) — a different set from lense’s 273-clip gold set⚠️ Hiệu chỉnh ở §9.9 đo trên bộ dữ liệu 688 video có nhãn (timeline của cv-processing) — khác tập chuẩn 273 video của lense

⚠️ hd-map과 lane-detection은 문서가 한 장도 없다. 둘 다 스냅샷 커밋 하나로 들어왔으므로 커밋 기록도 설명하지 않는다. 읽는 방법은 스크립트 상단 docstring뿐이고, 실제로 거기에 한 줄씩 적혀 있다.

⚠️ hd-map and lane-detection carry no documents at all, and both arrived as a single snapshot commit, so the history explains nothing either. The only way in is the docstring at the top of each script — and they do carry one.

⚠️ hd-map và lane-detection hoàn toàn không có tài liệu, cả hai đến dưới dạng một commit snapshot, nên lịch sử cũng không giải thích gì. Chỉ docstring đầu mỗi script là lối vào — và chúng có nội dung.

9.9hd-map 시도 — 그리고 미터는 어디서 나오는가 · The hd-map trials, and where metric scale comes fromCác thử nghiệm hd-map và nguồn gốc tỷ lệ mét

hd-map이 풀려던 것은 「이 차가 도로 위 어디에 있는가」다. 그것이 되면 진로변경·차로·중앙선이 전부 따라온다. 파이프라인은 소실점으로 보정(calibrate_vp.py) → 도색을 BEV에 누적(bev_lanes.py) → 영상에서 자차 운동(motion_vo.py) → Routo 지도와 chamfer 정합(match.py) → 위치(localize_from_lines.py)였다.

What hd-map was trying to establish is where the car is on the road — get that and lane changes, lane index and centre-line crossings all follow. The chain was calibrate from the vanishing point → accumulate paint into a BEV → recover ego motion from the pictures → chamfer-match against the Routo map → localise.

hd-map muốn xác định xe đang ở đâu trên đường — biết rồi thì chuyển làn, chỉ số làn và cắt vạch giữa đều theo sau. Chuỗi: hiệu chỉnh từ điểm tụ → tích lũy vạch vào BEV → khôi phục chuyển động xe camera từ ảnh → khớp chamfer với bản đồ Routo → định vị.

🚨 가장 중요한 결과 — 카메라 높이는 영상만으로 식별되지 않는다the key result: camera height is not identifiable from the clip alonekết quả then chốt: không nhận dạng được độ cao camera chỉ từ video

data/identifiability.json에 높이와 화각을 함께 쓸어 본 21개 조합이 남아 있다. 비용은 h = 1.0 m에서 78.96으로 시작해 내려가다가 h = 3.0 m에서 44.23으로 최저가 되고 다시 오른다. 그런데 h = 2.5 m(44.82) · 2.6 m(44.53) · 3.0 m(44.23) · 3.4 m(44.77)이 사실상 같은 값이다 — 즉 바닥이 평평하다.

data/identifiability.json giữ 21 tổ hợp quét đồng thời độ cao và góc nhìn. Chi phí bắt đầu 78.96 ở h = 1.0 m, giảm đến thấp nhất 44.23 ở h = 3.0 m rồi tăng lại. Nhưng h = 2.5 m (44.82) · 2.6 m (44.53) · 3.0 m (44.23) · 3.4 m (44.77) gần như cùng số — đáy phẳng.

승용차 대시캠이 3 m 높이에 달릴 리 없다. 최저점이 물리적으로 틀린 곳에 있고 그 주변이 평평하다는 것은, 이 비용함수가 높이를 식별하지 못한다는 뜻이다 — 높이를 올리면 화각이 따라 넓어지며 서로를 상쇄한다(82° → 159°). h와 화각은 한 영상에서 분리되지 않는다.

data/identifiability.json holds a 21-point sweep over camera height and field of view. The cost falls from 78.96 at h = 1.0 m to a minimum of 44.23 at h = 3.0 m, then rises again. But 2.5 m (44.82), 2.6 m (44.53), 3.0 m (44.23) and 3.4 m (44.77) are effectively the same number — the basin is flat.

data/identifiability.json có 21 điểm quét độ cao camera và góc nhìn. Chi phí giảm từ 78.96 ở h = 1.0 m đến tối thiểu 44.23 ở h = 3.0 m, rồi tăng. Nhưng 2.5 m (44.82), 2.6 m (44.53), 3.0 m (44.23), 3.4 m (44.77) thực tế cùng số — đáy phẳng.

No consumer dashcam sits three metres up. A minimum in a physically wrong place, with a flat floor around it, means this cost does not identify height at all — raise the height and the field of view widens to compensate (82° → 159°). The two are not separable from one clip.

Không camera hành trình dân dụng nào cao ba mét. Cực tiểu ở vị trí vật lý sai, đáy phẳng, nghĩa là chi phí không nhận dạng được độ cao — tăng độ cao thì góc nhìn mở rộng bù lại (82° → 159°). Không tách được hai yếu tố từ một video.

그런데 그 다음이 이 프로젝트에서 가장 값진 CV 결과 중 하나다. calibration.md가 688편 라벨 말뭉치 전량(cv-processing)에서 다시 쟀다 — lense 골드셋 273편이 아니다:

What came next is one of the most valuable CV results in the project. calibration.md re-measured it across all 688 clips of the labelled corpus (cv-processing’s, not lense’s 273-clip gold set):

Kết quả CV giá trị nhất tiếp theo. calibration.md đo lại trên toàn bộ 688 video có nhãn (của cv-processing, không phải tập chuẩn 273 video lense):

대수가 먼저 질문을 바꾼다the algebra changes the question firstđại số đổi câu hỏi trước tiên브리프는 초점거리·높이·피치를 요구했다. 핀홀·평탄노면에서 식을 풀면 X = (x − cx)·H / (y − yh) — 초점거리 f가 소거된다. 하류가 실제로 필요로 하는 것은 높이 H와 지평선 행이지 f가 아니다The brief asked for focal length, camera height and pitch. Solve under a pinhole and a flat road and X = (x − cx)·H / (y − yh) — f cancels. What downstream needs is H and the horizon row, not fĐề bài cần tiêu cự, độ cao camera và pitch. Giải dưới mô hình lỗ kim, đường phẳng: X = (x − cx)·H / (y − yh) — f bị triệt. Thứ bước sau cần là H và hàng chân trời, không phải f
그래서 미터는 나온다so metric scale does come outvậy tỷ lệ mét có thể suy ra자차로 경계쌍이 두 프레임 이상 적합된 387건(56.2%)에서 예외 없이 높이와 거리 척도가 나온다. 오차는 10 m에서 ±1.3~2.0 m로 thresholds.yaml이 스스로 선언한 밴드보다 작다On the 387 clips (56.2%) where an ego-lane boundary pair fits in two or more frames, height and distance scale come out without exception, with error of ±1.3–2.0 m at 10 m — inside the band thresholds.yaml declares for itselfTrên 387 video (56.2%) có cặp biên làn xe camera khớp được ở ít nhất hai khung, tỷ lệ độ cao và khoảng cách đều suy ra được không ngoại lệ, sai số ±1.3–2.0 m ở 10 m — nằm trong dải mà thresholds.yaml tự khai báo
⭐ 그러므로 기권은 기하의 한계가 아니었다⭐ the abstentions were not a limit of the geometry⭐ không kết luận không phải giới hạn hình học문서의 표현 그대로 — 「지금까지의 기권은 기하의 한계가 아니라 판단의 오류였다」. 초점거리는 여전히 넓지만(HFOV p10 60° ~ p90 111°) 그 값은 쓰이지 않는다In the memo’s own words: the abstentions so far were an error of judgement, not a limit of the geometry. Focal length stays wide (HFOV p10 60° to p90 111°) — and it is not the number being usedTheo chính memo: các lần không kết luận đến nay là lỗi phán đoán, không phải giới hạn hình học. Tiêu cự vẫn rộng (HFOV p10 60° đến p90 111°) — và đó không phải số đang dùng

이 둘을 같이 읽어야 한다. hd-map은 지도 정합으로 높이를 식별하려다 실패했고, calibration은 자차로 경계 두 줄로 같은 값을 뽑아냈다. §9.6의 「모든 미터 수치가 검증되지 않은 상수 두 개로 돌아간다」가 가리키는 상수가 바로 이 H와 λ다.

Read the two together. hd-map failed to identify height through map registration; calibration got the same quantity out of two ego-lane boundaries. The two unverified constants that §9.6 says every metric number traces back to are exactly these — H and λ. ⭐ And §9.10 now closes half of that: H was pinned three independent ways to ±1.4% and can be read off the map, while λ was measured 20.6% wrong and the working solver excludes it outright. Of the two, one is verified and the other is not to be used.

Đọc hai kết quả cùng nhau. hd-map không nhận dạng được độ cao qua đăng ký bản đồ; calibration suy ra cùng đại lượng từ hai biên làn xe camera. Hai hằng số chưa kiểm chứng mà §9.6 nói mọi số liệu truy về chính là H và λ. ⭐ §9.10 nay khép một nửa: H được ghim theo ba cách độc lập trong ±1.4%, có thể đọc từ bản đồ; λ sai 20.6% và bộ giải đang dùng loại bỏ hẳn. Một số được xác minh, số kia không được dùng.

⭐⭐ 교정이 끝내 닫히지 않은 구조적 이유 — 두 말뭉치가 겹치지 않는다⭐⭐ The structural reason calibration never closed — the two corpora do not intersect⭐⭐ Lý do cấu trúc calibration không bao giờ khép — hai tập dữ liệu không giao nhau

hd-map이 손에 쥔 것은 절대적 진실이었다 — 1 Hz GPS, 번인 속도계, 그리고 좌표계가 있는 지도. 그런데 그것이 존재하는 곳은 다른 AI Hub 폴더의, 위치가 식별된 클립 6편이다.

What hd-map had in hand was absolute truth — GPS at 1 Hz, a burnt-in speedometer, and a georeferenced map. What it had it on was 6 location-identified clips from a different AI Hub folder.

hd-map có trong tay chân lý tuyệt đối — GPS 1 Hz, đồng hồ tốc độ ghi sẵn và bản đồ gắn tọa độ. Dữ liệu trên là 6 video định vị từ thư mục AI Hub khác.

「두 말뭉치는 서로소다. 그 6편 중 어느 것도 우리의 라벨된 688편 안에 없고, 688편 중 어느 것에도 GPS가 없다. 융합할 데이터셋이 없다. … 이번 주에 내가 만든 모든 것은 자기 자신에 대해 검증된다 — 레일 비율(결국 무효로 드러났다), 도색 번짐(정확성이 아니라 일관성을 잰다), 추정기 불일치(둘이 다르다는 것이지 어느 쪽이 옳은지가 아니다), 함의된 폭(자기가 잰 것과 얽혀 있다).」

"The corpora are disjoint. None of the 6 are in our 688-clip labelled corpus, and none of our 688 have GPS. There is no dataset to fuse. … Everything I built this session validates against itself — rail rate (which turned out invalid), paint smear (measures consistency, not correctness), estimator disagreement (tells you two things differ, not which is right), implied width (entangled with what it measured)."

‘Hai tập dữ liệu rời nhau. Không video nào trong 6 nằm trong bộ 688 video có nhãn; không video nào trong 688 có GPS. Không có tập để gộp… Mọi thứ dựng trong phiên này đều kiểm với chính nó — tốc độ ray (hóa ra không hợp lệ), vệt sơn (đo nhất quán, không đúng), bất đồng ước lượng (nói hai thứ khác, không nói cái nào đúng), bề rộng suy ra (bị trộn với thứ nó đo).’

🚨 그래서 이 문서의 기하 수치를 읽는 규칙이 하나 생긴다: 말뭉치 규모로 나온 기하 수치는 거의 전부 자기일관성 검사이지 정확성 검사가 아니다. 둘을 가르는 질문은 하나다 — 「무엇과 비교했는가, 그리고 그것은 독립적인가.」 §9.6의 σ 신호와 같은 뿌리다.

🚨 Which gives one rule for reading every geometry number in this document: at corpus scale, almost all of them are self-consistency checks, not accuracy checks. One question separates the two — "compared against what, and is it independent?" It is the same root as the σ signature in §9.6.

🚨 Đây là một quy tắc đọc mọi con số hình học trong tài liệu: ở quy mô dữ liệu, gần như tất cả là kiểm tra tự nhất quán, không phải kiểm tra độ chính xác. Một câu hỏi tách hai loại — ‘so với cái gì, và có độc lập không?’ Cùng gốc với dấu hiệu σ ở §9.6.

⭐ 그리고 두 번째 표현이 첫 번째 표현의 버그를 찾아낸다 — 테스트 609개가 못 한 일⭐ A second representation found the bug that 609 tests could not⭐ Biểu diễn thứ hai tìm được lỗi mà 609 kiểm thử không thấy

2026-08-27의 기록이다. 도로 고정 지도를 만들자는 요구가 있었고, 자차 속도를 못 믿는다는 이유로 반대했다가, 그래도 만들었더니 횡방향 거리가 잘못된 축에서 측정되고 있었다는 것이 드러났다 — 40 m에서 최대 13.5 m의 오차이고, 자차 고정 시점에서는 보이지 않았으며 609개의 테스트를 소리 없이 통과했다(고친 것은 광축을 소실점으로 두는 것, D105).

From 2026-08-27. A road-fixed map was asked for and resisted on the grounds that ego speed was unreliable; building it anyway exposed that lateral distance was being measured from the wrong axis — an error of up to 13.5 m at 40 m that was invisible in the ego-fixed view and had passed 609 tests without a murmur (the fix: optical axis at the vanishing point, D105).

Ngày 2026-08-27. Yêu cầu bản đồ cố định đường bị từ chối vì tốc độ xe camera không đáng tin; cứ dựng vẫn cho thấy khoảng cách ngang đo từ sai trục — sai đến 13.5 m ở 40 m, không thấy trong góc nhìn gắn với xe camera và qua 609 kiểm thử mà không ai nhận ra (sửa: trục quang học tại điểm tụ, D105).

⭐ 옮겨 갈 규칙: 「지도는 기하를 바로잡은 보상이 아니라, 기하가 틀렸다는 것을 찾아낸 도구였다.」 한 표현 안에서 쓴 테스트는 그 표현이 감추는 것을 증명하지 못한다. 초록색 테스트 609개가 아무것도 증명하지 못한 이유다.

⭐ The rule to carry: "the map was not the payoff of getting the geometry right; it was the instrument that found the geometry was wrong." Tests written inside one representation cannot prove what that representation hides — which is why a green suite of 609 proved nothing.

⭐ Quy tắc cần giữ: ‘bản đồ không phải phần thưởng của hình học đúng; nó là công cụ phát hiện hình học sai.’ Kiểm thử bên trong một biểu diễn không chứng minh được phần biểu diễn che giấu — vì vậy bộ 609 kiểm thử xanh không chứng minh gì.

⚠️ 딥 VO를 다시 제안받으면 — 이 문단으로 답할 수 있다⚠️ If deep VO is proposed again — this paragraph is the answer⚠️ Nếu lại đề xuất VO sâu — đây là câu trả lời

§9.11이 메모의 결론(도로 프레임 19/23 대 세계 프레임 2/23)을 적는다. 그 결론을 논쟁 불가능하게 만드는 숫자가 넷 있다.

§9.11 records the memo's verdict (road frame 19/23 against world frame 2/23). Four numbers make it unarguable.

§9.11 ghi kết luận memo (khung đường 19/23 so với khung thế giới 2/23). Bốn con số làm nó không thể tranh luận.

벤치마크가 다른 데이터다the benchmark is a different worldbenchmark thuộc thế giới khác후속 논문 DPV-SLAM(ECCV 2024, arXiv:2408.01654)이 KITTI에서 DPVO를 재평가한다 — EuRoC 0.105 m 대 KITTI 53.61 m, 약 500배. DPV-SLAM++가 25.76 m로 내려간 것은 루프 클로저 덕인데 10초 클립에는 루프가 없다the follow-up DPV-SLAM (ECCV 2024, arXiv:2408.01654) re-evaluates DPVO on KITTI — 0.105 m on EuRoC against 53.61 m on KITTI, about 500×. DPV-SLAM++ gets to 25.76 m by loop closure, and a 10-second clip has no loopDPV-SLAM tiếp theo (ECCV 2024, arXiv:2408.01654) đánh giá lại DPVO trên KITTI — 0.105 m trên EuRoC so với 53.61 m trên KITTI, khoảng 500×. DPV-SLAM++ đạt 25.76 m nhờ khép vòng, còn video 10 giây không có vòng lặp
지표가 우리 클립에서 정의되지 않는다the metric is undefined on our clipsmetric không định nghĩa trên video của ta「10초·48 m는 KITTI 구간보다 짧아 드리프트에 유리하다」는 초고의 주장이 반증됐다 — KITTI 지표는 100 m 미만 구간을 건너뛴다. 게다가 길이별 곡선은 짧을수록 나쁘다the draft's claim that "10 seconds and 48 m is shorter than a KITTI segment, so drift is favourable" was refuted — the KITTI metric silently skips segments under 100 m, and the per-length curve is worse the shorter you gokhẳng định bản nháp ‘10 giây và 48 m ngắn hơn đoạn KITTI, nên trôi sẽ thuận lợi’ đã bị bác — metric KITTI âm thầm bỏ đoạn dưới 100 m, đường cong theo độ dài tệ hơn khi đoạn ngắn hơn
1998년의 정리가 막는다a 1998 theorem blocks itmột định lý năm 1998 chặn cách nàyCheong·Fermüller·Aloimonos(CVIU 1998): 전방 병진에서 화각 170° 미만이면 ±5° 방위오차가 원리적으로 관측 불가다. 우리 카메라는 116~130°이고, 측정된 등가 방위오차 3.1~4.4°가 정확히 그 대역 안이다Cheong, Fermüller & Aloimonos (CVIU 1998): under forward translation and below a 170° field of view, a ±5° heading error is unobservable in principle. Our cameras are 116–130°, and the measured equivalent heading error of 3.1–4.4° sits exactly in that bandCheong, Fermüller & Aloimonos (CVIU 1998): với tịnh tiến tiến về trước và góc nhìn dưới 170°, sai số hướng ±5° về nguyên tắc không quan sát được. Camera của ta 116–130°, sai số hướng tương đương đo được 3.1–4.4° đúng trong dải đó
정확도보다 커버리지가 먼저 무너진다coverage dies before accuracyđộ bao phủ chết trước độ chính xác🚨 DPVO는 평균 플로우 ≥ 8 px를 요구한다. 이동 프레임 18개 중 5개(28%)만 그것을 넘는다 — 주간·맑음이라는 최선의 조건에서 72%가 미달이다🚨 DPVO requires mean flow ≥ 8 px. Of 18 moving frames, 5 (28%) clear it — 72% fall short in the best conditions available, daylight and clear🚨 DPVO cần mean flow ≥ 8 px. Trong 18 khung chuyển động, 5 (28%) đạt; 72% thiếu ngay trong điều kiện tốt nhất: ban ngày, trời quang

9.10🚨 카메라를 모른다 — 세 번 다르게 공격했고, 세 번 다 측정된 실패로 끝났다(그 뒤 한 갈래는 다른 정식화로 풀렸다 — 아래 보정) · The camera is unknown — three independent attacks and three measured failures (one strand was later solved under a different formulation — see the correction inside)Camera chưa biết — ba cách tấn công độc lập và ba thất bại đo được (một nhánh sau được giải bằng công thức khác — xem phần sửa) 🔬 정밀🔬 Chính xác

이 절이 이 장에서 가장 중요하다. 차선 검출·깊이·BEV 논문과 오픈소스는 거의 전부 보정된 카메라를 전제한다 — 초점거리, 장착 높이, 피치를 알고 있거나, LiDAR·IMU·스테레오가 같이 있다. 고객이 보내오는 블랙박스 영상에는 그중 아무것도 없다. 기종도, 장착 각도도, 높이도 모른다. 그래서 세 번 서로 다른 방향에서 보정을 시도했고, 세 번 다 숫자로 실패를 기록했다. 이 절은 그 세 기록이다.

This is the most important section in the chapter. Nearly every paper and open-source project in lane detection, depth and BEV assumes a calibrated camera — focal length, mounting height and pitch known, or LiDAR, IMU or stereo alongside. A customer’s dashcam clip carries none of that: not the device, not the mounting angle, not the height. So calibration was attacked three different ways, and each attempt recorded its failure as a number. This section is those three records.

Đây là mục quan trọng nhất của chương. Gần như mọi bài báo và dự án mã mở về phát hiện làn, độ sâu, BEV đều giả định camera đã hiệu chỉnh — biết tiêu cự, độ cao và góc gắn, hoặc có LiDAR, IMU, stereo. Video camera hành trình khách hàng không có gì trong đó: không biết thiết bị, góc gắn, độ cao. Vì vậy calibration bị tấn công theo ba hướng, mỗi lần đều ghi thất bại bằng con số. Mục này là ba bản ghi đó.

① 영상 자신에게 물어보기 — 차선 점선의 주기로 역산① Ask the footage itself — solve from the lane-dash period① Hỏi chính video — suy từ chu kỳ vạch đứt làn

착상은 좋다. 한국 도로의 차선 점선은 규격이 정해져 있다. 화면에서 점선 한 주기가 몇 픽셀인지 재고 규격 길이와 비교하면 척도가 나온다. 결과: 차선이 적합된 454편 중 77편만 보정됐다. 배율은 2.3~5.8배에 중앙값 2.9. 나머지 377편은 110° 화각이라고 가정하고 돌아간다.

The idea is sound. Korean lane dashes come in standard lengths. Measure one dash period in pixels, compare it to the standard, and scale falls out. Result: 77 of the 454 lane-fitted clips calibrate, with factors 2.3–5.8 and a median of 2.9. The other 377 run on an assumed 110° field of view.

Ý tưởng đúng. Vạch đứt làn Hàn Quốc có chiều dài chuẩn. Đo một chu kỳ trên pixel, so với chuẩn, tỷ lệ mét suy ra. Kết quả: 77/454 video khớp làn calibration được, hệ số 2.3–5.8, trung vị 2.9. 377 video còn lại dùng góc nhìn 110° giả định.

⚠️ 그리고 이 숫자는 한 번 틀렸다가 고쳐진 것이다. 처음에는 454편 중 182편이 보정된다고 나왔는데, 버그였다 — 눈에 보이는 한 주기를 두 주기로 읽고 있었다. 고치자 182 → 77로 떨어졌다. ⭐ 이것이 CV 오차 전파의 교과서적 사례다 — 상류의 세는 방식 하나가 틀리면 하류의 모든 미터가 2배로 틀린다. 그리고 더 근본적인 문제를 코드가 스스로 적어 둔다: 한국에는 점선 규격이 셋인데 어느 것이 적용되는지는 「영상에서 전혀 보이지 않는다」.

⚠️ And that number was itself wrong once and corrected. The first run reported 182 of 454 calibrating — a bug: it was reading one visible dash period as two. Fixing it took 182 down to 77. ⭐ A textbook case of CV error propagation: one miscount upstream and every metre downstream is out by a factor of two. And the code records the deeper problem itself — Korea has three dash standards, and which one applies "is not visible in the image at all."

⚠️ Con số này từng sai rồi sửa. Lần đầu báo 182/454 calibration — lỗi: đọc một chu kỳ vạch nhìn thấy thành hai. Sửa đưa 182 xuống 77. ⭐ Ví dụ kinh điển của lan truyền lỗi CV: đếm sai một chỗ, mọi mét phía sau sai hệ số hai. Mã còn ghi vấn đề sâu hơn — Hàn Quốc có ba chuẩn vạch, chuẩn nào áp dụng ‘hoàn toàn không nhìn thấy trong ảnh.’

② 학습된 보정기에게 물어보기 — GeoCalib을 100편에② Ask a learned calibrator — GeoCalib over 100 clips② Hỏi bộ hiệu chỉnh học — GeoCalib trên 100 video

이 사진 한 장이 이 절 전체를 대신한다. 아래는 GeoCalib이 추정한 초점거리 순으로 정렬한 실제 클립들이고, 노란 선은 그 모델이 생각하는 지평선이다.

One picture stands for this whole section. Below are real clips sorted by GeoCalib’s estimated focal length, with the model’s own horizon drawn in yellow.

Một hình ảnh đại diện cả mục. Dưới đây là các video thật xếp theo tiêu cự GeoCalib ước tính, chân trời do chính mô hình vẽ màu vàng.

🚨 전부 같은 종류의 기기다 — 승용차 대시캠이다. 그런데 추정 초점거리가 477픽셀(화각 127°, 거의 어안)에서 5,921픽셀(화각 18°, 망원)까지 간다. 12배 차이다. 노란 지평선도 여러 장에서 눈에 띄게 틀려 있다. ⭐ 「카메라를 모른다」는 추상적인 말이 아니라 이 사진이다.🚨 These are all the same kind of device — consumer dashcams. Yet the estimated focal length runs from 477 px (a 127° near-fisheye) to 5,921 px (an 18° telephoto) — a factor of twelve. The yellow horizon is visibly wrong in several of them. ⭐ "The camera is unknown" is not an abstraction; it is this picture.🚨 Đều cùng loại thiết bị — camera hành trình dân dụng. Nhưng tiêu cự ước tính từ 477 px (gần mắt cá 127°) đến 5,921 px (tele 18°) — gấp mười hai lần. Chân trời vàng sai rõ ở vài video. ⭐ ‘Camera chưa biết’ không phải khái niệm trừu tượng; đó là hình này.
100편에서 측정된 것measured over 100 clipsđo trên 100 video
초점거리 상대 불확실도 중앙값median relative focal uncertaintybất định tiêu cự tương đối trung vị🚨 39%
20% 미만으로 들어온 클립clips under 20%video dưới 20%10 / 100
그럴듯한 화각(60~140°)을 준 클립clips giving a plausible 60–140° HFOVvideo cho HFOV hợp lý 60–140°58 / 100
🚨 한 클립 안에서의 초점거리 표준편차 — 카메라가 고정되어 있는데도🚨 focal std within a single clip — on a camera that does not move🚨 độ lệch tiêu cự trong một video — camera không di chuyển🚨 173.5 px

⭐ 마지막 줄을 보라. 한 클립 안에서 카메라는 물리적으로 고정되어 있다 — 초점거리는 상수여야 한다. 그런데 프레임마다 173.5픽셀씩 흔들린다. 이것은 추정이 어렵다는 뜻이 아니라, 이 추정값을 상수로 쓸 수 없다는 뜻이다. 능동 화면 영역으로 먼저 크롭하면 p95/p5 비율이 2.90배 → 2.07배로 나아지지만 그 이상은 아니다.

⭐ Look at the last row. Inside one clip the camera is physically bolted in place — the focal length is a constant. Yet it wanders by 173.5 px frame to frame. That is not "estimation is hard"; it is "this estimate cannot be used as a constant." Cropping to the active picture area first improves the p95/p5 spread from 2.90× to 2.07×, and little else.

⭐ Nhìn dòng cuối. Trong một video, camera bắt cố định vật lý — tiêu cự là hằng số. Nhưng nó dao động 173.5 px giữa các khung. Không phải ‘ước lượng khó’, mà là ‘không thể dùng ước lượng này như hằng số.’ Cắt vùng ảnh hoạt động trước giảm chênh p95/p5 từ 2.90× xuống 2.07×, và gần như không gì khác.

③ 지도에게 물어보기 — HD 지도에 정합시켜 거꾸로 푼다③ Ask the map — register to an HD map and solve backwards③ Hỏi bản đồ — đăng ký vào bản đồ HD rồi giải ngược

가장 야심찬 시도였다. 도로의 실제 치수를 아는 지도가 있으니, 화면의 도색을 지도에 맞춰 붙이면 카메라 파라미터가 역으로 풀려야 한다. ⚠️ 풀리지 않았고, 왜 풀리지 않는지가 더 중요하다.

The most ambitious attempt. If a map knows the road’s true dimensions, then fitting the image’s paint onto it should solve the camera parameters backwards. ⚠️ It did not — and why it did not is the more useful finding.

Nỗ lực tham vọng nhất. Nếu bản đồ biết kích thước đường thật, khớp vạch ảnh lên đó phải giải ngược tham số camera. ⚠️ Không được — và lý do mới là phát hiện có ích.

정합 비용을 가로 방향으로 쓸어 본 것. 🚨 최저점이 +10.9 m에 있고, 그 지점이 탐색 창의 오른쪽 끝에 딱 붙어 있다. 최적점이 창 밖에 있다는 신호이고, 10.9 m는 차로 세 개 폭이다. 레포 자신의 평가가 「신뢰할 수 없음」이다 — 방위각도 탐색 한계에 붙어 멈췄다. 비용이 낮아지는 방향이 「맞는 방향」이 아니라 「싼 방향」일 때 생기는 일이다The registration cost swept along the lateral axis. 🚨 The minimum sits at +10.9 m, hard against the right-hand edge of the search window — the signature of an optimum that lies outside it. And 10.9 m is three lane widths. The repo’s own verdict is "not trustworthy"; the heading likewise pinned at its bound. This is what happens when the direction the cost falls in is the cheap direction rather than the right oneChi phí đăng ký quét theo trục ngang. 🚨 Cực tiểu ở +10.9 m, sát mép phải của cửa sổ tìm — dấu hiệu tối ưu nằm ngoài. 10.9 m là ba bề rộng làn. Kết luận kho mã: ‘không đáng tin’; hướng cũng bị ghim ở biên. Đây là chuyện xảy ra khi hướng chi phí giảm là hướng rẻ chứ không phải hướng đúng

진단이 정확하다. 최근접점 비용은 대응 관계를 모르는 채 계산되므로 싼 방향이 생긴다 — 렌즈를 넓게 잡으면 지도가 검출된 도색 쪽으로 수축해서 비용이 그냥 내려간다. 게다가 도로 표시는 전부 한 평면에 있다. 그래서 높이를 자유롭게 두면 3.0 m 장착 높이에 138° 렌즈로 걸어가 버린다 — 승용차에 있을 수 없는 값이다. 레포가 적어 둔 결론:

The diagnosis is precise. A nearest-neighbour cost computed without known correspondence has a cheap direction: widen the lens and the map shrinks toward the detected paint, and the cost falls for free. And road markings are all coplanar. Left free, the fit walks to a 3.0 m mounting height with a 138° lens — impossible on a passenger car. The repo’s conclusion:

Chẩn đoán chính xác. Chi phí láng giềng gần nhất không biết tương ứng có hướng rẻ: mở rộng ống kính, bản đồ co về phía vạch phát hiện, chi phí tự giảm. Và vạch đường đồng phẳng. Thả tự do, phép khớp đi tới độ cao 3.0 m, ống 138° — không thể trên xe con. Kết luận kho mã:

"the map validates a camera model — it does not replace a calibration."

‘bản đồ xác nhận mô hình camera — không thay thế calibration.’

「지도는 카메라 모델을 검증해 줄 뿐, 보정을 대신하지 않는다.」 그리고 무엇이 필요한지까지 적어 둔다 — "제대로 된 구속을 걸려면 높이 변화가 있는 것이 필요하다 — 전주, 표지 갠트리, 건물 모서리." 평면만 보고는 평면적인 모호성을 풀 수 없다.

⭐⭐ 보정 — 그 다음에 다른 풀이가 성공했다. 실패한 것은 생각이 아니라 정식화였다correction — a later solver did succeed. What failed was the formulation, not the ideasửa — bộ giải sau đã thành công. Thất bại nằm ở công thức, không ý tưởng

이 절은 지금까지 「지도 정합은 실패했다」로 읽혔다. 전사를 열어 보면 그렇지 않다. 2026-08-28 new-knia 작업에서 자체 솔버(knia/perception/maploc.py, hd-map 것이 아니다)가 가로 방향으로는 풀어냈다.

This section has read as "map registration failed". The transcripts say otherwise. In the new-knia work of 2026-08-28, a solver of its own (knia/perception/maploc.py, not hd-map’s) did solve it in the across-road direction.

Mục này từng đọc như ‘đăng ký bản đồ thất bại’. Bản ghi nói khác. Trong công việc new-knia ngày 2026-08-28, bộ giải riêng (knia/perception/maploc.py, không phải hd-map) đã giải được theo hướng ngang đường.

정합 잔차 (중앙값)registration residual, medianphần dư đăng ký, trung vị0.70 m · 90분위 1.39 m· p90 1.39 m· p90 1.39 m
⭐ datum — 도로를 가로질러datum, across the roadmốc, ngang đường✅ +0.08 m
datum — 도로를 따라datum, along the roadmốc, dọc đường⚠️ +21.1 m — 원리적으로 미결정— undetermined in principle— về nguyên tắc không xác định

세 가지 설계 선택이 차이를 만들었고, 셋 다 앞선 실패에서 나왔다.

Three design choices made the difference, and all three came out of earlier failures.

Ba lựa chọn thiết kế tạo khác biệt, đều rút ra từ thất bại trước.

① 마스크가 아니라 쌍으로 맞춘다① match a pair, not a mask① khớp một cặp, không mặt nạUFLDv2는 차선을 인스턴스로 준다. 그래서 한 선은 맞는데 차로폭을 어기는 해를 거부할 수 있다. chamfer-on-mask는 그 제약을 표현할 수 없다 — 위에서 실패한 것이 정확히 그 목적함수다UFLDv2 gives lane instances, so a solution that fits one line while violating lane width can be rejected. Chamfer-on-mask cannot express that constraint — and that is exactly the objective that failed aboveUFLDv2 cho các thể hiện làn, nên nghiệm khớp một đường nhưng vi phạm bề rộng làn có thể bị loại. Chamfer trên mặt nạ không diễn đạt được ràng buộc — đúng mục tiêu thất bại ở trên
🚨 ② λ를 절대 쓰지 않는다🚨 ② never use λ🚨 ② không bao giờ dùng λ가로 방향에는 H만 있으면 된다. 그리고 λ는 20.6% 틀린 것으로 측정된 바로 그 양이다 — 목적함수에서 통째로 뺐다. ⭐ §9.6이 「모든 미터 수치가 검증되지 않은 상수 둘로 돌아간다」고 적은 그 둘 중 하나가 쓰지 말아야 할 것으로 판명된 것이다the lateral direction needs only H. And λ is the one quantity measured 20.6% wrong — it was excluded from the objective entirely. ⭐ Of the two unverified constants §9.6 says every metric figure traces back to, one turns out to be the one you must not usehướng ngang chỉ cần H. λ là đại lượng sai 20.6% — loại khỏi mục tiêu hoàn toàn. ⭐ Trong hai hằng số chưa xác minh mà §9.6 nói mọi số liệu truy về, một hằng số hóa ra là thứ không được dùng
③ H를 사전분포가 아니라 지도에서③ take H from the map, not a prior③ lấy H từ bản đồ, không từ tiên nghiệmH = W_map/p = 3.09/2.424 = 1.273 m, ±8.5%짜리 사전분포 대신. 그러자 독립적인 세 추정이 ±1.4% 안에서 일치한다(1.291 사전 / 1.273 지도 / 1.255 hd-map)H = W_map/p = 3.09/2.424 = 1.273 m, in place of a ±8.5% prior. Three independent estimates then agree within ±1.4% (1.291 prior / 1.273 map / 1.255 hd-map)H = W_map/p = 3.09/2.424 = 1.273 m, thay tiên nghiệm ±8.5%. Ba ước lượng độc lập sau đó khớp trong ±1.4% (1.291 tiên nghiệm / 1.273 bản đồ / 1.255 hd-map)

그리고 입력이 건전하다는 것도 따로 확인됐다 — 관측 차로폭 대 지도 3.06 vs 3.09 m (1%), GPS 대 속도계 이동거리 78.7 vs 80.0 m (1.6%), 지도 차선 대 GPS 방위 +2.4~3.2°로 나란함.

The inputs were separately shown to be sound: observed lane width against the map 3.06 vs 3.09 m (1%), GPS against speedometer distance 78.7 vs 80.0 m (1.6%), and map lane against GPS bearing parallel to within +2.4–3.2°.

Đầu vào được chứng minh riêng là đúng: bề rộng làn nhìn so với bản đồ 3.06 so với 3.09 m (1%), GPS so với quãng đường đồng hồ 78.7 so với 80.0 m (1.6%), làn bản đồ so với hướng GPS song song trong +2.4–3.2°.

⭐ 그러므로 §9.10의 정확한 결론은 이렇다. 「지도로 보정할 수 없다」가 아니라 — 가로 방향은 풀린다(0.08 m), H는 지도에서 얻을 수 있다, 그리고 세로 방향은 원리적으로 안 풀린다. 곧은 길에서는 따라 미끄러지는 데 비용이 들지 않기 때문이고, 그것이 21 m의 정체다 — 조리개 문제이지 버그가 아니다.

⭐ So §9.10’s accurate conclusion is this. Not "a map cannot calibrate you" — but that the across-road component solves (0.08 m), H can be taken from the map, and the along-track component cannot be solved in principle. On a straight road sliding along it costs nothing, and that is what the 21 m is — an aperture problem, not a bug.

⭐ Kết luận đúng của §9.10 là: không phải ‘bản đồ không thể calibration’ — mà thành phần ngang đường giải được (0.08 m), H lấy được từ bản đồ, còn thành phần dọc đường không thể giải về nguyên tắc. Trên đường thẳng, trượt dọc không tốn chi phí; 21 m là vấn đề khẩu độ, không phải lỗi.

⚠️ 두 실패도 튜닝이 아니라 진단으로 끝났다 — 프레임별로 풀면 |dy| 중앙값이 3.50 m, 차로폭 3.09 m와 거의 같다. 목적함수에 차로마다 최소점이 하나씩 있어서 프레임이 차로를 자유롭게 건너뛴 것이고, 고친 방법은 datum을 37개의 독립 미지수가 아니라 하나의 전역 미지수로 다시 세운 것이다. 그리고 벡터 레이어는 298개 중 245개가 2점짜리 조각이라 입력 자체가 틀렸다 — 조밀 페인트 래스터가 맞는 입력이었다.

⚠️ Both failures were diagnosed rather than tuned around. Solving per frame drove |dy| to a median of 3.50 m — almost exactly the 3.09 m lane width — because the objective has one minimum per lane and frames hopped lanes freely. The fix was structural: restate the datum as one global unknown instead of 37 independent ones. And the vector layer was the wrong input: 245 of its 298 features are two-point stubs. The dense paint raster was the right one.

⚠️ Cả hai thất bại được chẩn đoán, không chỉnh cho vừa. Giải từng khung đưa |dy| tới trung vị 3.50 m — gần đúng bề rộng làn 3.09 m — vì mục tiêu có một cực tiểu mỗi làn, khung tự do nhảy làn. Sửa cấu trúc: viết lại mốc thành một ẩn toàn cục thay vì 37 ẩn độc lập. Lớp vector cũng sai đầu vào: 245/298 đặc trưng là đoạn hai điểm. Raster vạch dày mới đúng.

⭐ 그래서 오차가 얼마나 번지는가 — 숫자로how far the error actually propagates — in numberssai số lan tới đâu — bằng số

hd-map이 오차 예산을 직접 계산해 두었다. 이것이 「CV가 오차를 전파한다」의 구체적인 모습이다.

hd-map worked out its own error budget — this is what "CV propagates error" looks like concretely.

hd-map tự lập ngân sách sai số — đây là ‘CV lan sai số’ một cách cụ thể.

들어간 오차the error going insai số đầu vào나온 오차the error coming outsai số đầu ra
지평선 ±11.3픽셀horizon off by ±11.3 pxchân trời lệch ±11.3 px5 m 앞에서 0.23 m — 괜찮다. 20 m 앞에서 3.73 m — 차로 하나를 통째로 넘는다. 🚨 40 m 앞에서 14.9 m. 거리의 제곱으로 자란다0.23 m at 5 m — fine. 3.73 m at 20 m — more than a whole lane. 🚨 14.9 m at 40 m. It grows as the square of distance0.23 m ở 5 m — ổn. 3.73 m ở 20 m — hơn cả làn. 🚨 14.9 m ở 40 m. Tăng theo bình phương khoảng cách
장착 높이 ±10%mounting height off by ±10%độ cao lắp lệch ±10%3.5 m 차로를 가로질러 0.35 m — 차로 폭의 10%. 「옆 차로에 있었는가」를 가르기에 충분히 크다0.35 m across a 3.5 m lane — a tenth of the lane. Large enough to decide "was it in the next lane"0.35 m trên làn 3.5 m — một phần mười làn. Đủ lớn để quyết định ‘có ở làn kế bên không’

⭐ 그리고 이것이 hd-map을 내려놓은 이유다. 쓸 만한 결과를 내려면 장착 높이를 ±13 cm까지 알아야 하는데, 그 값은 영상에서도, 속도계에서도, 지도에서도 나오지 않는다. 남은 길은 차량 제조사에 여섯 줄짜리 제원 요청을 보내는 것뿐이었다. 그리고 결정적인 한 줄 — "카메라 보정이 이 클립 하나에 손으로 맞춰져 있고 이식되지 않는다". 임의의 고객 영상을 받아야 하는 제품에서 이것은 치명적이다.

⭐ And this is why hd-map was set down. A usable result needs the mounting height to ±13 cm, and that number comes from neither the clip, nor the speedometer, nor the map. The remaining route was a six-row specification request to the vehicle maker. Plus the decisive line: "the camera calibration is hand-fitted to this single clip and is not portable." For a product that must accept arbitrary customer footage, that is fatal.

⭐ Đây là lý do dừng hd-map. Kết quả dùng được cần độ cao lắp ±13 cm, nhưng con số đó không đến từ video, đồng hồ tốc độ hay bản đồ. Đường còn lại là yêu cầu thông số sáu dòng tới nhà sản xuất xe. Câu quyết định: ‘hiệu chỉnh camera được chỉnh tay theo video này, không dùng video khác.’ Với sản phẩm nhận video bất kỳ, đây là điểm chết.

⚠️ 덧붙여, 같은 영상에서 시간마저 어긋나 있었다 — 화면에 구워진 텔레메트리가 그림보다 2.1초 앞선다(31프레임 지연에서 상관 0.86). 레포의 표현: "어떤 카메라 파라미터로도 이것을 흡수할 수 없다". 그리고 야간 정체 구간에서 노면 기준 VO는 GPS 78.7 m 구간을 29.9 m로 적분했다 — 추적된 특징이 노면이 아니라 앞차 미등이었기 때문이다.

⚠️ In the same footage even time was out of register — the burned-in telemetry leads the pictures by 2.1 s (r = 0.86 at a 31-frame lag). The repo’s words: "no camera parameter can absorb that." And at night in stopped traffic, ground-plane visual odometry integrated a 78.7 m GPS polyline as 29.9 m — because the features being tracked were the tail-lights ahead, not the road surface.

⚠️ Trong cùng video, thời gian cũng lệch thanh ghi — telemetry ghi sẵn đi trước hình 2.1 s (r = 0.86 ở trễ 31 khung). Câu của kho mã: “không tham số camera nào hấp thụ được.” Ban đêm xe dừng, odometry mặt phẳng tích hợp polyline GPS 78.7 m thành 29.9 m — vì đặc trưng theo dõi là đèn hậu phía trước, không phải mặt đường.

⭐ 그런데 여기서 좋은 설계 원칙이 하나 나왔다 — 척도를 아예 피한다one good design principle came out of this — avoid scale entirelymột nguyên tắc thiết kế tốt — tránh tỷ lệ mét hoàn toàn

이것이 이 세 레포에서 가장 이식 가능한 교훈이다. 척도를 모른다면, 척도가 들어가지 않는 사실만 만들면 된다. 코드가 그렇게 적어 둔다 — "척도는 들어오지 않는다", "차량들 사이의 순서와 비율은 영향받지 않는다".

The most transferable lesson in these three repos. If the scale is unknown, build only facts that do not contain a scale. The code says so: "Scale never enters" and "ordering and ratios between vehicles are untouched."

Bài học dễ chuyển nhất của ba kho. Nếu tỷ lệ mét không biết, chỉ xây dữ kiện không chứa tỷ lệ mét. Mã nói: ‘tỷ lệ không bao giờ đi vào’, ‘thứ tự và tỷ lệ giữa các xe không bị ảnh hưởng’.

⭐ 과실비율에는 이것으로 충분한 경우가 많다. 「상대차가 몇 미터 앞에 있었나」는 보정이 필요하지만, 「누가 앞이었나」는 필요 없다. 「차로를 넘었나」도, 「누가 먼저 진입했나」도 마찬가지다 — 그리고 §2.1이 보였듯 책이 실제로 묻는 것이 대부분 이쪽이다. 미터를 포기하면 많은 것이 풀린다.

⭐ For fault ratio this is often enough. "How many metres ahead was the other car" needs a calibration; "who was ahead" does not. Nor does "did it cross the lane line", nor "who entered first" — and as §2.1 shows, those are mostly what the book actually asks. Give up metres and a great deal becomes tractable.

⭐ Với tỷ lệ lỗi, thường thế là đủ. ‘Xe kia cách trước bao nhiêu mét’ cần calibration; ‘xe nào đi trước’ thì không. Cũng không cần cho ‘có cắt vạch làn không’, ‘ai vào trước’ — như §2.1 cho thấy, đó chủ yếu là thứ sách thực sự hỏi. Bỏ mét đi, rất nhiều việc trở nên khả thi.

척도 없이 얻은 자차 차로 위치 — GPS도 지도도 장착 높이도 쓰지 않고 검출된 차선만으로. 50프레임까지는 안정적이다. ⚠️ 그 다음부터 추정된 차로 폭이 1.4~8.7 m 사이로 요동친다 — 지도가 말하는 실제 폭은 3.70 m다. 차가 정체 구간으로 제동해 들어가면서 피치가 바뀌고 차선이 가려지기 때문이다. 척도를 피해도 기하는 여전히 기하다ego lane position recovered without any scale — no GPS, no map, no mounting height, only the detected lane lines. Stable to about frame 50. ⚠️ After that the inferred lane width oscillates between 1.4 and 8.7 m against the map’s true 3.70 m — the car is braking into traffic, so the pitch changes and the lines get occluded. Avoiding scale does not exempt you from geometryVị trí xe camera trong làn khôi phục không cần tỷ lệ — không GPS, bản đồ, độ cao, chỉ đường làn đã phát hiện. Ổn tới khoảng khung 50. ⚠️ Sau đó bề rộng làn suy ra dao động 1.4–8.7 m so với 3.70 m thật của bản đồ — xe đang phanh trong dòng xe, pitch đổi và đường bị che. Tránh tỷ lệ không miễn hình học.
🚨 그리고 조용한 결함 하나 — 모든 차로 점유 수치가 오토바이 없는 코퍼스에서 나왔다and one silent defect — every lane-occupancy number came from a motorbike-free corpusmột lỗi im lặng — mọi con số chiếm làn lấy từ bộ dữ liệu không có xe máy

클래스 이름 하나가 어긋나 있었다. 캐시된 690편에서 검출된 것은 승용차 17,076 · 트럭 4,719 · 버스 1,072 · 자전거 163, 그리고 🚨 오토바이 0이다. 그런데 표본으로 150편을 눈으로 확인하니 약 115편에 오토바이가 있었다.

One class name was mismatched. Across 690 cached clips the detections are 17,076 cars, 4,719 trucks, 1,072 buses, 163 bicycles — and 🚨 zero motorcycles. Yet eyeballing a 150-clip sample found motorbikes in about 115 of them.

Một tên lớp bị lệch. Trong 690 video đệm: 17,076 ô tô, 4,719 xe tải, 1,072 xe buýt, 163 xe đạp — 🚨 0 xe máy. Nhưng xem mắt 150 video thấy xe máy ở khoảng 115 video.

⭐ 왜 이것이 조용한 결함인가: 아무것도 깨지지 않는다. 숫자는 전부 나오고, 그럴듯하고, 재현된다. 그저 전부 오토바이가 없는 세계에서 나왔을 뿐이다. 그리고 책에는 이륜차 도표가 55개 있다(§8.11) — 빠진 클래스가 코퍼스의 4분의 1을 차지하는 사고 유형이다. 후임자가 차로 점유 수치를 다시 쓰기 전에 이것부터 고쳐야 한다.

⭐ Why this is the silent kind: nothing breaks. The numbers all come out, look reasonable and reproduce. They simply came from a world with no motorbikes in it. And the book has 55 motorcycle charts (§8.11) — the missing class is a quarter of the corpus of accident types. Fix this before reusing any lane-occupancy figure.

⭐ Vì sao lỗi im lặng: không gì hỏng. Số xuất ra hợp lý, tái lập. Chúng chỉ đến từ một thế giới không có xe máy. Sách có 55 biểu đồ xe máy (§8.11) — lớp thiếu là một phần tư kho loại tai nạn. Sửa trước khi dùng lại bất kỳ số liệu chiếm làn nào.

⚠️ 같은 패스에서 나온 음성 결과들 — 전부 기록해 둔다negative results from the same work — all recordedkết quả âm từ cùng công việc — đều được ghi
지평선을 맞춰 크롭하기re-framing to the training horizonđưa lại khung về chân trời huấn luyệnUFLDv2에 학습 때와 같은 위치에 지평선이 오도록 크롭해 넣었다. 평균 ≥2차선 검출률 0.413 → 0.403 — 100편에서 32편 개선 · 26편 악화 · 42편 동일. ❌ 아무것도 얻지 못했다 — 그리고 이것이 바로 ②의 GeoCalib 조사를 하게 된 이유다UFLDv2 fed a crop whose horizon sits where its training data put it. Mean ≥2-lane rate 0.413 → 0.403; paired over 100 clips, 32 better, 26 worse, 42 equal. ❌ It bought nothing — and it is exactly why the GeoCalib survey in ② was runUFLDv2 nhận crop có chân trời ở vị trí dữ liệu huấn luyện đặt. Tỷ lệ ≥2 làn trung bình 0.413 → 0.403; trên 100 video ghép đôi: 32 tốt hơn, 26 kém hơn, 42 bằng. ❌ Không được gì — chính là lý do khảo sát GeoCalib ở ② được chạy
실선 대 점선 구분solid versus dashedliền so với đứt❌ 복원되지 않았다. 세 번의 프로브에서 AUC 0.450 · 0.440 · 0.523 — 우연이 0.5인데 셋 중 둘이 그보다 낮다. 진로변경 가능 여부를 가르는 사실이라 아픈 실패다❌ not recovered. Across three probes the AUC was 0.450, 0.440, 0.523 — chance is 0.5, and two of the three are below it. A painful one, since it is the fact that decides whether a lane change was permitted❌ không khôi phục được. Ba phép thử AUC 0.450, 0.440, 0.523 — ngẫu nhiên 0.5; hai trong ba còn dưới. Đau ở chỗ đây là dữ kiện quyết định chuyển làn có được phép không
⭐ 그런데 라벨된 데이터가 이미 있다but the labelled data already existsnhưng dữ liệu đã gán nhãn tồn tại🚨 AI Hub 196/197이 차선의 type(점선/실선)과 color(흰색/노란색/파란색)를 이미 라벨해 두었다 — 폴리라인 1,091만 개. 2026-08-25에 발견됐고 당시 평가가 「첫날부터 이 프로젝트를 막아 온 제약이 깨졌다」였다. 그때까지 선택지는 CULane(위치만, 종류·색 없음) 아니면 OpenLane(라벨은 있지만 Waymo 약관이 학습된 가중치까지 따라온다)뿐이었다 — 국내 데이터가 둘을 한 번에 푼다. 약관도 지금까지 본 것 중 가장 낫다: 「영리적・비영리적 연구・개발 목적으로 활용할 수 있습니다」 · 「인공지능 학습모델의 학습용으로만」 · 「판매 등 상업적 이용을 희망하는 경우 수행기관과 별도 협의」. 남은 질문은 하나 — 학습된 가중치를 배포하는 것이 「상업적 이용」인가. ⭐ 앞지르기 계열 전체가 이 슬롯에 걸려 있다(§9.2)🚨 AI Hub 196/197 already label lane type (dotted/solid) and color (white/yellow/blue) — 10.91 million polylines. Found on 2026-08-25, and the reading at the time was that it "broke the constraint that has blocked this project since day one". Until then the options were CULane (position only, no type or colour) or OpenLane (which has the labels, but Waymo’s terms follow the trained weights) — the Korean data solves both at once. The terms are also the best seen here: "may be used for commercial and non-commercial research and development" · "for training AI models only" · "commercial use such as sale requires separate agreement with the producing body". One question remains: whether distributing trained weights counts as commercial use. ⭐ The whole overtaking family hangs on this slot (§9.2)🚨 AI Hub 196/197 đã gán nhãn type làn (chấm/ liền) và color (trắng/vàng/xanh) — 10.91 triệu polyline. Tìm thấy 2026-08-25; khi đó đọc là ‘phá ràng buộc đã chặn dự án từ ngày đầu’. Trước đó chỉ có CULane (chỉ vị trí, không loại/màu) hoặc OpenLane (có nhãn nhưng điều khoản Waymo đi theo trọng số đã huấn luyện) — dữ liệu Hàn Quốc giải quyết cả hai. Điều khoản tốt nhất thấy: ‘được dùng cho nghiên cứu và phát triển thương mại/phi thương mại’ · ‘chỉ để huấn luyện mô hình AI’ · ‘bán thương mại cần thỏa thuận riêng với đơn vị tạo’. Còn một câu hỏi: phát hành trọng số đã huấn luyện có bị tính dùng thương mại không. ⭐ Cả họ biểu đồ vượt xe phụ thuộc vào điểm này (§9.2)
노란 중앙선 찾기finding the yellow centre linetìm vạch giữa màu vàng❌ 중앙선이 있는 42편 중 39편에서 흰색으로 분류됐다(중앙값 Δb* ≈ +0.2). 중앙선 침범은 과실을 통째로 뒤집는 사실인데, 색으로는 잡히지 않았다❌ classified white on 39 of the 42 clips that have one (median Δb* ≈ +0.2). Crossing the centre line can invert a ratio outright, and colour did not find it❌ bị phân loại trắng ở 39/42 video có vạch giữa (trung vị Δb* ≈ +0.2). Cắt vạch giữa có thể đảo hoàn toàn tỷ lệ lỗi, màu không tìm ra
3-D 차선 분기(PersFormer · LATR)the 3-D lane branch (PersFormer, LATR)nhánh làn 3-D (PersFormer, LATR)❌ 결과를 하나도 내지 못하고 접혔다 — 다섯 개 벤더 디렉터리가 전부 비어 있다. ⭐ 그런데 CUDA 커널 두 개를 순수 PyTorch로 옮긴 심(shim)은 살아남았다 — Mac에서 돌리려고 쓴 것이다. 보정된 카메라가 필요한 분기는 숫자를 내기 전에 죽었고, 그 보정을 만들려던 분기는 실패했다❌ abandoned with zero results — all five vendored directories are empty. ⭐ But the shims survive: pure-PyTorch ports of two CUDA kernels, written to run these models on a Mac. The branch that needed a calibrated camera died before producing a number, and the branch trying to produce the calibration failed❌ bỏ với 0 kết quả — cả năm thư mục tích hợp rỗng. ⭐ Nhưng shim vẫn còn: cổng PyTorch thuần của hai kernel CUDA, viết để chạy mô hình trên Mac. Nhánh cần camera calibration chết trước khi tạo số, nhánh tạo calibration cũng thất bại
⚠️ 인용하기 전에 — 이 레포들이 서로 어긋나는 곳before quoting — where these repos disagree with themselvestrước khi trích — nơi các kho tự mâu thuẫn
차선 적합률이 셋이다three lane-fit ratesba tỷ lệ khớp làn454/688 · 393/688(57%) · 258→234/369 — 세 개의 다른 모집단이고 어디에서도 대사되지 않는다— three different populations, never reconciled anywhere— ba quần thể khác, không được hòa giải ở đâu
카메라 높이가 둘이다two camera heightshai độ cao camera같은 레포가 h = 1.255와 H_FIT = 1.35를 동시에 들고 있다. 8% 차이이고, 위 표대로면 차로를 가로질러 0.3 m 가까이 움직인다the same repo carries h = 1.255 and H_FIT = 1.35. An 8% difference — by the table above, nearly 0.3 m across a lanecùng kho có h = 1.255 và H_FIT = 1.35. Lệch 8% — theo bảng trên, gần 0.3 m trên một làn
「±2.9%」가 보이는 것보다 약하다"±2.9%" is weaker than it looks‘±2.9%’ yếu hơn vẻ ngoàif·h의 ±2.9%는 투표로 합친 뒤의 MAD다. 프레임별 값은 560~3,908에 걸쳐 있다the ±2.9% on f·h is a pooled-vote MAD. The per-frame values span 560–3,908±2.9% trên f·h là MAD bỏ phiếu gộp. Giá trị từng khung trải 560–3,908
🚨 맞췄는데 오차가 늘었다fitting made the residual worsekhớp làm phần dư tệ hơn커밋된 잔차 파일에서 재투영 오차 중앙값이 18.89 → 19.60픽셀로 올라간다(일치 비율은 0.59 → 0.64로 오른다). 페이지에 적힌 「38.2 → 30.3픽셀」은 다른 모집단이다. 그리고 SAM 3 검출기는 가로 보정을 0.343 → 0.845 m로 늘렸다 — 판정되지 않은 채 남아 있다the committed residual file shows median reprojection error rising 18.89 → 19.60 px (while the matched share does rise, 0.59 → 0.64). The page’s "38.2 → 30.3 px" is a different population. And the SAM 3 detector increased the lateral correction 0.343 → 0.845 m — left unadjudicatedtệp phần dư đã commit cho thấy sai số chiếu lại trung vị tăng 18.89 → 19.60 px (tỷ lệ khớp có tăng 0.59 → 0.64). ‘38.2 → 30.3 px’ trên trang là quần thể khác. Bộ phát hiện SAM 3 còn tăng hiệu chỉnh ngang 0.343 → 0.845 m — chưa đối chiếu
출하된 뷰어가 체리피킹이다the shipped viewer is cherry-pickedtrình xem đã phát hành chọn mẫu có lợi16편짜리 뷰어는 프레임의 80%에서 ≥2차선을 보여 주는데 코퍼스 평균은 41%다. 데모로 쓰기 전에 알고 있을 것the 16-clip viewer shows ≥2 lanes on 80% of frames against a corpus mean of 41%. Know this before demoing ittrình xem 16 video cho thấy ≥2 làn ở 80% khung so với trung bình toàn dữ liệu 41%. Biết điều này trước khi demo

✅ 코드 cv-processing은 11커밋(2026-07-27 → 09-09)으로 진짜 이력이 있고, 그 커밋 본문이 세 레포 통틀어 가장 좋은 증거다 — 분모가 붙은 전후 비교표가 그대로 들어 있다. hd-map과 lane-detection은 커밋 하나짜리 스냅샷이라 날짜는 파일 내용에서 왔다(hd-map 2026-08-26·27, lane-detection 2026-08-25). ⚠️ 지금 감사할 수 없는 것: lane-detection의 체크포인트가 없고(스크립트 다섯 개가 요구한다), 벤더 디렉터리 다섯 개가 비어 있으며, 분석 스크립트의 출력이 저장된 적이 없다. hd-map은 README도 .gitignore도 이력도 없고, 핵심 그림 약 18장에 생성 스크립트가 없다. cv-processing은 work/가 gitignore라 클립별 산출물이 하나도 없다 — 모든 수치가 README 표와 커밋 본문에서 온다.

✅ code cv-processing has real history — 11 commits, 2026-07-27 → 09-09 — and its commit bodies are the best evidence in all three repos, carrying full before/after tables with denominators. hd-map and lane-detection are single-commit snapshots, dated from file contents (hd-map 2026-08-26/27, lane-detection 2026-08-25). ⚠️ Not auditable today: lane-detection’s checkpoint is absent (five scripts need it), all five vendored directories are empty, and the analysis scripts’ output was never saved. hd-map has no README, no .gitignore and no history, and about 18 of its key figures have no generating script committed. cv-processing gitignores work/, so no per-clip output exists at all — every number comes from README tables and commit bodies.

✅ mã nguồn cv-processing có lịch sử thật — 11 commit, 2026-07-27 → 09-09 — nội dung commit là bằng chứng tốt nhất trong cả ba kho, có bảng trước/sau với mẫu số. hd-map và lane-detection là snapshot một commit, ngày lấy từ nội dung tệp (hd-map 2026-08-26/27, lane-detection 2026-08-25). ⚠️ Hiện không audit được: checkpoint lane-detection thiếu (năm script cần), năm thư mục tích hợp rỗng, output script phân tích chưa từng lưu. hd-map không README, không .gitignore, không lịch sử; khoảng 18 số then chốt không có script tạo đã commit. cv-processing gitignore work/, nên không có output theo video — mọi số lấy từ bảng README và nội dung commit.

9.11지각 리서치 16편 — 각각이 실제로 내린 결론 · The 16 perception memos, and what each actually concluded16 bản ghi nhớ nhận thức, mỗi bản thực sự kết luận gì

new-knia/docs에 1.5 MB, 33편이 있다 — 리서치 16편 · 감사 5편 · 제안 2편 · 그리고 설계·보정·파이프라인. 이 문서가 지금까지 「리서치 17편」이라고만 적고 열어 보지 않은 것들이다. 전부 「만들 수 있는가」를 슬롯 단위로 판정하고, 코드를 수정하지 않는다고 스스로 선언한다.

new-knia/docs holds 1.5 MB across 33 documents — 17 research memos, 5 audits, 2 proposals, plus design, calibration and pipeline. Until now this document only counted them. Each judges feasibility slot by slot, and each declares that it changes no code.

new-knia/docs có 1.5 MB trong 33 tài liệu — 17 memo nghiên cứu, 5 kiểm tra, 2 đề xuất, cùng thiết kế, calibration và quy trình. Đến nay tài liệu này chỉ đếm chúng. Mỗi bản đánh giá khả thi từng trường, tuyên bố không đổi mã nguồn.

메모memomemo그 메모가 내린 결론what it concludedkết luận thực tế
research-trackingP1의 대부분은 미터가 필요 없다 — 차로 기준 비율·개수라 차로폭 오차가 상쇄된다. 진짜 연구 문제는 t_init(기동 시작 시점) 하나이고 어디에서도 풀려 있지 않다Most of P1 needs no metric scale — they are ratios and counts against the lane, so the lane-width error cancels. The one genuine research problem is t_init, when a manoeuvre begins, and it is unsolved anywherePhần lớn P1 không cần tỷ lệ mét — là tỷ lệ và số đếm theo làn, nên sai số bề rộng làn triệt tiêu. Bài toán nghiên cứu thật duy nhất là t_init, thời điểm bắt đầu thao tác; chưa đâu giải được
research-lane-markings기하(선이 어디 있나)는 성숙했고 속성(무슨 선인가)은 아키텍처가 아니라 라벨 문제다. ⚠️ 메모가 이틀 뒤 스스로를 정정한다 — 안전지대는 벤치마크가 없다고 썼으나 VPGNet이 한국 도로에서 6,031 인스턴스를 라벨한다The geometry is mature; the attributes are a labelling problem, not an architecture problem. ⚠️ The memo corrects itself two days later: it had said safety zones have no benchmark, but VPGNet labels 6,031 instances of them on Korean roadsHình học đã trưởng thành; thuộc tính là bài toán gán nhãn, không kiến trúc. ⚠️ Memo tự sửa hai ngày sau: từng nói vùng an toàn không benchmark, nhưng VPGNet gán 6,031 thể hiện trên đường Hàn Quốc
research-segmentation⭐ 의미 분할은 in_shoulder를 풀지 못한다 — 모델을 바꿔도 안 된다. 한국의 갓길 경계는 도색선이고 선 양쪽이 같은 아스팔트다. 픽셀 외형으로 가르는 장치에게 가를 외형 차이가 없다 — 이것은 차선 검출기의 관할이다⭐ Semantic segmentation cannot solve in_shoulder, and no change of model fixes it. A Korean shoulder boundary is a painted line, and the asphalt is identical on both sides. For something that separates classes by pixel appearance there is no appearance difference to find — it belongs to the lane detector⭐ Phân đoạn ngữ nghĩa không giải được in_shoulder, đổi mô hình cũng không sửa. Biên lề đường Hàn Quốc là vạch sơn, nhựa đường hai bên giống nhau. Phương pháp phân lớp theo ngoại hình pixel không có khác biệt ngoại hình để tìm — việc này thuộc bộ phát hiện làn
research-flow-depth광류는 산다. 깊이는 조건부로 산다. 둘 다 사는 이유가 브리프의 가정과 다르다. 광류의 값어치는 속도가 아니라 도색 없이 노면 기준을 주는 것이고, 깊이의 값어치는 슬롯을 채우는 것이 아니라 λ를 바깥에서 검증하는 것이다Optical flow is worth having; depth is worth having conditionally — and neither for the reason the brief assumed. Flow’s value is not measuring speed but giving a road reference without paint; depth’s is not filling a slot but validating λ from outsideLuồng quang học đáng có; độ sâu đáng có với điều kiện — đều khác lý do đề bài giả định. Giá trị flow không phải đo tốc độ mà tạo tham chiếu mặt đường không cần vạch; độ sâu không điền trường mà xác nhận λ từ bên ngoài
research-kinematics-stop-start된다 — 되는 이유가 다르다. 정지 판정은 스케일 문제가 아니다. 상대차 접지점과 노면을 같은 좌표에서 비교하면 f와 h가 정확히 소거된다 — 필요한 것은 절대 스케일이 아니라 노면이라는 기준점 하나Feasible — for a different reason. Deciding "stopped" is not a scale problem: compare the other car’s contact point against the road surface in one coordinate frame and f and h cancel exactly. What is needed is not absolute scale but a single reference, the roadKhả thi — vì lý do khác. Xác định ‘đứng yên’ không phải vấn đề tỷ lệ mét: so điểm tiếp xúc xe kia với mặt đường trong cùng hệ tọa độ, f và h triệt tiêu chính xác. Cần một tham chiếu chung: mặt đường, không phải tỷ lệ tuyệt đối
research-placement-geometry선후행은 거의 공짜가 맞다 — 이유가 다르다. 싸게 만드는 것은 깊이 추정이 아니라 「행 순서 = 깊이 순서」라는 사영기하 항등식이고, 차로폭 추정이 33% 무너진 프레임에서도 선후행 판정은 멀쩡하다Lead/follow really is nearly free — again for a different reason. What makes it cheap is not depth estimation but the projective identity that row order is depth order, and it survives in frames where the lane-width estimate has collapsed 33%Trước/sau gần như miễn phí — cũng vì lý do khác. Rẻ không nhờ ước lượng độ sâu, mà đồng nhất thức xạ ảnh: thứ tự hàng là thứ tự sâu, vẫn đúng khi ước lượng bề rộng làn sụt 33%
research-world-trajectory⭐ 필요한 고정 좌표계는 세계 좌표계가 아니라 도로 좌표계이고 훨씬 싸다. 「같은 방향 진행차량」 계열은 두 차를 같은 차도에 못 박으므로 19/23 도표에서 도로 좌표계가 항상 존재하고, 세계 좌표계가 유일한 답인 도표는 2개뿐⭐ The fixed frame actually required is the road frame, not a world frame, and it is far cheaper. The same-direction family pins both cars to one carriageway, so a road frame always exists on 19 of 23 charts, and a world frame is the only answer on just 2⭐ Khung cố định cần là khung đường, không phải khung thế giới, rẻ hơn nhiều. Nhóm cùng hướng ghim cả hai xe vào một phần đường, nên khung đường luôn có ở 19/23 biểu đồ; chỉ 2 biểu đồ bắt buộc khung thế giới
research-light-state병목은 모델이 아니라 관측 커버리지다. 등화가 켜졌는지는 대체로 풀려 있고(F1 87~97), 법정 거리 기준으로 「언제 켰는지」는 카메라가 그 차를 조작 이전부터 보고 있었느냐에 걸린다 → 분류기보다 관측 가능성 게이트를 먼저The bottleneck is observation coverage, not the model. Whether a lamp is on is largely solved (F1 87–97); when it was switched on, to a legal standard, depends on whether the camera was watching that car before the action → build the observability gate before the classifierNút thắt là độ bao phủ quan sát, không mô hình. Đèn đang bật phần lớn đã giải (F1 87–97); bật khi nào theo chuẩn pháp lý phụ thuộc camera đã nhìn xe trước hành động chưa → xây cổng khả năng quan sát trước bộ phân lớp
research-scene-conditions세 슬롯 중 하나는 분류 문제가 아니고(야간 — 시각 계산), 하나는 슬롯 모양이 틀렸고(날씨 — 조문의 다섯 요건 중 넷이 지면 상태나 정량인데 하늘을 보는 분류기는 그중 아무것도 내놓지 않는다), 하나는 원리적으로 측정 불가(유리 암도)Of three slots, one is not a classification problem (night — it is a time calculation), one has the wrong shape (weather — four of the clause’s five conditions are ground state or quantities, and a sky classifier emits none of them), and one is unmeasurable in principle (window tint)Ba trường: một không phải phân lớp (ban đêm — tính thời gian), một sai cấu trúc (thời tiết — bốn trong năm điều kiện điều khoản là trạng thái mặt đất hoặc đại lượng, phân lớp bầu trời không xuất gì trong đó), một không thể đo về nguyên tắc (độ tối kính)
research-scene-objects다섯 슬롯은 「COCO에 없다」는 하나의 문제가 아니라 난이도가 다른 다섯이다. 🚨 부수 발견: 배포 중인 rtdetr_r50vd_coco_o365의 클래스 헤드는 O365의 365가 아니라 COCO 80이다 — 직접 확인The five slots are not one "not in COCO" problem but five of differing difficulty. 🚨 Incidental finding: the deployed rtdetr_r50vd_coco_o365 has an 80-class COCO head, not O365’s 365 — verified directlyNăm trường không cùng một bài ‘không trong COCO’, mà là năm mức khó khác. 🚨 Phát hiện bên lề: rtdetr_r50vd_coco_o365 đã triển khai có đầu COCO 80 lớp, không phải O365 365 lớp — xác minh trực tiếp
research-damage-debris차량 파손 검출 문헌은 대시캠 거리에서 성립하지 않는다 — 추측이 아니라 그 문헌이 쓰는 「작은 객체」의 정의가 한 변 128 화소이기 때문이다. 노면 이상물은 닫힌 어휘가 아니라 이상 검출이 맞고, 도메인을 옮기면 AuPRC가 2.13까지 무너진다The vehicle-damage literature does not hold at dashcam distance — not a guess: its own definition of a "small object" is 128 pixels on a side. Road debris is anomaly segmentation, not closed-vocabulary classification, and AuPRC collapses to 2.13 across a domain shiftNghiên cứu hư hại xe không còn đúng ở khoảng cách camera hành trình — không đoán: chính họ định nghĩa ‘vật nhỏ’ có cạnh 128 pixel. Mảnh vỡ đường là phân đoạn bất thường, không phải phân lớp từ vựng đóng; AuPRC sụt còn 2.13 khi đổi miền
research-crossing-events앞지르기는 법이 이미 형식화해 두었고 노면표시 없이 성립한다. 중앙선 횡단은 대향류 역추정이 아니라 「가장 왼쪽 차로에서 더 왼쪽으로」가 1순위. 그러나 네 슬롯 전부의 상한이 인지가 아니라 차선 적합에서 정해진다Overtaking is already formalised in law and holds without road markings. A centre-line crossing is best caught as "from the leftmost lane, further left", not by inferring oncoming flow. But the ceiling on all four slots is set by lane fitting, not by perceptionVượt xe đã được luật hình thức hóa, dùng được không có vạch đường. Cắt vạch giữa tốt nhất bắt theo ‘từ làn ngoài cùng trái, đi tiếp sang trái’, thay vì suy dòng ngược chiều. Nhưng trần cả bốn trường do khớp làn đặt, không phải nhận thức
research-dangerous-driving질문이 「만들 수 있는가」가 아니라 「만들어도 되는가」다 — 네 슬롯 전부 중대·현저한 과실에 걸리고 잘못된 긍정이 +20을 움직인다. 결론: 셋은 v1에서 UNKNOWN이 정답The question is not "can it be built" but "should it be" — all four feed gross-negligence rows, where a false positive moves +20. Verdict: for three of them UNKNOWN is the correct v1 outputCâu hỏi không phải ‘xây được không’ mà là ‘có nên không’ — cả bốn đi vào hàng lỗi nghiêm trọng, dương tính giả làm tăng +20. Kết luận: ba trường nên trả UNKNOWN ở v1
research-document-paths🗣 교통사고사실확인원에는 법규위반이 적히지 않는다. 조문 단위 위반이 기재되는 유일한 공식 문서는 실황조사서이고 수사서류라 보험사가 받을 수 없다 — 「확인원 떼오세요」는 구조적으로 헛수고🗣 The traffic-accident certificate does not record statutory violations. The only official document that records them clause by clause is the police scene report, and as investigative material an insurer cannot obtain it — so "ask them for the certificate" is structurally futile🗣 Giấy xác nhận tai nạn giao thông không ghi vi phạm luật. Tài liệu chính thức duy nhất ghi từng điều khoản là biên bản hiện trường cảnh sát; thuộc tài liệu điều tra, bảo hiểm không lấy được — ‘xin giấy xác nhận’ vô ích về cấu trúc
research-korean-datasets차선의 종류·색은 이미 라벨된 한국 데이터셋이 있다(AI Hub, 폴리라인 1,091만 개). 그러나 복선 값이 스키마에 없고, 갓길선은 어디에도 없으며, 전부 신청 관문 뒤에 있어 직접 받을 수 없다Lane type and colour are already labelled in a Korean dataset (AI Hub, 10.91 million polylines). But double lines are absent from the schema, shoulder lines appear in none of them, and all of it sits behind an application gate we cannot pull directlyLoại và màu làn đã có nhãn trong bộ dữ liệu Hàn Quốc (AI Hub, 10.91 triệu polyline). Nhưng schema thiếu vạch đôi, không bộ nào có vạch lề, tất cả cần đăng ký quyền mà ta không kéo trực tiếp được
research-crash-datasets충돌 순간을 프레임 단위로 라벨한 공개 데이터셋은 사실상 둘뿐(Nexar · MM-AU/CAP-DATA). 나머지는 예측(anticipation)이 목적이라 「사고가 불가피해진 시점」을 찍는다 — 충돌 순간이 아니다Only two public datasets label the moment of collision frame by frame (Nexar, MM-AU/CAP-DATA). The rest target anticipation and mark the point at which the accident became unavoidable — which is not the moment of impactChỉ hai bộ công khai gán thời điểm va chạm từng khung (Nexar, MM-AU/CAP-DATA). Phần còn lại nhắm dự đoán, đánh dấu lúc tai nạn không còn tránh được — khác thời điểm va chạm

그리고 감사 둘 — 차선 적합과 검출기 교체And two audits — lane fitting, and swapping the detectorHai kiểm tra — khớp làn và đổi bộ phát hiện

audit-lane-fit-failures⭐ 「검출기가 한국 도로에서 약하다」가 아니다. 브랜치 클립 369건 중 167건(45.3%)이 차선 적합 부족으로 죽는데, 그중 44%는 우리 코드 두 곳(fit_lane_model_from_instances의 위생 게이트 구간과 compute_roi의 ROI 잘라내기)만 고치면 기준을 넘긴다. 원인은 모델이 아니라 우리 게이트였다⭐ It is not "the detector is weak on Korean roads". 167 of 369 branch clips (45.3%) die for want of a lane fit, and 44% of those clear the bar by fixing two places in our own code — the sanity gate’s inspection band in fit_lane_model_from_instances and the ROI crop in compute_roi. The cause was our gate, not the model⭐ Không phải ‘bộ phát hiện yếu trên đường Hàn Quốc’. 167/369 video nhánh (45.3%) chết vì không khớp làn; 44% số đó qua được khi sửa hai chỗ trong mã chúng ta — dải kiểm của cổng sanity trong fit_lane_model_from_instances, crop ROI trong compute_roi. Nguyên nhân là cổng, không mô hình
proposal-lane-gate게이트를 지평선 기준으로 바꾸면 회귀 0으로 96클립이 살아나지만 옳은 것은 57%뿐이고 도색 없는 클립 5건에 코리도를 지어낸다. 픽셀 한 줄을 더 보면(코리도가 실제 도색 위인지) 정확도 80%, 지어내기 0건. 커버리지 54.7% → 69.9%Re-deriving the gate from the horizon revives 96 clips with zero regressions — but only 57% of them are right, and it invents corridors on 5 clips that have no paint at all. Checking one more row of pixels — whether the corridor actually sits on paint — lifts it to 80% with zero inventions. Coverage 54.7% → 69.9%Suy lại cổng từ chân trời cứu 96 video, không thoái lui — nhưng chỉ 57% đúng; tạo hành lang ở 5 video hoàn toàn không có vạch. Kiểm thêm một hàng pixel — hành lang có nằm trên vạch không — tăng lên 80%, không tạo giả. Bao phủ 54.7% → 69.9%
audit-detector-swap⭐ 대조군이 있었기에 결론이 뒤집힌 사례. 체크포인트를 바꾸면 100건 중 46건에서 결과가 달라진다 — 비싸 보인다. 그런데 같은 체크포인트로 프레임을 33 ms 어긋나게 표집한 대조군에서도 45건이 달라진다. 즉 요동은 가중치가 아니라 find_counterparty가 원래 그만큼 불안정한 것이고, 집계는 74/21/5 → 75/20/5로 그대로다⭐ A case where the control arm reversed the conclusion. Swapping the checkpoint changes the result on 46 of 100 clips — which looks expensive. But re-sampling frames 33 ms apart with the same checkpoint changes 45. So the variation is not the weights; find_counterparty is simply that unstable, and the aggregate holds at 74/21/5 → 75/20/5⭐ Đối chứng đảo kết luận. Đổi checkpoint đổi kết quả 46/100 video — tưởng đắt. Nhưng lấy mẫu khung cách 33 ms với cùng checkpoint đã đổi 45. Vì vậy biến động không do trọng số; find_counterparty đơn giản bất ổn như vậy; tổng hợp vẫn 74/21/5 → 75/20/5

⭐ 이 셋이 같은 교훈을 가리킨다. 모델을 바꾸기 전에 자기 코드와 대조군을 먼저 의심하라 — 차선 실패의 44%는 우리 게이트였고, 검출기 교체 비용은 측정해 보니 잡음이었다. §9.5의 D-FINE-L 사례(「검출기를 좋게 만들면 이 제품은 나빠진다」)가 같은 가족이다.

⭐ All three point at the same lesson: suspect your own code and build a control arm before you change the model. 44% of the lane failures were our gate, and the measured cost of swapping the detector turned out to be noise. The D-FINE-L finding in §9.5 — improving the detector makes this product worse — belongs to the same family.

⭐ Cả ba chỉ cùng bài học: nghi mã của mình, dựng đối chứng trước khi đổi mô hình. 44% lỗi làn do cổng, chi phí đo được khi đổi bộ phát hiện hóa ra là nhiễu. D-FINE-L ở §9.5 — bộ phát hiện tốt hơn làm sản phẩm tệ hơn — cùng nhóm vấn đề.