-
hanyul released this
2026-10-07 18:33:11 +09:00 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-int132d6e7)은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.shDownloads 2
-
Source code (zip)
0
2026-10-07 18:33:11 +09:00 -
Source code (tar.gz)
0
2026-10-07 18:33:11 +09:00