Kayshen-X
05aa7b7d1b
build(step-1b): add tools/fetch-skia-artifact.sh (Variant A release path)
...
Codex P0 mini-gate Round 3 BLOCK fix: P0.2 plan calls for
tools/fetch-skia-artifact.sh, and Phase A CI step invokes it before
measuring bundle size — but the script did not exist in the OP repo.
Phase A cannot start without it.
Variant A (GitHub release asset) selected per probe notes §3.1
"Artifact Distribution Strategy": <1 MB gzip, free hosting, no extra
git-lfs setup overhead.
Behavior:
exit 0 artifact present and SHA matches OR no release pinned yet
(Phase E will publish; dev loop uses skia-bindings from-source)
exit 1 artifact present but SHA mismatched, or fetch failed after
a download attempt
Phase E will overwrite RELEASE_TAG / RELEASE_FILE / EXPECTED_SHA256
constants with the published release asset metadata. Until then dev
builds run skia-bindings from source (no fetch needed).
Smoke run: `bash tools/fetch-skia-artifact.sh` →
"no release tag pinned yet — Phase E will publish; dev builds use
skia-bindings from-source path" + exit 0.
2026-05-09 09:29:53 +08:00
Kayshen-X
543f556cdf
feat(shell-native): Step 1a Task 4 — basic_window demo + acceptance + Phase C Gate
...
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.
2026-05-05 22:39:00 +08:00
Kayshen-X
c55807e432
ci: remove TS/Electron workflows (build-electron / ci / docker / publish-cli)
...
Rust-ification 阶段,CI 只保留 Rust 相关:
- rust-check.yml: cargo fmt + build + test (with STEP1A_REQUIRE_GPU=1 on Linux) + clippy + cargo-deny
- wasm-bundle-check.yml: wasm32 target check
删除:
- build-electron.yml: Electron desktop build (Rust 化后用 openpencil-shell-native)
- ci.yml: TS type-check + Vitest + web build (Rust 化后已废)
- docker.yml: TS Docker image (Rust 化后重做)
- publish-cli.yml: npm packages (Rust 化后改 cargo publish)
2026-05-05 22:09:00 +08:00
Kayshen-X
c9aaa0efc4
feat(shell-native): Step 1a Task 4 — basic_window demo + acceptance + Phase C Gate
...
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.
2026-05-05 21:51:00 +08:00
Kayshen-X
22003f9b0c
chore(shell-native): add transient P0 probe gate (Step 1a)
...
Drives the three-OS CI matrix verification of the skia-safe + glutin +
glow + winit dep stack per Step 1a spec §7.
- examples/p0_probe.rs: stencil_visibility + readback chain runner (must
own a real OS main thread because winit on macOS rejects
EventLoop::new() from cargo test worker threads).
- tests/p0_probe.rs: subprocess-invoke wrapper, gated
#[ignore = "P0_PROBE_GATE"] so default cargo test stays untouched.
- Cargo.toml: add transient [target.'cfg(not(target_arch = "wasm32"))'.
dev-dependencies] block (skia-safe 0.97 + glutin 0.32.3 + glutin-winit
0.5.0 + glow 0.17.0 + raw-window-handle 0.6.2 + scopeguard 1.2.0 +
winit defaults). Pinned to versions resolved in /tmp/skia-glow-probe.
- .github/workflows/rust-check.yml: install Linux GL prereqs (xvfb,
mesa, libxkbcommon, libwayland) and add a P0-probe-gate step running
cargo test --ignored on each OS (Linux through xvfb-run; Windows
early-returns per spec §8.2 WINDOWS_GPU_DEFERRED_NO_RUNNER).
All three artefacts are TRANSIENT — reverted in a follow-up cleanup
commit after CI is green and the loader-compat notes commit lands.
Task 1 owns the permanent integration.
2026-05-05 12:23:49 +08:00
Kayshen-X
e4dd3d7b37
feat(shell-native): Step 1a Task 4 — basic_window demo + acceptance + Phase C Gate
...
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.
2026-05-05 12:23:43 +08:00
Kayshen-X
d5011547f1
ci: remove TS/Electron workflows (build-electron / ci / docker / publish-cli)
...
Rust-ification 阶段,CI 只保留 Rust 相关:
- rust-check.yml: cargo fmt + build + test (with STEP1A_REQUIRE_GPU=1 on Linux) + clippy + cargo-deny
- wasm-bundle-check.yml: wasm32 target check
删除:
- build-electron.yml: Electron desktop build (Rust 化后用 openpencil-shell-native)
- ci.yml: TS type-check + Vitest + web build (Rust 化后已废)
- docker.yml: TS Docker image (Rust 化后重做)
- publish-cli.yml: npm packages (Rust 化后改 cargo publish)
2026-05-05 12:23:33 +08:00
Kayshen-X
e66e8aefcc
feat(shell-native): Step 1a Task 4 — basic_window demo + acceptance + Phase C Gate
...
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.
2026-05-05 12:23:27 +08:00