Invenqor v0.2.27
Invenqor Server·Agent v0.2.27 릴리즈 노트
릴리즈 일자: 2026-09-08
호환 Agent: v0.2.27 (Linux·Windows)
이번 릴리즈는 결함 하나를 고칩니다. 자리는 CSV 내보내기(자산 목록·감사 로그)
이고, 증상은 이전 릴리즈들과 같은 종류 — 오류 없이 받아들여진 뒤 조용히 짧아진
결과 — 입니다. 다만 이번에는 그 결과가 화면이 아니라 파일로 내려가 콘솔
바깥에서 읽힙니다.
1. 행 수 한도에 걸린 CSV가 완전한 파일처럼 보였습니다
두 내보내기는 정해진 행 수까지만 읽습니다 — 자산은 기본 10,000행, 감사 로그는
기본 5,000행입니다. 그런데 한도에 닿아 잘린 결과도 전부인 것처럼 그대로
기록했습니다. 12,000대가 있는 인벤토리를 내보내면 invenqor-assets.csv라는
이름의 10,000행짜리 파일이 내려왔고, 파일 안에도, 파일 이름에도, 응답에도
나머지가 빠졌다는 표시가 없었습니다.
이것은 거절보다 나쁩니다. CSV를 받는 이유가 바로 콘솔 바깥에서 읽기 위해서
이기 때문입니다 — 인수인계 문서, 티켓 첨부, 감사인에게 내는 증빙. 그 자리에는
대조할 원본이 남아 있지 않고, 받는 사람에게는 제품이 스스로 내려 준 파일을
의심할 이유가 없습니다.
이제 두 내보내기 모두 한도보다 한 행 더 읽습니다. 그래서 결과가 한도에 정확히
맞아떨어진 경우는 여전히 완전한 것으로 보고되고, 실제로 잘린 경우에만 세 가지로
표시합니다.
- 파일 이름. 잘린 추출물은
invenqor-assets-partial.csv,
invenqor-audit-partial.csv로 내려갑니다. 이름은 다운로드 뒤까지 남는 부분
입니다 — 브라우저가 그 이름으로 저장하고 스프레드시트가 제목 표시줄에 그대로
보여 주므로, 응답 헤더가 사라진 한참 뒤에도 "일부"라는 사실이 따라다닙니다. - 응답 헤더. API로 받는 쪽에는
X-Invenqor-Truncated: true와, 무엇에 걸렸는지
알려 주는X-Invenqor-Row-Limit이 함께 갑니다. 두 헤더는 잘렸을 때만
붙으므로, 헤더가 없다는 것은 완전하다는 뜻입니다. - 감사 기록. 감사 로그 내보내기는 자신의 행위를
audit.export로 남기는데, 그
기록에 이번 추출물이 완전했는지(truncated)를 함께 적습니다. 나중에 그 증빙이
어떤 상태로 나갔는지 로그만으로 확인할 수 있습니다.
한도 자체는 limit 질의 파라미터로 조정할 수 있고(자산 최대 100,000, 감사 최대
50,000), 이 파라미터와 두 응답 헤더를 openapi.yaml의 두 CSV 엔드포인트에
기술했습니다.
검증
- 잘림 판정을 양쪽 경계에서 고정했습니다. 한도보다 많은 결과는 잘린 것으로,
한도에 정확히 맞는 결과는 완전한 것으로 보고되는지를 두 엔드포인트 각각에서
확인합니다. 후자가 이 수정의 핵심 — 한 행 더 읽는 이유 — 입니다. - 테스트가 헛돌지 않는지 확인했습니다.
truncated계산을false로 바꿔
테스트가 실패하는 것을 본 뒤 되돌렸습니다. - 두 저장 모드에서.
go test ./...이 SQLite fallback과
scripts/test-postgres.sh의 실제 PostgreSQL 양쪽에서 전 패키지를 통과하고,
go vet·go build·gofmt가 통과합니다. 공개 계약은 CI와 같은
@redocly/cli@2.47.0 lint로 검증했습니다. - Agent(Rust)와 콘솔 코드는 이번 릴리즈에서 바뀌지 않았습니다.
호환성
- 데이터베이스 마이그레이션이 없습니다.
- 동작이 달라집니다. 한도에 걸린 CSV의 파일 이름이
-partial이 붙은
형태로 바뀝니다. 내려받은 파일 이름을 고정된 문자열로 기대하는 자동화가 있다면
두 이름을 모두 처리하거나,X-Invenqor-Truncated헤더를 보십시오. 잘리지 않은
추출물의 이름은 그대로입니다. - 응답 형식은 그대로입니다. CSV의 열과 순서, BOM, 상태 코드는 바뀌지 않았고,
새 헤더는 잘렸을 때만 추가됩니다. audit.export감사 기록의 상세에truncated항목이 추가됩니다. 기존 항목은
그대로입니다.