-
hanyul released this
2026-10-14 14:48:42 +09:00 ARCA 0.1.19 변경 사항
이전 버전: 0.1.18. LINKS 요청(T47: devicePixelRatio 2·3 모바일·태블릿에서 RGSS 화면이 왼쪽 아래 1/DPR만 확대 표시, host용 논리 해상도 공개)에 대한 release다. native runtime(mkxp-z core JS·WASM)·SDK bundle·npm tgz bytes가 바뀐다. 삭제된 공개 API는 없고 새 오류 code·contracts schema 변경도 없다.
rgss23-runtime-status-v1, inspection v1/fingerprint ABI, contracts schema, Builder subcommand·기본 출력·exit code는 그대로다. 변경은 독립 리뷰 R48(P2 4건 수정)·R48b(병합 가능) 뒤 병합했다.고 DPR 표시 결함 수정
- 현상: devicePixelRatio 2·3(모바일·태블릿·고해상도 데스크톱)에서 게임 화면의 왼쪽 아래 1/DPR 영역만 canvas 전체로 확대돼 보였다. DPR 1에서는 재현되지 않았다.
- 원인: RetroArch는
main()에서 처음 보이는 canvas CSS 크기 × DPR로 backing(drawing buffer)과 renderer viewport를 한 번 정하는데, NostalgistpostRun이 시작 직후 canvas backing을 CSS px로 다시 줄여 renderer viewport(CSS × DPR)와 drawing buffer(CSS px)가 어긋났다. - 수정(SDK): SDK가 Nostalgist
size에 runtime이 적용한 backing을 그대로 돌려줘 모든 DPR에서 drawing buffer == renderer 크기이고 시작 직후onPresentation.status === "synced"다. 이후 CSS resize·회전·주소창·DPR 변화는 설계대로 backing 고정 +scaled이며 그림 전체가 보인다. - 영향 브라우저: Chrome 155(모바일 emulation DPR 1·2·3)·Firefox 153(DPR emulation)에서 수정 전
FAIL·수정 후PASS를 자동 smoke로 확인했다. 실기 모바일·Safari는NOT RUN이다.
업그레이드 시 확인할 동작 변경
Rgss23PresentationState.logicalWidth·logicalHeight(가산): 게임 논리 해상도(Graphics.width·Graphics.height). 소스는 새 RetroArch frontend patchretroarch-presentation-geometry의Module.onRgss23Geometryhook(main loop가 core geometry 변경을 frame 경계에서 보고)이며 로그 문자열을 읽지 않는다. 시작 직후 544×416,Graphics.resize_screen뒤 새 값으로 다시 통지된다. hook이 없는 runtime(0.1.18 이하)과 첫 보고 전에는null이다. host는 iframe 크기·고정 배율(100% = 논리 해상도 CSS px) 계산에 canvas backing이 아니라 이 값을 쓴다.aspectRatio계산 변경: backing 비율이 아니라logicalWidth / logicalHeight다(첫 통지 전에는 RGSS 기본 544×416의 17/13). 필드 이름·타입은 그대로다.- hidden·0×N 시작 gate: SDK는 native 시작 전에 canvas의
clientWidth·clientHeight가 모두 양수가 될 때까지 기다린다(display:none, layout 전, 0×N·N×0은 가시 크기가 아님).starting이 canvas가 보일 때까지 유지되고running은 첫 가시 크기 × DPR로 backing을 잡은 뒤 온다. canvas를 숨긴 채 launch하고running을 기다려 canvas를 보이게 하는 host 순서는 서로 기다리므로 쓰지 않는다. 시작 중 취소는 launch에 전달한signalabort(RUNTIME_ABORTED,reason: "aborted")이며prepared.dispose()는 start 전 자원 해제용이다. 새 exportwaitForVisibleCanvasSize·isVisibleCanvasSize. - host callback 예외 격리:
onPresentation이 throw해도 runtime은 멈추지 않는다. SDK가 native geometry hook 경계에서 예외를 잡아reportError(없으면console.error)로 window의 일반 uncaught error로 다시 보고하고 geometry 상태·다음 통지는 유지된다. host는 자기 callback 오류를windowerror이벤트로 본다. installResponsiveCanvas가산 속성: 0.1.x대로 호출 가능한 disposer 함수를 돌려주며 같은 함수에dispose()·setLogicalSize()속성이 더해졌다. 반환 계약의 삭제·변경은 없다.status의미:scaled는 고정 backing의 CSS 확대·축소(회전·resize·주소창·시작 뒤 DPR 변화)이고 표시 결함이 아니다. 시작 뒤 DPR이 바뀐 뒤 선명도가 필요하면 host가 player를 다시 실행한다.- artifact identity: native runtime JS·WASM(새 frontend patch, clean rebuild), SDK dist, runtime ZIP, contracts tgz(
package.json), Builder archive, npm tgz bytes·integrity가 모두 바뀐다. release pin·runtime generation과 lockfile의@rgss23/arcaintegrity를 함께 적용한다.
새 runtime patch와 identity
- frontend patch
retroarch-presentation-geometry(emscripten/library_platform_emscripten.js·retroarch.c,retroarch-shutdown-cleanup뒤·retroarch-restart-transaction앞) 추가.runtimes/mkxp-z/dependencies.lock.json·build recipe·verifier·Dockerfile과redistribution-policy.json의 lock hash를 갱신했다. 제3자 dependency·license 변경은 없다. - native runtime:
rgss23-core.jsc0b7d84b27956d220303000e809a5f355f7f62184f5f80f5d46e601ae4c65c28(251,121 B),rgss23-core.wasmb7ca2b80bffeca4568eb3e4bd92c3b70866ac10a15fea2e47cadaacb80a2ebd6(44,417,165 B). 2026-10-14runtime:allclean rebuild 2회(dpr-fix worktree, main) export가 byte 동일하다.
LINKS 적용 시 할 일
LINKS 적용 가이드 0.1.19 절을 따른다. 요약: T47 DPR gate(DPR 1·2·3 × 390×844·820×1180 × 회전·주소창)에서 4분면 전체 표시와
synced를 확인하고,reportResolution·iframe 크기·고정 배율 100%를logicalWidth·logicalHeight로 계산하며(null이면 544×416 기본값 또는 이전 값 유지),scaled를 오류로 처리하지 않고, hidden canvas launch →running대기 → 표시 순서를 쓰지 않으며,onPresentation안의 오류를 자체 telemetry로 잡는다. canvaswidth·height를 host가 덮어쓰지 않는다는 계약은 그대로다.검증 범위와 알려진 제한
- 자동 근거(2026-10-14, 합성 4분면 VX Ace fixture,
runtime:smoke:dpr): Chrome 155.0.8059.79(모바일 emulation) 6셀(DPR 1·2·3 × 390×844·820×1180, 각 initial·rotated·address-bar·resize-screen)PASS, Firefox 153.0.1 같은 6셀PASS.runtime:smoke:dpr:hidden-start(DPR 2 한 셀) Chrome·FirefoxPASS. DPR 1 회귀browser:smoke:firefox:vx:resize-inputPASS, pixel goldbrowser:smoke:chrome:vx-ace:titlePASS(기존 gold와 rgbaSha256 일치). NOT RUN: 실기 모바일·Safari, 실제 monitor DPR 이동·zoom·fullscreen, opaque iframe, LINKS 통합·NAS 실환경, Linux 재현, 사람 acceptance. 0.1.18의 Docker 24docker load호환·게임패드·터치 자동 근거와NOT RUN범위는 유지한다.
게시 identity와 registry 검증은 현재 상태, 상세 값은 해당 release manifest/pin을 따른다.
배포 검증
- release source:
a73e2cdc13 - manifest SHA-256: 1652eb2fec2be89063cc0d7dea624b95b83ddfb470ce6b6da7257f709c547c9c
- Builder digest(pin): sha256:63e1502baa90a54e8ba9cea675ed07077b3b7dc6f55f07d5d36d412a3c58b95b · Builder config digest(Docker 24 image ID): sha256:bfdd0427236a222093a1edee923eb16acef389387106d2d62faaf20d5d873926
- artifact SHA-256: builder e058456287d2d253065b2fa9acf4c8544fa8da7daec012e14b073e7de8f6b20d · contracts c7ce5314cae39e6a74e6437ce854eb3d2399cc8f94c45b58c963efbbec123565 · runtime a8e04c4332c9bde900f92db9459b10d4b48c8cc925c0c948136aeda902034ee2
- npm: @rgss23/arca@0.1.19 (Forgejo registry),
rgss23-arca-0.1.19.tgzSHA-256 ec4fa8e58f5c8f9d90a6b068632646b8efe86fdb28eca67af148014fdb96b71b, integritysha512-+BDlRHGgORrXjYoDMwTGwMI1wZy4pzAJmkJtivesyLDZXDP4UNJ+/BTNyTdyUdUpzdSSgUq4SFYQqXLNBQ89CQ== - 단위 테스트 491개, 타입 검사, release 회귀 45개, browser 도구 회귀 117개, runtime lock·native 진단 lock·native 준비 recipe 검증,
git diff --check: PASS(2026-10-14, 버전 커밋a411741). release:build·release:verify·release:npm:test·release:reproduce(clean detached worktree, pin·세 artifact·Builder digest·npm tgz byte 동일): PASS(2026-10-14).
Downloads 9
-
release-manifest.json
2
2.1 KiB
2026-10-14 14:49:04 +09:00 -
release-manifest.sha256
2
88 B
2026-10-14 14:49:05 +09:00 -
release-pin.json
2
441 B
2026-10-14 14:49:06 +09:00 -
rgss23-arca-0.1.19.tgz
2
95 MiB
2026-10-14 14:49:08 +09:00 -
rgss23-builder-0.1.19.oci.tar
2
59 MiB
2026-10-14 14:49:24 +09:00 -
rgss23-contracts-0.1.19.tgz
2
35 KiB
2026-10-14 14:49:24 +09:00 -
rgss23-runtime-0.1.19.zip
2
43 MiB
2026-10-14 14:49:26 +09:00 -
Source code (zip)
0
2026-10-14 14:48:42 +09:00 -
Source code (tar.gz)
0
2026-10-14 14:48:42 +09:00