-
hanyul released this
2026-10-24 09:04:00 +09:00 ARCA 0.1.26 변경 사항
이전 버전: 0.1.25. audio 출력이 없는 Firefox에서 fresh 재시작·
stop()뒤 남던 AudioContextresume()처리되지 않은 거절을 runtime에서 고치고, player SDK에 Fast Start opt-in(runtime WASM 스트리밍 컴파일, host 검증 cache hit)을 더한 runtime·SDK release다. native runtime(mkxp-z core JS·WASM)이 0.1.25와 달라진다. 공개 API 변경은 player SDK의 선택 필드·타입 추가뿐이고 기존 기본값·오류 code, Builder 동작과 contracts schema는 바뀌지 않았다. runtime, SDK bundle과 version 문자열이 바뀌어 runtime ZIP·contracts tgz·Builder archive·npm tgz bytes와 release pin을 모두 새로 고정한다.포함 변경 요약
runtime: AudioContext
resume()거절 처리- 0.1.25 runtime은 AudioContext가
running이 아닐 때 1초마다resume()을 부르고 그 promise를 처리하지 않았다(retroarch-audio-continuity). audio 출력이 없는 Firefox(장치 없음·비활성)에서는 context가suspended에 머물러 대기 중인resume()이 쌓이고, 0.1.25의 instance 해제(fresh 재시작·stop())가 context를 닫으면 모두 "Closed before resume completed"(InvalidStateError) 처리되지 않은 거절과 page error로 남았다.close()가 대기 중인resume()을 거절하는 Firefox(확인한 버전 Nightly 161.0a1)에서 보이며 Firefox 153 release는 그 promise를 resolve해 보이지 않는다. LINKSplayer-dprFirefox 셀마다 2~4건이 보고됐다. retroarch-audio-continuity: context가 없거나 해제됐거나(rgss23Released)closed면resume()을 부르지 않는다. 부른resume()에는.catch를 붙여 해제·종료된 context와InvalidStateError는 무시하고 그 밖의 실패는 runtime log(console.error)로 보낸다. 1초 throttle은 그대로다.retroarch-instance-release:audioworklet_free의 비동기suspend()와audioworklet_close의close()도 해제·종료된 context를 건너뛰고 거절을 처리한다.- host가 runtime 오류를 걸러내거나 감쌀 필요는 없으며 게임·저장·재시작 결과와 SDK API·오류 code는 같다.
player SDK: Fast Start(선택 기능)
- 같은 문서 안 cache hit 재해시 생략: 기본 저장소가 이 문서에서 전체 검증한 바로 그 Blob 객체(
File제외)만 객체 identity·SHA-256·크기로 기억해 같은 문서의 fresh 재시작과stop()뒤 재launch에서 다시 해시하지 않는다. 문서·frame 경계 너머의 host Blob은 계속 전체 검증한다. - host 검증 cache hit opt-in(
Rgss23HostVerifiedBlob):artifactCache.get이{ blob, integrity: "host", sha256, bytes }를 돌려주고 선언이 요청 artifact pin과 같으면 크기 비교와 첫·마지막 byte 읽기만 하고 mount한다. 무결성 책임은 host로 넘어간다. 선언이 다르면 무시하고 전체 검증한다. - runtime WASM 스트리밍 컴파일: 선택
Rgss23ArtifactSource.url({ artifact, role })이 runtime WASM의 http(s) URL을 주면 SRI(integrity: "sha256-…") fetch →WebAssembly.compileStreaming으로 SDK의 WASM 해시를 없애고 다운로드·컴파일을 game·RTP staging과 겹친다. factory opt-insupportsRuntimeWasmModule(기본 Nostalgist factory는 켜져 있음). URL·compileStreaming·application/wasm이 없거나 fetch(SRI 포함)·컴파일이 실패하면 기존open()+ SDK SHA-256 경로로 돌아간다. fresh 재시작은 같은 pin의 컴파일된 module을 재사용한다. - 두 opt-in을 쓰지 않으면 무결성 검증 경로는 0.1.25와 같고, 같은 문서 안 재해시 생략만 자동으로 적용된다.
runtime 재배포 정책 재승인
runtimes/mkxp-z/redistribution-policy.json을 2026-10-24에 runtime lockc216a320…으로 재승인했다(status: approved,redistribution: restricted유지).frontend-notice-inventory.json(SHA-2568ed50a36…)은retroarch/audio/drivers/audioworklet.c의 파일 hash만 바뀌었다(분류copyleft유지, 고지·closure 변경 없음).
문서
- LINKS 가이드에 0.1.26 절, 7절(runtime 파일 배포: 불변 URL·brotli·WASM MIME), 8절(host 검증 cache hit 신뢰 조건)을 더했다. player SDK README에 runtime WASM 스트리밍 컴파일과 host 검증 cache hit을 설명했다.
- release bytes에 들어가는
packages/contracts/README.md,packages/packager-rgss/README.md,tools/release/npm/README.md는 0.1.25 이후 바뀌지 않았다.
자동 근거(2026-10-24, 같은 PC)
- runtime(runtime lock
c216a320…clean export, JSb34cd34b…, WASMc4ac76c4…, provenance stamp가 lock·recipe·Dockerfile·patch hash와 일치):runtime:smoke:instance-release -- --browser firefox(Firefox Nightly 161.0a1,media.cubeb.force_null_context, heap·지연 콘텐츠 각각 launch → fresh 재시작 →stop()→ 재launch →stop()): 0.1.25 runtime은 경로마다 page error 15건·처리되지 않은 거절 15건으로FAIL, 수정 runtime은 0건으로PASS.- Chrome 155
runtime:smoke:instance-release(memory)PASS.
- browser smoke canonical runtime을 이 export로 다시 고정하고 reference app 지연 실행 계약을 하나씩 실행했다. 자동
PASS:edge:vx-ace(title),chrome:vx-ace:title,firefox:vx-ace:title,edge:vx(title)(Edge 155·Chrome 155·Firefox 153). 바뀐 gold 화소는 없다. - Fast Start(0.1.25 runtime, heap, opaque frame, VX Ace+RTP, Chrome 155·Firefox 153): SDK 단위 테스트,
runtime:smoke:host-storage-metrics --storage heap(기본값·--host-verified),runtime:smoke:restart --game vx-acePASS.--host-verifiedcache hit의 artifacts 단계는 Chrome 2827 → 536 ms, Firefox 4867 → 846 ms였다. 스트리밍 컴파일은 커밋하지 않은 측정 harness에서 SDK의 WASM 해시(Chrome 약 0.46 s, Firefox 약 0.65~0.85 s)가 사라짐을 확인했다. - release 전 built release artifact로 browser smoke를 다시 실행하지 않았다(위 근거와 같은 runtime bytes·SDK 코드).
알려진 문제와 위험
- 0.1.25 runtime에 기록한 사용자 acceptance
PASS는 0.1.26 runtime으로 이어지지 않는다(0.1.26 사용자 acceptanceNOT RUN). - audio 출력이 있는 Firefox의 별도 smoke는 실행하지 않았다(변경은 guard와
.catch추가뿐이다). - 스트리밍 컴파일은 host가 runtime WASM을
application/wasm과 (opaque frame이면) CORS로 서빙해야 한다. 조건이 맞지 않으면 조용히 기존 경로로 돌아가며 WASM을 두 번 받는다. - host 검증 cache hit opt-in은 무결성 책임을 host로 넘긴다. host가 같은 bytes를 전체 SHA-256으로 검증했고 신뢰하지 않는 code가 cache에 쓸 수 없을 때만 쓴다.
- 0.1.25의 나머지 한계(전체화면 크기, CRuby 4.0 Ractor·Prism·shape 용량, 이식 코드 고지 version, 소수 DPR pointer 경계, Firefox·지연 경로 반복 메모리 측정)는 그대로다.
host 적용 순서
LINKS 적용 가이드 0.1.26 절을 따른다. 요약:
@rgss23/arca전체를 0.1.26 exact pin으로 올린다(runtime·SDK·Builder·contracts 함께). 0.1.24 이하에서 올리면 0.1.25 절도 함께 적용한다.- runtime bytes가 바뀌었으므로 0.1.26 Builder로 generation을 다시 만든다. Builder digest·config digest를 새 pin과 대조한다.
- PulseAudio null sink 없이 Firefox
player-dprRGSS 셀을 한 번 실행해 page error 0을 확인한다. - Fast Start는 선택이다. 쓸 때만 가이드 7절의 배포 header·MIME·CORS와 8절의 신뢰 조건을 갖춘 뒤 켠다.
NOT RUN
- 사용자 acceptance(0.1.26 runtime), LINKS opaque frame 적용, Fast Start의 실제 망 측정, audio 출력이 있는 Firefox smoke.
- 0.1.26 runtime에서 위 4개 외 browser scenario(gamepad·touch-pad·save-load·play 등)와 instance-release 외 runtime smoke.
- Linux 재현.
배포 검증
- tag:
0.1.26(annotated, tag objecteadf5ac0e8) - release source:
2f788155b3(Release: prepare ARCA 0.1.26) - manifest SHA-256: 1fab47825bbf6a925da5c65eb4914e8fcd6a51bfae10bfd9a9c07d70713638bf
- Builder digest(pin): sha256:7843fc53749e698318fab661951bf98f5207dc6f7326de25ba8abf01b6cff69f · Builder config digest(pin
builderConfigDigest): sha256:843f7ab707ad37d96293bac55a96d3b918a8449b1a5f68e2890b01ca22bfb05d - artifact SHA-256: builder 6ca8e7937089f788e9771dc8ab4146e939602ef0c2d7c9ec3223adbd33aa81e6 · contracts 3f5b2e357e95c1bd74f56756b3e465eff41b09e99cfcc8631abbcbf1a6544387 · runtime 9c8259208be15ec77f9bdd1c48541fc9a1dc8363987d694b3a5c8ff7b8c13fed
- npm:
rgss23-arca-0.1.26.tgzSHA-256 73275b7c7e1233025b248ddad56f3f259921c80aad41c94c2c4e1ca80fec3902, integritysha512-hfPoLBcmb7yxMY/0MqSkhHrnBPPoUFXaEu3ybdeLVzVtJ+GbZweRP3RncJ2h+UGamA0wGf2R0FsJ9/kTQOmD4w== - runtime ZIP의
rgss23-core.js(b34cd34b…272,967 B)·rgss23-core.wasm(c4ac76c4…48,400,171 B)은 canonical runtime export와 byte 동일하고, export provenance가 runtime lockc216a320…·recipe·Dockerfile·patch hash와 일치한다.redistribution-policy.jsonruntimeLockSha256은dependencies.lock.json과 일치한다. named volumergss23-mkxp-build의 provenance stamp·frontend JS·WASM이 export와 같은 hash라 runtime을 다시 build하지 않았다. - 게이트(source
2f78815, 2026-10-24):install --frozen-lockfile, 단위 테스트 662개, 타입 검사, release 회귀 51개, browser 도구 회귀 142개,verify:locks, native 준비 recipe 검증,git diff --checkPASS(work/release-0.1.26/logs/gates.log) release:build(Builder gate·source-free consumer gate)·release:verify·release:npm:test·release:reproduce: PASS(2026-10-24, source2f78815, manifestsourceCommit= HEAD;release:reproduce는 clean detached worktree에서 end-to-end로 pin·세 artifact·npm이 동일,work/release-0.1.26/logs/pipeline.log). Windows·같은 Docker host만, Linux 재현NOT RUN.
asset 7개
파일 크기(B) SHA-256 release-manifest.json2,155 1fab47825bbf6a925da5c65eb4914e8fcd6a51bfae10bfd9a9c07d70713638bfrelease-manifest.sha25688 c563b58d3eefbde6f05b6ec6522d7149f717acadeae3b966cca3726b6dc7447brelease-pin.json537 4ae479f52d815de7a32e0a2d94f1c3a56bf228ed9dcf0eb0449fc98bd40fa2c5rgss23-arca-0.1.26.tgz103,627,581 73275b7c7e1233025b248ddad56f3f259921c80aad41c94c2c4e1ca80fec3902rgss23-builder-0.1.26.oci.tar63,196,672 6ca8e7937089f788e9771dc8ab4146e939602ef0c2d7c9ec3223adbd33aa81e6rgss23-contracts-0.1.26.tgz38,268 3f5b2e357e95c1bd74f56756b3e465eff41b09e99cfcc8631abbcbf1a6544387rgss23-runtime-0.1.26.zip50,122,220 9c8259208be15ec77f9bdd1c48541fc9a1dc8363987d694b3a5c8ff7b8c13fed로컬 경로:
dist/release/0.1.26/,dist/npm/0.1.26/rgss23-arca-0.1.26.tgz.artifacts.json·npm-package.json은 업로드하지 않는다.Downloads 9
-
release-manifest.json
2
2.1 KiB
2026-10-24 09:04:24 +09:00 -
release-manifest.sha256
2
88 B
2026-10-24 09:04:27 +09:00 -
release-pin.json
2
537 B
2026-10-24 09:04:28 +09:00 -
rgss23-arca-0.1.26.tgz
2
99 MiB
2026-10-24 09:04:31 +09:00 -
rgss23-builder-0.1.26.oci.tar
2
60 MiB
2026-10-24 09:04:33 +09:00 -
rgss23-contracts-0.1.26.tgz
2
37 KiB
2026-10-24 09:04:33 +09:00 -
rgss23-runtime-0.1.26.zip
2
48 MiB
2026-10-24 09:04:35 +09:00 -
Source code (zip)
0
2026-10-24 09:04:00 +09:00 -
Source code (tar.gz)
0
2026-10-24 09:04:00 +09:00
- 0.1.25 runtime은 AudioContext가