Phase C Task 4 closes Step 1a (G1 shared Skia context) on v0.8.0:
- crates/openpencil-shell-native/examples/basic_window.rs:
winit + SharedSkiaContext::new_desktop + NativeBackend (Jian DrawOp)
+ JianPointerMapper integration. Paints chrome rect + "Hello 你好"
+ box outline; close → idempotent teardown. Demonstrates Phase B
Task 3 winit → Jian PointerTranslator → JianPointerMapper →
ShellEvent pipeline end-to-end.
- crates/openpencil-shell-native/notes/step-1a-{macos,linux,windows}-manual-smoke.md:
manual GPU smoke runbooks for spec §1.2 acceptance #1 (macOS PASS
recorded; Linux/Windows pending real-hardware run, deferred per
CONCERN-R5-1 + WINDOWS_GPU_DEFERRED_NO_RUNNER).
- tools/check-jian-boundaries.sh: spec §11 + §12.3 invariants.
Verifies that openpencil-app has no direct jian-* dep, mobile
(aarch64-linux-android, aarch64-apple-ios) and wasm32 closures
exclude jian-host-desktop / jian-skia, and openpencil-shell-web
declares no jian-host-desktop dep at the manifest level.
- .github/workflows/rust-check.yml: wires bash tools/check-jian-boundaries.sh
on Linux runner with mobile + wasm32 targets installed.
- README.md: roadmap entry for the Step 1a milestone.
Verified locally on macOS aarch64:
- cargo fmt --all -- --check
- cargo clippy --workspace --all-targets -- -D warnings
- cargo build --examples --workspace
- cargo test --workspace (38 PASS, 0 FAIL, 0 IGNORED)
- cargo check -p openpencil-shell-native --target {aarch64-linux-android, aarch64-apple-ios}
- bash tools/check-jian-boundaries.sh (4 invariants PASS)
- spec §11 invariants 1–4 grep checks PASS
Spec v19.3 FROZEN (openpencil-docs 651090d); Plan v7 FROZEN.
vendor/jian pinned at c4a794dc.
1.9 KiB
1.9 KiB
Step 1a Windows manual GPU smoke (per spec v19 §8.1)
Status: PENDING — to be filled by a maintainer running on a Windows desktop with a real GL driver.
The standard GitHub Actions windows-latest runner has no GPU driver
(WINDOWS_GPU_DEFERRED_NO_RUNNER), so spec v19 §8.1 requires the
following sequence to be exercised by a human on real hardware before
Step 1a can be declared "live on Windows".
Prerequisites
- Windows 10/11 (x86_64 or aarch64) with a working OpenGL 3.3+ driver (default factory drivers on most modern GPUs satisfy this).
- Rust toolchain 1.85 (via
rustup toolchain install 1.85). - Submodules checked out (
git submodule update --init --recursive) sovendor/jianis atc4a794dc(Step 1a freeze).
Required commands
cargo run -p openpencil-shell-native --example basic_window
cargo test -p openpencil-shell-native --test gpu_smoke -- --include-ignored gpu_smoke
cargo test -p openpencil-shell-native --test gpu_chrome_stub_composition -- --include-ignored gpu_chrome_stub_composition
Expected outcomes
basic_windowopens an 800x600 window showing:- White background.
- Red filled rect at
(50, 50) — 100x100(chrome). - Black
Hello 你好text at(50, 200)(chrome via Jian skia textlayout). - Blue stroked rect outline at
(200, 50) — 200x150. - Closing the window exits cleanly (no panic, no driver complaint in the console).
gpu_smoke(#[ignore]'d on Windows byWINDOWS_GPU_DEFERRED_NO_RUNNER) passes when run with--include-ignoredon a real-GPU host.gpu_chrome_stub_compositionlikewise passes — chrome pixel reads back red even afterCanvasViewportStub::render_intopollutesSTENCIL_TESTandBlendFunc(ONE, ZERO).
Where to record results
Append the run date, Windows build, GPU/driver, and output excerpt to
this file (replacing the Status: PENDING line) and commit on
v0.8.0 with docs(shell-native): record Windows manual GPU smoke.