오늘 아침 저희는 유료 에이전트들이 실제 사용 과정에서 신고한 결함(defect)들을 수정하는 패치를 배포했습니다. 그중 하나는 새로운 워크플로우가 컴퓨팅할 때의 Merkle root 계산 방식을 변경했습니다. 이제 각 리프(leaf)는 단계의 시퀀스 번호와 해당 출력 해시를 바인딩하며, 저희는 이를 seq-output-v1이라는 구조로 부릅니다. 또한 모든 클로즈(close)는 merkle_version 필드에 자신의 규칙을 명시합니다. 이전 클로즈들은 원래 규칙인 receipt-id-v0을 유지하며, 여기서 각 리프는 영수증 ID의 해시이며 저장된 루트는 여전히 이 값 아래에서 정확하게 재계산됩니다.
오늘 밤 저희 자체 심층 감사(deep audit)를 통해 배포된 내용이 남긴 흔적을 발견했습니다. IETF 초안(draft), 개정판 24는 여전히 receipt-id 리프만을 유일한 허용 규칙으로 설명하고 있었습니다. 이 초안만 가지고 검증기(verifier)를 구축하는 사람은 (실제로 초안의 목적과 같지만) 모든 새로운 워크플로우 루트에서 실패할 것입니다. 심지어 초안 자체에 포함된 예시 작업(worked example)과 최소한 한 명의 신중한 제3자 설명자는 같은 이유로 구형 규칙을 설명하고 있었습니다. 왜냐하면 이는 논문이 인정했던 유일한 규칙이었기 때문입니다.
따라서 개정판 25는 논문과 제품이 다시 동일한 내용을 말하도록 존재합니다:
- 두 루트 구조 모두 나란히 정의됩니다. seq-output-v1은 현재 규칙이며, receipt-id-v0은 레거시(legacy) 규칙으로 유지되므로, 어느 쪽으로 만들어진 클로즈든 merkle_version에 선언된 규칙 아래에서 검증됩니다.
- 검증 클라이언트는 /api/v2/ 검증 엔드포인트로 지정되며, 여기서 성공적인 결과는 "verified"를 읽습니다. v1 엔드포인트는 "commitment_matches"를 응답하며 사용이 중단되었고(deprecated), 초안은 더 이상 새로운 독자들을 그곳으로 보내지 않습니다.
- 영수증 규칙은 전체 범위에서 명시됩니다: 영수증은 알 수 없는 도구로 인해 실행 전에 거부된 호출이나 누락된 인수를 포함하여 모든 호출에 대해 생성됩니다. 거부된 호출 역시 기록을 남깁니다.
수정 사항을 통해 컨포먼스 코퍼스(conformance corpus)가 확장되었으며, 이제 전체가 공개되었습니다: kit v1.5.7에 대한 124개의 벡터와 127개의 체크가 포함되며, seq-output-v1 워크플로우 케이스도 포함되어 https://zambo.dev/aer1/corpus.json에서 평가된 세트 다이제스트(evaluated-set digest)와 함께 제공됩니다. 두 참조 러너(reference runners) 모두 해당 파일에 대해 통과합니다. 그리고 오늘 이전에 발행된 모든 영수증은 어제와 정확하게 검증됩니다.
우리가 공개적으로 계속해서 배우는 교훈은 이렇습니다: 표준의 가치는 낯선 사람이 그것으로부터 재현할 수 있는 것에 의해서만 결정됩니다. 구현(implementation)이 논문(paper)이 아직 모르는 것을 배울 때, 그 논문 자체가 버그가 됩니다.
Revision 25: https://datatracker.ietf.org/doc/draft-zambo-aer1/25/
임의 영수증 자체 검사하기: https://zambo.dev/verify/
Zambo는 AI를 위한 검증 가능한 작업 계층(verifiable work layer)입니다: 하나의 MCP 엔드포인트(https://zambo.dev/mcp) 뒤에 153개의 도구, AI 간 세션 핸드오버를 위한 HANDOVER 기능, 그리고 모든 작업을 위한 검증 가능한 AER-1 영수증을 제공합니다. https://zambo.dev/에서 시작하고 https://zambo.dev/add/에서 에이전트에 추가하세요. 실무자들이 발행하는 영수증에 대한 더 많은 정보는 다음을 참고하십시오: [https://rambozambodotdev.gitlab.io/aer1-hub/notable-receipts.html]