• ARCA 0.1.27

    ARCA 0.1.27 변경 사항

    이전 버전: 0.1.26. ARCA 저장소의 개발 도구와 reference app만 바뀐 release다. host가 쓰는 native runtime(mkxp-z core JS·WASM), player SDK, Builder와 contracts의 동작·공개 API·기본값·오류 code·schema는 0.1.26과 같다. runtime ZIP의 rgss23-core.js·rgss23-core.wasm은 0.1.26과 같은 runtime export에서 만든다. version 문자열(package version, Builder compatibility report producer의 contractsVersion·inspectorVersion)이 바뀌어 runtime ZIP·contracts tgz·Builder archive·npm tgz bytes와 release pin을 새로 고정한다.

    포함 변경 요약

    개발 도구: puppeteer-core 25.16.0

    • root devDependency puppeteer-core를 25.15.0에서 25.16.0으로 올렸다(exact pin 유지). release artifact에는 들어가지 않는다.
    • pnpm-lock.yaml은 그 하위 의존성(@puppeteer/browsers 3.2.6, modern-tar 0.8.6, devtools-protocol)만 바뀌었다.
    • cross-browser title smoke 계약의 automation.puppeteerCore 단언을 25.16.0으로 바꿨다.

    로컬 이전 content generation 정리(pnpm clean:generations)

    • ARCA checkout의 work/web-public·dist/web에 쌓인 이전 generation을 정리하는 수동 명령이다. 기본은 dry-run이고 --apply일 때만 삭제한다.
    • 두 catalog가 참조하는 generation, root별 최신 runtime generation과 artifact 파일명별(게임·엔진별 RTP) 최신 generation을 보존한다. 두 root 밖(games/**, dist/release/**, dist/npm/**, work/runtime/**, work/cache/** 등)은 건드리지 않으며 link·junction과 보호 경로를 realpath로 다시 확인한다.
    • browser prepare(tools/prepare-browser-smoke.mjs)와 work/web-public.lock으로 서로 배제한다. 죽은 소유자의 lock은 이름 변경 방식으로 안전하게 넘겨받고, 삭제는 .deleting-*로 이름을 바꾼 뒤 지워 중단된 삭제를 다음 --apply가 마무리한다.

    reference app: OPFS 이전 generation 정리

    • catalog 게임을 준비하기 직전에 게임별 Web Lock(arca-reference-game:<id>)을 exclusive로 얻은 탭만 현재 catalog가 가리키지 않는 games/<id>/content/<sha256>와 SDK 지연 cache rgss23-lazy/<id>/{game,rtp}/<sha256>를 지운다. save·state·폴더 실행 namespace는 건드리지 않는다.
    • 다른 탭이 같은 게임을 준비·실행 중이면 정리를 건너뛰고, 다른 탭이 정리 중이면 기다린 뒤 준비한다. Web Locks가 없거나 요청이 거절되면 정리 없이 기존처럼 준비·선부팅한다. 정리 실패는 경고만 남기고 실행을 막지 않는다.
    • reference app은 SDK 기본값과 같은 지연 cache directory(rgss23-lazy)를 공개 option으로 명시해 기존 cache를 그대로 쓴다. SDK에 정리 API는 추가하지 않았다.

    문서

    • LINKS 가이드에 0.1.27 절을 더했다. 프로젝트 상태·호환성 매트릭스·검증 체크리스트·아키텍처에 위 변경과 자동 근거를 기록했다.
    • release bytes에 들어가는 packages/contracts/README.md, packages/packager-rgss/README.md, tools/release/npm/README.md는 0.1.26 이후 바뀌지 않았다.

    자동 근거(2026-10-24, 같은 PC)

    • puppeteer-core 25.16.0: test:browser-tools PASS, browser:smoke:chrome:vx-ace:title 자동 PASS(0.1.26 runtime, system Chrome 155.0.8059.86, report automation.puppeteerCore 25.16.0).
    • clean:generations: clean-generations.test.mjs·prepare-browser-smoke-lib.test.mjs(test:browser-tools) PASS, 합성 tree의 dry-run·--apply(보호 경로 보존, 중단된 삭제 정리, 죽은 lock 인계) PASS, main checkout dry-run은 삭제 대상 없음.
    • reference app 정리: apps/web vitest PASS(실제 SDK 지연 실행으로 만든 이전·현재 generation 중 비현재만 삭제, 다른 탭 lock, Web Locks 없음·거절 fallback). Edge VX Ace title smoke(0.1.26 runtime, commit 800b089) 자동 PASS는 lock 경로가 실행을 막지 않는다는 근거이며 새 profile이라 삭제는 일어나지 않았다.
    • runtime은 0.1.26과 같은 bytes라 runtime smoke와 그 밖의 browser smoke는 다시 실행하지 않았다. built release artifact로 한 browser smoke도 실행하지 않았다.

    알려진 문제와 위험

    • 0.1.25 runtime에 기록한 사용자 acceptance PASS는 0.1.26·0.1.27 runtime으로 이어지지 않는다(사용자 acceptance NOT RUN).
    • reference app 정리는 실행 중인 이전 build의 탭(lock을 잡지 않음)을 보호하지 못한다. 갱신 뒤 이전 탭을 닫는다. 오래된 catalog를 가진 탭이 새 generation cache를 지우는 최악의 경우에도 다음 실행이 Range 요청으로 다시 읽는다.
    • clean:generations는 실행 중인 vite dev/preview/smoke server와 열린 탭을 감지하지 못한다. 정리 전에 server를 멈추고 탭을 닫으며 pnpm build와 동시에 실행하지 않는다.
    • 0.1.26의 나머지 한계(전체화면 크기, CRuby 4.0 Ractor·Prism·shape 용량, 이식 코드 고지 version, 소수 DPR pointer 경계)는 그대로다.

    host 적용 순서

    LINKS 적용 가이드 0.1.27 절을 따른다. 요약:

    1. host 측 동작 변경은 없다. 0.1.26을 아직 적용하지 않았다면 0.1.26 절의 확인(Firefox player-dpr RGSS 셀 page error 0 등)을 함께 한다.
    2. @rgss23/arca 전체를 0.1.27 exact pin으로 올린다(runtime·SDK·Builder·contracts 함께).
    3. coordinator가 새 Builder digest·config digest를 pin과 대조하게 한다. pin이 바뀌므로 기존 active generation은 새 준비를 거치며 0.1.27 Builder로 generation을 다시 만든다(native runtime bytes가 같아도 strict release binding에서는 이전 release generation을 재사용하지 않는다).

    NOT RUN

    • 사용자 acceptance(0.1.26·0.1.27 runtime), LINKS 적용.
    • 이전 generation이 있는 실제 브라우저 profile의 reference app 삭제 smoke, 다중 탭 확인, main checkout의 실제 clean:generations --apply.
    • puppeteer-core 25.16.0으로 한 Firefox·Edge smoke.
    • Linux 재현.

    배포 검증

    • tag: 0.1.27(annotated, tag object 2842f72aa3)
    • release source: f105ddb6c1(Release: prepare ARCA 0.1.27)
    • manifest SHA-256: 8a4e4c252fb30a68305655484babffc7f894651279c9c5eb1ed2b20357906052
    • Builder digest(pin): sha256:2c46d1dbb66ac5e09b507ce1dd24f4253e82f05b8681a6dfe0baa4f14d589dbf · Builder config digest(pin builderConfigDigest): sha256:aaae1db26abd10a0f17929cbd5f61ec9a58b8b0a9fdb3e6bb14e19f592d4dbe9
    • artifact SHA-256: builder f232767bff58d4dac90cf1fea0e4307299c913679a60ae01f334e58ce394fb06 · contracts bf98fdd3cc818825c49c9658918529884e123692a9220699995ac38862874149 · runtime b862a3781451daa46c7bf13a1fd274fcc27469664ae5be66d873b16e6afd64f8
    • npm: rgss23-arca-0.1.27.tgz SHA-256 2fd95ab9dd4e77bd6f631096bfeb4eea3106eef5bc0e2e8176e770ea3990aef6, integrity sha512-Ek7JIJtqa/uNt9IUBMWCXW2EQf38A4hxtlgff5QQo0DWWwkB4E7qoaKQQp/X2gdWBlfCfODtikeKhfPz+V4GNw==
    • runtime ZIP의 rgss23-core.js(b34cd34b… 272,967 B)·rgss23-core.wasm(c4ac76c4… 48,400,171 B)은 0.1.26과 같은 canonical runtime export와 byte 동일하고, export provenance가 runtime lock c216a320…·recipe·Dockerfile·patch hash와 일치한다. redistribution-policy.json runtimeLockSha256은 dependencies.lock.json과 일치한다(2026-10-24 승인 유지). runtime은 다시 build하지 않았다.
    • 게이트(source f105ddb, 2026-10-24): install --frozen-lockfile, 단위 테스트 674개, 타입 검사, release 회귀 51개, browser 도구 회귀 159개, verify:locks, native 준비 recipe 검증, git diff --check PASS(work/release-0.1.27/logs/)
    • release:build(Builder gate·source-free consumer gate)·release:verify·release:npm:test·release:reproduce: PASS(2026-10-24, source f105ddb, manifest sourceCommit = HEAD; release:reproduce는 clean detached worktree에서 end-to-end로 pin·세 artifact·Builder digest·npm이 동일, work/release-0.1.27/logs/). Windows·같은 Docker host만, Linux 재현 NOT RUN.

    asset 7개

    파일 크기(B) SHA-256
    release-manifest.json 2,155 8a4e4c252fb30a68305655484babffc7f894651279c9c5eb1ed2b20357906052
    release-manifest.sha256 88 f8d0424f61f1a44fe5f0e7bbb79155fbc28c6d195f1a060d35ea4af5adb4cd6b
    release-pin.json 537 282c6018dfc3f589703b06f37ff5d506d90de177227053804562ef05605e9582
    rgss23-arca-0.1.27.tgz 103,627,133 2fd95ab9dd4e77bd6f631096bfeb4eea3106eef5bc0e2e8176e770ea3990aef6
    rgss23-builder-0.1.27.oci.tar 63,196,672 f232767bff58d4dac90cf1fea0e4307299c913679a60ae01f334e58ce394fb06
    rgss23-contracts-0.1.27.tgz 38,268 bf98fdd3cc818825c49c9658918529884e123692a9220699995ac38862874149
    rgss23-runtime-0.1.27.zip 50,122,220 b862a3781451daa46c7bf13a1fd274fcc27469664ae5be66d873b16e6afd64f8

    로컬 경로: dist/release/0.1.27/, dist/npm/0.1.27/rgss23-arca-0.1.27.tgz. artifacts.json·npm-package.json은 업로드하지 않는다.

    0.1.26 대비 전체 변경

    Downloads 9