Skip to content

Commit 7a4f384

Browse files
committed
정리: 브라우저 작업 임시 계획을 종료한다
interactive 관찰과 trusted 편집 입력을 정식 계약과 브라우저 게이트로 승격해 해결된 부채 행을 제거했다. 실제 Web 학습 증거가 남은 attempt는 Local 대상 제품의 외부 차단이 풀릴 때까지 유지한다. 검증: npm test 3594/3594, Edge와 Chrome browser-control 69/69, 설치 MCP 10/10 GREEN.
1 parent 7097eaa commit 7a4f384

2 files changed

Lines changed: 0 additions & 42 deletions

File tree

docs/operations/contractReality.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ It is consulted whenever the engine version moves or a capability changes.
99

1010
| Item | Contract | Actual | Next action |
1111
|---|---|---|---|
12-
| Browser observation and editor input are not yet a closed loop | A bounded accessibility observation exposes the controls needed for the next action, and `fill` changes the same editor state that the application later executes | The default first-N accessibility slice omitted a code editor even at 512 nodes on a measured learning surface. Raising the bound to 1000 returned about 95 KB of compact JSON. Once found, `fill` changed CodeMirror's contenteditable DOM text but not its application draft, so the following trusted click executed the old source | Add an opt-in interactive observation mode that selects controls across the full accessibility tree before applying the bound. Replace direct contenteditable text mutation with focused trusted text insertion, prove both in contract and live-browser regression, then repeat the measured journey |
1312
| A replay worker keeps a second copy of its own heap | `N` interpreters cost `N` heaps | A replay-booted worker holds `cp0`, a full byte copy of its heap, so a pool of `N` costs `2N` heaps. Two consumers need it: harvest (which only needs the changed page numbers) and drift cleanup (which needs the original bytes). Harvest could run on page hashes at 8 bytes per page instead, but that lowers the fork verdict from byte equality to a 64-bit collision probability, and the reactive path accepting that trade does not make the fork path accept it. The word-wise comparison landed first and cut the time cost of the same scan to about a quarter, so what remains is purely the memory multiple | Decide whether the fork and reactive paths should share one verdict strength. That is a product decision about correctness posture, not a refactor, and it belongs to whoever opens it deliberately |
1413
| The boot snapshot is made on the main thread | Booting a pool does not block the page | `_makeSnapshot` boots a whole extra Pyodide on the main thread and copies the snapshot into a SharedArrayBuffer, so pool creation carries one main-thread long task plus a global engine load. Moving it into a dedicated worker would remove both, but the worker kernel header records a measured fact that forbids assuming it is equivalent: a main kernel and a worker kernel do not replay to the same bytes | Measure first: prove a snapshot made in a worker is byte-identical to one made on the main thread, in `tests/attempts/runtimeParity`. Only then move it |
1514
| The global patch window costs boot concurrency | Two machines boot independently | The default boot always carries a core trust anchor, so it always opens the core-asset cache window, and that window is a single tab-wide chain because it swaps `globalThis.fetch`. Two concurrent `boot()` calls therefore overlap only partially: the browser gate measures 1.59x the single-boot wall clock for two at once (2.0x would be fully serial, 1.0x fully parallel). The window is not removable as-is - it exists because two concurrent global swaps restore each other's patch - so the cost is a property of the fetch-interception design, not a defect to patch away | Either intercept core-asset fetches without a global swap (an engine-level loader hook), or accept the cost and keep it measured. The gate records the ratio on every run so a regression toward 2.0x is visible |

mainPlan/agentBrowserLoop/README.md

Lines changed: 0 additions & 41 deletions
This file was deleted.

0 commit comments

Comments
 (0)