-
hanyul released this
2026-10-17 18:43:34 +09:00 5.9.3 주요 변경사항
web · 운영 관리
이미지 색인·썸네일 생성패널이 설명·명령 결과·통계 영역에 고정 높이를 예약하던 것을 내용 높이로 되돌렸습니다. 명령 버튼 아래와 통계 아래의 빈 공간이 사라지며, 상태 갱신 때 같은 행 집합을 유지해 아래 패널이 흔들리지 않습니다.
web만 바뀐 호환 UI 수정이라 patch 5.9.3으로 게시합니다. 필수 환경 키·Compose·DB migration 변경은 없습니다.
이미지 게시 범위
- 새로 빌드(5.9.3·latest): web.
- digest 재사용: backend·crawler·nginx(5.9.0 digest), byedpi(5.4.0 digest). 빌드 입력이 같아 기존 digest에
5.9.3·latest태그만 붙였습니다. - 다섯 이미지 모두 5.9.3 태그가 있으므로
IMAGE_TAG=5.9.3으로 고정할 수 있습니다.
NAS 업데이트와 주의사항
운영은 운영 반영을 따릅니다.
- 운영이 아직 5.8.1이면 5.9.0의 주의사항(Compose 변경, migration 1건, crawler 교체로 수집 job 재개, Web Analytics 수동 snippet 전환)이 그대로 적용됩니다.
- 운영이 5.9.0 이상이면 web만 교체되며 수집·재확인에 영향이 없습니다. 열린 탭은 새로고침하면 새 UI를 받습니다.
- rollback: 5.9.2 web 이미지로 되돌릴 수 있습니다.
검증
9852b849(Release 직전 main)에서run-unit.ps1 -Workspace web(137 suites·1,705 tests), 이미지 검색·운영 UI 격리 검증(1440·768·390·320px, 패널 열기·상태 전환 전후 heading 좌표 불변),run-integration.ps1전체, 개발 web 재빌드가 통과했습니다. harness의 새operations-index시나리오(색인 중·통계 있음, 두 패널 펼침)에서 1440px 패널 높이가 256px에서 164px로, 390px에서 이미지 색인 521→382px·썸네일 469→330px로 줄었습니다.- backend·crawler·DB·Compose는 바뀌지 않아 그 runner와 운영 배포는 NOT RUN입니다. web UI 변경은 독립 리뷰 없이 병합했습니다.
게시 확인
- 릴리스 소스:
2ddb15295d0fc42a76a3b6f4b0c76e3e61344f86(annotated Git 태그5.9.3대상). - web
5.9.3·latest:sha256:c585f6ddb8c4963876f0ed27083a8b4ce2514e0ae801ebdf008b49996b5e72ac- linux/amd64 manifest:
sha256:84de54a96747611e038296abe4ae14aae2e2beeea0d83a7c1827f29064ef055d - OCI version
5.9.3·revision2ddb15295d0fc42a76a3b6f4b0c76e3e61344f86
- linux/amd64 manifest:
- backend
5.9.3·latest(5.9.0 digest 재사용):sha256:bb958cb7eb484cc02cb6ceceb45611a8e130ce0733ad446d40c54239a83d56b7 - crawler
5.9.3·latest(5.9.0 digest 재사용):sha256:766a65a10e5f315cdb80e8a6ceeb648afb64310844887a2a2b83f208d65741b4 - nginx
5.9.3·latest(5.9.0 digest 재사용):sha256:57ffc6290032122447f91d8d0c78641443eb283b7a1d5888175dec4a5a4dd837 - byedpi
5.9.3·latest(5.4.0 digest 재사용):sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a ops/publish-images.ps1 -Version 5.9.3 -Publish를 재시도 없이 완료했고 다섯 서비스의5.9.3·latest일치를 확인했습니다(Registry tags verified for 5.9.3.).
Downloads 2
-
Source code (zip)
0
2026-10-17 18:43:34 +09:00 -
Source code (tar.gz)
0
2026-10-17 18:43:34 +09:00
-
hanyul released this
2026-10-17 18:26:37 +09:00 5.9.2 주요 변경사항
web · 대시보드
- 읽기 기록의 상태 필터(
전체·읽는 중·완독)나 페이지를 바꿀 때 위의 통계 타일(읽은 작품·완독·읽은 페이지·북마크)과 선호 태그를 다시 불러오지 않습니다. 기록 목록만 갱신되며 기간을 바꿀 때만 통계가 다시 조회됩니다.
web · 북마크
작가·그룹 작품탭에서 쓰이지 않던 비활성 정렬 메뉴(갤러리 ID 정렬)를 없앴습니다. 탭 줄에는 탭만 남습니다.
web만 바뀐 호환 UI 수정이라 patch 5.9.2로 게시합니다. 필수 환경 키·Compose·DB migration 변경은 없습니다.
이미지 게시 범위
- 새로 빌드(5.9.2·latest): web.
- digest 재사용: backend·crawler·nginx(5.9.0 digest), byedpi(5.4.0 digest). 빌드 입력이 같아 기존 digest에
5.9.2·latest태그만 붙였습니다. - 다섯 이미지 모두 5.9.2 태그가 있으므로
IMAGE_TAG=5.9.2로 고정할 수 있습니다.
NAS 업데이트와 주의사항
운영은 운영 반영을 따릅니다.
- 운영이 아직 5.8.1이면 5.9.0의 주의사항(Compose 변경, migration 1건, crawler 교체로 수집 job 재개, Web Analytics 수동 snippet 전환)이 그대로 적용됩니다.
- 운영이 5.9.0 이상이면 web만 교체되며 수집·재확인에 영향이 없습니다. 열린 탭은 새로고침하면 새 UI를 받습니다.
- rollback: 5.9.1 web 이미지로 되돌릴 수 있습니다.
검증
68cabf5d(Release 직전 main)에서run-unit.ps1 -Workspace web(137 suites·1,704 tests), 북마크 UI 격리 검증(1440·768·390·450·320px, 조작 전후 이동 0px),run-integration.ps1전체(대시보드 요약 카드 box 검사 포함), 개발 web 재빌드가 통과했습니다. harness mock으로 상태 응답을 1.5초 지연시킨 상태에서 필터를 바꿔도 통계 타일·선호 태그·툴바가 그대로이고 목록 조회만 1건 나가는 것을 확인했습니다.- backend·crawler·DB·Compose는 바뀌지 않아 그 runner와 운영 배포, 실브라우저 로그인 확인은 NOT RUN입니다. web UI 변경은 독립 리뷰 없이 병합했습니다.
게시 확인
- 릴리스 소스:
a7161264b9a8f7f322fabcdccadf045f67bc86cd(annotated Git 태그5.9.2대상). - web
5.9.2·latest:sha256:433fc475f0950bdb3c93bb8b74c5ee9675e11730134e3144a75a9c4d26edcc2a- linux/amd64 manifest:
sha256:74b532b7700fd878a94263d0cb68bef3ab9335fc41ee6702477849b99259bf15 - OCI version
5.9.2·revisiona7161264b9a8f7f322fabcdccadf045f67bc86cd
- linux/amd64 manifest:
- backend
5.9.2·latest(5.9.0 digest 재사용):sha256:bb958cb7eb484cc02cb6ceceb45611a8e130ce0733ad446d40c54239a83d56b7 - crawler
5.9.2·latest(5.9.0 digest 재사용):sha256:766a65a10e5f315cdb80e8a6ceeb648afb64310844887a2a2b83f208d65741b4 - nginx
5.9.2·latest(5.9.0 digest 재사용):sha256:57ffc6290032122447f91d8d0c78641443eb283b7a1d5888175dec4a5a4dd837 - byedpi
5.9.2·latest(5.4.0 digest 재사용):sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a ops/publish-images.ps1 -Version 5.9.2 -Publish를 재시도 없이 완료했고 다섯 서비스의5.9.2·latest일치를 확인했습니다(Registry tags verified for 5.9.2.).
Downloads 2
-
Source code (zip)
0
2026-10-17 18:26:37 +09:00 -
Source code (tar.gz)
0
2026-10-17 18:26:37 +09:00
- 읽기 기록의 상태 필터(
-
hanyul released this
2026-10-17 18:03:50 +09:00 5.9.1 주요 변경사항
web · 고정 폭 잔재 정리
- 북마크
갤러리·작가·그룹탭의 개수 칸이 네 글자를 예약하던 것을 숫자 자릿수만큼만 차지하게 바꿨습니다. 개수를 받기 전에는 칸을 그리지 않습니다. - 운영 관리 상태 badge의 최소 폭을 없애
대기·완료처럼 짧은 상태가 글자 폭에 맞게 표시됩니다. - 고급 검색 태그 목록의
+ 포함·− 제외badge와 상단 메뉴의 계정 이름 칸도 내용 폭으로 바꿨습니다. 상태가 바뀌어도 줄이 흔들리지 않도록 자리표시는 유지합니다. - 라벨 집합이 정해져 있거나 열 정렬이 목적인 고정 폭(로그인/로그아웃 버튼, 상세 namespace 열, 페이지 이동 버튼 등)은 그대로입니다.
web만 바뀐 호환 UI 수정이라 patch 5.9.1로 게시합니다. 필수 환경 키·Compose·DB migration 변경은 없습니다.
이미지 게시 범위
- 새로 빌드(5.9.1·latest): web.
- digest 재사용: backend·crawler·nginx(5.9.0 digest), byedpi(5.4.0 digest). 빌드 입력이 같아 기존 digest에
5.9.1·latest태그만 붙였습니다. - 다섯 이미지 모두 5.9.1 태그가 있으므로
IMAGE_TAG=5.9.1로 고정할 수 있습니다.
NAS 업데이트와 주의사항
운영은 운영 반영을 따릅니다.
- 운영이 아직 5.8.1이면 5.9.0의 주의사항(Compose 변경, migration 1건, crawler 교체로 수집 job 재개, Web Analytics 수동 snippet 전환)이 그대로 적용됩니다.
- 운영이 5.9.0이면 web만 교체되며 수집·재확인에 영향이 없습니다. 열린 탭은 새로고침하면 새 UI를 받습니다.
- rollback: 5.9.0 web 이미지로 되돌릴 수 있습니다.
검증
c65de8f5(Release 직전 main)에서run-unit.ps1 -Workspace web(137 suites·1,703 tests), 북마크 UI 격리 검증(1440·768·390·450·320px, 조작 전후 이동 0px), 이미지 검색·운영 UI 격리 검증,run-integration.ps1전체, 개발 web 재빌드가 통과했습니다.- backend·crawler·DB·Compose는 바뀌지 않아 그 runner와 운영 배포는 NOT RUN입니다. web UI 변경은 독립 리뷰 없이 병합했습니다.
게시 확인
- 릴리스 소스:
300ff5d143b7df4e93f4a86274d0746717ffd114(annotated Git 태그5.9.1대상). - web
5.9.1·latest:sha256:41b2edabecc5e3d7ce0ccdc201fb0b8bf17feb5a38b9999c10c518c4423f8378- linux/amd64 manifest:
sha256:5aeaa26addd1a839e1667415dde7024dbeeb92fb7c247834888180600a1fe1fc - OCI version
5.9.1·revision300ff5d143b7df4e93f4a86274d0746717ffd114
- linux/amd64 manifest:
- backend
5.9.1·latest(5.9.0 digest 재사용):sha256:bb958cb7eb484cc02cb6ceceb45611a8e130ce0733ad446d40c54239a83d56b7 - crawler
5.9.1·latest(5.9.0 digest 재사용):sha256:766a65a10e5f315cdb80e8a6ceeb648afb64310844887a2a2b83f208d65741b4 - nginx
5.9.1·latest(5.9.0 digest 재사용):sha256:57ffc6290032122447f91d8d0c78641443eb283b7a1d5888175dec4a5a4dd837 - byedpi
5.9.1·latest(5.4.0 digest 재사용):sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a ops/publish-images.ps1 -Version 5.9.1 -Publish를 재시도 없이 완료했고 다섯 서비스의5.9.1·latest일치를 확인했습니다(Registry tags verified for 5.9.1.).
Downloads 2
-
Source code (zip)
0
2026-10-17 18:03:50 +09:00 -
Source code (tar.gz)
0
2026-10-17 18:03:50 +09:00
- 북마크
-
hanyul released this
2026-10-17 16:20:28 +09:00 5.9.0 주요 변경사항
web · 보안 헤더(CSP)
- 강제 CSP를 web이 소유합니다.
proxy.ts가 HTML 문서 요청마다 nonce를 만들고script-src에'nonce-…' 'strict-dynamic'을 보내므로'unsafe-inline'이 빠졌습니다. 존재하지 않는 경로의 404 HTML에도 CSP가 정확히 하나 붙습니다. - Nginx는 문서 CSP를 떼고
/api/*응답에만default-src 'none'CSP를 붙입니다. 위반 수집(report-to)은 두지 않습니다. - Cloudflare Web Analytics는 edge 자동 주입 대신 nonce를 붙인 수동 beacon으로 넣습니다. 선택 환경 키
CLOUDFLARE_WEB_ANALYTICS_TOKEN(runtime)이 비어 있으면 beacon을 넣지 않습니다.
web · 화면 정리
- 다른 탭·역할에서만 보이는 컨트롤을 위해 예약하던 빈 공간을 없앴습니다. 북마크
작가·그룹탭 위 약 150px, 좁은 화면 홈 검색 줄 아래 약 70px, 고급 검색 포함·제외 태그 영역의 고정 높이 공백이 사라졌습니다. - 정렬 버튼·숨긴 북마크·숨긴 기록 버튼, 설정의 select·segmented를 내용 폭으로 줄였습니다.
- 운영 관리 상태 badge를 내용 폭으로 바꾸고 보조 문구와 한 줄에 두어 모든 section 제목 줄이 같은 높이입니다(좁은 화면 포함). 좁은 화면 북마크에서 세 탭이 모두 보입니다.
- 홈 마지막 검색 조건 저장 형식에
version: 2를 둡니다. 옛 형식은 계속 읽습니다.
crawler
- SIGTERM·SIGINT에서 새 요청을 받지 않고 진행 중인 요청을 최대 15초 마친 뒤 수집은 user stop과 같은 안전 위치에서, GC는 현재 삭제 단위를 끝낸 뒤 멈추고 종료합니다(전체 예산 50초). 종료 중 다시 받은 신호는 무시합니다. 재시작 뒤 복구 판정(
재개 대기)은 기존과 같습니다. - 루트
GET /status와GET garbage-collection/orphan-audit를 지웠습니다(backend는 5.8.0부터 호출하지 않습니다).
backend · DB
- 이어 읽기 조회
GET /api/reading-progress/continue를 지웠습니다(web은 5.8.1부터 호출하지 않습니다). - 운영 scan이 0회인
idx_images_page_number(32MB)를DropImagesPageNumberIndexmigration이DROP INDEX CONCURRENTLY로 지웁니다.
기타
- 기반 이미지
node:24-alpine·nginx:alpinedigest를 갱신했습니다. - 운영 가이드에서 5.3.0 rollback 안내를 지웠습니다. backend·crawler rollback 하한은 5.4.0입니다.
API 제거·migration·CSP 소유 이동이 있지만 현재 web·backend는 지운 경로를 쓰지 않고 필수 환경 키·데이터 재설정이 없어 minor 5.9.0으로 게시합니다.
이미지 게시 범위
- 새로 빌드(5.9.0·latest): backend·crawler·web(코드·기반 이미지), nginx(CSP 소유 이동·기반 이미지).
- digest 재사용: byedpi(5.4.0 digest). 빌드 입력이 같아 기존 digest에
5.9.0·latest태그만 붙였습니다. - 다섯 이미지 모두 5.9.0 태그가 있으므로
IMAGE_TAG=5.9.0으로 고정할 수 있습니다.
NAS 업데이트와 주의사항
운영은 운영 반영을 따릅니다.
- Compose 변경: crawler
stop_grace_period: 60s, webCLOUDFLARE_WEB_ANALYTICS_TOKEN(선택). 5.9.0 태그의compose.yml·.env.example을 받아 배포합니다. - DB migration 1건:
DropImagesPageNumberIndex(transaction 밖DROP INDEX CONCURRENTLY, 쓰기 차단 없음). - crawler 교체: backend migration 때문에 crawler가 멈추므로 실행 중인 수집 job은
재개 대기가 되며 운영 화면에서 재개합니다. - Web Analytics: 배포 직후 edge 자동 주입 beacon은 nonce가 없어 CSP에 막힙니다. 계속 쓰려면 Cloudflare 대시보드를 JS snippet 수동 설치로 바꾸고
.env.production에CLOUDFLARE_WEB_ANALYTICS_TOKEN을 넣습니다(Cloudflare 설정). - rollback: 5.8.1로 되돌릴 수 있습니다(지운 index는 down migration 없이도 이전 이미지가 쓰지 않습니다).
검증
b2313612(Release 직전 main)에서 개발 stack 재빌드,run-unit.ps1 -Workspace all(backend 611·crawler 926·web 1,703 tests),run-operations.ps1 -DeploymentOnly,run-integration.ps1전체,run-compose-compat.ps1(5.8.1과 3조합),run-upgrade.ps1(5.8.1 → 5.9.0, deploy-script·watchtower 모두 PASS, 1초 넘는 lock 대기 0)이 통과했습니다.run-schema.ps1,run-crawler-recovery.ps1(중복 SIGTERM·GC 삭제 단위 중 SIGTERM 포함),run-search-benchmark.ps1, 이미지 검색·운영 UI와 북마크 UI 격리 좌표 검사는 같은 코드의 작업 브랜치에서 통과했습니다.- 운영 DB 읽기 전용 측정(2026-10-17)으로 index 제거를 판정했습니다. 실제 Hitomi·E-Hentai 통신, 운영 Cloudflare edge·Web Analytics, 실기기·Safari 확인, 운영 배포는 NOT RUN입니다. web UI 정리는 독립 리뷰 없이 병합했습니다.
게시 확인
- 릴리스 소스:
5fea7c20aa2f310030e08d64c167a857b512e4c9(annotated Git 태그5.9.0대상). - web
5.9.0·latest:sha256:bb56382ac86e2df9b64465bcebf74678ab27ad1ae5dac7d4000fa5e83446d54d- linux/amd64 manifest:
sha256:bd8fccf42ddaa920619f8e0073f41871f2f7263546cc509ecb703e9ad40c90ba
- linux/amd64 manifest:
- backend
5.9.0·latest:sha256:bb958cb7eb484cc02cb6ceceb45611a8e130ce0733ad446d40c54239a83d56b7- linux/amd64 manifest:
sha256:832435a26f007562a2be21fcab31f6c01cfe69e7425a48139807e2b965f113de
- linux/amd64 manifest:
- crawler
5.9.0·latest:sha256:766a65a10e5f315cdb80e8a6ceeb648afb64310844887a2a2b83f208d65741b4- linux/amd64 manifest:
sha256:353f25e027769e38933eb501449c5150226b8604d2cbe5e4379904e0e97df6cb
- linux/amd64 manifest:
- nginx
5.9.0·latest:sha256:57ffc6290032122447f91d8d0c78641443eb283b7a1d5888175dec4a5a4dd837- linux/amd64 manifest:
sha256:4a4223e37f77747547fb5ddb87165d8589c76d68306c87a4777d709efdd0aff5
- linux/amd64 manifest:
- byedpi
5.9.0·latest(5.4.0 digest 재사용):sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a ops/publish-images.ps1 -Version 5.9.0 -Publish를 재시도 없이 완료했고 다섯 서비스의5.9.0·latest일치를 확인했습니다(Registry tags verified for 5.9.0.).
Downloads 2
-
Source code (zip)
0
2026-10-17 16:20:28 +09:00 -
Source code (tar.gz)
0
2026-10-17 16:20:28 +09:00
- 강제 CSP를 web이 소유합니다.
-
hanyul released this
2026-10-17 12:01:42 +09:00 5.8.0 대비 변경사항
web · 조작 시 레이아웃 고정
- 홈 툴바:
필터 초기화버튼의 상태 점을 공간을 예약한 채 숨겨 조건을 적용·해제해도 버튼 폭과 툴바 줄이 바뀌지 않습니다.무작위·고급 검색 토글 등 다른 버튼도 눌러도 주변 요소가 움직이지 않습니다. - 북마크: 탭 개수를 label과 분리하고 선택 탭의 굵은 글씨를 없애
갤러리·작가·그룹전환 때 정렬 메뉴가 움직이지 않습니다. 정렬 메뉴는 세 탭 모두 같은 자리에 있고작가·그룹 작품탭에서는 비활성으로 표시합니다. 갤러리 탭 전용 검색·숨김 줄은 다른 탭에서도 공간을 유지한 채 숨깁니다. - 공용: 페이지 스크롤바 공간을 항상 예약(
scrollbar-gutter: stable)하고 segmented 선택 표시의 글자 굵기를 통일했습니다. 대시보드·설정 토글, 운영 패널의 숫자(tabular-nums·고정 폭)도 상태가 바뀌어도 배치가 고정됩니다.
web · 북마크 작가·그룹 작품
- 작가 선택 칩 줄(
모아 볼 작가·그룹)을 없앴습니다. 탭은 북마크한 모든 작가·그룹(최근 추가 200명)의 작품만 합쳐 보여 줍니다. API(creator-feed)는 바뀌지 않았습니다.
테스트
- 홈·북마크·운영·이미지 검색 브라우저 회귀에 조작 전후 좌표 불변 검사를 1440·768·390px(북마크는 450·320px 추가)로 넣었습니다.
web만 바뀐 호환 UI 수정이라 patch 5.8.1을 적용합니다. 필수 환경 변수·수동 전환·데이터 재설정·DB migration이 없습니다.
이미지 게시 범위
- 새로 빌드(5.8.1·latest): web(조작 시 레이아웃 고정·북마크 칩 제거).
- digest 재사용: backend·crawler(5.8.0 digest), nginx(5.6.1 digest), byedpi(5.4.0 digest). 빌드 입력이 같아 기존 digest에
5.8.1·latest태그만 붙였습니다. 재사용 이미지의 OCIversion·revisionlabel과 backend health의version은 원래 빌드 값으로 남습니다. - 모든 자체 이미지에 5.8.1 태그가 있으므로
IMAGE_TAG=5.8.1을 지정할 수 있습니다.
NAS 업데이트와 주의사항
운영자는 운영 반영을 따릅니다.
- Compose 변경 없음, DB migration 없음, crawler 교체 없음: web만 교체되므로 수집 job과 metadata 재확인은 영향을 받지 않습니다.
- 열린 브라우저 탭은 새로고침하면 새 UI를 받습니다. 로그인 cookie는 그대로 유효합니다.
- rollback: 5.8.0 web 이미지로 되돌릴 수 있습니다.
NAS 배포는 게시 직후 같은 작업에서 진행합니다.
latest를 승격했으므로 Watchtower가 켜진 운영 서버는 스스로 5.8.1 web으로 교체할 수 있습니다.검증
- Orca 워커 브랜치
af99b47d(main과 같은 트리)에서run-unit.ps1 -Workspace web(134 suites·1,684 tests)과run-integration.ps1(API·브라우저·crawler runtime·Push 재시도, 홈 1440·768·390px 좌표 delta 0px)이 통과했고, 북마크(1440·768·390·450·320px)·운영(1440·768·390·320px) 격리 브라우저 좌표 검사가 통과했습니다. 수정 전 측정된 이동(홈 버튼 폭 14px·줄 28px, 북마크 탭 1px·정렬 폭 42px, 운영 제목 32px)은 수정 뒤 0px입니다. - 읽기 전용 리뷰는 P1·P2 없음입니다(P3: 운영 숫자 변동 좌표 회귀 보강은 후속). 개발 stack의 web을 재빌드해 healthy를 확인했습니다. backend·crawler·DB는 바뀌지 않아 그 runner와 실기기·Safari·Firefox 확인은 NOT RUN입니다.
게시 확인
- 릴리스 소스:
a5f454081de4fb835e0adcbf2971396e16e5fb8d(annotated Git 태그5.8.1대상). - web
5.8.1·latest:sha256:a950464624938278dd2c9cd94bf19048a7098f2c1da428e5db904a091853fc78- linux/amd64 manifest:
sha256:06b891c5a827d89554ce24909fe60250ce1557c3edd4ade596432a0a7110003b - OCI version
5.8.1·revisiona5f454081de4fb835e0adcbf2971396e16e5fb8d - 입력 지문
16c680eb137935bcc3aa4879370b3bd53ec74731bf4388fb811bcbdcf51ba94b
- linux/amd64 manifest:
- backend
5.8.1·latest(5.8.0 digest 재사용):sha256:f01204b9b831ef7eba2613ec716ce3328e901ea4315776549150449cdcf24caf - crawler
5.8.1·latest(5.8.0 digest 재사용):sha256:a7759c4dd73c4b5d268a6e85b3b5ca4408c6a1d6700640db99a1cead57a47f98 - nginx
5.8.1·latest(5.6.1 digest 재사용):sha256:a42874d3d8e4304ca0d6ba6f67b073232b3d15489fd373f0efcf40e706a5b78c - byedpi
5.8.1·latest(5.4.0 digest 재사용):sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a ops/publish-images.ps1 -Version 5.8.1 -Publish로 web만 새로 빌드·게시하고 나머지 네 서비스는 기존 digest에 버전 태그를 붙였습니다. 버전 태그 게시 뒤 같은 digest로latest를 승격했고, 다섯 서비스의5.8.1·latest일치를 최종 검증했습니다(Registry tags verified for 5.8.1.). 재시도 없이 한 번에 완료했습니다.
Downloads 2
-
Source code (zip)
0
2026-10-17 12:01:42 +09:00 -
Source code (tar.gz)
0
2026-10-17 12:01:42 +09:00
- 홈 툴바:
-
hanyul released this
2026-10-17 08:40:30 +09:00 5.7.0 대비 변경사항
crawler · 완료 작품 metadata 재확인
- 확인 하나가 끝나면 30초를 쉬지 않고 바로 다음 작품을 확인합니다. 빠른 응답(연속 404 등)이 이어져도 요청 시작 간격은 수집 metadata lane과 같은 100ms 이상을 지키며, 429·503 보호 회로와 수집 중 대기·한 바퀴 뒤 자동 정지는 그대로입니다. 운영 68,500개 한 바퀴가 약 24일에서 수 시간으로 줄어듭니다. 진행 중이던 바퀴는 저장된 위치에서 이어집니다.
- 운영 화면 재확인 패널의 설명 단락을 지웠습니다.
web · 홈
- 정렬 드롭다운을 없애고 갤러리 ID 내림차순 하나로 고정했습니다. 그 자리의
무작위버튼을 누르면 무작위 순서로 보고, 다시 누르면 다시 섞입니다. 무작위 상태에서필터 초기화나 로고를 누르면 갤러리 ID 정렬로 돌아갑니다. 옛 링크의sort=recent·sort=pages는 기본 정렬로 열립니다. - 카테고리 검색: 검색창에
아티스트 CG나artistcg를 치면 태그처럼 카테고리 제안이 나오고, 선택하면category:"artistcg"조건으로 그 카테고리 작품만 봅니다. 제외(-)도 태그와 같습니다.
web · 북마크
작가·그룹 작품탭: 북마크한 모든 작가·그룹의 작품을 홈처럼 하나의 grid(source ID 내림차순, 무한 스크롤)로 보고, 위의 칩으로 한 작가·그룹만 볼 수 있습니다. 북마크가 200명을 넘으면 최근 추가한 200명만 합치고 나머지는 칩으로 고릅니다. 개인·전역 차단이 바뀌면 다시 조회합니다.- 갤러리 북마크 정렬에서
페이지 수를 뺐습니다. 저장된 선택은 기본값으로 읽습니다.
API
GET /api/galleries·POST /api/galleries/search의tags·excludeTags가 pseudo-namespacecategory:"<코드|표시 이름>"을 받습니다. 모르는 포함 값은 결과 없음, 모르는 제외 값은 무시합니다.GET /api/tags/search?groupBy=name자동완성이 일치하는 카테고리를namespace: 'category'항목으로 앞에 돌려줍니다(공개 노출 작품 수, 60초 cache).POST /api/galleries/creator-feed(공개 query, weight는creator-previews와 같음):creators(1200)·60)·page·limit(1includeBlocked로 여러 작가·그룹의 작품을 합쳐 돌려줍니다.
문서·테스트
- 크롤러 복구·API 계약·운영 가이드·아키텍처·개인화 설계 문서를 새 동작에 맞췄습니다. 통합 브라우저 스크립트를 새 UI에 맞추고, runner에서 5초 timeout에 걸리던 이미지 검색 animated GIF spec의 fixture를 줄였습니다.
기존 데이터·배포 계약을 유지하는 기능 추가라 minor 5.8.0을 적용합니다. 필수 환경 변수·수동 전환·데이터 재설정·DB migration이 없습니다. 제품 버전은 Git 태그·OCI label·문서로 관리하며 private package와 lockfile의 버전은 유지합니다.
이미지 게시 범위
- 새로 빌드(5.8.0·latest): backend(category 필터·자동완성·creator-feed), crawler(재확인 간격·pacing), web(홈 무작위 버튼·카테고리 제안·북마크 모아보기).
- digest 재사용: nginx(5.6.1 digest), byedpi(5.4.0 digest). 빌드 입력이 같아 기존 digest에
5.8.0·latest태그만 붙였습니다. 재사용 이미지의 OCIversion·revisionlabel은 원래 빌드 값으로 남습니다. - 모든 자체 이미지에 5.8.0 태그가 있으므로
IMAGE_TAG=5.8.0을 지정할 수 있습니다.
NAS 업데이트와 주의사항
운영자는 운영 반영을 따릅니다.
- Compose 변경 없음:
compose.yml·.env.example은 5.7.0과 같습니다. - DB migration 없음: backend 이미지는 다시 빌드되지만 새 migration은 없습니다.
- crawler 재시작: crawler 이미지 교체로 crawler가 재시작되면 실행 중이던 수집 job은 기동 복구 규칙에 따라
stopped(중단)로 정리됩니다. Hitomi는 자동 재개·20시 예약으로 이어지지만 E-Hentai는 자동 재개가 없으므로 운영 화면에서 수동으로 재개해야 합니다. 완료 작품 metadata 재확인은 저장된 위치에서 새 간격으로 이어집니다. - rollback: migration이 없어 5.7.0 이미지로 되돌릴 수 있습니다. 5.7.0 web은
category:조건·작가·그룹 작품탭이 없을 뿐 저장값은 그대로 읽습니다. - 로그인 cookie는 그대로 유효하며 다시 로그인할 필요가 없습니다.
NAS 배포는 게시 직후 같은 작업에서 진행합니다.
latest를 승격했으므로 Watchtower가 켜진 운영 서버는 스스로 5.8.0으로 교체할 수 있습니다.검증
- 최종 main
0d776e82(앱 코드는 릴리스 commitbea367a8·b959f18f과 같은 트리)에서run-unit.ps1 -Workspace all(backend 80 suites·615 tests, crawler 69·905, web 134·1,684)이 통과했고, 앱 코드가 같은 테스트 브랜치7bdcdc71에서run-integration.ps1(API·브라우저·crawler runtime·Push 재시도)이 통과했습니다. - 개발 stack을 재빌드해 전 서비스 healthy를 확인했고, 실제 API로 카테고리 제안(
아티→아티스트 CG)·category:"manga"필터·모르는 카테고리 0건을 확인했습니다. - 각 변경은 Orca 워커 브랜치에서 구현 뒤 읽기 전용 리뷰를 거쳐 병합했습니다(재확인 간격·북마크 모아보기는 지적 수정 뒤 2라운드 통과). DB schema·Compose·Nginx는 바뀌지 않아
run-schema.ps1·run-compose-compat.ps1·run-upgrade.ps1·run-crawler-recovery.ps1과 실제 Hitomi·E-Hentai 전송 runner, 브라우저 수동 확인,creator-feed의 운영 규모 실행 계획 측정은 NOT RUN입니다.
게시 확인
- 릴리스 소스:
bea367a86321ae44660b33715a50eab7b8d50bf1(annotated Git 태그5.8.0대상). - backend
5.8.0·latest:sha256:f01204b9b831ef7eba2613ec716ce3328e901ea4315776549150449cdcf24caf- linux/amd64 manifest:
sha256:c316be0fda363060496fcc87ab81c52217e66f7cd99d26bf2b26da55cb1225a8 - OCI version
5.8.0·revisionbea367a86321ae44660b33715a50eab7b8d50bf1 - 입력 지문
60d8f467a3791b21328211184756e7e4df765c27c9578524a228abbcf8a5230b
- linux/amd64 manifest:
- crawler
5.8.0·latest:sha256:a7759c4dd73c4b5d268a6e85b3b5ca4408c6a1d6700640db99a1cead57a47f98- linux/amd64 manifest:
sha256:02465405367742dd29bf6c83ffdd556ce15b1257d8aba6ff9e004d5f556672a4 - 입력 지문
5cc4302225f521098377c1095ee8c96fd30d82e6da0988829ed1d09490ca3382
- linux/amd64 manifest:
- web
5.8.0·latest:sha256:c8a824b05a49c9e63b6c532eb221b1cab4fdd871f00f021c9e9eff7fe2f670a3- linux/amd64 manifest:
sha256:30a7d9f3d4e9c2346425afa283ae7a4c665312690c8a4367b20f6e0aaae58e83 - 입력 지문
1d56323b626f5cc3b99ca177ba67b3b28aa951477febe89dc369c63c846107fb
- linux/amd64 manifest:
- nginx
5.8.0·latest(5.6.1 digest 재사용):sha256:a42874d3d8e4304ca0d6ba6f67b073232b3d15489fd373f0efcf40e706a5b78c - byedpi
5.8.0·latest(5.4.0 digest 재사용):sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a ops/publish-images.ps1 -Version 5.8.0 -Publish로 backend·crawler·web을 새로 빌드·게시하고 nginx·byedpi는 기존 digest에 버전 태그를 붙였습니다. 버전 태그 게시 뒤 같은 digest로latest를 승격했고, 다섯 서비스의5.8.0·latest일치를 최종 검증했습니다(Registry tags verified for 5.8.0.). 재시도 없이 한 번에 완료했습니다.
Downloads 2
-
Source code (zip)
0
2026-10-17 08:40:30 +09:00 -
Source code (tar.gz)
0
2026-10-17 08:40:30 +09:00
-
hanyul released this
2026-10-16 20:46:41 +09:00 5.6.1 대비 변경사항
crawler · 완료 작품 metadata 재확인
- 완료 Hitomi 작품의 재확인이 제목·태그에 더해 원본 게시 시각(
uploadDate)·분류(category)·언어(language)·원본 URL(sourceUrl)·source metadata(canonicalSourceId·relatedSourceIds) 도 원본 galleryinfo에 맞춥니다. 값의 정규화·비교는 수집 저장과 같고, 바뀐 컬럼만 gallery 행 잠금 아래 한 번에 씁니다. 게시 시각 수집이 들어오기 전(2026-10-03 이전)에 완료된 작품의 비어 있던 게시 시각이 한 바퀴 안에 채워집니다. - 응답에 값이 없으면 기존 값을 유지합니다. parser가 분류·언어 누락에 붙이는
n/a도 값 없음으로 보아 저장된 실제 값을 덮지 않습니다. - 파일 목록 지문(
fileFingerprint)은 파일 변경 감지의 기준이라 응답 값으로 덮지 않고 저장값을 보존합니다. page 수·파일 크기·page 범위·원본 원장·완료 표시는 그대로 바꾸지 않습니다. - 상태 누계에
fieldsUpdated(제목·태그 밖 항목을 갱신한 작품 수)가 추가됐고 운영 화면이기타 항목 갱신으로 보여 줍니다. 이전 버전이 저장한 상태 행에는 이 키가 없어0으로 읽습니다.
문서
- 크롤러 복구·API 계약·운영 가이드·아키텍처 문서의 재확인 반영 범위를 새 동작에 맞췄습니다.
기존 데이터·API·배포 계약을 유지하는 기능 확장이라 minor 5.7.0을 적용합니다. 필수 환경 변수·수동 전환·데이터 재설정·DB migration이 없습니다. 제품 버전은 Git 태그·OCI label·문서로 관리하며 private package와 lockfile의 버전은 유지합니다.
이미지 게시 범위
- 새로 빌드(5.7.0·latest): backend(shared 재확인 상태 타입), crawler(재확인 동기화 범위·
n/a처리·누계), web(운영 화면기타 항목 갱신·설명 문구). - digest 재사용: nginx(5.6.1 digest), byedpi(5.4.0 digest). 빌드 입력이 같아 기존 digest에
5.7.0·latest태그만 붙였습니다. 재사용 이미지의 OCIversion·revisionlabel과 backend health의version은 원래 빌드 값으로 남습니다. - 모든 자체 이미지에 5.7.0 태그가 있으므로
IMAGE_TAG=5.7.0을 지정할 수 있습니다.
NAS 업데이트와 주의사항
운영자는 운영 반영을 따릅니다.
- Compose 변경 없음:
compose.yml·.env.example은 5.6.1과 같습니다. - DB migration 없음: backend 이미지는 shared 타입 변경으로 다시 빌드되지만 새 migration은 없습니다.
- crawler 재시작: crawler 이미지 교체로 crawler가 재시작되면 실행 중이던 수집 job은 기동 복구 규칙에 따라
stopped(중단)로 정리됩니다. Hitomi는 자동 재개·20시 예약으로 이어지지만 E-Hentai는 자동 재개가 없으므로 운영 화면에서 수동으로 재개해야 합니다. - 재확인 한 바퀴 다시 돌리기: 이미 한 바퀴를 마쳤거나 도중인 설치에서 비어 있던 게시 시각 등을 채우려면 Hitomi 패널의
완료 작품 metadata 재확인을다시 실행(완료 상태) 하거나, 도중이면 끈 뒤crawling_states의hitomi-metadata-recheck행에서cursor를 비우고 다시 켭니다. 새 바퀴는 가장 큰 ID부터 내려가 한 바퀴만 돌고 스스로 멈춥니다. - rollback: migration이 없어 5.6.1 이미지로 되돌릴 수 있습니다. 5.6.1 crawler는
fieldsUpdated를 읽지 않고 상태 행의 값은 그대로 남습니다. - 로그인 cookie는 그대로 유효하며 다시 로그인할 필요가 없습니다.
NAS 배포는 게시 직후 별도로 진행합니다.
latest를 승격했으므로 Watchtower가 켜진 운영 서버는 스스로 5.7.0으로 교체할 수 있습니다.검증
- 병합 main
97025ac1(앱 코드는 릴리스 commit2493f048과 같은 트리)에서run-integration.ps1(API·브라우저·crawler runtime·Push 재시도)이 통과했고, 개발 stack을 재빌드해 전 서비스 healthy를 확인했습니다. - 구현 브랜치
676df459에서run-unit.ps1 -Workspace all(backend 78 suites·589 tests, crawler 69·900, web 133·1,661)이, 리뷰 지적(n/a누락 표식) 수정 뒤97025ac1트리에서run-unit.ps1 -Workspace crawler(69·903)가 통과했습니다. - 5.6.1이 저장한 재확인 상태 행(누계에
fieldsUpdated없음)을 개발 DB에서 켜서, 첫 확인이fieldsUpdated: 1(관련 작품 목록 갱신)·태그 갱신·전역 차단 재평가를 기록하고 저장된 파일 지문을 보존하는 것을 확인했습니다. - 두 커밋 묶음 모두 병합 전 읽기 전용 리뷰(2라운드)를 거쳤습니다. DB schema·Compose·Nginx는 바뀌지 않아
run-schema.ps1·run-compose-compat.ps1·run-upgrade.ps1·run-crawler-recovery.ps1과 실제 Hitomi·E-Hentai 전송 runner는 NOT RUN입니다.
게시 확인
- 릴리스 소스:
2493f048251bd77a872c69702576336c360dae62(annotated Git 태그5.7.0대상). - backend
5.7.0·latest:sha256:a4a640e1adf82c1427195716dab6f14b229bd0521f288684b5036e648dfeb840- linux/amd64 manifest:
sha256:9d87519620ae737b0c05aa4360bb6378ce253eeb7aee0cd484782d0e17c5a0c3 - OCI version
5.7.0·revision2493f048251bd77a872c69702576336c360dae62 - 입력 지문
c12694b84e98017d8476acbcad2cd710c029776b05dc1e56ca19028655a96d26
- linux/amd64 manifest:
- crawler
5.7.0·latest:sha256:4680801fc1bfa20cbe496155422e8dd6babb459b6ff852612b5b3e8394e97c12- linux/amd64 manifest:
sha256:f31df5c46ccea65970cd75ea2ad25bc103afac55d23f7a55d826f3fca2058e04 - 입력 지문
075affad830eae930ed34f5b05b8d48156e522ae8e0e34692c25079de242f961
- linux/amd64 manifest:
- web
5.7.0·latest:sha256:aece18bb9e0d33ebb0d2b1207f6ceae7416b2cedab684ce8cd02fa8c96f2ad44- linux/amd64 manifest:
sha256:6f907f055a242943cb4a52e05baa092deafa709fe42ad88cef11269a20f93fbb - 입력 지문
a9e73fb50dcad52fc790e0b4aabaf482d08d98ddcde17bb9b390576e1ed32ee1
- linux/amd64 manifest:
- nginx
5.7.0·latest(5.6.1 digest 재사용):sha256:a42874d3d8e4304ca0d6ba6f67b073232b3d15489fd373f0efcf40e706a5b78c - byedpi
5.7.0·latest(5.4.0 digest 재사용):sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a ops/publish-images.ps1 -Version 5.7.0 -Publish로 backend·crawler·web을 새로 빌드·게시하고 nginx·byedpi는 기존 digest에 버전 태그를 붙였습니다. 버전 태그 게시 뒤 같은 digest로latest를 승격했고, 다섯 서비스의5.7.0·latest일치를 최종 검증했습니다(Registry tags verified for 5.7.0.). 재시도 없이 한 번에 완료했습니다.
Downloads 2
-
Source code (zip)
0
2026-10-16 20:46:41 +09:00 -
Source code (tar.gz)
0
2026-10-16 20:46:41 +09:00
- 완료 Hitomi 작품의 재확인이 제목·태그에 더해 원본 게시 시각(
-
hanyul released this
2026-10-14 12:05:21 +09:00 5.6.0 대비 변경사항
crawler 복구
- checkpoint 형식이 올바르지 않을 때의 Hitomi 기동 복구가 정상 checkpoint의 복구와 같은 경로를 탑니다. pipeline 잠금 안에서 상태를 다시 확인한 뒤 아직
running인 소유 job을stopped(summary.recovery='interrupted')로 닫고 처리량 기록을 보존합니다. 이전에는 잠금 없이failed(checkpoint_missing)로 닫으면서 기록을 버렸습니다. 상태는 지금처럼error와checkpointError로 남고 checkpoint 원본은 보존되며 자동 재개하지 않습니다. planHash없는 범위 checkpoint를 받아 주던 호환 분기를 지웠습니다. 범위 mode(incremental·full·range)는 5.3.0부터 수락 때 항상planHash를 붙이므로 운영 checkpoint는 영향이 없고,planHash가 없는 범위 checkpoint는 이제 복구 오류로 남깁니다.latest는 계획 없이 저장하는 것이 그대로입니다.
Nginx
- 관리자 가비지 컬렉션의
integrity/repair·run·orphan-audit경로도 backend가 응답하지 못할 때 다른/api/*와 같은503 UPSTREAM_UNAVAILABLEJSON(Retry-After: 5,no-store)으로 응답합니다. 503 변환 예외는 썸네일과 보호 원본 page 두 location만 남습니다.
설정·운영 도구
BACKEND_PORT환경 변수를 없앴습니다. backend port는 healthcheck·Nginx upstream·web SSR이 모두3001로 고정하고 있었으므로compose.yml도PORT: 3001로 고정합니다..env.example의 Web Push VAPID 키 생성 안내를 호스트 Node 없이 실행하는docker run --rm node:24-alpine npx --yes web-push generate-vapid-keys로 바꿨습니다.tests/run-compose-compat.ps1의 기본 비교 대상을 5.6.0 commit으로 올렸고, 운영 가이드의 게시 절차에 "게시 뒤 이 기본값을 새 릴리스 commit으로 갱신"을 넣었습니다.
호환되는 수정·정리만 있어 patch 5.6.1을 적용합니다. 필수 환경 변수·수동 전환·데이터 재설정·DB migration이 없습니다. 제품 버전은 Git 태그·OCI label·문서로 관리하며 private package와 lockfile의 버전은 유지합니다.
이미지 게시 범위
- 새로 빌드(5.6.1·latest): crawler(복구·checkpoint 검증 변경), nginx(
nginx.conf변경). - digest 재사용: backend·web(5.5.0·5.6.0 digest), byedpi(5.4.0 digest). 빌드 입력이 같아 기존 digest에
5.6.1·latest태그만 붙였습니다. 재사용 이미지의 OCIversion·revisionlabel과 backend health의version은 원래 빌드 값으로 남습니다. - 모든 자체 이미지에 5.6.1 태그가 있으므로
IMAGE_TAG=5.6.1을 지정할 수 있습니다.
NAS 업데이트와 주의사항
운영자는 운영 반영을 따릅니다.
- Compose 갱신 권장:
compose.yml이 backendPORT를3001로 고정합니다. 이전compose.yml을 그대로 두어도BACKEND_PORT가 비어 있으면 backend 기본값이3001이라 동작하지만, 5.6.1의compose.yml·.env.example을 받아 두는 것을 권장합니다..env.production의BACKEND_PORT줄은 이제 읽지 않으므로 지우는 것은 선택입니다. - DB migration 없음: backend 이미지가 바뀌지 않아 migration이 돌지 않습니다.
- crawler 재시작: crawler 이미지 교체로 crawler가 재시작되면 실행 중이던 수집 job은 기동 복구 규칙에 따라
stopped(중단)로 정리됩니다. Hitomi는 자동 재개·20시 예약으로 이어지지만 E-Hentai는 자동 재개가 없으므로 운영 화면에서 수동으로 재개해야 합니다. 5.5.0·5.6.0 교체 때 중단된 E-Hentai 작업이 아직 재개되지 않았다면 함께 확인합니다. - rollback: migration이 없어 5.6.0 이미지로 되돌릴 수 있습니다.
- 로그인 cookie는 그대로 유효하며 다시 로그인할 필요가 없습니다.
NAS 배포·운영 데이터 변경은 이번 게시에서 실행하지 않았습니다. 다만
latest를 승격했으므로 Watchtower가 켜진 운영 서버는 스스로 5.6.1로 교체할 수 있습니다.검증
- 최종 main
3561d11e에서run-integration.ps1(API·브라우저·crawler runtime·Push 재시도)이 통과했고, 개발 stack을 재빌드해 전 서비스 healthy를 확인했습니다. - crawler 브랜치(
adff9671, 앱 코드는 main과 동일)에서run-unit.ps1 -Workspace crawler(69 suites·893 tests),run-crawler-recovery.ps1(전체)·-EHentaiOnly가 통과했고, 두 회귀 테스트는 수정 전 실패를 확인했습니다. - ops 브랜치(
d54a441b, 설정·Nginx·문서는 main과 동일)에서 Compose config(개발·운영),run-operations.ps1 -DeploymentOnly(GC 세 경로의 503 JSON 검사 포함),run-compose-compat.ps1(5.6.0 이미지·Compose와 3조합)이 통과했습니다. 문서 로컬 링크 검사는 깨짐 0입니다. - 각 변경은 병합 전에 읽기 전용 리뷰를 거쳤습니다. backend·web·DB는 바뀌지 않아 그 runner는 다시 실행하지 않았고, 실제 Hitomi·E-Hentai 통신과 NAS 배포는 NOT RUN입니다.
게시 확인
- 릴리스 소스:
d097d47ae2884e3961150733c8a4a4a4b114060e(annotated Git 태그5.6.1대상). - crawler
5.6.1·latest:sha256:926cebef833b42ebb64dd0e90da6ebbeefddbcacddcfb9dddcef26450fe12424- linux/amd64 manifest:
sha256:a9045b48c94ab6c055b5e3b4645313611410e16bd4e1a202aa1b918522251ad7 - OCI version
5.6.1·revisiond097d47ae2884e3961150733c8a4a4a4b114060e - 입력 지문
384bb618dd099b8994ef9f5faef4b9288577f11be7952ea66bb7dd9725909e6b
- linux/amd64 manifest:
- nginx
5.6.1·latest:sha256:a42874d3d8e4304ca0d6ba6f67b073232b3d15489fd373f0efcf40e706a5b78c- linux/amd64 manifest:
sha256:6325e8750f01b45e66453ce879835e9079304dabe1117219b7e6007964e070c5 - 입력 지문
26b1cf01c1476d904a0a68d1ead1ccceeedbb4c85cd22514598af16239ef1de6
- linux/amd64 manifest:
- backend
5.6.1·latest(5.5.0 digest 재사용):sha256:270604e67f36928d1a3036470dc16e41a6b6892c1ef795d1a048a817ae660c78 - web
5.6.1·latest(5.6.0 digest 재사용):sha256:e57fe3bbd70e293dc66a58a429af7e70dbc7bf3f39beab01a227a4dbe8197932 - byedpi
5.6.1·latest(5.4.0 digest 재사용):sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a ops/publish-images.ps1 -Version 5.6.1 -Publish로 crawler·nginx를 새로 빌드·게시하고 나머지 세 서비스는 기존 digest에 버전 태그를 붙였습니다. 버전 태그 게시 뒤 같은 digest로latest를 승격했고, 다섯 서비스의5.6.1·latest일치를 최종 검증했습니다(Registry tags verified for 5.6.1.). 재시도 없이 한 번에 완료했습니다.
Downloads 2
-
Source code (zip)
0
2026-10-14 12:05:21 +09:00 -
Source code (tar.gz)
0
2026-10-14 12:05:21 +09:00
- checkpoint 형식이 올바르지 않을 때의 Hitomi 기동 복구가 정상 checkpoint의 복구와 같은 경로를 탑니다. pipeline 잠금 안에서 상태를 다시 확인한 뒤 아직
-
hanyul released this
2026-10-14 01:20:06 +09:00 5.5.0 대비 변경사항
화면
- viewer가 앱의 라이트·다크 테마를 따릅니다. 라이트 설정에서는 밝은 배경·도구 막대·dialog·상태 화면으로 그리고, 다크 설정에서는 이전과 같은 외관입니다. 북마크 별은 라이트에서 대비가 확보되는 색을 씁니다.
- 로그인 사용자가 라이트 테마를 쓸 때, 전체 페이지 로드(viewer 진입·복귀 등)의 첫 화면이 OS 다크로 그려졌다가 라이트로 바뀌던 깜빡임을 고쳤습니다. 마지막으로 적용한 테마 mode를 브라우저에 남겨 첫 paint 전에 읽습니다.
- 운영 화면 가비지 컬렉션 패널에서
가비지 제거버튼 오른쪽의 저장 원본·썸네일 용량 요약,마지막 집계시각, 백그라운드 갱신 중 표시를 뺐습니다. 상단정리 대상옆 통계 새로고침 버튼과 서버의 통계·갱신 API는 그대로입니다.
web만 바뀌었고 backend·crawler·DB·Compose·환경 변수는 바뀌지 않았습니다. 필수 수동 전환·데이터 재설정이 없고 viewer 라이트 모드가 새 표시 범위라 minor 5.6.0을 적용합니다. 제품 버전은 Git 태그·OCI label·문서로 관리하며 private package와 lockfile의 버전은 유지합니다.
이미지 게시 범위
- 새로 빌드(5.6.0·latest): web. 소스가 바뀌어 production 빌드 입력 지문이 기존
latest와 달랐습니다. - digest 재사용: backend·crawler(5.5.0 digest), byedpi·nginx(5.4.0 digest). 빌드 입력이 같아 기존 digest에
5.6.0·latest태그만 붙였습니다. 재사용 이미지의 OCIversion·revisionlabel과 backend health의version은 원래 빌드 값으로 남습니다. - 모든 자체 이미지에 5.6.0 태그가 있으므로
IMAGE_TAG=5.6.0을 지정할 수 있습니다.
NAS 업데이트와 주의사항
운영자는 운영 반영을 따릅니다.
- Compose·환경 파일·DB: 5.5.0 이후
compose.yml·.env.example·migration이 바뀌지 않았습니다. Watchtower의 web 이미지 교체만으로 반영됩니다. 5.5.0을 아직 반영하지 않았다면 5.5.0 릴리스 노트의 migration·crawler 재시작 주의사항이 함께 적용됩니다. - rollback: web만 바뀌었으므로 5.5.0 web 이미지로 되돌릴 수 있습니다.
- 열려 있는 옛 탭: 배포 전부터 열려 있던 web 탭은 새 테마 저장값을 남기지 않으므로, 새로고침 뒤 첫 전체 로드 한 번은 이전처럼 깜빡일 수 있습니다. 그 뒤부터는 사라집니다.
- 로그인 cookie는 그대로 유효하며 다시 로그인할 필요가 없습니다.
NAS 배포·운영 데이터 변경은 이번 게시에서 실행하지 않았습니다. 다만
latest를 승격했으므로 Watchtower가 켜진 운영 서버는 스스로 5.6.0으로 교체할 수 있습니다.검증
- 최종 main
f39be8a6(앱 코드는 브랜치 커밋d16cae69와 같은 트리)에서run-integration.ps1(API·브라우저)이 통과했습니다. d16cae69에서run-unit.ps1 -Workspace web이 통과했습니다(133 suites·1,661 tests).1a833f66(북마크 별 색 class 3곳만 다름)에서run-integration.ps1과 이미지 검색·운영 UI 격리 검증(1440·320)이 통과했습니다.- 개발 stack에서 OS 다크 emulation + 라이트 설정으로 홈 ↔ 상세 ↔ viewer 전체 로드를 돌려
<html>에darkclass가 한 번도 붙지 않는 것을 확인했고, 라이트·다크 × 1440·390으로 viewer·종료 카드·정보 dialog를 캡처해 canvas로 대비를 측정했습니다(라이트 북마크 별 4.06:1·5.03:1, 다크 5.39:1·7.68:1). - 변경은 병합 전에 읽기 전용 리뷰를 거쳤습니다. backend·crawler·DB는 바뀌지 않아 그 runner는 다시 실행하지 않았고, 실제 passkey 로그인 브라우저에서의 깜빡임 확인, 실제 Hitomi·E-Hentai 통신, NAS 배포는 NOT RUN입니다.
게시 확인
- 릴리스 소스:
824a4c6ff04a24c8faee7ae7c1f40e10e98574db(annotated Git 태그5.6.0대상). - web
5.6.0·latest:sha256:e57fe3bbd70e293dc66a58a429af7e70dbc7bf3f39beab01a227a4dbe8197932- linux/amd64 manifest:
sha256:d76cb386cda945dcbdce791451ba0be1d5a8b88639d2f5c483db00a73ade5dad - OCI version
5.6.0·revision824a4c6ff04a24c8faee7ae7c1f40e10e98574db - 입력 지문
efbe8ec1a8380c94a88963a02f858fe722e121d9fe72ea2c124a4fb11183ee08
- linux/amd64 manifest:
- backend
5.6.0·latest(5.5.0 digest 재사용):sha256:270604e67f36928d1a3036470dc16e41a6b6892c1ef795d1a048a817ae660c78 - crawler
5.6.0·latest(5.5.0 digest 재사용):sha256:ea13440ccf2bb1b2674b4b4d884dba6fb3ab87ffb501df7bcc052c8db4f75047 - byedpi
5.6.0·latest(5.4.0 digest 재사용):sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a - nginx
5.6.0·latest(5.4.0 digest 재사용):sha256:fb3a63eb7be971660a5b8e4936d42d9ce6454e726a121383c060789b10583b40 ops/publish-images.ps1 -Version 5.6.0 -Publish로 web을 새로 빌드·게시하고 나머지 네 서비스는 기존 digest에 버전 태그를 붙였습니다. 버전 태그 게시 뒤 같은 digest로latest를 승격했고, 다섯 서비스의5.6.0·latest일치를 최종 검증했습니다(Registry tags verified for 5.6.0.).재시도 없이 한 번에 완료했습니다.
Downloads 2
-
Source code (zip)
0
2026-10-14 01:20:06 +09:00 -
Source code (tar.gz)
0
2026-10-14 01:20:06 +09:00
-
hanyul released this
2026-10-12 15:29:41 +09:00 5.4.0 대비 변경사항
수집·crawler 복구
- crawler가 강제 종료(kill·OOM·컨테이너 재시작)된 뒤 다시 뜨면, 이 crawler가 소유했던
running수집 job을stopped(summary.recovery='interrupted')로 정리합니다. 그래서 metadata 재확인과 배경 작업이 실행 중 신호에 막히지 않고, 운영 화면도 수집 중으로 보이지 않습니다. 재개는 기존 자동 재개(Hitomi 보호 cooldown 뒤, 20:00 예약)와 수동 재개가 맡습니다. - 기동 복구가 끝나기 전에는 예약 실행·자동 재개·수동 시작을 받지 않습니다. 복구는 pipeline 잠금 안에서 상태를 다시 읽고, 그 사이 다시 시작된 작업은 건드리지 않습니다.
- crawler 재시작이 이미 끝난 Hitomi 작업을 실행 중으로 되살리던 문제를 고쳤습니다.
- 운영 5.4.0 기준으로 옛 checkpoint 형식 수용을 정리했습니다.
- E-Hentai의 실행 시작 시각(
historyBeforeAt)이 없는 checkpoint와 Hitomiretrymode checkpoint는 자동 보정하지 않고 복구 오류로 남깁니다. - 원장 대조 카운터가 없는 저장소 점검 checkpoint는 새 점검으로 시작합니다.
- 2026-10-12 운영 DB 점검에서 세 형식 모두 0행이었습니다. 작업 이력의
retry표시는 유지합니다.
- E-Hentai의 실행 시작 시각(
홈·화면
- 홈 화면의 이어 읽기 줄을 없앴습니다.
- 대시보드 요약 카드를 컴팩트하게 바꾸고, 기간·전체·읽는 중·완독 선택을 읽기 기록 제목 줄로 옮겼습니다.
- 홈 이미지 검색 결과는 공유 링크와 같은 경로로 엽니다.
- 홈 guest 읽기 탭이 저장된 완료 여부로 거르지 못하던 문제를 고쳤습니다.
- 홈 일괄 GC와 상세 화면의 갤러리·작가 차단 뒤 전역 차단 목록이 바로 갱신됩니다.
- 오류·결과 상태 표시를 공용 컴포넌트로 통일했습니다.
데이터·번역
- 2026-10-11 누락 태그 146개 검토 결과를 번역 사전에 반영했습니다.
- 새 설치의 기본 전역 블랙리스트를 2026-10-11 운영 내보내기 147개와 맞췄습니다. 기존 설치의 차단 목록은 바뀌지 않습니다.
- DB migration
DropUnusedCounterColumns1792090000000가 읽지 않는 컬럼을 지웁니다. 대상은crawling_states카운터 5개와duplicate_scan_settings.common_revision입니다.
API·보안
- 보안 헤더는 Nginx만 붙입니다. 브라우저가 받는 값은 원래도 Nginx 값이었으므로 바뀌지 않습니다.
- 다음 API를 제거했습니다. 운영 중인 5.4.0 web은 이 경로를 호출하지 않습니다.
GET /api/auth/profile→GET /api/auth/checkDELETE /api/blacklist/galleries/:galleryId→DELETE /api/blacklist/:id- 관리자
GET /api/health루트 → 버전 확인은GET /api/health/detailed - 관리자
GET /api/tags(전체 사전)와GET /api/tags/popular의namespace파라미터 GET /api/image-search/statusGET /api/health/dependencies/report- backend의 crawler
health·status·logs/tail·garbage-collection/orphan-audit(GET) 프록시
POST /api/bookmarks는 이제galleryId만 받습니다. 옛category·priority·note를 보내면400입니다(5.4.0 web은 보내지 않음).- 중복 해결 요청의 잘못된 ID는
500대신400입니다. 갤러리404응답은 내부 context 없이 문자열 message를 돌려줍니다. - MinIO 실패를 의존성 상태 전체 판정에 반영해 readiness와 맞췄습니다.
운영 도구·문서
- 운영 DB의 호환 상태를 읽기 전용으로 점검하는
ops/compat-state-audit.sql을 추가했습니다. ops/production-soak.sh가 배포 서비스 전체의 재시작·OOM을 표본으로 수집합니다.- 문서를 현재 코드에 맞춰 정리했습니다.
- README를 소개·첫 실행 중심으로 재구성했습니다.
- Cloudflare 설정을
docs/Cloudflare_설정.md로, 태그 번역 출처를docs/태그_번역_검토_근거.md로 분리했습니다. - 운영 가이드·아키텍처·DB 정책을 압축했습니다.
필수 환경 변수·
compose.yml변경·수동 전환·데이터 재설정이 없습니다. 5.4.0 이미지·Compose와 새 버전의 교차 조합도 동작합니다. 제거한 API는 운영 5.4.0 web이 호출하지 않으므로 이전 minor 릴리스와 같은 기준으로 minor 5.5.0을 적용합니다. 제품 버전은 Git 태그·OCI label·문서로 관리하며, private package와 lockfile의 버전은 유지합니다.이미지 게시 범위
- 새로 빌드(5.5.0·latest): backend·crawler·web. 소스와 shared가 바뀌어 production 빌드 입력 지문이 기존
latest와 달랐습니다. - digest 재사용: byedpi·nginx. 빌드 입력이 5.4.0과 같아 기존 digest에
5.5.0·latest태그만 붙였습니다. 두 이미지의 OCIversion·revisionlabel은 5.4.0 빌드 값(c6c0fbb9)으로 남습니다. - 모든 자체 이미지에 5.5.0 태그가 있으므로
IMAGE_TAG=5.5.0을 지정할 수 있습니다.
NAS 업데이트와 주의사항
운영자는 운영 반영을 따릅니다.
- Compose·환경 파일: 5.4.0 이후
compose.yml과.env.example이 바뀌지 않았습니다. Watchtower의 이미지 교체만으로 반영됩니다.ops/deploy-production.sh는 안내 문구만 바뀌었습니다. - DB migration 1개:
DropUnusedCounterColumns1792090000000가 backend 시작 때 자동 적용됩니다.DROP COLUMN IF EXISTS라 실행이 짧습니다.- 5.4.0 backend·crawler는 두 컬럼을 참조하지 않습니다. 그래서 Watchtower가 backend를 먼저 교체해도 실행 중인 5.4.0 crawler가 깨지지 않습니다.
run-upgrade.ps1결과: deploy-script·watchtower 두 모드 모두 PASS, 1초 넘는 잠금 대기 없음.
- rollback 제한: migration은 forward-only입니다. 적용 뒤에는 backend·crawler를 5.4.0 미만으로 되돌릴 수 없습니다. 레지스트리에는 5.2.0 이하 이미지 태그가 이미 없습니다.
- 열려 있는 옛 탭: 5.4.0 이전 web을 연 채로 둔 브라우저에서 북마크를 추가하면
400이 납니다. 새로고침하면 해결됩니다. - crawler 재시작: 배포로 crawler가 재시작되면 실행 중이던 수집 job은 새 기동 복구 규칙에 따라
stopped(중단)로 정리됩니다. 재개는 기존 자동·수동 재개 경로를 따릅니다. - 로그인 cookie는 그대로 유효하며 다시 로그인할 필요가 없습니다.
NAS 배포·운영 데이터 변경은 이번 게시에서 실행하지 않았습니다. 다만
latest를 승격했으므로 Watchtower가 켜진 운영 서버는 스스로 5.5.0으로 교체할 수 있습니다.검증
- 앱 코드 main
93232eb4- 개발 stack 재빌드: 전 서비스 healthy, 개발 DB에 새 migration 적용
run-integration.ps1,run-passkey.ps1(viewer·admin 등록·인증·로그아웃 폐기),run-operations.ps1 -DeploymentOnly통과
- 같은 트리
8bf946farun-unit.ps1 -Workspace all통과(backend 589·crawler 890·web 1,661 tests)run-schema.ps1,run-crawler-recovery.ps1(전체·-EHentaiOnly) 통과run-upgrade.ps1 -BuildNew(5.4.0→HEAD) 통과: deploy-script·watchtower PASS
- 문서 정리 뒤 source
4388bae9(앱 코드 동일)run-compose-compat.ps1 -OldRef c6c0fbb9(5.4.0과 3조합) 통과run-duplicate-benchmark.ps1,run-search-benchmark.ps1,run-translation-coverage.ps1통과- 문서 검증 통과: 로컬 링크 536개 중 깨짐 0, Compose config 2종
- 각 변경은 병합 전에 읽기 전용 리뷰를 거쳤습니다.
- 실제 Hitomi·E-Hentai 통신 runner, 운영 DB 재측정, NAS 배포는 NOT RUN입니다.
게시 확인
- 릴리스 소스:
b0063316d176d290117002a82718e4de44bd7d9d(annotated Git 태그5.5.0대상). - backend
5.5.0·latest:sha256:270604e67f36928d1a3036470dc16e41a6b6892c1ef795d1a048a817ae660c78- linux/amd64 manifest:
sha256:3fd8643f4e8e9f6c96807829febcab773efc54eb9a86cae50d09756064e96422 - OCI version
5.5.0·revisionb0063316d176d290117002a82718e4de44bd7d9d - 입력 지문
1fcbeb026e5d1ff788369ab7f27a9d950ba032611ea097f6d7437dce29845264
- linux/amd64 manifest:
- crawler
5.5.0·latest:sha256:ea13440ccf2bb1b2674b4b4d884dba6fb3ab87ffb501df7bcc052c8db4f75047- linux/amd64 manifest:
sha256:4bc2a1d738d56f6bfb52e7aaaf2f9f9fb28e551e9b3e52840e8236a9ce120590 - 입력 지문
ea64685dd86503279158b2e959ba040c1643a9ad4721aed4f4eddb8da747b0cd
- linux/amd64 manifest:
- web
5.5.0·latest:sha256:4e28146ef95cd75dad8c747b2d4c57873f8d3d40a71d2921ef5c4cab60e21e5b- linux/amd64 manifest:
sha256:daf3183ed9ffe1e4ccba94b93403da4f0994fac4983d880d6388c5ffc25ad79d - 입력 지문
179ef4ad7914c779abdb8085c14bd57a408d668584942993347a3a439f8da943
- linux/amd64 manifest:
- byedpi
5.5.0·latest(5.4.0 digest 재사용):sha256:04cf2838499d67a033a3c3101913563bf983e551fee27b891dab0d2f75a4233a- linux/amd64 manifest:
sha256:93ea65f6266dc78f928678edb9940720f62d218a7d93cf8e97f03ab3bdb4f670
- linux/amd64 manifest:
- nginx
5.5.0·latest(5.4.0 digest 재사용):sha256:fb3a63eb7be971660a5b8e4936d42d9ce6454e726a121383c060789b10583b40- linux/amd64 manifest:
sha256:8a09d389b1a8396f2c4620b192694b63537c85b3ca1e31d06806af1461195f19
- linux/amd64 manifest:
- 게시 과정:
ops/publish-images.ps1 -Version 5.5.0 -Publish의 첫 실행은 backend·crawler·web 버전 태그 push가 레지스트리error from registry: unknown으로 실패해latest를 승격하지 않고 멈췄습니다. 같은 명령으로 다시 실행해 세 서비스를 게시했습니다. 버전 태그 게시 뒤 같은 digest로latest를 승격했고, 다섯 서비스의5.5.0·latest일치를 최종 검증했습니다(Registry tags verified for 5.5.0.).
Downloads 2
-
Source code (zip)
0
2026-10-12 15:29:41 +09:00 -
Source code (tar.gz)
0
2026-10-12 15:29:41 +09:00
- crawler가 강제 종료(kill·OOM·컨테이너 재시작)된 뒤 다시 뜨면, 이 crawler가 소유했던