You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
package.json과 lockfile을 0.0.12로 올리고 CHANGELOG의 Unreleased를 0.0.12 절로 연다.
README 두 판과 패키지 계약과 릴리즈 문서의 설치 핀을 같은 값으로 옮겼고, api 레퍼런스에
rebaseLinear·rebaseTo·boundaryEpoch를 0.0.12 표식과 함께 적었다.
이 릴리즈의 브레이킹은 하나로 모인다: 페이지 해시 믹서가 레인마다 사슬 둘로 갈라지면서
h0 값이 바뀐다. 옛 저널과 이미지는 PYPROC_REPLAY_MISMATCH로 명시 거부되고, 이관은
이전 버전에서 export 후 업그레이드 후 open이거나 forget이다(CHANGELOG에 동사까지 적었다).
함께 나가는 것: 체크포인트 노드의 희소 해시 저장, /home의 파일 단위 내용주소 커밋(옛 v1 팩은
계속 읽힌다), Web Machine IndexedDB 스키마 v3와 blob 크기 색인, 선형 역사에서 메모리 한계가
실제로 걸리게 하는 rebaseLinear(기본 꺼짐).
CHANGELOG 정정도 함께 한다: /home 항목이 이미 게시된 0.0.11 절에 잘못 들어가 있었다.
줄 끝이 CRLF와 LF로 섞여 앵커 탐색이 어긋난 것이 원인이라 파일 전체를 CRLF로 통일했다.
검증: npm test 3364 passed 0 failed, test:browser 129/129, test:installed 37/37,
test:golden 8/8, test:types 0, test:package ok, test:contracts 7 suites.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+19-16Lines changed: 19 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,6 +8,12 @@ happen only on an explicit maintainer decision; the Unreleased section accumulat
8
8
9
9
## Unreleased
10
10
11
+
<!-- unreleased-subpaths: -->
12
+
소비자가 핀한 버전에 아직 없는 subpath 목록이다(위 주석이 기계 판독 정본). 출하 문서가 이 이름을
13
+
예시로 쓰면 미출하 표식이 함께 있어야 하고, tests/contracts/publicSurface.mjs가 그것을 문다.
14
+
15
+
## 0.0.12 - 2026-08-03
16
+
11
17
### Breaking
12
18
13
19
-**The page-hash mixer splits each lane into two accumulator chains, so the replay boundary
@@ -31,6 +37,18 @@ happen only on an explicit maintainer decision; the Unreleased section accumulat
31
37
32
38
### Changed
33
39
40
+
-**`/home` is committed as one content-addressed blob per file.** It used to be concatenated into a
41
+
single pack, so one changed byte in one file changed the pack's address and the whole tree was
42
+
re-read, re-hashed, and re-written on every commit. Now an unchanged file is already in the store
43
+
and costs no write at all: a commit that changed nothing under `/home` writes zero home blobs, and
44
+
a commit that changed one file writes one. `journal.commit()` reports that as `home.wrote`, which
45
+
is now a count rather than a boolean.
46
+
47
+
Older generations keep working - the v1 pack layout is still read, so upgrading does not lose a
48
+
journal or an image. The **new** layout is not readable by older pyproc versions, so a
49
+
`.pymachine` file exported after this change must be opened with this version or later; an older
50
+
reader refuses it with `PYPROC_MACHINE_FORMAT_INVALID` rather than restoring a partial tree.
51
+
34
52
-**The Web Machine IndexedDB schema is now version 3, with a blob size index.** Asking how much a
35
53
store holds - `inspectStorage()`, and every recovery-window plan - used to require deserializing
36
54
every blob value just to read its length, so the question cost a full read of the database. Sizes
@@ -76,9 +94,7 @@ happen only on an explicit maintainer decision; the Unreleased section accumulat
76
94
started by `history.watch()`, so the interval no longer holds the runtime and the reactive
77
95
controller for the life of the tab.
78
96
79
-
<!-- unreleased-subpaths: -->
80
-
소비자가 핀한 버전에 아직 없는 subpath 목록이다(위 주석이 기계 판독 정본). 출하 문서가 이 이름을
81
-
예시로 쓰면 미출하 표식이 함께 있어야 하고, tests/contracts/publicSurface.mjs가 그것을 문다.
97
+
한국어 요약: 리플레이 경계 지문(h0)이 바뀌는 브레이킹 릴리즈다. 페이지 해시 믹서가 레인마다 사슬 둘로 갈라지고, 체크포인트 노드는 바뀐 페이지의 해시만 담고, `/home`은 파일마다 내용주소 blob 하나로 커밋되고, Web Machine IndexedDB는 스키마 v3에 blob 크기 색인을 갖는다. 옛 저널과 이미지는 `PYPROC_REPLAY_MISMATCH`로 명시 거부되므로, 지키려는 상태는 이전 버전에서 `history.export()`로 내보낸 뒤 업그레이드하고 `open()`한다. 크래시 복구 캐시일 뿐인 저널은 `history.forget()`으로 버린다. `setRetentionPolicy({ rebaseLinear: true })`는 선형 역사에서 메모리 한계가 실제로 걸리게 하는 새 옵션이고, 경계를 옮기는 대가 때문에 기본값은 꺼짐이다.
82
98
83
99
## 0.0.11 - 2026-08-02
84
100
@@ -125,19 +141,6 @@ Users upgrading directly from 0.0.9 must also apply the 0.0.10 migration from ro
125
141
126
142
### Changed
127
143
128
-
-**`/home` is committed as one content-addressed blob per file.** It used to be concatenated into a
129
-
single pack, so one changed byte in one file changed the pack's address and the whole tree was
130
-
re-read, re-hashed, and re-written on every commit. Now an unchanged file is already in the store
131
-
and costs no write at all: a commit that changed nothing under `/home` writes zero home blobs, and
132
-
a commit that changed one file writes one. `journal.commit()` reports that as `home.wrote`, which
133
-
is now a count rather than a boolean.
134
-
135
-
Older generations keep working - the v1 pack layout is still read, so upgrading does not lose a
136
-
journal or an image. The **new** layout is not readable by older pyproc versions, so a
137
-
`.pymachine` file exported after this change must be opened with this version or later; an older
138
-
reader refuses it with `PYPROC_MACHINE_FORMAT_INVALID` rather than restoring a partial tree.
139
-
140
-
141
144
- Durable RPC now has one normative retry boundary. A direct durable controller may resend the same
142
145
request id once only when it can prove a proxy-free session. A normal follower, a live timeout,
143
146
a vanished caller, or an unportable heap returns non-retryable `PYPROC_RPC_OUTCOME_UNKNOWN`
Copy file name to clipboardExpand all lines: README.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -153,7 +153,7 @@ restored. A fail-closed network policy can also keep selected data local while c
153
153
## Quick start
154
154
155
155
```sh
156
-
npm install pyproc@0.0.11 --save-exact
156
+
npm install pyproc@0.0.12 --save-exact
157
157
npx pyproc-engine --out public/vendor/pyodide
158
158
```
159
159
@@ -485,11 +485,11 @@ Can't set headers at all (e.g. GitHub Pages)? Register `pyprocSw.js?coi=1` and r
485
485
486
486
## Install and pinning
487
487
488
-
From npm ([npmjs.com/package/pyproc](https://www.npmjs.com/package/pyproc)): `npm install pyproc@0.0.11 --save-exact`. There is no build step (native ESM). Floating ranges (`^`, `~`, `latest`) are not supported because a state kernel's replay guarantee is version-bound:
488
+
From npm ([npmjs.com/package/pyproc](https://www.npmjs.com/package/pyproc)): `npm install pyproc@0.0.12 --save-exact`. There is no build step (native ESM). Floating ranges (`^`, `~`, `latest`) are not supported because a state kernel's replay guarantee is version-bound:
489
489
490
490
```jsonc
491
491
// package.json
492
-
"dependencies": { "pyproc":"0.0.11" }
492
+
"dependencies": { "pyproc":"0.0.12" }
493
493
```
494
494
495
495
`pyproc/runtime` and the typed API subpath entries ship in 0.0.11. A SHA pin
Copy file name to clipboardExpand all lines: package.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
{
2
2
"name": "pyproc",
3
-
"version": "0.0.11",
3
+
"version": "0.0.12",
4
4
"description": "A persistent Python computer in the browser: real CPython, durable workspaces, processes, rewindable history, and signed machine images. No application server. (브라우저에 영속하는 Python 컴퓨터.)",
0 commit comments