Skip to content

Commit ea0ebb2

Browse files
committed
docs: record Windows spike failure, document WSL2 path, update plan status
- ADR §6: spike evidence (Swift 6.3.3 on windows-latest cannot compile hello-world; DLL split across install trees); native Windows deferred behind a revisit trigger; WSL2/Docker stays the supported path - README: concrete WSL2 + Docker Desktop instructions for Windows users - PLAN.md: step statuses updated
1 parent 6f9a27d commit ea0ebb2

3 files changed

Lines changed: 56 additions & 1 deletion

File tree

PLAN.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,17 @@ Linux host already uses. So Windows becomes a third engine adapter, not a rewrit
4949
We still test the ground truth first, with a spike (step 1 below). If the spike fails,
5050
we port only the shared core to Rust, never the whole product.
5151

52+
## Status
53+
54+
- Step 0: release #45 prepared (tag pushed; publish blocked only on Apple/npm
55+
secrets). Docs debt #53 closed.
56+
- Step 1: spike ran on real Windows runners and **failed** — Swift-for-Windows
57+
cannot even compile hello-world today. Evidence in architecture decision §6.
58+
- Step 2: adapter is off the table. Native Windows is deferred behind a
59+
revisit trigger; WSL2/Docker is the supported Windows path.
60+
- Step 3: WSL2 install documented in README; macOS/Linux packaging already
61+
shipped in the E-series work.
62+
5263
## The plan
5364

5465
```

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,25 @@ installer that checks Chromium and FFmpeg before copying the binaries. The
218218
Docker image is the supported self-contained Linux runtime and uses Debian's
219219
Chromium binary at `/usr/lib/chromium/chromium`.
220220

221+
### Windows (WSL2)
222+
223+
There is no native Windows build; the Swift toolchain cannot currently compile
224+
the core for Windows (see architecture decision §6). Run Headless inside
225+
WSL2 instead:
226+
227+
```powershell
228+
wsl --install -d Ubuntu
229+
```
230+
231+
Then, inside WSL2, follow the Linux install above. Chromium and FFmpeg come
232+
from `apt` (`sudo apt install chromium ffmpeg`). Alternatively, run the
233+
published GHCR image under Docker Desktop:
234+
235+
```sh
236+
docker run --shm-size=1g ghcr.io/lockintime/headless:latest headless --version
237+
```
238+
239+
221240
### npm / npx
222241

223242
JavaScript-based agent harnesses can run the verified launcher without a

docs/roadmap/architecture-decisions.md

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,31 @@ the only remote story. A hosted service is out of scope for this roadmap
159159
- **Interim answer (Phase 3):** published Docker image + WSL2 documented as
160160
the supported Windows path.
161161

162+
**Update — 2026-08-22, Swift-for-Windows spike failed.** Per PLAN.md step 1,
163+
we attempted to build the shared core with Swift 6.3.3 for
164+
x86_64-unknown-windows-msvc on a real `windows-latest` runner
165+
(workflow: `.github/workflows/windows-spike.yml`, branch
166+
`spike/windows-core`; run logs preserved there). Findings:
167+
168+
1. Cross-compilation from Linux is not possible; Swift SDK bundles target
169+
Linux and WebAssembly only.
170+
2. The winget toolchain is broken out of the box: runtime DLLs are split
171+
across two install trees (`Toolchains\6.3.3+Asserts\usr` and
172+
`Runtimes\6.3.3\usr`). `swift.exe` exits `STATUS_DLL_NOT_FOUND` until the
173+
trees are merged by hand.
174+
3. After repair, no Swift code compiles: even `swiftc hello.swift` fails with
175+
"unable to load standard library for target x86_64-unknown-windows-msvc",
176+
both via SPM and direct `swiftc`. Suspected cause is the `+Asserts`
177+
toolchain packaged against a non-asserts runtime, or missing stdlib
178+
modules in the package.
179+
180+
Consequence: the "portable already" claim above does not hold on today's
181+
toolchain, so a Windows engine adapter written in Swift is not viable.
182+
WSL2/Docker remains the only supported Windows path. A native Windows host
183+
requires either a materially better Swift-for-Windows toolchain or a scoped
184+
Rust port of the shared core; revisit only when native Windows becomes an
185+
actual product requirement, and record a new decision entry first.
186+
162187
## 7. macOS engine: keep WKWebView as the visible-browser experience
163188

164189
**Decision:** keep the WKWebView host as macOS's default engine. It is the
@@ -422,7 +447,7 @@ credentials.
422447
| 1 | Keep Swift core; Rust only via revisit trigger | Decided | 2026-08-04 |
423448
| 3 | Extract HostCore + BrowserEngine, typed errors | Implemented | 2026-08-10 |
424449
| 5 | Remote stays SSH-only; no cloud offering | Decided (owner) | 2026-08-04 |
425-
| 6 | Windows = stretch via Chromium engine; WSL2/Docker interim | Decided (owner) | 2026-08-04 |
450+
| 6 | Windows = stretch via Chromium engine; WSL2/Docker interim | Decided (owner); spike failed 2026-08-22, native deferred | 2026-08-04 |
426451
| 8 | Real CDP input on Linux as capability upgrade | Implemented | 2026-08-13 |
427452
| 12 | Version unification on git tag | Implemented | 2026-08-04 |
428453
| 14 | Run one conformance scenario against every engine | Implemented | 2026-08-10 |

0 commit comments

Comments
 (0)