-
hanyul released this
2026-10-18 19:11:38 +09:00 LINKS 1.0.14
이 릴리스는 이전 릴리스 1.0.13(
e43a2034b2) 위에 코드 정리 wave(T75), 하위호환 제거, 미사용 schema 정리(migration 0004), 결함 수정(T76)을 더했습니다. 최종 소스는ee9e5a6877, 루트 패키지는 1.0.14, ARCA pin은 exact 0.1.21(변경 없음)입니다. schema가 바뀌어 migration 1개가 적용되며, 적용 뒤에는 이전 image(1.0.13)로 되돌릴 수 없습니다.업그레이드: 1.0.13 → 1.0.14는
sh update.sh만 실행합니다- 갱신 방법: 배포 디렉터리에서
sh update.sh만 실행합니다.reset.sh는 실행하지 않습니다. - migration 0004 적용:
update.sh가[4/6] Checking the database schema version뒤에Pending migrations: 1한 줄을 출력하고,[5/6]의up때migrationservice가0004_remove_unused_schema를 적용합니다(schemad28acb3f…→aa95c192…). 이 migration은 index 8개 DROP,audit_events.actor_typeCHECK 교체(operator·service제거),runtime_build_pins.kindcolumn DROP만 하며 행을 다시 쓰지 않습니다(운영 DB에 지우는 값을 가진 행은 0건). 성공하면Updated to 1.0.14 (catalog <image id>), runtime.package ready.로 끝납니다. - 이전 image로 복귀 불가: migration이 적용된 DB는 1.0.13 image의 사슬 밖(
mismatch)입니다. 1.0.13을 rollback pin으로 지정하면update.sh가[4/6]에서Run: sh reset.sh로 멈추고 아무것도 바꾸지 않습니다. 이 안내를 따르지 마십시오(데이터를 지우는 초기화입니다). pin을 비우고sh update.sh를 다시 실행하면 1.0.14로 돌아옵니다. LINKS는 backup을 제공하지 않습니다. - 배포 파일 변경:
update.sh가 받는 5개 파일 중ops/deploy-registry.sh(update.sh자신)와 **compose.yaml**이 바뀌었고update.sh가 이 둘을 설치합니다. 실행 중인 1.0.13update.sh는 새update.sh를 받아 한 번 이어 실행합니다. 새update.sh에는 1.0.8 backup stub 목록, 구 파일 삭제, 1.0.2deploy-files.sha256.tmp정리, 1.0.1 host coordinator lock 확인이 없습니다.compose.yaml은 반복되는 service 설정을 YAML anchor로만 묶었고 렌더링된 구성은 1.0.13과 같습니다.reset.sh,infra/docker/Caddyfile,ops/runtime-package-coordinator.sh는 1.0.13과 byte 단위로 같고.env.example도 바뀌지 않아.env.production에 할 일은 없습니다.
cd /volume1/docker/links sh update.sh운영자 작업은 없습니다. 기존 MV/MZ·VX/VX Ace 실행 버전, 세이브, RTP, 설정은 그대로입니다. 원본 game library는 읽기 전용으로 유지합니다.
변경 내용
코드 정리 wave(T75)
- web, API·launch broker·contracts, worker, scanner·runtime-builder·runtime, db, providers·domain, Player, tests·ops 8개 영역에서 중복 로직 통합, 과대 파일 분할, 죽은 분기·export와 공허한 test 제거. 공개 API(OpenAPI byte 동일)와 schema는 바뀌지 않았습니다.
하위호환 제거(사용자 결정 2026-10-18)
- 1.0.8
update.sh용 호환 stub(ops/backup-registry.sh·ops/backup-verify.compose.yaml),retired_files처리, 1.0.2deploy-files.sha256.tmp정리, 1.0.1 이하 host coordinator lock 확인, 운영 가이드의 구 버전 전환 안내를 지웠습니다. 자동 갱신 표식이 없는 release는Release <tag> does not support automatic updates; nothing was changed.로 멈춥니다.
Schema migration 0004
0004_remove_unused_schema: 선두 column으로 거르거나 정렬하는 query가 없는 index 8개 삭제(운영 DB 통계idx_scan0, FK를 받치는edition_resolution_decisions_history_idx는 유지),audit_events.actor_type에서operator·service제거(DB type·공유 contract·API 문서 동기화),runtime_build_pins.kindcolumn과 CHECK 삭제(pin index 재생성). 기준 schema도 같은 변경을 담습니다.
Player
- artifact 응답의 adapter별 CSP와 launch·HTML의 CORP 예외를 지웠습니다. game frame 응답의 CSP는 그대로이고, 그 밖 Player 응답(artifact·launch·비인증)은 공통 strict CSP와 CORP
same-origin을 씁니다.frame-ancestors·nosniff·no-transform은 유지됩니다. runtime-cache-client의requestPersistenceoption과 항상 켜져 있던 reserve 인자를 지웠습니다.
API·web
GET /play-links/{token}이cover를 항상 돌려주고include=coverquery를 받지 않습니다(모르는 query는 400 유지). 게스트 page는 기본 조회를 씁니다.INSTALLATION_NOT_FOUND·IDEMPOTENCY_CONFLICT문제 응답을 factory 하나로 통일했습니다(code·status 동일, title·detail 문구 통일). launch broker의 발급 거부 409는 code별 문구표 대신 고정 detail을 씁니다(catalog는 code만 읽음).- 참조 없는
og-default.svg를 지웠고,@rgss23/arca를 실제로 import하는packages/runtime-builder·apps/worker(dependencies)·apps/player(devDependencies)에 root와 같은 exact version으로 선언했습니다.
결함 수정
- 재분류 job과 상품 후보 discovery가 scan 완료 경로와 같이 parse 실패 sidecar의 root도 경계로 씁니다.
- 재연결 검토 화면이 서버가 확인한 stale·결정됨·없음 후보의 초안을 비우고 다시 불러오며, 그 뒤 같은 후보에 새로 쓴 초안은 보존합니다.
tests/run-player-lazy.ps1의 Firefox 셀이 Windows PowerShell 5.1에서 실행됩니다. container-log·editions·player-layout browser check의 기대값을 현재 세션·게스트 동작에 맞췄습니다.
검증과 남은 범위
- PASS(통합 main, 코디네이터 실행): static(Prettier·ESLint·typecheck·docs-static 944 files), 전체 unit 183 files·1,589 tests, schema 39 files·276 tests(빈 DB fresh 적용과 baseline+0001~0004 사슬 적용의 구조 등가 포함), 문서 검사,
git diff --check,run-catalog-browser(Chromium, 21개 단언, 오류 0), 1.0.13 대비 Compose 렌더링 동일(3 profile 조합). - PASS(브랜치별 작업자·독립 리뷰어 실행): MV/MZ × Chromium·Firefox browser matrix와 게스트 acceptance(Player header 변경·게스트 page 변경), VX Ace RGSS Chromium gate(운영 header hook 적용), 배포 기록기
check-deploy-registry92 case, scanner 통합, review-candidates·container-log·editions·player-layout check(Chromium·Firefox),run-player-lazyFirefox(PowerShell 5.1), OpenAPI diff(play-links 변경만), lockfile frozen install. - PASS(릴리스 소스
ee9e5a6, 코디네이터 실행): no-cache frozen install image build(Lockfile is up to date, 이미지 안 root 1.0.14·ARCA 0.1.21·migration 4개·자동 갱신 표식), foundation(7 service, catalogHttps·schemaReadiness·opaquePlayerOrigin·rejectedLaunchGrant·scannerReadOnly·roleIsolation PASS),run-browsermatrix(MZ·MV × Chromium·Firefox browser-acceptance 4개와 guest-play-acceptance 4개 모두 PASS). - 알려진 제한·NOT RUN: 개발 계획 9.1 잔여 3건과 R65c P3 후속, 실제 모바일 기기·실제 망, 실제 VX/VX Ace 게임과 RTP, 실제 오디오 출력. 격리 dind의 1.0.13→1.0.14
update.sh리허설은 이번에 실행하지 않았습니다(update.sh변경은 기록기 92 case와 독립 리뷰로 확인).
배포 이미지와 파일
- Git annotated tag는 1.0.14이고 최종 소스는
ee9e5a6877(branchmain)입니다. - 단일 linux/amd64 이미지:
git.2ex.dev/hanyul/links:1.0.14=git.2ex.dev/hanyul/links:latest - 원격 digest:
sha256:499e87953c61b2eac5967a5fef4175247b359ada5b6283282bf1667118056b22 - release asset은 없습니다.
update.sh가 tag1.0.14의 5개 배포 파일을 HTTPS로 받습니다. 대응은update.sh=ops/deploy-registry.sh,reset.sh=ops/reset-registry.sh이고, 나머지는compose.yaml·infra/docker/Caddyfile·ops/runtime-package-coordinator.sh입니다.
Downloads 2
-
Source code (zip)
0
2026-10-18 19:11:38 +09:00 -
Source code (tar.gz)
0
2026-10-18 19:11:38 +09:00
- 갱신 방법: 배포 디렉터리에서