SEIF Docs

ADR 001 — Native desktop, canonical processes

Accepted 2026-10-08. The product is a new C#/.NET 10/Avalonia 11 desktop instrument. No Desktop UI dependency.

Criterion.NET / AvaloniaTauri / TypeScriptElectron
macOS, Windows, LinuxNative platform backends, shared controlsWKWebView/WebView2/WebKitGTK, platform rendering differencesShared Chromium, all three
Visual fidelityCustom native styles, vector drawing, splittersCSS/SVG excellent, browser differencesCSS/SVG excellent
Canvas / mixer / timelineSkia drawing, native input, virtual listsSVG/canvas, web pointer inputSVG/canvas, web pointer input
PackagingSelf-contained .app; no host .NET requirement.app and installers built by RustChromium/Node bundle
TestingCore xUnit + Avalonia headless + actual window dogfoodWeb E2E mature; native host tests separatelyMature renderer E2E
Processes / IPCTyped ProcessStartInfo and JSON streamsRust commands and sidecarsNode main-process IPC
SEIF reuseCLI boundary; public Application exports in narrow Node helperSame supported boundariesSame supported boundaries
ErgonomicsStrong C# state/control model; additional adapter processCSS ergonomics, additional Rust toolchainExisting ecosystem, larger runtime
Footprint.NET/Skia plus canonical CLI and narrow Node helperSmall shell, same required canonical sidecarsAdditional Chromium distribution

Avalonia is preferred because its resizable native control surfaces and custom canvas serve a desktop instrument well. Cross-language integration is not a reason to port authority. Tauri is a viable alternate but adds a Rust host and varying browser engines; Electron has no evidence strong enough to justify its extra browser runtime here. The host had .NET 6 only, so a project-local .NET 10 SDK was installed. Avalonia 11.3.22 is pinned for its stable desktop/headless API.

Process boundaries: Avalonia owns presentation, desired disclosure intent, local navigation and ephemeral observation history. A pinned Go CLI owns Workspace resolution, ProductMotor, disclosure composition, source expansion, ProductOperation qualification, admission, effect, receipts and postconditions. A narrow Node process loads the existing public Application resource-preview and proposal-acceptance exports; no copied rules. Credentials remain in canonical process configuration. Only structured arguments are sent; no shell interpreter.

Focus in Context Entry controls disclosure and does not change canonical selection. Mixer explicitly exposes both desired participation and Product selection. Working Context is the bounded disclosure plus source observations acquired through canonical expansion; it is ephemeral, never a new durable Product entity. Layout, graph coordinates and history are presentation state.

References: Avalonia macOS, Avalonia headless, Tauri process model, Tauri distribution, Electron distribution. Current local operational sources are recorded in docs/research/source-estate.json.