-
hanyul released this
2026-10-16 13:37:06 +09:00 ARCA 0.1.20 변경 사항
이전 버전: 0.1.19. SA-06 빠른 시작·heap 축소 release다. native runtime(mkxp-z core JS·WASM)·SDK bundle·contracts tgz·Builder archive·npm tgz bytes가 바뀐다. 기존 heap 경로(
content생략)와 공개 API는 그대로이고 삭제된 export는 없다. schema 변경은 game·RTP manifest의 선택 필드payload.archive.chunks하나이며 0.1.19 이하 contracts parser는 이 필드를 거부하므로 host는 contracts(=@rgss23/arca전체)를 먼저 올린다. 지연 콘텐츠·선부팅·폴더 실행은 opt-in이고keyboard.minimumPressMs는 기본값이 켜진 가산 option이다.포함 변경 요약
contracts·packager: manifest chunk digest
rgss23-game-package-v1·rgss23-rtp-package-v1의payload.archive에 선택 필드chunks({ algorithm: "sha256", chunkBytes, digests })를 추가했다.chunkBytes는 65,536–16,777,216 사이의 2의 거듭제곱이고 packager 기본은 1 MiB다. archive bytes·sha256(content ID)은 그대로이고 manifest bytes만 바뀐다.- 0.1.19 이하 parser는
chunks를 unknown field로 거부한다. chunk가 있는 manifest를 만들거나 받기 전에 consumer가 먼저 0.1.20으로 올라가야 한다(contracts 변경 이력).
SDK
- 지연 콘텐츠(가산):
content: { mode: "lazy", reader, cache }. game·RTP package를 Wasm memory에 복사하지 않고 runtime이 읽은 chunk만 hostreader에 요청한다. 첫 읽기 chunk를 manifestchunks로 WebCrypto 검증하고 기본createRgss23LazyOpfsCache()가 검증된 chunk를 OPFS에 저장한다(OPFS가 없는 opaque-origin frame은 64 MiB 메모리 LRU).content를 생략한 기본 heap 경로도 mount 선할당으로 Wasm memory가 줄었다. - 선부팅(가산):
prepareRgss23Player({ preboot: true })·onBoot. 메뉴·설명 화면 동안 타이틀까지 무음·입력 차단으로 부팅해 일시정지하고, 클릭 gesture 안의start()는 재개만 한다. - 폴더 실행(files-only, 가산): Builder package 없이 directory handle·
webkitdirectoryFileList·Range 지원 서버의 HTTP manifest로 게임 폴더를 지연 모드로 실행한다. 경로를 NFC·/로 정규화해 빈·상위 segment와 대소문자·NFC 충돌을 거부하고, identity는 내용을 읽지 않는sha256-path-size-v1fingerprint(Builder 원본 fingerprint와 같음), save namespace 기본값은dir-<fingerprint>다. 브라우저 안 inspect가Game.ini·mkxp.json만 읽고 VXsyntaxTransform: 2·글꼴 치환mkxp.json·선택적 PNGtRNS정리를 메모리 overlay로 얹는다. 폴더 bytes는 host 입력이라 chunk 검증·chunk cache가 없고 Builder의 script 감사·package 한도 검사·game-scoped overlay가 적용되지 않는다. - native 키 최소 누름: runtime keyup을 keydown 뒤
keyboard.minimumPressMs(기본 50 ms, 0~1000 정수, 0은 지연 없음, 범위 밖은 launch 전TypeError)까지 늦추고 같은 키 연타는 누름·뗌이 각각 runtime input poll에 보이게 한다. 물리 키·별칭·가상 입력에 같이 적용하며 host page listener와onInputAlias호출 시점은 바뀌지 않는다. - API 세부: SDK 지연 콘텐츠와 선부팅, SDK 폴더 실행, SDK 입력과 focus.
runtime patch와 identity
- frontend patch
retroarch-rgss23-lazy-mount: game·RTP package를 Wasm memory에 복사하지 않고 읽힌 chunk만 MessagePort로 embedder에게 요청하는 읽기 전용 WASMFS backend(/arca/lazy)를 추가했다. read 하나는 기본 30초 안에 응답받지 못하면EIO다(rgss23 lazy mount). - core patch
mkxp-z-lazy-archive-reads: PhysFS ZIPstat이 local header를 읽지 않게 하고 글꼴 scan을 FreeType stream 읽기로 바꿔, 부팅 중 path cache가 game·RTP의 모든 local header를 읽고 RTP 글꼴 2개를 통째로 읽던 접근을 없앴다(부팅 read 줄이기). runtimes/mkxp-z/dependencies.lock.json·build recipe·verifier와redistribution-policy.json의 lock hash를 갱신했다. 제3자 dependency·license 변경은 없다.- native runtime export(named volume clean build, canonical pin과 일치):
rgss23-core.js8cc0c878c70332c76fdb09d350d0b9fe6ac5caa90d15821369ff78c8789d16f7(256,567 B),rgss23-core.wasmd3f17b3569e99d42e7c9e182f3b9500b5551156a636cb92d224668d2d0fbfb4c(44,432,679 B).
reference app·smoke·문서
- reference app은 catalog 게임을 지연 콘텐츠(HTTP Range reader, OPFS chunk cache)와 선부팅으로 준비하고, “게임 폴더 열기”(directory picker·
webkitdirectory·끌어 놓기)로 폴더 실행을 제공한다. - browser smoke 계약: staged artifact는 runtime JS·WASM만이고 game·RTP는 catalog 항목 pin·
206Range 읽기·[Rgss23Lazy] mountedlog·RTP mount·Wasm memory 상한·선부팅 timeline으로 검사한다(gold·입력·save/load 단언 유지, 지연 실행 계약). - 문서: fast-start 분석(Tier 1~3 설계 근거, Tier 3 CRuby 직접 링크 spike NO-GO/보류 판정), LINKS 가이드 0.1.20 절, 프로젝트 상태·호환성 매트릭스 갱신. release bytes에 들어가는
packages/contracts/README.md·packages/packager-rgss/README.md가 바뀌었다.
측정 요약
2026-10-16, 같은 PC,
runtime:smoke:host-storage-metrics(opaque-origin Worker), Chrome 155·Firefox 153 headless, 자동화PASS·사람 검토NOT RUN. artifact는 page가 미리 Blob으로 받아 둔 뒤 재므로 네트워크 전송 시간은 포함하지 않는다. 수치는 측정이며 판정이 아니다.게임·브라우저 heap 클릭→타이틀 cold / cache hit 지연 cold / cache hit 선부팅 클릭→ start()Wasm memory(타이틀 뒤) heap → 지연 VX Ace Chrome 8.5 s / 8.5 s 3.5 s / 2.6 s 32 ms 432 → 184 MiB VX Chrome 12.5 s / 12.5 s 3.4 s / 2.8 s 34 ms 627 → 184 MiB VX Ace Firefox 9.4 s / 8.9 s 4.0 s / 2.7 s 33 ms 432 → 184 MiB VX Firefox 13.6 s / 14.4 s 3.7 s / 2.9 s 32 ms 627 → 184 MiB mkxp-z-lazy-archive-reads전/후 지연 cold source 요청(Chrome 155, 1 MiB chunk): VX Ace RTP 156회 163.0 MB → 8회 7.8 MB·game 19회 → 14회, 클릭→타이틀 3.6 → 2.5 s; VX RTP 39회 → 5회·game 84회 87.8 MB → 10회 10.2 MB, 3.7 → 2.7 s. 측정 조건·각주·회귀 smoke는 프로젝트 상태 0.1.19 대비 변경과 LINKS host 판정이 소유한다.host 적용 순서
LINKS 적용 가이드 0.1.20 절을 따른다. 요약:
- contracts 먼저:
@rgss23/arca전체(contracts·SDK·runtime·Builder)를 0.1.20 exact pin과 registry integrity로 올린다. 이전 pin의 coordinator·API가 chunk가 있는 manifest를 읽는 혼합 배포를 하지 않는다. - release pin·runtime generation 적용: 새 runtime identity와 release pin을 함께 적용한다(절차는 0.1.19와 같다).
- 지연 모드를 켤 때만: 새 Builder로 generation을 다시 만들어
chunks를 얻고, descriptor의 game·RTP artifact에chunks를 넣고(RTPfileName은RTP/<Game.ini RTP 이름>.mkxpz와 일치), PlaySession이 허용한 content-addressed URL의 HTTP Range나 Blobslice()로reader를 구현하고, opaque frame에서 chunk 재사용이 필요하면Rgss23LazyCacheAdapter를 parent 저장소로 구현한다. - 선부팅은 곧 시작할 게임 하나에만 쓰고 양수 크기로 보이는 canvas에서 준비하며 떠나면
dispose()한다. - 폴더 실행은 host가 bytes를 보증하는 입력에만 쓰고 승인된 Installation 배포는 Builder package·
chunks검증 경로를 유지한다. cache/save namespace는 기존처럼 host가 주입한다. keyboard.minimumPressMs기본 50 ms가 켜진다. 이전 keyup 시점이 필요하면0을 준다.- lazy 경로(
/arca/lazy)는 읽기 전용이며 host가 main thread에서 그 경로를 동기로 읽지 않는다. customworkerFactory는 SDK port 메시지를 Emscriptenload보다 먼저 전달한다.
NOT RUN
- 실제 망(HTTP Range) 측정, opaque frame chunk cache, LINKS 적용·실제 플레이 재검증, NAS 실환경.
- 사람 화면·청취 확인, 새 사용자 acceptance(제공 VX/VX Ace acceptance 기준은 2026-08-05 그대로).
- Edge 155 save-load gold 검토(
browser:smoke:edge:vx-ace:save-load는 모든 동작·화소 검사를 통과했지만 Edge version pin drift로NOT REVIEWED), 새 runtime의 나머지 browser smoke 행렬. - 폴더 실행의 VX·Firefox·Edge·자동 smoke와 사용자 acceptance(자동 근거는 Chrome VX Ace만), 짧은 키 tap 사용자 acceptance.
- 실기 모바일·Safari, Linux 재현.
게시 identity와 registry 검증은 현재 상태, 상세 값은 해당 release manifest/pin을 따른다.
배포 검증
- tag:
0.1.20(annotated, tag objecta685cde46f) - release source:
e859dc27b3(버전 커밋b31ba50뒤 npm facade 중첩 선언 복사 수정 커밋) - manifest SHA-256: a6dac661743a62b332ee395cd65bb39b9578a640a151bb736c4a35a173055891
- Builder digest(pin): sha256:6b0f47faa2197d31417bc9fdfaf372e9660167c944e2c21d973d99d4b85a364c · Builder config digest(Docker 24 image ID): sha256:a2c4940dd4322af01e14ec1495dc40aa2a458f4c36a4a67af3ce71d601eed2a1
- artifact SHA-256: builder 38d560fc6e1ab42137708a9f35baa7e328287bcabfd80b1e2f05fccce6bd451b · contracts c915415c93d56e9a3dcdcbd446f676949c3e5afddc4176295e8df709040fd766 · runtime 74994b84c427fc020d1f7a480467607f38f69f219838b63c9ce4b0e9cdff5b98
- npm: @rgss23/arca@0.1.20 (Forgejo registry),
rgss23-arca-0.1.20.tgzSHA-256 056acb021cf93daf650c9cc037e5a395fd87a3b3ae37be3f1915ff8b7b4c78d2, integritysha512-b4QlYhHLa1fbVozueuqQqnVsGhtVZZuO+p7j+wJ0LOPIJ0X7PdhuGVR2rWyHLS8EZkkwE6e8MgLzOeuJGPRSCA== - 단위 테스트 609개, 타입 검사, release 회귀 45개(수정 커밋 뒤 46개), browser 도구 회귀 125개, runtime lock·native 진단 lock·native 준비 recipe 검증,
git diff --check: PASS(2026-10-16, 버전 커밋b31ba50). release:build(Builder gate·source-free consumer gate)·release:verify·release:npm:test: PASS(2026-10-16, sourcee859dc2).release:reproduce(clean detached worktreee859dc2, pin·세 artifact·Builder digest·npm tgz byte 동일): PASS(2026-10-16). Windows·같은 Docker host만, Linux 재현NOT RUN.
asset 7개
파일 크기(B) SHA-256 release-manifest.json2,155 a6dac661743a62b332ee395cd65bb39b9578a640a151bb736c4a35a173055891release-manifest.sha25688 6d39f5824ca9ce54565919e89c4aaa2f50d617466232b9ea334c95a9c65d45b8release-pin.json441 b1be6a0c1188d3d185f5d687710e650732e9f1f9341971abcd11f4ece00f83e8rgss23-arca-0.1.20.tgz99,982,340 056acb021cf93daf650c9cc037e5a395fd87a3b3ae37be3f1915ff8b7b4c78d2rgss23-builder-0.1.20.oci.tar61,884,928 38d560fc6e1ab42137708a9f35baa7e328287bcabfd80b1e2f05fccce6bd451brgss23-contracts-0.1.20.tgz37,871 c915415c93d56e9a3dcdcbd446f676949c3e5afddc4176295e8df709040fd766rgss23-runtime-0.1.20.zip45,705,529 74994b84c427fc020d1f7a480467607f38f69f219838b63c9ce4b0e9cdff5b98로컬 경로:
dist/release/0.1.20/(manifest·sha256·pin·Builder·contracts·runtime),dist/npm/0.1.20/rgss23-arca-0.1.20.tgz.artifacts.json·npm-package.json은 업로드하지 않는다.Downloads 9
-
release-manifest.json
2
2.1 KiB
2026-10-16 13:37:39 +09:00 -
release-manifest.sha256
2
88 B
2026-10-16 13:37:40 +09:00 -
release-pin.json
2
441 B
2026-10-16 13:37:41 +09:00 -
rgss23-arca-0.1.20.tgz
2
95 MiB
2026-10-16 13:37:56 +09:00 -
rgss23-builder-0.1.20.oci.tar
2
59 MiB
2026-10-16 13:37:53 +09:00 -
rgss23-contracts-0.1.20.tgz
2
37 KiB
2026-10-16 13:37:46 +09:00 -
rgss23-runtime-0.1.20.zip
2
44 MiB
2026-10-16 13:37:50 +09:00 -
Source code (zip)
0
2026-10-16 13:37:06 +09:00 -
Source code (tar.gz)
0
2026-10-16 13:37:06 +09:00