Reference: Multi-Platform Build Flows¶
This page is the Diataxis reference entry for the current multi-platform build matrix that underpins the Git LFS migration.
Canonical Source¶
What This Reference Covers¶
- source web build and explicit full-graph build behavior
- desktop Tauri dev/bundle flow and sidecar ownership
- Android Capacitor packaging flow
- Android Tauri native runtime/build flow
- GitHub Release, npm publish, and docs-site delivery pipelines
Current High-Signal Conclusions¶
- The default source build contract is runtime-first.
- Explicit full-mode remains supported, and Tauri full bundles now preserve that mode through
beforeBuildCommand. - Desktop bundles still treat sidecar binaries as a separate bootstrap concern.
- Mobile packaging and mobile runtime capability must be evaluated separately.
- Docs and npm publish pipelines are already compatible with the current no-new-LFS direction.
- Release smoke on 2026-04-08 already proved the workflow can cold-create and seed the project-controlled
godot-mirror-v4.3-stabletag before desktop bundle jobs run. - The current release workflow now pins the mirrored Windows, Linux, and macOS Godot archives with fixed SHA256 values before use.
- The same release workflow now exposes
allow_godot_upstream_fallbackso mirror-only smoke runs can disable upstream fallback without changing the default release path. - A non-blocking release-governance risk remains: GitHub Actions currently warns that
actions/upload-artifact@v4andsoftprops/action-gh-release@v2are still Node 20-targeted.
Use This Reference When¶
- deciding whether a migration item is safe across desktop, mobile, publish, and release surfaces
- checking whether a build command is runtime-first or explicit full-mode
- verifying whether a platform still depends on repo-head LFS assets
Related Docs¶
Mobile Slim Contract (2026-08-17)¶
mobile-slim is now a real packaging profile, not only an export label.
npm run mobile:prepare:slimbuilds the runtime-first frontend, stages onlydist/mobile-slim/frontend, removes generated graph payloads, desktop-only Mermaid/GPU assets, SVG files, model files, and binary sidecars, then emitsdist/mobile-slim/mobile-slim-manifest.json.- The same staged directory is consumed by Capacitor through
NOTE_CONNECTION_MOBILE_WEB_DIRand by Tauri Android throughsrc-tauri/tauri.android.conf.json. Tauri Android no longer builds a Node sidecar on the slim path. - The mobile runtime loads the local
graph_data.jsonthrough the storage boundary and exposes bounded exact lookup, neighbor inspection, and directed shortest-path operations throughqueryKnowledgeBaseExact()andfindKnowledgePath(). The analyzer retains projected node metadata, not document bodies. mobile-slimdeclares local ingest and exact query as available, remote inference as optional, SVG materialization as unsupported, a 25 MiB estimated compressed asset gate, and a 256 MiB low-memory RSS gate.- The static verifier reports estimated ZIP-deflate bytes and fails on forbidden artifacts. RSS is
not-measureduntil a device evidence JSON is supplied; a passing static gate is not a device acceptance claim. - Godot Pathmode is an extended opt-in (
NOTE_CONNECTION_ANDROID_INCLUDE_GODOT_PATHMODE=1). The default Android runner disables generated Godot bridge files, dependency declarations, andpath_modeassets so stale generated scaffolds cannot silently inflate a slim build.
This slice intentionally does not claim mobile-local LLM parity or SQLite persistence. The current mobile projection is an exact in-memory index over a bounded local graph; SQLite-backed persistence and full agent conversation parity remain subsequent phases with separate contracts.
Storage Provider Resolution (2026-09-02)¶
SQLite functionality remains enabled for desktop/server runtimes. The Node sidecar targets Node 22 and requests the built-in node:sqlite adapter by default. When that module is unavailable, the graph store keeps the existing file-backed snapshot fallback and reports requestedProvider=sqlite, resolvedProvider=file, and fallbackReason=sqlite_runtime_unavailable; it never labels the fallback as an embedded SQLite store.
Mobile packaging remains sidecar-free. Tauri Android and Capacitor resolve storage to the bounded projection provider (graph_data.json plus the exact analyzer), even if stale or manually supplied capability data claims SQLite. Their runtime contract reports supports_sqlite=false, supports_projection=true, and an explicit native_sqlite_runtime_unavailable reason. The projection schema and query semantics remain shared with desktop replay fixtures.
The frontend first consumes host capability data, then refreshes desktop resolution from /api/knowledge/store-diagnostics when a sidecar is available. This separates platform capability from the authoritative store resolution and keeps old storageEngine diagnostics backward-compatible. SQLite/WASM promotion on mobile remains gated by signed arm64 process-death, SAF, RSS, and package-size evidence.
Sidecar Freshness (2026-09-03)¶
Host sidecar reuse is content-verified rather than timestamp-only. A successful build-sidecar.js run writes .noteconnection-sidecar-build-manifest.json under the ignored src-tauri/bin directory. ensure-sidecar-ready.js compares the manifest digest over dist/src and build inputs, verifies that the current host binary is listed, and rebuilds when the manifest is absent, stale, unreadable, or from another target. This protects packaged SQLite behavior from clock skew, copied artifacts, and stale LFS binaries without rebuilding on every startup when the inputs are unchanged.