pcbjam/docs
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Gergő Törcsvári 80468e7c5b
Phase B: main-thread sleep parks its context; the real D blocker is DOM entries
wasm/shims/context_sleep.cpp: a main-thread nanosleep whose frame stands on a
scheduler context that OWNS the stack arms a mailbox wake and yield_parks that
context instead of suspending the stack in place. It lives in the sleep
primitive rather than in tool_manager.cpp on purpose - KiCad and the wx core
stay untouched (CLAUDE.md's fork rule) and the whole K7 class moves at once,
not just TOOL_MANAGER::RunSynchronousAction's spin loop.

MEASURED AT D-ON, and it is NOT what unblocks Phase D. The four canvas-tool
specs still fail, but the trace now names a different cause: the fatal swap is
old=<libcontext ROOT> new=<tool coroutine> with mouseEventHandlerFunc above it
- a DOM mouse handler entering wasm DIRECTLY on the main stack, bypassing the
tick. So one coroutine is entered two ways: by the tick through the dispatch
context as a STAR TRANSFER, and by DOM handlers as a DIRECT SYMMETRIC SWAP. A
capture written by one path cannot be rewound by the other -> index out of
bounds in doRewind. That is section 7 rule 5 (partial migration is worse than
none) in its purest measured form, and it is why the harness stays green: its
coroutines are only ever entered from one place.

So the next increment is the DOM event entries (mouse/key/wheel/resize must
hand their events to the dispatch context as the tick does), not another park
site. It subsumes the one-root work too: with no dispatch on the main stack,
resolve_root_identity() always answers "the running context".

Landing state: STAR_DISPATCH=0, kicad 139 passed / 1 (pre-existing occ-probe)
= baseline, with the sleep shim in and inert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LBjomQfKyRa3jBdeAKpmTw
2026-08-10 10:14:19 +02:00
..
debugging docs: ✏️ cleanup and organize docs 2026-06-05 12:16:13 +02:00
features Phase B: main-thread sleep parks its context; the real D blocker is DOM entries 2026-08-10 10:14:19 +02:00
research docs: ✏️ cleanup and organize docs 2026-06-05 12:16:13 +02:00
build.md refactor: collapse dual-mode plumbing — the DOM port is the only WASM build 2026-06-12 20:19:48 +02:00
ci-build-slowness-findings.md docs: CI build perf findings + parked wasm-exceptions experiment 2026-06-11 07:50:57 +02:00
README.md docs: ✏️ cleanup and organize docs 2026-06-05 12:16:13 +02:00
wasm-exceptions-experiment.md feat(wasm-eh): migrate the WASM build to native wasm exceptions (+ 3D viewer default-on) 2026-06-30 09:40:26 +02:00

Documentation Map

A central index of the documentation in this repo. The goal of the project is to build KiCad with WASM and run it in a browser.

Note: per-area README.md files stay next to the code they describe (they're linked below). Cross-cutting guides live under docs/. Per-feature design notes live under features/.

Start here

  • Project README — overview, prerequisites, quick start, project structure
  • CLAUDE.md — project/agent context and contribution conventions

Build

  • docs/build.md — Docker-based KiCad WASM build system (two-phase build, outputs, memory)
  • docker/README.md — Docker build environment, branch-specific containers, troubleshooting
  • wasm/README.md — WASM compatibility layer (overrides/shims without patching KiCad)

Debugging & Asyncify

Architecture

  • wasm/README.md — WASM compatibility layer structure
  • web/README.md — web app (create/open KiCad projects), tech stack, URL routing, WASM artifact serving

Testing

Feature design docs

Per-feature design notes and porting records live under features/:

Archived / historical

features/archive/ holds docs whose work is done or superseded (each carries a status banner):

  • webgl — WebGL-GAL strategy/plan (since implemented in kicad/common/gal/webgl/)
  • ipc-api — IPC-API guard cleanup TODO (revert not yet actioned)