손님 작업장 결과 다운로드 안내
현재 상태
손님 작업장의 공개 접수와 결과 다운로드는 아직 꺼져 있다. 아래 내용은 공개 전에 구현하고 검증한 download-only 결과 계약이다. 등록 폴더나 GitHub로 쓰는 기능은 제공하지 않는다.
결과 archive
출판이 성공하면 manifest가 선언한 HTML과 참조 asset, =manifest.json=만 ZIP에 포함한다. 입력 archive, 무시된 파일, 임시 파일과 제한 log는 포함하지 않는다. 각 파일의 SHA-256이 manifest와 다르면 결과를 만들지 않는다.
ZIP은 파일명을 NFC와 / 구분자로 정규화하고 UTF-8 flag를 사용한다. 경로는 byte 순서로
정렬하며 모든 파일을 uncompressed, DOS 1980-01-01 00:00:00, Unix regular 0644, 빈 extra/comment로
기록한다. 같은 closure를 두 번 만들었을 때 ZIP byte와 SHA-256이 같아야 ready가 된다.
다운로드와 재시도
결과에는 별도의 download capability가 필요하다. Capability는 URL에 넣지 않고 요청 header로 보낸다. 처음 요청과 모든 Range 재시도에서 capability, 보안 세대, 결과·artifact 만료와 transfer lease를 다시 확인한다. 잘못되거나 폐기·만료된 capability로는 일부 byte도 받을 수 없다.
Transfer lease는 첫 다운로드 때 최대 5분의 hard deadline으로 정하며 Range 요청으로 연장되지 않는다. 결과 보존 기한이 먼저 오면 그 시각에 종료된다. Capability를 잃어버린 경우 요청 ID나 접속 주소만으로 복구하거나 새 capability를 발급하지 않는다.
브라우저 안전 경계
결과는 고정 이름 haidox-workspace-result.zip=의 attachment로만 제공한다. 생성된 HTML을 Portal
origin에서 inline preview하지 않는다. 응답은 =application/zip, no-store, =nosniff=와 sandbox
정책을 사용하며 내부 창고 경로는 Nginx internal location 밖에서 직접 열 수 없다.
만료되거나 삭제가 시작된 결과는 새 다운로드와 Range를 모두 거부하고 정해진 보존 정책에 따라 자동으로 정리한다.