Skip to content

Commit 1d22df6

Browse files
committed
에디터가 공용 브라우저 런타임 pyproc을 소비하도록 배선
editor가 pyproc(브라우저 파이썬 프로세스 OS)을 커밋 SHA 핀 git 의존성으로 설치하고, browserPythonRuntime 세임에서 boot/PyProc을 타입까지 실제 import. npm 해석·tsc 타입·Vite 워커 emit 3단계 검증 green. mainPlan 18 갱신.
1 parent f849bdb commit 1d22df6

4 files changed

Lines changed: 51 additions & 5 deletions

File tree

editor/package-lock.json

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

editor/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"class-variance-authority": "^0.7.1",
2525
"clsx": "^2.1.1",
2626
"lucide-react": "^0.577.0",
27+
"pyproc": "github:eddmpython/pyproc#0a9f724b4ecd3cb84bc52904c66261fc9c3ae891",
2728
"radix-ui": "^1.4.3",
2829
"react": "^19.2.1",
2930
"react-dom": "^19.2.1",
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// browserPythonRuntime.ts - pyproc(브라우저 파이썬 프로세스 OS) 소비 세임.
2+
// codaro가 공용 런타임 pyproc을 실제 import하는 첫 지점 = SSOT 성립의 증명점.
3+
// 실행 SSOT는 로컬 Python 불변이고, 이 브라우저 티어는 보조(Chromium/Edge + crossOriginIsolated).
4+
// 설계 근거: mainPlan/codaro-anywhere/18-pyproc-repo-extraction.md, 14-architecture.md.
5+
import { boot, PyProc } from "pyproc";
6+
import type { BootOptions, PyProcBootInfo, Runtime } from "pyproc";
7+
8+
export interface BrowserPythonSession {
9+
readonly runtime: Runtime;
10+
run(code: string): unknown;
11+
}
12+
13+
/** 브라우저 파이썬 런타임을 부팅한다. Chromium/Edge + crossOriginIsolated 필요. */
14+
export async function createBrowserPythonSession(opts?: BootOptions): Promise<BrowserPythonSession> {
15+
const runtime = await boot(opts);
16+
return {
17+
runtime,
18+
run: (code: string) => runtime.run(code),
19+
};
20+
}
21+
22+
export interface ProcessPool {
23+
readonly pool: PyProc;
24+
readonly info: PyProcBootInfo;
25+
}
26+
27+
/** 프로세스 OS 풀을 spawn한다(스냅샷-fork 병렬, 독립 GIL N개 = N코어). */
28+
export async function spawnProcessPool(n: number): Promise<ProcessPool> {
29+
const pool = new PyProc();
30+
const info = await pool.boot(n);
31+
return { pool, info };
32+
}

mainPlan/codaro-anywhere/18-pyproc-repo-extraction.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,10 @@ codaro `tests/_attempts`의 검증된 실험을 pyproc의 깨끗한 ESM 모듈
3838

3939
## 4. 소비 경로 (codaro가 first consumer)
4040

41-
1. **지금**: codaro `tests/_attempts`의 웹 실험은 검증본 아카이브로 남기되, 정식 표면은 pyproc을 import한다. PyodideEngine([14-architecture](14-architecture.md))이 pyproc의 `boot`/`Runtime`/`PyProc`를 소비하도록 배선하는 것이 다음 통합점.
42-
2. **dartlab/xlpod**: 버전 태그로 pyproc을 가져와 각자 표면(에디터/시트)을 얹는다. 제품 UI/도메인은 pyproc에 넣지 않는다.
43-
3. **SSOT 성립 조건**: 세 제품이 실제로 import해야 SSOT다. 참조만으로는 아니다. codaro 통합 배선이 첫 증명.
41+
1. **소비 방식 = 커밋 SHA 핀.** codaro 에디터가 `editor/package.json``"pyproc": "github:eddmpython/pyproc#<sha>"`로 커밋 SHA를 박아 npm으로 설치한다. 태그가 아니라 SHA로 핀한다(불변·재현 가능, 태그는 실제 릴리즈 전까지 만들지 않음). `files` 목록만 반입되므로 내부 규칙 문서·훅·테스트는 소비자에 실려 나가지 않는다.
42+
2. **첫 증명 = codaro import 검증 완료(2026-07-11).** [browserPythonRuntime.ts](../../editor/src/lib/browserPythonRuntime.ts)가 pyproc의 `boot`/`PyProc` + 타입(`Runtime`/`BootOptions`/`PyProcBootInfo`)을 실제 import한다. 3단계 검증 green: (a) npm이 SHA 핀 git 의존성 해석(규칙 문서 미반입 확인), (b) codaro 실제 tsconfig(`moduleResolution: Bundler`, `allowJs: false`)로 `tsc -b` exit 0(타입까지 해석), (c) codaro 설치 Vite로 번들 시 `new Worker(new URL("./worker.js"))`가 워커 청크로 emit. 아직 UI 표면 배선 전(seam만 존재).
43+
3. **dartlab/xlpod**: 같은 SHA 핀 방식으로 pyproc을 가져와 각자 표면(에디터/시트)을 얹는다. 제품 UI/도메인은 pyproc에 넣지 않는다.
44+
4. **SSOT 성립 조건**: 세 제품이 실제로 import해야 SSOT다. 참조만으로는 아니다. codaro import 검증이 첫 증명(끝난 것은 plumbing, 다음은 PyodideEngine이 이 seam을 실제 실행 티어로 사용).
4445

4546
## 5. 경계 (pyproc에 넣지 않는 것)
4647

@@ -50,5 +51,7 @@ codaro `tests/_attempts`의 검증된 실험을 pyproc의 깨끗한 ESM 모듈
5051

5152
## 6. 판정
5253

53-
- **실물 착수 완료**: 검증조각 4모듈 승격 + 규칙/훅/테스트 세팅 + 초기 커밋 push(`4132302`). Node 게이트 21/21 green.
54-
- **다음**: codaro PyodideEngine이 pyproc을 실제 import하도록 배선(SSOT 첫 증명). 이후 dartlab/xlpod 이관. warm-fork/nogil 프론티어(문서 17)는 pyproc 레포에서 계속 파고들 자리.
54+
- **실물 착수 완료**: 검증조각 4모듈 승격 + 규칙/훅/테스트 세팅 + 타입 선언(index.d.ts) + push. Node 게이트 29/29 green.
55+
- **SSOT 링크 성립(검증됨)**: codaro가 pyproc을 커밋 SHA 핀으로 실제 소비, 3단계(npm 해석·tsc 타입·Vite 워커 emit) 검증 green. "참조"에서 "실제 import"로 넘어옴.
56+
- **내부 규칙 문서는 로컬 전용**: 에이전트/개발 규칙 문서는 gitignore(codaro/dartlab 동급), 공개 레포·npm 패키지에 안 올린다.
57+
- **다음**: PyodideEngine([14-architecture](14-architecture.md))이 seam(browserPythonRuntime)을 실제 실행 티어로 사용하도록 UI 표면 배선. 이후 dartlab/xlpod 이관. warm-fork/nogil 프론티어(문서 17)는 pyproc 레포에서 계속.

0 commit comments

Comments
 (0)