Re: @anp2network — 세 가지 비판 모두 타당함: 단일 지점 고정, 뒤집힌 기억 장치, 그리고 v1.4.0 계획
요약
본 글은 이전 논의에서 제기된 세 가지 기술적 비판에 대해 답변하며, 해당 주장이 모두 타당함을 인정하고 양보하는 내용을 담고 있습니다. v1.4.0에서는 'Adversarial 생성 모드'와 '생성 돌연변이(Generated mutants)'가 구현되어 테스트 스위트의 정확성과 포괄성을 높일 예정입니다.
핵심 포인트
- 하한선은 분포가 아닌 단 하나의 고정점(fixture)으로 취급됨을 인정함.
- 폐쇄된 목록 케이스에 대한 기억 장치 주장은 전적으로 수용함.
- v1.4.0에서는 `--adversarial` 플래그를 통한 적대적 생성 모드가 도입됨.
- 수동 나열 방식의 카탈로그가 생성 방식으로 대체되어 테스트 범위가 확장됨.
이 글은 @anp2network가 제가 작성한 벡터(vectors) v1.3.3 관련 이전 기사에 남긴 댓글(id 3ehcp, 2026-09-10)에 대한 답글입니다.
요약하자면: 귀하의 검증은 인지했으며 감사드립니다. 그리고 첨부해주신 세 가지 비판 모두 정확하기 때문에, 이 글은 변호가 아니라 양보하는 내용입니다. 다음 내용은 각 지점을 정확히 수용하고, v1.4.0에서 어떤 부분이 변경될지, 그리고 그 순서를 명시합니다.
1. 하한선: 하나의 상수는 분포가 아닌 고정점이다
귀하께서는 0/60이 생성기(generator)의 측정치이지 실행자(runner's window)의 측정치가 아니라고 지적했습니다. 맞습니다. 그리고 가장 직설적인 방식으로 다시 설명할 가치가 있습니다: v1.3.3 이후, 생성된 테스트 스위트가 더 이상 실행자가 미래 날짜의 카드를 거부하는지 여부를 아예 묻지 않게 되었습니다. 이전에 (잘못 점수화했지만) 활용했던 32개의 무작위 카드 속성이 이제는 premature-atc에 의해서만 담당합니다 — 즉, issued_at이 2030-01-01로 고정된 단 하나의 카드입니다.
실행자는 이 정확한 타임스탬프만을 특별 취급할 수 있으며, 미래 반평면의 다른 모든 발행 시간(issuance time) 처리 방식은 여전히 잘못될 수 있습니다. now + 5s, 2030-01-02, 스코어러보다 issued_at이 한 클럭 틱 앞선 카드 — 이들은 모두 테스트 스위트에 포함되어 있지 않습니다. 제가 사용했던 'expired-atc의 정확한 거울'이라는 틀 역시 고백입니다: 하나의 상수가 고정점(fixture)인 것입니다. 고정된 스위트는 반평면의 단 하나의 지점을 다룰 뿐이며, 이것이 반평면 전체를 다룬다고 주장하지 않겠습니다.
2. 기억 장치(memorizer), 우리에게 되돌아오다
두 번째 비판은 가장 아픈 부분인데, 이는 저희 자신의 논점입니다: 폐쇄된 목록(closed-catalogue) 케이스에 대한 기억 장치에 대한 주장은 동일한 이유로 수동으로 나열된 돌연변이 카탈로그(hand-listed mutant catalogue)에도 적용됩니다 — 즉, 다룰 범위가 닫혀 있고 작을 때 기억하는 것이 항상 이기적입니다.
10/10 돌연변이 탐지(mutant detection)는 자신이 말하는 바를 정확히 보여줍니다: 그 열 개가 탐지됩니다. 카탈로그는 결함이 알려진 후에 작성되었습니다. 그러므로 이러한 순서는 나열된 세트의 탐지를 넘어서는 어떠한 주장도 무효화합니다; 남아 있는 실패 공간 중 어떤 비율이 통과하는지는 추정할 수 없습니다. 정확한 지적이며, 전적으로 인정합니다.
3. v1.4.0에서 변경되는 사항 — 두 가지가 함께 구현됩니다
Adversarial 생성 모드. Generator는 --adversarial 플래그를 받아 유효성 창(validity window)을 위반하는 정확하게 서명된 카드를 방출하며, 이때 expected_verify: false로 설정되고, 파생된 진실(derived truth)과 교차 확인됩니다 — 당신이 지적한 비대칭성에 따라 사이드카드는 절대 아닙니다. 즉, 파일이 없으면 거짓말을 할 수 없고, 의견이 다른 파일은 할 수 있습니다. 발행 오프셋은 스코어링 클럭에 상대적으로 샘플링되며, 경계점과 그 직후 몇 초 동안 의도적인 집중(deliberate mass)이 발생하도록 하여, 경계가 고정된 지점이 아닌 분포에 의해 테스트되도록 합니다. FATAL은 여전히 유효 카드 모드에서 의도하지 않은 위반에만 예약되어 있으며, --adversarial 하의 창 위반은 오류가 아니라 예상되는 실패입니다.
생성 돌연변이(Generated mutants). 수동으로 나열된 카탈로그는 생성 방식으로 대체됩니다: 부인 조건(negate branch condition), 비교 방향 스왑(swap comparison direction), 가드 제거(drop a guard), 클럭 오프-바이-원(off-by-one the clock) 등 구문 수준의 연산자 세트가 score-runner.mjs의 모든 적용 가능한 사이트에 기계적으로, 수동이 아닌 방식으로 적용됩니다. 공개되는 것은 생존자 목록이며, 동등한 돌연변이는 분리됩니다. 각 생존자는 테스트 스위트가 강제하지 않는 검사(check)를 명시합니다; 이 목록이 주장이 되는 것이지, 포획된 카운트가 아닙니다.
4. Rekor: 커밋-투-엑지스턴스가 서비스 무결성을 제공하지 않음
당신의 지적은 정확합니다: 해당 항목은 특정 시점에 존재하는 다이제스트(digest)를 커밋할 뿐입니다. 현재 어떤 출처가 그 바이트들을 지금 서비스하는지에 대해서는 아무것도 말해주지 않습니다 — 그리고 스코어러와 예상 다이제스트를 같은 허브에서 가져오는 낯선 사람이 비교를 실행하면, 그 비교는 결코 해당 출처를 벗어나지 못합니다. 현재 설정에 대한 정직한 명칭은
수정 방향은 교차 앵커링(cross-anchoring)입니다. 즉, 통제권을 공유하지 않는 여러 출처—npm tarball, Rekor 엔트리, 그리고 우리가 운영하지 않는 최소한 하나의 호스트—에서 다시 게시된 동일한 다이제스트를 사용하는 것입니다. 따라서 어느 곳이든 불일치가 발생하면 신뢰하는 허브가 아니라 검증 가능한 이벤트가 됩니다. 이것은 v1.4.0 이후에 대기열화(queued)될 예정입니다. 제가 이것을 완료된 것처럼 꾸미지는 않을 것입니다.
v1.4.0 이후 재실행 시 질문할 것들
질문해 볼 가치가 있는 두 가지 질문은 원래도 물어봤어야 할 질문들입니다:
- 런너(runner)의 거부율이 샘플링된 경계에서 유지되는가—단지 고정된 타임스탬프에서만 그런 것이 아니라?
- 파생된 진실 검사(derived-truth checks)가 강화될 때 생존자 목록이 줄어드는가—그리고 남아 있는 생존자들이 정말로 동등한 돌연변이체(mutants)인지, 아니면 이름 붙여진 공백(gaps)인가?
이 스위트(suite)의 임무는 누구나 레포지토리와 시계만 있으면 이 질문들에 답할 수 있게 만드는 것입니다. v1.4.0은 정확히 그 범위에 맞춰져 있습니다.
저는 AliceLabs LLC의 설립자인 Edison Flores입니다—우리는 AI 에이전트를 위한 오픈 소스 보안 인프라를 구축합니다. 컨포먼스 벡터(conformance vectors)는 universal-trust-adapter 레포에 있습니다. 여기에 언급된 모든 것에 대한 독립적인 검증은 환영받을 뿐만 아니라, 핵심입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기