Releases

  • LINKS 0.22 — 실행 준비 단축·원본 세이브 제외·UI 정리·ARCA 0.1.17

    LINKS 0.22

    이전 릴리스 0.21(a5688d6b34)부터 최종 소스 a96fbde7d0까지의 전체 변경 사항입니다. 루트 패키지는 0.22.0, ARCA는 exact 0.1.16 → 0.1.17입니다. 기준 schema는 0.21과 같고, 운영 Compose·배포 wrapper·package coordinator script가 바뀌었습니다.

    업그레이드 주의 — DB 초기화는 필요 없지만, 실행 build·준비본·coordinator를 함께 갱신합니다

    기준 schema는 바뀌지 않았습니다(743448f6d2891794e5ba98834d9f5055c3f5c58e22276ed701de36650f4b2b07 유지). 0.21 DB·사용자·패스키·세이브·backup을 그대로 사용하며 reset.sh를 실행하지 않습니다.

    1. ARCA Builder digest 변경: ARCA 0.1.17의 native runtime은 0.1.16과 같지만 Builder OCI digest와 runtime ZIP identity(release manifest hash)가 달라집니다. 배포 뒤 VX/VX Ace 기존 active build는 로그인 사용자의 실행 준비 절차로 새 generation을 만듭니다. 실행 중 session 종료나 save 삭제로 업그레이드하지 않습니다.
    2. 봉인 입력 v2·scan shape v3: 원본 세이브 제외로 봉인 입력 형식이 web-static-sealed-input-v2·rgss-wasm-sealed-input-v2가 되어 기존 준비본은 재사용되지 않고 다음 준비 때 새로 봉인됩니다. 기존 active build는 자동 재게시하지 않으므로, 원본 폴더의 세이브가 들어간 기존 build는 관리자 화면에서 재빌드합니다(찾는 절차는 운영 가이드 Schema 변경과 DB 초기화). scan shape가 installation-shape-v3로 바뀌므로 배포 뒤 모든 root의 scan이 한 번 성공한 다음에 설치본 폴더를 옮겨야 재연결 후보가 나옵니다.
    3. coordinator claim 형식 변경(2 → 4 필드): host package coordinator script와 package worker image의 claim 형식이 달라 혼용하면 첫 작업에서 멈춥니다. 운영 배포는 coordinator를 정지하고 같은 0.22 태그의 update.sh·ops/runtime-package-coordinator.sh·compose.yaml을 아래 해시로 대조해 함께 교체한 뒤 sh update.sh --defer-package-readiness로 image를 갱신하고, 새 coordinator를 시작한 다음 출력된 runtime-readiness-command.js --package가 종료 코드 0이어야 완료입니다(운영 가이드 NAS ARCA package coordinator).

    0.21의 ARCA 0.1.16 pin은 registry가 최신 버전만 보관해 cache 없는 build의 frozen install이 ERR_PNPM_TARBALL_URL_MISMATCH로 실패하므로 소스 build는 0.22를 사용합니다. 원본 game library는 읽기 전용으로 유지하며 변경하지 않습니다. 이번 게시 작업에서 개발·운영 DB 초기화나 NAS 배포는 실행하지 않았습니다.

    실행 준비 단축

    • RGSS(VX/VX Ace)와 MV/MZ가 원본 파일 목록 확인을 공용 구현으로 하고, 원본 hash 읽기와 봉인 사본 복사·검증을 LINKS_RUNTIME_SOURCE_READ_CONCURRENCY(1·2·4, 기본 1)로 동시에 처리합니다. 개발(Windows bind mount)은 4로 측정했고 운영은 NAS I/O 측정 전까지 1을 유지합니다.
    • 원본 나이 판정: 목록의 모든 파일·디렉터리의 변경 시각(mtime·ctime)이 안정화 창과 여유 시간보다 오래되었으면 실행 준비의 안정화 대기와 두 번째 목록을 생략합니다. 기본으로 켜져 있고 LINKS_RUNTIME_QUIESCENCE_SKIP_IF_AGED=false로 끕니다(여유 LINKS_RUNTIME_QUIESCENCE_AGE_MARGIN_SECONDS, 기본 30초). 판정 근거는 checkpoint에 보존합니다. scan 안정화(LINKS_SCAN_QUIESCENCE_SECONDS)는 그대로입니다.
    • VX publish의 봉인 입력·release set·portable archive 중복 재검증과 MV/MZ build의 봉인 입력 중복 전체 hash를 identity 대조와 작성 중 파일별 hash 한 번으로 줄입니다. 봉인 사본 게시 확인은 전체 재hash 대신 partial identity 대조입니다.
    • package coordinator는 대기 중 2초마다 claim하고 작업 중 3초마다 heartbeat합니다. 시도마다 실행하던 ready는 claim이 검증한 release·Builder digest로 대체하며, 실행 준비 checkpoint는 시작 직후와 단계 위치 변경 뒤 약 1초 안에 저장합니다(1초 안에 끝난 작업의 마지막 변경 포함).
    • 리뷰 수정: MV/MZ 복사 fsync와 공간 부족 분류, 동시성 0·NaN 거부, 봉인 identity의 발급 출처 결속, portable artifact CAS 봉인을 no-follow descriptor의 fchmod로 처리합니다.
    • 합성 benchmark(개발 서버와 같은 Windows Docker 읽기 전용 bind mount, 합성 VX Ace 1,717개·약 215 MB와 MZ 3,626개·약 330 MB, claim·Builder·게시·후속 build 제외): stage 소계가 변경 전 VX 131.8초·MZ 87.6초에서 동시성 4·나이 판정 켬일 때 10.0초·12.8초가 되었습니다. 실제 표본 전체 준비 시간으로 환산하지 않습니다.

    실행 준비·불러오기 화면

    • 실행 준비 단계를 관측 가능한 단위로 줄여 VX/VX Ace 6단계, MV/MZ 5단계로 표시합니다. 조건부·짧은 처리는 보조 문구로 흡수하며, 같은 attempt 안에서 번호가 줄지 않는 규칙과 식별할 수 없는 상태에 번호를 붙이지 않는 규칙은 유지합니다.
    • 용량 줄은 무결성 검사 단계부터 표시합니다.
    • 게임 불러오기 화면: MV/MZ는 서버가 정의하는 전송 대상 총량이 없으므로 분모를 만들지 않고 현재 요청 파일 읽기 · N 불러옴과 미정 막대를 표시합니다. VX/VX Ace는 받은 loading plan이 있을 때 전체 파일 읽기 · X / Y를 표시합니다. 끝나지 않던 용량 확인 중은 더 이상 나오지 않습니다.

    원본 세이브 제외

    • 원본 폴더의 세이브 파일을 봉인 입력·fingerprint·package에서 제외합니다. MV/MZ는 index.html이 있는 payload root 아래 save/ 디렉터리, VX/VX Ace는 payload root 바로 아래 숫자 슬롯 이름의 Save*.rvdata·Save*.rvdata2입니다. 비슷한 이름의 다른 파일은 유지합니다.
    • 제외 항목도 목록 단계의 link·root 밖·이름 충돌 검사를 받으며, 원본 나이 판정에서는 제외 항목의 변경 시각을 보지 않습니다. 원본은 바꾸지 않습니다.
    • scan shape를 v3로 올려 VX/VX Ace root 슬롯 세이브를 재연결·중복 비교에서 뺍니다. v2 shape만 가진 누락 설치본은 재연결 후보에서 빠지므로 위 업그레이드 주의대로 배포 뒤 전체 scan을 먼저 합니다.
    • 세이브가 있던 설치본은 package가 달라지므로 이전 build에서 만든 사용자 save는 기존 SAVE_BUILD_MISMATCH·실행 버전 가져오기 흐름을 따릅니다.

    UI 정리

    • 홈의 최근 실행·내 실행 준비 목록을 제거합니다(서버 API는 유지).
    • 라이브러리 실행 기록을 두 줄로 나누고 기록된·측정 안내 문장과 목록 끝의 전체 N개 중 N개 표시를 지웁니다.
    • 게임 상세의 태그 원문 보기 접기와 태그 chip의 원문 tooltip을 제거합니다.
    • 운영 경고에서 backup 실패·미실행 경고를 제거합니다(LINKS_ALERT_BACKUP_OVERDUE_HOURS 삭제).
    • 라이브러리 스캔 상태창이 라이브러리 화면에서도 떠 있도록 흐름 배치 기준을 64rem으로 낮추고, 좁은 화면·글자 200%에서 상태 버튼이 넘치지 않게 합니다.

    의존성·base image

    • Node 24.21.0(bookworm-slim digest), pnpm 11.28.5.
    • npm 의존성을 같은 major의 최신 patch·minor로 올리고 @simplewebauthn/server 14.0.3·browser 14.0.0으로 올립니다. TypeScript 7·Vitest 5 major는 보류했습니다.
    • PostgreSQL 18.6(bookworm), Caddy 2.11.7(alpine), browser acceptance runner Playwright 1.63.0(noble), 모두 digest 고정입니다.

    ARCA 0.1.17

    • root dependency·lockfile·release age 예외를 0.1.17 exact pin으로 맞춥니다. lockfile 변경은 @rgss23/arca 항목뿐이며 integrity는 ARCA 게시 identity·registry metadata와 같습니다.
    • 0.1.17의 게임패드 배치(하단=결정·오른쪽=취소, 왼쪽 스틱 D-pad, 첫 pad만 입력)를 위해 Player frame allow에 gamepad *를 위임합니다. 위임은 autoplay·cross-origin-isolated *·gamepad *뿐입니다.
    • 새 player.input API는 사용하지 않습니다. native runtime은 0.1.16과 같고 Builder digest·runtime ZIP identity만 바뀌므로 기존 build는 위 업그레이드 주의를 따릅니다.

    환경과 운영

    • 새 환경 key: LINKS_RUNTIME_QUIESCENCE_SKIP_IF_AGED(기본 true), LINKS_RUNTIME_QUIESCENCE_AGE_MARGIN_SECONDS(기본 30). LINKS_RUNTIME_SOURCE_READ_CONCURRENCY는 runtime-stager와 runtime-package-worker가 함께 씁니다. 모두 Compose 기본값이 있어 필수 key 추가는 없습니다. LINKS_ALERT_BACKUP_OVERDUE_HOURS는 삭제되었습니다.
    • compose.yaml(image digest·위 환경 key), ops/deploy-registry.sh(--defer-package-readiness), ops/reset-registry.sh(cleanup image Node 24.21.0), ops/runtime-package-coordinator.sh·.ps1(4필드 claim, 2·3초 주기)이 바뀌었습니다. Caddyfile·backup script·backup-verify Compose는 0.21과 byte 동일합니다.
    • 운영 가이드 배포 목록에 ops/runtime-package-coordinator.sh가 추가되었습니다. 이미지와 같은 0.22 태그에서 받아 아래 해시를 모두 대조한 뒤 배포합니다.

    검증과 남은 범위

    • PASS — 통합 소스 fcfd7ee: 격리 Compose에서 static(Prettier·ESLint·typecheck·문서 검사), 전체 unit 146개 파일 / 1048개 테스트, scanner, runtime-workers, rgss23-builder, catalog browser acceptance, run-browser(합성 MV/MZ Chromium·Firefox), git diff --check가 모두 종료 코드 0입니다.
    • PASS — ARCA 0.1.17 브랜치(병합 bb193b5와 같은 tree): cache 없는 image build, lockfile 재해석·integrity 대조, static, 전체 unit 146/1048(첫 실행에서 coordinator test 1건 timing 실패, 단독 3회·전체 재실행 PASS), arca-npm-check, release set·runtime binding·Builder 입력·Builder(합성 세이브 제외 포함)·Builder 격리, runtime-workers, PowerShell coordinator container 6/6, 합성 Player check(sandbox-rgss·player-restart·player-refresh-storage·player-layout, Chromium·Firefox, gamepad 위임 포함)가 종료 코드 0입니다.
    • PASS — 최종 0.22 소스: 릴리스 커밋 두 개(root version, 완료 기준선 version 문구) 뒤 문서 검사(746개 파일 / Markdown 30개, mount 6개 / 29개 문서 파일), static과 git diff --check를 다시 통과했습니다. 게시 이미지는 같은 최종 소스에서 build했고 image 안의 root version 0.22.0·ARCA 0.1.17을 확인했습니다.
    • PARTIAL — 전체 UI/제품 acceptance: 화면·fixture·package/build 성공을 실제 browser play PASS로 기록하지 않습니다.
    • NOT RUN: 실제 library/private game, 입력·오디오·save/reload의 실제 게임 acceptance, 실제 게임패드 입력, 개선 뒤 실제 표본의 전체 준비 시간 재측정, NAS 실측(I/O 동시성·mount ctime·idle 2초 claim 부하), 실제 RTP 다운로드, live provider, fresh schema 테스트(schema 변경 없음), 개발 rebuild와 NAS/production 배포.

    배포 이미지와 파일

    • Git annotated tag: 0.22, 최종 소스 a96fbde7d0.
    • 단일 linux/amd64 이미지: git.2ex.dev/hanyul/links:0.22 = git.2ex.dev/hanyul/links:latest.
    • 원격 digest: sha256:17803f0803b8bf42f5798c767a9513a3ee5905279c2208717548a9e5f7351b3a.
    • 아래 SHA-256은 checkout의 CRLF 변환본이 아닌 0.22 태그의 Git blob 원본 byte 기준입니다. NAS 배포 목록은 위 6개이며, reset-registry.sh는 전체 초기화 때만, .ps1은 Windows 개발 coordinator입니다.
    e89f4579c3840c391ef34b249908019c22c1ed2dc8765b2aac0f2ad32ae9d14f  compose.yaml
    6e1fd3f2f73faee52abca28c8552cde417f496d86fc3d78c7001dec480e171a3  infra/docker/Caddyfile
    39a4c55050e76043c8ca70f11f59dbdf08fff7ef38c1f1ec878f96194988d9d8  ops/backup-verify.compose.yaml
    3f86889f9380114017cd424b4892f8d5877dab1ec3505dc267754030873dfba6  ops/deploy-registry.sh
    89375a986b3cb64cf74145541701b32c6a0e983a72ca46be21a8bcfad7beaa3d  ops/backup-registry.sh
    79c5fbd082ada3117e0915af76c714ed498ea018f151a998cd23f53d92fc3530  ops/runtime-package-coordinator.sh
    84bcc60de28de692fba4d7bea16bf008a8ac55abe394e26f87e541abf5db52dc  ops/reset-registry.sh
    0593ef6347103a9ceffb65969c63794ce6ab6f5321e094a7681b61f54ca19104  ops/runtime-package-coordinator.ps1
    
    Downloads 2
  • LINKS 0.21 — UI 레이어 수정·공통 디자인 기반·실행 준비 단계·ARCA 0.1.16

    LINKS 0.21

    이전 릴리스 0.20(5e8cc51c7a)부터 최종 소스 a5688d6b34까지의 전체 변경 사항입니다. 루트 패키지는 0.21.0, ARCA는 exact 0.1.15 → 0.1.16입니다. 기준 schema와 운영 배포 파일은 0.20과 같습니다.

    업그레이드 주의 — DB 초기화는 필요 없고, 기존 실행 build는 다시 준비합니다

    기준 schema는 바뀌지 않았습니다(743448f6d2891794e5ba98834d9f5055c3f5c58e22276ed701de36650f4b2b07 유지). 0.20 DB·사용자·패스키·세이브·backup을 그대로 사용하며 reset.sh를 실행하지 않습니다.

    ARCA 0.1.16은 native runtime(core JS·WASM, Emscripten 6.0.11·WASI SDK 34·CRuby 3.3.12)과 Builder image가 바뀌어 release manifest hash가 달라집니다. 배포 뒤 catalog와 runtime worker·package coordinator를 같은 0.21 image로 맞추고, 기존 active build는 로그인 사용자의 실행 준비 절차로 새 generation을 만듭니다. 실행 중 session 종료나 save 삭제로 업그레이드하지 않습니다. 공식 RTP cache의 lock archive identity는 같아 재사용됩니다.

    0.20의 ARCA 0.1.15 pin은 registry가 최신 버전만 보관해 cache 없는 build의 frozen install이 ERR_PNPM_TARBALL_URL_MISMATCH로 실패하므로 소스 build는 0.21을 사용합니다. 원본 game library는 읽기 전용으로 유지하며 변경하지 않습니다. 이번 게시 작업에서 개발·운영 DB 초기화나 NAS 배포는 실행하지 않았습니다.

    UI 레이어 결함

    • 좁은 폭·큰 글자에서 본문 흐름에 놓인 스캔 상태창이 스크롤 시 sticky header 위에 그려지던 문제를 수정합니다.
    • 떠 있는 스캔 상태창이 열린 스캔 옵션 메뉴를 가리던 문제를 수정합니다. 메뉴가 열린 동안만 스캔 제어를 본문 메뉴 층으로 올리며 스캔 section 전체를 승격하지 않습니다.
    • z-index를 의미 token 척도(본문 1 → 떠 있는 상태창 → 열린 본문 메뉴 → 관리자 탭 → header → Player 설정 popover → skip link)로 정리하고, top layer로 열리는 dialog의 효과 없는 원시값을 제거합니다.

    실행 준비 화면

    • 실행 준비 취소 화면의 관리자 안내 문구를 지우고, 라이브러리로 돌아온 뒤 결과 알림을 page 여백 안의 결과 tone 한 줄로 정리합니다. 문구는 결과마다 한 문장(필요하면 두 문장)이며 서버 종료 완료를 주장하지 않습니다.
    • 실행 준비 단계를 설명마다 한 번호로 나눕니다(MV/MZ 10단계, VX/VX Ace 18단계). 같은 attempt 안에서는 번호가 줄지 않습니다.
    • preparing 응답의 서버 attempt 식별자와 원본 검사 회차로 단계를 식별해, 새로고침 뒤에도 연속 관찰과 같은 번호·설명을 표시하고 식별할 수 없는 상태에는 번호를 붙이지 않습니다.

    공통 디자인 기반

    • 공통 표면 primitive .surface-panel·.surface-row·.disclosure-panel, page container·page intro와 heading 크기 규칙을 추가합니다. 새 색·간격 token은 없습니다.
    • Modal에 size(confirm·form·wide)를 추가해 frame이 유일한 여백을 갖게 하고, 계정 dialog의 폭·여백 override를 제거합니다.

    사용자 화면

    • 게임 상세의 실행 행동 slot에 primary를 하나만 둡니다. 실행 준비를 요청할 수 없으면 비활성 버튼 대신 서버가 준 이유(worker 미응답, 재요청 가능 시각 등)와 다시 불러오기를 표시합니다.
    • /play 상태 화면을 identity → 상태 → primary → 보조 → 나가기 순서로 맞추고, 실패·신고 결과를 공통 상태 형식으로 표시합니다. 다시 시도할 수 없는 실패의 primary는 라이브러리로입니다.
    • 손수 만든 alert·빈 상태·loading을 공통 상태 형식으로 바꾸고, 원본 누락 배지·상품 정보 제목 문구를 통일합니다. 상세·라이브러리의 landmark·heading 단계를 맞춥니다.
    • 목록 썸네일을 4rem·6rem 두 크기로 맞추고 표지 sizes를 표시 폭에 맞춥니다.

    관리자 화면

    • 관리자 화면에 공통 표면을 적용하고 중복 선언을 지웁니다. 접기 표식은 summary 접근 이름에서 제외합니다.
    • 확인 dialog에 Modal size를 지정하고 안전한 선택을 취소로 맞춥니다.
    • 탭 머리를 page container·page intro로 통일하고(설치된 게임 h1은 탭 이름), 오래된 결과·불러오는 중·빈 상태·작업 취소 결과의 형식과 문구를 통일합니다.
    • 좁은 화면·큰 글자에서 라이브러리 스캔 버튼이 스캔 제어 밖으로 넘치던 기존 문제를 수정합니다.
    • 범위 작업 취소 요청을 화면 밖 store가 소유해 한 번에 하나만 보내고 10초로 제한합니다. 요청 중에는 확인 영역을 닫거나 다시 열 수 없고, 관리자 화면 밖으로 이동했다 돌아와도 결과 안내와 같은 key 재요청을 복원합니다.

    f-int 비UI 수정 이식

    0.20 이후 남아 있던 UI 작업 브랜치 ui-base·ui-admin·ui-catalog·ui-int는 0.20 통합 커밋과 이후 main에 흡수·대체되어 폐기했습니다. 네 브랜치가 공유하던 비UI 11커밋(f-int 132d6e7)은 f-int-port로 이력을 보존해 main에 이식했습니다.

    • 합성 MV 세이브 형식을 서버 복원 계약에 맞추고, 합성 corpus intake 기준과 Git Bash 경로 처리를 복구합니다(테스트 harness).
    • ARCA 공개 오류 code의 retryable·abort 분류를 정리합니다. 다시 시도할 수 없는 실패에는 다시 시도를 두지 않으며, 저장 build 불일치는 이전 build → 가져오기 → 다시 시도 순으로 primary를 고릅니다.
    • package attempt 정리(FR-01/FR-02): 종료된 attempt의 output·build.json·handoff를 descriptor 고정 no-follow 순회로 삭제하고, 진행 중·재시도 대기 attempt와 DB 기록 없는 디렉터리는 보존합니다. 이탈 대기 중 abort 실패를 버리지 않습니다.
    • 버그 신고 진단 event에 retryable·launchReason 계약을 명시합니다.

    ARCA 0.1.16

    • root dependency·lockfile·승인된 release age 예외를 0.1.16 exact pin으로 맞춥니다. lockfile 변경은 @rgss23/arca 항목뿐이며 integrity는 ARCA 게시 identity와 같습니다.
    • 새 공개 API·schema·오류 code는 없으며 LINKS 코드·설정 변경은 없습니다. runtime·Builder·release identity는 설치된 package에서 읽으므로 runtime ZIP 67개 파일 결속, Builder 입력·격리 검사를 0.1.16 값으로 통과합니다.
    • 기존 active build의 재준비 필요 여부는 위 업그레이드 주의를 따릅니다.

    환경과 운영

    • 0.20 대비 새 필수 환경 key는 없고 .env.example도 바뀌지 않았습니다.
    • 운영 Compose·Caddy·backup/deploy/reset script는 0.20과 byte 동일합니다. 이미지와 같은 0.21 태그에서 받아 아래 해시를 모두 대조한 뒤 update.sh로 배포합니다.
    • 운영 가이드에 ARCA registry가 최신 버전만 보관한다는 조건과 새 pin을 다른 변경보다 먼저 통합하는 규칙을 적었습니다.

    검증과 남은 범위

    • PASS — 통합 소스 76b098f: 격리 Compose에서 format·lint·typecheck·문서 검사(static), 전체 unit 142개 파일 / 908개 테스트, catalog browser acceptance(Chromium 149, console·page·request·server 오류 0), runtime-workers integration, git diff --check가 모두 종료 코드 0입니다.
    • PASS — 최종 0.21 소스: 릴리스 커밋 두 개(root version, 완료 기준선 version 문구) 뒤 문서 검사(732개 파일 / Markdown 30개, mount 6개 / 29개 문서 파일), static(Prettier·ESLint·typecheck)과 git diff --check를 다시 통과했습니다. 게시 이미지는 같은 최종 소스에서 build했습니다.
    • PASS — 작업 브랜치 증거 재사용: UI 레이어(Chromium·Firefox, 기본·글자 200%), 실행 준비 취소·단계 식별, 관리자 범위 취소, f-int 이식(대상 unit·합성 browser)과 ARCA 0.1.16 결속·Builder·합성 Player 재시작/새로고침 check를 각 브랜치에서 통과했으며 이번 게시에서 다시 실행하지 않았습니다.
    • PARTIAL — 전체 UI/제품 acceptance: 화면·fixture·package/build 성공을 실제 browser play PASS로 기록하지 않습니다.
    • NOT RUN: 실제 library/private game, 입력·오디오·save/reload의 실제 게임 acceptance, ARCA 0.1.16 native runtime의 실제 게임 재확인과 0.1.16 적용 뒤 player-sdk-errors check, 실제 RTP 다운로드, live provider, fresh schema 테스트(schema 변경 없음), 개발 rebuild와 NAS/production 배포.

    배포 이미지와 파일

    • Git annotated tag: 0.21, 최종 소스 a5688d6b34.
    • 단일 linux/amd64 이미지: git.2ex.dev/hanyul/links:0.21 = git.2ex.dev/hanyul/links:latest.
    • 원격 OCI index digest: sha256:54aa4a47e9cf48e5b36909a12767bead1be68cee6ff3ba3869e386d3a151a83e.
    • 아래 SHA-256은 checkout의 CRLF 변환본이 아닌 0.21 태그의 Git blob 원본 byte 기준입니다(0.20과 동일).
    e63f9cccdaa99f26cedc2d5583c22d0cf036e57d4df4a9f21a381c65ee269e8c  compose.yaml
    6e1fd3f2f73faee52abca28c8552cde417f496d86fc3d78c7001dec480e171a3  infra/docker/Caddyfile
    39a4c55050e76043c8ca70f11f59dbdf08fff7ef38c1f1ec878f96194988d9d8  ops/backup-verify.compose.yaml
    590c58c5adc610cfe369c64e7d3c297ae172a7e68698c6ee23ee283dac2e69f9  ops/deploy-registry.sh
    89375a986b3cb64cf74145541701b32c6a0e983a72ca46be21a8bcfad7beaa3d  ops/backup-registry.sh
    5a9c19ba45b598974cc4393952da58df454ae9430257b927ac5106a114b8033e  ops/reset-registry.sh
    
    Downloads 2
  • LINKS 0.20 — UI 개선·실행 준비 복구·ARCA 0.1.15

    LINKS 0.20

    이전 릴리스 0.19부터 최종 소스 5e8cc51c7a까지의 전체 변경 사항입니다. 루트 패키지는 0.20.0, ARCA는 exact 0.1.14 → 0.1.15입니다.

    업그레이드 주의 — 파생 운영 데이터 전체 초기화 필요

    schema가 cd63767d7f446938be9a915103cc57f130f7e85781ff390f5a3803c833a77b9b에서 743448f6d2891794e5ba98834d9f5055c3f5c58e22276ed701de36650f4b2b07로 바뀝니다. 기존 DB를 자동 변환하는 migration·업그레이드 경로는 없으며, 다른 schema의 DB에서는 기동이 멈춥니다.

    같은 0.20 태그의 배포 파일을 아래 SHA-256으로 대조한 뒤, 운영 가이드의 전체 초기화 절차에 따라 reset.sh --execute → update.sh를 실행합니다. DB·사용자·패스키·설정·세이브·표지·artifact·sealed input·runtime package·Caddy 파생 데이터를 초기화하고 관리자 등록, 라이브러리 스캔과 실행 준비를 다시 진행합니다. 기존 세이브·사용자·패스키는 이어지지 않습니다. RTP는 --delete-rtp를 추가하지 않으면 보존됩니다.

    원본 game library는 읽기 전용으로 유지하며 변경하지 않습니다. 환경 파일과 backup은 초기화 보존 대상이지만 다른 schema 버전의 0.19 이하 backup은 0.20 DB에 복원할 수 없습니다. 이번 게시 작업에서 개발·운영 DB 초기화나 NAS 배포는 실행하지 않았습니다.

    화면과 탐색

    • 목록·검색·필터·상세·최근 실행·북마크·개인 라이브러리의 간격, 상태 안내와 작은 화면 배치를 개선합니다. 결과 수와 페이지/추가 읽기 상태를 구분하고 실패 뒤 기존 결과와 재시도 조작을 유지합니다.
    • 라이브러리의 빠른 조건을 키보드 Tab으로 이동하면 해당 버튼이 가로 목록 안에 완전히 보입니다. 초점 이동만으로 조건·주소·선택 게임을 바꾸지 않으며 클릭·Enter·Space로 적용합니다. 큰 글자에서도 컨테이너가 재배치됩니다.
    • 카드·목록·상세의 표지 실패는 공통 대체 화면으로 표시합니다. 판본 언어 label, 선택·저장·취소 결과와 로딩/오류 안내를 일관되게 표시합니다.
    • 패스키·계정 보안·사용자 관리·초대, 작업·로그·운영 경고, 수집 요청·스캔, 매칭 검토·설치본 후보·실행 빌드 관리 화면의 상태 feedback과 확인 dialog를 개선합니다. 위험 작업은 취소에 처음 초점을 두고 닫힌 뒤 적절한 조작으로 초점을 복원합니다.
    • 관리자 cursor 목록 요청과 공유 태그 계약을 공용 helper로 정리하며 요청 실패·다음 페이지·갱신 상태를 화면에서 구분합니다. 매칭·후보 검토의 사유 입력 오류와 결정 결과를 해당 조작에 연결해 표시합니다.

    실행 준비 복구와 취소

    • VX/VX Ace package의 실제 stage/publish 명령에서 준비 시간 측정 JSON이 stdout에 섞여 coordinator가 결과를 거부하던 문제를 수정합니다. 측정 진단은 stderr로 보내며 stage stdout은 digest·sealed key·attempt key 세 필드, publish stdout은 빈 출력입니다. 기존 worker의 기본 stdout 로그와 lease·취소·무결성·게시 검사는 유지합니다. 마지막 줄만 고르는 parser 우회는 추가하지 않습니다.
    • 인증된 /play의 게임 연결 전 준비·대기·로딩 화면에 취소하기 조작을 제공합니다. 누르면 로컬 실행 의도를 중단하고 조회·세션·bridge 요청을 abort하며 늦은 응답으로 게임을 다시 시작하지 않습니다.
    • 준비 중인 관리자는 기존 CSRF·idempotency 취소 API로 공유 서버 준비의 취소를 요청합니다. 요청 접수는 worker 종료 완료를 뜻하지 않으며, viewer는 서버 취소 요청 없이 라이브러리로 돌아갑니다.
    • 서버 취소 요청은 10초로 제한합니다. 실패·결과 미확인도 라이브러리로 돌아가 해당 설치본·현재 탭에 결과 안내를 유지하고, 현재 관리자만 같은 key로 다시 요청할 수 있습니다. 취소 요청 중 숨김/복귀에서도 중단 의도와 결과 미확인 안내를 보존합니다.
    • 연결 전 Player 배치·준비·실패 안내를 작은 화면과 큰 글자에 맞게 개선합니다. 이미 연결된 게임의 저장·이탈 계약은 기존 구현을 유지합니다.

    ARCA 0.1.15

    • root dependency·lockfile·승인된 release age 예외를 0.1.15 exact pin으로 맞추며, 설치된 공개 deploy/contracts export와 검증된 release를 이미지에 결속합니다.
    • 공식 RTP 준비의 전송 오류·HTTP 5xx/429·무수신 재시도와 제한 시간은 ARCA가 소유합니다. LINKS는 prepareArcaRtp에 별도 재시도·timeout을 추가하지 않고 공개 오류 code를 사용합니다.
    • VX game mkxp.json의 비 UTF-8·JSON·형식 오류는 ARCA Builder의 원본 입력 실패 code로 분류되어 재시도 불가 원인을 보존합니다.
    • ARCA 공개 verifier로 대체된 RGSS scratch·acceptance handoff와 부모 runtime cache의 미사용 wrapper를 정리합니다. 실제 게임 지원 범위 확대나 실제 RTP 다운로드 성공을 이번 릴리스 검증으로 주장하지 않습니다.

    데이터·공급자·worker 정리

    • observation의 shape 다섯 필드를 필수로 저장하고 nullable 호환 경로를 제거합니다. 사용하지 않는 foundation.noop handler·scanner capability·RLS와 준비 run 없는 runtime.stage 경로를 제거합니다.
    • 표지 후보·제작사/공급자 태그 filter·metadata asset 공개 판정을 공통 installation_publishable_identities view로 모읍니다. 현재 충돌 없는 외부 ID와 VNDB 승인 연결 조건을 유지하고 누락 설치본의 기존 표지 fallback은 보존합니다.
    • editions trim 제약을 기준 SQL에 직접 두고 중복 FK·UNIQUE·기본값·잔여 SQL 설정을 정리합니다. 기준 schema는 빈 DB에 새로 적용하며 이전 데이터를 변환하지 않습니다.
    • API와 catalog 공개 projection, 스캔 완료·공급자 수집·번역 job, 공급자 응답 크기 제한·이미지 판별·요청 간격·ID 정규화의 중복을 줄입니다. 원문·정규화·번역·사용자 override와 provenance 경계를 유지합니다.
    • DLsite·VNDB의 Content-Length 선검사와 재판정 sentinel 상한의 Unicode 비교를 보존합니다. schema 파일 정렬도 공용 code point 비교를 사용합니다.
    • provider/scanner/schema/backup fixture와 합성 browser runner를 현재 계약에 맞춰 정리합니다. 문서만 검사하는 read-only mount runner와 합성 browser harness typecheck를 추가하고, scanner의 완료 로그와 seed job의 requestId/jobId 상관을 검증합니다.

    환경과 운영

    • 0.19 대비 새 필수 환경 key는 없습니다. .env.example의 개발 기본 host/origin/RP ID를 localhost로 통일합니다. 실제 운영 host·origin·RP ID를 임의로 바꾸지 마세요. RP ID를 변경하면 이전 패스키로 로그인할 수 없습니다.
    • 환경 준비는 기존 유효 비밀값과 운영자 설정을 보존하고 폐기 key의 이름만 경고합니다. 0.19에서 이미 폐기된 LINKS_USER_REGISTRATION_ENABLED는 사용하지 않습니다.
    • 개발 build 사본은 실행별 디렉터리를 사용하고 해당 사본만 정리합니다. npm 인증은 기존 사용자 설정을 BuildKit secret으로 전달하며 token을 소스·환경 파일·build argument에 넣지 않습니다.
    • 운영 Compose·Caddy·backup/deploy/reset script는 이미지 밖의 배포 파일입니다. 이미지와 같은 0.20 태그에서 받아 아래 해시를 모두 대조해야 합니다.

    검증과 남은 범위

    • PASS — 이번 최종 0.20 소스: 격리 links-release-020 Compose에서 runtime/test image build, format·lint·workspace/test/harness typecheck·문서 검사, 전체 unit 134개 파일 / 870개 테스트. 소스와 test/runtime 이미지에서 721개 파일 SHA-256, root 0.20.0, ARCA 0.1.15 공개 계약 결속, schema checksum, 컴파일된 stderr 선택 두 곳을 확인합니다. 현재 문서를 read-only mount한 검사도 721개 파일 / Markdown 30개, mount 6개 / 29개 문서 파일로 통과합니다.
    • PASS — 이전 독립 검토 증거 재사용: 최종 소스는 검토된 721개 파일과 비교해 root version과 완료 기준선의 version 문구 두 파일만 다릅니다. 이번 이미지의 production HTML/JS/map/CSS 4개 해시는 당시 검토 이미지와 모두 같습니다. 같은 compiled UI의 Chromium·Firefox 취소 각 19/19, 라이브러리 5개 폭·100/200% 글자·즉시/250ms Tab, 연결 전 layout, 합성 취소/autoplay 증거를 재사용하며 이번 게시에서 browser matrix를 다시 실행하지 않습니다.
    • PASS — 과거 동일 schema 범위: main 기준선의 fresh schema 31개 파일 / 191개 테스트 증거를 재사용합니다. 이번 게시에서 fresh DB/schema 실행은 NOT RUN입니다. 실제 POSIX·Compose PowerShell parser의 각 7개 vector와 stdout 오염 RED/GREEN 회귀 증거는 검토된 이전 실행이며 새 전체 unit에도 관련 회귀 test가 포함됩니다.
    • PARTIAL — 전체 UI/제품 acceptance: 기존 legacy engine-filter runner FAIL과 과거 RF04 원인/덮어쓴 evidence 한계는 남습니다. 화면·fixture·package/build 성공을 실제 browser play PASS로 기록하지 않습니다.
    • 알려진 기존 제한: 독립 검토 RR-01의 POSIX stage descriptor parser는 PowerShell보다 느슨해 짧은 sealed object key와 숫자가 아닌 attempt 접미사를 허용하는 기존 P3 형식 경계 차이가 있습니다. 이번 stdout 수정에서 parser 동작은 바뀌지 않으며 별도 후속 항목입니다.
    • NOT RUN: 실제 library/private game, 입력·오디오·save/reload의 실제 게임 acceptance, 실제 account/installation 전환·logout matrix, native BFCache/history, 실제 관리자 취소·worker 종료 및 package-loop 복구, live provider·실제 RTP 다운로드, 최신 연결된 Player acceptance, 개발 reset/rebuild와 NAS/production 배포. 개발 적용은 조정자의 별도 후속 작업입니다.

    배포 이미지와 파일

    • Git annotated tag: 0.20, 최종 소스 5e8cc51c7a.
    • 단일 linux/amd64 이미지: git.2ex.dev/hanyul/links:0.20 = git.2ex.dev/hanyul/links:latest.
    • 원격 OCI index digest: sha256:68b68cd8e70d6ace14600f2f00c44f7aa175b8b22b790845e7efc419ce592ae5.
    • 아래 SHA-256은 checkout의 CRLF 변환본이 아닌 0.20 태그의 Git blob 원본 byte 기준입니다.
    e63f9cccdaa99f26cedc2d5583c22d0cf036e57d4df4a9f21a381c65ee269e8c  compose.yaml
    6e1fd3f2f73faee52abca28c8552cde417f496d86fc3d78c7001dec480e171a3  infra/docker/Caddyfile
    39a4c55050e76043c8ca70f11f59dbdf08fff7ef38c1f1ec878f96194988d9d8  ops/backup-verify.compose.yaml
    590c58c5adc610cfe369c64e7d3c297ae172a7e68698c6ee23ee283dac2e69f9  ops/deploy-registry.sh
    89375a986b3cb64cf74145541701b32c6a0e983a72ca46be21a8bcfad7beaa3d  ops/backup-registry.sh
    5a9c19ba45b598974cc4393952da58df454ae9430257b927ac5106a114b8033e  ops/reset-registry.sh
    
    Downloads 2
  • LINKS 0.19 — 결함 수정·알고리즘 개선·관리 기능·ARCA 0.1.14

    LINKS 0.19

    이전 릴리스 0.18 대비 변경 사항입니다. 루트 패키지는 0.19.0이고, ARCA는 0.1.13 → 0.1.14로 올렸습니다.

    업그레이드 주의 — 운영 데이터 전체 초기화 필요

    • schema 버전이 바뀌었습니다: f83505b0… → cd63767d…. 0.18 DB는 새 이미지가 변환하지 않고 멈춥니다.
    • 형식이 바뀌었습니다: RGSS 실행본 목록, 세이브 backup, artifact backup. 그래서 DB뿐 아니라 artifact·세이브 저장소도 함께 비워야 합니다.
    • 배포 순서: reset.sh --execute → update.sh. 그 뒤 관리자 패스키를 다시 등록하고 library를 다시 스캔하세요.
    • 기존 세이브·사용자·패스키는 이어지지 않습니다.
    • 0.18 이하 backup은 이 버전에서 복원할 수 없습니다.
    • 원본 game library는 읽기 전용이라 영향이 없습니다.

    환경 키 변경

    • 삭제
      • LINKS_USER_REGISTRATION_ENABLED: 공개 가입이 없어지고 초대제로 바뀌었습니다.
      • LINKS_DLSITE_HTML_EXPERIMENTAL_ENABLED: DLsite 실험 경로를 제거했습니다.
    • 추가 (기본값은 .env.example 참고)
      • LINKS_JOB_RETENTION_DAYS: 끝난 작업 기록 보존 기간(기본 90일)
      • LINKS_PLAYER_REPORT_RETENTION_DAYS: 처리 완료된 신고 보존 기간(기본 180일)
      • LINKS_ALERT_BACKUP_OVERDUE_HOURS, LINKS_ALERT_STORAGE_MIN_FREE_PERCENT, LINKS_ALERT_JOB_CONSECUTIVE_FAILURES: 운영 경고 기준(기본 48시간·10%·3건)
      • LINKS_RUNTIME_PACKAGE_WORKER_ID

    새 기능

    • 사용자 관리·초대제 가입
      • 공개 가입을 없앴습니다. 관리자가 1회용·만료 있는 초대 링크(기본 7일)를 만들면, 받은 사람이 패스키로 가입합니다.
      • 관리자 "사용자" 탭에서 목록을 보고 비활성화·재활성화할 수 있습니다.
      • 비활성화하면 catalog 세션, Player 세션, 아직 쓰지 않은 실행 권한을 즉시 폐기합니다.
      • 자기 자신과 마지막 관리자는 비활성화할 수 없습니다. 패스키를 잃어버리면 재등록 초대로 복구합니다.
    • 관리자 "작업" 탭
      • 실패한 작업 목록을 보여 주고, 재개할 수 있게 했습니다. 재개할 수 없으면 이유를 표시합니다.
      • 기능별 worker 응답 상태와 큐 통계를 보여 줍니다.
      • 운영 경고 배지(서버가 판정)를 띄웁니다: backup 실패·미실행, 저장소 여유 부족, 같은 유형 작업 연속 실패.
    • 감사 기록 조회: "로그" 탭 안에 넣었습니다. 허용된 필드만 보여 주고, 사유·식별 token은 숨깁니다.
    • 매칭 검토
      • 추천·충돌·근거·점수 범위 필터와 점수순 정렬을 넣었습니다.
      • 이전에 "관련 없음"으로 처리한 쌍은 기본으로 숨깁니다.
    • 다시 수집 범위: 없는 것만 / 전부 / parser 갱신분 / 실패분 / 오래된 것(30일, 오래된 순으로 실행). 게임 몇 개만 지정한 요청은 먼저 처리합니다.
    • 표지 직접 선택: 관리자가 이미 수집된 공급자 이미지 중에서 고릅니다. 원본은 보존하고, 선택은 해제할 수 있습니다.
    • 탐색
      • 공급자별 태그 둘러보기(개수 표시)를 넣었습니다.
      • 개인 라이브러리를 저장순·최근 실행순·제목순으로 정렬하고, 전체 수를 표시합니다.
      • 이미지 뷰어에 로딩 표시를 넣고, 앞뒤 이미지를 미리 받습니다.
    • 버그 신고: 관리자가 "처리 완료"를 표시할 수 있습니다. 처리 완료된 신고는 180일 뒤 정리합니다.
    • 세이브 충돌 보존: 두 탭에서 동시에 저장해 충돌하면, 진 쪽을 "충돌로 보존된 세이브"로 이력에 남깁니다(최대 5개).
    • HTML5 엔진 진단 명령: 인식하지 못한 HTML5 엔진 후보의 개수만 셉니다. 작품명·경로는 출력하지 않습니다.

    검색·매칭 알고리즘

    • 검색
      • 가나·물결표·전각·구두점을 같은 글자로 봅니다(fold v2, JS와 SQL이 같은 결과).
      • 여러 단어는 모두 들어간 게임만 찾습니다(최대 5개). 제작사 이름으로도 검색됩니다.
      • 검색하는 동안의 기본 정렬은 "검색 일치순"입니다. 외부 ID 일치 → 제목 완전 일치 → 앞부분 일치 → 부분 일치 순입니다.
    • 폴더 제목 매칭
      • 정규화 v2에서 가나, 로마 숫자(II·Ⅱ → 2), &·と·and를 통일합니다.
      • 폴더 제목이 공급자 제목과 정규화 뒤 완전히 같으면 "수락"을 추천합니다(확정은 관리자).
      • 점수 버전: match-score-v4, exact-id-link-v3
    • 상품 폴더 인식 확장: [RJ…]제목처럼 붙여 쓴 이름, 서클·분류 괄호, 버전·체험판·DL판 표기를 인식합니다.
    • 설치본 비교 v2
      • 안쪽 wrapper 폴더 이름을 무시합니다. 그래서 버전업하거나 이름만 바뀐 사본도 후보로 잡힙니다.
      • 같은 외부 ID를 가진 설치본끼리는 폴더 구조만 비교해 번역판·패치판 후보로 올립니다. 병합은 하지 않습니다.
    • 판별 규칙: classifier v9
      • 상위 묶음 폴더 이름은 역할 근거로 쓰지 않습니다.
      • 깊은 곳의 archive는 가장 가까운 설치본에 포함합니다.
      • Game.ini는 ARCA 0.1.14 공개 입력 계약을 따릅니다. 대소문자 무관으로 찾고, 대소문자만 다른 파일이 여러 개면 충돌로 처리합니다. BOM이 붙은 파일은 미지원입니다.
    • 정렬 고정: fingerprint, 산출물·검증 정렬, 경로 대소문자 비교를 서버 언어 설정·ICU 버전과 무관한 코드 포인트 순으로 고정했습니다(fingerprint v2 등).

    크롤링

    • DLsite는 저장된 최종 주소에서 시작합니다. 다시 수집할 때 페이지 요청이 4회에서 2회로 줄었습니다(합성 측정).
    • 표지 이미지 요청이 막혀 있어도 상세 정보는 먼저 게시합니다. 표지는 다음 수집 때 받습니다.
    • VNDB는 100개 단위로 묶어 조회하고, enrich보다 먼저 실행합니다. release 조회는 250회에서 3회로 줄었습니다(합성 측정).
    • 설치본 1개만 지정한 "다시 수집"은 24시간 cache를 무시하고 새로 받습니다.
    • 정확한 ID로 만든 작품 연결 후보를 수집이 끝난 뒤 다시 채점합니다.
    • 수정한 결함
      • 설정하지 않은 공급자 때문에 "수집 중"이 계속 표시되고 화면이 무한히 다시 조회하던 문제
      • VNDB가 일시적으로 실패하면 검토 후보가 사라지던 문제
      • DLsite 표지 주소가 허용 목록과 조금만 달라도 상세 정보까지 버리던 문제
    • "전체 다시 수집"을 한 번에 접수합니다. 1.6만 개에서 메모리 부족으로 실패하던 것이 1.7초에 끝납니다(합성 측정).
    • Getchu는 연령 확인 없이는 내용을 받을 수 없을 수 있어 꺼 둔 상태로 유지합니다(BLOCKED).

    성능 (모두 합성 데이터 측정)

    항목 이전 이후
    검색(설치본 1만 개, PostgreSQL JIT 해제·2단계 조회) 수 초 약 0.1~0.2초
    목록 마지막 페이지(1만 개) 6.5~10초 약 50ms
    스캔 완료 단계(10만 entry·후보 5천) 65.8초 0.13초
    재연결 후보 계산(5천×5천) 약 7초 약 0.6초
    VX 준비 시 원본 읽기 9회 3회
    세이브 목록 100행 368ms 171ms
    실행 준비 목록 100행 228ms 14ms
    북마크 상세 100행 329ms 78ms
    • 범위 밖 페이지를 요청하면 서버가 마지막 페이지로 바꿔 보여 줍니다. 목록에는 쿼리 시간 제한, 요청 한도, 페이지 상한(10,000)을 넣었습니다.
    • Player
      • MZ의 script·plugin을 최대 4개씩 미리 받습니다.
      • VX artifact를 다시 요청할 때 서버가 전체 hash를 다시 계산하지 않습니다.
      • 일시적으로 실패한 asset은 다시 받을 수 있습니다.
      • OPFS 공간이 부족하면 cache만 포기하고 실행은 계속합니다(16MiB 이하 파일).
    • 작은 이미지 칸과 이미지 뷰어는 원본 대신 축소본(WebP)을 받습니다.

    신뢰성

    • 실행 준비
      • 이전 build와 같은 내용으로 돌아온 설치본이 준비에 실패하던 문제를 고쳤습니다. 이미 정리된 build로 돌아온 경우에는 자동으로 다시 준비합니다.
      • 오류 코드가 원인별로 보존됩니다. 재시도해도 성공할 수 없는 실패는 바로 끝냅니다.
    • 스캔
      • 하위 폴더 하나의 읽기 오류는 그 폴더만 경고로 격리합니다.
      • 상위 폴더가 바뀌면 지금처럼 실패로 처리합니다(결정 기록).
    • GC: VX/VX Ace build GC가 멈추던 문제를 고쳤고, 설치본끼리 공유하는 실행본을 보호합니다.
    • 표지: 손상된 저장 파일은 자동으로 복구하고, API는 500 대신 503을 반환합니다. 일시적인 이미지 decode 실패는 재시도합니다.
    • 로그·보존
      • worker 실패 로그를 관리자 로그 화면에서 읽을 수 있습니다. catalog healthcheck(/readyz)와 로그 순환(10MB×3)을 넣었습니다.
      • 끝난 작업 기록은 90일 뒤 정리합니다. 진행 중 작업, 재개할 수 있는 실패 작업, 감사 기록이 참조하는 작업은 보존합니다.

    ARCA 0.1.14

    • 자체 runtime ZIP 해제기를 공개 verifyArcaRuntimeDirectory로 바꿨고, contracts 검증은 verifyArcaContracts로 바꿨습니다.
    • VX/VX Ace 준비 화면이 ARCA Builder의 공식 진행 이벤트(단계·처리량)를 보여 줍니다. 실패는 failure-report code로 분류합니다.
    • ARCA_RTP_*, ARCA_RELEASE_* 오류 code를 쓰고, compose 격리 설정이 ARCA 공개 helper와 같은지 검사합니다.
    • 실행 엔진(native runtime)은 0.1.13과 같습니다.

    정리

    • DB 초기화로 필요 없어진 호환 경로를 제거했습니다: 이전 session·cursor·snapshot·manifest v2 등.
    • 번역 검수 분기와 DLsite 실험 경로를 제거했고, 기본 glossary seed를 추가했습니다.
    • 문서를 최신화하고 중복을 정리했습니다.

    알려진 제한

    • 폴더 제목 정규화 v2의 한계: 한자 사이의 と가 원래 단어 일부인 경우와 가나 동음이의어는 같은 제목으로 볼 수 있습니다. 확정은 관리자가 근거 label을 보고 합니다.
    • ARCA SDK 새 기능(2단계 실행·공식 로딩 진행률)과 16MiB 초과 파일의 OPFS 공간 부족 처리는 실제 게임 측정 때 진행합니다. keyboard.passthrough는 보류했습니다.
    • ARCA registry에서 @rgss23/arca@0.1.13을 받을 수 없어, 0.18 이하 commit을 다시 설치할 수 없습니다. ARCA에 보존을 요청해 두었습니다.

    검증

    • PASS: 각 차수의 통합 소스에서 실행했습니다.
      • static, unit(최종 843 tests), 전체 schema fresh(188 tests), provider contract
      • scanner, runtime-workers, RGSS builder, backup-restore(.sh·.ps1), 운영 backup, translation import
      • 실제 WebAuthn 패스키 acceptance(Chromium)
      • 관련 browser check(Chromium·Firefox)
    • NOT RUN: 실제 게임 전체 acceptance(입력·오디오·save/reload), 실제 library 정확도·시간 측정, NAS 배포, live 공급자 호출, Firefox 실제 WebAuthn

    배포 파일과 이미지

    • 이미지: git.2ex.dev/hanyul/links:0.19 = latest, digest sha256:54de7a6b06cf06f9979611cf9dd75c38bf1eea9a882a14162411f5fde082bff4
    • NAS 배포 파일 SHA-256 (tag 0.19):
    e63f9cccdaa99f26cedc2d5583c22d0cf036e57d4df4a9f21a381c65ee269e8c  compose.yaml
    6e1fd3f2f73faee52abca28c8552cde417f496d86fc3d78c7001dec480e171a3  infra/docker/Caddyfile
    39a4c55050e76043c8ca70f11f59dbdf08fff7ef38c1f1ec878f96194988d9d8  ops/backup-verify.compose.yaml
    590c58c5adc610cfe369c64e7d3c297ae172a7e68698c6ee23ee283dac2e69f9  ops/deploy-registry.sh
    89375a986b3cb64cf74145541701b32c6a0e983a72ca46be21a8bcfad7beaa3d  ops/backup-registry.sh
    5a9c19ba45b598974cc4393952da58df454ae9430257b927ac5106a114b8033e  ops/reset-registry.sh
    
    Downloads 2
  • LINKS 0.18 — UI 개편·기능 추가·기준 schema 전환

    LINKS 0.18

    이전 릴리스 0.17 대비 변경 사항입니다. 루트 패키지는 0.18.0이고 ARCA는 0.1.13을 그대로 사용합니다.

    업그레이드 주의 — DB 초기화 필요
    DB schema를 migration 이력 방식에서 기준 schema 방식으로 바꿨습니다. 0.17 이하 DB는 새 이미지가 변환하지 않고 resetRequired로 멈춥니다. 배포 전에 데이터 초기화(reset.sh)를 실행한 뒤 관리자 패스키를 다시 등록하고 library를 다시 스캔하세요. 0.17 이하 형식의 backup은 이 버전에서 복원할 수 없습니다. 원본 game library는 읽기 전용이라 영향이 없습니다.

    화면(UI/UX) 개편

    • 디자인 토큰을 정의했습니다: 간격, radius, 글꼴 단계, 표면 단계, 상태 색.
    • 공통 컴포넌트를 통일했습니다: 버튼 위계(화면당 주 행동 하나), 입력, 상태 배지, 태그, 대화상자, 페이지 번호, 빈 상태·로딩·오류.
    • 화면별 정리
      • 상단 바: 불투명 처리와 blur를 제거했습니다. 좁은 화면에서는 한 줄로 표시하고 계정 이름은 말줄임합니다.
      • 홈: 카드 구조를 통일했습니다. 0건이나 오류일 때 페이지 번호가 나오지 않습니다. 제목은 "전체 게임"입니다.
      • 상세·라이브러리: 저장 버튼이 주 행동이 됩니다. 설명 폭(70ch)과 썸네일 크기를 조정했고, 표지가 없으면 "표지 없음"을 표시합니다.
      • Player: 390px에서 잘리던 문제를 고쳤습니다. 모든 상태를 같은 위치에 배치하고, 실패 원인은 경고로 강조합니다.
      • 관리자: 폭과 색 토큰을 통일하고, 위험한 행동은 위험 버튼으로 표시합니다.
    • 상세 "실행 환경"에 브라우저 실행 지원 배지(미검증/미지원, 중립색)를 표시합니다.
    • 문구를 통일했습니다.
      • 역할: 사용자/관리자
      • 다시 읽기는 "다시 불러오기", 실패한 행동을 다시 할 때는 "다시 시도"
      • 판본 필드: "배포판"
    • 접근성: 가로 넘침 0, 텍스트 대비 실패 0, 글자 200%에서도 동작합니다.

    새 기능

    • 개인 라이브러리
      • 서버 검색을 지원합니다.
      • 저장함·실행함·세이브 있음 필터를 추가했습니다.
      • 마지막 실행 시각과 플레이 시간을 표시합니다(서버 측정).
      • 내 실행 준비 목록과 완료 알림을 추가했습니다.
    • 세이브 관리
      • 내 세이브 목록을 보여 줍니다.
      • 이전 버전을 보존(슬롯당 최대 10개)하고, 사용자가 확인한 뒤 복원할 수 있습니다.
      • 새 실행 버전으로 세이브를 가져올 수 있습니다.
      • 저장 일시 실패는 재시도합니다. 화면을 떠날 때 저장을 마칠 때까지 기다리고, 실패 원인을 구분해 안내합니다.
    • 관리자 검토
      • 이동하거나 이름이 바뀐 설치본의 재연결 후보를 제시합니다.
      • 내용 형태 기반으로 중복·판본 후보를 찾습니다.
      • DLsite·Steam·Getchu의 정확한 ID로 작품 연결 후보를 만듭니다.
      • 일괄 결정과 최근 스캔 변경 보기를 추가했습니다.
    • 메타데이터
      • 이미지 decode 검증과 WebP 썸네일(320/640, srcset)을 추가했습니다.
      • 가져온 번역을 표시합니다(기계 번역 배지 포함).
      • 작품 설명 번역은 offline import로만 가져옵니다.
      • 연령 등급 등 필드를 수집합니다. 화면 표시는 아직 하지 않습니다.
      • 관리자 화면에 공급자 상태를 표시합니다.

    표시 규칙 변경

    • 제목과 판본 메모를 고를 때 같은 언어(ko·ko-KR) 안에서는 입력 방식을 먼저 비교합니다. 우선순위는 직접 입력 > 공식 > 검토된 기계 번역 > 기계 번역입니다. 그래서 사용자가 직접 입력한 한국어 값은 기계 번역에 가려지지 않습니다.
    • '세이브 있음' 필터는 Player의 세이브 목록을 조회합니다. Player가 응답하지 않으면 이 조건만 SAVE_SERVICE_NOT_READY로 실패하고, 목록은 조건을 해제한 상태로 계속 볼 수 있습니다.

    신뢰성·성능

    • 변경 없는 증분 스캔이 실패하던 문제와 증분 운용 중 매칭 후보가 생기지 않던 문제를 고쳤습니다.
    • 빈 mount나 대량 누락을 감지하면 보호 동작을 합니다(SCAN_MISSING_GUARD).
    • 내용 변경이 없는 재스캔은 준비된 실행 build를 무효로 만들지 않습니다.
    • 스캔 성능 개선(합성 측정)
      • 2만 entry discovery: 24.3초 → 0.23초
      • 디렉터리 재열거: 335배 → 1배
      • DB 일괄 저장: 약 12배 빨라짐
    • 실행 준비 build 검증을 한 번만 하도록 바꿨습니다(합성 기준 약 10초 → 약 4초). OPFS 캐시 lock을 파일 단위로 낮춰 동시 다운로드가 가능해졌습니다.
    • DLsite 연령 확인·점검 페이지를 "정보 없음"으로 확정하지 않고, 재시도할 수 있는 실패로 처리합니다.
    • 공급자별 circuit breaker를 추가했습니다. 이미지는 조건부 요청(ETag)과 재사용을 하고, VNDB는 DB cache를 사용합니다.
    • PlaySession 만료 정리를 추가했습니다.
    • job lease를 개선했습니다: 종료 시 반환, 재큐 backoff, 처리되지 않은 예외 기록, worker 정지 감지.

    운영·보안

    • catalog·scanner·metadata worker가 서비스별 최소 권한 DB role로 접속합니다(RLS 포함).
    • 로그인 rate limit은 gateway 뒤 실제 client 주소를 기준으로 계산합니다.
    • 운영 backup 명령(ops/backup-registry.sh)을 추가했습니다. 복원 훈련을 포함하고, GC가 쓰는 backup 증거와 연결됩니다.
    • 배포 스크립트는 schema 버전을 확인하고 이미지 digest rollback을 안내합니다. NAS 다운로드 스크립트는 tag를 고정하고 SHA-256으로 검증합니다.
    • 미참조 표지는 정리 전 격리를 거칩니다(7일 격리 후 삭제, 다시 참조되면 복구).
    • 스캔 기록은 최근 성공 3회분만 보존합니다(LINKS_SCAN_ENTRY_RETENTION_SCANS).
    • 새 환경 키:
      • LINKS_PLAYER_CATALOG_TOKEN: catalog↔Player 내부 통신, 필수
      • LINKS_SCAN_MISSING_GUARD_RATIO
      • LINKS_SCAN_ENTRY_RETENTION_SCANS
      • 서비스별 DB role 비밀번호
      • 정확한 목록은 .env.example을 참고하세요.

    알려진 제한

    • catalog↔Player 내부 listener(3005)는 gateway 경로로는 닿지 않습니다. 다만 같은 내부 network의 서비스에서는 접근할 수 있어서 토큰으로 보호합니다.
    • 이미지 decode child process에는 DB 자격 증명이 없지만, worker와 network namespace를 공유합니다.
    • 세이브 용량 활용(SV-05)은 일부만 구현했고, 무중단 save backup(SV-08)은 보류했습니다. VNDB와 DLsite ID를 하나의 Work로 병합하는 기능은 지원하지 않습니다. 자세한 내용은 개발 계획을 참고하세요.

    검증

    • PASS: 통합 소스에서 static, unit, 전체 schema(fresh), scanner, runtime-workers, backup-restore, 운영 backup e2e, provider contract, translation import, foundation, 격리 catalog 통합(패스키·acceptance), 신규·핵심 browser check(Chromium·Firefox)
    • NOT RUN: 실제 게임 전체 acceptance(입력·오디오·save/reload), NAS 배포, live 공급자 호출
    Downloads 2
  • LINKS 0.17 — 작업 취소·빌드 관리와 코드·문서 정리

    LINKS 0.17

    이전 릴리스 0.16 대비 변경 사항입니다. 루트 패키지는 0.17.0이고 ARCA는 0.1.13을 그대로 사용합니다. 스키마 migration 0054가 추가됩니다.

    새 기능과 개선

    • 백그라운드 작업 취소: 관리자 작업 관리에서 대기·실행 중인 작업을 하나씩 또는 전부 취소할 수 있습니다. 정보 수집, 게임 인식 확인, 실행 빌드 준비에도 취소 버튼을 추가했습니다. 이미 완료된 결과, 원본, 세이브는 되돌리지 않습니다.
    • 실행 빌드 관리 (migration 0054): 관리자 상세에서 현재 빌드와 이전 실행 버전을 제거하거나 다시 빌드할 수 있습니다. 게임 상세의 게임 관리 버튼으로 바로 이동합니다. 제거는 실행 선택만 해제하며 원본, 세이브, 이력은 보존합니다.
    • MV/MZ 실행 준비:
      • 준비 과정을 8단계로 표시합니다.
      • 중복 목록 순회를 6회에서 3회로, 전체 원본 hash 검사를 3회에서 1회로 줄였습니다.
      • 원본 읽기 동시성 설정(LINKS_RUNTIME_SOURCE_READ_CONCURRENCY, 기본값 1)을 추가했습니다.
    • 실제 MV/MZ 부팅 수정: 다음 문제를 고쳤습니다.
      • 파일명 대소문자 불일치
      • System sentinel 검사
      • script XHR, Vorbis Worker, 글꼴 연결
      • 동일 artifact를 재봉인할 때 cache가 무효화되던 문제
    • 플레이어:
      • MV/MZ 상단 재시작, 음량, 음소거를 연결했습니다.
      • 화면 크기를 선택할 수 있습니다(맞춤, 50–200%, 꽉 채우기).
      • 준비 진행 막대를 가운데로 정렬했습니다.
    • 진단: 실행 준비가 실패해도 버그 신고를 보낼 수 있습니다. 신고에는 서버 오류 요약과 실제로 실패한 작업의 UUID가 함께 전달됩니다.
    • 안정성:
      • worker 시작에 실패하면 연결을 정리하고 종료합니다.
      • CSRF token을 세션별로 복원해 여러 탭을 오가도 저장·해제가 유지됩니다.
      • 개발 CA를 bind mount로 옮겨 Docker volume을 정리해도 남습니다.
      • 큰 글자 모드 390px 화면에서 게스트 저장 안내가 2px 넘치던 문제를 고쳤습니다.
      • 로그인 화면에서 누르면 아무 동작도 하지 않던 버튼을 제거했습니다.

    제거와 정리 (호환성 변경)

    • /bookmarks 호환 주소 제거: 개인 라이브러리 주소는 /library만 사용합니다. /api/v1/bookmarks API는 유지합니다.
    • 번역 검수 API 제거: 관리자 UI는 이미 없었습니다. 번역 결과 offline import와 DB에 저장된 검수 이력은 유지합니다.
    • ARCA 단일 ZIP 의존성 취득 경로 제거 (runtime.dependency.acquire, dependency-acquirer service·profile): ARCA는 npm 정식 배포본을 이미지에 내장하는 경로만 사용합니다.
      • 기존 DB table과 승인·감사 이력은 보존합니다.
      • 과거 작업은 관리자 화면에 (제거된 작업)으로 표시됩니다.
      • 운영 .env의 LINKS_RUNTIME_DEPENDENCY_*와 LINKS_DEPENDENCY_ACQUIRER_DATABASE_PASSWORD는 더 이상 쓰지 않습니다. prepare-develop이 이런 key를 경고로 알려 줍니다.
    • 쓰지 않던 RGSS 코드 제거:
      • 구 launch ABI와 구 RTP source/sealed 모듈을 삭제했습니다.
      • same-origin OPFS adapter와 관련 runner를 삭제했습니다.
      • 새로 만드는 RGSS generation의 bootstrap.mjs는 직접 실행 불가 안내로 줄였습니다. 이 때문에 새 generation의 frontend bytes가 바뀌어 RGSS build가 한 번 다시 생성됩니다. 기존 generation과 세이브는 그대로 동작합니다.
    • 중복 구현 통합 (wire 형식과 hash byte는 변경 없음):
      • GC 적격성 판정, 목록 cursor codec, DB role 생성
      • canonical JSON, scanner sealed-store helper
      • web의 API 형식 로컬 사본을 공유 contracts로 교체
    • 테스트 정리:
      • 10,875줄 schema 테스트를 도메인별 파일 5개와 공용 fixture로 나눴습니다.
      • 삭제된 UI를 검사하던 테스트, 항상 통과하던 테스트, 중복 browser check를 정리했습니다.
      • 원래부터 실패하던 검사(built-navigation, editions, player-layout, backup 저장 복구, foundation)를 현재 UI에 맞게 고쳤습니다.
      • Windows Git Bash에서 .sh runner가 경로를 잘못 읽던 문제를 고쳤습니다.

    문서

    • README를 프로젝트 소개 문서로 새로 썼습니다.
    • 모든 기준 문서를 현재 코드와 대조해 정리했습니다(문서 전체 약 5,500줄 → 약 4,160줄).
    • 게임 진단 문서 2개를 게임_호환성_진단.md 하나로 합쳤습니다.
    • UI/UX 제안 문서는 남은 제안만 개발 계획으로 옮기고 지웠습니다.

    업그레이드

    • 새 이미지 git.2ex.dev/hanyul/links:0.17(= latest)을 pull해 배포합니다. migration 0054는 기동할 때 적용됩니다.
    • dependency-acquirer service와 runtime-dependency-live profile을 쓰고 있었다면 운영 Compose에서 제거됩니다.

    검증

    • PASS (병합된 전체 코드, Docker):
      • static, unit 83개 파일/475개 test, schema 10개 파일/65개 test
      • scanner, correlation, provider, foundation
      • runtime-workers, backup-restore, 번역 import
      • catalog·passkey acceptance
      • source-mount browser check 전체(Chromium, Firefox)
    • PARTIAL: Firefox 오디오 출력. 컨테이너 AudioContext 제약 때문입니다.
    • NOT RUN: 실제 게임 전체 acceptance(입력·오디오·save/reload), NAS 배포. 개발 서버 재빌드와 health는 이번 릴리스에서 확인했습니다.
    Downloads 2
  • LINKS 0.16 — 개인 라이브러리·UI 개선·런타임 통합

    LINKS 0.16

    이전 릴리즈 0.15 대비 변경 사항입니다. 루트 패키지는 0.16.0, ARCA는 0.1.11 → 0.1.13입니다.

    사용자 화면

    • 북마크를 개인 라이브러리로 전환했습니다. 기존 저장 항목을 유지하며 홈에서는 저장, 라이브러리에서는 게임 선택 후 실행하는 흐름을 제공합니다. 직접 실행 주소도 UI에서 저장 여부를 확인합니다.
    • PC 라이브러리는 좌측 제목 목록·검색과 우측 상세·실행 패널로 구성했습니다. 모바일은 목록과 상세를 전환하고 목록 복귀 시 키보드 초점을 복원합니다. 기존 /bookmarks 주소도 유지합니다.
    • 원본이 누락된 게임은 라이브러리 상세에서 메타데이터·실행 준비를 요청하지 않고 기존 요약과 누락 안내를 표시합니다.
    • 상세의 중복 게임 소개·전체 보기 링크를 제거하고 작품 내용은 기본으로 접습니다. 저장 버튼의 글자 잘림, 라이브러리 이동 버튼의 정렬·여백을 수정했습니다.
    • 최근 실행 목록, 판본별 설치본 선택, 표지·샘플 갤러리와 지연 로딩을 추가·개선했습니다. 같은 이미지 URL에서도 선택한 항목의 제목을 유지합니다.
    • 카탈로그·상세·라이브러리를 기능별 모듈로 분리하고 검색·필터·페이지 복원, 긴 제목·작은 화면·키보드 조작을 개선했습니다.
    • 관리자 스캔·수집 상태, 연결 검토, 컨테이너 로그, 신고 목록과 패스키 관리의 로딩·빈 상태·오류·재시도·초점 처리를 정리했습니다.

    실행과 저장

    • ARCA 0.1.13의 공개 빠른 재시작 API를 연결해 지원되는 VX/VX Ace 실행에서 Worker와 canvas를 유지합니다. 저장 실패 후 실행 복구와 세션 거절·지연 callback 격리를 보강했습니다.
    • 실행 준비 화면에 게임 식별 정보와 진행 상태를 표시하고 로그인 만료 후 재인증 동선, 전체화면 거절·음량/재시작 미지원 안내를 개선했습니다.
    • RTP는 수동 사용 승인 없이 자동 준비·검증합니다. 수동 승인 API·관련 job 필드·DB action table을 제거했습니다.
    • ARCA release는 앱 이미지에 포함된 exact npm pin을 사용합니다. 별도 release mount fallback, 구 LINKS RGSS pack builder, hostname/form/cookie 기반 구형 Player 경로를 제거하고 현행 sandbox·Bearer bridge와 frontend에 결속된 형식으로 통합했습니다.
    • 런타임 DB payload를 별도 모듈로 분리하고 더 이상 쓰지 않는 구현·의존성·검증 경로와 문서 중복을 정리했습니다.

    업데이트 시 확인

    • migration 0053_remove_rtp_usage_approvals가 구 수동 RTP 승인 action table을 제거합니다. 업데이트 전 기존 백업 절차를 따르세요. 원본 게임·save를 삭제하거나 변환하는 migration은 아닙니다. 구 버전으로 되돌릴 때는 이미지 태그만 바꾸지 말고 삭제된 table에 대한 DB 호환성과 이전 백업 복원 필요성을 함께 확인해야 합니다.
    • RGSS build payload·Player manifest·host launch는 현행 v2만 수용합니다. Web static inspection은 v3만 수용합니다. 구형 실행 자료는 자동 변환되지 않으며 현행 경로로 다시 준비해야 합니다.
    • LINKS_PLAYER_BASE_DOMAIN, LINKS_RGSS23_RELEASE_SOURCE 및 구 release mount 설정을 제거했습니다. Compose와 ops 파일을 함께 갱신하고 catalog·Player·관련 runtime worker가 동일 릴리즈 이미지를 사용하도록 배포해야 합니다.
    • 원본 게임, 저장 데이터, RTP 캐시를 초기화할 필요는 없습니다. 이번 요청은 이미지 게시까지이며 NAS 운영 서비스 배포는 별도입니다.

    검증

    • Docker Compose 전체 build·format·lint·typecheck·문서 검사: PASS.
    • 전체 unit: 87 files / 496 tests PASS.
    • 격리 PostgreSQL schema: 5 files / 62 tests PASS. fresh/upgrade·migration 멱등성 및 API 권한·사용자 격리를 포함합니다.
    • 라이브러리·상세 합성 UI: Chromium/Firefox의 PC·태블릿·모바일, 저장·선택·실행·제거·실패 재시도·직접 실행 차단·글자 잘림과 버튼 정렬 검사 PASS.
    • 개발 적용 빌드의 저장→라이브러리→실행 동선과 실패 후 중복 실행 방지: PASS.
    • 격리 카탈로그 전체 통합 검사: PASS, console/page/request/server 오류 0건. 구 UI 검증 조건을 갱신하고 누락된 설치본의 메타데이터 404를 수정했습니다. 첫 실패 evidence는 보존했습니다.
    • 실제 게임 입력·오디오·서버 저장/복원 전체 acceptance 및 NAS 배포: NOT RUN. 합성 UI와 package/build 성공을 실제 게임 지원 완료로 간주하지 않습니다.

    게시 정보

    • Git main 및 주석 태그 0.16의 소스 커밋: 0b4326a119
    • 이미지: git.2ex.dev/hanyul/links:0.16 및 latest
    • 두 원격 이미지 태그의 동일 digest: sha256:ee3464936410b77ce4c75776cf85a5d768d603b512b094b7bf97b87b7fa5c0ac
    • 플랫폼: linux/amd64
    • 전체 171개 변경 파일을 포함했으며 Git 작업 폴더는 clean입니다.
    Downloads 2
  • LINKS 0.15 — 실행 진단·버그 신고·관리자 도구 개선

    LINKS 0.15

    이전 버전 0.14 대비 변경 사항입니다. 루트 패키지 버전은 0.15.0, ARCA dependency는 0.1.11입니다.

    주요 변경

    • 홈·관리자 검색에 엔진 조건과 기타 옵션을 추가하고, 검색·페이지 수·URL 복원·cursor 조건을 일치시켰습니다.
    • 실행 준비에서 원본 안정화, 실행 파일 복사, 게임 패키지 생성, 등록 등의 세부 단계와 파일 수·처리 용량·경과 시간을 표시합니다. 준비 완료 후 자동 실행과 탭 복귀 시 미완료 실행 재개를 제공합니다.
    • 실행 실패 화면에 새 세션 재시도와 버그 신고를 추가했습니다. 신고 snapshot·중복 방지·관리자 조회·모바일 상세를 제공합니다.
    • 파일 수신과 캐시의 메타데이터·조회·다운로드·쓰기·무결성·sandbox 전달 단계를 구분하고, 처리 byte·최대 조각·경과 시간·실제 request ID·안전한 실패 원인을 보존합니다.
    • 4 MiB를 넘는 정상 네트워크 조각을 분할 처리합니다. 파일 전체 크기·해시 검증은 유지하며, 정리 실패가 최초 오류를 덮지 않도록 했습니다.
    • API·Player·broker·Worker의 주요 오류를 허용된 종류·코드와 제한된 원인 체인으로 기록합니다. 원문 오류 메시지·stack·인증값·원본 경로는 상세 진단에 추가하지 않습니다.
    • 관리자 컨테이너 로그 화면에 검색·필터·수신 일시정지·최근 1,000건·스크롤 위치 보존과 최신 추적을 제공합니다.
    • Player 설정에 전체화면, VX/VX Ace 재시작·음량·음소거를 연결하고 저장 종료 및 공식 저장 경로 codec 처리를 개선했습니다.
    • 수집·스캔·재판정 작업 상태를 화면 이동·새로고침 뒤 복원합니다. DLsite 수집의 ByeDPI 연결과 고정 이미지를 갱신했습니다.
    • ARCA를 0.1.7에서 0.1.11로 갱신하고 공식 RTP 자동 준비·검증, 캐시 응답 헤더 보존 및 파일 전달을 개선했습니다. LINKS/ARCA 소유 경계와 미해결 호환성 근거를 문서화했습니다.

    업데이트 참고

    • 신고 저장용 migration 0052_player_bug_reports가 추가됩니다. 기존 DB·게임 원본·save·기존 실행 generation은 보존합니다.
    • Compose의 log-reader 및 provider/runtime 관련 구성을 함께 갱신하고, migration 이후 앱 서비스와 runtime worker가 동일 이미지인지 확인해야 합니다.
    • Git 태그만으로 NAS가 자동 배포되지는 않습니다. 기존 registry 배포 절차를 사용합니다.

    검증

    • Docker Compose 전체 build·format·lint·typecheck·문서 검사: PASS.
    • 전체 unit: 98 files / 541 tests PASS.
    • 격리 PostgreSQL schema: 5 files / 64 tests PASS. 새 migration에 맞춰 과거 업그레이드 test 3곳의 기대값을 수정했습니다.
    • Chromium·Firefox 합성 65 MiB 수신, byte/해시 확인, OPFS 재사용 및 실패 진단: PASS.
    • 합성 신고 재전송·관리자 요청별 처리량·모바일 표시, sandbox 전송·save 회귀: PASS.
    • 개발 서버 재빌드·migration·서비스 health·HTTPS·runtime/package readiness: PASS.
    • 해당 게임의 실제 Firefox 오류 재현과 실제 게임 입력·오디오·저장 acceptance, NAS 배포: NOT RUN. 4 MiB 조각 제한을 해당 신고의 확정 원인으로 주장하지 않습니다.

    게시 정보

    • 소스 커밋: e3814ec995
    • 이미지: git.2ex.dev/hanyul/links:0.15 및 latest
    • 두 이미지 태그의 digest: sha256:9b7ac1a2ccbf6ccba41fd7485766d203bbd68792f2a524e565ccd29e04e1e916
    Downloads 2