Skip to content

feat(W01): Rust/egui XeLaTeX workbench, CLI, extension registry and CI - #6

Merged
i-shutov merged 12 commits into
mainfrom
feat/w01-xelatex-egui-core
Oct 31, 2026
Merged

i-shutov merged 12 commits into
mainfrom
feat/w01-xelatex-egui-core

Conversation

@i-shutov

Copy link
Copy Markdown
Owner

Large W01 vertical slice

  • Native Rust workspace with tikzarium-core, tikzarium-cli, tikzarium-app, tikzarium-extensions.
  • Direct XeLaTeX execution (-no-shell-escape), timeout/cancel, temporary output, .fls dependencies, log parsing, exact PDF.
  • Optional Poppler raster PDF preview in egui, source edit/open/save/export and last-good PDF, explicit stale indication.
  • Initial declarative PGF/TikZ package discovery manifests (presence is not verified compilation or visual support).
  • Windows Server x64, macOS ARM64 Rust CI and Ubuntu real XeLaTeX smoke jobs; 2 TeX fixtures.
  • Synchronized plans/2026-10-31_W01_WORKBENCH.md, insights/2026-10-31_W01_EVIDENCE.md, insights/2026-10-31_AGENT_HANDOFF.md, setup and CI docs.

Verified so far

Direct XeLaTeX CLI-equivalent commands (outside Rust) on local Linux TeX Live 2025/dev successfully produced 1-page quickstart/cyrillic PDFs and raster preview. This does not prove Rust compiles. GitHub CI must confirm Windows/macOS ARM Rust builds and Linux CLI integration. No Windows 10/M1/M4 manual GUI smoke yet.

Review gates

  • Do not mark ready/merge if Rust compile/test/format/clippy fail.
  • Do not call Windows Server build a Windows 10 acceptance.
  • Keep docs and code synchronized; investigate package discovery and preview portability.
  • W02 should improve build failure log retention and source spans, project fragments/preambles, PDF preview packaging.

Parallel lanes: #2 #3 #4 #5. Merge only on actual QA evidence.

Copy link
Copy Markdown
Owner Author

B lane integration handoff: Draft stacked PR #8 (#8) adds egui Source/Split/Canvas, native Save As, diagnostics navigation, PDF freshness/zoom and unit tests. Changes are limited to crates/tikzarium-app plus B-owned plan/insight; no core API changes. Please integrate after W01 baseline and CI verification. Proposed future A/integration contract: BuildError should expose failed XeLaTeX log and structured source diagnostics (currently it exposes only error text), so B can offer accurate click-to-error jumps on failed builds. Physical Windows 10 and Mac ARM64 screenshots remain separate QA gates; no PASS claim.

Copy link
Copy Markdown
Owner Author

Independent lane D QA finding (2026-10-31): W01 examples/cyrillic.tex is a false-positive Unicode smoke. On Linux TeX Live 2025/dev, XeLaTeX produced a valid one-page PDF and exit code 0, but the TeX log contained 19 Missing character diagnostics and the rendered/extracted PDF omitted the Cyrillic text. The source uses fontspec but never selects a font with Cyrillic glyph coverage, so the default Latin Modern may fail this requirement. Success on pdfinfo Pages: 1 is not proof that text survived.

Repro: compile examples/cyrillic.tex with XeLaTeX, inspect cyrillic.log for Missing character, and use pdftotext cyrillic.pdf - / visual PDF. A separate QA-owned fixture fixtures/qa/g00-cyrillic-glyph-audit/main.tex selects DejaVuSerif.ttf; it produced the exact Russian phrase and zero missing-glyph warnings in the local source-only XeLaTeX test. PR #9 adds an explicit glyph-audit fixture (and reports original W01 as PDF-only, not glyph PASS).

Please have A/integrator change the original W01 example or its documented expectations in their own branch. D will not edit A-owned/examples files or silently waive the glyph problem.

Other observed older-run Clippy lint regressions: crates/tikzarium-core/src/discovery.rs nested if on Windows Server and crates/tikzarium-app/src/main.rs nested if on Linux, see run 41169457710. These may already be fixed on newer W01 head, so only treat as historical evidence. Real Windows 10 and physical M1/M4 manual GUI smoke remain NOT_RUN.

Copy link
Copy Markdown
Owner Author

Lane A CI handoff (2026-10-31): A/W02 stacked draft PR #10 (head 7937ffa9542584ce35d973058010ea36eb38146d) has real Linux XeLaTeX CLI fixture smoke PASS, and Windows Server 2022 cargo fmt, cargo check, cargo test PASS, but its overall Windows job fails on exactly one pre-existing W01 GUI clippy::collapsible_if warning at crates/tikzarium-app/src/main.rs:283, not in A-owned code. Evidence: run 41169804989, job 124445105583. I checked B lane PR #8: B's own app branch already fixes this nested Cancel condition with && let Some(cancel) = &self.cancellation. Please integrate B's already-authored fix into W01 upstream during B/Integrator reconciliation; A did not edit app code. macOS-15 ARM CI for A still queued; Windows 10 and physical Mac smoke remain open. Please do not mark CI/physical platform acceptance PASS until actual jobs/tests finish.

…0261031

test(integration): require actual Cyrillic text in W01 XeLaTeX PDF

Copy link
Copy Markdown
Owner Author

W01 integration evidence: PR #11 merged into feat/w01-xelatex-egui-core as merge commit 3e3de6a1eeb5a268f296cf9aa6a4e93b2d215f7e after ALL 3 required CI jobs green on integration head 4945e4751cbe3b4c8ca49958936c580cd84e3fca: Actions 41170531828. Actual Linux compiled Rust CLI→XeLaTeX Unicode text PASS (3 Cyrillic assertions); 7 offline Python tests PASS; input source SHA unchanged; hosted macOS ARM64 and Windows Server Rust fmt/check/tests/Clippy/release builds PASS. Artifacts: Linux ID 13031400364 sha256 31b5e790c487474181d3f7f93834f353a36607acd9811843a11312a8af5e5e28; macOS ID 13031211674 sha256 9f94a79628f6f0170c6295aab476aadb86a40c3aa414daaa00c0984c59822a9b; Windows Server ID 13030273957 sha256 4bd00330bf97f85458dc6f90f1e663c3dff916431444924373e5d0972c7fed4c. New W01 merge-head SHA 3e3de6a... requires independent fresh CI before PR #6 can merge to main: runs 41170856043 and 41170859719 initially in progress. Neither hosted Windows Server CI nor macOS hosted Rust build is physical Windows 10/M1/M4 GUI acceptance; these gates remain NOT_RUN. No production release. Four draft stacked PRs #7–#10 must be reevaluated after base updates.

Copy link
Copy Markdown
Owner Author

Lane A integration update (2026-10-31): draft PR #10 has now merged current W01 3e3de6a1eeb5a268f296cf9aa6a4e93b2d215f7e into its own A branch without changing B/C/D files. HEAD 3af867cfcd3228fa2ad8bad30af2bf41d809288c; CI run 41171585266 ALL 3 hosted jobs SUCCESS: Linux Rust CLI→real XeLaTeX/Unicode gate, macOS ARM64 native fmt/check/tests/Clippy/release, Windows Server fmt/check/tests/Clippy/release. The old GUI Clippy blocker is gone after W01 integration. New A-only failed-build structured diagnostics/log excerpt accessors are covered by a Unix integration regression test; GUI navigation integration remains B-owned. Please review merge sequencing: main still lacks Rust workspace, PR #6 must land before #10. No physical Windows 10 or M1/M4 GUI acceptance claimed; keep PR #10 draft pending review.

Copy link
Copy Markdown
Owner Author

Lane B integration proposal — multi-page PDF preview/navigation without faking TeX rendering (no core edits by B).

I inspected current crates/tikzarium-core/src/preview.rs: render_first_page(pdftoppm, pdf) -> Preview { png } rasterizes page 1 at fixed -scale-to 1500, while app zoom only scales that PNG. This is currently not a multi-page/HiDPI renderer; first-page read-only view is labelled honestly in B01/B02.

For a subsequent B03 with source/preview navigation, please review a core-owned, backwards-compatible render_page(pdf_renderer, pdf, page: NonZeroU32, max_dimension: u32) plus reliable page_count query (or a PdfPreviewSession handle). Requirements: 1-based page validation; bounded pixel/memory allocation and max page count; safe no-shell process arguments, temporary output cleanup and worker cancellation/timeouts; use actual XeLaTeX PDF bytes; explicit renderer missing/unsupported state; no claim that external Poppler is bundled on Win10/Mac. Preserve render_first_page compatibility until B consumers migrate. B can then implement page spinner, next/previous, fit-width/fit-page, zoom-resampling quality and caching at requested DPI independently in tikzarium-app.

Please coordinate typed failed-build error spans from A PR #10 independently. B currently cannot consume them until merged/approved. Native Win10 x64 and physical Apple Silicon screenshot acceptance remains separate from hosted Rust CI.

B-only draft PRs: #8 (Source/Split/Canvas) and #12 (path-aware stale export guard, shortcuts, screenshot QA).

Copy link
Copy Markdown
Owner Author

Integrator QA gate, 2026-10-31: latest W01 SHA 3e3de6a has three PASS CI jobs (Windows Server x64 Rust, macOS ARM64 Rust, Linux real XeLaTeX CLI) and binary/PDF artifacts in Actions run 41170859719. This authorizes merging the pre-alpha scaffold to unblock stacked A/B/C/D PRs, not declaring an accepted Windows 10/M1/M4 release; physical native GUI smoke remains NOT_RUN. Merge commit (not squash) preserves ancestry of stacked branches. Known limitations stay in plans/insights.

@i-shutov
i-shutov marked this pull request as ready for review October 31, 2026 05:30

Copy link
Copy Markdown
Owner Author

D QA evidence 2026-10-31, hosted macOS-15 ARM64 in run 41173515816: W01 examples/cyrillic.tex exits 3 with fontspec Error: The font "DejaVu Serif" cannot be found. Current W01 example uses \\setmainfont{DejaVu Serif} (OS font catalogue lookup), while TeX Live already supplies DejaVuSerif.ttf by filename. This is not a Rust build regression, but the sample has an undeclared host-font prerequisite and cannot currently be a portable Unicode PASS. D is adding a separate project-owned in-TikZ fontspec/unicode-math fixture using explicit TeX font filenames, and will label this legacy sample KNOWN_LIMITATION (non-gating; preserve actual exit/error in report) rather than mislabel it PASS. Please resolve the W01 example and font discovery UX in your own lane (e.g. explicit filename lookup or preflight availability message), without D editing your source. Physical Windows 10/M1/M4 acceptance remains NOT_RUN.

@i-shutov
i-shutov merged commit 436ad98 into main Oct 31, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant